← Back to skills
extension
Category: Data & AnalyticsNo API key required

数电发票是否入账核验工具(数据全程在内网,不出公司;不联网、不收费、无账号系统。)

数电发票是否已入账核验工具(个人版)——把本次收到的电子发票(PDF/OFD/XML/图片/拍照/号码表)与往期+当期已入账明细表比对,一键生成《本次收到的电子发票是否已入账明细表》,防止供应商重复开票、重复入账。纯本地运行、零费用、数据不出电脑,一个人打开即用:上传本次发票→选往期/当期已入账明细表→点开始核对出结果。适用于财务进项核对、揭穿对方重复发送发票、发票查重、已入账查验。

personAuthor: user_c208e969hubcommunity

数电发票 是否已入账 核对工具(个人版)

一句话价值

别人家的发票查重工具,主打报销端(员工扫票怕一票多报);这个工具主打进项端——

财务收到供应商发票,一眼看出「这张票之前是不是已经入账过 / 对方是不是又重复发了一遍」。

拿来"揭穿"对方不负责任重复发送发票,是最好的硬证据。


它能解决什么

  • 供应商/同事老把同一张发票重复发过来,反复甄别费时
  • 怕重复入账、重复付款,想入账前先查一遍
  • 手头有一份「近 2 年已入账发票明细表」,想拿新收到的发票去比
  • 一个人用:不需要内网、不需要服务器、不需要账号,打开即核对

三种输入方式(任选)

| 方式 | 说明 | |---|---| | 📷 拍照上传 | 连续拍摄发票,自动 OCR 识别发票号码;拍不清提示是否重拍(需装拍照依赖) | | 📁 上传 OFD/PDF/XML 电子发票 / 图片 | 多选,支持数电票、OFD、XML、扫描图片 | | 📄 上传号码明细表 | 只要表头带「数电发票号码」列即可,只判断入账状态 |

输出结果(严格格式)

生成一份《本次收到的电子发票是否已入账明细表》,列固定为:

序号 | 文件名 | 数电发票号码 | 含税金额 | 入账状态 | 入账时间 | 销售方纳税人名称 | 开票日期 | 金额 | 税额 | 票种 | 项目名称

其中入账状态直接标 已入账 / 未入账——"已入账"就是对方重复发铁证。


触发词

  • 发票入账核对 / 是否已入账 / 已入账查验 / 发票查重
  • 进项发票核对 / 进项核验 / 供应商重复发票 / 重复开票
  • 揭穿重复发票 / 核对已入账明细 / 发票入账比对
  • 上传发票核对 / 收到发票有没有入账

用户操作步骤(3 步,一眼就会)

  1. 打开工具:在 WorkBuddy 对话里说"发票入账核对",或直接运行脚本,弹出窗口
  2. 添加发票 + 选明细表:点「📷 拍照」或「📁 上传OFD/PDF/XML发票/图片」或「📄 上传号码明细表」,把本次收到的发票加进去(Ctrl/Shift 多选);再在下方填入「往期已入账明细表」「当期已入账明细表」路径(首次手动选,之后自动记住)
  3. 开始核对:确认「输出 Excel 文件路径」(首次默认桌面,之后自动默认上次路径)→ 点「开始核对」→ 结果自动保存

完成。打开《本次收到的电子发票是否已入账明细表》,看「入账状态」列即可。

路径记忆:往期/当期明细表路径、输出路径、上传目录,第一次选完后会自动记住,下次打开自动填好,不用重复选。


运行环境要求

  • Python 3.8+,且必须包含 tkinter(GUI 窗口依赖,弹窗靠它)。
  • Windows 用 python.org 官方安装包默认自带 tkinter;若使用精简版 / 便携版 / 隔离环境的 Python,可能缺少 tcl/tk 组件,运行时会报 No module named 'tkinter' 或 DLL load failed。
    • 解决:换用完整版 Python,或运行前先确认 python -c "import tkinter" 能成功(本 Skill 的 setup_env.py 也会检测并提示)。
  • macOS 自带 tkinter;Linux 需系统安装 python3-tk(如 sudo apt install python3-tk)。

依赖安装(一键)

工具首次运行若提示缺依赖,在本 Skill 目录下执行:

python setup_env.py

该脚本会自动安装核心依赖(pandas / pdfplumber / openpyxl / PyMuPDF)。

