Back to skills
extension
Category: OtherNo API key required

文档一致性校对助手

此技能用于自动校对报告、文档中的上下文不一致错误,包括实体矛盾、术语不统一、数据冲突、逻辑时序异常,并提供版本备份和一键修正功能。支持全文或指定章节/页码(多范围)提取校对。当用户说"帮我校对这份报告"、"检查文档前后是否一致"、"找出报告里的低级错误"、"文档一致性检查"时,应使用此技能。

personAuthor: user_7180264chubcommunity

文档一致性校对技能 v2.4.6

核心原则

简洁高效,让模型自主工作。问题分级输出,帮用户区分轻重缓急。


📌 工作流程

第一步:提取文档内容

⚠️ 【部分章节检查提示】

  • 如果用户只要求检查部分章节/页面,请先提醒用户:建议将该部分内容另存为新文档后再提交校对
  • 因为模型需要阅读整篇文档才能判断上下文一致性,单独检查部分章节的调用量与全文检查相近,效果不一定更好
  • 如果用户坚持只检查部分章节,可以只提取指定章节内容进行检查,但需在报告中说明"仅检查了指定章节,全文一致性未覆盖"

根据文件类型选择读取方式:

| 文件格式 | 工具 | 方法 | |---------|------|------| | .docx | python-docx | 提取段落和表格 | | .pdf | pymupdf + pdfplumber | 文本 + 表格双轨提取 | | .doc | win32com / 转换为 docx | COM 接口 | | .xlsx | openpyxl | 读取 Excel | | .txt/.md | 直接读取 | 纯文本 |

# DOCX 提取(推荐方式)
import sys, glob
sys.stdout.reconfigure(encoding='utf-8')
from docx import Document

files = glob.glob('path/*报告*.docx')
doc = Document(files[0])

paragraphs = []
for i, para in enumerate(doc.paragraphs):
    text = para.text.strip()
    if text:
        paragraphs.append({'index': i, 'text': text})

tables = []
for t_idx, table in enumerate(doc.tables):
    rows = [[cell.text.strip() for cell in row.cells] for row in table.rows]
    tables.append({'index': t_idx, 'rows': rows})

print(f'段落数: {len(paragraphs)}, 表格数: {len(tables)}')

第二步:模型自主分析

模型直接阅读文档内容,自主发现所有类型的不一致问题。

检查范围(全面覆盖)

A类:数据矛盾(严重)

  • 同一指标(面积、人口、工程量、投资额等)在不同章节出现不同数值
  • 分项数据与汇总数据加减不符(需验算,如800+500+200=1500但总计数为1400)
  • 百分比与对应绝对值不符
  • 资金分项自动求和校验:自动计算分项合计,与总投资/工程投资等总金额对比,发现偏差立即标注(P0)
  • 工程量单位统一校验:检测不同单位混用导致的汇总失败问题(P0)
  • 多年平均降雨量等核心数据前后不一致,直接判定为P0(影响报告可信度)

B类:逻辑异常(严重)

  • 规划目标与建设内容数量明显不符
  • 时序逻辑错误(如"2020年规划"出现在"2025年现状"章节)
  • 单位量级明显异常(如泵站流量远超总量)
  • 完工时间在总工期内(如总工期2024年5月—2025年12月,但完工时间写2024年12月,属于工期内但需核实"完成主体工程"是否等于"完工验收")
  • 完工时间超出总工期截止年份(如总工期2024-2025,但完工时间写2026年)→ P0
  • 验收时间超出计划工期(如总工期截止2025.12,但验收时间写2026.01)→ P0
  • 时序节点全链路检测:提取所有年份+月份+任务类型(设计/招标/开工/完工/验收/投产等),生成时间轴,校验"设计→招标→开工→完工→验收→投产"的前置后置关系:
    • 设计时间晚于开工时间 → P0
    • 开工时间晚于完工时间 → P0
    • 完工时间晚于验收时间 → P0
    • 完工时间超出总工期截止年份 → P0
    • 验收时间超出计划工期截止年份 → P0

