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 生产部署配置
This commit is contained in:
iven
2026-05-13 23:29:42 +08:00
parent 212c08b7ae
commit df1d85bfde
78 changed files with 10345 additions and 39 deletions

View File

@@ -0,0 +1,237 @@
# 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) — 冻结策略和后续路线图