Files
hms/docs/discussions/2026-05-07-three-dimension-analysis.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

238 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HMS 健康管理平台 — 三维度深度分析报告
> 日期: 2026-05-07 | 数据截止: commit 786f57c (第 692 次提交) | 分析范围: 全系统
## 背景
HMS 健康管理平台经过 692 次提交的密集开发,从近 30 次提交(全为 fix 类型)来看已进入**上线前质量加固阶段**。本报告从后端架构、前端体验、文档质量三个维度对系统进行全面梳理,识别过时数据、关键风险和改进机会。
## 1. 执行摘要
| 维度 | 评分 | 关键发现 |
|------|------|---------|
| 后端架构 | 7.5/10 | 模块化优秀erp-health 巨石化38%占比514 个 unwrap() |
| 前端体验 | 6.5/10 | Web 质量好小程序测试极差AI 入口缺失,国际化缺失 |
| 文档质量 | 6.0/10 | 体系完善但数据严重过时12+ 指标与实际不符) |
| **综合** | **6.4/10** | 功能完整度 85%,生产就绪度约 55% |
**最高优先级行动:**
1. CRITICAL — 创建生产级 Dockerfile从"能跑"到"能部署"
2. HIGH — 补全 AI 分析前端 UI 入口(核心差异化功能完整呈现)
3. HIGH — 配置 pre-commit hooks阻止问题继续累积
---
## 2. 后端架构分析
### 2.1 Crate 结构概览
系统共 18 个 Rust crate579 个 .rs 源文件:
| Crate | 文件数 | 代码量(约) | 职责 |
|-------|--------|-----------|------|
| erp-health | 179 | 35,750 | 核心医疗模块38% 占比) |
| erp-server | 18 | 23,481 | HTTP 入口 + 路由组装 |
| erp-plugin | 24 | 10,945 | 插件引擎 |
| erp-ai | 45 | 7,039 | AI 分析 |
| erp-auth | 38 | 6,889 | 认证/权限 |
| erp-workflow | 26 | 5,327 | 工作流引擎 |
| erp-config | 24 | 4,974 | 配置/字典/菜单 |
| erp-message | 18 | 3,699 | 消息通知 |
| erp-core | 23 | 2,513 | 基础框架 |
| erp-dialysis | 20 | 1,779 | 透析管理 |
| 插件骨架 ×7 | 7 | ~430 | 各类插件原型 |
**依赖关系:** `erp-core` → 8 个业务模块 → `erp-server` 组装。模块间零直接业务依赖,通过 EventBus + trait 通信。
### 2.2 erp-health 巨石模块风险
**规模:** 179 文件 / 35,750 行,占全部 Rust 代码的 38%。
**内部结构:**
- entity/: 55 个实体文件
- handler/: 29 个 HTTP handler
- service/: 37 个服务文件(含 5 个子目录)
- dto/: 20 个 DTO 文件
- fhir/: 4 个 FHIR R4 兼容层文件
- oauth/: 6 个 OAuth 文件
- event.rs: 2,327 行(含 1,300+ 行测试)
**风险点:**
- 4 个 service 文件超过 1,000 行points_service 1,863 行、patient_service 1,118 行)
- 单个 crate 搭载 12 个业务子域(患者/预约/随访/咨询/告警/积分/设备/内容/护理/透析/班次/知情同意)
- 建议:按子域拆分为 3-4 个独立 crate
### 2.3 erp-ai 模块
**规模:** 45 文件 / 7,039 行22 条 API 路由。
- 4 个 AI ProviderClaude、OpenAI、Ollama、Registry
- 11 个实体(分析记录/队列/知识库/Prompt/风险阈值/建议/配额等)
- 支持 SSE 流式分析,每日自动扫描高风险患者
- 事件驱动:`lab_report.uploaded` → 自动入队 → 化验单解读
### 2.4 事件系统
- **31 个事件类型**health 模块内)+ 跨模块事件
- **23 个幂等消费者**,每个有 `is_event_processed()` 检查
- 基于 `tokio::sync::broadcast` + PostgreSQL Outbox + LISTEN/NOTIFY
- 死信队列兜底:消费失败写入 `dead_letter_events`
- 治理风险:事件类型已从 25 暴增,但缺乏版本管理和 schema 注册
### 2.5 代码质量信号
| 信号 | 数量 | 严重程度 |
|------|------|---------|
| TODO/FIXME | 5 处 | 低 |
| unwrap() 调用 | 514 个(含测试) | 高erp-plugin 113、erp-ai 77 |
| 注释掉的代码 | 0 行 | 优秀 |
| pub 函数 | ~1,201 个 | 公共 API 面积较大 |
### 2.6 数据库迁移
共 128 个迁移文件(最早 2026-04-10最新 2026-05-07覆盖
- 基础设施001-031、插件系统033-041、核心医疗042-058
- 安全加密062-072、告警设备073-095、扩展功能096-128
- 亮点RLS 全面启用、审计日志哈希链、pgvector 扩展
### 2.7 API 路由统计
约 250+ 条路由,分布:
- erp-health: ~137 条public 1 + FHIR 14 + gateway 2 + protected ~120
- erp-ai: 22 条
- 其他模块: ~90 条auth/config/workflow/message/plugin/dialysis
---
## 3. 前端分析
### 3.1 Web 前端
| 维度 | 数据 |
|------|------|
| 框架 | React 19 + Ant Design 6 + Zustand 5 + Tailwind CSS v4 |
| 源文件 | 283 个 TS/TSX |
| 路由 | 55 条8 系统 + 6 插件 + 38 健康 + 6 冻结) |
| API 模块 | 50 个(含完整 TypeScript 类型定义) |
| Store | 6 个 Zustand Store均有测试 |
| 主题 | 4 套(信任蓝/温润东方/深邃夜色/翡翠清雅) |
**亮点:**
- API 层封装质量高:自动 token 刷新 + 并发请求队列去重 + 5 秒内存缓存
- 三层权限控制路由级PrivateRoute+ 组件级AuthButton+ 菜单级
- 测试工厂模式:`listPageTests.tsx` 自动生成列表页标准测试
- 6 个 Store 全部有请求去重和错误处理
**问题:**
- **国际化缺失**:无 i18n 框架,所有文本硬编码中文
- **6 条路由冻结**:护理计划/班次/家庭代理/药物/透析/排班显示"功能暂未开放"
- **AI 分析无 UI 入口**4 个 SSE 端点完整实现但无前端页面触发
### 3.2 微信小程序
| 维度 | 数据 |
|------|------|
| 框架 | Taro 4.2 + React 18 + Zustand 5 |
| 源文件 | 118 个 TS/TSX |
| 页面 | ~54 个(主包 12 + 分包 42 |
| TabBar | 4 个(首页/健康/消息/我的) |
| 医生端 | 独立分包16 个页面) |
| API 服务 | 37 个模块 |
**亮点:**
- AES 加密安全存储,生产环境强制密钥
- BLE 蓝牙设备集成(小米手环)
- 请求层并发去重 + 60 秒缓存 + 切换患者自动隔离
**问题:**
- 测试极差:仅 BLE 模块 4 个单元测试 + 4 个 E2E
- 118 个源文件几乎无测试覆盖
### 3.3 测试覆盖对比
| 层级 | 源文件 | 测试文件 | 覆盖比 |
|------|--------|---------|--------|
| Rust 后端 | 579 | 101含测试+ 25 集成 | 1:4.5 |
| Web 前端 | 283 | 62 单元 + 13 E2E | 1:3.8 |
| 小程序 | 118 | 4 单元 + 4 E2E | 1:14.8 |
| **后端测试函数** | **772 个**611 单元 + 153 集成 + 8 多模块) | 97.5% 通过率 |
---
## 4. 文档与质量分析
### 4.1 文档体系
| 类型 | 数量 | 状态 |
|------|------|------|
| 设计规格 | 47 份 | 覆盖全面 |
| 实施计划 | 49 份 | 覆盖全面 |
| 讨论记录 | 26 份 | 遵循命名规范 |
| 审计报告 | 25 份V1×8 + V2×13 + 截图) | 双轮完整审计 |
| Wiki 页面 | 12 个 | 数据过时 |
| plans/ 目录 | 87 个文件 | 膨胀需归档 |
### 4.2 wiki 数据过时(已验证)
| 指标 | wiki 值 | 实际值 | 偏差 |
|------|--------|--------|------|
| Git 提交 | 577 | 692 | +115 |
| 数据库迁移 | 123 | 128 | +5 |
| Rust 源文件 | 484 | 579 | +95 |
| Web 前端文件 | 225 | 283 | +58 |
| 前端测试文件 | 36 | 62 | +26 |
| E2E spec | 5 | 13 | +8 |
| 设计规格 | 41 | 47 | +6 |
| 实施计划 | 38 | 49 | +11 |
| 讨论记录 | 18 | 26 | +8 |
### 4.3 CI/CD 与工程质量
| 项 | 状态 | 说明 |
|----|------|------|
| GitHub Actions | ✅ 配置 | Rust check/test/clippy + 前端 tsc/test/build |
| Gitea Actions | ✅ 配置 | Rust fmt/check/test + 前端 build + 安全审计 |
| ESLint | ✅ 配置 | TypeScript 严格模式 + React Hooks 规则 |
| Prettier | ❌ 未配置 | 无代码格式化工具 |
| Pre-commit hooks | ❌ 未配置 | 质量门禁形同虚设 |
| Docker | ⚠️ 仅数据库 | PostgreSQL + Redis无应用镜像 |
| 生产部署 | ❌ 无方案 | 无法部署到任何服务器 |
### 4.4 根目录污染
遗留文件散落在项目根目录:
- 日志文件:`crash.log``server-output.log``server-stderr.log`
- 测试令牌:`.test_token``.test_token_fresh.txt`
- 截图:`current-page.png``home-full.png``home-improved.png`
- 快照:`snapshot_*.txt`4 个)
- OCR 数据:`chi_sim.traineddata`3.4MB
- Python 脚本:`test_api_auth.py``test_users.py`
---
## 5. 项目阶段判断
**阶段:上线前质量加固**
证据:
1. 近 30 次提交全为 `fix` 类型feat:fix 比约 2.3:1 的历史值已逆转)
2. 工作重心是 5 角色深度测试修复 + 安全加固 + AI 模块修复
3. V2 审计完成85%CRITICAL 安全问题已修复
4. 6 个模块主动冻结(护理/班次/家庭代理/药物/透析/排班)
**定位:**
- 功能完整度85%12 个活跃功能域基本完整)
- 代码质量75%Rust 后端优秀,前端质量待提升)
- 安全合规70%PII 加密优秀,但仍有 CRITICAL 漏洞发现)
- 可部署性40%(无生产部署方案)
- 可维护性65%(文档完善但过时,代码膨胀需治理)
---
## 6. 关联文档
- [多专家组头脑风暴记录](2026-05-07-expert-brainstorm-session.md) — 5 位专家独立评审 + 行动清单
- [wiki/index.md](../../wiki/index.md) — 待更新的知识库入口
- [V2 审计最终报告](../audits/v2/13-final-report.md) — 85% 完成度审计
- [夯实基础设计规格](../superpowers/specs/2026-05-05-foundation-solidification-design.md) — 冻结策略和后续路线图