# 排程行事曆
1. **依身分證號列出排程預約清單** [POST/ {contextPath}/appointment/list](#1-list-appointment)
2. **新增排程預約** [POST/ {contextPath}/appointment/add](#2-add-appointment)
3. **編輯排程預約** [POST/ {contextPath}/appointment/update](#3-update-appointment)
4. **刪除排程預約** [GET/ {contextPath}/appointment/delete](#4-delete-appointment)
5. **排程預約細節** [GET/ {contextPath}/appointment/detail](#5-detail-appointment)
6. **取得排程預約行事曆** [POST/ {contextPath}/appointment/calendar](#6-appointment-calendar)
7. **依不同排程項目列出預約清單** [POST/ {contextPath}/appointment/listPresent](#7-list-present-appointment)
8. **拿取衛生所電話** [POST/ {contextPath}/hisInfo/phone](#8-list-his_phone)
## 1. list appointment
```url=
POST/ {contextPath}/appointment/list
```
排程預約清單
### Request Body:
* query
| Parameter | Required | format | desc |
| ------------- | -------- | -------- |------------------ |
| idCardNo | N | String | 個案身分證號 |
| cpiId | N | String | 個案Id 若沒有身分證字號則使用cpiId |
Note:如為一般民眾Token 則都不需要帶query 預設拿取所有預約資訊
* sorter
| Parameter | Required | format | desc |
| --------- | -------- | -------- |------------------------------ |
| field | N | String | 排序欄位,預設為 reservItemName |
| order | N | String | desc/asc,預設為 asc |
### Request Body Example:
``` javascript
{
"query":{
"idCardNo":"A123456789"
},
"pagination": {
"current": "1",
"pageSize": "5"
},
"sorter": {
"field": "reservItemName",
"order": "desc"
}
}
```
### Response Body:
| Parameter | format | desc | sort supported|
| ---------------- | -------- |----------------------|-------------- |
| appointId | String | 預約主檔ID | N |
| appointRangeId | String | 預約時段ID | N |
| appointDateId | String | 預約日期ID | N |
| reservItemId | String | 預約項目ID | N |
| reservItemName | String | 預約項目名稱 | Y |
| appointDate | String | 預約日期 | Y |
| remark | String | 預約排程備註 | N |
| timeSlot | String | 預約排程時段,定義如下:<br>**MORING** (早上)<br>**AFTERNOON** (下午)<br>**EVENING** (晚上)<br>[Ref. Doc](https://gitlab.devpack.cc/Wei_Chang/wicc-kmuh/wikis/Type-Definition#timeslot) | Y|
| medicalStaffId | String | 預約醫師ID | N |
| doctorName | String | 預約醫師名稱 | N |
| hisName | String | 衛生所名稱 | Y |
| hisPhone | Array<String> | 衛生所電話 | N |
### Response Body Example:
* response: 200
``` javascript
{
"httpCode": 200,
"result": {
"data": [
{
"appointId": "1dbc9ff6-4580-49c6-ac87-69fd5c01433e",
"appointRangeId": "9f7d8e0c-ff45-4aa2-9e86-a2ac4be61003",
"appointDateId": "89363f1a-1f27-4730-9e63-6aa58da98a54",
"reservItemId": "c4b32cd6-7fa9-42cc-90c7-748a2382623e",
"reservItemName": "驗血",
"appointDate": "2019-04-09",
"remark": "SINGLE TEST",
"timeSlot": "MORING",
"medicalStaffId": "cc77d3fe-f541-462a-80a2-929db7184f5a",
"doctorName": "大武鄉醫師",
"hisName": "大武鄉衛生所",
"hisPhone": ["089-791143"],
"appointDateValue": 1588694400000
}
],
"pagination": {
"current": 1,
"pageSize": 5,
"total": 1
},
"sorter": {
"field": "reservItemName",
"order": "desc"
}
}
}
```
## 2. add appointment
```url=
POST/ {contextPath}/appointment/add
```
新增排程預約
### Request Body:
| Parameter | Required | format | desc |
| ------------- | -------- | -------- |---------------------- |
| idCardNo | Y | String | 個案身分證號 |
| reservItemId | Y | String | 預約項目ID |
| appointDate | **Y** (單次預約)、<br>**N** (重複預約) | String | 預約日期 |
| timeSlot | **Y** (單次預約)、<br>**N** (重複預約) | String | 單次預約排程時段,定義如下:<br>**MORING** (早上)<br>**AFTERNOON** (下午)<br>**EVENING** (晚上)<br>[Ref. Doc](https://gitlab.devpack.cc/Wei_Chang/wicc-kmuh/wikis/Type-Definition#timeslot) |
| startDate | **Y** (重複預約)、<br>**N** (單次預約) | String | 開始日期 |
| endDate | **Y** (重複預約)、<br>**N** (單次預約) | String | 結束日期 |
| repeatTime | **Y** (重複預約)、<br>**N** (單次預約) | Object | 重複週期預約設定 |
| loopType | Y | String | 預約排程週期,定義如下:<br>**SINGLE** (單次)<br>**REPEAT** (重複)<br>[Ref. Doc](https://gitlab.devpack.cc/Wei_Chang/wicc-kmuh/wikis/Type-Definition#%E6%8E%92%E7%A8%8B%E9%A0%90%E7%B4%84%E9%80%B1%E6%9C%9F%E9%A1%9E%E5%9E%8B) |
| remark | N | String | 預約排程備註 |
| medicalStaffId| Y | String | 預約醫師ID |
* repeatTime
| Parameter | Required | format | desc |
| ------------- | -------- | -------- |---------------------- |
| weekday | Y | String | 星期幾,定義參考 [Ref. Doc](https://gitlab.devpack.cc/Wei_Chang/wicc-kmuh/wikis/Type-Definition#%E6%8E%92%E7%A8%8B%E9%A0%90%E7%B4%84%E6%98%9F%E6%9C%9F%E5%B9%BE) |
| timeSlot | Y | String | 預約排程時段,定義如下:<br>**MORING** (早上)<br>**AFTERNOON** (下午)<br>**EVENING** (晚上)<br>[Ref. Doc](https://gitlab.devpack.cc/Wei_Chang/wicc-kmuh/wikis/Type-Definition#timeslot) |
### Request Body Example:
* 單次預約
``` javascript
{
"idCardNo":"A998877004",
"reservItemId":"c4b32cd6-7fa9-42cc-90c7-748a2382623e",
"appointDate":"2019-04-09",
"timeSlot":"MORING",
"loopType":"SINGLE",
"remark":"SINGLE TEST",
"medicalStaffId":"e38e14cc-6d76-41d7-94c1-314a9971ab0a"
}
```
* 重複預約
``` javascript
{
"idCardNo":"A123456777",
"reservItemId":"c4b32cd6-7fa9-42cc-90c7-748a2382623e",
"startDate":"2019-05-12",
"endDate":"2019-06-12",
"repeatTime":[
{
"weekday":"MONDAY",
"timeSlot":"MORNING"
},
{
"weekday":"FRIDAY",
"timeSlot":"MORNING"
}
],
"loopType":"REPEAT",
"remark":"REPEAT TEST",
"medicalStaffId":"e38e14cc-6d76-41d7-94c1-314a9971ab0a"
}
```
### Response Body:
* httpCode 200
| Parameter | format | desc |
| ---------------- | -------- |----------------------|
| appointId | String | 預約主檔ID |
* httpCode 422 - errorMsg
| errorMsg | desc |
| --------- |-------- |
| SERVICE_ERROR.APPOINMENT_FULL | 預約時段人數已滿 |
| SERVICE_ERROR.APPOINMENT_DUPLICATE | 重複預約 |
| SERVICE_ERROR.APPOINMENT_REPEAT_PERIOD_OVER_ONE_YEAR | 重複周期時間間距超過一年|
### Response Body Example:
``` javascript
// 422 預約時段人數已滿
{
"errorMsg": "SERVICE_ERROR.APPOINMENT_FULL ",
"httpCode": 422
}
// 422 重複預約
{
"errorMsg": "SERVICE_ERROR.APPOINMENT_DUPLICATE ",
"httpCode": 422
}
// 422 重複周期時間間距超過一年
{
"errorMsg": "SERVICE_ERROR.APPOINMENT_REPEAT_PERIOD_OVER_ONE_YEAR ",
"httpCode": 422
}
//200
{
"httpCode": 200,
"result": {
"data": {
"appointId": "b870b89c-df0c-44e8-9d8b-f57f9935296e"
}
}
}
```
## 3. update appointment
```url=
POST/ {contextPath}/appointment/update
```
編輯排程預約
### Request Body:
| Parameter | Required | format | desc |
| ------------- | -------- | -------- |----------------------- |
| appointId | Y | String | 預約主檔ID |
| appointRangeId| Y | String | 預約時段ID |
| appointDateId | Y | String | 預約日期ID |
| idCardNo | Y | String | 個案身分證號 |
| reservItemId | Y | String | 預約項目ID |
| appointDate | Y | String | 預約日期 |
| timeSlot | Y | String | 預約排程時段,定義如下:<br>**MORING** (早上)<br>**AFTERNOON** (下午)<br>**EVENING** (晚上)<br>[Ref. Doc](https://gitlab.devpack.cc/Wei_Chang/wicc-kmuh/wikis/Type-Definition#timeslot) |
| loopType | Y | String | 預約排程週期,定義如下:<br>**SINGLE** (單次)<br>**REPEAT** (重複)<br>[Ref. Doc](https://gitlab.devpack.cc/Wei_Chang/wicc-kmuh/wikis/Type-Definition#%E6%8E%92%E7%A8%8B%E9%A0%90%E7%B4%84%E9%80%B1%E6%9C%9F%E9%A1%9E%E5%9E%8B) |
| remark | N | String | 預約排程備註 |
| medicalStaffId| Y | String | 預約醫師ID |
### Request Body Example:
``` javascript
{
"appointId":"b870b89c-df0c-44e8-9d8b-f57f9935296e",
"appointRangeId":"074fefd2-ba97-4bda-b87a-7fc377204935",
"appointDateId":"b99f7f73-8fdd-427d-956f-915be7a30b84",
"reservItemId":"c4b32cd6-7fa9-42cc-90c7-748a2382623e",
"idCardNo":"A123456777",
"appointDate":"2019-07-03",
"timeSlot":"EVENING",
"loopType":"SINGLE",
"remark":"SINGLE TEST 2",
"medicalStaffId":"e38e14cc-6d76-41d7-94c1-314a9971ab0a"
}
```
### Response Body:
* httpCode 200
| Parameter | format | desc |
| ---------------- | -------- |----------------------|
| count | Integer | 異動個數 |
* httpCode 422 - errorMsg
| errorMsg | desc |
| --------- |-------- |
| SERVICE_ERROR.APPOINMENT_FULL | 預約時段人數已滿 |
| SERVICE_ERROR.APPOINMENT_DUPLICATE | 重複預約 |
| SERVICE_ERROR.APPOINMENT_CAN_NOT_UPDATE_AS_REPEAT | 預約不得編輯改為重複週期|
| SERVICE_ERROR.APPOINMENT_NOT_EXIST | 預約不存在 |
| SERVICE_ERROR.APPOINMENT_UPDATE_MORE_THAN_ONE_RECORD | 預約編輯筆數超過一筆 |
### Response Body Example:
``` javascript
// 422 預約時段人數已滿
{
"errorMsg": "SERVICE_ERROR.APPOINMENT_FULL ",
"httpCode": 422
}
// 422 重複預約
{
"errorMsg": "SERVICE_ERROR.APPOINMENT_DUPLICATE ",
"httpCode": 422
}
// 422 預約不得編輯改為重複週期
{
"errorMsg": "SERVICE_ERROR.APPOINMENT_CAN_NOT_UPDATE_AS_REPEAT ",
"httpCode": 422
}
// 422 預約不存在
{
"errorMsg": "SERVICE_ERROR.APPOINMENT_NOT_EXIST ",
"httpCode": 422
}
// 422 預約編輯筆數超過一筆
{
"errorMsg": "SERVICE_ERROR.APPOINMENT_UPDATE_MORE_THAN_ONE_RECORD ",
"httpCode": 422
}
//200
{
"httpCode": 200,
"result": {
"data": {
"count": 1
}
}
}
```
## 4. delete appointment
```url=
GET/ {contextPath}/appointment/delete
```
刪除排程預約
### Request Param:
| Parameter | Required | format | desc |
| ------------- | -------- | -------- |------------------ |
| appointDateId | Y | String | 預約日期ID |
### Request Example:
``` javascript
GET /appointment/delete?appointDateId=b99f7f73-8fdd-427d-956f-915be7a30b84
```
### Response Body:
| Parameter | format | desc |
| ---------------- | -------- |----------------------|
| count | Integer | 異動個數 |
### Response Body Example:
* response: 200
``` javascript
{
"httpCode": 200,
"result": {
"data": {
"count": 1
}
}
}
```
## 5. detail appointment
```url=
GET/ {contextPath}/appointment/detail
```
排程預約細節
### Request Body:
| Parameter | Required | format | desc |
| ------------- | -------- | -------- |------------------ |
| appointDateId | Y | String | 預約日期ID |
### Request Example:
``` javascript
GET /appointment/detail?appointDateId=b99f7f73-8fdd-427d-956f-915be7a30b84
```
### Response Body:
| Parameter | format | desc |
| ---------------- | -------- |----------------------|
| appointId | String | 預約主檔ID |
| appointRangeId | String | 預約時段ID |
| appointDateId | String | 預約日期ID |
| reservItemId | String | 預約項目ID |
| reservItemName | String | 預約項目名稱 |
| idCardNo | String | 個案身分證號 |
| patName | String | 個案姓名 |
| appointDate | String | 預約日期 |
| startDate | String | 開始日期 |
| endDate | String | 結束日期 |
| loopType | String | 預約排程週期,定義如下:<br>**SINGLE** (單次)<br>**REPEAT** (重複)<br>[Ref. Doc](https://gitlab.devpack.cc/Wei_Chang/wicc-kmuh/wikis/Type-Definition#%E6%8E%92%E7%A8%8B%E9%A0%90%E7%B4%84%E9%80%B1%E6%9C%9F%E9%A1%9E%E5%9E%8B) |
| remark | String | 預約排程備註 |
| timeSlot | String | 預約排程時段,定義如下:<br>**MORING** (早上)<br>**AFTERNOON** (下午)<br>**EVENING** (晚上)<br>[Ref. Doc](https://gitlab.devpack.cc/Wei_Chang/wicc-kmuh/wikis/Type-Definition#timeslot) |
| medicalStaffId | String | 預約醫師ID | N |
| doctorName | String | 預約醫師名稱 | N |
| hisName | String | 衛生所名稱 | Y |
| hisPhone | Array<String> | 衛生所電話 | N |
### Response Body Example:
* response: 200
``` javascript
{
"httpCode": 200,
"result": {
"data": {
"appointId": "1dbc9ff6-4580-49c6-ac87-69fd5c01433e",
"appointRangeId": "9f7d8e0c-ff45-4aa2-9e86-a2ac4be61003",
"appointDateId": "89363f1a-1f27-4730-9e63-6aa58da98a54",
"reservItemId": "c4b32cd6-7fa9-42cc-90c7-748a2382623e",
"reservItemName": "驗血",
"idCardNo": "A998877004",
"patName": "大發",
"doctorName": "桃源區衛生所醫師",
"medicalStaffId": "e38e14cc-6d76-41d7-94c1-314a9971ab0a",
"appointDate": "2019-04-09",
"startDate": "2019-04-09",
"endDate": "2019-04-09",
"loopType": "SINGLE",
"remark": "SINGLE TEST",
"timeSlot": "MORING",
"medicalStaffId": "12a68dac-6244-46c8-b703-7e84a657848a",
"doctorName": "杜佳佳",
"hisName": "那瑪夏衛生所",
"hisPhone": ["07-6701142"],
"appointDateValue": 1565712000000
}
}
}
```
* response: 400 傳入的 id 不存在
```
{
"errorMsg": "API_ERROR.NO_DATA",
"httpCode": 400
}
```
## 6. appointment calendar
```url=
POST/ {contextPath}/appointment/calendar
```
取得排程預約行事曆
### Request Body:
| Parameter | Required | format | desc |
| ------------- | -------- | -------- |----------------------- |
| startDate | N | String | 開始日期 |
| endDate | N | String | 結束日期 |
### Response Body Example:
* response: 200
``` javascript
{
"startDate":"2019-04-08",
"endDate":"2019-04-13"
}
```
### Response Body:
| Parameter | format | desc |
| ---------------- | -------- |----------------------|
| appointId | String | 預約主檔ID |
| appointRangeId | String | 預約時段ID |
| appointDateId | String | 預約日期ID |
| reservItemId | String | 預約項目ID |
| reservItemName | String | 預約項目名稱 |
| idCardNo | String | 個案身分證號 |
| patName | String | 個案姓名 |
| appointDate | String | 預約日期 |
| remark | String | 預約排程備註 |
| weekday | String | 星期幾,定義參考 [Ref. Doc](https://gitlab.devpack.cc/Wei_Chang/wicc-kmuh/wikis/Type-Definition#%E6%8E%92%E7%A8%8B%E9%A0%90%E7%B4%84%E6%98%9F%E6%9C%9F%E5%B9%BE) |
| timeSlot | String | 預約排程時段,定義如下:<br>**MORING** (早上)<br>**AFTERNOON** (下午)<br>**EVENING** (晚上)<br>[Ref. Doc](https://gitlab.devpack.cc/Wei_Chang/wicc-kmuh/wikis/Type-Definition#timeslot) |
| medicalStaffId | String | 預約醫師ID | N |
| doctorName | String | 預約醫師名稱 | N |
| hisName | String | 衛生所名稱 | Y |
| hisPhone | Array<String> | 衛生所電話 | N |
### Response Body Example:
* response: 200
``` javascript
{
"httpCode": 200,
"result": {
"data": [
{
"appointId": "816a5a36-fd4a-4c11-8565-ee91966e0d96",
"appointRangeId": "fd39d0b4-7bdc-45d4-857b-bb744f569ba4",
"appointDateId": "bea0c273-39a5-4919-b7bc-cd8426e9287f",
"reservItemId": "c4b32cd6-7fa9-42cc-90c7-748a2382623e",
"reservItemName": "驗血",
"idCardNo": "A123456777",
"patName": "蘇寒冠",
"doctorName": "桃源區衛生所醫師",
"medicalStaffId": "e38e14cc-6d76-41d7-94c1-314a9971ab0a",
"appointDate": "2019-04-09",
"remark": "SINGLE TEST",
"weekday": "TUESDAY",
"timeSlot": "MORNING",
"medicalStaffId": "fbc9d26e-4cfc-4de1-85d2-bc9d560a1289",
"doctorName": "那瑪夏區衛生所醫師",
"hisName": "那瑪夏衛生所",
"hisPhone": ["07-6701142"],
"appointDateValue": 1588608000000
},
{
"appointId": "e13bc02e-c116-4c0d-bef8-dbe6c64008a8",
"appointRangeId": "8ef62458-1bb1-4be2-9220-46a0595192e4",
"appointDateId": "5f91e9bc-4a1f-4a50-8af8-695e055be756",
"reservItemId": "c4b32cd6-7fa9-42cc-90c7-748a2382623e",
"reservItemName": "驗血",
"idCardNo": "A123456777",
"patName": "蘇寒冠",
"doctorName": "桃源區衛生所醫師",
"medicalStaffId": "e38e14cc-6d76-41d7-94c1-314a9971ab0a",
"appointDate": "2019-04-12",
"remark": "SINGLE TEST 2",
"weekday": "FRIDAY",
"timeSlot": "EVENING",
"medicalStaffId": "fbc9d26e-4cfc-4de1-85d2-bc9d560a1289",
"doctorName": "那瑪夏區衛生所醫師",
"hisName": "那瑪夏衛生所",
"hisPhone": ["07-6701142"],
"appointDateValue": 1588608000000
}
]
}
}
```
## 7. list present appointment
```url=
POST/ {contextPath}/appointment/listPresent
```
依不同排程項目列出預約清單 (於個案儀表板畫面顯示)
### Request Body:
* query
| Parameter | Required | format | desc |
| ------------- | -------- | -------- |------------------ |
| idCardNo | N | String | 個案身分證號 |
| cpiId | N | String | 個案Id 若沒有身分證字號則使用cpiId |
* sorter
| Parameter | Required | format | desc |
| --------- | -------- | -------- |------------------------------ |
| field | N | String | 排序欄位,預設為 reservItemName |
| order | N | String | desc/asc,預設為 asc |
### Request Body Example:
``` javascript
{
"query":{
"idCardNo":"S123991591"
},
"pagination": {
"current": "1",
"pageSize": "5"
},
"sorter": {
"field": "reservItemName",
"order": "desc"
}
}
```
### Response Body:
| Parameter | format | desc | sort supported|
| ---------------- | -------- |------------------------------------|-------------- |
| reservItemId | String | 預約項目ID | N |
| reservItemName | String | 預約項目名稱 | Y |
| remark | String | 預約排程備註 | N |
| prevAppoint | String | 上次預約日期 YYYY-MM-DD,若無回空字串 | N |
| nextAppoint | String | 下次預約日期 YYYY-MM-DD,若無回空字串 | N |
### Response Body Example:
* response: 200
``` javascript
{
"httpCode": 200,
"result": {
"data": [
{
"reservItemId": "c4b32cd6-7fa9-42cc-90c7-748a2382623e",
"reservItemName": "驗血",
"idCardNo": "S123991591",
"remark": "Aaron test",
"prevAppoint": "",
"nextAppoint": "2019-05-01"
}
],
"pagination": {
"current": 1,
"pageSize": 5,
"total": 1
},
"sorter": {
"field": "reservItemName",
"order": "desc"
}
}
}
```
## 8. list his_phone
```url=
GET/ {contextPath}/hisInfo/phone
```
拿取該區衛生所電話
### Response Body:
| Parameter | format | desc | sort supported|
| ---------------- | -------- |------------------------------------|-------------- |
| data | Array<String> | 衛生所電話Array | N |
### Response Body Example:
* response: 200
``` javascript
{
"httpCode": 200,
"result": {
"data": [
"07-1239873",
"07-2347654"
]
}
}
```