AWRA OpsHub Search

On Hand, and Already Promised

Forty cartons on the shelf, twenty-five of them promised to a customer collecting on Monday. The till sees forty. Why “in stock” and “free to sell” are different numbers, why the rule that separates them has to live in exactly one place, and what a hold by hand is for.

Inventory Insights Washingtone Aura 12 min read

On Thursday morning a regular customer confirms an order for twenty-five cartons, to be collected on Monday. There are forty on the shelf, so nobody worries. On Thursday afternoon a walk-in buyer at the trade counter asks for thirty. The till looks at the item, sees forty, and sells thirty. On Monday the picker goes to the bay with the order in hand and finds ten.

Nobody did anything wrong. The salesperson confirmed against real stock. The cashier sold against real stock. The picker counted correctly. The failure is that the business held two true facts about those cartons — how many are on the shelf, and how many of them are already somebody else’s — and only one of them was visible at the counter.

Two numbers that are both true

Most stock systems keep one quantity per item per location and treat it as the answer to every question. It answers one question well: what would a person counting the shelf find? It answers a different question badly: what can I still give to someone new? The gap between those is every promise the business has made and not yet shipped.

On hand

  • A fact about the shelf, true whatever anyone has said to a customer.
  • What a stock count checks, and what valuation multiplies by cost.
  • Moves only when stock physically arrives or leaves.
  • The right number for an auditor and the wrong one for a till.

Free to promise

  • On hand less everything already promised at that warehouse.
  • What a till, a transfer or a new quotation may safely take.
  • Moves the moment an order is confirmed or a hold is placed, before anything leaves.
  • The right number for anyone about to commit stock to someone new.

The usual fix is to tell people. A note on the order, a sticker on the bay, a message in the team chat: “twenty-five of these are for Monday.” That works until the person at the counter is new, or busy, or in another building. A promise that lives only in a document the till never reads is not a promise the till can keep.

Stock leaves through more doors than you think

The second instinct is to add a check to the till. It is the obvious door, so it gets guarded first. Then a transfer to another site empties the bay instead, because the transfer screen was written by someone else, in a different month, and checks only that the source has enough. Stock leaves a warehouse through many routes, and every one of them can break a promise.

Door How it breaks a promise if unguarded
A sale at the till Sells the reserved cartons to a walk-in buyer.
An invoice checkout for a different customer Ships promised stock against someone else’s invoice.
A transfer to another warehouse Moves promised stock to a site the order will never pick from.
A manual check-out or issue Issues promised stock to a job, a department or a write-off.
A return to the supplier Sends promised stock back where it came from.
An assembly build Consumes a promised component into something else.
Quarantine or a status hold Takes promised stock off sale, so the order cannot ship it either.
Editing the item’s stock total Writes promised stock off as a correction.

Eight doors. A system that guards them one at a time will, sooner or later, have seven guards and a door nobody remembered, and the eighth is usually the one built last. The design question is not “what should the till check?” but “where is the one place every one of these routes has to pass?”

A rule enforced at every door is a rule somebody will forget at one of them. A rule enforced where every door leads cannot be forgotten.

One choke point, on the way out

In AWRA OpsHub every route that takes stock off a shelf ends in the same inventory service call, and that call asks the reservation service one question before it moves anything: would taking this quantity from this warehouse leave less than is promised there? If yes, nothing moves, and the person gets a sentence rather than an error code — “Only 15 of Packing Tape here is free: 25 is reserved for customer orders.”

Because the check lives in the decrease itself, the till, the invoice checkout approval, stock transfers, manual check-outs, supplier returns and assembly builds all inherit it without writing it. Placing stock in quarantine runs the same check, so stock promised to an order cannot be taken off sale while the order still counts on it. Lowering an item’s total from its edit form or over the API gives up only the unpromised part at each warehouse, and says so if the new total would write off reserved stock. A screen added next year inherits the guard as well. It only has to take stock the way everything else does.

The one exception is the promise itself

Stock reserved for an order has to leave eventually, and it leaves through the same guarded call. So the guard knows who is asking. When an invoice raised from the order is checked out, the order’s reservation is moved onto that checkout, and approving it runs the decrease on the checkout’s behalf — it may take its own promised units, and still nobody else’s. Rejecting the checkout hands the reservation back to the order line it came from.

There is a second, quieter benefit to having one place. The check locks the item’s stock rows first and its promises second, and every other path that reads or writes promises takes its locks in that same order. Two cashiers selling the last free units in the same second cannot both succeed; one waits and then sees what the other did.

How a promise is made and kept

