{
  "schemaVersion": 1,
  "title": "A pack change is not always a price increase",
  "label": "Fictional demonstration. All businesses, invoices, quantities, prices and quotations are invented for this example. This is not a customer result.",
  "reportDate": "2026-11-03",
  "currency": "USD",
  "weightUnit": "kg",
  "group": {
    "name": "Cedar Kitchen Group",
    "fictional": true,
    "sites": ["Central Kitchen", "North Cafe", "Park Cafe", "River Cafe"],
    "totalSites": 4,
    "supplier": "Example Food Supply"
  },
  "sources": {
    "previousInvoice": {"id": "DEMO-INV-0901", "date": "2026-09-01", "quantityCasesPerLine": 1},
    "currentInvoice": {"id": "DEMO-INV-1001", "date": "2026-10-01", "quantityCasesPerLine": 1},
    "sales": {"id": "DEMO-SALES-OCT", "period": "October 2026", "description": "Fictional monthly item sales by cafe. The comparison holds this mix and volume constant."},
    "yield": {"id": "DEMO-BATCH-01", "description": "Fictional production sheet records 12 kg of usable finished filling per batch. Ingredient quantities are purchased raw weights. Finished batch yield is applied once."},
    "quote": {"id": "DEMO-QUOTE-1102", "date": "2026-11-02", "description": "Unaccepted fictional chicken quote. Equivalent specification, quality, delivery terms and availability must be checked before approval."}
  },
  "invoiceLines": [
    {"id": "chicken", "name": "Raw boneless chicken", "previous": {"packsPerCase": 6, "kgPerPack": 2, "caseKg": 12, "casePrice": 72}, "current": {"packsPerCase": 4, "kgPerPack": 2.5, "caseKg": 10, "casePrice": 66}, "batchRawKg": 12},
    {"id": "tomatoes", "name": "Chopped tomatoes", "previous": {"packsPerCase": 6, "kgPerPack": 2.5, "caseKg": 15, "casePrice": 30}, "current": {"packsPerCase": 6, "kgPerPack": 3, "caseKg": 18, "casePrice": 36}, "batchRawKg": 3},
    {"id": "onions", "name": "Onions", "previous": {"packsPerCase": 1, "kgPerPack": 20, "caseKg": 20, "casePrice": 24}, "current": {"packsPerCase": 1, "kgPerPack": 20, "caseKg": 20, "casePrice": 24}, "batchRawKg": 1},
    {"id": "oil", "name": "Cooking oil by weight", "previous": {"packsPerCase": 1, "kgPerPack": 10, "caseKg": 10, "casePrice": 40}, "current": {"packsPerCase": 1, "kgPerPack": 10, "caseKg": 10, "casePrice": 40}, "batchRawKg": 0.25},
    {"id": "spices", "name": "Spice blend", "previous": {"packsPerCase": 1, "kgPerPack": 1, "caseKg": 1, "casePrice": 10}, "current": {"packsPerCase": 1, "kgPerPack": 1, "caseKg": 1, "casePrice": 10}, "batchRawKg": 0.05},
    {"id": "salt", "name": "Salt", "previous": {"packsPerCase": 1, "kgPerPack": 2, "caseKg": 2, "casePrice": 1}, "current": {"packsPerCase": 1, "kgPerPack": 2, "caseKg": 2, "casePrice": 1}, "batchRawKg": 0.02}
  ],
  "batch": {
    "name": "Smoky tomato chicken filling",
    "finishedUsableKg": 12,
    "source": "DEMO-BATCH-01",
    "note": "12 kg of usable finished filling from 16.32 kg of raw ingredients. The recorded finished yield incorporates cooking loss. Do not apply another cooking-yield deduction."
  },
  "menuRecipes": [
    {"id": "wrap", "name": "Chicken wrap", "fillingKgPerItem": 0.12, "otherIngredientCost": 1.2, "sellingPrice": 8.5, "salesByCafe": {"North Cafe": 5000, "Park Cafe": 4000, "River Cafe": 3000}},
    {"id": "bowl", "name": "Chicken rice bowl", "fillingKgPerItem": 0.18, "otherIngredientCost": 1.8, "sellingPrice": 11, "salesByCafe": {"North Cafe": 3000, "Park Cafe": 2500, "River Cafe": 2500}}
  ],
  "quote": {"ingredientId": "chicken", "packsPerCase": 4, "kgPerPack": 2.5, "caseKg": 10, "casePrice": 61.5, "status": "Proposed supplier negotiation target, not accepted and not a realized saving", "source": "DEMO-QUOTE-1102"},
  "actions": [
    {"priority": 1, "owner": "MenuCosting team", "action": "Correct and verify pack weights before accepting price alerts. Tomatoes are unchanged at $2 per kg despite a 20 percent higher case price.", "status": "Illustrated validation step"},
    {"priority": 2, "owner": "Operator approves; MenuCosting team prepares comparison", "action": "Check the $6.15 per kg chicken quotation for equivalent specification, quality, terms and availability. Approve only after verification.", "status": "Proposed decision, not implemented"},
    {"priority": 3, "owner": "MenuCosting team", "action": "Maintain the shared filling and both menu recipe costs, show the exposure by cafe, and follow up on the approved purchasing decision.", "status": "Illustrated ongoing service"}
  ],
  "assumptions": [
    "All records are fictional, not anonymized customer data.",
    "Costs are USD and ingredient-only, excluding taxes, packaging, labor, overhead, freight and MenuCosting fees.",
    "Other ingredient costs in the wrap and bowl are explicit fixed assumptions, held constant to isolate the filling change; they are not supported by the six sample invoice lines.",
    "The comparison holds the displayed monthly sales mix, portions, raw quantities and usable batch yield constant.",
    "Monthly exposure is a modeled ingredient cost difference at that sales mix, not evidence of actual incurred loss or a forecast of profit.",
    "The quote-based opportunity assumes equivalent chicken specification and fulfillment terms. It is before service fees and implementation costs, and is not a realized saving.",
    "Correcting the tomato pack avoids a false alert; it does not itself save cash and must not be added to the quote-based opportunity.",
    "Calculations retain full precision until display. Rounded per-item costs must not be multiplied to derive monthly totals.",
    "Physical counts, actual waste, staffing costs and realized profit are not measured in this demonstration."
  ],
  "expected": {
    "previousInvoiceSubtotal": 177,
    "currentInvoiceSubtotal": 177,
    "tomatoCasePriceChangePct": 20,
    "tomatoUnitPricePrevious": 2,
    "tomatoUnitPriceCurrent": 2,
    "tomatoUnitPriceChangePct": 0,
    "chickenCasePriceChangePct": -8.333333333333333,
    "chickenUnitPricePrevious": 6,
    "chickenUnitPriceCurrent": 6.6,
    "chickenUnitPriceChangePct": 10,
    "rawBatchKg": 16.32,
    "finishedBatchKg": 12,
    "batchCostPrevious": 80.71,
    "batchCostCurrent": 87.91,
    "batchCostChange": 7.2,
    "fillingCostPerKgPrevious": 6.725833333333333,
    "fillingCostPerKgCurrent": 7.325833333333333,
    "fillingCostPerKgChange": 0.6,
    "wrapCostPrevious": 2.0071,
    "wrapCostCurrent": 2.0791,
    "wrapCostChange": 0.072,
    "bowlCostPrevious": 3.01065,
    "bowlCostCurrent": 3.11865,
    "bowlCostChange": 0.108,
    "monthlyWraps": 12000,
    "monthlyBowls": 8000,
    "monthlyFinishedFillingKg": 2880,
    "monthlyBatchEquivalent": 240,
    "monthlyRawChickenKg": 2880,
    "monthlyCostExposure": 1728,
    "exposureByCafe": {"North Cafe": 684, "Park Cafe": 558, "River Cafe": 486},
    "quoteUnitPrice": 6.15,
    "quoteBasedMonthlyOpportunity": 1296,
    "residualMonthlyExposureVsPrevious": 432,
    "tomatoFalseAlertIfOldPackWeightUsed": 288
  }
}
