Skip to main content

Operations Home

FRD v3 • MSETCL tender compliance active • No synthetic forecasts policy enforced
🗺️ Portfolio Map
System Status
— idle —
Today's Schedule

Plant Registry

Registered generators under AION RE-cast & QCA coordination
FoR Reg.5.8 • CERC F&S 2015 + 2023 Amendment • FRD §3.1
IDNameTechMWStatePooling Station GPSPPASLDCActions

⚡ Forecast

ML Ensemble • Physics-first • P10/P50/P90 • Real NWP data only
FRD §5 Forecasting Engine • §10 Accuracy Roadmap • CERC IEGC Reg.45
📊 96-Block Time Series
P10 · P50 · P90 bands + actuals when available
96-Block Forecast Table
BlockTimeP50 MWP10P90 SourceQuality

Schedule Builder

Pooling-station aggregation for SLDC submission
FoR Reg.5.17 • FRD §9.4 QCA Integration
PS Schedule —
BlockTimePS Sched MWPS AvCap%AvCap

SLDC Submission

96-block XLSX export in MAHASLDC / KPTCL / MPSLDC format
UPERC Reg.5.4 • Section 33(2) EA 2003 • FRD §8.2 output formats

Scheduled exports run automatically at 09:15 / 17:15 / 05:15 IST; files land in /var/spool/sldc/ on the backend. This UI is for on-demand retrieval.

⚡ Meter Data Entry

Key in 96-block SEM actuals per plant · FRD §4.3
Section 33(2) EA 2003 · SEM weekly submission workflow
96-Block Meter Entry
BlockTimeActual MWAvailability %

Actuals (15-min consolidated)

From scada_15min_cagg TimescaleDB continuous aggregate
FRD §4.3 Plant SCADA / Meter Data · Weekly SEM submission
Readings
Block StartAvg MWMax MWAvailability %Samples

📉 Deviation & DSM Charges

Block-by-block deviation settlement with state-specific regulations
MPERC G-44/2018 3rd Amd 2025 · MERC DSM · KERC · FRD §9.2
Block-by-Block Deviation
BlockTimeSched MWActual MWΔ MW % AvCapBand₹ DSM

🎯 Forecast Accuracy

Rolling 7d / 30d / 90d MAPE, nMAPE, RMSE, R², PICP
FRD §6.2 Targets: Solar DA MAPE < 10% • Wind DA MAPE < 8%
Metrics History
DateMAPE %RMSE MWRMSE % Cap SkillPICP %Samples

⚡ Ramp Events

Detected ramps >8% capacity per block, with severity classification
FRD §5.1 Tier 3 ramp detection • IEGC ramping compliance
Events
TimeDirectionΔ MW% CapLead minSeverity

🌤️ NWP Ensemble Status

Live freshness tracking for every NWP source (FRD §4.1, §15.2 fallback)
Primary: Open-Meteo (ECMWF IFS 9km + ICON + GFS/HRRR) • Fallback: ECMWF Open Data
Active Data Sources
SourceStatusLast FetchFreshnessPlants UsingNotes
Open-Meteo (ECMWF IFS + ICON + GFS)Active allFREE tier or €29/mo commercial
NASA POWER (MERRA-2 Kt)Active training onlyFREE, 1-2 day lag
NOAA METAR (aviation obs)Active allFREE, 30-min cadence
ECMWF Open Data (direct)Standby fallbackFREE, used if Open-Meteo stale > 6 hr
MOSDAC INSAT-3DRPending registration 0FREE w/ registration • 4 km India GHI
Solcast (DNV) — premiumOptional 0Paid, recommended for >25 MW plants
Fallback Cascade (FRD §15.2)
  1. Primary: Open-Meteo live (flag: GOOD)
  2. L1: Cached Open-Meteo < 6 hr old (flag: NWP_STALE)
  3. L2: ECMWF Open Data direct (flag: NWP_SOURCE_SWITCH — MOS bias recalibrated)
  4. L3: Climatology from historical SCADA (flag: CLIMATOLOGY_ONLY — red alert fires)

Every forecast row carries exactly one data_quality_flag for DSM-dispute provenance.

🛰️ Solar & Wind Asset Detection

Geodatabase of detected RE assets from satellite + drone imagery
FRD §14 Solar Asset Detection • §17 Wind Turbine Detection
GPU CV pipeline runs on separate OCI A10 node (enable with FEATURE_ASSET_DETECTION=true)

This module runs YOLOv8-seg + SAM2 on Sentinel-2 / Planet / WorldView / drone imagery to detect solar panels and wind turbines. Results land in solar_assets and wind_assets PostGIS tables.

For Phase-1 pilot, detection runs on demand via POST /api/v1/solar-assets/detection-job (admin role). Aggregate capacity feeds the BtM correction layer in the forecast engine (FRD §14.8), improving portfolio MAPE by 1–2% in high-rooftop-density zones.

