Skip to main content
POS Restaurant Recipe & Ingredient Stock (BOM) — A build-to-order Odoo module that deducts raw ingredients from inventory on  — 1/1Illustrative preview

A build-to-order Odoo module that deducts raw ingredients from inventory on every dish sold via recipe BOMs,

and reports true food cost, margin, and yield per menu item. ECOSIRE scopes, builds, installs, and supports it for Odoo 17.0, 18.0, or 19.0.

What is POS Restaurant Recipe & Ingredient Stock (BOM)?

A build-to-order Odoo module that deducts raw ingredients from inventory on every dish sold via recipe BOMs, and reports true food cost, margin, and yield per menu item. ECOSIRE scopes, builds, installs, and supports it for Odoo 17.0, 18.0, or 19.0. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Key Features

Recipe Bill of Materials per menu item, with ingredient product, quantity, and unit of measure (`uom.uom`) per line
Automatic `stock.move` generation on POS order validation, consuming ingredients from the configured kitchen/warehouse location
Combo and set-menu explosion — component dishes each contribute their own recipe lines to the deduction
Modifier and variant ingredient mapping (extra cheese, large size) as incremental recipe lines, not flat surcharges
Computed food cost and gross margin per dish via `@api.depends` on recipe lines and ingredient `standard_price`
Theoretical-vs-actual consumption reporting to surface waste, over-portioning, and shrinkage
Yield handling for prep/intermediate items (one prep batch yields N portions) with sub-recipe support
Low-ingredient and reorder alerts driven by `ir.cron` scheduled jobs and Odoo reorder rules
Automated-action notifications to kitchen/purchasing when an ingredient crosses its reorder point
QWeb PDF food-cost sheet and daily consumption summary reports
Role-scoped access via `ir.model.access.csv` and record rules (line cook vs shift manager vs finance)
Multi-location aware — deduct from the correct kitchen stock location in multi-outlet / central-kitchen setups
Consumption and cost models exposed over XML-RPC / JSON-RPC for BI and central-kitchen integrations
Built and tested for Odoo 17.0, 18.0, and 19.0, Community or Enterprise, with negative-stock and rounding safeguards

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 3

    Go live + support

    You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.

Technical Specifications

Odoo Compatibility
Odoo 17, Odoo 18, Odoo 19
Editions
Enterprise & Community
License
Licence confirmation required
Python Requirement
Python 3.10+
Database
PostgreSQL 12+

About this Product

Restaurants and central kitchens bleed margin at the point where a plated dish meets the stock ledger. In standard Odoo POS, a menu item is sold as a single finished product, so a burger leaves inventory as "1 burger" — the bun, patty, cheese, and sauce it consumed are never decremented. Odoo's Manufacturing (mrp) app can hold a Bill of Materials, but it is built for production orders on a factory floor, not for silently exploding a recipe on every pos.order.line at the counter. The result is that food-cost reporting is guesswork, ingredient stock drifts from reality within days, and reorder decisions are made on gut feel instead of consumption.

ECOSIRE builds a POS-native recipe engine that closes this gap. We add a recipe Bill of Materials to each menu item — modeled either on Odoo's existing mrp.bom structure or a purpose-built restaurant.recipe model depending on your Enterprise/Community edition and appetite for MRP dependencies. Each recipe line maps an ingredient product, a quantity, and a unit of measure (uom.uom), so 200 g of beef and 30 ml of sauce are recorded against the dish. When a POS order is validated, an extended flow hooks the order confirmation (via pos.order._process_order / stock move creation) to generate stock.move records that consume the ingredients from the kitchen location — real inventory movements, not a cosmetic counter. Combos and modifiers are handled explicitly: a "large" size or an "extra cheese" modifier carries its own incremental ingredient lines, so the deduction reflects what was actually made. Cost per dish is a computed field (@api.depends on recipe lines and the ingredients' standard_price) so gross margin per menu item is live, not a monthly spreadsheet.

On top of the deduction core we build the reporting and control layer operators actually run the business on: food-cost percentage and margin per dish, theoretical-vs-actual consumption, and yield reporting for prep items (e.g. one 5 kg tray of dough yields 40 bases). Low-ingredient and reorder alerts run as Odoo automated actions / scheduled ir.cron jobs against your reorder rules, notifying the kitchen manager before a key ingredient hits zero mid-service. QWeb PDF reports give you a printable food-cost sheet and a daily consumption summary, and every model ships with ir.model.access.csv entries plus record rules so line cooks, shift managers, and finance see only what their role permits. Where you already run integrations, the module's models are exposed over Odoo's XML-RPC / JSON-RPC API so a central-kitchen system or external BI tool can read consumption and cost data.

Because this is a build-to-order product, nothing ships as a blind download. We start with a short scoping call to confirm your edition (Community vs Enterprise — Enterprise unlocks tighter MRP and accounting hooks), your Odoo version (17.0, 18.0, or 19.0), your location/warehouse layout, and how your menu, combos, and modifiers are structured. From that confirmed scope we build the module, deliver it against a staging copy of your database for UAT, and only then install to production with a rollback plan. Typical delivery is one working week from confirmed scope, and every engagement includes documentation, a training session, and a post-go-live support window.

