---
name: ecm-dd-file-review
description: >
  ECM 尽职调查工具类 Skill：对已归位到项目目录的客户文件（PDF / Word / Excel / 图片 / 文本）
  做批量阅读、字段抽取、跨文件一致性核查，输出文件摘要和问题清单。当用户提到以下场景时触发：
  批量审阅文件、批量读 PDF、批量读 Word、批量读 Excel、扫描目录下的尽调材料、文件内容快速浏览、
  这个文件夹里都有什么、提取文件关键字段、对照清单核对文件、文件缺失检查、跨文件一致性核对、
  文件格式 / 清晰度 / 签字盖章检查、file review、document extract、bulk read、
  review folder of documents。
  典型输入：文件夹路径（如 `02-尽职调查/02-03-历史沿革/`）、对应章节的核查要点（可由业务 DD
  skill 提供）、需关注的特殊事项；典型输出：按文件列出的摘要 + 问题汇总 + 缺失文件提示 +
  跨文件一致性核查。
  非触发边界：本 skill 是**工具类**不输出 DD Memo（五段式）；真正的合规判断由各业务 DD skill
  去做。不负责文件分类打标签（归 ecm-setup-file-classify）、不负责文件搬运（归
  ecm-setup-file-organize）、不负责外部数据比对（归 ecm-dd-data-verify）。
  即使用户未明确说"批量审阅"，只要涉及"这个目录里的文件都写了什么 / 关键信息有哪些 /
  有没有缺漏" 也应触发本 skill。
version: 0.1.0
license: MIT
module: ecm-dd
user_role: 项目组律师
phase:
  - 尽调阶段
  - 申报阶段
  - 反馈阶段
category:
  - 合规核查
depends_on:
  external_skills:
    - pdf
    - docx
    - xlsx
  internal_skills:
    - ecm-setup-file-organize
---

# ecm-dd-file-review

## 定位与边界

本 skill 是 **ECM DD 的工具类 skill**，和业务性 DD skill 的关系：

- 业务性 DD skill（dd-approval / dd-entity / …）**输出合规判断**（五段式 DD Memo）
- 本 skill **输出文件级摘要**（目录扫描 + 字段抽取 + 一致性核查），供业务 DD skill 和
  `ecm-dd-data-verify` 作为上游输入使用

> **⚠️ 本 skill 不套用 `shared/templates/dd-skill-template.md` 的五段式输出契约。**
> 该模板只约束业务性 DD skill。本 skill 走自己的"文件审阅摘要"格式。

### 本 skill 负责

- 扫描目标目录，列出可读文件（PDF / Word / Excel / 图片 / 纯文本）
- 调用 `docx` / `pdf` / `xlsx` 外部 skill（或 Claude 原生 Read）批量读取文件
- 按章节核查要点清单从每份文件中抽取**关键字段值**
- 对同目录下的多份文件做**跨文件一致性核查**（例如"章程"与"工商登记簿"中的
  注册资本是否一致）
- 识别缺失文件（按章节应有清单 vs 实际有的文件）
- 识别形式瑕疵（缺签字、缺盖章、扫描不清、日期不全、页数缺失）
- 输出文件审阅摘要（非 DD Memo；不做合规结论）

### 本 skill 不负责

- 合规结论——由调用它的业务 DD skill 判断
- 文件分类打标签（归 `ecm-setup-file-classify`）
- 文件移动 / 归位到对应目录（归 `ecm-setup-file-organize`）
- 外部公开数据比对（归 `ecm-dd-data-verify`）
- 法规检索（归 `ecm-research-reg-search`）

## 免责声明

本 skill 产出的文件审阅摘要仅为 DD 工作底稿，不构成最终法律意见。
完整免责声明见 [DISCLAIMER.md](../../DISCLAIMER.md)。

## 资深律师执行标准

执行本 skill 时，必须同时遵循 [senior-lawyer-execution-standards.md](../../shared/templates/senior-lawyer-execution-standards.md)。本 skill 的任何输出不得突破四条底线：事实可追溯、法源可核验、风险可分级、建议可落地；无法核验时必须显式标注。

## 本 skill 的实务加固点

