# 审查意见文档生成模式(2026-07-02 确立) ## 核心原则 1. **只体现差异,不做理由说明** — 表格三列(条文|原文|修订后)只写文字差异 2. **字体必须显式设置** — 不依赖模板继承,每个run四属性齐全 3. **同模板合同内容必须一致** — 行顺序按条款号,模板级修订表述相同 ## 字体规则 ```python 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 - [ ] 修订后列无(注:...)、无理由解释 - [ ] 行顺序按条款号排列 - [ ] 同模板合同的审查意见行数一致(除个案差异行外) - [ ] 标题包含合同全称