Seed the OM model from scratch, and stop writing dates through UTC
Alle Daten gelöscht und neu aufgebaut: 60 Organisationseinheiten, 133 Jobs,
823 Planstellen, 852 Personen, 852 Besetzungen. Die Anmeldekonten bleiben
stehen — ein Seed, der sich selbst aus der Anwendung aussperrt, ist keiner.
Der Baum kommt aus buildOrg(); der Seed entscheidet nur noch, wer welche
Planstelle besetzt. Damit fällt die halbe Datei weg: keine division_id,
team_id, manager_id, org_level, is_lead mehr auf der Person.
Zwei Dinge, die das Altmodell nicht abbilden konnte, stehen jetzt bewusst in
den Daten:
- Vakanz ist eine Planstelle ohne laufende Besetzung, keine eigene Tabelle.
14 Planstellen sind heute unbesetzt, drei davon mit einem Eintritt in der
Zukunft — die Besetzung beginnt später, die Planstelle existiert schon.
- Ausgetretene sind Vorgänger:innen auf heute besetzten Planstellen, nicht
Karteileichen an einem Team. Vorher liessen sie deren Planstellen als
vakant erscheinen.
Drei Teamleitungen sind unbesetzt und zwei langzeitabwesend, damit die
Hochroll-Regel überhaupt Daten hat: 76 der 809 Berichtslinien weichen von der
formalen ab. Genau eine Person hat keine Vorgesetzte, die Geschäftsführung.
Beim ersten scharfen Lauf hat der SVNR-Trigger mitten im Einfügen abgebrochen,
mit bereits geleerter Datenbank. Ursache war nicht die Prüfziffer, sondern
isoDate(): es ging über toISOString(), während makeSvNummer die lokalen
Datumsteile liest. In Österreich verschiebt das jedes Datum um einen Tag — das
gespeicherte Geburtsdatum passte nicht mehr zu dem in der SV-Nummer codierten.
isoDate rechnet jetzt lokal, wie der Rest des Seeds auch.
Damit so etwas nicht wieder erst die Datenbank leerräumt: pruefeInvarianten()
läuft *vor* dem Löschen und prüft, was sonst erst die Unique-Indizes und
Trigger abfangen — doppelte Besetzungen, überlappende Historie, Ereignisse
nach dem Austritt, und jede SV-Nummer gegen ihr Geburtsdatum. Mit --dry-run
schreibt der Seed gar nichts und meldet nur, was entstehen würde.
This commit is contained in:
@@ -169,6 +169,12 @@ drop trigger if exists trg_track_employee_assignment on employees;
|
||||
drop function if exists fn_track_employee_assignment();
|
||||
drop table if exists employee_assignments;
|
||||
|
||||
-- Leitet division_id aus team_id ab und haengt damit an einer Spalte, die
|
||||
-- gleich faellt. Im neuen Modell uebernimmt die Einheit der Planstelle
|
||||
-- diese Rolle, der Trigger wird ersatzlos entfernt.
|
||||
drop trigger if exists trg_employees_set_org_unit on employees;
|
||||
drop function if exists fn_set_employee_org_unit();
|
||||
|
||||
-- Die View selektiert team_id/division_id/manager_id/org_level/is_lead und
|
||||
-- blockiert damit das Entfernen dieser Spalten. Sie wird von der Anwendung
|
||||
-- nirgends benutzt und ersatzlos entfernt; die Ableitung über
|
||||
@@ -203,6 +209,12 @@ drop table if exists teams;
|
||||
drop table if exists departments;
|
||||
drop table if exists divisions;
|
||||
|
||||
-- Mit der positions-Tabelle verschwindet ihr Trigger, nicht aber dessen
|
||||
-- Funktion und die Nummernvergabe, die nur als Spaltenvorgabe dort benutzt
|
||||
-- wurde. om_positions vergibt seine Nummern selbst.
|
||||
drop function if exists fn_set_position_org_unit();
|
||||
drop function if exists generate_position_number();
|
||||
|
||||
-- ═══ 5. Mutationen im neuen Modell ═══════════════════════════════
|
||||
-- Die Berichtslinie wird nicht mehr mitgeschrieben, sondern abgeleitet.
|
||||
-- Das entfernt aus jeder dieser Funktionen die Manager-Nachführung — beim
|
||||
|
||||
Reference in New Issue
Block a user