发票凭证梳理 · 差旅报销表生成(通用模板)
> 本技能为脱敏后的通用版本,可直接发布与分发。所有示例数据均为虚构,仅用于说明格式。
版本信息
- 当前版本:v1.1
- 创建日期:2026-09-02
- 来源:由真实差旅报销整理任务沉淀,已脱敏为通用模板
- 变更记录:v1.1 移除所有个人/企业/发票真实数据,示例改为虚构样例,安装命令改为环境无关写法
技能描述
将"一个文件夹里的发票 + 付款凭证"自动梳理成一张规范的差旅费用报销申请表。核心是:
1. 解析发票 PDF 与付款凭证图片,提取关键字段;
2. 按金额/销售方/业务类型把发票与付款凭证对应;
3. 无对应发票的付款凭证记为独立费用明细;
4. 生成带对账校验、关键字段解读、打印样式的 HTML 报销表。
适用场景
- 用户发来一个文件夹(或"桌面 XX 报销"目录),内含电子发票 PDF + 微信/支付宝/银行付款截图;
- 用户要求"帮我整理报销材料""生成报销申请表""把发票和付款凭证梳理成表";
- 后续差旅报销任务统一走本流程。
核心规则(务必遵守)
规则 1:发票 ↔ 付款凭证匹配
- 有对应:发票金额 == 付款凭证金额,且销售方/收款方业务一致 → 合并为一条付款明细(同一行同时填发票号 + 付款信息)。
- 无对应:仅有付款凭证、无发票 → 记为一条费用明细,凭证类型标"付款截图",备注标"无票/待开票"。
- 匹配判断要点:
- 机票:微信「携程/飞猪等平台」支付(商品"单程 上海-成都")→ 对应"代订机票"电子发票(销售方为票务代理公司)。
- 酒店:微信「酒店集团/OTA 平台」支付 → 对应"住宿费"发票(发票销售方可能是实际酒店主体,付款凭证收款方写的是平台/集团,属同一连锁,需业务判断)。
- 高速/地铁/打车/加油/租车:通常无对应发票 → 独立费用明细。
规则 2:无票支出分类与"待补开"提示
| 类型 | 处理建议 |
|---|---|
| 高速 ETC 过路费 | 🟡 待开票(ETC 月结可一次性开票) |
| 滴滴/打车 | 🔴 可 App 申请电子发票 |
| 加油 | 🔴 加油站可现场/App 补开 |
| 酒店(OTA 代订) | 🔴 可向实际酒店补开 |
| 租车 | 🔴 租车平台可补开 |
| 小额餐饮 | 🔴 可放弃开票走无票支出 |
> 金额请使用真实凭证数据,上表为分类口径示例,不内置任何具体金额。
规则 3:数字对账校验(必须执行)
- 校验式:付款凭证总额 = 有票金额 + 无票金额
- 发票侧校验:价税合计 = 不含税金额 + 税额(常见 6%/1% 税率时成立)
- 输出里必须打印三数,证明平衡,否则视为未完成任务。
规则 4:差旅补贴(按需测算,可选)
- 若所在单位有差旅补贴政策,可按出差天数测算;交通类支出(高速/打车/加油/租车)可作抵扣凭证。
- 补贴标准请依据使用方公司制度填写(示例口径:出差满 N 天可申领交通补贴)。
- 仅当用户明确要求"测算补贴"时执行,默认不主动算。
工作流程(逐步)
步骤 1:盘点输入
ls "<文件夹路径>"
确认:发票 PDF 数量、付款凭证图片数量、文件名是否含发票号/金额/日期/销售方(如 其他_1120.00元_2026.07.27_XX旅行社_26317..._.pdf)。
步骤 2:发票 PDF 解析(用 pypdf,不要用 pdfplumber)
> 沙箱内 pdfplumber 经常因网络超时安装失败;pypdf 轻量稳定(实测 6.x,约 10 秒装好)。
# 用任意 Python 环境(建议虚拟环境)安装 pypdf
python -m pip install pypdf
from pypdf import PdfReader
r = PdfReader("xxx.pdf")
print(r.pages[0].extract_text())
提取字段:发票号码、开票日期、购买方名称+税号、销售方名称+税号、项目名称、金额、税率、税额、价税合计、开票人、发票类型(增值税专票/电子普票)。
> 国内电子发票 PDF 文本大多可被 pypdf 抽取,字段排版可能乱,需人工拼读(如"24412000000XXXXXXX / 2026年07月22日"分行)。
步骤 3:付款凭证图片解析(用 Read 工具直接读 JPG)
- 直接
Read微信/支付宝账单截图,模型可识别:支付时间、金额、商品说明、收款方全称、订单号、分类。 - 高速 ETC 截图含多笔进出站记录,需逐笔累加。
步骤 4:匹配 + 生成结构化明细
- 把每条记录归并为一行,字段见「输出物 → 字段定义」或
scripts/sample_input.json。 - 标注
发票号有/无、证据(图片文件名 + 是否含发票)、备注(待开票/无票/已对应)。
步骤 5:对账校验(打印三数)
见规则 3。
步骤 6:生成 HTML 报销表
- 用随附脚本
scripts/build_report.py(读 JSON 明细 → 输出 HTML):
python scripts/build_report.py input.json 差旅费用报销申请表.html - 或手写 HTML(参考脚本模板):含表头元信息、明细表(带分组小计 + 合计)、对账摘要、重要说明、签字栏、打印样式。
- 输出路径放在用户 workspace 或指定文件夹,命名:
差旅费用报销申请表_<抬头简称>_<年月>.html。
关键字段解读(保留在输出里)
| 维度 | 字段 | 解读要点 |
|---|---|---|
| 公司抬头 | 购买方名称 + 税号 | ⚠️ 不同批次发票抬头可能不同,必须先核对再填表,防止多家公司混报销 |
| 发票类型 | 增值税专票 / 电子普票 | 影响可否抵扣税款 |
| 税率税额 | 6% / 1% 等 | 验证 价税合计 = 不含税 + 税额 |
| 付款时间 vs 开票时间 | 两个日期 | 先消费后开票属正常,匹配时以"金额+销售方"为主 |
| 行程 | 发生日期序列 | 若跨多段需提示用户是否拆成多张表 |
踩坑与注意事项
- PDF 库选择:pdfplumber 装不上就换 pypdf,不要死磕。
- Read 图片识别:当前模型对账单截图识别良好;若某张识别异常,重试一次或换读相邻截图交叉验证。
- 酒店发票 vs 付款凭证主体不一致:付款凭证收款方常写"集团/平台",发票销售方写实际酒店名,属正常,靠订单号/金额匹配,不要误判为"不对应"。
- 高速过路费多笔合并:ETC 截图一图多笔,务必逐笔列出或明确"共 N 笔 ¥X.XX",避免漏算。
- 抬头核对:每次都先确认发票抬头公司,再往表头填,防止多家公司混报销。
- 不打断式提问:先出完整表 + 标注待确认项,最后一次性列出需用户拍板的问题(抬头/行程/补贴)。
输出物
- 主交付:
差旅费用报销申请表_<抬头>_<年月>.html(可浏览器打开、可打印 PDF) - 源文件:不动原始文件夹,仅读取
- 随附脚本:
scripts/build_report.py(JSON 明细 → HTML) - 示例数据:
scripts/sample_input.json(虚构样例,供格式参考,可直接改后运行)
关联任务
本技能用于"差旅报销"主流程:
1. 出差前/中 → 收集发票 PDF 与付款截图;
2. 用本技能梳理成表;
3. 如需补贴测算、清单汇总、凭证重命名,可结合相应脚本或工具二次处理。