Most promises come from sales orders, and the order’s own story — the accepted price, invoicing in parts, what happens between confirmation and delivery — is told in The Sales Order Between Tuesday and Monday. From the warehouse’s side the life of a promise is short:

  1. Confirmation reserves what is free

    Each stock line on the order reserves as much as is free at the order’s warehouse. Whatever is not free is recorded on the same reservation as a backorder, so the shortfall is visible from the moment of the promise rather than discovered at the bay.

  2. Any arrival fills backorders, oldest first

    Every increase in stock — a goods receipt, a transfer in, a return from a customer, a positive adjustment — checks whether anything is waiting on that item. If something is, the waiting promises are filled from free stock at their own warehouse, earliest first.

  3. A checkout takes the promise with it

    When an invoice from the order is checked out, that much of the reservation moves onto the checkout. Approval fulfils it as the stock leaves; rejection returns it.

  4. Cancelling gives everything back

    Cancelling the order releases every live hold on it, and the freed stock is offered straight to whoever is waiting, rather than sitting unclaimed until the next delivery happens to arrive.

Two promises and a delivery

On the shelf at Main Store 40
Held by hand for a site visit 5
Order A confirmed for 50 35 reserved, 15 backordered
Free to sell at the till 0
Delivery of 20 arrives +20 on the shelf
Order A after the delivery 50 reserved, 0 backordered
Free to sell after the delivery 5

On hand is now 60 and the till may sell 5 of them. Nothing moved on the shelf when the order was confirmed, and nothing will until the order is checked out: a reservation is a claim, not a movement.

Holds by hand

Not every promise has an order behind it. A customer says they will collect on Friday and pay then. A project manager wants the cable for next week’s installation kept aside. A sample set is being put together for a trade show. These are promises too, and if the system cannot record them they go back to being stickers on the bay.

A manual hold is the same kind of reservation without the order. You choose an item, a warehouse and a quantity, and optionally a customer, a short note saying what it is for, and a time it lapses. It can be placed from the Reservations page or from the mobile app, and it is recorded in the audit log under the person who placed it. Three rules apply, all on purpose:

  • Only free stock can be held. You cannot hold units that are already promised to an order or another hold; the refusal tells you how many are free at that warehouse.
  • The quantity fits the item’s unit. One and a half kilograms can be held; one and a half boxes cannot, because they could never be shipped.
  • A warehouse-restricted person holds at their own warehouse. The same pin that applies to every other stock posting they make applies here.

Once placed, a hold has three ways to end, and choosing between them is a real decision rather than a formality:

The reason for the hold has gone — the customer cancelled, the project slipped

Release it

The whole promise is given up. What it held becomes free, and is offered first to any backorder waiting on that item before the till can see it.

A customer will take what you have and drop what you do not

Cancel the backorder

The waiting part is dropped and recorded as cancelled; what is already held stays held. The order line still shows the full quantity ordered, so the difference is never silently lost.

The hold was only ever for a known window

Give it an expiry

An hourly job releases manual holds whose time has passed, in every workspace, and offers the freed stock to anything waiting. A hold lapses within the hour after its time rather than to the minute.

One release is refused outright: a reservation that has already moved onto a pending checkout. That stock belongs to the checkout now, and releasing it from under the checkout would let the approval fail and leave the order without its promise. The page never offered that button, and the API now refuses it as well — approve or reject the checkout instead.

Per warehouse, and not per shelf

A reservation is held at a warehouse, not at a bin and not on a batch. The promise is “twenty-five of these from Main Store,” and which twenty-five is decided when they leave. That is deliberate. If a reservation pinned a particular batch on the day of the order, it would fight the rotation rule: the order confirmed in March would hold March’s batch while the shortest-dated stock, received later, waited behind it. Leaving the choice until the stock moves means FEFO or FIFO still decides which rows go, as described in FEFO Is a Sequence, Not a Rule.

The price of that choice is precision at the edges. A customer who was shown a particular serial number, or who needs a single batch for traceability, is not served by a promise that is only about quantity. And because “on hand” in the free-stock sum counts every unit in sellable status, units in an expired or recalled batch that is still marked available count towards covering a promise — even though the decrease that ships the order will refuse to issue them. For items without batches the two figures are the same; for batch-tracked items with expired stock sitting in the bay, they are not.

What each door does with a promise

Door Refuses promised stock Says how much is free The holder may draw on it
Sale at the till Yes Yes No
Checkout of an invoice from the order Yes Yes Yes
Transfer to another warehouse Yes Yes No
Manual check-out or issue Yes Yes No
Return to the supplier Yes Yes No
Assembly build Yes Yes No
Quarantine or status hold Yes Yes No
Lowering the item’s total Yes Partly — configurable by you No

