Install
openclaw skills install travel-expense-reimbursement自动化差旅费用报销流程,支持12306火车票、携程机票/酒店、华住会酒店等电子发票的自动获取、解析和报销提交
openclaw skills install travel-expense-reimbursement本技能依赖以下技能完成工作:
| 技能 | 用途 |
|---|---|
| himalaya | 邮件访问、搜索12306邮件、下载PDF附件 |
| pdf-ocr | PDF/图片OCR文字提取、发票信息解析 |
| pincer-runtime | 报销系统自动化提交(底层使用 browser 工具实现浏览器自动化操作) |
/by/.uiagent/files//by/.uiagent/files/
├── inbox/ # 存放从邮箱下载的原始PDF
│ ├── railway/ # 12306火车票
│ ├── flight/ # 携程机票
│ ├── hotel_ctrip/ # 携程酒店
│ ├── hotel_huazhu/ # 华住会酒店
│ └── meituan/ # 美团发票
├── processed/ # 存放已解析的发票数据
├── output/ # 存放生成的报销文件
└── config.json # 配置文件(邮箱、报销系统账号等)
inbox/ 各子目录从 config.json 读取以下配置:
email_account: 邮箱账号配置(供himalaya使用)reimbursement_system: 报销系统配置(供pincer-runtime使用)company_info: 购买方信息(统一社会信用代码、公司名称)如果 config.json 不存在或配置不完整:
使用 himalaya 搜索发件人为 "12306" 的邮件:
himalaya envelope list "from 12306"
对于每封找到的邮件:
himalaya attachment download <message_id> 下载附件inbox/railway/ 目录使用 himalaya 搜索发件人含 "携程" 且主题含 "机票" 或 "行程单" 的邮件:
himalaya envelope list "from 携程"
然后过滤主题包含"机票"、"行程单"、"航班"的邮件
对于每封符合条件的邮件:
himalaya attachment download <message_id> 下载附件inbox/flight/ 目录使用 himalaya 搜索发件人含 "携程" 且主题含 "酒店" 或 "住宿" 的邮件:
himalaya envelope list "from 携程"
然后过滤主题包含"酒店"、"住宿"、"订单确认"的邮件
对于每封符合条件的邮件:
himalaya attachment download <message_id> 下载附件inbox/hotel_ctrip/ 目录使用 himalaya 搜索发件人含 "华住" 或 "华住会" 的邮件:
himalaya envelope list "from 华住"
对于每封找到的邮件:
himalaya attachment download <message_id> 下载附件inbox/hotel_huazhu/ 目录使用 himalaya 搜索发件人含 "美团" 的邮件:
himalaya envelope list "from 美团"
对于每封符合条件的邮件:
himalaya attachment download <message_id> 下载附件inbox/meituan/ 目录如果某类邮件未找到:
inbox/ 子目录遍历 inbox/railway/ 目录中的所有PDF文件
对每个PDF文件,调用pdf-ocr提取文字内容,提取关键字段:
保存为JSON格式到 processed/ 目录:
{
"type": "railway",
"invoice_number": "26329116804005647551",
"issue_date": "2026-05-26",
"departure": "南京南",
"arrival": "北京南",
"transport_number": "G50",
"travel_date": "2026-04-01",
"departure_time": "20:06",
"seat_info": "02车05A号 二等座",
"amount": 464.00,
"passenger_name": "马天澍",
"passenger_id": "3212011996****0216",
"buyer_name": "浩鲸云计算科技股份有限公司",
"buyer_tax_id": "91320100745379000T",
"pdf_path": "inbox/railway/26329116804005647551.pdf"
}
遍历 inbox/flight/ 目录中的所有PDF文件
对每个PDF文件,调用pdf-ocr提取文字内容,提取关键字段:
保存为JSON格式到 processed/ 目录:
{
"type": "flight",
"invoice_number": "2026052600123456",
"issue_date": "2026-05-26",
"departure": "南京",
"arrival": "北京",
"transport_number": "MU2811",
"travel_date": "2026-05-26",
"departure_time": "08:30",
"seat_info": "经济舱",
"amount": 850.00,
"passenger_name": "张三",
"passenger_id": "3201021990****1234",
"buyer_name": "浩鲸云计算科技股份有限公司",
"buyer_tax_id": "91320100745379000T",
"pdf_path": "inbox/flight/2026052600123456.pdf"
}
遍历 inbox/hotel_ctrip/ 目录中的所有PDF文件
对每个PDF文件,调用pdf-ocr提取文字内容,提取关键字段:
保存为JSON格式到 processed/ 目录:
{
"type": "hotel_ctrip",
"invoice_number": "2026052600789012",
"issue_date": "2026-05-26",
"hotel_name": "南京金陵饭店",
"check_in": "2026-05-25",
"check_out": "2026-05-26",
"nights": 1,
"rooms": 1,
"amount": 580.00,
"guest_name": "张三",
"buyer_name": "浩鲸云计算科技股份有限公司",
"buyer_tax_id": "91320100745379000T",
"pdf_path": "inbox/hotel_ctrip/2026052600789012.pdf"
}
遍历 inbox/hotel_huazhu/ 目录中的所有PDF文件
对每个PDF文件,调用pdf-ocr提取文字内容,提取关键字段:
保存为JSON格式到 processed/ 目录:
{
"type": "hotel_huazhu",
"invoice_number": "263291167890123456",
"issue_date": "2026-05-26",
"hotel_name": "汉庭酒店南京新街口店",
"check_in": "2026-05-25",
"check_out": "2026-05-26",
"nights": 1,
"rooms": 1,
"amount": 299.00,
"guest_name": "张三",
"buyer_name": "浩鲸云计算科技股份有限公司",
"buyer_tax_id": "91320100745379000T",
"pdf_path": "inbox/hotel_huazhu/263291167890123456.pdf"
}
遍历 inbox/meituan/ 目录中的所有PDF文件
对每个PDF文件,调用pdf-ocr提取文字内容,提取关键字段:
保存为JSON格式到 processed/ 目录:
{
"type": "meituan",
"invoice_number": "263291167890123789",
"issue_date": "2026-05-26",
"service_type": "外卖",
"merchant_name": "美团外卖商家",
"consume_date": "2026-05-25",
"amount": 45.00,
"buyer_name": "浩鲸云计算科技股份有限公司",
"buyer_tax_id": "91320100745379000T",
"pdf_path": "inbox/meituan/263291167890123789.pdf"
}
按时间排序(火车票/机票按出发时间,酒店按入住时间,美团按消费日期),生成 invoice-list.json
由于不同供应商的发票格式差异,解析时需要根据以下特征识别发票类型:
| 发票类型 | 识别特征 |
|---|---|
| 12306火车票 | 包含"中国铁路"、"国家税务总局"、"电子客票"等字样 |
| 携程机票 | 包含"携程"、"航空运输电子客票行程单"等字样 |
| 携程酒店 | 包含"携程"、"住宿服务"、"酒店"等字样 |
| 华住会酒店 | 包含"华住"、"汉庭"、"全季"、"桔子"等品牌名称 |
| 美团发票 | 包含"美团"、"美团外卖"、"大众点评"等字样 |
重要:本步骤依据 /references/行程分析指南.md 进行,分为三个阶段完成。
读取 processed/invoice-list.json 中的车票和住宿发票信息
根据发票信息分析行程,遵循以下原则:
生成分段行程信息,每个分段包含:
处理特殊情况:
输出结果到 output/travel-schedule.md,格式示例:
行程1:南京 → 北京 → 南京(短行程、停留住宿)
分段1交通:南京 → 北京,交通工具:高铁,出发日期:2026年03月18日,结束日期:2026年03月18日,出发地:南京,出差地:北京;
分段1停留:北京,住宿:有,开始日期:2026年03月18日,结束日期:2026年03月20日,住宿方式:宾馆,住宿天数:2;
分段1行程总天数:3天
------------------------------------
分段2交通:北京 → 南京,交通工具:高铁,出发日期:2026年03月20日,结束日期:2026年03月20日,出发地:北京,出差地:南京
分段2行程总天数:0天
读取 output/travel-schedule.md
针对包含"待确认"内容的行程,通过对话补充信息:
根据用户回复更新 travel-schedule.md:
如用户表示某行程暂不处理:
inbox/pending/ 目录travel-schedule.md 中删除该行程重要:确认 travel-schedule.md 中无"待确认"内容后,才进入第三阶段
读取 travel-schedule.md
根据 /references/行程分析指南.md 第三阶段的规则,逐行程处理:
短行程(往返交通工具相同):
----------------------
行程:填写本行程名称
出发日期:填写分段1交通的出发日期
结束日期:填写分段2交通的结束日期
是否结束:填写是
总天数:填写分段1行程总天数加分段2行程总天数
出发地:填写分段1交通的出发地
出差地:填写分段1交通的出差地
交通:填写分段1交通的交通工具
是否享受补贴:填写是
宾馆天数:根据住宿方式填写
宿舍天数:根据住宿方式填写
是否入住协议酒店:根据住宿方式填写
短行程(往返交通工具不同):分为两条记录
长行程:每个分段生成一条记录(除最后分段),最后分段单独处理
输出到 output/travel-detail.md,严格遵循格式要求
执行检查:
重要:确认 travel-schedule.md 和 travel-detail.md 都已生成后,才进入下一步骤
参考文档:详细的行程分析规则请参见 /references/行程分析指南.md
前置条件:必须已生成 travel-detail.md 文件
检查 output/travel-detail.md 是否存在,如不存在则报错退出
检查 config.json 中的报销系统配置是否完整
调用 pincer-runtime 技能:
output/travel-detail.md 作为输入数据源记录提交结果到 output/submission-log.json
向用户展示处理结果:
提供文件位置说明,方便用户查看详细数据
config.json 示例:
{
"email_account": {
"name": "default",
"type": "imap"
},
"reimbursement_system": {
"type": "fol",
"url": "https://fol.example.com",
"credentials": {
"username": "${FOL_USERNAME}",
"password": "${FOL_PASSWORD}"
}
},
"company_info": {
"name": "浩鲸云计算科技股份有限公司",
"tax_id": "91320100745379000T"
}
}
| 错误场景 | 处理方式 |
|---|---|
| himalaya未配置 | 提示用户配置邮箱账号 |
| 未找到某类邮件 | 提示该类发票未找到,询问是否手动上传PDF到对应inbox子目录 |
| PDF解析失败 | 保留文件,记录错误,继续处理其他文件 |
| 发票类型识别失败 | 提示无法识别发票类型,记录到待处理列表 |
| pincer-runtime提交失败 | 保存数据,提示用户手动提交 |
| 配置信息缺失 | 生成配置模板,引导用户补充 |
| 发票类型 | 发件人特征 | 邮件主题特征 |
|---|---|---|
| 12306火车票 | 12306@rails.com.cn | "电子发票通知" |
| 携程机票 | 含"携程" | "机票"、"行程单"、"航班" |
| 携程酒店 | 含"携程" | "酒店"、"住宿"、"订单确认" |
| 华住会酒店 | 含"华住"、"华住会" | "发票"、"电子发票" |
| 美团发票 | 含"美团" | "发票"、"电子发票" |
本技能支持12306火车票、携程机票/酒店、华住会酒店、美团发票五类差旅发票的自动化报销处理。