⑤ 还款(含逾期处置)

产品定义:银行账号代扣(默认)/ 银行卡代扣 / 银行钱包转账(虚拟账号自动入账);逾期进入催收,达阈值锁机(Phase 2)。图例与服务名映射见 00-总览
多触发 + 多 TxnType。真实分流见下方「分支清单」(读 FinancialBusiness/BeforePaymentFactory/AfterPaymentFactory 核实)。
TxnType 校正:主动还款实际是 MP(Manual Repayment),不是 AP(AP 处理器为空壳)。TxnType 枚举实有 30+ 种(00-总览 的 TxnType 表已据此修正)。

时序

sequenceDiagram
    autonumber
    actor C as 客户
    participant App as 客户端 H5
    participant Job as FCS-Job(dayend/autoCharge)
    participant FCS as FCS 账务
    participant PFS as PFS 产品
    participant PMT as PMT 支付
    participant EXT as 外部三方(Paystack/Monnify)
    participant FDS as FDS 催收

    C->>App: 查还款计划
    App->>FCS: queryRepayPlanList(内部查表)

    alt 客户主动还款
        C->>App: 发起还款
        App->>FCS: activeCustomerRepayment → createOrder(TxnType MP)
    else 代扣调度
        Job->>FCS: NormalWithholding/OverdueWithholding → s1200 批处理(TxnType RP)
        Note over FCS: 读到期账户 + paystackBulkChargePlutus
    else 大数据触发
        FCS->>FCS: bigdataCallRepayment(TxnType BCP)
    end

    FCS->>PMT: BeforePaymentMessageUtils.sendMessageRepayPlutus → BeforePaymentPlutusPublisher
    PMT->>EXT: IThirdPayment.repayment(Mandate 代扣 / 卡扣)
    EXT-->>PMT: 扣款结果回调
    PMT->>FCS: repayResult 回流
    Note over FCS: AfterPaymentFactory 按 TxnType 分流销账处理器
    FCS->>PFS: queryOffsetConfig 取销账规则
    Note over FCS: PaymentHier 先费后本销账(单借据/客户级) + 结清判定
    Job->>FCS: dayend 逾期处理(s3400 罚息/滞纳金/状态变更)
    FCS->>FDS: 逾期案件(数仓拉取→电核/外访) △ Phase2 完整催收

还款 TxnType 真实分流(核心校正)

入口方法TxnType含义路径销账处理器状态
activeCustomerRepayment(客户主动还款)MP Manual Repayment客户级主动还款createOrder→发消息→回流afterPaymentMP
artificialRepay(人工还款)MR Manual Reformation单借据人工还款createOrder→回流afterPaymentMP
代扣调度(NormalWithholding/OverdueWithholding)RP到期批量代扣beforePaymentRP→发消息afterPaymentRP
partialRepaymentCLP Collection Repayment部分/催收还款beforePaymentCLPafterPaymentCLP
bigdataCallRepaymentBCP bigdata call repayment大数据触发还款beforePaymentBCPafterPaymentBCP
refundRF refund退款(放款失败/超额)beforePaymentRFafterPaymentRF
渠道还款归类AP/PR/NC/HP/TPpaystack web/palmpay/normal/TPafterPaymentAP✓(AP before 空壳)
虚拟账户/plutus webVP/PHP/DP/MRJ虚拟子账户/plutus web payafterPaymentMP
超额还款OFR Overflow Repay超额退/还afterPaymentOFR
拒付CBP ChargeBack资金拒付beforePaymentCBP(空壳)afterPaymentCBP△ before 空壳
逾期 chargeOC Overdue Charge逾期计费afterPaymentOC
人工小额DR Manual Small Amount运营小额还款beforePaymentDRafterPaymentDR

架构细节:主动还款(MP)/人工(MR) 不经 BeforePaymentFactory(直接 createOrder + 发消息 + AfterPayment 销账);代扣(RP)/催收(CLP)/大数据(BCP)/退款(RF) 经 BeforePaymentFactory。AfterPaymentFactory 把多渠道 TxnType 归类到同一销账处理器(AP 类含 PR/NC/HP/TP;MP 类含 DP/MR/MRJ/VP/PHP)。

