Files
ems/db/migration/V027__planning_inputs_battery_semantics.sql
2026-04-03 16:03:06 +02:00

53 lines
2.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- EMS: two-tier SoC semantics (DB comments), restore arbitrage floor after V026 tuning,
-- planning_interval solver inputs, baseline load forecast accuracy tracking.
-- Semantics: min_soc = absolute LP floor; reserve_soc = economic / export discharge floor
COMMENT ON COLUMN ems.asset_battery.min_soc_percent IS
'Minimální SoC v % tvrdá spodní mez v LP (ochrana packu / BMS).';
COMMENT ON COLUMN ems.asset_battery.reserve_soc_percent IS
'Ekonomická podlaha v %: pod ní solver neplánuje „nadbytečné“ vybíjení související s exportem (MILP); nadřazuje se min_soc_percent.';
-- Obnovit rezervu 20 % tam, kde V026 sladila ekonomiku na reserve=10 společně s degradací 0.15
UPDATE ems.asset_battery
SET reserve_soc_percent = 20.00
WHERE reserve_soc_percent = 10.00
AND degradation_cost_czk_kwh = 0.1500;
ALTER TABLE ems.planning_interval
ADD COLUMN IF NOT EXISTS load_baseline_w INT,
ADD COLUMN IF NOT EXISTS pv_a_forecast_raw_w INT,
ADD COLUMN IF NOT EXISTS pv_b_forecast_raw_w INT,
ADD COLUMN IF NOT EXISTS pv_a_forecast_solver_w INT,
ADD COLUMN IF NOT EXISTS pv_b_forecast_solver_w INT;
COMMENT ON COLUMN ems.planning_interval.load_baseline_w IS
'Bazální spotřeba (W) vstupující do LP pro tento slot (stats DOW+hodina / fallback).';
COMMENT ON COLUMN ems.planning_interval.pv_a_forecast_raw_w IS
'FVE pole A výkon z DB před rolling korekcí forecastu.';
COMMENT ON COLUMN ems.planning_interval.pv_b_forecast_raw_w IS
'FVE pole B výkon z DB před rolling korekcí forecastu.';
COMMENT ON COLUMN ems.planning_interval.pv_a_forecast_solver_w IS
'FVE pole A výkon po korekci (vstup do solve_dispatch).';
COMMENT ON COLUMN ems.planning_interval.pv_b_forecast_solver_w IS
'FVE pole B výkon po korekci (vstup do solve_dispatch).';
CREATE TABLE IF NOT EXISTS ems.baseline_load_forecast_accuracy (
site_id INT NOT NULL REFERENCES ems.site(id),
interval_start TIMESTAMPTZ NOT NULL,
planning_run_id INT NOT NULL REFERENCES ems.planning_run(id),
forecast_baseline_w INT,
actual_baseline_w INT,
error_w INT,
error_pct NUMERIC(8,4),
lead_time_hours NUMERIC(6,2),
filled_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (site_id, interval_start)
);
COMMENT ON TABLE ems.baseline_load_forecast_accuracy IS
'Zpětná kontrola: plánovaný bazální výkon vs. skutečnost (load - EV - TČ za 15min z auditu).';
COMMENT ON COLUMN ems.baseline_load_forecast_accuracy.forecast_baseline_w IS 'Vstup z planning_interval při uložení plánu.';
COMMENT ON COLUMN ems.baseline_load_forecast_accuracy.actual_baseline_w IS 'Skutečný bazál W (shodná definice jako fn_update_baseline_stats).';
COMMENT ON COLUMN ems.baseline_load_forecast_accuracy.lead_time_hours IS 'Hodiny mezi created_at plánu a začátkem intervalu.';