Commit graph

8 commits

Author SHA1 Message Date
0ada193bb0 feat: support %_generation column in solar profile CSV
Some checks are pending
CI / Engine — lint / typecheck / test (push) Waiting to run
CI / API — lint / typecheck / test (push) Waiting to run
CI / Web — typecheck / lint / build (push) Waiting to run
- Add column %_generation (percentage, 0-100%) to solar profile CSV
- Update loader to read %_generation and convert to normalized fraction
- Fallback to old E_Grid_Kwp format for backwards compatibility
2026-05-16 11:44:29 +05:30
59da8280dc fix: return solar_hourly and wind_hourly from run_scenario
Some checks are pending
CI / Engine — lint / typecheck / test (push) Waiting to run
CI / API — lint / typecheck / test (push) Waiting to run
CI / Web — typecheck / lint / build (push) Waiting to run
These fields were computed but not being returned in the ScenarioResult.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 11:36:49 +05:30
70dfe9b3ce feat: use user's hourly solar profile with 25-year leap year expansion
Some checks are pending
CI / Engine — lint / typecheck / test (push) Waiting to run
CI / API — lint / typecheck / test (push) Waiting to run
CI / Web — typecheck / lint / build (push) Waiting to run
- Add load_solar_profile_25y() that expands 8760-hour profile to 25 years
- Handle leap years by inserting Feb 29 hours
- Support both normalized and absolute (kWp) input formats
- Normalize absolute values to [0,1] range before processing

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 11:18:52 +05:30
093e62b011 feat: add 25-year hourly generation data with expandable drill-down
Some checks are pending
CI / Engine — lint / typecheck / test (push) Waiting to run
CI / API — lint / typecheck / test (push) Waiting to run
CI / Web — typecheck / lint / build (push) Waiting to run
- 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>
2026-05-16 10:41:25 +05:30
e6dc39aa33 [S1-T12/T13] P&L revenue breakdown + collapsible rows + UI polish
- Engine: Add ppa_revenue_cr, mcp_revenue_cr, tariff, units to PnLRow
- Engine: Split PPA vs MCP revenue in P&L computation
- Web: Collapsible rows for PPA/MCP Revenue and Opex
- Web: Highlighted rows (Total Revenue, EBITDA, EBIT, PBT, PAT)
- Web: Units above Tariff in breakdown, bg-blue-50 highlight
- Fix sticky column z-index for horizontal scroll
- CLAUDE.md: Add project documentation

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 10:42:36 +05:30
314127effc [S1-T01 through T11] Solar, Wind, BESS generation simulation + CLI
- Pydantic schemas: SolarConfig, WindConfig, BessConfig, GenerationResult
- Catalog: synthetic 8760h profiles for RJ/KA/GJ solar and wind; LRU-cached loader
- generation/solar.py: 25yr hourly simulation (DC losses, inverter, clipping, soiling, degradation)
- generation/wind.py: power-law shear, piecewise power curve, wake/electrical losses, degradation
- generation/bess_state.py: SOH-based capacity degradation with augmentation schedule
- CLI: remodel --input scenario.json --output gen.parquet (Typer upgraded to 0.25.1 for Click 8.3 compat)
- 43 unit tests, 97.4% coverage; mypy strict + ruff clean
- S1-T10 parity gate: placeholder fixture + skipped integration tests (awaiting Nagasamudra data)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 10:04:21 +05:30
8b61c03d3c [S0-T02] Set up packages/engine with Poetry, Ruff, mypy strict, pytest 2026-05-07 02:14:45 +05:30
1d23b579fe [S0-T01] Initialize monorepo with packages/engine, packages/api, packages/web directories 2026-05-07 02:04:47 +05:30