Files
hms/docs/audits/v2/12-expert-review.md
iven df1d85bfde docs: T40 UI 审计报告 + wiki 更新 + Docker 配置
- T40 UI 审计计划和结果文档(docs/qa/)
- wiki 更新:miniprogram 设计系统合规审计记录 + index 关键数字更新
- 审计 V2 完整报告(docs/audits/v2/)
- 讨论记录文档(docs/discussions/)
- 设计规格和实施计划(docs/superpowers/)
- 角色测试计划和结果(docs/qa/role-test-*)
- Docker 生产部署配置
2026-05-13 23:29:42 +08:00

13 KiB
Raw Blame History

V2 审计 — 多角色专家评审

日期: 2026-05-04 | 方法: 5 角色专家审视,按 10 维度评分

一、评审概述

本报告由 5 个专家角色分别审视 HMS 系统的 20 个功能域,按统一评分框架打分。每个角色关注不同维度,最终汇总为系统级评价。

评审角色

角色 关注维度 权重
产品经理 D1 目标 + D3 连通 + D10 UX 25%
技术架构师 D2 代码 + D4 数据流 + D8 性能 25%
安全专家 D5 安全 + D6 错误处理 20%
DevOps 工程师 D7 日志 + D8 性能 + D9 测试 15%
医疗领域专家 D1 目标 + D4 数据流 + D10 UX 15%

评分方法

  • 每个角色对每个功能域给出 0-100 分
  • 系统总分 = 各角色加权平均
  • 评级: A(90+) / B(80-89) / C(70-79) / D(60-69) / F(<60)

二、系统级总评

角色 评分 评级
产品经理 78 C
技术架构师 70 C
安全专家 65 D
DevOps 工程师 68 D
医疗领域专家 75 C
加权总分 72 C

V1 审计未做专家评审无法对比。72 分反映"后端完整但前端未接入、安全有漏洞、测试覆盖不足"的现状。


三、产品经理评审78/C

3.1 功能完整性 vs 客户需求

已交付的核心价值链(覆盖血透中心主要工作流):

  • 透析治疗全流程预约→透析记录→KDIGO 风险评估(后端完整,前端部分接入)
  • 健康监测闭环体征录入→阈值告警→SSE 推送→行动收件箱
  • 患者触达:小程序体征录入/查看/咨询/随访完成
  • AI 辅助决策:趋势分析 SSE + 建议系统(后端完整)

未交付的关键体验

  • 护理计划/班次/BLE 网关/家庭代理 — 4 个模块 34 条路由完全无 UI无法交付给客户
  • AI 前后对比功能 — 关怀闭环的核心价值,目前仅日志
  • MP 适老化不足 — 15 处字号低于 22px 阈值,老年患者体验差

3.2 MVP 边界评估

功能 MVP 必须 当前状态 缺口
透析全流程 85% 风险评分未自动串联
健康监测 90% 危急值阈值管理页缺失
告警推送 80% 双路径可能重复
护理计划 P1 50%(仅后端) 全部前端
家庭代理 P2 50%(仅后端) 全部前端
AI 报告 70% 前后对比缺失

3.3 按域评分

分数 说明
F1-F6 核心医疗 85 目标清晰,三端覆盖较好
F7-F8 内容/积分 75 非核心但完善
F9 告警 80 功能完整UX 可优化
F10 AI 70 后端强,前端弱,对比缺失
F11 透析 88 MP 100% 覆盖,流程顺畅
F12 仪表盘 75 统计维度够但展示偏简
F13 行动收件箱 78 SQL 注入风险影响交付
F14-F17 孤立模块 30 后端完整但无法交付
F18-F19 FHIR/OAuth 55 基础设施,非 MVP 必需
F20 日聚合 72 数据层完整,展示层不足

四、技术架构师评审70/C

4.1 架构优势

  1. 模块边界清晰 — 18 crate 严格通过 EventBus + trait 通信,无跨 crate 直接依赖
  2. SeaORM Entity 统一标准 — 所有实体含 tenant_id/version/软删除/审计字段
  3. 事件驱动 — 51 个事件类型outbox 模式保证可靠投递
  4. PII 加密完备 — AES-256-GCM + HMAC 盲索引,覆盖所有敏感字段
  5. 服务拆分合理 — health_data_service 拆为 vital_signs/alert/daily_monitoring 等子模块

4.2 架构风险

