⌂ Home ☷ Board

Fuel Impact Forecast — Methodology

Companion to: fuel-impact-2026-05-29.html Generated: 2026-05-29 by build_report.py (fuel-impact-report skill, MC-3483) Purpose: step-by-step record of every input value used — verify the math from this doc alone.


1. Data Sources

# Source File Last read
1 IATA Jet Fuel Price Monitor ~/Dropbox/Safair/Reporting Data/Data Fuel.xlsx 2026-05-29
2 B4i Fuel Feedback (Bernd Feucht) ~/workspace/PKA/SecondBrain/wiki/concepts/Fuel-Prices-B4i.md embedded as base64 in HTML
3 Radixx route surcharge ~/workspace/PKA/SecondBrain/wiki/concepts/fuel-surcharge-data/surcharge_history.json embedded as pivot JSON in HTML
4 FinDash kpi_data ~/workspace/PKA/Projects/findash/data/kpi_data.json 2026-05-29
5 May MTD dashboard ~/Dropbox/Safair/Reporting Data/dashboard/dashboard_data.json 2026-05-29

2. Schedule Constants (only non-actuals in CONSTANTS)

Parameter Value Basis As-of
MAY_FLIGHTS 4,991 flights May schedule 2026-05-29
MAY_SEATS 943,040 seats May schedule 2026-05-29

MC-3517 note: March + April estimate constants removed. All cost fields now read directly from kpi_data.json actuals (fuel_r, fuel_uplift, avg_fuel_per_liter_uplifted, total_costs, pbt_r). NON_FUEL_PER_FLIGHT derived at runtime from April actuals: (total_costs − fuel_r) / flights.


3. Mar Actuals (kpi_data.json, year 2026, months[2])

Metric Value kpi_data key
Flights 5,640 flights
Pax 952,399 pax
Seats 1,062,072 seats
Load Factor 89.7% load_factor
Yield R1,329 yield
Revenue R1,233.5M revenue_r
Fuel uplift 28.613M L fuel_uplift — ACTUAL
Fuel R/L delivered R14.62 avg_fuel_per_liter_uplifted — ACTUAL
Fuel cost R418.4M fuel_r — ACTUAL
Non-fuel cost R717.8M = total_costs − fuel_r derived
— Direct (ex-fuel) R388.1M = total_direct_costs − fuel_r kpi_data
— Overheads R329.7M = total_overheads kpi_data
Total costs R1,136.3M total_costs — ACTUAL
PBT R127.4M pbt_r — ACTUAL
Reconciliation check revenue − fuel − non_fuel = R97.2M vs pbt_r R127.4M gap R30.22M

4. Apr Actuals (kpi_data.json, year 2026, months[3])

Metric Value kpi_data key
Flights 5,307 flights
Pax 861,063 pax
Seats 999,135 seats
Load Factor 86.2% load_factor
Yield R1,628 yield
Revenue R1,427.2M revenue_r — ACTUAL
Fuel uplift 26.637M L fuel_uplift — ACTUAL
Fuel R/L delivered R26.52 avg_fuel_per_liter_uplifted — ACTUAL
Fuel cost R706.5M fuel_r — ACTUAL
Non-fuel cost R683.5M = total_costs − fuel_r derived
— Direct (ex-fuel) R360.2M = total_direct_costs − fuel_r kpi_data
— Overheads R323.3M = total_overheads kpi_data
Total costs R1,390.1M total_costs — ACTUAL
PBT R43.7M pbt_r — ACTUAL
Reconciliation check revenue − fuel − non_fuel = R37.2M vs pbt_r R43.7M gap R6.54M
Non-fuel/flight R128,797 April reference; May uses direct per-flight + overheads flat (Mar–Apr avg)
L/flight 5,019 apr fuel_uplift / apr flights — used for May

5. Recovery Analysis

Lens Result
Per-pax yield recovery R299 ÷ R381 = 78%
Per-flight rev recovery R50K ÷ R59K = 85%
Network revenue ÷ fuel hike R194M ÷ R288M = 67%
Total absorption (rev + nonfuel saving) ÷ fuel hike R228M ÷ R288M = 79%

May (projection) column. The Recovery + comparison tables in the HTML report carry a third May (proj) column = the headline Base-case projection (rev R1,170.8M · fuel R583.4M @ R24.02/L · PBT −R73.7M). It is a projection, not a closed month, and is excluded from the recovery ratios above: those measure absorption of the March→April fuel hike, whereas April→May fuel falls (smaller, lower-volume month + B4i easing) — there is no hike to absorb into May.


6. May Projection

6a. May Fuel R/L — anchored blend (2026-05-25 actuals method)

Step 1 — Prior-month (April) actual delivered R/L anchor:

Apr actual R/L = 706.54M ÷ 26.637M = R26.5200/L  (kpi_data ACTUAL)

Step 2 — Anchored easing (B4i, weighted by uplift-share-by-airport):

Uplift mix (QV fuel burn): JNB 42%, CPT 35%, DUR 8%, HLA 8%
B4i May per-location decreases, weighted by uplift share -> net easing R2.50/L
May central R/L = Apr R26.52 - R2.50 = R24.02/L

CAVEAT: B4i markdown stores weekly deltas, not absolute per-location levels (those live in B4i email attachments, not extracted) — hence an anchored blend, not a full matrix. Fuel R/L is the only May input not yet factual; GL closes at month-end.

Step 3 — Scenario band: Optimistic R23.02 (more easing) · Base R24.02 (central) · Pessimistic R25.02 · Floor R26.52 (April flat, no ease)

6b. May Revenue — SummaryExcel rev/flight (actuals)

