A supplier PDF lands; the system reads each line, matches it to the recipe it feeds, and flags where a price has crept up — so margin doesn't erode quietly. Nothing touches the recipe costs until a human says so. Read by Eleanor Marlowe, Chef & Owner
| Item (as read) | Qty | Unit price | Line total | Matched to |
|---|---|---|---|---|
| Coffin Bay oysters, liveRead confidence 99% | 9.0 doz | $31.50/doz | $283.50 | Oysters Coffin Bay → snack · plate cost $14 |
| Barramundi fillet, skin-onRead confidence 99% | 7.2 kg | $38.50/kg | $277.20 | Barramundi en papillote → main · plate cost $24 |
| Ocean trout, Tasmanian, whole sideRead confidence 98% | 5.4 kg | $32.00/kg | $172.80 | Smoked ocean trout → entrée · plate cost $13 |
| Crocodile tail filletRead confidence 97% | 3.0 kg | $44.00/kg | $132.00 | Crocodile boudin blanc → main · plate cost $19 |
| Samphire, freshRead confidence 98% | 1.5 kg | $26.00/kg | $39.00 | Barramundi en papillote → garnish |
| Macadamia, whole rawRead confidence 99% | 2.0 kg | $33.00/kg | $66.00 | Charred broccolini → side · plate cost $4 |
| Finger lime, by punnetRead confidence 96% | 12 punnet | $6.50/ea | $78.00 | Oysters Coffin Bay → garnish |
| Ocean trout roe, jar ◴ smudgedNeeds a human | 2 ? | $48.00 / ?? | $96.00 ? | No confident match — see review queue |
| Subtotal (7 captured lines) · 1 line excluded pending review | $1,048.50 | |||
Quantities are kept metric and as billed (kg, dozen, punnet); the system stores the supplier's unit and the per-kg equivalent so a "per dozen" oyster line and a "per kg" fish line can both be price-tracked over time.
Per dozen, over four deliveries. The oyster dish sits below the margin floor in UC07 already — this lifts its plate cost above the $14 we've costed it at. Market-priced dish: the lever is the supplier, not the menu price.
Per kg. The barramundi en papillote is the worst margin breach in the menu model at 54.5% food cost — a steady $1/kg creep here is exactly the silent erosion this tool exists to surface.
These deltas are surfaced, not applied. The recipe cost stays at its last confirmed value until someone in the kitchen accepts the new figure — which is when it flows into the plate-cost and margin model.
The "ocean trout roe" line came through smudged — the OCR isn't confident on the quantity or the unit (is it 2 jars, or 2 kg, at $48 each or $48 per kg?). Rather than push a maybe-wrong number into the books, it's held out of the subtotal and parked here.
OCR accuracy is a vendor claim, not a promise. Treating low-confidence lines as "needs a human" rather than silently accepting them is the guardrail that keeps a misread digit out of the cost books.
The Coffin Bay oyster unit price jumped from $26.70 to $31.50 a dozen across four deliveries. That's above the +10% threshold, so it's flagged the moment it hits an invoice.
"Confirm this, and I'll move the oyster plate cost from $14 to $16 — and let UC07 re-rank the menu."
Confirming is one tap, but it is always a tap. The system proposes; the kitchen decides; only then does the figure feed the margin model.
Today this is OCR plus a reconciliation layer: a hosted OCR engine reads the invoice into structured line items, a matcher links each line to a recipe ingredient by fuzzy description, and a variance rule compares the unit price to the last few deliveries. For a real 60-seat venue the honest recommendation is to buy a Singapore-native tool (FoodRazor does exactly this — invoice OCR, line-item catalogue, price alerts); for this demonstrator we run the OCR engine ourselves (AWS Textract AnalyzeExpense in the Singapore region, for data residency) and build the matching and variance flags on top. It reads and flags well; it does not, and should not, write a cost without a person.