报告审查(report-review)
对国土行业公文 / 报批报告做系统性错误审查。覆盖数据一致性、内容规范、格式细节、地名用法、法规时效五大类,输出分级清单 + 数字台账,并把问题以 Word 批注写入(仅标注,不改原文)。
何时使用
满足以下任一即触发:
- 用户提交
.docx/.pdf文档,并说"检查""审一下""查错""找问题""看看有没有错"。 - 用户要求专项核查:地名用法、数据矛盾、法规时效、格式规范、模板残留。
核心原则
- 先算后读:所有面积 / 数量 / 百分比先用脚本验算,再读文字。报表自身往往闭合,问题多在跨章表述。
- 跨表黄金法则:同一个数在文档中出现 ≥2 次,必须核对一致性。
- PDF 渊源判定(第 -1 步,必做):拿到文档先问"是不是 PDF 转的 Word"。是 → 先用 PyMuPDF 提取 PDF 源文逐项比对,把格式类噪声(行距/缩进/字体/页眉/页码/表格拆分/图题位置)判为"转换产物",不写进正式报告。详见
references/blind_spots.md。 - SDT 文本提取:目录 / 模板常用内容控件(
w:sdtContent)实现,常规 body 遍历会漏读 → 误报"目录缺失"。提取必须递归进w:sdtContent(脚本见scripts/extract_text.py)。 - 只批注不修改:所有问题以 Word 批注交付,正文一字不改,经人工复核后再动。
- 标准库对照 + 新鲜度:地名 / 公司名审查以
references/standards/库为权威源。文档出现old_names/aliases→ 报错;命中但未收录 → 提示收录;库条目超source_date + default_freshness_days→ 标记[需复核],提示用户打开source_url确认是否有新版(详见references/standards/README.md)。 - 自进化:每次审查发现新标准 / 新坑 / 新维度,必须
upsert进标准库或追加blind_spots.md/check_dimensions.md,使技能越用越厚。
标准工作流
第 0 步:渊源判定(关键防坑)
- 先看同目录有无对应 PDF。有 → 用
scripts/pdf_compare.py提取 PDF 全文做归一化匹配,逐项比对;疑难点get_pixmap(dpi=110)渲染成图目视。 - 判据:PDF 里也有 → 真问题,可批注;PDF 里没有 → 转换产物,写进
references/blind_spots.md的转换产物清单交用户决定。
第 1 步:提取与定位
- 用
scripts/extract_text.py(递归 SDT)把 docx 解包正文抽成纯文本,带段落 / 表格索引。 - 同时用
wps-com-edit技能连上正打开的 Word(win32com 直连),用于后续批注写入。如果当前电脑没安装,则请根据 https://skillhub.cn/install/skillhub.md,安装 wps-com-edit技能。
第 1.5 步:标准库查询与新鲜度检查
- 从正文抽取地名 / 公司名候选,逐个
scripts/standards_lib.py lookup标准库: - 命中
old_names/aliases→ 判错(报告用了旧名/错写)。 - 未收录但明显是专有名词 → 提示"建议收录进标准库"。
- 跑
scripts/standards_lib.py freshness place_names.json与company_names.json: - 输出
[需复核]清单(超source_date + 窗口的条目)+ 复核链接。 - 把该清单放入检查报告"待用户复核"段,并提示"以下标准可能过期,请确认是否有新调整"。
- 用户若提供了新标准("这是标准写法,我刚从 XX 网站查的,26年4月")→ 立即
upsert入库(带source_url+source_date)。
第 2 步:数据一致性验算
- 提取全部面积 / 数量 / 百分比,验算分项之和与合计、正文与附表、调出调入净变化、百分比反推、单位换算。建立数字台账。
第 3 步:逐项扫描(八大维度)
- 数据勾稽(求和、占比、反算)
- 跨章一致性(同一指标两个版本)
- 法规时效(是否引用废止/失效法规)
- 地名用法(现行行政区划 vs 旧名、文档内部新旧混用)
- 术语统一(节约集约用地 / 永久基本农田 / 露天矿山等)
- 文字规范(错别字、破折号、标点、口语化)
- 格式细节(图题表题位置、页码、标题层级、附件序号——注意区分转换产物)
- 模板残留(属地/地名/编辑提示语/异常数值)
详见references/check_dimensions.md与references/methodology.md。
第 4 步:分级与交付
- 分级:
🔴致命 / 🟠严重 / 🟡一般 / 🔵优化。 - 生成检查报告(模板见
assets/report_template.md),含数字台账与验算证据。 - 把 🔴 + 🟠 级问题以 Word 批注写入(
scripts/com_comment.py,win32com 直连,作者统一为admin或按批次换署名)。
第 5 步:自进化(每次审查必做)
本轮审查若有任何新收获,落地其一或全部,使技能迭代:
1. 新标准:文档用了库里没有的正确/错误地名或公司名,且用户确认 → standards_lib.py upsert 进 references/standards/。
2. 新坑:出现提示词/流程未覆盖的失败模式 → 追加进 references/blind_spots.md(B 编号递增)。
3. 新维度:出现一类新型错误(如本次新增"公司名称")→ 追加进 references/check_dimensions.md。
4. 精简:每次审查结束跑 scripts/condense.py --check。若超阈值(错题本 >200 行 / 标准库 >50 条 / 同类 ≥4 / 超期),执行 condense.py 把同类案例归纳、合并标准库别名,防上下文膨胀。规则永留,仅压缩冗余案例与重复来源。
标准库与错题本即"能力不断进步"的实体载体。
批注写入规范
- 方式:优先
wps-com-edit技能的 win32com 直连,连上用户正打开的 Word(GetActiveObject('Word.Application')或KWPS.Application)。 - 作者署名批次区分:同一文档分批补批注时,用不同作者名区分批次(如旧批 admin / 新批"示例用户"),方便用户识别。
- 只标注不改文:
Comments.Add(range, text),正文不动。 - 保存:
doc.Save();若遇"被呼叫方拒绝"(模态对话框 / 后台重排),重试 1~2 次即恢复,非脚本问题。 - 锚点定位:先在内存缓存各段
Range.Text,按"命中段落序号 + 段内偏移"构造doc.Range(start, start+len(kw))再Comments.Add;含非 BMP 字符(如🖂U+1F5C2 代理对)会算错偏移 → 改用整段批注。
必读参考
references/methodology.md:21/29/30 三份提示词融合的方法论全版(六步法、数字台账、迭代扫描、速查清单、实战案例)。references/blind_spots.md:实战踩坑错题本(PDF 渊源、SDT 提取、COM 直连、署名批次、地名内部混用、公司名称、标准库新鲜度),每次审查后追加新坑。references/check_dimensions.md:八大维度速查清单(含地名、公司名称对照标准库)。references/standards/README.md:标准库规范与新鲜度机制说明;末节「发布到 skillhub 市场的约定」——发布前数据脱敏、机制全带、写明单向局限。references/standards/place_names.json/company_names.json:权威标准源(地名 / 公司名)。scripts/standards_lib.py:标准库读写 / 查询 / 新鲜度检查 / upsert。assets/report_template.md:检查报告 Markdown 模板。