Feature #40
由 张 瑞阳 更新于 大约一个月 之前
# 超管端任务按钮显示规则
本文档描述超管端(随访工作台 / 计划任务管理,默认 `FollowUpRole.DOCTOR`)各任务类型在不同状态下的操作按钮显示逻辑。
> 个案管理端规则见 #23 上门访视
> 家医端规则见 #24 任务类型:上门访视
> 患者端规则见 #25
## 通用字段
| 字段 | 类型 | 说明 | 任务状态:未开始|已超时|待随访|已随访(失访)|取消
|------|------|------| taskType = VISIT_FOLLOW_UP
| `taskType` | `TaskType` | 任务类型枚举 | taskOriginalStatus = NOT_START|TIMEOUT|WAIT_FOLLOW_UP|SUBMITTED_LOST|CANCELED
| `taskOriginalStatus` | `TaskStatus` | 任务原始状态 |
| `dwAnswerId` | `String` | 问卷回答 ID;有值表示已填写问卷 | 不显示按钮
## 状态对照
| 展示文案 | `taskOriginalStatus` | 任务类型:上门访视
|----------|----------------------| 任务状态:已随访
| 未开始 | `NOT_START` | taskType = VISIT_FOLLOW_UP
| 待随访 | `WAIT_FOLLOW_UP` |
| 已超时 | `TIMEOUT` |
| 已随访 / 已提交 | `SUBMITTED` |
| 已随访(失访) | `SUBMITTED_LOST` |
| 已取消 | `CANCELED` |
> **说明:** 上传检查单、电话随访的 `CANCELED` 在部分场景下仅作为展示状态,按钮逻辑与进行中一致(见各任务类型说明)。
---
## 1. 上门访视 `VISIT_FOLLOW_UP`
超管端不可操作上门访视,仅可在已提交且有问卷时查看。
### 进行中 / 失访 / 已取消
**条件:**
- `taskOriginalStatus` ∈ `NOT_START` | `TIMEOUT` | `WAIT_FOLLOW_UP` | `SUBMITTED_LOST` | `CANCELED`
**显示按钮:** 不显示
### 已提交
**条件:**
- `taskOriginalStatus` taskOriginalStatus = `SUBMITTED`
| 附加条件 | 显示按钮 | SUBMITTED
|----------|----------|
| `dwAnswerId` 不为空 | **查看问卷** |
| `dwAnswerId` dwAnswerId 为空 | ? 不显示按钮 | : 查看问卷
### 伪代码
```
if taskType == VISIT_FOLLOW_UP:
if status in [NOT_START, TIMEOUT, WAIT_FOLLOW_UP, SUBMITTED_LOST, CANCELED]:
→ 不显示
elif status == SUBMITTED:
if dwAnswerId 有值: → "查看问卷"
else: → 不显示
```
---
## 2. # 电话随访 `PHONE_CALL_FOLLOW_UP`
超管端核心可操作任务之一,支持填写/查看问卷、提交及失访提交。
### 进行中 / 已取消
**条件:**
- `taskOriginalStatus` ∈ `NOT_START` | `TIMEOUT` | `WAIT_FOLLOW_UP` | `CANCELED`
| 附加条件 | 显示按钮 |
|----------|----------| 任务类型:电话随访
| `dwAnswerId` 为空 | **填写问卷**、**提交(失访)**、**提交** | 任务状态:未开始|已超时|待随访|已取消
| `dwAnswerId` 不为空 | **查看问卷**、**提交(失访)**、**提交** |
> **业务说明:** `CANCELED` 仅作展示状态,按钮逻辑与进行中一致。
### 已提交
**条件:**
- `taskOriginalStatus` taskType = `SUBMITTED`
| 附加条件 | 显示按钮 | PHONE_CALL_FOLLOW_UP
|----------|----------| taskOriginalStatus = NOT_START|TIMEOUT|WAIT_FOLLOW_UP|CANCELED
| `dwAnswerId` 不为空 | **查看问卷** |
| `dwAnswerId` dwAnswerId 为空 | 不显示按钮 | ? 显示按钮 填写问卷/提交(失访)/提交 : 查看问卷/提交(失访)/提交
### 已随访(失访)
**条件:**
- `taskOriginalStatus` 任务类型:电话随访
任务状态:已随访
taskType = `SUBMITTED_LOST`
| 附加条件 | 显示按钮 | PHONE_CALL_FOLLOW_UP
|----------|----------| taskOriginalStatus = SUBMITTED
| `dwAnswerId` dwAnswerId 为空 | **提交** |
| `dwAnswerId` 不为空 | **查看问卷**、**提交** | ? 不显示按钮 : 查看问卷
### 伪代码
``` 任务类型:电话随访
if 任务状态:已随访(失访)
taskType == PHONE_CALL_FOLLOW_UP:
if status in [NOT_START, TIMEOUT, WAIT_FOLLOW_UP, CANCELED]:
if dwAnswerId 有值: → ["查看问卷", "提交(失访)", "提交"]
else: → ["填写问卷", "提交(失访)", "提交"]
elif status == SUBMITTED:
if dwAnswerId 有值: → "查看问卷"
else: → 不显示
elif status == SUBMITTED_LOST:
if dwAnswerId 有值: → ["查看问卷", "提交"]
else: → "提交" = PHONE_CALL_FOLLOW_UP
```
---
## 3. 复诊提醒 `RE_VISIT_REMINDER`
### 进行中
**条件:**
- `taskOriginalStatus` ∈ `NOT_START` | `TIMEOUT` | `WAIT_FOLLOW_UP`
**显示按钮:** **提交(失访)**、**提交**
### 已提交
**条件:**
- `taskOriginalStatus` taskOriginalStatus = `SUBMITTED`
**显示按钮:** 不显示
### 失访 / 已取消
**条件:**
- `taskOriginalStatus` ∈ `SUBMITTED_LOST` | `CANCELED`
**显示按钮:** **提交**
> **业务说明:** 取消后仍可提交,与个案管理端一致。
### 伪代码
``` SUBMITTED_LOST
if taskType == RE_VISIT_REMINDER:
if status in [NOT_START, TIMEOUT, WAIT_FOLLOW_UP]:
→ ["提交(失访)", "提交"]
elif status == SUBMITTED:
→ 不显示
elif status in [SUBMITTED_LOST, CANCELED]:
→ "提交"
``` dwAnswerId 为空 ? 显示按钮 提交 : 查看问卷/提交
---
## 4. 上传检查单 `UPLOAD_CHECK_LIST`
### 进行中 / 已取消
**条件:**
- `taskOriginalStatus` ∈ `NOT_START` | `TIMEOUT` | `WAIT_FOLLOW_UP` | `CANCELED`
| 附加条件 | 显示按钮 | # 复诊提醒
|----------|----------| 任务类型:复诊提醒
| `dwAnswerId` 为空 | **去上传**、**提交** | 任务状态:未开始|已超时|待随访
| `dwAnswerId` 不为空 | **去查看**、**提交** |
> **业务说明:** `CANCELED` 仅作展示状态,按钮逻辑与进行中一致。
### 已提交
**条件:**
- `taskOriginalStatus` taskType = `SUBMITTED`
| 附加条件 | 显示按钮 | RE_VISIT_REMINDER
|----------|----------| taskOriginalStatus = NOT_START|TIMEOUT|WAIT_FOLLOW_UP
| `dwAnswerId` 不为空 | **去查看** |
| `dwAnswerId` 为空 | 不显示按钮 | 显示按钮:提交(失访)|提交
### 伪代码
``` 任务类型:复诊提醒
if 任务状态:已随访
taskType == UPLOAD_CHECK_LIST:
if status in [NOT_START, TIMEOUT, WAIT_FOLLOW_UP, CANCELED]:
if dwAnswerId 有值: → ["去查看", "提交"]
else: → ["去上传", "提交"]
elif status == SUBMITTED:
if dwAnswerId 有值: → "去查看"
else: → 不显示 = RE_VISIT_REMINDER
```
---
## 5. 营养干预 `NUTRITION_INTERVENTION`
**条件:** 任意 `taskOriginalStatus`
**显示按钮:** 不显示
``` taskOriginalStatus = SUBMITTED
if taskType == NUTRITION_INTERVENTION:
→ 不显示
``` 不显示按钮
---
## 汇总矩阵
| `taskType` | 进行中状态 | 终态 | 关键判断字段 | 任务类型:复诊提醒
|------------|------------|------|--------------| 任务状态:已随访(失访)|已取消
| `VISIT_FOLLOW_UP` | 无按钮 | 查看问卷(`SUBMITTED` 且有问卷) | `dwAnswerId` | taskType = RE_VISIT_REMINDER
| `PHONE_CALL_FOLLOW_UP` | 填写/查看问卷 + 失访提交 + 提交(含已取消) | `SUBMITTED` 有问卷 → 查看;`SUBMITTED_LOST` 可再提交 | `dwAnswerId` | taskOriginalStatus = SUBMITTED_LOST|CANCELED
| `RE_VISIT_REMINDER` | 显示按钮 提交 + 失访提交 | 失访/取消后可再提交 | — |
| `UPLOAD_CHECK_LIST` | 去上传/去查看 + 提交(含已取消) | 去查看(`SUBMITTED` 且有问卷) | `dwAnswerId` |
| `NUTRITION_INTERVENTION` | 无按钮 | 无按钮 | — |
## 四端差异对照
| 场景 | 超管端 | 个案管理端 | 家医端 | 患者端 | # 上传检查单
|------|--------|------------|--------|--------| 任务类型:上传检查单
| 上门访视进行中 | 无按钮 | 去指派 / 重新指派 | 完成失访 / 去完成 | 无按钮 | 任务状态:未开始|已超时|待随访|已取消
| 上门访视 `SUBMITTED` | 有问卷 → 查看问卷 | 有问卷 → 查看问卷 | 有问卷 → 查看问卷 | 有问卷 → 查看问卷 | taskType = UPLOAD_CHECK_LIST
| 电话随访进行中 | 填写/查看问卷 + 失访提交 + 提交 | 无按钮 | 无按钮 | 无按钮 | taskOriginalStatus = NOT_START|TIMEOUT|WAIT_FOLLOW_UP|CANCELED
| 电话随访 `SUBMITTED` | 有问卷 → 查看问卷 | 有问卷 → 查看问卷 | 有问卷 → 查看问卷 | 有问卷 → 查看问卷 | dwAnswerId 为空 ? 显示按钮 去上传/提交 : 显示按钮 去查看/提交
任务类型:上传检查单
| 电话随访 `SUBMITTED_LOST` | 无问卷 → 提交;有问卷 → 查看 + 提交 | 无按钮 | 有问卷 → 查看问卷 | 有问卷 → 查看问卷 | 任务状态:已随访
| 复诊提醒 | 同个案管理端 | 提交 + 失访提交 | 无按钮 | 无按钮 | taskType = UPLOAD_CHECK_LIST
| 上传检查单进行中 | 同个案/患者端 | 去上传/去查看 + 提交 | 无按钮 | 去上传/去查看 + 提交 | taskOriginalStatus = SUBMITTED
| 营养干预 | 无按钮 | 无按钮 | 无按钮 | dwAnswerId 不为空 ? 显示按钮 去查看 | : 不显示
## 后端关联
- 工作台接口:`/fuv/external/workbench/*`(日历、每日任务等) # 营养干预
- 任务详情:`POST /fuv/external/planTask/getById` → `TaskManagerDetailResp` 任务类型:营养干预
- 任务列表:`GET /fuv/external/planTask/getByPlanId`(默认 `FollowUpRole.DOCTOR`) taskType:NUTRITION_INTERVENTION
- 提交接口:`POST /fuv/external/planTask/commit`、`POST /fuv/external/planTask/failCommit`
- 角色权限:`TaskTypeRoleOperateRelateUtil` 中 `DOCTOR` 可操作 `PHONE_CALL_FOLLOW_UP`、`RE_VISIT_REMINDER`、`UPLOAD_CHECK_LIST` 不显示按钮
返回