{
  "schema_version": 1,
  "generated_at": "2026-10-19T05:26:02Z",
  "data_date": "2026-10-17",
  "run_id": "2026-10-17-adequacy-2-549e7ed7",
  "origin_date": "2026-10-17",
  "units": "GWh per day",
  "disclaimer": "No es una fuente oficial. Cálculo estadístico de suficiencia a partir de datos públicos de CELEC y CENACE; no representa la posición de ninguna institución ni sustituye la programación del operador.",
  "model": {
    "id": "adequacy-v1",
    "label": "Demanda no suprimida (tendencia log-lineal con factores de día de semana y estación) menos hidroeléctrica normalizada por esa tendencia, contra techos térmico e de importación demostrados",
    "version": "2",
    "features_hash": "549e7ed721df17a9",
    "backtest_origins": 100
  },
  "data": {
    "usable_days": 3750,
    "rejected_days": 57,
    "demand_fit_days": 1222,
    "demand_growth_pct_per_year": 6.42,
    "hydro_fit_days": 3750,
    "hydro_anomaly": 0.9421,
    "hydro_anomaly_note": "Hidroeléctrica de los últimos 14 días dividida por su propia climatología del mismo período. 1,00 es una quincena normal; por debajo de 1 el sistema llega seco."
  },
  "assumptions": {
    "thermal_gwh_day": 25.831,
    "import_gwh_day": 10.779,
    "stressed_import_gwh_day": 0.122,
    "other_gwh_day": 1.132,
    "basis": "thermal = 25.831 (largest thermal day in the 1081 usable balance days from 2023-09-21 to 2026-09-20; a demonstrated maximum, not an availability declaration — no source this project reaches publishes planned outages); import = 10.779 (largest import day in the same window (2024-08-15). About 449 MW sustained, consistent with the Colombian interconnection's usual limit); import_stressed = 0.122 (median daily import 2024-10-01 to 2024-11-10, while Ecuador rationed 14 h/day and Colombia was short of water at the same time. Not an outlier: imports ran below 1 GWh/day for 398 consecutive days from 2019-07-06); other = 1.132 (median of generación de otros tipos over the same window. Solar, wind and biomass are not dispatchable, so the median is used rather than the maximum)",
    "import_regime": {
      "state": "cutoff",
      "central_import_gwh_day": 0.172,
      "trailing_gwh_day": 0.172,
      "trailing_thermal_gwh_day": 23.454,
      "window_days": 14,
      "cutoff_below_gwh_day": 1,
      "cutoff_thermal_share": 0.7,
      "note": "Las importaciones desde Colombia promediaron 0.17 GWh/día en los últimos 14 días mientras la térmica generaba 23.5 GWh/día: no llegan aunque se necesitan. El caso central usa lo que está llegando, no el máximo demostrado, y lo mantiene durante el horizonte."
    },
    "editable_at": "data/reference/adequacy_assumptions.csv",
    "rules": {
      "import_cutoff_gwh_day": 1,
      "import_cutoff_thermal_share": 0.7,
      "import_regime_window_days": 14,
      "tight_gwh_day": 5,
      "ceiling_window_days": 1095,
      "editable_at": "data/reference/adequacy_rules.csv"
    }
  },
  "current": {
    "tier": "deficit",
    "worst_tier": "deficit",
    "worst_tier_horizon_days": 7,
    "worst_deficit_gwh_day": 5.99,
    "tier_code": "deficit",
    "tier_label_es": "Déficit",
    "worst_tier_code": "deficit",
    "worst_tier_label_es": "Déficit",
    "narrative_tier_field": "worst_tier"
  },
  "horizons": [
    {
      "horizon_days": 7,
      "target_date": "2026-10-24",
      "demand_gwh_day": 108.239,
      "hydro_gwh_day": 75.114,
      "hydro_p10": 64.725,
      "hydro_p90": 80.185,
      "requirement_gwh_day": 33.125,
      "requirement_p10": 28.395,
      "requirement_p90": 42.924,
      "deficit_gwh_day": 5.99,
      "deficit_p10": 1.26,
      "deficit_p90": 15.789,
      "stressed_deficit_gwh_day": 6.04,
      "margin_pct": -5.53,
      "tier": "deficit",
      "backtest": {
        "demand_mae_gwh_day": 1.776,
        "demand_skill_vs_persistence": -0.0597,
        "hydro_mae_gwh_day": 3.786,
        "hydro_skill_vs_persistence": 0.1113,
        "hydro_coverage_p10_p90": 0.76,
        "requirement_mae_gwh_day": 3.057,
        "requirement_skill_vs_persistence": 0.1442,
        "requirement_coverage_p10_p90": 0.8,
        "n": 87
      },
      "tier_code": "deficit",
      "tier_label_es": "Déficit"
    },
    {
      "horizon_days": 14,
      "target_date": "2026-10-31",
      "demand_gwh_day": 107.722,
      "hydro_gwh_day": 74.712,
      "hydro_p10": 64.493,
      "hydro_p90": 81.491,
      "requirement_gwh_day": 33.01,
      "requirement_p10": 26.437,
      "requirement_p90": 42.943,
      "deficit_gwh_day": 5.874,
      "deficit_p10": -0.698,
      "deficit_p90": 15.808,
      "stressed_deficit_gwh_day": 5.925,
      "margin_pct": -5.45,
      "tier": "deficit",
      "backtest": {
        "demand_mae_gwh_day": 1.81,
        "demand_skill_vs_persistence": -0.0394,
        "hydro_mae_gwh_day": 3.857,
        "hydro_skill_vs_persistence": 0.1058,
        "hydro_coverage_p10_p90": 0.7917,
        "requirement_mae_gwh_day": 3.355,
        "requirement_skill_vs_persistence": 0.1092,
        "requirement_coverage_p10_p90": 0.8194,
        "n": 84
      },
      "tier_code": "deficit",
      "tier_label_es": "Déficit"
    },
    {
      "horizon_days": 30,
      "target_date": "2026-11-16",
      "demand_gwh_day": 107.166,
      "hydro_gwh_day": 75.872,
      "hydro_p10": 59.018,
      "hydro_p90": 86.323,
      "requirement_gwh_day": 31.294,
      "requirement_p10": 22.85,
      "requirement_p90": 42.865,
      "deficit_gwh_day": 4.159,
      "deficit_p10": -4.285,
      "deficit_p90": 15.73,
      "stressed_deficit_gwh_day": 4.209,
      "margin_pct": -3.88,
      "tier": "ajustado",
      "backtest": {
        "demand_mae_gwh_day": 2.047,
        "demand_skill_vs_persistence": -0.0918,
        "hydro_mae_gwh_day": 4.595,
        "hydro_skill_vs_persistence": 0.035,
        "hydro_coverage_p10_p90": 0.7538,
        "requirement_mae_gwh_day": 3.739,
        "requirement_skill_vs_persistence": 0.0907,
        "requirement_coverage_p10_p90": 0.7846,
        "n": 77
      },
      "tier_code": "tight",
      "tier_label_es": "Ajustado"
    },
    {
      "horizon_days": 60,
      "target_date": "2026-12-16",
      "demand_gwh_day": 108.745,
      "hydro_gwh_day": 78.261,
      "hydro_p10": 68.414,
      "hydro_p90": 90.562,
      "requirement_gwh_day": 30.485,
      "requirement_p10": 19.679,
      "requirement_p90": 39.567,
      "deficit_gwh_day": 3.349,
      "deficit_p10": -7.457,
      "deficit_p90": 12.432,
      "stressed_deficit_gwh_day": 3.4,
      "margin_pct": -3.08,
      "tier": "ajustado",
      "backtest": {
        "demand_mae_gwh_day": 2.098,
        "demand_skill_vs_persistence": 0.0431,
        "hydro_mae_gwh_day": 5.427,
        "hydro_skill_vs_persistence": 0.0587,
        "hydro_coverage_p10_p90": 0.7636,
        "requirement_mae_gwh_day": 4.622,
        "requirement_skill_vs_persistence": 0.0842,
        "requirement_coverage_p10_p90": 0.7636,
        "n": 67
      },
      "tier_code": "tight",
      "tier_label_es": "Ajustado"
    },
    {
      "horizon_days": 90,
      "target_date": "2027-01-15",
      "demand_gwh_day": 109.316,
      "hydro_gwh_day": 80.876,
      "hydro_p10": 70.701,
      "hydro_p90": 93.565,
      "requirement_gwh_day": 28.44,
      "requirement_p10": 17.147,
      "requirement_p90": 35.951,
      "deficit_gwh_day": 1.305,
      "deficit_p10": -9.988,
      "deficit_p90": 8.815,
      "stressed_deficit_gwh_day": 1.355,
      "margin_pct": -1.19,
      "tier": "ajustado",
      "backtest": {
        "demand_mae_gwh_day": 2.294,
        "demand_skill_vs_persistence": 0.0192,
        "hydro_mae_gwh_day": 5.747,
        "hydro_skill_vs_persistence": 0.0968,
        "hydro_coverage_p10_p90": 0.6889,
        "requirement_mae_gwh_day": 4.859,
        "requirement_skill_vs_persistence": 0.1019,
        "requirement_coverage_p10_p90": 0.6889,
        "n": 57
      },
      "tier_code": "tight",
      "tier_label_es": "Ajustado"
    }
  ],
  "band_method": {
    "method": "residual quantiles from every earlier origin, stretched per horizon by the smallest factor at which the bands already issued would have covered the nominal share",
    "quantiles": [
      0.1,
      0.9
    ],
    "nominal_coverage": 0.8,
    "stretch_by_horizon": [
      {
        "horizon_days": 7,
        "stretch": 1.5
      },
      {
        "horizon_days": 14,
        "stretch": 1.5
      },
      {
        "horizon_days": 30,
        "stretch": 1.6
      },
      {
        "horizon_days": 60,
        "stretch": 1.35
      },
      {
        "horizon_days": 90,
        "stretch": 1.35
      }
    ]
  },
  "tiers": {
    "definition": {
      "holgado": "el caso p90 sigue cubierto",
      "vigilancia": "el p90 queda corto, el caso central no",
      "ajustado": "el caso central queda corto en menos de 5 GWh/día",
      "deficit": "el caso central queda corto en 5 GWh/día o más"
    },
    "tight_gwh_day": 5,
    "codes": {
      "holgado": {
        "code": "comfortable",
        "label_es": "Holgado"
      },
      "vigilancia": {
        "code": "watch",
        "label_es": "Vigilancia"
      },
      "ajustado": {
        "code": "tight",
        "label_es": "Ajustado"
      },
      "deficit": {
        "code": "deficit",
        "label_es": "Déficit"
      }
    }
  },
  "tier_history": {
    "horizon_days": 30,
    "origins": 100,
    "origins_followed_by_rationing": 10,
    "origins_flagged": 4,
    "flagged_and_followed": 4,
    "share_of_flagged_that_preceded_cuts": 1,
    "share_of_cuts_that_were_flagged": 0.4,
    "note": "Tres episodios no son una muestra con la que ajustar un umbral, y ningún umbral de aquí se ajustó a ellos."
  },
  "crisis_check": {
    "note": "Un déficit es un contrafactual y no se puede medir. Durante un racionamiento sí deja una sombra observable: la diferencia entre la demanda que el modelo dice que hubo y la que registraron los medidores.",
    "episodes": [
      {
        "start": "2023-10-27",
        "end": "2023-12-17",
        "days": 52,
        "modelled_demand_gwh_day": 87.95,
        "measured_load_gwh_day": 85.31,
        "measured_suppression_gwh_day": 2.64,
        "measured_hydro_gwh_day": 54,
        "measured_import_gwh_day": 6.654,
        "implied_deficit_gwh_day": 0.34,
        "deficit_at_demonstrated_imports_gwh_day": -3.79
      },
      {
        "start": "2024-04-15",
        "end": "2024-04-30",
        "days": 16,
        "modelled_demand_gwh_day": 97.96,
        "measured_load_gwh_day": 83.96,
        "measured_suppression_gwh_day": 14,
        "measured_hydro_gwh_day": 63.3,
        "measured_import_gwh_day": 0.401,
        "implied_deficit_gwh_day": 7.29,
        "deficit_at_demonstrated_imports_gwh_day": -3.09
      },
      {
        "start": "2024-09-23",
        "end": "2024-12-19",
        "days": 88,
        "modelled_demand_gwh_day": 88.7,
        "measured_load_gwh_day": 68.16,
        "measured_suppression_gwh_day": 20.53,
        "measured_hydro_gwh_day": 40.39,
        "measured_import_gwh_day": 4.15,
        "implied_deficit_gwh_day": 17.19,
        "deficit_at_demonstrated_imports_gwh_day": 10.56
      },
      {
        "start": "2026-09-22",
        "end": "2026-10-17",
        "days": 26,
        "modelled_demand_gwh_day": 109.65,
        "measured_load_gwh_day": 102.22,
        "measured_suppression_gwh_day": 7.43,
        "measured_hydro_gwh_day": 77.77,
        "measured_import_gwh_day": 0.151,
        "implied_deficit_gwh_day": 4.77,
        "deficit_at_demonstrated_imports_gwh_day": -5.86
      }
    ]
  },
  "import_sensitivity": {
    "note": "El déficit y el nivel de riesgo bajo cada supuesto de importación desde Colombia: el máximo demostrado, el valor de estrés de 2024 y el régimen actual (lo que efectivamente llegó en la ventana del régimen). El caso central publicado usa uno de ellos; esta tabla muestra cuánto depende el nivel de ese supuesto.",
    "central_case": "current_regime",
    "cases": [
      {
        "case": "demonstrated",
        "import_gwh_day": 10.779,
        "worst_tier": "vigilancia",
        "worst_tier_horizon_days": 7,
        "horizons": [
          {
            "horizon_days": 7,
            "deficit_gwh_day": -4.617,
            "deficit_p90": 5.182,
            "tier": "vigilancia"
          },
          {
            "horizon_days": 14,
            "deficit_gwh_day": -4.732,
            "deficit_p90": 5.201,
            "tier": "vigilancia"
          },
          {
            "horizon_days": 30,
            "deficit_gwh_day": -6.448,
            "deficit_p90": 5.123,
            "tier": "vigilancia"
          },
          {
            "horizon_days": 60,
            "deficit_gwh_day": -7.257,
            "deficit_p90": 1.825,
            "tier": "vigilancia"
          },
          {
            "horizon_days": 90,
            "deficit_gwh_day": -9.302,
            "deficit_p90": -1.791,
            "tier": "holgado"
          }
        ]
      },
      {
        "case": "stressed",
        "import_gwh_day": 0.122,
        "worst_tier": "deficit",
        "worst_tier_horizon_days": 7,
        "horizons": [
          {
            "horizon_days": 7,
            "deficit_gwh_day": 6.04,
            "deficit_p90": 15.839,
            "tier": "deficit"
          },
          {
            "horizon_days": 14,
            "deficit_gwh_day": 5.925,
            "deficit_p90": 15.858,
            "tier": "deficit"
          },
          {
            "horizon_days": 30,
            "deficit_gwh_day": 4.209,
            "deficit_p90": 15.78,
            "tier": "ajustado"
          },
          {
            "horizon_days": 60,
            "deficit_gwh_day": 3.4,
            "deficit_p90": 12.482,
            "tier": "ajustado"
          },
          {
            "horizon_days": 90,
            "deficit_gwh_day": 1.355,
            "deficit_p90": 8.866,
            "tier": "ajustado"
          }
        ]
      },
      {
        "case": "current_regime",
        "import_gwh_day": 0.172,
        "worst_tier": "deficit",
        "worst_tier_horizon_days": 7,
        "horizons": [
          {
            "horizon_days": 7,
            "deficit_gwh_day": 5.99,
            "deficit_p90": 15.789,
            "tier": "deficit"
          },
          {
            "horizon_days": 14,
            "deficit_gwh_day": 5.874,
            "deficit_p90": 15.808,
            "tier": "deficit"
          },
          {
            "horizon_days": 30,
            "deficit_gwh_day": 4.159,
            "deficit_p90": 15.73,
            "tier": "ajustado"
          },
          {
            "horizon_days": 60,
            "deficit_gwh_day": 3.349,
            "deficit_p90": 12.432,
            "tier": "ajustado"
          },
          {
            "horizon_days": 90,
            "deficit_gwh_day": 1.305,
            "deficit_p90": 8.815,
            "tier": "ajustado"
          }
        ]
      }
    ]
  },
  "plant_outage": {
    "note": "El déficit y el nivel de riesgo si Coca Codo Sinclair saliera de servicio durante todo el horizonte. No es un pronóstico: es cuánto del margen depende de una sola central. Se resta su participación reciente en la generación hidroeléctrica nacional; importaciones y térmica quedan como en el caso central.",
    "site": "coca_codo_sinclair",
    "available": true,
    "share_of_hydro": 0.2444,
    "plant_gwh_day": 19.068,
    "share_days": 28,
    "share_from": "2026-09-20",
    "share_to": "2026-10-17",
    "horizons": [
      {
        "horizon_days": 7,
        "lost_gwh_day": 18.356,
        "hydro_gwh_day": 56.758,
        "deficit_gwh_day": 24.346,
        "deficit_p90": 34.145,
        "tier": "deficit"
      },
      {
        "horizon_days": 14,
        "lost_gwh_day": 18.258,
        "hydro_gwh_day": 56.455,
        "deficit_gwh_day": 24.132,
        "deficit_p90": 34.066,
        "tier": "deficit"
      },
      {
        "horizon_days": 30,
        "lost_gwh_day": 18.541,
        "hydro_gwh_day": 57.331,
        "deficit_gwh_day": 22.7,
        "deficit_p90": 34.271,
        "tier": "deficit"
      },
      {
        "horizon_days": 60,
        "lost_gwh_day": 19.125,
        "hydro_gwh_day": 59.136,
        "deficit_gwh_day": 22.474,
        "deficit_p90": 31.556,
        "tier": "deficit"
      },
      {
        "horizon_days": 90,
        "lost_gwh_day": 19.764,
        "hydro_gwh_day": 61.112,
        "deficit_gwh_day": 21.069,
        "deficit_p90": 28.579,
        "tier": "deficit"
      }
    ]
  },
  "scorecard": {
    "generated_at": "2026-10-19T05:26:03Z",
    "observed_through": "2026-10-17",
    "target": "net requirement (demand − hydro), mean over the horizon window, GWh/day",
    "units": "GWh/day",
    "runs_considered": 29,
    "runs_superseded": 1,
    "rows_scored": 0,
    "rows_pending": 108,
    "rows_excluded": 37,
    "method": "Every published run whose horizon has passed, scored under the model and version that made it; the last run generated for each origin and version only. Pending rows have not reached their target date yet; excluded rows fall on a missing or rationed day.",
    "by_horizon": [],
    "recent": []
  },
  "license": {
    "code": "MIT",
    "code_url": "https://github.com/rengarcia/hydro-look/blob/main/LICENSE",
    "data": "Copies of public data. Each upstream source keeps its own terms, listed in `attribution`; credit them, and this project, when you republish.",
    "data_es": "Copias de datos públicos. Cada fuente conserva sus propios términos, listados en `attribution`; cítelas, y a este proyecto, al republicar."
  },
  "attribution": [
    {
      "id": "celec",
      "name": "CELEC EP",
      "provides": "reservoir levels, inflows, declared bands and per-plant energy",
      "url": "https://www.celec.gob.ec/",
      "terms": "public web services of a state company; no licence is stated",
      "terms_es": "servicios web públicos de una empresa del Estado; no declaran licencia"
    },
    {
      "id": "cenace",
      "name": "CENACE",
      "provides": "the national energy balance and live operating data",
      "url": "https://www.cenace.gob.ec/",
      "terms": "public web services of the system operator; no licence is stated",
      "terms_es": "servicios web públicos del operador del sistema; no declaran licencia"
    },
    {
      "id": "xm",
      "name": "XM S.A. E.S.P.",
      "provides": "Colombian storage and cross-border exchanges",
      "url": "https://www.xm.com.co/",
      "terms": "public data portal of the Colombian market operator",
      "terms_es": "portal de datos públicos del operador del mercado colombiano"
    },
    {
      "id": "open_meteo",
      "name": "Open-Meteo (ERA5 and forecast models)",
      "provides": "precipitation and temperature at the basin centroids",
      "url": "https://open-meteo.com/",
      "terms": "CC BY 4.0 (https://open-meteo.com/en/terms); the free API is for non-commercial use",
      "terms_es": "CC BY 4.0 (https://open-meteo.com/en/terms); la API gratuita es para uso no comercial"
    },
    {
      "id": "geoglows",
      "name": "GEOGLOWS Hydrologic Model v2 (ECMWF, BYU; shown in Ecuador by the INAMHI–GEOGLOWS portal)",
      "provides": "the daily simulation the return periods in `geoglows.inamhi` are fitted on, and the daily river forecast that is one member of the inflow forecast at Agoyán, Manduriacu and Minas San Francisco",
      "url": "https://inamhi.geoglows.org/",
      "terms": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/; https://geoglows-v2.s3-us-west-2.amazonaws.com/licenses.md). Changed here: the forecast's high-resolution member is averaged to daily means and corrected against CELEC's measured inflow, and the simulation's annual maxima from 1980 are refitted to a Gumbel distribution",
      "terms_es": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/; https://geoglows-v2.s3-us-west-2.amazonaws.com/licenses.md). Modificado aquí: el miembro de alta resolución del pronóstico se promedia por día y se corrige con el caudal medido por CELEC, y los máximos anuales de la simulación desde 1980 se ajustan a una distribución de Gumbel"
    },
    {
      "id": "geoglows_return_periods",
      "name": "GEOGLOWS v2 retrospective return periods (Riley Chad Hales; revision 4 of 2026-06-10)",
      "provides": "the store's own return-period fits, copied unchanged into `geoglows.daily` and `geoglows.hourly`",
      "url": "https://geoglows-v2.s3-us-west-2.amazonaws.com/retrospective/return-periods.zarr/.zattrs",
      "terms": "CC BY-NC-SA 4.0 (https://creativecommons.org/licenses/by-nc-sa/4.0/), the licence of this store alone: credit it, no commercial use, share derivatives alike",
      "terms_es": "CC BY-NC-SA 4.0 (https://creativecommons.org/licenses/by-nc-sa/4.0/), la licencia de este almacén solamente: citarlo, sin uso comercial, compartir igual"
    },
    {
      "id": "ecmwf",
      "name": "European Centre for Medium-Range Weather Forecasts (ECMWF)",
      "provides": "the IFS runoff forecasts and ERA5 runoff that drive GEOGLOWS' forecast and simulation",
      "url": "https://www.ecmwf.int/",
      "terms": "Copyright \"© 2023 European Centre for Medium-Range Weather Forecasts (ECMWF)\". Source www.ecmwf.int. Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). ECMWF does not accept any liability whatsoever for any error or omission in the data, their availability, or for any loss or damage arising from their use",
      "terms_es": "Copyright \"© 2023 European Centre for Medium-Range Weather Forecasts (ECMWF)\". Fuente: www.ecmwf.int. Licencia: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). El ECMWF no acepta responsabilidad alguna por errores u omisiones en los datos, su disponibilidad, ni por pérdidas o daños derivados de su uso"
    },
    {
      "id": "noaa",
      "name": "NOAA PSL / CPC",
      "provides": "the Oceanic Niño Index",
      "url": "https://psl.noaa.gov/data/correlation/oni.data",
      "terms": "US government work, public domain",
      "terms_es": "obra del Gobierno de EE. UU., dominio público"
    }
  ],
  "see_also": {
    "report": "https://github.com/rengarcia/hydro-look/blob/main/data/reports/adequacy.md",
    "forecast": "https://hydro-look.vercel.app/api/forecast.json",
    "latest": "https://hydro-look.vercel.app/api/latest.json",
    "status": "https://hydro-look.vercel.app/api/status.json",
    "narrative": "https://hydro-look.vercel.app/api/narrative.json",
    "schema": "https://hydro-look.vercel.app/api/schema/adequacy.schema.json",
    "documentation": "https://hydro-look.vercel.app/datos/"
  }
}