风险 严重度 说明
SQL 注入 CRITICAL action_inbox_service.rs:272-306 format! 拼接
BLE 双写无事务 HIGH vital_signs 与 device_readings 可能不一致
护理计划无事务 HIGH 三表写入无包裹,中间失败致孤立记录
SSE unbounded MEDIUM 告警风暴时内存压力
串行处理多患者 MEDIUM BLE 网关 for 循环,延迟线性增长
护理计划状态无枚举 LOW 自由字符串可写入非法状态

4.3 微服务拆分准备度

维度 准备度 说明
模块独立性 90% EventBus 解耦良好
数据库拆分 70% 共享 PostgreSQL需 schema 分离
认证独立 85% JWT + middleware 已解耦
API 网关 40% 无统一网关层
服务发现 0% 单体架构,未规划

4.4 按域评分

分数 说明
F1-F6 核心医疗 78 代码结构好,数据流有缺口
F9 告警 72 双路径复杂度高
F10 AI 68 缓存未启用,前后对比缺失
F13 行动收件箱 55 SQL 注入拉低
F14-F17 孤立模块 40 代码存在但架构断裂
F18 FHIR 50 allowed_patient_ids 越权
F19 OAuth 45 权限缺失 + JWT fallback

五、安全专家评审65/D

5.1 安全合规状态

检查项 状态 说明
SQL 注入防护 FAIL action_inbox_service.rs format! 拼接 patient_id/user_id
PII 加密 PASS AES-256-GCM8 个实体全覆盖
多租户隔离 PASS 应用层 tenant_id + PostgreSQL RLS
权限码完整性 WARN 53 个 Descriptor 声明OAuth 5 端点缺失
API Key 安全 PASS SHA-256 哈希 + OsRng 随机生成
XSS 防护 PASS 未发现 dangerouslySetInnerHTML
SSE 认证 PASS JWT query param + tenant_id 验证
JWT Secret WARN 硬编码 fallback "dev-secret-key"
FHIR 越权 FAIL allowed_patient_ids 未在查询层执行
速率限制 WARN 已建模未执行

5.2 合规风险评估

《个人信息保护法》合规:

  • PII 加密: 合规AES-256-GCM
  • 数据最小化: 基本合规(脱敏查看支持)
  • 第三方数据共享: 风险FHIR allowed_patient_ids 未强制执行)
  • 审计日志: 合规140+ 处审计记录)

《健康医疗数据安全指南》合规:

  • 数据分类分级: 部分合规(加密字段覆盖全,但分类标签缺失)
  • 数据出境: 不适用(私有部署)
  • 应急响应: 不合规(无安全事件自动告警机制)

5.3 按域评分

分数 关键问题
F13 行动收件箱 40 SQL 注入SEC-01
F18 FHIR 50 allowed_patient_ids 越权SEC-03
F19 OAuth 45 权限缺失SEC-02+ JWT fallbackSEC-04
F1-F6 核心医疗 85 权限+PII 完善
F9 告警 75 SSE 认证 OK无特殊风险
F16 BLE 网关 70 API Key 安全 OKHTTPS 需反向代理

六、DevOps 工程师评审68/D

6.1 可观测性评估

维度 状态 说明
tracing 覆盖 70% 17 个 service 文件 116 处 tracing4/6 新增 service 零覆盖
审计日志 85% 140+ 处,覆盖所有关键操作
错误监控 60% AppError 统一响应但无外部告警Sentry/Datadog
性能指标 30% 无 Prometheus/Grafana 集成
分布式追踪 0% 无 OpenTelemetry

6.2 部署复杂度

组件 复杂度 说明
后端服务 单 Axum 进程cargo run 即可
数据库 PostgreSQL + SeaORM 自动迁移
前端 Web Vite SPApnpm build
小程序 Taro 编译 + 微信审核
插件系统 WASM 编译 + 热加载
基础设施 Docker Compose 一键启动

6.3 测试覆盖评估

覆盖率 说明
后端单元+集成 80%+ 772 测试函数97.5% 通过
Web 前端 15% 62 文件,但断言深度未知
MP 小程序 0% 40+ 页面零测试
E2E 5% 仅 5 个 Playwright spec
新增模块 0% care_plan/shift/ble_gateway/family_proxy 零测试

6.4 按域评分

分数 说明
F1-F6 核心医疗 72 后端测试好,前端弱
F14-F17 新增模块 30 零测试+零日志
F10 AI 55 集成测试有E2E 无
F18 FHIR 25 零测试
F19 OAuth 30 零测试

七、医疗领域专家评审75/C

7.1 临床工作流合理性

