import type { EmploymentStatus } from "./supabase/types"; // Langzeitabwesenheit. // // The database still stores the employment status as 'Karenz' — renaming an // enum value would mean rewriting every stored function that spells it, for // a label change (see supabase/migrations/*_absence_type.sql). So the value // is mapped to its display name here, in the one place the UI reads it from. // Nur echte Abwesenheiten. Eine Teilzeit ist keine: wer in Bildungs-, // Pflege-, Eltern- oder Wiedereingliederungsteilzeit ist, arbeitet — nur // weniger. Als „Langzeitabwesenheit" geführt, verschwand die Person aus dem // Bestand, verlor ihre Berichtslinie an eine Vertretung und zählte in // Auswertungen nicht mehr mit, obwohl sie jede Woche im Haus war. // // Die vier sind deshalb hierher gewandert, wo sie hingehören: zur // Stundenänderung (siehe STUNDEN_GRUENDE) und zur Rückkehr aus einer // Abwesenheit (RUECKKEHR_GRUENDE). export const ABSENCE_TYPES = [ "Wochenhilfe (Mutterschutz)", "Elternkarenz (inkl. Väterkarenz)", "Papamonat", "Bildungskarenz", "Präsenzdienst", "Zivildienst", "Langer Krankenstand", "Pflegekarenz", "Familienhospizkarenz", "Sabbatical", ] as const; export type AbsenceType = (typeof ABSENCE_TYPES)[number]; export function isAbsenceType(value: string | null | undefined): value is AbsenceType { return ABSENCE_TYPES.includes(value as AbsenceType); } /** * Warum jemand nach einer Abwesenheit mit weniger Stunden zurückkommt. * * Beides sind Ansprüche, keine freien Vereinbarungen — und beide beginnen * typischerweise genau dann, wenn die Abwesenheit endet. */ export const RUECKKEHR_GRUENDE = ["Wiedereingliederungsteilzeit", "Elternteilzeit"] as const; /** * Warum sich die Wochenstunden ändern. * * Der erste Wert ist der Normalfall; die beiden anderen sind gesetzlich * geregelte Teilzeiten, die man später wiederfinden können muss — im * Zweifel Jahre danach, wenn jemand fragt, warum die Stunden damals sanken. */ export const STUNDEN_GRUENDE = ["Vertragliche Stundenänderung", "Bildungsteilzeit", "Pflegeteilzeit"] as const; export type StundenGrund = (typeof STUNDEN_GRUENDE)[number]; /** Display names for the stored status values. */ const STATUS_LABELS: Record = { Aktiv: "Aktiv", Karenz: "Langzeitabwesenheit", Geplant: "Geplant", Ausgetreten: "Ausgetreten", }; export function statusLabel(status: EmploymentStatus): string { return STATUS_LABELS[status] ?? status; } /** * The chip and the detail header show the specific kind when it is known — * "Bildungskarenz" says more than "Langzeitabwesenheit". Absences recorded * before the type existed have none, and fall back to the generic name * rather than to a guess. */ export function absenceLabel(status: EmploymentStatus, absenceType: string | null | undefined): string { if (status !== "Karenz") return statusLabel(status); return isAbsenceType(absenceType) ? absenceType : STATUS_LABELS.Karenz; }