feat: add tenant-scoped rule and permission management

This commit is contained in:
wren
2026-05-21 22:03:08 +08:00
parent a2c2bf1969
commit 1f1bccf3b3
193 changed files with 64463 additions and 1771 deletions
@@ -0,0 +1,760 @@
metadata:
type_id: govdoc.general
name: 通用公文格式规则
version: '0.1'
last_updated: '2026-05-09'
parent: govdoc
classification_keywords:
- 公文
- 内部公文
- 通知
- 报告
- 请示
- 批复
-
- 纪要
description: 基于错误汇编 10 大类拆解的规则集;来源:公文文稿常见错误汇编(第一期)·2025-11
extract: []
rules:
- group: 标题(错误汇编 一)
rules:
- rule_id: GW-T-001
name: 标题文种合规性
risk: high
score: 10
stages:
- check: ai
prompt: |
审查公文标题是否符合规范。
标题:{{title.text}}
15 种合法文种:决议、决定、命令(令)、公报、公告、通告、意见、
通知、通报、报告、请示、批复、议案、函、纪要
检查要点:
1. 是否使用了合法文种
2. 方案/规划/办法/细则等是否以"通知"形式下发(应为"关于印发〈xxx〉的通知"
3. 标题中是否有"印发"等动词
messages:
pass: 标题文种合规
fail: 标题文种不合规
- rule_id: GW-T-002
name: 标题不可有"请求"+"请示"重复
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“标题不可有"请求"+"请示"重复”判断当前材料是否通过。
原始检查类型:regex_forbid
评查对象:title
规则分类:标题
原始检查参数:
pattern: 关于请求.*的请示
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: '"请示"已包含"请求"之意,应删去"请求"'
messages:
pass: ok
fail: '"请示"已包含"请求"之意,应删去"请求"'
- rule_id: GW-T-003
name: 标题不可有"上报"+"报告"重复
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“标题不可有"上报"+"报告"重复”判断当前材料是否通过。
原始检查类型:regex_forbid
评查对象:title
规则分类:标题
原始检查参数:
pattern: 关于上报.*的报告
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: '"报告"已包含"上报"之意,应删去"上报"'
messages:
pass: ok
fail: '"报告"已包含"上报"之意,应删去"上报"'
- rule_id: GW-T-004
name: 标题介词连用
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“标题介词连用”判断当前材料是否通过。
原始检查类型:regex_forbid
评查对象:title
规则分类:标题
原始检查参数:
pattern: 关于对.*的(批复|通知|通报)
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: '"关于"+"对" 介词连用不规范'
messages:
pass: ok
fail: '"关于"+"对" 介词连用不规范'
- rule_id: GW-T-005
name: 标题文种白名单
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“标题文种白名单”判断当前材料是否通过。
原始检查类型:wenzhong_whitelist
评查对象:title
规则分类:文种
原始检查参数:
无额外参数
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: 文种合规
fail: 非法定文种(出现"工作情况""汇报""方案""办法"等当文种)
messages:
pass: 文种合规
fail: 非法定文种(出现"工作情况""汇报""方案""办法"等当文种)
- rule_id: GW-T-006
name: 标题回行词意完整
risk: medium
score: 5
stages:
- check: ai
prompt: |
只在标题里**明确出现破词**时才报错。
破词示例:「广东省烟草专卖局关于xx的通知」如果在"专"和"卖"之间有换行 → fail
其它情况(单行标题、合理换行点、词意完整)→ **必须 pass**
判断准则:
- 标题已经是单行字符串,没有明显断点 → pass
- 不要凭直觉揣测,只判断是否能在原文中**逐字定位**破词位置
- 找不到具体破词位置就 pass
标题原文:
{{title.text}}
messages:
pass: 标题回行合规
fail: 标题回行破词
- group: 发文字号(错误汇编 三、六.3
rules:
- rule_id: GW-N-000
name: 发文字号必须标注
risk: high
score: 10
stages:
- check: required
messages:
pass: ok
fail: 公文应标注发文字号
- rule_id: GW-N-001
name: 发文字号必须用六角括号
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“发文字号必须用六角括号”判断当前材料是否通过。
原始检查类型:forbid_chars
评查对象:doc_number
规则分类:发文
缺失提示:发文字号缺失,无法检查该项
原始检查参数:
chars:
- "["
- "]"
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 发文字号年份应用六角括号「〔〕」,不得使用方括号
messages:
pass: ok
fail: 发文字号年份应用六角括号「〔〕」,不得使用方括号
- rule_id: GW-N-002
name: 发文字号不可加"第"字
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“发文字号不可加"第"字”判断当前材料是否通过。
原始检查类型:regex_forbid
评查对象:doc_number
规则分类:发文
缺失提示:发文字号缺失,无法检查该项
原始检查参数:
pattern: \d{4}〕第\d+号
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 发文字号顺序号前不应加"第"字
messages:
pass: ok
fail: 发文字号顺序号前不应加"第"字
- rule_id: GW-N-003
name: 发文字号顺序号不编虚位
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“发文字号顺序号不编虚位”判断当前材料是否通过。
原始检查类型:regex_forbid
评查对象:doc_number
规则分类:发文
缺失提示:发文字号缺失,无法检查该项
原始检查参数:
pattern: \d{4}0\d+号
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 发文字号顺序号不编虚位(如"02号"应为"2号"
messages:
pass: ok
fail: 发文字号顺序号不编虚位(如"02号"应为"2号"
- group: 格式(错误汇编 二)
rules:
- rule_id: GW-F-001
name: 主标题用方正小标宋简体二号
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“主标题用方正小标宋简体二号”判断当前材料是否通过。
原始检查类型:font
评查对象:title
规则分类:格式
原始检查参数:
expect:
eastasia: 方正小标宋简体
size_pt: 22
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 主标题应使用方正小标宋简体二号
messages:
pass: ok
fail: 主标题应使用方正小标宋简体二号
- rule_id: GW-F-002
name: 一级标题用黑体三号
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“一级标题用黑体三号”判断当前材料是否通过。
原始检查类型:font
评查对象:适用范围 {"role":"heading_1"}
规则分类:格式
原始检查参数:
expect:
eastasia: 黑体
size_pt: 16
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 一级标题应使用黑体三号
messages:
pass: ok
fail: 一级标题应使用黑体三号
- rule_id: GW-F-003
name: 二级标题用楷体三号
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“二级标题用楷体三号”判断当前材料是否通过。
原始检查类型:font
评查对象:适用范围 {"role":"heading_2"}
规则分类:格式
原始检查参数:
expect:
eastasia: 楷体
size_pt: 16
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 二级标题应使用楷体三号
messages:
pass: ok
fail: 二级标题应使用楷体三号
- rule_id: GW-F-004
name: 正文用仿宋三号
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“正文用仿宋三号”判断当前材料是否通过。
原始检查类型:font
评查对象:适用范围 {"role":"body"}
规则分类:格式
原始检查参数:
expect:
eastasia: 仿宋
size_pt: 16
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 正文应使用仿宋(GB2312)三号
messages:
pass: ok
fail: 正文应使用仿宋(GB2312)三号
- rule_id: GW-F-005
name: 附件后不加冒号
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“附件后不加冒号”判断当前材料是否通过。
原始检查类型:regex_forbid
评查对象:适用范围 {"role":"attachment_marker"}
规则分类:格式
原始检查参数:
pattern: ^附件\d+
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: '"附件1"等字样后不应加冒号'
messages:
pass: ok
fail: '"附件1"等字样后不应加冒号'
- rule_id: GW-F-006
name: 不使用"(此页无正文)"
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“不使用"(此页无正文)"”判断当前材料是否通过。
原始检查类型:forbid_phrase
评查对象:适用范围 {"role":"any"}
规则分类:格式
原始检查参数:
phrases:
- (此页无正文)
- (此页无正文)
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 应通过编辑排版避免出现"(此页无正文)"
messages:
pass: ok
fail: 应通过编辑排版避免出现"(此页无正文)"
- rule_id: GW-F-007
name: 附件项末尾不加标点
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“附件项末尾不加标点”判断当前材料是否通过。
原始检查类型:cross_role
评查对象:适用范围 {"role":"any"}
规则分类:格式
原始检查参数:
rules:
- type: attachment_item_no_trailing_punct
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 附件名称(内容)后不应使用标点符号
messages:
pass: ok
fail: 附件名称(内容)后不应使用标点符号
- rule_id: GW-F-008
name: 三级标题用仿宋三号
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“三级标题用仿宋三号”判断当前材料是否通过。
原始检查类型:font
评查对象:适用范围 {"role":"heading_3"}
规则分类:格式
原始检查参数:
expect:
eastasia: 仿宋
size_pt: 16
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 三级标题应使用仿宋(GB2312)三号
messages:
pass: ok
fail: 三级标题应使用仿宋(GB2312)三号
- rule_id: GW-F-009
name: 四级标题用仿宋三号
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“四级标题用仿宋三号”判断当前材料是否通过。
原始检查类型:font
评查对象:适用范围 {"role":"heading_4"}
规则分类:格式
原始检查参数:
expect:
eastasia: 仿宋
size_pt: 16
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 四级标题应使用仿宋(GB2312)三号
messages:
pass: ok
fail: 四级标题应使用仿宋(GB2312)三号
- rule_id: GW-F-010
name: 附件标记用黑体三号不加粗
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“附件标记用黑体三号不加粗”判断当前材料是否通过。
原始检查类型:attachment_marker_style
评查对象:适用范围 {"role":"attachment_marker"}
规则分类:格式
原始检查参数:
expect:
eastasia: 黑体
size_pt: 16
bold: false
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: '"附件:"或"附件1"等标记应使用黑体三号,且不加粗'
messages:
pass: ok
fail: '"附件:"或"附件1"等标记应使用黑体三号,且不加粗'
- group: 层级序号(错误汇编 四)
rules:
- rule_id: GW-H-001
name: 层级序号格式
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“层级序号格式”判断当前材料是否通过。
原始检查类型:hierarchy
评查对象:适用范围 {"role":"any"}
规则分类:层级
原始检查参数:
forbid_patterns:
- ^[一二三四五六七八九十]+、.*[、。]$
- ^\d+、
- ^([一二三四五六七八九十]+)、
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 层级序号格式错误
messages:
pass: ok
fail: 层级序号格式错误
- rule_id: GW-H-002
name: 二级标题换行不带句号
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“二级标题换行不带句号”判断当前材料是否通过。
原始检查类型:cross_role
评查对象:适用范围 {"role":"heading_2"}
规则分类:层级
原始检查参数:
rules:
- type: h2_no_period_then_break
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 二级标题在换行分段时不应使用句号
messages:
pass: ok
fail: 二级标题在换行分段时不应使用句号
- group: 标点符号(错误汇编 六)
rules:
- rule_id: GW-P-001
name: 多书名号/引号并列不加顿号
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“多书名号/引号并列不加顿号”判断当前材料是否通过。
原始检查类型:punctuation
评查对象:适用范围 {"role":"any"}
规则分类:标点
原始检查参数:
rules:
- type: no_dunhao_between_quotes
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 多个书名号/引号并列时不应用顿号分隔
messages:
pass: ok
fail: 多个书名号/引号并列时不应用顿号分隔
- rule_id: GW-P-002
name: 句内括号末尾不加标点
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“句内括号末尾不加标点”判断当前材料是否通过。
原始检查类型:punctuation
评查对象:适用范围 {"role":"any"}
规则分类:标点
原始检查参数:
rules:
- type: no_punct_inside_inline_paren
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 句内括号行文末尾通常不应含标点
messages:
pass: ok
fail: 句内括号行文末尾通常不应含标点
- rule_id: GW-P-003
name: 引号嵌套不规范
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“引号嵌套不规范”判断当前材料是否通过。
原始检查类型:punctuation
评查对象:适用范围 {"role":"any"}
规则分类:标点
原始检查参数:
rules:
- type: no_outer_quote_when_inner_quote
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 双引号内已含单引号强调时,外层不应再加双引号(如"卓'粤'创一流"应为 卓"粤"创一流)
messages:
pass: ok
fail: 双引号内已含单引号强调时,外层不应再加双引号(如"卓'粤'创一流"应为 卓"粤"创一流)
- group: 文字表述与提法(错误汇编 七、八、九)
rules:
- rule_id: GW-W-001
name: 易混淆词使用
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“易混淆词使用”判断当前材料是否通过。
原始检查类型:confused_pair
评查对象:适用范围 {"role":"any"}
规则分类:文字
原始检查参数:
pairs:
- wrong: 截至到
correct: 截止到
reason: '"截至" 已含"到"之意'
- wrong: 下称
correct: 以下简称
reason: 标注简称应用"以下简称"
- wrong_pattern: 截止\d{4}年
suggest: 截至YYYY年
reason: 用于到某时点应为"截至"
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 易混淆词使用不当
messages:
pass: ok
fail: 易混淆词使用不当
- rule_id: GW-W-002
name: 简称使用规范
risk: medium
score: 5
stages:
- check: ai
prompt: |
只在文中出现以下两种省级职务简称错误时才报错,否则一律 pass:
- "X省省委书记" 错误(应为 "X省委书记",省字不重复)
- "X省长" 错误(应为 "X省省长",省字不可省略)
若文中没有"省委书记"或"省长"等省级职务字样,**必须 pass**。
若不能在文中找到准确的错误原文,**必须 pass**。
不要做语气、措辞、其它简称的检查。
全文片段:
{{paragraphs}}
messages:
pass: 简称规范
fail: 简称使用不规范
- rule_id: GW-W-003
name: 成文日期用阿拉伯数字
risk: high
score: 10
stages:
- check: ai
prompt: |-
请根据公文评查规则“成文日期用阿拉伯数字”判断当前材料是否通过。
原始检查类型:regex_forbid
评查对象:date
规则分类:提法
原始检查参数:
pattern: "[一二三四五六七八九十○〇零]+年"
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 成文日期应使用阿拉伯数字(如"2023年10月9日"
messages:
pass: ok
fail: 成文日期应使用阿拉伯数字(如"2023年10月9日"
- rule_id: GW-W-004
name: 成文日期不编虚位
risk: medium
score: 5
stages:
- check: ai
prompt: |-
请根据公文评查规则“成文日期不编虚位”判断当前材料是否通过。
原始检查类型:regex_forbid
评查对象:date
规则分类:提法
原始检查参数:
pattern: \d{4}年0\d月|\d{4}年\d{1,2}月0\d日
输出要求:
- 符合规则时返回 pass。
- 不符合规则时返回 fail,并说明具体原因。
- 无法定位评查对象且缺失策略不是 fail 时,按不适用或通过处理。
规则消息:
pass: ok
fail: 成文日期月、日不编虚位
messages:
pass: ok
fail: 成文日期月、日不编虚位
- group: 发文机关(错误汇编 十)
rules:
- rule_id: GW-S-001
name: 发文机关署名不能用简称
risk: high
score: 10
stages:
- check: ai
prompt: |
判断署名是否含**明确的简称错误**。
典型错误:
- "广东省烟草专卖局(公司)" — 用括号缩短两个机关 → 错
- "省局" / "粤烟" 等单独缩写 → 错
典型正确:
- "广东省烟草专卖局" 单独出现 → pass(即使可能存在配套总公司,但单独存在不算简称)
- "广东省烟草专卖局 中国烟草总公司广东省公司" → pass
判断准则:
- 若署名是一个完整、官方、可独立成立的机关名 → **必须 pass**
- 若署名带"(公司)"、"省局"、明显缩写、行业内部代号 → fail
署名原文:
{{signature.text}}
messages:
pass: 署名规范
fail: 发文机关署名使用了简称
- rule_id: GW-S-002
name: 发文机关确定严谨性
risk: medium
score: 5
stages:
- check: ai
prompt: |
只判断**这一个明确条件**:
- 标题或正文里明确涉及"党组""党的xx工作""组织部""纪委"等党务事项,
但署名是行政机关(局/公司/委员会等),未署"党组"或党务机构 → fail
- 其它情况(行政事务、缺乏证据、性质模糊)→ **必须 pass**
判断时需要看到**明确的党务关键词**(党组/党委/党的xx会议/党风/反腐倡廉等),
没有这些关键词就 pass。
署名原文:{{signature.text}}
标题:{{title.text}}
messages:
pass: 发文机关一致
fail: 发文机关与文稿性质不一致