# 個案管理
## 個案管理
### (OK) 新增個案
Request:
POST /case
Payload:
```json=
{
"username": "帳號(證件號碼) <string>",
"name": "使用者名稱(姓名) <string>",
"userNumber": "企業員工編號 <string>",
"birthDate": "使用者生日 <string>", // birthDate Regex: ([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?
"department": "1001234 <number>",
"departmentName": "管理一部 <string>",
"height": "身高 <string>",
"gender": "性別 <string> enum: [ male | female | other | unknown ]",
"telecomEmail": "主要信箱 <string>",
"telecomSubEmail": "次要信箱 <string>",
"telecomPhone": "電話號碼 <string>",
"address": "地址 <string>",
"managingOrganization": "單位組織編號 <string>",
"nationality": "國籍 <string> 參考 ISO 3166-1 二位字母代號",
"diseaseHistory": [ //個人罹病史
{ "date": "2019", "description": "高血壓" },
...
],
"surgeryHistory": [ //個人開刀史
{ "date": "2019", "description": "脊椎...." },
...
],
"familyHistory": [
{
"id": "資料庫中caseid (若資料庫子存在此人時)帶入,非必填"
"username": "A123456789",
"name": "王大明",
"birthDate": "1866-01-01",
"title": "哥哥",
"liveWithFamily": false,
"diseaseHistory": "XX病、XX病 <string>",
"caseTypeList": [
{
"caseType": "收案別(case id)<number>",
"caseStatus": "收案狀態 (狀態id) <number>"
}
]
}
],
"caseTypeList": [
{
"receiveDate": "收案時間 <timestamp>",
"caseType": "收案別(case id)<number>",
"caseStatus": "收案狀態 (狀態id) <number>"
}
],
"active": true
}
```
Response (成功):
```json=
{
"success": true,
"data": {
"createdAt": "建立時間 <number, bigint>"
}
}
```
### (OK) 編輯個案
Request:
PUT /case/$id
Payload:
```json=
{
"username": "帳號(證件號碼) <string>",
"name": "使用者名稱(姓名) <string>",
"userNumber": "企業員工編號 <string>",
"birthDate": "使用者生日 <string>", // birthDate Regex: ([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?
"department": "1001234 <number>",
"departmentName": "管理一部 <string>",
"height": "身高 <string>",
"gender": "性別 <string> enum: [ male | female | other | unknown ]",
"telecomEmail": "主要信箱 <string>",
"telecomSubEmail": "次要信箱 <string>",
"telecomPhone": "電話號碼 <string>",
"address": "地址 <string>",
"managingOrganization": "單位組織編號 <string>",
"nationality": "國籍 <string> 參考 ISO 3166-1 二位字母代號",
"diseaseHistory": [ //個人罹病史
{ "date": "2019", "description": "高血壓" },
...
],
"surgeryHistory": [ //個人開刀史
{ "date": "2019", "description": "脊椎...." },
...
],
"familyHistory": [
{
"id": "資料庫中caseid (若資料庫子存在此人時)帶入,非必填"
"username": "A123456789",
"name": "王大明",
"birthDate": "1866-01-01",
"title": "哥哥",
"liveWithFamily": false,
"diseaseHistory": "XX病、XX病 <string>",
"caseTypeList": [
{
"caseType": "收案別(case id)<number>",
"caseStatus": "收案狀態 (狀態id) <number>"
}
]
}
],
"caseTypeList": [
{
"caseType": "收案別(case id)<number>",
"caseStatus": "收案狀態 (狀態id) <number>"
}
],
"active": true
}
```
Response (成功):
```json=
{
"success": true,
"data": [
"updatedAt": "更新時間 <number, bigint>"
]
}
```
### (OK) 移除個案
Request:
DEL /case/$id
Response (成功):
```json=
{
"success": true
}
```
### 停用/啟用個案
Request:
PUT /case/$id/activate
Payload:
```json=
{
"active": "是否啟用 <boolean>"
}
```
Response (成功):
```json=
{
"success": true
}
```
### (OK) 查看個案清單
Request:
GET /case?$queryParams
[Query Params:](Untitled%203/Query%20Params.csv)
| 欄位 | 型態 | IsRequired | 說明 |
|---|---|---|---|---|
name | string | false | Case name
gender | string | false | 'M' for male, other string for female
page | number | false |
sort | string | false | 'userNumber', 'name', 'gender', 'departmentName', 'managingOrganizationName'
desc | boolean | false |
Response (成功):
```json=
{
"success": true,
"data": [
{
"id": "個案使用者編號 <string>",
"username": "帳號(證件號碼) <string>",
"name": "使用者名稱 <string>",
"userNumber": "企業員工編號 <string>",
"birthDate": "使用者生日 <string>",
// birthDate Regex: ([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?
"gender": "性別 <string> enum: [ male | female | other | unknown ]",
"managingOrganizationName": "台大醫院",
"department": "1001234 <number>",
"departmentName": "業務一部 <string>",
"caseTypeList": [
{
"receiveDate": "收案時間 <timestamp>",
"caseType": "收案別(case id)<number>",
"caseStatus": "收案狀態 (狀態id) <number>"
}
],
"updateAt": "更新時間 <number, bigint>"
},
...
]
}
```
### (OK) 查看個案資料
Request:
GET /case/$id
Response (成功):
```json=
{
"success": true,
"data": [
{
"username": "帳號(證件號碼) <string>",
"name": "使用者名稱(姓名) <string>",
"userNumber": "企業員工編號 <string>",
"birthDate": "使用者生日 <string>", // birthDate Regex: ([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?
"department": "1001234 <number>",
"departmentName": "業務一部 <string>",
"height": "身高 <string>",
"gender": "性別 <string> enum: [ male | female | other | unknown ]",
"telecomEmail": "主要信箱 <string>",
"telecomSubEmail": "次要信箱 <string>",
"telecomPhone": "電話號碼 <string>",
"address": "地址 <string>",
"managingOrganizationId": "1",
"managingOrganizationName": "Wistron OWicare Test Organization",
"managingOrganizationType": "bus",
"nationality": "國籍 <string> 參考 ISO 3166-1 二位字母代號",
"diseaseHistory": [ //個人罹病史
{ "date": "2019", "description": "高血壓" },
...
],
"surgeryHistory": [ //個人開刀史
{ "date": "2019", "description": "脊椎...." },
...
],
"familyHistory": [
{
"id": "資料庫中caseid (若資料庫子存在此人時)帶入,非必填"
"username": "A123456789",
"name": "王大明",
"birthDate": "1866-01-01",
"title": "哥哥",
"liveWithFamily": false,
"diseaseHistory": [ //家庭罹病史
{ "date": "2019", "description": "高血壓" },
...
],
"caseTypeList": [
{
"caseType": "收案別(case id)<number>",
"caseStatus": "收案狀態 (狀態id) <number>"
}
]
}
],
"caseTypeList": [
{
"receiveDate": "收案時間 <timestamp>",
"caseType": "收案別(case id)<number>",
"caseStatus": "收案狀態 (狀態id) <number>"
}
],
"updateAt": "更新時間 <number, bigint>"
}
]
}
```
## (OK)查詢個案相關課程紀錄
Request:
GET /case/$uid/record
[Copy of Query Params:](Untitled%203/Copy%20of%20Query%20Params.csv)
Response (成功):
```json=
{
"success": true,
"total": 5,
"data": [
{
"lessonId": "課程班次編號 <number>",
"lessonStartedAt": "課程班次時間(timestamp) <string> ",
"lessonName": "課程班次名稱 <string>",
"courseId": "系列課程編號 <number>",
"courseName": "系列課程名稱 <string>",
"courseType": "系列課程類型 <number>",
"courseDuration": "持續時間 <number>",
"courseUnit": [
{
"unitId": "主題單元編號 <number>",
"unitName": "主題單元名稱 <string>",
"unitDuration": "持續時間 <number>",
"courseTraining": [
{
"trainingId": "訓練項目編號 <number>",
"trainingName": "訓練項目名稱 <string>",
"trainingDuration": "持續時間 <number>",
"trainingType": "復能",
"trainingEndType" : "高血壓",
"trainingEndStatus" : "第一期",
"currentLevel": { // 團體沒有等級問題
"target": "當前目標值 <number>",
"actual": "當前等級達成次數 <number>",
"rank": "當前等級 <number>",
},
"record": [
{
"id": "訓練紀錄 ID <number>",
"lessonId": "課程班次編號 <number>",
"recordDuration": "持續時間 <number>",
"recordActualValue": "實際值 <number>"
}
]
}
]
}
]
}
]
}
```
# 課程紀錄
## Schema
[課程紀錄 (CaseRecord)](Untitled%203/CaseRecord.csv)
## (OK) 新增課程訓練
Request:
POST /case/record
Payload:
傳送陣列則為批量新增
```json=
{
"record": [{
"actualValue": 100,
"type": 3,
"duration": 10,
"startedAt": 1595925005000,
"user": 3,
"course": 41,
"courseUnit": 8,
"courseTraining": 13,
"lesson": null,
"startDate": 1595925005000,
"endDate": 1595925005000
}
]
}
```
Response (成功):
```json=
{
"success": true,
"data": {
CaseRecord
}
}
```
## (OK) 編輯課程訓練
Request:
PUT /case/record/$id
Payload:
```json=
{
CaseRecord
}
```
Response (成功):
```json=
{
"success": true,
"data": {
CaseRecord
}
}
```
## (OK) 查詢課程訓練列表
Request:
GET /case/record?$queryParams
[Query Params:](Untitled%203/Query%20Params%201.csv)
Response (成功):
```json=
{
"success": true,
"total": 5,
"data": [
CaseRecord,
CaseRecord,
...
]
}
```
## (OK) 查詢課程訓練
Request:
GET /case/record/$id
Response (成功):
```json=
{
"success": true,
"data": {
CaseRecord
}
}
```
## (OK) 刪除課程訓練
Request:
DELETE /case/record/$id
Response (成功):
```json=
{
"success": true,
"data": {}
}
```
# 健康時間軸(上半)
Request:
GET /case/$id/timeline/legend
# 個人訓練表現監測
| 欄位 | 型態 | IsRequired | 說明 |
|---|---|---|---|---|
caseTypeId | number | true | 收案項目(目前僅需失智症與衰弱症)
patienId | number | false | 個案ID
type | number | true | 0:全部,1:復能,2:篩檢
time | string | true | last: 最近一次,first:首次,beforeLast:前次,monthHigh:當月最高,monthLow: 當月最低
dateTime | number | false | 日期
sort | string | false | 3種排序: "training", "byFirst", "bySecond"
desc | boolean | false | 順序
## 查詢個人訓練表現列表
Request:
POST /case/record/monitor
Payload:
```json=
{
"caseTypeId": 14, // 暫定14失智症、15衰弱症
"patientId": 2, // 不傳將由token自動查詢帶入
"condition": [
{ "type": 0, "time": "first" },
{ "type": 2, "time": "monthHigh", "dateTime": 1595925005000 }
]
"sort": "training", // training, byFirst, bySecond
"desc": true
// monthHigh, monthLow 需要dateTime(僅取年月)
}
```
<!--
```json=
{
"caseTypeId": 14, // 暫定14失智症、15衰弱症
"patientId": 2, // 不傳將由token自動查詢帶入
"condition": {
"firstCondition" : {
"type": 1,
"time": "first"
// first, last, beforeLast, monthHigh, monthLow
},
"secondCondition" : {
"type": 2,
"time": "monthHigh",
"dateTime": 1595925005000
// monthHigh, monthLow 需要timestamp(僅取年月)
}
}
}
``` -->
Response (成功):
```json=
{
"success": true,
"data": [
{"training": "測試項目1", "trainingId": 11, "target": 5, "actualValue": [4, 6], "level": [1, 2], "isRed":[true, false], "unitType": "sec"},
{"training": "測試項目1", "trainingId": 11, "target": 5, "actualValue": [3, 7], "level": [1, 2], "isRed":[true, false], "unitType": "times"},
{"training": "測試項目1", "trainingId": 11, "target": 5, "actualValue": [2, 8], "level": [1, 2], "isRed":[true, false], "unitType": "angel"},
{"training": "測試項目1", "trainingId": 11, "target": 5, "actualValue": [1, 9], "level": [1, 2], "isRed":[true, false], "unitType": "sec"},
]
}
```
<!--
```json=
{
"success": true,
"data": {[
{"courseTraining": "測試項目1", "courseTrainingId": 11, "target": 5, "firstCondition": 4, "secondCondition": 6, "unitType": "sec"},
{"courseTraining": "測試項目2", "courseTrainingId": 12, "target": 5, "firstCondition": 4, "secondCondition": 6, "unitType": "angle"},
{"courseTraining": "測試項目3", "courseTrainingId": 20, "target": 5, "firstCondition": 4, "secondCondition": 6, "unitType": "times"},
{"courseTraining": "測試項目4", "courseTrainingId": 25, "target": 5, "firstCondition": 4, "secondCondition": 6, "unitType": "sec"},
]}
}
```
-->
## 查詢個人訓練表現紀錄
Query Params:
| 欄位 | 型態 | IsRequired | 說明 |
|---|---|---|---|---|
| trainingId | number | true | 訓練項目ID|
| patientId | number | false | 個案ID|
Request:
GET /case/record/training?$queryParams
Response (成功):
```json=
{
"success": true,
"total": 6,
"data": [
{"actualValue": 5, "target": 11, "dateTime": 1595925005000},
{"actualValue": 7, "target": 11, "dateTime": 1595925005000},
{"actualValue": 2, "target": 11, "dateTime": 1595925005000},
{"actualValue": 5, "target": 11, "dateTime": 1595925005000},
{"actualValue": 4, "target": 11, "dateTime": 1595925005000},
{"actualValue": 9, "target": 11, "dateTime": 1595925005000},
]
}
```