Zum Hauptinhalt springen

Mitarbeiter-Verträge

Zweck

Mitarbeiter-Verträge (EmployeeContract) modellieren das Arbeitsverhaeltnis zwischen Mandant und Mitarbeiter. Pro Vertrag werden Vertragsart, Zeitraum, Branch, Kostenstelle, Office und Arbeitszeitmodell hinterlegt. Der aktive Vertrag wird automatisch in Workorder.beforeCreate ausgelesen — daraus stammen Workorder.branchId, Workorder.costCenterId und Workorder.employeeOfficeId.

Die Verwaltung erfolgt ausschliesslich über die Sub-Route am Mitarbeiter: /employees/:id/contracts. Es gibt keine globale Vertraegeliste.

Voraussetzungen

- Mitarbeiter ist angelegt. - Berechtigung `create:EmployeeContract`. - Vorhandene Stammdaten: Branch, Kostenstelle, Arbeitszeitmodell.

Berechtigungen (CASL)

ActionSubjectWirkungKeycloak-Rolle
viewEmployeeContractTab Verträge auf Mitarbeiter-DetailseiteAPP_SPEAMCORE_VIEW_EMPLOYEE_CONTRACT
create/update/deleteEmployeeContractPflegenAPP_SPEAMCORE_CREATE/UPDATE/DELETE_EMPLOYEE_CONTRACT
viewWorkTimeModel, Branch, CostCenterAuswahl-SelectsAPP_SPEAMCORE_VIEW_WORK_TIME_MODEL, BRANCH, COST_CENTER

Schritt-für-Schritt-Anleitung

Vertrag anlegen

  1. Mitarbeiter öffnen (/employees/:id).
  2. Tab Verträge (/employees/:id/contracts).
  3. + Neu — der Add-Button öffnet ein Menu mit den Vertragsarten.
  4. Vertragsart wählen — EmployeeContract wird mit dieser contractType angelegt, Sie werden auf die Detail-Seite weitergeleitet.
  5. Felder pflegen: Zeitraum, Branch, Kostenstelle, Office, Arbeitszeitmodell.

Vertragsart wechseln

Erfordert einen neuen Vertrag — die contractType ist nach Anlage festgelegt.

Mitarbeiter-Detailseite (Klaus Weber) mit aktivem Tab Verträge — Liste mit Vertragsart, Berufsbezeichnung, Niederlassung, Kostenstelle, Vertragsbeginn/-ende und Button „+ Vertrag hinzufügen" (Test-Daten).

Toolbar (Detail-Seite)

Schlanke Toolbar oben rechts:

IconAktion (aria-label)CASLWirkung
ZurückgehenZurück zur Liste.
🏠Zur Startseite gehenSpringt auf das Dashboard / /.
⏮/◀/▶/⏭PaginationNavigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung.

Wie auf jeder Detail-Seite verfuegbar — siehe Floating-Quickbar:

  • KAL. (Mini-Kalender)
  • ZEIT (Persoenliche Wochen-Arbeitszeit)
  • ARBEIT (Eigene bevorstehende Aufträge)

UI-Elemente

Button: „+ Neu"

Tab Verträge. Erfordert create:EmployeeContract. Öffnet Dropdown mit Vertragsarten.

Felder und Eingaben

FeldnamePflichtDatentypWirkung beim AusfuellenVoraussetzung
employeeIdja (automatisch)UUIDVerknuepfung zum Mitarbeiter — wird vom Routing gesetzt.Mitarbeiter existiert.
contractTypeja (disabled nach Anlage)full_time/part_time/freelance/intern/apprentice/otherBestimmt Arbeitszeit-Konfiguration und ggf. Lohnberechnung.
startDatejaDATEVertragsbeginn. Bestimmt, wann der Vertrag „aktiv" wird.
endDateneinDATEVertragsende. Befristete Verträge werden hierüber abgegrenzt.endDate >= startDate.
workTimeModelIdkonditionalUUIDVerknuepft mit Arbeitszeitmodell — bestimmt Soll-Stunden, Pausen, Kernzeit.view:WorkTimeModel.
branchIdneinUUIDNiederlassung des Mitarbeiters. Wird in Aufträgen als Default übernommen.view:Branch.
costCenterIdneinUUIDKostenstelle. Wird in Aufträgen und Belegen als Default übernommen.view:CostCenter.
employeeOfficeIdneinUUIDBuero des Mitarbeiters.
salaryneinDecimal/CurrencyGehalt — für Lohn-Reports.
hoursPerWeekneinDecimalWochenarbeitszeit. Default aus WorkTimeModel-Aggregation.

Workflows und Zustaende

Verträge haben kein eigenes Status-Feld. Aktivität ergibt sich aus startDate/endDate im Vergleich zum aktuellen Datum:

Status (impliziert)Bedingung
ZukuenftigstartDate > heute
AktivstartDate <= heute <= endDate (oder endDate = null)
AbgelaufenendDate < heute

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

  • Mitarbeiter (/employees) — Tab Verträge.
  • Aufträge (/workorders) — Workorder.beforeCreate zieht den aktiven Vertrag für Branch/Kostenstelle/Office.
  • Arbeitszeitmodelle (/work-time-models) — EmployeeContract.workTimeModelId.
  • Niederlassungen (/branches) — EmployeeContract.branchId.
  • Kostenstellen (/cost-centers) — EmployeeContract.costCenterId.
  • Zeiterfassung (/employee-time-trackings) — Soll-/Ist-Berechnung nutzt das aktive Arbeitszeitmodell.

Häufige Fehler und Lösungen

FehlerLösung
Auftrag übernimmt nicht die richtige KostenstelleMitarbeiter hat keinen aktiven Vertrag (Datum ausserhalb startDate/endDate).
contractType wünscht ÄnderungPer Design — neuen Vertrag mit korrekter contractType anlegen.
Vertragsart fehlt im MenuDie Liste ist im FE hardcoded — Code-Änderung notwendig.

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/employees/:id/contractsListeview EmployeeContract
POST/api/employees/:id/contractsAnlegencreate EmployeeContract
GET/api/employees/:id/contracts/:contractIdDetailview EmployeeContract
PATCH/api/employees/:id/contracts/:contractIdÄndernupdate EmployeeContract
DELETE/api/employees/:id/contracts/:contractIdSoft-Deletedelete EmployeeContract

Versionshinweise

  • 2026-04-29: Initiale Veroeffentlichung mit FE-Tiefen-Standard.