Files
hms/docs/qa/role-test-results/test_results.json
iven d623f8b2ff fix: V1 测试版本端到端验证修复 — 6 CRITICAL + 3 HIGH 问题全量修复
修复项:
- fix(db): 迁移 149 — 修复 Admin 角色权限绑定被迁移链破坏 (FE-C1)
- fix(health): 4 个 handler 添加空名称验证 — Doctor/Article/AlertRule/Tag (API-C1~C4)
- fix(health): Stats 仪表盘 new_this_week 查询修复 — SeaORM date_trunc bug (FE-C2)
- fix(server): 添加安全响应头 — X-Frame-Options/CSP/XSS-Protection/Referrer-Policy (SEC-H1)
- fix(mp): 预约创建契约修复 — notes/reason 字段映射 + 移除 schedule_id (MP-H1)
- fix(mp): 咨询会话 subject/last_message 字段改为可选 (MP-H3)
- fix(ai): AiConfig Default derive 替代手写 impl (clippy)

测试报告:
- 8 维度端到端测试全部完成 (后端 87 用例 / 前端 30 页面 / 小程序 80+ API / 安全 20 项 / 性能 20 端点)
- 多角色 7 角色 49 检查 100% 通过
- 综合测试报告 + 专家评估报告
2026-05-18 10:24:40 +08:00

1256 lines
26 KiB
JSON

