[TOC]
业务概览
- 授信
- 放款
- 还款
主要业务
授信、绑卡、放款、还款、债务重组、不规则还款、延展期、诉讼回款、柜面还款、LPR利率浮动、核销、代偿、机构撤并、管护移交、批量扣款、代偿后还款、日终账务、短信通知、记账机构管理、额度管理、客户信息管理、借据管理、贷款凭证管理、合同管理、核心产品管理、LPR利率维护、银行核心模式、助贷模式、税价分离…
联机业务
授信维护、绑卡维护、客户基础信息维护、合同维护、管护机构及记账机构维护、放款、还款、借据信息维护等
授信
授信是业务开始,只有授信后才能开始贷款。
- 额度:客户在一定时间内能够申请贷款的最高金额
- 业务:变更、冻结、解冻、额度占用、恢复、失效、注销
- 额度类型:循环额度、一次性额度、一次性多次使用额度
账户
账户:他行卡与本行卡的鉴权、绑定、解绑,用于客户收款和还款
鉴权:为了确保用户的真实性和支付的安全性,一般是四要素鉴权
放款
- 预防款:完成产品,额度等校验,生成借据号等关键信息。
- 放款确认:再次校验产品、额度等信息,完成额度占用,生成借据、期供等基本信息
- 支付放款:调用支付,完成放款(标准放款、受托支付)
- 核算记账:放款成功后,异步通知会计核算记账
还款
- 正常还款:借据到期后的还款
- 提前还款:提前N天还当期
- 提前还N期:缩期,每期本金不变,总期数减少
- 提前还部分:摊薄,每期本金减少,总期数不变
其他概念
- 期供:每个借据都有对应的期供,期供记录了每一期还款的本金、利息、开始日、到期日期等。
- 还款方式:等额本金、等额本息、先息后本、一次性还本付息,周期性还本付息,气球贷,不规则还款。
- 利率:正常利率,罚息利率,复息利率
- 优惠券:N天免息券、利率折扣券、N期免息券、固定利率券、利息抵扣券
- 还款日:固定还款日、范围随机还款日、最大还款日、还款日间隔
批量任务
各种流水状态同步、批量、代偿、银行核心模式行内数据拉取等
批量扣款
客户借据到期后,每日执行的扣款任务
流程
- 任务生成:按商户、数据库节点、时间点、支付通道等生成批扣
- 数据载入:按生成的不同批扣任务,载入对应的需要批扣的数据
- 执行扣款:按人加产品维度,结合还款账户生成扣款记录,发起扣款
- 短信发送:客户所有借据扣款完成后,按人维度发送扣款结果短信
业务规则
扣款时间
批扣时间点支持配置,配置三次时间 8、16、20点批扣
并发控制
涉及部分特殊支付渠道的扣款,批扣可以设置不同的并发数量控制
扣款账户
扣款账户的顺序是按照产品维度配置的,主流扣款顺序:自有虚账户–>行内虚账户–> 本行卡–> 他行卡
余额查询
扣款前会查询余额,如果余额不足,按可用余额扣款
批扣短信
扣款完成后,准实时发送扣款短信
借据代偿
借据人无法按时偿还贷款时,由担保人或保险公司等第三方代为偿还的业务
业务流程
- 代偿试算:命中代偿规则的借据,进行代偿试算,生成代偿明细
- 申请文件:根据代偿明细,生成批量代偿申请文件,上传OSS
- 文件通知:申请文件上传完成后,通过支付通知行内代偿申请已提交
- 审批结果:批量代偿审批文件下载、解析、更新审批状态:通过或拒绝,审批通过的借据,会发起代偿还款
- 代偿结果:代偿完成后,生成代偿结果文件,上传
业务规则
代偿天数
只借据的逾期天数,分为单期代偿天数、整笔代偿天数
代偿方式
单期代偿:单期天数控制,单期做代偿
整笔代偿:由整笔借据逾期天数控制,做整笔借据代偿
账户管理
按渠道配置代偿账户,或在借据放款时指定代偿账户
文件同步
还款预估文件、代偿申请文件、代偿审批文件、代偿结果文件的同步
借据核销
核销后贷款从资产负债表中剔除,相关坏账不计入当期损益
业务流程
- 商户校验:商户是否支持核销,减值核销或非减值核销,核销时是否检查计提
- 产品校验:产品是否支持核销,核销贷款余额,核销逾期天数是否满足要求
- 借据校验:借据状态是否正常,是否处理中,是否做过资产剥离,是否已经核销,贷款余额,逾期天数是否满足条件,最大逾期天数内是否有成功还款记录
日终任务
计提、结息、转列、拨备、计税
业务流程
- 日切前:根据日切时间点,拦截前后10分钟的所有交易
- 日切中-交易拦截:拦截掉除放款外,其他影响账务的交易
- 日切中-核心:执行计提、结息、转列、拨备,生成对应文件通知会计核系统处理
- 日切中-会计核算:处理核心系统计提、结息、转列、拨备等文件
- 日切中-ODS:待核心系统及会计核算系统数据处理完成后,通知ODS抽数
- 日间:ODS完成供数后,通知核心切日间,继续处理被阻塞的还款交易,当日零金额还款的业务。
业务规则
计提
对当天应收客户的贷款利息进行计算,体现银行的贷款利息收入
结息
按约定的时间从客户账扣收贷款利息,体现银行和借据人之间的利息结算
转列
处理贷款借据的四级分类:正常、逾期、呆滞、呆账
拨备
贷款减值准备,拨备金额主要根据贷款的五级分类来确定
总结


