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).
| Feature | Status | With the data you have | What switches it on |
| Cost structure & KPI diagnostic | ON | 12 month(s) of trial balance | - |
| Actual vs run rate | ON | 12 month(s) of trial balance | - |
| Actual vs Budget bridge | ON | 12 month(s) of trial balance; budget overlaps 12 month(s) | - |
| Actual vs Prior Year bridge | OFF (year-on-year unavailable until a month and its prior-year month are both present) | 0 month(s) with the same month a year earlier | trial balances for the same months a year earlier (13+ months in all) |
| Price / volume / mix split | ON | volume present | - |
| Price / volume split against budget | ON | volume present; budget volume present | - |
| Yield & efficiency variance | OFF (folded into unexplained, flagged) | pack declares none of yield, efficiency; no such dimension in the pack | a pack that declares one of yield, efficiency |
| Official-vs-effective FX gap as a bridge line | ON | 12 FX gap line(s) | - |
| Seasonality in the outlook | DEGRADED (pack default profile, flagged ASSUMED) | 12 month(s) of trial balance | 12 more month(s) of trial balance (have 12, need 24) |
| Driver elasticities from history | DEGRADED (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 volume | 6 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) | ON | 12 month(s) of trial balance | - |
| Covenant / threshold breach probability | ON | 12 month(s) of trial balance; 1 threshold(s) declared | - |
| Forecast scorecard | DEGRADED (builds - accumulates from first use) | 1 forecast cycle(s) stored | 1 more forecast cycle(s) inside the app |
| Decision engine & ledger | ON | 12 month(s) of trial balance | - |
| Figure | Value | Source | Replaced when |
| seasonality_monthly_index | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 | Generic 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.
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.
| Rank | Driver | Latest value | EBITDA per 1%, month (NGN) | Cash per 1%, first month | Cash per 1%, monthly after | History elasticity |
| 1 | Average price per unit | 1,945.04 currency per unit | 1,248,115 | -187,217 | 1,248,115 | excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope |
| 2 | Cost of sales as a share of revenue | 0.76 % | -949,587 | -1,026,548 | -949,587 | excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope |
| 3 | Volume | 64,169.00 units (as supplied) | 298,528 | -1,213,765 | 298,528 | excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope |
| 4 | Operating expenses as a share of revenue | 0.19 % | -242,648 | -242,648 | -242,648 | excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope |
| 5 | Headcount | 232.00 FTE | -198,498 | -205,296 | -198,498 | excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope |
| 6 | Personnel cost per head | 85,559.59 currency per FTE | -198,498 | -205,296 | -198,498 | excluded: only 12 usable month(s) of history; 18 are needed for a defensible slope |
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.
| # | Line | Owner | Gap (NGN) | Question | Evidence |
| 1 | Revenue | Sales | 187,121,418 | This 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 |
| 2 | Cost of sales - materials | Procurement | -49,532,658 | The 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 |
| 3 | Cost of sales - direct labour | Operations | 13,162,718 | This 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 |
| 4 | Cost of sales - energy and fuel | Operations | 11,248,999 | This 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 |
| 5 | Income tax | Finance | 6,530,915 | This 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 |
| 6 | Exceptional and one-off items | Finance | 2,750,000 | This 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 |
| 7 | Cost of sales - other direct | Operations | 2,235,921 | This 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 |
| 8 | Exceptional and one-off items | Finance | 229,167 | This 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 |
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:
| volume | price | unit_variable_cost | fixed_cost | fx_rate | |
| volume | 1.00 | 0.12 | -0.20 | 0.11 | 0.32 |
| price | 0.12 | 1.00 | 0.19 | 0.15 | -0.05 |
| unit_variable_cost | -0.20 | 0.19 | 1.00 | 0.09 | -0.25 |
| fixed_cost | 0.11 | 0.15 | 0.09 | 1.00 | -0.09 |
| fx_rate | 0.32 | -0.05 | -0.25 | -0.09 | 1.00 |
| Month | Revenue P10 | Revenue P50 | Revenue P90 | EBITDA P10 | EBITDA P50 | EBITDA P90 | Cash P10 | Cash P50 | Cash P90 |
| 2026-01-31 | 105,710,238 | 116,743,571 | 128,813,329 | 2,146,296 | 6,263,165 | 10,510,319 | 129,553,258 | 142,222,238 | 152,878,172 |
| 2026-02-28 | 97,553,915 | 111,861,012 | 128,472,786 | -549,904 | 4,866,877 | 10,886,281 | 135,270,646 | 150,993,472 | 164,369,379 |
| 2026-03-31 | 108,331,315 | 128,098,361 | 151,442,579 | 1,580,878 | 8,997,308 | 17,536,995 | 116,969,501 | 137,712,905 | 155,200,153 |
| 2026-04-30 | 110,841,143 | 133,626,723 | 162,010,274 | 1,735,441 | 10,417,724 | 21,074,225 | 113,403,491 | 137,843,149 | 158,238,622 |
| 2026-05-31 | 109,330,974 | 134,256,999 | 165,646,536 | 843,127 | 10,501,984 | 22,309,744 | 116,785,958 | 143,819,700 | 167,565,878 |
| 2026-06-30 | 104,886,526 | 132,132,601 | 166,797,768 | -324,323 | 9,844,000 | 23,028,695 | 122,798,479 | 153,129,808 | 180,397,665 |
| 2026-07-31 | 99,702,218 | 128,962,909 | 165,764,197 | -1,847,802 | 8,840,023 | 22,517,730 | 128,889,902 | 164,497,336 | 195,213,458 |
| 2026-08-31 | 95,331,218 | 125,272,997 | 163,930,693 | -3,216,602 | 7,996,508 | 22,620,011 | 133,488,870 | 174,354,030 | 209,978,275 |
| 2026-09-30 | 102,153,124 | 136,644,008 | 182,269,806 | -1,591,114 | 10,831,257 | 28,247,881 | 118,513,079 | 167,650,372 | 210,801,632 |
| 2026-10-31 | 104,400,240 | 143,073,501 | 193,172,477 | -1,266,759 | 12,121,671 | 31,573,912 | 112,067,337 | 169,145,403 | 219,587,323 |
| 2026-11-30 | 106,555,968 | 146,498,980 | 201,691,548 | -1,376,221 | 13,185,777 | 34,274,492 | 109,186,159 | 173,904,462 | 231,609,429 |
| 2026-12-31 | 89,798,336 | 125,092,107 | 175,453,231 | -5,293,307 | 7,592,535 | 26,562,829 | 133,099,193 | 204,626,093 | 272,510,080 |
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).
| # | Action | Driver | Owner | Expected EBITDA impact (NGN, 12 months) | Effort | Time to effect | Assumption | How we will know |
| 1 | Close the volume shortfall against budget on Revenue: NGN 187,124,127 of revenue | unit_volume | Sales | 18,712,413 to 56,137,238 | high | 90 days | the shortfall is demand or execution, not capacity; the budget volume was achievable | monthly volume in the operational upload against the budget volume, over the next three months |
| 2 | Test a 1% price move on the highest-leverage driver, Average price per unit: worth NGN 1,248,115 of EBITDA a month | average_price | Sales | 7,488,691 to 14,977,382 | medium | 45 days | volume does not fall by more than the price gain; to be tested on one segment first | average price per unit and volume in the operational upload, next three months, against the trailing three |
| 3 | Renegotiate or re-source Cost of sales - materials: the unit cost ran NGN 23,212,874 above budget over the period | cogs_ratio | Procurement | 5,803,218 to 11,606,437 | medium | 60 days | the adverse unit cost is a supplier price effect, not a change in specification or quality | Cost of sales - materials per unit of output in the next three months' trial balances, against the budget unit cost |
| 4 | Reduce the official-versus-effective FX gap on Cost of sales - materials: NGN 20,211,435 was paid above the official rate | fx_effective_rate | Treasury | 4,042,287 to 10,105,718 | high | 90 days | a larger share of the currency need can be met at or near the official rate through documented import channels | fx_gap component of the bridge for Cost of sales - materials, month by month, against the period average |
What was recommended, what was expected, what was decided, and what happened.
| Raised | Action | Owner | Expected (NGN, 12m) | Decision | 30d | 90d | 180d |
| 2025-12-31 | Close the volume shortfall against budget on Revenue: NGN 187,124,127 | Sales | 18,712,413 to 56,137,238 | pending | not yet measurable (0/1) | not yet measurable (0/3) | not yet measurable (0/6) |
| 2025-12-31 | Test a 1% price move on the highest-leverage driver, Average price per | Sales | 7,488,691 to 14,977,382 | pending | not yet measurable (0/1) | not yet measurable (0/3) | not yet measurable (0/6) |
| 2025-12-31 | Renegotiate or re-source Cost of sales - materials: the unit cost ran | Procurement | 5,803,218 to 11,606,437 | pending | not yet measurable (0/1) | not yet measurable (0/3) | not yet measurable (0/6) |
| 2025-12-31 | Reduce the official-versus-effective FX gap on Cost of sales - materia | Treasury | 4,042,287 to 10,105,718 | pending | not 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.
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.
Press Ctrl+P to print this brief or save it as a PDF.
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.