返回金融系统设计
征信授信 · 主设计文档

消费信贷系统架构设计

04-credit-system/design-note.md

消费信贷系统架构设计

设计级别:架构师面试 / 系统设计
场景:"请设计一个消费信贷系统,覆盖贷前/贷中/贷后全流程,支持多种还款方式,日均放款10万笔"
作者:MomoFinance
日期:2026-04-13


一、需求分析

1.1 面试场景还原

面试官:请设计一个消费信贷系统,覆盖贷前/贷中/贷后全流程,支持多种还款方式,日均放款10万笔。

1.2 需求澄清(10个关键问题)

#澄清问题回答假设对设计的影响
1贷款类型?消费贷/经营贷/房贷?纯线上消费信贷,无抵押无需抵押物管理模块,授信侧重信用评分
2单笔金额范围?500元-20万元小额高频,需要高并发放款能力
3期限范围?3/6/9/12/18/24期还款计划生成需支持灵活期限
4还款方式?等额本息/等额本金/先息后本/按日计息需建还款计算引擎,4种算法
5资金来源?自有/银行/信托?自有资金+银行联合贷需对接资金方,分润结算
6日均放款量级?10万笔/天,峰值30万笔需异步化放款,分库分表
7征信查询渠道?央行征信+百行征信+三方数据征信网关需支持多渠道路由
8催收方式?自动+人工+委外需催收任务调度引擎
9监管合规要求?持牌机构,利率上限36%,需征信报送利率引擎需合规校验,日终报送
10是否有存量系统迁移?全新建设无历史包袱,但需预留接口

1.3 功能需求

贷前

功能模块核心能力优先级
产品管理产品模板配置、利率/期限/额度参数化、上下架管理P0
授信申请多渠道进件、材料收集、OCR识别、活体检测P0
信用评估评分卡(A/B/C卡)、反欺诈、征信查询、额度模型P0
额度管理额度发放、冻结/解冻、动态调额、有效期管理P0

贷中

功能模块核心能力优先级
用信放款借据生成、合同签约、资金路由、放款指令P0
还款管理还款计划生成、主动还款、自动扣款、提前还款P0
计息引擎日终计息、利率变更、优惠减免P0

贷后

功能模块核心能力优先级
逾期管理逾期检测、分级(M0-M6+)、罚息计算P0
催收管理策略编排、任务分配、IVR/短信/人工/委外/法催P1
资产管理五级分类、拨备计提、资产转让P1
监管报送征信报送、监管报表、信息披露P0

1.4 非功能需求

维度指标设计约束
性能授信决策 <3 秒评分卡预计算+规则缓存
性能放款处理 <30 分钟异步放款+消息队列
精度利率计算精确到分(0.01元)BigDecimal/Decimal(18,8),四舍五入
容量日均放款 10 万笔分库分表,异步放款
存储数据保留 10 年冷热分离,归档策略
可用性核心链路 99.99%主从切换,熔断降级
安全金融级数据安全加密传输/存储,脱敏展示

1.5 监管约束

约束要求实现策略
利率上限司法保护上限 LPR×4(约15.4%),行业实操24%/36%两线三区利率引擎内置合规校验,IRR计算真实年化
信息披露贷前明示年化利率、还款总额、综合费用合同模板强制展示IRR年化利率
征信报送每日/月度向央行征信报送日终跑批生成报文,T+1报送
消费者保护提前还款权利、合理催收提前还款不收违约金或上限约束
数据安全个人信息保护法合规数据加密、最小授权、审计日志

二、高层架构设计

2.1 C4 Context(系统上下文)

信贷系统作为核心业务系统,与以下外部系统交互:

外部系统交互方式数据流
借款用户APP/H5/小程序提交申请、查看额度、还款操作
征信中心专线/API征信查询/报送
支付系统内部API放款指令、扣款指令、到账通知
风控引擎gRPC反欺诈、准入、评分卡调用
记账引擎异步消息贷款发放/还款/计息分录
催收系统API+消息逾期推送、催收任务、催收结果
监管报送文件/SFTP征信报文、监管报表
资金方(银行)专线API联合贷资金匹配、放款、分润

