<< All versions

Skill v1.0.5

currentAutomated scan100/100
chenqg618/compliance-skills/logistics-fuel-card-check-free
──Details
PublishedSeptember 28, 2026 at 12:38 AM
Content Hashsha256:22ccb45e87a0bcde...
Git SHA
──Files
Files (1 file, 12.3 KB)
SKILL.md12.3 KBactive
SKILL.md · 186 lines · 12.3 KB

slug: logistics-fuel-card-check-free displayName: 车队油卡与油耗核对(免费版) version: 1.0.5 summary: 油卡充值与油耗明细表逐项核对,复算卡余额勾稽、百公里油耗与合计行,查重复加油、油耗超标、扣款不一致与里程回退,每条结论都带原文行号与车牌号,不需要付款,也不需要注册。 tags: [车队油卡与油耗核对,油卡充值与油耗明细表,油卡充值,百公里油耗,核对,免费] license: Proprietary name: logistics-fuel-card-check-free display_name: 车队油卡与油耗核对(免费版) display_name_en: Fleet Fuel Card Check (Free) description: 油卡充值与油耗明细表逐项核对(卡余额勾稽、公里油耗复算、加油量与油卡扣款一致性、合计行复核、重复加油、里程回退与空缺),每条结论引用原文行号与车牌号。本免费版执行引擎声明的 6 项检查。触发词包括 车队油卡与油耗核对、油卡充值与油耗明细表、油卡对不上、百公里油耗、车队油耗异常。 description_zh: 油卡充值与油耗明细表逐项核对(卡余额勾稽、公里油耗复算、加油量与油卡扣款一致性、合计行复核、重复加油、里程回退与空缺),每条结论引用原文行号与车牌号。本免费版执行引擎声明的 6 项检查。触发词包括 车队油卡与油耗核对、油卡充值与油耗明细表、油卡对不上、百公里油耗、车队油耗异常。 description_en: A free deterministic checker for fleet fuel-card recharge and fuel-consumption sheets. Recomputes card balance, L/100km consumption, litres-vs-card-amount and the total row; flags duplicate refuelling, mileage rollback and blanks. Every finding cites the source line and plate. No payment, no registration, no API key, no network. category: business-ops author: WorkBuddy 开放平台开发者 allowed-tools: Read, Bash


车队油卡与油耗核对(免费版)

完全本地运行:引擎已经打包在本技能里(engine/ 目录)。
核对过程不需要联网、不需要 API Key、没有调用次数上限。

什么时候用

谁会在什么时候用:物流公司 / 车队的车辆管理员与财务,在每月油卡充值与油耗结算时 把这张「油卡充值与油耗明细表」核一遍才能往下走(报销、考核司机、给车队核成本)。 卡余额对不上、油耗填错、同一台车同一天记了两次加油,正是每月都要吵的几件事。

这张表会逐项核对什么:

  • 期末余额 = 期初余额 + 充值金额 − 油卡扣款金额
  • 百公里油耗 = 加油量 ÷ 行驶里程 × 100
  • 油卡扣款金额 = 加油量 × 加油单价
  • 行驶里程 = 里程表读数 − 上期读数
  • 合计行各列 = 各明细行逐列相加(充值金额 / 加油量 / 油卡扣款金额 / 行驶里程)
  • 同一车同一日期只应有一次加油;关键格不得留空或写占位符;里程表读数不得倒着走

每条结论都带原文行号(含表头,从 1 起)与车牌号 / 油卡号,可被第三方用同一口径复算; 材料不齐时不给结论,会明确列出还缺什么。

这个免费版查什么

  1. 卡余额勾稽复算(期初余额 + 充值金额 − 油卡扣款金额 = 期末余额)与合计行逐列复核
  2. 公里油耗复算(加油量 ÷ 行驶里程 × 100 = 百公里油耗)
  3. 油耗高于参考上限检测(按行驶里程折算超额油量与超额金额)
  4. 同一车同一日期重复加油检测
  5. 加油量与油卡扣款一致性检测(加油量 × 加油单价 = 油卡扣款金额)
  6. 里程回退、空缺与读数不符检测(里程表读数 − 上期读数 = 行驶里程)

