Files
hms/docs/superpowers/specs/2026-05-11-system-comprehensive-analysis-design.md
iven 9487ccb62e docs(health): 六维度全面均衡分析报告 + 六专家组头脑风暴评审
- 新增六维度分析报告:架构(7.5)/代码质量(7.0)/业务完整度(7.5)/安全合规(7.5)/生产就绪(5.5)/可扩展性(6.5),综合 6.9/10 (B)
- 组织 6 位虚拟专家(架构师/后端/前端/安全/DevOps/产品)独立评审,综合 7.0/10 (B),较上次 6.4/10 提升 +0.6
- 识别 Top 5 行动优先级:OpenAPI 注解补全、性能基准、event.rs 拆分、小程序测试、冻结模块解冻
- 制定三个月路线图:Month 1 质量加固 → Month 2 功能补全 → Month 3 生产化
- 更新 wiki/index.md 关键数字(57 实体、999 测试、24 unwrap、75+ 权限码等)
2026-05-11 03:43:51 +08:00

14 KiB
Raw Blame History

HMS 健康管理平台 — 六维度全面均衡分析报告

日期: 2026-05-11 | 数据截止: commit c716cc0 (feat/media-library-banner 分支) | 提交: 720+ 上次分析: 2026-05-07 (综合 6.4/10 B-) | 本次基准: 媒体库+轮播图上线后

执行摘要

维度 评分 趋势 关键发现
架构合理性 7.5/10 模块边界清晰event.rs 2871 行成最大技术债
代码质量 7.0/10 Clippy 0 警告,生产 unwrap 降至 24 处utoipa 覆盖仅 33%
业务完整度 7.5/10 媒体库/轮播图上线6 个模块仍冻结
安全合规 7.5/10 PII 加密全面0 SQL 注入,缺速率限制
生产就绪度 5.5/10 依赖全部最新,缺性能基准和监控
可扩展性 6.5/10 模块化单体路径清晰,本地存储限制
综合 6.9/10 功能完整度 87%,生产就绪度约 60%

与上次对比2026-05-07 → 2026-05-11

  • 代码质量 ↑ — Clippy 0 警告(从有警告到清零),生产 unwrap 从 514 降至 24
  • 业务完整度 ↑ — 媒体库/轮播图/文章编辑器上线,冻结模块从 7 降至 6
  • 安全合规 ↑ — SQL 注入已修复FHIR 越权已修复V2 CRITICAL 全部清零
  • 生产就绪度 → — 无变化,仍缺性能基准和监控体系
  • 综合 6.4 → 6.9,评级从 B- 提升到 B

Top 5 行动优先级:

  1. CRITICAL — 补全 OpenAPI 文档erp-health 31/32 handler 无注解)
  2. HIGH — 建立性能基准测试和监控体系
  3. HIGH — 拆分 event.rs2871 行)和 module.rs1595 行)
  4. HIGH — 小程序补全单元测试(当前 124 文件 0 测试)
  5. MEDIUM — 解冻冻结模块6 个模块前端无 UI

1. 架构合理性分析

评分7.5 / 10B+ | 与上次持平

1.1 现状数据

