At a Glance
Persona: Cost Controller (+ Cost Control Department) · Module: recipe · Workflow stages: DRAFT / PUBLISHED (cost-only edit + off-target publish co-approve) · Key permissions: edit-cost (target %, labor / overhead, selling price), publish co-approve (off-target), read across library
What this persona does: Reviews recipe cost rollups and margins, edits cost / pricing columns, monitors drift, and co-approves off-target publishes.
The Cost Controller persona covers two overlapping roles: the Cost Controller (transactional — reviews each recipe's cost rollup, target food-cost %, recommended selling price, gross margin; monitors cost drift as ingredient prices move; flags out-of-tolerance margins; signs off cost-related changes affecting menu pricing; runs theoretical-vs-actual variance reports) and the Cost Control Department (portfolio-level — owns the recipe-costing process at scale, sets category-level target food-cost percentages via tb_recipe_category.default_cost_settings, drives versioning approval when ingredient prices materially shift, reconciles outlet variance to GL at period close). The Cost Controller's authority surface is read across the recipe library and write on cost / pricing columns only — per REC_AUTH_006, the Cost Controller may edit target_food_cost_percentage, labor_cost, overhead_cost, labor_cost_percentage, overhead_percentage, selling_price, and suggested_price on DRAFT and PUBLISHED recipes; ingredient / step / variant edits remain with the Chef. The Cost Controller is also the publish co-approver for off-target margin publications per REC_AUTH_007 (when actual_food_cost_percentage > target + tenant tolerance, the publish is gated on Cost Controller co-approval); the co-approval is recorded in tb_recipe_version.change_summary or an application-layer signoff log. Beyond per-recipe work, the Cost Controller owns the cost-drift dashboard (recipes whose margin has fallen outside tolerance due to ingredient price moves or sub-recipe cascades per REC_XMOD_006) and the theoretical-vs-actual variance dashboard (outlet-level food-cost variance computed from the recipe-driven theoretical OUT vs the actual stock movements).
Entry point: Four paths into Cost Controller work.
PUBLISHED recipes whose actual_food_cost_percentage exceeds target_food_cost_percentage by more than tenant tolerance, ranked by drift magnitude. Each row links to the recipe detail and to the affected ingredient(s) whose cost has moved.DRAFT recipes that the Chef has marked ready for publish but whose actual margin is off-target; the Cost Controller is queued to co-approve or request revisions per REC_AUTH_007.target_food_cost_percentage, selling_price, labor_cost_percentage, overhead_percentage per REC_AUTH_006.Primary flow (10 steps — repeated per period and per drift event):
PUBLISHED recipes whose current actual_food_cost_percentage exceeds target_food_cost_percentage by more than the tenant tolerance (e.g. > 2 percentage points). Filter by category, cuisine, outlet (if recipe-outlet mapping is configured), drift magnitude, last-changed date.total_ingredient_cost rollup with per-line net_cost and wastage_cost, labor_cost, overhead_cost, cost_per_portion, selling_price, actual_food_cost_percentage, gross_margin, gross_margin_percentage. Read the pricing-history timeline (tb_recipe_pricing_history) to see how the cost has moved over time.tb_recipe_pricing_history.change_reason = "cost-drift update from costing module"); (b) a sub-recipe cost cascade (change_reason = "sub-recipe cost cascade from <name>"); (c) an actively-revised ingredient (Chef updated qty or wastage per REC_POST_004); or (d) a target-change (the tenant lowered the target food-cost %)?selling_price upward per REC_AUTH_006 and REC_POST_010; the system recomputes actual_food_cost_percentage, gross_margin, gross_margin_percentage; a tb_recipe_pricing_history row is written with change_reason = "price increase to restore margin". Coordinate with F&B Ops on the menu-side communication.target_food_cost_percentage upward per REC_AUTH_006; the recipe's margin is now within the new target. This is the "accept the new cost reality" path; reserved for situations where the cost increase is industry-wide and unavoidable, with corresponding adjustment at category level via tb_recipe_category.default_cost_settings.REC_AUTH_007; the off-target status is documented in tb_recipe_version.change_summary for audit.DRAFT recipe whose actual margin is off-target at publish time, the publish is gated on Cost Controller co-approval. The Cost Controller reviews the recipe (ingredients, costing inputs, intended pricing) and decides: (a) co-approve (publish proceeds; the off-target is documented); (b) request revisions (publish stays gated until Chef revises and re-submits); (c) reject (Chef revises or abandons the recipe).REC_AUTH_006, the Cost Controller may directly edit target_food_cost_percentage, selling_price, labor_cost_percentage, overhead_percentage, suggested_price. These edits trigger REC_POST_010 — recompute pricing rollup, write tb_recipe_pricing_history row. The recipe stays in its current status; no full tb_recipe_version snapshot needed for pricing-only changes.REC_CALC_014; actual consumption is from physical-count + SR + adjustment data. Variance per ingredient per outlet is the headline KPI. Persistent positive variance (theoretical < actual; over-consumption) points to over-portioning, theft, spoilage, or recipe accuracy gaps; persistent negative variance points to under-portioning or recipe error.tb_recipe_category, adjust default_cost_settings (target food-cost %, labor / overhead percentages) based on portfolio performance, market conditions, and strategic direction. New recipes in the category will inherit; existing recipes can be optionally re-applied (manual operation; not automatic).REC_AUTH_006), but creates menu-side disruption. Ingredient revision is slower and Chef-owned, but preserves menu pricing. The choice depends on (a) competitive pricing pressure, (b) whether the substitute ingredient meets quality standards, (c) how the cost increase compares to competitors.The Cost Controller's involvement on a given recipe / cost concern ends at one of several boundaries:
REC_POST_003; the off-target status is documented in tb_recipe_version.change_summary.tb_recipe_pricing_history row written; affected menu items may need price communication via F&B Ops. Cost Controller monitors the recipe for further drift.tb_recipe_category.default_cost_settings; new recipes inherit. The Cost Controller (or Cost Control Department) signs off on the category-level decision.The Cost Controller is in continuous engagement with the recipe module — every ingredient cost movement, every menu-pricing decision, every variance investigation flows through this persona. The "exit" from a given recipe is rare; the engagement is ongoing oversight.
../carmen/docs/recipe-module/RECIPE-Overview.md § Cost Control — carmen/docs source for the Cost Controller's responsibility scope.../carmen/docs/recipe-module/RECIPE-PRD.md § Cost Control user stories — carmen/docs user stories ("As a cost controller, I want to review recipe costs...", "...update ingredient costs and see the impact on recipe pricing...", "...set target food cost percentages...").../carmen/docs/recipe-module/RECIPE-Business-Requirements.md § Recipe Costing (REC_CO_001–REC_CO_005) — feeds the calculation rules the Cost Controller reviews; § Logic Implementation § Cost Calculations is the formal formula set.../carmen/docs/recipe/recipe-management.md § Recipe Costing Sheet — layout-level reference for the cost summary panel, ingredients costing grid, preparation cost section, yield analysis, pricing section, comparative metrics.../carmen/docs/recipe/gross-profit-dashboard-spec.md — gross-profit dashboard layout the Cost Controller uses for portfolio review.../carmen/docs/recipe/complete-dashboard-spec.md — comprehensive dashboard layout for portfolio-level cost oversight.tb_recipe_pricing_history timeline and co-approval signatures.tb_recipe (total_ingredient_cost, labor_cost, overhead_cost, cost_per_portion, target_food_cost_percentage, actual_food_cost_percentage, selling_price, gross_margin, gross_margin_percentage); tb_recipe_pricing_history as the audit trail for cost / price changes.REC_CALC_001–REC_CALC_015 (the math the Cost Controller reviews and the basis for drift detection), REC_AUTH_006–REC_AUTH_008 (Cost Controller's authority scope), REC_POST_010 (pricing-only edit posting effects), REC_XMOD_005–REC_XMOD_006 (costing-module coupling), REC_XMOD_009 (versioning / audit).[costing](/en/inventory/costing) to the recipe module per REC_XMOD_006.