---
name: ecm-setup-file-classify
description: >
  资本市场项目文件批量分类 Skill。对客户提供的尽调文件（通常先存放在项目 02-99-未分类文件 目录）进行批量阅读和理解，为每个文件分配一个或多个分类标签，输出"文件→标签"和"标签→文件"两张映射表。触发场景：客户发来一堆文件让我分类、帮我给这些尽调文件打标签、批量文件分类、文件分类打标签、梳理客户资料、为文件归位做准备、自动识别文件类型、给 DD 资料分章节等。支持一份文件同时属于多个标签（many-to-many）。注意：本 skill 只输出分类结果，不做物理移动——移动由 ecm-setup-file-organize 完成。
version: 0.1.0
license: MIT
module: ecm-setup
user_role: 项目组律师
phase:
  - 启动阶段
category:
  - 项目管理
  - 文件处理
depends_on:
  external_skills:
    - pdf       # 读取 PDF 文件
    - xlsx      # 读取 Excel 文件
    - docx      # 读取 Word 文件
  internal_skills: []
---

# ecm-setup-file-classify

## 定位与边界

本 skill **负责**：
- 扫描指定目录（默认 `02-99-未分类文件/`）下所有文件
- 逐个阅读文件内容，基于内容判断其属于哪些分类标签
- 允许一份文件同时贴多个标签（many-to-many）
- 输出两张表：按文件分类、按标签分组
- 主动提示异常（版本重复、类别缺失、标签过多）

本 skill **不负责**：
- **物理移动或复制文件**（由 `ecm-setup-file-organize` 做）
- 对文件内容做尽调性质的实质分析（由 `ecm-dd-*` 系列做）
- 读取加密文件或损坏文件（遇到时跳过并记录）

## 免责声明

本 skill 的分类结果仅供律师参考，**不构成**对文件法律性质的最终判断。律师需复核分类结果的合理性，并在 `file-organize` 前确认。完整免责声明见仓库顶层 [DISCLAIMER.md](../../DISCLAIMER.md)。

## 资深律师执行标准

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

## 本 skill 的实务加固点

- **一文多标签**：同一文件同时涉及历史沿革、股东、批准授权或资产权属时必须多标签，不得强行单一归类。
- **低置信度显性化**：文件名模糊、扫描件无法读取、缺页或版本不明时，必须进入“待人工确认”而非自动归类。
- **关键底稿识别**：营业执照、章程、三会文件、验资/评估、工商档案、产权证书、处罚文书应优先标注为核心底稿。
- **不改变文件事实**：分类只标注位置和标签，不得改写文件名称中的日期、主体、文号或版本。

## 前置依赖

- 标签体系：[shared/terminology/classification-labels.md](../../shared/terminology/classification-labels.md)（**唯一权威**来源）
- 目录结构（用于推断默认扫描目录）：[shared/templates/project-folder-structure.md](../../shared/templates/project-folder-structure.md)
- 外部 skill：`pdf` / `xlsx` / `docx`（见 [docs/dependencies.md](../../docs/dependencies.md)）

---

## 核心原则

**一份文件可以（且经常）属于多个标签**。不要在分类阶段把文件硬分到"唯一最合适"的标签——这会导致下游 DD skill 丢失应有输入。

常见多标签组合：

| 文件 | 应贴的标签 |
|------|----------|
| 公司章程 | `entity` + `charter` |
| 涉及股权调整的股东会决议 | `approval` + `shareholders` + `history` |
| 增资协议 | `history` + `approval` |
| 环评批复（募投项目的） | `environment` + `fundraising` |
| 资产评估报告（股权转让用） | `history` + `assets` |

---

## 输入

1. **目标文件夹路径**（必填）：包含待分类文件的目录
   - 默认约定：`{项目根目录}/02-尽职调查/02-99-未分类文件/`
   - 也支持指向其他目录（比如律师把客户临时发来的文件放在桌面某处）
2. **文件类型清单**（可选）：用户可提前告知"这批主要是工商类文件"等预先缩小范围
3. **扫描深度**（可选）：是否递归子目录，默认递归

---

## 处理流程

### 步骤 1：扫描目录

```bash
find "{目标目录}" -type f -not -name ".*"
```

记录：文件名、扩展名、相对路径、大小。

### 步骤 2：批量阅读

按文件类型选择读取方式：

| 扩展名 | 读取方式 |
|-------|---------|
| `.pdf` | 调用 `pdf` skill 提取文本；扫描件请求用户先 OCR 或基于文件名判断 |
| `.docx` / `.doc` | 调用 `docx` skill 提取文本 |
| `.xlsx` / `.xls` / `.csv` | 调用 `xlsx` skill 读取第一个 sheet 的前 N 行，判断类型 |
| `.txt` / `.md` | 直接 Read |
| `.jpg` / `.png` | 仅基于文件名推测，或提示用户 OCR |
| 其他 | 跳过，记录到"无法识别"列表 |

**批量控制**：单批最多处理 10–20 个文件，避免上下文过载。大批量（>50 个文件）分批处理，每批输出一次中间结果。

### 步骤 3：判断标签

对每个文件，结合**文件名 + 文件内容的前若干段**，比对 [shared/terminology/classification-labels.md](../../shared/terminology/classification-labels.md) 的"典型文件"列，给出 1–3 个标签。

**标签数量约束**：
- 典型：**1 个**标签（单一章节明确）
- 常见：**2–3 个**标签（跨章节，如章程 = entity + charter）
- 异常：**超过 3 个**标签（"综合资料包"文件），**必须在输出中提示律师拆分**
- 失败：**0 个**标签（无法识别），归入"未分类"，提示人工判断

