:::spoiler API 清單
[TOC]
:::
# 智慧餐盤
## 常數定義
### 食物分類
欄位 | 型態 | 說明
---|---|---
category | string | WHOLE_GRAINS: 全榖雜糧, LEGUME_FISH_MEAT_EGG: 豆魚肉蛋, DAIRY: 乳製品, VEGETABLES: 蔬菜, FRUITS: 水果, OILS_AND_NUTS: 食用油與堅果, DRINK: 飲料, OTHER: 其他
### 食物類型-LEGUME_FISH_MEAT_EGG
欄位 | 型態 | 說明
---|---|---
type | string | LOW_FAT: 低脂, MEDIUM_FAT: 中脂, HIGH_FAT: 高脂, VERY_HIGH_FAT: 超高脂
### 食物類型-DAIRY
欄位 | 型態 | 說明
---|---|---
type | string | LOW_FAT: 低脂, WHOLE_FAT: 全脂, SKIM: 脫脂
### 食物類型-VEGETABLES
欄位 | 型態 | 說明
---|---|---
type | string | RAW: 生, COOKED: 熟
### 食物類型-OILS_AND_NUTS
欄位 | 型態 | 說明
---|---|---
type | string | OIL: 食用油, NUT: 堅果
### 食物類型-DRINK
欄位 | 型態 | 說明
---|---|---
type | string | WATER: 水, FULL_SUGAR: 全糖, LESS_SUGAR: 少糖, HALF_SUGAR: 半糖, QUARTER_SUGAR: 微糖, SUGAR_FREE: 無糖
### 用餐時段
欄位 | 型態 | 說明
---|---|---
timePeriod | int | ALL: -1(查詢用), 早上: 1, 中午: 2, 晚上: 3, 睡前: 4
### 用餐餐別
欄位 | 型態 | 說明
---|---|---
timePeriodType | int | ALL: -1(查詢用), <br/> **早上**<br/> 早餐: 10, 早午餐: 11, 運動前一小時: 12, 運動前兩小時: 13, 運動後一小時: 14, 運動後兩小時: 15, <br/> **中午**<br/> 午餐: 20, 下午茶: 21, 運動前一小時: 22, 運動前兩小時: 23, 運動後一小時: 24, 運動後兩小時: 25, <br/> **晚上**<br/> 晚餐: 30, 點心: 31, 運動前一小時: 32, 運動前兩小時: 33, 運動後一小時: 34, 運動後兩小時: 35 <br/> **睡前**<br/> 40:宵夜, 運動前一小時: 42, 運動前兩小時: 43, 運動後一小時: 44, 運動後兩小時: 45
### 烹調方式
欄位 | 型態 | 說明
---|---|---
type | string | FAT_FREE: 無油, FRY: 非油炸, FRIED: 油炸
### 額外加糖
欄位 | 型態 | 說明
---|---|---
type | string | NONE: 無添加, WITH_SUGAR: 加糖
### 餐盤狀態
欄位 | 型態 | 說明
---|---|---
status | string | DRAFT: 草稿, PUBLISHED: 已發布
### 飲食記錄方式
欄位 | 型態 | 說明
---|---|---
diaryRecordType | string | DIET_PLAN: 我的餐盤, FOOD_DB: 食品資料庫
### 飲食分數查詢區間類別
欄位 | 型態 | 說明
---|---|---
scorePeriod | string | DAILY: 日, WEEKLY: 週, MONTHLY: 月
## API
### 取得六大營養素資訊[APP/WEB]
```url
GET /diet-plan/getIngredientsInfo
```
取得六大營養素的類別/分類/熱量
#### Request
#### Response
欄位 | 型態 | 說明
--- | --- | ---
category | string | 食物分類, 請參閱[食物分類](#食物分類)
types | json array | 在食物分類下的所有類型食材
cookedTypes | json array | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugars | json array | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
##### Response-types
欄位 | 型態 | 說明
--- | --- | ---
id | string | 食材id
description | string | 食材描述
type | string | 食物類型, 請參照[各食物類型](#食物類型-LEGUME_FISH_MEAT_EGG)
simpleUnit | string | 簡易份量單位
calorie | double | 每份量的熱量
protein | double | 每份量的蛋白質重量(g)
sugar | double | 每份量的糖重量(g)
fat | double | 每份量的脂肪重量(g)
protein_cal | double | 每份量的蛋白質熱量
sugar_cal | double | 每份量的糖熱量
fat_cal | double | 每份量的脂肪熱量
simpleUnitTransferCoefficient | double | 簡易單位轉換成一般份量的轉換係數<BR>上方的重量和熱量都是基於一般分量. 要用簡易熱量轉換時要乘上轉換係數<BR>e.g.: 每份熱量: 50, 轉換係數: 2, 0.5份簡易份量熱量等於: 0.5 x 2 x 50
##### Response-cookedTypes/addedSugars
欄位 | 型態 | 說明
--- | --- | ---
id | string | 食材id
description | string | 食材描述
type | string | 食物類型, 請參照[各食物類型](#食物類型-LEGUME_FISH_MEAT_EGG)
calorie | double | 每份量的熱量
protein | double | 每份量的蛋白質重量(g)
sugar | double | 每份量的糖重量(g)
fat | double | 每份量的脂肪重量(g)
protein_cal | double | 每份量的蛋白質熱量
sugar_cal | double | 每份量的糖熱量
fat_cal | double | 每份量的脂肪熱量
```javascript
{
"httpCode": 200,
"result": {
"data": [
{
"category": "LEGUME_FISH_MEAT_EGG",
"types": [
{
"id": "5ac5e206-881d-4d0d-b6b7-6ef9c61713b4",
"description": "豆魚肉蛋(中脂)",
"type": "MEDIUM_FAT",
"simpleUnit": "掌心",
"simpleUnitTransferCoefficient": 2.0,
"protein": 7.0,
"fat": 5.0,
"calorie": 73.0,
"proteinCal": 28.0,
"fatCal": 20.0
}...
],
"cookedTypes": [
{
"id": "01a74fad-3df8-429e-8507-2392969b5585",
"description": "烹調方式(無油)",
"type": "FAT_FREE",
"fat": 0.0,
"calorie": 0.0,
"fatCal": 0.0
},
...
],
"addedSugars": []
},
]
}
}
```
### 取得我的建議餐盤[APP]
```url
GET /diet-plan/getMySuggestPlan
```
取得我的建議餐盤
#### Request
#### Response-取得我的建議餐盤
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤id
createTime | timestamp | 餐盤建立時間
updateTime | timestamp | 餐盤更新時間
creatorId | string | 餐盤建立者ID, 空值的話代表衛福部預設餐盤
creatorName | string | 餐盤建立者姓名, 空值的話代表衛福部預設餐盤
creatorRole | string | 餐盤建立者腳色, 空值的話代表衛福部預設餐盤
tenantId | string | 餐盤建立者的租戶ID, 空值的話代表衛福部預設餐盤
tenantName | string | 餐盤建立者的租戶名稱, 空值的話代表衛福部預設餐盤
totalCalorie | double | 本餐盤的總熱量
totalProteinCalorie | double | 本餐盤的蛋白質熱量
totalSugarCalorie | double | 本餐盤的醣類熱量
totalFatCalorie | double | 本餐盤的脂肪熱量
timePeriods| json array | 餐盤時段array
cookedTypes | json array | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugars | json array | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
##### Response-timePeriods
欄位 | 型態 | 說明
--- | --- | ---
timePeriod | int | 用餐時段, 請參閱[用餐時段](#用餐時段)
timePeriodTypes | json array | 用餐餐別
##### Response-timePeriodTypes
欄位 | 型態 | 說明
--- | --- | ---
timePeriodType | int | 用餐餐別, 請參閱[用餐餐別](#用餐餐別)
totalCalorie | double | 本餐別的總熱量
totalProteinCalorie | double | 本餐別的蛋白質熱量
totalSugarCalorie | double | 本餐別的醣類熱量
totalFatCalorie | double | 本餐別的脂肪熱量
meals | json array | 建議餐點類型與用量
foodCategorys| json array| 建議餐點的熱量和用量根據食物分類統計
##### Response-meals
欄位 | 型態 | 說明
--- | --- | ---
foodCategory | string | 食物分類, 請參閱[食物分類](#食物分類)
foodType | string | 食物類型, 請參照[各食物類型](#食物類型-LEGUME_FISH_MEAT_EGG)
cookedType | string | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugar | string | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
quantity | double | 建議用量(份)
simpleUnit | string | 簡易單位
calorie | double | 本餐點的熱量
proteinCalorie | double | 本餐點的蛋白質熱量
sugarCalorie | double | 本餐點的醣類熱量
fatCalorie | double | 本餐點的脂肪熱量
simpleUnitTransferCoefficient | double | 簡易單位轉換成一般份量的轉換係數<BR/>上方的重量和熱量都是基於一般分量. 要用簡易熱量轉換時要乘上轉換係數<BR>e.g.: 每份熱量: 50, 轉換係數: 2, 0.5份簡易份量熱量等於: 0.5 x 2 x 50
##### Response-foodCategorys
欄位 | 型態 | 說明
--- | --- | ---
foodCategory | string | 食物分類, 請參閱[食物分類](#食物分類)
quantity | double | 建議用量(份)
simpleUnit | string | 簡易單位
calorie | double | 本餐點的熱量
proteinCalorie | double | 本餐點的蛋白質熱量
sugarCalorie | double | 本餐點的醣類熱量
fatCalorie | double | 本餐點的脂肪熱量
simpleUnitTransferCoefficient | double | 簡易單位轉換成一般份量的轉換係數<BR/>上方的重量和熱量都是基於一般分量. 要用簡易熱量轉換時要乘上轉換係數<BR>e.g.: 每份熱量: 50, 轉換係數: 2, 0.5份簡易份量熱量等於: 0.5 x 2 x 50
```javascript
{
"httpCode": 200,
"result": {
"data": {
"id": "6298166e-6dc5-435e-b113-0975d48efdb9",
"createTime": 1664122976237,
"updateTime": 1664122976237,
"creatorId": "7a17be34-13ae-4687-b971-1e5f586c8e3a",
"creatorName": "Dr. X",
"creatorRole": "腳科醫生",
"tenantId": "858b7fbb-3ba0-4d49-9882-c893a1ef07dc",
"tenantName": "緯緯醫學",
"totalCalorie": 324.5,
"totalProteinCalorie": 52.0,
"totalSugarCalorie": 88.0,
"totalFatCalorie": 94.5,
"timePeriods": [
{
"timePeriod": 1,
"timePeriodTypes": [
{
"timePeriodType": 10,
"totalCalorie": 324.5,
"totalProteinCalorie": 52.0,
"totalSugarCalorie": 88.0,
"totalFatCalorie": 94.5,
"meals": [
{
"foodCategory": "LEGUME_FISH_MEAT_EGG",
"foodType": "MEDIUM_FAT",
"quantity": 0.5,
"simpleUnit": "掌心",
"simpleUnitTransferCoefficient": 2.0,
"cookedType": "FRY",
"calorie": 36.5,
"proteinCalorie": 14.0,
"sugarCalorie": 0.0,
"fatCalorie": 22.5
},...
],
"foodCategorys": [
{
"calorie": 45.0,
"proteinCal": 0.0,
"sugarCal": 0.0,
"fatCal": 45.0,
"foodCategory": "OILS_AND_NUTS",
"quantity": 1.0,
"simpleUnit": "茶匙5ml",
"simpleUnitTransferCoefficient": 0.333333
},
}
]
}
]
}
}
}
```
### 查詢用戶的餐盤清單[WEB]
```url
POST /diet-plan-mgmt/queryDietPlanList
```
取得用戶的所有建議餐盤
#### Request
##### query (查詢條件json)
欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明
---|---|---|---|---|---
householdMemberId | string | | | | 要查詢的用戶ID
##### pagination (分頁json)
欄位 | 型態 | 必填 | 預設 | 說明
---|---|---|---|---
current | int | | 1 | 當前頁數
pageSize | int | | 10 | 每頁結果數量,-1 為顯示所有
##### sorter (排序json)
欄位 | 型態 | 必填 | 預設 | 說明
---|---|---|---|---
field | string | | createTime | 排序欄位,可排序欄位有 totalCalories, creatorName, status, updateTime
order | string | | desc | 升序或降序
```javascript
{
"query": {
"householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5"
}
}
```
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
#### Response
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤id
createTime | timestamp | 餐盤建立時間
updateTime | timestamp | 餐盤更新時間
creatorId | string | 餐盤建立者ID, 空值的話代表衛福部預設餐盤
creatorName | string | 餐盤建立者姓名, 空值的話代表衛福部預設餐盤
tenantId | string | 餐盤建立者的租戶ID, 空值的話代表衛福部預設餐盤
tenantName | string | 餐盤建立者的租戶名稱, 空值的話代表衛福部預設餐盤
totalCalorie| double | 該餐盤的總建議熱量
status | string | 餐盤狀態, 請參閱[餐盤狀態](#餐盤狀態)
```javascript
{
"httpCode": 200,
"result": {
"data": [
{
"id": "6298166e-6dc5-435e-b113-0975d48efdb9",
"createTime": 1664122976237,
"updateTime": 1664122976237,
"status": "PUBLISHED",
"creatorId": "7a17be34-13ae-4687-b971-1e5f586c8e3a",
"creatorName": "Dr. X",
"tenantId": "858b7fbb-3ba0-4d49-9882-c893a1ef07dc",
"tenantName": "緯緯醫學",
"totalCalorie": 324.5
},
...
]
}
}
```
### 取得營養診斷資訊[WEB]
```url
GET /diet-plan-mgmt/getNutritionalDiagnosisInfo
```
取得營養診斷資訊
#### Request
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
#### Response
欄位 | 型態 | 說明
--- | --- | ---
problemCategoryId | string | 問題分類key
problemCategoryI18n | string | 問題分類i18n
problemCategoryDescription | string | 問題分類描述
problems | json array | 該問題分類下的所有問題
##### Response-problems
欄位 | 型態 | 說明
--- | --- | ---
problemId | string | 問題key
problemI18n | string | 問題i18n
problemDescription | string | 問題描述
etiologys | json array | 該問題下的所有危險因子
##### Response-etiologys
欄位 | 型態 | 說明
--- | --- | ---
etiologyId | string | 危險因子key
etiologyI18n | string | 危險因子i18n
etiologyDescription | string |危險因子描述
```javascript
{
"httpCode": 200,
"result": {
"data": [
{
"problemCategoryId": "f9223c4b-4d0e-4246-b47f-8e66e856413d",
"problemCategoryDescription": "體位",
"problems": [
{
"problemId": "ce2ec4c5-19ea-4317-a7ea-134ad3311207",
"problemDescription": "體重過輕",
"etiologys": [
{
"etiologyId": "7a9b014c-37db-4601-a2d4-8422f11f80a6",
"etiologyDescription": "照顧者或本身對食物及營養相關議題有錯誤認知及態度"
},
...
]
}
]
}
]
}
}
```
### 取得用戶的建議餐盤[WEB]
```url
GET /diet-plan-mgmt/dietPlan/info?id={id}
```
#### Request
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤ID
```javascript
```
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
#### Response
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤id
createTime | timestamp | 餐盤建立時間
updateTime | timestamp | 餐盤更新時間
creatorId | string | 餐盤建立者ID, 空值的話代表衛福部預設餐盤
creatorName | string | 餐盤建立者姓名, 空值的話代表衛福部預設餐盤
creatorRole | string | 餐盤建立者腳色, 空值的話代表衛福部預設餐盤
tenantId | string | 餐盤建立者的租戶ID, 空值的話代表衛福部預設餐盤
tenantName | string | 餐盤建立者的租戶名稱, 空值的話代表衛福部預設餐盤
totalCalorie | double | 本餐盤的總熱量
totalProteinCalorie | double | 本餐盤的蛋白質熱量
totalSugarCalorie | double | 本餐盤的醣類熱量
totalFatCalorie | double | 本餐盤的脂肪熱量
meals| json array | 餐點array
nutritionalDiagnosisInfo| json object | 營養診斷資訊
cookedTypes | json array | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugars | json array | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
##### Response-meals
欄位 | 型態 | 說明
--- | --- | ---
timePeriod | int | 用餐時段, 請參閱[用餐時段](#用餐時段)
timePeriodType | int | 用餐餐別, 請參閱[用餐餐別](#用餐餐別)
foodCategory | string | 食物分類, 請參閱[食物分類](#食物分類)
foodType | string | 食物類型, 請參照[各食物類型](#食物類型-LEGUME_FISH_MEAT_EGG)
cookedType | string | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugar | string | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
quantity | double | 建議用量(份)
simpleUnit | string | 簡易單位
quantityForSimpleUnit | double | 建議用量(簡易單位)
calorie | double | 本餐點的熱量
proteinCalorie | double | 本餐點的蛋白質熱量
sugarCalorie | double | 本餐點的醣類熱量
fatCalorie | double | 本餐點的脂肪熱量
simpleUnitTransferCoefficient | double | 簡易單位轉換成一般份量的轉換係數<BR>上方的重量和熱量都是基於一般分量. 要用簡易熱量轉換時要乘上轉換係數<BR>e.g.: 每份熱量: 50, 轉換係數: 2, 0.5份簡易份量熱量等於: 0.5 x 2 x 50
##### Response-nutritionalDiagnosisInfo
欄位 | 型態 | 說明
--- | --- | ---
categoryId | string | 問題分類ID
categoryI18n | string | 問題分類i18n
categoryDescription | string | 問題分類描述
problemId | string | 問題ID
problemI18n | string | 問題i18n
problemDescription | string | 問題描述
etiologys | json array | 該問題下的所有危險因子
etiologyId | string | 病因ID
etiologyI18n | string | 病因i18n
etiologyDescription | string |病因描述
signs| string | 病徵
```javascript
{
"httpCode": 200,
"result": {
"data": {
"id": "6298166e-6dc5-435e-b113-0975d48efdb9",
"createTime": 1664122976237,
"updateTime": 1664122976237,
"status": "PUBLISHED",
"creatorId": "7a17be34-13ae-4687-b971-1e5f586c8e3a",
"creatorName": "Dr. X",
"creatorRole": "腳科醫生",
"tenantId": "858b7fbb-3ba0-4d49-9882-c893a1ef07dc",
"tenantName": "緯緯醫學",
"totalCalorie": 324.5,
"totalProteinCalorie": 52.0,
"totalSugarCalorie": 88.0,
"totalFatCalorie": 94.5,
"meals": [
{
"timePeriod": 1,
"timePeriodType": 10,
"calorie": 36.5,
"proteinCal": 14.0,
"sugarCal": 0.0,
"fatCal": 22.5,
"foodCategory": "LEGUME_FISH_MEAT_EGG",
"foodType": "MEDIUM_FAT",
"quantity": 0.5,
"simpleUnit": "掌心",
"simpleUnitTransferCoefficient": 2.0,
"cookedType": "FRY"
},
...
],
"nutritionalDiagnosisInfo": {
"categoryId": "f9223c4b-4d0e-4246-b47f-8e66e856413d",
"categoryDescription": "體位",
"problemId": "ce2ec4c5-19ea-4317-a7ea-134ad3311207",
"problemDescription": "體重過輕",
"etiologyId": "7a9b014c-37db-4601-a2d4-8422f11f80a6",
"etiologyDescription": "照顧者或本身對食物及營養相關議題有錯誤認知及態度",
"signs": "test diagnosis"
}
}
}
}
```
### 新增用戶的建議餐盤[WEB]
```url
POST /diet-plan-mgmt/dietPlan/add
```
#### Request
欄位 | 型態 | 說明
--- | --- | ---
householdMemberId | string | 用戶ID
status | string | 用戶ID
ndCategoryId | string | 營養診斷問題類別ID
ndProblemId | string | 營養診斷問題ID
ndEtiologyId | string | 營養診斷病因ID
ndSigns | string | 營養診斷病徵說明
meals | json array | 餐點array
##### Request-meals
欄位 | 型態 | 說明
--- | --- | ---
timePeriod | int | 用餐時段, 請參閱[用餐時段](#用餐時段)
timePeriodType | int | 用餐餐別, 請參閱[用餐餐別](#用餐餐別)
foodCategoryId | string | 食物分類ID, 請參閱[食物分類](#食物分類)
cookedType | string | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugar | string | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
quantity | double | 建議用量(份)
```javascript
{
"householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5",
"status": "DRAFT",
"ndCategoryId": "f9223c4b-4d0e-4246-b47f-8e66e856413d",
"ndProblemId": "ce2ec4c5-19ea-4317-a7ea-134ad3311207",
"ndEtiologyId": "7a9b014c-37db-4601-a2d4-8422f11f80a6",
"ndSigns": "test diagnosis",
"meals": [
{
"timePeriod": 1,
"timePeriodType": 10,
"foodCategoryId": "3844d748-c46d-416f-bd0c-e11241d42e47",
"quantity": 3,
"cookedType": "FRY"
}
]
}
```
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
400 | API_ERROR.DIET_PLAN_DRAFT_PLATE_EXIST | 當前存在草稿餐盤
#### Response
欄位 | 型態 | 說明
--- | --- | ---
data | int | 新增的餐點數量
```javascript
{
"httpCode": 200,
"result": {
"data": 1
}
}
```
### 更新用戶的建議餐盤[WEB]
```url
POST /diet-plan-mgmt/dietPlan/update
```
#### Request
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤ID
householdMemberId | string | 用戶ID
status | string | 用戶ID
ndCategoryId | string | 營養診斷問題類別ID
ndProblemId | string | 營養診斷問題ID
ndEtiologyId | string | 營養診斷病因ID
ndSigns | string | 營養診斷病徵說明
meals | json array | 餐點array
##### Request-meals
欄位 | 型態 | 說明
--- | --- | ---
timePeriod | int | 用餐時段, 請參閱[用餐時段](#用餐時段)
timePeriodType | int | 用餐餐別, 請參閱[用餐餐別](#用餐餐別)
foodCategoryId | string | 食物分類ID, 請參閱[食物分類](#食物分類)
cookedType | string | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugar | string | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
quantity | double | 建議用量(份)
```javascript
{
"id": "c905078a-c1ee-4802-a852-a5ee6b2f64e9",
"householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5",
"status": "PUBLISHED",
"ndCategoryId": "f9223c4b-4d0e-4246-b47f-8e66e856413d",
"ndProblemId": "ce2ec4c5-19ea-4317-a7ea-134ad3311207",
"ndEtiologyId": "7a9b014c-37db-4601-a2d4-8422f11f80a6",
"ndSigns": "test diagnosis",
"meals": [
{
"timePeriod": 1,
"timePeriodType": 11,
"foodCategoryId": "3844d748-c46d-416f-bd0c-e11241d42e47",
"quantity": 4,
"cookedType": "FRY"
}
]
}
```
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
400 | API_ERROR.DIET_PLAN_PLATE_STATUS_NOT_DRAFT | 更新的餐盤並非草稿狀態
#### Response
欄位 | 型態 | 說明
--- | --- | ---
data | int | 更新的餐點數量
```javascript
{
"httpCode": 200,
"result": {
"data": 1
}
}
```
### 刪除用戶的建議餐盤[WEB]
```url
POST /diet-plan-mgmt/dietPlan/delete
```
#### Request
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤ID
```javascript
{
"id": "c905078a-c1ee-4802-a852-a5ee6b2f64e9"
}
```
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
400 | API_ERROR.DIET_PLAN_PLATE_STATUS_NOT_DRAFT | 刪除的餐盤並非草稿狀態
#### Response
欄位 | 型態 | 說明
--- | --- | ---
data | int | 刪除的餐盤數量
```javascript
{
"httpCode": 200,
"result": {
"data": 1
}
}
```
### 圴衡飲食趨勢分析[WEB]
```url
POST /diet-plan-mgmt/diet/trend
```
* 包含飲食分數, 飲食記錄攝取熱量, 調整後攝取熱量, 三大營養素熱量比率
* 飲食分數是以整天為計算基礎
* 以月查詢時, detailList裡為每個月的平均資料(分母為當月總天數)
#### Request-圴衡飲食趨勢分析
欄位 | 型態 | 預設 | 說明
--- | --- | --- |---
query | json | | 查詢條件json
##### Request-圴衡飲食趨勢分析-query(查詢條件json)
欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明
---|---|---|---|---|---
householdMemberId | string | WEB:**Y** | | | Web端必填, APP端由token取得
startDate | string | Y | | | 要搜尋的起始日期, YYYY-MM-DD, 或毫秒值
endDate | string | Y | | | 要搜尋的結束日期, YYYY-MM-DD, 或毫秒值
scorePeriod | string | Y | | | 飲食分數查詢區間類別, 請參閱[飲食分數查詢區間類別](#飲食分數查詢區間類別), 目前只能選DAILY及MONTHLY
```javascript
{
"query": {
"householdMemberId": "c0fbb6d5-53c4-4962-bc17-1591e4903b2f",
"startDate": "2022-12-01",
"endDate": "2023-02-22",
"scorePeriod": "MONTHLY"
}
}
```
#### Response-圴衡飲食趨勢分析
欄位 | 型態 | 說明
--- | --- | ---
recordDays | int | 有飲食記錄的記錄天數
avgScore | double | 均衡飲食平均分數
scoreDelta | double | 均衡飲食分數變化, 為最新一筆資料分數-最舊一筆資料分數
trendSummaryInfo | json | 均衡飲食 summary json, 用來取出總結的三大營業素的比率
detailList | json array | 均衡飲食 json list
##### Response-圴衡飲食趨勢分析-trendSummaryInfo(json)
請參閱[detalList(json)](#Response-圴衡飲食趨勢分析-detailListjson)
##### Response-圴衡飲食趨勢分析-detailList(json)
欄位 | 型態 | 說明
--- | --- | ---
dietDate | date | 飲食記錄日期, trendSummaryInfo json無此欄位, 若查詢條件scorePeriod=MONTHLY, 表示該月1號
score | double | 飲食分數
totalCalorie | double | 攝取總熱量
protein | double | 攝取蛋白質(g)
carbohydrate | double | 攝取碳水化合物(g)
fat | double | 攝取脂肪(g)
proteinCal | double | 攝取蛋白質熱量
carbohydrateCal | double | 攝取碳水化合物熱量
fatCal | double | 攝取脂肪熱量
proteinRate | double | 攝取蛋白質比率(%)
carbohydrateRate | double | 攝取碳水化合物比率(%)
fatRate | double | 攝取脂肪比率(%)
isAdjust | boolean | 飲食記錄是否有調整過, true表示有調整過, 請直接使用調整後的相關欄位數值
adjustTotalCalorie | double | 調整後攝取總熱量
adjustProtein | double | 調整後攝取蛋白質(g)
adjustCarbohydrate | double | 調整後攝取碳水化合物(g)
adjustFat | double | 調整後攝取脂肪(g)
adjustProteinCal | double | 調整後攝取蛋白質熱量
adjustCarbohydrateCal | double | 調整後攝取碳水化合物熱量
adjustFatCal | double | 調整後攝取脂肪熱量
adjustProteinRate | double | 調整後攝取蛋白質比率(%)
adjustCarbohydrateRate | double | 調整後攝取碳水化合物比率(%)
adjustFatRate | double | 調整後攝取脂肪比率(%)
```javascript
{
"httpCode": 200,
"result": {
"data": {
"recordDays": 12,
"avgScore": 2.28,
"scoreDelta": -5.42,
"trendSummaryInfo": {
"totalCalorie": 82.28,
"protein": 3.92,
"carbohydrate": 7.77,
"fat": 3.95,
"proteinCal": 15.66,
"carbohydrateCal": 31.08,
"fatCal": 35.58,
"proteinRate": 19,
"carbohydrateRate": 38,
"fatRate": 43,
"isAdjust": true,
"adjustTotalCalorie": 118.38,
"adjustProtein": 6.11,
"adjustCarbohydrate": 11.14,
"adjustFat": 5.49,
"adjustProteinCal": 24.43,
"adjustCarbohydrateCal": 44.57,
"adjustFatCal": 49.43,
"adjustProteinRate": 21,
"adjustCarbohydrateRate": 38,
"adjustFatRate": 42,
"score": 3.42
},
"detailList": [
{
"dietDate": 1675180800000,
"totalCalorie": 16,
"protein": 0.61,
"carbohydrate": 1.25,
"fat": 0.95,
"proteinCal": 2.43,
"carbohydrateCal": 5,
"fatCal": 8.58,
"proteinRate": 15,
"carbohydrateRate": 31,
"fatRate": 54,
"isAdjust": false,
"adjustTotalCalorie": 16,
"adjustProtein": 0.61,
"adjustCarbohydrate": 1.25,
"adjustFat": 0.95,
"adjustProteinCal": 2.43,
"adjustCarbohydrateCal": 5,
"adjustFatCal": 8.58,
"adjustProteinRate": 15,
"adjustCarbohydrateRate": 31,
"adjustFatRate": 54,
"score": 0.71
},
{
"dietDate": 1669824000000,
"totalCalorie": 148.56,
"protein": 7.22,
"carbohydrate": 14.29,
"fat": 6.95,
"proteinCal": 28.88,
"carbohydrateCal": 57.16,
"fatCal": 62.58,
"proteinRate": 19,
"carbohydrateRate": 38,
"fatRate": 42,
"isAdjust": true,
"adjustTotalCalorie": 220.75,
"adjustProtein": 11.61,
"adjustCarbohydrate": 21.03,
"adjustFat": 10.03,
"adjustProteinCal": 46.43,
"adjustCarbohydrateCal": 84.13,
"adjustFatCal": 90.28,
"adjustProteinRate": 21,
"adjustCarbohydrateRate": 38,
"adjustFatRate": 41,
"score": 6.13
}
]
}
}
}
```:::spoiler API 清單
[TOC]
:::
# 智慧餐盤
## 常數定義
### 食物分類
欄位 | 型態 | 說明
---|---|---
category | string | WHOLE_GRAINS: 全榖雜糧, LEGUME_FISH_MEAT_EGG: 豆魚肉蛋, DAIRY: 乳製品, VEGETABLES: 蔬菜, FRUITS: 水果, OILS_AND_NUTS: 食用油與堅果, DRINK: 飲料, OTHER: 其他
### 食物類型-LEGUME_FISH_MEAT_EGG
欄位 | 型態 | 說明
---|---|---
type | string | LOW_FAT: 低脂, MEDIUM_FAT: 中脂, HIGH_FAT: 高脂, VERY_HIGH_FAT: 超高脂
### 食物類型-DAIRY
欄位 | 型態 | 說明
---|---|---
type | string | LOW_FAT: 低脂, WHOLE_FAT: 全脂, SKIM: 脫脂
### 食物類型-VEGETABLES
欄位 | 型態 | 說明
---|---|---
type | string | RAW: 生, COOKED: 熟
### 食物類型-OILS_AND_NUTS
欄位 | 型態 | 說明
---|---|---
type | string | OIL: 食用油, NUT: 堅果
### 食物類型-DRINK
欄位 | 型態 | 說明
---|---|---
type | string | WATER: 水, FULL_SUGAR: 全糖, LESS_SUGAR: 少糖, HALF_SUGAR: 半糖, QUARTER_SUGAR: 微糖, SUGAR_FREE: 無糖
### 用餐時段
欄位 | 型態 | 說明
---|---|---
timePeriod | int | ALL: -1(查詢用), 早上: 1, 中午: 2, 晚上: 3, 睡前: 4
### 用餐餐別
欄位 | 型態 | 說明
---|---|---
timePeriodType | int | ALL: -1(查詢用), <br/> **早上**<br/> 早餐: 10, 早午餐: 11, 運動前一小時: 12, 運動前兩小時: 13, 運動後一小時: 14, 運動後兩小時: 15, <br/> **中午**<br/> 午餐: 20, 下午茶: 21, 運動前一小時: 22, 運動前兩小時: 23, 運動後一小時: 24, 運動後兩小時: 25, <br/> **晚上**<br/> 晚餐: 30, 點心: 31, 運動前一小時: 32, 運動前兩小時: 33, 運動後一小時: 34, 運動後兩小時: 35 <br/> **睡前**<br/> 40:宵夜, 運動前一小時: 42, 運動前兩小時: 43, 運動後一小時: 44, 運動後兩小時: 45
### 烹調方式
欄位 | 型態 | 說明
---|---|---
type | string | FAT_FREE: 無油, FRY: 非油炸, FRIED: 油炸
### 額外加糖
欄位 | 型態 | 說明
---|---|---
type | string | NONE: 無添加, WITH_SUGAR: 加糖
### 餐盤狀態
欄位 | 型態 | 說明
---|---|---
status | string | DRAFT: 草稿, PUBLISHED: 已發布
### 飲食記錄方式
欄位 | 型態 | 說明
---|---|---
diaryRecordType | string | DIET_PLAN: 我的餐盤, FOOD_DB: 食品資料庫
### 飲食分數查詢區間類別
欄位 | 型態 | 說明
---|---|---
scorePeriod | string | DAILY: 日, WEEKLY: 週, MONTHLY: 月
## API
### 取得六大營養素資訊[APP/WEB]
```url
GET /diet-plan/getIngredientsInfo
```
取得六大營養素的類別/分類/熱量
#### Request
#### Response
欄位 | 型態 | 說明
--- | --- | ---
category | string | 食物分類, 請參閱[食物分類](#食物分類)
types | json array | 在食物分類下的所有類型食材
cookedTypes | json array | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugars | json array | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
##### Response-types
欄位 | 型態 | 說明
--- | --- | ---
id | string | 食材id
description | string | 食材描述
type | string | 食物類型, 請參照[各食物類型](#食物類型-LEGUME_FISH_MEAT_EGG)
simpleUnit | string | 簡易份量單位
calorie | double | 每份量的熱量
protein | double | 每份量的蛋白質重量(g)
sugar | double | 每份量的糖重量(g)
fat | double | 每份量的脂肪重量(g)
protein_cal | double | 每份量的蛋白質熱量
sugar_cal | double | 每份量的糖熱量
fat_cal | double | 每份量的脂肪熱量
simpleUnitTransferCoefficient | double | 簡易單位轉換成一般份量的轉換係數<BR>上方的重量和熱量都是基於一般分量. 要用簡易熱量轉換時要乘上轉換係數<BR>e.g.: 每份熱量: 50, 轉換係數: 2, 0.5份簡易份量熱量等於: 0.5 x 2 x 50
##### Response-cookedTypes/addedSugars
欄位 | 型態 | 說明
--- | --- | ---
id | string | 食材id
description | string | 食材描述
type | string | 食物類型, 請參照[各食物類型](#食物類型-LEGUME_FISH_MEAT_EGG)
calorie | double | 每份量的熱量
protein | double | 每份量的蛋白質重量(g)
sugar | double | 每份量的糖重量(g)
fat | double | 每份量的脂肪重量(g)
protein_cal | double | 每份量的蛋白質熱量
sugar_cal | double | 每份量的糖熱量
fat_cal | double | 每份量的脂肪熱量
```javascript
{
"httpCode": 200,
"result": {
"data": [
{
"category": "LEGUME_FISH_MEAT_EGG",
"types": [
{
"id": "5ac5e206-881d-4d0d-b6b7-6ef9c61713b4",
"description": "豆魚肉蛋(中脂)",
"type": "MEDIUM_FAT",
"simpleUnit": "掌心",
"simpleUnitTransferCoefficient": 2.0,
"protein": 7.0,
"fat": 5.0,
"calorie": 73.0,
"proteinCal": 28.0,
"fatCal": 20.0
}...
],
"cookedTypes": [
{
"id": "01a74fad-3df8-429e-8507-2392969b5585",
"description": "烹調方式(無油)",
"type": "FAT_FREE",
"fat": 0.0,
"calorie": 0.0,
"fatCal": 0.0
},
...
],
"addedSugars": []
},
]
}
}
```
### 取得我的建議餐盤[APP]
```url
GET /diet-plan/getMySuggestPlan
```
取得我的建議餐盤
#### Request
#### Response-取得我的建議餐盤
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤id
createTime | timestamp | 餐盤建立時間
updateTime | timestamp | 餐盤更新時間
creatorId | string | 餐盤建立者ID, 空值的話代表衛福部預設餐盤
creatorName | string | 餐盤建立者姓名, 空值的話代表衛福部預設餐盤
creatorRole | string | 餐盤建立者腳色, 空值的話代表衛福部預設餐盤
tenantId | string | 餐盤建立者的租戶ID, 空值的話代表衛福部預設餐盤
tenantName | string | 餐盤建立者的租戶名稱, 空值的話代表衛福部預設餐盤
totalCalorie | double | 本餐盤的總熱量
totalProteinCalorie | double | 本餐盤的蛋白質熱量
totalSugarCalorie | double | 本餐盤的醣類熱量
totalFatCalorie | double | 本餐盤的脂肪熱量
timePeriods| json array | 餐盤時段array
cookedTypes | json array | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugars | json array | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
##### Response-timePeriods
欄位 | 型態 | 說明
--- | --- | ---
timePeriod | int | 用餐時段, 請參閱[用餐時段](#用餐時段)
timePeriodTypes | json array | 用餐餐別
##### Response-timePeriodTypes
欄位 | 型態 | 說明
--- | --- | ---
timePeriodType | int | 用餐餐別, 請參閱[用餐餐別](#用餐餐別)
totalCalorie | double | 本餐別的總熱量
totalProteinCalorie | double | 本餐別的蛋白質熱量
totalSugarCalorie | double | 本餐別的醣類熱量
totalFatCalorie | double | 本餐別的脂肪熱量
meals | json array | 建議餐點類型與用量
foodCategorys| json array| 建議餐點的熱量和用量根據食物分類統計
##### Response-meals
欄位 | 型態 | 說明
--- | --- | ---
foodCategory | string | 食物分類, 請參閱[食物分類](#食物分類)
foodType | string | 食物類型, 請參照[各食物類型](#食物類型-LEGUME_FISH_MEAT_EGG)
cookedType | string | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugar | string | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
quantity | double | 建議用量(份)
simpleUnit | string | 簡易單位
calorie | double | 本餐點的熱量
proteinCalorie | double | 本餐點的蛋白質熱量
sugarCalorie | double | 本餐點的醣類熱量
fatCalorie | double | 本餐點的脂肪熱量
simpleUnitTransferCoefficient | double | 簡易單位轉換成一般份量的轉換係數<BR/>上方的重量和熱量都是基於一般分量. 要用簡易熱量轉換時要乘上轉換係數<BR>e.g.: 每份熱量: 50, 轉換係數: 2, 0.5份簡易份量熱量等於: 0.5 x 2 x 50
##### Response-foodCategorys
欄位 | 型態 | 說明
--- | --- | ---
foodCategory | string | 食物分類, 請參閱[食物分類](#食物分類)
quantity | double | 建議用量(份)
simpleUnit | string | 簡易單位
calorie | double | 本餐點的熱量
proteinCalorie | double | 本餐點的蛋白質熱量
sugarCalorie | double | 本餐點的醣類熱量
fatCalorie | double | 本餐點的脂肪熱量
simpleUnitTransferCoefficient | double | 簡易單位轉換成一般份量的轉換係數<BR/>上方的重量和熱量都是基於一般分量. 要用簡易熱量轉換時要乘上轉換係數<BR>e.g.: 每份熱量: 50, 轉換係數: 2, 0.5份簡易份量熱量等於: 0.5 x 2 x 50
```javascript
{
"httpCode": 200,
"result": {
"data": {
"id": "6298166e-6dc5-435e-b113-0975d48efdb9",
"createTime": 1664122976237,
"updateTime": 1664122976237,
"creatorId": "7a17be34-13ae-4687-b971-1e5f586c8e3a",
"creatorName": "Dr. X",
"creatorRole": "腳科醫生",
"tenantId": "858b7fbb-3ba0-4d49-9882-c893a1ef07dc",
"tenantName": "緯緯醫學",
"totalCalorie": 324.5,
"totalProteinCalorie": 52.0,
"totalSugarCalorie": 88.0,
"totalFatCalorie": 94.5,
"timePeriods": [
{
"timePeriod": 1,
"timePeriodTypes": [
{
"timePeriodType": 10,
"totalCalorie": 324.5,
"totalProteinCalorie": 52.0,
"totalSugarCalorie": 88.0,
"totalFatCalorie": 94.5,
"meals": [
{
"foodCategory": "LEGUME_FISH_MEAT_EGG",
"foodType": "MEDIUM_FAT",
"quantity": 0.5,
"simpleUnit": "掌心",
"simpleUnitTransferCoefficient": 2.0,
"cookedType": "FRY",
"calorie": 36.5,
"proteinCalorie": 14.0,
"sugarCalorie": 0.0,
"fatCalorie": 22.5
},...
],
"foodCategorys": [
{
"calorie": 45.0,
"proteinCal": 0.0,
"sugarCal": 0.0,
"fatCal": 45.0,
"foodCategory": "OILS_AND_NUTS",
"quantity": 1.0,
"simpleUnit": "茶匙5ml",
"simpleUnitTransferCoefficient": 0.333333
},
}
]
}
]
}
}
}
```
### 查詢用戶的餐盤清單[WEB]
```url
POST /diet-plan-mgmt/queryDietPlanList
```
取得用戶的所有建議餐盤
#### Request
##### query (查詢條件json)
欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明
---|---|---|---|---|---
householdMemberId | string | | | | 要查詢的用戶ID
##### pagination (分頁json)
欄位 | 型態 | 必填 | 預設 | 說明
---|---|---|---|---
current | int | | 1 | 當前頁數
pageSize | int | | 10 | 每頁結果數量,-1 為顯示所有
##### sorter (排序json)
欄位 | 型態 | 必填 | 預設 | 說明
---|---|---|---|---
field | string | | createTime | 排序欄位,可排序欄位有 totalCalories, creatorName, status, updateTime
order | string | | desc | 升序或降序
```javascript
{
"query": {
"householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5"
}
}
```
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
#### Response
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤id
createTime | timestamp | 餐盤建立時間
updateTime | timestamp | 餐盤更新時間
creatorId | string | 餐盤建立者ID, 空值的話代表衛福部預設餐盤
creatorName | string | 餐盤建立者姓名, 空值的話代表衛福部預設餐盤
tenantId | string | 餐盤建立者的租戶ID, 空值的話代表衛福部預設餐盤
tenantName | string | 餐盤建立者的租戶名稱, 空值的話代表衛福部預設餐盤
totalCalorie| double | 該餐盤的總建議熱量
status | string | 餐盤狀態, 請參閱[餐盤狀態](#餐盤狀態)
```javascript
{
"httpCode": 200,
"result": {
"data": [
{
"id": "6298166e-6dc5-435e-b113-0975d48efdb9",
"createTime": 1664122976237,
"updateTime": 1664122976237,
"status": "PUBLISHED",
"creatorId": "7a17be34-13ae-4687-b971-1e5f586c8e3a",
"creatorName": "Dr. X",
"tenantId": "858b7fbb-3ba0-4d49-9882-c893a1ef07dc",
"tenantName": "緯緯醫學",
"totalCalorie": 324.5
},
...
]
}
}
```
### 取得營養診斷資訊[WEB]
```url
GET /diet-plan-mgmt/getNutritionalDiagnosisInfo
```
取得營養診斷資訊
#### Request
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
#### Response
欄位 | 型態 | 說明
--- | --- | ---
problemCategoryId | string | 問題分類key
problemCategoryI18n | string | 問題分類i18n
problemCategoryDescription | string | 問題分類描述
problems | json array | 該問題分類下的所有問題
##### Response-problems
欄位 | 型態 | 說明
--- | --- | ---
problemId | string | 問題key
problemI18n | string | 問題i18n
problemDescription | string | 問題描述
etiologys | json array | 該問題下的所有危險因子
##### Response-etiologys
欄位 | 型態 | 說明
--- | --- | ---
etiologyId | string | 危險因子key
etiologyI18n | string | 危險因子i18n
etiologyDescription | string |危險因子描述
```javascript
{
"httpCode": 200,
"result": {
"data": [
{
"problemCategoryId": "f9223c4b-4d0e-4246-b47f-8e66e856413d",
"problemCategoryDescription": "體位",
"problems": [
{
"problemId": "ce2ec4c5-19ea-4317-a7ea-134ad3311207",
"problemDescription": "體重過輕",
"etiologys": [
{
"etiologyId": "7a9b014c-37db-4601-a2d4-8422f11f80a6",
"etiologyDescription": "照顧者或本身對食物及營養相關議題有錯誤認知及態度"
},
...
]
}
]
}
]
}
}
```
### 取得用戶的建議餐盤[WEB]
```url
GET /diet-plan-mgmt/dietPlan/info?id={id}
```
#### Request
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤ID
```javascript
```
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
#### Response
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤id
createTime | timestamp | 餐盤建立時間
updateTime | timestamp | 餐盤更新時間
creatorId | string | 餐盤建立者ID, 空值的話代表衛福部預設餐盤
creatorName | string | 餐盤建立者姓名, 空值的話代表衛福部預設餐盤
creatorRole | string | 餐盤建立者腳色, 空值的話代表衛福部預設餐盤
tenantId | string | 餐盤建立者的租戶ID, 空值的話代表衛福部預設餐盤
tenantName | string | 餐盤建立者的租戶名稱, 空值的話代表衛福部預設餐盤
totalCalorie | double | 本餐盤的總熱量
totalProteinCalorie | double | 本餐盤的蛋白質熱量
totalSugarCalorie | double | 本餐盤的醣類熱量
totalFatCalorie | double | 本餐盤的脂肪熱量
meals| json array | 餐點array
nutritionalDiagnosisInfo| json object | 營養診斷資訊
cookedTypes | json array | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugars | json array | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
##### Response-meals
欄位 | 型態 | 說明
--- | --- | ---
timePeriod | int | 用餐時段, 請參閱[用餐時段](#用餐時段)
timePeriodType | int | 用餐餐別, 請參閱[用餐餐別](#用餐餐別)
foodCategory | string | 食物分類, 請參閱[食物分類](#食物分類)
foodType | string | 食物類型, 請參照[各食物類型](#食物類型-LEGUME_FISH_MEAT_EGG)
cookedType | string | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugar | string | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
quantity | double | 建議用量(份)
simpleUnit | string | 簡易單位
quantityForSimpleUnit | double | 建議用量(簡易單位)
calorie | double | 本餐點的熱量
proteinCalorie | double | 本餐點的蛋白質熱量
sugarCalorie | double | 本餐點的醣類熱量
fatCalorie | double | 本餐點的脂肪熱量
simpleUnitTransferCoefficient | double | 簡易單位轉換成一般份量的轉換係數<BR>上方的重量和熱量都是基於一般分量. 要用簡易熱量轉換時要乘上轉換係數<BR>e.g.: 每份熱量: 50, 轉換係數: 2, 0.5份簡易份量熱量等於: 0.5 x 2 x 50
##### Response-nutritionalDiagnosisInfo
欄位 | 型態 | 說明
--- | --- | ---
categoryId | string | 問題分類ID
categoryI18n | string | 問題分類i18n
categoryDescription | string | 問題分類描述
problemId | string | 問題ID
problemI18n | string | 問題i18n
problemDescription | string | 問題描述
etiologys | json array | 該問題下的所有危險因子
etiologyId | string | 病因ID
etiologyI18n | string | 病因i18n
etiologyDescription | string |病因描述
signs| string | 病徵
```javascript
{
"httpCode": 200,
"result": {
"data": {
"id": "6298166e-6dc5-435e-b113-0975d48efdb9",
"createTime": 1664122976237,
"updateTime": 1664122976237,
"status": "PUBLISHED",
"creatorId": "7a17be34-13ae-4687-b971-1e5f586c8e3a",
"creatorName": "Dr. X",
"creatorRole": "腳科醫生",
"tenantId": "858b7fbb-3ba0-4d49-9882-c893a1ef07dc",
"tenantName": "緯緯醫學",
"totalCalorie": 324.5,
"totalProteinCalorie": 52.0,
"totalSugarCalorie": 88.0,
"totalFatCalorie": 94.5,
"meals": [
{
"timePeriod": 1,
"timePeriodType": 10,
"calorie": 36.5,
"proteinCal": 14.0,
"sugarCal": 0.0,
"fatCal": 22.5,
"foodCategory": "LEGUME_FISH_MEAT_EGG",
"foodType": "MEDIUM_FAT",
"quantity": 0.5,
"simpleUnit": "掌心",
"simpleUnitTransferCoefficient": 2.0,
"cookedType": "FRY"
},
...
],
"nutritionalDiagnosisInfo": {
"categoryId": "f9223c4b-4d0e-4246-b47f-8e66e856413d",
"categoryDescription": "體位",
"problemId": "ce2ec4c5-19ea-4317-a7ea-134ad3311207",
"problemDescription": "體重過輕",
"etiologyId": "7a9b014c-37db-4601-a2d4-8422f11f80a6",
"etiologyDescription": "照顧者或本身對食物及營養相關議題有錯誤認知及態度",
"signs": "test diagnosis"
}
}
}
}
```
### 新增用戶的建議餐盤[WEB]
```url
POST /diet-plan-mgmt/dietPlan/add
```
#### Request
欄位 | 型態 | 說明
--- | --- | ---
householdMemberId | string | 用戶ID
status | string | 用戶ID
ndCategoryId | string | 營養診斷問題類別ID
ndProblemId | string | 營養診斷問題ID
ndEtiologyId | string | 營養診斷病因ID
ndSigns | string | 營養診斷病徵說明
meals | json array | 餐點array
##### Request-meals
欄位 | 型態 | 說明
--- | --- | ---
timePeriod | int | 用餐時段, 請參閱[用餐時段](#用餐時段)
timePeriodType | int | 用餐餐別, 請參閱[用餐餐別](#用餐餐別)
foodCategoryId | string | 食物分類ID, 請參閱[食物分類](#食物分類)
cookedType | string | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugar | string | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
quantity | double | 建議用量(份)
```javascript
{
"householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5",
"status": "DRAFT",
"ndCategoryId": "f9223c4b-4d0e-4246-b47f-8e66e856413d",
"ndProblemId": "ce2ec4c5-19ea-4317-a7ea-134ad3311207",
"ndEtiologyId": "7a9b014c-37db-4601-a2d4-8422f11f80a6",
"ndSigns": "test diagnosis",
"meals": [
{
"timePeriod": 1,
"timePeriodType": 10,
"foodCategoryId": "3844d748-c46d-416f-bd0c-e11241d42e47",
"quantity": 3,
"cookedType": "FRY"
}
]
}
```
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
400 | API_ERROR.DIET_PLAN_DRAFT_PLATE_EXIST | 當前存在草稿餐盤
#### Response
欄位 | 型態 | 說明
--- | --- | ---
data | int | 新增的餐點數量
```javascript
{
"httpCode": 200,
"result": {
"data": 1
}
}
```
### 更新用戶的建議餐盤[WEB]
```url
POST /diet-plan-mgmt/dietPlan/update
```
#### Request
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤ID
householdMemberId | string | 用戶ID
status | string | 用戶ID
ndCategoryId | string | 營養診斷問題類別ID
ndProblemId | string | 營養診斷問題ID
ndEtiologyId | string | 營養診斷病因ID
ndSigns | string | 營養診斷病徵說明
meals | json array | 餐點array
##### Request-meals
欄位 | 型態 | 說明
--- | --- | ---
timePeriod | int | 用餐時段, 請參閱[用餐時段](#用餐時段)
timePeriodType | int | 用餐餐別, 請參閱[用餐餐別](#用餐餐別)
foodCategoryId | string | 食物分類ID, 請參閱[食物分類](#食物分類)
cookedType | string | 在食物分類下的烹調類型, 目前只有LEGUME_FISH_MEAT_EGG, WHOLE_GRAINS, VEGETABLES有烹調類型
addedSugar | string | 在食物分類下的可額外添加糖的類型, 目前只有DAIRY有額外加糖選項
quantity | double | 建議用量(份)
```javascript
{
"id": "c905078a-c1ee-4802-a852-a5ee6b2f64e9",
"householdMemberId": "8a9e980a-c612-4f87-af07-a97a5f0fbed5",
"status": "PUBLISHED",
"ndCategoryId": "f9223c4b-4d0e-4246-b47f-8e66e856413d",
"ndProblemId": "ce2ec4c5-19ea-4317-a7ea-134ad3311207",
"ndEtiologyId": "7a9b014c-37db-4601-a2d4-8422f11f80a6",
"ndSigns": "test diagnosis",
"meals": [
{
"timePeriod": 1,
"timePeriodType": 11,
"foodCategoryId": "3844d748-c46d-416f-bd0c-e11241d42e47",
"quantity": 4,
"cookedType": "FRY"
}
]
}
```
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
400 | API_ERROR.DIET_PLAN_PLATE_STATUS_NOT_DRAFT | 更新的餐盤並非草稿狀態
#### Response
欄位 | 型態 | 說明
--- | --- | ---
data | int | 更新的餐點數量
```javascript
{
"httpCode": 200,
"result": {
"data": 1
}
}
```
### 刪除用戶的建議餐盤[WEB]
```url
POST /diet-plan-mgmt/dietPlan/delete
```
#### Request
欄位 | 型態 | 說明
--- | --- | ---
id | string | 餐盤ID
```javascript
{
"id": "c905078a-c1ee-4802-a852-a5ee6b2f64e9"
}
```
#### Error
httpCode | 錯誤碼 | 說明
--- | --- | ---
400 | API_ERROR.DIET_PLAN_PLATE_STATUS_NOT_DRAFT | 刪除的餐盤並非草稿狀態
#### Response
欄位 | 型態 | 說明
--- | --- | ---
data | int | 刪除的餐盤數量
```javascript
{
"httpCode": 200,
"result": {
"data": 1
}
}
```
### 圴衡飲食趨勢分析[WEB]
```url
POST /diet-plan-mgmt/diet/trend
```
* 包含飲食分數, 飲食記錄攝取熱量, 調整後攝取熱量, 三大營養素熱量比率
* 飲食分數是以整天為計算基礎
* 以月查詢時, detailList裡為每個月的平均資料(分母為當月總天數)
#### Request-圴衡飲食趨勢分析
欄位 | 型態 | 預設 | 說明
--- | --- | --- |---
query | json | | 查詢條件json
##### Request-圴衡飲食趨勢分析-query(查詢條件json)
欄位 | 型態 | 必填 | 長度限制 | 預設 | 說明
---|---|---|---|---|---
householdMemberId | string | WEB:**Y** | | | Web端必填, APP端由token取得
startDate | string | Y | | | 要搜尋的起始日期, YYYY-MM-DD, 或毫秒值
endDate | string | Y | | | 要搜尋的結束日期, YYYY-MM-DD, 或毫秒值
scorePeriod | string | Y | | | 飲食分數查詢區間類別, 請參閱[飲食分數查詢區間類別](#飲食分數查詢區間類別), 目前只能選DAILY及MONTHLY
```javascript
{
"query": {
"householdMemberId": "c0fbb6d5-53c4-4962-bc17-1591e4903b2f",
"startDate": "2022-12-01",
"endDate": "2023-02-22",
"scorePeriod": "MONTHLY"
}
}
```
#### Response-圴衡飲食趨勢分析
欄位 | 型態 | 說明
--- | --- | ---
recordDays | int | 有飲食記錄的記錄天數
avgScore | double | 均衡飲食平均分數
scoreDelta | double | 均衡飲食分數變化, 為最新一筆資料分數-最舊一筆資料分數
trendSummaryInfo | json | 均衡飲食 summary json, 用來取出總結的三大營業素的比率
detailList | json array | 均衡飲食 json list
##### Response-圴衡飲食趨勢分析-trendSummaryInfo(json)
請參閱[detalList(json)](#Response-圴衡飲食趨勢分析-detailListjson)
##### Response-圴衡飲食趨勢分析-detailList(json)
欄位 | 型態 | 說明
--- | --- | ---
dietDate | date | 飲食記錄日期, trendSummaryInfo json無此欄位, 若查詢條件scorePeriod=MONTHLY, 表示該月1號
score | double | 飲食分數
totalCalorie | double | 攝取總熱量
protein | double | 攝取蛋白質(g)
carbohydrate | double | 攝取碳水化合物(g)
fat | double | 攝取脂肪(g)
proteinCal | double | 攝取蛋白質熱量
carbohydrateCal | double | 攝取碳水化合物熱量
fatCal | double | 攝取脂肪熱量
proteinRate | double | 攝取蛋白質比率(%)
carbohydrateRate | double | 攝取碳水化合物比率(%)
fatRate | double | 攝取脂肪比率(%)
isAdjust | boolean | 飲食記錄是否有調整過, true表示有調整過, 請直接使用調整後的相關欄位數值
adjustTotalCalorie | double | 調整後攝取總熱量
adjustProtein | double | 調整後攝取蛋白質(g)
adjustCarbohydrate | double | 調整後攝取碳水化合物(g)
adjustFat | double | 調整後攝取脂肪(g)
adjustProteinCal | double | 調整後攝取蛋白質熱量
adjustCarbohydrateCal | double | 調整後攝取碳水化合物熱量
adjustFatCal | double | 調整後攝取脂肪熱量
adjustProteinRate | double | 調整後攝取蛋白質比率(%)
adjustCarbohydrateRate | double | 調整後攝取碳水化合物比率(%)
adjustFatRate | double | 調整後攝取脂肪比率(%)
```javascript
{
"httpCode": 200,
"result": {
"data": {
"recordDays": 12,
"avgScore": 2.28,
"scoreDelta": -5.42,
"trendSummaryInfo": {
"totalCalorie": 82.28,
"protein": 3.92,
"carbohydrate": 7.77,
"fat": 3.95,
"proteinCal": 15.66,
"carbohydrateCal": 31.08,
"fatCal": 35.58,
"proteinRate": 19,
"carbohydrateRate": 38,
"fatRate": 43,
"isAdjust": true,
"adjustTotalCalorie": 118.38,
"adjustProtein": 6.11,
"adjustCarbohydrate": 11.14,
"adjustFat": 5.49,
"adjustProteinCal": 24.43,
"adjustCarbohydrateCal": 44.57,
"adjustFatCal": 49.43,
"adjustProteinRate": 21,
"adjustCarbohydrateRate": 38,
"adjustFatRate": 42,
"score": 3.42
},
"detailList": [
{
"dietDate": 1675180800000,
"totalCalorie": 16,
"protein": 0.61,
"carbohydrate": 1.25,
"fat": 0.95,
"proteinCal": 2.43,
"carbohydrateCal": 5,
"fatCal": 8.58,
"proteinRate": 15,
"carbohydrateRate": 31,
"fatRate": 54,
"isAdjust": false,
"adjustTotalCalorie": 16,
"adjustProtein": 0.61,
"adjustCarbohydrate": 1.25,
"adjustFat": 0.95,
"adjustProteinCal": 2.43,
"adjustCarbohydrateCal": 5,
"adjustFatCal": 8.58,
"adjustProteinRate": 15,
"adjustCarbohydrateRate": 31,
"adjustFatRate": 54,
"score": 0.71
},
{
"dietDate": 1669824000000,
"totalCalorie": 148.56,
"protein": 7.22,
"carbohydrate": 14.29,
"fat": 6.95,
"proteinCal": 28.88,
"carbohydrateCal": 57.16,
"fatCal": 62.58,
"proteinRate": 19,
"carbohydrateRate": 38,
"fatRate": 42,
"isAdjust": true,
"adjustTotalCalorie": 220.75,
"adjustProtein": 11.61,
"adjustCarbohydrate": 21.03,
"adjustFat": 10.03,
"adjustProteinCal": 46.43,
"adjustCarbohydrateCal": 84.13,
"adjustFatCal": 90.28,
"adjustProteinRate": 21,
"adjustCarbohydrateRate": 38,
"adjustFatRate": 41,
"score": 6.13
}
]
}
}
}
```