Free days are business days. Money is calendar days.

Sixty-odd U.S. CFS tariffs all state the same two things together: 5 W DAYS free, then PER DAY. Those are two different calendars in one sentence, and a warehouse that treats them as one is wrong twice.

2
Switches rather than one
Two clocks are two settings. Tying them together makes one of them lie.
29%
What tying them costs
Weekends are two days in seven. When they stop being billed, that is roughly what leaves with them.
What it does

One line, carrying the numbers it was made from.

The charge is a subtraction between two scans that already happened. Everything the subtraction used is printed on the line, so the line can be checked without opening the rule, the tariff or anybody’s memory of August.

Storage — HBL AMC-2026-0417 Rule CFS-STD-01
In — receiving scanTue 04 Aug 09:12 PDT
Out — loadedThu 20 Aug 15:40 PDT
Free — 5 business daysTue 04 → Mon 10 Aug
Sat 08 and Sun 09 fall inside the free period, so they are free. Weekends inside free time always are.
Chargeable — calendar daysTue 11 → Thu 20 Aug = 10
Sat 15 and Sun 16 are charged. They are outside the free period, and the tariff says PER DAY.
Basis — per revenue ton18.300 CBM / 12,000 KGS · W/M = 18.300 R.TON
18.300 R.TON × 10 days × $0.45$82.35
Minimum charge
$75.00, applied once, at the end. This line is already above it, so nothing is added.

The line is read rather than the rule.

A storage charge is the one line on a freight invoice a customer will dispute without reading the rest, because it is the one line they could have avoided. The line therefore answers the argument by itself: when it came in, when it went out, which days were free, which days were charged, what the cubic metres and the kilos were, and which of the two the revenue ton came from.

That last pair matters. Eighteen point three cubic metres exceeds twelve thousand kilos here, so the revenue ton is 18.300 — the same W/M convention the ocean tariff uses, one cubic metre or 1,000 kilos, whichever yields the greater revenue.

Where 18.300 CBM was measured →

Recording — 10 s, silent, loops R-08 · not yet shot
What it shows A storage line printing its own arithmetic: in, out, which days were free, which were charged, and which of the cubic metres or the kilos won.
Where to shoot it Storage — HBL AMC-2026-0417, rule CFS-STD-01, on the demo company
The take
  1. Open the storage line on that house bill.
  2. Walk the cursor slowly down it: in 04 Aug, out 20 Aug, free Tue 04 → Mon 10, chargeable Tue 11 → Thu 20 = 10.
  3. Stop on the last row: 18.300 R.TON × 10 days × $0.45 = $82.35.
Why here This is the one invoice line a customer argues about before reading the rest. As prose it takes a paragraph; as a slow pan down the line it takes eight seconds and ends the argument.
One rule

Two clocks are two switches.

It would be simpler to ship this as one setting called “count weekends”. CBMGO did not, because there is no position that setting could take that is right.

With the single switch on

Business days now govern both halves, so weekends stop being billed as well as being given. Weekends are two days in seven, so the warehouse collects about 29% less than its published tariff says it should — and nothing on the invoice looks wrong, because every line is individually plausible.

With the single switch off

Calendar days now govern both halves, so the free period becomes shorter. Five free days that straddle a weekend become three working days of free time. The customer was promised 5 W DAYS by the published tariff, and will find the difference before the warehouse does.

Weekends inside the free period are always free
Whatever else is configured, a Saturday or a Sunday that falls within free time is not charged. Free time is measured in business days, so the weekend is not one of the five — it is a day that does not count against the customer.
The minimum applies once, at the end
It is a floor under the finished line, not a per-day charge and not a per-month charge. It is applied after the days are counted and the basis is priced, and only then.
Cargo that left inside free time is not billed a minimum
There is nothing for the minimum to be a floor under. A minimum charged on a shipment that never used a paid day is not storage revenue — it is a penalty with a storage line’s name on it, and the customer reads it exactly that way.
Fig. 1 — Free time counts working days. Money counts every day.lib/storage.ts
US CFS rate sheet “5 W DAYS” free, then “PER DAY” free time ends ThuFriSatSunMonTueWedThuFriSatSunMonTueWed Free time 5 W DAYS 1 2 3 4 5 five working days — the weekend inside is skipped in the count, and free anyway Storage PER DAY 1 2 3 4 5 6 7 these two are the gap calendar days from here — the weekend is charged like any other day Two gauges, so two switches. Tie them to one and you bill about twenty–nine per cent less.
Tying the two gauges to one switch forces a choice between billing about twenty-nine per cent less and silently shortening the advertised free time.

When the rule cannot be run, it does not guess.

A rule that charges per revenue ton requires a volume. If the volume was never measured, there is no honest number to print — so nothing is printed.

Storage — HBL AMC-2026-0455 Cannot price
In — receiving scanMon 17 Aug 11:04 PDT
Out — loadedFri 28 Aug 08:20 PDT
Free — 5 business daysMon 17 → Fri 21 Aug
Chargeable — calendar daysSat 22 → Fri 28 Aug = 7
Sat 22 and Sun 23 are charged. The free period ended on the Friday, so that weekend falls outside it.
Basis — per revenue ton— KGS on file, no CBM
this rule charges per revenue ton and there is no volume on fileNo amount
What the line is worth right now
Nothing is written in the amount column. The days are counted and shown, the missing input is named, and the line waits.

The alternative is a number nobody can defend.

Software that must return something will return something: a zero, a guess from the last shipment, a charge priced on weight because weight was the field that happened to be filled. All three reach the customer as a real invoice line, and all three are found by the customer rather than by the warehouse.

A release here is stopped by check_silent_errors for drawing a zero when the read behind it failed. This is the same principle one step further down: an amount the rule could not derive is not written at all, and the sentence on the screen says which input is missing so somebody can go and measure it.

Everything the platform does not do →

What it does not do

Stated plainly, in one place.

It will not invent an amount
A rule missing an input produces a named gap rather than a figure. Occasionally a line will need to be corrected by hand, which is the price of never having a line that cannot be explained.
It will not fine a customer for leaving on time
No minimum on cargo that went out inside its free days.
No general ledger
Storage lines join the shipment’s other charges and go out to QuickBooks both ways. There is no chart of accounts here, no bank reconciliation and no month-end close.
No custom report builder
Storage lines export with everything else — CSV or Excel, and shipments in five shapes including every field held in the system. Reports are built where the office already builds them.
Get a demo

One disputed month of storage is welcome.

The existing tariff is set up as a rule — free days in business days, charged days in calendar days, the minimum once at the end — the real dates are run through it, and the line is placed next to the invoice that was sent. If the result is lower than what was billed, CBMGO will say so.