FINPROD ACCTH 启用付款批次并收口代账交接

这个提交包含在:
2026-05-17 12:01:53 +08:00
父节点 426a96816a
当前提交 a3a4a861c7
共修改 8 个文件,包含 395 行新增和 20 行删除
@@ -0,0 +1,9 @@
"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。"
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 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。
3 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。
4 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;未改业务运行时代码,未重新部署。
5 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 外。
6 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 审计断言通过。
7 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,真机仍仅作为后续入口/免登/查看差异确认。
8 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。
9 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。
@@ -0,0 +1,7 @@
"ID","Title","Description","Acceptance","Test_Method","Tools","Dev_Status","Review1_Status","Regression_Status","Files","Dependencies","Notes"
"ACCTH-0","ACCOUNTING-HANDOFF-V1 合同建档","建立月度代账交接 SOP 合同;业务口径为 OA 内审批/台账/付款批次 + 银行对公付款回单 + 月度代账人工交接,不做银行流水自动导入。","1) CSV 校验通过;2) 不开发银行流水导入、不接 ERP、不接真实支付接口;3) OA 侧固定交接资料范围;4) 银行侧原始流水和回单由出纳从银行渠道导出;5) 不提交真实银行回单或隐私导出内容。","受影响流程:FIN-PROD-ENABLE -> 月度 AP/报销/票据/付款批次/审计资料整理 -> 代账人工核对;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-17_11-40-48-accounting-handoff-v1.csv;人工核对交接边界。","python3|manual","DONE","DONE","DONE","issues/2026-05-17_11-40-48-accounting-handoff-v1.csv","[]","完成:CSV 初始校验通过;边界固定为月度人工代账交接,不开发银行流水导入,不接 ERP/真实支付,不保存真实银行回单或隐私导出内容到仓库。"
"ACCTH-1","现有导出与回单附件能力只读核对","核对 AP 台账导出、报销导出、票据中心导出、付款批次清单、银行回单附件清单和审计日志导出的现有能力与权限。","1) AP 台账导出存在且 FINPROD 验证 200;2) 报销、票据、审计导出能力存在或记录缺口;3) 付款批次回单附件可按批次列表/下载;4) 不打印导出明细、不提交真实附件;5) 缺口仅记录,不顺手开发。","受影响流程:月度代账资料准备 -> OA 导出/清单 -> 银行侧资料人工核对;验证步骤:rg -n 'exports/(ap-operations|reimbursements|invoice|audit)|receipt-attachments|payment-batches' server/src/routes client/src docs;必要时用公网测试数据只读确认回单附件列表和导出 API 状态。","rg|manual|node","DONE","DONE","DONE","server/src/routes/exports.js|server/src/routes/paymentBatches.js|client/src|docs","[""ACCTH-0""]","完成:公网状态核对仅输出状态和字节数,不打印内容;付款批次清单 200,回单附件列表 200,回单下载 200,AP 导出 200,报销导出 200,票据中心导出 200,审计日志导出 200。"
"ACCTH-2","月度代账交接 SOP 回写","在既有文档中补充月度代账交接 SOP:出纳准备银行侧流水/回单原件,OA 导出 AP/报销/票据/付款批次/回单附件清单/审计日志,代账人工核对。","1) 优先更新既有文档,不新建综合规划文档;2) 写清月度资料、责任人、时间点、命名规则、隐私边界和异常处理;3) 明确 AP 台账不是银行流水;4) 明确不导入银行流水;5) 图片 OCR、ERP、真实支付接口仍冻结。","受影响流程:月末出纳整理 -> 代账接收 -> 人工核对 -> 异常回查 OA;验证步骤:审阅 docs/管理员手册.md 或现有运营手册;更新 docs/trialrun/人工试运行报告.md、docs/文档索引.md、docs/文档事实源状态矩阵.md 的状态摘要;git diff --check。","manual|git","DONE","DONE","DONE","docs/管理员手册.md|docs/trialrun/人工试运行报告.md|docs/文档索引.md|docs/文档事实源状态矩阵.md","[""ACCTH-1""]","完成:docs/管理员手册.md 新增正式财务闭环与代账交接 SOP;索引、事实源矩阵和人工试运行报告已同步 FINPROD/ACCTH 状态;明确 AP 台账不是银行流水,银行流水不导入 OA,ERP/真实支付/图片 OCR 继续冻结。"
"ACCTH-3","代账交接样例清单","基于 FINPROD 或预启用测试数据生成一组脱敏样例清单,证明资料项能从 OA 和银行侧分工获得。","1) 样例只包含月份、资料项、来源、负责人、状态、脱敏 ID 或数量;2) 不包含真实银行账号、完整票据号码、税号、手机号、导出明细或回单原件;3) 记录 FINPROD 测试报销/付款批次的脱敏 formNumber 或报告路径;4) 标明银行侧资料由出纳线下导出。","受影响流程:测试月份资料核对 -> 代账交接清单 -> 异常项回查;验证步骤:阅读 FINPROD live-result.json 和既有 LDF/PRELAUNCH 报告,只摘录 formNumber、状态和报告路径;不得复制导出内容。","manual|node","DONE","DONE","DONE","artifacts/qa-flow|docs/trialrun/人工试运行报告.md","[""ACCTH-2""]","完成:样例使用 FINPROD 脱敏证据,formNumber=BX-20260517-0026,报告 artifacts/qa-flow/fin-prod-enable-20260517-114731;只记录状态和报告路径,不复制导出内容或银行回单原件。"
"ACCTH-4","一键交接包决策","判断现有导出和 SOP 是否足够支撑代账交接;若足够则不开发;若需要一键 zip,另建实现合同。","1) 结论为 NO_BUILD_NEEDED 或 GO_TO_PACKAGE_CONTRACT;2) 若 NO_BUILD_NEEDED,说明现有导出+银行侧资料足够;3) 若 GO_TO_PACKAGE_CONTRACT,列出包内文件、权限、脱敏、审计和下载回滚要求;4) 不在本合同临时开发 zip 功能。","受影响流程:月度代账交接效率评估 -> 是否需要一键包;验证步骤:结合 ACCTH-1/2/3 结论人工判断并写入 CSV Notes。","manual","DONE","DONE","DONE","issues/2026-05-17_11-40-48-accounting-handoff-v1.csv","[""ACCTH-3""]","完成:结论 NO_BUILD_NEEDED;现有 OA 导出 + 付款批次回单附件 + 银行侧出纳线下资料足够支撑代账人工核对;一键 zip 交接包不在本轮开发,如代账方提出固定格式再另建合同。"
"ACCTH-5","收口回填与提交","回填 ACCTH CSV、索引、事实源矩阵和人工试运行报告;与 FINPROD 一并或分批提交中文 commit。","1) CSV 状态按证据回填;2) validate、audit-docs、rg、git diff --check 通过;3) 文档明确代账交接边界和冻结项;4) 中文 commit 引用 ACCTH;5) 给出后续 Go/No-Go 摘要。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-17_11-40-48-accounting-handoff-v1.csv;node scripts/qa/audit-docs.mjs --check-registry;rg -n 'ACCTH|ACCOUNTING-HANDOFF|代账|银行回单|AP 台账|银行流水|payment_batch_v1' docs issues;git diff --check;git status --short。","python3|node|rg|git","DONE","DONE","DONE","issues/2026-05-17_11-40-48-accounting-handoff-v1.csv|docs","[""ACCTH-4""]","完成:ACCTH CSV/docs 已回填;validate PASS,audit-docs errors=0 warnings=1(既有 unregistered docs),rg 关键词核对完成,git diff --check PASS;结论 NO_BUILD_NEEDED,正式银行付款制度不由系统自动执行。"
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 ACCTH-0 ACCOUNTING-HANDOFF-V1 合同建档 建立月度代账交接 SOP 合同;业务口径为 OA 内审批/台账/付款批次 + 银行对公付款回单 + 月度代账人工交接,不做银行流水自动导入。 1) CSV 校验通过;2) 不开发银行流水导入、不接 ERP、不接真实支付接口;3) OA 侧固定交接资料范围;4) 银行侧原始流水和回单由出纳从银行渠道导出;5) 不提交真实银行回单或隐私导出内容。 受影响流程:FIN-PROD-ENABLE -> 月度 AP/报销/票据/付款批次/审计资料整理 -> 代账人工核对;验证步骤:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-17_11-40-48-accounting-handoff-v1.csv;人工核对交接边界。 python3|manual DONE DONE DONE issues/2026-05-17_11-40-48-accounting-handoff-v1.csv [] 完成:CSV 初始校验通过;边界固定为月度人工代账交接,不开发银行流水导入,不接 ERP/真实支付,不保存真实银行回单或隐私导出内容到仓库。
3 ACCTH-1 现有导出与回单附件能力只读核对 核对 AP 台账导出、报销导出、票据中心导出、付款批次清单、银行回单附件清单和审计日志导出的现有能力与权限。 1) AP 台账导出存在且 FINPROD 验证 200;2) 报销、票据、审计导出能力存在或记录缺口;3) 付款批次回单附件可按批次列表/下载;4) 不打印导出明细、不提交真实附件;5) 缺口仅记录,不顺手开发。 受影响流程:月度代账资料准备 -> OA 导出/清单 -> 银行侧资料人工核对;验证步骤:rg -n 'exports/(ap-operations|reimbursements|invoice|audit)|receipt-attachments|payment-batches' server/src/routes client/src docs;必要时用公网测试数据只读确认回单附件列表和导出 API 状态。 rg|manual|node DONE DONE DONE server/src/routes/exports.js|server/src/routes/paymentBatches.js|client/src|docs ["ACCTH-0"] 完成:公网状态核对仅输出状态和字节数,不打印内容;付款批次清单 200,回单附件列表 200,回单下载 200,AP 导出 200,报销导出 200,票据中心导出 200,审计日志导出 200。
4 ACCTH-2 月度代账交接 SOP 回写 在既有文档中补充月度代账交接 SOP:出纳准备银行侧流水/回单原件,OA 导出 AP/报销/票据/付款批次/回单附件清单/审计日志,代账人工核对。 1) 优先更新既有文档,不新建综合规划文档;2) 写清月度资料、责任人、时间点、命名规则、隐私边界和异常处理;3) 明确 AP 台账不是银行流水;4) 明确不导入银行流水;5) 图片 OCR、ERP、真实支付接口仍冻结。 受影响流程:月末出纳整理 -> 代账接收 -> 人工核对 -> 异常回查 OA;验证步骤:审阅 docs/管理员手册.md 或现有运营手册;更新 docs/trialrun/人工试运行报告.md、docs/文档索引.md、docs/文档事实源状态矩阵.md 的状态摘要;git diff --check。 manual|git DONE DONE DONE docs/管理员手册.md|docs/trialrun/人工试运行报告.md|docs/文档索引.md|docs/文档事实源状态矩阵.md ["ACCTH-1"] 完成:docs/管理员手册.md 新增正式财务闭环与代账交接 SOP;索引、事实源矩阵和人工试运行报告已同步 FINPROD/ACCTH 状态;明确 AP 台账不是银行流水,银行流水不导入 OA,ERP/真实支付/图片 OCR 继续冻结。
5 ACCTH-3 代账交接样例清单 基于 FINPROD 或预启用测试数据生成一组脱敏样例清单,证明资料项能从 OA 和银行侧分工获得。 1) 样例只包含月份、资料项、来源、负责人、状态、脱敏 ID 或数量;2) 不包含真实银行账号、完整票据号码、税号、手机号、导出明细或回单原件;3) 记录 FINPROD 测试报销/付款批次的脱敏 formNumber 或报告路径;4) 标明银行侧资料由出纳线下导出。 受影响流程:测试月份资料核对 -> 代账交接清单 -> 异常项回查;验证步骤:阅读 FINPROD live-result.json 和既有 LDF/PRELAUNCH 报告,只摘录 formNumber、状态和报告路径;不得复制导出内容。 manual|node DONE DONE DONE artifacts/qa-flow|docs/trialrun/人工试运行报告.md ["ACCTH-2"] 完成:样例使用 FINPROD 脱敏证据,formNumber=BX-20260517-0026,报告 artifacts/qa-flow/fin-prod-enable-20260517-114731;只记录状态和报告路径,不复制导出内容或银行回单原件。
6 ACCTH-4 一键交接包决策 判断现有导出和 SOP 是否足够支撑代账交接;若足够则不开发;若需要一键 zip,另建实现合同。 1) 结论为 NO_BUILD_NEEDED 或 GO_TO_PACKAGE_CONTRACT;2) 若 NO_BUILD_NEEDED,说明现有导出+银行侧资料足够;3) 若 GO_TO_PACKAGE_CONTRACT,列出包内文件、权限、脱敏、审计和下载回滚要求;4) 不在本合同临时开发 zip 功能。 受影响流程:月度代账交接效率评估 -> 是否需要一键包;验证步骤:结合 ACCTH-1/2/3 结论人工判断并写入 CSV Notes。 manual DONE DONE DONE issues/2026-05-17_11-40-48-accounting-handoff-v1.csv ["ACCTH-3"] 完成:结论 NO_BUILD_NEEDED;现有 OA 导出 + 付款批次回单附件 + 银行侧出纳线下资料足够支撑代账人工核对;一键 zip 交接包不在本轮开发,如代账方提出固定格式再另建合同。
7 ACCTH-5 收口回填与提交 回填 ACCTH CSV、索引、事实源矩阵和人工试运行报告;与 FINPROD 一并或分批提交中文 commit。 1) CSV 状态按证据回填;2) validate、audit-docs、rg、git diff --check 通过;3) 文档明确代账交接边界和冻结项;4) 中文 commit 引用 ACCTH;5) 给出后续 Go/No-Go 摘要。 流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-17_11-40-48-accounting-handoff-v1.csv;node scripts/qa/audit-docs.mjs --check-registry;rg -n 'ACCTH|ACCOUNTING-HANDOFF|代账|银行回单|AP 台账|银行流水|payment_batch_v1' docs issues;git diff --check;git status --short。 python3|node|rg|git DONE DONE DONE issues/2026-05-17_11-40-48-accounting-handoff-v1.csv|docs ["ACCTH-4"] 完成:ACCTH CSV/docs 已回填;validate PASS,audit-docs errors=0 warnings=1(既有 unregistered docs),rg 关键词核对完成,git diff --check PASS;结论 NO_BUILD_NEEDED,正式银行付款制度不由系统自动执行。