C类:编号与结构问题(需核实) → 统一判定为P1

  • 目录编号与正文标题编号不一致(如目录6 vs 正文7)
  • 章节编号跳段(如直接跳到3.2节而缺失3.1节)
  • 章节标题与对应正文内容不符
  • 表格标题与表格内容不对应(如标题为"水库基本参数"但内容为"工程量统计")

D类:术语与格式问题(建议修正)

  • 同一概念使用不同术语(如"小型水库"/"小水库"/"小Ⅰ型水库"混用)
  • 同一概念使用不同称谓(如"总投资"/"投资估算"/"工程投资"混用)
  • 数字单位写法不统一(如"亩"/"万亩"混用、"m³"/"立方米"混用、"m"/"米"混用、"万元"/"元"混用)
  • 数字与文字之间空格不统一(如"100万元"vs"100 万元")
  • 标准引用缺书名号(如"SL 640-2013"应加《》书名号)
  • 标点符号使用不规范
  • 所有D类问题统一判定为P2

E类:规范引用问题(需核实/建议修正)

⚠️ 静态库提示standards_library.json 已内置 141条 常见水利规范数据(截止 2026-04-09),建议每季度手动更新一次。完整库(800+)访问:http://gjkj.mwr.gov.cn/jsjd1/bzcx/

核查分三步走:

第一步:从文档中提取规范编号

常见格式:

  • GB/T 50123-2019(国标推荐性)
  • GB 50201-2014(国标全文强制)
  • SL 252-2017(水利行业标准)
  • SL/T 618-2021(水利行业推荐标准)
  • GB 50487-2008(2022年版)(局部修订版)

第二步:查静态库(standards_library.json)

⚠️ 编号归一化:静态库的 key 格式为 GB/T 50363-2019/后有空格), 但文档引用常写为 GB/T50363-2018(无空格)。查表前需去掉空格归一化。

def normalize(std_id): return std_id.replace(' ', '').replace('\u3000', '')
lib_norm = {normalize(k): k for k in stds.keys()}

库中每条标准字段:

| 字段 | 说明 | |------|------| | status | 现行 / 已修订 / 废止 | | latest | 当前最新版本编号 | | replaced_by | 被哪个标准替代(已修订时) | | superseded | 本标准替代了哪些旧版 | | category | 国标/水利行业标准等 |

命中静态库 → 直接判定,输出结论

重要:E类需同时检查标准号和标准名称

  • 标准号检查:标准号是否存在、是否已废止、是否有更新版本
  • 标准名称检查:文档引用的标准名称是否与标准号匹配(防止"SL303-2017《错误名称》"这类错误)
  • E类分级标准(严格对齐,不降级不升级):
    • P0:已废止且有明确替代版本的标准(如SL303-2014→SL303-2017、SL166-2010→SL/T291.3-2025)
    • P1:未收录但可推断最新版本的标准(需标注"建议核实年份")
    • P1:标准名称与标准号不匹配(如"GB/T50662-2011名称错误")
    • P2:格式问题(缺书名号、HJ/T格式不规范、数字空格不统一等)
  • 建议输出完整引用:发现问题时同时输出新标准的完整引用(标准号 + 《标准名称》)
  • 例如:GB/T50363-2006 废止 → 建议改为 GB/T50363-2018《节水灌溉工程技术标准》
  • latest 字段已在静态库中记录此信息,审核时应直接使用。
  • 常见废止标准及替代版本(需熟记):
    • SL 303-2014 → 已废止,被 SL 303-2017 替代
    • SL 166-2010 → 已废止,被 SL/T 291.3-2025 替代(2025-09-29发布)
    • GB 50013-2006 → 已废止,应为 GB 50013-2018

第三步:规范核查(查库 + 未收录时联网入库)

