P2P金融核心业务流程整理
文章目录
业务背景
- 借款流程:投资和借款期限错配(如,投资365天,借款只有90天),投资生成资金,p2p维护资金池,借款从资金池捞资金生成有效债权,随后调用银行接口进行转账,至此借款流程结束。
- 还款流程/代偿流程:用户根据规定的借款利率,返回本金和利息。p2p会根据该笔还款对应借款的所有有效债权(这里分本金债权和利息债权)进行分账,预生成转账记录,然后发起还款,生成批次调用银行的接口。等银行处理完批次,回调p2p系统。至此还款流程结束。
- 先息后本,最后一期一次性本金还款:每一次还款还利息,入利息池,最后一期还本金和利息,入利息池和资金池。
- 资金池:用户投资成功后,不会马上找借款匹配,而是维护一个本金资金池,供借款来按照一定的规则匹配顺序来生成有效债权(如优先新的预约资金、还款复投资金、代偿复投资金)
- 利息池:核心交易系统借款人还款分账时,属于出借人部分收益会实时转到其收益账户,但该笔资金需等到投资赎回日方能解锁取出。p2p为了使收益最大化,将出借人的利息组成一个利息池,使用合适的及时,将其利息转化为可以匹配的资金放入资金池(将capital_property_type字段区分本金资金和利息资金)。
- 还款复投资金:当一个借款(期限是90天)和一个资金(期限是365天)生成有效债权,由于导致期限错配并且还款人提前还款,所以p2p将还款的资金再放入资金池,以便遍匹配其他借款。
- 代偿复投资金:由于借款人未能及时还款,由平台替借款人还款。走后续的分账流程。
核心业务资金流程图
关键技术点
- 利息复投的时机:还款、代偿、本金赎回回调。
- 赎回流程,先拉回本金资金、然后拉回利息资金,拉回利息资金进入利息池。
- 为了后续能够对账已经问题排查,将利息池做成两个表,一个是用户的利息表,一个是该用户的所有涉及利息池交易的流水,方便对账。
- 赎回还会触发利息复投,场景是,用户所有利息池的钱大于这笔资金的预期利息,而且剩余的利息池金额大于100块,就会触发利息复投。
- 还款或者代偿资金流向:
1)利息债权本金:进资金池
2)利息债权利息:进入公司收益账户
3)本金债权本金:进资金池
4)本金债权利息:进利息池
关键表以及字段含义
一、资金表t_capital
- type:‘资金类型(1=预约资金|2=还款复投资金|3=代偿复投资金|4=赎回失败复投资金|5=赎回审核失败复投资金|11=利息初始复投资金|12=还款利息复投资金|13=代偿利息复投资金)’,
- status:0=异常|1=正常|2=完全匹配|3=已拉回
- use_status:使用状态,借款时候CAS标志,增加借款的匹配的速度
- principal、match_principal、pre_match_principal:
principal:初始资金,表示这笔投资生成的原始资金金额
match_principal:已匹配的资金,表示有一部分资金还在投资人银行账户
pre_match_principal:预匹配的资金,表示正在使用 - 其他比如资金订单号、用户ID、资金生成时间、资金拉回时间
二、利息池t_interest_pool、t_interest_pool_water
t_interest_pool关键字段
- 利息复投开关recast_switch:旨在避免业务冲突,重复复投等等
- 当前投资人利息池剩余金额current_interest_pool_remain:记录投资人可以利息金额
t_interest_pool_water关键字段 - flow_type:资金流类型(11=还款|12=代偿|13=利息资金拉回|14=利息债权拉回|21=利息复投|22=赎回使用)
- 其他比如金额、用户ID、交易订单号等
三、投资表t_invest
- 产品类型product_type:比如30天、90天
- 累计利息流水total_interest_water和已获收益total_interest_earn
- repay_date:预约成功时候更新,方便后续统计
- redeem_date:赎回发起时候更新,可以记录提前赎回和按约赎回时间,便于统计
- 状态status:-1=预生成|0=预约中|1=预约成功|2=预约失败|3=投资成功)|4=投资失败|5=申请赎回|6=申请赎回审核成功|7=申请赎回审核失败|8=已赎回|10=已回款)
- 其他比如投资订单号、用户ID、是否用加息券、年利率、投资成功时间
四、债权表t_invest_loan
- 债权订单号order_no、投资订单号invest_order_no、借款订单号loan_order_no、资金订单号capital_order_no、借款人ID、投资人ID、匹配的金额amt、匹配的天数days
- 债权类型:property_type 资金属性(1=本金|2=利息)
- invest_repay_date投资回款日、loan_repay_date借款还款日:可以用来进行统计
- 是否已经发生债转is_transfer_credit:记录债权是否债转
- 状态status:-1=预处理|0=匹配中|1=匹配成功|2=匹配失败|3=债权已完结
在请求银行放款接口后,状态置为0,在银行返回放款结果后,来决定这份债权是否匹配成功。
债权完结几种类型:还款完结、代偿完结、赎回完结 - last_order_no上一个订单号:第一种订单号是债转之前的旧的债权订单号。第二种是还款或者代偿生成新的债权旧债权订单号。
五、转账记录表t_pay_record
- 债权订单号invest_loan_order_no、转账订单号order_no、支付金额amt、转出方用户ID、转入方用户ID
- 交易类型trade_type:(1=借款|2=还款|3=赎回|4=代偿|5=贴息|6=奖励)
- 状态status:支付状态(-1=预处理|0=支付中|1=支付成功|2-支付失败)
在其他业务中,调用第三方支付服务,会讲转账记录置为支付中=0,并且上分布式锁,以免重复支付。
在支付完成(也就是银行返回了正常的转账结果后)后,将状态置为异常或者失败。期间采用定时器扫描,以免支付失败情况。以便重新支付。
4、重试次数retry_time:超过一定的重试次数,会发邮件或者短信告警,人工介入。
5、batch_no批次号:提交银行的批次号。更加这个来判断银行回调的批次放款或者转账结果。