One Reorder Point in Every Building
Stock balancing suggests moving stock from where there is too much to where there is too little. Each warehouse can now carry its own minimum; any warehouse without one is still judged against the single number on the item — the same threshold in every building, and on the default of zero, nowhere is ever short.
Read this first
The balancing suggestion engine is sound in its arithmetic and precise about one thing most implementations get wrong — it decrements the surplus as it allocates, so two short locations are never offered the same stock twice. What decides whether it is useful to you is the threshold it compares against. Since October 2026 each warehouse can carry its own minimum, and where one is set the engine uses it. Where none is set, it falls back to the one reorder point held on the item, compared against the quantity at each location separately — so a threshold you set thinking about total cover is applied in full at every branch that holds the item. And that column defaults to zero, which makes the arithmetic degenerate: nowhere can be below zero, so nothing is ever short, and every stocked location is classified as having a surplus. An unconfigured catalogue produces an empty list — correctly, and for a reason no screen explains.
The suggestion list is empty, the stock is unevenly spread, and both of those things are true at once for a reason that is arithmetic rather than a fault.
What the engine does
It reads every item-location holding in the workspace and sorts each one into a category. A location holding less than the item's reorder point is short. A location holding more than it has a surplus. Then, for each short location, it looks for surplus of the same item somewhere else and proposes a movement.
The proposal names both ends — warehouse and location, at source and destination — the item, the quantity, and a priority. Priority is high when the destination holds nothing at all, and medium otherwise, which is a sensible distinction: an empty shelf is a different problem from a low one.
It suggests. It does not move anything.
The output is a list a person reads. Nothing is transferred, no stock changes, and no transfer is created. That is worth stating plainly because an engine described as "balancing" invites the assumption that it balances, and this one advises. The same suggestions are available on a page, as a JSON response and through the API, all from one implementation.
The allocation detail worth crediting
One part of the arithmetic is done properly in a way that is easy to get wrong.
Suppose three branches are short of the same item and one central store has a surplus of ten. A naive implementation offers all three branches a movement from the central store, because it evaluates each shortage independently against the same surplus. Follow all three suggestions and you have promised thirty units from a store holding ten.
This engine reduces its working copy of the surplus as it allocates. The first branch is offered what it needs, the surplus falls, and the second branch is offered what is left. The suggestions add up.
A list of individually reasonable suggestions that cannot all be followed is worse than a shorter list, because somebody follows them.
The one number in every building
Now the shape that decides whether any of this is useful.
Updated 15 October 2026: a minimum and maximum per warehouse
When this was first written there was one reorder point, on the item, and nowhere else. Each warehouse can now carry its own minimum and maximum, set on the item's Stock tab on the web or on the item in the mobile app. Where a warehouse has one, balancing judges it against its own minimum; where it has none, the item's reorder point still applies, exactly as described below. Balancing reads the minimum only — anything above it still counts as surplus — and the level is per warehouse, applied at each bin inside it.
For every warehouse without its own level, the reorder point is a single column on the item. Both tests in the engine — short, and surplus — then compare a location's quantity against that item-level number.
Set a reorder point of a hundred, and every location holding the item wants a hundred. With five branches, the workspace is asking to carry five hundred before anything counts as adequately stocked. Anything above a hundred at any one branch is a surplus available to be moved away.
One item, a reorder point of 100, four locations
The workspace holds seven times the reorder point and the engine still reports two locations short — correctly, on its own terms. Branch B genuinely has nothing on the shelf, and no amount of stock in the main store puts it there. Whether Branch A being five units below a threshold designed for the whole business is worth a movement is the judgement the single column cannot make for you — and the reason to give Branch A its own minimum, which the engine then uses instead.
Read that table twice, because it contains both the criticism and the defence. Per-location measurement is what makes the engine useful at all — the whole point is that stock in the wrong building does not help the building that is out. And the threshold it measures against was almost certainly chosen with the whole business in mind.
What zero does
The reorder point column defaults to zero, and zero makes both tests degenerate.
Short means holding less than the reorder point. Less than zero is not a quantity any location has. So with the default, nowhere is ever short and there are no destinations.
Surplus means holding more than the reorder point. More than zero is every location with any stock at all. So with the default, everywhere with stock is a donor.
Sources and no destinations produces an empty list. The engine is working exactly as written and reporting nothing, and the reason is a column nobody filled in.
This is the useful diagnosis, and it applies well beyond here
An empty result from an analytical feature has two causes that look identical: there is nothing to report, or the input it depends on has never been configured. Both render as a page saying nothing needs attention. Whenever a report or a suggestion engine is quietly empty, check what it reads before concluding it is telling you good news.
How to make it work for you
-
Set reorder points on the items that matter
Not the whole catalogue. The fast movers and the ones whose absence stops work. Everything left at zero is invisible to the engine, which is a reasonable way to keep the list short on purpose.
-
Give each warehouse that differs its own minimum
On the item's Stock tab, set a minimum and maximum for each warehouse whose needs differ from the rest. The item's reorder point stays the default for every warehouse you leave blank, so set it as what one branch should have on the shelf, not what the business should hold in total — the engine applies it at each location, and an answer meant for the total reads as a demand at every site.
-
Expect the main store to look like a permanent donor
A central store deliberately holding bulk will exceed its floor by a wide margin and be offered as a source for everything — balancing reads the minimum, not the maximum. Giving the main store a higher minimum of its own keeps a reserve there; otherwise it is correct behaviour that will still feel odd on the list, so know it in advance rather than concluding the figures are wrong.
-
Treat high priority as the real list
A destination at zero is out of stock, which is a fact rather than a judgement about a threshold. Those entries are worth acting on whatever you think of the number that produced the medium ones.
What AWRA OpsHub does today
- Transfer suggestions computed across every item-location holding in the workspace, comparing each location against its warehouse's own minimum where one is set, and the item's reorder point where it is not.
- A minimum and maximum per warehouse, overriding the item's reorder point — set on the item's Stock tab on the web or in the mobile app, read by balancing and by Reorder, and never overwritten by the nightly recalculation.
- Surplus decremented as it is allocated, so several short locations are never offered the same stock and the suggestions add up to something that can actually be followed.
- A priority distinguishing a destination that is completely out from one that is merely below its threshold.
- Both ends of a proposed movement identified by warehouse and location, by name for the reader and by identifier for whatever acts on it.
- The same suggestions available on a page, as a JSON response and through the API, all from one implementation so the three cannot disagree.
- Suggestions strictly advisory — nothing moves stock, so a wrong threshold produces a wrong list rather than a wrong warehouse.
- Holdings grouped per item, warehouse and location, matching the uniqueness the stock table already enforces.
More we can add to your workspace
- Surplus measured against a warehouse's maximum rather than its minimum, so a bulk store stops reading as a permanent donor.
- A level per bin inside a warehouse, so a picking face and the reserve racking behind it can each carry their own minimum.
- A note on an empty suggestion list explaining that no reorder points are set, so a quiet page distinguishes good news from an unconfigured one.
- Reorder points derived from consumption, so the figure follows what a location actually uses rather than being set once and left.
- Movement cost or distance in the ranking, so a suggestion prefers the nearer source when two could serve.
- Creating the transfer from a suggestion, turning an advisory list into an action rather than a set of figures to re-enter.
Where we point you to a specialist
- We hold that balancing stays advisory. A system that moves stock between buildings on its own is making a logistics decision with a cost attached, and the person who signs for the vehicle should be the person who decided it was worth sending.
- Where stock is held under a licence, a bond or a controlled-substance regime that governs which premises may hold it, that regime governs and we point you to your own advisers on what it permits. A suggestion engine reading only quantities will happily propose a movement your licence forbids.
- We would decline to derive a reorder point automatically and apply it without being asked. A threshold that changes on its own alters what counts as a shortage, and a buyer who cannot say why the figure moved stops trusting the list.
The minimum and maximum per warehouse are already in place; letting balancing read the maximum as the line for surplus is the next piece, and it is what turns the levels into a full stocking policy. If you run a bulk store beside several branches, that is the piece to scope.
From one threshold to a stocking policy
The engine's arithmetic is already correct, and each warehouse can already record its own minimum and maximum. What remains is letting the maximum shape the surplus side too, which is the fact that makes multi-location stock interesting in the first place.
Surplus against the maximum
Balancing that treats only stock above a warehouse's maximum as available to move, so a bulk store and a service van stop being read the same way.
An explained empty list
The smallest item here: a page reporting nothing to balance should say whether that is because nothing is short or because no thresholds are set.
A suggestion you can act on
Creating the transfer from the suggestion, with both ends already chosen, rather than reading the figures off one screen and typing them into another.
We publish scope, not dates.
Scope multi-location stockingFour questions for any multi-location stock system
Is the reorder point per item or per location?
A good answer sounds like
Per location, with an item-level default.
What ours actually is
Per warehouse where you set one, with the item's reorder point as the default everywhere else. Ask it in exactly those words — “we support reorder points” is true of both answers and they behave completely differently across five branches.
What counts as surplus?
A good answer sounds like
Above a maximum set for that location.
What ours actually is
Above the warehouse's minimum, or the item's reorder point where it has none — balancing does not yet read the maximum, so a bulk store can still read as a donor. Worth knowing before reading the list rather than while puzzling over it.
If two branches are short, can they both be offered the same stock?
A good answer sounds like
No, allocation is deducted as it goes.
What ours actually is
No. The surplus is decremented as it is allocated. This is a good question for any suggestion engine and a surprising number get it wrong.
Does an empty list mean nothing needs moving?
A good answer sounds like
It distinguishes the two cases.
What ours actually is
Not necessarily — with no reorder points set, the list is empty by arithmetic. Ask it of any analytical screen you rely on, because a quiet page and a good result look identical.
Check one column before you judge the feature
Open your ten fastest-moving items and look at the reorder point on each. If they are all zero, the balancing list has been empty for a reason that has nothing to do with your stock, and ten minutes of typing changes that.
Talk through your stocking levelsFrequently asked questions
Why is my balancing suggestion list empty?
Most often because no reorder points are set. The column defaults to zero, and the arithmetic then makes it impossible for anywhere to be short: a location is short when it holds less than the reorder point, and no location holds less than zero. Every stocked location is simultaneously classified as having a surplus. Sources with no destinations produces an empty list, and the engine is working exactly as written.
Is the reorder point per item or per location?
Both, since October 2026. Each warehouse can carry its own minimum and maximum, set on the item's Stock tab, and balancing compares that warehouse's holdings against its own minimum. A warehouse with no level of its own falls back to the item's single reorder point — so with five branches and no warehouse levels, a reorder point of a hundred still means the workspace is asking to carry five hundred before nothing is reported as short. Low-stock alerts still compare the item's total stock with the item's reorder point.
Why does my main store always appear as a source?
Because surplus is defined as holding more than the floor — the warehouse's own minimum, or the item's reorder point — and a central store deliberately carrying bulk will exceed a shelf-level threshold by a wide margin. Giving the main store a higher minimum of its own keeps a reserve there. Balancing does not read the warehouse maximum yet; letting surplus mean more than this place should hold is the piece we would build next.
Can I follow every suggestion on the list?
Yes, and that is a deliberate property rather than a coincidence. The engine reduces its working copy of a source's surplus as it allocates, so if three branches need the same item from one store, each is offered a share of what is actually there rather than all three being offered the full amount. A list of individually reasonable suggestions that cannot all be followed is worse than a shorter list, because somebody follows them.
Does it move stock automatically?
No. The output is a list of suggestions that a person reads and decides about, available on a page, as a JSON response and through the API. Nothing is transferred and no transfer is created. We hold that this should stay advisory: moving stock between buildings has a cost attached, and the person who signs for the vehicle should be the one who decided it was worth sending.
How should I choose the item's reorder point, given it applies everywhere without a level?
Give each warehouse whose needs differ its own minimum, and set the item's figure as what one location should have on the shelf, not the total the business should hold. That is the mental adjustment that makes the rest behave sensibly. And set it only on the items that matter — the fast movers and the ones whose absence stops work — because everything left at zero stays invisible to the engine, which is a reasonable way of keeping the list short deliberately.