返回 Skill 列表
extension
分类: 其它无需 API Key

报销整理

差旅费用报销整理工具;当用户需要整理报销、处理差旅票据、计算机票折扣或生成报销清单时使用

person作者: user_c0c19625hubcommunity

差旅费用报销整理技能

任务目标

  • 本技能用于:根据用户指定文件夹中的文件名,自动整理差旅报销清单
  • 能力包含:文件扫描、数据清洗、费用分类提取、打车费行程提取、机票折扣计算、出差补助计算、票据去重、格式化输出
  • 触发条件:用户提及整理报销、处理差旅票据、计算机票折扣或生成报销清单时触发

前置准备

  • 确保已准备好需要整理的报销文件夹
  • 文件夹中包含打车费账单(PDF格式)、飞机票凭证、住宿费发票等票据文件
  • 确保能够联网查询机票Y舱全价(通过携程网站)

操作步骤

1. 扫描文件夹

读取用户指定的报销文件夹,获取所有文件列表。

2. 数据清洗

对文件名进行清洗,移除数字编号、下划线、括号等内容。

数据清洗规则:

| 清洗项 | 操作 | 示例 | |--------|------|------| | 数字编号 | 移除开头数字 | 020219_维修费维修费 | | 下划线 | 移除 | 维修费_北京维修费 | | 括号内容 | 移除括号及内容 | 维修费(说明)维修费 |

3. 费用分类提取

从文件名中识别并提取:

  • 日期:出发日期、住宿日期范围
  • 行程:城市间交通(如 南京-湛江)、住宿地点
  • 金额:实际支付金额
  • 费用类别:打车费、飞机票、住宿费、其他

4. 打车费行程提取(脚本处理)

使用 pymupdf 读取PDF账单,提取起点和终点信息。

操作方式:

import fitz  # pymupdf

doc = fitz.open(pdf_path)
for page in doc:
    text = page.get_text()
    # 从text中提取起点、终点
doc.close()

行程提取规则:

  1. 使用 pymupdf (fitz) 读取PDF账单(滴滴出行行程报销单、用车电子发票等)
  2. 从PDF中提取起点和终点信息
  3. 简化地点名称:
    • 机场:首都机场、白云机场、大兴机场、浦东机场等
    • 地点:酒店、亦庄、晓港、大学城、黄边、同和等
  4. 如果PDF无法读取,使用文件名中的行程信息
  5. 格式:日期 起点-终点,金额元

示例(从滴滴行程单提取):

起点:亦庄|北京城建·海梓府-北门
终点:北京市大兴区北京大兴国际机场3F国内出发
简化后:亦庄-大兴机场

5. 住宿费信息提取(脚本处理)

使用 pymupdf 读取住宿水单或住宿清单,提取酒店名称、入住日期、退房日期和金额信息。

操作方式:

import fitz  # pymupdf

doc = fitz.open(pdf_path)
for page in doc:
    text = page.get_text()
    # 从text中提取酒店名称、入住日期、退房日期、金额
doc.close()

住宿费提取规则:

  1. 使用 pymupdf (fitz) 读取住宿水单/住宿清单(PDF格式)
  2. 从PDF中提取以下信息:
    • 酒店名称:通常在文档开头或显著位置
    • 入住日期:入住开始日期
    • 退房日期:退房/离店日期
    • 住宿金额:实际支付金额
  3. 从酒店名称中提取城市信息:
    • 酒店名称通常包含城市信息,如"湛江海滨宾馆"、"广州白云宾馆"等
    • 提取城市名:从酒店名称中识别城市关键字
    • 常见城市关键字:湛江、广州、北京、上海、深圳、南京、杭州等
  4. 计算住宿天数:
    • 住宿天数 = 退房日期 - 入住日期
    • 例如:3月4日入住,3月6日退房,住宿2天
  5. 格式化输出:
    • 单个城市住宿:入住日期-退房日期 城市住宿X天,金额
    • 多个城市住宿:入住日期-退房日期 城市,金额;入住日期-退房日期 XX城市住宿X天,金额;合计:总金额

提取示例:

从住宿水单提取:
- 酒店名称:湛江海滨宾馆
- 入住日期:3月4日
- 退房日期:3月6日
- 住宿天数:2天(3月6日 - 3月4日)
- 住宿金额:677.92元
- 提取城市:湛江(从"湛江海滨宾馆"中提取)
- 格式化后(单城市):3月4日-6日 湛江住宿2天,677.92元

多城市住宿示例:
3月4日-6日 湛江住宿2天,677.92元;3月6日-8日 广州住宿2天,856.50元;合计:1534.42元

