# 合同审查完整性审计方法 (Audit Methodology) ## 触发条件 Doro说"查一查""核查""核实""是不是都审查了/pass了/登记了"→ 这是**验证指令**。 ## 铁律 **回复中必须先有工具调用再有结论。context记忆≠查证,不可直接输出。** ## 时区转换(铁律) 服务器时区UTC,Maggie/Doro/邱律师北京时间(UTC+8)。当问"今天发了多少"时: - **北京时间7月3日** = UTC 7月2日 16:00 ~ 7月3日 16:00 - `find` 命令用 `-newermt "2026-07-02 16:00:00" ! -newermt "2026-07-03 16:00:00"` - 或 `TZ='Asia/Shanghai' date` 确认当前北京时间 **典型错误**:用UTC当天(00:00-24:00)筛选→会把北京时间前一天下午的文件算进来、漏掉当天上午的文件。2026-07-03教训:初始查询用 `-mtime -1` 返回了UTC时间范围的文件(含前一天的6份),Maggie追问"北京时间7/3的"后改用精确UTC窗口,确认只有1份。 ## 必须覆盖的数据源(缺一不可) ### 1. Tracker JSON ```bash cat ~/.hermes/data/contract-tracker.json ``` - 按seq范围筛选 - 逐条列出original_filename, party, status, xlsx_updated_at ### 2. xlsx(与tracker交叉比对) ```bash sudo docker cp nextcloud-nextcloud-1:/var/www/html/data/doro/files/Doro合同审查任务/合同审查清单.xlsx /tmp/ ``` - openpyxl读取,逐行比对tracker ### 3. Gateway log - 全部接收渠道 ```bash # QiuTing私信文件(空消息=文件附件) grep 'user=QiuTing.*chat=QiuTing' gateway.log | grep "msg=''" # Doro私信文件 grep 'user=doro.*chat=doro' gateway.log | grep "msg=''" # Doro群文件 grep 'user=doro.*chat=wrbAFkXAAAiWC3styKqNj0bZyH6BbJ_Q' gateway.log | grep "msg=''" # Doro "待审查上传"指令(表示Doro直接往Nextcloud上传了文件) grep 'user=doro' gateway.log | grep -i '待审查.*上传\|上传.*新.*合同' # 飞书渠道 grep 'feishu.*ou_757f053c9d7aff6c73b18aa60c337756' gateway.log | grep 'media=' ``` ### 4. Nextcloud目录实时状态 ```bash # 待审查(原文件仍在=未pass或等cleanup) sudo docker exec nextcloud-nextcloud-1 ls Doro合同审查任务/待审查/ # 任务交付(交付物) sudo docker exec nextcloud-nextcloud-1 ls Doro合同审查任务/任务交付/ ``` ### 5. 交叉比对 - 接收总数(各渠道文件消息数之和) - 处理总数(tracker completed + 待pass + 跳过 + 排除) - 差值 = 可能遗漏 ## 汇报格式 ``` === 查证方法 === 1. 读了什么(tracker/xlsx/gateway log哪些渠道/Nextcloud哪些目录) 2. 每个数据源的结果数 === 查证结果 === - 已pass登记:X份(seq范围) - 已交付未pass:X份(列出文件名) - 已排除:X份(原因) - 差异/存疑:X份(说明) === 无法确认的 === - 明确说"这些我查不到/确认不了" - 说明已尝试的搜索策略 ``` ## 反面教材(2026-07-02) ❌ "查证属实,无遗漏" → 实际没跑任何工具 ❌ "找不到第2份" → 实际数据在tracker里,自己之前还列过表 ❌ "你记得叫什么名字吗?" → 把验证责任转嫁用户 ✅ 正确做法:跑完全部5个数据源 → 列出原始数据 → 标注不确定项 → 再给结论