-- ============================================================= -- R__fn_effective_price.sql -- EMS Platform – funkce pro výpočet efektivní ceny per site -- Repeatable migration – nasazuje se při každé změně -- ============================================================= CREATE OR REPLACE FUNCTION ems.fn_effective_buy_price( p_site_id INT, p_interval_start TIMESTAMPTZ ) RETURNS NUMERIC(10,6) LANGUAGE sql STABLE AS $$ SELECT mip.buy_raw_price_czk_kwh + smc.buy_margin_fixed_czk + (mip.buy_raw_price_czk_kwh * smc.buy_margin_percent / 100.0) FROM ems.market_interval_price mip CROSS JOIN ems.site_market_config smc WHERE mip.market_source = 'OTE_CZ' AND mip.interval_start = p_interval_start AND smc.site_id = p_site_id AND smc.valid_from <= p_interval_start AND (smc.valid_to IS NULL OR smc.valid_to > p_interval_start) ORDER BY smc.valid_from DESC LIMIT 1; $$; COMMENT ON FUNCTION ems.fn_effective_buy_price(INT, TIMESTAMPTZ) IS 'Vrátí efektivní nákupní cenu elektřiny v Kč/kWh pro danou lokalitu a 15min interval. Přičítá fixní a procentní nákupní marži dle aktuálně platné site_market_config.'; -- ------------------------------------------------------------ CREATE OR REPLACE FUNCTION ems.fn_effective_sell_price( p_site_id INT, p_interval_start TIMESTAMPTZ ) RETURNS NUMERIC(10,6) LANGUAGE sql STABLE AS $$ SELECT mip.sell_raw_price_czk_kwh + smc.sell_margin_fixed_czk + (mip.sell_raw_price_czk_kwh * smc.sell_margin_percent / 100.0) FROM ems.market_interval_price mip CROSS JOIN ems.site_market_config smc WHERE mip.market_source = 'OTE_CZ' AND mip.interval_start = p_interval_start AND smc.site_id = p_site_id AND smc.valid_from <= p_interval_start AND (smc.valid_to IS NULL OR smc.valid_to > p_interval_start) ORDER BY smc.valid_from DESC LIMIT 1; $$; COMMENT ON FUNCTION ems.fn_effective_sell_price(INT, TIMESTAMPTZ) IS 'Vrátí efektivní prodejní cenu elektřiny v Kč/kWh pro danou lokalitu a 15min interval. Aplikuje fixní a procentní prodejní marži (záporná marže = srážka z prodejní ceny).';