Build CEO Dashboard — run 426840

completed · started 2026-06-16T07:00:01.951881+02:00 · finished 2026-06-16T07:01:55.369855+02:00 · 113.415212s
run_id=426840
task_id=ceo-dashboard-build
status=completed
logged_at=2026-06-16T07:01:55.369604+02:00
truncated=false

*FlySafair Daily Brief — 16 Jun 2026*
Data through: 2026-06-15

*May 2026*
  Pax: 764,215 (-11.9% YoY)  |  Rev: R1.19B (+21.7% YoY)
  LF: 82.1% (-9.7pp YoY)  |  Yield: R1,552 (+38.1% YoY)
  Flights: 4,929 (-2.6% YoY)  |  Seats: 931,173 (-1.5% YoY)

*June 2026 MTD (15 days, through 15 Jun)*
  Pax: 349,196 (-14.0% YoY)  |  Rev: R505M (+10.9% YoY)
  LF: 79.0% (-6.9pp YoY)  |  Yield: R1,446 (+28.9% YoY)
  Flights: 2,339 (-7.6% YoY)  |  Seats: 442,071 (-6.5% YoY)

*Attention:*
⚠️ Capacity (+-1.5%) outpacing demand (+-11.9%) — watch for LF erosion
✅ Yield strength +38.1% YoY — pricing power holding
🔴 Load factor down -9.7pp YoY — demand not absorbing capacity growth
✅ Revenue/flight up +24.9% YoY — quality growth
📊 2026-06 bookings: 579,667 pax (69% of PY final) | Rev R844M (87% of PY)
📊 2026-07 forward: 210,700 pax (25% of PY final)
✅ Best yield: CPT-HLA (+51.0% YoY, LF 75%)
🚀 Fastest growing: HRE-JNB (rev +118.8% YoY, 20,559 pax)
⚠️ LF dropping on CPT-DUR: -13.1pp YoY (now 81%, cap -2.6% YoY)
✅ Jet fuel down 5.1% WoW ($139/mt)
⛽ Jet fuel: $139/mt | Crack: $45
💱 ZAR stronger (-2.7% in 30d) — R16.21/$
✅ Brent down 9.3% WoW ($83/bbl)
✅ ACSA market share (2026-05): 65.1% (+1.4pp MoM)
📈 YTD (5m): Pax 4,308,708 (+1.2% vs PY) | Rev R5.89B (+8.5% vs PY)

_Dashboard: http://100.118.207.3:3001/apps/ceo-dashboard_

Telegram sent: True
=== CEO Dashboard Build — 2026-06-16 07:00 ===
Downloading data files...
  SummaryRoute.xlsx (7,241,541 bytes)
  SummaryExcel.xlsx (6,040,503 bytes)
  Data Fuel.xlsx (17,460 bytes)
  ACSA Monthly Data.xlsx (76,083 bytes)
  ACSA Website Data.xlsx (41,915 bytes)
  fleet_asana.json (49,753 bytes)
Downloading cash data...
  cash_data.json (136,789 bytes)
  202606 Booking Curve.csv (booking curve)
Downloading FlightAware capacity reports...
  Capacity_Scheduled_2026-06-01_to_2026-12-31.xlsx (134,089 bytes)
  Reliability_Schedule_MTD_2026-06-01_to_2026-06-06.xlsx (12,750 bytes)
  Capacity_Actuals_2024-01-01_to_2026-06-15.xlsx (587,524 bytes)
  FA data ends 2026-06-15 (1 days old)
Downloading Capacity schedule snapshots...
  Capacity_Scheduled_snapshot_2026-06-09.xlsx (138,843 bytes)
  Capacity_Scheduled_snapshot_2026-06-01.xlsx (155,743 bytes)
  Capacity_Scheduled_snapshot_2026-05-29.xlsx (155,797 bytes)
  Capacity_Scheduled_snapshot_2026-05-21.xlsx (156,384 bytes)
  Capacity_Scheduled_snapshot_2026-05-13.xlsx (156,384 bytes)
  Capacity_Scheduled_snapshot_2026-05-05.xlsx (156,128 bytes)
Staging build script from PKA repo: /home/lucienne/workspace/PKA/Projects/ceo-dashboard/scripts/build_html_dashboard.py
  build_html_dashboard.py (354,308 bytes)
Running build script (Linux branch, BASE auto-detected)...
Loading SummaryRoute.xlsx...
Loading SummaryExcel.xlsx...
Data loaded. Processing...
Loading forward bookings from Neon DB...
  Neon: 661,817 booking snapshot rows loaded (departures 2026-04-01 to 2026-07-31)
  Curve: 77 departure dates with real curves (flat-state filtered)
  Curve shape: 65 DBA points from 76 completed departures
  2026-04: 131 points, latest gap=-4.4pp, 19/26 routes behind curve, PY final LF=90.9%
  2026-05: 131 points, latest gap=-10.0pp, 23/25 routes behind curve, PY final LF=91.8%
  2026-06: 130 points, latest gap=-7.8pp, 19/25 routes behind curve, PY final LF=86.3%
  2026-07: 130 points, latest gap=-3.7pp, 16/25 routes behind curve, PY final LF=91.8%
Loading economic indicators...
  EIA jet fuel: 649 weeks (2014-01-03 to 2026-06-05)
  FX data: 1396 days loaded (Frankfurter)
Fetching Brent crude oil prices...
  Oil data: 3131 days loaded
  Fuel trend: 650 weeks total (591 EIA [71 gap-fill] + 59 IATA from 2023-12-22)
Loading ACSA data...
Loading FlightAware capacity data...
  Actuals cutoff: 2026-06-15 (scheduled MTD cap for 2026-06)
  Schedule reliability: DB unavailable, prorating current month from xlsx
  Schedule reliability: prorated 2026-06 scheduled by 16/30 days
  Schedule reliability: current-month scheduled from Reliability_Schedule_MTD_2026-06-01_to_2026-06-06.xlsx (exact day-capped — proration superseded)
  Trimming 2 sparse months: ['2026-11', '2026-12']
  Pre-computed route tables for 8 months, 4268 changes
  FlightAware: 34 months, 315 routes in latest month
Loading fleet data from Asana...
  Fleet: 56 aircraft loaded from Asana
Processing complete. Building HTML...
Cash data loaded from /home/lucienne/workspace/dashboard-build/Cash/cash_data.json
JS syntax gate: OK
Dashboard written to: /home/lucienne/workspace/dashboard-build/dashboard/Dashboard.html
File size: 3519 KB
Data JSON written to: /home/lucienne/workspace/dashboard-build/dashboard/dashboard_data.json (5015 KB)
Summary MD written to: /home/lucienne/workspace/dashboard-build/dashboard/dashboard_summary.md

  Dashboard.html generated (3,603,276 bytes)
Updated Dashboard.html on Drive (ID: 15EeKvzeI2ZErZ6IFV2jHH7wBvA7cSf29)
Copied to /home/lucienne/workspace/PKA/dashboards/ceo-dashboard.html
Published to cloud: /home/lucienne/gdrive/PKA-Outputs/dashboards

Success: CEO Dashboard built and uploaded