完全本地运行:引擎已经打包在本技能里(engine/ 目录)。 核对过程不需要联网、不需要 API Key、没有调用次数上限。
谁会在什么时候用:快递 / 快运网络里网点的对账岗、财务,以及总部的结算岗,
在每月网点与总部结算(月结)时把这张网点运费结算单与代收货款明细表核一遍才能划款。
运费少收、代收货款少缴、重复导单,正是网点与总部每月都要吵的几件事。
这张表会逐项核对什么:
每条结论都带原文行号与网点 / 运单号,可被第三方用同一口径复算;
材料不齐时不给结论,会明确列出还缺什么。
(检查项由引擎的 CHECKS_GIVEN 导出,跑 --sample 会打印实际执行了哪些;
本版本不包含的 5 项列在 CHECKS_WITHHELD 里,不做也不假装做。)
数字会做归一化:1,240.00、千分位、带货币符号的写法、(1240)(会计负数)、1% 都被认成同一个口径
(1% 折成 0.01;费率列写 0.01 或 1% 都行,写 1 表示 100%,本工具不会替你猜)。
表头里的空格与括号会被忽略,所以「计费重量(kg)」和「计费重量」都认。
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": "COURIER_SETTLEMENT_CHECK",
"scope": {
"checks": [...], // 本次实际执行的检查项
"checks_not_run": [...], // 本版本未执行的检查项(= CHECKS_WITHHELD)
"rows": 6, "periods": 2, "sites": 2,
"totals_row": true, "totals_rows": 1,
"charge_weight_total": 71.9, "freight_total": 282.28,
"cod_amount_total": 2800, "cod_remit_total": 2772, "payable_total": -2510.22,
"tolerance": 0.01, "executed_locally": true, "network_used": false
},
"findings": [
{ "level": "P0", "category": "运费复算不符", "line": 2, "amount": 4,
"message": "网点「SH-A 沪东网点」运单 YD2026050001 的运费是 50.00,按 计费重量 12.5 × 计费单价 4 = 50.00,相差 0.00。",
"advice": "…" }
],
"summary": { "rows": 6, "periods": 2, "sites": 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(口径可疑);amount 是这条结论涉及的金额(元),0 表示这条不是金额差;{"status": "insufficient_input", "missing": [...], "advice": "…"},没有 result,因此不会有任何"未发现问题"的结论。
正常只可能 ≥ 实际重量。抄了实重、漏了体积重、续重进位没做,都会让运费整体少收;
本工具按 计费重量 × 单价 折算少收金额,并把这一行点出来。
只有代收手续费能留下。常见错法是"手续费算对了却没从应缴里减",或者"减了一次又减第二次",
这一行内部就对不上(代收货款 − 代收手续费 ≠ 代收货款应缴)。
0.01 或 1% 都认;写成 1 意思是 100%,手续费会被算成"整笔代收货款",应结金额当场差出好几百。本工具不会替你猜你的意思。
运费与代收货款应缴一起算了两遍。本工具报重复行;确属同一票货分两段计费的,请拆成两行并写清说明。
会让这一行整行复算不出来。留空就是"不知道",本工具宁可报缺格,也不用 0 替你假设。
以下检查项不在本版本范围内,调用时也不会执行(列在引擎的 CHECKS_WITHHELD 里):
同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准);
两档的差别就是上面这些,没有别的。
本免费版每次运行结束后会向服务端做一次匿名次数统计:只发送本包标识和一个不含任何材料的匿名安装标识(由主机名与用户名做短哈希得到),不发送你的材料、不写任何文件。
· 前 3 次:服务端不返回任何内容,输出与现在完全一样;
· 第 4 次起:服务端会返回一段完整档说明(完整档是另一个独立商品,条款与条件以它自己的商品页为准),届时才会打印这一行;
· 统计不可用(离线/超时/被拦截)时什么都不做,核对结果与退出码不受任何影响;
· 不想要这次统计可以加 --no-stats(核对功能完全不受影响,只是拿不到完整档说明)。
核对本身全部在本机用 Node 标准库完成,不调用任何模型、不连接快递系统或财务系统。
本免费版是完整可用的核心产出,本版本不包含下面这些项:
同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准);两档的差别就是上面这些,没有别的。
本工具不做引擎 CHECKS_OUT_OF_SCOPE 里列的那些判断:单价该按什么合同档位、抛比(体积重)怎么取、
代收手续费率是否符合代收协议、代收货款是否真的收到并转付、回单是否齐全、账务与税额怎么处理
(那些以运价合同、代收协议、银行流水与业务凭证为准)。
装到本地或在线用
· SkillHub(免费版):https://www.skillhub.cn/skills/user_ef162806/courier-settlement-check-free
· 全部免费工具:https://chenqg618.github.io/compliance-skills/
完整档(离线、无次数上限):SkillPay 买断 ¥9.9,跑多少次都不再收费;免费档与完整档的检查项差别见上面的说明。
怎么装:
https://chenqg618.github.io/compliance-skills/
免费版会明确列出哪些检查没有执行,不会让你以为已经全查过。