chore: initial commit — leaudit-platform project skeleton

17-table PostgreSQL schema with full Chinese column comments,
FastAPI project structure (admin/common/modules),
DSL rule files, and schema migration scripts.
This commit is contained in:
wren
2026-04-27 16:48:22 +08:00
commit 535d97a70c
142 changed files with 25219 additions and 0 deletions
+322
View File
@@ -0,0 +1,322 @@
# ═════════════════════════════════════════════════════════════════
# 借款合同 · 回归测试用例
# ═════════════════════════════════════════════════════════════════
# 配套文件:contract_loan.yaml
# 重点展示:multi_entity / derived fields / external 数据源 mock
target: contract_loan.yaml
# 外部数据源的 mock 值(替代真实 API 调用)
external_mocks:
lpr_lookup:
"1y": 0.0345 # 当前 1 年 LPR = 3.45%
# 推导:LPR_4x = 0.0345 * 4 = 0.138
fixtures:
# ═════════════════════════════════════════════════════════════
# JK-001 · 借款主体合法性
# ═════════════════════════════════════════════════════════════
JK-001:
- name: 已执行-借贷双方合法
phase: executed
extract:
借款人姓名: 张三
借款人身份证: "110101197001011234"
出借人姓名: 李四
出借人身份证: "310102198505051234"
expected: pass
- name: 已执行-借款人身份证校验失败
phase: executed
extract:
借款人姓名: 张三
借款人身份证: "110101197001011230" # 末位错
出借人姓名: 李四
出借人身份证: "310102198505051234"
expected: fail
- name: 草稿-只有姓名
phase: draft
extract:
借款人姓名: 张三
出借人姓名: 李四
expected: pass # 草稿阶段身份证待补
# ═════════════════════════════════════════════════════════════
# JK-002 · 利率不超过 LPR × 4(核心规则)
# 依赖 external.lpr_lookup mockLPR_4x = 0.138
# ═════════════════════════════════════════════════════════════
JK-002:
- name: 年利率 10% 合规
phase: executed
extract:
年利率: 0.10
# derived.LPR_4x = 0.138mock 值)
expected: pass
- name: 年利率 20% 超限
phase: executed
extract:
年利率: 0.20
expected: fail
- name: 年利率正好等于 LPR×4(边界)
phase: executed
extract:
年利率: 0.138
expected: fail # money.lt 严格小于
- name: 年利率 0.137 边界内
phase: executed
extract:
年利率: 0.137
expected: pass
# ═════════════════════════════════════════════════════════════
# JK-003 · 所有担保人身份合法(multi-entity 核心测试)
# ═════════════════════════════════════════════════════════════
JK-003:
- name: 三担保人全合法
phase: executed
extract:
担保人:
- {姓名: 张三, 身份证号: "110101197001011234", 担保金额: 500000, 担保方式: 连带责任保证}
- {姓名: 李四, 身份证号: "310102198505051234", 担保金额: 800000, 担保方式: 连带责任保证}
- {姓名: 王五, 身份证号: "440103199212121234", 担保金额: 300000, 担保方式: 一般保证}
expected: pass
- name: 第二个担保人身份证校验失败
phase: executed
extract:
担保人:
- {姓名: 张三, 身份证号: "110101197001011234", 担保金额: 500000, 担保方式: 连带责任保证}
- {姓名: 李四, 身份证号: "310102198505051230", 担保金额: 800000, 担保方式: 连带责任保证} # 末位错
- {姓名: 王五, 身份证号: "440103199212121234", 担保金额: 300000, 担保方式: 一般保证}
expected: fail # [*] 遍历,任一失败整体 fail
- name: 第一个担保人姓名缺失
phase: executed
extract:
担保人:
- {姓名: null, 身份证号: "110101197001011234", 担保金额: 500000, 担保方式: 连带责任保证}
- {姓名: 李四, 身份证号: "310102198505051234", 担保金额: 800000, 担保方式: 连带责任保证}
expected: fail
- name: 无担保人(规则跳过)
phase: executed
extract:
担保人: []
expected: skipped # activate_if 条件不满足
# ═════════════════════════════════════════════════════════════
# JK-004 · 担保总额覆盖借款本金(sum_ge 聚合)
# ═════════════════════════════════════════════════════════════
JK-004:
- name: 担保覆盖
phase: executed
extract:
借款本金: 1500000
担保人:
- {姓名: 张三, 担保金额: 500000, 担保方式: 连带责任保证}
- {姓名: 李四, 担保金额: 800000, 担保方式: 连带责任保证}
- {姓名: 王五, 担保金额: 300000, 担保方式: 一般保证}
# derived.担保总额 = 1600000 >= 借款本金 1500000
expected: pass
- name: 担保不足
phase: executed
extract:
借款本金: 2000000
担保人:
- {姓名: 张三, 担保金额: 500000, 担保方式: 连带责任保证}
- {姓名: 李四, 担保金额: 800000, 担保方式: 连带责任保证}
# derived.担保总额 = 1300000 < 借款本金 2000000
expected: fail
- name: 担保恰好等于本金
phase: executed
extract:
借款本金: 1000000
担保人:
- {姓名: 张三, 担保金额: 1000000, 担保方式: 连带责任保证}
expected: pass
# ═════════════════════════════════════════════════════════════
# JK-005 · 禁止利滚利
# ═════════════════════════════════════════════════════════════
JK-005:
- name: 正常违约条款
phase: executed
extract:
违约责任: 借款人逾期还款的,按每日 0.05% 支付违约金,违约金不超过借款本金 30%
借款用途: 企业日常经营周转
expected: pass
- name: 出现利滚利字样
phase: executed
extract:
违约责任: 借款人违约的,利息计入本金后继续计息,利滚利
借款用途: 企业日常经营周转
expected: fail
- name: 借款用途违法
phase: executed
extract:
违约责任: 正常违约金条款
借款用途: 用于赌博和非法经营活动
expected: fail
- name: 出现砍头息
phase: executed
extract:
违约责任: 出借人有权预扣利息,砍头息为借款的 10%
借款用途: 经营周转
expected: fail
# ═════════════════════════════════════════════════════════════
# JK-006 · 违约金不超过 30%ratio_within
# ═════════════════════════════════════════════════════════════
JK-006:
- name: 违约金 20%(合规)
phase: executed
extract:
借款本金: 1000000
违约金金额: 200000
# derived.违约金比例 = 0.20
expected: pass
- name: 违约金 35%(超限)
phase: executed
extract:
借款本金: 1000000
违约金金额: 350000
expected: fail
- name: 违约金 30%(边界,恰好到上限)
phase: executed
extract:
借款本金: 1000000
违约金金额: 300000
expected: pass # ratio_within max=0.30 是闭区间
# ═════════════════════════════════════════════════════════════
# JK-007 · 借款本金大小写一致性
# ═════════════════════════════════════════════════════════════
JK-007:
- name: 大小写一致
phase: executed
extract:
借款本金: 1000000
借款本金大写: 壹佰万元整
expected: pass
- name: 大小写不一致
phase: executed
extract:
借款本金: 1000000
借款本金大写: 壹拾万元整 # 差一位
expected: fail
# ═════════════════════════════════════════════════════════════
# JK-008 · 借款期限合理性(带 depends_on)
# ═════════════════════════════════════════════════════════════
JK-008:
- name: 正常期限
phase: executed
extract:
借款人姓名: 张三
借款人身份证: "110101197001011234"
出借人姓名: 李四
出借人身份证: "310102198505051234"
借款日期: "2024-01-01"
还款日期: "2025-01-01"
签订日期: "2024-01-01"
expected: pass
- name: 借款日期晚于还款日期
phase: executed
extract:
借款人姓名: 张三
借款人身份证: "110101197001011234"
出借人姓名: 李四
出借人身份证: "310102198505051234"
借款日期: "2024-06-01"
还款日期: "2024-01-01" # ← 颠倒
签订日期: "2024-01-01"
expected: fail
- name: 依赖规则失败时本规则被跳过
phase: executed
extract:
借款人姓名: 张三
借款人身份证: "110101197001011230" # JK-001 会失败
出借人姓名: 李四
出借人身份证: "310102198505051234"
借款日期: "2024-01-01"
还款日期: "2025-01-01"
expected: skipped_dependency # JK-001 失败 → 本规则跳过
# ═════════════════════════════════════════════════════════════
# JK-SEAL-001 · 双方签章
# ═════════════════════════════════════════════════════════════
JK-SEAL-001:
- name: 双方签章齐全
phase: executed
extract:
借款人姓名: 张三
出借人姓名: 李四
visual_manifest:
seals:
- id: 借款人签章
detection_score: 0.94
ocr_text: 张三
- id: 出借人签章
detection_score: 0.92
ocr_text: 李四
expected: pass
- name: 缺出借人签章
phase: executed
extract:
借款人姓名: 张三
出借人姓名: 李四
visual_manifest:
seals:
- id: 借款人签章
detection_score: 0.94
ocr_text: 张三
expected: fail
- name: 草稿阶段无签章(规则跳过)
phase: draft
extract:
借款人姓名: 张三
出借人姓名: 李四
visual_manifest:
seals: []
expected: skipped_phase
# ═════════════════════════════════════════════════════════════
# JK-GROUP-INTEREST · 利率合规总判定(规则组)
# ═════════════════════════════════════════════════════════════
JK-GROUP-INTEREST:
- name: 全部子规则通过
phase: executed
extract:
年利率: 0.10
违约责任: 正常违约金条款
借款用途: 经营周转
借款本金: 1000000
违约金金额: 200000
expected: pass
- name: 子规则 JK-002 失败导致组失败
phase: executed
extract:
年利率: 0.25 # 超限
违约责任: 正常违约金条款
借款用途: 经营周转
借款本金: 1000000
违约金金额: 200000
expected: fail