Feature #24
由 张 瑞阳 更新于 大约一个月 之前
# 家医端任务按钮显示规则
本文档描述家庭医生端(`/fuv/external/familyDoctor/task-manager-detail` 及相关列表)各任务类型在不同状态下的操作按钮显示逻辑。
> 个案管理端规则见 [task-manager-button-rules.md](./task-manager-button-rules.md)。
## 通用字段
| 字段 | 类型 | 说明 |
|------|------|------|
| `taskType` | `TaskType` | 任务类型枚举 |
| `taskOriginalStatus` | `TaskStatus` | 任务原始状态 |
| `assignDoctorIds` | `List<String>` | 已指派家庭医生 ID 列表 |
| `dwAnswerId` | `String` | 问卷回答 ID;有值表示已填写问卷 |
| `currentUserId` | `String` | 当前登录用户 ID(`TokenHelper.getUserId()`) |
## 状态对照
| 展示文案 | `taskOriginalStatus` |
|----------|----------------------|
| 未开始 | `NOT_START` |
| 待随访 | `WAIT_FOLLOW_UP` |
| 已超时 | `TIMEOUT` |
| 已随访 / 已提交 | `SUBMITTED` |
| 已随访(失访) | `SUBMITTED_LOST` |
| 已取消 | `CANCELED` |
---
## 1. 上门访视 `VISIT_FOLLOW_UP`
家医端核心可操作任务类型,按钮与指派关系、当前登录用户强相关。
### 进行中 / 失访(待完成)
**条件:**
- `taskOriginalStatus` ∈ `NOT_START` | `TIMEOUT` | `WAIT_FOLLOW_UP` | `SUBMITTED_LOST`
| 附加条件 | 显示按钮 |
|----------|----------|
| `assignDoctorIds` 不为空,且包含 `currentUserId` | **已完成(失访)**、**去完成** |
| 其他(未指派、未包含当前用户等) | 不显示按钮 |
### 已提交
**条件:**
- `taskOriginalStatus` = `SUBMITTED`
| 附加条件 | 显示按钮 |
|----------|----------|
| `dwAnswerId` 不为空 | **查看问卷** |
| `dwAnswerId` 为空 | 不显示按钮 |
### 已取消
**条件:**
- `taskOriginalStatus` = `CANCELED`
**显示按钮:** 不显示
### 伪代码
```
if taskType == VISIT_FOLLOW_UP:
if status in [NOT_START, TIMEOUT, WAIT_FOLLOW_UP, SUBMITTED_LOST]:
if assignDoctorIds 包含 currentUserId:
→ ["已完成(失访)", "去完成"]
else:
→ 不显示
elif status == SUBMITTED:
if dwAnswerId 有值: → "查看问卷"
else: → 不显示
elif status == CANCELED:
→ 不显示
```
---
## 2. 电话随访 `PHONE_CALL_FOLLOW_UP`
家医端仅可查看已填写的问卷,不可执行随访操作。
### 进行中
**条件:**
- `taskOriginalStatus` ∈ `NOT_START` | `TIMEOUT` | `WAIT_FOLLOW_UP`
**显示按钮:** 不显示
### 终态(已提交 / 失访 / 已取消)
**条件:**
- `taskOriginalStatus` ∈ `SUBMITTED` | `SUBMITTED_LOST` | `CANCELED`
| 附加条件 | 显示按钮 |
|----------|----------|
| `dwAnswerId` 不为空 | **查看问卷** |
| `dwAnswerId` 为空 | 不显示按钮 |
### 伪代码
```
if taskType == PHONE_CALL_FOLLOW_UP:
if status in [NOT_START, TIMEOUT, WAIT_FOLLOW_UP]:
→ 不显示
elif status in [SUBMITTED, SUBMITTED_LOST, CANCELED]:
if dwAnswerId 有值: → "查看问卷"
else: → 不显示
```
---
## 3. 复诊提醒 `RE_VISIT_REMINDER`
**条件:** 任意 `taskOriginalStatus`
**显示按钮:** 不显示
```
if taskType == RE_VISIT_REMINDER:
→ 不显示
```
---
## 4. 上传检查单 `UPLOAD_CHECK_LIST`
家医端不可上传或提交,仅可在已提交且有问卷数据时查看。
### 进行中 / 已取消
**条件:**
- `taskOriginalStatus` ∈ `NOT_START` | `TIMEOUT` | `WAIT_FOLLOW_UP` | `CANCELED`
**显示按钮:** 不显示
### 已提交
**条件:**
- `taskOriginalStatus` = `SUBMITTED`
| 附加条件 | 显示按钮 |
|----------|----------|
| `dwAnswerId` 不为空 | **去查看** |
| `dwAnswerId` 为空 | 不显示按钮 |
### 伪代码
```
if taskType == UPLOAD_CHECK_LIST:
if status in [NOT_START, TIMEOUT, WAIT_FOLLOW_UP, CANCELED]:
→ 不显示
elif status == SUBMITTED:
if dwAnswerId 有值: → "去查看"
else: → 不显示
```
---
## 5. 营养干预 `NUTRITION_INTERVENTION`
**条件:** 任意 `taskOriginalStatus`
**显示按钮:** 不显示
```
if taskType == NUTRITION_INTERVENTION:
→ 不显示
```
---
## 汇总矩阵
| `taskType` | 进行中状态 | 终态 | 关键判断字段 |
|------------|------------|------|--------------|
| `VISIT_FOLLOW_UP` | 完成失访 + 去完成(指派给当前用户) | 查看问卷(`SUBMITTED` 且有问卷) | `assignDoctorIds`、`currentUserId`、`dwAnswerId` |
| `PHONE_CALL_FOLLOW_UP` | 无按钮 | 查看问卷(有问卷时) | `dwAnswerId` |
| `RE_VISIT_REMINDER` | 无按钮 | 无按钮 | — |
| `UPLOAD_CHECK_LIST` | 无按钮 | 去查看(`SUBMITTED` 且有问卷) | `dwAnswerId` |
| `NUTRITION_INTERVENTION` | 无按钮 | 无按钮 | — |
## 与个案管理端差异对照
| 场景 | 家医端 | 个案管理端 |
|------|--------|------------|
| 上门访视进行中 | 指派给当前用户 → 完成失访 / 去完成 | 去指派 / 重新指派 |
| 上门访视 `CANCELED` | 不显示 | 有问卷 → 查看问卷 |
| 电话随访 `SUBMITTED_LOST` | 有问卷 → 查看问卷 | 不显示 |
| 复诊提醒 | 全程不显示 | 进行中可提交;失访/取消可再提交 |
| 上传检查单进行中 / `CANCELED` | 不显示 | 去上传/去查看 + 提交 |
| 上传检查单 `SUBMITTED` | 有问卷 → 去查看 | 去查看 |
## 后端关联
- 接口:`GET /fuv/external/familyDoctor/task-manager-detail`
- 详情响应:`TaskManagerDetailResp`(`completeFlag` / `completeLostFlag` 目前仅覆盖上门访视的「去完成 / 完成失访」,其余按钮规则需前端或扩展字段实现)
- 角色权限:`TaskTypeRoleOperateRelateUtil` 中 `FAMILY_DOCTOR` 仅对 `VISIT_FOLLOW_UP` 开放操作权限
返回