# 4.2. Migrace z Imwhooseru

PEVA Connector vznikl vyčleněním importu PEvA z nástroje Imwhooser. Tabulky PEvA (`pv_fund`, `property` a fond-only část `elza_queue`) jsou v obou aplikacích shodné, takže PEVA Connector umí převzít existující databázi Imwhooseru.

## 4.2.1. Idempotentní schéma

Migrace databáze (Liquibase) jsou navržené tak, aby fungovaly ve dvou scénářích:

> - Nová (prázdná) databáze - schéma se vytvoří. Tabulka `elza_queue` se vytvoří v „fund-only“ podobě (bez sloupce `entity_id`).

> - Existující databáze Imwhooseru v „PEVA módu“ - tabulky `pv_fund`, `property` i `elza_queue` již existují. Liquibase je díky podmínkám (`preConditions onFail="MARK_RAN"`) detekuje, přeskočí jejich vytváření a převezme je i s daty.

Stejný changelog tedy funguje pro čistou instalaci i pro převzetí.

Poznámka

Pokud byl původní Imwhooser nasazen ze staršího (snapshotového) buildu, může jeho `elza_queue` postrádat sloupce `create_time`, `send_time` nebo `scope` (byly do Imwhooseru přidány později). Protože tabulka existuje, přeskočí se její `createTable` (`MARK_RAN`) a tyto sloupce by jinak chyběly - projeví se to při startu chybou `column ... create_time does not exist`. Idempotentní changelog je proto doplní samostatnými `addColumn` kroky (stejně jako u `pv_fund.department_name` / `department_number`), takže převzetí snapshotové databáze funguje bez ručního zásahu.

## 4.2.2. Doporučený postup migrace

1. Vypněte stahování PEvA v Imwhooseru (`peva.processing.enabled: false`) a nechte doběhnout odeslání případných čekajících fondů z `elza_queue`, aby fondy do Elzy posílala jen jedna aplikace.

2. Vytvořte kopii databáze Imwhooseru a nasměrujte na ni PEVA Connector (vlastní databáze - obě aplikace nesdílejí jednu živou DB, aby se znovu nepropojily přes `elza_queue`).

3. Spusťte PEVA Connector. Idempotentní changelog převezme `pv_fund`, `property` i čekající fond záznamy.

4. Ověřte stahování z PEvA a odesílání do Elzy (viz Monitorování).

## 4.2.3. Úklid převzaté databáze

PEVA Connector je samostatná, odlehčená aplikace a entity-side schéma Imwhooseru (tabulky `imw_*` / `*_person` a sloupec `elza_queue.entity_id`) nevlastní ani nevyužívá. Při převzetí databáze je proto automaticky a nevratně odstraní - úklidový changelog se spustí vždy při startu, bez nutnosti zvláštního nastavení. Jde o trvalé „odpojení“ od Imwhooseru.

Konkrétně se odstraní:

> - sloupec `elza_queue.entity_id` (včetně cizího klíče a indexu),

> - tabulky `imw_*` / `*_person` (entity-side schéma Imwhooseru).

Každý krok je idempotentní (`preConditions onFail="MARK_RAN"`): na čisté nebo již uklizené databázi se přeskočí, takže opakované starty ani nová instalace ničemu nevadí.

Varování

Úklid je nevratný a běží automaticky při prvním startu nad převzatou databází. Migrujte proto vždy nad kopií databáze (viz doporučený postup výše) a nikdy nesměřujte PEVA Connector na živou databázi, kterou ještě používá Imwhooser.

## 4.2.4. Úklid na straně Imwhooseru

Po odpojení je možné v původním Imwhooseru odstranit již nevyužívané PEvA tabulky a sloupce (`pv_fund`, `property`, `elza_queue.fund_id`). Tato úprava se provádí v Imwhooseru, nikoli v PEVA Connectoru.