Files
Holzleitner---Backend--aktu…/migrations/0020_delivery_completions.sql
Dennis Nemec 6a9b5872e1 Backend-Arbeitsstand: ERP-Sync, Lieferlebenszyklus, Reports + config.toml
Bringt das Backend vom initialen Skeleton auf den aktuellen Arbeitsstand
(Clean Architecture: domain → application → infrastructure → api).

Wesentliche Bereiche:
- ERP-Anbindung (MSSQL-Pull der Touren, Import-Scheduler, Rückschreiben)
- Lieferlebenszyklus: Scan/Hold/Cancel/Complete, Gutschriften, Notizen,
  Bild-Anhänge, Unterschriften, PDF-Lieferreport → DOCUframe
- Stammdaten: Kunden, Artikel, Lager, Zahlungsarten, Services
- Keycloak-JWT-Gate + Fahrer-Provisionierung via Admin-API
- Admin-API-Key-Gate (X-Admin-Api-Key) für Maschinen-Endpunkte

Jüngste Änderungen dieser Session:
- Belegspezifische Kontaktdaten: alle ERP-Adressen (Beleg-/Liefer-/
  Rechnungsadresse, Ansprechpartner, Kundenstamm) mit Telefon/Mobil/
  E-Mail werden gesynct (Migration 0029, MSSQL-Query, TourDetails)
- Konfiguration von .env (envy/dotenvy) auf config.toml (toml/serde)
  umgestellt; Vorlage config.example.toml, Pfad via HOLZLEITNER_CONFIG

Nicht im Repo (per .gitignore): config.toml (Secrets), data/ (Laufzeit-/
Kundendaten), demo.mp4, .claude/, variocontrol-ai/.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 17:52:58 +02:00

41 lines
1.8 KiB
SQL

-- 0020_delivery_completions.sql
--
-- Abschluss-Beleg einer Lieferung: dokumentiert den Moment, in dem Kunde
-- und Fahrer unterschreiben und die Lieferung auf `completed` geht.
--
-- Genau EINE Zeile pro Lieferung (PK = delivery_id). Der Abschluss ist
-- terminal — ein zweiter Versuch wird vom Use Case über das
-- `state == active`-Gate abgelehnt; existiert die Zeile schon und steht
-- die Lieferung auf `completed`, liefert der Server idempotent denselben
-- Stand zurück.
--
-- Die beiden Unterschriften liegen NICHT in der DB, sondern als PNG-Dateien
-- lokal im Backend-Server (Pfad konfigurierbar). Hier stehen nur die
-- relativen Datei-Referenzen.
--
-- Die Checkbox-Bestätigungen des Kunden werden hier dauerhaft dokumentiert:
-- * receipt_confirmed — „Ware ordnungsgemäß erhalten / Aufbau korrekt"
-- * notes_acknowledged — „Anmerkungen zur Lieferung zur Kenntnis genommen"
-- `acknowledged_note_ids` hält die konkreten Notiz-IDs fest, die zum
-- Zeitpunkt des Abschlusses sichtbar waren und mit-bestätigt wurden
-- (Audit-Robustheit, falls später Notizen dazukommen/wegfallen).
CREATE TABLE delivery_completions (
delivery_id UUID PRIMARY KEY REFERENCES deliveries(id) ON DELETE CASCADE,
-- Relative Pfade/Referenzen der lokal gespeicherten Signatur-PNGs.
customer_signature_path TEXT NOT NULL,
driver_signature_path TEXT NOT NULL,
-- Dokumentierte Checkbox-Bestätigungen des Kunden.
receipt_confirmed BOOLEAN NOT NULL,
notes_acknowledged BOOLEAN NOT NULL,
acknowledged_note_ids UUID[] NOT NULL DEFAULT '{}',
-- Akteur: Personalnummer aus dem JWT (Pflicht), Fahrzeug optional.
completed_by_personalnummer BIGINT NOT NULL,
completed_by_car_id UUID,
completed_at TIMESTAMPTZ NOT NULL DEFAULT now()
);