借款登记支持上传原借入回单识别预填(09-17-company-loan-principal-repayment)
- 新增识别与保存接口:可读 PDF 本地解析,必要时有界调用现有回单 OCR;预填上下文加密绑定经办人、文件和 30 分钟 - 适配建行单位客户专用回单表格版式:按位置归行排序、竖排栏头、顶行无标签日期、大小写金额 - 拦截非最终、失败/处理中、多笔交易(含跨页无关联、编号冲突)、非人民币、公司支出和其他收款主体 - 金额、日期、编号整段校验;借款与原件同事务保存,失败回滚并清理对象;同一出借人原件唯一 - 保存绑定所选出借人版本;前端冻结核对时版本,迟到结果与切换账号不覆盖、不重发 - 测试:单测、隔离 HTTP/浏览器、变异;对账浏览器场景固定 UTC;五轮独立复核通过 - 无新增迁移 Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
@@ -1,3 +1,198 @@
|
||||
## 2026-10-10 N5-P 第五轮独立复核通过(待提交授权)
|
||||
|
||||
第五轮复核(`independent-review-r5-20261010.md`)结论为 PASS_WITH_NOTES:此前要求修改的问题均可关闭,没有阻断项。复核方独立验证:
|
||||
- 相关单测 100 项通过;
|
||||
- 前几轮的 27 个探针,以及新增的 14 项关联与边界检查通过;
|
||||
- 两份正式回单在本机复测通过,云端调用 0。
|
||||
|
||||
非阻断观察 N1:OCR 读出无效流水号或凭证号时,值会被拒绝,但字段提示显示为 `missing`(未识别);本地读出同类无效值时显示为 `invalid`。两种情况都不会预填错误值,也不会绕过多页拦截。本轮不改代码,下节“无效编号记 invalid”的说法仅适用于本地文字层。
|
||||
|
||||
AC39 的独立复核部分已完成。下面几项仍需另行处理或单独授权:
|
||||
- 提交、最终候选完整门禁、推送和部署;
|
||||
- 真实回单上的姓名、账号、流水号逐值核对,由财务保存前对照原件完成;
|
||||
- 员工授权翻页超时(根因未定)。
|
||||
|
||||
## 2026-10-10 N5-P 第四轮复核修复(第五轮复核已通过)
|
||||
|
||||
第四轮复核(`independent-review-r4-20261010.md`)结论为 CHANGES_REQUESTED,剩 2 处,都涉及多页文件能否确认为同一笔交易。
|
||||
|
||||
- R4-1 跨页关联:
|
||||
- 每页分别记录带类型的编号(`pageIds`)。两页共享同类型、同值的编号才算关联;同一页上的流水号和凭证号视为属于同一笔交易。全部页面必须连成一组(`unlinkedPages`),否则拦截为 `pages_unverified`。
|
||||
- OCR 读出的页按同一规则加入。已知编号冲突仍判为 `multiple_transactions` 并拦截。
|
||||
- 文字相同但编号类型不同(一个是流水号、一个是凭证号),不算关联。
|
||||
- R4-2 编号整段校验:`parseReference` 要求整段匹配,不再截取前缀参与比较。本地文字层读到带未知后缀、超长或相同前缀不同后缀的编号时,记为 `invalid`;OCR 读出的编号也做整段校验,无效值被拒绝,但提示为 `missing`(见第五轮 N1)。
|
||||
|
||||
验证:
|
||||
|
||||
- 复核方三轮探针共 27 个,用当前代码全部符合预期:第四轮 10 个,第三轮 8 个,第二轮 9 个。
|
||||
- 单测:借入回单 71 项(新增 8 项)。
|
||||
- 变异:新增 3 个,连同 2 个重跑的,共 5 个全部捕获。旧的“页面覆盖”两项变异所针对的代码已被关联逻辑取代、锚点已不存在,已从清单删除。
|
||||
- `browser-r7.log`:HTTP 9 项、浏览器 8 项、数据库 9 项通过。
|
||||
- `regression-r11.log`:完整回归通过,检查项相加 248,去重 189。
|
||||
- 两份真实样本:编号改为整段校验后,流水号仍正常提取,9 个字段齐全,无拦截,云端调用 0,原件不变。
|
||||
|
||||
仍开放:
|
||||
|
||||
- 员工授权翻页超时根因未定。
|
||||
- 待第五轮独立复核。
|
||||
- 未提交、未推送、未部署。
|
||||
|
||||
## 2026-10-10 N5-P 第三轮复核修复(未提交;后续修复见上节)
|
||||
|
||||
第三轮复核(`independent-review-r3-20261010.md`)结论为 CHANGES_REQUESTED,剩 2 项,均属 RR1;RR2、RR3、RR4 已由复核方关闭。
|
||||
|
||||
- R3-1:一页只有读到能通过解析的流水号或凭证号,才算属于本笔交易。文字层与 OCR 使用同一判定标准:无效值、OCR 返回空,以及只有金额相同,都不能解除“多页无法核实”的限制。单页扫描件仍可人工补填。
|
||||
- R3-2:内部保留本地读到的全部流水号和凭证号(`identifiers`),跨来源时按同类编号逐一比较。仅凭证号不同(包括流水号相同的情况)也判为多笔交易。表单预填仍优先使用流水号,这只是显示顺序,不影响比较。
|
||||
|
||||
验证:
|
||||
|
||||
- 复核方第三轮 8 个探针、第二轮 9 个探针,用当前代码重跑全部符合预期(拦截项已拦截、对照项正常放行)。
|
||||
- 单测:借入回单 63 项(新增 6 项);回单分类与 OCR 测试仍通过。
|
||||
- 变异:新增 4 个单元变异全部捕获。“文字层只有金额的页面”首轮未捕获,原因是缺少可读的只有金额页面;在生成器中加入“无流水号”选项并补测后已捕获。
|
||||
- `browser-r6.log`:HTTP 9 项、浏览器 8 项、数据库 9 项通过。
|
||||
- `regression-r10.log`:完整回归通过,检查项相加 248、去重 189。
|
||||
- 两份真实样本:9 个字段全部提取,无拦截,云端调用 0,原件不变。
|
||||
|
||||
仍开放:员工授权翻页超时根因未定(r8–r10 均通过,但没有确定性触发失败分支);待第四轮独立复核;未提交、未推送、未部署。
|
||||
|
||||
## 2026-10-10 N5-P 第二轮复核修复(未提交;后续修复见上节)
|
||||
|
||||
第二轮复核(`independent-review-r2-20261010.md`)结论为 CHANGES_REQUESTED,共 4 类问题,本节记录修复结果。
|
||||
|
||||
- RR1 混合页与跨来源交易:
|
||||
- 按页记录是否读到本页自己的金额、流水号或凭证号;没读到的页单独送一次 OCR(仍受总时限约束、不重试)。
|
||||
- 多页文件仍有页面无法核实时,记 `pages_unverified` 并拦截;单页扫描件仍可人工补录。
|
||||
- OCR 读到的金额或同类编号与本地不同,记 `multiple_transactions` 并拦截。
|
||||
- RR2 乱序说明:凭证限制同时检查原始存储顺序与按位置重建的阅读顺序,结果取并集。共享的付款分类代码不变。
|
||||
- RR3 打印日期:顶行无标签日期规则跳过紧跟在“日期/时间”类标签后的日期;`parseDate` 改为整段校验,可带时刻,也接受 8 位数字日期。上一节写“到账日期同样处理”时,这一项其实尚未完成,以本节为准。
|
||||
- RR4 前端版本:对话框冻结选择出借人时的身份版本和账户版本。列表刷新后版本变化,会清除两个确认勾选并提示重新核对;保存使用冻结的版本。
|
||||
|
||||
验证(证据目录同上):
|
||||
|
||||
- 复核方的 9 个解析探针在修复后全部得到正确结果(会拦截的已拦截,日期留空或标为无效)。
|
||||
- 单测:借入回单 57 项,加回单分类与 OCR 共 86 项通过。
|
||||
- 变异:新增 6 个单元变异全部捕获(`mutations-summary-*.json`)。
|
||||
- 浏览器 `browser-r5.log` 共 8 项,新增电脑与手机各 1 项:断网后恢复触发列表重新获取,勾选被清除;重新核对后保存,提交的是新版本,数据库中借款 1 笔。
|
||||
- 完整回归 `regression-r9.log` 通过,检查项相加 248、去重 189。
|
||||
- 两份真实样本用当前代码复测:9 个字段全部提取,无拦截,云端调用 0,原件摘要不变。
|
||||
|
||||
仍开放:
|
||||
|
||||
- 员工授权翻页超时根因未定。r8、r9 均通过,但都没有确定性触发失败分支。该项属于原有员工场景,不在 N5-P 改动范围内,保留为开放项。
|
||||
- 待第三轮独立复核。
|
||||
- 未提交、未推送、未部署。
|
||||
|
||||
## 2026-10-10 N5-P 复核修复与真实版式适配(未提交;后续修复见上节)
|
||||
|
||||
独立复核(`artifacts/qa-flow/loan-incoming-prefill-20261009/independent-review-20261010.md`)结论为 CHANGES_REQUESTED,4 项 P2 均已复现。本节记录修复结果;下面首轮实现记录中的统计和基线写法有误,以本节为准。
|
||||
|
||||
### 更正
|
||||
|
||||
- 实施基线是 `45737ccb`,不是首轮写的 `c1034bbe`。
|
||||
- 首轮称 r5 共 247 项,实际是各层检查数组直接相加,含重复,去重后为 188 项。r5 也没有运行新入口的浏览器场景,那 6 项来自单独的 `browser-r2.log`。
|
||||
|
||||
### 复核问题修复
|
||||
|
||||
- R1 多笔交易:金额、流水号、凭证号任一出现不同值,即判为多笔交易,本地与 OCR 一致处理,人工补号也无法解除。同一交易跨页重复仍允许。
|
||||
- R2 外币:本地发现非人民币时,在调用 OCR 前就拦截;OCR 币种与本地不一致记为 `currency_conflict` 并拦截,不再把已知币种清空成“未知”。
|
||||
- R3 OCR 时限:每页发送前检查共同截止时刻,超时后不再发送后续页。
|
||||
- R4 金额:整段值必须是一个合法的人民币金额,千分位错误或超过两位小数记为 `invalid`,不再截断成另一个金额。到账日期同样处理。
|
||||
- AC37 来源变更:保存时携带所选出借人的身份版本和账户版本,识别后出借人被修改即返回 `loan.version_changed`。
|
||||
|
||||
### 真实建行版式适配
|
||||
|
||||
经用户授权,本机只读运行脱敏结构探查:已知标签保留,数字改为 9、字母改为 A、其他汉字改为“某”。不调用云端、不写库、不保存文件,原件摘要前后一致。两份借入回单是“单位客户专用回单”表格版式:PDF 文字顺序与阅读顺序不同,付款人、收款人是竖排栏头,日期在顶行且没有标签,金额分大写和小写,右侧竖排联次说明中也含“收款人”。
|
||||
|
||||
据此新增以下处理(`PARSER_VERSION` 改为 2):
|
||||
|
||||
- PDF 工作线程按需返回文字位置(付款回单分类不使用,结果不变);按纵坐标归行、行内按横坐标排序;竖排文字不并入横向行。
|
||||
- 顶行日期规则;`(小写)` 金额标签。
|
||||
- 付款人、收款人栏头须恰为该词且付款人在左。
|
||||
|
||||
新增同版式的合成生成器 `syntheticCcbIncomingPdf`,内容全部虚构。
|
||||
|
||||
最终代码下两份真实样本:金额、到账日期、流水号、币种、双方名称及账号全部提取,方向为入账,无拦截项,云端调用 0。具体数值是否正确,仍由财务保存前对照原件核对。
|
||||
|
||||
### 验证
|
||||
|
||||
- 单测 46 项(较首轮新增 24 项);回单分类相关测试仍通过。
|
||||
- 隔离 HTTP 9 组,新增建行版式识别、主体建议与保存;浏览器电脑/手机 6 组(`browser-r4.log`)。
|
||||
- 变异 18 个全部捕获(HTTP 12 个、单元 6 个,`mutations-summary.json`)。其中“行内按横坐标排序”首次未捕获,原因是合成文字同一行的基线完全相同,补充基线偏移用例后已捕获。
|
||||
- 借款完整回归 `regression-r8.log` 通过,检查项去重后 189 项(相加为 248)。
|
||||
- r6、r7 均在员工出借人浏览器场景的手机端翻页处超时:等待响应在点击完成前超时,未处理的异常导致进程退出,未留截图。r8 改为点击与等待一起处理并设 30 秒点击时限后通过,但当次没有触发失败分支,无法确认是修复生效还是恰好不需翻页,**根因未定**。
|
||||
- 工作区另有一处测试调整:原对账浏览器场景固定 `timezoneId: 'UTC'`(见首轮记录)。
|
||||
|
||||
### 仍开放
|
||||
|
||||
- 需要再次独立只读复核本节改动(AC39)。
|
||||
- 真实样本只验证了字段能提取出来,没有核对数值。真实云端 OCR 未调用。
|
||||
- 未提交、未推送、未部署。
|
||||
|
||||
## 2026-10-10 N5-P 本地实现与验证完成(首轮,未提交;统计与基线见上节更正)
|
||||
|
||||
用户先听取“暂缓”建议后明确要求实施,选择**完整方案**并指定由 Claude 会话实施。基线为本地 `c1034bbe`(线上 `45737ccb`),已执行 `task.py start`。本节记录实际结果;下方原计划保留规划时点。
|
||||
|
||||
### 实现
|
||||
|
||||
- 服务端:新增 `loanIncomingReceipt.js`。它复用受限 PDF 文字工作线程(从 `inspectReceiptDocument` 抽出 `extractReceiptTexts`,付款回单分类语义不变),按白名单标签逐行读取金额、记账/交易日期、流水号/凭证号、币种、双方名称与账号;同一字段出现不同值时留空并标为“歧义”。多页同一交易可合并,多笔交易、非最终、失败/处理中、非人民币一律拦截。本地缺必填字段时,才调用一次现有腾讯 BankSlipOCR:每页最多一次、总时限 20 秒、不重试,结果只补空缺,不覆盖本地值,也不能解除限制。
|
||||
- 预填上下文用 AES-GCM 字段加密封装,绑定用途、经办人、文件 SHA-256、解析版本和 30 分钟有效期;只经请求体传递,响应 `no-store`,账号只返回遮罩值。
|
||||
- 新接口:`POST /company-loans/incoming-receipt/recognize` 只做识别,不写任何数据;`POST /company-loans/from-incoming-receipt` 先在事务外写入原件,再在同一事务内锁出借人、创建借款、创建 `incoming` 原件并写两条审计,失败或幂等重试时删除本次新写的对象。保存时重验收款主体:公司支出或收款方为其他主体的回单拒绝保存;审计只记录字段来源和被更正的字段名。
|
||||
- 同一出借人的 `incoming` 原件按摘要唯一:新入口与原有附件上传都检查,原上传路径改为先锁出借人、再锁借款,与还款创建的锁序一致。
|
||||
- 前端:新增“上传回单登记借入”入口和 `LoanIncomingReceiptDialog`,复用现有组件。迟到的识别结果不覆盖人工修改或新选的文件;切换账号、卸载时中止请求;原“登记借入”手工入口保持不变。新增 4 个错误码,三处已同步登记。无新增迁移,仍为 82 项。
|
||||
|
||||
### 验证(证据目录 `artifacts/qa-flow/loan-incoming-prefill-20261009/`)
|
||||
|
||||
- 单元测试:新增 22 项;相关付款回单、报销路由及授权策略合计 349 项通过(BIFF8 需指定 `PAYMENT_ORDER_PYTHON_BIN`,不设时有 2 项报环境不可用)。Prisma 校验、前端类型检查与构建、错误码合同、UI 规则均通过。
|
||||
- 隔离 PG HTTP 8 组:识别不落数据、保存后余额待核实且带原件、重试与请求键、跨入口原件重复、上下文绑定(他人、换文件、篡改、过期)、受限/支出/他方收款拦截、无 OCR 时人工补录、审计失败整体回滚并删除对象、并发与新旧入口竞争只成功一个。
|
||||
- 浏览器电脑/手机共 6 组(`browser-r2.log`):预填、人工更正、同账号令牌过期只重试一次后成功、受限文件拦截、迟到结果不覆盖新文件、真实切换账号后迟到 401 被中止且不以新身份重发。
|
||||
- 变异 10 个全部被测试抓到(`mutations-summary*.json`)。首轮“公司支出”未被抓到:原用例同时触发了“收款主体不符”,已改为只写付款方后单独验证。
|
||||
- 借款完整回归 `regression-r5.log`:247 项检查全部通过,含 HTTP 116 组、浏览器 45 组。r1–r4 的失败保留:r1–r3 是原有对账浏览器场景用 UTC 时间填表、浏览器却沿用本机 CST,北京时间 0–8 点运行必然失败,已在该场景显式固定 `timezoneId: 'UTC'`(r3 的补丁实际未生效,r4 才生效);r4 是新场景多建的出借人挤动了员工场景的分页,已把借入回单场景移到完整运行最后。未改任何业务断言。
|
||||
- 既有测试素材调整:同一出借人多笔借款原先上传同一份 `incoming` 测试 PDF,现在每笔各自生成唯一内容,其他材料类型不变。
|
||||
|
||||
### 未完成与边界
|
||||
|
||||
- **独立复核未做**:实施与自检出自同一会话,不能算独立复核(AC39 保持未勾选),需另行只读复核。
|
||||
- **真实建行版式未验证**:解析只在合成的“标签 值”同行版式上验证过。真实借入回单若采用标签与数值不同行的表格版式,本地可能读不出字段:OCR 未启用时转人工填写,启用时会调用云端。两份真实借入回单的本地只读试解析,或真实材料的云端识别,都需另行授权。
|
||||
- 未提交、未推送、未部署;未调用真实 OCR,也未访问生产。
|
||||
|
||||
## 2026-10-09 N5-P 原借入回单识别预填执行计划(规划时点)
|
||||
|
||||
### 当前阶段与授权
|
||||
|
||||
用户已要求规划,复用本任务,当前仅修改 PRD/design/implement。2026-10-09 在 `main`、本地基线 `45737ccb` 核对 `task.py current --source` 为 none;规划阶段不调用 start,不手写运行时指针。父任务的 `in_progress` 代表历史已批准工作,不代表 N5-P 实施已批准。用户转交上一会话的部署结果已在 PRD Current Status 标记来源,本轮未连接生产重验。
|
||||
|
||||
无原生 update_plan,以下为本阶段执行清单。inline 模式由主会话实现和检查,不派 implement/check 子代理;稳定 spec 直接按需加载,不把临时计划、日志或本文件登记进 jsonl。
|
||||
|
||||
### 顺序与验收映射
|
||||
|
||||
- [x] P0 规划:核对入口、文件策略、PDF 工作者、银行 OCR 字段、数据模型与隐私规则;形成 PRD P1–P6 / AC32–AC39、design P-A–P-E 和本清单。保留原阶段结果;实施批准仍待用户给出。
|
||||
- [x] P1 启动:收到本方案实施批准后,官方 `python3 .trellis/scripts/task.py start 09-17-company-loan-principal-repayment`,读回 current 与 phase,再加载 trellis-before-dev。记录批准范围、实际基线及执行位置;若届时 N5 已人工登记,不迁移或重建既有数据。
|
||||
- [x] P2 解析与预填(AC32、34、35):在受限文字提取上加借入字段白名单、金额/日期/引用歧义处理及相对公司方向判断;补扫描 PDF 的受控 OCR 适配及关闭/失败降级。复用底层,保留旧付款凭证分类和归一化结果。完成正常、非最终/失败/支出、多交易、格式/字节限制、OCR 零调用/有界调用的单元反例。
|
||||
- [x] P3 保存合同(AC33、36、37、38):添加无业务持久化识别接口与带同一原件的原子登记接口;实现专用加密上下文、身份/文件/时效绑定、最终主体重验、请求键及摘要去重、旧上传竞争和失败补偿。审计与业务同事务;保存不确认余额。扩展现有真实隔离 HTTP/PG fixture,证明两种顺序、故障回滚和旧路径兼容。
|
||||
- [x] P4 电脑手机入口(AC32、33、35、37):沿原弹窗复用组件实现上传、识别预填、人工更正和一次保存;保留手工登记。覆盖换文件、取消、失败重试、手改保护、来源缺项、迟到401换账号及同身份重试。用户只需选择一次文件,保存后原件已在该笔材料中。
|
||||
- [ ] P5 整体验证与只读复核(AC38、39):运行最小完整检查集和原借款专项回归,按变化范围覆盖共享付款解析。权限与保存流程变化需要独立只读复核;本会话 inline 限制下不派检查代理,准备精确交审范围并标为待外部独立复核,不能沿用 AC28–AC31 的复核结论。有可用且合规的独立只读会话后接收实际结果。
|
||||
- [ ] P6 文档与交接:按实际证据更新各 AC、PRD 状态及本清单;经 trellis-update-spec 判断后补既有借款/附件规约,不提前把提案写成已生效事实。报告本地实现、独立复核、实样/OCR及公网状态。提交、推送、部署、真实业务与真实材料云识别分别按明确授权办理。
|
||||
|
||||
### 预计修改范围
|
||||
|
||||
- Backend:`server/src/routes/companyLoans.js`、`server/src/services/companyLoans.js`,新增借入识别/保存专用服务;必要时对 `paymentReceiptDocument.js` / `paymentReceiptDocumentWorker.js` / `paymentReceiptOcr.js` 做最小底层提取复用。现有 `paymentDocumentReady` 的付款方向、成功及核销规则不改变。错误理由新增时同步注册、客户端映射及既有合同测试。
|
||||
- Frontend:`client/src/pages/CompanyLoansPage.tsx`、`client/src/api/companyLoans.ts`,按可读性抽出与借入登记直接相关的弹窗组件;不重构整页或员工档案。
|
||||
- Tests:现有 `scripts/qa/test-company-loan-db.cjs`、HTTP/browser fixture 接入新增合成场景;共享解析测试与新借入服务测试按实际职责分文件。新增代码文件名在实施时固定,本计划不预称其已经存在。
|
||||
- 不改 schema/migrations、生产配置、付款状态机、公司授权规则或既有员工资料。若证据证明必须改这些边界,先补风险/兼容设计并取得范围批准。
|
||||
|
||||
### 最小验证集(实施后执行)
|
||||
|
||||
1. 后端改动 `node --check`;`cd server && npm run prisma:validate`;运行新增借入服务测试及已有 `tests/unit/services/paymentReceiptDocument.test.js`、`paymentReceiptOcr.test.js`,若碰共享归一化再覆盖对应消费者。使用项目 Vitest 实際脚本,不能以一份针对性测试冒称全量通过。
|
||||
2. `cd client && npm run typecheck && npm run build`;错误理由/UI合同沿现有 `check-error-reason-contract.mjs`、`check-ui-design-rules.mjs` 按影响执行。
|
||||
3. `RUN_ISOLATED_LOAN_DB_TEST=1 RUN_ISOLATED_LOAN_BROWSER=1 node scripts/qa/test-company-loan-db.cjs`:仅新建一次性数据库、合成身份/回单,沿现有受控 Python/浏览器缓存环境;保留原借款/员工/关联方场景。执行前确认适用环境,禁止指向本地业务库或生产库;清理只针对本轮 owner。
|
||||
4. 必须有确定性交错:重复保存、同请求不同文件、相同原件不同请求、识别后出借人资料变更、旧上传与新保存、审计失败/存储失败。读取原件哈希、借款/附件/审计数量及权限结果,不只断言 HTTP 200。必要的权限/绑定守卫做少量定向变异,环境失败不算捕获。
|
||||
5. 浏览器电脑/手机各实际完成上传预填、人工修正、保存后附件与待核实余额;无 OCR 路径可完成手工登记。覆盖多笔/非最终拒绝、迟到响应与换账号取消,且保存未触发余额确认/授权/付款。合成 PDF 和 provider 替身明确标记,不调用真实云端或保留真实银行资料。
|
||||
6. 任务文档检查:`python3 .trellis/scripts/task.py validate 09-17-company-loan-principal-repayment`、`node scripts/qa/check-trellis-governance.mjs`、`node scripts/qa/check-process-contract.mjs --baseline --json`、`node scripts/qa/audit-docs.mjs --check-registry`、`node scripts/qa/check-sensitive-content.mjs`、`git diff --check`。未改历史 Issue CSV,不新建 CSV 执行合同。
|
||||
|
||||
### 规划交付检查
|
||||
|
||||
2026-10-09 规划文档检查:任务 validate、Trellis 治理、流程合同 baseline、文档索引、敏感内容扫描及 `git diff --check` 均通过。文档索引仍有既有 22 份未登记文件的 1 条汇总警告;inline 可选的 implement/check jsonl 缺失按规则跳过,不宣称注入已配置。新增 P1–P6、AC32–AC39 与设计/清单已收敛核对,现有历史验收和开放项保留;只有本阶段实施批准待取得。没有运行产品测试、调用真实 OCR 或实施/部署;不把本节计划命令当作已执行证据。
|
||||
|
||||
## 2026-10-09 N5 员工出借人选择调整(本地实现与验证完成,未提交)
|
||||
|
||||
用户提出从现有员工选择出借人并复用资料,避免重复手录。已只读核对员工主档、敏感银行卡维护接口、借款登记/身份/账户接口及电脑手机共用页面;实现基线为本地 `c1034bbe`,线上仍为 `beb9f02c`。用户已明确确认方案,本轮接续本地实现及针对性验证;不连接生产、不代录真实数据,提交、推送和部署不在本轮授权内。
|
||||
|
||||
在新工单中引用
屏蔽一个用户