Revenue/day = Actual Pax × Pax Yield (validated ~1.8% vs GL April). Flown days 1–28 are actual; remaining days projected at last-week rev/flight (conservative; MTD rev/flight = upside).

Metric Value Source
MTD period days 1–28 flown SummaryExcel LF Daily
MTD revenue R1,053.7M Actual Pax × Pax Yield
MTD flights 4,422 SummaryExcel
MTD LF 80.8% actual flown
MTD yield R1,561 actual flown
Last-week rev/flight R230,086 days 22–28 (remainder basis)
MTD rev/flight R238,294 upside basis
Remaining flights 509 scheduled
Full-month revenue (last-week) R1,170.8M MTD + remaining × last-week rev/flight
Full-month revenue (MTD basis) R1,175.0M upside

6b-ii. May Fuel Volume — activity × intensity (actuals)

Full-month uplift = Apr actual uplift 26.64M L
                  x (May flights 4,931 / Apr flights 5,307)
                  x burn-intensity ratio 0.981  (May burn/blkhr / Apr burn/blkhr)
                  = 24.29M L
Period-independent: intensity sidesteps the QV partial-month cutoff.
QV fuel burn reconciles 1.00 on uplift vs kpi_data for closed months.

6c. Schedule + Cost Inputs

Parameter Value Basis
Flights (full month) 4,931 SummaryExcel actual+booked
Fuel volume 24.29M L activity×intensity
Implied L/flight 4,926 volume ÷ flights
Non-fuel/flight R128,797 Apr actual (total_costs−fuel_r)÷flights
Non-fuel total R661M direct (ex-fuel) per-flight + overheads flat (Mar–Apr avg)

6d. Three Scenarios (+ Base dual-line)

Scenario Fuel R/L Yield LF Revenue Fuel Non-fuel PBT Margin
Optimistic R23.02 R1,561 80.8% R1,175M R559M R661M −R45M -3.9%
Base case [actuals] R24.02 R1,558 80.7% R1,171M R583M R661M −R74M -6.3%
Pessimistic R25.02 R1,558 80.7% R1,171M R608M R661M −R98M -8.4%
Base [MTD rev/flight upside] R24.02 R1,561 80.8% R1,175M R583M R661M −R70M -5.9%
Floor — April fuel R/L held flat [downside floor] R26.52 R1,558 80.7% R1,171M R644M R661M −R134M -11.5%

Floor basis (2026-05-18, Pieter reconciliation): April actual delivered R26.52/L held flat. Same flights/seats/non-fuel/yield/LF as headline Base-MTD; only fuel R/L differs. Defensible because the skill's own M2 caveat flags monthly supplier contracts lag IATA weekly spot (April delivered R/L rose while IATA fell).


7. Reconciliation Assertions (A4 dual-gate)

Assertion: (revenue − total_costs)pbt_r. Gap = non-operating IS items (finance costs, tax, other income) not captured in total_costs. Warn gate: max(R15M, 1% revenue) — amber NOTE in report. Fail gate: R50M — red WARNING block in report.

Month rev − costs pbt_r Gap other_is Warn gate Status
Mar R97.2M R127.4M R30.2M R30.2M R15.0M WARN
Apr R37.2M R43.7M R6.5M R6.5M R15.0M PASS
May (proj) −R73.7M −R73.7M proj — operating only (rev−costs≡PBT; no non-op IS projected)

7b. IS-Bridge Waterfall (A4 — sums exactly to fuel hike)

Identity: revenue_Δ − fuel_hike + nonfuel_saving + other_IS_movement = −pbt_drop

Revenue increase:     +R193.7M
Fuel hike:            −R288.1M
Non-fuel saving:      +R34.3M
Other IS movement:    −R23.7M  (apr_other_is=R6.5M, mar_other_is=R30.2M)
PBT drop:             −R83.7M
Bridge check:         R288.1M ≈ R288.1M

7c. Year-on-Year + Calendar YTD (closed actuals only)

All figures are closed-month ACTUALS from kpi_data.json (fuel_r, fuel_uplift, pbt_r, revenue_r, pax, flights, avg_fuel_per_liter_uplifted). No estimates, no MTD month. CY (2026) and LY (2025) summed over the SAME closed months for a like-for-like view.

YTD window: Jan–Apr (Jan, Feb, Mar, Apr) — no months excluded

Headline impact (the two side-by-side numbers):

YTD extra fuel spend vs 2025 = Σ fuel_r 2026 − Σ fuel_r 2025
                            = R1,726.5M − R1,339.8M = +R386.7M
YTD PBT delta vs 2025       = Σ pbt_r 2026 − Σ pbt_r 2025
                            = R256.1M − R532.6M = −R276.5M
Fuel hike absorbed (not in PBT) = extra fuel + pbt delta = R110.2M

YTD table (Jan–Apr):

Metric 2026 2025 Δ
Fuel cost R1,726.5M R1,339.8M +28.9%
Fuel volume 107.4M L 101.8M L +5.4%
Blended R/L R16.08 R13.16 +22.2%
Revenue R4,633.4M R4,394.9M +5.4%
PBT R256.1M R532.6M -51.9%

Apr 2026 vs Apr 2025 (actuals month YoY):

Metric Apr 2026 Apr 2025 Δ
Fuel cost R706.5M R347.3M +103.4%
Fuel R/L R26.52 R12.66 +109.5%
Revenue R1,427.2M R1,275.2M +11.9%
PBT R43.7M R255.0M -82.9%

8. Caveats


Generated 2026-05-29 · build_report.py · MC-3483/MC-3517