{
  "manifestVersion": 1,
  "dataset": {
    "id": "transelectrica-history",
    "name": "Romanian electricity production and consumption history (Transelectrica)",
    "description": "The measured history of Romania's national power system, out of the workbooks Transelectrica publishes on its own website: national production from 2015-01-01 to 2024-12-31 and national consumption from 2015-01-01 to 2025-12-31, both at quarter-hour resolution since February 2021 and hourly before it, in gross and net values. Beside them sits the archived day-ahead production forecast for 2010-09-01 to 2019-12-31, kept in a table of its own because a forecast is not a measurement. The files are landed as real tables with their own columns and types rather than as links to themselves; the annual network performance reports, being Word documents, remain a catalogue that states why they could not be turned into tables.",
    "descriptions": {
      "ro": "Istoricul măsurat al Sistemului Energetic Național al României, extras din fișierele de calcul pe care Transelectrica le publică pe propriul site: producția națională între 01.01.2015 și 31.12.2024 și consumul național între 01.01.2015 și 31.12.2025, ambele pe intervale de un sfert de oră începând din februarie 2021 și pe ore înainte de această dată, în valori brute și nete. Alături stă prognoza de producție cu o zi înainte, arhivată, pentru 01.09.2010 - 31.12.2019, păstrată într-un tabel separat pentru că o prognoză nu este o măsurătoare. Fișierele sunt încărcate ca tabele reale, cu coloane proprii și tipuri proprii, nu ca linkuri către ele; rapoartele anuale de indicatori de performanță, fiind documente Word, rămân un catalog cu motivul pentru care nu au putut fi transformate în tabele.",
      "en": "The measured history of Romania's national power system, out of the workbooks Transelectrica publishes on its own website: national production from 2015-01-01 to 2024-12-31 and national consumption from 2015-01-01 to 2025-12-31, both at quarter-hour resolution since February 2021 and hourly before it, in gross and net values. Beside them sits the archived day-ahead production forecast for 2010-09-01 to 2019-12-31, kept in a table of its own because a forecast is not a measurement. The files are landed as real tables with their own columns and types rather than as links to themselves; the annual network performance reports, being Word documents, remain a catalogue that states why they could not be turned into tables."
    },
    "names": {
      "ro": "Istoricul producției și consumului de energie electrică (Transelectrica)",
      "en": "Romanian electricity production and consumption history (Transelectrica)"
    },
    "sourceUrl": "https://www.transelectrica.ro/ro/web/tel/productie",
    "license": {
      "id": "LicenseRef-Transelectrica-Public-Data",
      "name": "Transelectrica public operational data (no explicit re-use licence)",
      "url": "https://www.transelectrica.ro/",
      "attribution": "Transelectrica",
      "notes": "No re-use licence is published by Transelectrica; only a bare copyright notice (\"Copyright © Transelectrica\") exists in the site footer, and these files are published openly on its public website without authentication and without any stated restriction on access. There is no licence page, no terms-of-use page and no open-data statement on the site; the GDPR and cookie policies concern personal data and say nothing about this data. So the position is: publicly published operational data, no re-use licence stated by the publisher, only a bare copyright notice. This dataset is a derived work — the numeric measurements, restructured, documented and re-typed, with no page, image or other creative material copied — and it is republished with attribution to Transelectrica. Anyone redistributing it commercially, or relying on it where the terms matter, should seek permission from Transelectrica first. It is also operational reporting, not a settlement record: the values are the publisher's own measurements and forecasts, they are not reconciled afterwards, and they must not be used where money or safety depends on the number."
    },
    "cadence": "monthly",
    "tags": [
      "energy",
      "electricity",
      "grid",
      "romania",
      "transelectrica",
      "consumption",
      "production",
      "forecast",
      "time-series",
      "history"
    ],
    "sources": []
  },
  "ingest": {
    "id": "01M1NQPZZZG54BBX89G44D1W2W",
    "startedAt": "2026-09-04T08:14:10.943Z",
    "snapshotDate": "2026-09-04",
    "catalogSnapshotId": 7,
    "params": {
      "series": "all",
      "years": "all"
    },
    "outOfBand": true
  },
  "baseUrl": "https://data-directory.fsn1.your-objectstorage.com/public/transelectrica-history",
  "catalog": {
    "url": "https://data-directory.fsn1.your-objectstorage.com/catalog/transelectrica-history/v/01M1NQPZZZG54BBX89G44D1W2W/catalog.ducklake",
    "latestUrl": "https://data-directory.fsn1.your-objectstorage.com/catalog/transelectrica-history/catalog.ducklake",
    "sha256": "010e7e90d3df700e77c26d213a67bf98404577c27f7d2022e0149fa09eb52580",
    "duckdbVersion": "v1.5.5",
    "attachExample": "ATTACH 'ducklake:https://data-directory.fsn1.your-objectstorage.com/catalog/transelectrica-history/catalog.ducklake' AS lake (READ_ONLY); SELECT * FROM lake.main.production_intervals LIMIT 5;"
  },
  "queryHints": {
    "examples": [
      {
        "title": "The national load curve for one day",
        "sql": "SELECT interval_start_local, interval_minutes, power_mw\nFROM consumption_intervals\nWHERE day = DATE '2024-01-15' AND measure = 'gross'\nORDER BY interval",
        "description": "day comes first because it is the leading sort column, so this reads a handful of row groups out of half a million rows. interval_minutes tells you whether the day is hourly or quarter-hourly."
      },
      {
        "title": "Monthly average production and consumption, gross",
        "sql": "SELECT date_trunc('month', p.day) AS month,\n       avg(p.power_mw) AS avg_production_mw,\n       avg(c.power_mw) AS avg_consumption_mw\nFROM production_intervals p\nJOIN consumption_intervals c\n  ON c.day = p.day AND c.interval = p.interval AND c.measure = p.measure\nWHERE p.measure = 'gross' AND p.day >= DATE '2021-02-01'\nGROUP BY 1\nORDER BY 1",
        "description": "The two measured tables share their sort order on purpose, so this join needs no re-sort on either side."
      },
      {
        "title": "Where the source changed resolution",
        "sql": "SELECT interval_minutes, min(day) AS first_day, max(day) AS last_day, count(*) AS rows\nFROM production_intervals\nGROUP BY 1\nORDER BY 1",
        "description": "The workbook is hourly until 2021-01-31 and quarter-hourly afterwards. This is the query that shows it, and the reason interval_minutes exists."
      },
      {
        "title": "How good was the day-ahead forecast?",
        "sql": "SELECT f.day,\n       avg(f.power_mw) AS forecast_mw,\n       avg(m.power_mw) AS measured_mw,\n       avg(f.power_mw) - avg(m.power_mw) AS bias_mw\nFROM production_forecast_hourly f\nJOIN production_intervals m\n  ON m.day = f.day AND m.interval = f.hour AND m.measure = f.measure\nWHERE f.measure = 'gross' AND f.day BETWEEN DATE '2015-01-01' AND DATE '2019-12-31'\n  AND m.interval_minutes = 60\nGROUP BY 1\nORDER BY abs(avg(f.power_mw) - avg(m.power_mw)) DESC\nLIMIT 20",
        "description": "The forecast is hourly and the measurements are quarter-hourly from 2021, so the overlap to score against is 2015-2019, where both are hourly."
      },
      {
        "title": "What the source publishes that is not a table",
        "sql": "SELECT year, file_name, file_format, file_bytes, coalesce(source_url, archive_url) AS url\nFROM performance_reports\nORDER BY year",
        "description": "The catalogue is a companion to the data, never a substitute: every row says why nothing was materialised and where the document is."
      }
    ]
  },
  "tables": [
    {
      "name": "production_intervals",
      "description": "MEASURED electricity production for the whole Romanian national grid, one row per day, per interval, per side of the meter, from the \"weekly production\" workbook Transelectrica publishes, covering 2015-01-01 to 2024-12-31. **The series is hourly (interval_minutes = 60, 24 intervals a day) through 2021-01-31 and quarter-hourly (interval_minutes = 15, 96 intervals) from 2021-02-01 onward — interval_minutes records which applies to each row, so read it rather than assuming either resolution.** These are measurements, not forecasts — the forecast lives in production_forecast_hourly and must not be mixed in. Gross and net are both present; filter on measure or every day is counted twice.",
      "descriptions": {
        "ro": "Producția de energie electrică MĂSURATĂ pentru întreaga rețea națională a României, câte un rând pe zi, pe interval și pe parte de măsurare, din fișierul „weekly production” publicat de Transelectrica, acoperind 01.01.2015 - 31.12.2024. **Seria este orară (interval_minutes = 60, 24 de intervale pe zi) până la 31.01.2021 inclusiv și la sfert de oră (interval_minutes = 15, 96 de intervale) de la 01.02.2021 încolo — interval_minutes consemnează care dintre cele două se aplică fiecărui rând, deci citiți-o în loc să presupuneți o rezoluție anume.** Acestea sunt măsurători, nu prognoze — prognoza se află în production_forecast_hourly și nu trebuie amestecată aici. Sunt prezente și valorile brute, și cele nete: filtrați pe measure, altfel fiecare zi este numărată de două ori.",
        "en": "MEASURED electricity production for the whole Romanian national grid, one row per day, per interval, per side of the meter, from the \"weekly production\" workbook Transelectrica publishes, covering 2015-01-01 to 2024-12-31. **The series is hourly (interval_minutes = 60, 24 intervals a day) through 2021-01-31 and quarter-hourly (interval_minutes = 15, 96 intervals) from 2021-02-01 onward — interval_minutes records which applies to each row, so read it rather than assuming either resolution.** These are measurements, not forecasts — the forecast lives in production_forecast_hourly and must not be mixed in. Gross and net are both present; filter on measure or every day is counted twice."
      },
      "rowCount": 381216,
      "lastRunRows": 381216,
      "totalBytes": 2264528,
      "sortBy": [
        "day",
        "measure",
        "interval"
      ],
      "searchColumns": [],
      "primaryKey": [
        "day",
        "measure",
        "interval"
      ],
      "writeMode": "snapshot_history",
      "storage": "lake",
      "columns": [
        {
          "name": "day",
          "type": "DATE",
          "nullable": false,
          "description": "The delivery day these measurements belong to — the Europe/Bucharest calendar day, read from the workbook's own \"Data\" column, an Excel date serial in the file, decoded to a real date here. This is the identity of the day, not the day the sheet was written; that is update_day.",
          "descriptions": {
            "ro": "Ziua de livrare la care se referă măsurătorile — ziua calendaristică Europe/Bucharest — citită din coloana „Data” a fișierului sursă, un număr serial Excel în fișier, decodificat aici într-o dată reală. Aceasta este identitatea zilei, nu ziua în care a fost scrisă foaia de calcul; aceea este update_day.",
            "en": "The delivery day these measurements belong to — the Europe/Bucharest calendar day, read from the workbook's own \"Data\" column, an Excel date serial in the file, decoded to a real date here. This is the identity of the day, not the day the sheet was written; that is update_day."
          },
          "min": "2015-01-01",
          "max": "2024-12-31",
          "distinctApprox": 4093
        },
        {
          "name": "measure",
          "type": "VARCHAR",
          "nullable": false,
          "description": "\"gross\" or \"net\": which side of the power stations' own consumption the figure is measured on. Gross is power at the generator terminals; net is what is left after station services, and runs about 6-8% lower. The workbook publishes both as two sheets and both are landed here, so a query that does not filter on this column counts every quarter-hour twice.",
          "descriptions": {
            "ro": "„gross” (brut) sau „net”: partea de măsurare față de consumul propriu al centralelor. Valoarea brută este puterea la bornele generatoarelor, cea netă este ce rămâne după serviciile interne ale centralei și este cu circa 6-8% mai mică. Fișierul publică ambele, în două foi separate, iar aici sunt încărcate amândouă: o interogare care nu filtrează pe această coloană numără fiecare sfert de oră de două ori.",
            "en": "\"gross\" or \"net\": which side of the power stations' own consumption the figure is measured on. Gross is power at the generator terminals; net is what is left after station services, and runs about 6-8% lower. The workbook publishes both as two sheets and both are landed here, so a query that does not filter on this column counts every quarter-hour twice."
          },
          "min": "gross",
          "max": "net",
          "distinctApprox": 2
        },
        {
          "name": "interval",
          "type": "INTEGER",
          "nullable": false,
          "description": "The source's own interval number inside the day, starting at 1. Read it together with interval_minutes: 1-24 while the workbook was hourly, 1-96 since it went quarter-hourly. It is part of the primary key because it, and not a clock reading, is what the source actually publishes.",
          "descriptions": {
            "ro": "Numărul intervalului în interiorul zilei, așa cum îl publică sursa, începând de la 1. Se citește împreună cu interval_minutes: 1-24 în perioada orară, 1-96 de când sursa a trecut la sfert de oră. Face parte din cheia primară pentru că el, și nu o oră de ceas, este ce publică efectiv sursa.",
            "en": "The source's own interval number inside the day, starting at 1. Read it together with interval_minutes: 1-24 while the workbook was hourly, 1-96 since it went quarter-hourly. It is part of the primary key because it, and not a clock reading, is what the source actually publishes."
          },
          "min": 1,
          "max": 96,
          "distinctApprox": 96
        },
        {
          "name": "interval_minutes",
          "type": "INTEGER",
          "nullable": true,
          "description": "How long one interval is. Transelectrica changed this workbook from hourly to quarter-hourly resolution in the middle of the file: rows up to 2021-01-31 carry 60 and rows from 2021-02-01 carry 15. Averaging or summing across that boundary without reading this column mixes two different things.",
          "descriptions": {
            "ro": "Câte minute acoperă un interval. Transelectrica a schimbat rezoluția acestui fișier de la oră la sfert de oră în mijlocul seriei: rândurile până la 31.01.2021 au 60, iar cele de la 01.02.2021 au 15. Mediile sau sumele calculate peste această graniță fără a citi coloana amestecă două lucruri diferite.",
            "en": "How long one interval is. Transelectrica changed this workbook from hourly to quarter-hourly resolution in the middle of the file: rows up to 2021-01-31 carry 60 and rows from 2021-02-01 carry 15. Averaging or summing across that boundary without reading this column mixes two different things."
          },
          "unit": "minutes"
        },
        {
          "name": "interval_start_local",
          "type": "TIMESTAMP",
          "nullable": true,
          "description": "The wall-clock start of the interval in Romanian civil time (Europe/Bucharest), computed as midnight plus (interval - 1) slots of interval_minutes. It carries no time zone on purpose: the source numbers intervals and never states an offset, so on the two days a year the clock moves this column and the real wall clock part company. Use it to plot; use day plus interval to identify.",
          "descriptions": {
            "ro": "Începutul intervalului în ora de perete a României (Europe/Bucharest), calculat ca miezul nopții plus (interval - 1) sloturi de interval_minutes. Nu poartă fus orar, intenționat: sursa numerotează intervale și nu declară niciun decalaj, așa că în cele două zile pe an în care se schimbă ora această coloană și ceasul real se despart. Folosiți-o pentru grafice; pentru identificare folosiți day împreună cu interval.",
            "en": "The wall-clock start of the interval in Romanian civil time (Europe/Bucharest), computed as midnight plus (interval - 1) slots of interval_minutes. It carries no time zone on purpose: the source numbers intervals and never states an offset, so on the two days a year the clock moves this column and the real wall clock part company. Use it to plot; use day plus interval to identify."
          }
        },
        {
          "name": "update_day",
          "type": "DATE",
          "nullable": true,
          "description": "The workbook's \"Update day\" column for this row — a Europe/Bucharest calendar day, like day: the day its author stamped on the line, normally the day before day. NULL where the sheet leaves the cell empty, which the older monthly sheets always do.",
          "descriptions": {
            "ro": "Coloana „Update day” a fișierului pentru acest rând — o zi calendaristică Europe/Bucharest, la fel ca day: ziua pe care autorul foii a consemnat-o, de regulă ziua dinaintea lui day. NULL acolo unde foaia lasă celula goală, ceea ce fac întotdeauna foile lunare mai vechi.",
            "en": "The workbook's \"Update day\" column for this row — a Europe/Bucharest calendar day, like day: the day its author stamped on the line, normally the day before day. NULL where the sheet leaves the cell empty, which the older monthly sheets always do."
          }
        },
        {
          "name": "power_mw",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Average power produced across the whole of Romania during this interval, in megawatts, exactly as the workbook prints it — no rounding, no rescaling. NULL means the cell was empty in the source, which is not the same as zero.",
          "descriptions": {
            "ro": "Puterea medie produsă în întreaga Românie pe durata acestui interval, în megawați, exact așa cum o tipărește fișierul — fără rotunjiri și fără rescalări. NULL înseamnă că celula era goală în sursă, ceea ce nu este totuna cu zero.",
            "en": "Average power produced across the whole of Romania during this interval, in megawatts, exactly as the workbook prints it — no rounding, no rescaling. NULL means the cell was empty in the source, which is not the same as zero."
          },
          "unit": "MW"
        },
        {
          "name": "source_file",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The workbook inside the downloaded archive this row was read from, e.g. \"weekly production 2015-2024.xls\". Worth keeping because the archive's own filename disagrees with the workbook inside it, in both directions, on this source.",
          "descriptions": {
            "ro": "Fișierul de calcul din arhiva descărcată din care a fost citit rândul, de exemplu „weekly production 2015-2024.xls”. Merită păstrat pentru că, la această sursă, numele arhivei contrazice numele fișierului dinăuntru, în ambele sensuri.",
            "en": "The workbook inside the downloaded archive this row was read from, e.g. \"weekly production 2015-2024.xls\". Worth keeping because the archive's own filename disagrees with the workbook inside it, in both directions, on this source."
          }
        },
        {
          "name": "source_sheet",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The sheet inside that workbook, verbatim — e.g. \"valori brute (gross values)\". It is where measure was read from, so it is the audit trail for that column.",
          "descriptions": {
            "ro": "Foaia din acel fișier, textual — de exemplu „valori brute (gross values)”. De acolo a fost citită coloana measure, deci este urma de audit pentru ea.",
            "en": "The sheet inside that workbook, verbatim — e.g. \"valori brute (gross values)\". It is where measure was read from, so it is the audit trail for that column."
          }
        }
      ],
      "files": [
        {
          "url": "https://data-directory.fsn1.your-objectstorage.com/public/transelectrica-history/v/01M1NQPZZZG54BBX89G44D1W2W/production_intervals.parquet",
          "sizeBytes": 2264528,
          "rowCount": 381216,
          "etag": "\"6f258a56099ee11c3b90adbe25dce19b\"",
          "stats": {
            "day": {
              "min": "2015-01-01",
              "max": "2024-12-31"
            },
            "measure": {
              "min": "gross",
              "max": "net"
            },
            "interval": {
              "min": 1,
              "max": 96
            }
          }
        }
      ],
      "example": [
        {
          "day": "2015-01-01T00:00:00.000Z",
          "measure": "gross",
          "interval": 1,
          "interval_minutes": 60,
          "interval_start_local": "2015-01-01T00:00:00.000Z",
          "update_day": "2014-12-31T00:00:00.000Z",
          "power_mw": 8069.1,
          "source_file": "weekly production 2015-2024.xls",
          "source_sheet": "valori brute (gross values)"
        },
        {
          "day": "2015-01-01T00:00:00.000Z",
          "measure": "gross",
          "interval": 2,
          "interval_minutes": 60,
          "interval_start_local": "2015-01-01T01:00:00.000Z",
          "update_day": "2014-12-31T00:00:00.000Z",
          "power_mw": 7729.1,
          "source_file": "weekly production 2015-2024.xls",
          "source_sheet": "valori brute (gross values)"
        }
      ]
    },
    {
      "name": "consumption_intervals",
      "description": "MEASURED electricity consumption for the whole Romanian national grid, one row per day, per interval, per side of the meter, from the \"weekly consumption\" workbook Transelectrica publishes, covering 2015-01-01 to 2025-12-31 — eleven years, despite the archive being published under the name \"weekly consumption_2015-2019.zip\". **The series is hourly (interval_minutes = 60) through 2021-01-31 and quarter-hourly (interval_minutes = 15) from 2021-02-01 onward — interval_minutes records which applies to each row.** Gross and net are both present; filter on measure or every day is counted twice. Join it to production_intervals on day and interval to get the national balance.",
      "descriptions": {
        "ro": "Consumul de energie electrică MĂSURAT pentru întreaga rețea națională a României, câte un rând pe zi, pe interval și pe parte de măsurare, din fișierul „weekly consumption” publicat de Transelectrica, acoperind 01.01.2015 - 31.12.2025 — unsprezece ani, deși arhiva este publicată sub numele „weekly consumption_2015-2019.zip”. **Seria este orară (interval_minutes = 60) până la 31.01.2021 inclusiv și la sfert de oră (interval_minutes = 15) de la 01.02.2021 încolo — interval_minutes consemnează care dintre cele două se aplică fiecărui rând.** Sunt prezente și valorile brute, și cele nete: filtrați pe measure, altfel fiecare zi este numărată de două ori. Uniți tabelul cu production_intervals pe day și interval pentru a obține balanța națională.",
        "en": "MEASURED electricity consumption for the whole Romanian national grid, one row per day, per interval, per side of the meter, from the \"weekly consumption\" workbook Transelectrica publishes, covering 2015-01-01 to 2025-12-31 — eleven years, despite the archive being published under the name \"weekly consumption_2015-2019.zip\". **The series is hourly (interval_minutes = 60) through 2021-01-31 and quarter-hourly (interval_minutes = 15) from 2021-02-01 onward — interval_minutes records which applies to each row.** Gross and net are both present; filter on measure or every day is counted twice. Join it to production_intervals on day and interval to get the national balance."
      },
      "rowCount": 451320,
      "lastRunRows": 451320,
      "totalBytes": 2508211,
      "sortBy": [
        "day",
        "measure",
        "interval"
      ],
      "searchColumns": [],
      "primaryKey": [
        "day",
        "measure",
        "interval"
      ],
      "writeMode": "snapshot_history",
      "storage": "lake",
      "columns": [
        {
          "name": "day",
          "type": "DATE",
          "nullable": false,
          "description": "The delivery day these measurements belong to — the Europe/Bucharest calendar day, read from the workbook's own \"Data\" column, an Excel date serial in the file, decoded to a real date here. This is the identity of the day, not the day the sheet was written; that is update_day.",
          "descriptions": {
            "ro": "Ziua de livrare la care se referă măsurătorile — ziua calendaristică Europe/Bucharest — citită din coloana „Data” a fișierului sursă, un număr serial Excel în fișier, decodificat aici într-o dată reală. Aceasta este identitatea zilei, nu ziua în care a fost scrisă foaia de calcul; aceea este update_day.",
            "en": "The delivery day these measurements belong to — the Europe/Bucharest calendar day, read from the workbook's own \"Data\" column, an Excel date serial in the file, decoded to a real date here. This is the identity of the day, not the day the sheet was written; that is update_day."
          },
          "min": "2015-01-01",
          "max": "2025-12-31",
          "distinctApprox": 4494
        },
        {
          "name": "measure",
          "type": "VARCHAR",
          "nullable": false,
          "description": "\"gross\" or \"net\": which side of the power stations' own consumption the figure is measured on. Gross is power at the generator terminals; net is what is left after station services, and runs about 6-8% lower. The workbook publishes both as two sheets and both are landed here, so a query that does not filter on this column counts every quarter-hour twice.",
          "descriptions": {
            "ro": "„gross” (brut) sau „net”: partea de măsurare față de consumul propriu al centralelor. Valoarea brută este puterea la bornele generatoarelor, cea netă este ce rămâne după serviciile interne ale centralei și este cu circa 6-8% mai mică. Fișierul publică ambele, în două foi separate, iar aici sunt încărcate amândouă: o interogare care nu filtrează pe această coloană numără fiecare sfert de oră de două ori.",
            "en": "\"gross\" or \"net\": which side of the power stations' own consumption the figure is measured on. Gross is power at the generator terminals; net is what is left after station services, and runs about 6-8% lower. The workbook publishes both as two sheets and both are landed here, so a query that does not filter on this column counts every quarter-hour twice."
          },
          "min": "gross",
          "max": "net",
          "distinctApprox": 2
        },
        {
          "name": "interval",
          "type": "INTEGER",
          "nullable": false,
          "description": "The source's own interval number inside the day, starting at 1. Read it together with interval_minutes: 1-24 while the workbook was hourly, 1-96 since it went quarter-hourly. It is part of the primary key because it, and not a clock reading, is what the source actually publishes.",
          "descriptions": {
            "ro": "Numărul intervalului în interiorul zilei, așa cum îl publică sursa, începând de la 1. Se citește împreună cu interval_minutes: 1-24 în perioada orară, 1-96 de când sursa a trecut la sfert de oră. Face parte din cheia primară pentru că el, și nu o oră de ceas, este ce publică efectiv sursa.",
            "en": "The source's own interval number inside the day, starting at 1. Read it together with interval_minutes: 1-24 while the workbook was hourly, 1-96 since it went quarter-hourly. It is part of the primary key because it, and not a clock reading, is what the source actually publishes."
          },
          "min": 1,
          "max": 96,
          "distinctApprox": 96
        },
        {
          "name": "interval_minutes",
          "type": "INTEGER",
          "nullable": true,
          "description": "How long one interval is. Transelectrica changed this workbook from hourly to quarter-hourly resolution in the middle of the file: rows up to 2021-01-31 carry 60 and rows from 2021-02-01 carry 15. Averaging or summing across that boundary without reading this column mixes two different things.",
          "descriptions": {
            "ro": "Câte minute acoperă un interval. Transelectrica a schimbat rezoluția acestui fișier de la oră la sfert de oră în mijlocul seriei: rândurile până la 31.01.2021 au 60, iar cele de la 01.02.2021 au 15. Mediile sau sumele calculate peste această graniță fără a citi coloana amestecă două lucruri diferite.",
            "en": "How long one interval is. Transelectrica changed this workbook from hourly to quarter-hourly resolution in the middle of the file: rows up to 2021-01-31 carry 60 and rows from 2021-02-01 carry 15. Averaging or summing across that boundary without reading this column mixes two different things."
          },
          "unit": "minutes"
        },
        {
          "name": "interval_start_local",
          "type": "TIMESTAMP",
          "nullable": true,
          "description": "The wall-clock start of the interval in Romanian civil time (Europe/Bucharest), computed as midnight plus (interval - 1) slots of interval_minutes. It carries no time zone on purpose: the source numbers intervals and never states an offset, so on the two days a year the clock moves this column and the real wall clock part company. Use it to plot; use day plus interval to identify.",
          "descriptions": {
            "ro": "Începutul intervalului în ora de perete a României (Europe/Bucharest), calculat ca miezul nopții plus (interval - 1) sloturi de interval_minutes. Nu poartă fus orar, intenționat: sursa numerotează intervale și nu declară niciun decalaj, așa că în cele două zile pe an în care se schimbă ora această coloană și ceasul real se despart. Folosiți-o pentru grafice; pentru identificare folosiți day împreună cu interval.",
            "en": "The wall-clock start of the interval in Romanian civil time (Europe/Bucharest), computed as midnight plus (interval - 1) slots of interval_minutes. It carries no time zone on purpose: the source numbers intervals and never states an offset, so on the two days a year the clock moves this column and the real wall clock part company. Use it to plot; use day plus interval to identify."
          }
        },
        {
          "name": "update_day",
          "type": "DATE",
          "nullable": true,
          "description": "The workbook's \"Update day\" column for this row — a Europe/Bucharest calendar day, like day: the day its author stamped on the line, normally the day before day. NULL where the sheet leaves the cell empty, which the older monthly sheets always do.",
          "descriptions": {
            "ro": "Coloana „Update day” a fișierului pentru acest rând — o zi calendaristică Europe/Bucharest, la fel ca day: ziua pe care autorul foii a consemnat-o, de regulă ziua dinaintea lui day. NULL acolo unde foaia lasă celula goală, ceea ce fac întotdeauna foile lunare mai vechi.",
            "en": "The workbook's \"Update day\" column for this row — a Europe/Bucharest calendar day, like day: the day its author stamped on the line, normally the day before day. NULL where the sheet leaves the cell empty, which the older monthly sheets always do."
          }
        },
        {
          "name": "power_mw",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Average power consumed across the whole of Romania during this interval, in megawatts, exactly as the workbook prints it — no rounding, no rescaling. NULL means the cell was empty in the source, which is not the same as zero.",
          "descriptions": {
            "ro": "Puterea medie consumată în întreaga Românie pe durata acestui interval, în megawați, exact așa cum o tipărește fișierul — fără rotunjiri și fără rescalări. NULL înseamnă că celula era goală în sursă, ceea ce nu este totuna cu zero.",
            "en": "Average power consumed across the whole of Romania during this interval, in megawatts, exactly as the workbook prints it — no rounding, no rescaling. NULL means the cell was empty in the source, which is not the same as zero."
          },
          "unit": "MW"
        },
        {
          "name": "source_file",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The workbook inside the downloaded archive this row was read from, e.g. \"weekly production 2015-2024.xls\". Worth keeping because the archive's own filename disagrees with the workbook inside it, in both directions, on this source.",
          "descriptions": {
            "ro": "Fișierul de calcul din arhiva descărcată din care a fost citit rândul, de exemplu „weekly production 2015-2024.xls”. Merită păstrat pentru că, la această sursă, numele arhivei contrazice numele fișierului dinăuntru, în ambele sensuri.",
            "en": "The workbook inside the downloaded archive this row was read from, e.g. \"weekly production 2015-2024.xls\". Worth keeping because the archive's own filename disagrees with the workbook inside it, in both directions, on this source."
          }
        },
        {
          "name": "source_sheet",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The sheet inside that workbook, verbatim — e.g. \"valori brute (gross values)\". It is where measure was read from, so it is the audit trail for that column.",
          "descriptions": {
            "ro": "Foaia din acel fișier, textual — de exemplu „valori brute (gross values)”. De acolo a fost citită coloana measure, deci este urma de audit pentru ea.",
            "en": "The sheet inside that workbook, verbatim — e.g. \"valori brute (gross values)\". It is where measure was read from, so it is the audit trail for that column."
          }
        }
      ],
      "files": [
        {
          "url": "https://data-directory.fsn1.your-objectstorage.com/public/transelectrica-history/v/01M1NQPZZZG54BBX89G44D1W2W/consumption_intervals.parquet",
          "sizeBytes": 2508211,
          "rowCount": 451320,
          "etag": "\"902b820871701559d5ab23748e22a5b8\"",
          "stats": {
            "day": {
              "min": "2015-01-01",
              "max": "2025-12-31"
            },
            "measure": {
              "min": "gross",
              "max": "net"
            },
            "interval": {
              "min": 1,
              "max": 96
            }
          }
        }
      ],
      "example": [
        {
          "day": "2015-01-01T00:00:00.000Z",
          "measure": "gross",
          "interval": 1,
          "interval_minutes": 60,
          "interval_start_local": "2015-01-01T00:00:00.000Z",
          "update_day": "2014-12-31T00:00:00.000Z",
          "power_mw": 7150,
          "source_file": "weekly consumption 2015-2025.xlsx",
          "source_sheet": "valori brute (gross values)"
        },
        {
          "day": "2015-01-01T00:00:00.000Z",
          "measure": "gross",
          "interval": 2,
          "interval_minutes": 60,
          "interval_start_local": "2015-01-01T01:00:00.000Z",
          "update_day": "2014-12-31T00:00:00.000Z",
          "power_mw": 6800,
          "source_file": "weekly consumption 2015-2025.xlsx",
          "source_sheet": "valori brute (gross values)"
        }
      ]
    },
    {
      "name": "production_forecast_hourly",
      "description": "THE DAY-AHEAD PRODUCTION FORECAST — \"prognoza\" — NOT a measurement. Every number in this table is what Transelectrica expected the national grid to produce, published before the day happened; nothing here was ever metered. It is kept as its own table, and never merged into production_intervals, precisely so the two cannot be confused. One row per day, per hour, per side of the meter, from the eight yearly workbooks in the archived \"ARHIVA - 7Productie3\" bundle, covering 2010-09-01 to 2019-12-31 at hourly resolution. Gross and net forecasts are both present; filter on measure. To score the forecast, join it to production_intervals on day for the overlapping years 2015-2019.",
      "descriptions": {
        "ro": "PROGNOZA DE PRODUCȚIE CU O ZI ÎNAINTE — NU o măsurătoare. Fiecare număr din acest tabel este ceea ce Transelectrica se aștepta să producă sistemul național, publicat înainte ca ziua respectivă să aibă loc; nimic de aici nu a fost vreodată contorizat. Este păstrat ca tabel separat și nu este niciodată contopit cu production_intervals, tocmai pentru ca cele două să nu poată fi confundate. Câte un rând pe zi, pe oră și pe parte de măsurare, din cele opt fișiere anuale ale arhivei „ARHIVA - 7Productie3”, acoperind 01.09.2010 - 31.12.2019, la rezoluție orară. Sunt prezente și prognozele brute, și cele nete: filtrați pe measure. Pentru a evalua prognoza, uniți tabelul cu production_intervals pe day, pentru anii 2015-2019 în care cele două se suprapun.",
        "en": "THE DAY-AHEAD PRODUCTION FORECAST — \"prognoza\" — NOT a measurement. Every number in this table is what Transelectrica expected the national grid to produce, published before the day happened; nothing here was ever metered. It is kept as its own table, and never merged into production_intervals, precisely so the two cannot be confused. One row per day, per hour, per side of the meter, from the eight yearly workbooks in the archived \"ARHIVA - 7Productie3\" bundle, covering 2010-09-01 to 2019-12-31 at hourly resolution. Gross and net forecasts are both present; filter on measure. To score the forecast, join it to production_intervals on day for the overlapping years 2015-2019."
      },
      "rowCount": 157718,
      "lastRunRows": 157718,
      "totalBytes": 1035948,
      "sortBy": [
        "day",
        "measure",
        "hour"
      ],
      "searchColumns": [],
      "primaryKey": [
        "day",
        "measure",
        "hour"
      ],
      "writeMode": "snapshot_history",
      "storage": "lake",
      "columns": [
        {
          "name": "day",
          "type": "DATE",
          "nullable": false,
          "description": "The day the forecast is FOR — the Europe/Bucharest calendar day — read from the workbook's own \"Data\" column (an Excel date serial, decoded here). The forecast was published before this day, not on it.",
          "descriptions": {
            "ro": "Ziua PENTRU care este făcută prognoza — ziua calendaristică Europe/Bucharest — citită din coloana „Data” a fișierului (număr serial Excel, decodificat aici). Prognoza a fost publicată înainte de această zi, nu în timpul ei.",
            "en": "The day the forecast is FOR — the Europe/Bucharest calendar day — read from the workbook's own \"Data\" column (an Excel date serial, decoded here). The forecast was published before this day, not on it."
          },
          "min": "2010-09-01",
          "max": "2019-12-31",
          "distinctApprox": 3161
        },
        {
          "name": "measure",
          "type": "VARCHAR",
          "nullable": false,
          "description": "\"gross\" or \"net\": which side of the power stations' own consumption the forecast is stated on. Each monthly sheet stacks a gross block above a net block; both are landed. The value is read from the ROMANIAN heading (\"Valori brute\" / \"Valori nete\") because the English half of several of those headings says \"Gross\" above net values — a mistake in the source that would silently mislabel the data if it were trusted.",
          "descriptions": {
            "ro": "„gross” (brut) sau „net”: partea de măsurare pe care este exprimată prognoza, față de consumul propriu al centralelor. Fiecare foaie lunară așază un bloc brut deasupra unuia net; ambele sunt încărcate. Valoarea este citită din titlul ROMÂNESC („Valori brute” / „Valori nete”), pentru că în mai multe dintre aceste titluri jumătatea engleză scrie „Gross” deasupra unor valori nete — o greșeală a sursei care ar eticheta tăcut greșit datele dacă ar fi luată drept bună.",
            "en": "\"gross\" or \"net\": which side of the power stations' own consumption the forecast is stated on. Each monthly sheet stacks a gross block above a net block; both are landed. The value is read from the ROMANIAN heading (\"Valori brute\" / \"Valori nete\") because the English half of several of those headings says \"Gross\" above net values — a mistake in the source that would silently mislabel the data if it were trusted."
          },
          "min": "gross",
          "max": "net",
          "distinctApprox": 2
        },
        {
          "name": "hour",
          "type": "INTEGER",
          "nullable": false,
          "description": "The source's own hour number inside the day, 1 to 24. It is what the workbook publishes (columns int1..int24), so it is what identifies the row.",
          "descriptions": {
            "ro": "Numărul orei în interiorul zilei, așa cum îl publică sursa, de la 1 la 24. Este ceea ce conține fișierul (coloanele int1..int24), deci este ceea ce identifică rândul.",
            "en": "The source's own hour number inside the day, 1 to 24. It is what the workbook publishes (columns int1..int24), so it is what identifies the row."
          },
          "min": 1,
          "max": 25,
          "distinctApprox": 26
        },
        {
          "name": "hour_start_local",
          "type": "TIMESTAMP",
          "nullable": true,
          "description": "The wall-clock start of the hour in Romanian civil time (Europe/Bucharest), computed as midnight plus (hour - 1) hours. Zone-free on purpose: the source numbers hours and never states an offset, so on the two days a year the clock moves this column and the real wall clock part company. Use it to plot; use day plus hour to identify.",
          "descriptions": {
            "ro": "Începutul orei în ora de perete a României (Europe/Bucharest), calculat ca miezul nopții plus (hour - 1) ore. Fără fus orar, intenționat: sursa numerotează ore și nu declară niciun decalaj, așa că în cele două zile pe an în care se schimbă ora această coloană și ceasul real se despart. Folosiți-o pentru grafice; pentru identificare folosiți day împreună cu hour.",
            "en": "The wall-clock start of the hour in Romanian civil time (Europe/Bucharest), computed as midnight plus (hour - 1) hours. Zone-free on purpose: the source numbers hours and never states an offset, so on the two days a year the clock moves this column and the real wall clock part company. Use it to plot; use day plus hour to identify."
          }
        },
        {
          "name": "update_day",
          "type": "DATE",
          "nullable": true,
          "description": "The workbook's \"Update day\" column for this row — a Europe/Bucharest calendar day, when it carries one. These monthly forecast sheets almost always leave it blank, so this column is usually NULL — which is also why the forecast's publication date cannot be recovered from this archive.",
          "descriptions": {
            "ro": "Coloana „Update day” a fișierului pentru acest rând — o zi calendaristică Europe/Bucharest, atunci când există. Aceste foi lunare de prognoză o lasă aproape întotdeauna goală, deci coloana este de regulă NULL — și de aceea data publicării prognozei nu poate fi recuperată din această arhivă.",
            "en": "The workbook's \"Update day\" column for this row — a Europe/Bucharest calendar day, when it carries one. These monthly forecast sheets almost always leave it blank, so this column is usually NULL — which is also why the forecast's publication date cannot be recovered from this archive."
          }
        },
        {
          "name": "power_mw",
          "type": "DOUBLE",
          "nullable": true,
          "description": "Forecast average power for the whole Romanian grid during this hour, in megawatts, exactly as the workbook prints it. NULL means the cell was empty, not zero.",
          "descriptions": {
            "ro": "Puterea medie prognozată pentru întreaga rețea a României în această oră, în megawați, exact așa cum o tipărește fișierul. NULL înseamnă celulă goală, nu zero.",
            "en": "Forecast average power for the whole Romanian grid during this hour, in megawatts, exactly as the workbook prints it. NULL means the cell was empty, not zero."
          },
          "unit": "MW"
        },
        {
          "name": "source_file",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The workbook inside the archive this row came from, e.g. \"monthly production 2013.xls\". The bundle mixes real BIFF .xls files with real .xlsx files, so this is also the record of which format was actually read.",
          "descriptions": {
            "ro": "Fișierul de calcul din arhivă din care provine rândul, de exemplu „monthly production 2013.xls”. Arhiva amestecă fișiere BIFF .xls autentice cu fișiere .xlsx autentice, așa că această coloană arată și ce format a fost citit de fapt.",
            "en": "The workbook inside the archive this row came from, e.g. \"monthly production 2013.xls\". The bundle mixes real BIFF .xls files with real .xlsx files, so this is also the record of which format was actually read."
          }
        },
        {
          "name": "source_sheet",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The monthly sheet the row was read from, verbatim — e.g. \"Ianuarie 2013\". The archive reprints the tail of the previous month at the top of each sheet, so a day can appear in two sheets; when it does, the row kept is the one from the sheet named after that day's own month, and this column says which sheet won.",
          "descriptions": {
            "ro": "Foaia lunară din care a fost citit rândul, textual — de exemplu „Ianuarie 2013”. Arhiva retipărește coada lunii precedente în capul fiecărei foi, deci o zi poate apărea în două foi; când se întâmplă, rândul păstrat este cel din foaia numită după luna zilei respective, iar această coloană spune care foaie a câștigat.",
            "en": "The monthly sheet the row was read from, verbatim — e.g. \"Ianuarie 2013\". The archive reprints the tail of the previous month at the top of each sheet, so a day can appear in two sheets; when it does, the row kept is the one from the sheet named after that day's own month, and this column says which sheet won."
          }
        }
      ],
      "files": [
        {
          "url": "https://data-directory.fsn1.your-objectstorage.com/public/transelectrica-history/v/01M1NQPZZZG54BBX89G44D1W2W/production_forecast_hourly.parquet",
          "sizeBytes": 1035948,
          "rowCount": 157718,
          "etag": "\"5f3cc3bedd15f66c84e1709ccd9805d1\"",
          "stats": {
            "day": {
              "min": "2010-09-01",
              "max": "2019-12-31"
            },
            "measure": {
              "min": "gross",
              "max": "net"
            },
            "hour": {
              "min": 1,
              "max": 25
            }
          }
        }
      ],
      "example": [
        {
          "day": "2010-09-01T00:00:00.000Z",
          "measure": "gross",
          "hour": 1,
          "hour_start_local": "2010-09-01T00:00:00.000Z",
          "update_day": null,
          "power_mw": 5531,
          "source_file": "monthly production 2010-2012.xls",
          "source_sheet": "Septembrie2010"
        },
        {
          "day": "2010-09-01T00:00:00.000Z",
          "measure": "gross",
          "hour": 2,
          "hour_start_local": "2010-09-01T01:00:00.000Z",
          "update_day": null,
          "power_mw": 5297,
          "source_file": "monthly production 2010-2012.xls",
          "source_sheet": "Septembrie2010"
        }
      ]
    },
    {
      "name": "performance_reports",
      "description": "A CATALOGUE, not data: Transelectrica's annual network performance reports (\"Indicatori de performanta\"), one row per yearly report, 2009 onwards. These are Word documents — prose with embedded tables, not a machine-readable file format — so nothing is materialised from them and each row says so in materialize_skipped_reason and points at the document instead. This table is a companion to the three data tables, never a substitute for one: it exists so a reader can see the whole of what the source publishes, including the part no query can reach.",
      "descriptions": {
        "ro": "Un CATALOG, nu date: rapoartele anuale de indicatori de performanță ale rețelei, publicate de Transelectrica („Indicatori de performanță”), câte un rând pe raport anual, din 2009 încoace. Sunt documente Word — text cu tabele inserate, nu un format citibil de mașină —, așa că nu s-a materializat nimic din ele, iar fiecare rând spune acest lucru în materialize_skipped_reason și trimite la document. Tabelul este un însoțitor al celor trei tabele de date, niciodată un înlocuitor: există pentru ca cititorul să vadă tot ce publică sursa, inclusiv partea la care nicio interogare nu ajunge.",
        "en": "A CATALOGUE, not data: Transelectrica's annual network performance reports (\"Indicatori de performanta\"), one row per yearly report, 2009 onwards. These are Word documents — prose with embedded tables, not a machine-readable file format — so nothing is materialised from them and each row says so in materialize_skipped_reason and points at the document instead. This table is a companion to the three data tables, never a substitute for one: it exists so a reader can see the whole of what the source publishes, including the part no query can reach."
      },
      "rowCount": 17,
      "lastRunRows": 17,
      "totalBytes": 4640,
      "sortBy": [
        "year",
        "file_name"
      ],
      "searchColumns": [],
      "primaryKey": [
        "year",
        "file_name"
      ],
      "writeMode": "replace",
      "storage": "lake",
      "columns": [
        {
          "name": "year",
          "type": "INTEGER",
          "nullable": false,
          "description": "The reporting year the document covers, taken from the digits in its own filename. This is the identity of the row.",
          "descriptions": {
            "ro": "Anul de raportare acoperit de document, luat din cifrele propriului său nume de fișier. Aceasta este identitatea rândului.",
            "en": "The reporting year the document covers, taken from the digits in its own filename. This is the identity of the row."
          },
          "min": 2009,
          "max": 2025,
          "distinctApprox": 20
        },
        {
          "name": "file_name",
          "type": "VARCHAR",
          "nullable": false,
          "description": "The document's filename exactly as the publisher wrote it, e.g. \"Indicatori de performanta 2024_final.doc\". Part of the key because a year can be published twice (a draft and a final).",
          "descriptions": {
            "ro": "Numele fișierului exact așa cum l-a scris editorul, de exemplu „Indicatori de performanta 2024_final.doc”. Face parte din cheie pentru că un an poate fi publicat de două ori (o formă de lucru și una finală).",
            "en": "The document's filename exactly as the publisher wrote it, e.g. \"Indicatori de performanta 2024_final.doc\". Part of the key because a year can be published twice (a draft and a final)."
          },
          "min": "Indicatori de performanta 2009.doc",
          "max": "Indicatori de performanta 2025.doc",
          "distinctApprox": 17
        },
        {
          "name": "title",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The report title. The source gives no title other than the filename, so this is that filename with the extension removed — said plainly rather than dressed up as metadata the publisher did not provide.",
          "descriptions": {
            "ro": "Titlul raportului. Sursa nu oferă alt titlu în afara numelui de fișier, așa că acesta este numele fișierului fără extensie — spus pe față, nu prezentat drept metadate pe care editorul nu le-a furnizat.",
            "en": "The report title. The source gives no title other than the filename, so this is that filename with the extension removed — said plainly rather than dressed up as metadata the publisher did not provide."
          }
        },
        {
          "name": "file_format",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The document format, lower-case, from the filename extension: \"doc\" for every report published so far.",
          "descriptions": {
            "ro": "Formatul documentului, cu litere mici, din extensia numelui de fișier: „doc” pentru toate rapoartele publicate până acum.",
            "en": "The document format, lower-case, from the filename extension: \"doc\" for every report published so far."
          }
        },
        {
          "name": "file_bytes",
          "type": "BIGINT",
          "nullable": true,
          "description": "The uncompressed size of the document as the ZIP's own directory records it. NULL for a report published on its own rather than inside the archive, where no size is stated.",
          "descriptions": {
            "ro": "Dimensiunea necomprimată a documentului, așa cum o consemnează directorul arhivei ZIP. NULL pentru un raport publicat separat, în afara arhivei, unde nu este declarată nicio dimensiune.",
            "en": "The uncompressed size of the document as the ZIP's own directory records it. NULL for a report published on its own rather than inside the archive, where no size is stated."
          },
          "unit": "bytes"
        },
        {
          "name": "modified_at",
          "type": "TIMESTAMP",
          "nullable": true,
          "description": "The timestamp the ZIP directory carries for the document — in practice when the publisher last saved it. NULL for a standalone report. A DOS timestamp inside a ZIP records no real offset, so this column stores the archive's raw date/time fields under a UTC label as a storage convention (see workbook.ts's dosDateToUtc), not a claim that the publisher's own clock was actually set to UTC — the true zone it kept is unrecoverable from the archive.",
          "descriptions": {
            "ro": "Momentul pe care directorul arhivei ZIP îl poartă pentru document — în practică, când l-a salvat ultima dată editorul. NULL pentru un raport publicat separat. Un moment DOS dintr-un ZIP nu consemnează niciun decalaj real, așa că această coloană păstrează câmpurile brute de dată/oră ale arhivei sub o etichetă UTC, ca simplă convenție de stocare (vezi dosDateToUtc din workbook.ts) — nu o afirmație că ceasul editorului era într-adevăr setat pe UTC; fusul real pe care îl avea este imposibil de recuperat din arhivă.",
            "en": "The timestamp the ZIP directory carries for the document — in practice when the publisher last saved it. NULL for a standalone report. A DOS timestamp inside a ZIP records no real offset, so this column stores the archive's raw date/time fields under a UTC label as a storage convention (see workbook.ts's dosDateToUtc), not a claim that the publisher's own clock was actually set to UTC — the true zone it kept is unrecoverable from the archive."
          }
        },
        {
          "name": "archive_url",
          "type": "VARCHAR",
          "nullable": true,
          "description": "The ZIP the document was found inside, when it came from one. NULL for a report the listing page publishes on its own.",
          "descriptions": {
            "ro": "Arhiva ZIP în care a fost găsit documentul, atunci când provine dintr-una. NULL pentru un raport pe care pagina îl publică de sine stătător.",
            "en": "The ZIP the document was found inside, when it came from one. NULL for a report the listing page publishes on its own."
          }
        },
        {
          "name": "source_url",
          "type": "VARCHAR",
          "nullable": true,
          "description": "A direct link to the document, when the listing page publishes one. NULL for a document that exists only inside the archive, which has no per-file URL — use archive_url then.",
          "descriptions": {
            "ro": "Un link direct către document, atunci când pagina publică unul. NULL pentru un document care există doar în interiorul arhivei, care nu are un URL propriu — în acel caz folosiți archive_url.",
            "en": "A direct link to the document, when the listing page publishes one. NULL for a document that exists only inside the archive, which has no per-file URL — use archive_url then."
          }
        },
        {
          "name": "materialize_skipped_reason",
          "type": "TEXT",
          "nullable": true,
          "description": "Why no table was built from this document. It is filled in for every row here, and the reason is always the same in substance: the report is a Word document, a page-layout format holding prose and hand-formatted tables with no stable machine-readable structure, so extracting numbers from it would mean guessing at them. The document is linked instead.",
          "descriptions": {
            "ro": "De ce nu s-a construit niciun tabel din acest document. Este completat pentru fiecare rând de aici, iar motivul este mereu același în esență: raportul este un document Word, un format de paginare care conține text și tabele formatate manual, fără o structură stabilă citibilă de mașină, așa că extragerea numerelor din el ar însemna ghicirea lor. În locul lor este pus linkul către document.",
            "en": "Why no table was built from this document. It is filled in for every row here, and the reason is always the same in substance: the report is a Word document, a page-layout format holding prose and hand-formatted tables with no stable machine-readable structure, so extracting numbers from it would mean guessing at them. The document is linked instead."
          }
        }
      ],
      "files": [
        {
          "url": "https://data-directory.fsn1.your-objectstorage.com/public/transelectrica-history/v/01M1NQPZZZG54BBX89G44D1W2W/performance_reports.parquet",
          "sizeBytes": 4640,
          "rowCount": 17,
          "etag": "\"fd92c90c2bb183951eadd0ef76243b10\"",
          "stats": {
            "year": {
              "min": 2009,
              "max": 2025
            },
            "file_name": {
              "min": "Indicatori de performanta 2009.doc",
              "max": "Indicatori de performanta 2025.doc"
            }
          }
        }
      ],
      "example": [
        {
          "year": 2009,
          "file_name": "Indicatori de performanta 2009.doc",
          "title": "Indicatori de performanta 2009",
          "file_format": "doc",
          "file_bytes": 244224,
          "modified_at": "2015-07-30T09:49:40.000Z",
          "archive_url": "https://www.transelectrica.ro/documents/10179/91762/Indicatori+performanta+2009-2024.zip/c388cf3e-17fb-4aad-a78e-27bcdf5d902b",
          "source_url": null,
          "materialize_skipped_reason": "The report is a Microsoft Word (.doc) document: a page-layout format holding prose and hand-formatted tables with no stable machine-readable structure, so no table could be built from it without guessing at the numbers. The document itself is linked instead — open source_url when it is set, otherwise archive_url, and read the report."
        },
        {
          "year": 2010,
          "file_name": "Indicatori de performanta 2010.doc",
          "title": "Indicatori de performanta 2010",
          "file_format": "doc",
          "file_bytes": 258048,
          "modified_at": "2015-07-30T09:49:24.000Z",
          "archive_url": "https://www.transelectrica.ro/documents/10179/91762/Indicatori+performanta+2009-2024.zip/c388cf3e-17fb-4aad-a78e-27bcdf5d902b",
          "source_url": null,
          "materialize_skipped_reason": "The report is a Microsoft Word (.doc) document: a page-layout format holding prose and hand-formatted tables with no stable machine-readable structure, so no table could be built from it without guessing at the numbers. The document itself is linked instead — open source_url when it is set, otherwise archive_url, and read the report."
        }
      ]
    }
  ],
  "generatedAt": "2026-09-04T08:14:35.557Z"
}