城市提取规则:

  • 如果酒店名称包含城市关键字,直接提取
  • 如果酒店名称不包含城市,从文档其他位置查找城市信息
  • 如果无法提取城市,使用文件名中的城市信息或提示用户提供

6. 高铁票信息提取(脚本处理)

使用 pymupdf 读取高铁票文件,提取出发日期、出发站、到达站、座次和票价信息。

操作方式:

import fitz  # pymupdf

doc = fitz.open(pdf_path)
for page in doc:
    text = page.get_text()
    # 从text中提取出发日期、出发站、到达站、座次、票价
doc.close()

高铁票提取规则:

  1. 使用 pymupdf (fitz) 读取高铁票文件(PDF格式)
  2. 从PDF中提取以下信息:
    • 出发日期:乘车日期(如2024年3月4日或3月4日)
    • 出发站:出发车站名称(如湛江站、北京西站)
    • 到达站:到达车站名称(如广州南站、上海虹桥站)
    • 座次:座位席别(如二等座、一等座、商务座)
    • 票价:实际支付金额(如165.00元)
  3. 简化站点名称:
    • 去掉"站"字(如"湛江站" → "湛江")
    • 保留具体站名(如"广州南"不简化为"广州")
  4. 格式化输出:
    • 单张票:日期 出发站-到达站高铁票座次,金额
    • 多张票:日期 出发站-到达站高铁票座次,金额;日期 出发站-到达站高铁票座次,金额;合计:总金额

提取示例:

从高铁票PDF提取:
- 出发日期:3月4日
- 出发站:湛江站
- 到达站:广州南站
- 座次:二等座
- 票价:165.00元
- 格式化后:3月4日 湛江-广州南高铁票二等座,165元

多张高铁票:
3月4日 湛江-广州南高铁票二等座,165元;3月6日 广州南-武汉高铁票二等座,463.50元;合计:628.5元

座次说明:

  • 常见座次:二等座、一等座、商务座、特等座等
  • 在输出中保留座次信息,便于核对

7. 机票折扣计算(脚本辅助)

联网查询携程获取Y舱全价,使用脚本计算折扣率。

强制要求:必须在携程查询国航/南航/东航的Y舱全价

查询步骤(携程):

  1. 使用浏览器打开携程机票搜索页面:https://flights.ctrip.com/online/list/oneway-{出发城市代码}-{到达城市代码}?depdate={日期}&cabin=y
  2. 筛选航空公司:中国国航、南方航空、东方航空
  3. 点击航班展开所有产品,找到没有折扣标注的经济舱(即Y舱全价)
  4. Y舱全价 = 该价格(不含机建燃油费)

计算步骤:

  1. 从文件名获取:航线(如 北京-广州)、实际支付金额
  2. 从携程查询Y舱全价
  3. 扣除机场建设费(50元)和燃油附加费(800km以上120元,以下60元)
  4. 计算折扣率
票面价 = 实际支付 - 机建费(50) - 燃油费(120或60)
折扣率 = 票面价 / Y舱全价
折扣显示 = round(折扣率 * 10, 1)折

示例:

  • 北京-广州航线:携程查询国航Y舱全价 = 3360元
  • 实际支付1350元,票面价 = 1350 - 50 - 120 = 1180元
  • 折扣 = 1180 / 3360 = 0.351 → 3.5折

8. 出差补助计算

补助标准: | 城市 | 每日补助 | |------|----------| | 广州、深圳、上海 | 80元/天 | | 其他城市 | 60元/天 |

计算方式:

  • 按开始日期到截止日期计算天数
  • 根据出差城市确定补助标准(从住宿水单提取的城市或用户提供)
  • 补助金额 = 天数 × 日补助标准

9. 票据去重

识别同一笔费用的重复票据,综合对比日期、行程、金额,保留最完整记录。

打车费去重规则:

  • 同一行程的"滴滴出行行程报销单"和"滴滴电子发票"是重复,只保留一个
  • 优先保留行程报销单(含详细行程信息)

租车费去重规则:

  1. 如果存在"租车单"文件,提取其金额作为总费用
  2. 检查是否有其他租车相关发票(如"租车服务费"、"租车费")
  3. 如果 租车单金额 = 其他租车发票金额之和,则判定为重复
  4. 去重处理:只保留租车单,忽略明细发票

示例:

  • 租车单:680.76元
  • 租车服务费发票:199.98元
  • 租车费发票:480.78元
  • 判断:680.76 = 199.98 + 480.78 → 重复
  • 处理:只保留"租车费:3月22日-23日 广州租车,680.76元"

