- miniprogram.md: 晚间血压 CRITICAL 标记为已修复 - index.md: 症状导航表更新 - architecture/database/erp-core/erp-health/frontend/testing: 同步更新
9.0 KiB
9.0 KiB
HMS 健康管理平台 — 知识库
Health Management System (HMS) — 面向体检中心/医疗机构的综合健康管理平台。从 ERP 底座分叉,继承身份权限/工作流/消息/配置等基础能力,
erp-health原生模块承载医疗业务。
关键数字
| 指标 | 值 |
|---|---|
| Rust crate | 18 个(erp-core + 5 基础业务 + erp-health + erp-ai + erp-dialysis + erp-plugin + 5 插件 + erp-plugin-prototype) |
| 数据库表 | 30 基础表 + 44 健康业务表 + 3 AI 表(已实现) |
| 数据库迁移 | 96 个 |
| 后端路由 | 328 个(8 公开 + 320 受保护) |
| 核心模块 | 5 基础 (auth/config/workflow/message/plugin) + 3 业务 (health + ai + dialysis) |
| erp-health 实体 | 45 个 Entity(~21k 行 Rust) |
| erp-ai 实体 | 3 个 Entity(1.7k 行 Rust) |
| Web 前端 | 92 TSX + 71 TS = 163 个源文件(含 25+ 健康路由页面 + 11 健康组件) |
| 微信小程序 | Taro 4.2 + React 18,40 个页面(31 患者端 + 9 医护端),5 个 TabBar |
| 前端单元测试 | 5 个(vitest)+ 5 E2E spec(playwright) |
| 后端测试 | 611 单元 + 153 集成 = 772 个函数(97.5% 通过率) |
| 总代码量 | Rust ~77k 行(462 源文件)+ Web 前端 163 文件 + 小程序 125 文件 |
| 事件系统 | 25 事件类型 / 44 发布处 / 14 消费者 |
| DTO | 105 个结构体(17 文件) |
| 权限码 | 50 声明(health 39 + ai 6 + dialysis 5)+ 56 基础模块手动注册 |
| API 文档 | http://localhost:3000/api/docs/openapi.json |
| Git 提交 | 409 次 |
| 审计状态 | 2026-04-30 全系统审计完成(83% 总体完成度) |
| UI/UX 重构 | Phase 1-5 完成(6 共享组件 + 4 角色仪表盘 + 个人统计数据 + 表单抽屉 + 小程序优化) |
症状导航
| 症状 | 先查 | 再查 | 常见根因 |
|---|---|---|---|
| API 返回 403 | 权限码检查 | wasm-plugin 权限系统 | 权限码不匹配 / 缺少 .list 权限 |
| API 返回 500 无日志 | erp-core 错误链 | 后端 tracing 输出 | AppError::Internal 静默 |
| 数据库连接失败 | infrastructure | PostgreSQL 服务状态 | 服务未启动 / 环境变量未设置 |
| 前端 401 刷新时 | frontend auth store | API client token 刷新 | token 过期未主动刷新 |
| 迁移执行失败 | database | PostgreSQL 日志 | 表冲突 / 唯一索引 + 软删除 / 缺失迁移文件 |
| 端口被占用 | infrastructure dev.ps1 | 端口 5174-5189 进程 | 残留 Vite 进程 |
| 预约创建 400 doctor_id is required | erp-health 预约并发控制 | AppointmentList.tsx | 医生字段为必填(后端 CAS 要求) |
| 预约超额 | erp-health 排班并发 | appointment CAS 操作 | 并发控制未走原子 CAS |
| 患者创建 422 birth_date trailing input | frontend 日期序列化 | DatePicker dayjs 对象 | 未格式化为 YYYY-MM-DD 字符串 |
| 跨租户数据泄漏 | architecture 多租户策略 | database tenant_id | 查询缺少 tenant_id 过滤 |
| 小程序页面空白 | miniprogram defineConstants | process.env 未替换 |
编译时未注入环境变量 |
小程序登录失败 btoa is not defined |
miniprogram secure-storage | Web API 不可用 | 使用 Taro.arrayBufferToBase64 替代 |
| 微信登录 500 | database wechat_users 表结构 | Entity 字段与表不匹配 | 补 created_by/updated_by/version 列 |
| 迁移文件缺失报错 | database 迁移注册 | migration/src/lib.rs | 已应用的迁移文件被删除,需创建 stub |
MCP 连接失败 split error |
miniprogram MCP 联调 | project.config.json | 未开启 automationAudits |
| MCP mp_screenshot 超时 | miniprogram MCP 联调 | automator 已知 bug | 用 page_getElement 替代截图 |
| MCP 导航后跳回登录页 | miniprogram MCP 联调 §6.4 | storage 被清空 | 明文 token 写入后立即 reLaunch |
| MCP token 注入后仍 401 | miniprogram MCP 联调 §6.1 | 用了生产构建 | dev 构建(NODE_ENV=development)+ 空密钥 |
| 积分商城 Tab 页空白 | miniprogram 待优化 | 未关联患者档案 | 需增加降级 UI 引导建档 |
| MCP 批量审计页面栈溢出 | miniprogram MCP 联调 §6.6 | navigateTo 超 10 层 |
改用 reLaunch 逐页测试 |
| 告警管理按钮不显示 | frontend 权限码拼写 | AlertList.tsx | health.alert.manage → health.alerts.manage(缺 s) |
| 小程序晚间血压丢失 | miniprogram 体征录入 | indicator_type 映射 | 已修复: 新增 blood_pressure_evening 类型,录入页+日常监测页+后端+测试全覆盖 |
| AI 分析 SSE 无 UI 入口 | erp-health AI 分析 | 前端未调用 | 4 个 SSE 端点无管理界面触发 |
模块导航
基础层(继承自 ERP 底座)
- erp-core — 错误体系 · 事件总线 · 模块 trait · 共享类型
- architecture — 架构决策 · 设计原则 · 技术选型
业务层(继承自 ERP 底座)
- erp-auth — 用户/角色/权限/组织/部门/岗位 · JWT · RBAC · 行级数据权限
- erp-config — 字典/菜单/设置/编号规则/主题/语言
- erp-workflow — BPMN 解析 · Token 驱动 · 任务分配
- erp-message — 消息 CRUD · 模板 · 订阅 · 通知面板
- erp-plugin — WASM 运行时 · 动态表 · 热更新(HMS 保留但非主要扩展方式)
核心业务层(HMS 专属)
- erp-health — 患者管理 · 健康数据 · 预约排班 · 随访管理 · 咨询管理 · 内容管理 · 积分商城 · 透析管理 · 线下活动 · 日常监测 · 告警系统(原生 Rust 模块,44 实体,已实现)
- erp-ai — AI 智能分析 · 化验单解读 · 趋势分析 · 报告摘要(原生 Rust 模块,3 实体,Phase 1 MVP)
组装层
- erp-server — Axum 入口 · AppState · 7+ 模块注册 · 后台任务 · 优雅关闭
患者端
- miniprogram — 微信小程序 · Taro 4.2 · 微信登录 · 手机绑定 · 健康数据查看
基础设施
- infrastructure — 连接信息 · 环境变量 · 一键启动 (单一真相源)
- database — SeaORM 迁移 · 多租户表结构(96 迁移)
- frontend — React 19 SPA · 健康管理页面(25+ 路由 + 11 组件)
- testing — 验证清单 · 测试分布 · 性能基准
核心架构问答
为什么 erp-health 用原生模块而非 WASM 插件? 医疗业务需要 18 强类型实体、自定义 API(趋势分析/统计报表)、文件上传(化验单/体检报告)、未来 AI 集成,超出 WASM 插件能力范围。详见 erp-health。
模块间如何通信? erp-core EventBus 发布/订阅 DomainEvent。erp-health 发布 patient.created、appointment.confirmed 等事件,订阅 workflow.task.completed 等。详见 architecture。
多租户怎么隔离? 共享数据库 + tenant_id 列过滤,中间件从 JWT 注入。详见 database architecture。
患者/医护与 erp-auth 的关系? 账号走 users 表,erp-health 通过 user_id 外键关联扩展字段(科室、职称、档案等)。患者可先建档后绑定账号。
文档索引
| 类型 | 位置 |
|---|---|
| 健康模块设计规格 | docs/superpowers/specs/2026-04-23-health-management-module-design.md |
| AI 模块设计规格 | docs/superpowers/specs/2026-04-25-erp-ai-module-design.md |
| 内容管理设计规格 | docs/superpowers/specs/2026-04-26-content-management-design.md |
| PII 加密扩展规格 | docs/superpowers/specs/2026-04-26-pii-encryption-expansion-design.md |
| 实时体征管线探讨 | docs/superpowers/specs/2026-04-26-realtime-vital-signs-pipeline-design.md |
| 平台复盘与演进 | docs/superpowers/specs/2026-04-26-platform-retrospective-and-evolution-design.md |
| 设计规格(全量) | docs/superpowers/specs/ (31 份) |
| UI/UX 重构设计规格 | docs/superpowers/specs/2026-04-28-ui-ux-overhaul-design.md |
| UI/UX 重构实施计划 | docs/superpowers/plans/2026-04-28-ui-ux-overhaul-plan.md |
| 实施计划(全量) | docs/superpowers/plans/ (27 份) |
| 全系统审计报告 | docs/audits/08-audit-report-2026-04-30.md(83% 总体完成度,2 CRITICAL + 3 HIGH) |
| 审计基线快照 | docs/audits/00-baseline-snapshot.md |
| 审计功能清单 | docs/audits/01-feature-inventory.md(328 路由三端映射矩阵) |
| 审计后端完整性 | docs/audits/02-backend-integrity.md(100% 调用链连通) |
| 审计事件系统 | docs/audits/03-event-system.md(25 事件 / 14 消费者 / 100% payload 一致) |
| 审计参数配置 | docs/audits/04-parameter-config.md(105 DTO / 50 权限码 / 数据映射缺口) |
| 审计差距模式 | docs/audits/05-gap-patterns.md(5 种模式,透析/知情同意 MP 缺失) |
| 审计错误处理 | docs/audits/06-error-handling.md(SSE 不挂起 / 日志 30% 覆盖) |
| 审计测试覆盖 | docs/audits/07-test-coverage.md(772 测试 / 前端极低 / AI 无集成测试) |
| 讨论记录 | docs/discussions/ (10 份) |
| 协作规则 | CLAUDE.md |
| 插件制作指南 | .claude/skills/plugin-development/SKILL.md |