Beta — Data under validation. Values may contain errors.

ED.PROGRAM

ESIOS scheduling programs (PBF/PVP/PHFC/P48) by tech — mix matrix or single series.

Generation

Signature

ED.PROGRAM([tech], [program], [start], [end], [agg], [zone], [headers], [noDate], [tz])

Description

Returns ESIOS scheduling programs for one technology. **Two modes** depending on whether program is supplied:

- **Mix mode** (default — omit program): returns a 4-column matrix [PBF | PVP | PHFC | P48] aligned by Madrid civil hour. One drag reproduces the APPA "redespachos por tecnología" lámina for any tech. Each column is independent — sparse-history programs (PHFC pre-2018-07, hybrid pre-2024-06) come back as 0 in those buckets.

- **Single mode** (program="pbf"|"pvp"|"phfc"|"p48"): returns a single program series, equivalent to =ED.RANGE("program_<program>_<tech>", ...). Use this when you want one program over a long window without the 3 extra columns.

**Tech codes ≠ ED.GEN tech codes.** The 4 program families (PBF/PVP/PHFC/P48) ingest different metric suffixes from gen_*: code 5 maps to ccgt (not combined_cycle), 6 to cogen (not cogeneration), 4 to hidro_total (not hydro), and code 2 = total_wind (onshore + offshore — matches REE/APPA trader semantics) versus code 12 = wind (onshore-only, distinct alias). If you copy codes between ED.GEN and ED.PROGRAM verify the tech is what you expect — see the value table below.

Aggregation is controlled by agg: 0=native, 5min/10min/15min, 1=hourly, 2=daily (default), 3=monthly, 4=quarterly, 5=semiannual, 6=annual, 7=total. Programs are MWh-stored at 15-min cadence, so each bucket is a SUM (not AVG) — the right semantic for scheduled energy.

Pass tz to switch the timezone interpretation: 0/madrid (default, DST-aware), 1/cet (UTC+1 fixed — 8760 hourly buckets/year), or 2/utc. See /docs/concepts for why this matters around the spring/autumn DST transitions.

Parameters

NameTypeDefaultDescription
tech1-20 | string1 (solar_pv)Tech code or alias (see table below). Note codes 4/5/6/12 differ from ED.GEN — read the description above.
program"" | "pbf" | "pvp" | "phfc" | "p48""" (mix)Which program. Empty / "mix" returns a 4-column matrix; one of the 4 names returns a single series. Case-insensitive.
startdateStart. Defaults: omit end for today (Madrid, with a small overnight cutoff), omit start for 30 days before end.
enddateEnd. Omit for today.
agg0-7 | string2 (daily)Aggregation is controlled by agg: 0=native, 5min/10min/15min, 1=hourly, 2=daily (default), 3=monthly, 4=quarterly, 5=semiannual, 6=annual, 7=total.
zone"ES""ES"ES only — ESIOS programs are ES-peninsular. PT not supported.
headers0 | 10Set 1 for header row (Period, PBF, PVP, PHFC, P48 in mix mode).
noDate0 | 10Set 1 to omit the period column from the spill array.
tz0 | 1 | 2"madrid"Timezone interpretation for the hourly bucket.

Valid values for tech

CodeEnglish aliasDescription
1solar_pv, solar, pv, fotovoltaicaSolar photovoltaic. Maps to program_*_solar_pv.
2total_wind, eolica_total, eolicaTotal wind = onshore + offshore. Trader-default. Use code 12 if you need onshore only. Maps to program_*_total_wind.
3nuclearNuclear. Maps to program_*_nuclear.
4hidro_total, hydro, hidro, hidraulicaHydro total (UGH + non-UGH + turbinación bombeo). NB: the metric suffix is hidro_total (NOT hydro like ED.GEN). Maps to program_*_hidro_total.
5ccgt, combined_cycle, gasCombined-cycle gas. NB: the metric suffix is ccgt (NOT combined_cycle like ED.GEN). Maps to program_*_ccgt.
6cogen, cogeneration, cogeneracionCogeneration. NB: the metric suffix is cogen (NOT cogeneration). Maps to program_*_cogen.
7solar_thermal, termosolar, cspConcentrated solar thermal. Maps to program_*_solar_thermal.
8total, all, todoSum across techs (program-side ESIOS aggregate). Maps to program_*_total.
9hidro_ughHidro UGH (Unidad de Gestión Hidráulica) — large reservoirs.
10hidro_no_ughHidro non-UGH — run-of-river and small hydro outside UGH.
11turb_bombeoTurbinación bombeo — pumped-storage in generation mode (positive flow).
12wind, wind_onshore, eolica_terrestreWind ONSHORE only (excludes offshore). Use code 2 (total_wind) if you want onshore + offshore combined. Maps to program_*_wind.
13biomass, biomasaBiomass.
14biogasBiogas.
15other_renewable, otras_renovablesOther renewables (small hydro, geothermal, …).
16oil_coal_deriv, derivados_petroleo_carbonOil + coal derivatives — refinery and coal-derived liquid fuels.
17residual_energy, energia_residualResidual energy from industrial processes.
18household_waste, residuos_domesticosHousehold waste-to-energy.
19misc_waste, residuos_variosMiscellaneous waste streams.
20hybrid, hibridacionHybrid plants (renewable + storage). Cobertura desde 2024-06-25 — buckets anteriores aparecen como 0.