10. 格式化输出

根据使用需求,提供两种输出格式选项:

格式1:标准格式(默认) - 单行紧凑格式

  • 用途:直接复制到报销系统
  • 格式要求:
    费用类别:日期 行程,金额;日期 行程,金额;合计:总金额
    

格式要点:

  • 单行紧凑格式,用分号分隔各项
  • 每项格式:日期 行程,金额元
  • 机票带折扣:金额(X.X折)
  • 最后加"合计:XXX元"
  • 出差补助格式:日期范围,X天,合计:XXX元

格式2:Markdown 表格格式(可选) - 表格化展示

  • 用途:文档展示、人工审核、复制到 Excel
  • 格式要求:
    | 费用类别 | 日期 | 行程 | 金额 |
    |---------|------|------|------|
    | 打车费 | 3月4日 | 湛江机场-酒店 | 109元 |
    | 打车费 | 3月5日 | 环保局-餐厅 | 13.7元 |
    | **打车费小计** | - | - | **122.7元** |
    | 飞机票 | 3月4日 | 南京-湛江 | 1059.78元(6.9折) |
    | **飞机票小计** | - | - | **1059.78元** |
    
  • 每类费用底部添加小计行
  • 最后一行显示总计报销金额

输出格式示例

格式1:标准格式(默认)

打车费:3月4日 湛江机场-酒店,109元;3月5日 环保局-餐厅,13.7元;合计:122.7元

高铁票:3月4日 湛江-广州南高铁票二等座,165元;3月6日 广州南-武汉高铁票二等座,463.5元;合计:628.5元

飞机票:3月4日 南京-湛江,1059.78元(6.9折);合计:1059.78元

住宿费:3月4日-6日 湛江住宿2天,677.92元;合计:677.92元

出差补助:3月4日-6日,3天,合计:180元

---

总计报销金额:2040.4元

格式2:Markdown 表格格式(可选)

| 费用类别 | 日期 | 行程 | 金额 |
|---------|------|------|------|
| 打车费 | 3月4日 | 湛江机场-酒店 | 109元 |
| 打车费 | 3月5日 | 环保局-餐厅 | 13.7元 |
| **打车费小计** | - | - | **122.7元** |
| 高铁票 | 3月4日 | 湛江-广州南高铁票二等座 | 165元 |
| 高铁票 | 3月6日 | 广州南-武汉高铁票二等座 | 463.5元 |
| **高铁票小计** | - | - | **628.5元** |
| 飞机票 | 3月4日 | 南京-湛江 | 1059.78元(6.9折) |
| **飞机票小计** | - | - | **1059.78元** |
| 住宿费 | 3月4日-6日 | 湛江住宿2天 | 677.92元 |
| **住宿费小计** | - | - | **677.92元** |
| 出差补助 | 3月4日-6日 | 湛江(3天) | 180元 |
| **出差补助小计** | - | - | **180元** |
| **总计** | - | - | **2040.4元** |

资源索引

使用示例

示例1:简单差旅报销整理

  • 用户输入:帮我整理 D:\Work\报销\2024年3月出差
  • 操作步骤:
    1. 扫描文件夹获取所有票据文件
    2. 对文件名进行数据清洗
    3. 提取各费用的日期、行程、金额信息
    4. 读取打车费PDF提取行程信息
    5. 读取住宿水单提取酒店名称、日期、金额和城市信息
    6. 读取高铁票提取出发站、到达站、座次和票价
    7. 联网查询携程获取机票Y舱全价
    8. 使用脚本计算机票折扣率
    9. 根据城市和天数计算出差补助
    10. 去重处理
    11. 按标准格式输出报销清单(可选择标准格式或Markdown表格格式)
  • 预期产出:按格式输出各类费用的明细和总计

示例2:机票折扣计算

  • 场景:需要计算南京-湛江航线的机票折扣
  • 操作:
    1. 从文件名获取航线和实际支付金额
    2. 使用 browser 工具访问携程机票页面
    3. 筛选国航/南航/东航,找到Y舱全价
    4. 调用脚本:python scripts/discount_calculator.py --actual 1059.78 --construction 50 --fuel 10 --full 1530
    5. 脚本返回折扣率
  • 预期产出:1059.78元(6.5折)