详见 diagrams/c4-context.mmd

2.2 C4 Container(容器)

信贷系统内部拆分为以下9个核心容器:

容器职责技术选型部署
Product Engine产品模板管理、参数配置、上下架Java/Spring Boot + Redis独立服务
Application Service进件、材料审核、征信调用、审批工作流Java + Camunda独立服务
Credit Engine评分卡执行、额度模型、反欺诈决策Java + Drools/自研规则引擎独立服务
Loan Core借据管理、合同生成、放款指令、核心账务Java + MySQL分库核心服务(高可用)
Repayment Engine还款计划生成、还款处理、利息计算Java + MySQL核心服务
Collection Service逾期管理、催收策略编排、任务调度Java + Redis + MQ独立服务
Contract Service电子合同生成、签章、存证Java + e签宝/CFCA独立服务
Asset Management五级分类、拨备、资产转让、ABSJava + 批处理框架独立服务
Regulatory Reporting征信报送、监管报表、信息披露Java + Spring Batch独立服务

详见 diagrams/c4-container.mmd

2.3 信贷全流程

贷前:申请 → 准入校验 → 征信查询 → 评分卡 → 审批(自动/人工)→ 授信(发放额度)
贷中:用信申请 → 合同生成 → 签约 → 放款指令 → 资金划转 → 到账确认
贷后-正常:日终计息 → 还款提醒 → 自动扣款/主动还款 → 销账 → 结清
贷后-逾期:逾期标记 → 罚息计算 → 催收(IVR→短信→人工→委外→法催) → 回款 / 核销

详见 diagrams/sequence.mmd


三、数据模型设计

3.1 核心表设计

credit_product(信贷产品表)

字段类型说明
product_idVARCHAR(32)产品编号 PK
product_nameVARCHAR(64)产品名称
product_typeENUM消费贷/现金贷/分期
min_amountDECIMAL(18,2)最低借款金额
max_amountDECIMAL(18,2)最高借款金额
term_optionsJSON可选期限 [3,6,9,12,18,24]
annual_rate_minDECIMAL(8,6)最低年化利率
annual_rate_maxDECIMAL(8,6)最高年化利率
repayment_methodsJSON支持的还款方式
overdue_rateDECIMAL(8,6)逾期罚息利率(日利率)
grace_period_daysINT宽限期天数
statusENUMDRAFT/ACTIVE/SUSPENDED/ARCHIVED
created_atDATETIME创建时间
updated_atDATETIME更新时间

credit_application(授信申请表)

字段类型说明
application_idVARCHAR(32)申请编号 PK
user_idVARCHAR(32)用户ID
product_idVARCHAR(32)产品编号 FK
apply_amountDECIMAL(18,2)申请额度
statusENUMSUBMITTED/REVIEWING/APPROVED/REJECTED/CANCELLED
credit_scoreINT信用评分
risk_levelENUMLOW/MEDIUM/HIGH
reject_reasonVARCHAR(256)拒绝原因
credit_report_idVARCHAR(64)征信报告编号
approved_amountDECIMAL(18,2)批准额度
approved_rateDECIMAL(8,6)批准利率
operator_idVARCHAR(32)审批人(人工审批时)
applied_atDATETIME申请时间
decided_atDATETIME决策时间

credit_line(额度表)

字段类型说明
line_idVARCHAR(32)额度编号 PK
user_idVARCHAR(32)用户ID
product_idVARCHAR(32)产品编号
total_amountDECIMAL(18,2)总额度
used_amountDECIMAL(18,2)已用额度
available_amountDECIMAL(18,2)可用额度
frozen_amountDECIMAL(18,2)冻结额度
annual_rateDECIMAL(8,6)授信利率
effective_dateDATE生效日期
expire_dateDATE失效日期
statusENUMACTIVE/FROZEN/EXPIRED/CLOSED
versionINT乐观锁版本号

