报销发票整理与报销单生成
适用场景
- 月底/差旅结束后攒了一堆发票,需要分类、汇总、填报销单
- 想在提交前自查:有没有重复发票、缺信息的票、金额对不上的票
- 需要一份按分类+日期排好序的「贴票清单」,照着顺序贴票不返工
- 需要报销单草稿(含分类小计、总额、人民币大写),直接誊抄进公司 OA/纸质单
核心能力
- 发票信息归集:支持两种来源——①用户提供发票图片/PDF 时,由 AI 先逐张识别出「日期/类型/商家/金额/发票号」;②用户直接口述或粘贴发票清单。统一整理为结构化 JSON 后交脚本处理。
- 自动分类:脚本按商家/备注关键词自动归类为 交通/餐饮/住宿/办公/通讯/其他 六类,已有分类的条目不覆盖。
- 重复与存疑检测:发票号相同、或「日期+商家+金额」完全一致的条目判为疑似重复;缺日期、缺金额、金额≤0、金额无法解析的条目进存疑清单,不计入合计。
- 报销单草稿:分类汇总表 + 明细表 + 合计金额 + 人民币大写,可直接誊抄。
- 贴票清单:按「分类→日期」排序编号,照单贴票。
输入规范(缺失主动引导)
脚本输入为 JSON(模板见 references/input_template.json):
{
"applicant": "张三",
"department": "市场部",
"period": "2026年7月",
"purpose": "7月华东客户拜访差旅",
"invoices": [
{"date": "2026-07-08", "vendor": "滴滴出行", "amount": 45.6, "type": "", "invoice_no": "044001900111", "note": "机场往返"}
]
}
- 必填:
invoices(每条至少含vendor+amount;date强烈建议提供) - 可选:
applicant/department/period/purpose(缺失时报销单表头留空占位)、type(留空自动分类)、invoice_no(提供才能做发票号查重) - 缺失引导:若用户只给了发票图片,先识别再确认金额;若用户只说「帮我整理报销」,应追问:报销人/所属期间/发票清单(或图片)。金额识别不清的票必须向用户确认,禁止编造。
处理流程
- 收集/识别发票信息,组装输入 JSON,存为临时文件(如
input.json) - 运行脚本:
bash python scripts/organize_reimbursement.py --input input.json # 或指定输出文件 python scripts/organize_reimbursement.py --input input.json --output 报销单.md - 脚本输出完整 markdown 报告(报销单草稿 + 贴票清单 + 存疑清单 + 复核提示),将结果原样呈现给用户
- 若存在存疑项,提醒用户逐条确认后重跑
脚本参数
| 参数 | 说明 |
|---|---|
input.json(位置参数)或 --input |
JSON 输入;二者二选一,缺省读 stdin(编码自动 utf-8-sig/gbk 兜底) |
--output |
写入文件;缺省打印到 stdout |
--unit |
金额单位(默认 元),用于表头与结论 |
--selftest |
运行内置自检(无需输入),退出码 0/4 |
输出格式
- 报销单草稿:表头(报销人/部门/期间/事由)、分类汇总表(类别/张数/金额/占比)、费用明细表、合计(数字 + 人民币大写)
- 贴票清单:按分类+日期排序的编号清单(贴票顺序即此顺序)
- 存疑清单:疑似重复票、缺失信息票,均标注原因,不计入合计
- 复核提示:提交前自查要点
边缘用例(v1.0.3 已覆盖)
- 金额写成「58元」「¥58」或带千分位「1,234」→ 自动剥离后参与计算
- 日期写成「2026/07/08」「2026.07.08」→ 规范化为
2026-07-08;缺失日期 → 进存疑清单(不再被误判为有效) - 金额非法(如「abc」)/ 负数 / 为零 → 进存疑清单,不计入合计
- 同发票号重复、或「日期+商家+金额」完全一致 → 判疑似重复
- 合计为 0 → 大写正确显示「零元整」
- 亿级超大金额 → 人民币大写不溢出(含「亿」单位)
- 空发票清单 → 友好提示,不生成空报销单
异常处理
invoices为空或非法 JSON:报错并提示补充发票清单(退出码 2/3)- 金额无法解析(含非数字字符):该条进存疑清单并注明原因
- 全部条目均存疑:输出存疑清单并提示先补齐信息,不生成空报销单
自检
修改脚本后先跑一遍,确认无回归:
python scripts/organize_reimbursement.py --selftest
适用限制与免责声明
- 本技能只做信息整理与草稿生成,不验真发票(真伪需在税务平台查验)、不对接任何报销系统
- 各公司报销制度(额度、票据要求、审批流)不同,产出仅为草稿,以贵司财务制度为准
- AI 识别发票图片可能有误差,提交前请逐张核对金额与发票号