fix zaporne spot ceny v nakupu
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
-- buy_margin_percent: spot režim používá asymetrický faktor (R__011 fn_effective_buy_price).
|
||||
comment on column ems.site_market_config.buy_margin_percent is
|
||||
'Procentní nákupní marže za režimu spot: při kladné buy_raw složka OTE ×(1+p/100); při záporné ×(1−p/100); buy_margin_fixed_czk se jen přičte. Za režimu FIXED stále fix + (uzavřená energická složka × p/100).';
|
||||
@@ -119,14 +119,21 @@ BEGIN
|
||||
AND v_fixed_nt IS NOT NULL THEN
|
||||
v_energy_czk := v_fixed_nt
|
||||
+ CASE WHEN v_is_vt THEN v_fixed_vt_sur ELSE 0 END;
|
||||
v_buy_margin := v_buy_margin_fixed + (v_energy_czk * v_buy_margin_pct / 100.0);
|
||||
ELSIF v_spot_price IS NULL THEN
|
||||
RETURN NULL;
|
||||
ELSE
|
||||
v_energy_czk := v_spot_price;
|
||||
-- Spot: asymetrický faktor na raw OTE (stejné p jako u kladného ×(1+p/100)):
|
||||
-- kladná raw → ×(1+p/100), záporná raw → ×(1−p/100); fixní marže jen přičíst.
|
||||
v_energy_czk := CASE
|
||||
WHEN v_spot_price >= 0 THEN
|
||||
v_spot_price * (1 + v_buy_margin_pct / 100.0)
|
||||
ELSE
|
||||
v_spot_price * (1 - v_buy_margin_pct / 100.0)
|
||||
END;
|
||||
v_buy_margin := v_buy_margin_fixed;
|
||||
END IF;
|
||||
|
||||
v_buy_margin := v_buy_margin_fixed + (v_energy_czk * v_buy_margin_pct / 100.0);
|
||||
|
||||
RETURN ROUND(
|
||||
(v_energy_czk + v_dist_rate + v_system_services + v_ote_fee + v_buy_margin)
|
||||
* (1 + v_vat_rate),
|
||||
@@ -137,8 +144,8 @@ $$;
|
||||
|
||||
COMMENT ON FUNCTION ems.fn_effective_buy_price(INT, TIMESTAMPTZ) IS
|
||||
'Efektivní nákupní cena elektřiny Kč/kWh včetně DPH.
|
||||
Režim spot: energie = OTE buy_raw + distribuce NT/VT (dle HDO) + systémové služby + OTE poplatek + marže (fix + % z energie).
|
||||
Režim fixed: energie = buy_fixed_energy_nt_czk_kwh (+ buy_fixed_vt_surcharge_czk_kwh ve VT oknech dle HDO), pak stejné příplatky a DPH.
|
||||
Režim spot: složka OTE buy_raw jako kladná → ×(1+buy_margin_percent/100), záporná → ×(1−buy_margin_percent/100); + buy_margin_fixed_czk + distribuce NT/VT (HDO) + systémové služby + OTE poplatek; pak DPH na celek.
|
||||
Režim fixed: energie = buy_fixed_energy_nt_czk_kwh (+ příplatek VT dle HDO), marže = fix + procento z této uzavřené energické složky (symetricky jako dříve); + příplatky a DPH stejně.
|
||||
DPH aplikováno na celou částku.';
|
||||
|
||||
-- ------------------------------------------------------------
|
||||
|
||||
@@ -153,10 +153,21 @@ as $fn$
|
||||
case
|
||||
when s3.market_config_id is null then null::numeric
|
||||
when s3.energy_czk is null then null::numeric
|
||||
else
|
||||
coalesce(s3.buy_margin_fixed_czk, 0)
|
||||
when upper(trim(coalesce(s3.purchase_pricing_mode, ''))) = 'FIXED'
|
||||
and s3.buy_fixed_energy_nt_czk_kwh is not null
|
||||
then
|
||||
s3.energy_czk
|
||||
+ coalesce(s3.buy_margin_fixed_czk, 0)
|
||||
+ (s3.energy_czk * coalesce(s3.buy_margin_percent, 0) / 100.0)
|
||||
end as buy_margin_part
|
||||
else
|
||||
case
|
||||
when s3.buy_spot >= 0 then
|
||||
s3.buy_spot * (1 + coalesce(s3.buy_margin_percent, 0) / 100.0)
|
||||
else
|
||||
s3.buy_spot * (1 - coalesce(s3.buy_margin_percent, 0) / 100.0)
|
||||
end
|
||||
+ coalesce(s3.buy_margin_fixed_czk, 0)
|
||||
end as buy_pre_dist_margin_sum
|
||||
from slot3 s3
|
||||
),
|
||||
slot5 as (
|
||||
@@ -167,11 +178,10 @@ as $fn$
|
||||
when s4.energy_czk is null then null::numeric
|
||||
else round(
|
||||
(
|
||||
s4.energy_czk
|
||||
s4.buy_pre_dist_margin_sum
|
||||
+ coalesce(s4.dist_rate, 0)
|
||||
+ coalesce(s4.system_services_czk_kwh, 0)
|
||||
+ coalesce(s4.ote_fee_czk_kwh, 0)
|
||||
+ s4.buy_margin_part
|
||||
) * (1 + coalesce(s4.vat_rate, 0.21)),
|
||||
6
|
||||
)
|
||||
|
||||
@@ -81,4 +81,5 @@ FROM rated r;
|
||||
COMMENT ON VIEW ems.vw_site_effective_price IS
|
||||
'Efektivní nákupní a prodejní ceny elektřiny per lokalita a 15min interval.
|
||||
rate_type NT/VT dle HDO oken; dist_rate = variabilní distribuce bez DPH.
|
||||
effective_* z fn_effective_buy_price / fn_effective_sell_price (marže, DPH u nákupu dle tarifu).';
|
||||
effective_buy z fn_effective_buy_price: u spot složky OTE asymetrická procentní marže (kladná raw ×(1+p/100), záporná ×(1−p/100)).
|
||||
effective_sell z fn_effective_sell_price (marže bez DPH).';
|
||||
|
||||
Reference in New Issue
Block a user