Files
hermes-skills/skills/legal/contract-reviewer/references/manual-fix-workflow-omissions-20260709.md
T

3.4 KiB

Workflow审查遗漏手动补修方法(2026-07-09 职业卫生合同实证)

场景

Doro要求"查看交付合同哪里不符合审查规则"并指示手动修复。

诊断步骤

1. 提取修订清单

# 从交付文件提取所有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补修

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. 字体验证

python3 ~/.hermes/skills/legal/contract-reviewer/scripts/wb-ins-font-verify.py <file.docx>

已知误报:混合字体段落(如"甲方:"用仿宋,名称用宋体)中的INS匹配相邻run但脚本比对首个run——属于false positive,无需修复。

5. 上传替换

sudo docker cp <local.docx> nextcloud-nextcloud-1:<NC路径>
sudo docker exec nextcloud-nextcloud-1 chown www-data:www-data <NC路径>
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