Files
hms/docs/discussions/2026-05-04-phase2-handoff.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

245 lines
10 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.
# Phase 2 交接文档 — 患者体验2026 年 8-9 月)
> 日期: 2026-05-04 | 类型: 交接文档 | Phase: Phase 2
## 背景
Phase 0基础加固和 Phase 1关怀引擎 MVP已全部完成。Phase 2 的目标是将患者和家庭体验从"健康数据查看器"转变为"被关怀的体验"。
## Phase 0 + Phase 1 完成状态
### Phase 0全部完成
- AI 自动分析管道修复(建议生成 + 事件发布)
- `ai.analysis.requested` 事件消费连接
- 建议状态生命周期
- 4 个千行 service 文件拆分
- 事件测试补全
- 核心健康管理页面测试
- 护士工作台 Phase 1
### Phase 1全部完成8/8 项)
| # | 功能 | 提交 |
|---|------|------|
| 1 | 每日关怀工作台Plan B 工作流驱动) | 已完成 |
| 2 | 护理计划Care Plan实体和服务层 | 已完成 |
| 3 | 透析专用风险评分KDIGO 规则) | 已完成 |
| 4 | 班次管理与护士分配 | `7b17f94` |
| 5 | BLE 网关后端接入端点API Key + 批量上传) | `7e57565` |
| 6 | "关怀已送达"通知管道 | 已完成 |
| 7 | 透析会话工作流BPMN 集成) | `0a9272b` |
| 8 | 家庭成员健康代理(同意 + 查看) | `95fa09c` |
---
## Phase 2 任务清单
### P2-1: 老年患者小程序重设计(年龄适配 UI— XL
**目标**: 65+ 患者可无障碍使用大字体、高对比度、≤3 步操作)
**当前状态**: 小程序 182 源文件 / 40+ 页面,使用 Taro 4.2 + React 18。无年龄适配设计。
**实施方向**:
1. 在小程序样式层增加 `--elderly-*` CSS 变量/token
- 基础字号 18-22px标准 14px
- 触摸目标 ≥ 48px
- 对比度 7:1WCAG AAA
- 导航最多 4-5 项
2. 新建 `pages/elderly/` 区块,着陆页设计:
- 温暖问候 + 护士照片名字
- "您的护理团队 X 小时前查看了您的健康数据,一切稳定"
- 一个大号"呼叫护士"按钮
- 用药提醒(大复选框)
3. 简化导航:从当前 TabBar 5 项减少到 3-4 项
4. 后端已有 `health.family-proxy` API 支持家庭成员查看健康摘要
**关键文件**:
- `apps/miniprogram/src/app.config.ts` — 路由和 TabBar 配置
- `apps/miniprogram/src/styles/` — 全局样式
- `apps/miniprogram/src/pages/` — 页面目录
- 后端 API: `GET /health/family/patients/{id}/health-summary`
**验收标准**: 65+ 患者可在 3 步内完成核心操作(查看今日关怀 / 确认用药 / 呼叫护士)
---
### P2-2: 透析专属健康教育内容管道 — M
**目标**: 基于患者当前风险指标智能推送肾病教育内容
**当前状态**: 已有完整 CMS`erp-health` 文章模块article/article_category/article_tag + 审核工作流 + 阅读统计)
**实施方向**:
1. 利用现有 CMS 策展透析患者专属内容库:
- "认识你的透析指标"
- "透析间期如何控制水分"
- "高磷食物避坑指南"
- "什么时候该联系护理团队"
2. 基于患者 KDIGO 风险评分自动推送相关文章
- 血磷高风险 → 推送高磷食物指南
- 体重增长过快 → 推送水分控制指南
- Kt/V 不达标 → 推送透析充分性科普
3. 后端新增"智能推送"服务:读取患者风险评分 → 匹配文章标签 → 创建推送记录
**关键文件**:
- `crates/erp-health/src/service/article_service.rs` — 已有文章 CRUD
- `crates/erp-health/src/entity/article.rs` — 文章实体
- `crates/erp-health/src/entity/article_tag.rs` — 标签实体
- Phase 1 新增的 KDIGO 评分服务 — 风险评分来源
- `crates/erp-health/src/service/ai_action_dispatcher.rs` — 可扩展推送逻辑
**验收标准**: 高风险透析患者自动收到与当前风险相关的教育文章
---
### P2-3: BLE 网关试点部署10 位患者) — L
**目标**: 10 位透析患者居家使用 BLE 网关,体征数据自动流入系统
**当前状态**: 后端 BLE 网关接入已完成Phase 1 #5
- `ble_gateways` 表 + `gateway_patient_bindings`
- API Key SHA-256 认证中间件
- 批量上传端点 `POST /health/gateway/upload`(多患者批量)
- 心跳端点 `POST /health/gateway/heartbeat`
- 复用 `device_reading_service::batch_create_readings` 管道
- 迁移 `m20260505_000113_create_ble_gateways.rs`
**剩余工作**:
1. 采购/选型商用 BLE 网关(如 Teltonika、Quectel
2. 网关固件配置:连接 BLE 设备(血压计/血糖仪/体重秤)→ HTTPS POST 到 HMS
3. 10 位患者试点部署 + 数据验证
4. 前端管理页面(网关状态监控,已有后端 CRUD
**关键文件**:
- `crates/erp-health/src/service/ble_gateway_service.rs` — 网关管理 + 上传处理
- `crates/erp-health/src/gateway_auth.rs` — API Key 认证
- `crates/erp-health/src/dto/ble_gateway_dto.rs` — GatewayUploadReq多患者批量格式
- `crates/erp-server/src/main.rs` — 网关路由注册gateway_auth 中间件层)
**验收标准**: 10 位患者居家体征数据每日自动上传,网关在线率 > 95%
---
### P2-4: 多 Provider AI + 成本感知路由 — M
**目标**: 简单分析走本地规则,复杂分析走 LLMProvider 不可用时自动回退
**当前状态**: 仅 Claude 单 Provider`LocalRulesEngine` 已存在但未集成到路由层
**实施方向**:
1. 扩展 `AiConfig` 使用当前死字段model/max_tokens/temperature/cache_ttl/rate_limit
2. 实现路由策略:
- 阈值检查 → 本地规则引擎(零成本)
- 趋势解读/化验单分析 → Claude高成本
- Provider 不可用 → 回退本地规则 + 标记"降级分析"
3. 添加 token 用量追踪(每次分析记录 input_tokens/output_tokens/cost_usd
4. 缓存生效:`find_cached` 已存在但从未被调用,接入分析管道
**关键文件**:
- `crates/erp-ai/src/service/auto_analysis.rs` — 自动分析批处理
- `crates/erp-ai/src/service/local_rules_engine.rs` — 本地规则引擎
- `crates/erp-ai/src/entity/ai_config.rs` — AI 配置实体(有死字段待激活)
- `crates/erp-ai/src/entity/ai_suggestion.rs` — 建议实体Phase 0 新增)
- `crates/erp-ai/src/module.rs` — 模块注册
**验收标准**: Provider 不可用时系统自动降级到本地规则,用户无感知中断
---
### P2-5: 关怀结果测量(干预前后对比) — M
**目标**: 干预后 7/14/30 天体征对比可量化
**当前状态**: Phase 1 已有 `care_plan_outcomes`metric, baseline, target, current, measured_at
**实施方向**:
1. 扩展 `care_plan_outcomes` 服务:自动从 `vital_signs` / `device_readings` 聚合测量值
2. 实现干预前后对比 API
- 输入care_plan_item_id + 干预日期
- 输出baseline干预前 7 天均值vs current干预后 7/14/30 天均值)
3. 前端趋势图展示干预效果
4. 接入事件流:`care.action.performed` 事件触发测量开始
**关键文件**:
- `crates/erp-health/src/entity/care_plan_outcome.rs` — 预后测量实体
- `crates/erp-health/src/service/care_plan_service.rs` — 护理计划服务
- `crates/erp-health/src/service/vital_signs_daily_service.rs` — 日聚合服务
- `crates/erp-health/src/service/trend_service.rs` — 趋势分析服务
**验收标准**: 护士可在护理计划详情中查看干预前后的体征对比图表
---
### P2-6: 读副本 + 分区用于分析查询 — M
**目标**: PostgreSQL 按月分区 `device_readings`,添加读副本连接用于分析查询
**实施方向**:
1. `device_readings` 表按月分区(当前 ~100万行/年BLE 部署后快速增长)
2. SeaORM 配置读副本连接(`DatabaseConnection` 支持多连接)
3. 分析查询(趋势/统计/FHIR路由到读副本
4. 超过 2 年的读数归档冷存储
**关键文件**:
- `crates/erp-server/migration/src/` — 新增分区迁移
- `crates/erp-health/src/state.rs` — HealthState 可扩展为双连接
- `crates/erp-health/src/service/stats_service.rs` — 统计查询
- `crates/erp-health/src/service/trend_service.rs` — 趋势查询
---
### P2-7: 机构运营仪表盘 — L
**目标**: 管理层可查看关怀质量指标
**当前状态**: 已有基础统计端点(`/health/admin/statistics/dashboard``personal-stats``system-health`
**实施方向**:
1. 扩展统计 API
- 关怀动作完成率(护士执行 / AI 建议)
- 患者留存率(月度)
- AI 建议准确率(护士采纳 / AI 总建议)
- 平均关怀响应时间AI 发现风险 → 护士执行关怀)
- 北极星指标:每位患者每周收到的关怀动作数
2. 前端仪表盘页面Ant Design Charts
3. 数据来源action_inbox + ai_suggestion + care_plan + 告警记录
**关键文件**:
- `crates/erp-health/src/service/stats_service.rs` — 已有统计服务
- `crates/erp-health/src/handler/stats_handler.rs` — 已有统计 Handler
- `apps/web/src/pages/` — 前端页面
---
## 实施建议
### 优先顺序
1. **P2-4 多 Provider AI**M— 降级能力是后续所有 AI 相关工作的基础
2. **P2-5 关怀结果测量**M— 需要积累数据,越早启动越好
3. **P2-2 透析教育内容**M— 后端改动小,可快速交付
4. **P2-3 BLE 网关试点**L— 需要硬件采购,后端已就绪
5. **P2-1 老年患者 UI**XL— 工作量最大,但依赖后端 API 已完成
6. **P2-6 读副本+分区**M— 数据量增长后才有必要
7. **P2-7 机构仪表盘**L— 需要前面各项数据积累
### 技术注意事项
1. **星型依赖架构不变** — 所有 crate 仅依赖 erp-core跨模块走 EventBus
2. **迁移编号从 `m20260505_000116` 开始** — 当前最后迁移是 `000115_family_member_health_proxy`
3. **Handler 模式**`State(state): State<HealthState>`, `Extension(ctx): Extension<TenantContext>`, `require_permission(&ctx, "health.xxx.list")?`, 返回 `Result<Json<ApiResponse<T>>, AppError>`
4. **ctx.user_id 是 Uuid 不是 Option** — 直接使用,不需要 `ok_or_else`
5. **前端小程序在 `apps/miniprogram/`** — Taro 4.2 + React 18
6. **前端 Web 在 `apps/web/`** — React 19 + Ant Design + Vite
7. **编译命令**: `cargo check`(编译检查)/ `cargo test -p erp-health`(单 crate 测试)/ `cargo test --workspace`(全量测试)
8. **数据库连接信息**: 见 `wiki/infrastructure.md` §2
### Phase 2 验收标准(总体)
| 指标 | 目标 |
|------|------|
| 10 位患者 BLE 网关试点 | 居家体征数据自动流入系统 |
| 老年患者 UI | 65+ 患者可无障碍使用大字体、高对比度、≤3 步操作) |
| 关怀结果测量 | 干预后 7/14/30 天体征对比可量化 |
| 机构仪表盘 | 管理层可查看关怀运营指标 |