Files
xh-medical-sign-web/clinical-web/docs/reports-api.md
T
yelan fc22d22f85 feat(config): 按业务模块拆分 Mock 开关
用 VITE_MOCK_* 系列环境变量替换全局 VITE_USE_MOCK,各模块独立控制演示数据
启用,并新增 src/utils/mock-flags.ts 统一解析缺省值。文档库关闭演示库时
如实提示接口待接入,避免静默沿用本地数据或覆盖已保存内容。
2026-09-15 09:47:31 +08:00

72 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 报表分析接口核验与接入说明
> 核验基准:用户于 2026-09-02 提供的 default_OpenAPI.json,OpenAPI 3.1.0,MEDISIGN 患者电子签 API v1。
>
> 页面实现:src/views/management/reports/index.vue;API 封装:src/api/management/reports.ts。
## 1. 结论
最新接口文档已经提供完整的签署报表资源。本轮已将报表页从“读取全部签署任务后前端聚合”切换为服务端报表接口:
- 概览指标、签署趋势和科室分布由 overview 返回;
- 明细由 tasks 服务端分页返回;
- 院区、科室和模板分类由 options 返回;
- 导出改为服务端异步任务,完成后下载文件;
- 打开 `VITE_MOCK_REPORTS` 时仍保留原有 Mock 演示数据;该开关缺省关闭,报表默认走服务端报表接口。
## 2. 接入矩阵
| 页面功能 | HTTP 接口 | 接入状态 | 前端使用方式 |
| -------------- | -------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
| 筛选字典 | GET /api/v1/reports/signing/options | 已接入 | 使用当前操作者有权访问的院区、科室和模板分类;科室随院区筛选联动 |
| 概览指标 | GET /api/v1/reports/signing/overview | 已接入 | 使用 initiatedCount、signedCount、onTimeRate、averageSignDurationSeconds |
| 签署趋势 | GET /api/v1/reports/signing/overview | 已接入 | 使用 trend[].date/label/signedCount,不再用 createdAt 代替 signedAt |
| 科室分布 | GET /api/v1/reports/signing/overview | 已接入 | 使用 departments[].departmentName/signedCount |
| 明细列表 | GET /api/v1/reports/signing/tasks | 已接入 | 使用 records/page/size/total/pages,翻页和每页条数均请求服务端 |
| 明细状态和时间 | GET /api/v1/reports/signing/tasks | 已接入 | 映射全部 CREATED/WAITING_SIGN/SIGNED/EXPIRED/VOIDED/GENERATING/FAILED,展示脱敏患者、发起时间、完成时间和耗时 |
| 创建导出任务 | POST /api/v1/reports/signing/export-jobs | 已接入 | 复用当前筛选条件,默认请求 CSV,不传分页参数以导出全部匹配结果 |
| 导出状态 | GET /api/v1/reports/signing/export-jobs/{jobId} | 已接入 | 轮询 PENDING/RUNNING,处理 SUCCEEDED/FAILED/EXPIRED |
| 下载导出文件 | GET /api/v1/reports/signing/export-jobs/{jobId}/download | 已接入 | 以 Blob 下载服务端生成文件 |
| 明细查看 | 工作台签署任务路由 | 已保留 | 点击行跳转工作台,由工作台查询任务详情和签署文件 |
所有真实请求都通过 src/utils/request.ts 的单例发送,路径使用 /v1/...,由默认 /api 前缀形成 /api/v1/...,鉴权沿用 X-Token。
## 3. 参数和统计口径
页面固定传 timezone=Asia/Shanghai,日期区间按左闭右开 [from,to) 转成带 +08:00 的 UTC ISO 时间:
- 7d、14d、month 和自定义日期都生成明确的起止时间;
- overview 同时传 createdFrom/To、signedFrom/To、expiredFrom/To,让发起、签署完成和超时统计使用各自业务时间;
- tasks 和导出只传 createdFrom/To,保证待签署任务不会因缺少 signedAt 或 expiredAt 被时间条件排除;
- 院区、科室、模板分类、签署方式和关键词分别映射为 campusId、departmentId、templateCategory、signMethod、keyword;
- tasks 使用 page、size、timeDimension=CREATED、sort=createdAt、direction=desc。
后端返回的 onTimeRate 按契约是 0-1 小数,前端展示为百分比;无样本的 onTimeRate 和无可靠样本的平均耗时保持为 —。真实签署耗时优先使用 signDurationSeconds,不会用固定演示数字代替。
## 4. 状态和脱敏映射
| 后端状态 | 页面状态 |
| --------------------- | -------- |
| CREATED、WAITING_SIGN | 待签署 |
| GENERATING | 签署中 |
| SIGNED | 已签署 |
| EXPIRED | 已超时 |
| VOIDED | 已作废 |
| FAILED | 处理失败 |
明细使用 patientNameMasked 和 patientDisplayId,不补查或展示身份证号、完整手机号、完整病历或签名原图。模板、院区和科室直接使用报表 DTO 返回的快照字段,不再通过当前可见模板列表猜测历史分类。
## 5. 联调时需要确认的事项
接口已经按文档接入,但页面能否显示真实数据仍取决于后端环境:
- 六个报表路径都已部署在 /api/v1,并允许当前角色访问;
- 成功响应使用统一包装,code=0 或 "0",业务数据位于 data;
- options、overview 和 tasks 的对象查询参数按 OpenAPI 默认 form/explode 方式接收为平铺参数;
- overview 的 trend 按 signedAt、超时按 expiredAt,并返回包含零值日期的趋势;
- tasks 的权限过滤在分页前执行,total/pages 与 records 一致,排序稳定;
- 导出任务创建、状态查询和下载都重新校验权限,文件有效期和过期错误符合契约;
- 真实环境的 Network 请求需确认 401/403/400 能被网关和统一响应正确返回。
当前页面的导出按钮只暴露 CSV;API DTO 已支持 CSV/XLSX,若产品需要 XLSX,可在筛选栏增加格式选择而无需新增接口。