Skip to content

Back office

Recipes & costing

Recipes, sub-recipes, portion cost, margin and re-costing.

6 min read

On this page

For chefs, sous-chefs, store managers, managers and accountants. Screens: Recipes & costing in the sidebar → Recipes · Ingredients.

Recipes tell the kitchen how a dish is made and tell the business what it costs. A recipe links a menu item to ingredients (and other recipes), and JupitaPOS computes the batch cost, the portion cost and the gross margin against the selling price — and keeps them up to date when an ingredient price changes.

Who can do what

Task Permission Default roles
See recipes and ingredients (no costs) menu.view everyone who serves or manages
Create/edit ingredients, recipes, versions; activate versions menu.recipes (sensitive) owner, director, general/branch/restaurant manager, chef, sous chef, store manager
See ingredient costs, recipe costs, margins, the cost API menu.costs managers, chef, store manager, accountant, auditor

Without menu.costs the screens still work but every cost column shows “—”.

1. Ingredients

Recipes & costing → Ingredients → New ingredient.

Field Meaning
SKU, name, category produce, meat, poultry, fish, dairy, bakery, dry, beverage, alcohol, packaging, cleaning, other
Stock / recipe unit the unit recipes use (g, kg, ml, l, each…)
Cost per unit what one stock unit costs you (UGX 4,500 per kg of flour). menu.costs needed to change it
Purchase unit + units per pack how you buy it (a 25 kg bag) — same dimension as the stock unit
Trimming yield % usable share after peeling, trimming, boning: 80 % beef means 1 kg bought gives 800 g usable
Allergens carried into recipes and items
Track stock, active, notes
Café role, standard dose what the ingredient is to the café (coffee beans, milk, alternative milk, cup, lid…) and one serving — 18 g of beans a shot, entered in g / ml; the café yield report turns stock into cups with it (1 kg ÷ 18 g ≈ 55 cups)

Changing a cost, a yield or the unit re-costs every active recipe using the ingredient (and the recipes that use those as sub-recipes) in the background (recipe-costing queue) and updates the linked menu items’ cost and margin.

Ingredients used in recipes cannot be archived — remove them from the recipes first.

2. Recipes and sub-recipes

Recipes & costing → Recipes → New recipe.

  • Recipe — makes a menu item (Beef burger). Link the item; its portion cost and margin are written onto the item when a version is activated.
  • Sub-recipe — a batch used by other recipes (chapati dough, patty mix, g-nut sauce, pilau spice mix). Costed per yield unit.

Header: code, name, kind, menu item, yield (quantity + unit: 1 kg, 12 ea, 2 l), portions per batch, optional portion size and unit, prep and cooking time.

Every recipe has versions. Version 1 is created as a draft with the recipe; you add lines to the draft, then activate it. Activation:

  1. freezes the version (lines can no longer be edited),
  2. archives the previously active version,
  3. costs it and writes the portion cost and margin onto the menu item,
  4. is audited (recipes.version_activated).

To change an active recipe, press New version: the active lines are copied into a new draft (only one draft at a time), you edit and activate. Older versions stay for history and comparison.

3. Lines

In a draft version, add Ingredient or Sub-recipe lines:

Field Meaning
Quantity + unit the net quantity that ends up in the batch; units must match the ingredient’s dimension (g for a kg ingredient is fine — conversions are automatic)
Waste % line-level waste on top of the ingredient’s trimming yield
Optional garnish and extras that are not costed into the batch (shown separately)
Used for every sale, in-house only, or take-away only — a take-away cup, lid and sleeve come out of stock only when the drink is taken away
Preparation diced, sliced, blanched… (kitchen card)
Substitutions alternative ingredient + quantity for when the main one is out (kitchen card and, later, purchasing)

The version also carries prep loss % and cooking loss % (batch-level shrinkage), the method (one step per line; shown as a numbered list on the recipe card) and a change note.

4. How costing works

gross quantity   = net quantity ÷ trimming yield ÷ (1 − line waste)
line cost        = gross quantity (in the ingredient's unit) × cost per unit
sub-recipe cost  = quantity × (sub-recipe batch cost ÷ its net yield)
batch cost       = Σ line costs (optional lines excluded)
net yield        = yield × (1 − prep loss) × (1 − cooking loss)
cost per yield unit = batch cost ÷ net yield
portion cost     = batch cost ÷ portions
gross margin     = (price − portion cost) ÷ price
food cost %      = portion cost ÷ price

Worked example (demo data): patty mix — 1,000 g beef mince at UGX 28,000/kg with 80 % trimming yield → 1.25 kg gross → 35,000 per batch; 5 % prep loss → net yield 0.95 kg → 36,842/kg. A burger uses 125 g of it (4,605) + a bun (800) = 5,405 portion cost; sold at 25,000 → 78.4 % gross margin, 21.6 % food cost.

Sub-recipes are costed recursively (a sauce inside a stew inside a platter), with a depth limit against cycles. A sub-recipe without an active version costs 0 and is flagged “not costed” in the line picker.

Recipe page: Batch cost, Portion cost, Gross margin, Food cost % cards; the active version’s table shows per line the net quantity, gross quantity, unit cost and cost. GET /api/recipes/:uuid/cost (and …/versions/:version/cost) returns the same breakdown for reports.

5. Variants, modifiers and combos

  • A variant’s recipe factor scales the portion cost (large tilapia 1.4×) — used by order costing and stock deduction.
  • A modifier option with an ingredient and quantity adds that ingredient’s cost when chosen.
  • Combos are costed from their components’ recipes.

6. Everyday tasks

  • New dish → create the ingredients you are missing → New recipe (link the item) → add lines → Save draft → Activate v1 → check the margin on the recipe page and the item list.
  • Supplier price went up → edit the ingredient’s cost; recipes and margins update by themselves; review the Recipes list sorted by margin.
  • Kitchen changed the method → New version → edit → Activate.
  • Margin too low → change the price (menu.pricing) or the recipe; the item list shows price, cost and margin side by side.

Quick answers

  • Costs show “—” → you lack menu.costs.
  • Cannot edit lines → the version is active or archived; create a new version.
  • Cannot activate → the draft has no lines, or you have unsaved changes.
  • Cannot archive a sub-recipe → other recipes use it.