diff --git a/.gitignore b/.gitignore index b25c15b..1556f74 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *~ +screenshots/ diff --git a/DEVLOG.md b/DEVLOG.md index a31ac72..51634c1 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -3542,3 +3542,136 @@ Keine Commits in dieser Session. - frontend/src/pages/admin/ObjektPositionenPanel.tsx | 221 ++++++++++++++++++++++++++++++++++++++++++++++++------------------- --- +## 2026-09-04 22:51 – 22:52 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** frontend + +### Commits +- d8e3f3a Bestückungs-Pflege: Fach-Sidebar + Verwaltung linksbündig statt zentriert + +### Geänderte Dateien +- DEVLOG.md | 36 ++++++++++++++++++++++++++++++++++ +- frontend/DEVLOG.md | 43 +++++++++++++++++++++++++++++++++++++++++ +- frontend/src/pages/KontrollPage.tsx | 31 ++--------------------------- +- frontend/src/pages/admin/ObjektPositionenPanel.tsx | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ +- frontend/src/pages/admin/ObjektSection.tsx | 7 ++++++- +- frontend/src/styles/global.css | 5 ++++- +- frontend/src/utils/fachGruppierung.ts | 30 ++++++++++++++++++++++++++++ + +--- +## 2026-09-04 22:52 – 22:52 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- DEVLOG.md | 36 ++++++++++++++++++++++++++++++++++ +- frontend/DEVLOG.md | 43 +++++++++++++++++++++++++++++++++++++++++ +- frontend/src/pages/KontrollPage.tsx | 31 ++--------------------------- +- frontend/src/pages/admin/ObjektPositionenPanel.tsx | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ +- frontend/src/pages/admin/ObjektSection.tsx | 7 ++++++- +- frontend/src/styles/global.css | 5 ++++- +- frontend/src/utils/fachGruppierung.ts | 30 ++++++++++++++++++++++++++++ + +--- +## 2026-09-04 22:54 – 22:56 (1m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +- 423aece fix(admin): Fach-Sidebar bricht Layout - explizite Flex-Breite statt minWidth + +### Geänderte Dateien +- frontend/src/pages/admin/ObjektPositionenPanel.tsx | 6 +++--- + +--- +## 2026-09-04 22:57 – 22:58 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- frontend/src/pages/admin/ObjektPositionenPanel.tsx | 6 +++--- + +--- +## 2026-09-04 22:59 – 23:00 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** frontend + +### Commits +- 6f047e3 Materialliste: zweispaltiges Layout mit Suche + +### Geänderte Dateien +- frontend/src/pages/admin/MaterialSection.tsx | 137 ++++++++++++++++++++++++++++++++++++++++++++----------------------------- + +--- +## 2026-09-04 23:04 – 23:04 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- frontend/src/pages/admin/MaterialSection.tsx | 137 ++++++++++++++++++++++++++++++++++++++++++++----------------------------- + +--- +## 2026-09-04 23:09 – 23:10 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** frontend + +### Commits +- f11162e fix(admin): "Material hinzufügen" in die Kartenspalte verschoben + +### Geänderte Dateien +- frontend/src/pages/admin/ObjektPositionenPanel.tsx | 108 +++++++++++++++++++++++++++++++++---------------------------------- + +--- +## 2026-09-04 23:10 – 23:10 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- frontend/src/pages/admin/ObjektPositionenPanel.tsx | 108 +++++++++++++++++++++++++++++++++---------------------------------- + +--- +## 2026-09-04 23:14 – 23:15 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** frontend + +### Commits +- 34150d8 Objektliste: gleiches zweispaltiges Layout mit Suche wie Materialliste + +### Geänderte Dateien +- frontend/src/pages/admin/ObjektSection.tsx | 29 ++++++++++++++++++++++++----- + +--- +## 2026-09-04 23:27 – 23:27 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- frontend/src/pages/admin/ObjektSection.tsx | 29 ++++++++++++++++++++++++----- + +--- +## 2026-09-04 23:28 – 23:28 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- frontend/src/pages/admin/ObjektSection.tsx | 29 ++++++++++++++++++++++++----- + +--- diff --git a/backend/scripts/material_bereinigung_2026-09-04.py b/backend/scripts/material_bereinigung_2026-09-04.py index 20666a3..33def44 100644 --- a/backend/scripts/material_bereinigung_2026-09-04.py +++ b/backend/scripts/material_bereinigung_2026-09-04.py @@ -50,6 +50,9 @@ DUBLETTEN_PAARE = [ # PAX SEG nutzten in der Original-Excel unspezifiziertes # "Rollenpflaster" ohne Größe - Nutzer-Entscheidung: Default # auf "gross", keine Evidenz für schmal/breit) + (89, 91), # "Blutdruckmanschette" / "Blutdruckmanschette ALT" (2026-09-05 + # Nachkontrolle) - Nutzer-Entscheidung: gleiches Material, + # "ALT" war keine bewusste Sortenunterscheidung ] # Tabellen mit FK auf material.id (Stand 2026-09-04, siehe alembic-Migrationen). diff --git a/ergebnisse/material_bereinigung_log.md b/ergebnisse/material_bereinigung_log.md index faf8980..59cf582 100644 --- a/ergebnisse/material_bereinigung_log.md +++ b/ergebnisse/material_bereinigung_log.md @@ -75,6 +75,24 @@ 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/ diff --git a/frontend/DEVLOG.md b/frontend/DEVLOG.md index ecc5d82..8a872a8 100644 --- a/frontend/DEVLOG.md +++ b/frontend/DEVLOG.md @@ -136,3 +136,58 @@ Keine Commits in dieser Session. - frontend/src/pages/admin/ObjektPositionenPanel.tsx | 221 ++++++++++++++++++++++++++++++++++++++++++++++++------------------- --- +## 2026-09-04 22:58 – 22:59 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- frontend/src/pages/admin/ObjektPositionenPanel.tsx | 6 +++--- + +--- +## 2026-09-04 23:06 – 23:09 (2m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- frontend/src/pages/admin/MaterialSection.tsx | 137 ++++++++++++++++++++++++++++++++++++++++++++----------------------------- + +--- +## 2026-09-04 23:12 – 23:14 (1m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- frontend/src/pages/admin/ObjektPositionenPanel.tsx | 108 +++++++++++++++++++++++++++++++++---------------------------------- + +--- +## 2026-09-05 00:01 – 00:02 (1m) +**Beschreibung:** Claude Code Session +**Projekt:** asb-material + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- frontend/src/pages/admin/ObjektSection.tsx | 29 ++++++++++++++++++++++++----- + +--- +## 2026-09-05 00:03 – 00:06 (3m) +**Beschreibung:** Claude Code Session +**Projekt:** frontend + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- frontend/src/pages/admin/ObjektSection.tsx | 29 ++++++++++++++++++++++++----- + +--- diff --git a/frontend/src/pages/admin/ZustaendigkeitSection.tsx b/frontend/src/pages/admin/ZustaendigkeitSection.tsx index 2e94baa..4b50e3e 100644 --- a/frontend/src/pages/admin/ZustaendigkeitSection.tsx +++ b/frontend/src/pages/admin/ZustaendigkeitSection.tsx @@ -22,6 +22,7 @@ export function ZustaendigkeitSection({ standorte, objekte, benutzer, onFehler } const [standortId, setStandortId] = useState(""); const [objektId, setObjektId] = useState(""); const [wirdAngelegt, setWirdAngelegt] = useState(false); + const [suche, setSuche] = useState(""); async function laden() { setLaedt(true); @@ -90,104 +91,122 @@ export function ZustaendigkeitSection({ standorte, objekte, benutzer, onFehler } const kannAnlegen = benutzerId !== "" && ((zuordnungsart === "standort" && standortId !== "") || (zuordnungsart === "objekt" && objektId !== "")); + const sucheNormalisiert = suche.trim().toLowerCase(); + const gefiltert = sucheNormalisiert + ? eintraege.filter( + (e) => + benutzerName(e.benutzer_id).toLowerCase().includes(sucheNormalisiert) || + zielLabel(e).toLowerCase().includes(sucheNormalisiert) + ) + : eintraege; + return (

