# Materialstamm-Bereinigung – Log Laufender Log für Bereinigungsläufe gegen den Materialstamm (Dubletten aus dem Excel-Import, Datentyp-Fehler). Skripte liegen unter `backend/scripts/material_bereinigung_.py`, jeweils gegen die Live-DB auf 192.168.1.238 ausgeführt (nicht Teil der Alembic-Migrationskette, da reine Datenbereinigung, kein Schema-Wechsel). ## 2026-09-04 Ausgangslage: 172 Materialien, per Fuzzy-Matching (Normalisierung + `difflib`) auf Dubletten/Tippfehler geprüft. Skript: `material_bereinigung_2026-09-04.py`. ### Zusammengelegt (19 Paare, 172 → 153 Materialien) | Behalten | Entfernt | Grund | |---|---|---| | E 153 | E153 | Leerzeichen-Variante | | Rettungsdecke | Rettungsdecke (Leerzeichen) | Leerzeichen-Variante | | Verbandspäckchen klein | Verbandspäckchen klein (Leerzeichen) | Leerzeichen-Variante | | Thomasholder Kind | Thomas Holder Kind | Schreibweise | | Samsplint | Samsplint (Leerzeichen) | Leerzeichen-Variante | | Rollenpflaster | Rollenpflaster (Leerzeichen) | Leerzeichen-Variante | | Stethoskop | Stetoskop | Tippfehler | | Pupillenleuchte | Puppillenleuchte | Tippfehler | | Aluderm Strips 1,9x7,2 | Aluderm Stripes 1,9x7,2 | Tippfehler | | Farbkodierte Blockerspritze | Farbcodierte Blockerspritze | Schreibvariante | | Infusionssystem | Infussionssystem | Tippfehler | | Verbandspäckchen Groß | Verbandspäckchen gross | Schreibvariante | | Wundschnellverband 10x6 a 8 | Wundschnelölverband 10x6 | Tippfehler | | Handschuhe | Handschuh lose | Nutzer-Entscheidung: gleiches Material | | Schlingentupfer | Schlinggazetupfer | Nutzer-Entscheidung: gleiches Material | | Verbandtuch 60x80 | Verbandstuch 160x80 | Nutzer-Entscheidung: Tippfehler ("1" zu viel) | | Elastische Binde | Elastische Binden | Nutzer-Entscheidung: reiner Plural-Unterschied | | Beatmungsmasken S | Beatmunsmaske | Excel-Kontext + Nutzer-Bestätigung, siehe Nachtrag unten | | Rollenpflaster gross | Rollenpflaster | Kein Größenhinweis, Default-Entscheidung, siehe Nachtrag unten | Ein echter Konflikt trat bei "Aluderm Strips/Stripes" auf: beide Varianten waren bereits unabhängig in denselben Vorlagen (1, 4) bzw. demselben Objekt (1) verwendet – die Dublettenzeile wurde dort gelöscht statt umgehängt (siehe `_merge()`-Logik im Skript, UNIQUE-Constraint-Konfliktbehandlung). ### Datentyp-Fehler korrigiert - **Material 148**: Name war `"Manometer SN 1308409"` (Seriennummer im Namensfeld statt in einem Geräte-Feld), `materialtyp='ablauf_charge'`. Korrigiert zu Name `"Manometer"`, `materialtyp='geraet_sn'`, SN `1308409` als erste `geraet_instanz`-Zeile an der betroffenen Objektposition angelegt (Karte 14). ### Nachtrag 2026-09-04 (später): "Beatmunsmaske" geklärt **161 "Beatmungsmasken S"** ← **102 "Beatmunsmaske"** zusammengelegt (154 Materialien). Klärung über Original-Excel (`Rettungsrucksack.xlsx`, Zeile 50): "Beatmunsmaske" steht dort direkt nach "Beatmungsbeutel Kind" im Kinder-Abschnitt der Liste – Nutzer bestätigt Größe S. Andere Rucksäcke führen "Beatmungsmaske S/M/L" bereits einzeln, S/M/L bleiben eigenständige Materialien (keine Zusammenlegung der Größen selbst). ### Nachtrag 2026-09-04 (später): "Rollenpflaster" 151 geklärt **53 "Rollenpflaster gross"** ← **151 "Rollenpflaster"** zusammengelegt (153 Materialien). Original-Excel (Rettungsrucksack.xlsx Zeile 10, Rucksack PAX SEG.xlsx Zeile 20) nutzt in beiden Fällen unspezifiziertes "Rollenpflaster" ohne Größenangabe – kein Kontexthinweis auf schmal/breit/gross. "Rollenpflaster gross" stammt aus Handball Rucksack.xlsx (Zeile 64), "schmal"/"breit" (106/107) aus keiner der drei Repo-Excel-Dateien. Nutzer-Entscheidung mangels Evidenz: Default auf "gross". ### Nachtrag 2026-09-04 (später): Nachkontrolle + Whitespace-Trim Nach allen Merges erneute Prüfung (153 Materialien): keine exakten Dubletten, keine `materialtyp`-Fehler mehr. 6 Namen hatten führende/nachgestellte Leerzeichen (Elastische Binde, Plastiktüten, Absaugkatheter weiß, Kindermanschette, Dreieckstücher, Masken) – getrimmt, rein kosmetisch, keine Referenzen betroffen. ## 2026-09-05 Nachkontrolle (153 → 152 Materialien) nach neuen Objektanlagen (GA San, Karte "Rettungsrucksack Standart... 6 Stück"). Fuzzy-Check erneut gelaufen, alle bisher bestätigten Größenvarianten (Güdeltubus/Laryntubus/ Endotrachealtubus/Spritzen/Beatmungsmasken) weiterhin unauffällig. **89 "Blutdruckmanschette" ← 91 "Blutdruckmanschette ALT"** zusammengelegt. Echter Konflikt: beide Varianten waren bereits an denselben Objekten (Vorlage 2, Objekte 2 sowie die 6 neuen GA-San-Rucksäcke 4–9) gleichzeitig vorhanden – Konfliktzeilen wurden gelöscht statt umgehängt (UNIQUE(objekt_id, material_id)). Vor dem Merge geprüft: der einzige Historie-Treffer zu Material 91 war ein `kontrollposition`-Eintrag (istmenge 1/sollmenge 1, 2026-09-03), der korrekt auf 89 umgehängt wurde (kontrollposition hat kein UNIQUE-Constraint, kein Löschfall). Die gelöschten `objektposition`-Zeilen standen alle im Default (istmenge 0, keine Ablauf/Charge/SN/Override) – kein Datenverlust. ### Bewusst als eigenständig bestätigt (kein Fund, nur Ähnlichkeits-Rauschen) Güdeltubus/Laryntubus Gr. 2–5, Flexüle-Farbvarianten, Spritzen-Größen (2er/5er/ 10er/20er), Endotubus-Größen (3,0–8,0), "Größe 1/3/4/5" – alles legitime, unterschiedliche Produktvarianten, keine Dubletten.