Zum Hauptinhalt springen

Urlaubs-Typen (VacationType)

Zweck

VacationType modelliert die Stammdaten der Urlaubs-Typen pro Mandant — z. B. gesetzlicher Mindesturlaub, Tarif-Mehrurlaub, Schwerbehinderten-Zusatzurlaub, Jugendarbeitsschutz-Urlaub. Pro Typ sind Verfalls-Regel, Altersstaffelung und Abgeltungs-Logik konfiguriert.

In Mitarbeiter-Verträgen werden konkrete Urlaubs-Kontingente über die Junction EmployeeContractVacation mit einem VacationType verknüpft (siehe Employee-Contract-Vacations).

Voraussetzungen

- Mandant mit aktivem HR-Modul - Berechtigung `view:VacationType` (alle HR-Mitarbeiter), `create/update/delete:VacationType` typisch nur HR-Leitung - System-Templates (`isSystem=true`) sind nicht löschbar — rechtliche Defaults wie „gesetzlicher Mindesturlaub BUrlG" sind locked

Berechtigungen (CASL)

Frontend-Page-Guard: view:FE_VacationType, view:VacationType

API-Datenzugriff: view, create, update, delete auf VacationType

Datenmodell

FeldTypBedeutung
idUUIDPrimary Key
keyStringmaschinenlesbarer Schlüssel, eindeutig pro Mandant (z. B. statutory_minimum)
nameStringAnzeigename (z. B. „Gesetzlicher Mindesturlaub")
categoryenumstatutory | tariff | contractual | other
expiryRuleenumendOfYear | march31NextYear | march31Plus15Months | none
carryoverDeadlineString nullableStichtag MM-DD; leitet sich aus expiryRule ab wenn null
compensableOnTerminationBooleanWird bei Kündigung in Geld abgegolten?
compensableOnSicknessBooleanWird bei Krankheit übertragen?
requiresHinweispflichtBooleanBAG-Hinweispflicht des AG vor Verfall
appliesByAgeArray nullableAltersabhängige Tagesstaffelung (z. B. JArbSchG §19) — [{minAge, maxAge, days}]
replacesCategoryString nullableWenn gesetzt, ersetzt dieser Type einen anderen statt zu addieren (z. B. youthLeave ersetzt mandatory)
defaultDaysNumber nullableDefault-Tage bei Vertrags-Anlage
isSystemBoolean readonlySystem-Templates sind nicht löschbar
activeBooleanInaktive Typen erscheinen nicht in der Vertrags-Auswahl

expiryRule im Detail

WertBedeutung
endOfYearVerfällt am 31.12. des Jahres
march31NextYearÜbertragbar bis 31.03. des Folgejahres (Standard für gesetzlichen Urlaub)
march31Plus15MonthsErweiterter Übertrag (15 Monate) — z. B. bei Krankheit, EuGH-Rechtsprechung
noneVerfällt nicht — z. B. Sonderurlaub

Beispiele typischer Vacation-Types

KeyNameCategoryExpiryRuleTageHinweispflicht
statutory_minimumGesetzlicher Mindesturlaub (BUrlG)statutorymarch31NextYear20 (5-Tage-Woche)ja
severely_disabledSchwerbehinderten-Zusatzurlaub (SGB IX §208)statutorymarch31NextYear5ja
youth_leaveJugendurlaub (JArbSchG §19)statutorymarch31NextYearaltersgestaffelt 25-30ja
tariff_extraTarif-MehrurlaubtariffendOfYear10nein
birthday_bonusGeburtstags-Sonderurlaubcontractualnone1nein

API-Endpoints

MethodeEndpointZweck
GET/api/vacation-typesListe, Filter ?filter[active]=true
GET/api/vacation-types/:idDetail
POST/api/vacation-typesNeu anlegen
PATCH/api/vacation-types/:idÄndern
DELETE/api/vacation-types/:idLöschen (nicht bei isSystem=true)

Verknüpfungen

  • EmployeeContractVacation — Junction-Tabelle, verknüpft Mitarbeiter-Vertrag mit VacationType und konkreten Tagen. Bei Vertrags-Finalisierung werden die VacationType-Werte als Snapshot in die Junction übernommen — nachträgliche Änderungen am VacationType wirken nicht zurück.
  • Absences — beim Anlegen einer Abwesenheit wird auf das passende VacationType-Kontingent abgebucht.
  • Settings — BAG-Urlaubsverfalls-Hinweis-Toggle pro Mandant aktivierbar (siehe Compliance-Notification-System).

Versionshinweise

  • 2026-05 (Welle 98): Initiale Doku basiert auf Migration 20260430125230-initial-vacation-type-model.js + Modell vacationType.model.ts. Eingeführt zusammen mit EmployeeContractVacation-Junction für altersgestaffelte und replacable VacationType-Logik.