贷款
由于各个银行情况不同,有些并不使用本核心做放款、还款等操作。银行为核心的产品本系统只需路由到对应的银行请求行内接口,获取结果。
- 具体的路由方式
目前有两种路由方式:
- 通过产品号来路由(优先):通过银行(租户)+产品的维度请求对应的接口
- 通过银行路由:有些银行只有一个统一的请求接口,无需区分产品。
银行相关的配置信息,统一放入路由配置表,通过请求中的产品号获取对应的规则。
接下来的所有流程为自有核心流程
贷款试算
放款提现请的准备重要规则,预生成还款计划、计划利息、借据信息等。
前期准备
- 首次还款日
后续期供信息需要根据首次还款日,来向后累计。在交给计算器来生成期供之前,需要先准备好首次还款日。
所有产品的首次还款日默认不许超过28(不许出现29、30、31等)
| 类型 | 结果 |
|---|---|
| 固定还款日 | 每月都使用固定还款日期来还款 |
| 固定还款日(下月) | 小于等于固定还款日:使用下月固定还款日 大于固定还款日:使用下下月固定还款日 |
| 随机【1,10】 | 1到10号随机一天 |
| 随机【11,20】 | 11到20号随机一天 |
| 随机【21,28】 | 21到28号随机一天 |
如果客户信息中,曾记录过用户的还款日,尽量使用相同的还款日。(方便合并批扣)
- 获取利率(授信协议)
从授信协议分项中查出授信时风险模型提供的客户贷款利率。
试算
通过首次还款日、利率信息。来预生成还款计划和借据信息
信贷核心执行过程均采用责任链模式,每一步时都会判断是否继续向后执行,无论中间哪一环出现问题直接让流程失败。
试算物料初始化
贷款开始日期、产品信息、优惠券信息
使用原始利率试算(折前利率)
根据还款方式来选择试算器
不同还款方式的试算器
| 还款方式 | 试算器 |
|---|---|
| 先息后本 | 等额本金计算器 |
| 等额本息 | 等额本息计算器 |
| 等额本金 | 等额本金计算器 |
| 自定义周期性还本还息 | 等额本金计算器 |
| 气球贷等额本息 | 气球贷等额本息计算器 |
| 气球贷等额本金 | 气球贷等额本金计算器 |
| 气球贷自定义周期性还本还息 | 气球贷等额本金计算器 |
各计算器计算方式后文详解
通过试算器试算出:
本息总金额、利息、下次还款日、到期日、还款明细、还款期数
通过试算器得出的为折前利率,但未使用优惠,需要对总金额和利息使用优惠券(优惠券为负值)
当期初始利息=剩余本金*年利率*计息天数(距离放款的天数)/年计息规则天数(360或365)
目前已知的情报:
1、贷款开始日期、产品信息、优惠券信息
2、折前:本息总金额、利息、下次还款日、到期日、还款明细、还款期数
- 折后利率计算
返回折后利率
优惠后金额需要通过折扣利率来计算,优惠有两种
- 利率折扣:折后利率=正常利率*折扣率
- 利息优惠券:折后利率=((折前总利息-|优惠券固定优惠利息金额|)/折前总利息
目前已知的情报:
1、贷款开始日期、产品信息、优惠券信息
2、折前:本息总金额、利息、下次还款日、到期日、还款明细、还款期数
3、折后利率
- 通过折后利率在进行一次试算
上一步中得出折后利率,利用折后利率在进行一次试算,就可得出优惠后的利息情况。
目前已知的情报:
1、贷款开始日期、产品信息、优惠券信息
2、折前:本息总金额、利息、下次还款日、到期日、还款明细、还款期数
3、折后利率
4、折后:本息总金额、利息、下次还款日、到期日、还款明细、还款期数
- 试算出每期优惠的金额
通过优惠试算器试算出每期优惠的金额
| 优惠方式 | 试算器 |
|---|---|
| 放款使用(折后利息计算还款计划+折扣不提(初始就是折后利息)+回收补提) | 放款优惠试算器 |
| 放款使用(折后利息计算还款计划+折扣不提(初始就是折后利息)+回收补提 等额本息使用优惠券) | 放款优惠试算器 |
| 还款使用(折前利息计算还款计划+折扣反提+回收补提)(默认试算器) | 还款优惠试算器 |
| 还款使用(折前利息计算还款计划+折扣反提+回收补提 等额本息) | 还款优惠试算器 |
- 费用计算
按出资比率或约定费用计算出所需费用
放款试算总结
通过以下信息试算出期供明细+借据
- 试算物料初始化:贷款开始日期、产品信息、优惠券信息
- 使用原始利率试算(折前利率):本息总金额(折前)、利息(折前)、下次还款日、到期日、还款明细、还款期数
- 折后利率计算:折后利率
- 用折后利率试算:本息总金额(折后)、利息(折后)、下次还款日、到期日、还款明细、还款期数
- 抵扣金额:每期优惠金额
- 费用计算:根据规则计算出费用
- 放款试算必须的条件:
产品信息、放款金额、从授信中获取的利率、期数、还款周期、放款日期、优惠方式。
放款(TCC)
无事务前期准备
- 生成唯一流水
为了防止重复放款,先生成一条唯一交易流水,插入唯一交易流水表(放款、还款同表)。通过唯一约束的交易流水,防重放。
- 查询产品信息
通过请求参数,查询本次贷款产品信息。
信贷管理:额度占用+预开户(事务1:try)
开启事务Transactional
- 获取客户额度与额度协议分项(事务1.1)
校验还款方式、末期本金比例是否合规等
目前已有:额度信息(未被占用)、协议信息
- 计算还款日(事务1.1)
根据入参计算还款日,校验卡信息
目前已有:
1、额度信息(未被占用)、协议信息
2、还款日
- 查询(客户+产品)名下所有的申请信息(成功+处理中的)(事务1.1)
在本次放款记录落库前,先查询一遍申请信息
- 真正的放款try(事务1.1)
利率抉择、额度占用、登记流水
- 校验客户信息(事务1.1)
判断客户是否可以再借款等
- 抉择利率(开启一个新事务1.2)
Q如何在一个事务中同一个bean内的方法调用,开启一个新事务?
A由于事务1.1与事务1.2处于同一个bean,且只有通过springAOP代理的对象才会事务生效。(同类内方法调用即使有@Transactional注解,AOP不会生效)
可以通过SpringContextHolder.getBean(*.class)获取bean来调用,使事务或AOP生效
根据配置使用客户额度协议中的利率或从风险驾驶舱中获取利率
若风险驾驶舱中利率和额度协议中的利率不同,更新协议分项利率
提交事务1.2
- 插入唯一交易流水表(事务1.1)
防止重复交易(try)
- 占用额度(事务1.1)
在占用额度之前,先当前读查询额度变更流水(select for update),防止额度重复占用
select for update 该用户的额度数据(只要事务没有提交,相当于锁住了该客户的读信息)
利用mysql 更新额度数据:剩余额度=原剩余额度-借据金额
插入若干流水
返回更新后的额度分项
- 贷款预生成(事务1.1)
目前已知信息
产品信息、卡信息、额度协议信息(已占用)、利率、已登记流水(放款请求,额度占用流水)、还款日、客户信息
通过以上信息预生成一笔借据
生成提前申请流水
事务1.1结束
信贷核心:放款申请(事务2:try)
- 使用独立事务登记各种流水(事务2.1)
登记交易流水、贷款系统流水、支付用流水、扩展流水。
使用同一事务完成各系统流水登记,保证请求都被记录
事务2.1结束
- 放款前检查(事务2.2)
是否营业校验、头寸校验、代偿校验
- 生成借据号(事务2.2)
生成借据号、获取优惠起始期数
- 贷款试算(事务2.2)
调用贷款试算,生成期供、借据等
- 开户(事务2.2)
事务2.2结束
- 调用支付系统开始放款
接收支付返回值,根据返回结果决定:处理中(挂起)、成功、失败。
信贷管理:放款失败(事务1:cancel)
开启事务1.1
- 分布式事务防止资源悬挂
try请求由于网络阻塞在cancel请求后才执行
解决方式:在cancel之前,先尝试插入一遍try的流水
- 恢复额度(1.1)
将之前占用的额度取消
- 取消台账流水(1.1)
将之前预生成的流水状态置为取消
事务1.1结束
信贷核心:放款取消(事务2:cancel)
开启事务2.1
- 更新流水(事务2.1)
将之前的账务流水、交易流水、主流水、支付流水置为失败
事务2.1结束
信贷管理:放款确认(事务1:confirm)
事务1.1
放款申请、台账历史流水确认(事务1.1)
更新授信协议分项中的放款金额(事务1.1)
事务1.1 结束
信贷核心:放款确认(事务2:confirm)
事务2.1
更新账户信息、借据状态等为成功(2.1)
将新借据信息发送给ACT服务(信贷核算)记账(2.1)
更新计税(若有)事务2.1
事务2.1结束
还款
应还款试算
前期准备
查出借据所有期供、查询宽限期、恢复正常利率(之前利率有可能应折扣导致不准)、处理柜面还款部分
循环每期期供得出利息(真正的试算)
每期借据大致分为几种情况
- 为满足正常的还款日要求
未到期的期供、交易日未到达正常还款日、不展示的期供信息
统一跳过处理
- 未介入待还时间线的期供
跳过
- 其他情况的期供会进入试算
已知的情报:
期供信息(未试算)、宽限期
利息计算
- 需要的数据
起息日sD,上次计提日(可能为空)pD、当前交易日tD
初始利息(放款时试算得出)、已计提利息(每期的已计提利息)
- pD>=结束日期
本期不再计息 return 0;
- pD为空
没有计提过,让pD等于sD
计息天数:当前日期-起息日
剩余本金:当期金额+当期后的总剩余本金
| 计息方式 | 计算原理 |
|---|---|
| 按日累计 | (当期本金+当期之后的剩余本金)*年利率*计息天数/年计息天数(360或365) 结果保留8位小数4舍5入 |
| 按日计息 | 剩余本金*年利率/年计息天数*计息天数 保留两位小数 |
放上得出应计息金额后 - 已计提金额 =本次计提金额
- 计息后记账
根据减值表示记录表内或表外、应收应计利息和利息发生额
转表外当天利息记表内
罚息计算
罚息计算流程与计算逻辑大致与利息计算相同
- 不同点
罚息存在罚息利率
宽限期内:使用正常利率参与罚息计算(宽限期内可能存不记罚息的情况,后续用罚息利率一把补记)
宽限期外:使用罚息利率参与计算
费用罚息
费用计算与罚息、利息计算逻辑相似,根据配置决定费用利率
本金*罚息利率
复息计算
同上
(应收欠息+催收/减值欠息) *复息利率
复息补计提
- 复息为什么存在补计提场景?
因为有优惠的情况存在,优惠有两种,一种还款时优惠,一种放款即优惠。如果放款优惠,期供中目前记录的利息为减免后利息, 但还复息的场景中,可能存在优惠券失效情况。若优惠券失效,需补计提减免部分的复息。
减免金额(取反)*复息利率
反向计提
因部分银行要求利息、罚息、复息等不能超过一定比例,如超过比例需反向计提。
反向计提金额:目前已计提金额-最大比例计算得出金额
处理减免
根据上方得出的各种值做还款减免计算
直接从上方金额做扣减
还款试算结束
正常还款试算总结
- 查出:期供、柜面还款金额、利率、宽限期
- 按期完成试算
- 利息:利用剩余本金、利率完成试算
- 罚息:需考虑宽限期(宽限期计息、不计息等),利用剩余本金、罚息利率完成
- 罚息费用(如有):根据产品配置情况,利用剩余本金、罚息费用利率完成
- 复息:利用利息金额、复息利率完成
- 复息补计提(如有):利用已减免利息、复息利率完成
- 反向计提:检测是否超标,若超则扣减
- 减免:还款时对各种优惠减免
正常还款试算流程简单,计算规则统一
| 计息方式 | 计算原理 |
|---|---|
| 按日累计(跳切时) | (当期本金+当期之后的剩余本金)*年利率*计息天数/年计息天数(360或365) 结果保留8位小数4舍5入 |
| 按日计息(正常情况) | 剩余本金*年利率/年计息天数*计息天数 保留两位小数 |
提前还款试算
前期准备
准备出:交易日期、提前还款方式、提前还款金额、提前还款期数、利率、优惠信息等
同时对本次还款进行校验
调用放款试算重新生成期供信息
- 重新生成期供
由于需要涉及未来期次还款,之前使用优惠生成的期供新歘不可用,需调用放款试算来重新生成期供,对本次还款做扣减,方便后续扣款使用
- 求出剩余本金
借据剩余金额-当前试算期供的累计本金(当次应还款金额)
还款后剩余本金
根据还款方式做不同的处理
提前还款本金
| 还款方式 | 处理方式 |
|---|---|
| 提前结清 | 还款金额为剩余金额 |
| 提前部分还款 | 校验金额后暂不处理(仍为输入时金额) |
| 提前还本(退货) | 只校验(仍为输入时金额) |
| 提前还当期 | 还款本金为当期期次的剩余本金 |
| 提前还N期 | 还款本金为输入n期的剩余本金汇总 |
| 提前柜面还款 | 试算金额- 柜面金额 |
提前还款利息
| 提前还款方式 | 利息金额 |
|---|---|
| 提前结清 | 当前已计提的利息汇总 |
| 提前还当期 | 当前已计提的利息汇总 |
| 提前还N期 | 当前已计提的利息汇总 |
| 提前柜面还款 | 0 |
| 提前还本(退货) | 0 |
| 提前部分还款 | 特殊处理 |
- 对于提前部分还款的特殊处理
提前还款利息=天数*提前还款本金*年利率/年计息天数
应收应计利息和:汇总每期已计提利息金额
取两个利息的较小值:Math.min(提前还款利息,应收应计利息)
提前还款费用
提前还款费用=天数*借据金额*费用年利率/年计息天数
提前还款利息优惠(陕西农信)
提前还款利息优惠=天数*剩余本金*优惠利率/年计息天数(取反)
摊薄金额
| 摊薄方式 | 逻辑 |
|---|---|
| 诉讼还款 | 按照传输的还款顺序还款 |
| 期供优先 | 根据配置还款顺序还款:大致为 应计:罚、利、本 非应计:本、利、罚 注意:核心账务并不怎么额外关心核销标识 |
| 纵向优先 | 先还本、总利息、总费用、总费用罚息 |
| 本金优先 | 按期扣减本金、后按期还利息 |
根据上方还款方式后摊薄期供。
做优惠
若有n期免息、n天免息券、利息减免券等再在现有期供上做扣减
利用剩余本金重新生成还款计划
利用还款后的剩余本金重新生成还款计划,如借据并未结清,则该此还款后,后续该借据以本次新生成的还款计划为准。
提前还款试算结束
提前还款试算总结
- 先准备交易日期、提前还款方式、提前还款金额、提前还款期数、利率、优惠信息等
- 由于优惠可能失效,需重新生成还款计划
- 根据还款方式,试算出本次还款需要还的金额(本、利、费用)
- 根据实还金额对现有期供做扣减(顺序有三种:期供优先、本金优先、纵向优先)
- 若有剩余本金则利用剩余本金重新生成期供、给客户后续使用
正常还款(TCC)
还款前校验:日切中不能还款,批量还款预先记录一条批量还款请求流水(try)
信贷管理:还款(事务1:try)
正常还款、提前还款信贷管理逻辑统一
开启事务1.1
查询客户额度(事务:1.1)
校验客户信息(事务:1.1)
增加还款申请流水和台账流水(事务:1.1)
若为批量还款,则直接使用中台记录的批量还款请求流水
事务1.1结束
信贷核心:正常还款(事务2:try)
还款非大事务,整体流水串联没有事务,每一小步都是单独的事务
- 无事务操作
查询账户信息、借据信息、是否日间状态是否可以还款等
- 插入流水、日切中的还款锁定账户(临时事务,乐观锁)
开启事务
| 还款类型 | 处理方式 |
|---|---|
| 非日间还款(非日间的联机还款或批量还款) | 标记为还款待处理、锁定账户、不试算 |
| 诉讼还款 | 插入诉讼还款流水 |
| 正常还款 | 贷款交易表、贷款交易流水表、支付交易流水表插入初始化流水 |
| 提前还款 | 贷款交易表、贷款交易流水表、支付交易流水表插入初始化流水 |
插入流水扩展信息
事务结束
检测是否在营业窗口,决定是否后续流程(日切过程中直接结束)
- 日间的还款锁定账户(乐观锁)
上方只有在日切过程中会提前锁定账户,直接返回。
对于其他还款、只插入了流水,现在锁定账户。(借新还旧特殊处理,不锁定账户)
- 调用正常还款试算(无事务)
调用上面提到的正常还款试算,得出还款后的本、利、罚余额等
- 调用支付请求还款
默认账户仍未锁定状态、当支付返回失败才进行解锁操作。
若支付返回处理中,仍未锁定状态,等待后续流水批量状态同步再判断是否解锁。
信贷管理:还款取消(事务1:cansel)
更新还款申请流水和台账历史流水为失败
信贷核心:还款取消(事务2:cansel)
事务开启
- 根据主流水为失败
诉讼还款更新诉讼流水为失败
解锁之前锁定的账户(乐观锁解锁)
更新支付流水、贷款交易流水为失败
事务结束
信贷管理:还款确认(事务1:confirm)
若支付返回成功,则进入确认流程
开启事务
更新还款申请流水、台账流水为成功
恢复额度(释放额度)
根据还款本金,恢复额度协议分项表中的额度
若本次还款为代偿还款,记录当前客户被代偿次数+1
事务结束
信贷核心:正常还款确认(事务2:confirm)
开启事务
查询还款前借据信息、更新主流水为成功
判断是否为最后一笔还款、后续是否可以销户
保存老期供信息、新建新的期供,金额为试算时的金额
保存老、新建新的借据,更新借据信息
根据老借据状态对借据进行不同处理
| 原借据状态 | 处理方式 |
|---|---|
| 核销 | 还清:核销销户 未还清:更新核销余额 |
| 已减值 | 已结清:销户 若期供最小到期<交易日期:转正常 期供到期日< 交易日期 |
| 逾期还款 | 结清:销户 还完逾期:借据状态转正常 仍为逾期:只扣减金额 |
| 正常还款 | 结清:销户 正常还款:扣减金额 |
- 转正常
- 将期供催收金额更新到应收金额
- 借据催收金额更新到应收金额
- 更新借据扩展信息计息标识
- 形态转移表记录本次结转金额
- 若本次还款中涉及计提
记录未记录的计提流水
- 判断是否结息
结息:应计转应收
记录结息流水
更新借据信息为已结息
- 判断是否红冲
延展期等可能导致红冲出现
一般正冲应计
若已结息则反冲应收
登记减免和交易明细
解锁账户表、更新账户状态(可能存在减值转正常或销户等)
更新期供金额、状态
至此、借据状态、账户状态、期供状态都已修改完毕
- 确认之前的申请流水
将之前的支付流水、贷款交易流水置为成功
- 保存老数据用于冲正
事务结束
正常还款总结
特别说明
信贷核心还款锁定说明(乐观锁)
客户计提、还款时,为避免多次try导致金额扣减出问题,默认一笔借据同一时间只能有一次还款在处理中。所有在执行扣款、计提中(try阶段)要对客户账户上锁。
- 账户上锁的基本原则
哪条流水(连接/线程)进行的加锁(开启事务/获取资源)操作,有且只有这条流水去进行解锁(提交事务/释放资源),而且必须保证解锁的逻辑能够执行。
否则可能导致的后果:
- 死锁
- 锁失效
- 事务不生效
- 脏资源
- 加锁与解锁
所有借据都有对应的账户数据,账户表中有字段账户处理标识和请求编号字段。
| 字段名 | 逻辑 |
|---|---|
| 。。。 | |
| 账户处理标识 | 0:已处理 1:账户表处理中/临时表未处理 |
| 请求流水号 | 当前正在操作账户的流水,只有处理表示为1时才存在请求流水号,当标识为0时不存在请求流水号 |
加锁
| |
更新后检测是否更新成功,如果更新成功。则加锁成功。后续其他流水无法再锁定当前账户
解锁
| |
解锁只能通过上锁的流水来解锁,保证单笔借据不会重复交易,产生并发问题。
计算器
放款
放款需要的要素:
还本周期、还息周期、年计息天数、剩余本金、开始日期(借据起始日期)、年利率、总期数(产品配置中存)
还本周期(贷款扣收本金的频率):默认为授信时为客户配置,样式:3|M|A|E
周期性字段的解释
| 3 | M | A | E |
|---|---|---|---|
| 间隔:1,3,12 常数,表示每多少后方量做一次循环 | 循环量: D:天Daily W:周Weekly S:旬Semi-Monthly M:月Monthly Q:季Quarterly Y:年Yearly 一般的配置M或月 | 工作日选项: A:实际日期(无视是否工作日) N:下一个工作日(会顺延到下一个工作日) P:上一个工作日(同理) | 日期: E:每次循环的最后一天 1到31:满足前面循环的固定日期 *满足条件的任意一天 |
例:
- 1|M|A|15 每个月的15日,无视是否工作日
- 1|M|A|E 落在每月的最后那天,不管那个月有多少天。1月31日、2月28日、2月29日,3月30日等
- 1|Q|A|E 落在每个季度的最后一天,3月31日、6月30日、9月30日、12月31日
还息周期:同还本周期
等额本金计算器
先息后本、等额本金、自定义周期性还本还息
| 需要生成的字段 | 逻辑 |
|---|---|
| 还息周期 | 一般由授信信息得出,授信时会为每位客户定好固定的还息周期。还息周期一般情况为1开头 一般还息周期决定了一笔借据一期有多长,默认以还一次息为还一期期供 |
| 还本周期 | 等额本金:等额本金还本周期必须等于还息周期 还本周期必须大于等于还息周期,不能存在本金还完后,利息还没有还完的情况。若还息周期*期数小于还本周期,则让还本周期等于最末期(先息后本) |
| 年计息天数 | 产品配置,一般为360或365 |
| 起息日 | 贷款的开始日期 |
| 每期应还本金额(理想值) | 每期还本金额的平均值(末期可能不同) 需要还本的期数=总期数*还息周期/还本周期 平均还本金额=总金额/需还本期数 |
| 填充本金 | 还本周期为还息周期的整数倍关系,先用理想值填充非末期的(i*还本周期/还息周期)本金余额 |
| 末期本金 | 末期本金不是直接取平均值,而是通过总金额扣减上面每次填充的本金后的余额。 |
| 首期还款日 | 单期借据(只有一期的借据):Math.min(次月的今天,次月的最后一天) 理想情况:为下一个月的放款日 破期(需要向下一个周期推演):3月10日推迟到4月10日 |
| 首期计息天数 | 只针对破期的情况: 1、按实际天数计算 2、按整期计算 3、按照30天+零头计算 |
| 首期利息 | 剩余本金*年利率*计息天数/年计息天数 |
| 其他期数 | 其他期数按照第一确定的还款日向后推演 |
等额本息计算器
还息周期必须等于还本周期(房贷最常用的还款方式)
起始日期与结束日期都为固定值,一般不存在破期
| 字段 | 取值逻辑 |
|---|---|
| 每期还款金额(本息和) | 放款金额*年利率*(1+年利率)的总期次数量方/((1+年利率)的总其次数量方-1) 本金.multiply(rate)multiply(Math.pow(1+rate,总期数)).divide(Math.pow(1+rate,总期数)-1) |
| 利息 | 剩余本金*利率*计息天数/年计息天数 |
| 本金 | 每期还款金额-利息金额 |
为什么这么计算每期还款金额?
对于每一期的利息,一定是按照当期剩余本金*利率来算息,+1之后可以确定本息和。n次幂-1表示一共需要计算了n次幂的利息,则还款金额刚好等于总金额/n次幂-1