示例3:住宿费信息提取

  • 场景:需要从住宿水单提取酒店信息
  • 操作:
    1. 使用 pymupdf 读取住宿水单PDF文件
    2. 从文本中提取酒店名称(如"湛江海滨宾馆")
    3. 提取入住和退房日期(如3月4日-3月6日)
    4. 计算住宿天数(退房日期 - 入住日期,如2天)
    5. 提取住宿金额(如677.92元)
    6. 从酒店名称中提取城市信息("湛江海滨宾馆" → 湛江)
    7. 格式化为:入住日期-退房日期 城市住宿X天,金额
  • 预期产出:3月4日-6日 湛江住宿2天,677.92元
  • 多城市住宿示例:3月4日-6日 湛江住宿2天,677.92元;3月6日-8日 广州住宿2天,856.50元;合计:1534.42元

示例4:高铁票信息提取

  • 场景:需要从高铁票PDF提取票据信息
  • 操作:
    1. 使用 pymupdf 读取高铁票PDF文件
    2. 从文本中提取出发日期(如3月4日)
    3. 提取出发站和到达站(如湛江站、广州南站)
    4. 提取座次(如二等座)
    5. 提取票价(如165.00元)
    6. 简化站点名称(去掉"站"字)
    7. 格式化为:日期 出发站-到达站高铁票座次,金额
    8. 多张高铁票累加金额并计算合计
  • 预期产出:3月4日 湛江-广州南高铁票二等座,165元;3月6日 广州南-武汉高铁票二等座,463.5元;合计:628.5元

注意事项

  • 输出格式选择:默认使用标准格式(单行紧凑),如需Markdown表格格式请在请求中说明
  • 机票全价必须在携程查询Y舱,不能使用参考表或估算值
  • 打车费行程从PDF提取,使用 pymupdf 读取滴滴行程单
  • 住宿费信息从PDF提取,使用 pymupdf 读取住宿水单,从酒店名称提取城市信息,住宿天数 = 退房日期 - 入住日期
  • 高铁票信息从PDF提取,使用 pymupdf 读取高铁票,提取出发站、到达站、座次和票价
  • 出差补助按城市分类:广州/深圳/上海 80元,其他 60元
  • 日期格式统一:如"3月4日"、"3月4日-6日"
  • 金额保留1-2位小数
  • 标准格式严格按示例输出,单行紧凑,分号分隔
  • 住宿费必须显示住宿天数:格式为入住日期-退房日期 城市住宿X天,金额
  • Markdown表格格式需包含小计行,每类费用底部汇总
  • 票据去重要谨慎,确保不遗漏或重复计算

常见陷阱

  1. 机票折扣计算错误:如果未正确扣除机建费和燃油费,会导致折扣率计算错误
  2. 打车费行程提取失败:PDF格式不标准或编码问题可能导致无法读取,此时使用文件名中的行程信息
  3. 住宿费城市提取错误:酒店名称可能不包含城市信息,需要从文档其他位置查找或用户提供
  4. 票据误判为重复:租车费去重时,如果租车单金额与发票金额不完全相等,可能导致误判
  5. 日期格式不统一:混用不同日期格式会导致输出不规范
  6. 金额计算精度丢失:保留小数位数不一致会导致合计金额不准确

关键技术说明

PDF读取(打车费行程):

  • 使用 pymupdf (fitz) 库读取PDF文件
  • 从提取的文本中解析起点和终点信息
  • 简化地点名称以保持格式统一

PDF读取(住宿费信息):

  • 使用 pymupdf (fitz) 库读取住宿水单PDF
  • 提取酒店名称(通常在文档开头或显著位置)
  • 提取入住日期、退房日期和住宿金额
  • 计算住宿天数:天数 = 退房日期 - 入住日期
  • 从酒店名称中提取城市信息(如"湛江海滨宾馆" → 湛江)
  • 格式化输出:入住日期-退房日期 城市住宿X天,金额

PDF读取(高铁票信息):

  • 使用 pymupdf (fitz) 库读取高铁票PDF
  • 提取出发日期、出发站、到达站、座次、票价
  • 简化站点名称(去掉"站"字,保留具体站名)
  • 支持多张高铁票累加金额

机票Y舱查询(携程):

  • 必须联网查询,不能使用固定价格表
  • 使用 browser 工具打开携程机票页面
  • 筛选特定航空公司(国航、南航、东航)
  • 找到无折扣标注的经济舱价格作为Y舱全价

折扣率计算:

  • 可使用脚本辅助计算:python scripts/discount_calculator.py --actual <实际支付> --construction <机建费> --fuel <燃油费> --full <全价>
  • 或手动计算:票面价 = 实际支付 - 机建费 - 燃油费,折扣率 = 票面价 / 全价