- T40 UI 审计计划和结果文档(docs/qa/) - wiki 更新:miniprogram 设计系统合规审计记录 + index 关键数字更新 - 审计 V2 完整报告(docs/audits/v2/) - 讨论记录文档(docs/discussions/) - 设计规格和实施计划(docs/superpowers/) - 角色测试计划和结果(docs/qa/role-test-*) - Docker 生产部署配置
16 KiB
HMS 质量验证策略 — 分层端到端验证
日期: 2026-05-05 | 状态: Draft
1. 背景
HMS 健康管理平台已完成 Phase 0-1 的功能开发,Phase 2 Web UI 补全正在进行中。系统当前拥有:
- 18 个 Rust crate,87k 行后端代码,328 个 API 路由
- 46 个健康业务实体,80+ 个 health 模块端点
- Web 管理后台 36+ 条健康路由,微信小程序 40+ 页面
- 772 个后端单元/集成测试(97.5% 通过率)
核心矛盾: 功能完整度很高(前后端几乎全部贯通),但从未从业务角色视角进行过端到端的系统性验证。无法确认所有业务链路闭环、各角色的功能是否可用、是否存在过度开发。
触发因素: 已签约的血透中心客户要求 1-2 周内看到可试用的版本。
2. 策略概述
采用分层验证策略(Layer C):
- 第一周(Day 0-5): 角色场景冒烟测试 — 定义 6 条端到端业务链路,手动走通并记录问题
- 第二周(Day 6-10): 修复 + 固化 — 修复 P0 问题,将通过的链路固化为 Playwright 自动化测试
3. 前置准备(Day 0)
开始冒烟测试前,必须确认以下基础环境:
| 检查项 | 验证方式 | 通过标准 |
|---|---|---|
| 后端服务启动 | cd crates/erp-server && cargo run |
无报错,监听 3000 端口 |
| 前端开发服务 | cd apps/web && pnpm dev |
无报错,访问 localhost:5174 正常 |
| 数据库迁移 | 查看启动日志 | 所有迁移成功执行 |
| 初始种子数据 | 检查数据库 | 有默认管理员账号 + 基础科室/角色数据 |
| 小程序开发工具 | 微信开发者工具加载项目 | 编译无错误,模拟器正常运行 |
| API 文档 | 访问 /api/docs/openapi.json |
OpenAPI spec 正常返回 |
种子数据最低要求:
- 1 个管理员账号(admin/Admin@2026)
- 2 个科室(血透室、体检科)
- 4 个用户(2 医生 + 2 护士),已分配对应角色
- 5 个患者档案(其中 2 个需绑定微信测试号,供 S4 使用)
- 下周的排班数据
- 基础告警规则(血压/心率阈值)
已知审计问题确认(Day 0 必须检查):
| 审计 ID | 问题描述 | 状态 | 冒烟测试影响 |
|---|---|---|---|
| CRITICAL-1 | 小程序晚间血压丢失(blood_pressure_evening 类型缺失) |
wiki 显示已修复 | S4 步骤 3 涉及体征录入,需确认晚间血压可正常保存 |
| CRITICAL-2 | 告警权限码拼写错误(health.alert.manage vs health.alerts.manage) |
待确认 | S2 步骤 6-7 涉及告警查看/处理,如权限码错误将导致 403 |
| HIGH-1 | 透析管理小程序端缺失 | 未修复 | S4 仅验证 Web 端透析功能,小程序端降级为"查看透析记录" |
| HIGH-2 | 知情同意小程序端缺失 | 未修复 | S4 跳过知情同意功能验证 |
| HIGH-3 | 前端日志严重不足 | 未修复 | 不阻塞冒烟测试,但影响问题定位效率 |
降级策略: HIGH-1/HIGH-2 未修复的小程序功能,在 S4 中标记为 SKIP,不阻塞场景判定。
4. 冒烟测试场景
4.0 场景数据依赖
S1 系统初始化(数据基础)
├── S2 透析日流程(依赖 S1 创建的科室、护士、排班)
├── S3 患者管理(依赖 S1 创建的医生、患者数据)
├── S4 小程序核心(依赖 S1 创建的患者 + 微信测试号绑定)
├── S5 运营配置(依赖 S1 创建的告警规则基础数据)
└── S6 关怀闭环(依赖 S1 创建的患者/医生数据)
硬前置: S1 必须先通过,否则 S2-S6 无法执行。如果 S1 FAIL,优先修复 S1 再继续。
4.1 场景定义
S1: 系统初始化(管理员)
| # | 步骤 | 操作路径 | 端 | 期望结果 |
|---|---|---|---|---|
| 1 | 管理员登录 | / 登录页 |
Web | 进入工作台首页,仪表盘渲染正常 |
| 2 | 创建科室 | 侧边栏 > 组织管理 > /organizations > 新增科室 |
Web | 科室列表显示血透室、体检科 |
| 3 | 添加医生 ×2 + 护士 ×2 | 侧边栏 > 用户管理 > /users > 新增用户 |
Web | 用户列表显示新创建的用户 |
| 4 | 分配角色和权限 | 侧边栏 > 角色管理 > /roles > 编辑角色 > 绑定用户 |
Web | 角色绑定生效,权限控制正确 |
| 5 | 创建下周排班 | 侧边栏 > 健康管理 > 排班管理 > /health/schedules > 新增排班 |
Web | 排班日历视图显示排班数据 |
| 6 | 查看统计看板 | 侧边栏 > 健康管理 > 统计报表 > /health/statistics |
Web | 图表渲染正常,数据不为空 |
验证重点: 系统初始化后所有基础数据就绪,后续场景可使用这些数据。
S2: 透析日流程(护士)
| # | 步骤 | 操作路径 | 端 | 期望结果 |
|---|---|---|---|---|
| 1 | 护士登录 | / 登录页 |
Web | 进入工作台,看到今日待办 |
| 2 | 查看今日排班 | 侧边栏 > 健康管理 > 排班管理 > /health/schedules |
Web | 显示今日透析排班列表 |
| 3 | 患者签到 | 侧边栏 > 健康管理 > 预约管理 > /health/appointments > 签到按钮 |
Web | 患者状态变为"已签到" |
| 4 | 采集体征 | 患者详情页 > /health/patients/:id > 体征 Tab > 录入按钮 |
Web | 体征数据保存成功(血压/心率/体温) |
| 5 | 记录透析会话 | 侧边栏 > 健康管理 > 透析管理 > /health/dialysis > 新建透析记录 > 状态按钮切换(待开始 → 进行中 → 已完成) |
Web | 透析记录完整,状态流转正确 |
| 6 | 触发异常 | 患者详情页体征录入 > 输入超标血压值(如 200/120) | Web | 告警自动生成,告警列表可见 |
| 7 | 确认告警 | 侧边栏 > 健康管理 > 告警列表 > /health/alerts > 处理按钮 |
Web | 告警状态变为"已处理" |
| 8 | 填写交接班记录 | 侧边栏 > 健康管理 > 班次管理 > /health/shifts/:id > 交接记录 Tab > 新增 |
Web | 交接班记录保存成功 |
验证重点: 血透中心最核心的日常工作流,一条龙走通。
S3: 患者管理与决策(医生)
| # | 步骤 | 操作路径 | 端 | 期望结果 |
|---|---|---|---|---|
| 1 | 医生登录 | / 登录页 |
Web | 进入医生工作台/仪表盘 |
| 2 | 查看患者列表 | 侧边栏 > 健康管理 > 患者管理 > /health/patients |
Web | 列表显示患者,可搜索/筛选 |
| 3 | 查看患者详情 | 患者列表 > 点击某患者 > /health/patients/:id |
Web | 详情页显示基本信息、体征、诊断、用药 |
| 4 | 查看体征趋势图 | 患者详情页 > 趋势 Tab | Web | 趋势图表渲染正确,数据连续 |
| 5 | 审阅透析处方 | 小程序医生端 > 透析 > 处方列表 > pages/doctor/prescription/detail |
MP | 处方详情显示正常 |
| 6 | 创建随访计划 | 侧边栏 > 健康管理 > 随访任务 > /health/follow-up-tasks > 新建 |
Web | 随访任务生成成功 |
| 7 | 查看 AI 分析报告 | 侧边栏 > 健康管理 > AI 分析 > /health/ai-analysis |
Web | AI 分析结果正常展示 |
| 8 | 处理行动收件箱 | 侧边栏 > 健康管理 > 行动收件箱 > /health/action-inbox > 完成按钮 |
Web | 任务可标记完成 |
验证重点: 医生日常查看数据 + 做决策的完整流程。
S4: 小程序核心体验(患者)
| # | 步骤 | 操作路径 | 端 | 期望结果 |
|---|---|---|---|---|
| 1 | 微信登录 → 手机绑定 | 首页 pages/index/index > 登录按钮 > pages/login/index |
MP | 登录成功,进入健康首页(ERP__WECHAT__DEV_MODE=true 跳过 jscode2session) |
| 2 | 查看健康首页 | 底部 Tab > 健康 > pages/health/index |
MP | 显示今日体征/待办/通知 |
| 3 | 体征数据录入 | 健康首页 > 体征录入 > pages/pkg-health/input/index |
MP | 数据提交成功(含晚间血压验证) |
| 4 | 查看体征趋势 | 健康首页 > 趋势查看 > pages/pkg-health/trend/index |
MP | 趋势图表渲染正常 |
| 5 | 查看预约列表 | 底部 Tab > 预约 > pages/appointment/index |
MP | 显示预约记录 |
| 6 | 查看告警通知 | 健康首页 > 告警 > pages/pkg-health/alerts/index |
MP | 告警列表正常显示 |
| 7 | 查看用药记录 | 个人中心 > 用药记录 > pages/pkg-profile/medication/index |
MP | 用药列表显示正常 |
| 8 | 查看诊断记录 | 个人中心 > 诊断记录 > pages/pkg-profile/diagnoses/index |
MP | 诊断记录显示正常 |
注意: 透析管理(HIGH-1)和知情同意(HIGH-2)的小程序端尚未实现,本场景跳过这两项。
验证重点: 患者端小程序的基础可用性。
S5: 运营配置(管理员)
| # | 步骤 | 操作路径 | 端 | 期望结果 |
|---|---|---|---|---|
| 1 | 配置告警规则 | 侧边栏 > 健康管理 > 告警规则 > /health/alert-rules > 新建规则 |
Web | 规则保存成功,列表显示 |
| 2 | 配置危急值阈值 | 侧边栏 > 健康管理 > 危急值阈值 > /health/critical-value-thresholds > 新建 |
Web | 阈值保存成功 |
| 3 | 注册 BLE 网关 | 侧边栏 > 健康管理 > BLE 网关 > /health/ble-gateways > 新建网关 |
Web | 网关显示为在线/离线状态 |
| 4 | 创建知情同意模板 | 侧边栏 > 健康管理 > 知情同意 > /health/consents > 新建 |
Web | 模板保存成功 |
| 5 | 创建随访模板 | 侧边栏 > 健康管理 > 随访模板 > /health/follow-up-templates > 新建 |
Web | 模板保存成功 |
| 6 | 检查侧边栏菜单完整性 | 以管理员登录,逐一点击侧边栏所有健康管理子菜单 | Web | 所有健康模块功能在菜单中可见(参见第 7 节缺口清单) |
验证重点: 管理后台的配置能力是否完整,菜单可见性是否正确。
S6: 关怀闭环(医生)
| # | 步骤 | 操作路径 | 端 | 期望结果 |
|---|---|---|---|---|
| 1 | 创建护理计划 | 侧边栏 > 健康管理 > 护理计划 > /health/care-plans > 新建 > 添加条目 |
Web | 计划保存成功,条目可见 |
| 2 | 查看行动收件箱 | 侧边栏 > 健康管理 > 行动收件箱 > /health/action-inbox |
Web | 显示待处理行动(与 S3 步骤 8 共享页面,重点关注护理计划相关行动) |
| 3 | 回复咨询消息 | 侧边栏 > 健康管理 > 咨询管理 > /health/consultations/:id > 发送消息 |
Web | 消息发送成功 |
| 4 | 审批 AI 建议 | 行动收件箱 > AI 建议 Tab > 审批按钮 | Web | 建议状态变更 |
| 5 | 记录结果测量 | 护理计划详情 > /health/care-plans/:id > 结果测量 Tab > 新增 |
Web | 测量数据保存成功 |
| 6 | 查看内容管理文章 | 侧边栏 > 健康管理 > 文章管理 > /health/articles |
Web | 文章列表和详情正常显示 |
S3 与 S6 的边界: S3 侧重"数据查看与决策"(查看趋势、开处方、AI 报告),S6 侧重"计划执行与闭环"(护理计划、咨询回复、结果测量)。行动收件箱在两个场景中都会用到但关注点不同。
验证重点: 护理计划 → 执行 → 测量结果的关怀闭环。
4.2 场景优先级
| 优先级 | 场景 | 原因 |
|---|---|---|
| P0 | S1 系统初始化 | 所有后续场景的数据基础 |
| P0 | S2 透析日流程 | 血透中心最核心的业务流程 |
| P0 | S3 患者管理 | 医生日常工作的核心路径 |
| P0 | S4 小程序核心 | 患者端唯一入口,必须可用 |
| P1 | S5 运营配置 | 管理能力,首次演示可以后补 |
| P1 | S6 关怀闭环 | 旗舰功能但复杂度高,可降级 |
5. 判定标准
5.1 步骤级判定
| 状态 | 含义 | 处理方式 |
|---|---|---|
| PASS | 步骤完全通过 | 记录,无需修复 |
| PARTIAL | 步骤可用但有瑕疵 | 记录问题,不阻塞后续 |
| FAIL | 步骤无法完成 | 记录并立即标记为 BUG |
5.2 场景级判定
| 状态 | 含义 |
|---|---|
| PASS | 全部步骤 PASS |
| PASS_WITH_ISSUES | 全部关键步骤 PASS,有 PARTIAL 项 |
| FAIL | 任一关键步骤 FAIL |
5.3 BUG 优先级
| 级别 | 条件 | 修复时限 |
|---|---|---|
| BLOCKER | P0 场景的关键步骤 FAIL | 当天修复 |
| CRITICAL | P0 场景非关键步骤 FAIL,或数据不一致 | 48h 内修复 |
| HIGH | P1 场景 FAIL | 第二周修复 |
| MEDIUM | PARTIAL 问题(UI 错位、文案错误等) | 记录,按优先级排期 |
| LOW | 建议性改进 | 积压 |
6. 执行计划
6.1 第一周:冒烟测试
| 天 | 日期 | 任务 | 交付物 |
|---|---|---|---|
| Day 0 | W1-Mon | 前置环境检查 + 种子数据准备 | 环境就绪确认 |
| Day 1 | W1-Tue | S1 系统初始化 + 菜单可见性排查 | S1 验证报告 + 菜单缺口清单 |
| Day 2 | W1-Wed | S2 透析日流程 | S2 验证报告 |
| Day 3 | W1-Thu | S3 患者管理与决策 | S3 验证报告 |
| Day 4 | W1-Fri | S4 小程序核心体验 | S4 验证报告 |
| Day 5 | W1-Sat/Sun | S5 运营配置 + S6 关怀闭环 + 汇总 | 全场景验证报告 + BUG 清单 |
6.2 第二周:修复 + 固化
| 天 | 任务 | 交付物 |
|---|---|---|
| Day 6-7 | BLOCKER + CRITICAL BUG 修复 | 修复提交 |
| Day 8 | P0 场景回归验证(重跑修复步骤 + 前后各一个相邻步骤) | 回归报告 |
| Day 9-10 | S2 透析日流程 Playwright 自动化 + P1 场景验证 + 质量报告 | 测试脚本 + 完整质量报告 |
7. 菜单可见性排查
根据代码分析,以下功能的路由已注册但可能不在侧边栏菜单中显示(需要通过数据库迁移或手动配置添加菜单项):
- 透析管理
- 护理计划
- 班次管理
- 用药记录
- BLE 网关
- 危急值阈值
- 诊断记录
- 家庭健康代理
- 知情同意
- 随访模板
- 行动收件箱
- 内容管理(文章/分类/标签)
- 实时监控
- OAuth 合作方
排查方式: 以管理员登录后查看侧边栏,逐一确认以上功能是否有菜单入口。缺失的需创建菜单迁移文件。
8. 第二周 Playwright 自动化范围
优先固化最核心的 S2 透析日流程为自动化测试。每个场景预计 4-8 小时(含调试),因此两周内只覆盖 S2:
- S2 透析日流程(Day 9-10) — 登录 → 排班查看 → 体征录入 → 透析记录 → 告警处理
S1 和 S3 的自动化留到后续迭代。现有 Playwright 基础设施(apps/web/e2e/)已有 page object 和 fixture 模式可复用。
自动化质量标准:
- 每个关键步骤至少一个断言
- flaky 测试最大重试 2 次
- 测试数据通过 API setup 生成,不依赖手动准备
小程序端(S4)暂不纳入自动化(微信开发者工具的自动化测试生态不成熟),持续手动验证。
9. 交付物清单
| 交付物 | 产出时间 | 说明 |
|---|---|---|
| 环境就绪确认 | Day 0 | 所有前置检查通过 |
| 可重复执行的种子数据脚本 | Day 0 | SQL 或 seed 脚本,可一键初始化测试数据 |
| 6 份场景验证报告 | Day 1-5 | 每条链路的步骤级结果 |
| 菜单缺口清单 | Day 1 | 需要补充的侧边栏菜单项 |
| BUG 清单 | Day 5 | 按优先级排列的完整问题列表 |
| 修复提交记录 | Day 6-8 | 所有 BLOCKER/CRITICAL 的修复 |
| Playwright 测试脚本(S2) | Day 9-10 | 透析日流程自动化测试 |
| 质量报告 | Day 10 | 两周验证总结 + 发布建议 |
质量报告模板
质量报告应包含以下内容:
- 场景判定汇总 — 6 个场景的最终判定(PASS / PASS_WITH_ISSUES / FAIL)
- BUG 清单及修复状态 — 所有发现的问题、当前状态(已修复/待修复/降级)
- 发布风险评估 — GO / CONDITIONAL GO / NO-GO 判定及理由
- 遗留问题清单 — 未修复问题的清单、影响范围和后续计划
- 下一步建议 — 第二阶段验证或正式发布的前置条件
10. 风险与应对
| 风险 | 概率 | 影响 | 应对 |
|---|---|---|---|
| 种子数据不完整,S1 无法执行 | 中 | 高 | Day 0 优先准备可重复执行的种子数据脚本 |
| BLOCKER 数量过多,修复超过 2 天 | 中 | 高 | 降级 P1 场景,集中修复 P0 |
| 小程序登录流程不通 | 中 | 高 | 提前准备测试号和 mock 环境(ERP__WECHAT__DEV_MODE=true) |
| 微信开发者工具版本兼容性导致登录失败 | 中 | 中 | 使用稳定版开发者工具,避免最新 beta 版 |
| 菜单缺失导致功能"找不到" | 高 | 低 | Day 1 集中排查并补充菜单迁移 |
| 两周时间不够完成所有修复 | 中 | 中 | 只交付 P0 通过的版本给客户 |