⚠️ 【强制要求】E类检测必须执行! 每篇报告都要提取并核查所有规范引用,不得遗漏。

E类规范引用核查遵循以下流程:

① 查静态库

import re, json

# 库加载(归一化key)
lib = json.load(open('standards_library.json', encoding='utf-8'))
stds = lib['standards']

def norm_key(key):
    """库key归一化:去空格 + 全角→半角 + HJ/T数字→HJ数字"""
    key = key.replace(' ', '').replace('-', '-').replace('—', '-')
    return re.sub(r'^HJ/T(\d)', r'HJ\1', key)

# 归一化key → 原key 映射(同归一化key可能对应多个原key,取第一个)
lib_norm_map = {}
for k in stds:
    n = norm_key(k)
    if n not in lib_norm_map:
        lib_norm_map[n] = k

def clean_std(raw):
    """从文档原文提取标准号"""
    raw = raw.strip().rstrip('  )))):::。.,,')
    patterns = [
        (r'GB/T\s*(\d+(?:\.\d+)?[--]?\d*)', 'GB/T'),
        (r'GB\s*(\d+(?:\.\d+)?[--]?\d*)', 'GB'),
        (r'SL/T\s*(\d+(?:\.\d+)?[--]?\d*)', 'SL/T'),
        (r'SL/Z\s*(\d+(?:\.\d+)?[--]?\d*)', 'SL/Z'),
        (r'SL\s*(\d+(?:\.\d+)?[--]?\d*)', 'SL'),
        (r'HJ/T\s*(\d+(?:\.\d+)?[--]?\d*)', 'HJ/T'),
        (r'HJ\s*(\d+(?:\.\d+)?[--]?\d*)', 'HJ'),
        (r'DL\s*(\d+(?:\.\d+)?[--]?\d*)', 'DL'),
    ]
    for pat, prefix in patterns:
        m = re.match(pat, raw, re.I)
        if m:
            num = m.group(1).replace('-', '-').replace('—', '-').replace(' ', '')
            return prefix + num
    return None

def lookup(std_key):
    """
    查询标准状态。
    策略:
    1. 归一化精确匹配(HJ/T2.3-2018 → HJ2.3-2018)
    2. 原值精确匹配
    3. 前缀兜底(GB50201 → 找 GB50201-* 取最新年份)
    """
    n = norm_key(std_key)
    # ① 归一化匹配
    if n in lib_norm_map:
        return stds[lib_norm_map[n]], lib_norm_map[n]
    # ② 原值匹配
    if std_key in stds:
        return stds[std_key], std_key
    # ③ 前缀兜底(文档缺少年份时)
    has_year = bool(re.search(r'-\d{4}', std_key))
    if not has_year:
        matches = [(k, stds[k]) for k in stds if k.startswith(std_key)]
        if matches:
            def year_of(k):
                m = re.search(r'-(\d{4})', k)
                return int(m.group(1)) if m else 0
            matches.sort(key=lambda x: year_of(x[0]), reverse=True)
            best_key, best_val = matches[0]
            inferred = dict(best_val)
            inferred['_inferred'] = True
            return inferred, best_key
    return None, None

命中 → 直接判定(现行有效 / 已废止 / 已修订) 未命中(含前缀推断结果)→ 进入② 前缀推断结果标注 _inferred: True,输出时提示"建议核实年份"

② 未收录时询问用户

对所有未命中静态库的标准,汇总后一次性询问用户:

以下 N 个标准未收录于本地库,请确认是否联网核查现行状态?
• GB/T50625-2023 @[第3段]
• SL xxx-xxxx @[第7段]
• ...

是否联网核查?(Y/N)

③ 联网核查(用户同意后)

调用 web_search,逐条查询:

查询词:【标准号】+ 关键词 + 现行标准 / 最新版
示例:GB/T 50625-2023 规范名称 现行标准 最新版

