import { absenceLabel } from "@/lib/absence"; import { STATUS_STYLES } from "@/lib/colors"; import { fmtDate } from "@/lib/format"; import { deriveStatusAsOf } from "@/lib/reports"; // ── Warum der Status hier abgeleitet und nicht übergeben wird ──────── // // Vorher nahm dieses Bauteil einen fertigen Status entgegen, und beide // Aufrufer reichten `employees.status` durch — die gespeicherte Spalte. Die // Liste daneben filtert aber über die Datumsspalten (lib/employee-status- // filter.ts), und sobald die Spalte nachhängt, widersprechen sich Filter und // Beschriftung: der Filter „Ausgetreten" fand 48 Personen, von denen mehrere // als „Aktiv" beschriftet waren. // // Nachhängen kann sie regelmässig. terminate_employee (Migration // 20260814100000) setzt die Spalte nur, wenn das Austrittsdatum nicht in der // Zukunft liegt — „es gibt keinen Lauf, der das später nachzieht" steht dort // als Kommentar. Ein Austritt, der zum Zeitpunkt der Erfassung noch bevorstand, // lässt die Spalte also für immer auf „Aktiv" stehen. // // Deshalb nimmt das Bauteil jetzt die Zeile und den Stichtag und leitet // selbst ab. Die Spalte lässt sich nicht mehr hineinreichen: die zweite // Quelle ist nicht bloss ungenutzt, es gibt sie hier nicht mehr. export type StatusChipEmployee = { entry_date: string; exit_date: string | null; karenz_start_date: string | null; karenz_return_date: string | null; /** Shown instead of the generic label when the kind of absence is known. */ absence_type?: string | null; }; type StatusChipProps = { employee: StatusChipEmployee; /** Der Tag, zu dem der Status gilt — derselbe, nach dem die Seite filtert. */ asOf: string; }; export function StatusChip({ employee, asOf }: StatusChipProps) { const status = deriveStatusAsOf(employee, asOf); // Der abgeleitete Status ist 'Karenz'; absenceLabel macht daraus // "Langzeitabwesenheit", oder die konkrete Art, wenn eine erfasst ist. const label = status === "Geplant" ? `Eintritt ${fmtDate(employee.entry_date)}` : absenceLabel(status, employee.absence_type ?? null); return ( {label} ); }