还款引导复借需求文档

1. 文档信息

项目内容
文档名称还款引导复借需求文档
所属方案迭代需求管理
适用端App、H5、业务后端、信贷账务后端、支付后端、风控服务
需求阶段本期 MVP
重要约束本期不考虑优惠券
代码依据frontend-cashloan/wp_h5backend-cashloan/business-systembackend-cashloan/fund-controlbackend-cashloan/payment-middle

2. 背景

当前系统在还款页已经存在“还款时引导复借”的代码雏形:客户在还款页看到新借款推荐,选择新借款产品后点击还款并复借。系统先创建复借预订单,再引导客户完成当前借据还款。当前借据结清后,后端批任务自动将复借预订单转为正式提现申请。

该能力的目标是降低客户从还款到再次借款的操作成本,提高结清客户的再次借款转化。

需要特别说明:当前普通还款复借链路不是“借新还旧”。客户必须先完成当前借据还款,旧借据结清后,新借款才会进入提现申请流程。

3. 需求目标

本期目标:

  1. 在客户还款时识别可复借客户,并在还款页展示复借引导模块。
  2. 支持客户在还款页选择下一笔借款的金额、期限、保险和备选产品。
  3. 支持客户点击“还款并复借”后先创建复借预订单,再发起当前借据还款。
  4. 支持当前借据结清后,后端自动处理复借预订单并发起正式提现申请。
  5. 支持客户选择“仅还款”,不创建复借预订单。
  6. 支持复借引导产品只在还款日前指定天数内展示,默认还款日前 1 天至还款日展示,天数可配置。
  7. 支持客户进入 App 时查询调额调价接口,由风险输出预结清可借额度和预结清用户等级,作为复借展示和额度测算依据。
  8. 复借提交订单后的审批继续使用已有风险审批接口,不新增独立审批链路。
  9. 本期不考虑优惠券,避免优惠券规则影响主链路交付。
  10. 支持客户已真正结清、且未通过还款页触发复借预订单时,在借据订单状态变更为结清后实时调用风险提供的结清调额调价接口,获取最新风险等级和可借额度。

4. 需求范围

  • 普通还款页展示复借引导模块。
  • App 进入时查询调额调价接口,获取预结清可借额度和预结清用户等级。
  • 复借引导产品按还款日前 N 天展示,默认 N=1,支持后端配置。
  • 单期产品还款时引导复借。
  • 多期产品最后一期还款时引导复借。
  • 多期产品最后一期逾期时不展示复借、不允许提交复借预订单。
  • 客户选择新借款金额。
  • 客户选择新借款期限。
  • 展示新借款试算结果和还款计划。
  • 支持主产品和备选产品。
  • 创建复借预订单。
  • 创建复借预订单后发起当前借据还款支付。
  • 只还款路径。
  • 旧借据结清后由批任务自动发起新提现。
  • 真正结清后、未命中还款触发复借预订单的客户,在借据订单状态变更为结清后实时查询结清调额调价接口。
  • 预订单过期、产品不匹配、额度不足、在途借据限制等后端兜底。

5. 术语说明

术语说明
复借客户在当前借据还款阶段,提前选择下一笔借款,待旧借据结清后自动进入新提现申请
复借预订单客户在还款页提交的新借款意向单,旧借据未结清前不发起正式提现
只还款客户只偿还当前借据,不创建复借预订单
主产品客户优先选择的新借款产品
备选产品主产品不满足条件时可尝试的新借款产品
最后一笔借据状态 F后端判断旧借据已结清的状态
借新还旧使用新借款资金直接抵扣旧借据,本期不做
展示提前天数距离还款日多少天开始展示复借引导产品,默认 1 天,可配置
预结清可借额度风险基于客户完成当前借据结清后的状态,预估输出的可再次借款额度
预结清用户等级风险基于客户完成当前借据结清后的状态,预估输出的客户等级
真正结清复借客户旧借据已经实际结清,且未通过还款页创建复借预订单,由结清状态变更触发额度和价格刷新后发起的新借款
结清调额调价接口风险在客户已真实结清后输出最新风险等级、最新可借额度和价格策略的接口

6. 用户流程

6.1 还款并复借流程

