diff --git a/docs/tech-debt.md b/docs/tech-debt.md index f8afabb..10de567 100644 --- a/docs/tech-debt.md +++ b/docs/tech-debt.md @@ -81,3 +81,13 @@ - [ ] **文书导出 phone 未掩码**(仅 idCardNo 掩码);「一人一档」对外文书 PII 一致性待定。 - [ ] **info 页允许选 C 档 vs docking 页禁 C**(不一致,spec 只约束 docking);catalog 开关变量名 `before` 误导;loc 页 notify 开关失败不回滚。 - [ ] **listNewNational 返全量**(C1 L3 映射遗留,C5 用作名称解析 map 反而正确,正式 L3 映射时收敛)。 + +## 护理员 APP(Flutter) + +- [ ] **[高] 异常/扑空离线补传非幂等**:后端 `/abnormal` 无 client_md5 去重,超时重试会重复落库。需后端 record_abnormal 加 client_md5 字段 + 幂等。 +- [ ] **[高] 工单完成态不回显**:后端 checkin/checkout 不更新 order.orderStatus(永不转 done),签退后今日任务卡片仍「已派单」。跨端 follow-up。 +- [ ] **压疮结构化标签后端无字段**(RecordPhoto 无部位/分期字段,APP 仅会话内留存);压疮项靠 svcName 含「压疮」识别(脆弱)。 +- [ ] **异常照片/语音后端无上传端点**:APP 在线/离线异常照片字节都未上传,却置 hasPhoto=true(乐观标记,误报);语音占位未实现。 +- [ ] **离线照片直传通道缺**(R8 已发空数组);cleanupExpiredPhotos 死代码;临时目录不保证 ≥7 天(宜落 Documents 目录并接线清理)。 +- [ ] **isOfflineError 不把 DioExceptionType.unknown 当断网**(真机飞行模式可能判错);补传「毒消息」静默驻留(无死信/提示)。 +- [ ] 大字 ≥20pt 未全覆盖(badge/chip 仍小);undoReason 未采集;OfflineDb 实体无直接测试。 diff --git a/openspec/changes/nurse-app-flutter/.openspec.yaml b/openspec/changes/archive/2026-10-15-nurse-app-flutter/.openspec.yaml similarity index 100% rename from openspec/changes/nurse-app-flutter/.openspec.yaml rename to openspec/changes/archive/2026-10-15-nurse-app-flutter/.openspec.yaml diff --git a/openspec/changes/nurse-app-flutter/design.md b/openspec/changes/archive/2026-10-15-nurse-app-flutter/design.md similarity index 100% rename from openspec/changes/nurse-app-flutter/design.md rename to openspec/changes/archive/2026-10-15-nurse-app-flutter/design.md diff --git a/openspec/changes/nurse-app-flutter/proposal.md b/openspec/changes/archive/2026-10-15-nurse-app-flutter/proposal.md similarity index 100% rename from openspec/changes/nurse-app-flutter/proposal.md rename to openspec/changes/archive/2026-10-15-nurse-app-flutter/proposal.md diff --git a/openspec/changes/nurse-app-flutter/specs/frontend/nurse-app/spec.md b/openspec/changes/archive/2026-10-15-nurse-app-flutter/specs/frontend/nurse-app/spec.md similarity index 100% rename from openspec/changes/nurse-app-flutter/specs/frontend/nurse-app/spec.md rename to openspec/changes/archive/2026-10-15-nurse-app-flutter/specs/frontend/nurse-app/spec.md diff --git a/openspec/changes/nurse-app-flutter/tasks.md b/openspec/changes/archive/2026-10-15-nurse-app-flutter/tasks.md similarity index 100% rename from openspec/changes/nurse-app-flutter/tasks.md rename to openspec/changes/archive/2026-10-15-nurse-app-flutter/tasks.md diff --git a/openspec/specs/frontend/nurse-app/spec.md b/openspec/specs/frontend/nurse-app/spec.md new file mode 100644 index 0000000..7aa2958 --- /dev/null +++ b/openspec/specs/frontend/nurse-app/spec.md @@ -0,0 +1,55 @@ +# frontend/nurse-app Specification + +## Purpose +定义护理员 APP(Flutter)的交互与行为——登录、今日任务、服务执行、拍照分档、异常上报、扑空、离线补传。 + +## Requirements + +### Requirement: 登录 +APP MUST 支持租户 code + 账号 + 密码登录,token 持久化,后续请求带 token。 + +#### Scenario: 登录 +- **WHEN** 护理员输入租户/账号/密码登录 +- **THEN** 进入今日任务页,token 落本地 + +### Requirement: 今日任务(M1) +APP MUST 展示本人今日工单(老人/时段/项目/状态),点卡片进入服务执行。 + +#### Scenario: 看今日任务 +- **WHEN** 护理员打开 APP +- **THEN** 首屏即今日工单卡片 + +### Requirement: 服务执行(M2) +APP MUST 支持签到(自动定位+时间)→ 勾项目(默认全勾,exec_result 三态)→ 拍照 → 签退(自动算时长)。签到/签退时间不传客户端值(服务器取时)。 + +#### Scenario: 签到签退 +- **WHEN** 护理员点签到再点签退 +- **THEN** 自动记录时间/定位/时长,后端生成留痕 + +### Requirement: 拍照分档 +APP MUST 支持必拍/免拍/可拍三档;必拍项强制拍照 + 压疮结构化标签;必拍未拍签退按钮不可点;提供「无法拍摄」拒拍出路(选原因放行)。 + +#### Scenario: 必拍强制 +- **WHEN** 必拍项未拍照 +- **THEN** 签退按钮不可点,提示「这项需要拍一张照片」 + +### Requirement: 异常上报 +APP MUST 支持异常上报(9 宫格分类必选,描述/语音/照片可选)。 + +#### Scenario: 分类必选 +- **WHEN** 护理员上报异常只选分类 +- **THEN** 允许提交 + +### Requirement: 扑空(未遇) +APP MUST 支持扑空专门形态:到访时间(自动)/定位(自动)/原因(必选),工单转 not_met。 + +#### Scenario: 扑空留证据 +- **WHEN** 护理员登记未遇 +- **THEN** 到访时间+定位+原因必留,工单转 not_met + +### Requirement: 离线队列 +APP MUST 支持离线签到/签退/勾项目/照片/异常(本地队列 + client_md5),恢复联网后自动补传(幂等去重)。 + +#### Scenario: 离线补传 +- **WHEN** 断网时签到,恢复联网 +- **THEN** 自动补传且不重复(client_md5 去重) diff --git a/sources/ec-nest b/sources/ec-nest index f0e3deb..2a4b700 160000 --- a/sources/ec-nest +++ b/sources/ec-nest @@ -1 +1 @@ -Subproject commit f0e3deb6c86476bd92a475f8ee112aa1cf3323ab +Subproject commit 2a4b7003ed5aebfbc3616b0881e79d2e1ff718f1 diff --git a/sources/ec_flutter b/sources/ec_flutter new file mode 160000 index 0000000..b2e6381 --- /dev/null +++ b/sources/ec_flutter @@ -0,0 +1 @@ +Subproject commit b2e638112b7c2abdc9e826df5474dc07dee67363