BIZ8 设计批量OCR样票回归

这个提交包含在:
2026-05-13 18:52:10 +08:00
父节点 234d342466
当前提交 4dd7c73203
共修改 2 个文件,包含 36 行新增和 1 行删除
+35
查看文件
@@ -138,6 +138,41 @@ node scripts/qa/check-pending-ocr.mjs --thresholds=2,5,10
脚本只输出票据 ID、上传时间、尝试次数和最后错误摘要,不读取票据文件内容。缺少 `DATABASE_URL` 时应输出 `SKIP`,不视为真实数据库健康检查通过。
### BIZ8 批量样票 OCR 回归设计
批量样票回归用于判断真实 OCR provider、异步终态和失败复核路径是否稳定,不替代 PDF-only 当前验收,也不代表图片 OCR 已开放。
推荐分层:
| 层级 | 用途 | 通过口径 |
| --- | --- | --- |
| mock OCR | 验证上传、pending、状态刷新、失败提示和报销绑定流程 | 本地自动化通过;不得宣称真实 provider 通过 |
| pending OCR 扫描 | 识别卡住的 `pending_ocr` 票据 | `check-pending-ocr.mjs` 输出计数和摘要;缺 `DATABASE_URL` 记录 `SKIP` |
| 单张真实 OCR | 验证 live provider、凭据、网络和字段归一化 | 授权样票上传后进入可解释终态;重复票据可算可解释终态 |
| 批量真实 OCR | 验证多样票稳定性、失败率和错误分类 | 仅使用授权或脱敏样票;失败逐张记录并人工复核 |
批量真实 OCR 只能在满足以下条件后执行:
1. 样票已按 [报销发票附件规则](./报销发票附件规则.md) 完成授权、脱敏和别名登记。
2. 文件名使用样票别名,不使用真实供应商、客户、员工姓名或业务说明。
3. `PLAYWRIGHT_OCR_LIVE_FILE`、`PLAYWRIGHT_OCR_LIVE_FILES` 或 `PLAYWRIGHT_OCR_LIVE_DIR` 指向仓库外安全目录。
4. 批量报告只作为本地辅助复核;未经脱敏的 `artifacts/r70/live-ocr-batch-report.md` 不得提交。
5. 如缺少样票、凭据、授权或网络,只能记录 `SKIP` 和补测条件,不得标记 PASS。
示例命令:
```bash
cd client
PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 PLAYWRIGHT_OCR_LIVE_DIR=<safe-sample-dir> npx playwright test tests/e2e/manual/live-invoice-ocr-batch.spec.ts --workers=1 --reporter=list
```
结果判读:
- `available` 或可解释的重复票据终态表示 OCR 链路可继续人工复核。
- `pending_ocr` 超过阈值必须结合 pending 扫描和 worker 日志排查,不能直接算失败或通过。
- `ocr_failed` 必须记录错误摘要、provider、样票别名和是否可重试,不记录完整票面字段。
- 批量样票结论必须区分 PDF、图片、mock 和真实 provider;图片 OCR 仍是后续候选,不进入当前 R7E 验收。
## 发布候选本地门禁
首轮主线 A8 复跑本地门禁时,需要先用本地回归参数启动服务,再执行回归脚本。推荐参数:
@@ -4,7 +4,7 @@ BIZ8-1,业务增强需求规约更新,"复核报销、发票、OCR、财务、
BIZ8-2,PDF-only 当前口径复核,"复核当前 OCR 是否仍以 PDF-only 为验收口径,避免把未实现图片 OCR 误报为能力。","1) 当前支持格式清楚;2) 页面提示和后端校验一致;3) 测试样例可复现;4) 不承诺未实现格式。","流程级验证:上传 PDF 和非 PDF 样例 -> 检查校验、提示和 OCR 状态;rg 当前 OCR 文档口径。",manual|node|playwright,DONE,DONE,DONE,docs/需求-报销发票OCR规约.md|server/src|client/src,"[""BIZ8-1""]",后端 npm test -- tests/unit/routes/invoicePool.upload.test.js 通过 6 tests,覆盖 PDF 上传和 image/png 发票拒绝 pdf_invoice_required;前端 npx playwright test tests/e2e/r111-invoice-reimbursement-guard.spec.ts --workers=1 --reporter=list 通过 2 tests,覆盖 PC 和企业微信移动端 PDF 发票上传、图片附件分离和无拍照发票入口;rg 已确认文档继续保持 PDF-only 和图片 OCR 后续能力口径;未改业务代码。
BIZ8-3,图片 OCR 可行性设计,"设计图片 OCR 是否进入当前阶段,评估 provider、成本、准确率、样票授权和回滚路径。","1) provider 和 SDK 选择清楚;2) 样票授权和脱敏规则明确;3) 不影响 PDF OCR;4) 不做 AI 自动处理。","流程级验证:人工审查可行性设计;必要时用脱敏样票在非生产环境验证。",manual,DONE,DONE,DONE,docs/需求-报销发票OCR规约.md|docs/报销发票附件规则.md,"[""BIZ8-2""]",已在 docs/需求-报销发票OCR规约.md 增加 BIZ8 图片 OCR 可行性设计;官方资料复核腾讯云、阿里云、百度均支持图片或 PDF 发票识别,当前结论为技术可行但不开放正式能力;优先复用现有腾讯云通道,真实样票授权、脱敏、feature flag、字段归一化、审计和回滚条件满足后再开发;未改业务代码。
BIZ8-4,样票脱敏和授权规则,"定义真实 OCR 和批量回归所需样票的授权、脱敏、存放和引用规则。","1) 样票来源合法;2) 票据、公司、金额和个人信息按需脱敏;3) 仓库不提交敏感原件;4) 证据只记录路径和摘要。","流程级验证:人工核对样票授权记录和脱敏规则;rg 确认仓库未新增真实票据原件。",manual|rg,DONE,DONE,DONE,docs/报销发票附件规则.md|artifacts|output,"[""BIZ8-3""]",已在 docs/报销发票附件规则.md 增加样票脱敏和授权规则;要求授权登记在仓库外、真实票据原件不入 git、证据只记录别名摘要和路径、无授权样票时真实 OCR 回归只能 SKIP;本次未新增样票文件或业务代码。
BIZ8-5,批量样票回归设计,"设计 OCR 批量样票回归,区分 mock、真实 provider、pending OCR 和失败重试。","1) mock 与真实 provider 结论分离;2) pending OCR 不等于失败或通过;3) 阈值和样本数清楚;4) 失败有复核路径。","流程级验证:node scripts/qa/check-pending-ocr.mjs --thresholds=2,5,10;真实样票缺失时记录 SKIP。",node|manual,TODO,TODO,TODO,scripts/qa|docs/需求-报销发票OCR规约.md,"[""BIZ8-4""]",复用 QAOPS8-7 边界。
BIZ8-5,批量样票回归设计,"设计 OCR 批量样票回归,区分 mock、真实 provider、pending OCR 和失败重试。","1) mock 与真实 provider 结论分离;2) pending OCR 不等于失败或通过;3) 阈值和样本数清楚;4) 失败有复核路径。","流程级验证:node scripts/qa/check-pending-ocr.mjs --thresholds=2,5,10;真实样票缺失时记录 SKIP。",node|manual,DONE,DONE,DONE,scripts/qa|docs/需求-报销发票OCR规约.md,"[""BIZ8-4""]",已在 docs/试运行与自动化验证手册.md 增加 BIZ8 批量样票 OCR 回归设计,区分 mock、pending 扫描、单张真实 OCR 和批量真实 OCR;node scripts/qa/check-pending-ocr.mjs 阈值 2/5/10 输出 [pending-ocr][SKIP] missing DATABASE_URL,按规则记录为非阻断 SKIP;当前无授权样票和凭据,未执行真实批量 OCR。
BIZ8-6,OCR 异步终态体验,"优化或验证 OCR 异步处理中、成功、失败、pending 和重试的页面体验。","1) 异步状态可解释;2) 用户知道是否需要等待或重试;3) 失败不阻塞无关流程;4) 移动端不重叠。","流程级验证:上传发票 -> 观察 OCR pending/success/failure -> PC 和移动查看报销详情状态。",playwright|node|manual,TODO,TODO,TODO,server/src|client/src|docs/产品设计规则.md,"[""BIZ8-5""]",页面改动需视觉验证。
BIZ8-7,重复票据例外流程,"设计重复票据发现后的例外处理流程,避免误拦截合法场景或放过风险。","1) 重复提示清楚;2) 人工例外有权限和记录;3) 不绕过财务复核;4) 审计可追溯。","流程级验证:提交重复票据 -> 检查拦截或例外路径 -> 财务复核 -> 查看审计记录。",node|playwright|manual,TODO,TODO,TODO,server/src|client/src|docs/报销发票附件规则.md,"[""BIZ8-2""]",不得自动处理或自动放行。
BIZ8-8,财务台账扫读性,"提升财务台账的扫读性,优先解决状态、金额、申请人、项目和票据提示的扫描效率。","1) 财务能快速识别待处理项;2) 状态和金额不混乱;3) 权限不泄露;4) PC 和移动布局可用。","流程级验证:财务查看台账 -> 筛选或扫读待付款报销 -> 检查状态、金额、申请人和票据提示。",playwright|npm|manual,TODO,TODO,TODO,client/src|server/src|docs/产品设计规则.md,"[""BIZ8-1""]",UI 改动必须参考设计事实源。
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
4 BIZ8-2 PDF-only 当前口径复核 复核当前 OCR 是否仍以 PDF-only 为验收口径,避免把未实现图片 OCR 误报为能力。 1) 当前支持格式清楚;2) 页面提示和后端校验一致;3) 测试样例可复现;4) 不承诺未实现格式。 流程级验证:上传 PDF 和非 PDF 样例 -> 检查校验、提示和 OCR 状态;rg 当前 OCR 文档口径。 manual|node|playwright DONE DONE DONE docs/需求-报销发票OCR规约.md|server/src|client/src ["BIZ8-1"] 后端 npm test -- tests/unit/routes/invoicePool.upload.test.js 通过 6 tests,覆盖 PDF 上传和 image/png 发票拒绝 pdf_invoice_required;前端 npx playwright test tests/e2e/r111-invoice-reimbursement-guard.spec.ts --workers=1 --reporter=list 通过 2 tests,覆盖 PC 和企业微信移动端 PDF 发票上传、图片附件分离和无拍照发票入口;rg 已确认文档继续保持 PDF-only 和图片 OCR 后续能力口径;未改业务代码。
5 BIZ8-3 图片 OCR 可行性设计 设计图片 OCR 是否进入当前阶段,评估 provider、成本、准确率、样票授权和回滚路径。 1) provider 和 SDK 选择清楚;2) 样票授权和脱敏规则明确;3) 不影响 PDF OCR;4) 不做 AI 自动处理。 流程级验证:人工审查可行性设计;必要时用脱敏样票在非生产环境验证。 manual DONE DONE DONE docs/需求-报销发票OCR规约.md|docs/报销发票附件规则.md ["BIZ8-2"] 已在 docs/需求-报销发票OCR规约.md 增加 BIZ8 图片 OCR 可行性设计;官方资料复核腾讯云、阿里云、百度均支持图片或 PDF 发票识别,当前结论为技术可行但不开放正式能力;优先复用现有腾讯云通道,真实样票授权、脱敏、feature flag、字段归一化、审计和回滚条件满足后再开发;未改业务代码。
6 BIZ8-4 样票脱敏和授权规则 定义真实 OCR 和批量回归所需样票的授权、脱敏、存放和引用规则。 1) 样票来源合法;2) 票据、公司、金额和个人信息按需脱敏;3) 仓库不提交敏感原件;4) 证据只记录路径和摘要。 流程级验证:人工核对样票授权记录和脱敏规则;rg 确认仓库未新增真实票据原件。 manual|rg DONE DONE DONE docs/报销发票附件规则.md|artifacts|output ["BIZ8-3"] 已在 docs/报销发票附件规则.md 增加样票脱敏和授权规则;要求授权登记在仓库外、真实票据原件不入 git、证据只记录别名摘要和路径、无授权样票时真实 OCR 回归只能 SKIP;本次未新增样票文件或业务代码。
7 BIZ8-5 批量样票回归设计 设计 OCR 批量样票回归,区分 mock、真实 provider、pending OCR 和失败重试。 1) mock 与真实 provider 结论分离;2) pending OCR 不等于失败或通过;3) 阈值和样本数清楚;4) 失败有复核路径。 流程级验证:node scripts/qa/check-pending-ocr.mjs --thresholds=2,5,10;真实样票缺失时记录 SKIP。 node|manual TODO DONE TODO DONE TODO DONE scripts/qa|docs/需求-报销发票OCR规约.md ["BIZ8-4"] 复用 QAOPS8-7 边界。 已在 docs/试运行与自动化验证手册.md 增加 BIZ8 批量样票 OCR 回归设计,区分 mock、pending 扫描、单张真实 OCR 和批量真实 OCR;node scripts/qa/check-pending-ocr.mjs 阈值 2/5/10 输出 [pending-ocr][SKIP] missing DATABASE_URL,按规则记录为非阻断 SKIP;当前无授权样票和凭据,未执行真实批量 OCR。
8 BIZ8-6 OCR 异步终态体验 优化或验证 OCR 异步处理中、成功、失败、pending 和重试的页面体验。 1) 异步状态可解释;2) 用户知道是否需要等待或重试;3) 失败不阻塞无关流程;4) 移动端不重叠。 流程级验证:上传发票 -> 观察 OCR pending/success/failure -> PC 和移动查看报销详情状态。 playwright|node|manual TODO TODO TODO server/src|client/src|docs/产品设计规则.md ["BIZ8-5"] 页面改动需视觉验证。
9 BIZ8-7 重复票据例外流程 设计重复票据发现后的例外处理流程,避免误拦截合法场景或放过风险。 1) 重复提示清楚;2) 人工例外有权限和记录;3) 不绕过财务复核;4) 审计可追溯。 流程级验证:提交重复票据 -> 检查拦截或例外路径 -> 财务复核 -> 查看审计记录。 node|playwright|manual TODO TODO TODO server/src|client/src|docs/报销发票附件规则.md ["BIZ8-2"] 不得自动处理或自动放行。
10 BIZ8-8 财务台账扫读性 提升财务台账的扫读性,优先解决状态、金额、申请人、项目和票据提示的扫描效率。 1) 财务能快速识别待处理项;2) 状态和金额不混乱;3) 权限不泄露;4) PC 和移动布局可用。 流程级验证:财务查看台账 -> 筛选或扫读待付款报销 -> 检查状态、金额、申请人和票据提示。 playwright|npm|manual TODO TODO TODO client/src|server/src|docs/产品设计规则.md ["BIZ8-1"] UI 改动必须参考设计事实源。