# 移植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