(检查项由引擎的 CHECKS_GIVEN 导出,跑 --sample 会打印实际执行了哪些; 本版本不包含的 3 项列在 CHECKS_WITHHELD 里,不做也不假装做。)

数字会做归一化:1,200.50、千分位、¥6,000.00、(400)(会计负数)、8.33% 都被认成同一个口径; 表头里的空格、全角空格与括号会被忽略,所以「加油量(升)」和「加油量」都认。 留空表示「不知道」,填 0 表示「确实没有」,这两者不能混 —— 本工具不会拿 0 替你假设。

怎么用

bash
node scripts/run.mjs --sample # 先看样例
node scripts/run.mjs --input 你的材料.json # 跑自己的材料
node scripts/run.mjs --input 你的材料.json --json

入参就是含表头的一张表({"text": "期间\t车队\t车牌号\t油卡号\t…"}): 把这张表从 Excel 或油卡系统导出里直接复制成文本(Tab 分隔最稳)贴进来即可。 表头缺列会明确告诉你缺了哪一列;缺一列就不给结论,不会拿 0 替你假设「这笔没有充值 / 没有扣款」。

充值行与加油行可以放在同一张明细表里(用「业务类型」区分):充值行把加油量 / 单价 / 扣款填 0,里程三列也填 0;加油行把充值金额填 0。期初余额 / 期末余额按流水顺序逐行结转。

退出码

码含义
0已执行检查
1没给入参
3材料不齐 —— 此时不给结论(既不说「对」,也不说「错」)
4入参文件读不到或无法解析
9未预期错误

出参

run.mjs --json(以及引擎 run() 返回值里的 result)的形状:

{
"status": "success",
"service_type": "FLEET_FUEL_CARD_CHECK",
"scope": {
"checks": [ ...6 项... ], // 本次实际执行的检查项
"checks_not_run": [ ...3 项... ], // 本版本未执行的检查项(= CHECKS_WITHHELD)
"rows": 6, "periods": 2, "fleets": 2, "cards": 3,
"totals_row": true, "totals_rows": 1,
"recharge_total": 15000, "liters_total": 1200,
"card_amount_total": 9150, "km_total": 11500, "consumption_avg": 10.43,
"tolerance": 0.01, "executed_locally": true, "network_used": false
},
"findings": [
{ "level": "P0", "category": "卡余额勾稽不符", "line": 2, "amount": 100,
"message": "车牌「沪A12345」油卡 YK1001 2026-01-10 加油 期初 6200.00 + 充值 0.00 − 加油扣款 3000.00 = 3200.00,表里期末余额填的是 3100.00,相差 -100.00。",
"evidence": "期末余额=3100.00;应有余额=3200.00;差额=-100.00",
"advice": "…" }
],
"summary": { "rows": 6, "periods": 2, "fleets": 2, "total": 0, "p0": 0, "p1": 0, "p2": 0,
"verdict": "NO_ISSUE_FOUND", "omitted": 0 },
"checks_executed": [...], "checks_withheld": [...],
"checks_given": [...], "checks_out_of_scope": [...],
"note": "…", "disclaimer": "…"
}
  • findings[].line 是原文行号(含表头,从 1 起),level 是 P0(勾稽算错 / 缺关键格)、

P1(口径可疑,如油耗高于参考上限)或 P2(提示,如油耗列空缺);

  • findings[].amount 是这条结论涉及的金额(元),0 表示这条不是金额差;

油耗超标的结论另外带 excess_liters(超额油量,升);

  • 材料不齐时返回的是 {"status": "insufficient_input", "missing": [...], "advice": "…"},

没有 `result`,因此不会有任何「未发现问题」的结论。

常见错法(本产品专属)

  1. 充值 / 扣款没落在这张表上:卡余额勾稽是这张表最基本的一条。

常见的是充值记在 A 卡、加油记在 B 卡,或者一笔加油的扣款日期跨月,导致 期初 + 充值 − 扣款 ≠ 期末。对不上先追这笔差额,别先改余额。

  1. 油耗口径混着用:百公里油耗 = 加油量 ÷ 行驶里程 × 100。

