BIZ8 固化图片OCR可行性设计

这个提交包含在:
2026-05-13 18:48:12 +08:00
父节点 ab35d98d63
当前提交 8275c2ce6f
共修改 2 个文件,包含 31 行新增和 1 行删除
+30
查看文件
@@ -176,6 +176,36 @@
- 多页 PDF 首批按一份文件处理;若包含多张发票,后续单独拆分能力。 - 多页 PDF 首批按一份文件处理;若包含多张发票,后续单独拆分能力。
- 文件原件必须保留,OCR 结果只是结构化识别数据。 - 文件原件必须保留,OCR 结果只是结构化识别数据。
### 6.3.1 BIZ8 图片 OCR 可行性设计
BIZ8 阶段的图片 OCR 结论是“技术可行,但当前不开放为正式能力”。国内主流 OCR provider 已支持图片或 PDF 发票识别,例如腾讯云 `VatInvoiceOCR` 支持 `PNG/JPG/JPEG/PDF` 并通过 `IsPdf` 区分 PDF,阿里云 `RecognizeInvoice` 支持图片、PDF、OFD 等格式,百度智能云增值税发票识别支持 `image/url/pdf_file/ofd_file` 输入。以上只作为 provider 能力调研依据,不改变 hyb-oa 当前 PDF-only 验收口径。
启动图片 OCR 前必须满足以下条件:
| 条件 | 要求 |
| --- | --- |
| 样票授权 | 先完成脱敏样票授权,仓库不得提交真实票据原件、身份证号、手机号、银行卡或公司敏感报价 |
| provider 选择 | 优先复用现有腾讯云 OCR SDK 和字段归一化链路;阿里云或百度只作为后续替代方案,需另写 SDK、计费、字段映射和回滚说明 |
| 入口控制 | 不恢复拍照直传或 HTML `capture` 作为默认发票入口;若试验图片发票,必须使用明确的受控入口、feature flag 和可回滚配置 |
| 文件规则 | 图片发票只允许明确白名单格式,文件大小、分辨率、页数和错误提示必须与 provider 限制一致 |
| 字段规则 | 识别后仍按发票代码、发票号码、数电票号码、金额、开票日期、销方、购方等统一字段进入查重和人工复核 |
| 审计规则 | 图片 OCR 结果、失败原因、人工修正、重复例外、附件下载和敏感操作继续写审计摘要 |
| 验收规则 | mock OCR、真实 provider、pending、失败重试和人工复核结论分开记录;无授权样票时只能 SKIP 真实图片 OCR,不得标记 PASS |
推荐技术路径:
1. 保持 PDF-only 上传校验和现有页面文案不变。
2. 在非生产环境用脱敏样票验证现有腾讯云 `image_native` 分支和字段归一化结果。
3. 若真实图片样票通过率和失败可解释性达标,再另开 BIZ8 后续行或 BIZ9 开发入口。
4. 开发时只放开发票图片入口,不改变附件图片作为普通材料的规则。
5. 回滚时关闭 feature flag、恢复 PDF-only allowlist,已上传图片发票按识别失败或人工复核记录处理,不自动转为附件。
参考链接:
- 腾讯云增值税发票识别:https://cloud.tencent.com/document/api/866/36210
- 阿里云增值税发票识别:https://help.aliyun.com/zh/ocr/developer-reference/api-ocr-api-2021-07-07-recognizeinvoice
- 百度智能云增值税发票识别:https://cloud.baidu.com/doc/OCR/s/nk3h7xy2t
### 6.4 发票合规与人工复核 ### 6.4 发票合规与人工复核
首批发票合规采用 `OCR + 查重 + 财务人工复核`。不接自动验真接口,不依赖新增付费服务或第三方验真能力;自动验真进入后续 backlog。 首批发票合规采用 `OCR + 查重 + 财务人工复核`。不接自动验真接口,不依赖新增付费服务或第三方验真能力;自动验真进入后续 backlog。
@@ -2,7 +2,7 @@ ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regr
BIZ8-0,BIZ8 连续合同建档,"建立报销、OCR、财务和项目轻量增强连续型合同,避免 OCR、票据、财务导出、费用提示和项目关联散落到多个小 CSV。","1) 本 CSV 校验通过;2) 文档索引和状态矩阵指向本合同;3) 不进入 ERP 实时集成或重预算;4) 不改业务代码;5) 真实 OCR 和样票需授权。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-13_18-23-53-biz8-finance-ocr-project.csv;rg -n 'BIZ8|OCR|财务|项目' docs/文档索引.md docs/文档事实源状态矩阵.md issues/README.md。",python3|rg|manual,DONE,DONE,DONE,issues/2026-05-13_18-23-53-biz8-finance-ocr-project.csv|docs/文档索引.md|docs/文档事实源状态矩阵.md|issues/README.md,[],CSV validator 和索引 rg 均通过;本次仅合同建档和入口登记,未改业务代码,真实 OCR 和样票仍需授权。 BIZ8-0,BIZ8 连续合同建档,"建立报销、OCR、财务和项目轻量增强连续型合同,避免 OCR、票据、财务导出、费用提示和项目关联散落到多个小 CSV。","1) 本 CSV 校验通过;2) 文档索引和状态矩阵指向本合同;3) 不进入 ERP 实时集成或重预算;4) 不改业务代码;5) 真实 OCR 和样票需授权。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-13_18-23-53-biz8-finance-ocr-project.csv;rg -n 'BIZ8|OCR|财务|项目' docs/文档索引.md docs/文档事实源状态矩阵.md issues/README.md。",python3|rg|manual,DONE,DONE,DONE,issues/2026-05-13_18-23-53-biz8-finance-ocr-project.csv|docs/文档索引.md|docs/文档事实源状态矩阵.md|issues/README.md,[],CSV validator 和索引 rg 均通过;本次仅合同建档和入口登记,未改业务代码,真实 OCR 和样票仍需授权。
BIZ8-1,业务增强需求规约更新,"复核报销、发票、OCR、财务、费用提示和项目轻管理规约,明确 BIZ8 当前做与不做。","1) PDF-only 当前口径清楚;2) 图片 OCR 仅做可行性设计或明确不做;3) ERP 和重预算冻结;4) 财务和项目权限边界清楚。","流程级验证:rg -n 'PDF|图片 OCR|发票|财务|费用|项目|ERP|预算' docs/报销发票附件规则.md docs/需求-报销发票OCR规约.md docs/需求-项目轻管理规约.md docs/海音达OA-MVP需求规格说明书.md。",rg|manual,DONE,DONE,DONE,docs/报销发票附件规则.md|docs/需求-报销发票OCR规约.md|docs/需求-项目轻管理规约.md|docs/海音达OA-MVP需求规格说明书.md,"[""BIZ8-0""]",rg 复核通过;PRD、报销 OCR 规约、报销附件规则和项目轻管理规约已覆盖 PDF-only、图片 OCR 后续设计、ERP/预算冻结、财务付款导出和项目轻量权限边界;未改业务代码。 BIZ8-1,业务增强需求规约更新,"复核报销、发票、OCR、财务、费用提示和项目轻管理规约,明确 BIZ8 当前做与不做。","1) PDF-only 当前口径清楚;2) 图片 OCR 仅做可行性设计或明确不做;3) ERP 和重预算冻结;4) 财务和项目权限边界清楚。","流程级验证:rg -n 'PDF|图片 OCR|发票|财务|费用|项目|ERP|预算' docs/报销发票附件规则.md docs/需求-报销发票OCR规约.md docs/需求-项目轻管理规约.md docs/海音达OA-MVP需求规格说明书.md。",rg|manual,DONE,DONE,DONE,docs/报销发票附件规则.md|docs/需求-报销发票OCR规约.md|docs/需求-项目轻管理规约.md|docs/海音达OA-MVP需求规格说明书.md,"[""BIZ8-0""]",rg 复核通过;PRD、报销 OCR 规约、报销附件规则和项目轻管理规约已覆盖 PDF-only、图片 OCR 后续设计、ERP/预算冻结、财务付款导出和项目轻量权限边界;未改业务代码。
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-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,TODO,TODO,TODO,docs/需求-报销发票OCR规约.md|docs/报销发票附件规则.md,"[""BIZ8-2""]",引入新依赖需在 Notes 写用途、版本、替代方案和回滚路径。 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,TODO,TODO,TODO,docs/报销发票附件规则.md|artifacts|output,"[""BIZ8-3""]",真实票据原件不得入库。 BIZ8-4,样票脱敏和授权规则,"定义真实 OCR 和批量回归所需样票的授权、脱敏、存放和引用规则。","1) 样票来源合法;2) 票据、公司、金额和个人信息按需脱敏;3) 仓库不提交敏感原件;4) 证据只记录路径和摘要。","流程级验证:人工核对样票授权记录和脱敏规则;rg 确认仓库未新增真实票据原件。",manual|rg,TODO,TODO,TODO,docs/报销发票附件规则.md|artifacts|output,"[""BIZ8-3""]",真实票据原件不得入库。
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,TODO,TODO,TODO,scripts/qa|docs/需求-报销发票OCR规约.md,"[""BIZ8-4""]",复用 QAOPS8-7 边界。
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-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""]",页面改动需视觉验证。
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 BIZ8-0 BIZ8 连续合同建档 建立报销、OCR、财务和项目轻量增强连续型合同,避免 OCR、票据、财务导出、费用提示和项目关联散落到多个小 CSV。 1) 本 CSV 校验通过;2) 文档索引和状态矩阵指向本合同;3) 不进入 ERP 实时集成或重预算;4) 不改业务代码;5) 真实 OCR 和样票需授权。 流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-13_18-23-53-biz8-finance-ocr-project.csv;rg -n 'BIZ8|OCR|财务|项目' docs/文档索引.md docs/文档事实源状态矩阵.md issues/README.md。 python3|rg|manual DONE DONE DONE issues/2026-05-13_18-23-53-biz8-finance-ocr-project.csv|docs/文档索引.md|docs/文档事实源状态矩阵.md|issues/README.md [] CSV validator 和索引 rg 均通过;本次仅合同建档和入口登记,未改业务代码,真实 OCR 和样票仍需授权。
3 BIZ8-1 业务增强需求规约更新 复核报销、发票、OCR、财务、费用提示和项目轻管理规约,明确 BIZ8 当前做与不做。 1) PDF-only 当前口径清楚;2) 图片 OCR 仅做可行性设计或明确不做;3) ERP 和重预算冻结;4) 财务和项目权限边界清楚。 流程级验证:rg -n 'PDF|图片 OCR|发票|财务|费用|项目|ERP|预算' docs/报销发票附件规则.md docs/需求-报销发票OCR规约.md docs/需求-项目轻管理规约.md docs/海音达OA-MVP需求规格说明书.md。 rg|manual DONE DONE DONE docs/报销发票附件规则.md|docs/需求-报销发票OCR规约.md|docs/需求-项目轻管理规约.md|docs/海音达OA-MVP需求规格说明书.md ["BIZ8-0"] rg 复核通过;PRD、报销 OCR 规约、报销附件规则和项目轻管理规约已覆盖 PDF-only、图片 OCR 后续设计、ERP/预算冻结、财务付款导出和项目轻量权限边界;未改业务代码。
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 TODO DONE TODO DONE TODO DONE docs/需求-报销发票OCR规约.md|docs/报销发票附件规则.md ["BIZ8-2"] 引入新依赖需在 Notes 写用途、版本、替代方案和回滚路径。 已在 docs/需求-报销发票OCR规约.md 增加 BIZ8 图片 OCR 可行性设计;官方资料复核腾讯云、阿里云、百度均支持图片或 PDF 发票识别,当前结论为技术可行但不开放正式能力;优先复用现有腾讯云通道,真实样票授权、脱敏、feature flag、字段归一化、审计和回滚条件满足后再开发;未改业务代码。
6 BIZ8-4 样票脱敏和授权规则 定义真实 OCR 和批量回归所需样票的授权、脱敏、存放和引用规则。 1) 样票来源合法;2) 票据、公司、金额和个人信息按需脱敏;3) 仓库不提交敏感原件;4) 证据只记录路径和摘要。 流程级验证:人工核对样票授权记录和脱敏规则;rg 确认仓库未新增真实票据原件。 manual|rg TODO TODO TODO docs/报销发票附件规则.md|artifacts|output ["BIZ8-3"] 真实票据原件不得入库。
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 TODO TODO scripts/qa|docs/需求-报销发票OCR规约.md ["BIZ8-4"] 复用 QAOPS8-7 边界。
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"] 页面改动需视觉验证。