补齐借款对账界面验收并记录 S0 只读核实(09-17-company-loan-principal-repayment)

电脑和手机覆盖提交清单、失败归属、晚到补记、部分及全额追回和有依据的误报关闭;不修改应用业务代码。最终隔离验证 81 迁移、HTTP 95、浏览器 19、数据库约束 9 组通过,脚本和治理检查通过。

获准只读核实:生产 OA 借款模块当前无记录,已应用 73 个迁移与本地校验值一致,待执行 8 个;不证明银行或线下没有付款。记录迁移差集、发布步骤和回退边界。

人员、银行材料、真实样本及业务独立验收待完成;正式发布门禁尚未运行。本次仅本地提交,不推送、不部署。
这个提交包含在:
2026-10-07 22:25:05 +08:00
父节点 431c36eae3
当前提交 7a48a1e76f
共修改 6 个文件,包含 199 行新增和 7 行删除
@@ -1,11 +1,43 @@
## 2026-10-07 后续收口执行(用户同意执行)
按后续工作清单,先将已验证的 S4–S8 共 32 项改动本地提交,提交保留“真实回单待验、整体业务验收未通过”。随后补齐提交登记、清单复核、失败归属、晚到补记和追回的浏览器闭环,并准备发布前存量/迁移/回退检查材料。当前 inline 主会话直接实现和检查,不另派代理;此前两名代理的复核仅覆盖其当时差异。生产查询单独确认,人员与银行材料待外部答复;推送、部署和远端备份切换不在本次默认执行内。以下“32 项未提交”属于提交前验证时点。
按后续工作清单,先将已验证的 S4–S8 共 32 项改动本地提交,提交保留“真实回单待验、整体业务验收未通过”。随后补齐提交登记、清单复核、失败归属、晚到补记和追回的浏览器闭环,并准备发布前存量/迁移/回退检查材料。当前 inline 主会话直接实现和检查,不另派代理;此前两名代理的复核仅覆盖其当时差异。用户本轮已明确授权生产借款存量的只读汇总查询;人员与银行材料答复“不清楚”,保持待核实;推送、部署和远端备份切换不在本次默认执行内。以下“32 项未提交”属于提交前验证时点。
- [ ] 本地提交已验证 S4–S8。
- [ ] 补齐其余银行对账表单的电脑/手机闭环并修复发现的问题。
- [ ] 在现有任务/恢复手册整理具体发布准备与未满足条件。
- [ ] S0 生产只读核实及外部人员、银行材料确认(分别记录)。
- [x] 本地提交已验证 S4–S8:`431c36ea`,32 项,未推送。
- [x] 补齐其余银行对账表单的电脑/手机闭环;最终固定副本通过,在本次本地提交授权内将新增测试及 S0/发布准备记录单独提交。
- [x] 在本任务记录具体迁移差集、发布顺序、回退限制和未满足条件。
- [x] S0 生产存量只读核实完成;人员与银行材料仍待外部核实。
### 剩余界面验收补测
新增 `company-loan-reconciliation-browser.cjs`,由既有隔离浏览器入口调用。合成种子通过正式接口准备,实际待验动作由页面完成:电脑/手机各走提交登记→清单确认/独立复核→失败归属/独立复核→失败回单终态→取消;以及晚到成功原件上传/登记→用途审计查看输入→独立复核→补记→部分与全额追回→凭更正材料独立关闭重复误报。断言经办人无自审按钮、原占用释放、待追回变化、部分追回仍冻结、全部追回后关闭对应冻结、不创建新付款批次及手机无横向溢出。
未修改应用业务代码或新增资金规则。首轮用例把归一化后的大写指令号与小写测试预期比较而失败,已修正测试预期;后一轮通过。最新副本补明确选择新上传的更正证据,再验证最终用例。首轮失败不计通过;不新增变异测试或重复整套服务端单测,因为本轮仅补浏览器覆盖与文档。
复现:在隔离源码/构建副本内执行 `RUN_ISOLATED_LOAN_DB_TEST=1 RUN_ISOLATED_LOAN_BROWSER=1 node scripts/qa/test-company-loan-db.cjs`,BIFF8 使用已准备的受控 Python 环境。最终固定副本通过 81 迁移、HTTP 95、浏览器 19、数据库约束 9 组,自有副本/容器清理 PASS。脚本语法、任务、治理、流程合同、敏感扫描与 git diff --check 通过。应用代码与依赖未变,复用先前通过的构建、类型及单元测试证据。主会话遵循 inline 直接检查,没有新增代理复核,也不替代财务/银行事实验收。
### S0 只读核实及发布准备(2026-10-07)
用户明确授权本轮生产借款存量只读汇总;通过既有生产连接,在 `REPEATABLE READ READ ONLY` 事务中查询并 `ROLLBACK`,设置查询/锁等待超时,未输出账户、原件或业务正文,未运行部署/迁移。核实时点 2026-10-07 22:08–22:09(北京时间)。
- OA 中出借人、借款、还款批次、占用分配和借款回单均为 0;已确认失败未取消也是 0。当前没有系统内借款存量需要回填;这不证明银行或线下没有付款。发布前必须再次核对,不能把本次空库结论永久复用。
- 已应用迁移 73 个,未完成迁移 0;与本地同名迁移的 SHA-256 全部一致,没有生产多出的迁移。本地 81 个,差集为以下 8 个(不是仅本轮新增的 3 个):
1. `20261006010000_loan_receipt_attribution`
2. `20261007010000_loan_bank_submissions`
3. `20261007020000_loan_failure_attribution`
4. `20261008010000_loan_bank_terminal_facts`
5. `20261008020000_loan_release_recoveries`
6. `20261008030000_loan_not_submitted`
7. `20261008040000_loan_freeze_reasons`
8. `20261008050000_loan_bank_result_events`
- 人员、官方无结果 PDF、回单与指令编号关系:用户答复“不清楚”,均保留待核实;Q6 不能宣称具备实际使用条件。脱敏只读结果保存在本轮 S0 本地证据目录的 summary.json。
发布准备顺序(本轮只准备,不执行发布):
1. 完成剩余浏览器闭环及业务/真实样本验收,固定最终已提交候选;不得把本轮合成回归当作正式 release-gate 回执。
2. 对固定干净候选运行 `bash scripts/qa/run-release-gate.sh verify-candidate`,绑定当次回执;当前仍有待验证/未提交的补测,不提前运行大范围门禁或写“可部署”。不能用 `all`/`ci-release` 代替本地验证,因为它们会进入生产发布链。
3. 经单独批准后做发布前只读核实,将实际差集作为 `EXPECTED_PENDING_MIGRATIONS`。若生产出现新增借款/批次、迁移差异或未完成项,重新评估,不自动套用本次 8 项或空存量结论。
4. 按既定部署前手动快照方案确认快照完成与恢复证据。备份脚本切换属于另一项远端授权,仅安装指定 refresh 脚本及执行既定停用顺序,不借此部署应用。
5. 推送、部署各自批准后才执行迁移/应用发布;部署后核对应用版本、81 项预期迁移、readiness、权限和借款只读页面。真实借款录入/付款仍需业务明确批准,不能制造付款验收。
6. 回退保留新增表和历史事实,不删迁移或重置数据库。一旦生成补记/追回等新事实,旧代码未计算新台账,不能直接降级;停止新付款并按获批兼容修复或恢复方案处理。确认此前没有新资金事实,也仍需具体回退审批,不能默认恢复覆盖期间其他业务。
## 2026-10-07 后续执行接续(用户要求已确定工作直接执行)