fix: 收款流水认领上限改按收款金额,修复金蝶已匹配收款单无法认领

A301-1 收款单被财务核销后 unmatchamountrec 为 0,旧口径以未匹配金额为认领上限导致 704/797 条流水无法认领。
认领只登记本地并推合同合规,与金蝶匹配状态无关,故额度改为收款金额,由本地累计认领控制;未匹配金额降为参考展示。
This commit is contained in:
刘泉佳
2026-10-29 20:07:49 +08:00
parent 2eded6b20f
commit fce3f00a1e
7 changed files with 285 additions and 48 deletions
@@ -2,6 +2,11 @@
> 日期:2026-10-16
> 范围:`tms-api` blade-transport 收款流水认领、认领记录模块;`tms-erp-web` 认领记录页面
>
> **口径变更提示(2026-10-29)**:文中"公告未认领金额 `unclaimed_amount` / A301-2 口径"已废止,见
> [2026-10-29-收款流水菜单改造](./2026-10-29-收款流水菜单改造(数据源A301-2改A301-1-认领只登记本地并推送合规C107-1与C107-3作废同步).md)。
> 现认领上限为**收款金额 `receipt_amount`(A301-1 `actrecamt`)**,`remaining_amount = max(收款金额 − 累计认领金额, 0)`;
> 金蝶未匹配金额 `unmatch_amount_rec` 仅作参考展示,不参与额度控制。认领/作废/多次认领的其余口径不变。
---
@@ -45,10 +50,10 @@ blade_kingdee_receipt_flow(收款流水 / 认领通知单,1)
1. 锁定流水(通知单)与所选结算单。
2. 校验两条累计上限:
- 每张结算单:已有累计认领 + 本次分摊 ≤ 结算总应收含税金额;
- 流水:已有累计认领(`flowClaimedAmount`,只算未作废记录)+ 本次总额 ≤ 公告未认领金额(`unclaimed_amount`,A301-2 口径)。
- 流水:已有累计认领(`flowClaimedAmount`,只算未作废记录)+ 本次总额 ≤ 收款金额(`receipt_amount`,A301-1 口径;2026-10-29 前为公告未认领金额)。
3. **插入一条** `ReceiptClaim` 主单:`claim_amount` = 本次分摊总额,`claim_status = claimed`。
4. 按所选结算单逐张**插入 N 条** `ReceiptClaimSettlement` 分摊明细。
5. 累加流水 `claimed_amount`,按累计值重算流水状态(< 未认领金额 → partial,= → claimed)。
5. 累加流水 `claimed_amount`,按累计值重算流水状态(< 收款金额 → partial,≥ 收款金额 → claimed)。
6. 只登记本地,不推送金蝶;推送由定时任务/手动按钮触发。
所以:**同一通知单第二次认领是再插一条新主单**,不存在"找已有主单合并金额"的逻辑;校验全部按"未作废记录累计"实时计算,天然支持多次认领。
@@ -69,17 +74,17 @@ canClaim(row) {
2. **剩余可认领金额 > 0**:`remainingAmount` 由后端 `ReceiptFlowWrapper` 统一计算:
```
remainingAmount = max(公告未认领金额 unclaimed_amount − 累计认领金额 claimed_amount, 0)
remainingAmount = max(收款金额 receipt_amount − 累计认领金额 claimed_amount, 0)
```
按认领状态换算:
| 流水认领状态 | remainingAmount | 认领按钮 |
| --- | --- | --- |
| unclaimed 未认领(公告金额 > 0) | = 公告未认领金额 > 0 | 显示 |
| unclaimed 未认领(收款金额 > 0) | = 收款金额 > 0 | 显示 |
| partial 部分认领 | > 0 | 显示 |
| claimed 认领完成 | = 0(累计 ≥ 公告金额) | **不显示** |
| 公告未认领金额为 0 的流水 | = 0 | **不显示** |
| claimed 认领完成 | = 0(累计 ≥ 收款金额) | **不显示** |
| 收款金额为 0 或缺失的流水 | = 0 | **不显示** |
| 无 `receipt_flow_claim` 权限 | — | **不显示** |
即:**按钮显隐只看金额余额与权限,不看认领状态字段本身**;`claimed` 状态的行因为剩余额度为 0 自然不显示按钮。按钮不显示且不满足"推送金蝶"条件时,操作列显示"-"。
@@ -19,7 +19,7 @@
| # | 决策点 | 结论 |
| --- | --- | --- |
| 1 | 认领上限口径 | 按 A301-1 的 **unmatchamountrec(未匹配收款金额)**,与收款金额取 min |
| 1 | 认领上限口径 | **收款金额 `receipt_amount`(A301-1 `actrecamt`)**。原定 `unmatchamountrec` 与收款金额取 min,因金蝶侧财务先核销导致大量收款单未匹配金额为 0、TMS 永久无法认领,2026-10-29 修正:认领只登记本地,额度由本地累计认领控制,`unmatchamountrec` 仅参考展示 |
| 2 | 合规推送范围 | **C103-9(履约计划金额累加)、C107-1(认领记录)、C108-1(履约流水)全保留** |
| 3 | C107-1 推送失败补偿 | **不做定时重试,只落推送标记**(blade_receipt_claim_hcs_record.push_status = failed + 失败原因) |
| 4 | 认领作废 | **需要 C107-3 作废同步**(fdStatus=1),C107-1 返回的合规 fdId 必须落库 |
@@ -75,7 +75,7 @@ A301-1 收款单查询(业务日期窗口取 `thirdParty.bfi.recBillSync.days`
| kingdee_bill_status | `billstatus` 映射 | A/B已提交→pushed、C已审核→approved、D已收款→received、其余(含G退单)→failed |
| detail_serial_no | 主单 `billno` | 明细流水号=收款单号,**幂等键**;主单粒度,一张收款单一条流水,不展开流水分录 |
| receipt_amount | 主单 `actrecamt` | 收款金额(金蝶收款金额口径) |
| unmatch_amount_rec | `unmatchamountrec` | 未匹配收款金额(认领上限口径;原列名 unclaimed_amount 已改名) |
| unmatch_amount_rec | `unmatchamountrec` | 未匹配收款金额(金蝶参考展示,**不参与认领额度**;原列名 unclaimed_amount 已改名) |
| match_amount_rec | `matchamountrec` | 已匹配收款金额 |
| match_amount_pay | `matchamountpay` | 已匹配付款金额 |
| unmatch_amount_pay | `unmatchamountpay` | 未匹配付款金额 |
@@ -94,14 +94,14 @@ A301-1 收款单查询(业务日期窗口取 `thirdParty.bfi.recBillSync.days`
| bill_id / payer_id / kingdee_claim_status / claim_me | — | **废弃不再写入**(历史 A301-2 专属字段,列保留兼容存量) |
| push_status / push_fail_reason / pushed_time / awrp_src_code | — | **不再写入**(A301-3 下线;存量已推送数据保留展示) |
同步保持原有框架:明细流水号重复抛异常、金额 ≤0 跳过、FOR UPDATE 批量防并发、按幂等键 upsert、批量操作日志;本地认领字段(claimed_amount / claim_status)不被同步覆盖,认领后状态按「累计认领 vs 未匹配金额」重算。
同步保持原有框架:明细流水号重复抛异常、金额 ≤0 跳过、FOR UPDATE 批量防并发、按幂等键 upsert、批量操作日志;本地认领字段(claimed_amount / claim_status)不被同步覆盖,认领后状态按「累计认领 vs 收款金额」重算。
### 3.3 认领与合规推送链
`ReceiptFlowServiceImpl#claim()`:
- 删除「认领公告id缺失」「公告未认领金额缺失」拦截(A301-1 无公告概念);
- 认领上限:`claimCeiling = min(unclaimed_amount(unmatchamountrec), receipt_amount)`;
- 认领上限:`claimCeiling = receipt_amount`(收款金额 `actrecamt`,金蝶未匹配金额不参与额度控制);
- 认领主单冗余展示字段直取流水:`kingdeeBillNo` / `kingdeeBillStatus`(金蝶单据认领前已存在);
- 事务提交后(`TransactionSynchronizationManager.afterCommit`)按**认领主单**触发 `HcsClaimSyncSupport#pushClaimToHcs(claimId)`,失败仅落标记不影响认领。
@@ -186,7 +186,7 @@ A301-1 收款单查询(业务日期窗口取 `thirdParty.bfi.recBillSync.days`
| # | 项 | 说明 | 等级 |
| --- | --- | --- | --- |
| 1 | **明细流水号同源性** | A301-1 `bei_detailid` 必须与原 A301-2 `detailid`、合规侧 `fdDetailSerialNumber` 同值,否则 C104-2 定位失败 → C107-1 全部跳过(仅记日志/落失败标记)。需联调拿真实报文核对 | 高 |
| 2 | 单据级未匹配金额 | `unmatchamountrec` 为收款单级口径;一张收款单多条流水分录时各行共享同一上限,理论上限放大(单分录场景无影响) | 中 |
| 2 | 认领额度与金蝶匹配解耦 | 上限改用收款金额后,金蝶侧已匹配(核销)的收款单同样可认领并推合规;金蝶匹配状态变化不影响 TMS 已认领额度(按 `claimed_amount` 本地累计)。原 `unmatchamountrec` 口径下 797 条流水有 704 条额度为 0,需求无法闭环 | 中 |
| 3 | 合规履约计划金额不回退 | C103-9 认领时累加,作废仅同步 C107-3,不回退履约计划行金额(与改造前口径一致,未新增回退逻辑) | 中 |
| 4 | 全公司可见范围 | A301-1 按组织/日期拉全量,不再按认领人过滤,页面数据范围扩大(业务已确认可接受) | 低 |
| 5 | C107-1 失败无自动重试 | 仅落 failed 标记与原因,需人工在合规侧核对补录(业务已确认) | 低 |
@@ -194,7 +194,7 @@ A301-1 收款单查询(业务日期窗口取 `thirdParty.bfi.recBillSync.days`
## 7. 验证清单(交由测试/联调执行)
1. 手动同步:A301-1 拉取、流水按 infoentry 展开、重复明细流水号拦截、金额/单号/状态落库正确;
2. 认领:上限按未匹配金额控制、认领完成状态判定、合规链推送成功后 `blade_receipt_claim_hcs_record` 有 success 记录且 fdId 非空;
2. 认领:上限按收款金额控制、认领完成状态判定、合规链推送成功后 `blade_receipt_claim_hcs_record` 有 success 记录且 fdId 非空;
3. 继续认领:第二次认领各自推送一次 C107-1/C108-1,C103-9 累计金额正确;
4. 作废:本地回退 + C107-3 同步、记录置 voided;无合规记录(推送失败)时作废静默跳过;
5. 合规开关关闭(exe-stage/perf-record sync-enabled=false)时认领/作废主流程不受影响;
@@ -0,0 +1,254 @@
# 收款流水认领操作流程(收款金额本地额度 · 单条/批量/作废)
> 日期:2026-10-29
> 范围:`tms-api` blade-transport 收款流水(同步、认领、认领记录)+ `tms-erp-web` 收款流水 / 认领记录页面
> 关联文档:
> - [2026-10-29-收款流水菜单改造(数据源A301-2改A301-1-认领只登记本地并推送合规C107-1与C107-3作废同步)](./2026-10-29-收款流水菜单改造(数据源A301-2改A301-1-认领只登记本地并推送合规C107-1与C107-3作废同步).md)(改造设计与字段映射)
> - [2026-10-16-收款流水多次认领与作废口径梳理](./2026-10-16-收款流水多次认领与作废口径梳理.md)(多次认领、逐条作废口径)
---
## 0. 一页速览
| 项 | 内容 |
| --- | --- |
| 菜单入口 | 首付款管理 → **收款流水**(`/payment/receipt-flow`)、**认领记录**(`/payment/receipt-claim-record`) |
| 数据来源 | 金蝶 A301-1 收款单查询(收款处理单),**手动同步**触发,无定时任务 |
| 流水粒度 | 一张金蝶收款单 = 一条流水(`detail_serial_no` = 收款单号,幂等键) |
| 可认领上限 | **收款金额 `receipt_amount`(金蝶 `actrecamt`)** |
| 剩余可认领 | `max(收款金额 − 已认领金额 claimed_amount, 0)` |
| 未匹配金额 | 金蝶 `unmatchamountrec`,**仅参考展示,不参与额度控制** |
| 认领动作 | 只登记本地(认领主单 + 结算单分摊),**不推金蝶** |
| 合规推送 | 认领事务提交后推 C103-9 → C107-1 → C108-1;作废推 C107-3 |
| 状态 | `unclaimed` 未认领 / `partial` 部分认领 / `claimed` 认领完成 |
---
## 1. 角色与权限
| 操作 | 权限码 | 说明 |
| --- | --- | --- |
| 查看收款流水 | `receipt_flow_view` | 菜单权限 `receipt_flow` |
| 认领 / 批量认领 | `receipt_flow_claim` | 无此权限时操作列显示 `-`,顶部无「批量认领」按钮 |
| 手动同步流水 | `receipt_flow_sync` | 无此权限时顶部无「手动同步流水」按钮 |
| 查看认领记录 | `receipt_claim_record` | **只显示当前登录人自己的认领记录** |
| 作废认领记录 | `receipt_claim_record_void` | 仅本人、且状态为「已认领」的记录可作废 |
管理员(`admin`)默认直通按钮权限判断;认领记录页的数据范围仍按当前登录人过滤,管理员也只能看到自己做的认领。
---
## 2. 流程总览
```
【金蝶】A301-1 收款单
│ ① 手动同步(可按窗口重复执行,幂等)
▼
【TMS】收款流水列表(blade_kingdee_receipt_flow)
│ ② 勾选/单条 → 选择应收正式结算单 → 填分摊金额
▼
【TMS】认领(blade_receipt_claim + blade_receipt_claim_settlement)
│ ③ 更新流水累计认领金额/状态、刷新结算单收款汇总
│ ④ 事务提交后推合规:C103-9 → C107-1 → C108-1(失败只落标记)
▼
合规侧认领记录(C107-1 返回 fdId 落库)
│ ⑤ 需要撤销时在「认领记录」页作废
▼
本地回退金额 + 推 C107-3(fdStatus=1 已作废)
```
---
## 3. 场景一:同步收款流水
**入口**:收款流水页顶部「手动同步流水」。
**前置条件**:组织管理中已维护“是否平台公司 = 是”且已填金蝶编码的组织,否则直接报错「组织管理中未维护平台公司金蝶编码,无法同步金蝶收款流水,请先检查组织数据」。
**动作**:
1. 按业务日期窗口取数:结束日期 = 当天,开始日期 = 当天 − `thirdParty.bfi.recBillSync.days`(默认 60 天),起止时间格式 `yyyy-MM-dd HH:mm:ss`;
2. 按上述组织编码过滤,全量翻页拉取(pageSize 200,兜底 500 页,结束条件为末页/不满一页);
3. 以收款单号去重,按幂等键 upsert:新增初始化 `claimed_amount = 0`、`claim_status = unclaimed`;已存在只更新金蝶来源字段,**不覆盖本地认领金额与状态**;
4. 收款金额 ≤ 0 的收款单跳过;
5. 每批 5000 条独立事务入库,并写同步操作日志。
**结果提示**:「流水同步完成,共同步 N 条收款流水」,列表自动刷新。
**注意**:
- 同步窗口从今天倒推,历史更早的单据不会进入;需要更早数据时调整 Nacos `thirdParty.bfi.recBillSync.days` 后重新同步(该配置支持热更新)。
- 金蝶侧改动(金额、状态、匹配/结算金额)每次同步都会刷新;**TMS 已认领金额与状态不受影响**,但状态会按新的收款金额重算。
---
## 4. 场景二:单条认领
### 4.1 入口与显示条件
列表操作列「认领」需同时满足:
1. 有 `receipt_flow_claim` 权限(admin 直通);
2. 剩余可认领金额 > 0(即收款金额 > 累计已认领金额)。
不满足时操作列显示 `-`。列表列「未匹配金额」为金蝶口径参考值,**该列为 0 不影响认领**。
### 4.2 操作步骤
1. 点「认领」进入认领页面,顶部只读展示:收款单号、付款人、收款金额、交易时间、对方户名/开户行/账号、明细流水号、已认领金额、未匹配金额(金蝶参考)、剩余可认领金额、摘要、认领人、认领日期、认领人部门;
2. 点「关联结算单」选择器,弹窗按结算单号/项目/合同搜索:
- 候选范围:应收类型 + 已审批通过 + 有效状态 + 该结算单自身仍有剩余可认领金额;
- 多选时必须**同一项目、同一组织、同付款方、同收款方**,否则提示「关联结算单必须属于同一项目、组织及收付款方」;
3. 在「结算信息」明细中逐张填写「分摊收款金额」:
- 单张结算单分摊上限 = 结算总金额 − 已认领收款金额;
- 本次分摊合计必须 ≤ 当前页面的「剩余可认领金额」;
4. 维护附件(可选)、备注(≤200 字);
5. 点「确认」。
### 4.3 确认后系统做了什么
| 步骤 | 内容 |
| --- | --- |
| 1 | 行锁流水与所选结算单,防止并发超额 |
| 2 | 校验:每张结算单「已认领 + 本次分摊 ≤ 结算总金额」;流水「已认领 + 本次分摊 ≤ 收款金额」 |
| 3 | 插入 1 条认领主单 `blade_receipt_claim`(`claim_amount` = 本次分摊合计) |
| 4 | 按结算单插入 N 条分摊 `blade_receipt_claim_settlement`(记录认领前已认领金额、本次分摊金额) |
| 5 | 刷新各结算单收款汇总;流水 `claimed_amount` 累加,重算 `claim_status`(0 → unclaimed,< 收款金额 → partial,≥ 收款金额 → claimed) |
| 6 | 写流水操作记录(认领动作、金额、关联结算单数) |
| 7 | **事务提交后**按认领主单推合规:C103-9(履约计划金额累加)→ C107-1(认领记录,返回 fdId 落库)→ C108-1(履约流水);任一步失败只落 `blade_receipt_claim_hcs_record` 失败标记,不回滚认领 |
| 8 | 返回收款流水列表,提示「认领成功」 |
> 合规开关关闭(`exe-stage.sync-enabled` / `perf-record.sync-enabled`)时,认领主流程不受影响,只是不推合规。
---
## 5. 场景三:批量认领
**入口**:列表勾选多条流水 → 顶部「批量认领」(需 `receipt_flow_claim` 权限)。
**前置校验**:所选流水的**付款人 + 对方账号必须完全一致**,否则提示「批量认领所选流水的付款人、对方账号必须一致」。
**操作步骤**:
1. 进入「批量认领收款流水」页面,顶部明细列出所选流水(收款单号、收款金额、已认领金额、未匹配金额、剩余可认领金额、摘要);
2. 选择关联应收结算单(候选规则同单条认领,多选同样要求同项目/组织/收付款方);
3. 在「结算单 × 流水」分摊矩阵中逐格填写金额:
- 单格上限 = min(该结算单剩余可认领 − 该结算单其它格已填, 该流水剩余可认领 − 该流水其它格已填);
4. 附件、备注同单条认领;
5. 点「确认」。
**提交逻辑**:
- 先校验结算单维度(累计分摊 ≤ 结算单剩余)与流水维度(累计分摊 ≤ 流水剩余可认领);
- 按流水逐条提交认领:**每条流水生成一条认领主单**,各自推一次合规(C103-9 累计金额按各次认领累加);
- 分摊为 0 的格子不提交;全部为 0 时提示「没有需要入库的分摊收款金额」;
- 全部成功提示「批量认领成功,共 N 条流水」并返回列表。
> 批量提交是逐条循环调用认领接口,非单一事务:中途某条失败时,之前的流水已认领成功,需要按提示逐条核查(可在「认领记录」页确认已成功的部分)。
---
## 6. 场景四:部分认领与继续认领
1. 首次分摊合计小于收款金额 → 流水状态变「部分认领」(`partial`),剩余可认领金额 = 收款金额 − 累计已认领;
2. 再次点「认领」进入页面时,会**自动预填本流水历史关联且仍有剩余可认领金额的结算单**(分摊金额默认 0,需重新填写);
3. 每次认领都是一条新的认领主单,合规侧每次各推一次 C107-1/C108-1,C103-9 按合同累计;
4. 累计达到收款金额 → 状态「认领完成」,操作列不再显示「认领」。
---
## 7. 场景五:作废认领记录
**入口**:认领记录页(仅本人记录)→ 操作列「作废」(需 `receipt_claim_record_void`,且记录状态为「已认领」)。
**操作**:点击后二次确认,提示「作废后将回退本次认领金额,并同步作废合同合规系统认领记录」。
**作废后系统做了什么**:
| 步骤 | 内容 |
| --- | --- |
| 1 | 行锁认领主单、收款流水、关联结算单 |
| 2 | 本次认领的分摊行批量置为无效(`status = 0`) |
| 3 | 刷新关联结算单收款汇总 |
| 4 | 流水 `claimed_amount` 回退本次认领金额(不小于 0),并按收款金额重算状态(可能回到 unclaimed / partial) |
| 5 | 认领主单置「已作废」,记录作废人、作废时间与操作日志 |
| 6 | 事务提交后逐条推 C107-3(按落库 fdId 传 `fdStatus=1`),成功记录置 `voided`;单条失败只记日志,**不回滚作废**,需人工在合规侧处置 |
**注意**:
- 已作废记录不可重复作废;
- 作废不生成金蝶冲销单,金蝶收款单本身不受影响(金蝶侧红冲由财务人工处置);
- 认领记录允许本人维护附件(`/receipt-claim-record/attachments`)。
---
## 8. 状态与金额口径
### 8.1 流水认领状态
| 状态 | 含义 | 判定 |
| --- | --- | --- |
| `unclaimed` 未认领 | 尚未认领 | 累计认领金额 = 0 |
| `partial` 部分认领 | 已认领一部分 | 0 < 累计认领金额 < 收款金额 |
| `claimed` 认领完成 | 额度用尽 | 累计认领金额 ≥ 收款金额 |
### 8.2 关键金额
| 金额 | 来源/公式 | 用途 |
| --- | --- | --- |
| 收款金额 `receipt_amount` | A301-1 `actrecamt` | 认领上限 |
| 已认领金额 `claimed_amount` | 本地认领累加(作废回退) | 已用额度 |
| 剩余可认领金额 `remainingAmount` | `max(收款金额 − 已认领金额, 0)` | 按钮显隐、前置校验 |
| 未匹配金额 `unmatch_amount_rec` | A301-1 `unmatchamountrec` | 金蝶参考展示,**不参与校验** |
| 结算单剩余可认领 | 结算总金额 − 该结算单已认领收款金额 | 分摊上限(结算单维度) |
### 8.3 金蝶单据状态(随同步刷新)
| `billstatus` | 本地 `kingdee_bill_status` | 页面展示 |
| --- | --- | --- |
| A 暂存 / B 已提交 | `pushed` | 已推送 |
| C 已审核 | `approved` | 审核通过 |
| D 已收款 | `received` | 已收款 |
| G 已退单 / E 变更中 / 其它 | `failed` | 处理失败(需人工在金蝶核查) |
---
## 9. 常见提示与处置
| 提示 | 原因 | 处置 |
| --- | --- | --- |
| 操作列显示 `-` | 无 `receipt_flow_claim` 权限,或已认领完成(剩余可认领 = 0) | 配权限;或确认是否已全额认领 |
| 「该流水可认领金额为0,无需认领」 | 收款金额 ≤ 0(数据异常,正常同步已跳过此类单据) | 核查金蝶收款单金额 |
| 「累计认领金额不能超过可认领上限,剩余可认领 X」 | 分摊合计超过剩余可认领 | 按提示减少分摊 |
| 前端「累计认领金额不能超过剩余可认领金额」 | 同上,前端预校验拦截 | 同上 |
| 「结算单XXX的累计认领金额不能超过结算总应收含税金额」 | 单张结算单分摊超过其剩余 | 调整该结算单分摊 |
| 「关联结算单必须属于同一项目、组织及收付款方」 | 多选结算单不一致 | 重新选择同项目同收付款方的结算单 |
| 「批量认领所选流水的付款人、对方账号必须一致」 | 勾选流水不属于同一付款账户 | 拆分批次 |
| 「组织管理中未维护平台公司金蝶编码…」 | 同步前置缺失 | 维护组织金蝶编码后再同步 |
| 未匹配金额为 0 但可以认领 | 金蝶侧财务已核销,属正常 | 忽略该列,按剩余可认领操作 |
| 认领记录页看不到某条记录 | 只显示当前登录人自己的记录 | 由本人查看/作废,或到结算单认领明细核查 |
| 合规推送失败 | C103-9/C107-1/C108-1 返回异常 | 查 `blade_receipt_claim_hcs_record` 失败原因,人工在合规侧补录(无自动重试) |
---
## 10. 与 2026-10-29 之前的差异
| 项 | 改造前 | 现在 |
| --- | --- | --- |
| 数据源 | A301-2 收款认领公告 | A301-1 收款单查询 |
| 认领上限 | `min(未匹配收款金额, 收款金额)` | **收款金额** |
| 未匹配金额的作用 | 决定是否可认领(大量单据为 0 → 无法认领) | 仅参考展示 |
| 认领后 | A301-3 推金蝶(手动/定时) | 只登记本地 + 推合规,金蝶不写 |
| 推送失败 | 定时重试 | 只落失败标记,人工处理 |
---
## 11. 操作自查清单
1. 同步后列表条数、收款单号、收款金额、金蝶状态与金蝶一致;
2. 剩余可认领金额 = 收款金额 − 已认领金额,且列表/详情/认领页三处一致;
3. 单条认领:分摊合计 = 收款金额 → 状态「认领完成」,按钮消失;小于 → 「部分认领」;
4. 继续认领:剩余额度正确、历史结算单预填、合规侧新增一条认领记录;
5. 批量认领:同一付款账户多流水一次提交,各自生成认领记录;
6. 作废:金额回退、状态回退、合规侧记录变为已作废(`blade_receipt_claim_hcs_record.push_status = voided`);
7. 超额场景(流水维度、结算单维度)均被拦截并给出可读提示。