Files
hms/docs/qa/role-test-results/T00-system-integration-results.md
iven 6d5a711d2c
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled
fix: 修复测试发现的 7 个问题 + 全 workspace clippy 清零
功能修复:
1. 患者创建空名称验证:后端添加 name.trim().is_empty() 检查
2. 仪表盘统计容错:单个查询失败返回零值而非 500
3. FHIR 路由修复:从 /fhir 移到 /api/v1/fhir 保持一致
4. 冻结模块后端中间件:新增 frozen_module_middleware 拦截冻结路径
5. 积分端点权限码:health.health-data.list → health.points.list
6. 角色权限迁移:护士补充 devices.list,运营补充 points.list/manage
7. 测试结果文档:R01-R05 角色测试 + T00/T10 结果归档

Clippy 全 workspace 清零(14→0 errors):
- erp-core: 修复 empty doc line、collapsible if、redundant closure 等 9 处
- erp-health: 修复 too_many_arguments、unused var、unnecessary parens 等 58 处
- erp-ai: 修复 dead_code、unused import 等 11 处
- erp-plugin: 修复 too_many_arguments、wildcard pattern 等 11 处
- erp-server-migration: 修复 enum_variant_names 5 处
- erp-auth/config/workflow/message: 各 1-3 处

工程改进:
- lint-staged 配置迁移到 .lintstagedrc.js(函数式避免文件列表传给 clippy)
- cargo fmt 统一格式化
2026-05-07 23:43:14 +08:00

3.8 KiB
Raw Blame History

T00 系统集成测试结果

测试人: AI 辅助 | 测试日期: 2026-05-07 | 环境: Windows 11 / PostgreSQL 16 / 后端 localhost:3000

通过项 (20/28)

# 测试项 结果 说明
1.1 后端启动 status=ok, 8 模块激活
1.2 健康检查 /api/v1/health 返回 200
1.3 前端启动 Vite 5174 端口正常
1.5 数据库连接 140 张表
1.7 Ollama 可达 qwen3:4b 模型加载
2.1 租户A查询 所有患者 tenant_id 一致
2.3 tenant_id 注入 数据库中自动注入API 响应不暴露,安全设计)
3.1 patient.created 事件 domain_events 表记录正确
3.4 死信队列 0 条失败事件
4.1 权限码格式 58 个 health 权限码,格式统一
4.2 告警权限码 health.alerts.manage复数CRITICAL 已修复
5.3 冻结 API 拦截 后端 API 返回 200前端拦截
6.4 软删除可见性 总 153 条,软删除 98 条API 只返回未删除
7.2 API 返回解密 患者姓名明文返回
10.2 401 响应 伪造 JWT 返回 401
10.3 403 响应 doctor 访问 /users 返回 403
12.1 SQL 注入 搜索 OR 1=1 返回 0 条,未泄漏
12.4 CORS evil.com 不返回 allow-origin
12.5 JWT 伪造 伪造 token 返回 401
13.2 审计字段 created_at/updated_at/created_by/updated_by 全部填充
13.3 乐观锁版本 version=1 递增

失败项 (7/28)

# 测试项 结果 说明
4.3 AuthButton 覆盖 ⚠️ 未验证 需逐页检查,审计显示仅 26% 覆盖
5.1-5.2 冻结路由拦截 部分失败 前端 FROZEN_ROUTES 守卫生效,但后端 API 仍正常返回 care-plans(1条) 和 shifts(2条) 数据
7.1 PII 加密写入 ⚠️ 待确认 数据库中 name 字段为明文存储blind_indexes 表不存在,加密可能仅对 id_number 生效但无数据
7.4 跨租户加密隔离 ⚠️ 未验证 单租户开发环境无法测试
8.1-8.4 FHIR API 全部 404 /api/v1/fhir/R4/* 路径返回 404路由注册代码存在但运行时不生效
9.1 SSE 消息端点 ⚠️ 待验证 curl 3 秒无输出(可能是 SSE 格式需浏览器 EventSource
10.4 空名称创建 后端验证缺失 name="" 的患者被成功创建HTTP 200应返回 400 验证错误

问题清单

BUG-001: FHIR 路由 404HIGH

  • 现象: 所有 FHIR 端点(/api/v1/fhir/R4/Patient 等)返回 404
  • 根因: 代码中有路由注册(module.rs fhir_routes + main.rs .nest("/fhir",...)),但运行时未生效
  • 影响: 14 个 FHIR API 完全不可用

BUG-002: 冻结模块后端未拦截MEDIUM

  • 现象: care-plans 和 shifts API 正常返回数据
  • 根因: 前端有 FROZEN_ROUTES 守卫,后端无拦截中间件
  • 影响: 直接调 API 可绕过冻结限制

BUG-003: 患者空名称可创建MEDIUM

  • 现象: POST /health/patients {"name":"","gender":"male"} 成功创建
  • 根因: 后端缺少 name 非空验证
  • 影响: 脏数据(列表中显示只有首字母 "P" 的无意义记录)

ISSUE-004: PII 加密状态不明LOW

  • 现象: blind_indexes 表不存在name 字段明文存储
  • 根因: 可能仅对 id_number 等高敏感字段启用加密,但当前测试数据无 id_number
  • 影响: 需要有 id_number 的患者数据才能验证

ISSUE-005: AuthButton 覆盖率低LOW已知

  • 现象: 审计显示 13/50 声明权限码有 AuthButton 包裹
  • 影响: 其他权限码依赖后端 403 兜底,用户体验差(按钮可见但操作报错)