flowchart TD
    A["客户进入还款页"] --> B["前端查询还款计划和可复借产品"]
    B --> C{"是否满足复借展示条件"}
    C -- "否" --> D["展示普通还款页"]
    C -- "是" --> E["展示复借引导模块"]
    E --> F["客户选择金额、期限、保险、备选产品"]
    F --> G["客户点击 Repay and Get A New Loan"]
    G --> H["创建复借预订单"]
    H --> I{"预订单创建成功"}
    I -- "否" --> J["提示失败,停留还款页"]
    I -- "是" --> K["创建当前借据还款支付单"]
    K --> L["客户完成支付"]
    L --> M["支付回调并入账"]
    M --> N{"旧借据是否结清"}
    N -- "否" --> O["预订单等待批任务后续检查"]
    N -- "是" --> P["批任务发起正式提现申请"]

6.2 只还款流程

flowchart TD
    A["客户进入还款页"] --> B["页面展示复借模块"]
    B --> C["客户点击 Only Repay"]
    C --> D{"是否展示挽留弹窗"}
    D -- "是" --> E["客户确认只还款"]
    D -- "否" --> F["直接创建还款支付单"]
    E --> F
    F --> G["客户完成支付"]
    G --> H["支付回调并入账"]

6.3 真正结清后主动复借流程

flowchart TD
    A["还款入账完成"] --> B["借据订单状态变更为结清"]
    B --> C{"是否存在有效复借预订单"}
    C -- "是" --> D["不触发结清后主动复借流程"]
    C -- "否" --> E["业务后端实时调用风险结清调额调价接口"]
    E --> F{"风险是否返回最新等级和额度"}
    F -- "否" --> G["记录查询失败或按普通借款兜底"]
    F -- "是" --> H["保存最新风险等级、额度和价格策略"]
    H --> I["客户进入借款首页或申请入口"]
    I --> J["按最新结果展示可借产品"]
    J --> K["客户提交新借款申请"]
    K --> L["走现有借款申请和风险审批流程"]

说明:

  • 还款并复借流程面向“还款发生前或还款过程中”的客户,先创建复借预订单,待旧借据结清后由批任务发起新提现。
  • 真正结清后主动复借流程面向“旧借据已经结清、但没有有效复借预订单”的客户,在借据订单状态变更为结清后实时调用风险结清调额调价接口。
  • 两条流程互斥。同一客户同一笔旧借据不能同时存在“有效复借预订单待处理”和“结清后主动复借实时调额调价触发”的状态。

7. 准入与展示规则

7.1 普通还款页入口

客户进入普通还款页后,前端根据还款计划、产品列表和复借开关决定是否展示复借模块。

业务规则:

  • haveReloan = true:当前借据满足复借展示阶段。
  • loanDetail.productList 非空:存在可选新借款产品。
  • 当前日期已进入复借展示窗口,即距离当前应还还款日小于等于配置天数,默认还款日前 1 天。
  • 多期产品最后一期已逾期时,不展示复借引导模块,不允许创建复借预订单。

7.2 展示时间窗口

复借引导产品不在整个还款周期内持续展示,只在临近还款日时展示给用户。

业务规则:

  • 默认在还款日前 1 天开始展示复借引导产品。
  • 配置值支持后端调整,例如配置为 3 时,从还款日前 3 天开始展示。
  • 展示窗口计算以当前应还期的 dueDate 为准。
  • 未进入展示窗口时,即使客户满足产品、额度和开关条件,前端也不展示复借引导模块。
  • 到达还款日当天但未逾期时,可继续展示复借引导模块。
  • 多期产品进入逾期后,即使已进入展示窗口,也不展示复借引导模块。
  • 展示时间窗口只控制前端引导曝光,不改变还款金额、还款入账和旧借据结清判断。

7.3 单期产品

单期产品满足以下条件时可展示复借模块:

  • 当前借据有可还款计划。
  • 后端返回可复借产品。
  • 已进入复借展示时间窗口。

7.4 多期产品

多期产品只有进入最后一期还款阶段才展示复借模块。

业务含义:

  • 倒数第二期已结清。
  • 当前未还期已经是最后一期。
  • 最后一期正常或待还时,可按还款页现有逻辑展示复借引导。
  • 最后一期逾期时,不展示复借引导,不允许客户提交复借预订单。
  • 已进入复借展示时间窗口。

7.5 产品列表

如果后端未返回可用产品,前端不展示复借模块。

