Files
hms/docs/audits/08-audit-report-2026-04-30.md
iven d712ad78c3 docs: 审计报告(8 份) + 讨论记录(4 份)
审计报告: 基线快照/功能清单/后端完整性/事件系统/参数配置/
差距模式/错误处理/测试覆盖/审计总结报告
讨论记录: 设备管线/端到端测试/三端审计/工作台重构
2026-05-03 19:32:15 +08:00

16 KiB
Raw Blame History

HMS 功能审计报告

日期: 2026-04-30 | Git: 84fafb0 | 审计范围: 全系统(后端 + Web + 小程序)

执行摘要

维度 结果
总体完成度 83%
CRITICAL 发现 2 项(小程序晚间血压丢失、告警权限码拼写错误)
HIGH 发现 3 项(透析/知情同意小程序缺失、前端日志严重不足)
MEDIUM 发现 8 项
LOW 发现 12 项
后端健康度 优秀97.5% 测试通过100% 调用链连通)
前端覆盖度 中等Web 管理端完善,小程序关键功能缺失)

审计范围

  • 328 个后端路由8 公开 + 320 受保护)
  • 235 个 Web 前端 API 调用
  • 76 个小程序 API 调用
  • 38 个 Web 页面路由
  • 40 个小程序页面
  • 45 个数据库 Entity
  • 25 个事件类型
  • 772 个测试函数

功能域评分

评分方法

每个功能域按 10 项审计清单打分0-100%),加权求和:

检查项 权重 100% 标准
代码存在性 15% Handler + Service + Entity 全部存在
调用链连通性 15% Handler→Service→DB 完整连通
配置参数传递 5% 所有配置字段被正确读取和使用
降级策略 5% 外部依赖不可用时有优雅降级
错误处理 10% 所有错误路径返回适当 HTTP 响应
性能 5% 列表端点有分页,查询有索引
安全合规 15% tenant_id 过滤 + 权限检查 + PII 保护
兼容性 5% Web 和小程序 API 契约一致
日志完整性 10% 关键操作有日志和审计记录
UX 一致性 15% 两端展示数据一致,交互逻辑统一

1. 患者管理: 93%

检查项 评分 说明
代码存在性 100% 17 handler + 完整 service + 6 entity
调用链 100% Handler→Service→Entity 全连通
配置参数 100% PII 加密密钥正确使用
降级策略 90% 加密失败有错误处理
错误处理 100% 26 种领域错误完整映射
性能 90% 分页查询 + HMAC 盲索引搜索
安全合规 100% tenant_id + RLS + PII AES-256-GCM + HMAC
兼容性 90% Web/MP 基本对齐MP 无删除(预期)
日志 95% 12 处审计日志(含变更快照),运行时日志不足
UX 一致性 70% 健康摘要仅 MP家庭医生管理仅 Web

2. 医生/排班: 88%

检查项 评分 说明
代码存在性 100% 5 handler + service + 2 entity
调用链 100% 全连通
配置参数 100% 正确
降级策略 90% 标准
错误处理 100% 领域错误映射
性能 90% 排班 CAS 并发控制
安全合规 100% tenant_id + 权限检查
兼容性 60% MP 仅只读列表,无管理操作
日志 90% 3 处审计日志
UX 一致性 60% Web 有排班 CRUDMP 仅查看日历

3. 健康数据: 85%

检查项 评分 说明
代码存在性 100% 18 handler + service + 7 entity
调用链 100% 全连通
配置参数 100% AES/HMAC 密钥正确使用
降级策略 90% 加密失败安全处理
错误处理 100% 完整错误映射
性能 85% 分页 + 趋势缓存,但趋势生成可能慢
安全合规 100% PII 加密 + 权限 + 危急值检测
兼容性 70% MP 丢失晚间血压/体温/血氧字段
日志 80% 10 处审计日志,运行时 tracing 不足
UX 一致性 60% 小程序 indicator_type 模型限制数据录入

4. 预约管理: 95%

检查项 评分 说明
代码存在性 100% 8 handler + 完整 CRUD
调用链 100% 全连通
配置参数 100% 正确
降级策略 95% CAS 原子操作保证
错误处理 100% 排班满额/状态转换错误
性能 100% CAS 并发控制 + 分页
安全合规 100% tenant_id + 权限
兼容性 90% Web/MP 基本对齐
日志 90% 4 处审计 + 1 处 tracing
UX 一致性 85% Web 排班管理MP 预约创建/查看

5. 随访管理: 88%

检查项 评分 说明
代码存在性 100% 10+5 handler + 模板管理
调用链 100% 全连通
配置参数 100% 正确
降级策略 90% 事件驱动逾期检测
错误处理 100% 完整
性能 90% 批量操作支持
安全合规 100% 权限检查
兼容性 80% MP 仅列表+创建,无管理
日志 90% 7 处审计
UX 一致性 70% Web 批量操作MP 基础功能

6. 咨询管理: 94%

