Files
hms/docs/audits/v2/04-backend-integrity.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

4.9 KiB
Raw Blame History

HMS 后端完整性审计

审计范围: crates/erp-health/src/
审计日期: 2026-05-04


1. Handler → Service 覆盖率

Handler 目录共 29 个业务文件(不含 mod.rs。逐一比对 service/ 目录:

Handler 文件 对应 Service 状态
action_inbox_handler.rs action_inbox_service.rs OK
alert_handler.rs alert_service.rs OK
alert_rule_handler.rs alert_rule_service.rs OK
appointment_handler.rs appointment_service.rs OK
article_category_handler.rs article_category_service.rs OK
article_handler.rs article_service.rs OK
article_tag_handler.rs article_tag_service.rs OK
ble_gateway_handler.rs ble_gateway_service.rs OK
care_plan_handler.rs care_plan_service.rs OK
consent_handler.rs consent_service.rs OK
consultation_handler.rs consultation_service.rs OK
critical_alert_handler.rs critical_alert_service.rs OK
critical_value_threshold_handler.rs critical_value_threshold_service.rs OK
daily_monitoring_handler.rs daily_monitoring_service.rs OK
device_handler.rs device_service.rs OK
device_reading_handler.rs device_reading_service.rs OK
diagnosis_handler.rs diagnosis_service.rs OK
doctor_handler.rs doctor_service.rs OK
family_proxy_handler.rs family_proxy_service.rs OK
follow_up_handler.rs follow_up_service.rs OK
follow_up_template_handler.rs follow_up_template_service.rs OK
health_data_handler.rs health_data_service/ OK
medication_record_handler.rs medication_record_service.rs OK
medication_reminder_handler.rs medication_reminder_service.rs OK
patient_handler.rs patient_service/ OK
points_handler.rs points_service/ OK
shift_handler.rs shift_service.rs OK
stats_handler.rs stats_service/ OK
vital_signs_daily_handler.rs vital_signs_daily_service.rs OK

缺失: 0 — 所有 handler 均有对应 service。

注: FHIR handler 位于独立模块 src/fhir/handler.rs,不经过 service 层,直接调用 fhir/converter.rs 转换后查询。此为合理架构,不视为缺失。


2. 冗余代码统计

指标 数量 详情
#[allow(dead_code)] 4 action_inbox_service.rs (3), stats_service/health.rs (1)
#[allow(unused...)] 0
todo!() 0
unimplemented!() 0
TODO / FIXME / HACK 注释 1 src/event.rs:51 — TODO: 患者认证和死亡记录流程待后续迭代

结论: 冗余代码极少,代码库健康。建议清理 4 处 dead_code 标注。


3. unwrap() 风险分析

service/ 目录共 16 处 .unwrap(),按上下文分类:

生产代码中的 unwrap (高风险)

文件 行号 代码 风险
action_inbox_service.rs L306 user_id.unwrap() — SQL 注入 + panic 风险
vital_signs_daily_service.rs L14, L92 date.and_hms_opt(0,0,0).unwrap() — 固定参数不会失败,但应改用 expect()
vital_signs_daily_service.rs L15, L93 date.and_hms_opt(23,59,59).unwrap() — 同上
vital_signs_daily_service.rs L115 .partial_cmp(b).unwrap() — NaN 时 panic

测试代码中的 unwrap (可接受)

文件 数量
alert_service.rs 3 处
trend_stats.rs 6 处

建议优先修复:

  1. action_inbox_service.rs:306user_id.unwrap() 同时存在 SQL 注入风险 (直接拼接 SQL 字符串),应改用参数化查询 + ok_or(AppError) 模式
  2. vital_signs_daily_service.rs:115 — 浮点比较改用 unwrap_or(Ordering::Equal)

4. DTO 覆盖检查

针对 5 个新增模块逐一检查:

模块 Handler 位置 DTO 文件 状态
care_plan handler/care_plan_handler.rs dto/care_plan_dto.rs
shift handler/shift_handler.rs dto/shift_dto.rs
ble_gateway handler/ble_gateway_handler.rs dto/ble_gateway_dto.rs
action_inbox handler/action_inbox_handler.rs 内嵌于 service (ActionItem 等 12 个结构体) 无独立 DTO
fhir fhir/handler.rs + fhir/types.rs fhir/types.rs (模块内自带)

说明:

  • action_inbox 的 DTO 类型 (ActionItem, ThreadResponse, ActionInboxQuery 等) 定义在 action_inbox_service.rs 中而非独立 dto 文件。建议抽取到 dto/action_inbox_dto.rs 以保持一致性。
  • fhir 模块在 fhir/types.rs 中定义了自己的 FHIR 资源类型,无需在 dto/ 目录 重复定义。

汇总

检查项 结果 严重度
Handler→Service 覆盖 29/29 完整
冗余代码 4 dead_code + 1 TODO
unwrap 风险 5 处生产代码 action_inbox , 其余低
DTO 覆盖 5/5 模块均已有定义 action_inbox 建议抽取

最高优先级修复: action_inbox_service.rs:306unwrap() + SQL 拼接问题。