metadata:
  type_id: govdoc_general
  name: 内部公文通用规则
  version: "0.1.0"
  source: 公文文稿常见错误汇编（第一期）·2025-11
  description: 基于旧内部公文正式规则语义整理的当前平台规则集。

extract:
  # 8 个内置实体（title / doc_number / recipient / date /
  # signature / attachments / wenzhong / issuer）由代码自动产出。
  entities: []

rules:
  - group: 标题（错误汇编 一）
    rules:
      - rule_id: GW-T-001
        name: 标题文种合规性
        severity: error
        category: 标题
        target: title
        on_missing: fail
        stages:
          - check: ai
            prompt: |
              审查公文标题是否符合规范。
              标题：{{title.text}}

              15 种合法文种：决议、决定、命令（令）、公报、公告、通告、意见、
              通知、通报、报告、请示、批复、议案、函、纪要

              检查要点：
              1. 是否使用了合法文种
              2. 方案/规划/办法/细则等是否以"通知"形式下发（应为"关于印发〈xxx〉的通知"）
              3. 标题中是否有"印发"等动词
        messages:
          pass: 标题文种合规
          fail: 标题文种不合规

      - rule_id: GW-T-002
        name: 标题不可有"请求"+"请示"重复
        severity: error
        category: 标题
        target: title
        on_missing: skip
        stages:
          - check: regex_forbid
            pattern: '关于请求.*的请示'
        messages:
          pass: ok
          fail: '"请示"已包含"请求"之意，应删去"请求"'

      - rule_id: GW-T-003
        name: 标题不可有"上报"+"报告"重复
        severity: error
        category: 标题
        target: title
        on_missing: skip
        stages:
          - check: regex_forbid
            pattern: '关于上报.*的报告'
        messages:
          pass: ok
          fail: '"报告"已包含"上报"之意，应删去"上报"'

      - rule_id: GW-T-004
        name: 标题介词连用
        severity: warning
        category: 标题
        target: title
        on_missing: skip
        stages:
          - check: regex_forbid
            pattern: '关于对.*的(批复|通知|通报)'
        messages:
          pass: ok
          fail: '"关于"+"对" 介词连用不规范'

      - rule_id: GW-T-005
        name: 标题文种白名单
        severity: error
        category: 文种
        target: wenzhong
        on_missing: skip
        stages:
          - check: wenzhong_whitelist
        messages:
          pass: 文种合规
          fail: 非法定文种（出现"工作情况""汇报""方案""办法"等当文种）

      - rule_id: GW-T-006
        name: 标题回行词意完整
        severity: warning
        category: 标题
        target: title
        on_missing: skip
        stages:
          - check: ai
            prompt: |
              只在标题里**明确出现破词**时才报错。
              破词示例：「广东省烟草专卖局关于xx的通知」如果在"专"和"卖"之间有换行 → fail
              其它情况（单行标题、合理换行点、词意完整）→ **必须 pass**

              判断准则：
              - 标题已经是单行字符串，没有明显断点 → pass
              - 不要凭直觉揣测，只判断是否能在原文中**逐字定位**破词位置
              - 找不到具体破词位置就 pass

              标题原文：
              {{title.text}}
        messages:
          pass: 标题回行合规
          fail: 标题回行破词

  - group: 发文字号（错误汇编 三、六.3）
    rules:
      - rule_id: GW-N-001
        name: 发文字号必须用六角括号
        severity: error
        category: 发文
        target: doc_number
        on_missing: fail
        stages:
          - check: forbid_chars
            chars: ["[", "]"]
        messages:
          pass: ok
          fail: 发文字号年份应用六角括号「〔〕」，不得使用方括号

      - rule_id: GW-N-002
        name: 发文字号不可加"第"字
        severity: error
        category: 发文
        target: doc_number
        on_missing: fail
        stages:
          - check: regex_forbid
            pattern: '〔\d{4}〕第\d+号'
        messages:
          pass: ok
          fail: 发文字号顺序号前不应加"第"字

      - rule_id: GW-N-003
        name: 发文字号顺序号不编虚位
        severity: error
        category: 发文
        target: doc_number
        on_missing: fail
        stages:
          - check: regex_forbid
            pattern: '〔\d{4}〕0\d+号'
        messages:
          pass: ok
          fail: 发文字号顺序号不编虚位（如"02号"应为"2号"）

  - group: 格式（错误汇编 二）
    rules:
      - rule_id: GW-F-001
        name: 主标题用方正小标宋简体二号
        severity: error
        category: 格式
        target: title
        on_missing: fail
        stages:
          - check: font
            expect:
              eastasia: 方正小标宋简体
              size_pt: 22
        messages:
          pass: ok
          fail: 主标题应使用方正小标宋简体二号

      - rule_id: GW-F-002
        name: 一级标题用黑体三号
        severity: error
        category: 格式
        applies_to:
          role: heading_1
        on_missing: skip
        stages:
          - check: font
            expect:
              eastasia: 黑体
              size_pt: 16
        messages:
          pass: ok
          fail: 一级标题应使用黑体三号

      - rule_id: GW-F-003
        name: 二级标题用楷体三号
        severity: error
        category: 格式
        applies_to:
          role: heading_2
        on_missing: skip
        stages:
          - check: font
            expect:
              eastasia: 楷体
              size_pt: 16
        messages:
          pass: ok
          fail: 二级标题应使用楷体三号

      - rule_id: GW-F-004
        name: 正文用仿宋三号
        severity: warning
        category: 格式
        applies_to:
          role: body
        on_missing: skip
        stages:
          - check: font
            expect:
              eastasia: 仿宋
              size_pt: 16
        messages:
          pass: ok
          fail: 正文应使用仿宋（GB2312）三号

      - rule_id: GW-F-005
        name: 附件后不加冒号
        severity: error
        category: 格式
        applies_to:
          role: attachment_marker
        on_missing: skip
        stages:
          - check: regex_forbid
            pattern: '^附件\d+：'
        messages:
          pass: ok
          fail: '"附件1"等字样后不应加冒号'

      - rule_id: GW-F-006
        name: 不使用"（此页无正文）"
        severity: warning
        category: 格式
        applies_to:
          role: any
        on_missing: skip
        stages:
          - check: forbid_phrase
            phrases:
              - （此页无正文）
              - (此页无正文)
        messages:
          pass: ok
          fail: 应通过编辑排版避免出现"（此页无正文）"

      - rule_id: GW-F-007
        name: 附件项末尾不加标点
        severity: warning
        category: 格式
        applies_to:
          role: any
        on_missing: skip
        stages:
          - check: cross_role
            rules:
              - type: attachment_item_no_trailing_punct
        messages:
          pass: ok
          fail: 附件名称（内容）后不应使用标点符号

      - rule_id: GW-F-008
        name: 三级标题用仿宋三号
        severity: warning
        category: 格式
        applies_to:
          role: heading_3
        on_missing: skip
        stages:
          - check: font
            expect:
              eastasia: 仿宋
              size_pt: 16
        messages:
          pass: ok
          fail: 三级标题应使用仿宋（GB2312）三号

      - rule_id: GW-F-009
        name: 四级标题用仿宋三号
        severity: warning
        category: 格式
        applies_to:
          role: heading_4
        on_missing: skip
        stages:
          - check: font
            expect:
              eastasia: 仿宋
              size_pt: 16
        messages:
          pass: ok
          fail: 四级标题应使用仿宋（GB2312）三号

      - rule_id: GW-F-010
        name: 附件标记用黑体三号不加粗
        severity: error
        category: 格式
        applies_to:
          role: attachment_marker
        on_missing: skip
        stages:
          - check: attachment_marker_style
            expect:
              eastasia: 黑体
              size_pt: 16
              bold: false
        messages:
          pass: ok
          fail: '"附件："或"附件1"等标记应使用黑体三号，且不加粗'

  - group: 层级序号（错误汇编 四）
    rules:
      - rule_id: GW-H-001
        name: 层级序号格式
        severity: error
        category: 层级
        applies_to:
          role: any
        on_missing: skip
        stages:
          - check: hierarchy
            forbid_patterns:
              - '^[一二三四五六七八九十]+、.*[、。]$'
              - '^\d+、'
              - '^（[一二三四五六七八九十]+）、'
        messages:
          pass: ok
          fail: 层级序号格式错误

      - rule_id: GW-H-002
        name: 二级标题换行不带句号
        severity: warning
        category: 层级
        applies_to:
          role: heading_2
        on_missing: skip
        stages:
          - check: cross_role
            rules:
              - type: h2_no_period_then_break
        messages:
          pass: ok
          fail: 二级标题在换行分段时不应使用句号

  - group: 标点符号（错误汇编 六）
    rules:
      - rule_id: GW-P-001
        name: 多书名号/引号并列不加顿号
        severity: warning
        category: 标点
        applies_to:
          role: any
        on_missing: skip
        stages:
          - check: punctuation
            rules:
              - type: no_dunhao_between_quotes
        messages:
          pass: ok
          fail: 多个书名号/引号并列时不应用顿号分隔

      - rule_id: GW-P-002
        name: 句内括号末尾不加标点
        severity: warning
        category: 标点
        applies_to:
          role: any
        on_missing: skip
        stages:
          - check: punctuation
            rules:
              - type: no_punct_inside_inline_paren
        messages:
          pass: ok
          fail: 句内括号行文末尾通常不应含标点

      - rule_id: GW-P-003
        name: 引号嵌套不规范
        severity: warning
        category: 标点
        applies_to:
          role: any
        on_missing: skip
        stages:
          - check: punctuation
            rules:
              - type: no_outer_quote_when_inner_quote
        messages:
          pass: ok
          fail: 双引号内已含单引号强调时，外层不应再加双引号（如"卓'粤'创一流"应为 卓"粤"创一流）

  - group: 文字表述与提法（错误汇编 七、八、九）
    rules:
      - rule_id: GW-W-001
        name: 易混淆词使用
        severity: warning
        category: 文字
        applies_to:
          role: any
        on_missing: skip
        stages:
          - check: confused_pair
            pairs:
              - wrong: 截至到
                correct: 截止到
                reason: '"截至" 已含"到"之意'
              - wrong: 下称
                correct: 以下简称
                reason: 标注简称应用"以下简称"
              - wrong_pattern: '截止\d{4}年'
                suggest: 截至YYYY年
                reason: 用于到某时点应为"截至"
        messages:
          pass: ok
          fail: 易混淆词使用不当

      - rule_id: GW-W-002
        name: 简称使用规范
        severity: warning
        category: 简称
        applies_to:
          role: body
        on_missing: skip
        stages:
          - check: ai
            prompt: |
              只在文中出现以下两种省级职务简称错误时才报错，否则一律 pass：
              - "X省省委书记" 错误（应为 "X省委书记"，省字不重复）
              - "X省长" 错误（应为 "X省省长"，省字不可省略）

              若文中没有"省委书记"或"省长"等省级职务字样，**必须 pass**。
              若不能在文中找到准确的错误原文，**必须 pass**。
              不要做语气、措辞、其它简称的检查。

              全文片段：
              {{paragraphs[0]}}
        messages:
          pass: 简称规范
          fail: 简称使用不规范

      - rule_id: GW-W-003
        name: 成文日期用阿拉伯数字
        severity: error
        category: 提法
        target: date
        on_missing: fail
        stages:
          - check: regex_forbid
            pattern: '[一二三四五六七八九十○〇零]+年'
        messages:
          pass: ok
          fail: 成文日期应使用阿拉伯数字（如"2023年10月9日"）

      - rule_id: GW-W-004
        name: 成文日期不编虚位
        severity: warning
        category: 提法
        target: date
        on_missing: fail
        stages:
          - check: regex_forbid
            pattern: '\d{4}年0\d月|\d{4}年\d{1,2}月0\d日'
        messages:
          pass: ok
          fail: 成文日期月、日不编虚位

  - group: 发文机关（错误汇编 十）
    rules:
      - rule_id: GW-S-001
        name: 发文机关署名不能用简称
        severity: error
        category: 机关
        target: signature
        on_missing: fail
        stages:
          - check: ai
            prompt: |
              判断署名是否含**明确的简称错误**。
              典型错误：
              - "广东省烟草专卖局（公司）" — 用括号缩短两个机关 → 错
              - "省局" / "粤烟" 等单独缩写 → 错
              典型正确：
              - "广东省烟草专卖局" 单独出现 → pass（即使可能存在配套总公司，但单独存在不算简称）
              - "广东省烟草专卖局   中国烟草总公司广东省公司" → pass

              判断准则：
              - 若署名是一个完整、官方、可独立成立的机关名 → **必须 pass**
              - 若署名带"（公司）"、"省局"、明显缩写、行业内部代号 → fail

              署名原文：
              {{signature.text}}
        messages:
          pass: 署名规范
          fail: 发文机关署名使用了简称

      - rule_id: GW-S-002
        name: 发文机关确定严谨性
        severity: warning
        category: 机关
        target: signature
        on_missing: fail
        stages:
          - check: ai
            prompt: |
              只判断**这一个明确条件**：
              - 标题或正文里明确涉及"党组""党的xx工作""组织部""纪委"等党务事项，
                但署名是行政机关（局/公司/委员会等），未署"党组"或党务机构 → fail
              - 其它情况（行政事务、缺乏证据、性质模糊）→ **必须 pass**

              判断时需要看到**明确的党务关键词**（党组/党委/党的xx会议/党风/反腐倡廉等），
              没有这些关键词就 pass。

              署名原文：{{signature.text}}
              标题：{{title.text}}
        messages:
          pass: 发文机关一致
          fail: 发文机关与文稿性质不一致

  - group: 标题字体（target 通道示例）
    rules:
      - rule_id: GW-T-008
        name: 标题字体（语义实体通道）
        severity: warning
        category: 标题
        target: title
        on_missing: warn
        stages:
          - check: ai
            prompt: |
              判断公文标题的字体与字号是否合规。
              要求：字体 = 方正小标宋简体；字号 = 22pt（或 22.0）。

              实际：
              - 标题：{{title.text}}
              - 字体：{{title.style.font_eastasia}}
              - 字号：{{title.style.font_size_pt}}pt

              若实际字体为空或与要求一致 → pass
              若字体明显不符（例如 仿宋/楷体/黑体）→ fail
              若仅字号轻微差异 → warn
        messages:
          pass: 标题字体字号合规
          fail: 标题字体或字号不符合 GB/T 9704