Built and maintained Configurable by you, not maintained by us Not built

The third column is the one to read. Only an order’s own checkout can draw on the order’s promise. A manual hold kept for a customer is protected from everyone — including that customer at the till — so selling it to them means releasing it first and then selling it, which is two recorded steps rather than one.

What the item page shows

Reservations never move stock between rows or statuses, so the shelf figure on an item stays the shelf figure. Beside it the item page shows what is reserved and what is free, and each line on a quotation or sales order shows what is free at its warehouse, with the reserved quantity beside it, so a salesperson promises from the right number. The Reservations register lists every live hold with its warehouse, order or note, customer and expiry, with a second tab for everything still waiting on stock.

This replaced something worth naming. Stock rows could once be marked Reserved or Allocated, which took them off sale but tied them to nothing: no order drew on them, no free-stock figure counted them, and no page explained who they were for. Those statuses can no longer be set. Rows still sitting in them can be released, and the register tells you how many units remain in that state so they can be cleared.

Before you rely on free stock

  • Confirm orders when the customer commits, not when the goods are picked — an unconfirmed order reserves nothing.
  • Give every hand-placed hold a note and, where the reason has a date, an expiry.
  • Check the Backorders tab after a large delivery to see what it filled and what is still waiting.
  • Clear any rows still sitting in the old Reserved or Allocated statuses.
  • For batch-tracked items, move expired or recalled stock out of sellable status so it stops counting towards free stock.
  • Train the counter to read the refusal message: it names the free quantity, which is the number they can sell.

The straight answer

What AWRA OpsHub does today

  • One guard on every decrease of stock, so the till, invoice checkouts, transfers, manual check-outs, supplier returns and assembly builds all refuse promised stock without each writing the check.
  • Free stock per warehouse, as on hand less live reservations, shown beside the shelf figure on the item and in the stock lookup.
  • Reservation on order confirmation, holding what is free and recording the rest as a backorder on the same line.
  • Backorders filled by any stock increase, oldest first, after the movement commits.
  • Manual holds with a customer, a note and an expiry, from the web and the mobile app, recorded in the audit log.
  • Release, cancel-backorder and hourly expiry, each offering the freed stock to whoever is waiting.
  • Quarantine and stock-total edits that respect promises, so stock cannot be taken off sale or written down from under an order.

More we can add to your workspace

  • Drawing a manual hold from the sale it was kept for, so the customer collecting on Friday can be sold their held units at the till in one step.
  • A hold pinned to a batch, a bin or a serial number, for the customer who was shown a particular unit or needs one lot for traceability.
  • Free stock measured net of expired and recalled batches, so a promise counts as covered only by units that can actually be issued.
  • Backorder priority by customer, due date or order value, set per workspace, alongside the oldest-first default.
  • A notice to the order’s owner when a backorder fills, in the bell and by email.
  • Filling a backorder from another warehouse, by proposing the transfer when stock lands at a different site.
  • An expiry on order reservations, for orders confirmed and then left untouched.

Where we point you to a specialist

  • We do not let a password at the till override a promise. The route past a reservation is to release it, and a release is recorded against the person who made it; an override that leaves no reason behind is how a promise gets broken without anyone deciding to break it.
  • We do not decide which customer deserves stock when there is not enough for everyone. The system applies a stated rule and shows you the result; choosing between two customers is a commercial judgement that belongs to the people who answer to them.

The first item is a narrow change to who may draw on a promise, and the third is a change to which rows the free-stock sum reads. Priority, notices and cross-warehouse proposals build on the backorder queue that already exists. Tell us which of these your counter runs into first.

More we can add to your workspace

Anything above that you need, we can build for you

Everything listed above as something we can add describes what ships in the standard product today — it is a starting point, not a limit on what AWRA OpsHub can do for your organisation. Kenya's eTIMS integration and its maintained payroll engine are both in the product because clients needed them and commissioned them; neither appeared by itself, and the same door is open for whatever you just read about. One qualification so this is worth what it claims: a small number of things on this blog we deliberately leave to a specialist rather than build — a statutory ledger we will not sign our name to, a rule that would decide a tax question for you, a clinical or member-funds record that belongs in a regulated system — and where that is true the post says so in those words. Everything else is a scope, a timeline and a price.

The operational work, which is what most commissions actually are