7.6 最终放款准入

前端展示复借入口不代表一定可以最终放款。后端发起正式提现前仍需校验:

  • 客户最后一笔借据是否已结清。
  • 产品是否仍然匹配。
  • 额度是否满足。
  • 是否存在重复申请。
  • 是否满足一客多笔在途限制。
  • 风控、额度、产品等现有借款申请校验是否通过。
  • 复借提交订单后的审批继续调用已有风险审批接口,不新增单独的复借审批接口。

7.7 两类复借流程互斥规则

同一客户同一笔旧借据只允许命中一种复借触发方式:

  1. 如果客户在还款页点击“还款并复借”并成功创建有效复借预订单,则后续以复借预订单和批任务处理为准,不再触发结清后主动复借流程。
  2. 如果客户只还款、普通还款、代扣还款或其他方式导致旧借据真正结清,且不存在有效复借预订单,则在借据订单状态变更为结清后触发结清后主动复借流程。
  3. 如果复借预订单已过期、取消或处理失败,则不再视为有效预订单;客户后续发生新的结清状态变更时,可按真正结清后主动复借规则重新查询风险。
  4. 后端需要以旧借据编号、客户编号和复借预订单状态做幂等判断,避免同一结清事件同时进入两个流程。
  5. 前端不得在同一页面同时展示“还款并复借待处理”和“结清后最新额度申请”两类入口。

8. 页面与交互要求

  • repayment 详情页,点击“view more details”展开的样式

10. 后端处理需求

10.1 App 进入时查询调额调价

客户进入 App 后,App / H5 需要通过现有调额调价链路查询客户预结清后的复借能力,用于还款页复借展示和额度试算。

处理规则:

  1. App 进入或还款页初始化时,调用调额调价接口。
  2. 业务后端向风险服务发起查询,输入客户信息、当前在途借据、当前应还期、当前应还金额等必要参数。
  3. 风险输出客户完成当前借据预结清后的 预结清可借额度
  4. 风险输出客户完成当前借据预结清后的 预结清用户等级
  5. 业务后端结合产品、额度、展示时间窗口、复借入口开关,返回可展示的复借产品列表。
  6. 如果风险未返回预结清可借额度、预结清用户等级,或返回结果不满足准入条件,则不展示复借引导产品。
  7. 调额调价查询只用于展示和试算,不代表复借审批通过。

10.2 创建复借预订单

业务后端接收 loanAgainGenMultiOrder 请求后:

  1. 校验用户登录态和客户身份。
  2. 校验产品、金额、期限和保险参数。
  3. 校验当前复借产品仍处于展示时间窗口内。
  4. 校验多期产品最后一期是否逾期;如果已逾期,则拒绝创建复借预订单。
  5. 校验本次提交金额不超过风险输出的预结清可借额度。
  6. 记录本次提交时使用的预结清用户等级。
  7. 创建复借预订单。
  8. 记录客户选择的主产品和备选产品。
  9. 返回 applyNo

说明:创建复借预订单不等同于最终审批通过,正式提现申请发起时仍需走现有风险审批接口。

10.3 当前借据还款

支付单仍按普通主动网页还款处理:

  1. 创建网页支付订单。
  2. 客户完成支付。
  3. 支付回调进入信贷账务。
  4. 创建或更新还款订单。
  5. 执行还款入账。
  6. 当前借据满足结清条件后,状态变更为 F

isRepayToLoanFlag 只作为还款复借标识,不改变当前借据还款金额、还款入账规则和借据状态判断。

10.4 批任务处理复借预订单

后端批任务 LoanAgainBatchJobHandler 负责把复借预订单转为正式提现申请。

处理规则:

  1. 查询有效期内、状态为待处理的复借预订单。
  2. 查询客户最后一笔借据。
  3. 如果最后一笔借据不存在,跳过。
  4. 如果最后一笔借据状态不是 F,跳过。
  5. 如果最后一笔借据已结清,重新查询产品列表。
  6. 如果产品不再匹配,取消预订单。
  7. 查询最近一次放款银行卡或有效银行卡。
  8. 构造正式提现申请。
  9. 调用现有借款申请流程。
  10. 审批继续使用已有风险接口,不新增复借专用审批接口。
  11. 风险审批通过后继续现有提现、放款流程。
  12. 风险审批拒绝或异常时,按现有借款申请失败逻辑处理,并更新复借预订单失败原因。
  13. 更新复借预订单状态为已发起提现或处理失败。