拍照功能额外需要:

  • Python 包:Pillow、opencv-python、pytesseract(脚本也会一并尝试安装)
  • 系统引擎:Tesseract-OCR(Windows 下载 https://github.com/UB-Mannheim/tesseract/wiki ,安装时勾选 Chinese 简体语言包),装完把 tesseract.exe 加入系统 PATH

只想传 PDF/OFD/XML、不用拍照的,可以跳过 Tesseract,核心依赖装好即可用(未装拍照依赖时,拍照按钮自动置灰,不影响文件核对)。


注意事项

  1. 只读安全:本工具只读取源文件、生成报告,不修改、不删除任何原始数据,符合本地离线处理要求。
  2. 隐私:纯本地运行,发票数据不出本机。
  3. 手机端:拍照/PDF 解析依赖 Python 运行时,目前主要在电脑端 WorkBuddy 使用。
  4. OFD 兼容性:优先读取 OFD 包内 XML 文本提取发票号;极个别非常规版式会 fallback 到渲染+OCR。
  5. 号码明细表:只要表头带「数电发票号码」列(支持"发票号码/电子发票号码"等别名),即可自动识别。

发布到 SKILLHUB

本技能结构:

invoice-accounting-check-personal/
├── SKILL.md
├── scripts/
│   └── invoice_accounting_check_personal.py   ← 核心工具(GUI + 命令行)
├── requirements.txt                  ← 核心依赖
├── requirements-optional.txt         ← 拍照 OCR 可选依赖
└── setup_env.py                      ← 一键安装依赖

打包命令(在 WorkBuddy 环境执行):

python "<skill-creator脚本目录>/package_skill.py" "C:\Users\admin\.workbuddy\skills\invoice-accounting-check-personal"

生成的 zip 即可上传至 SKILLHUB。

封面图见 assets/cover.png(1024×1024,发票/对账主题,在 SKILLHUB 发布页「封面图」处直接选用)。

支付宝付费改造契约(PAYSKILL)

本技能为付费技能(PAYSKILL)。调用遵循支付宝 AI 生意画像契约,由平台调度层执行 probe → pay → complete → ack 流程:

  1. probe(探测):平台调用前先探测是否已持有本技能的支付宝有效订阅 / 付费凭证。已付费则直接放行。
  2. 402 Payment-Needed:未付费时,脚本向标准输出返回 HTTP 状态 402 与 Payment-Needed 标记,提示用户通过支付宝完成付费(pay),平台据此唤起付费页。
  3. complete(扣费确认):用户在支付宝完成扣费后,平台下发 Payment-Proof(付费凭证)。
  4. ack(验签放行):平台携带 Payment-Proof 重试本次调用;scripts/payment_gate.py 验签该凭证,确认有效后放行主流程。

订阅持久化与幂等:

  • 付费状态缓存在本地 .pay_cache/state.json,避免每次调用重复付费(订阅持久化)。
  • 同一 Payment-Proof 在 24h 幂等窗口内仅生效一次,避免重复扣费。

现金流改造后的调用套路:

用户调用 → 平台 probe  →
   未付费:下发 402 Payment-Needed → 支付宝 pay → complete → 下发 Payment-Proof
已付费/携带 Proof:脚本 ack 验签 → 放行主流程

本契约由 SkillHUB 平台调度层解析,脚本本地仅处理 402 / 验签 / 持久化 三环节;付费本体交给支付宝。


支付宝 AI 按量付费(Machine Pay / A2M)改造说明

本 Skill 已按支付宝官方 A2M 协议改造为 Pay Skill,付费闸口位于 scripts/payment_gate.py,统一调用云端计费服务 https://pay.pembroli.cn/api/resource。

付费流程

  1. 未付费调用时,服务端返回 HTTP 402 + Payment-Needed 头,携带金额、商户、订单号及 RSA2 签名。
  2. 买家侧 payment_gate.py 收到 402 后引导用户完成支付,平台回传 Payment-Proof。
  3. 客户端携带 Payment-Proof 重试资源端点。

验付调用

服务端收到 Payment-Proof 后,调用支付宝验付接口(alipay.aipay.agent.payment.verify)核验凭证有效性(trade_no、out_trade_no、active 状态),验证失败返回 400,验证通过才进入资源发放。

履约确认

资源发放成功后,服务端异步调用履约确认接口(alipay.aipay.agent.fulfillment.confirm,trade_no)回执,标记本笔订单已履约;并按 out_trade_no 做幂等,重复请求直接返回已缓存结果,杜绝重复收费。

幂等与缓存

买家侧按 slug 本地缓存 Payment-Proof(24h TTL),有效期内免重复支付;服务端按订单号幂等,保证同一笔订单只履约一次。