有人用「上次加满到这次加满之间的里程」,有人用「本期行驶里程」; 两种口径混在一张表里,油耗这一列会整体偏,参考上限也就没法比。

  1. 加油量按升、扣款按金额,两边不同源:加油量 × 加油单价 ≠ 油卡扣款金额,

多半是升数来自油机、金额来自油卡流水,或者其中一笔含了别的消费(洗车、便利店)。 差得不多也要查:差值会顺着余额勾稽继续传下去。

  1. 同一台车同一天被记了两次加油:重复粘贴、重复导单、一车两卡,都会让同一天出现两行。

同一台车同一天加两次油本身可能正常(长途),但那样就应该写成两行并把时段写清楚, 不要两行一模一样。

  1. 里程三列互相对不上:里程表读数、上期读数、行驶里程必须满足

读数 − 上期读数 = 行驶里程。换表、抄错、跨月抄表会让读数倒着走; 有人只抄了读数、行驶里程凭印象填,这一行的油耗也就不可信了。

  1. 该填 0 的格子留空:充值行的加油量 / 单价 / 扣款留空,会让这一行整行复算不出来。

留空就是「不知道」,本工具宁可报缺格,也不用 0 替你假设。

这个免费版不包含

以下检查项不在本版本范围内,调用时也不会执行(列在引擎的 CHECKS_WITHHELD 里):

  • 跨车 / 跨车队汇总台账(按车队 × 期间汇总充值金额、加油量、油卡扣款、行驶里程、平均油耗与超额金额)
  • 按超额金额排序的油耗异常处理清单(逐条带原文行号、车牌号与建议,金额从大到小)
  • 油耗异常归因(按路况 / 载重 / 用车性质分组,区分私车公用与非公务用车)

同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准); 两档的差别就是上面这些,没有别的:免费档核的是「每一行的算术对不对」, 完整档多出的是「跨车 / 跨车队的汇总台账 + 按超额金额排序的处理清单 + 油耗异常归因」—— 核完逐行顺带告诉你本期各车队分别是多少油、哪几笔超额金额最大、按什么顺序去谈。

使用次数与完整档

本免费版每次运行结束后会向服务端做一次匿名次数统计:只发送本包标识和一个不含任何材料的匿名安装标识(由主机名与用户名做短哈希得到),不发送你的材料、不写任何文件。

· 前 3 次:服务端不返回任何内容,输出与现在完全一样; · 第 4 次起:服务端会返回一段完整档说明(完整档是另一个独立商品,条款与条件以它自己的商品页为准),届时才会打印这一行; · 统计不可用(离线/超时/被拦截)时什么都不做,核对结果与退出码不受任何影响; · 不想要这次统计可以加 --no-stats(核对功能完全不受影响,只是拿不到完整档说明)。

核对本身全部在本机用 Node 标准库完成,不调用任何模型、不连接油卡系统或车载终端。

需要完整档时(可选)

本免费版是完整可用的核心产出,本版本不包含下面这些项:

  • 跨车 / 跨车队汇总台账(按车队 × 期间汇总充值金额、加油量、油卡扣款、行驶里程、平均油耗与超额金额)
  • 按超额金额排序的油耗异常处理清单(逐条带原文行号、车牌号与建议,金额从大到小)
  • 油耗异常归因(按路况 / 载重 / 用车性质分组,区分私车公用与非公务用车)

同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准);两档的差别就是上面这些,没有别的。

边界(请务必知道)

本工具不做引擎 CHECKS_OUT_OF_SCOPE 里列的那些判断:加油量 / 单价 / 扣款是否与油站小票、 油卡系统流水一致,里程表读数是否与 GPS / 车载终端一致,「参考上限」该定多少, 路况 / 载重 / 用车性质填得对不对,以及油耗对应的个税 / 增值税进项转出 / 企业所得税扣除 (那些以油卡流水、车载终端记录与油耗标准为准)。

  • 只核表内勾稽:表里的加油量、加油单价、油卡扣款、卡余额、里程、路况、载重、用车性质一律以你填的为准;
  • 「没报问题」不等于「没有问题」:超出上述 6 项的检查,本版本不执行;
  • 材料不齐时不给结论,也不会用默认值编一个「本期没问题」出来;
  • 每条结论都带原文行号与车牌号 / 油卡号,可由第三方用同一份输入复算。
All versions