# Invoice Reimbursement

> 发票报销助手。用于处理出差报销相关的 PDF 发票，自动提取金额并分类为车票、住宿费、 打车费，并内置差旅补助标准自动计算城市补贴。生成 Excel 报销汇总表。 触发词：发票报销、报销发票、出差报销、整理发票、reimbursement、报销汇总、 帮我报销、发票识别。

- Skill: `halseyyang/invoice-reimbursement` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add halseyyang/invoice-reimbursement`
- Raw SKILL.md: https://api.skillmd.com/api/skills/halseyyang/invoice-reimbursement/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: halseyyang (https://skillmd.com/u/halseyyang)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/halseyyang/invoice-reimbursement

---


# 发票报销助手

## 功能概述

处理出差报销工作流：解析 PDF 格式的车票、住宿费、打车费发票 → 自动分类提取金额 →
根据城市类别计算差旅补助 → 生成 Excel 报销汇总表。

## 四板块报销结构

| 板块 | 数据来源 | 自动化 |
|------|---------|--------|
| 车票（机票/高铁/大巴） | PDF 发票 | 自动提取金额 + 分类 |
| 住宿费 | PDF 发票 | 自动提取金额 + 分类 |
| 打车费 | PDF 发票 | 自动提取金额 + 分类 |
| 差旅补助 | 城市 + 天数 | 自动匹配城市等级计算 |

## 工作流程

### 第一步：接收用户输入

用户提供：
- 一个或多个 PDF 发票文件（车票、住宿费、打车费相关）
- 可选：出差城市和天数（如果 PDF 中无法读取，用户手动告知）

向用户确认：
- 出差城市（如 "北京"）
- 出差天数（如 2.5 天，不满 1 天按 0.5 天算）
- 如果 PDF 文件数量较多，提醒用户确认

### 第二步：解析 PDF 发票并自动分类

使用 `scripts/reimbursement.py` 脚本处理所有 PDF：

```
python scripts/reimbursement.py --pdfs <pdf1> <pdf2> ... --city <城市> --days <天数> --output <输出路径>
```

脚本完成以下工作：
1. **提取文本**：使用 pdfplumber 提取 PDF 中的文本
2. **识别金额**：匹配金额模式（如 "¥XXX.XX"、"合计 XXX.XX" 等）
3. **自动分类**：根据关键词识别发票类型
   - **车票**：含 "铁路"、"高铁"、"机票"、"航空"、"客车"、"大巴"、"火车票" 等
   - **住宿费**：含 "酒店"、"住宿"、"宾馆"、"旅店"、"房费"、"客房" 等
   - **打车费**：含 "滴滴"、"出租车"、"打车"、"快车"、"专车"、"花小猪"、"T3" 等
   - **保险**：含 "保险"、"意外险"、"保单"、"保费"、"众安" 等（优先级最高，避免"航空意外险"被"航空"关键词误判为车票）
   - **附件**：行程单/行程报销单（如"滴滴出行行程报销单"）本身不是发票，金额与对应电子发票重复，标记为附件、金额计 0，不重复计入总额
   - 滴滴/网约车电子发票票面含"旅客运输服务/客运"字样，优先归为打车费
4. **城市匹配**：从 PDF 文本中尝试读取出发/到达城市信息
5. **补助计算**：根据城市等级和天数，参考 `references/city_standards.md` 计算差旅补助

### 第三步：差旅补助计算规则

参考 `references/city_standards.md` 中的城市分类表：

| 等级 | 城市 | 补助标准 |
|------|------|----------|
| A类 | 北京市 | 200元/天 |
| B类 | 上海市、广州市、深圳市 | 200元/天 |
| C类 | 省会城市、杭州市、苏州市、宁波市、青岛市、昆山市、厦门市、东莞市、佛山市 | 150元/天 |
| D类 | 其他二线城市 | 150元/天 |
| E类 | 三线城市 | 150元/天 |

计算规则：
- 补助金额 = 对应天数 × 城市日补助标准
- 不满 1 天按 0.5 天计算
- 如果用户同时去了多个城市，按天数分别计算后求和

### 第四步：生成 Excel 报销汇总表

脚本自动生成 Excel 文件，包含两个 Sheet：

**Sheet 1 - 报销汇总**：
| 序号 | 类别 | 发票名称/说明 | 金额（元） | 日期 | 备注 |
|------|------|-------------|-----------|------|------|
| 1 | 车票 | xxx | xxx | xxx | 系统分类 |
| 2 | 住宿费 | xxx | xxx | xxx | 系统分类 |
| ... | ... | ... | ... | ... | ... |
| | 小计 | 各分类小计 | | | |

**Sheet 2 - 差旅补助**：
| 出差城市 | 城市等级 | 天数 | 日补助标准 | 补助金额 |
|----------|---------|------|-----------|---------|

底部显示合计金额。

### 第五步：校对与确认

- 展示提取结果给用户确认
- 如果分类错误，用户可手动纠正
- 确认后输出最终 Excel 文件

## 注意事项

1. **PDF 质量**：扫描件/图片型 PDF 需要先 OCR，脚本会尝试使用 pdfplumber 提取文本，如果遇到图片型 PDF 会提示用户
2. **金额识别**：优先提取 "合计金额" / "价税合计" 等明确的汇总数字
3. **打车的特殊处理**：滴滴等网约车发票可能是行程单格式，需要按总金额汇总
4. **多城市出差**：如果多个城市，请让用户分别说明每个城市的天数
5. **不满一天**：自动折算为 0.5 天

## 依赖安装

使用前需安装依赖：

```bash
pip install pdfplumber openpyxl jieba
```

