Audit trail

Every stock change, with the reason it happened

A level tells you what you have. A movement tells you why — and that is the question people actually ask.

The system says eleven and the shelf says eight. Nobody knows when it diverged, nobody remembers adjusting it, and there is no way to find out.

The moment a stock figure is wrong, the useful question is never “what is it now”. It is “what happened”. Without an answer, the only remedy is to recount and overwrite, which fixes today’s number and guarantees the same argument next month.

A movement is an event, not a revision

Every change is recorded as a movement carrying what changed, by how much, when, and — critically — why. Sold. Returned. Received against a purchase order. Adjusted after a count. Damaged. Sold at the till.

The reason is the part that makes the record useful. A stock level that dropped by three is ambiguous. Three movements reading “sold on Amazon”, “sold on Amazon”, “damaged” is a story you can act on.

What it lets you actually do

  • Walk a wrong figure backwards to the event that made it wrong, rather than guessing.
  • Separate shrinkage from admin error. Repeated small adjustments on one product is a counting problem. A single large one is somebody fixing a symptom.
  • Settle the “the sync broke it” argument. Either there is a movement from a channel or there is not.

The failure this was built to explain

A worked example from a live account, because it makes the case better than the feature list does.

Marketplace sales were decrementing stock in Qwikr correctly but never reaching the merchant’s Shopify shop. The only visible symptom appeared later and elsewhere: the next Shopify sale would hit a lower figure than Shopify expected and log a shortfall. That reads exactly like bad stock data, so for weeks it was blamed on the merchant’s counts.

It was not their counts. A code path was failing to flag marketplace sales as sales, so a safety rule was correctly refusing to push. Nine SKUs had drifted, and every one of them was low by precisely the quantity sold on Amazon or eBay. The movements are what made that provable rather than arguable — and once it was provable, the fix took an afternoon.

When a sale exceeds what you hold

It happens: a marketplace that was slow to hear, or a count that was already wrong. The order is still recorded, the level is floored at zero rather than going negative, and the event is written down with the SKU, the channel and the size of the shortfall.

Floored and logged beats blocked and silent. An order you refused to record is an order you cannot fulfil and cannot explain to the customer waiting for it.

The limitation worth stating

A movement log records what the system was told. If someone takes an item off a shelf and tells nobody, no software will know — the log will faithfully show a figure that has been wrong since that moment. What it does give you is the date it stopped agreeing with reality, which narrows a stocktake from the whole catalogue to one week and one shelf.

Stop reconciling stock by hand

One catalogue, six channels, one stock figure that stays right.