Manage stock day to day
Stock work is four verbs: goods come in, numbers get corrected, orders hold stock, and returns put stock back. Each of them is a booking in a ledger, and that is what makes the number defensible three months later.
Everything is a movement
on_hand and reserved are not editable fields. They are the running total of
the movement ledger, and there are exactly six kinds of booking:
| Type | What causes it |
|---|---|
inbound | Goods received |
adjustment | A signed correction, with a reason |
reserve | Stock held for an order |
release | A hold given back |
shipment | A shipment committing its hold |
restock | Returned goods rejoining stock |
Writing a new on_hand value over the old one is refused — the platform tells
you which route was meant instead. That refusal is doing you a favour: a stock
figure that can be typed over is a figure nobody can explain later.
Everything is on Order Management › Stock, which has four tabs: Stock levels, Locations, Reservations and Movements.
Receive goods
- Go to Order Management › Stock › Stock levels.
- Select Receive goods.
- Enter the article (SKU or product) and the quantity. Name the location, or leave it out and the default location is used.
- Confirm.
on_hand goes up and an inbound movement is booked. This is for goods
genuinely arriving — a supplier delivery, a transfer in.
Correct a count
- Select Adjust stock on the same screen.
- Enter the article and a signed quantity:
-2for a shortfall,+2for a find. - Enter a reason —
stocktake,breakage,found in Halle 3. - Confirm.
An adjustment is a correction, not a delivery, and keeping the two apart is what makes your inbound figures mean anything. Whether a reason is mandatory is configurable; requiring one on adjustments and not on inbound is the sensible setting, because an adjustment is exactly the booking that needs explaining.
Adjustments are guarded: they will not take stock below zero, and they will not take it below what is already reserved. If you genuinely have less than you promised, release the reservations first and deal with the affected orders — silently taking stock from under a reserved order only moves the problem to the picking list.
Reservations
A reservation holds stock for one order. It carries the order reference, a quantity, a status and an expiry.
| Status | Meaning |
|---|---|
active | Holding stock. It counts against available |
released | Given back |
committed | Consumed by a shipment |
Reservations are created at checkout if your tenant is configured for it, and by
the Reserve for an order action for a hold you make by hand. Release a
hold gives one back; Commit a shipment consumes it, taking the goods out
of on_hand and out of reserved together.
Release expired on Order Management › Stock › Reservations runs the expiry sweep on demand. It also runs on a schedule, so a checkout somebody abandoned gives its stock back on its own.
active reservations against orders that were never placed. Check the
reservations tab before you adjust anything — an adjustment on top of a stale
hold makes the numbers worse, not better.Restock a return
Returned goods that were marked for restock are booked back in. Restock a
return does it explicitly, and the result is a restock movement.
Do this when the goods have actually been inspected and cleared, not when the return record was created. The two are different moments, and the gap between them is exactly what a quarantine bench is.
Read the ledger
Order Management › Stock › Movements is every booking, with its type, quantity, location, order reference and reason. It is the answer to "why does this article say 14 when it said 20 on Monday" — read the movements between the two dates and the difference is spelled out.
Filter by article and read it top to bottom. If the movements do not add up to the current level, something wrote stock outside the ledger, which is an integration question — see Sync errors.
Watch the reorder points
A row alerts when available has fallen to or below its reorder point.
reorder_point is a sortable column on the stock list, which is how you find
the rows that need attention.
Alerts also publish as events, so replenishment can be driven by a subscriber — a purchasing workflow, an ERP proposal — rather than by somebody refreshing a page. See Events and webhooks.
What to check
After a day's bookings:
- Every stock level equals
on_hand − reservedforavailable, and matches what the shelf holds for the articles you spot-check. - Every adjustment carries a reason you would accept in an audit.
- No
activereservation is older than your reservation lifetime. - Restocked returns show up as
restock, not asinbound.
Next
- When stock numbers drift — the weekly maintenance loop.
- Stock, locations and availability — the settings behind all of this.