- Add client_load_mw to CommercialConfig (defaults to ppa_capacity_mw)
- Add hourly_timestamps, hourly_fy, hourly_proj_year, hourly_total_re,
hourly_client_end, hourly_load to ScenarioResult
- Generate 25-year hourly data in runner.py with proper timestamps
- Update API worker to return new hourly fields
- Update WorkbookView HourlyGenerationSheet to show all 5 columns
at each expandable level (Year > Month > Day > Hour)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Show Apr 27 instead of Apr - include FY suffix
- Reverse month order: Apr first, then May... Mar
- Change hourly from horizontal wrap to vertical stack
- Show FY 2026-27 instead of Y1 based on cod_year
- Show month names (Apr, May, etc.) instead of M1, M2
- Show actual dates (Apr 1, etc.) instead of D1, D2
- Pass codYear from scenario inputs to WorkbookView
- Engine: generate all 25 years × 8760 hours of hourly generation
- Schema: add solar_hourly and wind_hourly fields to ScenarioResult
- API: expose hourly data in statements endpoint
- UI: new HourlyGenerationSheet with Year → Month → Day → Hour drill-down
- Add TYPEOF for hourly generation in web API types
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>