Files
hms/docs/discussions/2026-04-26-platform-retrospective-and-evolution.md
iven 1265935fa3 chore: 设计规格文档 + 销售数据 + 脚本工具 + 根目录 monorepo 配置
- docs/: 设计规格、讨论记录、销售数据、健康管理文档
- scripts/: 辅助脚本
- package.json + pnpm-lock.yaml: monorepo 根配置
2026-04-28 00:20:37 +08:00

153 lines
6.8 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-04-26 | 参与者: 用户 + AI (三专家视角评审)
## 背景
HMS 健康管理平台经过 17 天密集开发4/10-4/26从 ERP 底座演进到包含 16 个 Rust crate、62 个前端页面、27 个小程序页面的综合医疗 SaaS 平台。用户希望对项目的迭代开发过程进行回顾总结,验证基座设计是否合理,并讨论后续演进方向。
## 讨论要点
### 1. 项目演进脉络
- **Phase 1-64/10-4/16**ERP 底座搭建 — core/auth/config/workflow/message 全部原生 Rust 模块
- **WASM 插件实验4/13-4/18**:设计并实现插件系统,落地 CRM/Inventory/Freelance/ITOps 4 个插件
- **HMS 分叉4/23-4/26**:健康模块因 5 个硬限制(强类型/加密/文件/后台任务/外部 API选择原生开发
- **快速迭代**18+ 健康实体、AI 模块、微信小程序、按钮级权限控制
### 2. 基座设计验证
**验证通过的设计:**
- 星形依赖拓扑(零循环依赖)
- ErpModule trait 统一接口(生命周期/权限/事件/健康检查)
- 事件总线基础设施broadcast + outbox 持久化 + 前缀过滤)
- JWT → TenantContext 多租户全链路贯通
- ModuleRegistry 拓扑排序Kahn 算法 + 循环检测)
**存在问题的设计:**
- 事件消费侧不完整13 个事件只有 3 个被消费)
- 路由手动合并(不在 trait 中,每个新模块需手动接线)
- erp-message 全量订阅(性能隐患)
- 事件注册双路径(`register_event_handlers` vs `on_startup`
### 3. 四个关键张力
#### 张力 1双轨并行 — 插件 vs 原生
两条截然不同的模块开发范式并存,没有明确的判断框架。
**插件路径**plugin.toml → Guest trait → WASM → 自动路由/动态表/沙盒隔离
**原生路径**Rust crate → ErpModule trait → 手动路由/强类型/完全能力
结论HMS 核心业务(健康/AI/透析/积分)全部需要原生,插件只适用于 CRUD 密集型通用 ERP 模块。
#### 张力 2事件消费缺口
erp-health 发布 13 种事件,消费侧严重不足:
- `health_data.critical_alert` 无消费者(危急体征无人响应)
- `follow_up.overdue` 无消费者(逾期随访无催办)
- `patient.created/updated``lab_report.uploaded``consultation.opened/closed` 等全部空转
#### 张力 3租户隔离最后一公里
应用层隔离完整但缺兜底:
- 无 PostgreSQL RLS policy
- 无强制 tenant_id 过滤机制
- 微信登录硬编码 default_tenant_id
#### 张力 4健康模块复杂性
erp-health 已成为子平台加密子系统、脱敏管道、积分体系、AI 数据提供者、后台调度、小程序 API。积分系统8 实体/12+ 路由)不属于健康模块。
### 4. 三专家评审
#### 专家 1高级系统架构师
- 诊断准确度 7/10优先级有偏差
- 发现 EventBus 无重放机制服务重启丢事件、overdue 事件无幂等保护
- RLS 不是 P0多租户集成测试才是
- 积分系统不应在 health 内
- 核心原则:先补测试再重构,先修事件再上功能,先验证再加固
#### 专家 2医疗信息化专家
发现比原始诊断更深层的风险:
- 危急值阈值全部硬编码(不可配置,无法适应不同科室)
- `daily_monitoring` 表体征数据不经过危急值检测(合并遗留问题)
- 过敏史更新直接覆盖,无变更历史
- 知情同意完全缺失(搜索 consent/同意/授权/隐私 零结果,违反 PIPL 第29条
- 只有身份证号加密,姓名/过敏史/诊断/咨询内容明文
- 审计日志不完整(只有预约状态变更记录前后值)
- ip_address 和 user_agent 从未被填充
- 读操作完全没有审计记录
#### 专家 3产品策略专家
- 17 天 237 提交不可持续但不必恐慌fix 提交占 21.6%
- 41% Rust 代码在插件系统,对核心业务贡献接近零(最大 ROI 失衡)
- 单人+AI 的"速度幻觉"68 提交/天 = 审查不足
- 测试正确水位:关键路径 50-80 用例3-4 天投入
- V2 血透路线图:技术储备够,但缺市场验证,建议先做 3-5 家客户调研
### 5. 三专家共识
| 共识 | 说明 |
|------|------|
| 危急值告警闭环是 P0 | 三方一致,错误的血糖阈值可致患者昏迷 |
| 知情同意缺失是法律红线 | PIPL 违规可罚 5000 万 |
| 积分系统不属于 health | 三方独立得出相同结论 |
| 测试覆盖是所有后续工作的前提 | 先有测试才能放心重构 |
| 插件系统应冻结 | 保留代码,不再投入 |
| EventBus 可靠性需增强 | 无重放 + 无幂等 |
### 6. 重新排序的优先级
**P02-3 周,上线前必修):**
1. 危急值告警消费者1天
2. 危急值阈值可配置化2天
3. daily_monitoring 合并后告警验证1天
4. 随访逾期通知 + 幂等保护1天
5. 知情同意记录3天
6. 审计日志补全3天
7. EventBus 持久化增强2天
**P12-4 周,治理):**
8. 积分系统剥离5天
9. 关键路径测试 50-80 用例4天
10. 插件系统冻结声明0.5天)
11. erp-message 改用 subscribe_filtered1天
12. 统一事件消费模式2天
13. 过敏史变更历史1天
**P2后续迭代扩展**
14. PostgreSQL RLS
15. 血透专科(先客户调研)
16. OCR / IM血透验证后
17. health 模块按子域重组
18. 动态菜单系统
## 结论 / 待定
### 达成的共识
1. **基座设计方向正确** — 星形依赖、trait 抽象、事件总线经受住了实践检验
2. **插件系统从核心战略降级为实验性功能** — 保留但冻结
3. **临床安全和合规是最高优先级** — 危急值闭环和知情同意必须先于功能扩展
4. **积分系统应从 health 模块拆出** — 降低合规复杂度
5. **单人+AI 开发需要节奏控制** — 每日提交上限、ADR 强制化、医疗安全代码外部 review
### 遗留问题
1. **知情同意的具体实现方案** — 需要单独讨论:同意类型(数据收集/共享/研究使用)、获取时机(建档时/首次使用时)、存储结构
2. **积分系统拆分的接口设计** — 事件总线通信还是共享 trait
3. **血透专科的市场验证** — 需要用户确认是否已做客户调研
4. **PostgreSQL RLS 的实施策略** — 全量 RLS 还是只覆盖敏感表?
5. **合规审计的准备** — 是否有外部合规审计计划?
### 关联文档
- 设计规格:`docs/superpowers/specs/2026-04-26-platform-retrospective-and-evolution-design.md`
- 插件系统设计:`docs/superpowers/specs/2026-04-13-wasm-plugin-system-design.md`
- 健康模块设计:`docs/superpowers/specs/2026-04-23-health-management-module-design.md`
- 插件平台讨论:`docs/discussions/2026-04-18-plugin-platform-brainstorm.md`