fix refaktoru
This commit is contained in:
@@ -36,6 +36,53 @@ Formát: **datum (ISO)** · stručný důvod · soubory · chování / ověřen
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-24 (b) — Po deployi: export stále slabý (oprava #2)
|
||||
|
||||
**Problém:** Po prvním deployi MCP stále `max_discharge ~300 W`, KV1 `allow_charge=false` při `sell<0`, 0× `BATTERY_SELL` u BA81/KV1. home-01 částečně OK (backend běží).
|
||||
|
||||
**Příčiny z MCP:**
|
||||
|
||||
1. **Flyway `R__063` neaplikovaný** na DB → masky bez `allow_charge` u záporného výkupu (`ch_true=0` na celém runu KV1).
|
||||
2. **Fixed marže:** `_slot_profitable_battery_export` používal `buy` v slotu (predikce 4,08 Kč) místo **`charge_acquisition`** (~3,09) → večerní export vypnutý i při `sell` 3,7.
|
||||
3. **`ge_bat ≤ max_export × z_export`:** solver volil `z_export=0` → `ge_bat=0` navzdory push.
|
||||
4. **Safety SoC floor** (~91 %) na ne-high-sell večerních slotech → téměř žádný export.
|
||||
|
||||
**Opravy:**
|
||||
|
||||
| Změna | Soubor |
|
||||
|--------|--------|
|
||||
| Explicitní `allow_charge` pro `sell<0` + `pv_surplus>0` | `R__063` |
|
||||
| Marže exportu: vždy `sell > acquisition + degrad` | `planning_engine._slot_profitable_battery_export` |
|
||||
| `ge_bat` push bez násobení `z_export`; `z_export ≥ ge_bat/max_export` | `solve_dispatch` |
|
||||
| Safety export floor ne na `profitable_export_ts` | `solve_dispatch` |
|
||||
| Tvrdé `bc_pv ≥ 0.9×pv_surplus` v `charge_slots` + `sell<0` | `solve_dispatch` |
|
||||
| Penalizace shortfall 40 / 25 Kč/kWh | konstanty |
|
||||
|
||||
**Deploy checklist (povinné obojí):**
|
||||
|
||||
```bash
|
||||
# 1) SQL masky
|
||||
flyway migrate # nebo deploy skript s R__063
|
||||
|
||||
# 2) Backend
|
||||
docker compose build ems-api && docker compose up -d ems-api
|
||||
# rolling replan nebo počkat :15
|
||||
```
|
||||
|
||||
**Ověření v MCP:**
|
||||
|
||||
```sql
|
||||
-- musí být > 0 po novém runu KV1:
|
||||
select count(*) from ems.planning_run pr,
|
||||
jsonb_array_elements(pr.solver_params->'masks') m
|
||||
where pr.site_id=4 and pr.status='active'
|
||||
and (m->>'allow_charge')::boolean
|
||||
and (select effective_sell_price from ems.planning_interval pi
|
||||
where pi.run_id=pr.id and pi.interval_start=(m->>'slot')::timestamptz) < 0;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Šablona pro další záznamy
|
||||
|
||||
```markdown
|
||||
|
||||
Reference in New Issue
Block a user