仓储费与库龄结算核对(免费版)
完全本地运行:引擎已经打包在本技能里(
engine/目录)。 核对过程不需要联网、不需要 API Key、不需要注册、没有调用次数上限。
什么时候用
谁会在什么时候用:仓储 / 物流的财务与对账岗,每月收到第三方仓库(3PL)或自有仓的 仓储费结算单 + 库龄明细表、在付款之前,必须把这张表核一遍才能往下走。
为什么必须核:仓储费是乘出来的 —— 体积(或托盘数)× 单价 × 计费天数, 其中计费天数 = 库龄天数 − 免租期。免租期没扣干净、天数按自然月多算、单价被悄悄上调, 这三件事都会直接乘进金额,而且表面上"自己跟自己一致",人工看一眼发现不了。 库龄超期附加费是超期占用天数 × 超期日费率,同样是乘出来的。
这张表会逐项核对什么:仓储费结算单与库龄明细表的逐行算术、合计行勾稽、重复与空缺检测。
每条结论都带原文行号与出处,可被第三方用同一份输入、同一口径复算; 材料不足时不给结论,会明确列出还缺什么。
这个免费版查什么
| # | 检查项 |
|---|---|
| 1 | 逐行复算仓储费:库存体积(或托盘数)× 结算单价 × 计费天数 = 仓储费;两种计价基础任一算平即通过,并按出入库日期复核库龄天数 |
| 2 | 计费天数复核:库龄天数 − 免租期 = 计费天数(表里第 G−H=I 列的关系) |
| 3 | 库龄超期附加费复算:超期占用天数 × 超期日费率 = 库龄超期附加费 |
| 4 | 应付合计勾稽:仓储费 + 库龄超期附加费 = 应付合计;合计行 = 各明细行逐列相加 |
| 5 | 重复行与空缺列检测:同一仓库 + 同一客户 + 同一物料出现多行;仓库/客户/物料/库龄天数/计费天数/仓储费/应付合计为空或占位符 |
| 6 | 数量、单价或金额为负检测;计费天数出现小数检测 |
免费版只执行上面 6 项;引擎里 CHECKS_WITHHELD 如实列出未执行的那几项,
跑 --sample 会打印实际执行了哪些、没执行哪些。
怎么用
node scripts/run.mjs --sample # 先看样例(一张算得平的干净表,用来确认格式)
node scripts/run.mjs --input 你的材料.json # 跑自己的材料
node scripts/run.mjs --input 你的材料.json --json # 机器可读输出
入参写法(把结算单含表头从 Excel 复制成文本贴进来,Tab 分隔最稳):
{"text": "仓库\t客户\t物料\t入库日期\t出库日期\t库存体积\t托盘数\t库龄天数\t免租期\t计费天数\t计价基础\t体积费率\t结算单价\t仓储费\t超期占用天数\t超期日费率\t库龄超期附加费\t应付合计\n上海仓\tC001\t镀锌板卷\t2026-01-01\t2026-02-01\t100.00\t5\t31\t0\t31\t体积\t1.20\t1.20\t3720.00\t0\t0\t0.00\t3720.00"}
直接以文件形式放纯文本表格也可以(--input 会把它当纯文本材料处理)。
templates/sample.json 里就是这份样例,先跑通它再换成自己的数据。
出参
--json 输出一个对象,关键字段:
| 字段 | 含义 |
|---|---|
result.status |
success 才代表真的执行了检查;材料不足时是 insufficient_input |
result.findings[] |
每条结论:level(P0/P1/P2)、category(结论类别)、line(原文行号)、message(中文说明 + 怎么自查) |
result.summary |
rows 明细行数、total 结论条数、p0/p1/p2、verdict(ERROR_FOUND / NEEDS_REVIEW / NO_ISSUE_FOUND) |
result.scope |
本次执行的检查项、未执行的检查项、tolerance 容差 |
result.checks_out_of_scope |
本工具根本不做的判断 |
result.disclaimer |
口径说明:只做表内可复算的关系,不规定仓库收费标准 |
退出码:0 已执行检查 / 1 没给入参 / 3 材料不足(此时不给任何结论)/ 4 入参读不到或无法解析 / 9 未预期错误。
常见错法(本产品专属)
- 免租期没扣、或扣错了列:计费天数是库龄天数 − 免租期,不是库龄天数本身。 免租期那一列空着时本工具按 0 天算(那就必须等于库龄天数)。免费项 2 专门盯这一条 —— 免租期错一天,仓储费与超期天数一起错。
- 把「库存体积」和「托盘数」的单价混着用:仓储费 = 计价数量 × 单价 × 计费天数,
而
元/m³·天与元/托·天差一个量级。同一行两列都填时,本工具按"哪种基础能算平就用哪种", 两列都算不平才报;想让它只按一种口径核,就填「计价基础」列(体积 / 托盘)。 - 把「仓库小计」行当成普通明细行:小计行 / 合计行的仓库列写的是「仓库小计」「合计」, 本工具会把它们从明细里摘出去、单独做勾稽。别把小计行删掉 —— 删了明细加总与合计行会天然对不上; 也别把小计行写成具体仓库名(那样它会被当成一条明细,费用凭空翻倍)。
- 库龄天数与出入库日期对不上:日期差 31 天、库龄天数写 30 天,通常是把首日或末日算重/算漏。 库龄天数是免租期与超期天数的计算基础,它一错,仓储费与超期附加费会一起错。
- 用
-/N/A/待补占位后忘了替换:占位符被当成"没填",关键列一空这条明细就无法复算。 红字冲回也不要直接把负号塞进正常行 —— 应当单独列一行并注明原因,否则合计看着正常、明细却多扣了钱。 - 天数带小数:计费天数出现
30.5这类小数,通常是把半个计费周期四舍五入进了天数, 误差会被直接乘进金额(免费项 6 会指出来)。 - 只贴了明细、没贴表头:认不出表头就不给结论(退出码 3),并且会告诉你哪些必需列没认出来 —— 这是故意的:宁可不出结论,也不用默认值编造一个"未发现问题"。
不包含什么
- 不规定仓库收费标准、免租期政策与超期附加费率(以双方合同与报价单为准,本工具只按表里的数字复算)
- 不核对出入库单、托盘流转记录、库存台账本身是否准确(需要你先导出成文本贴进来)
- 不处理税率、发票、付款账期与预付款抵扣
- 不读取 WMS / ERP / 结算系统导出的二进制文件(请先导出成文本或 JSON)
- 不做跨期比较(上月 vs 本月单价与天数)——需要你自己把两期贴成同一张表
- 核对过程核对过程不联网、不上传材料、不写任何文件
本免费版不执行下面这些检查(引擎里 CHECKS_WITHHELD 会如实列出、并在结果里标成"未执行",
不会用默认值伪造结论):
- 跨仓库 / 跨客户的汇总台账(按仓库、按客户双向汇总计费天数、体积、仓储费、超期附加费、应付合计)
- 仓库小计行逐行勾稽(本仓库明细逐列相加 = 表里那一行「仓库小计」)
- 超收金额处理清单(按超收金额从大到小排序,逐条给出"同款物料基准单价 → 应收 → 实收 → 超收"证据链)
- 费用差异归因(同仓库同客户同物料的两行,把差额拆成单价效应 / 天数效应 / 体积效应并各自配平)
- 库龄超期附加费超标清单(按加成率排序 + 按金额加权的超期费用占比)
- 同款物料计费口径不一致提示(表内出现两种以上结算单价,或两种以上超期日费率)
- 合计行数量列(体积 / 托盘数)勾稽
- 逐行的"空体积却有仓储费""库龄天数与出入库日期不符"清单
需要完整档时(可选)
本免费版是完整可用的核心产出,本版本不包含下面这些项:
- 跨仓库 / 跨客户汇总台账:按仓库、按客户双向汇总计费天数、体积、仓储费、超期附加费与应付合计
- 仓库小计行勾稽:本仓库明细逐列相加 = 表里那一行「仓库小计」
- 超收金额处理清单:按超收金额从大到小排序,逐条给出「同款物料基准单价 → 应收 → 实收 → 超收」证据链
- 费用差异归因:同仓库同客户同物料的两行,把差额拆成单价效应 / 天数效应 / 体积效应三块并各自配平
- 库龄超期附加费超标清单:按超期加成率(附加费 ÷ 仓储费)从高到低排序,给出按金额加权的超期费用占比
- 同款物料计费口径不一致提示:表内出现两种以上结算单价,或两种以上超期日费率
- 合计行数量列勾稽:合计行的体积 / 托盘数 = 各明细行逐列相加
- 空体积却有仓储费检测(计价数量与单价全空时,这一行的仓储费无从复算)
- 库龄天数与出入库日期不符提示(表里的库龄天数 ≠ 出库日期 − 入库日期)
同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准);两档的差别就是上面这些,没有别的。
边界(请务必知道)
本工具不做引擎 CHECKS_OUT_OF_SCOPE 里列的那些判断;
材料不足时不给结论(既不做"一致"的认定,也不做"不一致"的认定),
也不会输出「未发现问题」。
所有结论只是"表内数字对不上"的线索,是否付款、是否找仓库调账由你决定。
