# Workflow审查遗漏手动补修方法(2026-07-09 职业卫生合同实证) ## 场景 Doro要求"查看交付合同哪里不符合审查规则"并指示手动修复。 ## 诊断步骤 ### 1. 提取修订清单 ```python # 从交付文件提取所有WB tracked changes import zipfile from lxml import etree W = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main' with zipfile.ZipFile(path) as z: xml = z.read('word/document.xml') root = etree.fromstring(xml) # INS for ins in root.findall(f'.//{{{W}}}ins'): if ins.get(f'{{{W}}}author') != 'WB': continue texts = [t.text for t in ins.iter(f'{{{W}}}t') if t.text] text = ''.join(texts).strip() if text: print(f"[INS] {text[:100]}") # DEL for d in root.findall(f'.//{{{W}}}del'): if d.get(f'{{{W}}}author') != 'WB': continue texts = [t.text for t in d.iter(f'{{{W}}}delText') if t.text] text = ''.join(texts).strip() if text: print(f"[DEL] {text[:100]}") ``` ### 2. 逐条对照review-rules.md 将每一条审查规则(10大项)与已做修订比对,找出"规则要求做但没做的"。 ### 3. 用ContractEditor补修 ```python import sys sys.path.insert(0, '/home/maggie/contract-work') from contract_docx_lib import ContractEditor editor = ContractEditor(work_path) # tracked_replace: 在现有文本上追加/替换 editor.tracked_replace("原文片段。", "原文片段并新增内容。") # add_clause: 在某段落之后插入新条款 # 参数: (full_text, after_search, use_title_format=False) editor.add_clause( "X.X 新增条款内容。", "在包含此文本的段落之后插入" # after_search ) editor.save(work_path) editor.validate() # 返回空列表=无问题 ``` ### 4. 字体验证 ```bash python3 ~/.hermes/skills/legal/contract-reviewer/scripts/wb-ins-font-verify.py ``` 已知误报:混合字体段落(如"甲方:"用仿宋,名称用宋体)中的INS匹配相邻run但脚本比对首个run——属于false positive,无需修复。 ### 5. 上传替换 ```bash sudo docker cp nextcloud-nextcloud-1: sudo docker exec nextcloud-nextcloud-1 chown www-data:www-data sudo docker exec -u www-data nextcloud-nextcloud-1 php occ files:scan --path="doro/files/..." sudo docker exec nextcloud-onlyoffice-1 bash -c 'rm -rf /var/lib/onlyoffice/documentserver/App_Data/cache/files/data/*' sudo docker restart nextcloud-onlyoffice-1 ``` ## 2026-07-09 职业卫生合同具体修复 | # | 类型 | 位置 | 修订内容 | 规则 | |---|------|------|----------|------| | 1 | tracked_replace | 1.4条 | "承担全部责任。"→"承担全部责任并全额赔偿甲方因此遭受的一切损失。" | 规则6 | | 2 | add_clause | 4.8.1后 | 新增4.8.2数据归属 | 规则4 | | 3 | add_clause | 4.8.2后 | 新增4.8.3泄露责任 | 规则4 | | 4 | add_clause | 5.7后 | 新增5.8持续使用权 | 规则9 | 同时修复了"有2才有1"编号问题:原4.8.1是唯一子项(违规),加上4.8.2和4.8.3后变为3个子项(合规)。 ## 关键注意事项 1. **ContractEditor.add_clause参数是(full_text, after_search)**,不是keyword argument `after_text=` 2. 新增子项时注意"有2才有1"规则——单独一个子项就不要加子编号 3. P4字体验证FAIL是已知false positive(混合字体段落),详见`references/wb-ins-font-verify-false-positive.md` 4. 手动修复直接替换交付目录文件,不重跑workflow