-- 0030_erp_sync_runs.sql -- -- Dokumentation der ERP-Import-Läufe (Sync mit ERPframe). Jeder Lauf — egal ob -- vom täglichen Scheduler, vom Startup-Catch-up oder manuell über den -- Admin-Endpunkt (`POST /admin/import-erp`) — hinterlässt hier eine Zeile. -- Zweck: Audit/Nachvollziehbarkeit ("wann wurde für welches Tourdatum gesynct, -- mit welchem Ergebnis"). -- -- Zusätzlich Grundlage für den Startup-Catch-up: beim Serverstart (Erststart -- ODER nach längerer Unterbrechung, wenn der Cron-Zeitpunkt verpasst wurde) -- prüft das Backend, ob für das Zieldatum (morgen) bereits ein ERFOLGREICHER -- Lauf dokumentiert ist — wenn nicht, synct es nach. CREATE TABLE erp_sync_runs ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), -- Tourdatum, für das gesynct wurde (NICHT der Zeitpunkt des Laufs). target_date date NOT NULL, -- Auslöser: 'scheduler' | 'startup' | 'manual'. trigger text NOT NULL, -- true = Lauf lief durch (ERP gelesen + verarbeitet); ein einzelner -- fehlerhafter Beleg (tours_failed > 0) zählt weiterhin als erfolgreicher -- Lauf. false = Lauf komplett gescheitert (z. B. ERP nicht erreichbar), -- dann ist `error` gesetzt. success boolean NOT NULL, tours_total integer NOT NULL DEFAULT 0, tours_ok integer NOT NULL DEFAULT 0, tours_failed integer NOT NULL DEFAULT 0, drivers_provisioned integer NOT NULL DEFAULT 0, error text, created_at timestamptz NOT NULL DEFAULT now() ); -- Schnelle Abfrage „gibt es einen ERFOLGREICHEN Sync für Datum X?" (Catch-up). CREATE INDEX erp_sync_runs_date_success ON erp_sync_runs (target_date) WHERE success; -- Chronologische Sicht fürs Audit (neueste zuerst). CREATE INDEX erp_sync_runs_created_at ON erp_sync_runs (created_at DESC);