Employee Profile Schema
Felder
Employee Profile Schema
Schema for validating employee profile entities (Personalstammdaten)
userId
User UUID (optional link to users collection)
firstName
First name (Vorname) — used when no user is linked
lastName
Last name (Nachname) — used when no user is linked
employeeNumber
Auto-generated employee number (e.g. MA-2026-00001)
email
Work email address. Used as the matching key for telephony integrations (Starface userlist → starfaceAccountId) so employees WITHOUT a linked user account can still be attributed in call analytics. Plain string (no strict format validation) to keep imports forgiving.
orgUnitId
Primary org unit UUID (legacy — use primaryOrgUnitId going forward, ADR 0036b). Write-side it is a mirror of primaryOrgUnitId; changes to either sync the org_units member arrays server-side (ADR 0368).
primaryOrgUnitId
Arbeitsrechtlich maßgebliche Org-Unit (ADR 0036b). Wird vom Working-Time-Resolver für die Hierarchie-Auflösung benutzt. Bei Matrix-Orgs: eindeutig die primäre. Falls nicht gesetzt, fällt der Resolver auf orgUnitId zurück.
managerId
Direct manager user UUID
absenceApprovalConfig
ADR 0682 — Ob und durch wen Abwesenheitsanträge genehmigt werden. Jedes Feld ist optional; null/fehlend bedeutet „von der übergeordneten Ebene erben" (Mitarbeiter → Team → Abteilung → Bereich → Mandant → Standard).
mode
REQUIRED = Antrag muss genehmigt werden (Standard). NONE = Antrag wird beim Anlegen sofort genehmigt, es entsteht keine Genehmigungsanfrage.
REQUIREDNONEnullapproverMode
ORG_UNIT_LEAD = Leitung der Organisationseinheit (Standard, mit Kette über die übergeordnete Einheit). SPECIFIC_USERS = feste Personen. ROLE = alle Inhaber einer Rolle.
ORG_UNIT_LEADSPECIFIC_USERSROLEnullapproverUserIds
Nur bei approverMode=SPECIFIC_USERS: die genehmigenden Personen.
approverRoleSlug
Nur bei approverMode=ROLE: Slug der Rolle aus role_definitions (z. B. "hr").
allowSelfApprovalAsLead
Standard true. Darf eine Person ihren eigenen Antrag genehmigen, wenn sie selbst Leitung ihrer Einheit ist und weder Doppelspitze noch übergeordnete Leitung gepflegt sind? Gilt NUR für Leitungen — ein Mitarbeitender ohne gepflegte Teamleitung genehmigt sich dadurch nicht selbst.
fallbackApproverUserIds
Auffanglinie: greift, wenn die reguläre Kette keine erreichbaren Genehmiger liefert.
overtimeApprovalConfig
ADR 0709 — Ob eine Leitung die eigene Überstundenbuchung freigeben darf. Jedes Feld ist optional; null/fehlend bedeutet „von der übergeordneten Ebene erben" (Mitarbeiter → Team → Abteilung → Bereich → Mandant → Standard).
allowSelfApprovalAsLead
Standard FALSE (anders als bei der Urlaubsgenehmigung — ohne ausdrückliche Einstellung bleibt es beim 4-Augen-Prinzip). Darf eine Person ihre eigene Überstundenbuchung freigeben, wenn sie Leitung einer ihrer Einheiten ist? Gilt NUR für Leitungen; wer die Berechtigung overtime_approve ohne Leitungsfunktion hat, kann sich dadurch nicht selbst freigeben. Anders als beim Urlaub greift die Regel auch dann, wenn eine zweite oder übergeordnete Leitung verfügbar wäre.
employmentType
Type of employment (Beschäftigungsart)
FULL_TIMEPART_TIMEMINI_JOBWORKING_STUDENTINTERNFREELANCERemploymentStatus
Current employment status
ACTIVEONBOARDINGON_LEAVEOFFBOARDINGTERMINATEDhireDate
First day of employment (ISO 8601 date: YYYY-MM-DD). Optional.
probationEndDate
End of probation period (Probezeit)
terminationDate
Last day of employment
terminationReason
Reason for termination
vacationDaysPerYear
Annual vacation entitlement in days
vacationDaysRemaining
Remaining vacation days for current year
vacationDaysCarryOver
Carried over vacation days from previous year (Resturlaub)
weeklySchedule
Per-weekday work schedule (Arbeitszeitplanung)
day
ISO weekday (1=Mon, 7=Sun)
startTime
Work start time (e.g. "08:00")
endTime
Work end time (e.g. "17:00")
breakMinutes
Break duration in minutes
workingTimeModelId
Reference to working_time_model entity
skillProfileIds
Tätigkeitsprofile this employee works in (FK skill_profile, ADR 0639) — the ROW side of the skill matrix, mirroring skill_definition.profileIds on the column side. EMPTY = shown in every profile filter (backfill-free: nothing changes for existing tenants). 🔴 Deliberately NOT derived from the org unit: Team 2 and Team 3 are different departments but need the same skills, and a dispatcher who also works technically fits no single department. Multi-valued for exactly that case.
skills
Structured skill entries with levels
skillId
UUID of the skill definition
level
Proficiency level. INTERESTED is a legacy level-0 interest marker (no proficiency, no XP, never satisfies a scheduling minimum) — deprecated as a level value in favour of the orthogonal `interested` flag below; still read as a fallback. BEGINNER..EXPERT is the legacy 4-tier enum kept in sync with currentLevel. Prefer currentXp/currentLevel for new proficiency logic.
INTERESTEDBEGINNERINTERMEDIATEADVANCEDEXPERTinterested
Orthogonal interest flag (ADR 0223): the employee wants to develop / is interested in this skill, INDEPENDENT of proficiency. Can be true alongside any real level (e.g. EXPERT + interested). Set self-service by the employee on their own profile. Legacy entries with level==="INTERESTED" are treated as interested at read time even when this flag is absent.
interestedAt
When the interest flag was last set to true.
currentXp
Accumulated XP for this skill. Awarded on ticket/task completion or via manual grant. Drives currentLevel.
currentLevel
Numeric level (1–400) across 4 tiers of 100 levels each. Derived from currentXp on XP award, but stored for efficient queries.
verifiedAt
When the skill was last verified
verifiedBy
User UUID of the person who verified the skill
source
How the skill was assigned. PERFORMANCE_REVIEW marks interests carried over from a completed Mitarbeitergespräch.
SELF_ASSESSEDMANAGER_ASSIGNEDCERTIFICATIONAUTO_DETECTEDPERFORMANCE_REVIEWaddedAt
When the skill entry was first added
updatedAt
When the skill entry was last updated (level change, re-verification)
languageSkills
Spoken/written languages with CEFR proficiency level, used for language-aware ticket dispatch
code
ISO 639-1 language code
aaabaeafakamanarasavayazbabebgbhbibmbnbobrbscacechcocrcscucvcydadedvdzeeeleneoeseteufafffifjfofrfygagdglgngugvhahehihohrhthuhyhziaidieigiiikioisitiujajvkakgkikjkkklkmknkokrkskukvkwkylalblglilnloltlulvmgmhmimkmlmnmrmsmtmynanbndnengnlnnnonrnvnyocojomorospapiplpsptqurmrnrorurwsascsdsesgsiskslsmsnsosqsrssstsusvswtatetgthtitktltntotrtstttwtyugukuruzvevivowawoxhyiyozazhzulevel
CEFR proficiency level (A1–C2) or NATIVE
A1A2B1B2C1C2NATIVEaddedAt
updatedAt
karma
ADR 0224: running karma total (engagement/fairness score). Server-managed: awarded on verified task completion when tenant.features.karmaEnabled. Audit trail in karma_ledger.
skillUpdateLog
Audit trail of automatic skill-level changes triggered by survey responses or other sources
responseId
survey_response UUID that triggered this update (idempotency key)
source
satisfaction-surveymanualcertificationticket-closetask-donemanual-grantsurveytraining-completednullphone
Personal phone number
dateOfBirth
Date of birth
emergencyContactName
Emergency contact name
emergencyContactPhone
Emergency contact phone number
timeZone
IANA-Zeitzone (z.B. "Europe/Berlin"). Override gegenüber org_unit.timeZone / tenant default. Wird u.a. für Zuschlag-Zeitfenster und DST-Handling genutzt.
holidayRegion
ISO 3166-2 Feiertagsregion (z.B. "DE-NW"). Override gegenüber org_unit.holidayRegion / tenant.settings.defaultHolidayRegion. Relevant für MA im Homeoffice in anderem Bundesland.
mentorUserId
Assigned mentor for trainees / juniors
isMentor
Marked as available mentor in the picker
isSuitableForInterns
Marked as senior who can supervise intern-grade work
defaultSubstituteUserId
Fallback user for sick-leave auto-reassign
isApprentice
Auszubildender: befindet sich in der Ausbildung und hat noch keinen Abschluss. Dient als Gate für den (separat gebauten) Berichtsheft-/Ausbildungsnachweis-Bereich, der nur für Auszubildende sichtbar ist.
isAusbilder
Markiert den Mitarbeiter als Ausbilder (kann Auszubildende ausbilden / ist im Ausbilder-Picker eines Auszubildenden wählbar).
ausbilderEmployeeId
employee_profiles-UUID des diesem Auszubildenden zugewiesenen Ausbilders. Referenziert einen Mitarbeiter (nicht user), damit auch Ausbilder ohne Login zuordenbar sind.
legalEntityId
Rechtliche Einheit (party UUID — typically the operating company, e.g. ITF or Codemeta).
workLocationId
Primary work location (asset/site UUID; references the company address/site).
qualification
Berufs- oder Studienabschluss. `kind: "ausbildung"` referenziert einen Eintrag aus dem BIBB-Verzeichnis (apps/api/src/data/ausbildungsberufe-2026.jsonl); `kind: "hochschule"` erfasst Abschlussgrad + freies Studienfach.
kind
ausbildunghochschuleausbildungName
Berufsbezeichnung aus dem BIBB-Verzeichnis (z. B. "Tierwirt/Tierwirtin")
fachrichtung
Fachrichtung der Ausbildung, falls anwendbar (z. B. "Imkerei")
berufsgattungCode
BIBB-Berufsgattung (5-stellige Nummer)
kategorie
Kategorie aus dem BIBB-Verzeichnis (s. Reference-Data-Endpoint)
ausbildung-bbigausbildung-ausserhalb-bbigausbildung-gesundheit-bundesrechtausbildung-gesundheit-landesrechtausbildung-zustaendige-stelleumschulung-zustaendige-stellehochschulabschluss
Akademischer Abschlussgrad
BACHELORMASTERDIPLOMMAGISTERSTAATSEXAMENPROMOTIONHABILITATIONBERUFSAKADEMIEOTHERfach
Studienfach (Freitext, z. B. "Wirtschaftsinformatik")
safetyRoles
Arbeitsrechtliche Sicherheitsrollen (Ersthelfer, Brandschutzhelfer, Sicherheitsbeauftragter, Datenschutzbeauftragter, ...). Mehrfachzuweisung erlaubt; freie Werte sind zugelassen, damit nicht-katalogisierte Rollen gepflegt werden können.
key
Stabiler Bezeichner (für Standardrollen einer aus SAFETY_ROLE_CATALOG; für Sonstige der frei eingegebene Rollenname).
assignedAt
Datum der Bestellung / Beauftragung
validUntil
Gültig bis — triggert escalation_rule-Reminder vor Ablauf
notes
educationCertificates
Studienbescheinigungen / Ausbildungsnachweise. The actual file lives in the DMS; this is metadata + expiry.
_id
title
issuer
issuedAt
validUntil
Ablaufdatum — when set, an escalation_rule reminder fires before expiry.
documentId
Reference to dms_document holding the certificate file
assignedAssetIds
UUIDs of assets handed out to the employee (laptop, phone, keycard, …). Asset entity carries the canonical assignment record; this is a denormalised quick-access list.
idDocumentVerifications
Append-only Liste der HR-Sichtprüfungen des Ausweisdokuments. Jede Verifikation speichert wer und wann geprüft hat — Dokumentennummer wird DSGVO-konform nicht erfasst.
_id
verifiedAt
Zeitpunkt der Sichtprüfung (server-issued)
verifiedBy
User-UUID der prüfenden HR-Person
verifiedByName
Anzeigename zum Zeitpunkt der Prüfung (Snapshot)
documentType
Dokumenttyp zum Zeitpunkt der Prüfung (PERSONALAUSWEIS, REISEPASS, AUFENTHALTSTITEL, …) — Snapshot, damit Typänderungen die Historie nicht verfälschen.
documentCountry
ISO 3166-1 alpha-2 Ausstellerstaat zum Zeitpunkt der Prüfung — Snapshot.
notes
encryptedFields
Map of field-name → encrypted envelope (AES-256-GCM, employee DEK). See EMPLOYEE_PROFILE_ZK_FIELDS for the registered field set and visibility category.
starfaceAccountId
Starface ACCOUNT_ID this employee maps to (matched by email).
starfaceLoginId
Starface LOGIN_ID (informational).
starfaceInternalNumber
Starface primary internal number (informational).
starfaceExternalNumber
Starface primary external number (informational).
notes
Free-text notes for HR admin
externalReferences
Cross-System-Verknüpfungen (ADR 0147 §3). Pro Fremdsystem ein Eintrag mit stabiler externer Id und den beiden Echo-Hashes. Wird ausschließlich von Sync-Pfaden geschrieben, nie über die generische CRUD-Oberfläche.
system
externalId
externalVersion
externalNumber
syncedAt
lastSyncCorrelationId
lastInboundHash
lastOutboundHash
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/employee_profiles— Liste, paginiert + filterbarGET /api/v1/employee_profiles/<id>— Einzelne EntityPOST /api/v1/employee_profiles— AnlegenPATCH /api/v1/employee_profiles/<id>— Teil-UpdateDELETE /api/v1/employee_profiles/<id>— Soft-DeleteGET /api/v1/employee_profiles/<id>/timeline— Audit + Aktivitäten