根据搜索结果判断: | 搜索结果 | 判定 | |---------|------| | 全国标准信息公共服务平台 / 水利部 / 生态环境部有记录 | 现行有效 | | 明确标注"已废止""已被替代" | 已废止 | | 有更新版本号 | 已修订(含 latest 和 replaced_by)|

④ 自动入库

联网核查完成后,将结果追加写入静态库:

lib = json.load(open('standards_library.json', encoding='utf-8'))
stds = lib['standards']
stds['GB/T50625-2023'] = {
    'name': '规范名称',
    'status': '现行有效',   # 或 '已废止' / '已修订'
    'category': 'GB/T',
    '替代': '被替代的标准号(已修订时)',
}
lib['standards'] = stds
with open('standards_library.json', 'w', encoding='utf-8') as f:
    json.dump(lib, f, ensure_ascii=False, indent=2)

⚠️ 重要:入库后所有 key 必须归一化(去空格、--),以确保后续查询命中。

⑤ 格式规范检查

| 引用场景 | 正确格式 | 错误示例 | 级别 | |---------|---------|---------|------| | 中文规范名 | 《规范名称》GB/T XXXXX-XXXX | 仅写GB/T XXXXX无书名号 | P2 | | 中文规范名 | 《SL 640-2013》 | SL 640-2013 缺书名号 | P2 | | HJ/T格式 | HJ 2.3-2018(《环境空气质量标准》 HJ 2.3-2012) | HJ/T 2.3-2012(T应去掉) | P2 | | HJ/T保留 | HJ/T 88-2003(排放许可,不归一化) | 特殊标准号按原样引用 | - | | 英文规范名 | <ISO 9001:2015> | ISO 9001:2015 无包裹 | P2 | | 同时出现 | 《规范名称》<英文缩写> | 混用书名号和尖括号 | P2 | | 局部修订版 | GB 50487-2008(2022年版) | GB 50487-2008 不注版本 | P2 | | 标准号+名称 | GB/T50363-2018《节水灌溉工程技术标准》 | 仅写标准号无名称,或名称与号不匹配 | P1 |

  • 常见标准代号:GB(国家)、GB/T(推荐性国标)、SL(水利)、DL(电力)、JG(建工)、DB(地方)
  • 正文引用与文末参考文献列表是否一致
  • HJ/T格式规范:HJ/T后接数字(如HJ/T2.3)应归一化为HJ2.3,但HJ/T88等特定标准号例外保留原值
  • 书名号规范:中文标准引用必须加《》书名号

分析要点

  • 同一指标在不同章节出现不同数值 → 标记为矛盾
  • 同一指标在不同年份合理变化 → 不是矛盾
  • 分项数据与汇总数据的关系 → 逐一验算加减
  • 发现一致性好的部分 → 记录在"校对好的部分"
  • 规范引用 → 逐一核对编号、年代、名称是否与权威来源一致

第三步:问题分级

每个问题必须标注优先级:

| 级别 | 标准 | 处理建议 | |------|------|---------| | P0 严重 | 数据直接矛盾、数量级错误、影响文件可信度 | 必须修正后才能提交 | | | 包括:同一指标多处数值矛盾、分项合计与总和不符、完工/验收超出工期、多年平均降雨量等核心数据前后不一致、已废止标准有明确替代版本 | | | P1 需核实 | 数据存疑、编号错误、逻辑不清晰、未收录但可推断最新版本的标准 | 建议核实后修正 | | P2 建议 | 格式不统一、术语轻微差异、表述瑕疵、缺书名号等 | 酌情修改 |

⚠️ 【分级红线】以下情况不得降级

  • 多年平均降雨量、工程投资等核心指标前后矛盾 → P0
  • 已废止标准(SL303-2014、SL166-2010、GB50013-2006等)→ P0(有明确替代版本)
  • 章节编号跳段、目录正文不一致 → P1
  • 术语混用、单位不统一、格式问题 → P2

第四步:生成结果

