fix zaporne spot ceny v nakupu
This commit is contained in:
@@ -211,31 +211,17 @@ CREATE TABLE market_interval_price (
|
||||
-- SELECT create_hypertable('market_interval_price', 'interval_start');
|
||||
```
|
||||
|
||||
### View: `market_vw_site_effective_price`
|
||||
Efektivní ceny per site – dopočítané z raw + marže. Neukládá se, počítá se za běhu.
|
||||
### View: `vw_site_effective_price` (`ems`)
|
||||
|
||||
Efektivní ceny per site — neukládá se; nákupní cena přes **`ems.fn_effective_buy_price(site_id, interval_start)`** (zahrnuje HDO NT/VT, distribuci, systémové služby, OTE poplatek, marži a DPH podle tarifu). Pro **spot** je procentní marže na `buy_raw` asymetrická: kladná raw ×`(1+p/100)`, záporná ×`(1−p/100)`; viz `docs/04-modules/market-prices.md` a repeatable `db/routines/R__011_fn_effective_price.sql`.
|
||||
|
||||
Prodejní strana nadále **`ems.fn_effective_sell_price`**: raw + prodejní marže (bez DPH). Zjednodušený vzorec bez distribuce jen pro ilustraci prodeje:
|
||||
|
||||
```sql
|
||||
CREATE VIEW market_vw_site_effective_price AS
|
||||
SELECT
|
||||
smc.site_id,
|
||||
mip.interval_start,
|
||||
mip.interval_end,
|
||||
mip.buy_raw_price_czk_kwh,
|
||||
mip.sell_raw_price_czk_kwh,
|
||||
-- efektivní nákupní cena
|
||||
mip.buy_raw_price_czk_kwh
|
||||
+ smc.buy_margin_fixed_czk
|
||||
+ (mip.buy_raw_price_czk_kwh * smc.buy_margin_percent / 100)
|
||||
AS effective_buy_price_czk_kwh,
|
||||
-- efektivní prodejní cena
|
||||
mip.sell_raw_price_czk_kwh
|
||||
+ smc.sell_margin_fixed_czk
|
||||
+ (mip.sell_raw_price_czk_kwh * smc.sell_margin_percent / 100)
|
||||
AS effective_sell_price_czk_kwh
|
||||
FROM market_interval_price mip
|
||||
CROSS JOIN site_market_config smc
|
||||
WHERE smc.valid_to IS NULL -- aktuálně platná konfigurace
|
||||
OR now() BETWEEN smc.valid_from AND smc.valid_to;
|
||||
-- pouze analogie k sell (nákup v produkci vždy přes funkci výše):
|
||||
mip.sell_raw_price_czk_kwh
|
||||
+ smc.sell_margin_fixed_czk
|
||||
+ (mip.sell_raw_price_czk_kwh * smc.sell_margin_percent / 100)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -114,10 +114,19 @@ Marže se konfigurují v `site_market_config`:
|
||||
| Parametr | Typ | Příklad |
|
||||
|---|---|---|
|
||||
| `buy_margin_fixed_czk` | Kč/kWh | 0.05 (5 haléřů/kWh) |
|
||||
| `buy_margin_percent` | % | 2.5 |
|
||||
| `buy_margin_percent` | % | 2.5 (nebo 9 u obchodníka ×1.09 / ×0.91, viz níže) |
|
||||
| `sell_margin_fixed_czk` | Kč/kWh | -0.02 (srážka) |
|
||||
| `sell_margin_percent` | % | 0 |
|
||||
|
||||
**Nákup v režimu `spot`** (`purchase_pricing_mode = 'spot'`): skutečná logika je v `ems.fn_effective_buy_price` (volá ji `vw_site_effective_price`, plán, audit). Složka **OTE `buy_raw`** před distribucí / poplatky / DPH:
|
||||
|
||||
- **`buy_raw_price_czk_kwh ≥ 0`:** energie ze spotu se násobí **`(1 + buy_margin_percent/100)`** (např. 9 % → ×1.09 na tuto složku), pak se přičtou `buy_margin_fixed_czk`, distribuce NT/VT, systémové služby, poplatek OTE a nakonec DPH přes celek.
|
||||
- **`buy_raw_price_czk_kwh < 0`:** stejný procentní parametr se uplatní jako **`(1 − buy_margin_percent/100)`** (např. 9 % → ×0,91 na zápornou spotovou složku), aby obchodní marže záporné ceny „nezesilovala“ směrem k ještě nižší (dražší) hodnotě.
|
||||
|
||||
**Režim `FIXED`** (uzavřená cena + příplatek VT): procentní marže zůstává **symetricky** jako `fix + uzavřená_energie × (buy_margin_percent/100)` jako dříve — asymmetric platí jen pro čistý spot ze `market_interval_price`.
|
||||
|
||||
Denní ekonomika v DB (`ems.fn_economics_daily_for_window`, repeatable `R__068_fn_economics_daily_month.sql`) musí používat stejnou kombinaci jako `fn_effective_buy_price` (komentář ve funkci).
|
||||
|
||||
**Zelený bonus** není součástí `fn_effective_sell_price` ani view efektivní prodejní ceny – jde o samostatný příjem z výroby, viz níže.
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user