Files
hermes-skills/skills/legal/contract-editor/references/review-opinion-generation-pattern.md
T

84 lines
2.9 KiB
Markdown

# 审查意见文档生成模式(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
- [ ] 修订后列无(注:...)、无理由解释
- [ ] 行顺序按条款号排列
- [ ] 同模板合同的审查意见行数一致(除个案差异行外)
- [ ] 标题包含合同全称