透析全流程(核心工作流):

  • 预约→透析记录→干体重/超滤量/血流量记录 → 合理
  • KDIGO 风险评分 → 有价值,但未自动串联 → 效率低
  • 透析间期监测(体征录入)→ 合理MP 支持好

随访工作流:

  • 随访任务创建→分配→执行→记录 → 标准化流程,合理
  • AI 建议关联随访 → 设计好,但前后对比未实现,闭环断裂
  • 批量随访操作后端有但前端未调用 → 限制效率

护理工作流:

  • 护理计划→项目→预后 → 概念正确
  • 班次→交接班 → 血透中心刚需
  • 但两个模块完全无 UI → 无法使用

7.2 FHIR 标准合规性

R4 要求 状态 说明
资源类型覆盖 60% Patient/Observation/Encounter/Device缺少 Condition/MedicationRequest
Bundle 结构 70% 缺 link 字段
搜索参数 50% 仅支持 gt/lt缺 eq/ge/le
$everything 操作 40% 无分页限制,血压 ID 重复
OAuth2 保护 60% Client Credentials OK缺 Authorization Code

7.3 患者安全评估

风险 严重度 说明
告警延迟/丢失 SSE 无背压,告警风暴可能丢失
体征数据不一致 BLE 双写无事务,可能影响临床决策
危急值阈值管理 后端有阈值配置,但 Web 无管理页
适老化不足 15 处字号低于 22px老年患者操作困难

7.4 按域评分

分数 说明
F11 透析 85 流程完整MP 覆盖好
F4 预约 88 三端 100%,血透刚需
F5 随访 82 流程合理,对比功能缺失
F3 健康数据 78 数据完整BLE 有风险
F14 护理计划 35 概念好但无法使用
F18 FHIR 40 R4 合规不足

八、综合结论与 Top 5 必修项

8.1 各角色共识

5 个专家角色一致认同以下结构性问题:

  1. 安全基础不牢 — SQL 注入 + FHIR 越权 + OAuth 权限缺失,不修复不能上线
  2. 5 个模块孤立 — 后端投入产出为零34 条路由无 UI需明确交付计划
  3. 测试覆盖严重不足 — MP 零测试 + 新增模块零测试,回归风险极高
  4. AI 关怀闭环断裂 — 前后对比未实现,"AI 驱动主动关怀"定位不成立
  5. 可观测性缺口 — 4/6 新增 service 零 tracing生产排障困难

8.2 Top 5 必修项Phase 2 前必须完成)

# 问题 角色共识度 工作量
1 C1: SQL 注入修复 — action_inbox_service.rs 参数化查询 5/5 2h
2 C2: FHIR allowed_patient_ids 强制执行 — 查询层过滤 4/5 4h
3 H5: OAuth handler require_permission — 5 端点权限 4/5 1h
4 M3: JWT Secret 移除硬编码 fallback — 启动时校验 4/5 1h
5 H2: AI 前后对比功能实现 — 关怀闭环核心 4/5 8h

总工作量: ~16h

8.3 Phase 2 前置条件评估

条件 状态 说明
P0 安全修复完成 未开始 C1/C2/H5/M3 四项
AI 关怀闭环通 未开始 H2 前后对比
核心模块有测试 部分 后端 80%,前端/MP 不足
日志覆盖 80%+ 未达标 4/6 新 service 零 tracing

结论: Phase 2患者体验重构可规划但需先完成 P0 安全修复(~8h和 AI 闭环(~8h。安全基础不牢则生产部署风险不可接受。


九、专家评审按域评分汇总

功能域 产品 架构 安全 DevOps 医疗 加权均
F1 患者 85 78 85 72 80 81
F2 医生 82 80 85 70 78 80
F3 健康数据 80 75 85 68 78 78
F4 预约 88 82 85 75 88 85
F5 随访 82 78 80 72 82 80
F6 咨询 85 80 85 72 80 81
F7 内容 75 72 80 65 70 73
F8 积分 72 70 80 60 65 70
F9 告警 80 72 75 68 78 76
F10 AI 70 68 78 55 72 69
F11 透析 88 78 80 75 85 82
F12 仪表盘 75 72 78 65 70 73
F13 行动收件箱 78 55 40 68 75 61
F14 护理计划 30 40 78 30 35 41
F15 班次 30 40 78 30 35 41
F16 BLE 网关 30 45 70 25 30 41
F17 家庭代理 30 40 78 30 35 41
F18 FHIR 55 50 50 25 40 46
F19 OAuth 55 45 45 30 40 45
F20 日聚合 72 65 80 55 70 69