检查项 评分 说明
代码存在性 100% 9 handler
调用链 100% 全连通
配置参数 100% 正确
降级策略 95% 消息持久化保证
错误处理 100% 完整
性能 90% 分页消息列表
安全合规 100% 权限 + 数据隔离
兼容性 95% Web/MP 高度对齐
日志 85% 3 处审计
UX 一致性 90% Web 有导出MP 无(预期)

7. 内容管理: 86%

检查项 评分 说明
代码存在性 100% 11+4+4 handler文章+分类+标签)
调用链 100% 全连通
配置参数 100% 文件上传配置
降级策略 90% 标准
错误处理 100% 审核流程错误
性能 90% 分页
安全合规 100% 审核权限分离
兼容性 70% MP 仅只读 published 文章
日志 90% 7 处审计
UX 一致性 65% Web 完整 CMSMP 仅文章列表

8. 积分商城: 90%

检查项 评分 说明
代码存在性 100% 28 handler最复杂的 handler
调用链 100% 全连通
配置参数 100% 正确
降级策略 90% 幂等签到检查
错误处理 100% 完整
性能 90% 分页 + 统计缓存
安全合规 95% 权限检查,但积分操作无事务日志
兼容性 90% Web 管理端 + MP 患者端对齐
日志 85% 12 处审计
UX 一致性 85% 角色分叉正常

9. 告警系统: 87%

检查项 评分 说明
代码存在性 100% 4+4+3+4 handler
调用链 100% 全连通
配置参数 100% 正确
降级策略 90% 事件驱动评估
错误处理 100% 完整
性能 90% 分页
安全合规 100% 权限检查
兼容性 70% MP 仅查看+处理,无规则管理
日志 85% 审计日志
UX 一致性 60% ⚠️ 前端 health.alert.manage 拼写错误导致按钮不显示

10. AI 分析: 70%

检查项 评分 说明
代码存在性 100% 12 handler + 3 entity
调用链 100% 全连通
配置参数 40% 6/8 AiConfig 字段未使用
降级策略 95% SSE 不挂起Provider 不可用优雅终止
错误处理 100% 预流/流中完整错误处理
性能 80% SSE 流式返回,但无缓存层
安全合规 100% 权限检查 + 输入消毒
兼容性 50% SSE 端点无前端 UI 调用
日志 70% 分析成功/失败有事件发布
UX 一致性 30% 仅历史查看有 UI分析触发无入口

11. 透析管理: 67%

检查项 评分 说明
代码存在性 100% 12 handler
调用链 100% 全连通
配置参数 100% 正确
降级策略 90% 标准
错误处理 100% 完整
性能 90% 分页
安全合规 100% 5 个权限码
兼容性 0% 小程序完全无入口
日志 90% 审计 + 事件
UX 一致性 0% 小程序无透析功能

12. 统计仪表盘: 85%

检查项 评分 说明
代码存在性 100% 9 handler
调用链 100% 全连通
配置参数 100% 正确
降级策略 85% 统计查询失败返回 500
错误处理 90% 标准
性能 80% 聚合查询可能慢
安全合规 100% 权限检查
兼容性 60% MP 仅 3 个医护端统计
日志 80% 标准
UX 一致性 70% Web 完整仪表盘MP 部分

发现清单(按严重程度排序)

CRITICAL2 项)

# 发现 模块 来源
C1 小程序晚间血压数据永久丢失inputVitalSign()blood_pressure 类型固定映射到 *_morning 字段,systolic_bp_evening/diastolic_bp_evening 从未写入。后端趋势服务和危急值检测支持晚间血压,但数据源缺失 Phase 4 §4.3
C2 告警管理按钮永远不显示 — 前端 AlertList.tsx 使用 health.alert.manage(单数),后端声明 health.alerts.manage(复数),权限码不匹配导致 AuthButton 永远隐藏 Phase 4 §3.4

HIGH3 项)

# 发现 模块 来源
H1 透析管理小程序完全无入口 — 后端 12 个路由完整实现Web 有管理界面,但小程序 0 个 API 调用、0 个页面。透析患者无法在移动端查看记录和处方 Phase 1 §2.11, Phase 5 §5.2
H2 知情同意小程序完全无入口 — 同上,后端完整但小程序无任何入口 Phase 1 §2.12
H3 Health service 层运行时日志极缺 — 26 个 service 文件仅 11 处 tracing 日志patient_service949 行0 处日志,运维排查困难 Phase 6 §3.1

MEDIUM8 项)

# 发现 说明 来源
M1 56 个基础模块权限码未通过 PermissionDescriptor 声明 auth/config/workflow/message/plugin 的权限通过种子数据手动注册 Phase 4 §3.3
M2 4 个 AI 分析 SSE 端点无前端 UI 调用 可能仅通过 API 工具直接测试 Phase 5 §1
M3 小程序丢失体温/血氧数据 body_temperature/spo2 无 indicator_type Phase 4 §4.3
M4 前端 SSE 重连无指数退避 依赖浏览器原生 EventSource固定 3 秒间隔 Phase 6 §2.4
M5 erp-ai 无集成测试 SSE 流 + 外部 API 调用无法回归测试 Phase 7 §3.1
M6 Web 前端测试仅 10 个 163 个文件仅 5 单元 + 5 E2E Phase 7 §1.2
M7 小程序完全无测试 40 个页面全靠手工验证 Phase 7 §1.2
M8 健康记录/诊断记录小程序无入口 患者移动端无法查看 Phase 1 §2.2

