R77-A2/A3: 回填live OCR收口与试运行结论

这个提交包含在:
2026-04-29 09:56:54 +08:00
父节点 f78acceba2
当前提交 5f68acfcc3
共修改 5 个文件,包含 34 行新增和 10 行删除
+3 -5
查看文件
@@ -1,6 +1,6 @@
# R70 批量 live OCR 辅助复核报告 # R70 批量 live OCR 辅助复核报告
生成时间:2026-04-29T01:33:00.163Z 生成时间:2026-04-29T01:53:35.081Z
## 结果 ## 结果
@@ -12,11 +12,9 @@
| 文件 | 状态 | 耗时(ms) | 票据ID | 发票代码 | 发票号码 | 销售方 | 开票日期 | 备注 | | 文件 | 状态 | 耗时(ms) | 票据ID | 发票代码 | 发票号码 | 销售方 | 开票日期 | 备注 |
| --- | --- | ---: | --- | --- | --- | --- | --- | --- | | --- | --- | ---: | --- | --- | --- | --- | --- | --- |
| 北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf | available | 4188 | 239e54ff-1dec-462f-8a44-49231b855272 | 26112000000938423851 | 26112000000938423851 | 北京悦海堂餐饮管理有限公司 | 2026-03-11 | ok | | 北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf | available | 602 | fb29cdd8-0c10-4254-8feb-d3c3c1be86c3 | 26112000000938423851 | 26112000000938423851 | 北京悦海堂餐饮管理有限公司 | 2026-03-11 | ok |
## 说明 ## 说明
- 本报告用于真实腾讯 OCR 的本地辅助复核,不进入常规本地回归。 - 本报告用于真实腾讯 OCR 的本地辅助复核,不进入常规本地回归。
- 2026-04-29 已在干净本地 trialrun DB `hyb_oa_manual_trialrun_20260429093000` 上,以旧项目 `/home/shunli/shenzhou-business-suite/.env` 的可用腾讯凭证完成真实 PDF 发票辅助复核。 - 如某张票失败,会继续处理后续文件,并在本报告统一汇总。
- 当前应用链路已按 PDF 模式调用腾讯 `VatInvoiceOCR`,不再因缺少 `IsPdf` / `PdfPageNumber` 而报 `ImageDecodeFailed`。
- Playwright batch runner 在本地 reporter 收尾阶段存在退出挂起,本报告按本次成功业务结果回填;OCR 业务结果与数据库状态均已核对通过。
@@ -146,3 +146,12 @@
- `cd client && PLAYWRIGHT_MANUAL=1 R70_TRIALRUN_DEEP_ASSIST=1 E2E_BASE_URL=http://127.0.0.1:3001 npm run test:e2e -- tests/e2e/manual/r70-trialrun-deep-assist.spec.ts` - `cd client && PLAYWRIGHT_MANUAL=1 R70_TRIALRUN_DEEP_ASSIST=1 E2E_BASE_URL=http://127.0.0.1:3001 npm run test:e2e -- tests/e2e/manual/r70-trialrun-deep-assist.spec.ts`
- 批量真实腾讯 OCR 辅助回归: - 批量真实腾讯 OCR 辅助回归:
- `cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 PLAYWRIGHT_OCR_LIVE_DIR=<目录> E2E_BASE_URL=http://127.0.0.1:3001 npm run test:e2e -- tests/e2e/manual/live-invoice-ocr-batch.spec.ts` - `cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 PLAYWRIGHT_OCR_LIVE_DIR=<目录> E2E_BASE_URL=http://127.0.0.1:3001 npm run test:e2e -- tests/e2e/manual/live-invoice-ocr-batch.spec.ts`
## R77 OCR 收口回填
- 2026-04-29 已在 `http://127.0.0.1:3001` 上用真实 PDF 发票完成单张与 batch Playwright 复测,两个用例均正常通过并退出。
- 推荐本地 live OCR 复测顺序:
- 先跑 `cd server && TRIALRUN_RUNTIME_MODE=local node src/scripts/smoke-trialrun-runtime.js`
- 再跑单张:`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=http://127.0.0.1:3001 npx playwright test tests/e2e/manual/live-invoice-ocr.spec.ts --workers=1 --reporter=list`
- 最后跑 batch:`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=http://127.0.0.1:3001 npx playwright test tests/e2e/manual/live-invoice-ocr-batch.spec.ts --workers=1 --reporter=list`
- 默认策略继续保持 `PDF first`,仅当后续遇到新的真实票样兼容性问题时,再评估是否补 PDF 转图片 fallback。
+18 -1
查看文件
@@ -73,4 +73,21 @@ R70 初次试运行暂停项已在 2026-04-28 的 R71 定向修复后关闭。
- 公告发布 -> 员工可见 -> 团队状态更新 -> Portal 汇总可见 - 公告发布 -> 员工可见 -> 团队状态更新 -> Portal 汇总可见
- 真实全局搜索命中公告并跳转 - 真实全局搜索命中公告并跳转
- 批量真实腾讯 OCR 辅助回归:`client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts` 已落地并在干净本地 trialrun DB `hyb_oa_manual_trialrun_20260429093000` 上完成真实 PDF 发票成功识别,结果已回填到 `artifacts/r70/live-ocr-batch-report.md`。 - 批量真实腾讯 OCR 辅助回归:`client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts` 已落地并在干净本地 trialrun DB `hyb_oa_manual_trialrun_20260429093000` 上完成真实 PDF 发票成功识别,结果已回填到 `artifacts/r70/live-ocr-batch-report.md`。
- 当前 OCR 环境结论:旧项目 `/home/shunli/shenzhou-business-suite/.env` 中一组腾讯凭证已在当前应用链路验证可用;R77 已补齐 PDF 模式下的 `IsPdf=true` / `PdfPageNumber=1` 调用与返回字段归一化,主阻塞已从鉴权/解码失败转移到 Playwright batch runner 的本地收尾挂起,不再是 OCR 识别本身失败。 - 当前 OCR 环境结论:旧项目 `/home/shunli/shenzhou-business-suite/.env` 中一组腾讯凭证已在当前应用链路验证可用;R77 已补齐 PDF 模式下的 `IsPdf=true` / `PdfPageNumber=1` 调用与返回字段归一化,OCR 识别主链路已闭环,不再存在先前的鉴权/解码失败阻塞。
## R77 OCR 收口补充
- 复测时间:`2026-04-29 09:51 - 09:54 CST`
- 自动化环境:`http://127.0.0.1:3001`
- 自动化数据库:`hyb_oa_manual_trialrun_20260429093000`
- 腾讯配置来源:旧项目 `/home/shunli/shenzhou-business-suite/.env`,仅运行时注入,未写回本仓库。
- 复测命令:
- `cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=http://127.0.0.1:3001 npx playwright test tests/e2e/manual/live-invoice-ocr.spec.ts --workers=1 --reporter=list`
- `cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=http://127.0.0.1:3001 npx playwright test tests/e2e/manual/live-invoice-ocr-batch.spec.ts --workers=1 --reporter=list`
- 结果:
- 单张 live OCR:`1 passed (26.2s)`。
- batch live OCR:`1 passed (14.1s)`,runner 正常退出。
- 最新 batch 票据结果:`fb29cdd8-0c10-4254-8feb-d3c3c1be86c3`,销售方 `北京悦海堂餐饮管理有限公司`,总金额 `1683.00`,状态 `available`。
- 试运行结论:
- 员工侧报销 / 票据中心 / OCR 主链路 `上传 -> OCR -> available -> 绑定 -> 提交报销` 已具备本地试运行条件。
- 本轮仍未覆盖真实企微 OAuth、HTTPS cookie secure、多角色并发协同,以及财务支付完成后的下游链路;这些项继续保留在外部或后续 focused regression。
+1 -1
查看文件
@@ -1,7 +1,7 @@
"Domain","Tier","Routes","Primary_Roles","Env_Gates","Feature_Flags","Coverage_Status","Evidence","Validated_Flows","Gaps","Next_Action" "Domain","Tier","Routes","Primary_Roles","Env_Gates","Feature_Flags","Coverage_Status","Evidence","Validated_Flows","Gaps","Next_Action"
"认证与 Portal 导航","must_cover","/login|/portal|主/管/备导航","employee|manager|admin","APP_ORIGIN|COOKIE_SECURE|PORTAL_HOME_ENABLED|WECOM_ENTRY_ENABLED","portal_home_v1|wecom_entry_v1","done","artifacts/r69/acceptance-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/login-portal-ux.spec.ts|client/tests/e2e/wecom-entry.spec.ts|client/tests/e2e/manual/r70-trialrun-assist.spec.ts","登录、Portal 首屏、员工/经理/管理员导航分组、普通浏览器与企微 WebView CTA 提示均有自动化或人工证据。","真实企微 OAuth 绑定与回跳未做端到端;HTTPS 部署态 cookie 行为未在本轮验证。","保持主链路 done;真实企微与 HTTPS 转 A5 外部专项。" "认证与 Portal 导航","must_cover","/login|/portal|主/管/备导航","employee|manager|admin","APP_ORIGIN|COOKIE_SECURE|PORTAL_HOME_ENABLED|WECOM_ENTRY_ENABLED","portal_home_v1|wecom_entry_v1","done","artifacts/r69/acceptance-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/login-portal-ux.spec.ts|client/tests/e2e/wecom-entry.spec.ts|client/tests/e2e/manual/r70-trialrun-assist.spec.ts","登录、Portal 首屏、员工/经理/管理员导航分组、普通浏览器与企微 WebView CTA 提示均有自动化或人工证据。","真实企微 OAuth 绑定与回跳未做端到端;HTTPS 部署态 cookie 行为未在本轮验证。","保持主链路 done;真实企微与 HTTPS 转 A5 外部专项。"
"请假与审批","must_cover","/leave-requests|/workflow/tasks","employee|manager|admin","none","leave_holiday_calendar","done","artifacts/r69/acceptance-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/leave-flow.spec.ts|client/tests/e2e/workflow-quick-approve.spec.ts|client/tests/e2e/leave-team-calendar.spec.ts","请假草稿、提交、撤回、经理快捷审批、团队日历权限边界与经理部门视角已自动化并在 R70 人工复测通过。","多审批人链路、代理审批、真实并发多人协同未在 trialrun 轮次验证。","维持 done;多人协同与代理审批并入 A5 或后续专项。" "请假与审批","must_cover","/leave-requests|/workflow/tasks","employee|manager|admin","none","leave_holiday_calendar","done","artifacts/r69/acceptance-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/leave-flow.spec.ts|client/tests/e2e/workflow-quick-approve.spec.ts|client/tests/e2e/leave-team-calendar.spec.ts","请假草稿、提交、撤回、经理快捷审批、团队日历权限边界与经理部门视角已自动化并在 R70 人工复测通过。","多审批人链路、代理审批、真实并发多人协同未在 trialrun 轮次验证。","维持 done;多人协同与代理审批并入 A5 或后续专项。"
"报销、票据中心与 OCR","must_cover","/reimbursements|/reimbursements/:id|/invoice-pool","employee|manager|finance|admin","OCR_PROVIDER|TENCENT_SECRET_ID|TENCENT_SECRET_KEY","invoice_verification","partial_done","artifacts/r70/manual-trialrun-report.md|artifacts/r70/live-ocr-batch-report.md|issues/2026-04-29_08-39-22-r76-external-trialrun-closeout.csv|issues/2026-04-29_09-19-07-r77-ocr-pdf-first.csv|client/tests/e2e/reimbursement-workflow-progress.spec.ts|client/tests/e2e/invoice-ocr-flow.spec.ts|client/tests/e2e/manual/live-invoice-ocr.spec.ts|client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts","报销提交后审批进度、票据中心缺字段修正、上传后自动 OCR 进入可绑定、绑定后提交已自动化;R70 人工链路也通过。R77 已在干净本地 trialrun DB 上用真实 PDF 发票跑通 `上传 -> OCR -> available`,并更新 live batch 报告。","旧项目 `.env` 中一组腾讯凭证已在当前应用链路内验证可用;`.env.local` 仍是无效凭证。当前剩余缺口不再是 PDF 参数缺失,而是 Playwright live batch runner 在本地 reporter 收尾阶段存在退出挂起,另有支付完成后的财务链路仍未纳入本轮小团队 trialrun。","维持 OCR 主链路 `partial_done`;下一步优先稳定 live batch 辅助脚本的收尾退出,再决定是否补 PDF 转图片 fallback。财务支付后链路留后续 focused regression。" "报销、票据中心与 OCR","must_cover","/reimbursements|/reimbursements/:id|/invoice-pool","employee|manager|finance|admin","OCR_PROVIDER|TENCENT_SECRET_ID|TENCENT_SECRET_KEY","invoice_verification","partial_done","artifacts/r70/manual-trialrun-report.md|artifacts/r70/live-ocr-batch-report.md|issues/2026-04-29_08-39-22-r76-external-trialrun-closeout.csv|issues/2026-04-29_09-19-07-r77-ocr-pdf-first.csv|client/tests/e2e/reimbursement-workflow-progress.spec.ts|client/tests/e2e/invoice-ocr-flow.spec.ts|client/tests/e2e/manual/live-invoice-ocr.spec.ts|client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts","报销提交后审批进度、票据中心缺字段修正、上传后自动 OCR 进入可绑定、绑定后提交已自动化;R70 人工链路也通过。R77 已在干净本地 trialrun DB 上用真实 PDF 发票跑通 `上传 -> OCR -> available`,并完成 live 单张 + batch Playwright 复测,runner 正常退出。","旧项目 `.env` 中一组腾讯凭证已在当前应用链路内验证可用;`.env.local` 仍是无效凭证。当前剩余缺口已不再是 OCR 鉴权、PDF 参数或 batch runner 收尾,而是财务支付完成后的下游链路尚未纳入本轮小团队 trialrun。","员工侧报销 / 票据 / OCR 主链路已具备本地试运行条件;如后续将财务支付后链路纳入试运行,再补一轮 focused regression。PDF 转图片 fallback 仅在新增真实票样兼容性问题出现时再评估。"
"周报与待办","must_cover","/weekly-reports|/todos","employee|manager","WEEKLY_REPORT_ENABLED|TODO_BOARD_ENABLED","weekly_report_v1|todo_board_v1","done","artifacts/r70/auto-trialrun-deep-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/weekly-todo-flow.spec.ts|client/tests/e2e/manual/r70-trialrun-deep-assist.spec.ts","周报保存、生成待办、提交周报、完成待办闭环已自动化且在真实 trialrun 数据上复核通过。","经理侧未提交周报聚合与催办策略未单独验证。","维持 done;如进入管理场景增强,再补经理视角聚合。" "周报与待办","must_cover","/weekly-reports|/todos","employee|manager","WEEKLY_REPORT_ENABLED|TODO_BOARD_ENABLED","weekly_report_v1|todo_board_v1","done","artifacts/r70/auto-trialrun-deep-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/weekly-todo-flow.spec.ts|client/tests/e2e/manual/r70-trialrun-deep-assist.spec.ts","周报保存、生成待办、提交周报、完成待办闭环已自动化且在真实 trialrun 数据上复核通过。","经理侧未提交周报聚合与催办策略未单独验证。","维持 done;如进入管理场景增强,再补经理视角聚合。"
"公告、搜索与通知","must_cover","/announcements|/notifications|全局搜索","employee|manager|admin","ANNOUNCEMENTS_ENABLED|GLOBAL_SEARCH_ENABLED","announcements_v1|global_search_v1","done","artifacts/r70/auto-trialrun-deep-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/announcements-presence.spec.ts|client/tests/e2e/global-search.spec.ts|client/tests/e2e/manual/r70-trialrun-deep-assist.spec.ts|client/tests/e2e/r75-automation-gap-fill.spec.ts","公告发布、员工可见、Portal 汇总、真实搜索命中公告并跳转,以及通知中心未读筛选、单条已读、全部已读与待办跳转均有自动化或人工证据。","无当前试运行阻断缺口;真实外发渠道投递与通知渠道配置验证另见系统治理和外部环境项。","站内通知维持 done;外发渠道留在 A5/治理专项。" "公告、搜索与通知","must_cover","/announcements|/notifications|全局搜索","employee|manager|admin","ANNOUNCEMENTS_ENABLED|GLOBAL_SEARCH_ENABLED","announcements_v1|global_search_v1","done","artifacts/r70/auto-trialrun-deep-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/announcements-presence.spec.ts|client/tests/e2e/global-search.spec.ts|client/tests/e2e/manual/r70-trialrun-deep-assist.spec.ts|client/tests/e2e/r75-automation-gap-fill.spec.ts","公告发布、员工可见、Portal 汇总、真实搜索命中公告并跳转,以及通知中心未读筛选、单条已读、全部已读与待办跳转均有自动化或人工证据。","无当前试运行阻断缺口;真实外发渠道投递与通知渠道配置验证另见系统治理和外部环境项。","站内通知维持 done;外发渠道留在 A5/治理专项。"
"团队状态与考勤","must_cover","/team|/attendance","employee|manager|admin","PRESENCE_BOARD_ENABLED|ATTENDANCE_ENABLED","presence_board_v1|attendance_v1","done","artifacts/r70/manual-trialrun-report.md|client/tests/e2e/announcements-presence.spec.ts|issues/2026-04-09_r59-attendance-clockin.csv|client/tests/e2e/r75-automation-gap-fill.spec.ts","团队状态更新、Portal 汇总、经理查看团队状态,以及员工今日上班/下班打卡、月视图记录、管理员团队考勤补卡最小链路均已验证。","排班、节假日豁免、跨日班次等复杂考勤规则未做专项回归,但不构成本轮 trialrun 阻断。","维持 done;复杂考勤规则按需要独立专项。" "团队状态与考勤","must_cover","/team|/attendance","employee|manager|admin","PRESENCE_BOARD_ENABLED|ATTENDANCE_ENABLED","presence_board_v1|attendance_v1","done","artifacts/r70/manual-trialrun-report.md|client/tests/e2e/announcements-presence.spec.ts|issues/2026-04-09_r59-attendance-clockin.csv|client/tests/e2e/r75-automation-gap-fill.spec.ts","团队状态更新、Portal 汇总、经理查看团队状态,以及员工今日上班/下班打卡、月视图记录、管理员团队考勤补卡最小链路均已验证。","排班、节假日豁免、跨日班次等复杂考勤规则未做专项回归,但不构成本轮 trialrun 阻断。","维持 done;复杂考勤规则按需要独立专项。"
1 Domain Tier Routes Primary_Roles Env_Gates Feature_Flags Coverage_Status Evidence Validated_Flows Gaps Next_Action
2 认证与 Portal 导航 must_cover /login|/portal|主/管/备导航 employee|manager|admin APP_ORIGIN|COOKIE_SECURE|PORTAL_HOME_ENABLED|WECOM_ENTRY_ENABLED portal_home_v1|wecom_entry_v1 done artifacts/r69/acceptance-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/login-portal-ux.spec.ts|client/tests/e2e/wecom-entry.spec.ts|client/tests/e2e/manual/r70-trialrun-assist.spec.ts 登录、Portal 首屏、员工/经理/管理员导航分组、普通浏览器与企微 WebView CTA 提示均有自动化或人工证据。 真实企微 OAuth 绑定与回跳未做端到端;HTTPS 部署态 cookie 行为未在本轮验证。 保持主链路 done;真实企微与 HTTPS 转 A5 外部专项。
3 请假与审批 must_cover /leave-requests|/workflow/tasks employee|manager|admin none leave_holiday_calendar done artifacts/r69/acceptance-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/leave-flow.spec.ts|client/tests/e2e/workflow-quick-approve.spec.ts|client/tests/e2e/leave-team-calendar.spec.ts 请假草稿、提交、撤回、经理快捷审批、团队日历权限边界与经理部门视角已自动化并在 R70 人工复测通过。 多审批人链路、代理审批、真实并发多人协同未在 trialrun 轮次验证。 维持 done;多人协同与代理审批并入 A5 或后续专项。
4 报销、票据中心与 OCR must_cover /reimbursements|/reimbursements/:id|/invoice-pool employee|manager|finance|admin OCR_PROVIDER|TENCENT_SECRET_ID|TENCENT_SECRET_KEY invoice_verification partial_done artifacts/r70/manual-trialrun-report.md|artifacts/r70/live-ocr-batch-report.md|issues/2026-04-29_08-39-22-r76-external-trialrun-closeout.csv|issues/2026-04-29_09-19-07-r77-ocr-pdf-first.csv|client/tests/e2e/reimbursement-workflow-progress.spec.ts|client/tests/e2e/invoice-ocr-flow.spec.ts|client/tests/e2e/manual/live-invoice-ocr.spec.ts|client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts 报销提交后审批进度、票据中心缺字段修正、上传后自动 OCR 进入可绑定、绑定后提交已自动化;R70 人工链路也通过。R77 已在干净本地 trialrun DB 上用真实 PDF 发票跑通 `上传 -> OCR -> available`,并更新 live batch 报告。 报销提交后审批进度、票据中心缺字段修正、上传后自动 OCR 进入可绑定、绑定后提交已自动化;R70 人工链路也通过。R77 已在干净本地 trialrun DB 上用真实 PDF 发票跑通 `上传 -> OCR -> available`,并完成 live 单张 + batch Playwright 复测,runner 正常退出。 旧项目 `.env` 中一组腾讯凭证已在当前应用链路内验证可用;`.env.local` 仍是无效凭证。当前剩余缺口不再是 PDF 参数缺失,而是 Playwright live batch runner 在本地 reporter 收尾阶段存在退出挂起,另有支付完成后的财务链路仍未纳入本轮小团队 trialrun。 旧项目 `.env` 中一组腾讯凭证已在当前应用链路内验证可用;`.env.local` 仍是无效凭证。当前剩余缺口已不再是 OCR 鉴权、PDF 参数或 batch runner 收尾,而是财务支付完成后的下游链路尚未纳入本轮小团队 trialrun。 维持 OCR 主链路 `partial_done`;下一步优先稳定 live batch 辅助脚本的收尾退出,再决定是否补 PDF 转图片 fallback。财务支付后链路留后续 focused regression。 员工侧报销 / 票据 / OCR 主链路已具备本地试运行条件;如后续将财务支付后链路纳入试运行,再补一轮 focused regression。PDF 转图片 fallback 仅在新增真实票样兼容性问题出现时再评估。
5 周报与待办 must_cover /weekly-reports|/todos employee|manager WEEKLY_REPORT_ENABLED|TODO_BOARD_ENABLED weekly_report_v1|todo_board_v1 done artifacts/r70/auto-trialrun-deep-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/weekly-todo-flow.spec.ts|client/tests/e2e/manual/r70-trialrun-deep-assist.spec.ts 周报保存、生成待办、提交周报、完成待办闭环已自动化且在真实 trialrun 数据上复核通过。 经理侧未提交周报聚合与催办策略未单独验证。 维持 done;如进入管理场景增强,再补经理视角聚合。
6 公告、搜索与通知 must_cover /announcements|/notifications|全局搜索 employee|manager|admin ANNOUNCEMENTS_ENABLED|GLOBAL_SEARCH_ENABLED announcements_v1|global_search_v1 done artifacts/r70/auto-trialrun-deep-report.md|artifacts/r70/manual-trialrun-report.md|client/tests/e2e/announcements-presence.spec.ts|client/tests/e2e/global-search.spec.ts|client/tests/e2e/manual/r70-trialrun-deep-assist.spec.ts|client/tests/e2e/r75-automation-gap-fill.spec.ts 公告发布、员工可见、Portal 汇总、真实搜索命中公告并跳转,以及通知中心未读筛选、单条已读、全部已读与待办跳转均有自动化或人工证据。 无当前试运行阻断缺口;真实外发渠道投递与通知渠道配置验证另见系统治理和外部环境项。 站内通知维持 done;外发渠道留在 A5/治理专项。
7 团队状态与考勤 must_cover /team|/attendance employee|manager|admin PRESENCE_BOARD_ENABLED|ATTENDANCE_ENABLED presence_board_v1|attendance_v1 done artifacts/r70/manual-trialrun-report.md|client/tests/e2e/announcements-presence.spec.ts|issues/2026-04-09_r59-attendance-clockin.csv|client/tests/e2e/r75-automation-gap-fill.spec.ts 团队状态更新、Portal 汇总、经理查看团队状态,以及员工今日上班/下班打卡、月视图记录、管理员团队考勤补卡最小链路均已验证。 排班、节假日豁免、跨日班次等复杂考勤规则未做专项回归,但不构成本轮 trialrun 阻断。 维持 done;复杂考勤规则按需要独立专项。
@@ -1,4 +1,4 @@
"ID","Title","Description","Acceptance","Test_Method","Tools","Dev_Status","Review1_Status","Regression_Status","Files","Dependencies","Notes" "ID","Title","Description","Acceptance","Test_Method","Tools","Dev_Status","Review1_Status","Regression_Status","Files","Dependencies","Notes"
"A1","服务端 OCR PDF 感知修复","让 invoice_pool OCR job 按 `mime_type` 区分 PDF 与图片:图片继续走当前 `ImageBase64` 路径;PDF 调腾讯 `VatInvoiceOCR` 时显式传 `IsPdf=true` 与 `PdfPageNumber=1`,并补齐最小可观测性,便于区分 `pdf_native` 与 `image_native` 调用模式。","1) 真实 PDF 发票经应用链路不再因缺少 PDF 参数而报 `FailedOperation.ImageDecodeFailed`;2) 不新增数据库 schema 与前端人工步骤;3) OCR 失败时保留业务可读错误,便于后续 live 报告区分问题类型。","命令:`cd server && npm run prisma:validate`;`cd server && node --check src/services/ocr/tencent.js`;`cd server && node --check src/services/ocr/index.js`;`cd server && node --check src/jobs/ocrJob.js`。业务:使用旧项目 `/home/shunli/shenzhou-business-suite/.env` 的腾讯凭证以运行时注入方式启动本地服务,上传真实 PDF 发票,验证自动 OCR 后进入可绑定或给出明确失败原因。","manual|playwright","DONE","DONE","TODO","server/src/jobs/ocrJob.js|server/src/services/ocr/index.js|server/src/services/ocr/tencent.js","[]","已完成:补齐 PDF 调用参数、支持 `VatInvoiceInfos` 返回结构归一化、记录 `pdf_native` / `image_native` 调用模式,并在干净本地 trialrun DB `hyb_oa_manual_trialrun_20260429093000` 上以真实 PDF 发票验证通过。默认策略仍为 `PDF first`,不引入前端默认转图;不把真实腾讯密钥写入仓库。回滚路径:恢复为仅图片参数调用。" "A1","服务端 OCR PDF 感知修复","让 invoice_pool OCR job 按 `mime_type` 区分 PDF 与图片:图片继续走当前 `ImageBase64` 路径;PDF 调腾讯 `VatInvoiceOCR` 时显式传 `IsPdf=true` 与 `PdfPageNumber=1`,并补齐最小可观测性,便于区分 `pdf_native` 与 `image_native` 调用模式。","1) 真实 PDF 发票经应用链路不再因缺少 PDF 参数而报 `FailedOperation.ImageDecodeFailed`;2) 不新增数据库 schema 与前端人工步骤;3) OCR 失败时保留业务可读错误,便于后续 live 报告区分问题类型。","命令:`cd server && npm run prisma:validate`;`cd server && node --check src/services/ocr/tencent.js`;`cd server && node --check src/services/ocr/index.js`;`cd server && node --check src/jobs/ocrJob.js`。业务:使用旧项目 `/home/shunli/shenzhou-business-suite/.env` 的腾讯凭证以运行时注入方式启动本地服务,上传真实 PDF 发票,验证自动 OCR 后进入可绑定或给出明确失败原因。","manual|playwright","DONE","DONE","DONE","server/src/jobs/ocrJob.js|server/src/services/ocr/index.js|server/src/services/ocr/tencent.js","[]","已完成:补齐 PDF 调用参数、支持 `VatInvoiceInfos` 返回结构归一化、记录 `pdf_native` / `image_native` 调用模式,并在干净本地 trialrun DB `hyb_oa_manual_trialrun_20260429093000` 上以真实 PDF 发票验证通过。2026-04-29 已再通过 live 单张 + batch Playwright 复跑验证主链路闭环。默认策略仍为 `PDF first`,不引入前端默认转图;不把真实腾讯密钥写入仓库。回滚路径:恢复为仅图片参数调用。"
"A2","Live OCR 单张与批量复测","在 A1 基础上重跑单张与批量真实票样的 Playwright 辅助复核,确认 `上传 -> OCR -> 可绑定` 主链路在真实腾讯环境下能稳定闭环,并更新报告。","1) 用户提供的 PDF 发票至少 1 张经 live 链路成功识别;2) 批量脚本能输出每张票的成功/失败状态与原因;3) 报告中不再把当前问题归因到 `SecretIdNotFound` 或缺 PDF 参数。","命令:`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=http://127.0.0.1:<port> npx playwright test tests/e2e/manual/live-invoice-ocr.spec.ts --workers=1 --reporter=list`;`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 E2E_BASE_URL=http://127.0.0.1:<port> npx playwright test tests/e2e/manual/live-invoice-ocr-batch.spec.ts --workers=1 --reporter=list`。业务:验证真实 PDF 上传后自动 OCR、进入 available、可绑定到报销单。","playwright|manual","DOING","TODO","TODO","client/tests/e2e/manual/live-invoice-ocr.spec.ts|client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts|artifacts/r70/live-ocr-batch-report.md","[""A1""]","进展:单张 live 业务链路已成功跑通;batch 业务结果也已成功进入 `available` 并回填报告。当前剩余问题是本地 Playwright runner 在 reporter 收尾阶段存在退出挂起,因此仍保留 `DOING`,后续需稳定 batch 辅助脚本收尾。腾讯凭证继续从旧项目运行时注入,优先使用已验证可用的 `/home/shunli/shenzhou-business-suite/.env`;`.env.local` 已知无效,不再作为默认主候选。" "A2","Live OCR 单张与批量复测","在 A1 基础上重跑单张与批量真实票样的 Playwright 辅助复核,确认 `上传 -> OCR -> 可绑定` 主链路在真实腾讯环境下能稳定闭环,并更新报告。","1) 用户提供的 PDF 发票至少 1 张经 live 链路成功识别;2) 批量脚本能输出每张票的成功/失败状态与原因;3) 报告中不再把当前问题归因到 `SecretIdNotFound` 或缺 PDF 参数。","命令:`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=http://127.0.0.1:<port> npx playwright test tests/e2e/manual/live-invoice-ocr.spec.ts --workers=1 --reporter=list`;`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 E2E_BASE_URL=http://127.0.0.1:<port> npx playwright test tests/e2e/manual/live-invoice-ocr-batch.spec.ts --workers=1 --reporter=list`。业务:验证真实 PDF 上传后自动 OCR、进入 available、可绑定到报销单。","playwright|manual","DONE","DONE","DONE","client/tests/e2e/manual/live-invoice-ocr.spec.ts|client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts|artifacts/r70/live-ocr-batch-report.md","[""A1""]","2026-04-29 在 `http://127.0.0.1:3001` 上复跑通过:单张 `live-invoice-ocr.spec.ts` 1 passed (26.2s),batch `live-invoice-ocr-batch.spec.ts` 1 passed (14.1s),runner 正常退出;最新 batch 报告已回填 `artifacts/r70/live-ocr-batch-report.md`。腾讯凭证继续从旧项目运行时注入,优先使用已验证可用的 `/home/shunli/shenzhou-business-suite/.env`;`.env.local` 已知无效,不再作为默认主候选。"
"A3","覆盖矩阵与试运行结论回填","将 R77 的实现结果同步回填到覆盖矩阵、试运行报告与当前合同,明确 OCR 域是否已经达到可试运行标准,以及剩余外部专项边界。","1) coverage matrix、manual trialrun report 与 R77 CSV 结论一致;2) 能明确回答报销/票据/OCR 域是否已具备试运行条件;3) 企微、HTTPS、多角色并发仍保持在外部专项,不与 R77 OCR 收口混淆。","业务:汇总 A1-A2 结果,回填 `artifacts/r75/coverage-matrix.csv`、`artifacts/r70/manual-trialrun-report.md` 与本合同状态;必要时补充 checklist 中与 live OCR 相关的操作说明。","manual","DOING","TODO","TODO","artifacts/r75/coverage-matrix.csv|artifacts/r70/manual-trialrun-report.md|artifacts/r70/manual-trialrun-checklist.md|issues/2026-04-29_09-19-07-r77-ocr-pdf-first.csv","[""A2""]","已同步更新 live OCR 报告、coverage matrix 与 manual trialrun report,把旧的 `SecretIdNotFound` / `ImageDecodeFailed` 结论替换为当前真实成功路径。若 A2 后续仅剩 runner 收尾问题,则 R77 不再扩展企微、HTTPS、并发验证范围;这些项继续留在 R76/R78 外部专项。" "A3","覆盖矩阵与试运行结论回填","将 R77 的实现结果同步回填到覆盖矩阵、试运行报告与当前合同,明确 OCR 域是否已经达到可试运行标准,以及剩余外部专项边界。","1) coverage matrix、manual trialrun report 与 R77 CSV 结论一致;2) 能明确回答报销/票据/OCR 域是否已具备试运行条件;3) 企微、HTTPS、多角色并发仍保持在外部专项,不与 R77 OCR 收口混淆。","业务:汇总 A1-A2 结果,回填 `artifacts/r75/coverage-matrix.csv`、`artifacts/r70/manual-trialrun-report.md` 与本合同状态;必要时补充 checklist 中与 live OCR 相关的操作说明。","manual","DONE","DONE","DONE","artifacts/r75/coverage-matrix.csv|artifacts/r70/manual-trialrun-report.md|artifacts/r70/manual-trialrun-checklist.md|issues/2026-04-29_09-19-07-r77-ocr-pdf-first.csv","[""A2""]","已同步更新 live OCR 报告、coverage matrix、manual trialrun report 与 checklist。当前结论:员工侧 `上传 -> OCR -> available -> 绑定 -> 提交报销` 主链路已具备本地试运行条件;企微、HTTPS、多角色并发与财务支付后链路仍保持外部/后续专项,不与 R77 OCR 收口混淆。"
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 A1 服务端 OCR PDF 感知修复 让 invoice_pool OCR job 按 `mime_type` 区分 PDF 与图片:图片继续走当前 `ImageBase64` 路径;PDF 调腾讯 `VatInvoiceOCR` 时显式传 `IsPdf=true` 与 `PdfPageNumber=1`,并补齐最小可观测性,便于区分 `pdf_native` 与 `image_native` 调用模式。 1) 真实 PDF 发票经应用链路不再因缺少 PDF 参数而报 `FailedOperation.ImageDecodeFailed`;2) 不新增数据库 schema 与前端人工步骤;3) OCR 失败时保留业务可读错误,便于后续 live 报告区分问题类型。 命令:`cd server && npm run prisma:validate`;`cd server && node --check src/services/ocr/tencent.js`;`cd server && node --check src/services/ocr/index.js`;`cd server && node --check src/jobs/ocrJob.js`。业务:使用旧项目 `/home/shunli/shenzhou-business-suite/.env` 的腾讯凭证以运行时注入方式启动本地服务,上传真实 PDF 发票,验证自动 OCR 后进入可绑定或给出明确失败原因。 manual|playwright DONE DONE TODO DONE server/src/jobs/ocrJob.js|server/src/services/ocr/index.js|server/src/services/ocr/tencent.js [] 已完成:补齐 PDF 调用参数、支持 `VatInvoiceInfos` 返回结构归一化、记录 `pdf_native` / `image_native` 调用模式,并在干净本地 trialrun DB `hyb_oa_manual_trialrun_20260429093000` 上以真实 PDF 发票验证通过。默认策略仍为 `PDF first`,不引入前端默认转图;不把真实腾讯密钥写入仓库。回滚路径:恢复为仅图片参数调用。 已完成:补齐 PDF 调用参数、支持 `VatInvoiceInfos` 返回结构归一化、记录 `pdf_native` / `image_native` 调用模式,并在干净本地 trialrun DB `hyb_oa_manual_trialrun_20260429093000` 上以真实 PDF 发票验证通过。2026-04-29 已再通过 live 单张 + batch Playwright 复跑验证主链路闭环。默认策略仍为 `PDF first`,不引入前端默认转图;不把真实腾讯密钥写入仓库。回滚路径:恢复为仅图片参数调用。
3 A2 Live OCR 单张与批量复测 在 A1 基础上重跑单张与批量真实票样的 Playwright 辅助复核,确认 `上传 -> OCR -> 可绑定` 主链路在真实腾讯环境下能稳定闭环,并更新报告。 1) 用户提供的 PDF 发票至少 1 张经 live 链路成功识别;2) 批量脚本能输出每张票的成功/失败状态与原因;3) 报告中不再把当前问题归因到 `SecretIdNotFound` 或缺 PDF 参数。 命令:`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_FILE=/home/shunli/Projects/hyb-oa/artifacts/北京悦海堂餐饮管理有限公司_发票金额1683.00元.pdf E2E_BASE_URL=http://127.0.0.1:<port> npx playwright test tests/e2e/manual/live-invoice-ocr.spec.ts --workers=1 --reporter=list`;`cd client && PLAYWRIGHT_MANUAL=1 PLAYWRIGHT_OCR_LIVE=1 PLAYWRIGHT_OCR_LIVE_BATCH=1 E2E_BASE_URL=http://127.0.0.1:<port> npx playwright test tests/e2e/manual/live-invoice-ocr-batch.spec.ts --workers=1 --reporter=list`。业务:验证真实 PDF 上传后自动 OCR、进入 available、可绑定到报销单。 playwright|manual DOING DONE TODO DONE TODO DONE client/tests/e2e/manual/live-invoice-ocr.spec.ts|client/tests/e2e/manual/live-invoice-ocr-batch.spec.ts|artifacts/r70/live-ocr-batch-report.md ["A1"] 进展:单张 live 业务链路已成功跑通;batch 业务结果也已成功进入 `available` 并回填报告。当前剩余问题是本地 Playwright runner 在 reporter 收尾阶段存在退出挂起,因此仍保留 `DOING`,后续需稳定 batch 辅助脚本收尾。腾讯凭证继续从旧项目运行时注入,优先使用已验证可用的 `/home/shunli/shenzhou-business-suite/.env`;`.env.local` 已知无效,不再作为默认主候选。 2026-04-29 在 `http://127.0.0.1:3001` 上复跑通过:单张 `live-invoice-ocr.spec.ts` 1 passed (26.2s),batch `live-invoice-ocr-batch.spec.ts` 1 passed (14.1s),runner 正常退出;最新 batch 报告已回填 `artifacts/r70/live-ocr-batch-report.md`。腾讯凭证继续从旧项目运行时注入,优先使用已验证可用的 `/home/shunli/shenzhou-business-suite/.env`;`.env.local` 已知无效,不再作为默认主候选。
4 A3 覆盖矩阵与试运行结论回填 将 R77 的实现结果同步回填到覆盖矩阵、试运行报告与当前合同,明确 OCR 域是否已经达到可试运行标准,以及剩余外部专项边界。 1) coverage matrix、manual trialrun report 与 R77 CSV 结论一致;2) 能明确回答报销/票据/OCR 域是否已具备试运行条件;3) 企微、HTTPS、多角色并发仍保持在外部专项,不与 R77 OCR 收口混淆。 业务:汇总 A1-A2 结果,回填 `artifacts/r75/coverage-matrix.csv`、`artifacts/r70/manual-trialrun-report.md` 与本合同状态;必要时补充 checklist 中与 live OCR 相关的操作说明。 manual DOING DONE TODO DONE TODO DONE artifacts/r75/coverage-matrix.csv|artifacts/r70/manual-trialrun-report.md|artifacts/r70/manual-trialrun-checklist.md|issues/2026-04-29_09-19-07-r77-ocr-pdf-first.csv ["A2"] 已同步更新 live OCR 报告、coverage matrix 与 manual trialrun report,把旧的 `SecretIdNotFound` / `ImageDecodeFailed` 结论替换为当前真实成功路径。若 A2 后续仅剩 runner 收尾问题,则 R77 不再扩展企微、HTTPS、并发验证范围;这些项继续留在 R76/R78 外部专项。 已同步更新 live OCR 报告、coverage matrix、manual trialrun report 与 checklist。当前结论:员工侧 `上传 -> OCR -> available -> 绑定 -> 提交报销` 主链路已具备本地试运行条件;企微、HTTPS、多角色并发与财务支付后链路仍保持外部/后续专项,不与 R77 OCR 收口混淆。