Work Schedule Entry Schema
Felder
Work Schedule Entry Schema
Unified schema for work schedule rows. The `kind` discriminator selects between PERIOD (contractual template valid for a date range, with a weekly schedule) and DAY (a single planned/recorded day, optionally overriding an active period).
kind
PERIOD = contractual template, DAY = single date entry
PERIODDAYuserId
User ID of the employee. Optional (ADR 0123): Mitarbeitende ohne verknüpften Login-Account haben keine userId — Disposition läuft dann rein über `employeeId`. Denormalisierter Self-Service-Lookup-Key wenn verknüpft.
employeeId
Employee profile ID — canonical Disposition-Schlüssel.
workingTimeModelId
Reference to the working time model (envelope/validator)
validFrom
PERIOD only: start date of the contractual period (YYYY-MM-DD)
validTo
PERIOD only: end date or null for open-ended
weeklyHours
PERIOD only: target weekly hours
weeklySchedule
PERIOD only: per-weekday recurring work pattern
day
startTime
endTime
breakMinutes
breakStartTime
PERIOD only: prescribed/declared break start (HH:mm); blocked in calendar
breakEndTime
PERIOD only: prescribed/declared break end (HH:mm)
location
Default work location for this weekday
nullOFFICEREMOTECUSTOMER_SITETRAVELlocationAddressId
PERIOD only: address in the self-company party (parties.addresses[]._id) for this weekday; set whenever location is OFFICE and a site was chosen
locationId
PERIOD only: building (location entity, parentId=null) within locationAddressId; null when the address itself was chosen
dayType
PERIOD only: kind of weekday. WORK = regular working day; VOCATIONAL_SCHOOL = recurring Berufsschultag (§ 15 BBiG) — counts towards the target hours as paid release, but the person is not available for dispatch. Missing = WORK.
WORKVOCATIONAL_SCHOOLnote
PERIOD only: optional freetext note (e.g. "Teilzeit nach Elternzeit")
date
DAY only: the date (YYYY-MM-DD)
plannedStartTime
DAY only: planned start time, null = day off
plannedEndTime
DAY only: planned end time
plannedBreakMinutes
DAY only: planned break duration in minutes
plannedBreakStartTime
DAY only: planned break start (HH:mm); blocked in calendar
plannedBreakEndTime
DAY only: planned break end (HH:mm)
plannedWorkMinutes
DAY only: calculated planned work minutes (end - start - break)
location
DAY only: work location type
nullOFFICEREMOTECUSTOMER_SITETRAVELdayType
DAY only: kind of day. WORK = regular working day; VOCATIONAL_SCHOOL = Berufsschultag (§ 15 BBiG), paid release that still counts towards the target hours. Missing = WORK.
WORKVOCATIONAL_SCHOOLlocationAddressId
DAY only: address in the self-company party (parties.addresses[]._id); set whenever location is OFFICE and a site was chosen
locationId
DAY only: building (location entity, parentId=null) within locationAddressId; null when the address itself was chosen
locationNote
DAY only: additional location notes
shiftAssignmentId
DAY only: reference to shift assignment (for SHIFT model type)
status
DAY only: submission status (DRAFT = editable, SUBMITTED = locked). APPROVED/REJECTED are legacy — read-only remnants of the removed approval flow.
nullDRAFTSUBMITTEDAPPROVEDREJECTEDsubmittedAt
DAY only: when this entry was submitted. Also anchors the 15-minute self-withdraw grace window (SELF_WITHDRAW_WINDOW_MS).
approvedById
DAY only: LEGACY — user ID of the approver (removed approval flow)
approvedAt
DAY only: LEGACY — when this entry was approved (removed approval flow)
rejectedById
DAY only: LEGACY — user ID of the rejecter (removed approval flow)
rejectedAt
DAY only: LEGACY — when this entry was rejected (removed approval flow)
rejectionReason
DAY only: LEGACY — rejection reason (removed approval flow)
flags
DAY only: ArbZG/TV validation flags computed on save (Phase 6.2 engine). Legacy string codes (DEADLINE_MISSED, REST_TIME_VIOLATION, STAFFING_VIOLATION, OVERRIDES_PERIOD) remain available via informationalFlags.
code
CORE_HOUR_VIOLATIONOUTSIDE_FLEX_WINDOWSHIFT_MISMATCHBANDWIDTH_EXCEEDEDKAPOVAZ_MINIMUMBREAK_RULE_VIOLATIONBREAK_SEGMENT_TOO_SHORTMAX_CONSECUTIVE_WORK_EXCEEDEDREST_PERIOD_VIOLATIONMAX_DAILY_EXCEEDEDMAX_WEEKLY_AVG_EXCEEDEDNIGHT_WORK_EXCEEDEDHOLIDAY_WORK_UNAPPROVEDseverity
WARNINGBLOCKINGlegalBasis
message
details
acknowledgements
DAY only: Warn-and-Confirm acknowledgements (Phase 6.3). Required for every flag stored in `flags[]` before the entry can be submitted.
flag
CORE_HOUR_VIOLATIONOUTSIDE_FLEX_WINDOWSHIFT_MISMATCHBANDWIDTH_EXCEEDEDKAPOVAZ_MINIMUMBREAK_RULE_VIOLATIONBREAK_SEGMENT_TOO_SHORTMAX_CONSECUTIVE_WORK_EXCEEDEDREST_PERIOD_VIOLATIONMAX_DAILY_EXCEEDEDMAX_WEEKLY_AVG_EXCEEDEDNIGHT_WORK_EXCEEDEDHOLIDAY_WORK_UNAPPROVEDacknowledgedBy
reason
approvedBy
approvedAt
legalBasis
informationalFlags
DAY only: non-ArbZG informational flags that do not require acknowledgement (deadline missed, staffing issues, period override).
reason
DAY only: optional reason when this DAY overrides a PERIOD (e.g. "Arzttermin", "Halbtagsurlaub")
overridesPeriodId
DAY only: optional reference back to the PERIOD this DAY deviates from. Set automatically when HR records a contractual exception.
Keine Felder passen zum Filter.
Standard-Endpoints
Diese Resource folgt dem generischen CRUD-Vertrag der Plattform. Lesen Sie die Konventionen für Pagination, Idempotenz, Optimistic Locking und Audit. Die wichtigsten Endpoints:
GET /api/v1/work_schedule_entries— Liste, paginiert + filterbarGET /api/v1/work_schedule_entries/<id>— Einzelne EntityPOST /api/v1/work_schedule_entries— AnlegenPATCH /api/v1/work_schedule_entries/<id>— Teil-UpdateDELETE /api/v1/work_schedule_entries/<id>— Soft-DeleteGET /api/v1/work_schedule_entries/<id>/timeline— Audit + Aktivitäten