Migration 20260917100000. Ruecknahme einer eigenen Entscheidung, nach der
Erklaerung des Kunden am 17.09.2026.
Wir hatten den Anstoss aus der Beendigungsart abgeleitet — Kuendigung AN
gilt als freiwillig, Kuendigung AG als unfreiwillig. Das schien sauberer,
weil es zwei Felder ausschliesst, die einander widersprechen koennen.
In Oesterreich stimmt es nicht. Die einvernehmliche Aufloesung ist hier der
Regelfall und sagt ueber den Anstoss nichts aus: sie kann von der Person
ausgehen ("ich moechte kuendigen", worauf einvernehmlich aufgeloest wird,
damit das AMS zahlt) oder vom Dienstgeber ("ich will die Trennung, dafuer
gibt es eine Abfindung"). Dieselbe Beendigungsart, zwei gegensaetzliche
Antworten — und das ist genau die Unterscheidung, auf die es bei einer
Fluktuationsanalyse ankommt. Die Ableitung haette die Haelfte der Faelle
still falsch einsortiert.
Im Formular steht jetzt die Beendigungsart oben mit allen Werten, darunter
"Freiwillig oder unfreiwillig". Keine der beiden schraenkt die andere ein.
Der abgeleitete Hinweis unter der Beendigungsart ist weg — er erschien von
selbst und sah aus wie ein Fehler des Formulars.
Die Angabe ist freiwillig: der Bestand traegt sie nicht, und ein
Befristungsablauf geschieht auf niemandes Betreiben. Ob sie fuer gewoehnliche
Austritte Pflicht werden soll, ist eine Frage an den Kunden.
rehire_employee raeumt sie mit dem Austritt weg. Die Funktion ist dabei
ausgeschrieben worden; die Selbstpruefung haelt fest, dass die beiden
Umstellungen, die sie schon hinter sich hatte (app_current_user_id statt
auth.uid, fester search_path), dabei nicht verlorengehen — genau das ist der
Fehler, den ein create-or-replace aus einer alten Vorlage leise macht.
60 lines
2.4 KiB
TypeScript
60 lines
2.4 KiB
TypeScript
import type { Austrittsart } from "./types";
|
|
|
|
// Wie ein Dienstverhältnis endet — und auf wessen Betreiben.
|
|
//
|
|
// Zwei Angaben, die **unabhängig** voneinander erhoben werden. Das ist die
|
|
// Korrektur einer früheren Entscheidung, und der Grund gehört hierher, damit
|
|
// sie niemand versehentlich rückgängig macht:
|
|
//
|
|
// Wir hatten „freiwillig / unfreiwillig" aus der Beendigungsart abgeleitet —
|
|
// Kündigung AN gilt als freiwillig, Kündigung AG als unfreiwillig, und so
|
|
// fort. Das schien sauberer, weil es zwei Felder ausschliesst, die einander
|
|
// widersprechen können.
|
|
//
|
|
// In Österreich stimmt es nicht. Der Kunde hat es am 17.09.2026 am Beispiel
|
|
// erklärt: die einvernehmliche Auflösung ist hier der Regelfall und sagt über
|
|
// den Anstoss nichts aus. Sie kann von der Person ausgehen — „ich möchte
|
|
// kündigen", worauf einvernehmlich aufgelöst wird, damit das AMS zahlt. Sie
|
|
// kann vom Dienstgeber ausgehen — „ich will die Trennung, dafür gibt es eine
|
|
// Abfindung". Dieselbe Beendigungsart, zwei gegensätzliche Antworten.
|
|
//
|
|
// Was sich nicht aus den Daten ergibt, muss erhoben werden. Die Ableitung
|
|
// hätte die Hälfte der Fälle still falsch einsortiert.
|
|
//
|
|
// Deshalb gibt es hier auch keine Zuordnung mehr von Art zu Grund und keine
|
|
// eingeschränkte Auswahl: die Beendigungsart bietet immer alle Werte an.
|
|
|
|
export const BEENDIGUNG_NO_SHOW = "No Show";
|
|
|
|
/**
|
|
* Die Beendigungsarten.
|
|
*
|
|
* „No Show" steht am Ende und getrennt: es ist kein Austritt im gewohnten
|
|
* Sinn, sondern der Fall, dass jemand nie angetreten ist.
|
|
*/
|
|
export const BEENDIGUNGSART_WERTE: readonly string[] = [
|
|
"Einvernehmliche Auflösung",
|
|
"Kündigung AN",
|
|
"Kündigung AG",
|
|
"Befristungsablauf",
|
|
"Pensionierung",
|
|
"Entlassung",
|
|
// Aus dem Workshop nachgetragen: in der Probezeit kann jede Seite ohne
|
|
// Frist und ohne Grund beenden; welche es war, ist die Unterscheidung, die
|
|
// sonst verlorenginge.
|
|
"Dienstnehmerseitige Beendigung in Probezeit",
|
|
"Dienstgeberseitige Beendigung in Probezeit",
|
|
BEENDIGUNG_NO_SHOW,
|
|
] as const;
|
|
|
|
export const AUSTRITTSART_LABELS: Record<Austrittsart, string> = {
|
|
freiwillig: "Freiwilliger Austritt",
|
|
unfreiwillig: "Unfreiwilliger Austritt",
|
|
};
|
|
|
|
export const AUSTRITTSARTEN: readonly Austrittsart[] = ["freiwillig", "unfreiwillig"] as const;
|
|
|
|
export function istAustrittsart(wert: string | null | undefined): wert is Austrittsart {
|
|
return AUSTRITTSARTEN.includes(wert as Austrittsart);
|
|
}
|