{
"timestamp": "2026-05-18T04:15:39.065081",
"total": 156,
"passed": 129,
"failed": 27,
"results": [
{
"role": "R01",
"chain": "A",
"test_id": "1",
"description": "Create patient",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "A",
"test_id": "2",
"description": "Patient detail",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "A",
"test_id": "3",
"description": "Create tag",
"passed": false,
"detail": "status=500, msg=内部错误"
},
{
"role": "R01",
"chain": "A",
"test_id": "3b",
"description": "Assign tag to patient",
"passed": false,
"detail": "status=400, msg=Failed to parse the request body as JSON: EOF while parsing a value at line 1 column 0"
},
{
"role": "R01",
"chain": "A",
"test_id": "4",
"description": "Devices list",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "A",
"test_id": "5",
"description": "Consents list (via patient)",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "A",
"test_id": "6",
"description": "Search patient",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "B",
"test_id": "1",
"description": "Create follow-up task",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "B",
"test_id": "2",
"description": "Follow-up list (pending)",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "B",
"test_id": "3",
"description": "Follow-up templates",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "B",
"test_id": "4",
"description": "Action inbox",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "C",
"test_id": "1",
"description": "Consultation sessions list",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "C",
"test_id": "2",
"description": "Doctor dashboard",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "D",
"test_id": "1",
"description": "Critical value thresholds",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "D",
"test_id": "2",
"description": "Alerts list",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "D",
"test_id": "3",
"description": "Alert rules",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "D",
"test_id": "4",
"description": "Critical alerts",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "D",
"test_id": "5",
"description": "BLE gateways",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "E",
"test_id": "1",
"description": "AI prompts",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "E",
"test_id": "2",
"description": "AI suggestions",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "E",
"test_id": "3",
"description": "AI chat sessions",
"passed": false,
"detail": "status=404, msg="
},
{
"role": "R01",
"chain": "F",
"test_id": "1",
"description": "Create article",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "F",
"test_id": "2",
"description": "Edit article",
"passed": false,
"detail": "status=422, msg=Failed to deserialize the JSON body into the target type: missing field `version` at line 1 column 73"
},
{
"role": "R01",
"chain": "F",
"test_id": "3a",
"description": "Submit article",
"passed": false,
"detail": "status=400, msg=Failed to parse the request body as JSON: EOF while parsing a value at line 1 column 0"
},
{
"role": "R01",
"chain": "F",
"test_id": "3b",
"description": "Approve article",
"passed": false,
"detail": "status=400, msg=Failed to parse the request body as JSON: EOF while parsing a value at line 1 column 0"
},
{
"role": "R01",
"chain": "F",
"test_id": "4",
"description": "Unpublish article",
"passed": false,
"detail": "status=400, msg=Failed to parse the request body as JSON: EOF while parsing a value at line 1 column 0"
},
{
"role": "R01",
"chain": "G",
"test_id": "1",
"description": "Points rules",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "G",
"test_id": "2",
"description": "Points products",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "G",
"test_id": "3",
"description": "Points orders",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "H",
"test_id": "1",
"description": "Create offline event",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "H",
"test_id": "2",
"description": "List offline events",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "I",
"test_id": "1",
"description": "Users list",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "I",
"test_id": "2",
"description": "Roles list",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "I",
"test_id": "3",
"description": "Organizations",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "I",
"test_id": "4",
"description": "Statistics dashboard",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "I",
"test_id": "5",
"description": "Workflow definitions",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "I",
"test_id": "6",
"description": "Messages",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "I",
"test_id": "7",
"description": "Settings",
"passed": false,
"detail": "status=404, msg=资源未找到: 设置 'general' 在 'tenant' 作用域下不存在"
},
{
"role": "R01",
"chain": "I",
"test_id": "8",
"description": "Plugins",
"passed": true,
"detail": ""
},
{
"role": "R01",
"chain": "I",
"test_id": "9",
"description": "OAuth clients",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "A",
"test_id": "1",
"description": "Patient list",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "A",
"test_id": "2",
"description": "Patient detail",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "A",
"test_id": "3",
"description": "Create patient",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "A",
"test_id": "4",
"description": "Doctor list",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "A",
"test_id": "5",
"description": "Patient diagnoses",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "A",
"test_id": "6",
"description": "Consents list (via patient)",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "B",
"test_id": "1",
"description": "Create follow-up task",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "B",
"test_id": "2",
"description": "Follow-up list",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "B",
"test_id": "3",
"description": "Follow-up templates",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "B",
"test_id": "4",
"description": "Action inbox",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "C",
"test_id": "1",
"description": "Consultation sessions list",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "C",
"test_id": "2",
"description": "Consultation messages",
"passed": false,
"detail": "status=405, msg="
},
{
"role": "R02",
"chain": "D",
"test_id": "1",
"description": "Alerts list",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "D",
"test_id": "2",
"description": "Alert rules",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "D",
"test_id": "3",
"description": "Critical alerts",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "E",
"test_id": "1",
"description": "AI prompts",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "E",
"test_id": "2",
"description": "AI suggestions",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "E",
"test_id": "3",
"description": "Messages",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "P",
"test_id": "1",
"description": "No user management",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "P",
"test_id": "2",
"description": "No role management",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "P",
"test_id": "3",
"description": "No points rules",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "P",
"test_id": "4",
"description": "No article management",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "P",
"test_id": "5",
"description": "No system settings",
"passed": false,
"detail": "expected=403, got=404, msg="
},
{
"role": "R02",
"chain": "P",
"test_id": "6",
"description": "No BLE gateways",
"passed": true,
"detail": ""
},
{
"role": "R02",
"chain": "P",
"test_id": "7",
"description": "No tag management",
"passed": false,
"detail": "expected=403, got=200, msg=None"
},
{
"role": "R03",
"chain": "A",
"test_id": "1",
"description": "Patient list",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "A",
"test_id": "2",
"description": "Patient detail",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "A",
"test_id": "3",
"description": "Create patient",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "A",
"test_id": "4",
"description": "Daily monitoring",
"passed": false,
"detail": "status=405, msg="
},
{
"role": "R03",
"chain": "B",
"test_id": "1",
"description": "Follow-up tasks list",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "B",
"test_id": "2",
"description": "Create follow-up task",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "B",
"test_id": "3",
"description": "Update follow-up task",
"passed": false,
"detail": "status=422, msg=Failed to deserialize the JSON body into the target type: missing field `version` at line 1 column 25"
},
{
"role": "R03",
"chain": "B",
"test_id": "4",
"description": "Follow-up records",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "C",
"test_id": "1",
"description": "Consultation sessions (read)",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "C",
"test_id": "2",
"description": "Consultation messages (read)",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "D",
"test_id": "1",
"description": "Alerts list",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "D",
"test_id": "2",
"description": "Alert detail (if any)",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "E",
"test_id": "1",
"description": "Consents list (via patient)",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "E",
"test_id": "2",
"description": "Create consent",
"passed": false,
"detail": "status=400, msg=验证失败: consent_type 必须为以下之一: data_processing, health_data_collection, research_use, third_party_share, genetic_testing, telemedicine"
},
{
"role": "R03",
"chain": "F",
"test_id": "1",
"description": "Action inbox list",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "F",
"test_id": "2",
"description": "Action inbox stats",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "8.1",
"test_id": "",
"description": "Messages",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "P",
"test_id": "1",
"description": "No doctor management",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "P",
"test_id": "2",
"description": "No tag management",
"passed": false,
"detail": "expected=403, got=200, msg=None"
},
{
"role": "R03",
"chain": "P",
"test_id": "3",
"description": "No points rules",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "P",
"test_id": "4",
"description": "No article management",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "P",
"test_id": "5",
"description": "No AI analysis",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "P",
"test_id": "6",
"description": "No follow-up templates",
"passed": true,
"detail": ""
},
{
"role": "R03",
"chain": "P",
"test_id": "7",
"description": "No user management",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "A",
"test_id": "1",
"description": "Create tag",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "A",
"test_id": "2",
"description": "Patient list",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "A",
"test_id": "3",
"description": "Create patient",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "A",
"test_id": "4",
"description": "Doctor list (read)",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "B",
"test_id": "1",
"description": "Create follow-up task",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "B",
"test_id": "2",
"description": "Follow-up list",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "B",
"test_id": "3",
"description": "Follow-up templates",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "B",
"test_id": "4",
"description": "Action inbox",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "B",
"test_id": "5",
"description": "Team action inbox",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "C",
"test_id": "1",
"description": "Consultation sessions list",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "D",
"test_id": "1",
"description": "Alerts list",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "D",
"test_id": "2",
"description": "Alert rules",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "D",
"test_id": "3",
"description": "Critical value thresholds",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "D",
"test_id": "4",
"description": "Devices (read)",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "D",
"test_id": "5",
"description": "Daily monitoring",
"passed": false,
"detail": "status=405, msg="
},
{
"role": "R04",
"chain": "E",
"test_id": "1",
"description": "AI prompts (read)",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "E",
"test_id": "2",
"description": "AI suggestions",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "F",
"test_id": "1",
"description": "Consents list (via patient)",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "F",
"test_id": "2",
"description": "Patient diagnoses",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "8.1",
"test_id": "",
"description": "Messages",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "9.1",
"test_id": "",
"description": "Workflow definitions",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "P",
"test_id": "1",
"description": "No user management",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "P",
"test_id": "2",
"description": "No points management",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "P",
"test_id": "3",
"description": "No article management",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "P",
"test_id": "4",
"description": "No system settings",
"passed": false,
"detail": "expected=403, got=404, msg="
},
{
"role": "R04",
"chain": "P",
"test_id": "5",
"description": "No plugin management",
"passed": true,
"detail": ""
},
{
"role": "R04",
"chain": "P",
"test_id": "6",
"description": "No BLE gateways",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "A",
"test_id": "1",
"description": "Create tag",
"passed": false,
"detail": "status=403, msg=禁止访问: 权限不足"
},
{
"role": "R05",
"chain": "A",
"test_id": "2",
"description": "Patient list (read)",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "A",
"test_id": "3",
"description": "Search patient",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "B",
"test_id": "1",
"description": "Create article",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "B",
"test_id": "2",
"description": "Edit article",
"passed": false,
"detail": "status=422, msg=Failed to deserialize the JSON body into the target type: missing field `version` at line 1 column 64"
},
{
"role": "R05",
"chain": "B",
"test_id": "3",
"description": "Submit article",
"passed": false,
"detail": "status=400, msg=Failed to parse the request body as JSON: EOF while parsing a value at line 1 column 0"
},
{
"role": "R05",
"chain": "B",
"test_id": "4",
"description": "Approve article",
"passed": false,
"detail": "status=400, msg=Failed to parse the request body as JSON: EOF while parsing a value at line 1 column 0"
},
{
"role": "R05",
"chain": "C",
"test_id": "1",
"description": "Points rules",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "C",
"test_id": "2",
"description": "Create points product",
"passed": false,
"detail": "status=422, msg=Failed to deserialize the JSON body into the target type: missing field `points_cost` at line 1 column 92"
},
{
"role": "R05",
"chain": "C",
"test_id": "3",
"description": "Points orders",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "D",
"test_id": "1",
"description": "Create event",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "D",
"test_id": "2",
"description": "List events",
"passed": false,
"detail": "status=404, msg=资源未找到: 当前用户未关联患者档案"
},
{
"role": "R05",
"chain": "E",
"test_id": "1",
"description": "Devices (read)",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "E",
"test_id": "2",
"description": "Alerts (read)",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "F",
"test_id": "1",
"description": "AI suggestions (read)",
"passed": false,
"detail": "status=403, msg=禁止访问: 权限不足"
},
{
"role": "R05",
"chain": "8.1",
"test_id": "",
"description": "Messages",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "P",
"test_id": "1",
"description": "No user management",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "P",
"test_id": "2",
"description": "No doctor management",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "P",
"test_id": "3",
"description": "No follow-up management",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "P",
"test_id": "4",
"description": "No consultation management",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "P",
"test_id": "5",
"description": "No diagnoses",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "P",
"test_id": "6",
"description": "No action inbox",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "P",
"test_id": "7",
"description": "No consents",
"passed": false,
"detail": "expected=403, got=405, msg="
},
{
"role": "R05",
"chain": "P",
"test_id": "8",
"description": "No AI analysis",
"passed": true,
"detail": ""
},
{
"role": "R05",
"chain": "P",
"test_id": "9",
"description": "No system settings",
"passed": false,
"detail": "expected=403, got=404, msg="
},
{
"role": "XROLE",
"chain": "X",
"test_id": "1",
"description": "Doctor sees admin-created patient",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "2",
"description": "Nurse sees admin-created patient",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "3",
"description": "HM sees admin-created patient",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "4",
"description": "Operator sees admin-created patient",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "5",
"description": "Nurse sees follow-up tasks (incl. doctor-created)",
"passed": true,
"detail": "total=7"
},
{
"role": "XROLE",
"chain": "X",
"test_id": "6",
"description": "Doctor can list tags",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "7",
"description": "HM can list tags",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "8",
"description": "Operator can list tags",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "9",
"description": "Doctor can view alerts",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "10",
"description": "Nurse can view alerts",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "11",
"description": "HM can view alerts",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "12",
"description": "Operator can manage articles",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "13",
"description": "Admin can see operator articles",
"passed": true,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "14",
"description": "Operator sees offline events",
"passed": false,
"detail": ""
},
{
"role": "XROLE",
"chain": "X",
"test_id": "15",
"description": "Admin sees offline events",
"passed": true,
"detail": ""
}
]
}