"ID","Title","Description","Acceptance","Test_Method","Tools","Dev_Status","Review1_Status","Regression_Status","Files","Dependencies","Notes" "FINPROD-0","FIN-PROD-ENABLE 合同建档","建立正式启用公网付款批次合同;基线为 426a968,CASHIER-VOUCHER-V1 已部署,目标是正式设置 payment_batch_v1=force_on 并完成 OA 内付款闭环验收。","1) CSV 校验通过;2) 本轮不新增 API/schema/UI;3) 使用公网现有测试账号和授权 PDF 样票;4) wangzhiling 作为出纳/付款执行口径,wangshunli 作为管理员复核和回滚决策人口径;5) 不接真实支付、不接 ERP、不开放图片 OCR、不导入银行流水、不重置数据库、不打印 secret。","受影响流程:CASHV 部署完成 -> FIN-PROD-ENABLE 正式常开准备;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-17_11-40-47-fin-prod-enable-payment-batch.csv;人工核对本轮边界和用户批准。","python3|manual","DONE","DONE","DONE","issues/2026-05-17_11-40-47-fin-prod-enable-payment-batch.csv","[]","完成:CSV 初始校验通过;用户已批准正式启用付款批次;本轮不新增业务 API/schema/UI,不接真实支付,不接 ERP,不开放图片 OCR;失败回滚路径为 payment_batch_v1 force_off。" "FINPROD-1","公网正式启用前置门禁","启用前确认公网健康、live smoke/PDF OCR 凭据可用、当前 payment_batch_v1 为关闭态、文档登记无新增阻断,且工作区没有未解释变更。","1) check-live-smoke-env --strict 通过;2) check-payment-batch-flag-off --json 通过或明确当前已关闭;3) audit-docs 仅允许既有 warning;4) git diff --check 通过;5) 不打印 env、cookie、PDF 路径或导出内容。","受影响流程:公网登录/凭据 -> 付款批次 flag-off 只读门禁 -> 文档门禁;验证步骤:set -a && source ~/.hyb-oa/live-smoke.env && set +a;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com node scripts/qa/check-live-smoke-env.mjs --strict;LIVE_SMOKE_BASE_URL=https://oa.hyinda.com node scripts/qa/check-payment-batch-flag-off.mjs --json;node scripts/qa/audit-docs.mjs --check-registry;git diff --check。","node|bash|git","DONE","DONE","DONE","scripts/qa/check-live-smoke-env.mjs|scripts/qa/check-payment-batch-flag-off.mjs|docs","[""FINPROD-0""]","完成:check-live-smoke-env --strict PASS,publicReady/liveSmokeReady/liveOcrReady=true;pre flag-off PASS,finance/employee/admin 均为 409 payment_batch_v1_disabled / flag_force_off;audit-docs errors=0 warnings=1 为既有未登记文档 warning;git diff --check PASS。" "FINPROD-2","正式启用 QA runner 准备","复用或新增 QA-only runner,使公网付款批次验收通过后可保持 payment_batch_v1=force_on;默认失败时仍恢复 force_off;不改业务运行时代码。","1) runner 必须要求 P2_FIN_LIVE_APPROVED=1 和 FIN_PROD_ENABLE_APPROVED=1;2) PASS 时最终检查 payment_batch_v1=force_on;3) FAIL 时强制恢复 force_off;4) erp_sync 全程 force_off;5) runner 报告只记录脱敏 ID、状态、HTTP 结果和审计动作。","受影响流程:公网付款批次正式启用自动化 -> 成功保持开启/失败回滚;验证步骤:node --check scripts/qa/check-payment-batch-flag-off.mjs;bash -n scripts/qa/run-fin-prod-enable-window.sh;cd client && npm run typecheck && npm run build;如修改 Playwright spec,执行对应 typecheck。","node|bash|npm|playwright","DONE","DONE","DONE","scripts/qa/run-fin-prod-enable-window.sh|client/tests/e2e/manual/p2-fin-live-payment-batch.spec.ts","[""FINPROD-1""]","完成:新增 QA-only run-fin-prod-enable-window.sh;p2-fin-live spec 增加显式 force_on final mode,默认短窗口仍 force_off;bash -n PASS,node --check check-payment-batch-flag-off PASS,client typecheck/build PASS;未改业务运行时代码,未重新部署。" "FINPROD-3","公网付款批次正式闭环验收","在公网正式开启 payment_batch_v1 后,用带 FINPROD marker 的报销完成审批、出纳建批次、管理员/复核人复核、出纳上传银行回单、执行 OA 已付款标记。","1) 新建或选用专用测试报销并审批到 approved;2) payment_batch_v1 更新为 force_on 且 erp_sync 仍为 force_off;3) finance/cashier 可创建和执行付款批次;4) 管理员/复核人复核审计可查;5) 银行渠道无回单执行被 409 阻断;6) 上传回单后执行成功,报销 paid、票据 archived、AP 台账 paid。","受影响流程:报销提交 -> 审批 -> PDF 发票绑定 -> 付款批次创建 -> 复核 -> 上传银行回单 -> 执行 OA 已付款;验证步骤:FIN_PROD_ENABLE_APPROVED=1 P2_FIN_LIVE_APPROVED=1 QA_ISSUE_ID=FINPROD P2_FIN_LIVE_MARKER_PREFIX=FINPROD LIVE_SMOKE_BASE_URL=https://oa.hyinda.com bash scripts/qa/run-fin-prod-enable-window.sh。","bash|playwright","DONE","DONE","DONE","scripts/qa/run-fin-prod-enable-window.sh|client/tests/e2e/manual/p2-fin-live-payment-batch.spec.ts|artifacts/qa-flow","[""FINPROD-2""]","完成:报告 artifacts/qa-flow/fin-prod-enable-20260517-114731;测试报销 BX-20260517-0026 审批后进入付款批次;无回单执行 409;上传/下载银行回单后执行成功;报销 paid、票据 archived、AP 台账 paid;真实银行付款仍在 OA 外。" "FINPROD-4","权限、AP 导出与审计核验","核验付款批次常开后,员工、审批人和 admin-only 不越权;AP 导出成功;关键审计动作可查且不打印导出内容。","1) employee/manager 创建付款批次被拒绝;2) admin-only 若非 wildcard 应拒绝创建/执行,若为 wildcard 记录 SKIP_WILDCARD_SUPERADMIN;3) AP 导出返回 200;4) FEATURE_FLAG_UPDATED、PAYMENT_BATCH_CREATED、PAYMENT_BATCH_REVIEWED、PAYMENT_BATCH_RECEIPT_UPLOADED、PAYMENT_BATCH_EXECUTED、REIMBURSEMENT_PAYMENT_MARKED、EXPORT_AP_OPERATIONS 审计可查;5) 报告不包含导出明细。","受影响流程:权限边界 -> AP 导出 -> 审计追踪;验证步骤:同 FINPROD-3 runner 内置权限、导出和审计断言;必要时用 admin 只读审计列表核验动作,不下载或打印完整导出内容。","playwright|manual","DONE","DONE","DONE","client/tests/e2e/manual/p2-fin-live-payment-batch.spec.ts|server/src/routes/exports.js|server/src/routes/audit.js","[""FINPROD-3""]","完成:employee/manager 创建付款批次均 403;admin 为 wildcard superadmin,admin-only 负例按 SKIP_WILDCARD_SUPERADMIN 记录;AP 导出 200;FEATURE_FLAG_UPDATED、PAYMENT_BATCH_CREATED/REVIEWED/RECEIPT_UPLOADED/EXECUTED、REIMBURSEMENT_PAYMENT_MARKED、EXPORT_AP_OPERATIONS 审计断言通过。" "FINPROD-5","公网移动与企业微信自动化复检","付款批次正式启用后复跑公网移动和企业微信 UA/渲染矩阵,确认常开状态不影响移动入口和查看体验。","1) dg7-mobile-information-dedupe 通过;2) r124-mobile-entry-matrix 通过;3) r6-wecom-mobile-rendering-hardening 通过;4) 真机仅保留入口/免登/查看确认,不在手机执行付款动作。","受影响流程:公网移动首页/业务入口/通知/企业微信 UA 查看;验证步骤:cd client && E2E_BASE_URL=https://oa.hyinda.com npx playwright test tests/e2e/dg7-mobile-information-dedupe.spec.ts tests/e2e/r124-mobile-entry-matrix.spec.ts tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts --workers=1 --reporter=list。","playwright","DONE","DONE","DONE","client/tests/e2e/dg7-mobile-information-dedupe.spec.ts|client/tests/e2e/r124-mobile-entry-matrix.spec.ts|client/tests/e2e/r6-wecom-mobile-rendering-hardening.spec.ts","[""FINPROD-3""]","完成:公网移动矩阵 6 passed;企业微信渲染矩阵 8 passed;自动化覆盖 320/360/375/390/393/414/430,真机仍仅作为后续入口/免登/查看差异确认。" "FINPROD-6","最终 flag 状态确认","验收通过后保持 payment_batch_v1=force_on;若 FINPROD-3/4/5 任一阻断,则恢复 force_off 并记录原因;erp_sync 必须保持 force_off。","1) PASS 时 payment_batch_v1 effectiveEnabled=true 且 overrideMode=force_on;2) FAIL 时 payment_batch_v1 恢复 force_off;3) erp_sync effectiveEnabled=false;4) 记录最终状态、报告目录和测试报销 formNumber;5) 不停留在未记录状态。","受影响流程:付款批次正式常开决策 -> 回滚或保持开启;验证步骤:runner 输出 live-result.json;必要时 admin 只读 GET /api/system/feature-flags 核对 payment_batch_v1 与 erp_sync;不打印 token/env。","node|playwright|manual","DONE","DONE","DONE","scripts/qa/run-fin-prod-enable-window.sh|artifacts/qa-flow","[""FINPROD-4"",""FINPROD-5""]","完成:final-force-on-check PASS;最终 payment_batch_v1 override=force_on effective=true reason=flag_force_on_global;erp_sync override=force_off effective=false reason=flag_force_off;报告 artifacts/qa-flow/fin-prod-enable-20260517-114731。" "FINPROD-7","收口回填与提交","回填 FINPROD CSV、文档索引、事实源矩阵和人工试运行报告,提交中文 commit。","1) CSV 状态按证据回填;2) docs/文档索引.md、docs/文档事实源状态矩阵.md、docs/trialrun/人工试运行报告.md 更新;3) validate、audit-docs、rg、git diff --check 通过;4) 中文 commit 引用 FINPROD;5) 最终说明公网 URL、部署状态、/ready、最终 flag 状态。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-17_11-40-47-fin-prod-enable-payment-batch.csv;node scripts/qa/audit-docs.mjs --check-registry;rg -n 'FINPROD|FIN-PROD-ENABLE|payment_batch_v1|银行回单|EXPORT_AP_OPERATIONS|PAYMENT_BATCH' docs issues scripts client/tests;git diff --check;git status --short。","python3|node|rg|git","DONE","DONE","DONE","issues/2026-05-17_11-40-47-fin-prod-enable-payment-batch.csv|docs/文档索引.md|docs/文档事实源状态矩阵.md|docs/trialrun/人工试运行报告.md","[""FINPROD-6""]","完成:FINPROD CSV/docs 已回填;validate PASS,audit-docs errors=0 warnings=1(既有 unregistered docs),rg 关键词核对完成,git diff --check PASS;公网 https://oa.hyinda.com 未重新部署业务代码,最终 payment_batch_v1=force_on、erp_sync=force_off。"