| Ingredient | Gross | Waste | Net | Scaling | Unit cost SEK | Cost SEK | Share | ||
|---|---|---|---|---|---|---|---|---|---|
Smashburgare 100gJHB · frozen |
157,5 g | 5,0%% | 150,0 g | 0,119 SEK/g | 18,74 SEK | ||||
|
Brioche Bun 50g
|
1,02 st | 2,0%% | 1,00 st | 3,68 SEK/st | 3,75 SEK | ||||
| Substitute · Brioche Bun 60g — TRADIFOOD | 4,10 | +0,35 | |||||||
Ostskiva Cheddar 20gFalbygdens |
21,0 g | 0,0%% | 21,0 g | 0,142 SEK/g | 2,98 SEK | ||||
BurgersåsRecipe |
18,0 g | 0,0%% | 18,0 g | 0,081 SEK/g | 1,46 SEK | ||||
Yellow mustardJohnny's |
10,0 g | 0,0%% | 10,0 g | 0,028 SEK/g | 0,28 SEK | ||||
KetchupJohnny's |
10,0 ml | 0,0%% | 10,0 ml | 0,022 SEK/ml | 0,22 SEK | ||||
Dill sliced pickles 1/8 Crinkle CutGAmerican Classics |
10,1 g | 1,0%% | 10,0 g | No price | |||||
RödlökGBazaro |
15,3 g | 2,0%% | 15,0 g | No price | |||||
|
|
|||||||||
| Known plate cost · 6 of 8 ingredients priced 2 missing | ≥ 27,43 | ||||||||
Loading the cost breakdown…
What a batch is packed into for transfer to another unit. A pack level is a child of the recipe's output product — the same rows the product page lists — authored here because the yield they divide is the recipe's. Nothing below needs a schema change; the gaps are named under the table.
| Level | Per parent | Net volume | Cost / pack | Per batch |
|---|
Declared from the 8 ingredients and the nested Burgersås preparation. Two ingredients carry no supplier specification, so the statement is marked provisional until they are priced and specified.
Per plate (≈ 285 g net) — energy 1 842 kJ / 440 kcal · fat 24,1 g · of which saturates 10,8 g · carbohydrate 31,4 g · of which sugars 6,2 g · protein 24,0 g · salt 1,9 g.
Connected to 2 sales items. Each sale deducts the portions below from stock and books its cost against this recipe.
| Sales item | Unit | Portions / sale | Price share SEK | Food cost |
|---|
Not stocked, not counted, not used inside another recipe.
| Menu item | Sold | Net sales | Actual COGS | At today's cost | Variance |
|---|---|---|---|---|---|
| Ostburgare · POS 4021 | 612 | 78 948 | 14 566 18,4% | 16 787 21,3% | +2 221 |
| Burgarmeny Liten · POS 4102 | 188 | 20 492 | 4 474 21,8% | 5 156 25,2% | +682 |
Actual COGS is frozen at sale time; "at today's cost" re-prices the same volume at the current ingredient cost. +2 903 SEK of margin has quietly gone in 30 days — the menu price still assumes a cost basis that no longer exists.
Patty needs 10 s longer on the flat top than the step says, ours runs cooler.
2026-09-19Swapped the bun for the 60 g one on weekends — holds the juice better, costs 0,35 more.
2026-09-11What this plate costs at each place that could cook it, and the ingredient prices behind the difference. A storage prices at its cost centre; where that cost centre has never bought an ingredient the company price stands in, marked co.
+3,63 SEK since w27. At today's 129,00 price the food cost moved from 18,4% to 21,3%.
Plate cost has risen 15,3% in 12 weeks, almost entirely from Smashburgare 100g (+2,41 SEK/plate). The sales price has not moved.
Cheapest supplier for the patty over the window: JHB in 9 of 12 weeks.
| Dish name | Cost health | Plate cost | Sales price | Sales items | Food cost · ingr. | Ingr. | Updated | |
|---|---|---|---|---|---|---|---|---|
Ostburgare 150 |
2 unpriced | ≥ 27,43 | 129,00 | 2 | ≥ 21,3% | 8 | 2026-09-25 | |
Barnburgare |
1 unpriced | ≥ 14,80 | 69,00 | 1 | ≥ 21,4% | 5 | 2026-09-08 | |
Caesarsallad Kyckling |
Stale · 41 days | 24,15 | 119,00 | 1 | 20,3% | 11 | 2026-08-14 | |
Pulled Pork Bowl |
Draft | — | — | None | — | 4 | 2026-09-26 | |
Fish & Chips |
Over target | 55,40 | 145,00 | 3 | 38,2% | 7 | 2026-09-19 | |
Halloumiburgare |
Fully costed | 31,90 | 139,00 | 1 | 23,0% | 9 | 2026-09-22 | |
Club Sandwich |
Fully costed | 29,75 | 135,00 | None | 22,0% | 12 | 2026-08-30 | |
Vegansk Bowl |
Fully costed | 22,40 | 125,00 | 2 | 17,9% | 10 | 2026-09-11 |
| Name | Cost health | Cost / unit | Batch yield | Used in | Inventory category | Updated | |
|---|---|---|---|---|---|---|---|
Burgersås |
Fully costed | 0,081 SEK/g | 1 000 g | 7 plates | Såser & dressing | 2026-09-24 | |
Picklad rödlök |
1 unpriced | ≥ 0,038 SEK/g | 1 200 g | 6 plates | 2026-09-23 | ||
BBQ-sås |
Fully costed | 0,067 SEK/g | 1 500 g | 9 plates | Såser & dressing | 2026-09-20 | |
Chilimajonnäs |
Fully costed | 0,094 SEK/g | 800 g | 4 plates | Såser & dressing | 2026-09-18 | |
Friterad lök |
Fully costed | 0,112 SEK/g | 500 g | 3 plates | Not stocked | 2026-09-12 | |
Coleslaw |
Stale · 47 days | 0,052 SEK/g | 2 000 g | 5 plates | Kylvaror | 2026-08-10 | |
Vitlökssmör |
1 unpriced | ≥ 0,145 SEK/g | 300 g | 2 plates | Not stocked | 2026-09-05 | |
Tryffelmajonnäs |
Draft | — | 400 g | — | — | 2026-09-26 |
| Recipe | Shared by | Type | Ingr. | Allergens | |
|---|---|---|---|---|---|
Klassisk Béarnaise |
Vapiano Nordic AB | Preparation | 7 | Egg · Milk | |
Truffle Fries |
Brödernas Group AB | Plate | 5 | Milk | |
Pulled Oumph Bowl |
Bazaro Test AB | Plate | 11 | Soy · Gluten | |
Sriracha-majonnäs |
Vapiano Nordic AB | Preparation | 4 | Egg |
| Ingredient | Gross | Waste | Unit cost | Cost | Share |
|---|
Allergens are derived from the ingredients, including any nested preparation. Nothing to declare yet.
Each site costs the recipe against its own purchase prices.
Six changes separate this from a port of v2, and seven decisions sit under them. Each one is a claim that can be argued with — that is what this mockup is for.
v2 prints 0,00 SEK as the preparation COGS and marks the two unpriced
ingredients with a small amber triangle in the row. The page states a number it knows is
wrong. Here the shortfall is promoted to a Mise status code, so it appears in the list,
in the detail banner and in the table footer, and the total is written ≥ 27,43
rather than as a fact.
recipe.cost-incomplete (warning),
recipe.cost-stale (serious), recipe.margin-breach (critical). Filterable, countable, explained.The v2 detail shows what a recipe is. It never shows what it earns. Sales price, contribution and food cost against the house target now sit in one band at the top, above the ingredient table.
Shelf life, shipping temperature, alcohol percentage, weightable/countable toggles and the packaging fields fill most of v2's right rail. They belong to the product record; only the recipe's own identity stays, behind one Open product record link.
Ingredients is the daily surface; Ingredient statement is a yearly one. They were peers in v2. Ingredients is now the page, and Method / Allergens / Nutrition / Where used / Price history are a single tab row underneath it.
v2 has two divergent create paths (a quick draft dialog into an 891-line edit form, and a separate stepper) and a read-only detail page, which is exactly why it needs about six edit dialogs hanging off that page. A wizard in a side sheet would have rebuilt the same split in a nicer shape.
Instead the recipe page has two modes. Edit recipe turns the same layout editable: quantities and waste become inputs in the same table, the price becomes an input in the same band, the method steps get handles, the rail's facts become fields. What you build in is what you later read — and the cost feedback is the real economics band, not a special meter that only exists during creation.
The side sheet is gone from this flow entirely. Mise docks it at
min(32rem, 100vw) and rules a per-call width knob out of scope — fine for a
lookup form, wrong for authoring. A new recipe is the same page as an old one, with
nothing in it yet: the economics band reads 0,00 and "needs a price", the ingredient
table shows a search box instead of rows, and the commit bar lists what is still missing
with Publish disabled until it is not.
v2's list is an alphabetical catalogue: dish name, inventory category, COGS, volume, date. Nothing on it says which recipe needs attention. The strip above the table counts the four conditions worth acting on, each one a filter; selecting rows turns on bulk pricing, tagging and company assignment, so fixing five unpriced recipes is one pass instead of five.
N/A with no reason.≥ 27,43, flag the gap. No estimate from
purchase history — the page never states a cost it cannot stand behind.The three answers above were given on the strength of this mockup. Reading
Cobalt.API.v2@origin/develop afterwards changed what they cost to build — twice
in our favour, once by opening a new question.
Recipe.SellingPrice, plus
MarginPercentage, LaborCost, FixCost,
PrepTime, CookTime and Description — all accepted
on create and update. None are in v3's generated model, because the OpenAPI snapshot is
stale. So decision 1 needs a snapshot refresh, not a backend change.GET /sales/articles/food-cost on the report host. It is now the Where
used tab — go and look at it. That comparison could not have been computed client-side.SellingPrice; MarginPercentage follows it.V2-COVERAGE-GAPS R-15 still lists
as unbuilt — so it is gated on that, not on this design.