完善付款回单凭证核验与本地重检(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,36 @@
## 2026-10-08 实样发现后的凭证处理方案(N1–N2 已本地实现)
本节对应 PRD 顶部 R4/AC5 补充及 implement 的 N1–N2,用户已明确“开始执行”。沿用已实现的两人关联模式、回单存储、人工核对和核销流程;不重新设计 S1–S8/SR,不把 S002 专项格式兼容纳入必修范围。
实现收敛:本地使用 PDF 文本解析读取票面限制,无法可靠解析的维持未知;新增的结构化凭证依据随既有加密核验/人工提案保存。人工可按正式回单的已记账支出和记账日期确认,不生成虚假的银行状态原文。旧证据通过有权经办显式发起的本地重检生成新版本,保留历史、不调用云 OCR;最终资金动作不默认接受缺少新版依据的旧记录。
本轮采用现有表,无新增迁移。新增 `paymentReceiptDocument` 服务和受限 PDF 文本工作线程,使用 `pdfjs-dist`;单文件最多 5 MB、20 页,工作线程限时 5 秒、旧生代内存上限 128 MB。结构化凭证类型为正式回单、非最终回执或未知,原始票面文字不落日志;识别异常维持未知,不能自动核销。
人工依据分“原件明确成功”和“正式回单已记账支出”。后者须填写真实且不晚于当天的记账日期、原件已核对声明及依据说明,保存 `transactionStatusRaw=null`;新增人工依据必须按该批次模式确认。既有非最终说明、贷方入账、多个回单或失败/处理中矛盾均不能由人工覆盖。自动凭证检查位于核验构建与最终重建,未放入失败/终态事实也使用的低层字段匹配函数。
旧记录显式重检接口为 `POST /payment-batches/:id/receipt-attachments/:attachmentId/document-check`,要求当前版本、财务权限和经办资格,核对原件实际大小与摘要、未被消费,再在同一事务新增核验版本与审计;旧人工确认不得转移到新版本。历史 OCR 为 0 页时详情仍可打开重检入口,负数、超上限等无效页数继续拒绝。已核销历史不自动重写。实现及验证证据见 implement 顶部;独立代码复核和真实还款闭环不在本轮完成结论内。
### 凭证性质、字段读取、交易归属分别判断
1. 凭证性质先区分已确认的最终付款依据、明确非最终依据、尚不确定。银行限制说明、实际记账方向和入账/付款信息属于判断依据;文件名、标题、OCR 请求成功或没有提取到免责声明均不足以判为最终依据。公司贷方借入和借方还本分开处理。
2. 自动路径只开放经过实际材料核验的格式与字段组合;识别来源必须能覆盖判断凭证性质所需内容。当前 `BankSlipOCR` 的六类归一化字段不能证明完整覆盖票面说明。可在本地核对 PDF 文字,缺文字/提取异常保持未知;本阶段不以接入新的云服务或实现所有扫描件 OCR 为前提。
3. 人工路径在原件实际信息足够时使用。沿既有财务录入、马经理关联方确认,补充可追溯的凭证性质及已记账依据,不补造成功状态。明确非最终的回执不能经普通人工决定升级;需要取得对应正式付款证据。没有可用最终证据则保持待核对,不能以“以后会补回单”先核销。
4. 凭证足以证明付款也不自动证明属于哪个批次。金额、币种、双方账户、付款方向、银行交易身份及既有候选/提交关联继续分别检查;回单编号、客户方流水号和网银指令号分开保存或引用,不靠人工照抄使之相等。编号不足时保持待对账。
### 依据留存、旧数据和最终消费
- 在既有证据模型上留存原件摘要/版本、凭证判断及其依据、自动或人工来源、决定上下文;核验结果持久化、人工冷重建和最终核销都必须保留并重验这些信息。不能只在上传时或页面增加提示。
- 换件、重新识别、作废和候选变化继续使旧依据失效。旧核验记录缺少凭证判断时不能默认通过;已记账记录保持历史不可变,需要核查的问题另行登记,不自动撤销本金核销或重写生产数据。
- 本轮凭证依据随现有加密核验和人工提案留存,未新增迁移。涉及共享回单服务时回归报销消费者,既有独立性、交易唯一性、失败/受理与资金约束保持。
- 验收覆盖明确非最终说明、字段中出现成功但票面有限制、无法完整判别、正式凭据没有字面成功状态、借入/支出方向不同、旧结果缺依据、人工重建及最终核销。去除关键凭证检查后,测试必须能区分错误放行或合同退化。
### 实际材料与完成边界
- 原四份获授权 PDF 和 OCR 配置读取范围继续有效,无需为相同范围重复授权;先复用既有结果和本地材料,不无目的重跑云端。新增两份正式借入回单目前只做了本地读取;确有必要发送新文件时再明确文件范围。
- S001/S003 作为非最终凭证反例;S002 维持既有需复核结果,可用于材料性质/人工依据分析,不要求兼容其全部 OCR 字段,也不为它索取保证金退款材料。新增两份借入回单用于本金及格式核对,不能充作还本付款正例。
- 优先用现有材料验证原件字段与人工处理是否可行;只有一个具体交易的完整归属无法核对时,才列明需要该笔交易的正式支出回单及网银实际提交详情。现有无真实借款还款时,不要求制造付款获取样本;借款全链用合成数据,首笔真实银行闭环在获准实际还款后验收。
- 正常办理必须有一条经验证可用的自动或人工路径;仅能拦截不代表可启用。首笔前的软件/材料验证与首笔后的实际银行闭环分别记录。异常缺实样保持未验,不提前认定失败释放等已具备真实银行接受性,缺证继续占用。
## 2026-10-08 财务经办与马经理关联方确认方案(本地实现及合成验证完成,已授权本地提交)
用户已确认马经理有权代表公司批准,并在规划完成后明确“开始实施”。马经理同时为股东和个人出借收款人;技术员工不参与复核、审批、见证,不增加权限或分派待办。公司授权这一业务事实不再待决。本节是本次权限模式变更的执行合同;本地实现及合成验证已完成,具体证据与剩余验收见 implement 顶部。下方历史设计中的独立复核,除 Q6 外按本节明确区分模式;本地改动不等于生产已具备该模式。