One ledger. Item, location, lot, and client all answer to it.

Nothing overwrites a balance directly. Every count, move, and correction is a line, and the balance is only ever the sum of the lines.

4
Ways to read the same balance
By item, by location, by lot, or by client.
0
Balances edited by hand
Every change is a move, an adjustment, or a count.
Inventory

Lots respect an expiry date. Holds move stock without moving the shelf.

Stock → KB-SHEET-24 · by location H Mart Distribution Co
A-14-02 — Lot L-0912, exp 14 Mar 2027312 ea
A-14-03 — Lot L-0847, exp 02 Jan 202796 ea
Hold — B-02-01, Lot L-0912Pending QA
L-0847 expires first, so it allocates first — unless the order is marked FIFO instead.

A hold is a status, not a move.

Stock flagged for QA, a claim, or a client instruction stays exactly where it is on the shelf. What changes is whether allocation is allowed to see it — the location record and the ledger both keep a full history of when the status changed and who changed it.

What happens when it leaves →

Lots and expiry

Choose which stock should ship first.

A lot carries its own expiry date from the day it is received. Allocation reads it automatically — the soonest-to-expire lot of an item goes out first, with an order’s requested lot respected when one is specified.

Aging

Stock that has sat too long shows itself.

A report reads the same lot dates and flags what is approaching its expiry or has simply not moved — a warehouse manager sees the problem before a client asks why a pallet is still there.

Counts and adjustments

A slice of the floor, counted blind. A correction, with a reason attached.

Adjustments

Damaged, expired, found, miscount.

A correction is never just a new number. The reason code travels with the line into the ledger, so a pattern of damage on one lane shows up in a report instead of staying a hunch.

Cycle counts

Counted before the system’s number is shown.

A counter enters what they see on the shelf first. Only then does the screen show the expected count, and a variance has to be confirmed before it reaches the ledger — not overwritten by whoever counted last.

Replenishment

Refill the locations used for daily picking.

A pick location below its minimum raises a task to pull from reserve stock, so a picker finds a full bin instead of an empty one halfway through a wave.

3PL billing

Every scan is a rate-card line, waiting for month-end.

Storage is the clearest of the billable events, because it never needs a person to remember to start counting — but it is one of many. Receiving a pallet, picking a line, packing a carton, and assembling a kit each write their own event the moment they happen.

Fig. 1 — The scan starts the clock. The ship-out stops it.Illustrative workflow
Receiving scan clock on clock off Storage clock — running counted by the system Ship out one line on the invoice Storage — that many pallet-days, at the rate already on the card a warehouse's storage revenue stops being something counted on a calendar and forgotten
Storage is one billable event among several — receiving, picking, packing, and VAS write their own lines the same way.
Billing → H Mart Distribution Co · August Rate card HMD-2026
Receiving — 3 ASNs, 44 pallets660.00
Storage — 312 pallet-days1,872.00
Pick and pack — 188 order lines564.00
Invoice INV-2026-3301, due on receipt3,096.00
Every dollar on the invoice traces back to a scan with a time stamp.

The rate card is set once, per client.

A receiving fee per pallet, a storage rate per pallet-day, a pick fee per line, a rate for a kitting hour — each client’s card can differ, and eligible services are priced using the rate effective on the day the work was performed.

Back to WMS →

Connected warehouse tools

Find the location behind the task.

Use Floor Studio to prepare your storage locations and labels. In daily operations, the warehouse map helps your team find recorded products and task destinations.

Warehouse setup and maps → · Warehouse terms explained →

Get a demo

One disputed month of storage is welcome.

Bring a month you argued about with a client, and a rate card with real numbers on it. The real dates run through the card on the call, checked against an invoice you actually sent. 45 minutes.