# ═════════════════════════════════════════════════════════════════
# 买卖合同 · 回归测试用例
# ═════════════════════════════════════════════════════════════════
# 配套文件：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
