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
+341
View File
@@ -0,0 +1,341 @@
# ═════════════════════════════════════════════════════════════════
# 买卖合同 · 回归测试用例
# ═════════════════════════════════════════════════════════════════
# 配套文件:contract_purchase.yaml
# visual_manifest 段用于 mock 视觉检测器输出(印章/签名)
#
# phase 字段:
# - 默认 executed(按全局 default_phase),可省略
# - 显式声明 draft → 引擎按草稿阶段评判
#
# 新增状态:
# - pass / fail / skipped_phase / skipped_gate
target: contract_purchase.yaml
fixtures:
# ═════════════════════════════════════════════════════════════
# MM-001 · 当事人信息完整性
# ═════════════════════════════════════════════════════════════
MM-001:
# ── Executed 阶段 ──
- name: 已执行-完整合规
phase: executed
extract:
甲方名称: 上海某某科技有限公司
甲方法定代表人: 张三
甲方统一信用代码: "91310000MA1K3H5K8L"
乙方名称: 北京某某贸易有限公司
乙方法定代表人: 李四
乙方统一信用代码: "91110000MA01234X5Y"
expected: pass
- name: 已执行-缺少法定代表人
phase: executed
extract:
甲方名称: 上海某某科技有限公司
甲方法定代表人: null # executed 阶段缺失 = fail
乙方名称: 北京某某贸易有限公司
乙方法定代表人: 李四
expected: fail
- name: 已执行-USCC 校验位错误
phase: executed
extract:
甲方名称: 上海某某科技有限公司
甲方法定代表人: 张三
甲方统一信用代码: "91310000MA1K3H5K80"
乙方名称: 北京某某贸易有限公司
乙方法定代表人: 李四
乙方统一信用代码: "91110000MA01234X5Y"
expected: fail
# ── Draft 阶段(同样的抽取结果,不同的判定)──
- name: 草稿-只有甲乙方名称(执行阶段 fail,草稿阶段 pass)
phase: draft
extract:
甲方名称: 上海某某科技有限公司
乙方名称: 北京某某贸易有限公司
# 法代、USCC、电话都没填
expected: pass # 草稿阶段这些是待补项
- name: 草稿-连甲乙方名称都没有(仍然 fail)
phase: draft
extract:
甲方名称: null # draft 阶段 required_from 也必需
乙方名称: 北京某某贸易有限公司
expected: fail
# ═════════════════════════════════════════════════════════════
# MM-002 · 合同金额大小写一致性
# ═════════════════════════════════════════════════════════════
MM-002:
- name: 大小写一致
extract:
合同金额: 1200000.00
合同金额大写: 壹佰贰拾万元整
expected: pass
- name: 不一致(金额错位)
extract:
合同金额: 1200000.00
合同金额大写: 壹佰贰拾贰万元整
expected: fail
- name: 缺少大写金额
extract:
合同金额: 1200000.00
合同金额大写: null
expected: fail
# ═════════════════════════════════════════════════════════════
# MM-003 · 大额合同须招投标
# ═════════════════════════════════════════════════════════════
MM-003:
- name: 小额无需招标
extract:
合同金额: 500000
招标文件编号: null
expected: pass
- name: 大额有招标
extract:
合同金额: 2000000
招标文件编号: "ZB2024001"
expected: pass
- name: 大额无招标
extract:
合同金额: 2000000
招标文件编号: null
expected: fail
# ═════════════════════════════════════════════════════════════
# MM-004 · 合同日期先后关系
# 签订日期是 required_from: executed,草稿阶段整条规则 skipped
# ═════════════════════════════════════════════════════════════
MM-004:
- name: 已执行-正常先后
phase: executed
extract:
签订日期: "2024-03-15"
生效日期: "2024-04-01"
终止日期: "2025-04-01"
expected: pass
- name: 已执行-签订晚于生效
phase: executed
extract:
签订日期: "2024-04-15"
生效日期: "2024-04-01"
终止日期: "2025-04-01"
expected: fail
- name: 已执行-终止早于生效
phase: executed
extract:
签订日期: "2024-03-15"
生效日期: "2024-04-01"
终止日期: "2024-03-20"
expected: fail
# 草稿阶段:签订日期还没填,本规则应自动跳过(不是 fail)
- name: 草稿-签订日期未填(规则 skipped)
phase: draft
extract:
签订日期: null
生效日期: null
终止日期: null
expected: skipped_phase
# ═════════════════════════════════════════════════════════════
# MM-005 · 质量标准明确性
# ═════════════════════════════════════════════════════════════
MM-005:
- name: 有具体国标
extract:
质量标准: 产品质量应符合 GB/T 12345-2020《某某产品质量要求》国家标准
expected: pass
- name: 过于简略
extract:
质量标准: 按国家标准
expected: fail
- name: 长度够但无标准引用
extract:
质量标准: 产品应符合买方指定的质量要求,包括外观、功能和性能等方面
expected: fail
# ═════════════════════════════════════════════════════════════
# MM-006 · 违约责任条款存在性
# ═════════════════════════════════════════════════════════════
MM-006:
- name: 明确违约
extract:
违约责任: 任何一方违约应向守约方支付合同总金额 10% 的违约金,并赔偿守约方因此遭受的直接经济损失。
expected: pass
- name: 无违约条款
extract:
违约责任: null
expected: fail
# ═════════════════════════════════════════════════════════════
# MM-SEAL-001 · 双方签章齐全且文字匹配
# 所有 seal required_from: executed,草稿阶段整条规则 skipped
# ═════════════════════════════════════════════════════════════
MM-SEAL-001:
# ── Executed 阶段 ──
- name: 已执行-双方签章齐全且文字匹配
phase: executed
extract:
甲方名称: 上海某某科技有限公司
乙方名称: 北京某某贸易有限公司
visual_manifest:
seals:
- id: 甲方签章
detection_score: 0.95
ocr_text: 上海某某科技有限公司合同专用章
color: red
page: 5
- id: 乙方签章
detection_score: 0.94
ocr_text: 北京某某贸易有限公司合同专用章
color: red
page: 5
expected: pass
- name: 已执行-缺乙方签章
phase: executed
extract:
甲方名称: 上海某某科技有限公司
乙方名称: 北京某某贸易有限公司
visual_manifest:
seals:
- id: 甲方签章
detection_score: 0.95
ocr_text: 上海某某科技有限公司合同专用章
color: red
page: 5
# 乙方签章缺失
expected: fail
- name: 已执行-甲方印章文字不符(冒章风险)
phase: executed
extract:
甲方名称: 上海某某科技有限公司
乙方名称: 北京某某贸易有限公司
visual_manifest:
seals:
- id: 甲方签章
detection_score: 0.92
ocr_text: 北京其他公司公章 # ← 文字不符
color: red
- id: 乙方签章
detection_score: 0.94
ocr_text: 北京某某贸易有限公司合同专用章
color: red
expected: fail
# ── Draft 阶段(草稿无章,应自动跳过)──
- name: 草稿-无任何印章(规则 skipped_phase
phase: draft
extract:
甲方名称: 上海某某科技有限公司
乙方名称: 北京某某贸易有限公司
visual_manifest:
seals: [] # 草稿阶段无章
expected: skipped_phase
- name: 草稿-即使有章也是 skipped(本规则对 draft 不适用)
phase: draft
extract:
甲方名称: 上海某某科技有限公司
乙方名称: 北京某某贸易有限公司
visual_manifest:
seals:
- id: 甲方签章
detection_score: 0.95
ocr_text: 上海某某科技有限公司合同专用章
expected: skipped_phase # 即使章齐全,draft 也 skipped
# ═════════════════════════════════════════════════════════════
# MM-SEAL-002 · 骑缝章完整
# ═════════════════════════════════════════════════════════════
MM-SEAL-002:
- name: 骑缝章完整对齐
extract:
甲方名称: 上海某某科技有限公司
visual_manifest:
cross_page_seals:
- id: 骑缝章
detection_score: 0.91
complete: true # 所有相邻页都有
aligned: true # 拼合正确
ocr_text: 上海某某科技有限公司
expected: pass
- name: 骑缝章部分缺失
extract:
甲方名称: 上海某某科技有限公司
visual_manifest:
cross_page_seals:
- id: 骑缝章
detection_score: 0.85
complete: false # 缺少部分页
aligned: true
expected: fail
- name: 骑缝章错位
extract:
甲方名称: 上海某某科技有限公司
visual_manifest:
cross_page_seals:
- id: 骑缝章
detection_score: 0.88
complete: true
aligned: false # 拼合错位,可能换页
expected: fail
# ═════════════════════════════════════════════════════════════
# MM-SEAL-003 · 法人签名 + 公章双重确认(仅大额触发)
# ═════════════════════════════════════════════════════════════
MM-SEAL-003:
- name: 小额合同无需双重确认
extract:
合同金额: 300000 # < 50 万,规则不触发
visual_manifest:
seals: []
signatures: []
expected: pass
- name: 大额合同公章 + 签名齐全
extract:
合同金额: 800000
甲方法定代表人: 张三
visual_manifest:
seals:
- id: 甲方签章
detection_score: 0.94
ocr_text: 上海某某科技有限公司合同专用章
signatures:
- id: 甲方法人签名
detection_score: 0.90
ocr_text: 张三
expected: pass
- name: 大额合同缺法人签名
extract:
合同金额: 800000
甲方法定代表人: 张三
visual_manifest:
seals:
- id: 甲方签章
detection_score: 0.94
ocr_text: 上海某某科技有限公司合同专用章
signatures: [] # 无签名
expected: fail