The add-in accepts either the canonical Spanish code or the English alias — both are equivalent.

Valid values for program

CodeDescription
"" | "mix" | "all"Mix mode (default). Returns 4-column matrix [PBF | PVP | PHFC | P48] aligned by hour civil.
"pbf"PBF — Programa Base de Funcionamiento (ex-ante OMIE schedule). Cobertura desde 2014.
"pvp"PVP — Programa Vinculante Provisional (post-MD, antes de RRTT). Cobertura desde 2014.
"phfc"PHFC — Programa Horario Final Continuo (final tras intradiarios). Cobertura desde 2018-07-01.
"p48"P48 — Programa de las 48 horas (final tras RRTT, lo que se ejecuta en tiempo real). Cobertura desde 2014.

Returns

Spill array. Mix mode: up to 5 columns [Period, PBF, PVP, PHFC, P48] (MWh). Single mode: 2 columns [Period, value]. Reserve enough Excel cells for the matrix in mix mode.

Examples

=ED.PROGRAM(1)Solar PV — last 30 days mix daily (4-column matrix)
=ED.PROGRAM(1, , "2026-01-01", "2026-04-30", 3, , 1)Solar PV mix Q1 2026 monthly with headers
=ED.PROGRAM(2, "p48", "2026-04-01", "2026-04-30")Total wind P48 series — April 2026 daily
=ED.PROGRAM("nuclear", "phfc", "2026-04-01", "2026-04-30", 1)Nuclear PHFC hourly April 2026 (PHFC available since 2018-07)
=ED.PROGRAM(20, , "2024-06-25", "2026-04-30", 3, , 1)Hybrid mix monthly since cliff (2024-06-25)
=ED.PROGRAM("ccgt", "pbf", "2026-01-01", "2026-04-30", 7)CCGT PBF total Q1+April 2026 — single value

Notes

  • **Tech codes ≠ ED.GEN tech codes**. By design: program ingests ccgt/cogen/hidro_total/total_wind; gen ingests combined_cycle/cogeneration/hydro/wind. If you copy codes between functions, verify the tech is what you expected (the lookup table above is authoritative).
  • **Wind disambiguation**: code 2 = total_wind (onshore + offshore — matches REE/APPA trader semantics). Code 12 = wind (onshore-only, distinct alias). Pre-2024 the two are nearly identical (offshore was zero); from 2026 onwards the spread will widen as offshore comes online.
  • **Cobertura histórica**: PBF/PVP/P48 desde 2014; PHFC desde **2018-07-01**; hybrid desde **2024-06-25**. En modo mix, las celdas de programas/techs que aún no existían aparecen como 0 en lugar de NULL — diseño deliberado para que el usuario pueda comparar 2014-2026 sin que las filas más viejas se rompan.
  • **Mix mode columnas**: hasta 5 columnas (Period + PBF + PVP + PHFC + P48). Reserva celdas suficientes en Excel — un drag corto recortará la matriz.
  • **Solo zone=ES**: los programas ESIOS son ES-peninsular. PT no está disponible (los programas portugueses los publica REN, no ESIOS).
  • **Modo single reusa /data/range**: equivalente exacto a =ED.RANGE("program_<program>_<tech>", ...). Usa ED.PROGRAM por la resolución amigable de tech codes; usa ED.RANGE si ya tienes el nombre del metric memorizado.

Related functions