How the numbers hold

The mechanisms, in full

This page exists because "trust our dashboard" is not an argument. Everything below is a design decision with a consequence you can test.

Count sheet · Outlet 07 · 31 Aug 2026 · Layout v3

# Item Counted
013 Chicken thigh, boneless 18.400
014 Tom yum paste, house 6.250
015 Coconut milk, 400 ml 42.000
016 Palm sugar, block 9.750
017 Lemongrass, trimmed 3.100
Variance on line 014 −2.750 kg · RM 41.25

Count it on paper. Prove it on the ledger.

Nobody walks a chiller holding a tablet. So the sheet is the product: print it, tally it with a pen, photograph it on the way out.

  1. Print the sheet Every item the outlet stocks, numbered, with a box to write in. Four corner marks and a QR code carrying the layout version.
  2. Photograph it The corner marks let the reader solve for the angle you photographed it at, so every figure is read from the box it was printed in rather than from an estimate of where the column probably sits.
  3. It refuses when it should A sheet whose layout version the reader does not recognise is rejected outright. A wrong number is worse than no number, so it never invents one.
  4. The count posts costed Approval writes the signed difference to the ledger, priced at your running weighted average. The variance becomes a figure instead of an argument.

The ledger is append-only

Every change in stock is one immutable row. Nothing is updated in place and nothing is deleted.

  • A receipt, a sale deduction, a production consume or output, wastage, a transfer leg, a count correction, an opening balance — each is its own row with its own source.
  • On-hand quantity is a materialisation of those rows, never a number someone authored directly.
  • Because nothing is overwritten, a period that has closed stays closed. Last month’s figure remains what it was when you signed it.
  • An opening balance is itself a layer rather than an assertion of a total. Correcting it appends a reversal and a replacement instead of editing the original.

Cost is a weighted average, and it is explained

Raw cost is carried as a moving weighted average. Produced items are costed by walking their recipe tree.

  • Every inbound quantity blends into the running average, weighted by the stock already on hand. Nothing outbound changes it.
  • The system keeps both the running average and what each individual event actually cost, so a surprising average can be traced to the receipt that moved it.
  • A produced item’s cost is exploded recursively down its recipe edges to raw ingredients, applying each line’s yield, normalised to the item’s base unit.
  • A missing raw cost produces no cost at all, never zero, so a gap in the inputs cannot quietly present itself as a low food cost.

Variance is derived from two recorded facts

Both what the recipe called for and what the kitchen actually used are stored on the run. The difference is always recomputed.

  • Theoretical consumption is what the recipe specifies at the output quantity actually produced.
  • Actual consumption is what was really taken. Both are recorded on the production run.
  • The variance itself is never stored, which means there is no field anyone could adjust to make a month look better.
  • A batch nobody planned is still recorded as a batch, so the plan-versus-reality difference stays visible instead of being absorbed.

The count sheet is a versioned contract

The printed geometry is held in two places — the software that prints the sheet and the reader that reads it back — and both know its version.

  • Four filled squares are printed at known positions. The reader finds them and solves for how the page sits inside your photograph, so every figure is read from the box it was printed in.
  • If only three marks read, the fourth is reconstructed, and the page is graded down rather than silently accepted.
  • The QR code carries the layout version. A version the reader does not know is refused, rather than being cropped at the wrong measurements.
  • Where a code fails to read, a row can be resolved by its printed row number — but only while the rebuilt list still has exactly the number of rows the sheet declares.

Stock in transit belongs to nobody

Between dispatch and receipt, transferred stock sits on a reserved ledger that is not a real outlet.

  • It has no location record, so it never appears in an outlet picker, a scope selector or an access grant.
  • The two legs of a transfer sum to exactly zero once the document closes.
  • A receipt cannot close over an unresolved shortfall, which is what keeps that true.
  • Freight spent on units that never arrived is written off with them rather than left as an unexplained cost.

Money keeps its own denomination

Every document records both what was transacted and what it converts to, along with the rate used.

  • The amount in the document’s own currency is the primary figure a person sees.
  • The base amount is what a group-level total may legitimately sum.
  • The rate is snapshotted onto the document at the time it is written, never inverted and never triangulated through a third currency.
  • A missing rate is refused. It is never defaulted to 1.0.

What the system refuses to do

Every vendor will tell you what their software does. These are the things ours declines to do, which is usually the more useful list.

It will not read a count sheet it does not recognise

An unknown layout version is rejected rather than interpreted at the wrong measurements. A wrong number is worse than no number.

It will not treat a missing exchange rate as one

The document is refused. A consolidated total built on an invented rate is worse than a total that did not appear.

It will not cost an item it cannot cost

A missing input cost yields no cost, never zero. The uncosted item is reported as a data quality problem instead.

It will not let you edit a posted document

Corrections are new entries that offset old ones. History is not editable, including by us.

It will not let a role grant what its editor lacks

You can only give away permissions you hold yourself, so managing roles does not become a way to acquire everything.

It will not force the kitchen to agree with the plan

An unplanned batch is recorded as what it was. The difference against the plan is a figure to look at, not something to be quietly removed.

Bring one month of numbers

Forty-five minutes, your figures, your screen. You keep the file and we bring the questions.