Skip to main content

Stock and Goods Received

A transfer touches stock twice, and the two moments do different things. Getting them the wrong way round is the most expensive misunderstanding available here, because it decides whether a store thinks it can sell something.

Two moments, and both stores move at each one​

Each step writes to both stores, in different stock types. The types are the whole story here, so they are worth reading carefully:

When the request is sent​

StoreStock typeEffect
sendingReserved+ requested — the goods are set aside
receivingOn order+ requested — the goods are expected

Nobody's sellable stock changes. The units are still physically on the shelf at the sending store and still counted there; what changes is that they are now spoken for, which is what stops the same units being promised twice. At the receiving store nothing has arrived — the on-order figure says something is coming, not that it is here.

When the transfer is completed​

StoreStock typeEffect
sendingSellable− approved — the goods leave
sendingIn transit+ approved — they are on their way
sendingReservedreleased in full
receivingOn ordercorrected to what actually shipped

Completion moves quantityApproved — the picked quantity — not the quantity originally asked for.

🛑 Completion does not add anything to the receiving store's sellable stock. The goods are in transit; the receiving store's on-order figure is corrected to the real quantity, but nothing becomes sellable there until the delivery is received — a separate step in a different service, see below.

This is deliberate: goods in a van are sellable nowhere, and a system that credited the destination on despatch would let a store sell stock that has not arrived.

If nothing could be picked​

A pick can come back empty — the items were not on the shelf after all, and every line is picked at zero. The transfer still completes, and that is the correct outcome rather than a failure: it records that the request was answered and nothing was sent.

Both reservations unwind cleanly. The release is calculated from what is actually outstanding rather than from the picked quantity, so a zero pick releases the sending store's reserved units in full and takes the receiving store's on-order figure back to nothing. No stock is left stranded in either place, and no correction is needed.

⚠ A delivery is still created for the receiving store, with nothing on it. See below.

The receiving side is Goods Received​

When a transfer completes, a delivery is created for the receiving store in Goods Received. Staff there take the goods in against that delivery exactly as they would a supplier delivery.

That is where the receiving store gets its stock, and where any discrepancy is settled:

SituationWhere it is handled
fewer units arrived than were sentreceived short, in Goods Received
the goods were damaged in transitrecorded against the delivery, in Goods Received
the wrong item was pickedcorrected on the delivery, in Goods Received

The transfer itself is not reopened for any of these. Once completed it is final; the correction lives on the delivery. So if you are reconciling two stores' balances, the pair to compare is transfer completed against delivery received — not the transfer alone.

Receiving is what closes the loop​

StoreStock typeEffect
receivingSellable+ received — the goods are now on sale
sendingIn transitclosed
receivingOn orderclosed

The quantity that becomes sellable is the received quantity, not the shipped one. If four of the five despatched units arrive, four go on sale.

🛑 A short receipt does not balance, and that is deliberate. The in-transit and on-order figures close on what was shipped, while the receiving store is credited with what was received. Ship five, receive four, and the estate is one unit poorer — with no shrinkage or write-off recorded anywhere. Nothing is stuck and nothing needs correcting; the loss simply is not booked as a loss.

If your accounting needs that difference, derive it yourself: compare quantityApproved on the completed event against the received quantity on the Goods Received event for the same transfer. It is the pair worth reconciling if stock is going missing between stores, and no event will report it for you.

🛑 Stock movement depends on a tenant-level switch​

Everything on this page describes what happens when stock processing is enabled for the tenant.

Store Transfer publishes its events either way — the transfer completes, the delivery is created, the events go out. But the stock ledger is written by Stock Transaction Processing, and it ingests movements from other Hii Retail services only while its master switch (Do enable PosLog processing) is on for that tenant. It is a tenant-wide setting, not a per-store one, and it gates goods received, stock counts and corrections in exactly the same way.

With it off, a transfer still works as a piece of paperwork — it is raised, picked, completed and received — and no reservation, in-transit or sellable figure moves at any point. If you are reconciling stock and finding no movements at all against a transfer that plainly completed, check this setting before looking for a defect.

What the stock movements look like​

Both moments are published to Hii Retail's stock processing as transactions attributed to Store Transfer, so anything reading stock movements sees them with a document type naming this service and the transfer's id as the document id. Each line carries the transfer's line id, so a movement can always be traced back to the exact line that caused it.

The request-time movement carries the requested quantity; the completion-time movement carries the approved quantity. If a picker cut a line from six to four, those two movements disagree by design — the difference is the shortfall, not an error.

Values on the completed event​

The completed event carries a unit price and currency per line, looked up at completion time from Hii Retail's stock valuation. This makes the event usable for the accounting side of an internal movement without a second call.

⚠ Price and currency can both be absent. If the valuation lookup finds no price for an item — or does not answer — the line is still published, with no price rather than a zero. Treat a missing price as "not known", never as "free": summing it as zero understates the value of the movement.

What Store Transfer does not decide​

Store Transfer moves stock; it does not own the numbers.

  • It does not set item cost — the value on the event is read from stock valuation, not calculated here.
  • It does not decide whether an item may be transferred at all beyond it being known to the tenant. If your business rules restrict what can move between stores, enforce them before raising the transfer.
  • It does not reconcile the two stores. The pairing of a completed transfer with its received delivery is done by whoever consumes both, using the transfer id that appears on each.