LOW12 项)

# 发现 说明 来源
L1 14 个事件无业务消费者 通过 SSE 推送仍有价值,但无后端消费者 Phase 3 §4.2
L2 AiConfig 6 字段声明未使用 预留全局默认值per-prompt 已覆盖 Phase 4 §2.3
L3 device_readings.raw_data 无读取入口 数据溯源需要但无 UI Phase 5 §4.2
L4 RefRow struct 从未构造 重构残留,编译器警告 Phase 2 §1.2
L5 2 处 unwrap() 中等风险 PluginHost::db + 信号量 acquire Phase 6 §1.6
L6 审计日志 Fire-and-forget 写入失败静默,无重试 Phase 6 §3.2
L7 health.dialysis.stats 权限无前端引用 透析统计页面可能无按钮 Phase 4 §3.2
L8 ai.provider.manage 声明但无 Handler 预留提供商管理功能 Phase 4 §3.2
L9 咨询消息导出仅 Web 小程序无导出功能(预期) Phase 1 §2.5
L10 趋势生成路由无前端调用 可能仅后台任务触发 Phase 5 §1
L11 9 个测试因 blind_indexes 表失败 环境配置问题,非代码缺陷 Phase 0
L12 40 个编译警告 多为未使用导入/变量 Phase 0

差距模式分析

基于 Phase 5 的系统性检测,五种差距模式的发生频率和影响:

模式 发现数 最大影响 整体评估
写了没接 5 AI SSE 端点无 UI 入口 低风险(功能完整,缺触发入口)
接了没传 6 晚间血压数据丢失 高风险(数据永久丢失)
传了没存 0 无问题
存了没用 16 14 事件无消费者 + raw_data 无入口 低风险(审计追踪仍有价值)
双系统不同步 9 透析/知情同意小程序完全缺失 高风险(核心功能移动端空白)

根因模式

  1. 后端先行,前端跟进不足 — 后端功能完整度高100% 调用链),但小程序覆盖仅 60%
  2. 角色分叉设计正确但执行不彻底 — 透析/知情同意应覆盖小程序医护端但未实现
  3. 数据模型差异 — 小程序 indicator_type 简化模型与后端完整字段不匹配

测试覆盖率总结

层级 测试数 通过率 评估
Rust 单元测试 611 100% 良好
Rust 集成测试 153 94% 良好
Web 前端 10 N/A 极低
小程序 0 N/A 无测试
合计 772 97.5%

关键缺口AI 模块无集成测试SSE + 外部 API小程序完全无测试。


建议与优先级排序

P0 — 立即修复1-2 天)

# 建议 影响 工作量
C2 修复前端权限码拼写:health.alert.managehealth.alerts.manage 告警管理按钮恢复可用 5 分钟
C1-fix 小程序新增 blood_pressure_evening indicator_type 晚间血压数据可正常录入 2 小时

P1 — 短期优化1-2 周)

# 建议 影响 工作量
H1 实现小程序透析模块(患者查看记录 + 医护端录入) 透析患者移动端可用 1 周
H2 实现小程序知情同意页面 患者可管理同意书 3 天
H3 补充 health service 层 tracing 日志 运维可追踪关键操作 2 天
M5 补充 erp-ai 集成测试 AI SSE 流可回归测试 3 天

P2 — 中期改进1-2 月)

# 建议 影响 工作量
M1 为 auth/config/workflow/message/plugin 模块补充 PermissionDescriptor 声明 权限码自动注册,一致性提升 1 周
M3 小程序新增 body_temperature/spo2 indicator_type 体温/血氧可录入 1 天
M8 实现小程序健康记录/诊断记录查看页面 患者可查看完整健康档案 1 周
M4/M6/M7 补充前端 SSE 指数退避 + 前端/小程序测试 系统健壮性提升 持续

P3 — 长期规划

# 建议 影响 工作量
L1 为高价值事件添加消费者(如 consultation.opened 发送通知) 事件驱动更完善 按需
L2 清理或接入 AiConfig 未使用字段 配置一致性 1 天
L5 替换 2 处中风险 unwrap() 消除潜在 panic 1 小时
L11 修复 blind_indexes 迁移使 9 个测试通过 测试通过率 100% 1 小时

审计产出文件索引

Phase 文件 内容
0 00-baseline-snapshot.md 基线快照
1 01-feature-inventory.md 功能清单 + 三端映射矩阵
2 02-backend-integrity.md 死代码 + 调用链 + trait 覆盖率
3 03-event-system.md 事件发布-消费矩阵
4 04-parameter-config.md DTO + 配置 + 权限码 + 数据映射
5 05-gap-patterns.md 五种差距模式
6 06-error-handling.md 错误处理 + 降级 + 日志
7 07-test-coverage.md 测试分布与缺口
8 08-audit-report-2026-04-30.md 最终评分报告(本文档)