Solar Assets (by district)
DistrictCountTotal kWp

💰 Data Vendors & Cost Efficiency

Free-first vendor stack with paid upgrade only when DSM savings justify
See docs/VENDORS.md for full analysis and per-plant ROI scenarios
Recommended Stack
LayerVendorCostWhy
NWP primaryOpen-MeteoFREE / €29/mo ECMWF IFS 9 km + ICON + GFS + AIFS in one API; no key; <10ms
NWP backupECMWF Open DataFREE Direct source, independent fallback, CC-BY 4.0 commercial OK
Satellite irradianceMOSDAC INSAT-3DRFREE w/ reg ISRO, 4 km India, 30-min cadence, mandated by FRD §4.2
Historical KtNASA POWERFREE MERRA-2 clearness index for training; 1-2 day lag
Aviation obsNOAA METARFREE 30-min visibility + cloud at 15+ Indian airports
Premium solarSolcast (DNV)Quote 25-50% better than NWP; enable only if DSM > subscription
Premium windMeteomaticsQuote EURO1k 1 km downscaling for complex terrain
Fallback simpleVisual Crossing$35/mo Cheapest metered API; weak on radiation, good for temp/wind
❌ Not usedOpenWeatherMapn/a Low-res GFS derivation; tight rate limits; no cost advantage
Monthly Cost Scenarios

A. Pilot (5 plants, free only): ₹0/month • DA solar MAPE ~12–15% by month 3

B. Prod 50 plants (Open-Meteo commercial): ~₹2,700/month • MAPE 9–11% by month 6

C. Premium 100 plants incl. 20 big solar: ~₹2 lakh/month • DSM savings ~₹8–15 lakh/month

📋 SLA & Fallback Logic

Binding SLA commitments and graceful degradation state machine
FRD §15 SLA, Performance & Fallback Logic
Service Level Agreements
SLACommitmentMeasurement
Platform uptime99.5% monthlyExcl. Sun 02-04 maintenance
DA R0 deliveryBy 09:30 IST (D-1)Per plant, per day
Intraday revision< 5 min latencyAPI server timestamp
SLDC XLSX< 3 min generationFrom R0/R1/R2 trigger
API p95 latency< 800 msMonthly aggregate
NWP freshness< 6 hr stalenessLogged per forecast
SCADA freshness< 30 minFor intraday runs
P1 incidentRespond < 30 min, resolve < 2 hrFrom alert to status-page update
P2 incidentRespond < 4 hr
Accuracy Degradation Triggers
TriggerThresholdAction
Plant 7d MAPE> 15%Alert ops + priority retrain
Portfolio 7d MAPE> 12%Alert SLDC account manager
Ramp miss rate> 40% in 7dSensitivity reduced + SCADA 2.5-min
P90 PICP drift< 80% or > 95% in 30dIsotonic recalibration
New plant bootstrap> 25% MAPE in 30dPhysics params re-ingested

🔌 API Reference

Versioned REST at /api/v1 • JWT Bearer auth • OpenAPI 3.1
FRD §16 API Reference • Auto-generated spec at /api/docs
Quick Links

🔗 Swagger UI — interactive API explorer

🔗 ReDoc — cleaner reference documentation

🔗 openapi.json — raw spec (import to Postman)

Core Endpoints
MethodPathPurpose
POST/auth/loginGet access + refresh tokens
GET/plantsList plants (scoped by role)
POST/plantsRegister new plant
GET/forecast/{plant_id}96-block P10/P50/P90
POST/forecast/runQueue forecast run via Celery
GET/forecast/state/{state_code}Portfolio aggregate
POST/scada/{plant_id}Plant EMS pushes actuals
GET/actuals/{plant_id}Read 15-min consolidated
GET/schedule/pooling-station/{ps_name}PS aggregation
GET/sldc/xlsx/{plant_id}Download SLDC XLSX
GET/accuracy/{plant_id}Rolling MAPE/RMSE/R²/PICP
GET/ramp-alerts/{plant_id}Detected ramp events
GET/solar-assetsGeoJSON of detected assets

📘 FRD Compliance Matrix