What you get

  • Installable module source code targeting your confirmed Odoo version (17.0/18.0/19.0) and edition
  • Installation and configuration on your environment, including recipe/location setup for your menu
  • Technical documentation — data model, `stock.move` flow, cron jobs, and integration points
  • User guide plus a live training session for kitchen and management staff
  • UAT on a staging copy of your database with a documented rollback plan before production install
  • Post-go-live support window for defect fixes and configuration adjustments
  • Git repository handover with full commit history and tagged release
  • Seeded example recipes and a food-cost report template to jump-start rollout

Who this is for

Restaurant Owner / Operator

Runs one or several outlets and needs true food-cost percentage per dish and reliable ingredient stock, instead of reconciling POS sales against inventory by hand each month.

Central Kitchen / Commissary Manager

Produces prep items in bulk and distributes to outlets; needs yield tracking, sub-recipe explosion, and multi-location deduction so stock reflects real consumption across sites.

Finance / Cost Controller

Owns margin and purchasing budgets; wants live gross margin per menu item, theoretical-vs-actual variance, and role-scoped reports to catch over-portioning and shrinkage.

Odoo Administrator / IT Lead

Maintains the Odoo instance and needs a clean, version-matched module with documented models, `ir.model.access.csv` security, and XML-RPC/JSON-RPC access for existing BI tools.

How POS Restaurant Recipe & Ingredient Stock (BOM) Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
Ingredient deduction per dishRecipe BOM explodes to real `stock.move` on every POS salePossible but you design and maintain the whole flowOften deducts only finished product, or a rigid recipe modelSells the dish as one product; ingredients never move
Food cost & margin per dishLive computed field on ingredient `standard_price` with QWeb reportDepends on your team's costing implementationBasic cost field, limited variance reportingNo per-dish food-cost concept in POS
Combos & modifiersExplicit explosion and incremental modifier ingredient linesMust be specified and coded case by caseFrequently unsupported or flat-surcharge onlyNot handled at ingredient level
Yield / sub-recipesPrep-batch yield and nested sub-recipes for central kitchensBuildable with significant design effortRarely offeredNot available
Reorder alerts`ir.cron` + automated actions against reorder pointsWire up your own scheduled jobsSometimes present, often genericReorder rules exist but decoupled from recipes
Version & edition fitBuilt for your exact 17.0/18.0/19.0, Community or EnterpriseWhatever you build it againstMay lag Odoo versions or force EnterpriseShips with core, but lacks the feature
Support & handoverPost-go-live window + full git repo + docs + trainingIn-house; support is your own burdenVendor ticket queue, variable SLAsCommunity forums only
Time to valueone working week build-to-order, UAT on staging firstWeeks to months depending on team capacityInstant install but generic fit + integration workImmediate but does not solve the problem

Frequently Asked Questions about POS Restaurant Recipe & Ingredient Stock

How long does delivery take?

This is a build-to-order module, so it is built for your confirmed scope rather than downloaded. Typical delivery is one working week from the point where scope is confirmed on the scoping call — your Odoo version and edition, menu/combo/modifier structure, and warehouse layout. Larger menus or multi-location central-kitchen setups sit at the upper end of that range.

How are ongoing support and Odoo version updates handled?

Every engagement includes a post-go-live support window for defect fixes and configuration adjustments. Because the module is version-specific, moving to a newer Odoo release (for example 18.0 to 19.0) is handled as a scoped migration — we adapt the models, views, and POS hooks to the new version. You receive the full git repository, so your own team can also maintain it.

Does it work with Odoo Community or only Enterprise?

Both. We confirm your edition on the scoping call. Enterprise gives us tighter hooks into MRP and accounting for costing, but the recipe deduction and food-cost core runs on Community too — where needed we implement a purpose-built recipe model instead of depending on the `mrp` app.

Will it slow down the POS at the counter during a rush?

No. The ingredient explosion and `stock.move` creation run on order validation on the server side, not in the cashier's checkout keystrokes, and we build with batched moves plus negative-stock and UoM-rounding safeguards so high-volume service is not blocked by stock logic.

How are combos and modifiers deducted correctly?

Combos explode into their component dishes, each carrying its own recipe, and modifiers (extra cheese, large size) are mapped as incremental ingredient lines. So an 'extra cheese' order deducts the additional cheese, and a combo deducts every ingredient of every component — the deduction reflects what the kitchen actually made.

Can it feed our existing BI or central-kitchen system?

Yes. Consumption, cost, and recipe models are exposed over Odoo's standard XML-RPC / JSON-RPC API, so an external dashboard, procurement system, or central-kitchen platform can read live consumption and food-cost data without direct database access.

What do we get if we want to maintain it ourselves later?

You get the complete, documented source code and a git repository with full history and a tagged release, alongside technical documentation of the data model and stock flow. There is no lock-in — your team can extend or maintain the module independently.

Request a quote

POS Restaurant Recipe & Ingredient Stock

A build-to-order Odoo module that deducts raw ingredients from inventory on every dish sold via recipe BOMs, and reports true food cost, margin, and yield per menu item. ECOSIRE scopes, builds, installs, and supports it for Odoo 17.0, 18.0, or 19.0.

  • Recipe Bill of Materials per menu item, with ingredient product, quantity, and unit of measure (`uom.uom`) per line
  • Automatic `stock.move` generation on POS order validation, consuming ingredients from the configured kitchen/warehouse location
  • Combo and set-menu explosion — component dishes each contribute their own recipe lines to the deduction
  • Modifier and variant ingredient mapping (extra cheese, large size) as incremental recipe lines, not flat surcharges

Request a Quotation

Tell us about your POS Restaurant Recipe & Ingredient Stock requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.