⚠️ 【强制要求】完成分析后必须执行此步骤,不得跳过!

输出到用户原文档位置(不在工作目录)

【必须同时输出以下两个文件,缺一不可】:

  1. 校对报告(.md)—— 放在原文档同目录
  2. 带批注文件(_annotated.docx)—— 放在原文档同目录,原文黄色高亮+段落末尾橙色说明

⚠️ 提示:生成的 _annotated.docx 文件请用 Microsoft Office Word 打开(不要用 WPS,两者渲染效果不同)

位置标注格式

位置:第4页第163段 ↔ 第4页第180段

标注方式

  • 原文问题处 → 黄色高亮 (highlight_color=4)
  • 标注说明 → 橙色高亮 (highlight_color=7) + 粗体
"""
DOCX 标注工具 - 在原文处黄色高亮 + 段落末尾橙色说明
健壮版:含异常处理,不因单个问题失败而中断整个流程
"""
import sys, glob, shutil
sys.stdout.reconfigure(encoding='utf-8')
from docx import Document
from docx.oxml.ns import qn
from docx.shared import RGBColor


def highlight_run(run):
    """为 run 添加黄色背景高亮"""
    try:
        rPr = run._r.makeelement(qn("w:rPr"), {})
        hl = run._r.makeelement(qn("w:highlight"), {})
        hl.set(qn("w:val"), "yellow")
        rPr.append(hl)
        run._r.insert(0, rPr)
        return True
    except Exception:
        return False


def annotate_simple(input_path, output_path, issues):
    """
    标注 DOCX - 在原文处黄色高亮 + 段落末尾橙色说明
    健壮实现:单个问题失败不影响其余问题处理

    issues 格式:
    [{
        "text": "问题关键词(用于定位)",
        "type": "数据矛盾/逻辑异常/编号错误/术语不统一/规范引用错误",
        "priority": "P0/P1/P2",
        "para_index": 段落索引(从0起),
        "estimated_page": 估算页码,
        "problem": "问题描述",
        "suggestion": "修正建议",
        "compare_location": "对比位置(第X页第Y段 ↔ 第X页第Y段,确保批注与校对报告一致)"
    }, ...]

    > ⚠️ **【定位精度要求】**
    > - para_index:段落在文档中的顺序索引(从0起),需与校对报告中"第X段"对应
    > - estimated_page:估算页码,需与校对报告中"第X页"对应
    > - compare_location:格式为"第X页第Y段 ↔ 第X页第Y段",确保校对报告与批注文档位置一致,无偏差
    > - 避免段落索引偏差:同一问题在校对报告和批注文档中的段落编号应完全一致
    """
    # Step 1: 复制原文件(失败则退出)
    try:
        shutil.copy2(input_path, output_path)
    except Exception as e:
        print(f"[错误] 无法复制文件:{e}")
        return 0

    # Step 2: 打开文档(失败则退出)
    try:
        doc = Document(output_path)
    except Exception as e:
        print(f"[错误] 无法打开文档:{e}")
        return 0

    processed = 0
    failed = 0

    for issue in issues:
        target = issue.get("text", "").strip()
        para_index = issue.get("para_index", 0)
        estimated_page = issue.get("estimated_page", 1)
        priority = issue.get("priority", "P1")

        if not target or para_index < 0:
            continue
        if para_index >= len(doc.paragraphs):
            failed += 1
            continue

        para = doc.paragraphs[para_index]

        # Step 3: 在原文中查找并高亮问题文字(黄色)
        for run in para.runs:
            if target in run.text:
                try:
                    highlight_run(run)
                except Exception:
                    pass

        # Step 4: 在段落末尾添加橙色粗体标注
        location = f"第{estimated_page}页第{para_index}段"
        compare_loc = issue.get("compare_location", "")
        compare_hint = f" ↔ {compare_loc}" if compare_loc else ""

        annotation = (
            f"\n\n"
            f">> 【{priority}·{issue.get('type', '')}{location}{compare_hint}\n"
            f"问题:{issue.get('problem', '')}\n"
            f"建议:{issue.get('suggestion', '')}"
        )

        try:
            run = para.add_run(annotation)
            run.font.highlight_color = 7
            run.font.bold = True
            run.font.color.rgb = RGBColor(0xFF, 0x80, 0x00)
            processed += 1
        except Exception:
            failed += 1

    # Step 5: 保存
    try:
        doc.save(output_path)
        print(f"标注完成:成功 {processed} 条,失败 {failed} 条")
        return processed
    except Exception as e:
        print(f"[错误] 保存失败:{e}")
        return 0


