Files
xh-medical-sign-web/clinical-web/docs/reports-backend-requirements.md
T

5.3 KiB
Raw Blame History

报表分析后端联调与验收说明

事实基准:用户于 2026-09-02 提供的 default_OpenAPI.json,OpenAPI 3.1.0,MEDISIGN 患者电子签 API v1。

本文记录当前契约的前端接入要求和联调检查项,不再把已经存在的报表接口标记为“建议新增”。

1. 当前契约与页面使用

接口 页面用途 状态
GET /api/v1/reports/signing/options 权限范围内的院区、科室、模板分类字典 前端已接入
GET /api/v1/reports/signing/overview 指标、签署趋势、科室分布 前端已接入
GET /api/v1/reports/signing/tasks 脱敏明细和服务端分页 前端已接入
POST /api/v1/reports/signing/export-jobs 创建 CSV/XLSX 异步导出任务 前端已接入,页面默认 CSV
GET /api/v1/reports/signing/export-jobs/{jobId} 查询导出状态 前端已接入并轮询
GET /api/v1/reports/signing/export-jobs/{jobId}/download 下载已完成文件 前端已接入

页面真实模式通过统一 request 单例发送 /v1/...,由 /api base URL 形成完整路径,并自动携带 X-Token。Mock 模式不调用以上接口,继续使用报表页面自己的演示数据。

2. 后端必须保持的统计口径

  • 时间区间为左闭右开 [from,to),页面传 timezone=Asia/Shanghai;
  • overview 的 createdFrom/To 只约束发起统计,signedFrom/To 约束签署完成和趋势,expiredFrom/To 约束超时统计;
  • 页面明细和导出只传 createdFrom/To,以便待签署任务仍能出现在明细中;
  • trend 必须按 signedAt 的业务时区自然日聚合,并包含零值日期;
  • departments 必须按任务就诊科室返回,不能改用模板归属科室;
  • onTimeRate 是 0-1 小数;无可靠样本返回 null;
  • averageSignDurationSeconds 必须基于可靠的 signStartedAt/signedAt 或等价审计字段;无样本返回 null;
  • CREATED、WAITING_SIGN、SIGNED、EXPIRED、VOIDED、GENERATING、FAILED 均需保持可区分。

3. 明细分页验收

tasks 请求使用 page、size、timeDimension=CREATED、sort=createdAt、direction=desc。后端应保证:

  • page 从 1 开始,size 在 1-200 范围内;
  • records、page、size、total、pages 在权限过滤后保持一致;
  • 默认或指定排序稳定,不能在翻页时重复或遗漏;
  • taskId、templateVersionId、campusId 等标识与返回展示字段属于同一条任务快照;
  • patientNameMasked、patientDisplayId、patientMobileMasked 只能是报表级脱敏字段;
  • templateName、templateCategory、campusName、departmentName 和 deadlineAt/signedAt/signDurationSeconds 能够覆盖历史任务,不能要求前端再查当前可见模板列表补齐。

4. 导出任务验收

创建导出任务时页面传当前筛选条件和 format=CSV,不传 page/size,因此结果应覆盖全部匹配记录,而不是当前明细页。后端需要:

  • 创建、查询、下载时均重新检查操作人有效性、报表权限和数据范围;
  • 支持 PENDING、RUNNING、SUCCEEDED、FAILED、EXPIRED;
  • 文件生成完成后返回有效期和 resultCount;文件过期后拒绝下载;
  • 下载响应返回文件流,不暴露 storage key;
  • 导出列只包含当前角色允许查看的脱敏字段;
  • 记录操作者、筛选条件摘要、结果数量、生成时间、过期时间和 traceId,但不记录身份证号、完整手机号、完整病历或签名原图。

5. 联调阻塞项与前端边界

代码已经按当前 OpenAPI 完成接入,以下事项需要实际后端环境确认:

  • 六个报表路径已部署且当前角色有查询/导出权限;
  • 统一响应的成功 code 为 0 或 "0",业务数据放在 data;
  • 对象 query 参数按 OpenAPI 默认 form/explode 方式接收为平铺字段;
  • 401、403、400、404、429 和 500 的 HTTP/业务错误能够被网关正确转发;
  • download 接口的响应类型为文件流,且允许当前前端通过同源 /api 访问。

当前页面没有新增报表详情接口:明细“查看”继续跳转签署工作台,由工作台已有任务详情和签署文件能力处理。页面筛选栏只暴露 CSV,若需要 XLSX 选择器,仅需增加前端控件并复用同一导出接口。

6. 建议联调用例

  1. 全院近 14 天:校验 overview、tasks 的请求参数和三类时间统计。
  2. 选择一个院区/科室/模板分类/签署方式并输入关键词:校验 options 联动和所有接口参数一致。
  3. 构造跨创建日完成签署的任务:确认趋势落在 signedAt 日期,而不是 createdAt 日期。
  4. 翻页、改变每页条数:确认 total/pages、排序和记录不重复。
  5. 创建导出任务并等待完成:确认状态轮询、文件下载、resultCount 和过期下载错误。
  6. 用无权限角色访问:确认查询和导出均得到 403,前端不显示越权数据。