- **机器抽取有限**：OCR、PDF 文本抽取和表格识别只作初筛；签章、骑缝章、附件、手写修改必须提示人工复核。
- **硬字段优先**：主体名称、统一社会信用代码、日期、金额、股数、比例、文号、签署页和附件清单优先抽取。
- **跨文件冲突**：同一事项在章程、决议、工商档案、审计报告、信披文件中不一致时必须输出冲突表。
- **不可读处理**：加密、损坏、低清扫描、缺页文件不得静默跳过，必须列入无法读取清单和补件建议。

## 前置依赖

### 外部依赖

本 skill 依赖 Anthropic 官方 skill 读取不同格式的文件：

| 文件格式 | 外部 skill | 用途 |
|---------|-----------|------|
| `.pdf` | `pdf` | 文本抽取；对扫描件还需 OCR |
| `.docx` / `.doc` | `docx` | 正文 + 表格 + tracked changes |
| `.xlsx` / `.xls` | `xlsx` | 工作表 + 单元格 + 公式 |
| `.txt` / `.md` / `.csv` | Claude 原生 Read | 文本直接读 |
| 图片（`.jpg` / `.png` / `.heic` 等） | Claude 原生 Read（图像） | 识图或 OCR；复杂扫描件可回调 `pdf` |

### 内部依赖

- `ecm-setup-file-organize`：已归位的项目目录结构，本 skill 依此扫描文件

### 建议的外部 skill 调用约定

调用外部 skill 时，本 skill 遵循如下委派契约：

- **不自己解析二进制**——不要用 `python-docx` / `pypdf` 自己在 Python 里写抽取逻辑
  （那是 connector / 兜底策略）；优先委派给 Anthropic 官方 skill，以利用其格式兼容性。
- **抽取后留痕**——对每份文件的抽取结果，明示"本次抽取的字段来自 {文件名 第 N 页 /
  工作表 / 段落}"，便于反查。
- **读不下来的文件**：记入"无法读取文件清单"，注明可能原因（加密 / 扫描模糊 / 文件损坏 /
  密码保护），不要跳过不记。

## 核心工作流（六步）

### 第 1 步：确认目标目录 + 核查要点

和律师确认本次要审阅的：

- **目标目录**（通常是 `02-尽职调查/02-NN-xxx/` 之一，或 `02-99-未分类文件/`）
- **对应章节的核查要点**：可由业务 DD skill 的 `references/checklist.md` 提供；
  如果是未归位目录或临时审阅，可用
  [references/common-fields.md](./references/common-fields.md) 的通用字段清单打底
- **需特别关注的事项**（如："重点关注报告期内的历次决议日期"）

### 第 2 步：扫描目录清单

用 `scripts/scan_folder.py`（或等效 shell）列出目录下所有可读文件。输出：

- 文件总数
- 按扩展名分布
- 按大小排序（>10MB 的大文件提醒拆分）
- 文件名清单（含路径）

```bash
python skills/ecm-dd-file-review/scripts/scan_folder.py \
    02-尽职调查/02-03-历史沿革/
```

> 若目录下文件数 > 20，建议先按命名前缀 / 子目录分批审阅，避免一次性上下文过大。

### 第 3 步：批量读取文件内容

按文件格式委派对应外部 skill。本步骤输出"每份文件的原始内容缓存"（放入工作区上下文或
写入 `05-底稿和附件/文件审阅/{文件名}.extract.md`）。

- `.pdf` → 调 `pdf` skill 抽文本 → 若纯图片扫描件，再走 OCR
- `.docx` → 调 `docx` skill；注意保留段落结构和表格
- `.xlsx` → 调 `xlsx` skill；逐工作表摘要
- `.txt` / `.md` → Claude 原生 Read
- 图片 → Claude 原生 Read（视觉识别）；复杂文档影像件调 `pdf` 转 OCR

### 第 4 步：关键字段抽取

按第 1 步获取的核查要点清单，从每份文件中抽取字段值。输出到审阅摘要的"按文件审阅结果"段。

**关键：来源可追溯**。每个抽取值必须注明"文件 + 位置"（如"营业执照-20250312.pdf 第 1 页"、
"章程-2024 版.docx 第 3 条"）。

### 第 5 步：跨文件一致性核查

