-- 0012_credit_quantity.sql -- -- Mengen-Gutschrift ("Belegzeile ganz oder teilweise entfernen"). -- -- Bis hierher war "entfernen" binär: scan_status kippte auf 'removed' und -- die ganze Position galt als zurückgegeben. Für Teilmengen -- ("Kunde nimmt 1 von 3 Stück nicht an") braucht es eine eigene -- Mengen-Dimension, getrennt von scanned_quantity (= verladen): -- -- required_quantity = ERP-Soll (unverändert) -- scanned_quantity = verladen / Beladen (unverändert) -- credited_quantity = Gutschrift / zurück (NEU) -- ausgeliefert = required - credited (abgeleitet) -- -- scan_status = 'removed' bedeutet künftig "voll gutgeschrieben" -- (credited == required). Teil-Gutschrift = 0 < credited < required; -- der Status bleibt dann 'done' (bzw. was er vorher war). ALTER TABLE delivery_items ADD COLUMN credited_quantity INT NOT NULL DEFAULT 0 CHECK (credited_quantity >= 0 AND credited_quantity <= required_quantity); -- Audit der Gutschrift läuft über dieselbe append-only scan_audit-Tabelle -- wie Scan/Hold. Die bestehenden delta/resulting_quantity beschreiben die -- SCAN-Dimension; für remove/unremove kommen zwei eigene, nur dort gefüllte -- Spalten dazu, damit die beiden Dimensionen sauber getrennt bleiben. -- -- credit_delta = +n bei remove, -n bei unremove -- resulting_credited_quantity = Snapshot von credited_quantity danach -- -- Beide nullable: bei scan/unscan/hold/unhold/etc. bleiben sie NULL. ALTER TABLE scan_audit ADD COLUMN credit_delta INT, ADD COLUMN resulting_credited_quantity INT CHECK (resulting_credited_quantity IS NULL OR resulting_credited_quantity >= 0);