Skip to main content

Recipes and Ingredients

A recipe links a menu item to the ingredients it uses. Every time the item sells, its ingredients are deducted from stock automatically, and you can see the cost per serving, the margin, how many servings you can still make, and an ingredient usage report. It suits coffee shops, restaurants, and other food or drink businesses.

Open it from the Inventory menu: Ingredients for the ingredient list, and the Recipe section on the Product form to build a recipe. This feature is for Owners and Admins (cashiers do not see it, because it shows cost and margin), and is available on the Pro and Enterprise plans. See Billing & Plans.

New feature

Recipes and ingredients launch with this release. The page may look slightly different from the description below, but it works the same way.

Shop requirements​

Recipes are for shops that count stock manually and track stock, like most F&B shops. Shops with per-unit stock (one row per item, for example serial numbers) and Booking and Rental shops cannot use recipes.

Ingredients are stock items​

An ingredient is treated like a regular stock item, but it is never sold. That is why every stock tool works for ingredients:

  • they do not appear in the online store, POS, search, sitemap, or recommendations, and cannot be ordered;
  • they are not counted toward your plan's product limit;
  • they are left out of the total products and total stock in the inventory summary. Low ingredients still appear in the low stock list, marked as ingredients.

Add an ingredient from Ingredients → Add: fill in the name, base unit, cost per unit, reorder point, and optionally opening stock (recorded as a "Found" adjustment noted as opening stock).

Units​

An ingredient's base unit is one of g (gram), ml (millilitre), or pcs (piece). Stock and cost are always in this base unit:

  • stock and cost are whole numbers. Cost is rupiah per base unit, for example coffee beans at Rp120 per gram or milk at Rp18 per ml;
  • an ingredient that costs less than Rp1 per base unit (for example water) cannot be priced precisely. Leave it out of the recipe;
  • the base unit cannot be changed while an ingredient is used in a recipe, and an ingredient used by a recipe cannot be deleted.

When writing a recipe you can use another unit of the same kind, and Etalasse converts it to the base unit: mg, g, kg for gram ingredients, ml, cl, l for millilitre ingredients, and pcs, dozen for piece ingredients. A unit of another kind (for example litres for a gram ingredient) is rejected.

Set a reorder point per ingredient. The shop default is 5, which for a gram ingredient is only 5 grams.

Building a recipe​

In the product form, the Recipe section:

  1. pick an ingredient and enter the quantity for one batch, in the unit you like;
  2. enter the yield (how many servings one batch makes, default 1);
  3. enter the waste % for what is lost, 0 to 90;
  4. save. Saving replaces all recipe lines at once.

The quantity per serving is:

quantity per serving = quantity × (1 + waste% / 100) ÷ yield

Example: a recipe for 10 servings uses 1,000 ml of milk with 5% waste, so one serving uses 105 ml.

You can make a recipe for:

  • a product: used by every variant that has no recipe of its own;
  • one variant (for example size Large): this recipe replaces the product recipe for that variant, it is not added to it;
  • an add-on option (for example "Extra shot"): its ingredients are added to the menu item's recipe, times the quantity of the option selected. Ingredient swaps (oat milk instead of dairy) are not supported: make a separate recipe on a variant, or accept a small double count.

Products without a recipe behave exactly as before. Recipes are not versioned: editing a recipe only affects new sales.

Recipe section of the product form: ingredient lines with quantity and unit, the servings and waste % fields, cost per serving, price, margin and the no-cost warning, next to the cost worked out per ingredientRecipe · Es Kopi Susu ArenManage ingredientsWhat goes into one serving. Each order deductsthese ingredients automatically.All sizes / base recipeCan make 42Limited by Fresh milkArabica beans18gFresh milk150mlLiquid palm sugar20mlVanilla syrup10mlNo costAdd ingredientMakes (servings)1Waste %5Quantities are for the whole batch. Sold amounts are roundedto whole base units.Cost per servingRp 5.943PriceRp 22.000MarginRp 16.057 · 73%1 ingredient(s) have no cost, so the cost shown is too low.How the cost is worked outqty per serving =qty × (1 + 5%) ÷ 1 servingArabica beansRp 2.26818.9 g × Rp 120Fresh milkRp 2.835157.5 ml × Rp 18Liquid palm sugarRp 84021 ml × Rp 40Vanilla syrupRp 010.5 ml × —Cost per servingRp 5.943Selling priceRp 22.000MarginRp 16.057 · 73%Vanilla syrup has no cost price,so it counts as Rp 0 and thecost is marked incomplete.123
Recipe section: (1) ingredients with quantity and unit, (2) servings and waste %, (3) cost per serving, price and margin. On the right, how the cost is worked out per ingredient; an ingredient with no cost counts as Rp 0.

Recipe section: (1) ingredients with quantity and unit, (2) servings and waste %, (3) cost per serving, price and margin. On the right, how the cost is worked out per ingredient; an ingredient with no cost counts as Rp 0.

Stock is deducted automatically​

When it happens​

Ingredients are deducted when the order is created, not when it is paid or served, in the same step as the menu item's own stock. This is how regular product stock is already deducted, so ingredient stock is held while the customer pays. It applies to every order source (online store, POS, table QR).

Each ingredient is recorded as one row in the stock history with the reason Recipe usage, noted with the order number. Low stock alerts still fire for ingredients that drop to their reorder point.

The amount deducted is worked out per order line, then rounded to the nearest base unit (half up), at least 1 when the recipe needs anything. Three servings that each need 3.33 g deduct 10 g, not 9 g. A recipe that needs less than 1 base unit per serving slightly over-deducts, so choose a base unit small enough.

When an order is canceled, expires, or is refunded​

