fix OTE fformat
Some checks failed
CI and deploy / migration-check (push) Failing after 10s
CI and deploy / deploy (push) Has been skipped

This commit is contained in:
Dusan Vojacek
2026-04-29 13:48:13 +02:00
parent f3a7b0c64f
commit 93193fd5dc
2 changed files with 30 additions and 6 deletions

View File

@@ -49,14 +49,36 @@ BEGIN
-- starší / jiná odpověď = jen 24 hodinových bodů s tooltip "Cena".
SELECT t.dl INTO v_dl
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
WHERE dl ->> 'tooltip' = 'flash_chart_01_y_15m_price_tooltip'
WHERE (
dl ->> 'tooltip' in (
'flash_chart_01_y_15m_price_tooltip', -- legacy OTE
'15min cena (EUR/MWh)', -- current OTE (2026-04+)
'15 min cena (EUR/MWh)'
)
or (
lower(dl ->> 'tooltip') like '%15min%'
and lower(dl ->> 'tooltip') like '%cena%'
and lower(dl ->> 'tooltip') like '%mwh%'
)
)
AND jsonb_array_length(dl -> 'point') >= 90
LIMIT 1;
IF v_dl IS NULL THEN
SELECT t.dl INTO v_dl
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
WHERE dl ->> 'tooltip' = 'flash_chart_01_y_60m_price_tooltip'
WHERE (
dl ->> 'tooltip' in (
'flash_chart_01_y_60m_price_tooltip', -- legacy OTE
'60min cena (EUR/MWh)', -- current OTE (2026-04+)
'60 min cena (EUR/MWh)'
)
or (
lower(dl ->> 'tooltip') like '%60min%'
and lower(dl ->> 'tooltip') like '%cena%'
and lower(dl ->> 'tooltip') like '%mwh%'
)
)
AND jsonb_array_length(dl -> 'point') >= 90
LIMIT 1;
END IF;
@@ -64,7 +86,7 @@ BEGIN
IF v_dl IS NULL THEN
SELECT t.dl INTO v_dl
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
WHERE dl ->> 'tooltip' = 'Cena'
WHERE dl ->> 'tooltip' in ('Cena', '60min cena (EUR/MWh)', '60 min cena (EUR/MWh)')
AND jsonb_array_length(dl -> 'point') >= 90
LIMIT 1;
END IF;
@@ -72,7 +94,7 @@ BEGIN
IF v_dl IS NULL THEN
SELECT t.dl INTO v_dl
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
WHERE dl ->> 'tooltip' = 'Cena'
WHERE dl ->> 'tooltip' in ('Cena', '60min cena (EUR/MWh)', '60 min cena (EUR/MWh)')
AND jsonb_array_length(dl -> 'point') BETWEEN 2 AND 28
LIMIT 1;
END IF;
@@ -87,7 +109,7 @@ BEGIN
IF v_dl IS NULL THEN
RAISE EXCEPTION
'OTE price dataLine not found (očekáváno 15min flash_* nebo hodinová Cena); '
'OTE price dataLine not found (očekáváno 15min flash_* / 15min cena nebo hodinová Cena); '
'dostupné tooltips: %',
(SELECT jsonb_agg(dl ->> 'tooltip' ORDER BY dl ->> 'tooltip')
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') dl);
@@ -153,7 +175,7 @@ $$;
COMMENT ON FUNCTION ems.fn_ote_parse_15m_price_json(jsonb, numeric) IS
'Parsuje raw JSON z OTE @@chart-data?time_resolution=PT15M.
Datum z graph.title (DD.MM.YYYY). Sloty: kotva půlnoci Europe/Prague jako timestamptz + násobky 15 min (bez DST duplicit).
Výběr série: flash_15m ≥90, flash_60m ≥90, Cena ≥90, Cena 228 h, flash_15m 228 h.
Výběr série: 15min tooltip (flash_* nebo "15min cena…") ≥90, 60min tooltip (flash_* nebo "60min cena…") ≥90, Cena ≥90, Cena 228 h, 15min tooltip 228 h.
EUR/MWh → Kč/kWh. Typicky 96 řádků, 92 při zkráceném dni (letní čas).
Testování přímo v DB:
SELECT * FROM ems.fn_ote_parse_15m_price_json(pg_read_file(''/tmp/ote.json'')::jsonb, 25.0) LIMIT 5;';