Every inventory system ships transfers. You pick a source, pick a destination, list the lines, and somebody approves it. It works, and for a planned rebalance between two known locations it is exactly right.
It falls apart the moment the question changes from "how do I move this there" to "who can actually sell this". A warehouse holding 400 units of a slow mover does not know which of forty outlets has the shelf space, the footfall or the customer for it. So somebody at head office guesses, splits it four ways, and two of those four outlets quietly write it off three months later.
The pool has no destination
An open transfer inverts it. The source dispatches into a pool that belongs to no location. The stock has genuinely left the source — the ledger records a TRANSFER_OUT and the source's on-hand drops — but it is not yet anybody's in-transit balance, because nobody has claimed it.
Eligible locations then see what is available and claim what they want. A claim is the moment the units get an owner: they move into the claiming location's in-transit balance, the pool's available quantity drops, and the claim waits to be received like any other delivery.
| Step | Source on hand | Pool | Claimant in transit | Claimant on hand |
|---|---|---|---|---|
| Dispatched | −400 | 400 | 0 | 0 |
| Outlet A claims 120 | −400 | 280 | 120 | 0 |
| Outlet A receives | −400 | 280 | 0 | +120 |
| Pool closed with 280 left | +280 returned | 0 | 0 | +120 |
What the design has to get right
- Two outlets claiming the same last units cannot both win — claims lock the transfer row and check what is genuinely available.
- A claim that is never received cannot strand stock: the claimant or the sender can release it back into the pool.
- A partial receipt has to be a decision, not a silent loss — you either leave the rest claimed or release it in the same action.
- The pool must be closeable while claims are still outstanding, so the sender can stop new claims without cancelling real ones.
That last point is why an open transfer has both a CLOSED and a RECEIVED state. Closed means no new claims. Received means every dispatched unit has been received or returned. A pool passes through the first on its way to the second, and a transfer that was fully claimed skips straight there.
Who may claim
By default a pool is published to the source's own region, because a pallet in Gurugram is not much use to an outlet in Bengaluru. You can open it organization-wide when the economics justify the freight. Either way, the claim is still checked against the viewer's data scope on the server: being able to see a pool is not the same as being able to pull stock into a location you do not run.
The people who know whether a product will sell are standing next to the shelf. The transfer flow should let them say so.
Direct transfers did not go anywhere — they are still the right tool when the destination is known. Open pools are for the other half of the job, the half that used to be done in a group chat.