Files

2.9 KiB

审查意见文档生成模式(2026-07-02 确立)

核心原则

  1. 只体现差异,不做理由说明 — 表格三列(条文|原文|修订后)只写文字差异
  2. 字体必须显式设置 — 不依赖模板继承,每个run四属性齐全
  3. 同模板合同内容必须一致 — 行顺序按条款号,模板级修订表述相同

字体规则

def set_cell_font(cell, text, east_asia='仿宋', ascii_font='Times New Roman', h_ansi='Times New Roman', bold=False):
    """Set cell text with proper font - every run must have explicit rFonts"""
    from docx.oxml.ns import qn
    from docx.oxml import OxmlElement
    
    # Clear existing content
    for p in cell.paragraphs[1:]:
        cell._element.remove(p._element)
    p = cell.paragraphs[0]
    for r in p._element.findall(qn('w:r')):
        p._element.remove(r)
    
    # Set paragraph alignment to justify
    pPr = p._element.find(qn('w:pPr'))
    if pPr is None:
        pPr = OxmlElement('w:pPr')
        p._element.insert(0, pPr)
    jc = pPr.find(qn('w:jc'))
    if jc is None:
        jc = OxmlElement('w:jc')
        pPr.append(jc)
    jc.set(qn('w:val'), 'both')
    
    # Add run with explicit font settings
    run = p.add_run(text)
    rPr = run._element.find(qn('w:rPr'))
    if rPr is None:
        rPr = OxmlElement('w:rPr')
        run._element.insert(0, rPr)
    
    rFonts = OxmlElement('w:rFonts')
    rFonts.set(qn('w:eastAsia'), east_asia)
    rFonts.set(qn('w:ascii'), ascii_font)
    rFonts.set(qn('w:hAnsi'), h_ansi)
    rPr.insert(0, rFonts)
    
    if bold:
        b = OxmlElement('w:b')
        rPr.append(b)

内容格式

正确(只体现差异)

条文 原文 修订后
第1条 买方同意向卖方购买,同时卖方同意授予买方以下器械 甲方同意向乙方购买,同时乙方同意向甲方出售以下器械
第7.1.2条 按照器械的疵劣程度 按照器械的瑕疵程度

错误(带理由说明)

条文 原文 修订后
第1条 ... 甲方同意向乙方购买……(注:统一称谓为甲方/乙方,"授予"修改为"出售"以准确反映买卖关系)

同模板合同一致性保证

当同一顾问单位有多份同模板合同时:

  1. 先确定模板级修订点列表(所有同模板合同共享的问题)
  2. 每份合同的审查意见必须包含全部模板级修订点
  3. 行顺序统一按条款号排列
  4. 个案差异(如金额问题)在统一行之外单独加行
  5. 修订后列的文字必须完全一致(逐字对比)

验证清单

生成完成后必须验证:

  • 所有数据行的每个run都有eastAsia=仿宋 + ascii/hAnsi=Times New Roman
  • 修订后列无(注:...)、无理由解释
  • 行顺序按条款号排列
  • 同模板合同的审查意见行数一致(除个案差异行外)
  • 标题包含合同全称