P2FIN 收口付款批次决策准备

这个提交包含在:
2026-05-16 09:09:03 +08:00
父节点 40abbc3fbf
当前提交 f3492b2463
共修改 4 个文件,包含 19 行新增和 5 行删除
+5 -2
查看文件
@@ -18,6 +18,7 @@ DCL7 已删除本文件中 R70-R91 的长流水历史,避免旧环境、旧开
- 2026-05-16 已建立并细化 QAOPS9 上线硬化连续合同和 P2D 功能决策合同;QAOPS9 固定隔离本地业务流与公网 flag-off 证据分离,P2D 固定 `GO_TO_CONTRACT`、`HOLD_FOR_PREREQ`、`FREEZE` 三类结论;本次只更新 Issue CSV、既有事实源和 QA 脚本过滤参数,未改业务代码、API/schema、feature flag 或前端功能,未部署,公网运行状态不变。
- 2026-05-16 QAOPS9 已完成隔离核心业务流稳定化、恢复演练 dry-run checklist、公网 live smoke、真实 OCR 和公网移动矩阵复核;`pending OCR` 因本地未注入 `DATABASE_URL` 继续按规则记非阻断 `SKIP`。P2D 已完成分流:`P2-ORG` 只读巡检可进入独立合同,其余 P2 候选先保持前置条件等待。
- 2026-05-16 P2D 旧口径已修正:live smoke 凭据、员工 OCR 凭据和授权 PDF 样票已具备,不再作为 P2-FIN/P2-OCR 的 HOLD 原因。P2-ORG 已完成只读巡检:当前连接数据源 high=0、medium=0、low=9,建议 `NO_WRITE_FIX_NEEDED`;低风险项为 CEO/root 无直属主管观察 1 和 active 员工无企业微信绑定 8。
- 2026-05-16 P2-FIN-DECISION 已完成付款批次启用决策准备:只读核对代码/flag/空态、角色账号、导出字段、审计事件、公网 readiness 和 flag off 回滚口径,结论为 `GO_TO_IMPLEMENT`,后续可另建 `P2-FIN-V1`;当前仍不启用 `payment_batch_v1`、不写付款批次业务数据、不部署。
## 关键证据索引
@@ -43,6 +44,7 @@ DCL7 已删除本文件中 R70-R91 的长流水历史,避免旧环境、旧开
| QAOPS9 | 已收口:隔离核心业务流、恢复演练 dry-run、公网 live smoke、真实 OCR 和公网移动矩阵均已形成证据;`pending OCR` 缺 `DATABASE_URL` 为非阻断 SKIP | `issues/2026-05-16_00-19-20-qaops9-release-hardening.csv`、`artifacts/qa-flow/business-flow-20260516-012215/summary.txt`、`artifacts/qa-flow/live-smoke-readiness-20260516-013727/summary.json` |
| P2D | 已完成决策分流:`P2-ORG` 只读巡检可进入独立合同;付款批次、图片 OCR、UX8、审批通知和轻业务增强均需前置条件;冻结项继续冻结 | `issues/2026-05-16_00-19-21-p2-decision-followup.csv` |
| P2-ORG | 已收口:组织账号主数据只读巡检完成,高/中风险为 0,低风险观察 9,不需要写修复合同 | `issues/2026-05-16_02-04-27-p2-org-readonly-master-data-audit.csv`、`artifacts/qa-flow/p2-org-readonly-audit-20260516-020427/report.json` |
| P2-FIN-DECISION | 已收口:付款批次决策准备完成,结论 `GO_TO_IMPLEMENT`;后续进入单独 `P2-FIN-V1` 合同前仍需方案批准 | `issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv` |
## 当前门禁
@@ -58,6 +60,7 @@ DCL7 已删除本文件中 R70-R91 的长流水历史,避免旧环境、旧开
| QAOPS9 live readiness | 通过,含非阻断 pending OCR SKIP | `/ready`、WeCom config、public bundle 通过;公网 live smoke 3 passed,真实 OCR 1 passed;pending OCR 因本地未注入 `DATABASE_URL` 记录 SKIP,报告 `artifacts/qa-flow/live-smoke-readiness-20260516-013727/` |
| QAOPS9 公网移动矩阵 | 通过 | `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 --workers=1 --reporter=list`,6 passed |
| P2-ORG 只读巡检 | 通过,含低风险观察项 | `server/src/scripts/audit-org-master-data.js` 在 READ ONLY 事务中执行;当前连接数据源 high=0、medium=0、low=9,未输出手机号、邮箱、token 或企业微信真实标识,报告 `artifacts/qa-flow/p2-org-readonly-audit-20260516-020427/` |
| P2-FIN 决策准备 | 通过 | `LIVE_SMOKE_BASE_URL=https://oa.hyinda.com node scripts/qa/check-live-smoke-env.mjs` 显示 publicReady/liveSmokeReady/liveOcrReady 均为 true;只读核对付款批次 flag、权限、导出、审计和回滚口径;未执行付款批次业务写入 |
## R7EP / OPS8 / QAF8 / UX8 / P2T 预检推进
@@ -334,9 +337,9 @@ Go 结论边界:
- R7E 阶段验收通过,允许进入后续 P2 排序和上线硬化收口。
- PC 高风险动作确认由 Playwright 和视觉门禁验收,不再安排人工 PC 点击。
- 企业微信真机后续只保留消息、免登录、WebView 文件选择器和系统选择器这类真实环境差异项。
- 付款批次闭环已延期到 P2,不作为当前 R7E 阻断。
- 付款批次闭环已完成 P2-FIN 决策准备,后续只能进入单独 `P2-FIN-V1` 实现合同,不作为当前 R7E 阻断。
结论:当前可以关闭 `WF8-11`、`R7E-9`、`R7E-15`、`R7E-17`、`R7E-18`、`R7E-19`、`R7E-20`、`QAOPS8-17`、`QAOPS8-19`、`QAOPS8-20` 和 BIZ8 阶段流。`R7E-14` 已按付款批次延期到 P2 的变更口径收口;后续优先级为 QAOPS 上线硬化和测试数据稳定化、付款批次决策、图片 OCR 样票治理、组织主数据只读巡检、UX8 真机反馈。P2 功能开发必须另建或延续对应连续合同,本报告不启动新功能。
结论:当前可以关闭 `WF8-11`、`R7E-9`、`R7E-15`、`R7E-17`、`R7E-18`、`R7E-19`、`R7E-20`、`QAOPS8-17`、`QAOPS8-19`、`QAOPS8-20` 和 BIZ8 阶段流。`R7E-14` 已按付款批次延期到 P2 的变更口径收口;P2-FIN 决策准备已完成,后续优先级为 `P2-FIN-V1` 独立实现合同、图片 OCR 样票治理、UX8 真机反馈、审批通知和轻业务增强。P2 功能开发必须另建或延续对应连续合同,本报告不启动新功能。
## 历史恢复
+3 -2
查看文件
@@ -39,6 +39,7 @@
| `QAOPS9` | `issues/2026-05-16_00-19-20-qaops9-release-hardening.csv` | `EVIDENCE` | R7E 后上线硬化连续合同已收口;核心业务流、live smoke、真实 OCR、移动矩阵和恢复演练 dry-run 均有证据,未部署新 commit |
| `P2D` | `issues/2026-05-16_00-19-21-p2-decision-followup.csv` | `EVIDENCE` | P2 功能决策分流已完成:`P2-ORG` 只读巡检可进独立合同,其余 P2 候选保持 `HOLD_FOR_PREREQ`,冻结项继续冻结 |
| `P2-ORG` | `issues/2026-05-16_02-04-27-p2-org-readonly-master-data-audit.csv` | `EVIDENCE` | 组织账号主数据只读巡检已完成;当前连接数据源高/中风险为 0,仅有低风险观察项,不需要写修复合同 |
| `P2-FIN-DECISION` | `issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv` | `EVIDENCE` | 付款批次启用决策准备已完成,结论 `GO_TO_IMPLEMENT`;后续必须另建 `P2-FIN-V1` 实现合同,当前不启用 `payment_batch_v1` |
旧 Issue CSV 保留为历史审计证据:不删除、不批量回写、不移动到 `docs/archive/` 或其他归档目录。新连续合同如替代旧合同,只在新合同 `Notes` 或文档索引中说明 supersedes。
@@ -46,8 +47,8 @@
| Doc_ID | Path | Category | Authority | Status | Owner | Related_Issues | Evidence | Supersedes | Last_Audited | Audit_Method | Risk | Notes |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `IDX` | `docs/文档索引.md` | 入口索引 | 最高文档入口 | `CURRENT` | product/dev | `GOV8,QAOPS9,P2D,P2-ORG` | `rg` | none | 2026-05-16 | `node scripts/qa/audit-docs.mjs --check-registry` | medium | 判断当前该读什么 |
| `REG` | `docs/文档事实源状态矩阵.md` | 文档台账 | 文档分类和状态事实源 | `CURRENT` | product/dev | `GOV8,QAOPS9,P2D,P2-ORG` | `audit-docs` | none | 2026-05-16 | `audit-docs --check-registry` | medium | 判断文档权威性 |
| `IDX` | `docs/文档索引.md` | 入口索引 | 最高文档入口 | `CURRENT` | product/dev | `GOV8,QAOPS9,P2D,P2-ORG,P2-FIN-DECISION` | `rg` | none | 2026-05-16 | `node scripts/qa/audit-docs.mjs --check-registry` | medium | 判断当前该读什么 |
| `REG` | `docs/文档事实源状态矩阵.md` | 文档台账 | 文档分类和状态事实源 | `CURRENT` | product/dev | `GOV8,QAOPS9,P2D,P2-ORG,P2-FIN-DECISION` | `audit-docs` | none | 2026-05-16 | `audit-docs --check-registry` | medium | 判断文档权威性 |
| `PRD-MVP` | `docs/海音达OA-MVP需求规格说明书.md` | 需求事实源 | PRD 主事实源 | `CURRENT` | product | `REQ8,P2T,GOV8` | Issue CSV | `docs/requirements-specification.md` | 2026-05-13 | `rg` | high | 定义做什么、不做什么和验收口径 |
| `PRODUCT-SCOPE` | `docs/产品口径.md` | 需求事实源 | 产品边界事实源 | `CURRENT` | product | `REQ8,P2T` | `rg` | none | 2026-05-13 | `rg` | high | 记录已拍板产品边界 |
| `DESIGN-UI` | `docs/产品设计规则.md` | 设计事实源 | PC/移动/企业微信设计事实源 | `CURRENT` | design/frontend | `MIA7,MIF7,GOV8,DG8,DG9` | Playwright/视觉审查/DG8/DG9 | none | 2026-05-13 | `rg` | high | 页面改动必须读取;DG8 后飞书为主 UI/布局参考;DG9 后按页面分层和样板选型 |
+3 -1
查看文件
@@ -20,7 +20,7 @@
## 最近事实源链
R6 -> PC6 -> PA6 -> FL6 -> AP6 -> RI6 -> LP6 -> ME6/QG6 -> DG7/MRF7 -> MIA7 -> MIF7/MIF7T(公网部署与带凭据公网复检已收口) -> DG8 -> DG9 -> R7E -> FBA -> QAOPS9/P2D -> P2-ORG。
R6 -> PC6 -> PA6 -> FL6 -> AP6 -> RI6 -> LP6 -> ME6/QG6 -> DG7/MRF7 -> MIA7 -> MIF7/MIF7T(公网部署与带凭据公网复检已收口) -> DG8 -> DG9 -> R7E -> FBA -> QAOPS9/P2D -> P2-ORG -> P2-FIN-DECISION。
- R6、PC6、PA6、FL6、AP6、RI6、LP6 已完成并部署。
- ME6 自动化、公网视觉矩阵和 `ME6-3` 代表性企业微信真机门禁已完成。
@@ -33,6 +33,7 @@ R6 -> PC6 -> PA6 -> FL6 -> AP6 -> RI6 -> LP6 -> ME6/QG6 -> DG7/MRF7 -> MIA7 -> M
- QAOPS9 是 R7E 后上线硬化连续合同,优先处理公网业务流测试数据、live smoke 账号链路、恢复演练 dry-run 和 SLO/Go-No-Go 自动化增强;隔离本地业务流可使用临时库和测试开关,公网证据必须保持 flag-off 或 SKIP 可解释;不部署、不执行生产恢复、不重置数据库、不打印远端 env。
- P2D 是 P2 功能决策合同,只决定组织主数据、付款批次、图片 OCR、UX8、审批通知和轻业务增强是否进入独立开发合同;统一使用 `GO_TO_CONTRACT`、`HOLD_FOR_PREREQ`、`FREEZE` 三类结论,不新增 API/schema、feature flag 或前端功能。
- P2-ORG 是 P2D 后第一个执行合同,已完成组织账号主数据只读巡检;当前连接数据源下高/中风险为 0,低风险观察项为 CEO/root 无直属主管 1 和 active 员工无企业微信绑定 8;本轮不需要写修复合同。
- P2-FIN-DECISION 已完成付款批次启用决策准备,结论为 `GO_TO_IMPLEMENT`:可进入单独 `P2-FIN-V1` 实现合同;当前仍不启用 `payment_batch_v1`、不写付款批次业务数据、不部署。
## 当前活跃治理流
@@ -52,6 +53,7 @@ R6 -> PC6 -> PA6 -> FL6 -> AP6 -> RI6 -> LP6 -> ME6/QG6 -> DG7/MRF7 -> MIA7 -> M
| `QAOPS9` | `issues/2026-05-16_00-19-20-qaops9-release-hardening.csv` | 已收口:上线硬化证据完成 | 公网业务流测试数据稳定化、live smoke 账号链路、恢复演练 dry-run、SLO/Go-No-Go 自动化增强;隔离业务流与公网 flag-off 证据分离 | 不改业务需求、不部署、不执行生产恢复、不重置数据库、不打印远端 env |
| `P2D` | `issues/2026-05-16_00-19-21-p2-decision-followup.csv` | 已收口:P2 决策分流完成 | `P2-ORG` 只读巡检进入独立合同;付款批次、图片 OCR、UX8、审批通知、轻业务增强均 `HOLD_FOR_PREREQ`;冻结 ERP/AI/完整差旅/复杂 BPM/审批设计器/重预算/企业微信原生审批 | 不新增 API/schema/feature flag/UI;不启用付款批次或图片 OCR |
| `P2-ORG` | `issues/2026-05-16_02-04-27-p2-org-readonly-master-data-audit.csv` | 已收口:组织主数据只读巡检完成 | 主管链、停用审批人、角色持有人、admin-only、财务/admin 混授、企业微信绑定漂移的脱敏只读审计 | 不写生产账号数据、不执行 P2-ORG-FIX、不改 API/schema/UI、不部署 |
| `P2-FIN-DECISION` | `issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv` | 已收口:付款批次决策准备完成,结论 `GO_TO_IMPLEMENT` | 付款批次代码/flag/空态、角色账号矩阵、导出字段、审计事件、公网验收窗口和 flag off 回滚口径 | 不启用 `payment_batch_v1`、不写付款批次、不接真实支付、不写 ERP 实时凭证、不部署 |
旧 Issue CSV 不删除、不批量回写、不移动到归档目录。若新治理流替代旧合同,只在新 CSV 的 `Notes` 或本索引说明 supersedes,旧文件保留历史审计语义。
@@ -0,0 +1,8 @@
ID,Title,Description,Acceptance,Test_Method,Tools,Dev_Status,Review1_Status,Regression_Status,Files,Dependencies,Notes
"P2FIN-0","P2-FIN 决策合同建档","建立付款批次启用决策准备合同,只做启用条件、验收边界、回滚口径和后续实现合同准备,不启用 payment_batch_v1,不写业务代码,不执行付款批次业务写入。","1) CSV 校验通过;2) 范围限定 issues/docs 和只读源代码核对;3) 不新增 API/schema/UI/feature flag;4) 不部署;5) 输出 GO_TO_IMPLEMENT、HOLD_FOR_PREREQ 或 FREEZE。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv;人工核对本轮不改 server/src、client/src 业务代码,不启用 payment_batch_v1。","python3|manual","DONE","DONE","DONE","issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv","[]","2026-05-16 CSV 建档并校验通过;承接 P2D-2;P2-ORG high=0 medium=0,默认不启动 P2-ORG-FIX;回滚路径:删除本 CSV 和本轮既有文档状态回填,不影响运行环境。"
"P2FIN-1","现有付款批次代码与 flag 边界盘点","只读核对付款批次后端路由、AP 台账、导出、前端页面、移动空态、feature flag 和 E2E/单测覆盖,区分已有实现和当前启用边界。","1) 列出 payment_batch_v1 评估点和 flag_force_off 关闭语义;2) 确认 /payment-batches、/ap-operations、/exports/ap-operations 均受门禁或权限控制;3) 确认移动端仍只显示未启用空态;4) 不执行付款批次写入。","受影响流程:已审批报销进入财务后处理时,付款批次入口在 flag off 下不可用或解释性空态;验证步骤:rg -n 'payment_batch_v1|flag_force_off|payment-batches|PaymentBatch|付款批次|未启用' server/src client/src client/tests docs issues;人工核对 server/src/routes/paymentBatches.js、apOperations.js、exports.js、featureFlags/index.js、client/src/pages/PaymentBatchesPage.tsx、MobilePortalPage.tsx。","rg|manual","DONE","DONE","DONE","server/src/routes/paymentBatches.js|server/src/routes/apOperations.js|server/src/routes/exports.js|server/src/services/featureFlags/index.js|client/src/pages/PaymentBatchesPage.tsx|client/src/pages/MobilePortalPage.tsx","[""P2FIN-0""]","DecisionEvidence=server/src/routes/paymentBatches.js、apOperations.js 和 exports.js 均先 evaluate payment_batch_v1;flag_force_off 时返回 payment_batch_v1_disabled 409;MobilePortalPage 仍显示付款批次未启用空态;未执行付款批次写接口,未改代码。"
"P2FIN-2","角色与账号矩阵确认","确认付款批次决策所需角色和测试账号口径:财务可创建/执行,财务主管或具备风险复核权限者可复核,普通员工、审批人和 admin-only 不得越权。","1) 角色矩阵覆盖 finance、finance_mgr、employee、manager、admin-only;2) admin-only 不作为业务审批或付款角色;3) 财务/admin 混授仍需人工确认;4) live smoke 凭据存在不再作为 HOLD 原因。","受影响流程:财务创建付款批次、复核人 maker-checker、执行付款、普通角色直连拒绝;验证步骤:rg -n 'payment.batch.manage|risk.review.manage|expense.finance.pay|admin-only|finance_mgr|LIVE_SMOKE_FINANCE' server/src/constants/permissions.js client/tests docs issues;必要时运行 LIVE_SMOKE_BASE_URL=https://oa.hyinda.com node scripts/qa/check-live-smoke-env.mjs --json,只读检查凭据 readiness 且不打印 secret。","rg|node|manual","DONE","DONE","DONE","server/src/constants/permissions.js|client/tests/e2e/permission-direct-access.spec.ts|scripts/qa/check-live-smoke-env.mjs|docs/trialrun/人工试运行报告.md","[""P2FIN-1""]","RoleMatrix=finance 具备 expense.finance.pay/payment.batch.manage;finance_mgr 具备 expense.finance.pay/payment.batch.manage 且可作为复核角色候选;permission-direct-access 覆盖 employee/manager/admin-only 拒绝或受门禁 409;live smoke readiness publicReady=true liveSmokeReady=true liveOcrReady=true;未输出 secret。"
"P2FIN-3","导出字段与审计事件口径确认","确认付款批次启用前必须验收的导出字段、审计事件和归档证据口径,保持财务导出权限和敏感操作留痕一致。","1) AP 导出受 payment_batch_v1 和财务权限控制;2) 导出写 EXPORT_AP_OPERATIONS 审计;3) 付款批次创建、复核、二次复核、执行均有审计事件;4) 导出字段与报销 OCR 规约一致或列出差异。","受影响流程:财务导出 AP 台账,审计员或管理员可追溯导出和付款批次操作;验证步骤:rg -n 'EXPORT_AP_OPERATIONS|PAYMENT_BATCH_CREATED|PAYMENT_BATCH_REVIEWED|PAYMENT_BATCH_SECOND_REVIEWED|PAYMENT_BATCH_EXECUTED|导出字段至少包括' server/src docs issues。","rg|manual","DONE","DONE","DONE","server/src/routes/exports.js|server/src/routes/paymentBatches.js|docs/需求-报销发票OCR规约.md|issues/2026-05-13_18-23-53-biz8-finance-ocr-project.csv","[""P2FIN-1""]","ExportAudit=exports.js 中 /exports/ap-operations 先过 payment_batch_v1 与 AP_OPERATIONS_PERMISSION_CODES,再写 EXPORT_AP_OPERATIONS;paymentBatches.js 已有 PAYMENT_BATCH_CREATED、PAYMENT_BATCH_REVIEWED、PAYMENT_BATCH_SECOND_REVIEWED、PAYMENT_BATCH_EXECUTED;报销 OCR 规约要求付款批次号、付款时间、付款人、付款备注和导出批次等字段;本轮未导出真实数据。"
"P2FIN-4","公网验收窗口与 flag off 回滚口径","锁定付款批次进入实现前的公网验收窗口、feature flag 启停、flag off 空态和回滚验证条件。","1) 公网验收必须单独批准窗口;2) payment_batch_v1 默认保持关闭;3) 回滚条件为 flag off 后 AP/payment-batches/export 回到 409 或关闭空态;4) 不接真实支付或 ERP 实时凭证。","受影响流程:P2-FIN-V1 上线前后,财务入口、AP 台账、付款批次和导出在 flag on/off 下行为可验证;验证步骤:核对 R7E/FBA/P2D/BIZ8 文档和现有测试,确认 P2-FIN-V1 必须另建合同并含 /ready、public bundle、live smoke、权限直连、flag off 回滚。","rg|manual","DONE","DONE","DONE","docs/trialrun/R7E后功能边界审计.md|docs/trialrun/人工试运行报告.md|issues/2026-05-16_00-19-21-p2-decision-followup.csv|client/tests/e2e/reimbursement-payment-batch-flow.spec.ts","[""P2FIN-2"",""P2FIN-3""]","Rollback=payment_batch_v1 默认继续关闭;P2-FIN-V1 公网验收窗口需在实现合同中单独批准,且上线前后必须验证 flag on 正向闭环和 flag off 后 AP/payment-batches/export 回到 409 或移动关闭空态;不接真实支付、不写 ERP 实时凭证、不执行生产恢复或 DB reset。"
"P2FIN-5","付款批次启用决策结论","基于 P2FIN-1..4 输出 P2-FIN 是否进入独立实现合同的结论,并写明前置条件、后续合同 slug、回滚和验收口径。","1) 结论为 GO_TO_IMPLEMENT、HOLD_FOR_PREREQ 或 FREEZE 之一;2) 若 GO_TO_IMPLEMENT,后续必须另建 P2-FIN-V1 实现合同;3) 若 HOLD,列出未满足前置;4) 若 FREEZE,列出冻结原因。","受影响流程:后续财务付款批次开发派工;验证步骤:人工核对 P2FIN-1..4 证据和 P2D-2 口径,确认 payment_batch_v1 未被启用且没有付款批次业务写入;结论写入 Notes。","manual","DONE","DONE","DONE","issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv","[""P2FIN-4""]","Decision=GO_TO_IMPLEMENT; Rationale=代码、flag、权限、导出、审计、live readiness 和回滚口径已可支撑进入单独实现合同;本结论不等于当前启用 payment_batch_v1; Prereq=另建 P2-FIN-V1 合同并获批准,实施前确认公网验收窗口和真实财务参与人,涉及权限/状态机/审计需独立 review; NextContract=P2-FIN-V1; Rollback=flag off,入口和 API 回到关闭态,保留已审计数据但不接真实支付或 ERP; TestScope=财务成功,员工/审批人/admin-only 拒绝,导出权限与 EXPORT_AP_OPERATIONS,PAYMENT_BATCH_* 审计,flag off 回滚。"
"P2FIN-6","文档状态回填与阶段收口","将 P2-FIN 决策准备结果回写既有事实源和人工试运行报告,完成 CSV 校验、文档审计、diff 检查和中文提交。","1) docs/文档索引.md、docs/文档事实源状态矩阵.md、docs/trialrun/人工试运行报告.md 如有必要已回填;2) CSV 校验通过;3) audit-docs 无 error;4) git diff --check 通过;5) 完成中文 commit。","流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv;node scripts/qa/audit-docs.mjs --check-registry;rg -n 'P2-FIN|P2FIN|payment_batch_v1|付款批次|GO_TO_IMPLEMENT|HOLD_FOR_PREREQ|FREEZE' docs issues;git diff --check。","python3|node|rg|git|manual","DONE","DONE","DONE","issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv|docs/文档索引.md|docs/文档事实源状态矩阵.md|docs/trialrun/人工试运行报告.md","[""P2FIN-5""]","Closeout=validate_issues_csv 通过;audit-docs errors=0 warnings=1,warning 为既有 unregistered docs files:24;关键词 rg 可解释;git diff --check 通过;本轮未部署,公网状态不变。"
1 ID Title Description Acceptance Test_Method Tools Dev_Status Review1_Status Regression_Status Files Dependencies Notes
2 P2FIN-0 P2-FIN 决策合同建档 建立付款批次启用决策准备合同,只做启用条件、验收边界、回滚口径和后续实现合同准备,不启用 payment_batch_v1,不写业务代码,不执行付款批次业务写入。 1) CSV 校验通过;2) 范围限定 issues/docs 和只读源代码核对;3) 不新增 API/schema/UI/feature flag;4) 不部署;5) 输出 GO_TO_IMPLEMENT、HOLD_FOR_PREREQ 或 FREEZE。 流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv;人工核对本轮不改 server/src、client/src 业务代码,不启用 payment_batch_v1。 python3|manual DONE DONE DONE issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv [] 2026-05-16 CSV 建档并校验通过;承接 P2D-2;P2-ORG high=0 medium=0,默认不启动 P2-ORG-FIX;回滚路径:删除本 CSV 和本轮既有文档状态回填,不影响运行环境。
3 P2FIN-1 现有付款批次代码与 flag 边界盘点 只读核对付款批次后端路由、AP 台账、导出、前端页面、移动空态、feature flag 和 E2E/单测覆盖,区分已有实现和当前启用边界。 1) 列出 payment_batch_v1 评估点和 flag_force_off 关闭语义;2) 确认 /payment-batches、/ap-operations、/exports/ap-operations 均受门禁或权限控制;3) 确认移动端仍只显示未启用空态;4) 不执行付款批次写入。 受影响流程:已审批报销进入财务后处理时,付款批次入口在 flag off 下不可用或解释性空态;验证步骤:rg -n 'payment_batch_v1|flag_force_off|payment-batches|PaymentBatch|付款批次|未启用' server/src client/src client/tests docs issues;人工核对 server/src/routes/paymentBatches.js、apOperations.js、exports.js、featureFlags/index.js、client/src/pages/PaymentBatchesPage.tsx、MobilePortalPage.tsx。 rg|manual DONE DONE DONE server/src/routes/paymentBatches.js|server/src/routes/apOperations.js|server/src/routes/exports.js|server/src/services/featureFlags/index.js|client/src/pages/PaymentBatchesPage.tsx|client/src/pages/MobilePortalPage.tsx ["P2FIN-0"] DecisionEvidence=server/src/routes/paymentBatches.js、apOperations.js 和 exports.js 均先 evaluate payment_batch_v1;flag_force_off 时返回 payment_batch_v1_disabled 409;MobilePortalPage 仍显示付款批次未启用空态;未执行付款批次写接口,未改代码。
4 P2FIN-2 角色与账号矩阵确认 确认付款批次决策所需角色和测试账号口径:财务可创建/执行,财务主管或具备风险复核权限者可复核,普通员工、审批人和 admin-only 不得越权。 1) 角色矩阵覆盖 finance、finance_mgr、employee、manager、admin-only;2) admin-only 不作为业务审批或付款角色;3) 财务/admin 混授仍需人工确认;4) live smoke 凭据存在不再作为 HOLD 原因。 受影响流程:财务创建付款批次、复核人 maker-checker、执行付款、普通角色直连拒绝;验证步骤:rg -n 'payment.batch.manage|risk.review.manage|expense.finance.pay|admin-only|finance_mgr|LIVE_SMOKE_FINANCE' server/src/constants/permissions.js client/tests docs issues;必要时运行 LIVE_SMOKE_BASE_URL=https://oa.hyinda.com node scripts/qa/check-live-smoke-env.mjs --json,只读检查凭据 readiness 且不打印 secret。 rg|node|manual DONE DONE DONE server/src/constants/permissions.js|client/tests/e2e/permission-direct-access.spec.ts|scripts/qa/check-live-smoke-env.mjs|docs/trialrun/人工试运行报告.md ["P2FIN-1"] RoleMatrix=finance 具备 expense.finance.pay/payment.batch.manage;finance_mgr 具备 expense.finance.pay/payment.batch.manage 且可作为复核角色候选;permission-direct-access 覆盖 employee/manager/admin-only 拒绝或受门禁 409;live smoke readiness publicReady=true liveSmokeReady=true liveOcrReady=true;未输出 secret。
5 P2FIN-3 导出字段与审计事件口径确认 确认付款批次启用前必须验收的导出字段、审计事件和归档证据口径,保持财务导出权限和敏感操作留痕一致。 1) AP 导出受 payment_batch_v1 和财务权限控制;2) 导出写 EXPORT_AP_OPERATIONS 审计;3) 付款批次创建、复核、二次复核、执行均有审计事件;4) 导出字段与报销 OCR 规约一致或列出差异。 受影响流程:财务导出 AP 台账,审计员或管理员可追溯导出和付款批次操作;验证步骤:rg -n 'EXPORT_AP_OPERATIONS|PAYMENT_BATCH_CREATED|PAYMENT_BATCH_REVIEWED|PAYMENT_BATCH_SECOND_REVIEWED|PAYMENT_BATCH_EXECUTED|导出字段至少包括' server/src docs issues。 rg|manual DONE DONE DONE server/src/routes/exports.js|server/src/routes/paymentBatches.js|docs/需求-报销发票OCR规约.md|issues/2026-05-13_18-23-53-biz8-finance-ocr-project.csv ["P2FIN-1"] ExportAudit=exports.js 中 /exports/ap-operations 先过 payment_batch_v1 与 AP_OPERATIONS_PERMISSION_CODES,再写 EXPORT_AP_OPERATIONS;paymentBatches.js 已有 PAYMENT_BATCH_CREATED、PAYMENT_BATCH_REVIEWED、PAYMENT_BATCH_SECOND_REVIEWED、PAYMENT_BATCH_EXECUTED;报销 OCR 规约要求付款批次号、付款时间、付款人、付款备注和导出批次等字段;本轮未导出真实数据。
6 P2FIN-4 公网验收窗口与 flag off 回滚口径 锁定付款批次进入实现前的公网验收窗口、feature flag 启停、flag off 空态和回滚验证条件。 1) 公网验收必须单独批准窗口;2) payment_batch_v1 默认保持关闭;3) 回滚条件为 flag off 后 AP/payment-batches/export 回到 409 或关闭空态;4) 不接真实支付或 ERP 实时凭证。 受影响流程:P2-FIN-V1 上线前后,财务入口、AP 台账、付款批次和导出在 flag on/off 下行为可验证;验证步骤:核对 R7E/FBA/P2D/BIZ8 文档和现有测试,确认 P2-FIN-V1 必须另建合同并含 /ready、public bundle、live smoke、权限直连、flag off 回滚。 rg|manual DONE DONE DONE docs/trialrun/R7E后功能边界审计.md|docs/trialrun/人工试运行报告.md|issues/2026-05-16_00-19-21-p2-decision-followup.csv|client/tests/e2e/reimbursement-payment-batch-flow.spec.ts ["P2FIN-2","P2FIN-3"] Rollback=payment_batch_v1 默认继续关闭;P2-FIN-V1 公网验收窗口需在实现合同中单独批准,且上线前后必须验证 flag on 正向闭环和 flag off 后 AP/payment-batches/export 回到 409 或移动关闭空态;不接真实支付、不写 ERP 实时凭证、不执行生产恢复或 DB reset。
7 P2FIN-5 付款批次启用决策结论 基于 P2FIN-1..4 输出 P2-FIN 是否进入独立实现合同的结论,并写明前置条件、后续合同 slug、回滚和验收口径。 1) 结论为 GO_TO_IMPLEMENT、HOLD_FOR_PREREQ 或 FREEZE 之一;2) 若 GO_TO_IMPLEMENT,后续必须另建 P2-FIN-V1 实现合同;3) 若 HOLD,列出未满足前置;4) 若 FREEZE,列出冻结原因。 受影响流程:后续财务付款批次开发派工;验证步骤:人工核对 P2FIN-1..4 证据和 P2D-2 口径,确认 payment_batch_v1 未被启用且没有付款批次业务写入;结论写入 Notes。 manual DONE DONE DONE issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv ["P2FIN-4"] Decision=GO_TO_IMPLEMENT; Rationale=代码、flag、权限、导出、审计、live readiness 和回滚口径已可支撑进入单独实现合同;本结论不等于当前启用 payment_batch_v1; Prereq=另建 P2-FIN-V1 合同并获批准,实施前确认公网验收窗口和真实财务参与人,涉及权限/状态机/审计需独立 review; NextContract=P2-FIN-V1; Rollback=flag off,入口和 API 回到关闭态,保留已审计数据但不接真实支付或 ERP; TestScope=财务成功,员工/审批人/admin-only 拒绝,导出权限与 EXPORT_AP_OPERATIONS,PAYMENT_BATCH_* 审计,flag off 回滚。
8 P2FIN-6 文档状态回填与阶段收口 将 P2-FIN 决策准备结果回写既有事实源和人工试运行报告,完成 CSV 校验、文档审计、diff 检查和中文提交。 1) docs/文档索引.md、docs/文档事实源状态矩阵.md、docs/trialrun/人工试运行报告.md 如有必要已回填;2) CSV 校验通过;3) audit-docs 无 error;4) git diff --check 通过;5) 完成中文 commit。 流程级验证:python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv;node scripts/qa/audit-docs.mjs --check-registry;rg -n 'P2-FIN|P2FIN|payment_batch_v1|付款批次|GO_TO_IMPLEMENT|HOLD_FOR_PREREQ|FREEZE' docs issues;git diff --check。 python3|node|rg|git|manual DONE DONE DONE issues/2026-05-16_09-02-42-p2-fin-payment-batch-decision.csv|docs/文档索引.md|docs/文档事实源状态矩阵.md|docs/trialrun/人工试运行报告.md ["P2FIN-5"] Closeout=validate_issues_csv 通过;audit-docs errors=0 warnings=1,warning 为既有 unregistered docs files:24;关键词 rg 可解释;git diff --check 通过;本轮未部署,公网状态不变。