Datarite FP&A · software by Datarite Consulting

Demo Foods Ltd - workings and method, 2025-12-31

What happened - the reconciled bridges

What works with the data supplied

Pack Generic (any business). Trial balance: 12 month(s) (2025-01-31 to 2025-12-31). Budget overlap: 12 month(s). Operational series: volume (12), headcount (12).

FeatureStatusWith the data you haveWhat switches it on
Cost structure & KPI diagnosticON12 month(s) of trial balance-
Actual vs run rateON12 month(s) of trial balance-
Actual vs Budget bridgeON12 month(s) of trial balance; budget overlaps 12 month(s)-
Actual vs Prior Year bridgeOFF (year-on-year unavailable until a month and its prior-year month are both present)0 month(s) with the same month a year earliertrial balances for the same months a year earlier (13+ months in all)
Price / volume / mix splitONvolume present-
Price / volume split against budgetONvolume present; budget volume present-
Yield & efficiency varianceOFF (folded into unexplained, flagged)pack declares none of yield, efficiency; no such dimension in the packa pack that declares one of yield, efficiency
Official-vs-effective FX gap as a bridge lineON12 FX gap line(s)-
Seasonality in the outlookDEGRADED (pack default profile, flagged ASSUMED)12 month(s) of trial balance12 more month(s) of trial balance (have 12, need 24)
Driver elasticities from historyDEGRADED (the Generic (any business) pack ships no default elasticities, so drivers are excluded from the driver tree and said so, rather than given a weak number)12 month(s) of trial balance; 12 month(s) of volume6 more month(s) of trial balance (have 12, need 18) and 6 more month(s) of volume (have 12, need 18)
Probabilistic outlook (P10 / P50 / P90)ON12 month(s) of trial balance-
Covenant / threshold breach probabilityON12 month(s) of trial balance; 1 threshold(s) declared-
Forecast scorecardDEGRADED (builds - accumulates from first use)1 forecast cycle(s) stored1 more forecast cycle(s) inside the app
Decision engine & ledgerON12 month(s) of trial balance-

Figures substituted from the pack - labelled ASSUMED everywhere they appear

FigureValueSourceReplaced when
seasonality_monthly_index1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1Generic pack: no industry profile exists, so the index is flat. Replaced by the client's own history at 24 months.replaced automatically once there are 12 more month(s) of trial balance (have 12, need 24)

Every figure in this table is computed from the files named in intake.json; nothing is estimated.

Driver tree

Leverage is arithmetic: a 1% move in the driver moves each line the pack says it moves by 1%.

History-fitted elasticities appear only with enough months; otherwise they are excluded and say why.

RankDriverLatest valueEBITDA per 1%, month (NGN)Cash per 1%, first monthCash per 1%, monthly afterHistory elasticity
1Average price per unit1,945.04 currency per unit1,248,115-187,2171,248,115excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope
2Cost of sales as a share of revenue0.76 %-949,587-1,026,548-949,587excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope
3Volume64,169.00 units (as supplied)298,528-1,213,765298,528excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope
4Operating expenses as a share of revenue0.19 %-242,648-242,648-242,648excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope
5Headcount232.00 FTE-198,498-205,296-198,498excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope
6Personnel cost per head85,559.59 currency per FTE-198,498-205,296-198,498excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope

How each leverage was derived

Budget challenge

8 line(s) out of line with history, ranked by the size of the gap. Budget months: 2025-01-31 to 2025-12-31; history: 2025-01-31 to 2025-12-31.

#LineOwnerGap (NGN)QuestionEvidence
1RevenueSales187,121,418This line is 12.0% away from its twelve-month run rate. What changes in the business explain the difference?budget_monthly_avg 145538880.88; actual_monthly_avg 129945429.36; history_months 12
2Cost of sales - materialsProcurement-49,532,658The budget assumes cost of sales at 53.9% of revenue against a trailing 56.7%. What moves it?budget_ratio_pct 53.89; actual_ratio_pct 56.72
3Cost of sales - direct labourOperations13,162,718This line is 12.0% away from its twelve-month run rate. What changes in the business explain the difference?budget_monthly_avg 10237669.45; actual_monthly_avg 9140776.29; history_months 12
4Cost of sales - energy and fuelOperations11,248,999This line is 12.0% away from its twelve-month run rate. What changes in the business explain the difference?budget_monthly_avg 8749221.23; actual_monthly_avg 7811804.67; history_months 12
5Income taxFinance6,530,915This line is 20.0% away from its twelve-month run rate. What changes in the business explain the difference?budget_monthly_avg 3265457.25; actual_monthly_avg 2721214.38; history_months 12
6Exceptional and one-off itemsFinance2,750,000This line is 100.0% away from its twelve-month run rate. What changes in the business explain the difference?budget_monthly_avg 0.0; actual_monthly_avg -229166.67; history_months 12
7Cost of sales - other directOperations2,235,921This line is 12.0% away from its twelve-month run rate. What changes in the business explain the difference?budget_monthly_avg 1739049.64; actual_monthly_avg 1552722.89; history_months 12
8Exceptional and one-off itemsFinance229,167This line is budgeted flat every month while actuals moved between -2,750,000.0 and 0.0. Is it a placeholder?budget_value 0.0; actual_min -2750000.0; actual_max 0.0

Outlook method

12 months from 2026-01-31; 5,000 simulation(s), seed 42; drivers simulated: volume, price, unit_variable_cost, fixed_cost, fx_rate; seasonality history_one_year; volume x price.

