报销资料交互式整理 Skill
核心原则
不要一次性直接输出最终报销结果。必须按“识别 -> 给用户逐项确认 -> 汇总输出”的方式处理。
原始资料目录只读。不要移动、改名、删除或覆盖用户提供的发票、凭证、截图、压缩包和模板。
OCR 和文件名推断都只是草稿来源。用户确认后的内容优先于 OCR 结果和文件名推断。
工作流程
-
盘点资料目录。
- 使用scripts/reimbursement_processor.py scan --source <资料目录> --output <输出目录>。
- 按公司、事项、文件类型、费用类别、票据类型、替代关系生成盘点草稿。
- 先向用户确认公司主体、项目/事项归属、项目编号和报销人。 -
OCR 和文本提取。
- 使用scripts/reimbursement_processor.py extract --source <资料目录> --output <输出目录> --ocr auto。
- PDF 优先提取文本;图片和无文本 PDF 使用 OCR。
- 普通电子发票金额优先取价税合计的(小写)¥金额;如果文本顺序错位,取发票中¥金额的最大值作为价税合计候选。
- 高铁票金额优先取票价:后面的金额;如果票价:与金额分行,取同一票据内唯一的¥金额。
-.zip压缩包必须解压或读取内部结构;如包含 XML/OFD/PDF 发票,优先解析 XML,并把每张发票号分别记录。
- 金额、日期、发票号、发票抬头、付款凭证信息如果低置信或冲突,放入待确认项。 -
逐项确认。
- 按references/confirmation-format.md的格式,把每个事项的识别结果发给用户确认。
- 一次只确认一个事项或一个报销单元,不要把所有项目混在一起问。
- 公司/项目/事项目录下的发票、票据、压缩包和付款凭证默认都属于该目录对应事项,默认纳入该事项报销。不要向用户逐条询问“是否纳入报销”。只有文件放错目录、抬头冲突、主体混用、重复票据、金额冲突或用户明确标记不报销时,才作为异常确认。
- 用户修正后,再进入下一项。 -
生成草稿。
- 每个项目或事项生成一张差旅明细草稿。
- 只要票据位于当前公司目录和项目/事项目录下,且不是付款凭证截图,就默认生成该事项的报销行;不要因为 OCR 低置信而询问是否纳入,只把低置信字段标为待确认。
- 付款凭证截图不生成差旅明细行,只作为对应发票、替代票或费用事项的附件。
- 替代票的报销金额不取替代发票金额,而取对应付款凭证的实际支付金额。
- 付款凭证文件名中带金额时优先使用文件名金额,例如住宿费-1117.42.jpg、住宿费(金额1117.42).jpg、住宿费1117.42元.jpg、过路费156.jpg。
- 如果替代票已匹配付款凭证但凭证金额无法确定,差旅明细和费用报销单摘要金额必须标为待确认。
- 压缩包内同一类别的多张发票可在差旅明细中汇总为一行,但发票明细必须逐张记录发票号。
- 所有发票号生成统一发票明细草稿。
- 费用报销单摘要按费用类别合并,例如高铁、住宿、加油、过路费、聚餐、考试费。
- 替代票摘要必须保留替代关系,例如加油票(替代住宿费),并提示括号和括号内内容需要铅笔填写。 -
最终输出。
- 使用scripts/reimbursement_processor.py canonical --source <资料目录> --output <输出目录>生成 canonical JSON。
- canonical JSON 只作为底稿和三次一致性校验材料,不是交给用户的最终报销输出。
- 用户逐项确认后,使用scripts/export_reimbursement_tables.py --confirmed-dir <确认目录> --source-root <资料目录>输出实际表格。
- 最终结果必须生成到公司目录同级的<资料目录>/报销整理输出/。例如资料目录下有湖南思特异科技有限公司/、武汉思特异科技有限公司/,则最终输出目录必须是同级的报销整理输出/,不要输出到 Skill 目录、工作缓存目录、final-tables/临时目录或任意其它位置。
- 只有用户明确指定其它输出路径时,才可以传--output-dir <表格输出目录>;否则不要传--output-dir,让脚本默认写入<source-root>/报销整理输出/。
- 差旅明细表格式必须以当前项目 V7 版为基准。优先使用用户资料目录中的正式差旅明细模板;如果资料目录没有正式模板,使用 Skill 内置的assets/travel_detail_template_v7.xlsx。不要临时新建简化版模板,不要用只有标题和表头的最小模板代替正式模板。
- 最终必须输出:差旅明细表.xlsx、费用报销单和原始凭证粘贴单总表.xlsx、钉钉报销提交图片/。
-差旅明细表.xlsx必须严格基于用户提供的差旅明细模板生成,每个事项/项目一个差旅明细子表;只能清空模板示例数据后填入确认过的真实行,不要改变表头结构。
- 差旅明细表中备注后面的说明列用于插入对应付款凭证截图图片;有凭证截图就嵌入原始图片文件,没有则留空,不能写成本地路径字符串。不要把付款凭证截图重新生成缩略拼图,也不要把小图放大后再嵌入;最多只调整 Excel 显示尺寸,不能对原图做像素级放大导致模糊。
- 差旅明细子表的备注列只写业务备注、替代关系、人员用途等说明;不要写发票号、发票号码、电子客票号或票号。所有发票号统一写入发票明细子表。
- 差旅明细表里的发票明细不要输出来源文件列。
-费用报销单和原始凭证粘贴单总表.xlsx必须按事项/项目生成费用报销单子表,费用报销单版式参考费用报销单/目录中的费用报销单图片。
-费用报销单和原始凭证粘贴单总表.xlsx不需要单独的发票明细工作表;发票明细只保留在差旅明细表.xlsx中。
- 原始凭证粘贴单据表格必须参考费用报销单/目录中的原始凭证粘贴单图片生成,用于线下粘贴发票、车票、过路费等原始凭证,不用于粘贴付款凭证截图。
- 原始凭证粘贴单据表格必须直接合并到对应报销单-*子表的费用报销单表格下方;如果同一个报销单有多张粘贴单,就在同一个子表下方连续生成多个粘贴单表单。
- 费用报销单表格和第一张原始凭证粘贴单之间必须间隔两个空白行;多张原始凭证粘贴单之间也必须间隔两个空白行。
- 上述两个空白间隔行必须合并为整行区域,并设置浅蓝色背景,便于区分费用报销单和粘贴单表单。
- 原始凭证粘贴单的粘贴区域必须嵌入对应发票、车票、过路费等原始凭证图片,不能在粘贴区域输出文件路径清单。
- 原始凭证粘贴单不要显示粘贴说明:...、发票图片已嵌入粘贴区域...或类似说明文字;只保留表单标题、日期、主体/事项/分组、粘贴区域、张数、合计金额和签名。
- 原始凭证粘贴区域中的发票图片要尽量放大,便于查看和打印,不能缩成很小的缩略图;如果用户要求放大,应按当前尺寸继续放大。
- 原始凭证粘贴单底部的合计金额填写报销金额,不按发票票面金额汇总;存在替代票时尤其要以报销金额为准。如果一个费用报销单下面有多张粘贴单,只在最后一张粘贴单显示报销总额,前面的粘贴单合计金额留空。
- 费用报销单摘要和合计金额必须以对应差旅明细子表中可报销行的合计金额汇总为准;如果确认目录中的expense_summary_draft.json与差旅明细合计不一致,必须按差旅明细重新生成费用报销单摘要和总额。
- 每个费用报销单必须写清“单据及附件共 N 页”或对应粘贴单数量,便于打印装订。
- 不要单独生成付款凭证-*子表。付款凭证截图只用于替代票金额核对、差旅明细说明列附件和钉钉附件提示,不进入差旅明细报销主行,也不进入原始凭证粘贴单。即使确认 JSON 中错误出现票据=付款凭证的行,导出前也必须剔除。
- 不再输出钉钉提交表.xlsx。必须根据钉钉报销提交截图/里的字段生成钉钉报销提交图片/*.png,让提交人可直接把图片上传给钉钉 AI 填单解析。
- 钉钉提交图片应包含公司、所属模块、合计金额、大写、报销类别、摘要、报销金额、报销单附件提示、发票附件提示、总报销金额、项目编号、差旅地、报销人等字段;所属模块固定为机器人;报销单附件提示为上传费用报销单图片和差旅明细表;发票附件提示为上传对应发票。
- 生成钉钉提交图片前必须确认运行环境有中文字体。优先使用微软雅黑、黑体、宋体、文泉驿或 Noto CJK;如果没有中文字体,应停止并提示安装字体,不能输出方框、问号或乱码图片。
- 费用报销单中的“替代票摘要中的括号和括号内内容需铅笔填写;审批通过后将钉钉审批号回填到本单。”必须使用红色字体;摘要中形如(替代过路费)、(替代住宿费)的括号及括号内内容也必须使用红色字体。
- 未确认信息不得伪装成最终事实,必须保留为待确认项;有待确认项时不要输出为最终版,只能输出为草稿版。 -
三次一致性验收。
- 使用scripts/reimbursement_processor.py validate --source <资料目录> --output <输出目录>/validation --runs 3。
- 三次 canonical 输出哈希完全一致,才算 Skill 成功。
- 如任意输出不一致,修正不稳定字段、排序或 OCR 处理后重新验收。
必读引用
references/workflow.md:完整报销业务流程。references/field-rules.md:字段、主体、项目和票据规则。references/paste-rules.md:原始凭证粘贴和分组规则。references/confirmation-format.md:逐项确认时给用户看的固定格式。
输出约束
输出给用户确认时,清楚区分:
- 已识别:来自 OCR、PDF 文本或文件名推断的字段。
- 待确认:低置信、缺失、冲突或涉及替代票解释的字段。
- 错误:主体混用、金额不一致、发票抬头与项目归属公司不匹配等。
未完成三次一致性验收前,不要说 Skill 已成功。