- T40 UI 审计计划和结果文档(docs/qa/) - wiki 更新:miniprogram 设计系统合规审计记录 + index 关键数字更新 - 审计 V2 完整报告(docs/audits/v2/) - 讨论记录文档(docs/discussions/) - 设计规格和实施计划(docs/superpowers/) - 角色测试计划和结果(docs/qa/role-test-*) - Docker 生产部署配置
3.3 KiB
3.3 KiB
HMS 夯实基础设计规格
日期: 2026-05-05 | 版本: 1.0 | 状态: Approved
1. 概述
1.1 问题
HMS 已完成主体功能开发(18 crate / 328 路由 / 46 health 实体 / 772 后端测试),但存在三个结构性问题:
- 安全漏洞未清零 — 多专家组审查发现 5 CRITICAL + 10 HIGH + 8 MEDIUM + 5 LOW
- 功能膨胀 — 20 个功能域中 7 个在当前定位下不是首发重点
- UX 不统一 — 各端视觉风格、交互模式、错误处理不一致;小程序 60 页面功能过度
1.2 目标
暂停新功能开发,用 6-8 周夯实安全基础、统一设计系统、打磨核心流程、精简小程序,产出可上生产的基础版本。
1.3 范围
保留并完善(12 个功能域): 患者管理、健康数据/体征、告警系统、行动收件箱、AI 智能分析、随访管理、咨询管理、内容管理、积分商城、线下活动、统计仪表盘、设备与数据采集
冻结推迟(7 个模块): 护理计划、班次管理、家庭代理、药物记录、透析管理、医生排班、预约管理
2. Phase 1:安全清零(2-3 周)
2.1 CRITICAL(5 个)
| ID | 问题 | 修复方案 |
|---|---|---|
| C1 | FHIR allowed_patient_ids=None 无限制访问 |
None 视为空列表(拒绝所有) |
| C2 | AI 队列 claim_next 绕过 RLS 租户隔离 |
添加 tenant_id,SET app.current_tenant_id |
| C3 | FHIR $everything 子查询缺 tenant_id |
每个子查询加 TenantId 过滤 |
| C4 | .env.bak 泄露 AES 密钥 |
删除文件、轮换密钥 |
| C5 | Docker 硬编码默认密码 | 改用 .env 注入 |
2.2 HIGH(10 个)
| ID | 问题 | 修复方案 |
|---|---|---|
| H1 | FHIR converter 输出加密密文 | 解密后再输出或脱敏 |
| H2 | 审计日志泄漏加密密文 | 加密字段记录 REDACTED |
| H3 | Refresh Token 验证缺 tenant_id | 添加 tenant_id 过滤 |
| H4 | Token revoke 无租户校验 | 增加 tenant_id 参数 |
| H5 | readiness_check 泄露内部信息 | 替换为 generic message |
| H6 | OAuth handler expect() panic | 改为返回 Internal Error |
| H7 | AI 提示词模板 Prompt Injection | 安全检查 + 限制权限 |
| H8 | Web JWT 存 localStorage | 评估迁移到 httpOnly cookie |
| H9 | 小程序加密密钥嵌入客户端 | 配合服务端 session 失效机制 |
| H10 | Debug 构建绕过 KEK 要求 | CI 检查 + 编译守卫 |
3. Phase 2:冻结推迟模块(2-3 天)
冻结 7 个模块(护理计划/班次/家庭代理/药物/透析/排班/预约),策略:
- 不删代码,保留后端路由和数据库迁移
- 菜单迁移新增 disabled 标记
- 前端路由守卫检查 enabled 标记
- 小程序同步隐藏入口
4. Phase 3:设计系统统一(1 周)
统一范围:色板、StatusTag、错误提示、日期格式、表格布局模式。 适老化标准:正文 ≥ 16px、按钮 ≥ 48px、对比度 ≥ 4.5:1。
5. Phase 4:核心流程打磨(1-2 周)
12 个保留功能域的前后端闭环验证和 UX 打磨。
6. Phase 5:小程序精简与分层(2 周)
60 页 → ~20 页,砍掉 BLE 同步/知情同意/医生端重表单,适老化改造,多角色分层。
7. 验证标准
每个 Phase:cargo check + test 通过、浏览器操作无 500、小程序可导航、冻结模块已隐藏、pnpm build 通过。