# issues 格式示例:
# [{
#     "text": "428.24",
#     "type": "数据矛盾",
#     "priority": "P0",
#     "para_index": 163,
#     "estimated_page": 4,
#     "problem": "渠道总长428.24km,但分项相加只有398.54km",
#     "suggestion": "核实总长数据或检查分项统计",
#     "compare_location": "第4页第180段"
# }, ...]

校对报告模板

⚠️ 【强制要求】生成的报告必须包含以下所有章节,不得遗漏!

# {文档名称} 校对报告

---

### 📋 文档信息

| 项目 | 内容 |
|:-----|:-----|
| 文档名称 | {文档名称} |
| 发现问题 | **X 处**(P0: X个 / P1: X个 / P2: X个) |
| 检测时间 | {YYYY-MM-DD} |

---

### 🔴 严重问题(P0 - 必须修正)

---

#### 问题 1:{问题简述}

> **位置**:第 X 页第 Y 段 ↔ {对比位置}

**原文摘录**

{原文内容}


**发现问题**:{详细描述}

**修正建议**:{修正建议}

---

### 🟡 需核实问题(P1 - 建议核实)

(同上格式)

---

### 🔵 建议优化(P2 - 格式/术语)

(同上格式)

---

### ✅ 一致性校对好的部分

- {一致性良好的数据/章节说明}
- {另一个良好的部分}

---

### 📊 修改建议优先级汇总

| 优先级 | 问题 | 建议 |
|:------:|------|------|
| 🔴 P0 | {问题简述} | {修正建议} |
| 🟡 P1 | {问题简述} | {修正建议} |
| 🔵 P2 | {问题简述} | {修正建议} |

---

### ⚠️ 免责声明

本报告由 AI 自动生成,**仅供辅助参考**。报告中的问题标注基于文档文本的一致性核查,不代表对文档内容真实性的完全验证。

- 本报告**不能替代人工审核**,尤其涉及数据、工程量、投资额等关键信息时,请务必对照原始批复文件、设计图纸等进行核实
- 规范引用问题基于内置标准库(141条,截止2026-04-09)及网络核查结果,标准状态可能随政策更新而变化,建议以水利部等官方平台最新公布为准
- 报告生成方不对因使用本报告而产生的任何直接或间接损失负责,使用前请自行判断

---

*报告由文档一致性校对助手 v2.4.6 自动生成*

⚠️ 注意事项

关于效率

  • 不要对每个指标都用正则精确匹配
  • 模型直接阅读关键段落,自主判断
  • 只在发现明显问题时才标记
  • 避免重复核查同一数据
  • 同段落内同一指标不重复标记:同一段落中多次出现的相同指标(如"灌区面积10万亩"在一段中出现2次),只标记第1次,其余忽略
  • 重复错误多处出现时,每处都要分别标注并说明修改方法:同一个错误在文档不同位置(不同段落/不同页)出现时,每处都要标注,且每处都要说明如何修改,不能只标注一次然后写"同上"或"见上述"

关于输出

  • 不多生成中间文件(如 xxx_check.txt、xxx_extracted.txt 等)
  • 只输出校对报告(.md)和带批注文件(_annotated.docx)
  • 如果用户只需要报告,不需要标注文件,说明即可

