- T40 UI 审计计划和结果文档(docs/qa/) - wiki 更新:miniprogram 设计系统合规审计记录 + index 关键数字更新 - 审计 V2 完整报告(docs/audits/v2/) - 讨论记录文档(docs/discussions/) - 设计规格和实施计划(docs/superpowers/) - 角色测试计划和结果(docs/qa/role-test-*) - Docker 生产部署配置
4.9 KiB
4.9 KiB
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 处 |
建议优先修复:
action_inbox_service.rs:306—user_id.unwrap()同时存在 SQL 注入风险 (直接拼接 SQL 字符串),应改用参数化查询 +ok_or(AppError)模式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:306 的 unwrap() + SQL 拼接问题。