Files
leaudit-platform-backend/rules/contract_purchase/rules.test.yaml
T
wren 535d97a70c 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.
2026-04-27 16:48:22 +08:00

342 lines
14 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ═════════════════════════════════════════════════════════════════
# 买卖合同 · 回归测试用例
# ═════════════════════════════════════════════════════════════════
# 配套文件: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