58 lines
1.9 KiB
Markdown
58 lines
1.9 KiB
Markdown
# 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).
|