分支清单(穷举还款全部分支)

出处 FinancialBusiness / BeforePaymentFactory / AfterPaymentFactory / OrderTxnBusiness。状态 ✓活跃 / ✗空壳 / △部分。

#分支触发条件处理出处状态
1查还款计划进还款页queryRepayPlanList/queryRepayPlanDetailListINonfinancialService
2还款试算试算activeRepaymentCalcINonfinancialService
3客户主动还款App 发起activeCustomerRepayment → MP(客户级,带锁)FinancialBusiness:357
4人工还款单借据artificialRepay → MR:312
5部分/催收还款partialRepaymentCLP:605
6大数据触发还款bigdataCallRepaymentBCP:650
7退款refundRF(放款失败/超额):693
8代扣调度-正常Job 到期NormalWithholdingJobHandler → RP → paystackBulkChargePlutusOrderTxnBusiness:596
9代扣调度-逾期Job 逾期OverdueWithholdingJobHandler → RPfcs-job
10还款消息派发任意还款sendMessageRepayPlutus/sendMessageBulkRepayPlutus → BeforePaymentPlutusPublisherBeforePaymentMessageUtils:227/237
11扣款执行PMT 收消息IThirdPayment.repayment(Monnify Mandate / Paystack 卡扣)PMT
12结果回流扣款完成IInnerPaymentService.repayResultPMT→FCS
13销账分流回流AfterPaymentFactory 按 TxnType 分流(14+ case)AfterPaymentFactory
14先费后本销账销账PaymentHier + queryOffsetConfig(PFS)afterpayment/posting
15销账上下文单借据/客户级loadDataForLoanRepay / loadDataForCustRepayAcctContextFacility:154/190
16结清判定销账后全部还清判定PaymentHier
17虚拟账户还款钱包/转账vitualAccountRepay(VP)IInnerPaymentService
18各 web pay 渠道HP/PHP/PRpaystack/plutus web/palmpay → AP/MP 销账AfterPaymentFactory
19超额还款OFRafterPaymentOFRAfterPaymentFactory
20拒付CBPbeforePaymentCBP 空壳 / afterPaymentCBPBeforePaymentFactory△ before 空壳
21逾期罚息dayendB3423POverdueLoanIntAccufcs-job s3400
22逾期滞纳金dayendB3424POverdueLoanLateFeeCalcfcs-job
23逾期状态变更dayendB3422POverdueLoanStatusChangefcs-job
24逾期催收逾期fds 案件(电核/外访);锁机/完整催收 Phase 2fds△ Phase2
25空壳避开选接口activeRepayment/singleAtvRepayment/manualRepayment/manualWithhold/singleActiveRepaymentCalcFinancialServiceImpl✗ return null

接口落地

#业务步骤服务真实接口现状说明
1还款计划/明细FCSqueryRepayPlanList/queryRepayPlanDetailList;bns queryCustRepayInfo内部查计划
2还款试算FCSactiveRepaymentCalcsingleActiveRepaymentCalc 为 return null 空壳
3主动还款发起FCSactiveCustomerRepayment(客户级 MP)/ partialRepaymentCLP)/ artificialRepayMR)/ bigdataCallRepaymentBCPactiveRepayment/singleAtvRepayment/manualRepayment/manualWithhold 均 return null 空壳,避开
4代扣调度FCS-JobNormalWithholdingJobHandler/OverdueWithholdingJobHandlerpaystackBulkChargePlutusRP读到期账户批扣
5还款消息派发FCS→PMTsendMessageRepayPlutusBeforePaymentPlutusPublisher(事件)还款用 Plutus publisher(放款用 PlutusLoanApply)
6扣款执行PMT→外部IThirdPayment.repayment(Monnify Mandate / Paystack 卡扣)代扣授权完整
7结果回流PMT→FCSIInnerPaymentService.repayResult通知销账
8销账结清FCS+PFSAfterPaymentFactory 分流 → PaymentHier + IProductClient.queryOffsetConfig先费后本(单借据/客户级)+ 结清判定
9逾期/罚息FCS-Jobdayend/s3400:罚息累计/滞纳金/逾期状态日终批处理
10逾期催收FDS案件生成(数仓→电核/外访)非完整催收系统;锁机/催收 Phase 2
11虚拟账户还款PMTIInnerPaymentService.vitualAccountRepayVP钱包/转账→虚拟账号自动入账
12退款FCSrefundRF放款失败/超额退款

