消费信贷系统架构设计
消费信贷系统架构设计
设计级别:架构师面试 / 系统设计
场景:"请设计一个消费信贷系统,覆盖贷前/贷中/贷后全流程,支持多种还款方式,日均放款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 | 五级分类、拨备、资产转让、ABS | Java + 批处理框架 | 独立服务 |
| Regulatory Reporting | 征信报送、监管报表、信息披露 | Java + Spring Batch | 独立服务 |
详见
diagrams/c4-container.mmd
2.3 信贷全流程
贷前:申请 → 准入校验 → 征信查询 → 评分卡 → 审批(自动/人工)→ 授信(发放额度)
贷中:用信申请 → 合同生成 → 签约 → 放款指令 → 资金划转 → 到账确认
贷后-正常:日终计息 → 还款提醒 → 自动扣款/主动还款 → 销账 → 结清
贷后-逾期:逾期标记 → 罚息计算 → 催收(IVR→短信→人工→委外→法催) → 回款 / 核销
详见
diagrams/sequence.mmd
三、数据模型设计
3.1 核心表设计
credit_product(信贷产品表)
| 字段 | 类型 | 说明 |
|---|---|---|
| product_id | VARCHAR(32) | 产品编号 PK |
| product_name | VARCHAR(64) | 产品名称 |
| product_type | ENUM | 消费贷/现金贷/分期 |
| min_amount | DECIMAL(18,2) | 最低借款金额 |
| max_amount | DECIMAL(18,2) | 最高借款金额 |
| term_options | JSON | 可选期限 [3,6,9,12,18,24] |
| annual_rate_min | DECIMAL(8,6) | 最低年化利率 |
| annual_rate_max | DECIMAL(8,6) | 最高年化利率 |
| repayment_methods | JSON | 支持的还款方式 |
| overdue_rate | DECIMAL(8,6) | 逾期罚息利率(日利率) |
| grace_period_days | INT | 宽限期天数 |
| status | ENUM | DRAFT/ACTIVE/SUSPENDED/ARCHIVED |
| created_at | DATETIME | 创建时间 |
| updated_at | DATETIME | 更新时间 |
credit_application(授信申请表)
| 字段 | 类型 | 说明 |
|---|---|---|
| application_id | VARCHAR(32) | 申请编号 PK |
| user_id | VARCHAR(32) | 用户ID |
| product_id | VARCHAR(32) | 产品编号 FK |
| apply_amount | DECIMAL(18,2) | 申请额度 |
| status | ENUM | SUBMITTED/REVIEWING/APPROVED/REJECTED/CANCELLED |
| credit_score | INT | 信用评分 |
| risk_level | ENUM | LOW/MEDIUM/HIGH |
| reject_reason | VARCHAR(256) | 拒绝原因 |
| credit_report_id | VARCHAR(64) | 征信报告编号 |
| approved_amount | DECIMAL(18,2) | 批准额度 |
| approved_rate | DECIMAL(8,6) | 批准利率 |
| operator_id | VARCHAR(32) | 审批人(人工审批时) |
| applied_at | DATETIME | 申请时间 |
| decided_at | DATETIME | 决策时间 |
credit_line(额度表)
| 字段 | 类型 | 说明 |
|---|---|---|
| line_id | VARCHAR(32) | 额度编号 PK |
| user_id | VARCHAR(32) | 用户ID |
| product_id | VARCHAR(32) | 产品编号 |
| total_amount | DECIMAL(18,2) | 总额度 |
| used_amount | DECIMAL(18,2) | 已用额度 |
| available_amount | DECIMAL(18,2) | 可用额度 |
| frozen_amount | DECIMAL(18,2) | 冻结额度 |
| annual_rate | DECIMAL(8,6) | 授信利率 |
| effective_date | DATE | 生效日期 |
| expire_date | DATE | 失效日期 |
| status | ENUM | ACTIVE/FROZEN/EXPIRED/CLOSED |
| version | INT | 乐观锁版本号 |
loan_contract(借据/合同表)
| 字段 | 类型 | 说明 |
|---|---|---|
| contract_no | VARCHAR(32) | 合同号 PK |
| user_id | VARCHAR(32) | 用户ID |
| line_id | VARCHAR(32) | 额度编号 FK |
| product_id | VARCHAR(32) | 产品编号 FK |
| principal | DECIMAL(18,2) | 贷款本金 |
| annual_rate | DECIMAL(8,6) | 年化利率 |
| daily_rate | DECIMAL(12,10) | 日利率 |
| term_count | INT | 总期数 |
| repayment_method | ENUM | EQUAL_INSTALLMENT/EQUAL_PRINCIPAL/INTEREST_FIRST/DAILY |
| disbursement_date | DATE | 放款日期 |
| maturity_date | DATE | 到期日期 |
| total_interest | DECIMAL(18,2) | 总利息(预计算) |
| remaining_principal | DECIMAL(18,2) | 剩余本金 |
| status | ENUM | 见状态机 |
| fund_channel | VARCHAR(32) | 资金渠道 |
| contract_url | VARCHAR(256) | 电子合同URL |
| created_at | DATETIME | 创建时间 |
repayment_schedule(还款计划表)
| 字段 | 类型 | 说明 |
|---|---|---|
| schedule_id | VARCHAR(32) | 计划编号 PK |
| contract_no | VARCHAR(32) | 合同号 FK |
| term_no | INT | 期数(第几期) |
| due_date | DATE | 应还日期 |
| due_principal | DECIMAL(18,2) | 应还本金 |
| due_interest | DECIMAL(18,2) | 应还利息 |
| due_penalty | DECIMAL(18,2) | 应还罚息 |
| due_total | DECIMAL(18,2) | 应还总额 |
| paid_principal | DECIMAL(18,2) | 实还本金 |
| paid_interest | DECIMAL(18,2) | 实还利息 |
| paid_penalty | DECIMAL(18,2) | 实还罚息 |
| paid_total | DECIMAL(18,2) | 实还总额 |
| status | ENUM | PENDING/PAID/OVERDUE/PARTIAL_PAID/WAIVED |
| paid_date | DATE | 实际还款日期 |
repayment_record(还款流水表)
| 字段 | 类型 | 说明 |
|---|---|---|
| record_id | VARCHAR(32) | 流水号 PK |
| contract_no | VARCHAR(32) | 合同号 FK |
| term_no | INT | 对应期数 |
| repay_type | ENUM | NORMAL/EARLY/OVERDUE/PENALTY |
| repay_channel | ENUM | AUTO_DEBIT/MANUAL/BANK_TRANSFER |
| amount | DECIMAL(18,2) | 还款金额 |
| principal_part | DECIMAL(18,2) | 本金部分 |
| interest_part | DECIMAL(18,2) | 利息部分 |
| penalty_part | DECIMAL(18,2) | 罚息部分 |
| status | ENUM | PROCESSING/SUCCESS/FAILED |
| payment_order_id | VARCHAR(64) | 支付系统订单号 |
| created_at | DATETIME | 创建时间 |
overdue_record(逾期记录表)
| 字段 | 类型 | 说明 |
|---|---|---|
| overdue_id | VARCHAR(32) | 逾期记录ID PK |
| contract_no | VARCHAR(32) | 合同号 FK |
| term_no | INT | 逾期期数 |
| overdue_days | INT | 逾期天数 |
| overdue_level | ENUM | M0/M1/M2/M3/M4/M5/M6_PLUS |
| overdue_principal | DECIMAL(18,2) | 逾期本金 |
| overdue_interest | DECIMAL(18,2) | 逾期利息 |
| penalty_amount | DECIMAL(18,2) | 累计罚息 |
| collection_status | ENUM | PENDING/IVR/SMS/MANUAL/OUTSOURCED/LEGAL/RECOVERED/WRITTEN_OFF |
| started_at | DATE | 逾期开始日 |
| recovered_at | DATE | 回收日期 |
collection_task(催收任务表)
| 字段 | 类型 | 说明 |
|---|---|---|
| task_id | VARCHAR(32) | 任务ID PK |
| overdue_id | VARCHAR(32) | 逾期记录ID FK |
| contract_no | VARCHAR(32) | 合同号 |
| user_id | VARCHAR(32) | 用户ID |
| task_type | ENUM | IVR/SMS/MANUAL_CALL/VISIT/OUTSOURCE/LEGAL |
| assigned_to | VARCHAR(32) | 分配催收员 |
| priority | INT | 优先级 |
| status | ENUM | PENDING/IN_PROGRESS/COMPLETED/FAILED/TRANSFERRED |
| result | VARCHAR(256) | 催收结果 |
| next_action_date | DATE | 下次跟进日期 |
| created_at | DATETIME | 创建时间 |
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)
| 级别 | 逾期天数 | 风险等级 | 催收策略 | 五级分类 |
|---|---|---|---|---|
| M0 | 0天(正常) | 无 | 还款提醒 | 正常 |
| M1 | 1-30天 | 低 | IVR自动外呼+短信 | 关注 |
| M2 | 31-60天 | 中 | 人工电催 | 次级 |
| M3 | 61-90天 | 高 | 高级催收员+上门 | 可疑 |
| M4 | 91-120天 | 极高 | 委外催收 | 可疑 |
| M5 | 121-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种公式推导、精度控制、尾差处理
- 额度管理的两阶段冻结-扣减机制
- 日终跑批的作业编排和性能优化
- 资产证券化对架构的影响
- 征信报送的数据格式和异议处理
八、自评与反思
设计亮点
- 产品模板化:通过配置化实现多产品快速上线,避免硬编码
- 额度两阶段操作:冻结→扣减的模式保证了并发安全和事务一致性
- 催收策略编排:分级催收+策略引擎,兼顾效率和合规
- 利率合规内嵌:IRR计算和24%/36%校验在引擎层面强制执行
可改进点
- 实时风控:当前设计侧重贷前决策,贷中实时监控(如多头借贷预警)可以更深入
- 国际化:仅考虑国内监管,跨境信贷需要多币种、多监管框架支持
- AI增强:可引入机器学习模型做风险预测、智能催收策略优化
- 弹性架构:日终跑批是传统方案,可考虑事件驱动架构(CDC+流式计算)替代部分批处理
面试追问准备
- "如何处理日终跑批的失败和重试?" → 幂等设计+断点续跑+告警
- "如何保证放款不重复?" → 幂等键(申请ID+时间戳)+状态机+支付系统去重
- "大促期间放款量暴增怎么办?" → 弹性扩容+异步队列+限流+预审批
- "如何做灰度发布新的评分卡?" → 双评分卡并行+A/B测试+渐进切流