对同章节中的多份文件做一致性核查。ECM DD 场景下高频的跨文件一致性核对：

| 场景 | 应当一致的字段 | 常见不一致原因 |
|------|---------------|---------------|
| 章程 vs 工商登记簿 | 名称、注册资本、法定代表人、经营范围、注册地址 | 章程修订未及时工商变更 |
| 设立时章程 vs 现行章程 | 名称、注册资本变化、股东人数 | 反映出历史沿革 |
| 决议 vs 工商变更通知书 | 决议时间、变更事项 | 决议与工商登记时间差过大（> 30 天）属可疑 |
| 营业执照 vs 税务登记 | 名称、统一社会信用代码 | 2015 年后"三证合一"消除差异 |
| 历次增资协议 | 股东、出资额、持股比例、增资日期 | 反映股权演变 |

对每个不一致项，在摘要的"跨文件一致性核查"段落列出。

### 第 6 步：形式瑕疵与缺失文件识别

**形式瑕疵检查清单**（每份文件都过一遍）：

- [ ] 签字是否齐备（应有的人都签了）
- [ ] 盖章是否齐备（该盖公章 / 合同章 / 骑缝章 / 个人名章的位置是否盖）
- [ ] 日期是否完整（年月日是否都有）
- [ ] 页数是否完整（是否"共 N 页"但实际只有 M 页）
- [ ] 扫描件清晰度（重要字段是否能辨认）
- [ ] 文件版本（是否为最新版；历次修订是否保留过程稿）

**缺失文件清单**：按第 1 步的核查要点（或通用字段清单），列出"应有但未找到"的文件类别。

## 输出格式契约

```markdown
# 文件审阅摘要：{目录名}

> 项目：{客户简称} | 目标目录：{路径} | 审阅日期：YYYY-MM-DD | 审阅人：{律师姓名}
> 对应章节：{编报规则第 N 章} | 核查要点来源：{ecm-dd-xxx / common-fields}

## 一、审阅范围

- **目录路径**：02-尽职调查/02-03-历史沿革/
- **文件总数**：{N}
- **按格式分布**：PDF {a} / Word {b} / Excel {c} / 图片 {d} / 其他 {e}
- **文件清单**：
  1. 发起人协议-20180301.pdf
  2. 验资报告-20180315.pdf
  3. ...

## 二、按文件审阅结果

### 1. 发起人协议-20180301.pdf
- **文件信息**：PDF / 24 页 / 含签字盖章
- **关键字段抽取**：
  - 发起人名单：A / B / C
  - 出资额：A 300 万、B 200 万、C 500 万
  - 出资方式：A 货币、B 货币、C 知识产权（专利 ZL...）
  - 签署日期：2018-03-01
- **形式瑕疵**：无
- **疑点记录**：C 以知识产权出资，需另行核对评估报告

### 2. {文件名}
- ...

（对每份文件重复）

## 三、跨文件一致性核查

### 核查项 1：发起人协议 vs 验资报告 vs 设立时章程
- **一致字段**：发起人名单完全一致
- **不一致字段**：
  - 发起人 C 出资金额：协议记载 500 万，验资报告记载 480 万，章程记载 500 万
  - 可能原因：知识产权评估值在验资环节调减
- **建议核实**：索取评估报告和验资附件

### 核查项 2：{...}
- ...

## 四、缺失文件提示

按"第 3 章·设立"的核查要点（见 `ecm-dd-establishment/references/checklist.md`），以下
文件在本目录下**未找到**，建议客户补充：

- [ ] 创立大会决议
- [ ] 设立时的税务登记证
- [ ] ...

## 五、无法读取文件清单

| 文件名 | 可能原因 | 建议 |
|-------|---------|------|
| 部分历史档案扫描件-1998.pdf | 扫描件图像模糊且需 OCR | 要求客户重新扫描高分辨率版 |
| ... | ... | ... |

## 六、总体观察

- **目录整体完整度**：高 / 中 / 低（基于第 4 节的缺失程度）
- **文件质量**：高 / 中 / 低（基于第 2 节的形式瑕疵比例）
- **下一步建议**：
  1. 传给业务 DD skill（如 `ecm-dd-establishment`）做合规判断
  2. 对跨文件不一致项，向客户发补充资料清单
  3. 对无法读取的文件，请客户补提供清晰版
```