关于问题分级

  • P0:数字直接矛盾、数量级错误 → 用户提交前必须修正
  • P1:数据存疑、编号错误 → 建议核实
  • P2:格式、术语轻微差异 → 酌情修改

v2.4.2 - 2026-04-09

  • 新增问题三级分级(P0/P1/P2)
  • 扩展检查范围:编号结构、单位统一性、格式问题
  • 报告新增"✅ 校对好的部分"和"修改建议优先级汇总表"
  • issues 数据结构新增 priority 字段
  • 标注格式:【P0·数据矛盾】更直观
  • 新增 E类检查:规范引用问题(名称/版本号/格式正确性检查)

v2.4.3 - 2026-04-09

  • 内置静态库大更新:新增2025~2026年发布的水利标准15条,库从66条升至122条(截止2026-04-09)
    • SL/T 631.1~.7-2025(7项,替代已废止的SL 631-2012)
    • SL/T 808-2025(替代SL/T 808-2021)、SL/T 838-2025、SL/T 839-2025(3项)
    • SL/T 219/545/553/872/877-2026(5项,2026年新发布)
    • SL 191-2008 → 已废止(被SL/T 191-2025替代);SL 631-2012 → 已废止
  • SKILL.md修正:第四步"输出"章节原说标注文件"仅当用户明确要求时生成",与"注意事项"矛盾
    • 改为:每次必须同时输出校对报告.md + _annotated.docx,不再区分默认/按需
  • 强化标注脚本健壮性:添加异常处理,单条失败不中断整体流程
  • 规范引用格式检查:中文《》英文<>格式标准
  • 静态库编号归一化:查表前须 replace(' ', '') 归一化(静态库格式 GB/T 50363 vs 文档 GB/T50363
  • 静态库 latest 字段改为完整引用格式(标准号 + 《标准名称》)
  • E类规范引用必须输出完整引用,不得只说"改为XX版"
  • 报告模板新增完整免责声明;标准库条数更新为122条
  • 本次修复(WPS截图反馈4条)
    • SL/T 386-2025(水利水电工程边坡与挡土墙设计规范):新增入库(现行,替代SL 386-2007和SL 379-2007)
    • GB/T 50662-2011:名称修正为《水工建筑物抗冰冻设计标准》(2024年版,2025-02-01实施,局部修订)
    • SL/T 551-2024:补充note(现行,2025-01-22实施)
    • SL/T 191-2025:确认现行(替代SL 191-2008,2026-06-01实施)
    • 同步更新被替代标准状态:SL 386-2007/SL 379-2007 → 已废止
  • 本次修复(喜德报告核查)
    • 喜德报告引用26条标准,入库前15条为ISSUE(已废止)
    • 新增入库18条:SL55-2005/SL44-2006/SL482-2011/SL744-2016/SL189-2013(均已废止,含替代表)及其他MISS标准
    • SL247-2012 → 已废止(被SL/T 247-2020替代);SL106-2017 → 已废止(被GB 5084-2021替代)
    • SL/Z582-2012 → 已废止(813清单未收录)
    • SL640-2013修正名称为《输变电项目水土保持技术规范》(现行)
    • 静态库升至122条(现行98/已修订3/已废止21)

v2.4.8 - 2026-04-09

  • 静态库key规范化(核心修复):库中有100个key带空格(如 'SL 379-2007', 'SL/T 386-2025' 等),导致 clean_std() 提取的 'SL379-2007'(无空格)查不到 → P1已废止仅检出10个(应为15个)
    • 修复:在库加载时统一 norm(k) = k.replace(' ','').replace('-','-').replace('—','-') 归一化所有key
    • 同时修复 clean_std():从匹配文本中正确提取数字部分
  • A类灌溉保证率正则修复:原正则 灌溉[的]?保证率 不覆盖"灌溉设计保证率" → 75%漏检 → 修改为 灌溉(?:设计)?[的]?保证率
  • A类设计洪水范围值\d+(?:[~\-至]\d+)? 捕获"5~10",但 float("5~10") 报错 → 取第一个数字 re.search(r'\d+', m.group(1)).group()
  • E类T团体标准T\d{2,3}[--]\d{4} 只收录T+年份格式(如T01-2007),过滤T450等噪声
  • 喜德报告实测:A类3个矛盾(灌溉保证率75%/80%、设计洪水5年/10年、降雨量1000/1037mm)、B类术语2组、E类P0×2+P1×15+P2×18

v2.4.9 - 2026-04-09

  • 联网核查P2标准:喜德报告18个P2标准联网逐一查询全国标准信息公共服务平台/生态环境部/水利部,确认现行状态
  • 静态库新增17条:GB×12(GB/T13663.2/GB/T20203/GB/T21010/GB50434/GB5084/GB51018/GB5749/GB50013-2018/GB50199/GB50332/GB50433/GB/T51240/GB/T45107-2024)、HJ×5(HJ2.2/HJ2.3/HJ2.4/HJ19/HJ/T88)、SL×13(SL/T260-2025/SL/T277/SL/T290/SL/T440/SL/T442/SL492-2025/SL72/SL73.3/SL203-97/SL207-98)
  • 发现1条已废止:SL166-2010(已被SL/T291.3-2025替代,2025-09-29发布)
  • 发现版本需更新:GB50013-2006(应为GB50013-2018,2006版已废止)
  • 静态库升至139条(现行有效114/已修订3/已废止22)

v2.4.6 - 2026-04-10

  • B类时序规则细化:拆分"完工时间在总工期内"(需核实)和"完工时间超出总工期"(P0)两个检测点,表述更清晰
  • E类分级红线明确:将GB50013-2006明确列入"已废止→P0"清单,避免歧义
  • B类时序逻辑补全:新增"完工早于总工期""验收超出计划工期"检测场景,全链路时序节点校验
  • C类编号结构补全:章节跳段、目录正文不一致、表格标题与内容不匹配全部覆盖
  • D类术语格式补全:术语混用(小/小型/小Ⅰ型水库、总投资/投资估算)、单位不统一、缺书名号全部覆盖
  • E类检查完善:废止标准明确替代版本(SL303-2014→SL303-2017、SL166-2010→SL/T291.3-2025),HJ/T格式归一化
  • 分级偏差修正:多年平均降雨量→P0,E类废止标准→P0,C类全→P1,D类全→P2
  • 定位精度优化:段落索引与页码对应关系校准,location格式统一为"第X页第Y段"
  • A类数据验算强化:资金分项自动求和、工程量单位校验

v2.4.5 - 2026-04-10

  • 报告模板强化:模板开头添加【强制要求】所有章节不得遗漏,确保免责声明等必填项完整输出
  • E类检查升级:同时检查标准号和标准名称是否匹配,防止"标准号正确但名称错误"的遗漏
  • 部分章节检查提示:用户要求只检查部分章节时,提醒先另存并说明局限性

v2.4.4 - 2026-04-09

  • E类规范核查流程升级:先查静态库 → 未收录则汇总询问用户是否联网核查 → 同意后逐条联网查询 → 自动写入 standards_library.json(归一化key入库)
  • clean_std 修复:HJ/T+数字/小数 → 归一化为 HJ+数字(如 HJ/T2.3-2018HJ2.3-2018),同时保留 HJ/T88-2003 等例外原值匹配
  • 前缀兜底查询:文档引用缺少年份时(如 GB50201SL274),自动在库中查找同前缀标准,取最新年份;标注 _inferred: True 提示"建议核实年份"
  • 库新增2条SL/T 251-2015(天然建筑材料勘察规程,现行)、SL 303-2014(已废止,被SL 303-2017替代)
  • 静态库升至141条(现行有效115/已修订3/已废止23)