指标
Rust crate 17 个(+ 7 插件骨架)
Rust 源文件 599 个
分层结构 L1(erp-core) → L2(8 业务模块) → L3(erp-server)
领域事件 31 类型 + 23 幂等消费者
权限码 75+ 个,声明式路由绑定
EventBus broadcast + 持久化 + dead-letter + LISTEN/NOTIFY
模块间依赖 零直接业务依赖(仅 EventBus + trait

1.2 优势

  1. 教科书级模块化单体 — 17 crate 严格分层ErpModule trait 统一生命周期(注册/启动/关闭/健康检查),天然支持微服务拆分
  2. 事件驱动架构成熟 — Outbox 模式 + LISTEN/NOTIFY + 死信队列 + 幂等消费,事件不丢失不重复
  3. 多租户纵深防御 — JWT 中间件注入 → SeaORM 自动过滤 → PostgreSQL RLS 策略三层隔离
  4. UUID v7 主键 — 时间排序 + 唯一性,分布式友好
  5. 软删除 + 乐观锁 — 版本字段检查,数据不可丢失

1.3 风险与缺口

风险 严重度 位置
event.rs 2871 行,混合 31 事件定义 + 23 消费者 + 测试 HIGH crates/erp-health/src/event.rs
module.rs 1595 行150+ 路由注册在单文件 HIGH crates/erp-health/src/module.rs
erp-plugin 复杂度data_service 1907 行 + manifest 1809 行) MEDIUM crates/erp-plugin/
6 个冻结模块的架构债务 MEDIUM 路由/权限/菜单仍存在
erp-health 仍为巨石模块189 文件12 业务子域) MEDIUM crates/erp-health/

1.4 建议行动

  1. 拆分 event.rs — 按领域拆为 patient_events.rsalert_events.rsconsultation_events.rs 等,事件定义和消费者分离
  2. 拆分 module.rs — 路由按业务域分组为 routes/patient_routes.rsroutes/appointment_routes.rs
  3. 冻结模块策略明确 — 要么解冻并完成 UI要么从路由树中移除减少编译体积和认知负担

2. 代码质量分析

评分7.0 / 10B | 较上次 ↑6.0 → 7.0

2.1 现状数据

指标 评估
Clippy 警告 0 全 workspace 清零
生产代码 unwrap() 24 处 低风险(多为安全解包)
测试代码 unwrap/expect ~488 处 可接受
Rust 大文件(>800行) 17 个 需关注 top 5
TSX 大文件(>800行) 0 个 优秀
前端 API 层绕过 0 处 优秀
Web console.log 0 处 优秀
MP console.log 33 处 生产构建自动移除
TypeScript any Web 32 / MP 35 Web 多为测试代码
后端测试 999 函数815 同步 + 184 异步) 丰富
前端测试 644 断言472 Web + 39 MP + 133 E2E 中等
utoipa 注解 322 个 / 21/64 文件 = 33% erp-health 缺口大
依赖版本 全部最新主版本线 优秀

2.2 优势

  1. Clippy 全清零 — 从 514 个 unwrap() 降至 24 个生产 unwrap0 Clippy 警告,质量门禁见效
  2. API 层零绕过 — 前端 0 处直接 fetch/axios 调用,全部通过 api/ 层
  3. 错误处理一致 — 所有 handler 统一返回 AppError类型化错误链
  4. Web 代码极干净 — 0 console.log、0 超大文件、any 多为测试 mock
  5. 后端测试丰富 — 999 测试函数78 个文件包含内联测试模块

2.3 风险与缺口

风险 严重度 详情
OpenAPI 文档覆盖仅 33% CRITICAL erp-health 31/32 handler 无注解API 文档不完整
小程序 0 个单元测试 HIGH 124 文件完全无测试覆盖
覆盖率工具未执行 HIGH vitest coverage 已配置但无最新报告
17 个 Rust 大文件 MEDIUM event.rs(2871)、data_service.rs(1907)、manifest.rs(1809)
MP 源码 33 处 console.log LOW 生产构建自动移除,但影响代码整洁

2.4 建议行动

  1. 批量补全 utoipa 注解 — 为 erp-health 剩余 31 个 handler 添加 OpenAPI 注解
  2. 小程序测试补全 — 优先为 service 层29 个文件)编写单元测试
  3. 执行覆盖率报告 — 运行 vitest run --coveragecargo tarpaulin,建立基线

3. 业务完整度分析

评分7.5 / 10B+ | 较上次 ↑6.5 → 7.5

3.1 现状数据

