Stock & holds

What the shelf figure means, how to correct it honestly, how to move stock between branches, and how to put three shirts behind the counter for the customer coming back at six.

On hand and available

Two numbers, and the difference matters.

What it meansWhat changes it
On hand What is physically in the shop. The shelf count. Sales, receiving goods, adjustments, waste, transfers, cycle counts.
Reserved Stock that is here but already spoken for — a hold for a customer. Holds only.
Available On hand minus reserved. What a new customer can actually buy. Both of the above.

A hold never touches on hand, so the shelf figure stays truthful while an item is set aside. Only the sale moves on hand.

On the Inventory page the Qty column shows on hand, with (res 3) beside it when some of it is reserved. The On-hand valuation report shows On hand and Available as separate columns.

The Inventory page

Open Inventory — "On-hand grid with adjust, waste/spoilage, store transfer, ledger, lots, and cycle counts." The On hand table lists SKU, Name, Barcode, Qty, Cost, Value, Reorder and Actions.

Search matches "SKU, name, or barcode". Three filter chips narrow the list: All, Low stock and Out of stock, each with a count. Rows carry an amber Low or red Out badge.

Every row has four buttons: Adjust, Waste, Transfer, History.

Two different "low stock" rules

The badge and chips on this page use on hand, and when a product has no reorder level set they fall back to a threshold of 5. The Low stock report in Reports uses available (on hand minus reserved) and only flags an item that either has a reorder point set or has run to zero. The two screens can therefore disagree on the same product. Set a reorder level on the products you care about and both agree.

Getting stock in

There are three honest ways stock arrives, and one that is not stock at all.

  1. Receive it against a purchase order. The normal route — see Suppliers & purchase orders. Posting a goods receipt raises on hand and updates the average cost.
  2. Adjust it in for the opening count or a one-off, with a reason on the record.
  3. Receive a transfer from another store in the same company.

Importing a product CSV creates products; it does not create stock. Use Inventory → Import CSV for opening quantities.

Adjust stock

An adjustment is how you tell the system the truth when the shelf and the screen disagree. It is deliberately not silent — every adjustment carries a reason and lands in the ledger.

  1. Find the product on Inventory and press Adjust.
  2. In Change quantity by, type the change, not the new total: "e.g. 5 to add, or -2 to remove". Positive adds stock; negative removes it.
  3. Pick a Reason: Correction, Found, Shrinkage, Damage, Theft, Write-off, Spoilage, Expired, Staff meal, Sampling, Production consumption, Donation, Breakage.
  4. Add a Note if it will help the next person.
  5. Press Post adjustment.
Adjustments cannot be undone

There is no "reverse this adjustment" button. A wrong one is corrected by posting an opposite adjustment, and both entries stay in the ledger. Read the sign before you press the button — typing 12 when you meant -12 moves the count by 24.

Log waste

Waste is a deduction with a why. Use it for the tray of pastries that went in the bin, not for a counting mistake — that is an adjustment.

  1. Press Waste on the row.
  2. Enter a positive Quantity — the form takes what you lost, not the new total ("Deduct spoilage or loss from on hand").
  3. Pick a Reason: Spoilage, Expired, Damage, Breakage, Theft, Shrinkage, Staff meal, Sampling, Donation, Write-off.
  4. Press Log waste.

The Waste & loss report totals exactly these entries, valued at average cost. See Reports.

Cycle counts

A cycle count is the disciplined version of an adjustment: snapshot what the system thinks, count the shelf, and let the difference post itself.

The Stock count panel sits at the bottom of the Inventory page and needs the Advanced inventory add-on. Without it the panel says so: "Turn on Advanced inventory in Settings to run cycle counts that update on-hand stock", with a link to Open store modules.

  1. Choose a Count type — Cycle, Full or Spot.
  2. Press Start session. The panel opens the count and prints "Opened cycle count (N lines)."
  3. Walk the shelf and type the real figure into Counted for each line. Save a line to see its Variance against the snapshot.
  4. Press Finalize. Every line is saved and the differences post as inventory adjustments — "Finalized — N adjustment(s) posted."
  5. Discard throws the session away without posting anything.
Only the first 20 lines are editable

The count table shows the first 20 lines of the session, but Finalize saves and posts every line in the session — lines you never saw are submitted with the value they were loaded with. On a large catalog, count in small Spot sessions rather than opening a Full count you cannot finish on screen.

Transfers between stores

Moving stock from one branch to another keeps both counts right without two adjustments and a phone call.

  1. On the source store's Inventory, press Transfer on the product row.
  2. Pick a Destination store. Only other stores in the same company are listed; with none you get "No other stores in this org. Add another store to transfer."
  3. Enter Quantity to send.
  4. Leave Ship immediately (deducts on-hand at source) ticked to send it now — the button reads Create & ship. Untick it to prepare the paperwork and ship later — the button becomes Create draft.

Shipping deducts on hand at the source. The destination store's count rises when the transfer is received there.

One product at a time

The Transfer button builds a transfer with a single line. Moving twenty products means twenty transfers. Moving stock between locations inside one store needs the multi-warehouse add-on, which the form tells you plainly.

History — the stock ledger

History on a row opens that product's ledger: every movement that made the number what it is — sales, receipts, adjustments, waste, transfers. If a count looks wrong, this is the screen that says who did what and when. The same data across all products is the Movement history report.

Low stock and reordering

There is no automatic purchase order from low stock. You read the list and raise the PO yourself.

Lots and expiry

With Advanced inventory on, a Lots / expiry table appears on the Inventory page showing Lot, Product, Expiry and Status. Lots appear when you receive goods with lot tracking enabled. Without the add-on the section is simply not there.

Expiry is a record, not an alarm

Nothing warns the till or the manager when a lot's expiry date passes. Read the Lots table yourself, and write off expired stock with Waste → Expired.

Holding an item for a customer

"Put these three shirts behind the counter for the customer coming back at six." A hold reserves stock so nobody else can sell it, without pretending it has left the shop.

How a hold behaves

Each hold records the quantity, the product variant, an optional customer, a free-text note (a hold "for the man in the blue coat" with no customer record is perfectly valid), who created it, and its expiry.

There is no hold screen yet

Holds are built and working in the API — create, list, release, fulfil, and automatic expiry — but no page in the app shows them. There is no "Hold for customer" button on the Inventory page or at the till, and no counter list of what is being held. Until that screen ships, holds are only reachable by a system integrating with the API directly. Do not promise a customer a hold you cannot see.

Fulfil before you finalize

For anyone driving this through the API: fulfil the hold before finalizing the sale. If the reservation is still standing when the sale checks availability, the till blocks its own sale.

Screenshot to come: the Inventory On hand table with a row showing "3 (res 2)" in the Qty column and the Adjust / Waste / Transfer / History buttons.
Reserved quantity appears beside on hand, so a counter figure is never mistaken for what is sellable.

Exporting

Export CSV on the Inventory page downloads the current filtered list — SKU, product, variant, barcode, on hand, reserved, average unit cost, value, reorder point and reorder quantity, plus lot columns when lots are in play.

Long lists are capped

The page loads up to 500 rows at a time and tells you when it has more: "Showing N of M matching items (API page cap). Narrow search or stock filter to find the rest."