# GOCARE algorithm requirements
## 1. Hàm thêm template
### - Mô tả:
Thêm một template auto-reply vào hệ thống
### - Định nghĩa hàm:
```dart=
bool addTemplate(Map<String, dynamic> data);
```
### - Input:
```dart=
data = {
"name": "Chẩn đoán COVID"
"content": "Chào {{vocative}} {{name}},\nVới thông tin mà {{vocative}} cung cấp, có thể {{vocative}} đã bị COVID.",
"triggers": [
{
"keyword": "sốt",
"priority": 4,
},
{
"keyword": "ho khan",
"priority": 6,
},
{
"keyword": "ho",
"priority": 4,
},
{
"keyword": "mất vị giác",
"priority": 9,
}
],
"arguments": [
"name",
"vocative"
],
"threshold": 15,
}
```
### - Output:
true/false: Thêm thành công hoặc thất bại
## 2. Hàm get response
### - Mô tả:
- Tìm kiếm template thỏa mãn với **message** (tin nhắn của khách hàng)
- Trả về `null` nếu không tìm thấy template nào thỏa mãn có điểm số >= ***threshold***
- Nhiều template cùng thỏa mãn thì trả về template có điểm cao nhất
### - Định nghĩa hàm:
```dart=
String? getResponse(String message, Map<String, dynamic> arguments);
```
### - Input:
```dart=
message = "toi gan day bi mat vi giac, va nhieu luc bi ho khan nua. bac si tu van giup toi voi"
arguments = {
"name": "Ngọc Ngô",
"gender": "male",
"age": null
}
```
### - Output:
```dart=
"Chào anh Ngọc Ngô,\nVới thông tin mà anh cung cấp, có thể anh đã bị COVID."
```
### - Quy tắc tính điểm:
- Chứa keyword nào thì cộng priority vào
- Nếu tồn tại 2 keyword chứa nhau (***ho khan*** và ***ho***) thì chỉ tính keyword có priority lớn hơn
- Ở mức demo:
- chưa phân biệt hoa/thường, có dấu/không dấu => chuyển về thường & không dấu
- chưa tính dựa trên số lượng của 1 từ khóa (chỉ tính tồn tại)
-
## 3. Hàm specify argument
### - Mô tả:
Xác định giá trị cho một argument từ các argument khác
Ở mức demo: Hàm do hệ thống implement cứng, không cho doanh nghiệp tùy chỉnh. Có thể dùng if-else, hoặc switch-case, hoặc xử lý bằng cấu trúc dữ liệu (càng tốt)
### - Định nghĩa hàm:
```dart=
String? specifyArgument(String neededKey, Map<String, dynamic> arguments);
```
### - Input:
```dart=
neededKey = "vocative"
arguments = {
"name": "Ngọc Ngô",
"gender": "male"
}
```
### - Output:
```dart=
anh
```