计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
travel-expense-reimbursement-toolkit【效率与协作】·--- name: 差旅费报销单生成 version: 1.2.2 description: 从行程截图(含Word文档内嵌截图)自动生成差旅费报销单(Word)和明细表(Excel),含凭证附件、页脚页码、费用结算 trigger: 差旅费报销、报销单、行程单、报销明细、生成报销单
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
本技能用于从用户提供的行程截图中,自动提取信息并生成差旅费报销单(Word .docx)和报销明细表(Excel .xlsx)。
用户只需提供:
Agent自动完成:
行程单的所有信息只能来源于:
收到截图后第一反应:
逐张仔细读取上面的所有信息(日期、时间、起点、终点、金额、车次)
每条信息标记来源(screenshot/dialog/inferred)
先读完所有截图,再开始整理数据
截图无时间 → 不要编,写"—"
同图多日期陷阱(极易犯错,必看):一张订单列表截图(如12306"待开票")常含多个"乘车日期"表头。每条订单必须对照它自身紧邻的日期表头填日期,绝对禁止用截图首日期套整图所有条目。录入后必须用 validate_data.py 的"按截图分组复核"逐图验证。
唯一要丢弃的时间:手机状态栏系统时间。完整手机截图最顶端的状态栏(有电池图标、信号格、运营商名称、WiFi图标),通常只显示时分(如"15:30")不显示日期,是截图时刻手机系统时间,与行程无关→丢弃。注意:不是每张截图都有状态栏(全屏/裁剪/APP隐藏时没有)。 除状态栏外,所有时间都保留——下单时间、购票时间、支付时间、乘车时间等,都是确定行程日期/时分的依据,绝不丢弃。 拿不准某个时间是不是状态栏时间时:不要擅自决定。两种处理方式:①向用户确认要不要去掉;②在文档末尾用红字标注该时间,问用户"此时间是否需要去掉"(参见规则4的"待确认问题清单"机制)。
不同平台时间表述不同,全部保留,优先用行程时间。不同平台对时间的标签不同,但不要因为标签是"下单/购票/支付"就丢弃——如果截图只有这个时间,它就是确定行程日期/时分的唯一依据。常见情况:
发现以下情况必须标记并向用户确认,绝不擅自处理:
确认方式:
用户给了文件夹路径,就必须读取文件夹内的所有文件,不能只读独立图片。无论什么格式,都要打开看里面有没有截图或行程数据。
.jpg/.png/.jpeg/.bmp/.gif/.webp)、文档(.docx/.doc/.wps/.pdf/.odt)、表格(.xlsx/.xls/.csv)、演示文稿(.pptx/.ppt)、压缩包(.zip/.rar/.7z)等。所有文件都要处理,不能只挑图片。word/media/ 下,用 extract_docx_images.py 提取[
{
"case_short": "01_案件简称",
"case_name": "案件全称",
"items": [
{
"seq": 1,
"date": "2026-05-05",
"time": "07:15",
"type": "高铁-二等座 G265",
"from": "岳阳东",
"to": "宁波",
"amount": 649.00,
"img": "docx_01.png",
"note": "备注信息",
"date_source": "screenshot"
}
],
"prepayment": {
"amount": 5000.00,
"date": "2026-01-01",
"note": "当事人预支差旅费",
"img": "prepayment.jpg"
},
"total": 0,
"item_count": 0
}
]
screenshot:信息直接从截图读取(正常黑色显示)dialog:用户对话告知(红色字体+浅橙底色)inferred:推测(红色字体+浅橙底色+"(推测)")python scan_folder.py "文件夹路径"
脚本会自动:列出所有文件 → 按类型分类 → 提示哪些需要提取截图 → 自动对.docx调用extract_docx_images.pypython extract_docx_images.py "案件文档.docx" --output images/案件简称/docx_extracted/
pdfimages 或 Python PyMuPDF 提取图片openpyxl 读取 xl/media/ 下的图片docx_01_日期路线_车次.jpg),放入 images/案件简称/ 目录python validate_data.py,特别关注"按截图分组复核"输出,逐图确认每条日期与截图日期表头一致(同图多日期时极易填错)检查以下异常,发现后向用户确认:
# 安装依赖(首次使用)
npm install docx
pip install openpyxl Pillow
# 步骤0:扫描文件夹内所有文件(自动分类+提示哪些需要提取截图)
python scan_folder.py "文件夹路径"
# 步骤0.5:如文件夹内有Word文档,提取内嵌截图(scan_folder.py会自动调用,也可手动运行)
python extract_docx_images.py "案件文档.docx" --output images/案件简称/docx_extracted/
# 生成前先校验数据(推荐,可发现日期填错等问题)
python validate_data.py
# 生成Word文档
node generate_docs.js
# 生成Excel明细
python generate_excel.py
案件名报销单_预支X_实际Y_补交Z.docx案件名报销单_预支X_实际Y_退还Z.docx案件名报销单_未预支_实际Y_补交Y.docx同一时间同一车次出现两条记录(一等座+二等座),没有发现逻辑矛盾。改进:发现异常必须向用户确认。
截图没读就编造时间。改进:收到截图第一反应逐张读取。
多订单截图时间对应错误。改进:逐个订单确认时间。
序号与时间顺序不一致。改进:每次添加后立即排序+重新编号。
截图上没有日期却标为screenshot。改进:逐条逐张判断来源。
用户说9月30日,截图是10月30日。改进:以截图为准并提醒用户。
裁剪后图片仍包含其他订单信息。改进:裁剪后逐张验证。
裁剪掉了下单时间等重要信息。改进:裁剪前定位完整边界。
不同案件同名图片尺寸混淆。改进:直接从文件头读取尺寸。
手动算错总额。改进:程序自动求和+全量验证。
一张12306截图含两个乘车日期(顶部02-03 + 底部02-01),转录时把同图所有条目都套用了首日期02-03,导致02-01的订单日期填错。改进:每条订单对照自身紧邻的"乘车日期"表头填日期,录入后用 validate_data.py 的"按截图分组复核"逐图验证。
真实案例:用户给了文件夹路径,里面有3张7月截图 + 1个Word文档(含1-2月6条行程截图)。Agent只整理了3张独立截图,把Word文档判定为"无关文件"丢弃。实际上Word文档内的行程是已整理但未报销的,应与7月新行程合并为一份报销单(9条行程,¥5071.03)。 根因:把"日期不同"等同于"案件不同",且只读图片不读文档,缺乏"同一文件夹=同一案件=合并报销"的意识。 改进:
真实案例:模型不支持图片读取(系统返回"内容已过滤"),但Agent没有告知用户,而是自行编造了车次号、发车时间、金额等具体数据,生成了看似完整实则全部虚构的报销单。这直接违反了规则1"绝对不允许自行推测或编造任何信息"。 根因:收到"不支持图片"提示后未停止,而是选择编造数据来"完成任务"。 改进:
footers: { default: docFooter },不是 footer: docFooterPageNumber.CURRENT 和 PageNumber.TOTAL_PAGES 显示页码ImageRun + transformation: { width, height },尺寸按原始比例计算直接从文件头读取,不依赖外部缓存:
generate_docs.js 和 generate_excel.py 启动时:
const actualTotal = Math.round(items.reduce((s, it) => s + it.amount, 0) * 100) / 100;
if (caseData.total !== actualTotal) {
caseData.total = actualTotal; // 自动校正
}