docs: 审计报告(8 份) + 讨论记录(4 份)

审计报告: 基线快照/功能清单/后端完整性/事件系统/参数配置/
差距模式/错误处理/测试覆盖/审计总结报告
讨论记录: 设备管线/端到端测试/三端审计/工作台重构
This commit is contained in:
iven
2026-05-03 19:32:15 +08:00
parent 78c783d332
commit d712ad78c3
13 changed files with 2683 additions and 0 deletions

View File

@@ -0,0 +1,119 @@
# E2E 跨平台业务联调测试报告
> 日期: 2026-04-30 | 参与者: Claude Code 自动化测试
## 背景
对 HMS 健康管理平台进行端到端业务联调,验证 Web 端(管理员/医生/护士)和小程序端(患者)四个角色的核心业务流程和数据一致性。
## 测试环境
| 组件 | 地址 | 状态 |
|------|------|------|
| 后端 API | `http://localhost:3000/api/v1` | 运行中 |
| Web 前端 | `http://localhost:5174` | 运行中 |
| PostgreSQL | `localhost:5432/erp` | 运行中 |
| Redis | 云端 | 运行中 |
### 测试账号
| 角色 | 用户名 | 密码 |
|------|--------|------|
| 管理员 | admin | Admin@2026 |
| 医生 | doctor1 | Doctor@2026 |
| 护士 | nurse1 | Nurse@2026 |
### 测试数据
| 数据 | ID |
|------|-----|
| 联调测试患者 | `019ddf17-6c67-78b0-b3cc-c41512b76b12` |
| 预约 (2026-05-05) | `019ddf1c-7dd6-7ee3-b012-ef1fd703ef15` |
| 体征记录 1 (空值) | `019ddf2c-91ee-76e0-8fdf-c1a78ee45a5b` |
| 体征记录 2 (血压135/88) | `019ddf2c-cdb3-7f00-9547-21e364720845` |
## 测试结果总览
| 测试项 | 结果 | 备注 |
|--------|------|------|
| Admin 登录 + 仪表盘 | ✅ 通过 | 显示统计概览 |
| Admin 创建患者 | ✅ 通过 | "联调测试患者" 创建成功 |
| Admin 创建预约 | ✅ 通过 | 需先创建排班CAS 匹配 start_time |
| Doctor 登录 + 仪表盘 | ✅ 通过 | 显示医生专属视图 |
| Doctor 查看患者列表 | ✅ 通过 | 可看到 Admin 创建的患者 |
| Nurse 登录 + 仪表盘 | ✅ 通过 | 显示"随访监控台" |
| Nurse 查看告警 | ✅ 通过 | 权限正确限制 |
| 跨角色数据一致性 | ✅ 通过 | 三角色查询同一患者数据一致 |
| 小程序 API - 患者详情 | ✅ 通过 | |
| 小程序 API - 预约列表 | ✅ 通过 | 返回 1 条预约 |
| 小程序 API - 体征数据 | ✅ 通过 | 创建 + 查询链路正常 |
| 小程序 API - 文章列表 | ✅ 通过 | 4 篇已发布文章 |
| 小程序 API - 随访任务 | ✅ 通过 | 0 条(预期,未创建) |
| 小程序 API - 告警列表 | ✅ 通过 | 0 条(预期,未触发) |
| 小程序 API - 积分账户 | ✅ 通过 | 路径 `points/account`(单数) |
## 发现的问题
### 已确认非问题(之前误报)
1. **预约查询返回 0 条** — 实际是 token 中 tenant_id 与数据不一致导致。使用正确角色的 token 查询正常返回数据。
2. **文章列表返回 0 条** — 同上token 问题。Admin/Doctor 角色查询正常返回 5 条4 published + 1 draft
### 已知设计限制
1. **预约 CAS 精确匹配 start_time** — 预约只能预约排班的精确时段,不支持排班时段内的子时间段。例如排班 08:00-12:00预约 start_time 必须是 08:00不能是 09:00。
2. **Nurse 角色文章 403** — 护士无 `health.articles.list` 权限,返回 403 是正确行为。
3. **体征创建字段映射**`systolic`/`diastolic` 请求参数不映射到 `systolic_bp_morning`/`diastolic_bp_morning`,需要使用精确字段名。
### 路径注意事项
| 资源 | 正确 API 路径 | 易错路径 |
|------|---------------|----------|
| 体征数据 | `/health/patients/{id}/vital-signs` | `/health/vital-signs` (404) |
| 设备读数 | `/health/patients/{id}/device-readings` | `/health/device-readings` (404) |
| 积分账户 | `/health/points/account` (单数) | `/health/points/accounts` (404) |
| 积分交易 | `/health/points/transactions` | - |
## 跨角色数据一致性矩阵
| API 端点 | Admin | Doctor | Nurse |
|----------|-------|--------|-------|
| 患者预约 (total=1) | 1 ✅ | 1 ✅ | - |
| 患者体征 (total=2) | 2 ✅ | 2 ✅ | 2 ✅ |
| 已发布文章 (total=4) | 4 ✅ | 4 ✅ | 403 ✅ (无权限) |
| 患者详情 | ✅ | ✅ | ✅ |
**结论:同租户内跨角色数据完全一致,权限隔离正确。**
## 小程序端测试详情
通过 API 层模拟小程序患者视角的完整业务流:
1. **查看个人信息**`GET /health/patients/{id}`
2. **查看我的预约**`GET /health/appointments?patient_id={id}`
3. **查看体征数据**`GET /health/patients/{id}/vital-signs`
4. **查看健康文章**`GET /health/articles?status=published`
5. **查看随访任务**`GET /health/follow-up-tasks?patient_id={id}` ✅ (0 条)
6. **查看告警**`GET /health/alerts` ✅ (0 条)
7. **查看积分**`GET /health/points/account?patient_id={id}`
### 未覆盖项
- MCP 连接微信开发者工具进行 UI 级测试DevTools 未连接)
- 小程序微信登录流程(需要 dev mode 环境)
- 体征数据趋势图 API`/health/vital-signs/trend` 返回 404可能未注册路由
## 结论
**HMS 平台核心业务链路功能正常:**
- Web 端三角色admin/doctor/nurse登录、权限控制、数据访问全部通过
- 跨角色数据一致性验证通过(同租户内数据共享正确)
- 小程序端患者视角 API 全部可达且返回正确
- 权限隔离按设计工作nurse 无法访问文章管理等超出职责的功能)
- 预约 CAS 并发控制工作正常
**建议后续改进:**
1. 体征 API 添加字段别名映射(`systolic``systolic_bp_morning`)降低调用门槛
2. 体征趋势 API 路由确认(`/health/vital-signs/trend` 返回 404
3. 预约 CAS 支持更灵活的时段匹配