还款策略

还款的业务策略(触发/调度/通道路由/销账),是时序与接口之外的业务逻辑层。

触发策略

  • 主动还款(客户在 App/H5 发起)→ TxnType MP(客户级,带锁)/ MR(单借据人工)。
  • 代扣调度(job 自动)→ TxnType RP;分正常代扣 NC(当期到期)与逾期代扣 OC(逾期账户)。

代扣调度策略(Spring Batch,XXL-Job 触发)

  • 正常代扣 NC(NormalWithholding):依赖日终(waitDayEnd,payment 批量成功后)→ 清批次临时表 → B1211R Reader 扫到期账户 → B1221P Processor 生成代扣订单(RP)→ B1230W Writer 发批量代扣消息;并发thread_size)+ 分块批量commit_size)。
  • 逾期代扣 OC(OverdueWithholding):扫逾期账户(maxOverdueDays 限制)。
  • 防重:仅处理 OrderStatus.I 的订单(兜底防重复发)。

通道路由策略(统一在 PMT,同放款)

  • fcs 只发批量代扣消息(sendMessageBulkRepayPlutusBeforePaymentPlutusPublisher),通道选择不在 fcs
  • PMT 收消息后走 PaymentManager.routeChannel(与放款同一套):身份分流(BVN→银行账户 / NIN→电子钱包 / Goldman)+ Apollo 通道优先级 + 银行可用性矩阵 + 扣款 pending 容灾轮转。详见 04-放款 > 放款通道路由策略
  • 实际启用通道在 Apollo,代码取不到。

销账策略(PaymentHier)

  • 先费后本:按余额组件(bal_compt:本/息/费/罚)+ 账龄 aging + pfs_offset_order 配置顺序销账(顺序配置驱动,非硬编码)。
  • 销账上下文两类:单借据(loadDataForLoanRepay)/ 客户级(loadDataForCustRepay)。
  • 复式记账(fcs_posting_entry 借贷方向)+ 销账分录(fcs_offset_entry)+ 结清判定。

扣款执行(PMT)

  • IThirdPayment.repaymentMonnify / NIBSS Mandate 代扣授权(Direct Debit)+ Paystack 卡扣(charge token)。
  • Mandate 授权在绑卡阶段建立(见 03-借款 绑卡),代扣时凭 Mandate 扣款。

缺口小结

  • 还款主链路完整且通:计划/试算/主动还款(MP)/部分还款(CLP)/代扣(RP)/大数据触发(BCP)/退款(RF)/事件派发/扣款/回流/销账结清/逾期罚息 均具备,fcs→pmt 走事件桥。
  • TxnType 远比早期记录丰富:枚举实有 30+ 种,还款相关 MP/MR/RP/CLP/BCP/RF/OFR/VP/HP/PHP/PR/NC/TP/DR/OC 等。主动还款=MP(非 AP);AP/CBP 的 before 处理器空壳。00-总览 的 TxnType 表已据此修正。
  • 销账归类:AfterPaymentFactory 把多渠道 TxnType 归到同一销账处理器(AP 类、MP 类),销账上下文分单借据/客户级。
  • 同名空壳需避开(return null):activeRepayment/singleAtvRepayment/manualRepayment/manualWithhold/singleActiveRepaymentCalc——主动还款走 activeCustomerRepayment/partialRepayment
  • 逾期罚息/滞纳金/状态齐备(dayend);完整催收作业系统缺失——fds 仅案件+电核/外访,锁机与系统化催收 Phase 2。