touyun-elderly-care/docs/tech-debt.md
liuyun 37ee669e6e docs: 服务机构端 C2 派单工单落地 + 更新子模块指针与遗留项
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-14 23:44:36 +08:00

56 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 服务机构端 · 遗留项清单(Tech Debt)
> 记录 C0 基础骨架 / C1 待遇档案的遗留项,供后续 change 处理。来源:各 change 的 SDD ledger(deferred minor / parked / pre-existing)。按优先级分组。
## 安全 / 合规(优先处理)
- [ ] **id_card_no 存储层加密**:staff + elder 的身份证目前明文存(代码留 TODO),需统一走一个 security change(AES 加密;掩码/查看留痕已做)。
- [ ] **tenant_super_admin 未纳入身份证明文查看口径**:`elder` detail 明文目前仅 admin/qc/super_admin,业务租户顶层管理员 `tenant_super_admin` 遗漏(低危,C1 遗留)。
- [ ] **身份核验 P-9**(扫脸/人证核验):依赖医保 APP 能力,后置;本期兜底=拍照留痕 + 实名账号 + 家属可选确认。
- [ ] **评估结论副本孤儿文件**:建档先上传副本、create 失败(如重复身份证)会在 MinIO 留孤儿对象,需失败清理。
## 数据完整性
- [ ] **staff.entryDate/leaveDate 字符串直传 Prisma**:潜在 50000(C0 遗留,与 C1 elder 日期 bug 同类),需按 `toDateOnly` 方式统一修。
- [ ] **Agency.deletedAt 未纳入 SOFT_DELETE**:C0 无机构删除 flow,后续需要软删时补。
- [ ] **catalog 白名单对未声明字段覆盖不全**(parked Important):`data` pick 已兜底、无完整性风险;全站 `forbidNonWhitelisted` 后续再评估。
- [ ] **changeStatus 写 statusChangeDate 用 `new Date()` 未走 `toDateOnly`**:理论上 UTC 回退一天,当前无前端展示、零实际影响。
## 契约 / 文档
- [ ] **统一响应 `hint` 字段**:api-contract 要求 `{code,message,data,hint}`,`TransformInterceptor` 现仍 `{code,message,data}`,硬锁接口需补 hint。
- [ ] **api-contract 错误码列表(1001–4001)未实现**:实际用 5 位 `[域2][序3]`(如 40001),spec 内部不一致,需先收敛 spec 再对齐。
- [ ] **登录页属地提示**:frontend spec「属地提示」未实现(多租户登录前属地未知,需先厘清语义)。
- [ ] **前端等级筛选未暴露**:后端 `ListElderQuery.level` 已实现,前端搜索未用。
## seed / 数据
- [ ] **全量 L1 36 项 / 昆明 L2 45 项 / L3 映射未 seed**:C0 只落样例,全量数据延后到 C3/C4 或运营导入(异常分类/拍照分档字典已复用脚手架并 seed)。
## 测试 / 健壮性(次要)
- [ ] error-codes 头注释 legend 缺域 40–43(cosmetic)。
- [ ] StorageService 默认凭据回退、useSSL 硬编码、size 断言过松。
- [ ] 身份证格式错误用通用 400(无 `ELDER_ID_CARD_INVALID` 专用码)。
- [ ] staff `groupLeaderId` 未校验组长存在、listStaff 过滤字段自行推断、`UpdateStaffDto.userId` 不支持 null 解绑。
- [ ] catalog `loc_code` 缺失未校验、newNational 返全量、config 空更新。
- [ ] agency PATCH 空 body、NOT_FOUND 分支未测。
- [ ] 建档表单未收集 `insurYears`/`hospStart`/`hospEnd`/`guardian*`(spec 未要求)。
- [ ] 状态变更 `evidenceFile` 前端未提供上传(后端字段已留)。
## C2 派单工单
- [ ] **[高] 迁移链损坏**:`c1_elder` 在 `c0_rename_ltc` 之前对 `ltc_*/svc_*` 表 RENAME 索引,干净回放 shadow DB 报 Table doesn't exist → `migrate dev` 不可用,只能 `migrate diff --from-schema-datasource` + 手工迁移目录 + `migrate deploy`。C3/C4 建表前必修。
- [ ] **[高] 业务角色未授 elder/plan/order 权限**:`BUSINESS_ROLES` 只授 agency/staff/svcOrg,director/admin/qc/leader/nurse 无法访问 elder/plan/order(仅 tenant_super_admin 可,权限靠 RBAC UI 手动配)。需统一梳理角色权限。
- [ ] **生成工单 UI 入口缺失**:frontend spec 未要求,但端到端「计划→生成工单→派单」缺「生成工单」按钮(后端 `POST /order/generate` 已实现、已测)。C2.5/C3 补。
- [ ] **待派工单在排班日视图不可见**:日视图 `ordersOf` 只按 `assigneeId` 挂卡,`to_assign` 工单只出现在批量推荐下拉,网格无法一眼看出待派。
- [ ] **L4 机构项目库未 seed + 无创建端点**:`svc_org` 无 HTTP 创建端点、seed 未含 L4(冒烟用 Prisma 直插 18 行绕过)。补 seed + 端点(与 C0「全量 L1/L2/L3 未 seed」同批)。
- [ ] **属地项数 2002 前端未展示提示**:后端已改提示级(`item_count_rule` 记 `2002:…`),但 plan-form 未显示该警告。
- [ ] **当班无排班模型**:staff 无 shift/duty 字段,派单「当班」用 `employStatus` 代理(pass-through + TODO 指向未来排班模型)。
- [ ] **toDateOnly 跨域引用**:order.service 从 elder.service 引 `toDateOnly`,宜提公共 util。
- [ ] **billable 硬编码 + price_snapshot/settle_period 留 C3**(垫付/结转)。
- [ ] **batchRecommend 复用 order.assign 权限码**(无独立 `order.recommend`);C3 前在 shared/ 登记。
- [ ] **plan_status ended 无入口**(无结束计划端点);`plan.change` 不要求旧计划 active。
- [ ] **非事务多写**:`plan.create`(head+items)、`elder-svc.put`(delete+create)、`change`(create+update)中途失败留部分状态。
- [ ] **toDateTime 硬编码 +08:00**(业务假设北京时区,已注释;如多时区属地需配置化)。