**消歧规则**：
- 若看起来既属 `tax` / `environment` / `litigation` 中某个具体类，又属兜底 `compliance`——**选具体类，不选 compliance**（`compliance` 只用于真正的兜底）
- 若看起来既属 `financial`（审计报告、财务报表），也能支撑某个具体 DD 章节——贴 `financial`，并按需追加具体章节标签（例：某份审计报告里单独的"或有负债说明"可以 `financial` + `debt`）

### 步骤 4：生成输出

见下方"输出格式"章节。

### 步骤 5：异常提示

在输出的"特殊情况说明"段落主动列出：

- **版本重复**：`xxx.pdf` 和 `xxx(旧版).pdf` 并存——请确认哪份是现行有效
- **类别缺失**：未发现任何 `{某标签}` 相关文件——建议向客户补充索取
- **标签过多**：某文件被贴了 >3 个标签——建议在 organize 前拆分
- **无法识别**：扫描件/加密文件/损坏文件清单——建议 OCR 或让客户重新提供
- **文件名与内容不符**：文件名"营业执照.pdf"但内容是章程——以内容为准，并提醒律师核实

---

## 输出格式

严格按以下模板输出，**所有三个章节必须都有**（即使某节为空也要保留标题并注明"无"）。

````markdown
# 文件分类结果

**扫描目录**：`{绝对路径}`
**扫描时间**：{YYYY-MM-DD HH:MM}
**文件总数**：{N}
**成功分类**：{M}
**未分类**：{N - M}

## 1. 按文件分类（File → Tags）

| 序号 | 文件名 | 标签 | 备注 |
|:---:|:------|:-----|:-----|
| 1 | 公司章程.pdf | entity, charter | 现行有效版本（2024 修订） |
| 2 | 2023 年第一次临时股东会决议.pdf | approval, shareholders | 涉及股权结构调整 |
| 3 | 营业执照.pdf | entity | |
| ... | ... | ... | ... |

## 2. 按标签映射（Tag → Files）

### approval
- 2023 年第一次临时股东会决议.pdf
- 董事会关于本次发行的决议.pdf

### entity
- 公司章程.pdf（另含 charter 标签）
- 营业执照.pdf

### charter
- 公司章程.pdf（另含 entity 标签）
- 三会议事规则.pdf

### shareholders
- 股东名册 2024Q4.xlsx
- 2023 年第一次临时股东会决议.pdf（另含 approval 标签）

### history
- ...

（其他标签类似展开；无文件的标签不列出，放在第 3 节的"类别缺失"提示）

## 3. 特殊情况说明

### 版本重复
- `公司章程.pdf` 和 `公司章程（旧版）.pdf` 并存，建议确认现行有效版本

### 类别缺失
- 未发现任何 `litigation` 相关文件——建议向客户补充索取"无诉讼/仲裁/处罚证明"
- 未发现任何 `environment` 相关文件——如业务涉及生产制造，建议索取环评批复等

### 标签过多
- `综合资料包.pdf` 贴了 5 个标签（entity/history/business/assets/related-party），建议在 organize 前拆分

### 无法识别
- `扫描件 001.pdf` 至 `扫描件 005.pdf` 为图片扫描件，未做 OCR 无法判断；建议先 OCR 或由客户重新提供电子版
- `<加密文件>.pdf` 需要密码

### 文件名与内容不符
- 文件名 `营业执照.pdf` 但内容是公司章程——以**内容**为准，已按 `entity + charter` 分类；建议核实文件名
````

---

## 性能与执行策略

| 文件量 | 策略 |
|-------|------|
| ≤ 20 个 | 单次处理，一次性输出完整结果 |
| 20–50 个 | 单次处理可以，但输出可能较长，考虑先输出第 1 节，再输出第 2 节 |
| 50–200 个 | 分批处理，每批 20 个，中间阶段性输出；最后做合并汇总 |
| >200 个 | 建议律师先自己按"明显类型"做一次粗分（例如"这 80 个都是工商类"），再按批量跑 |

## 与 `file-organize` 的接口

本 skill 的输出（第 1 节、第 2 节的表格）是 `file-organize` 的直接输入。用户可以：

- 直接在同一对话里说"按上面的分类结果做 organize"
- 或把分类结果保存为文件再传给 organize（例如 `classification.md`）

分类结果**不要手工编辑**——如果律师发现个别分类有误，应重新跑本 skill 或在对话里局部修正（"把 3 号文件的标签改成 xxx"），再交给 organize。

---

## FAQ

**Q：如果客户的文件夹结构已经自己分过类了（例如他们已经按"1. 工商"、"2. 财务"建了子目录）？**
A：本 skill 仍然按内容重新打标签，不依赖客户的目录结构。但要在"特殊情况说明"里标注"客户提供了初步分类，本 skill 分类结果与客户分类的差异"。

**Q：PDF 扫描件没做 OCR 怎么办？**
A：仅凭文件名推测标签，并在"无法识别"段标注。文件名不明确时贴 `internal`（默认进入 `00-项目管理和沟通/`，由律师复核）。

**Q：能不能自动做 OCR？**
A：本 skill 不内置 OCR 能力。如果 PDF 是可搜索型（扫描件 + 内嵌文本层）`pdf` skill 能直接读；若是纯图片型，提示律师用外部 OCR 工具或 macOS 内置 OCR 先处理。
