Files
erp_naurua/db/README.md

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).