# 合同审查完整性审计方法 (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个数据源 → 列出原始数据 → 标注不确定项 → 再给结论