loan_contract(借据/合同表)

字段类型说明
contract_noVARCHAR(32)合同号 PK
user_idVARCHAR(32)用户ID
line_idVARCHAR(32)额度编号 FK
product_idVARCHAR(32)产品编号 FK
principalDECIMAL(18,2)贷款本金
annual_rateDECIMAL(8,6)年化利率
daily_rateDECIMAL(12,10)日利率
term_countINT总期数
repayment_methodENUMEQUAL_INSTALLMENT/EQUAL_PRINCIPAL/INTEREST_FIRST/DAILY
disbursement_dateDATE放款日期
maturity_dateDATE到期日期
total_interestDECIMAL(18,2)总利息(预计算)
remaining_principalDECIMAL(18,2)剩余本金
statusENUM见状态机
fund_channelVARCHAR(32)资金渠道
contract_urlVARCHAR(256)电子合同URL
created_atDATETIME创建时间

repayment_schedule(还款计划表)

字段类型说明
schedule_idVARCHAR(32)计划编号 PK
contract_noVARCHAR(32)合同号 FK
term_noINT期数(第几期)
due_dateDATE应还日期
due_principalDECIMAL(18,2)应还本金
due_interestDECIMAL(18,2)应还利息
due_penaltyDECIMAL(18,2)应还罚息
due_totalDECIMAL(18,2)应还总额
paid_principalDECIMAL(18,2)实还本金
paid_interestDECIMAL(18,2)实还利息
paid_penaltyDECIMAL(18,2)实还罚息
paid_totalDECIMAL(18,2)实还总额
statusENUMPENDING/PAID/OVERDUE/PARTIAL_PAID/WAIVED
paid_dateDATE实际还款日期

repayment_record(还款流水表)

字段类型说明
record_idVARCHAR(32)流水号 PK
contract_noVARCHAR(32)合同号 FK
term_noINT对应期数
repay_typeENUMNORMAL/EARLY/OVERDUE/PENALTY
repay_channelENUMAUTO_DEBIT/MANUAL/BANK_TRANSFER
amountDECIMAL(18,2)还款金额
principal_partDECIMAL(18,2)本金部分
interest_partDECIMAL(18,2)利息部分
penalty_partDECIMAL(18,2)罚息部分
statusENUMPROCESSING/SUCCESS/FAILED
payment_order_idVARCHAR(64)支付系统订单号
created_atDATETIME创建时间

overdue_record(逾期记录表)

字段类型说明
overdue_idVARCHAR(32)逾期记录ID PK
contract_noVARCHAR(32)合同号 FK
term_noINT逾期期数
overdue_daysINT逾期天数
overdue_levelENUMM0/M1/M2/M3/M4/M5/M6_PLUS
overdue_principalDECIMAL(18,2)逾期本金
overdue_interestDECIMAL(18,2)逾期利息
penalty_amountDECIMAL(18,2)累计罚息
collection_statusENUMPENDING/IVR/SMS/MANUAL/OUTSOURCED/LEGAL/RECOVERED/WRITTEN_OFF
started_atDATE逾期开始日
recovered_atDATE回收日期

collection_task(催收任务表)

字段类型说明
task_idVARCHAR(32)任务ID PK
overdue_idVARCHAR(32)逾期记录ID FK
contract_noVARCHAR(32)合同号
user_idVARCHAR(32)用户ID
task_typeENUMIVR/SMS/MANUAL_CALL/VISIT/OUTSOURCE/LEGAL
assigned_toVARCHAR(32)分配催收员
priorityINT优先级
statusENUMPENDING/IN_PROGRESS/COMPLETED/FAILED/TRANSFERRED
resultVARCHAR(256)催收结果
next_action_dateDATE下次跟进日期
created_atDATETIME创建时间

3.2 状态机设计

借据状态机

CREATED → SIGNING → SIGNED → DISBURSING → ACTIVE → SETTLED
                                           ↓
                                        OVERDUE → COLLECTION → WRITTEN_OFF
                                           ↓
                                        ACTIVE(还清逾期后恢复)
