import type { Weekday } from "./types"; // Die Wochentage in ihrer natürlichen Reihenfolge — an einer Stelle. // // Sie stand bisher viermal im Baum: in RoleEmploymentFields, in lib/reports, // im Mitarbeiter-Export und in lib/import/schema. Vier Kopien einer Liste, // die sich nie ändert, sind für sich genommen harmlos; was nicht harmlos war, // ist die fehlende fünfte Verwendung — das Sortieren beim Speichern. // // ── Warum sortiert gespeichert wird ───────────────────────────────── // // `work_days` wurde in **Klickreihenfolge** abgelegt (so stand es auch in // docs/datenkatalog.md, als bewusste Entscheidung). Damit sind „Mo, Di" und // „Di, Mo" zwei verschiedene Werte für dieselbe Aussage, und // change_employee_data vergleicht die alte mit der neuen Fassung über // `array_to_string(work_days, ', ')`. Wer die Tage nur noch einmal anklickte, // um sie zu prüfen, erzeugte damit eine Vertragsänderung in der Personalakte // und einen Eintrag im Protokoll — über nichts. // // Die Reihenfolge trägt keine Bedeutung: welche Tage jemand arbeitet, ist // eine Menge, keine Folge. Sortiert gespeichert fällt der Scheinunterschied // weg, ohne dass der Vergleich in SQL etwas davon wissen muss. // // Der Bestand kann noch unsortierte Zeilen enthalten (aus dem Massenimport // oder von früher). Sie richten sich beim nächsten Speichern von selbst — // und *dieser* eine Eintrag in der Historie ist dann keine Falschmeldung, // sondern die Aufzeichnung genau dieser Berichtigung. export const WOCHENTAGE: readonly Weekday[] = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] as const; const RANG = new Map(WOCHENTAGE.map((t, i) => [t, i] as const)); /** * Die Tage in Wochenreihenfolge, ohne Dubletten. * * Unbekanntes wandert ans Ende statt verworfen zu werden: die Spalte ist ein * `text[]` ohne Prüfung, und was der Massenimport einmal hineingeschrieben * hat, soll eine Sortierung nicht stillschweigend löschen. */ export function sortiereWochentage(tage: readonly T[]): T[] { return [...new Set(tage)].sort((a, b) => (RANG.get(a as Weekday) ?? 99) - (RANG.get(b as Weekday) ?? 99)); }