Method: monthly log-changes of each driver drawn from a multivariate normal with zero drift and the covariance of the client's own months (shrinkage 0.542); random walk from the de-seasonalised run rate; cash = opening cash + EBITDA - change in working capital (DSO, DIO, DPO held) - net finance cost - tax; capex and debt movements NOT AVAILABLE from the trial balance.

Correlation matrix:

volumepriceunit_variable_costfixed_costfx_rate
volume1.000.12-0.200.110.32
price0.121.000.190.15-0.05
unit_variable_cost-0.200.191.000.09-0.25
fixed_cost0.110.150.091.00-0.09
fx_rate0.32-0.05-0.25-0.091.00
MonthRevenue P10Revenue P50Revenue P90EBITDA P10EBITDA P50EBITDA P90Cash P10Cash P50Cash P90
2026-01-31105,710,238116,743,571128,813,3292,146,2966,263,16510,510,319129,553,258142,222,238152,878,172
2026-02-2897,553,915111,861,012128,472,786-549,9044,866,87710,886,281135,270,646150,993,472164,369,379
2026-03-31108,331,315128,098,361151,442,5791,580,8788,997,30817,536,995116,969,501137,712,905155,200,153
2026-04-30110,841,143133,626,723162,010,2741,735,44110,417,72421,074,225113,403,491137,843,149158,238,622
2026-05-31109,330,974134,256,999165,646,536843,12710,501,98422,309,744116,785,958143,819,700167,565,878
2026-06-30104,886,526132,132,601166,797,768-324,3239,844,00023,028,695122,798,479153,129,808180,397,665
2026-07-3199,702,218128,962,909165,764,197-1,847,8028,840,02322,517,730128,889,902164,497,336195,213,458
2026-08-3195,331,218125,272,997163,930,693-3,216,6027,996,50822,620,011133,488,870174,354,030209,978,275
2026-09-30102,153,124136,644,008182,269,806-1,591,11410,831,25728,247,881118,513,079167,650,372210,801,632
2026-10-31104,400,240143,073,501193,172,477-1,266,75912,121,67131,573,912112,067,337169,145,403219,587,323
2026-11-30106,555,968146,498,980201,691,548-1,376,22113,185,77734,274,492109,186,159173,904,462231,609,429
2026-12-3189,798,336125,092,107175,453,231-5,293,3077,592,53526,562,829133,099,193204,626,093272,510,080

Decisions

4 action(s), ranked by expected value per unit of effort. Each is sized from a figure in this run and written to the decision ledger (0 new).

#ActionDriverOwnerExpected EBITDA impact (NGN, 12 months)EffortTime to effectAssumptionHow we will know
1Close the volume shortfall against budget on Revenue: NGN 187,124,127 of revenueunit_volumeSales18,712,413 to 56,137,238high90 daysthe shortfall is demand or execution, not capacity; the budget volume was achievablemonthly volume in the operational upload against the budget volume, over the next three months
2Test a 1% price move on the highest-leverage driver, Average price per unit: worth NGN 1,248,115 of EBITDA a monthaverage_priceSales7,488,691 to 14,977,382medium45 daysvolume does not fall by more than the price gain; to be tested on one segment firstaverage price per unit and volume in the operational upload, next three months, against the trailing three
3Renegotiate or re-source Cost of sales - materials: the unit cost ran NGN 23,212,874 above budget over the periodcogs_ratioProcurement5,803,218 to 11,606,437medium60 daysthe adverse unit cost is a supplier price effect, not a change in specification or qualityCost of sales - materials per unit of output in the next three months' trial balances, against the budget unit cost
4Reduce the official-versus-effective FX gap on Cost of sales - materials: NGN 20,211,435 was paid above the official ratefx_effective_rateTreasury4,042,287 to 10,105,718high90 daysa larger share of the currency need can be met at or near the official rate through documented import channelsfx_gap component of the bridge for Cost of sales - materials, month by month, against the period average

Decision ledger

What was recommended, what was expected, what was decided, and what happened.

RaisedActionOwnerExpected (NGN, 12m)Decision30d90d180d
2025-12-31Close the volume shortfall against budget on Revenue: NGN 187,124,127Sales18,712,413 to 56,137,238pendingnot yet measurable (0/1)not yet measurable (0/3)not yet measurable (0/6)
2025-12-31Test a 1% price move on the highest-leverage driver, Average price perSales7,488,691 to 14,977,382pendingnot yet measurable (0/1)not yet measurable (0/3)not yet measurable (0/6)
2025-12-31Renegotiate or re-source Cost of sales - materials: the unit cost ranProcurement5,803,218 to 11,606,437pendingnot yet measurable (0/1)not yet measurable (0/3)not yet measurable (0/6)
2025-12-31Reduce the official-versus-effective FX gap on Cost of sales - materiaTreasury4,042,287 to 10,105,718pendingnot yet measurable (0/1)not yet measurable (0/3)not yet measurable (0/6)

4 recommendation(s) await a decision. Record one with python tools/dev/record_decision.py --as-of <period> --id <action id> --decision adopted|rejected|deferred --reason "..." or in intake.yaml under decisions_taken.

Forecast scorecard

1 forecast cycle(s) stored; 0 graded (0 forecast-months with an actual). The scorecard is still building - it accumulates from first use.

No calibration applied: 0 graded cycle(s); 2 needed before the fan is calibrated.

Generated by Datarite FP&A. Every figure derives from the files uploaded for this run and carries its formula in the run record. Outlook figures are simulations with a stated method, not commitments. Operational analysis only — not advice on investments, tax or legal matters.