# Database Migrations ## Reihenfolge 1. `db/migrations/0001_phase1_core.sql` 2. `db/migrations/0002_phase1_seed_methods.sql` 3. `db/migrations/0003_phase1_inventory_forecast.sql` 4. `db/migrations/0004_phase1_direct_sales.sql` 5. `db/migrations/0005_phase1_auto_switch_fix.sql` ## Beispielausfuehrung ```bash psql "$DATABASE_URL" -f db/migrations/0001_phase1_core.sql psql "$DATABASE_URL" -f db/migrations/0002_phase1_seed_methods.sql psql "$DATABASE_URL" -f db/migrations/0003_phase1_inventory_forecast.sql psql "$DATABASE_URL" -f db/migrations/0004_phase1_direct_sales.sql psql "$DATABASE_URL" -f db/migrations/0005_phase1_auto_switch_fix.sql ``` ## Enthaltene Kernlogik in `0001` 1. Phase-1 Tabellen, Indizes und Constraints 2. Bestands-View `v_stock_lot_balance` 3. Trigger fuer: 1. Negativbestand-Schutz 2. Auto-Anlage von `current` + `open` bei neuem Produkt 3. Auto-Status fuer Bestellpositionen (`allocated`/`partially_cancelled`/`cancelled`) 4. Auto-Chargenwechsel bei leerer `current`-Charge 5. Outbox-Events fuer Outbound-Webhook ## Hinweis ENV-Werte fuer Outbound-Zustellung (n8n URL/Secret) werden spaeter von der Applikation/Worker genutzt. Die DB-Migration legt dafuer die Outbox-Struktur bereits an. ## Abverkaufdatum und Warnung Die Migration `0003` fuehrt die interne Prognosefunktion ein: ```sql SELECT fn_refresh_sellout_forecast(60, 60); ``` UI-Read-Modell: ```sql SELECT * FROM v_stock_lot_ui_alerts ORDER BY product_name, status DESC, lot_number; ``` ## Direktverkauf (Migration `0004`) `0004` erweitert Bestellungen um `order_source` (`wix` | `direct`) und erlaubt Direktverkaeufe ohne Kontaktzuordnung (`party_id = NULL`). Zusaetzlich: 1. Guardrail: Direktbestellungen muessen `external_ref` mit `DIR-`-Praefix haben. 2. Generator-Funktion: `fn_next_direct_sales_order_ref(...)`. 3. Trigger: automatische Vergabe einer `DIR-...` Nummer, falls leer. 4. Zahlungsarten fuer Direktverkauf: `cash`, `paypal` (zus. zu bestehenden Methoden).