**契约硬性要求**：

1. 一级标题必须是"文件审阅摘要：{目录名}"——供上层 Skill 识别
2. 必有"审阅范围 / 按文件审阅结果 / 跨文件一致性核查 / 缺失文件提示 / 无法读取文件清单 /
   总体观察"六个二级标题
3. 每个"按文件审阅结果"条目必须含"文件信息 / 关键字段抽取 / 形式瑕疵 / 疑点记录"四个子项
4. 输出文件放到 `05-底稿和附件/文件审阅/摘要-{目录简称}-{YYYYMMDD}.md`
5. 不做合规结论（不出现"风险分级"、"违反《xx 条》"这类判断语句——那是业务 DD skill 的活）

## 如何被其他 DD skill 调用

业务 DD skill 的典型链路：

```
ecm-dd-establishment（设立 DD）
    └─ Step 2: 文件审阅
           └─ 可选调用 ecm-dd-file-review（传入 02-03-历史沿革/ 目录）
                   └─ 调用 docx / pdf / xlsx 外部 skill 读取
                   └─ 产出"文件审阅摘要"
           └─ 业务 DD skill 基于摘要做合规判断 → 写入 DD Memo 的"审阅发现"段
```

约定：

- **调用方式**：业务 DD skill 的 SKILL.md 在"核心工作流"第 2 步（文件审阅与标注）
  写"可选：先调用 `ecm-dd-file-review` 对 `02-NN-xxx/` 目录做批量摘要"
- **传递的输入**：目录路径 + 章节核查要点清单文件路径
- **接收的输出**：本 skill 生成的 Markdown 摘要 + 抽取缓存（`05-底稿和附件/文件审阅/*.extract.md`）
- **后续处理**：业务 DD skill 读取摘要里的"跨文件一致性核查"和"疑点记录"，做合规判断并
  写进自己的 DD Memo

## 常见误用 / FAQ

- **Q：可以让本 skill 直接生成 DD Memo 吗？**
  A：不可以。本 skill 是工具，只做文件级的字段抽取和形式瑕疵识别。合规判断必须由业务 DD
  skill 完成。

- **Q：pdf / docx / xlsx 外部 skill 没装怎么办？**
  A：降级策略：纯文本和 markdown 继续用原生 Read；PDF / Word / Excel 无法批量处理时
  提示用户"外部 skill 缺失"，参照 [docs/dependencies.md](../../docs/dependencies.md)
  安装官方 skill；作为**最后兜底**可以用 `scripts/fallback_read.py` 里的 pypdf /
  python-docx / openpyxl 做最简抽取（准确率下降，需律师二次核对）。

- **Q：文件太多一次处理不完怎么办？**
  A：按命名前缀 / 子目录分批；每批 ≤ 20 份文件。多批完成后可做一次总摘要。

- **Q：加密 / 密码保护的文件？**
  A：写入"无法读取文件清单"，提示律师向客户索取密码或原件；不尝试破解。

- **Q：OCR 需要吗？**
  A：对扫描件 PDF 依赖 `pdf` skill 的 OCR 能力；若缺失则标注"扫描件未 OCR"进入无法读取清单。

## 参考资料索引

- [references/common-fields.md](./references/common-fields.md) — 不绑定具体 DD 章节时的
  通用字段抽取清单
- [references/consistency-checks.md](./references/consistency-checks.md) — ECM DD 高频
  跨文件一致性核查场景库
- [references/formal-defects-checklist.md](./references/formal-defects-checklist.md) —
  形式瑕疵检查清单（签字、盖章、日期、页数、清晰度等）
- [scripts/scan_folder.py](./scripts/scan_folder.py) — 目录扫描脚本
- [scripts/fallback_read.py](./scripts/fallback_read.py) — pdf/docx/xlsx 外部 skill 缺失
  时的纯 Python 兜底抽取

## 变更规则

- 输出契约变动（摘要结构）→ **MAJOR**，同步更新所有上游业务 DD skill 对本 skill 的描述
- 新增一致性核查场景 / 新增形式瑕疵 check → **MINOR**
- 脚本兼容性不变的修复 → **PATCH**
