Install
openclaw skills install @chenqg618/saas-usage-billing-check-free订阅用量与超额计费明细表逐项核对(超额用量复算、超额费用复算、账单金额勾稽、套餐额度适配、同一账期同一订阅号重复行、关键字段空缺),每条结论引用原文行号与订阅号。本免费版执行引擎声明的 6 项免费检查。触发词包括 SaaS订阅用量与超额计费核对、订阅用量与超额计费明细表对不上、超额费用算错、账单金额对不上、套餐额度与实际用量。
openclaw skills install @chenqg618/saas-usage-billing-check-free完全本地运行:引擎已经打包在本技能里(
engine/目录)。 核对过程不需要联网、不需要 API Key、没有调用次数上限。
谁会在什么时候用:SaaS 公司的出账岗 / 商务 / 财务,以及企业客户(甲方)的财务, 在每月出账、客户对账、续费谈判这几个固定节点上,都得把这张订阅用量与超额计费明细表核一遍才能往下走。 超额费多算、账单对不上、重复开通,正是双方每月都要吵的几件事。
这张表会逐项核对什么:
每条结论都带原文行号与订阅号,可被第三方用同一口径复算; 材料不齐时不给结论,会明确列出还缺什么。
(检查项由引擎的 CHECKS_GIVEN 导出,跑 --sample 会打印实际执行了哪些;
本版本不包含的 5 项列在 CHECKS_WITHHELD 里,不做也不假装做。)
数字会做归一化:12,000(千分位)、1240元、(120)(会计负数)、0.5%(折成 0.005)
都会被认成同一个口径;超额单价列写 0.5 表示每个用量 0.5 元,本工具不会替你猜你的意思。
表头里的空格、全角括号与单位后缀会被忽略,所以「实际用量(次)」和「实际用量」都认;
表头是完全相等匹配的,所以「套餐额度」不会把「套餐费」抢走、「超额用量」不会把「超额单价」抢走。
node scripts/run.mjs --sample # 先看样例
node scripts/run.mjs --input 你的材料.json # 跑自己的材料
node scripts/run.mjs --input 你的材料.json --json
入参就是含表头的一张表({"text": "账期\t客户编码\t订阅号\t…"}):
从 Excel 或计费系统导出里直接复制成文本(Tab 分隔最稳)贴进去即可。
表头缺列会明确告诉你缺了哪一列;缺一列就不给结论,不会拿 0 替你假设"这个月没超额"。
没有超额请把「超额用量 / 超额单价 / 超额费用」都填 0:
填 0 表示"确实没有",留空表示"不知道",这两者不能混。
| 码 | 含义 |
|---|---|
| 0 | 已执行检查 |
| 1 | 没给入参 |
| 3 | 材料不齐 —— 此时不给结论(既不说"对",也不说"错") |
| 4 | 入参文件读不到或无法解析 |
| 9 | 未预期错误 |
run.mjs --json(以及引擎 run() 返回值里的 result)的形状:
{
"status": "success",
"service_type": "SAAS_USAGE_BILLING_CHECK",
"scope": {
"checks": [...], // 本次实际执行的检查项
"checks_not_run": [...], // 本版本未执行的检查项(= CHECKS_WITHHELD)
"rows": 7, "periods": 2, "customers": 3,
"totals_row": true, "totals_rows": 1,
"plan_quota_total": 135000, "actual_usage_total": 140000,
"overage_usage_total": 15200, "overage_fee_total": 8500,
"plan_fee_total": 8900, "seat_fee_total": 700, "discount_total": 150,
"bill_total": 17950, "tolerance": 0.01,
"executed_locally": true, "network_used": false
},
"findings": [
{ "level": "P0", "category": "超额费用复算不符", "line": 2, "amount": 120,
"message": "客户「C001 杭州甲贸易有限公司」订阅 SUB-0001 的超额费用是 600.00,按 超额用量 1200 × 超额单价 0.6 = 720.00,相差 -120.00。",
"advice": "…" }
],
"summary": { "rows": 7, "periods": 2, "customers": 3, "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(不是错,但值得谈);amount 是这条结论涉及的金额(元),0 表示这条不是金额差;{"status": "insufficient_input", "missing": [...], "advice": "…"},
没有 result,因此不会有任何"未发现问题"的结论。max(0, 实际用量 − 套餐额度) 这个算术,
额度怎么摊是你的合同口径,所以它把不符的行连同行号列出来让你核口径,而不是替你改。待确认、待核 这类占位符和留空一样对待。以下检查项不在本版本范围内,调用时也不会执行(列在引擎的 CHECKS_WITHHELD 里):
同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准); 两档的差别就是上面这些,没有别的。
本免费版是完整可用的核心产出,本版本不包含下面这些项:
同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准);两档的差别就是上面这些,没有别的。
本工具不做引擎 CHECKS_OUT_OF_SCOPE 里列的那些判断:额度该按哪一档报价、超额单价是否符合合同、
用量统计口径(去重规则 / 失败请求算不算 / 测试 Key 算不算 / 跨月切分点)对不对、折扣是否已审批、
账单是否已开票或已回款(那些以销售合同、计费系统、用量报表与银行流水为准)。