# 双语合同完善 / 模板残留清理(中英对照法律服务协议等) ## 适用场景 莎莎 / Maggie / 客户直接交办一份"在现有草稿基础上完善"的中英对照合同(法律服务协议、委托代理协议等),不走 Doro 的 uwf workflow。草稿往往是从所内旧模板 / 旧案改来的,残留前案痕迹。 ## 铁律1:模板残留是常态,必须逐条中英对照 律所复用双语模板时,**中文侧和英文侧可能各自残留不同旧案的内容**,且核心商业条款中英文互相矛盾。 普力克 Procore 案(2026-06-25)实例: - 中文侧整体是"社保调查"案,英文侧整体是"喆航买卖合同纠纷"案——**两个不同旧案混在一份草稿里** - 客户名残留旧客户(艾达 / AMOS),分布在抬头、正文、付款条款第三方代付人、签署页多处 - 费率:中文 2,500 元/小时·2-3 小时一次性;英文 2,000 元/小时·每月 5-6 小时——三项数据互相打架 - 付款:中文付全额;英文付 50% 即 72,500 元 + AMOS 新加坡公司代付 **做法**:python-docx 提全文(含 `doc.tables`),把每个条款的中文段和紧邻的英文段配对,逐条比对。重点盯:服务内容、服务范围、主要联系人、费率、工时、付款方式/金额、第三方付款人、签署日期。 ## 铁律2:商业条款绝不替客户猜,先确认后动手 费率、金额、工时、付款分期、第三方代付——这些是商业条款。草稿里中英文打架时**不能自己挑一个填进去**。把所有矛盾点列成清单,让委托律师给准数,确认后再出稿。 本案先问了 7 点(真实业务事由 / 非诉 or 诉讼 / 联系人 / 费率 / 工时 / 收款方式 / 签署日),拿到 3 点核心确认(服务内容=王晓玲社保调查、费率 2,500×2-3 小时一次性全额、签署日 6/25)才动手。 ## 铁律3:以中文为准 → 先定中文,再对齐英文 协议若含"如有出入以中文为准"条款(多数中英对照协议都有),完善顺序必须是:**先把中文条款定稿,再逐条把英文改成与中文一致**。用户本案也明确指示此顺序。这样既符合协议约定,也符合用户预期。该兜底条款审完保留——对己方有利,不要删。 ## 技术:段落级 run 合并替换(保格式整段替换) python-docx 里一个段落常被切成几十个碎 run(中文逐字符切、英文逐词切,bold/size 各异)。整段替换文本又要保留段落样式,用这个函数: ```python def set_para_text(p, text): """整段文本写入第一个 run,清空其余 run,保留首 run 格式。""" if not p.runs: p.add_run(text); return p.runs[0].text = text for r in p.runs[1:]: r.text = "" ``` - 表格单元格同理:`set_para_text(cell.paragraphs[idx], text)` - 删除整个空段落(如清掉被替空的旧英文残段,避免留空行):`el = p._element; el.getparent().remove(el)` - 替换后务必复查:遍历全文(段落 + 表格 cell)拼成大字符串,断言旧内容(艾达/AMOS/旧金额/旧费率等)`not in full`,再断言新数据出现次数正确。 ## 验收:多页 OnlyOffice 渲染 → 逐页 vision 核对 单页固定版面用 `print-ready-pdf/scripts/oo_render_check.sh`。多页双语合同用以下管线(Maggie/Doro/莎莎都用 OnlyOffice 看文件,必须用 x2t 不用 LibreOffice): ```bash docker cp file.docx nextcloud-onlyoffice-1:/tmp/_chk.docx # 容器内写 TaskQueueDataConvert xml,m_nFormatTo=513,跑 x2t(见 print-ready-pdf) docker cp nextcloud-onlyoffice-1:/tmp/_chk.pdf /tmp/out.pdf pdftoppm -png -r 110 /tmp/out.pdf /tmp/pg # 每页一张 PNG ``` 然后 `vision_analyze` 逐页核对:客户名、服务内容、费率、付款方式金额、签署日期、签署页主体、中英一致性。 ## 铁律4:vision 报"截断/截字/多空格"先回源核实,别急着改 justified(两端对齐)渲染图里,vision 模型会把以下**正常排版现象**误报为"文字截断/排版错误"——本案一次任务里就误报了 4 次: - 跨页连字符断词(第1页底 `accor-` → 第2页头 `ding`) - 跨页句子接续(第4页底 `Negotiations shall` → 第5页头 `commence...`) - 两端对齐的字距假象(`with` 被读成 `wit h`) - 两端对齐的自动换行断词(`aforemen` / `tioned`,且无连字符) 判断方法(任一即可证伪 vision 的"截断"): 1. 从源 docx 读该段 `p.text`,确认是完整单词 / 完整句子; 2. 查 `word/settings.xml` 是否含 `autoHyphenation`(没开就不会真断字); 3. 查文本不含软连字符 `\u00ad`。 **渲染层表象 ≠ 文档缺陷**,Word / OnlyOffice 编辑视图会正常回流。 ## 铁律5:关键数据(账号/金额/信用代码)逐字符回源核对,不信 vision 读数 vision 把收款账号 `121955296610001`(15 位)读成 `12195296610001`(漏 1 位)。账号、金额、统一社会信用代码这类关键数字,**必须从源 docx 逐字符提取核对**,绝不采信 vision 对渲染图的读数。本案账号与原稿逐位一致,确认后未改。 ## 顺手订正范围("条款明确得当"要求) 完善双语合同时,除主体/商业条款外,一并修掉: - 中文病句("在上述法律服务作为客户的代理人" → "就上述法律服务事项作为客户的代理人")、错别字("疑异"→"疑义")、异体字("⻓"→"长") - 英文逗号粘连句(comma splice,逗号改分号或加 and)、口语化用词("really" → "truthfully",与同条 "faithfully" 体系一致) ## 交付 - 命名规则:当事人名称+文件名称+版本+修改人+日期(本案:`普力克贸易(上海)有限公司-法律服务协议-v1-20260625.docx`) - 本类任务默认交"用印前清稿"(直接定稿、非修订模式)。若需**带修订痕迹**版本供对方/同事看改了哪些,另出一版 tracked changes(用 ContractEditor 库,不裸写 XML)。交付时主动告知用户这两种版本的区别,问要哪种。