A jewellery house we work with sold the same pieces online and at the showroom counter, from two different stock systems. Every evening someone reconciled them by hand, and on a busy day a piece could be sold twice.
One service owns stock
We moved every stock change, from a web checkout, a counter sale, a return or a correction, behind one inventory service. Nothing else is allowed to change a quantity. Every change is written as a movement with its location and the order it belongs to, so the current stock is simply the sum of the movements.
Reserve, then commit
A web shopper who reaches checkout gets a short reservation. When the payment gateway confirms, the reservation becomes a sale; if payment fails or the timer runs out, the piece goes back on the shelf. The counter works differently on purpose: the piece is physically in the customer’s hand, so the sale is recorded and any mismatch is flagged instead of blocking it.
What changed
- No more evening reconciliation of two systems
- Stock reports straight from the movement ledger
- Bulk imports that validate first and commit second, so one bad row cannot corrupt the rest

