feat(stammdaten): Mitarbeiter, Abteilungen und Geraete (#25)
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s

This commit was merged in pull request #25.
This commit is contained in:
2026-09-25 10:52:44 +00:00
parent e3d80e5982
commit f85bc87324
81 changed files with 6784 additions and 59 deletions
+58 -2
View File
@@ -13,11 +13,12 @@ als Unterpunkte mit Aufgabe und Dauer.
| #008 | M3 – Betriebsmodus und Kunden | 1 h 20 min |
| #009 | M4 – Vorlagen-Versionierung im Service | 1 h 20 min |
| #010 | M5 – Vorlagen-Editor | 2 h 10 min |
| | **Summe** | **9 h** |
| #011 | M6 – Mitarbeiter, Abteilungen, Geräte | 2 h 15 min |
| | **Summe** | **11 h 15 min** |
| Meilenstein | Tatsächlich | Status |
|---|---|---|
| v0.1.0 | 9 h | in Arbeit |
| v0.1.0 | 11 h 15 min | in Arbeit |
---
@@ -396,3 +397,58 @@ als Unterpunkte mit Aufgabe und Dauer.
- #011 Mitarbeiter, Abteilungen und Geräte: Listen mit Suche, Mitarbeiterseite mit Historie,
Abteilungen mit Ziel-OU und Standardgruppen, Geräte mit CSV-Import.
---
## 2026-09-25 · Sitzung 7 · 10:30–12:55
**Issue:** #011 (M6)
**Version:** 0.1.0
### Erledigt
- Mitarbeiter: Dienst mit Sperre für abgeglichene Stammdaten, Liste mit Suche über vier Kennungen,
Personenseite mit Geräten, Vorgesetztem und Platz für die Laufhistorie
- Abteilungen unter Admin: Ziel-OU, Standardgruppen, Mail-Domain, dazu die Liste der
Abteilungsnamen, die bei Personen vorkommen, aber nicht gepflegt sind
- Geräte samt CSV-Import (Sub-Agent): eigener Zerleger in `src/lib/csv.ts`, Tag-Code-Vergabe in
einer Transaktion, Archivieren statt Löschen
- Neues Recht `mitarbeiterBearbeiten`; die Seitenleiste führt Personen und Geräte unter einem
Eintrag, im Modus Dienstleistung anders beschriftet
- Unabhängiger Review: zwei Blocker, sieben weitere Befunde, alle abgearbeitet
- **610 Tests** grün (vorher 601 vor dem Review), dazu 18 E2E-Abläufe
### Entscheidungen
- **Ein CSV-Wert reicht nicht über die Zeile hinaus.** Das Format erlaubt es, und `csvErzeugen`
schreibt es auch so — beim **Lesen** einer fremden Datei ist es trotzdem die schlechtere Annahme:
ein Umbruch in einem Hostnamen kommt nicht vor, ein vergessenes schließendes Anführungszeichen
ständig. Mit der Grenze endet der Schaden an der Zeile, in der er beginnt; ohne sie verschluckt
eine kaputte Zelle alle Folgezeilen, und der Import meldet dafür Erfolg.
- **Eine abgeglichene Person ist vollständig gesperrt**, nicht nur teilweise. Alle Stammdaten
kommen aus dem Verzeichnis, auch der Titel. Übrig bleibt genau ein Weg: aktivieren und
deaktivieren — und der muss bleiben, weil das Offboarding nicht auf den nächsten Abgleich wartet.
- **Löschen eines Geräts verlangt `verwaltung`.** Archivieren ist der Normalfall. Löschen ist nicht
rücknehmbar und verbrennt den Tag-Code für immer — der gedruckte Aufkleber ist danach wertlos.
- **Die Lesemodelle liefern den Kundennamen immer, die Seite entscheidet über die Anzeige.**
Vorher entschied das eine Lesemodell nach `istEigeneOrganisation` und das andere gar nicht.
- **Die Mitarbeitersuche ist ein eigenes Bauteil**, bevor sie zum zweiten Mal gebraucht wird: #013
und #014 brauchen sie wieder, und dreimal abgeschrieben vergisst man den Umschalter „auch
deaktivierte“ zweimal.
### Probleme
- **Der schwerste Fehler war wieder einer, der Erfolg meldet.** Der CSV-Import hat Zeilen
verschluckt und „3 von 3 angelegt“ gesagt. Gefunden hat ihn der Review mit einer Datei, wie sie
aus einem halb ausgefüllten Excel kommt — meine eigenen Tests prüften nur saubere Dateien und die
eine Ausnahme, die ohnehin geworfen wurde.
- **Zwei Funktionen im selben Modul widersprachen sich**: `abteilungsListe` schlüsselte nach Kunde
und Name, `ungepflegteAbteilungen` nach Namen allein. Nebeneinander geschrieben, nicht
nebeneinander gelesen.
- **Vierter Meilenstein in Folge mit einem Kommentar, der eine Zusage macht, die der Code nicht
hält.** Diesmal versprach er zwei verschiedene Meldungen, gerendert wurde eine.
### Nächster Schritt
- #012 Platzhalter, Namensregeln und Escaping: die reine Service-Schicht, aus der die fertigen
PowerShell-Befehle entstehen — mit dichter Testabdeckung, denn hier darf nichts schiefgehen.