Files
Laufzettel/docs/issues/020-vorgesetzter-manuell.md
florian.wilde 0060a55387
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s
feat(mitarbeiter): Vorgesetzter auch fuer Personen ohne Verzeichnis (#43)
2026-10-04 15:10:34 +00:00

3.3 KiB

#020 Vorgesetzter auch für von Hand angelegte Personen

Status: erledigt Im Tracker: #31 — die Zählung dort schließt Pull Requests ein und läuft deshalb auseinander Meilenstein: v0.2.0 Labels: phase-2, backend Geschätzt: 3 h Tatsächlich: 1 h 20 min

Ziel

Eine Person, die nicht aus dem Verzeichnis kommt, kann heute keinen Vorgesetzten haben. Das fiel in #017 auf: der Auftrag verlangt für den Beispielbestand „Maria Huber, Vorgesetzte Petra Klein“, und genau diese Zuordnung lässt sich nirgends speichern.

Woran es liegt

Mitarbeiter.vorgesetzterExterneId trägt die externeId des Vorgesetzten, und die ist nur innerhalb einer Verzeichnisquelle eindeutig. Beide Lesepfade steigen deshalb aus, wenn die Person keine Quelle hat:

  • vorgesetzterVon() in src/server/queries/mitarbeiter.ts
  • vorgesetztenLesen() in src/server/services/platzhalter.ts

Das ist für Verzeichnis-Personen richtig. Für eine von Hand angelegte Person gibt es schlicht kein Feld — {{vorgesetzter_sam}} bleibt dort immer leer.

Aufgaben

  • Entschieden: eigene Selbstbeziehung vorgesetzterId — und die befürchteten „zwei Wege zur selben Auskunft“ gibt es nicht, weil der Abgleich sie mitschreibt. vorgesetzterExterneId bleibt damit wie abteilung nur der rohe Wert des Verzeichnisses; gelesen wird allein vorgesetzterId. Die Alternative hätte manuellen Personen eine erfundene externeId geben müssen, und externeId heißt „objectGUID aus dem Verzeichnis“ — das wäre eine Lüge im Datenmodell gewesen
  • Beide Lesepfade und {{vorgesetzter}} / {{vorgesetzter_sam}} entsprechend erweitern
  • Oberfläche: Vorgesetzten auf der Mitarbeiterseite setzen und entfernen
  • Der Abgleich darf die Zuordnung nicht überschreiben, wenn das Verzeichnis keinen manager liefert — und keine Schleife zulassen (A ist Vorgesetzter von B ist Vorgesetzter von A)
  • Seed: Petra Klein als Vorgesetzte von Maria Huber eintragen

Akzeptanzkriterien

  • Test: eine von Hand angelegte Person bekommt einen Vorgesetzten, {{vorgesetzter_sam}} löst auf
  • Test: die Zuordnung gilt nur innerhalb desselben Kunden
  • Test: ein Abgleich ohne manager löscht eine von Hand gesetzte Zuordnung nicht

Beim Umsetzen dazugekommen

  • Die Migration führt bestehende Daten nach. Ohne das wäre {{vorgesetzter_sam}} nach dem Einspielen bei jeder Person aus dem Verzeichnis leer gewesen, bis der nächste Abgleich läuft — und zwar still. Dieselbe Falle wie der Seed-Schlüssel in #021: ein Umstieg, der die vorhandenen Daten nicht mitnimmt. An einem nachgebauten Vor-Zustand in der Entwicklungsdatenbank gefahren.
  • Der Seed setzt die Zuordnung nur für Personen, die derselbe Lauf angelegt hat. Eine leere Zuordnung sagt nicht, ob sie noch nie gesetzt oder im Betrieb entfernt wurde; ein zweiter Lauf darf nichts zurückdrehen.
  • Zwei Schleifen-Prüfungen, nicht eine. Die Datenbank fängt die kürzeste ab (vorgesetzterId <> id), längere brauchen den Gang nach oben im Dienst — mit Obergrenze, damit eine schon beschädigte Kette die Suche nicht ewig laufen lässt.