CREATED → CANCELLED(用户取消)
DISBURSING → DISBURSEMENT_FAILED(放款失败)→ CREATED(重试)

还款计划状态机

PENDING → PAID(正常还款)
PENDING → OVERDUE(到期未还)→ PAID(逾期后还款)
PENDING → PARTIAL_PAID(部分还款)→ PAID / OVERDUE
PENDING → WAIVED(减免)

完整状态机详见 diagrams/state-machine.mmd


四、核心组件详细设计

4.1 产品引擎(Product Engine)

设计理念:一切皆配置,零代码上新产品。

产品模板
├── 基础信息(名称/编号/类型)
├── 金额规则(最小/最大/步长)
├── 期限规则(可选期限列表)
├── 利率规则(区间利率/风险定价)
├── 还款规则(可选还款方式)
├── 逾期规则(宽限期/罚息/催收策略)
├── 准入规则(年龄/地域/征信)
└── 资金规则(资金方/分润比例)

关键设计

  • 产品参数与代码解耦,通过JSON Schema校验配置合法性
  • 产品变更采用"版本化"管理,存量借据按原版本执行
  • 上下架有审批流程,防止误操作

4.2 授信决策引擎(Credit Engine)

评分卡体系

评分卡应用场景输入数据输出
A卡(申请评分卡)新用户首次授信征信数据+基本信息+设备信息准入/拒绝+初始额度
B卡(行为评分卡)存量客户调额还款行为+用信行为+活跃度调额建议(提/降/维持)
C卡(催收评分卡)逾期用户逾期历史+联系状况+还款意愿催收优先级+策略推荐

审批工作流

自动审批通道(80%的案件):
  准入规则 → 反欺诈 → 征信查询 → A卡评分 → 额度模型 → 自动审批
  
人工审批通道(20%的案件):
  自动规则触发人工 → 队列分配 → 审批员审核 → 复核 → 出具结论
  
触发人工审批的条件:
  - 评分灰度区间(如350-450分)
  - 命中反欺诈中风险规则
  - 额度超过某阈值
  - 征信数据异常

额度模型

初始额度 = min(
  产品最高额度,
  max(产品最低额度, 
    评分映射额度 × 收入系数 × 负债系数 × 征信系数
  )
)

其中:
- 评分映射额度:评分区间→额度区间查表
- 收入系数:月收入/月供比例约束(一般不超过50%)
- 负债系数:现有负债率调整
- 征信系数:征信评级调整系数(A类1.0/B类0.8/C类0.6)

4.3 还款计算引擎(Repayment Engine)

这是信贷系统中精度要求最高的模块。核心实现4种还款方式:

等额本息(PMT公式)

每月固定还款额 = P × r × (1+r)^n / ((1+r)^n - 1)

其中:P=本金,r=月利率,n=总期数

示例:本金10万,年利率12%,12期
月利率 r = 12% / 12 = 1%
每月还款 = 100000 × 0.01 × 1.01^12 / (1.01^12 - 1) = 8884.88元
总利息 = 8884.88 × 12 - 100000 = 6618.56元

每期拆分:
第1期:利息=100000×1%=1000.00, 本金=8884.88-1000.00=7884.88
第2期:利息=(100000-7884.88)×1%=921.15, 本金=7963.73
...依此递推

等额本金

每月还款本金 = P / n(固定)
每月利息 = 剩余本金 × r
每月还款总额逐月递减

示例:本金10万,年利率12%,12期
每月本金 = 100000 / 12 = 8333.33元
第1期:利息=100000×1%=1000.00, 还款=9333.33
第2期:利息=91666.67×1%=916.67, 还款=9250.00
...
总利息 = 6500.00元(比等额本息少)

先息后本

每月只还利息,最后一期还本金+最后一期利息

示例:本金10万,年利率12%,12期
第1-11期:利息=100000×1%=1000.00
第12期:利息=1000.00 + 本金=100000 = 101000.00
总利息 = 12000.00元

按日计息

