识别图片和发票信息,自动分类重命名,填入报销Excel表格. 支持OpenClaw压缩包场景. Triggers on "发票处理", "报销", "invoice", "报销单".
识别图片和发票中的金额、类型、备注等信息,自动分类重命名发票文件,并填入报销Excel表格。
支持两种运行模式:
图/ 和 发票/ 目录┌─────────────────────────────────────────────────────────────────┐
│ ⚠️ Phase 0: 规范研读 → 阅读 specs + templates (强制前置) │
│ Study │
│ ↓ │
│ [OpenClaw] Phase 0.5: 解压预处理 → 解压zip + 智能结构检测 │
│ ↓ │
│ Phase 1: 文件扫描 → 扫描图片/发票 → invoices-index.json │
│ ↓ │
│ Phase 2: 智能识别 → LLM识别发票内容 → recognition-results.json│
│ ↓ │
│ Phase 2.5: 发票去重 → 基于日期/金额/发票号去重 → deduped-results.json│
│ ↓ │
│ Phase 3: 分类重命名 → 按类别整理+重命名 → renamed-files.json │
│ ↓ │
│ Phase 4: 填充Excel → 写入报销模板 → 输出报销清单 │
│ ↓ │
│ Phase 5: 验证报告 → 交叉校验 + 生成报告 │
│ ↓ │
│ [OpenClaw] Phase 6: 打包回传 → 收集产物打包zip → 发送用户 │
└─────────────────────────────────────────────────────────────────┘
⛔ 禁止跳过: 在执行任何操作之前,必须完整阅读以下文档。
| Document | Purpose | Priority |
|---|---|---|
| specs/invoice-requirements.md | 发票识别规范 + 报销字段映射 | P0 - 最高 |
| specs/quality-standards.md | 质量标准 | P1 |
| Document | Purpose |
|---|---|
| templates/agent-base.md | Agent 基础 Prompt 模板 |
| templates/invoice-prompt.md | 发票识别 Prompt 模板 |
用户指定本地目录,skill 直接扫描 图/ 和 发票/ 子目录。
Phase 1(扫描) → Phase 2(识别) → Phase 3(分类重命名) → Phase 4(填Excel) → Phase 5(验证)
用户通过聊天发送zip压缩包,skill 自动解压、检测结构、处理、打包回传。
Phase 0.5(解压+检测) → Phase 1-5(不变) → Phase 6(打包回传)
触发方式: 用户消息中包含 .zip 文件路径
zip内部结构支持:
图/ + 发票/ 目录 + 报销模板.xlsxconst timestamp = new Date().toISOString().slice(0,19).replace(/[-:T]/g, '');
const workDir = `${projectDir}/invoice-processor/.scratchpad/invoice-${timestamp}`;
Bash(`mkdir -p "${workDir}"`);
Bash(`mkdir -p "${workDir}/context"`);
Bash(`mkdir -p "${workDir}/classified"`);
const timestamp = new Date().toISOString().slice(0,19).replace(/[-:T]/g, '');
const extractDir = `${skillDir}/.scratchpad/invoice-${timestamp}/extracted`;
const workDir = `${skillDir}/.scratchpad/invoice-${timestamp}`;
// Phase 0.5 会自动创建 extractDir 和标准目录结构
{projectDir}/
├── 报销清单.xlsx # 最终输出的报销Excel
├── 发票/ # 已分类重命名的发票
│ ├── 住宿费/
│ ├── 交通费/
│ ├── 办公用品/
│ └── 其他/
├── 图/ # 已分类重命名的图片
│ ├── 住宿费/
│ ├── 交通费/
│ ├── 办公用品/
│ └── 其他/
└── invoice-processor/
└── .scratchpad/
└── invoice-{timestamp}/
├── invoices-index.json
├── recognition-results.json
├── renamed-files.json
└── validation-report.json
invoice-processor/.scratchpad/invoice-{timestamp}/
├── extracted/ # 解压后的标准目录
│ ├── 图/ # 归类的图片
│ ├── 发票/ # 归类的发票/PDF
│ ├── 分类/ # 已分类重命名的文件
│ └── project-config.json
├── invoices-index.json
├── recognition-results.json
├── renamed-files.json
├── validation-report.json
└── 报销处理结果-{timestamp}.zip # 最终回传给用户的zip
| Document | Purpose |
|---|---|
| phases/00-extract-zip.md | Phase 0.5: 解压预处理 (OpenClaw) |
| phases/01-scan-files.md | Phase 1: 文件扫描 |
| phases/02-recognize-invoices.md | Phase 2: 智能识别 |
| phases/02b-dedup-invoices.md | Phase 2.5: 发票去重 |
| phases/03-categorize-rename.md | Phase 3: 分类重命名 |
| phases/04-fill-excel.md | Phase 4: 填充Excel |
| phases/05-validate-report.md | Phase 5: 验证报告 |
| phases/06-pack-results.md | Phase 6: 打包回传 (OpenClaw) |
| specs/invoice-requirements.md | 发票识别规范 |
| specs/quality-standards.md | 质量标准 |
| templates/agent-base.md | Agent 基础模板 |
| templates/invoice-prompt.md | 发票识别 Prompt |
| scripts/extract_zip.py | zip解压+结构检测脚本 |
| scripts/dedup_invoices.py | 发票去重脚本(基于识别信息) |
| scripts/pack_results.py | 结果打包脚本 |
| scripts/fill_excel.py | Excel填充脚本 |
| scripts/rename_files.py | 文件重命名脚本 |
| scripts/ocr_invoices.py | OCR识别脚本 |