10.5 预订单有效期

当前代码默认配置:

loan.again.expire.days: 5

需求规则:

  • 预订单在有效期内等待旧借据结清。
  • 超过有效期仍未发起正式提现的预订单,批任务取消。
  • 取消后不再自动发起提现。

10.6 真正结清后查询结清调额调价

适用对象:客户最后一笔借据已经真实结清,且没有有效复借预订单。

处理规则:

  1. 还款入账完成后,如果借据订单状态从未结清变更为结清,业务后端以该状态变更事件作为触发点。
  2. 后端先查询客户编号、旧借据编号和有效复借预订单状态,确认该结清事件没有对应的有效复借预订单。
  3. 如果存在有效复借预订单,不进入本流程,避免和还款并复借流程重复触发。
  4. 如果不存在有效复借预订单,业务后端立即调用风险提供的结清调额调价接口。
  5. 风险需要返回客户最新风险等级、最新可借额度和对应价格策略;业务后端按该结果匹配产品、金额、期限和费率,并保存为客户结清后最新复借能力。
  6. 客户后续进入借款首页、借款申请页或后端定义的复借申请入口时,前端展示的可借额度、用户等级和价格信息以结清状态变更后刷新的结果为准,不复用还款前预结清调额调价结果。
  7. 客户提交新借款申请后,继续走现有借款申请和风险审批流程;结清调额调价结果只作为入口展示、额度和价格测算依据,不代表最终审批通过。
  8. 风险接口异常、超时、未返回等级或额度时,需要记录失败原因并支持重试或降级;前端不展示结清后调额调价结果,可按普通借款兜底或提示稍后再试,具体策略由产品和风控确认。
  9. 结清状态变更事件需要幂等处理,同一旧借据同一次结清只允许成功触发一次结清调额调价查询。

11. 状态流转

11.1 复借预订单状态

stateDiagram-v2
    [*] --> Pending: 创建复借预订单
    Pending --> Submitted: 旧借据结清且发起提现
    Pending --> Expired: 超过有效期
    Pending --> Canceled: 产品不匹配/额度不足/校验失败
    Submitted --> [*]
    Expired --> [*]
    Canceled --> [*]

11.2 当前借据与复借关系

flowchart LR
    A["当前借据待还(多期逾期除外)"] --> B["客户创建复借预订单"]
    B --> C["客户完成当前借据还款"]
    C --> D{"当前借据是否结清 F"}
    D -- "否" --> E["复借预订单继续等待"]
    D -- "是" --> F["批任务发起新提现"]

11.3 两类复借触发关系

flowchart TD
    A["旧借据结清事件"] --> B{"是否存在有效复借预订单"}
    B -- "是" --> C["还款并复借流程:批任务处理预订单"]
    B -- "否" --> D["结清后主动复借流程:状态变更后实时查风险"]
    C --> E["不得再触发结清后主动复借"]
    D --> F["不得补建还款并复借预订单"]

12. 异常场景

场景处理规则
预订单创建失败不创建支付单,前端提示失败
预订单创建成功但客户未支付预订单等待,过期后取消
支付失败当前借据不结清,批任务不发起提现
支付处理中前端按现有还款支付处理中逻辑展示
旧借据未结清批任务跳过,等待下一次扫描
产品不再匹配批任务取消预订单
额度不足按现有逻辑调整金额或取消预订单
未进入展示时间窗口不展示复借引导产品,不允许创建复借预订单
多期产品最后一期逾期不展示复借引导产品,不允许创建复借预订单
风险未返回预结清可借额度或用户等级不展示复借引导产品
已存在有效复借预订单不触发真正结清后主动复借流程
真正结清后风险未返回最新等级或额度不展示结清后调额调价结果,按普通借款兜底或提示稍后再试
同一结清事件同时满足两类入口以后端有效复借预订单判断为准,只允许一个流程继续
结清状态变更事件重复投递按旧借据编号和触发记录幂等处理,不重复调用风险接口
复借正式提现审批失败按现有风险审批失败逻辑处理,复借预订单记录失败原因
银行卡不可用按现有借款申请失败逻辑处理
存在在途借据超限不发起新提现