Commit graph

54 commits

Author SHA1 Message Date
Manohar Gupta
941843e441 Fix solar wizard: reorder AC/DC fields, add DC:AC ratio, auto-calc DC capacity
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
- Moved AC Capacity above DC Capacity
- Added DC:AC Ratio input field (editable, default 1.4)
- Made DC Capacity auto-calculated (read-only) based on AC * ratio
- Updated buildInputs() to include dc_ac_ratio
- Maintains same data flow as InputsTab.tsx
2026-05-22 13:22:18 +05:30
e286f930f1 fix: add all columns to month/day/hour views for consistent display
Some checks failed
CI / Engine — lint / typecheck / test (push) Has been cancelled
CI / API — lint / typecheck / test (push) Has been cancelled
CI / Web — typecheck / lint / build (push) Has been cancelled
- Hour: raw profile %, DC MW, output MW
- Day: average profile %, DC MW, sum MWh
- Month: average profile %, DC MW, sum MWh

All levels now show: Solar 8760, DC MW, Solar MW, Wind, Total RE, Client End, Load

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 15:59:43 +05:30
fdb387e74c feat: pass solar DC MW and wind capacity from inputs to generation sheet
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 solarDCMW and windMW props
- Pull from inputs_json in scenario page
- DC MW column now shows actual capacity from input

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 15:02:43 +05:30
2705f4bb11 feat: compute Solar 8760 averages at year/month/day levels
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 helper functions for raw profile averages
- Solar 8760 shows average profile % at each level
- Month/day levels use daily/hourly averages

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 14:37:34 +05:30
ff446bc34a feat: add raw profile data for Solar 8760 column
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_wind_profile_25y to loader.py
- Store raw profile (0-1 normalized) in hourly_solar_profile
- Solar 8760 shows raw profile values from CSV file
- Compute averages at day/month/year levels from profile

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 14:36:25 +05:30
dba1e6990f feat: add profile data columns to generation sheet for detailed breakdown
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 hourly_solar_profile and hourly_wind_profile to store per-hour output values
- Add solar_dc_mwp, solar_ac_mw, wind_mw to PipelineResult for capacity display
- Add columns: Solar 8760, DC MW, Solar MW / Wind 8760, MW, Wind MW
- Updated UI to show detailed breakdown at each level (Year/Month/Day/Hour)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 13:31:20 +05:30
cc042e0417 fix: make P&L use hourly-derived totals as source of truth
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
- Compute ppa_units_by_year using same loss_factor as hourly client_end
- Hourly and P&L now match exactly
- Generation sheet shows display values (may differ slightly due to rounding)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 13:18:38 +05:30
34a4cf7abd fix: use rtc_mw as fallback for client_load when ppa_capacity is not set
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
- Fallback order: client_load_mw -> ppa_capacity_mw -> rtc_mw

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 13:12:30 +05:30
48fe2129bf fix: include aux consumption in hourly client_end loss calculation
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
- Also includes aux consumption in loss_factor alongside transmission and DSM

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 13:11:41 +05:30
38797736a4 fix: correct hourly index calculation for 25-year data
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
- Reset index per year caused out-of-bounds error
- Simplified loop using sequential hour_idx 0-8759 per year

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 12:56:31 +05:30
5e49926289 feat: add hourly timeseries infrastructure with Total RE, Client End, Load columns
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 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>
2026-05-16 12:52:44 +05:30
27866e86f0 fix: month order - Apr first at top, then subsequent months
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
2026-05-16 12:07:19 +05:30
96ddb2fa60 feat: fix month labels and reverse order, vertical hourly display
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
- 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
2026-05-16 12:00:59 +05:30
7062688397 feat: use FY labels in generation sheet based on COD date
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
- 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
2026-05-16 11:51:56 +05:30
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
dda868d404 fix: NEXT_PUBLIC_API_URL must be origin only — /api already in app routes
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
2026-05-16 04:24:42 +00:00
38108f62eb fix: traefik.docker.network label must use actual network name not compose alias
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
2026-05-15 05:36:29 +00:00
e0792a9f96 fix: add build.args for NEXT_PUBLIC_API_URL to web service (required for Next.js compile-time inlining)
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
2026-05-15 05:15:26 +00:00
ef3f2ace25 fix: pass NEXT_PUBLIC_API_URL as Docker build ARG so Next.js bakes it into bundle
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
2026-05-15 05:15:25 +00:00
e097b5f17b fix: sqlite DATABASE_URL absolute path (/// → ////) to match container CWD
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
2026-05-15 04:58:29 +00:00
3dc757a250 Fix: use absolute path /app/data/remodel.db
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
2026-05-15 09:55:42 +05:30
b184d74ad4 Update CLAUDE.md with Dokploy deployment docs and fixes
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
2026-05-15 09:45:37 +05:30
79701c5e93 Fix DATABASE_URL using aiosqlite for async support
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
2026-05-15 09:44:08 +05:30
71ba62366a Fix config: remove REDIS_ prefix to match docker-compose env var
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
2026-05-15 09:42:12 +05:30
4e95d802cc Use https for API_URL in production
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
2026-05-15 08:52:51 +05:30
584660f9a7 Add CORS for production domain
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
2026-05-15 08:50:39 +05:30
cdcefa389d Add renewable energy favicon with sun and leaf
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
2026-05-15 08:50:22 +05:30
a85af21fdb Add HTTPS/TLS with letsencrypt for Traefik
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
2026-05-15 08:46:00 +05:30
71d834e992 Fix web: use absolute path /app/node_modules/.bin/next
Some checks failed
CI / Engine — lint / typecheck / test (push) Has been cancelled
CI / API — lint / typecheck / test (push) Has been cancelled
CI / Web — typecheck / lint / build (push) Has been cancelled
2026-05-13 22:24:26 +05:30
e7bb1007e2 Fix web: use pnpm node_modules path for next binary
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
2026-05-13 22:02:09 +05:30
01c1a9682f Fix web: add node_modules/.bin to PATH
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
2026-05-13 22:00:50 +05:30
66b76fc947 Fix web: use next start instead of node server.js
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
2026-05-13 21:55:53 +05:30
fe0689d827 Fix uvicorn PATH in Docker - use poetry venv bin directory
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
2026-05-13 21:47:53 +05:30
11579efb55 Use dokploy-network for Traefik, add traefik.docker.network label
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
2026-05-13 21:45:28 +05:30
4780ea3d08 Use bridge network instead of external traefik_public
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
2026-05-13 21:36:17 +05:30
001906ea3c Create placeholder .env.local in builder stage for Docker
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
2026-05-13 21:31:57 +05:30
614619ca4f Remove unsupported --no-venv-seeding flag for older Poetry
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
2026-05-13 21:25:50 +05:30
e6955a85f9 Fix Dockerfile for Dokploy deployment
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
2026-05-13 21:24:23 +05:30
62144ff8ad Fix: pnpm install --ignore-scripts to skip build errors
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
2026-05-13 21:18:59 +05:30
cc068d02bf Fix: Add Traefik labels for model.manohargupta.com
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
2026-05-13 21:17:29 +05:30
6a19374af2 Fix: Use Node.js 22 in Dockerfile (required by pnpm)
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
2026-05-13 21:15:36 +05:30
f125015bcc Add Docker files for deployment
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
- docker-compose.yml: api, worker, web, redis services
- packages/api/Dockerfile
- packages/web/Dockerfile

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 10:45:35 +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
5317d8d525 [S0-T11/T12/T13] GitHub Actions CI, pre-commit hooks, final README; mark Sprint 0 complete 2026-05-07 02:28:51 +05:30
4fbb723164 [S0-T04/T05/T10/T14] packages/web: Next.js, shadcn, TanStack Query, AG Grid; docker-compose; UI pages; openapi-typescript 2026-05-07 02:27:21 +05:30
89f1e47d54 [S0-T03/T06/T07/T08/T09] Set up packages/api: FastAPI, SQLAlchemy, Arq worker, CRUD endpoints, SSE 2026-05-07 02:22:25 +05:30