An extra approval stage in a chain that does not match the standard one, a custom field set on employees or assets that only your sector needs, an expiry that has to block an order rather than send an email, a report your board asks for in a shape nothing produces, or a scanner or weighbridge feeding the goods-in door. These are the commissions we are asked for most often and the smallest ones we quote — and unlike a revenue-authority pipeline, none of them waits on a regulator.

The module-shaped additions, which are the ones readers ask for most often

A price list with real discount authority, a customer-facing quotation that expires, a bill of materials or recipe costing, a staff advance that is issued, acquitted and chased, a member or unit ledger, a matching rule that holds a payment. Each of these is a build rather than a setting, and each has been quoted before — a bigger piece of work than a custom field, with a written spec and a date instead of a roadmap slide.

The report, document or pack nothing currently produces

The board pack in the shape your board actually asks for, a donor or funder layout, an invoice or receipt template carrying what your regulator or your customer expects, a dataset the report builder cannot reach yet. Usually the fastest thing on this list to deliver, because the data is already in the system.

Systems, rails and hardware you already run

The accounting package, CRM, online store, core banking or custom database you intend to keep — connected through our API so a fact is entered once and appears everywhere it is needed. Plus the physical edge: a scanner, a scale, a weighbridge or a till peripheral feeding the door it belongs to.

How it works: you describe the requirement, we return a written scope, timeline and cost, and once agreed it is built into your environment and maintained as part of the product. Nothing here waits on a regulator or a published specification, which is why operational builds are the ones we quote fastest. Tell us the requirement that would otherwise rule us out — that is a better first conversation than a demo.

Tell us what your operation needs

Four questions for any system that claims to reserve stock

If I transfer reserved stock to another site, what stops me?

What you will probably hear

The order shows it as reserved.

How to read it

Showing is not stopping. Ask whether the transfer itself is refused, and whether the same is true of returns, issues and stock adjustments — not only the till.

Where is the check written?

What you will probably hear

On the sales screens.

How to read it

Then every new screen that moves stock needs someone to remember it. The answer you want is a single point that every decrease passes through.

When stock arrives, who gets it?

What you will probably hear

Whoever picks first.

How to read it

That makes the backorder a list someone reads rather than a queue the system serves. Ask whether a receipt fills waiting promises automatically, and in what order.

Can I hold stock without raising an order?

What you will probably hear

Raise a draft order.

How to read it

A draft that reserves is a workaround with side effects on your sales figures. A manual hold with a note and an expiry is a promise recorded as what it is.

Our take

The test of a reservation system is not whether it can show a reserved figure — most can — but whether there is any route left by which promised stock can still leave. Putting the rule inside the one call every decrease makes is what closes those routes, including the ones nobody has built yet. Manual holds then turn the stickers on the bay into records with an owner and an end date. What remains is precision: who may draw on a hand-placed hold, whether expired batches count towards free stock, and who is first in line when stock is short. Those are refinements on a guard that already holds, which is the right way round.

See reservations and backorders

How confirmed orders, manual holds and backorders work together, and what each screen shows.

Stock reservations and backorders

Frequently asked questions

What is the difference between on hand and free stock?

On hand is what a person counting the shelf would find. Free stock is on hand less everything already promised at that warehouse, to confirmed orders and to holds placed by hand. The till, transfers and other outgoing movements may only take free stock.

Which movements are stopped from taking reserved stock?

Sales at the till, invoice checkouts for other customers, transfers to other warehouses, manual check-outs, returns to suppliers and assembly builds are all refused if they would eat into promised stock. Placing stock in quarantine and lowering an item’s total are held to the same rule.

Can I hold stock for a customer without raising a sales order?

Yes. A manual hold takes an item, a warehouse and a quantity, with an optional customer, note and expiry. Only free stock can be held, and the hold can be placed from the web or the mobile app.

What happens when a hold expires?

An hourly job releases manual holds whose expiry has passed and offers the freed stock to any backorder waiting on that item. Holds made by confirming a sales order do not expire; they end when the order is fulfilled or cancelled, or when someone releases them.

Who gets stock when a delivery arrives and several orders are waiting?

Waiting orders are filled oldest first, from free stock at each order’s own warehouse. Any increase in stock triggers this, including receipts, transfers in and positive adjustments.

Does a reservation hold a particular batch or bin?

No. A reservation is a quantity at a warehouse. Which batch or bin is used is decided when the stock leaves, so the item’s FEFO or FIFO rotation still applies.

Share this article

LinkedIn X WhatsApp

Help Center

Need a quick answer while you read?

Run inventory, procurement, assets, sales, and field work with approved AWRA guidance for setup, migration, integrations, security, pricing, and support.

Search all approved AWRA public help articles.

Open Help Center