Every AION RE-cast FRD v3 clause mapped to implementation
Authoritative document: AION_REcast_FRD_v3.docx — overrides any UI/code conflict
Implementation Status
FRD §RequirementStatusEvidence
§3.1Plant taxonomy (solar/wind/hybrid/BtM)backend/app/db/models.py
§3.2R0/R1/R2 horizonsbeat schedule
§4.1Multi-NWP ensemble (GFS+ECMWF+ICON)ingestion/open_meteo.py
§4.2INSAT-3DR satellite irradiance🔵ingestion/mosdac.py (pending SFTP approval)
§4.3SCADA ingestion (REST + Modbus)api/scada.py + TimescaleDB
§5.13-tier model ensembleforecasting/ensemble.py
§5.2Solar physics (Perez POA + tracking)forecasting/solar_physics.py (pvlib)
§5.3Wind physics (log profile + power curve)forecasting/wind_physics.py
§5.4Intraday satellite nowcast🟡Phase 4 — needs MOSDAC live
§6Training & validation (walk-forward CV)retrain tasks + services/accuracy.py
§7Cloud-native architectureDocker Compose + OKE manifests
§8Output formats (JSON + XLSX + WS)api/ + exports/sldc_xlsx.py
§9.1CERC 2015+2019+2023 Amendmentsservices/dsm.py + dsm_regulations.yml
§9.2DSM penalty bands (all states)MPERC 3rd Amd 2025 replicated
§9.4QCA integrationschedule.py + sldc.py
§10Phased accuracy roadmapFEATURE_* flags in config.py
§11.2JWT + RBAC + TOTP MFAcore/security.py
§11.3Audit log, 12mo hot / 7yr coldAuditLog ORM + OCI lifecycle
§14Solar asset geodatabase🟡Schema ready; CV pipeline needs GPU node
§15SLA + fallback state machineforecasting/fallback.py
§16OpenAPI REST reference/api/docs
§17Wind turbine geodatabase🟡Schema ready; detection needs GPU

Legend: ✅ Fully implemented🟡 Partial / phase-gated🔵 Configured, needs vendor onboarding

🔀 De-pooling

Allocate pool-level DSM back to member generators by capacity share
MPERC F&S Reg.5.17 · MERC DSM Reg.8 · QCA member settlement
Member Allocations
PlantNameCap MWCap % Alloc Δ MWh₹ DSMPPA ₹/kWh

💰 Commercial Settlement

Monthly QCA rollup — scheduled vs actual, DSM payable/receivable, BG, net settlement
Monthly invoice workflow · FRD §9.2 + §9.4
Monthly Statement

📋 Audit Log

Tamper-evident hash-chained log of every mutating action
FRD §11.3 · 12-month hot · 7-year cold archive
Entries
TimeUserRoleIP ModuleActionResourceHash

📂 Smart Import

Drop CSV, XLSX, or JSON — format auto-detected and persisted server-side
Plants · Forecasts · SCADA actuals · Bulk multi-sheet · Solcast JSON · Open-Meteo JSON
📂
Drop file here or click to browse
Max 10 MB · CSV · XLSX · JSON · Detection is automatic
Import Log
No imports yet. Drop a file above to begin.
Supported Formats
FormatDescriptionRequired columns / fields
plants_csv · plants_xlsxPlant registry Plant_ID · Name · MW · State · Lat · Lon
forecast_csv · forecast_xlsx96-block forecast (1 plant) Block · Time · P50_MW (optional: P10, P90, Plant_ID)
bulk_forecast_xlsxMulti-sheet XLSX (1 plant per sheet) Sheet name = Plant_ID. Needs target date override.
scada_csv · scada_xlsx15-min meter actuals Block · Time · Actual_MW (optional: Availability, Plant_ID)
solcast_jsonSolcast forecast API response Required override: Plant_ID + target date
open_meteo_jsonOpen-Meteo API response Stored in NwpCache for forecast runs

⚙️ Configuration

QCA settings, feature flags, your profile
FRD §6 — editable per §11.2 system_admin role
QCA Identity & Defaults
Feature Flags (read-only)
Your Profile

🏦 Bank Guarantee Tracker

Per-plant BG limit, utilisation and expiry monitoring
DSM regulations require continuous BG cover — utilisation = DSM payable last 90 days
BG details
All plants — BG roll-up
PlantBankBG (₹)Utilized (₹)Available (₹)Util %Expiry

📆 Holiday / Maintenance Calendar

Per-plant bed-down windows for forecast & schedule planning
Used by physics models to zero/derate generation, and by SLDC export to flag declared outages
Add entry
Entries
KindStartEndNoteActions

⏰ Export Schedule

Editable Celery Beat schedule — runs that drive SLDC export, intraday rolls, PDF digests, alerts
FRD §40 — applied at next beat restart; UI validates 5-token cron format
Scheduled jobs
NameCronEnabledDescriptionSave

🔁 Backtest

Replay historical forecast vs actuals for any plant + date range (max 90 days)
FRD §6.3 — uses canonical forecasts table joined to scada_15min_cagg
P50 vs Actual
Detail (block-by-block, last 96)
Block StartForecast MWActual MWError MW

Plant Detail

SCADA + forecast + ramp events + calendar
FRD §31 — single-pane per-plant dashboard
Today's Forecast (P50)
Last 24h SCADA
Recent Ramp Events
TimeΔ MW% CapSeverity
Upcoming Calendar
KindStartEndNote
3D Fleet Map
loading…
Loading 3D globe…