日利率 = 年利率 / 360
每日利息 = 剩余本金 × 日利率
到期一次性还本付息,或约定还款日还款

适用场景:随借随还、灵活期限产品

精度控制

  • 所有金额使用 DECIMAL(18,2),中间计算使用 DECIMAL(18,8)
  • 尾差处理:最后一期兜底,total - sum(前n-1期) = 最后一期
  • 四舍五入统一使用 ROUND_HALF_UP

核心代码实现详见 code/core-model.ts

4.4 逾期管理

逾期分级(M-Bucket)

级别逾期天数风险等级催收策略五级分类
M00天(正常)还款提醒正常
M11-30天IVR自动外呼+短信关注
M231-60天人工电催次级
M361-90天高级催收员+上门可疑
M491-120天极高委外催收可疑
M5121-180天极高法律催收损失
M6+>180天核销候选法律催收/核销评审损失

罚息计算

罚息 = 逾期本金 × 罚息日利率 × 逾期天数

罚息日利率 = 正常日利率 × 1.5(监管上限:不超过正常利率的150%)

合规约束:
- 不对利息收罚息(单利原则)
- 罚息+正常利息的综合年化不得超过24%(民间借贷司法保护线)
- 计息基数为逾期本金,不含已计罚息(严禁复利)

催收策略编排

D+1(逾期第1天):系统自动发送还款提醒短信
D+3:IVR自动外呼(预录音语音)
D+7:人工短信(催收专员)
D+15:人工电话催收(1级催收员)
D+30:升级催收(2级催收员,增加联系频率)
D+60:委外催收(外包公司)
D+90:法律催收(发律师函)
D+120:起诉准备
D+180:核销评审

4.5 额度管理

额度结构

用户总额度
├── 产品A额度(消费分期)
│   ├── 已用额度
│   ├── 冻结额度(正在放款中)
│   └── 可用额度 = 总 - 已用 - 冻结
├── 产品B额度(现金贷)
│   └── ...
└── 共享额度池(多产品共用上限)

额度操作的原子性

用信时的额度操作(两阶段):
1. 冻结阶段:available -= amount, frozen += amount(乐观锁CAS)
2. 扣减阶段:frozen -= amount, used += amount(放款成功后)
3. 回滚阶段:frozen -= amount, available += amount(放款失败时)

还款时的额度恢复:
1. used -= repaid_principal, available += repaid_principal

动态调额

触发条件:
- 定期(每月)B卡评分重新计算
- 事件驱动:正常还款N期后触发提额评估
- 风险事件:逾期/多头借贷触发降额

调额规则:
- 提额:B卡评分上升 + 无逾期记录 + 用信率>50% → 提额10-30%
- 降额:B卡评分下降 / 出现逾期 / 多头借贷增加 → 降额或冻结
- 调额幅度单次不超过30%,避免客诉

4.6 日终跑批

日终跑批是信贷系统的"心脏",每日固定时间窗口执行:

批处理时间窗口:00:00 - 06:00

作业编排(有依赖关系):
Job 1: 日终计息(对所有ACTIVE借据计算当日利息)
  ↓
Job 2: 逾期标记(对比当日到期未还的还款计划,标记逾期)
  ↓
Job 3: 罚息计算(对所有逾期借据计算当日罚息)
  ↓
Job 4: 自动扣款(对当日到期的还款计划发起代扣)
  ↓
Job 5: 五级分类(根据逾期天数重新分类)
  ↓
Job 6: 催收任务生成(根据逾期分级生成/升级催收任务)
  ↓
Job 7: 征信报送(生成央行征信报文)
  ↓
Job 8: 监管报表(生成各类监管统计报表)

性能优化:
- 分片并行:按用户ID哈希分片,多线程并行处理
- 增量处理:只处理状态变更的借据,非全量扫描
- 断点续跑:支持从失败点恢复,不重复处理

五、深度问题

5.1 利率合规

核心问题:名义利率 vs 实际利率(IRR)。

