diff --git a/specs/002-rev005-invoice-flow/verification.md b/specs/002-rev005-invoice-flow/verification.md index fd6f422..22d5cdf 100644 --- a/specs/002-rev005-invoice-flow/verification.md +++ b/specs/002-rev005-invoice-flow/verification.md @@ -354,6 +354,133 @@ curl -X POST "${BASE_URL}/business/invoice/red-ink" \ - **日志抽样补充要求**:若运行态日志需经 Kibana、数据库表或应用日志文件检索取得,应在样本记录中额外注明检索入口、检索条件与截图/导出附件位置。 +### 当天联调最小执行卡片 + +适用场景:当天已经拿到可用环境、鉴权信息和最小样本,目标不是重新梳理设计,而是直接补 `T060`、`T061`、`T062`、`T063`、`T055` 的真实证据。 + +#### 开始前只确认 6 件事 + +| 检查项 | 最低要求 | +|------|------| +| `BASE_URL` | 已确认实际网关地址和前缀 | +| `TOKEN` | 已确认可访问 `/business/invoice/*` 的鉴权信息 | +| 正常申请样本 | 至少 1 组可成功申请的 `custId + chargeIds` | +| 规则拦截样本 | 至少 2 组,如未缴费、已开票、限额超限或重复申请 | +| 成功发票样本 | 至少 1 组能进入 `SUCCESS + fileUrl` | +| 日志入口 | 已确认日志查询入口或数据库检索方式 | + +#### 当天最小执行顺序 + +| 顺序 | 动作 | 目标待办 | 最少产出 | +|------|------|------|------| +| 1 | 执行 `/business/invoice/apply` 正常样本和拦截样本 | `T060`、`T061` | 响应时间、`applicationNo`、成功/拦截分类 | +| 2 | 对成功申请样本执行 `/business/invoice/query` | `T062` | `sysRequestNo`、当前状态、查询结果 | +| 3 | 执行 `/business/invoice/write-back`,至少覆盖 `SUCCESS` 和 1 类失败 | `T062` | 回写结果、失败分类、是否命中成功终态保护 | +| 4 | 对兜底样本执行 `/business/invoice/query/compensate` | `T062` | 补偿查询结果 | +| 5 | 对 `SUCCESS + fileUrl` 样本执行客户侧查询/下载/推送 | `T063` | 查询结果、下载结果、推送结果 | +| 6 | 对成功样本执行作废或红冲,并立即抽取日志 | `T055` | 后处理结果、状态前后值、日志样本 | + +#### 当天必须回填的 5 个位置 + +| 待办 | 回填位置 | 最低回填要求 | +|------|------|------| +| `T060` | `SC-001` 响应时延表 | 样本量、平均值、P95、最大值 | +| `T061` | `SC-002` 申请通过率表 | 正常样本与拦截样本分组统计 | +| `T062` | `SC-003` 回写成功率表 | 成功量、失败量、失败分类、保护量 | +| `T063` | `SC-004` 客户侧消费表 | 查询/下载/推送三类统计 | +| `T055` | `SC-005` 日志抽样表 | 至少 1 条关键动作日志样本 | + +#### 当天结束前的收口判断 + +- 若已拿到真实样本,但还没回填正式表格:不要关闭 `tasks.md` 中对应待办。 +- 若已回填表格,但没有请求报文、响应报文或日志截图:仍视为证据不完整。 +- 只有“样本已拿到 + 表格已回填 + 附件已留存”同时满足,才建议勾掉对应任务。 + +#### 当天可直接复制的变量模板 + +```bash +export BASE_URL="https://your-host" +export TOKEN="replace-with-real-token" + +export CUST_ID="1024" +export CHARGE_ID="10001" +export INVOICE_ID="2048" + +export APPLICATION_NO="APP-REV005-001" +export SYS_REQUEST_NO="SYS008-APP-REV005-001" + +export PUSH_EMAIL="test@example.com" +export PUSH_MOBILE="13800000000" +``` + +#### 当天可直接复制的最小命令组 + +```bash +# 1. 申请 +curl -X POST "${BASE_URL}/business/invoice/apply" \ + -H "Authorization: Bearer ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"chargeIds\":[${CHARGE_ID}],\"custId\":${CUST_ID},\"invoiceType\":\"ELECTRONIC\",\"invoiceTitle\":\"福建水务测试客户\",\"sourceChannel\":\"COUNTER\"}" + +# 2. 查询 +curl -X POST "${BASE_URL}/business/invoice/query" \ + -H "Authorization: Bearer ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"applicationNo\":\"${APPLICATION_NO}\",\"querySource\":\"MANUAL\"}" + +# 3. 回写成功 +curl -X POST "${BASE_URL}/business/invoice/write-back" \ + -H "Authorization: Bearer ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"applicationNo\":\"${APPLICATION_NO}\",\"sysRequestNo\":\"${SYS_REQUEST_NO}\",\"invoiceStatus\":\"SUCCESS\",\"invoiceCode\":\"FPDM001\",\"invoiceNumber\":\"FPHM001\",\"fileUrl\":\"https://example.com/invoice.pdf\"}" + +# 4. 补偿查询 +curl -X POST "${BASE_URL}/business/invoice/query/compensate" \ + -H "Authorization: Bearer ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"applicationNo\":\"${APPLICATION_NO}\",\"querySource\":\"AUTO_COMPENSATE\"}" + +# 5. 客户侧查询 / 下载 / 推送 +curl -X POST "${BASE_URL}/business/invoice/customer/query" \ + -H "Authorization: Bearer ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"custId\":${CUST_ID},\"invoiceId\":${INVOICE_ID}}" + +curl -X POST "${BASE_URL}/business/invoice/customer/download" \ + -H "Authorization: Bearer ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"custId\":${CUST_ID},\"invoiceId\":${INVOICE_ID}}" + +curl -X POST "${BASE_URL}/business/invoice/customer/push" \ + -H "Authorization: Bearer ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"custId\":${CUST_ID},\"invoiceId\":${INVOICE_ID},\"pushChannel\":\"EMAIL\",\"pushEmail\":\"${PUSH_EMAIL}\"}" + +# 6. 作废 / 红冲 +curl -X POST "${BASE_URL}/business/invoice/invalidate" \ + -H "Authorization: Bearer ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"invoiceId\":${INVOICE_ID},\"invalidReason\":\"测试作废样本\"}" + +curl -X POST "${BASE_URL}/business/invoice/red-ink" \ + -H "Authorization: Bearer ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"invoiceId\":${INVOICE_ID},\"redInkReason\":\"测试红冲样本\"}" +``` + +#### 单日执行记录表 + +| 时间 | 执行动作 | 样本主键 | 响应摘要 | 日志是否已取到 | 已回填位置 | +|------|------|------|------|------|------| +| 待补 | apply | `applicationNo` / `chargeId` | 待补 | 待补 | `T060/T061` | +| 待补 | query | `applicationNo` / `sysRequestNo` | 待补 | 待补 | `T062` | +| 待补 | write-back | `applicationNo` / `sysRequestNo` | 待补 | 待补 | `T062` | +| 待补 | compensate | `applicationNo` / `sysRequestNo` | 待补 | 待补 | `T062` | +| 待补 | customer query | `invoiceId` / `custId` | 待补 | 待补 | `T063` | +| 待补 | download | `invoiceId` / `custId` | 待补 | 待补 | `T063` | +| 待补 | push | `invoiceId` / `custId` | 待补 | 待补 | `T063` | +| 待补 | invalidate / red-ink | `invoiceId` | 待补 | 待补 | `T055` | + ### 联调补录清单(按顺序执行) | 步骤 | 对应待办 | 执行动作 | 主要输入 | 预期产出 | 回填位置 |