Reversal reads the usage recorded when the order was created, not the current recipe, so it is exact even if the recipe has changed since:

  • Order canceled or expired: ingredients go back to stock (reason Recipe restore), as much as was actually deducted and not already refunded.
  • Refund with the restock option: the ingredient share for the refunded servings goes back.
  • Refund without restock: ingredients are not put back, because the drink was made and served. Use the restock switch on the refund screen to suit each case.

Each ingredient is restored at most once. A partial refund with restock followed by a cancel only restores the deducted amount once in total. Only what was really deducted is restored, so a sale that was short of an ingredient restores less.

When ingredient stock runs short​

Stock never goes negative. Etalasse has two policies, set per shop in the inventory settings (When an ingredient runs out):

PolicyWhat happens
Keep selling and record the shortage (default)A sale is never blocked. Only what exists is deducted, stock stops at 0, and the difference is recorded as a shortfall. Shortfalls show in the usage report. The ingredient also shows up in low stock alerts
Stop the saleAn order that needs more of an ingredient than is on hand is rejected with a message like "Not enough ingredient stock: Susu (need 450, have 120 ml)", and nothing is recorded

The default suits a shop that cannot stop selling just because the ingredient count was off. The next stock count corrects the real number. For ingredients with per-branch stock, stock is read at the order's branch.

Changing the policy needs the Pro plan. Deduction for recipes that already exist keeps working even if the plan drops.

The menu item's own stock​

A recipe product still has its own stock number, and each sale still reduces it (the POS may show "sold out" at 0). For made-to-order drinks, leave the menu item's stock high or untracked and let ingredient stock decide.

Cost and margin​

For every recipe, Etalasse works out:

  • theoretical cost per serving = quantity per serving × ingredient cost, rounded to a rupiah;
  • margin = selling price (the variant price or product price) minus cost, and margin %. Discounts and price rules are not included;
  • if an ingredient has no cost yet, the cost is flagged incomplete, that ingredient counts as 0, and it is listed by name.

Ingredient cost updates automatically when you receive a purchase order (weighted average), so recipe cost follows your latest purchase prices.

Use the recipe cost as the product cost. The Apply cost button copies the theoretical cost to the product or variant cost price, only when you ask, never automatically:

  1. tap Preview to see before and after. Skipped recipes show a reason: an ingredient without cost, zero cost, or unchanged;
  2. tap Apply and confirm. This overwrites the product cost price. The cost on past sales does not change.

How many servings can be made​

The menu list shows how many servings you can still make with current stock, along with the limiting ingredient (the one that runs out first). It is an estimate from current stock and does not know about orders arriving right now. It is 0 when an ingredient is out.

Reports​

  • Ingredient usage (per period, default the current month, CSV export): per ingredient, the amount used (net of restores), cost used, shortfall and how often it happened, amount purchased (from POs), adjustments in and out, the stock count difference, and current stock. A negative count difference means the shop lost more than recipes explain: a signal of waste or theft. Ingredients with no activity are hidden unless they are low.
  • Menu margin: recipes sorted from the lowest margin, with an incomplete-cost filter and the Apply cost button.

Recipe usage and its restores are not part of the stock loss report, because they are consumption, not loss. To inspect them one by one, filter the adjustment history by the Recipe usage reason.

Buying, counting, and moving ingredients​

Ingredients use the same stock tools as other items:

  • Purchase Orders: add ingredients like products. Order and receive in base units: 5 kg of coffee at Rp120 per gram is quantity 5000 at unit cost 120. The ingredient's average cost updates, and recipe cost follows.
  • Stock Count: a whole-shop count covers menu items and ingredients together. To count only ingredients, choose specific products and pick them. Ingredients have no category, so a category count does not include them. Differences are recorded as usual.
  • Branch Stock Transfers: ingredients with per-branch stock move like any item.
  • Stock Adjustments: for spoiled, expired, or internally used ingredients.

In those screens, item pickers hide ingredients by default, so choose the Ingredients tab or filter to see them, and watch the base unit next to the numbers.

Restocking ingredients​

Recipes draw ingredient stock down, so top it up in one of these ways:

  • Purchase order (the main way to buy): create a PO, turn on the Ingredients switch in the item picker, add the ingredients, then receive the goods. Stock goes up, and the ingredient's cost becomes the new weighted average. Enter quantity and unit cost in the base unit (g, ml, pcs).
  • Stock adjustment (a quick correction, for example market purchases without a PO or spoiled stock): turn on the Ingredients switch in the picker, choose the ingredient, then enter the quantity in or out with a fitting reason. An adjustment does not change the cost.
  • Stock count: count ingredients regularly and let the differences be recorded.

Ingredients only show up in these pickers while the Ingredients switch is on. Without it the list holds only menu items and regular products.

Limits​

  • Bill split and merge in F&B move the ingredient usage records with their lines. A partial split divides the usage by the quantity moved, so canceling either bill restores its own share, exactly once.
  • Ingredient stock and cost are whole numbers in the base unit.
  • Branches: for per-branch ingredients, usage is taken from the order's branch. If the order has no branch, the ingredient counts as 0 on hand, and restoring is skipped.

Plan​

Creating and changing ingredients, recipes, applying cost, and changing the stock policy needs the Pro or Enterprise plan. Viewing lists and reports, deleting ingredients or recipes, and deduction for existing recipes are not limited by plan. A shop that downgrades keeps accurate stock and can still tidy up, it just cannot add or edit.

Tips​

  • fill in each ingredient's cost so recipe cost is complete
  • receive ingredient purchases through POs so cost stays current
  • count ingredients regularly and read the count difference in the usage report
  • use a small base unit (g, ml) so rounding is not noticeable