很多平台通过"等额本息"的方式让用户感觉利率低,但实际IRR年化利率远高于名义利率。

案例:
本金12000元,名义月利率1%,12期等额本息
每月还款 = 12000 × 0.01 × 1.01^12 / (1.01^12-1) = 1066.19元
名义年利率 = 1% × 12 = 12%

但用IRR计算真实年化利率:
实际年化利率(IRR) = 12.68%(因为本金逐月减少,但按初始本金算利率)

如果再加上服务费、保险费等:
综合年化成本可能达到 24%+

合规策略

  • 系统必须同时计算名义利率和IRR年化利率
  • 贷前信息披露必须展示IRR年化利率
  • 所有费用(服务费/保险费/担保费)纳入综合成本计算
  • 综合年化成本不得超过24%(司法保护上限),绝对不超过36%

5.2 提前还款

对系统的影响

1. 还款计划重算:
   - 提前还部分本金 → 两种方式:缩短期限 / 减少每期金额
   - 提前结清 → 计算截至当日的利息,剩余利息免除

2. 利息损失:
   - 利息收入减少,需评估提前还款率对收入的影响
   - 对资金方(联合贷)也有影响,需通知资金方

3. 违约金/补偿金:
   - 监管趋势:不建议收取提前还款违约金
   - 如收取:通常为剩余利息的1-3%,需在合同中明确约定

4. 会计处理:
   - 已计提的未来利息需要冲回
   - 需要重新计算有效利率(IFRS 9)

5.3 资产质量与五级分类

分类判定标准拨备比例(参考)
正常正常还款,无逾期1%
关注逾期1-30天(M1)2%
次级逾期31-90天(M2-M3)25%
可疑逾期91-180天(M4-M5)50%
损失逾期180天以上(M6+)100%

拨备计提

拨备金额 = Σ (各分类贷款余额 × 拨备比例)

示例:
正常类贷款 10亿 × 1% = 1000万
关注类贷款 5000万 × 2% = 100万
次级类贷款 2000万 × 25% = 500万
可疑类贷款 1000万 × 50% = 500万
损失类贷款 500万 × 100% = 500万
总拨备 = 2600万

5.4 联合贷款/助贷

自营模式:
  用户 ←→ 我方(出资+风控+运营)
  优:利润全归己;劣:资金压力大

联合贷模式:
  用户 ←→ 我方(风控+获客)+ 银行(出资,通常出资>70%)
  优:杠杆效应;劣:受银行合规约束

助贷模式:
  用户 ←→ 银行(出资+放款)← 我方(导流+初筛)
  优:轻资产;劣:利润薄,易被替代

架构差异:
- 联合贷需要:资金路由模块、分润计算、资金方对账
- 助贷需要:API网关对接、标准化用户数据输出
- 都需要:多资金方管理、资金匹配算法

5.5 资产证券化(ABS)

流程:
1. 底层资产筛选:从贷款池中筛选符合条件的资产
   - 条件:正常类/关注类、剩余期限>3期、单笔<一定金额
   
2. 打包与分层:
   - 优先级(A档):低利率低风险,银行/保险投资
   - 中间级(B档):中等利率中等风险
   - 劣后级(C档):高收益高风险,通常发起人自持

3. SPV设立:特殊目的载体,实现风险隔离(真实出售)

4. 循环购买:短期资产支持长期ABS,需持续购入新资产

架构影响:
- 需要资产标签系统(标记哪些资产已入池/可入池)
- 需要资产快照(入池时点的资产状态)
- 还款资金需按分层分配(瀑布式分配)
- 需要信息披露系统(定期向投资人报告资产表现)

5.6 征信报送

报送内容:
- 个人基本信息(姓名/证件号/联系方式)
- 信贷账户信息(开户日/额度/余额)
- 还款记录(24个月还款状态:N正常/1逾期1-30天/2逾期31-60天...)
- 特殊交易(展期/担保人代偿/提前还款等)

报送频率:
- 月度报送:每月一次全量+增量
- 日报送:开户/结清/逾期等重要事件T+1报送

