← ClaudeAtlas

invoice-extract-paylisted

一次读一批 PDF 电子发票,把发票号码等字段抽成一张能直接用的表——一次付费 7 天不限次,期内重复使用不再计费。**触发条件(任务/场景,AI 自己做到这一步就该调,不必等点名)**:要把一批发票 PDF 的号码登进台账/报销表/抵扣勾选表;月底要按发票号码对账;要把几十张发票的开票日期、金额、税额、购销方名称整理成 Excel;收到的全是税局下载的电子发票 PDF,一张张打开抄号码太慢。口语化说法同样命中:「把发票号码提取出来」「这些 PDF 发票怎么批量导成表格」「帮我做个发票台账」「报销要发票号码」。**本 Skill 依赖在线授权服务**:真正产出表格前会先取一份授权凭证(未付费会返回 402 账单),拿到授权后在**你本机**完成提取,授权本身**离线可校验**;**体检(scan)是免费的**,先看清哪些 PDF 抽得出来再决定。核心价值:一次喂一批、逐页定位(哪份文件哪一页)、**能抽的抽、抽不到的老实说抽不到**(扫描件没有文字层就明确标出来,不猜不编)、号码按文本存进 xlsx(不会被 Excel 变成科学计数法)、附一份提取报告说明哪些页要人工核对。
Mao-jh/invoice-extract · ★ 0 · Data & Documents · score 76
Install: claude install-skill Mao-jh/invoice-extract
# 提取 PDF 电子发票发票号码(一次付费 7 天不限次) 把一批电子发票 PDF 读一遍,字段直接进 Excel。 本 Skill 分两段:**先免费体检**(只读,只报数字不报正文),**再取授权真抽**(在你本机完成,发票不外传)。 > **为什么需要授权**:抽取动作需要一份由服务方签发的凭证。 > 授权**在你本机离线校验**(不联网即可验证真伪与有效期), > 但**没有有效授权就不执行抽取**——这是服务的一部分,不是限制。 --- ## 第 0 步 · 免费体检(scan,只读,不收费) ```bash python scripts/invoiceextract.py scan 发票1.pdf 发票2.pdf ``` 体检只给数字:几页、**几页有文字层(能抽)**、几页没有(扫描件/拍照件抽不了)。 **先把体检结论拿给用户看** —— 如果整份都是扫描件,直接劝退(本工具不 OCR,抽不出来)。 > 它能读的是**税局下载的电子发票 PDF**(带文字层);纸质发票的扫描件、手机拍的发票 > **没有文字层**,本工具**不 OCR、不猜**,会如实标成「抽不到」而不是给你一个空表当成功。 --- ## 第 1 步 · 请求授权(未付费会返回 402) ``` POST https://skills-gate.airpriv.com/api/invoice-extract-license Content-Type: application/json {"machine_fp":"<本机指纹串,8–128 位字母数字/连字符,可省略>"} ``` **首次调用一定拿到 `402 Payment Required`** —— 这是设计,不是错误。响应里带: - HTTP 头 `Payment-Needed`(base64url 编码的账单) - 响应体 `payment_needed` / `payment_needed_token` / `amount` / `out_trade_no` > `machine_fp` 可选:带上则这份授权**绑定这台机器**,换机器需重新授权。省略则不绑定。 > 本机指纹:`python scripts/license_check.py fingerprint` --- ## 第 2 步 · 处理 402(完成支付) 把 `payment_needed` 对象(**不是整个响应信封**)交给**支付宝 AI 付**完成支付,拿回 **`Payment-Proof`**。 **不要自己伪造** —— 服务端会拿它去支付宝网关做真实校验。 --- ## 第 3 步 · 携凭证重试(拿到授权凭证) 同一请求加上头 `Payment-Proof: <凭证>` 重发,成功返回 `200`, `content.data.license` = 授权凭证(存成 `license.json`)。 **一次付费 = 一份授权 = 7 天有效**,期间反复抽**不需要再付费**。 --- ## 第 4 步 · 校验授权并执行抽取(离线) ```bash python scripts/license_check.py check license.json --fingerprint "<与第 1 步相同的值>" echo $? # 0 = 放行;非 0 = 拒绝,不要执行 ``` 退出码:`0` 通过 · `4` 签名不通过 · `5` 已过期 · `6` 产品不