# 移植workflow修订到同名不同版本合同 (2026-07-08)

## 场景
邱律师同日发了两份同名文件（如"2026年华新镇公立中小学生健康体检服务合同.docx"），内容有实质差异（不同版本/条款）。第一份被workflow正常审查交付，第二份因queue-runner同名跳过逻辑被遗漏。Doro要求"把workflow第1份的修订内容直接修订到第2份里，但要注意相关修订在第2份里是否合理"。

## 操作步骤

### 1. 提取第1份的WB修订清单
从已交付文件提取所有 `author=WB` 的 `w:ins` 和 `w:del`：
```python
from zipfile import ZipFile
from lxml import etree

with ZipFile(delivered_path, 'r') as z:
    content = z.read('word/document.xml').decode('utf-8')
root = etree.fromstring(content.encode('utf-8'))
# 遍历所有 WB INS/DEL，记录：段落索引、INS文本、DEL文本、上下文
```

### 2. 对比两份合同差异
用 `difflib` 对比两版全文，定位哪些段落内容不同。特别关注：
- 修订涉及的段落在第2份中是否存在
- 如果存在，文本是否与第1份中的"修订前"文本一致

### 3. 逐条判断修订是否适用于第2份
| 修订类型 | 判断方法 |
|---------|---------|
| 术语统一（如"协议"→"合同"） | 在第2份中搜索同一术语，存在则同样修改 |
| 新增保护条款（如数据归属、转包连带责任） | 检查第2份对应位置是否缺同样的保护，缺则加 |
| 金额/支付相关修订 | 第2份的支付条款可能完全不同（如本案），需独立判断是否需要新的修订 |
| 合同期限相关修订 | 第2份期限可能不同，独立判断 |

### 4. 对第2份执行修订
使用ContractEditor库，与正常审查相同流程：
```python
ed = ContractEditor(second_file)
ed.tracked_replace(old, new)  # 逐条适用的修订
errors = ed.validate()
ed.save(output)
```

### 5. 字体验证 + 上传
- `wb-ins-font-verify.py` 必须PASS
- 上传替换NC任务交付目录中的同名文件
- 同时确保第2份原始文件在待审查目录

## 2026-07-08 华新镇体检合同实证

**两版差异：**
| 条款 | 第1份 (11:05) | 第2份 (16:04) |
|------|--------------|--------------|
| 项目内容 | "公立中小学生健康检查工作" | "华新镇公立中小学生健康体检工作" |
| 支付方式 | 按实际人数结算，无金额上限 | 按实际完成人数+考核表结算，费用上限17万 |
| 合同期限 | 9月10日起 | 9月1日起 |

**移植的修订（全部适用）：**
1. 保密条款：数据归属+合同期满扩大+协议→合同统一 ✅ 第2份保密条款内容相同
2. 转包限制：增加甲方书面同意+连带责任 ✅ 第2份P44文本相同
3. 效力条款：本协议→本合同 ✅ 第2份P51文本相同

**不需要额外修订的原因：**
- 第2份的支付条款已更完善（有上限、有考核、有一次性付清约定）
- 违约责任、争议解决条款相同且已足够

## 注意事项
- 第2份被上传后会**替换**第1份的交付文件（同名），tracker中seq=262的记录对应的实际内容变了
- hint mismatch 在 tracked_replace 生成的长INS文本中常见（库不自动加hint到多段INS），需post-fix