数据格式:
- 央行征信中心规定的标准报文格式(JSON/XML)
- 数据加密传输(国密算法)

异议处理:
- 用户可对征信记录提出异议
- 机构需在20个工作日内完成核实和更正
- 需要完整的异议处理工作流

六、架构决策摘要

ADR编号决策主题选择方案核心理由
ADR-001还款方式引擎设计策略模式+公式化结合类型安全+可扩展+参数灵活
ADR-002额度模型选择动态额度+共享额度池精细化风控+多产品复用
ADR-003逾期利息计算单利+分段计息监管合规+公平性

完整ADR详见 adr/ 目录


七、面试口述版

2分钟版

信贷系统可以按贷前、贷中、贷后三段来讲。

贷前核心是授信决策:用户提交申请后,系统做准入校验、征信查询、评分卡打分、额度计算,80%的案件自动审批,20%进入人工审批队列。整个决策链路要求3秒内返回。

贷中核心是放款和还款:用户用信时生成借据、签电子合同、通过支付系统放款。还款引擎支持等额本息、等额本金、先息后本、按日计息四种方式,核心是PMT公式和尾差处理。日均放款10万笔通过异步化和分库分表解决。

贷后核心是逾期管理:日终跑批做计息、逾期标记、罚息计算、五级分类。催收按M1到M6+分级,策略从IVR自动外呼逐步升级到人工、委外、法催。

关键的合规约束是:年化利率不超过24%红线,征信按月报送,提前还款不收违约金或有上限。

5分钟版

在2分钟版基础上,补充以下深度:

架构层面:系统拆分为9个微服务——产品引擎做参数化配置,决策引擎集成评分卡和反欺诈,Loan Core管借据和账务,还款引擎独立做计算,催收服务有策略编排能力。

数据模型:核心7张表——product(产品配置)、application(申请)、credit_line(额度)、loan_contract(借据)、repayment_schedule(还款计划)、repayment_record(还款流水)、overdue_record(逾期记录)。额度表用乐观锁保证并发安全。

深度问题:利率合规方面,必须用IRR计算真实年化并向用户披露。提前还款需要重算还款计划,对联合贷的资金方也有影响。资产质量通过五级分类管理,拨备计提按分类比例。如果做联合贷,还需要资金路由、分润计算、多资金方对账。

15分钟版

在5分钟版基础上,展开每个核心组件的详细设计:

  • 产品引擎的模板化设计和版本管理
  • 评分卡体系(A/B/C卡)的应用场景和数据流
  • 还款计算的4种公式推导、精度控制、尾差处理
  • 额度管理的两阶段冻结-扣减机制
  • 日终跑批的作业编排和性能优化
  • 资产证券化对架构的影响
  • 征信报送的数据格式和异议处理

八、自评与反思

设计亮点

  1. 产品模板化:通过配置化实现多产品快速上线,避免硬编码
  2. 额度两阶段操作:冻结→扣减的模式保证了并发安全和事务一致性
  3. 催收策略编排:分级催收+策略引擎,兼顾效率和合规
  4. 利率合规内嵌:IRR计算和24%/36%校验在引擎层面强制执行

可改进点

  1. 实时风控:当前设计侧重贷前决策,贷中实时监控(如多头借贷预警)可以更深入
  2. 国际化:仅考虑国内监管,跨境信贷需要多币种、多监管框架支持
  3. AI增强:可引入机器学习模型做风险预测、智能催收策略优化
  4. 弹性架构:日终跑批是传统方案,可考虑事件驱动架构(CDC+流式计算)替代部分批处理

面试追问准备

  • "如何处理日终跑批的失败和重试?" → 幂等设计+断点续跑+告警
  • "如何保证放款不重复?" → 幂等键(申请ID+时间戳)+状态机+支付系统去重
  • "大促期间放款量暴增怎么办?" → 弹性扩容+异步队列+限流+预审批
  • "如何做灰度发布新的评分卡?" → 双评分卡并行+A/B测试+渐进切流