Zuständigkeit

-
-

- Wer ist materialverantwortlich für welchen Standort/welches Objekt. Standort-Zuordnung - gilt für alle Objekte dort, Objekt-Zuordnung ist eine zusätzliche, feinere Ergänzung. -

-
-
- - -
-
- - -
- {zuordnungsart === "standort" ? ( +
+
+

+ Wer ist materialverantwortlich für welchen Standort/welches Objekt. Standort-Zuordnung + gilt für alle Objekte dort, Objekt-Zuordnung ist eine zusätzliche, feinere Ergänzung. +

+
- +
- ) : ( -
- - +
+ +
- )} - + {zuordnungsart === "standort" ? ( +
+ + +
+ ) : ( +
+ + +
+ )} + +
- {laedt &&

Lade…

} - {!laedt && eintraege.length === 0 && ( -

Keine Zuständigkeiten.

- )} - {!laedt && eintraege.length > 0 && ( -
    - {eintraege.map((e) => ( -
  • - - {benutzerName(e.benutzer_id)} {zielLabel(e)} - - -
  • - ))} -
- )} +
+ setSuche(e.target.value)} + /> + {laedt &&

Lade…

} + {!laedt && gefiltert.length === 0 &&

Keine Treffer.

} + {!laedt && gefiltert.length > 0 && ( +
    + {gefiltert.map((e) => ( +
  • + + {benutzerName(e.benutzer_id)} {zielLabel(e)} + + +
  • + ))} +
+ )} +
);