feat: 建立统一检测任务、样本链与发病事件

This commit is contained in:
weijuesen
2026-08-14 03:31:02 +08:00
parent a25bc7abc6
commit cc93c9a053
26 changed files with 1716 additions and 32 deletions
+29
View File
@@ -998,3 +998,32 @@ MVP 沿用 IoTDB(现状);TDengine 作为生产规模化候选(先基准
- 本任务前分支提交为 `a6a996a`;回滚可还原 Task 8 提交;
- 数据库回滚执行 `000004_notifications_outbox.down.sql`,可删除 `notifications``outbox_events`;未发送的 Outbox 数据会随回滚丢失,回滚前必须先备份或暂停 worker;
- 认证状态回滚需恢复旧二进制,Redis 中的吊销/限流键由 TTL 自然过期。
## 2026-08-14 整改 Task 9:建立统一检测任务、样本链与发病事件
### 做了什么
- 新增 `detection_tasks``samples``disease_events` 表及 `000005_detection_disease_events` 迁移;`trace_records` 增加 `disease_event_id``lamp_tests` 增加 `detection_task_id`
- 实现统一检测任务状态机 `draft/pending/assigned/sampling/testing/review/completed/cancelled`、样本状态机 `created/collected/handed_over/received/testing/consumed/disposed`、发病事件状态机 `suspected/confirmed/controlled/closed/reopened`
- 新增 `/detection-tasks``/samples``/disease-events` 后端 API;Web 新增「检测任务」页面,支持建单、分派、样本流转、结果录入和发病事件管理;
- 橙色/红色巡检通过 Outbox 幂等创建待确认检测任务,`source_key` 唯一索引防止重复建单;LAMP 阳性或统一检测任务阳性结果自动创建发病事件,并自动生成关联溯源记录;
- 确诊发病事件必须有证据,不能仅凭状态字段确认。
### 设计思路与决策依据
- 检测任务作为 LAMP/qPCR/SERS/高光谱共用的主链,推荐方式与实际执行方式分开;自动建单只进入 `pending`,不直接视为已检测;
- 样本按任务一对一建模,先满足“人员/时间/状态可追踪”,后续如需多份样本可扩展为样本集合;
- DiseaseEvent 独立成实体,TraceRecord 改为关联 DiseaseEvent,让确诊、处置、会诊和溯源形成稳定主线;
- Outbox 和 `source_key` 幂等保证重复巡检/重复推送不会产生多个待确认任务。
### 验证结果
- `scripts/verify.ps1` exit 0Go test/vet/build、Web test/lint/build、小程序 typecheck/build、APP typecheck/lint、AI pytest 15/15 均通过;
- 新增测试覆盖检测任务/样本/发病事件状态机、确诊必须有证据、Outbox 检测建单幂等;
- 未部署开发服务器,未执行 `000005` 迁移;未做真实巡检→任务→样本→LAMP→发病事件端到端联调。
### 回滚点
- 本任务前分支提交为 `a25bc7a`;回滚可还原 Task 9 提交;
- 数据库回滚执行 `000005_detection_disease_events.down.sql`,可删除新表和关联列;已建立 `DiseaseEvent -> TraceRecord` 关联的数据会随回滚断开,回滚前需先备份;
- Web 新页面回滚只需还原路由/菜单/页面文件,旧 LAMP 页面不受影响。