NOVUS / RESTAURANT

Reading the data

The totals this site will not calculate

Currencies, units, price levels and review sources are kept apart here. The reasoning, and two places that rule had quietly slipped.

Published
Figures measured
Read
3 min
By
Novus Stream Solutions

Most of the engineering in a costing tool goes into producing numbers. A surprising amount of the trustworthy part goes into declining to.

A single headline figure is easy to build and easy to read, and that is exactly what makes it dangerous when the things underneath it are not the same kind of thing. Adding two currencies produces a number with no unit. Averaging a wholesale price against a retail one produces a price nobody pays. Both look completely ordinary on a dashboard.

What is kept apart, and by what

Separations the product enforces
Kept apartEnforced byWhat a single total would have meant
CurrenciesSpend totals grouped by currency before summingA figure in no currency at all
Units and pack sizesComparisons keyed on the unit as well as the itemA price for a quantity nobody ordered
Price levelsThe level recorded per provider in the registryA blend of what a farm receives and what a shelf charges
Review sourcesRatings grouped by source before averagingA five-point scale averaged against a different five-point scale
Missing inputsAn empty cell rather than a substituted zeroAn absence of evidence shown as a measurement of nothing

Measured Sep 12, 2026 from the queries and helpers named in each row, read in this repository. This data is re-ingested daily, so treat these as a snapshot rather than a live count.

Two places the rule had slipped

Writing this up meant checking each rule against the code rather than against the intention, and two had come apart from it.

The reviews screen states that ratings stay separate by source even when every source uses a five-point scale, and the helper behind that screen honours it. The management reports screen, built later, averaged every rating it could find into one figure. One page asserted the rule and another printed the number that broke it.

The second was smaller and the same shape: a menu screen described itself as the comparison boundary for competitor pricing, while nothing anywhere joined a restaurant's own menu to a competitor's. Both have been corrected, and both now have a test that fails if the claim and the code part company again.

What this means when you read a figure here

  • Several totals where you expected one usually means your data spans several currencies, and combining them is a decision for you rather than for the software.
  • A short comparison list is the normal result. Strict matching discards more pairs than loose matching, and the pairs it keeps are the ones worth arguing from.
  • An empty cell means the evidence for that figure does not exist yet, not that the value is zero.
  • Any number that matters should name its own inputs. If it cannot, treat it as a claim rather than a measurement.

Reproducing these figures

Every number above was read on September 12, 2026. Re-running these gives a different result on a later day, which is the point: the figures are dated so they can be checked rather than trusted.

  • Currency separation: every spend total on the reports and suppliers screens is grouped by currency code before it is summed, so a mixed-currency organization sees several totals rather than one.
  • Level separation: the provider registry records a level for each source, and the methodology page sets out which comparisons that permits.
  • Review separation: summarizeReviewsBySource in src/lib/reviews/analytics.ts groups by the source name before averaging.
  • Blank means unknown: the price change surface leaves a cell empty when its input is missing rather than printing a zero, which the docs page for that surface describes field by field.

Sources

Working with sources

The invoice lines an importer quietly drops

A comma in a price is the most expensive punctuation in a supplier export. Why the rows it dropped were never a random sample of your invoice.

Published
Figures measured
Read
3 min

Working with sources

One item, many pack sizes

On 2026-09-07 Canada's wholesale feed listed tomatoes under 29 pack descriptions. Why the site keeps every one apart, and how to pick the series you buy.

Published
Figures measured
Read
4 min