指标
erp-health 实体 57 个(新增 media_folder/media_item/banner
erp-health handler 31 个
erp-health service 36 个(含子模块)
Web 活跃路由 29 个
Web 冻结路由 6 个
小程序页面 66 个(主包 12 + 分包 54
后台定时任务 5 个
新增功能 媒体库管理 + 轮播图管理 + 文章编辑器重设计

3.2 优势

  1. 内容管理闭环 — 文章 CRUD + 媒体库 + 轮播图 + 公共端点(小程序访客可访问)
  2. 文章编辑器重设计 — 公众号风格三栏布局 + iPhone 15 Pro 预览 + 丰富样式模板
  3. Design Token 全面推广 — 68 SCSS 文件接入,关怀模式 CSS 变量级联
  4. 长者模式 100% 覆盖 — 58/58 页面全部完成
  5. 医生端功能丰富 — 17 页面涵盖患者/咨询/随访/报告/告警/透析/处方

3.3 风险与缺口

冻结模块 前端状态 后端状态 业务影响
care-plans 有页面(CarePlanList/Detail) 有 CRUD 可快速解冻
shifts 有页面(ShiftList/Detail) 有 CRUD 可快速解冻
family-proxy 有页面 有 CRUD 可快速解冻
medications 有页面 有 CRUD 可快速解冻
dialysis 有页面(DialysisManageList) 有独立 crate 可快速解冻
schedules 有页面(DoctorSchedule) 有 CRUD 可快速解冻

重要发现: 6 个冻结模块全部已有前端页面和后端 CRUD仅被 frozen: true 标记阻止访问。解冻成本极低(改 routeConfig.ts 即可),但需要:

  • 验证功能完整性E2E 测试)
  • 确认权限码配置正确
  • UI/UX 一致性检查

3.4 建议行动

  1. 批量解冻 — 优先解冻 care-plans、shifts、dialysis业务价值最高
  2. 解冻后验证 — 每个解冻模块执行 E2E 测试确认功能正常
  3. AI 模块 UI 入口 — 4 个 SSE 分析端点缺少前端触发入口

4. 安全合规分析

评分7.5 / 10B+ | 较上次 ↑7.0 → 7.5

4.1 现状数据

指标 状态
PII 加密 AES-256-GCM + HMAC-SHA256 + DEK 轮换
加密字段覆盖 咨询内容、诊断备注、执业证号、随访结果、手机号、症状等
SQL 注入 0 处(全部参数化或 sanitize_identifier
JWT 认证 自动刷新 + 并发队列 + 身份一致性校验
多租户隔离 middleware 注入 + SeaORM 过滤 + RLS 策略
HTML 清理 ammonia 库
V2 CRITICAL 全部修复SQL 注入 + FHIR 越权)

4.2 优势

  1. V2 CRITICAL 全清零 — SQL 注入和 FHIR 越权两个 CRITICAL 级漏洞已修复
  2. PII 加密链路完整 — 从存储加密到 HMAC 盲索引到脱敏展示,全链路覆盖
  3. 零 SQL 注入面 — 15 处 format! SQL 均不含用户输入
  4. 认证体系成熟 — JWT 自动刷新、并发请求队列、身份一致性校验

4.3 风险与缺口

风险 严重度 详情
缺少 API 速率限制 HIGH 无 rate limiting middleware
公开端点安全审查 MEDIUM public_routes 需评估是否可被滥用
BLE 网关认证强度 MEDIUM gateway_routes 的 token 机制待验证
密钥轮换机制 MEDIUM secret_key 手动配置,无自动轮换
审计日志完整性 MEDIUM 部分操作缺少审计追踪

4.4 建议行动

  1. 添加速率限制 — 使用 tower-http 的 RateLimit layer按 IP + 用户维度限制
  2. 公开端点审计 — 评估 /public/* 端点的滥用风险,添加 IP 限制
  3. 审计日志补全 — 确保所有写操作create/update/delete都有审计记录

5. 生产就绪度分析

评分5.5 / 10C+ | 与上次持平

5.1 现状数据

指标 状态
依赖版本 全部最新主版本线
N+1 查询
前端 memoization 56% 页面有44% 无(多为小页面)
性能基准
覆盖率报告 工具已配置,未执行
错误处理 一致(全 AppError
监控 未确认
Docker 有配置
环境变量 config.toml + 环境变量

5.2 优势

  1. 依赖健康 — 所有 Rust 和 TypeScript 依赖均为最新主版本线
  2. 无 N+1 查询 — 使用 SeaORM 批量查询和关联加载
  3. 错误处理一致 — 所有 handler 返回 AppError前端统一错误提示
  4. 前端构建优化 — 生产构建自动移除 console.logterser 压缩

5.3 风险与缺口

风险 严重度 详情
无性能基准测试 HIGH 无法量化响应时间、吞吐量
监控体系不明 HIGH tracing 覆盖率、metrics 端点待确认
无覆盖率报告 MEDIUM 工具已配置但未执行,无法量化测试覆盖
前端 bundle 大小 MEDIUM 未确认首屏加载性能
SSE 断线重连 LOW 需验证客户端重连机制

5.4 建议行动

  1. 建立性能基线 — 使用 criterion 创建核心 API 基准测试
  2. 执行覆盖率报告 — 后端 cargo tarpaulin + 前端 vitest --coverage
  3. 配置 metrics 端点 — 使用 metrics + metrics-exporter-prometheus
  4. 前端性能审计 — Lighthouse 跑分 + bundle 分析

6. 可扩展性分析

评分6.5 / 10B- | 与上次持平

6.1 现状数据

指标 状态
模块化架构 天然支持微服务拆分
EventBus 进程内 broadcast可迁移到分布式 MQ
数据库 PostgreSQL共享数据库多租户隔离
文件存储 本地文件系统(媒体库)
缓存 Redis仅 AI 模块使用)
迁移 137 个,自动执行
主键策略 UUID v7

6.2 优势

  1. 微服务拆分路径清晰 — 模块间零依赖,每个 crate 可独立部署
  2. EventBus 可演进 — 从 broadcast → Kafka/NATS 无需改业务代码
  3. UUID v7 — 时间排序 + 唯一性,分布式 ID 生成友好
  4. 迁移自动执行 — 137 个迁移,启动时自动应用

6.3 风险与缺口

风险 严重度 详情
本地文件存储限制 HIGH 媒体库文件存本地,无法水平扩展
缓存范围有限 MEDIUM Redis 仅用于 AI 模块,其他模块无缓存
数据库扩展 MEDIUM 单 PostgreSQL 实例,无读写分离
API 网关缺失 LOW 直接暴露 Axum 端点,无统一入口

6.4 建议行动

  1. 媒体存储抽象 — 添加 Storage trait支持本地/S3/OSS 切换
  2. 数据库连接池优化 — 配置 PgPoolOptions添加读写超时
  3. 缓存策略 — 将 Redis 扩展到权限缓存、会话缓存
  4. API 网关评估 — 评估 nginx/caddy 反代方案

7. 综合评分与路线图建议

7.1 综合评分矩阵

维度 评分 权重 加权分
架构合理性 7.5 20% 1.50
代码质量 7.0 20% 1.40
业务完整度 7.5 20% 1.50
安全合规 7.5 15% 1.13
生产就绪度 5.5 15% 0.83
可扩展性 6.5 10% 0.65
综合 6.9/10 (B)

7.2 三个月路线图建议

Month 1 — 质量加固(提升到 7.5+

  • 补全 utoipa 注解erp-health 31 个 handler
  • 建立性能基准测试
  • 执行覆盖率报告建立基线
  • 拆分 event.rs 和 module.rs

Month 2 — 功能补全(提升到 8.0+

  • 解冻 6 个冻结模块
  • AI 模块前端 UI 入口
  • 小程序单元测试补全
  • API 速率限制

Month 3 — 生产化(提升到 8.5+

  • 监控和可观测性体系
  • 媒体存储 S3/OSS 抽象
  • 性能优化(前端 bundle + 后端查询)
  • 端到端压力测试