Zum Hauptinhalt springen

Mitarbeiter — Verträge (Sub-Route)

Zweck

Sub-Route /employees/:id/contracts zeigt alle Arbeitsvertraege eines Mitarbeiters in chronologischer Reihenfolge. Detailseite /employees/:employeeId/contracts/:contractId rendert den konkreten Vertrag mit allen Konditionen.

Pflege erfolgt typischerweise hier (Mitarbeiter-Kontext); die globale Sicht /employee-contracts bietet Cross-Mitarbeiter-Auswertung.

Voraussetzungen

- Berechtigung `view:Employee` und `view:EmployeeContract`. - Für Pflege: `create`/`update`/`delete:EmployeeContract`.

Berechtigungen (CASL)

ActionSubjectWirkungKeycloak-Rolle
viewFE_Employee, Employee, FE_EmployeeContract, EmployeeContractListe/Detail aufrufbar
create/update/deleteEmployeeContractPflegenAPP_SPEAMCORE_CREATE/UPDATE/DELETE_EMPLOYEE_CONTRACT

Schritt-für-Schritt-Anleitung

  1. Mitarbeiter (/employees/:id) → Tab Verträge.
  2. + Neu öffnet ein Belegtyp-Dropdown (Code-Lookup EmployeeContractListPage.tsx):
    • Vollzeit-Vertrag, Teilzeit-Vertrag, Werkstudent, Mini-Job, ... (documentType).
    • Klick auf Belegtyp → EmployeeContractService.createEmployeeContract mit dem documentType als Parameter wird ausgeführt → der neue Vertrag wird mit Defaults (Stunden, Lohn, Urlaubstage) entsprechend dem Typ angelegt.
  3. Auf der Detail-Seite Vertrags-Konditionen pflegen: validFrom, validTo, monthlyHours/weeklyHours, grossSalary/hourlyRate, vacationDaysPerYear, branchId (Niederlassung), employeeOfficeId.
  4. Aktiver Vertrag: derjenige mit validFrom <= heute <= (validTo OR null). Mehrere Verträge mit ueberlappenden Zeitraeumen sind nicht zulässig (Backend-Validierung).
  5. Klick auf einen Vertrag → /employees/:id/contracts/:contractId Detail mit allen Konditionen + Anhängen (Vertrag-PDF).
**Vertrag steuert Auftrags-Logik:** Der aktive Vertrag liefert `branchId` und `employeeOfficeId` an alle vom Mitarbeiter angelegten Aufträge (siehe [Workorder.beforeCreate-Hook](/workorders)). Vertrags-Wechsel (z. B. Vollzeit → Teilzeit) wirkt sofort auf neue Aufträge; bestehende Aufträge behalten den damaligen Snapshot.

Verträge-Tab am Mitarbeiter (Klaus Weber) mit Spalten Vertragsart, Berufsbezeichnung, Niederlassung, Kostenstelle, Vertragsbeginn, Vertragsende — Beispiel unbefristeter Geschäftsführer-Vertrag ab 01.01.2018 (Test-Daten).

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/employee-contracts?filter[employeeId]Listeview EmployeeContract
POST/api/employee-contractsAnlegencreate EmployeeContract

Versionshinweise

  • 2026-04-30: Initiale Veroeffentlichung.