完善付款回单凭证核验与本地重检(09-17-company-loan-principal-repayment)

区分正式付款回单、非最终回执与未知凭证,在核验构建、人工证据重建和最终核销时使用同一份有效依据。非最终说明、入账方向、状态矛盾及重复交易不能经人工覆盖。

正式回单无字面成功状态时,允许财务按原件实际记账支出、日期及说明提出核验,由本批次适用的确认人确认;不补造银行成功文字。旧核验可显式本地重检,新版本与审计原子保存,不重新外发 OCR,不沿用旧人工批准或改写已核销历史。

本地验证:82 个迁移、借款 HTTP 116 组、关联电脑/手机 18 组、共享回单数据库与真实认证 38 组、共享报销页面限定重验 24 项、最新回单/报销定向 292 项通过;9 个资金守卫变异均被捕获。服务端全量 4554 项通过、1 项既有可选跳过,后续合成数据及零页详情改动由最新定向验证覆盖。

本次无新增迁移,新增本地 PDF 文本解析依赖。后续对本提交运行完整 verify-candidate,实际候选与结果以本轮回执为准。

限制:独立代码复核及真实还款验收待完成;历史材料预验不证明真实还本或银行提交对应。未推送、未部署、未访问生产或写入真实业务数据。
这个提交包含在:
2026-10-09 06:18:09 +08:00
父节点 ce11dea976
当前提交 5a7a13524e
共修改 31 个文件,包含 1325 行新增和 49 行删除
@@ -1,3 +1,90 @@
## 2026-10-09 N3 本地提交与新候选验证(独立代码复核待完成)
用户在 N1–N2 完成回执后明确“继续下一步”,本轮按已说明的 N3 接续本地提交和新候选验证。提交范围为已核对的 31 项改动;源码、测试及规约与上一轮最终清单逐项摘要一致,本轮仅补本节和 PRD 接续记录。提交、验证的实际结果以本轮回执及 Git 记录为准,不提前记为通过。
- 单独形成一个本地提交:`完善付款回单凭证核验与本地重检(09-17-company-loan-principal-repayment)`,包含 27 个修改文件、4 个新增文件;不加入输入材料、本地验证产物或个人日志。提交说明保留“独立代码复核及真实还款验收待完成”,不推送、不部署。
- 复用 N1–N2 已通过且输入未变化的针对性结果;完成本轮任务/流程/敏感/差异检查后提交。新提交固定后运行 `bash scripts/qa/run-release-gate.sh verify-candidate`,其范围为 static 和完整受管 full-local;不调用发布入口,不以旧候选或限定重验替代。
- 本轮回执固定为 `artifacts/release-gate/loan-receipt-n3-20261009/`,准备与清理记录为 `artifacts/qa-flow/loan-receipt-n3-20261009/`。测试期间冻结源码、测试和任务文档;结果、当前候选及复核交接记录写入本轮回执,不修改正在验证的提交。
- 本轮使用专用的临时浏览器目录和已有制单 Python 依赖环境;完整验证由既有受管入口建立新数据库及隔离网络,使用合成账号/材料。验证结束后只清理本轮拥有的临时资源,不读取真实 OCR 配置、不外发银行文件、不查询生产。
- 当前 developer 的 inline 指令明确禁止派 implement/check 子代理。主会话已完成可执行检查,但独立代码复核仍未完成,已有旧阶段代理报告不能覆盖关联模式和 N1–N2;保持独立复核、真实还款、生产启用的开放状态,不因本地提交或候选门禁通过而勾选整体任务完成。
- 门禁如发现本任务问题,在既有范围内修复并做相关验证,再形成新的本地修复提交与对应回执;保留失败证据,不修改原提交、不忽略失败或缩减正式门禁范围。N4 的生产查询、推送、部署和 N5–N6 的真实业务/付款不在本轮范围。
下方“未提交”等为 2026-10-08 完成时点;本轮候选与验证结论以以上回执为准。
## 2026-10-08 实际材料核对后的后续计划(N1–N2 本地完成,未提交)
用户先要求重新梳理规划,随后批准 N1–N2 本地实施、针对性验证和主会话检查。实施基线为已提交的 `ce11dea9`,其 `verify-candidate` 为 PASS:82 迁移、服务端 4519 通过/1 项既有可选跳过、浏览器 372 通过且无失败/跳过/重试;基线回执见 `artifacts/release-gate/loan-ce11dea9-20261008/`。本轮实现和验证见下方完成回执,旧候选门禁不覆盖本轮差异。没有本轮提交、推送、部署、生产访问或真实业务写入;任务仍为 `in_progress`。下方其他阶段状态保留为历史时点。
### 已完成及无需重复索取
- [x] A/B/C、S1–S8、SR 补证恢复、电脑/手机界面和两人关联模式已本地实现并提交,不再按未开发项目排期。
- [x] 两笔正式借入回单本地核对完成;用户已确认历史未还本金、本年无新增借还、开卡小额往来排除及沿用原个人收款账户。实际值见受控材料,不抄入版本库;真实 OA 台账尚未登记。
- [x] 财务经办、马经理公司代表权及关联身份已确认;技术员工不参与业务审批/复核/见证。关联 Q6 关闭,不再将第三人或查询无结果 PDF 列为普通还款前提。
- [x] 原四份获授权 PDF 已做真实 OCR 实测。S001/S003 字段匹配但为非最终回执;S002 保持需复核、专项适配后置。两份新借入原件为正式回单,不代表未来支出。没有执行真实核销或银行验真。
### 下一阶段顺序与完成条件
| 顺序 | 执行内容 | 完成条件及依赖 | 人工配合 |
|---|---|---|---|
| N1 凭证判断与最小修复 | 已实现正式回单、非最终回执及未知分类;自动核验、人工记账依据、旧证据本地重检、证据重建和最终消费共用有效依据 | 本地完成。非最终和未知不得自动核销;人工不得覆盖已知限制或补造银行成功文字,资金反例与变异通过;无新增迁移 | 现有余额、账户、人员不重问;当前无需新增人工配合 |
| N2 正常路径及材料预验 | 已复用六份材料本地核对,并以一份既有正式支出样本做真实字段的内存人工录入预验;隔离环境完成财务与经理的自动/人工流程、提交记录及拒绝场景 | 本地预验完成;合成借款可实际核销,电脑/手机均实操。历史样本只证明其原交易与格式,未证明真实借款还本及网银提交对应;真实闭环仍待 N6 | 当前不用重新下载材料或制造交易。首笔真实还款时保留本笔提交详情与正式付款回单;新增文件外发 OCR 才需明确新增文件范围 |
| N3 独立代码复核与候选验证 | 固定最终差异及证据,完成独立只读复核和修复后的针对性验证;获准本地提交后对干净新候选运行正式门禁 | 依赖 N1/N2;范围覆盖当前关联模式以及本轮凭证变化。记录复核来源与结论,当前 inline 主会话检查不替代独立复核。源码变化后不能沿用 `ce11dea9` 回执 | 不让公司技术员工做业务复核;独立审查执行条件不足时如实列明。提交另按明确授权办理 |
| N4 发布准备及获准发布 | 准备候选、真实迁移差集核实方案、数据库及附件快照、兼容处置和部署后电脑/手机检查;获准后只读复核生产,再按批准候选推送部署 | 依赖 N3 与正常路径可用;2026-10-07 空存量不是发布前现状,73→82 只是历史推算,实际差集现场核实。保留未验异常边界;产生关联决定后不能直接降级到旧语义代码 | 生产只读查询、推送、部署分别取得明确授权。独立备份切换仍按原范围处理,不能借安装脚本发布整个 main |
| N5 真实台账及授权登记 | 财务按已有原件和用户确认登记两笔历史借入、未还本金、核对截止日、双方账户及会计引用;登记已有公司代表权和覆盖借款,由马经理在 OA 确认 | 依赖已获准可用环境和真实业务录入授权;逐笔核对与现有会计负债记录一致,不重复生成历史现金流或会计凭证,不把 OCR 结果当成余额确认 | 财务实际录入并核对,马经理确认授权范围及相关声明;不重复向用户索取已确认事实,不要求技术员工参与 |
| N6 首笔真实还款及会计交接 | 确认本次金额/分配/日期,财务申请,马经理关联方批准,财务导出、在网银实际提交、留存提交详情与正式付款回单,核验/必要人工确认后核销,交代账留存 | 依赖 N5 及本笔真实付款批准。实际支付仍由有权人员在网银操作;只核销本次确实付款的本金。首笔成功后才能记录真实银行闭环验收;不把软件预验写成真实还款已通过 | 到办理时确认本次还多少及付款安排;不从剩余本金推定全额付款。保留银行指令详情、正式回单和代账交接结果;异常未知不重付 |
N1–N2 已按授权完成本地实施和验证;后续进入 N3 的独立代码复核、本地提交与新候选验证,再按 N4–N6 办理发布和真实业务。复核交接范围已列在本轮完成回执中;当前 inline 主会话不能代替独立复核。提交、发布及真实付款不包含在本轮实施授权里;已明确批准的同范围工作执行时不再逐步询问。
### 验收与取样纪律
- 原件类型、OCR 字段、交易归属、最终核销分别记录。现有实测止于匹配函数,不宣称已复现生产错误核销。正式回单没有字面成功状态的问题须按实际记账证据设计,不能以人工补写状态通过。
- N1 先跑相关回单/OCR/人工重建单测及借款隔离 HTTP/数据库资金反例;涉及页面再跑相应电脑/手机操作。覆盖共享报销路径,重点反例配有效变异。新候选形成后再运行完整正式门禁,本轮定向结果不代替该门禁。
- 真样本不足的异常路径继续标未验,保持银行事实、占用及冻结;不得用异常“人工说没付”绕过。若上线前仍不能验证一条正常最终付款路径,N4 不进入真实启用。
- 不再要求补本年完整银行流水、重新核实已确认借款是否还本、S002 保证金退款材料或重复下载同格式回单。确需补材料时明确具体交易、材料名称、缺失字段、取得方法和用途。
- 仅在现有材料无法回答本次需要时再问银行资料问题;普通 OCR 不以前置咨询银行为条件。新增文件云 OCR 授权、生产业务访问及真实写入与原四份样本授权分开。
### 规划及实施检查
- [x] 已重新核对当前候选回执、四份样本实测、本地新增回单分类及用户确认;没有新增云 OCR 调用或读取生产配置。
- [x] 规划阶段的任务校验、Trellis 治理(含敏感扫描)、流程合同 baseline 和 `git diff --check` 通过;文档注册检查零错误,保留原有“22 个 docs 未登记”的一条汇总告警。该时点仅三份既有任务文档新增内容,历史正文完整保留,尚未运行应用测试;实施后的验证见下方完成回执。
- [x] 用户明确“开始执行,需要我手动操作的及时告诉我”,批准 N1–N2 本地实施与针对性验证。实施期间需要人工配合时说明具体步骤和用途;不重复索取已确认事实或原四份样本授权。
- [x] N1:凭证识别及保存、自动/人工核验、旧记录本地重检、最终消费与页面接续。
- [x] N2:现有材料的受控本地核对、隔离资金与电脑/手机回归、定向变异、主会话检查及真实验收边界记录。无提交、推送、部署或真实数据写入授权。
### N1–N2 本轮完成回执
本轮 31 项改动为 27 个已跟踪文件修改及 4 个新增文件,均未提交。新增受限本地 PDF 凭证解析服务/工作线程、其单测和带真实可提取文字的合成回单工具;服务端新增 `pdfjs-dist` 依赖,继续使用部署及 CI 既有 Node 22。没有新增迁移,隔离数据库仍验证 82 个迁移。
- 正式回单、非最终回执、未知分类随加密核验证据保留。构建核验和最终消费均拒绝非最终、入账方向、已知状态矛盾和缺少依据;失败/终态流程共用的低层字段匹配规则未被付款凭证门禁替换。
- 正式回单没有字面成功状态时,可依据原件记账支出、实际记账日期和原件已核对声明提出人工核验。必须由该批次适用的确认人确认;关联模式仍为财务经办与马经理公司代表确认。保留原始状态为空,不生成虚假的“交易成功”。
- 旧核验缺少凭证性质时,财务在原弹窗显式更新,校验原件摘要/大小及版本后新增核验与审计,不发送云 OCR、不改历史或沿用旧人工批准。重检和最终核销按同一批次锁串行;审计失败整体回滚,已消费证据不可重检。
- 主会话检查补齐历史 OCR 零页结果的详情兼容:零页仍可进入本地重检,负数、超过 20 页或异常大页数拒绝;新增 4 项路由反例。此项仅改善详情入口,不放宽最终资金判断。
- 合成 PDF 票面金额、账户及银行编号与对应的模拟 OCR/人工录入一致。测试沿真实解析、归一化、加密核验、人工重建及核销,仅替换云端识别返回;不是只向匹配函数塞入“成功”结果。
验证证据统一位于 `artifacts/qa-flow/loan-receipt-evidence-20261008/`;各行是不同范围,不累计为独立测试总数:
| 验证 | 结果与准确范围 | 回执 |
|---|---|---|
| 完整借款 HTTP 与数据库 | 116 组 HTTP、9 组数据库约束、82 个迁移通过;含 21 组关联/本轮回单场景、拒绝后本金占用不变、旧自动/人工记录重检和两种确定性交错 | `loan-http-final.log` |
| 关联模式电脑/手机实操 | 各 9 组,共 18 组通过;实际填写记账依据/日期、必须勾选原件核对、公司代表确认、最终核销,非最终回执无手动覆盖或核销动作;本轮运行明确未跑 HTTP | `loan-ui-final.log`;截图索引在该日志 |
| 服务端全量 | 228 文件、4554 项通过,1 项既有可选跳过。随后仅改进合成 PDF 数据一致性和零页详情兼容,对应以下定向/HTTP/浏览器回归;不将新增 4 项虚报为已经重跑的全量数字 | `server-unit-final.log` |
| 最新回单及报销路由定向 | 7 文件、292 项通过,覆盖上述最后改动 | `receipt-targeted-latest.log` |
| 共享回单数据库及真实认证链 | 38 组通过,使用合成账号经真实密码/JWT;审核、读取、重复交易、事务及并发受约束 | `receipt-db.log` |
| 共享报销页面限定重验 | 24 项通过,受管环境 PASS,电脑/手机回单交互及实际报销付款链通过;不是整站正式门禁 | `web-shared-ready.log`、`web-shared-ready/results/` |
| 资金检查变异 | 基线通过,9 个不同守卫全部被具体断言捕获;对最终合成数据又复验同一组 9 个,不累计为 18 个守卫。临时副本测试,当前源码摘要未变、副本已删除 | `mutation-final/mutations.json`;首轮 `mutations.json` 保留 |
| 静态及合同 | Prisma 校验、前端类型检查/构建、错误码合同、UI 规则、敏感扫描、任务和流程/文档检查通过;最终文档检查回执见同目录 `checks-final.json` | 同目录检查日志 |
早期失败证据保留:`server-unit.log` 的 6 项制单测试因未指向现有 Python 依赖环境失败,指定既有环境后全量通过;`web-shared.log` 为缺 WebKit 导致的环境无效,使用本轮专用浏览器后受管重验通过;`loan-full.log` 已通过 HTTP 后在浏览器错误期待“禁用按钮”,产品实际隐藏该动作,改成验证不存在后相关电脑/手机 18 组通过。不得将这些早期日志记作整轮 PASS,也未无原因重跑已通过的无关测试。
### 实样预验、复核交接及待人工事项
- 六份已有材料均本地读取且原件摘要未变:S001/S003 为非最终回执,S002-A 为正式支出回单,S002-B 凭证性质未知,两份借入回单为正式入账回单。S002 仍仅用于格式预验,不作为借款或还本事实,专项 OCR 兼容继续后置。回执 `real-document-check.json`。
- S002-A 按原件实际金额、币种、双方账号、编号及日期,在内存中构造已记账支出的人工核验提案成功,要求后续业务确认,未编造成功状态。没有建立真实 OA 批次、真实批准或核销;未验证其银行提交对应或真实借款还款。原始字段没有写入报告,回执 `local-manual-proof-check.json`。
- 本轮新增云 OCR 调用为 0,未读取 OCR 配置或生产数据、未写真实台账、未付款。原四份样本既有 OCR 授权不扩大到新增借入文件;本地预验无需外发这些文件。
- 主会话按本任务验收检查了全部改动,包括 4 个未跟踪新文件,未发现尚未处理的本轮阻断;当前 inline 模式不能派 implement/check 子代理,**独立代码复核仍未完成**。N3 需同时复核关联模式与本轮差异,重点为原件限制/人工依据、旧证据重建、权限与锁序、共享报销消费者、页面及 9 项变异证据;不能仅检查 `git diff` 而遗漏新增文件。
- 当前无需用户补下载材料、询问银行或要求技术员工参与。获准上线和真实录入时,财务用已有凭据登记历史本金及公司授权,马经理在 OA 确认;首笔真实还款前再明确本次金额/分配,财务实际网银提交,保留该笔提交详情及正式付款回单。到对应步骤再给出操作指引,不从余额推定全额付款。
- 本轮独立代码复核、明确授权的本地提交、新候选正式门禁、获准发布和首笔真实还款闭环均未完成;AC5、AC8、AC27 及整体真实业务验收保持开放。没有推送、部署、远端备份切换、生产查询、真实写入或付款。
## 2026-10-08 关联方模式本地提交与正式验证(已授权)
用户明确答复“是,授权”,同意将本轮 39 项改动作为一个完整的本地提交,并对干净的新候选运行正式验证。提交范围为 33 个修改文件和 6 个新增文件,含一个新增迁移;文件摘要已与上一轮收尾清单核对一致,本次只补授权及验证安排的记录。