Employees data map
Personio is the inbound HR source. Microsoft 365 is provisioned from core,
receives changes on its scheduled sync, and never acts as an inbound authority.
flowchart LR
personio["Personio"]:::ext --> mirror["PersonioEmployee"]:::vend
mirror --> core["Employee"]:::corebox
core --> ms["Microsoft 365"]:::ext
classDef ext fill:#f9d6d6,stroke:#b04,color:#000
classDef vend fill:#fde8e8,stroke:#b04,color:#000
classDef corebox fill:#cfeec9,stroke:#2a6,color:#000
Canonical field matrix
| Core field |
Type |
Personio field |
Microsoft Graph field |
Flow / authority |
first_name |
string(255) |
attributes.first_name.value |
part of displayName |
Personio → core → MS365 |
last_name |
string(255) |
attributes.last_name.value |
part of displayName |
Personio → core → MS365 |
email |
email |
attributes.email.value |
userPrincipalName, mailNickname |
Personio authority; required identity |
position |
string(255) |
attributes.position.value |
jobTitle |
Personio → core → MS365 |
status |
enum |
attributes.status.value |
accountEnabled |
Personio translated; non-active disables MS365 |
supervisor |
employee reference |
attributes.supervisor.value.attributes.id.value |
manager relationship |
resolved after inbound rows; pushed after manager exists |
created_at |
timestamp |
— |
— |
generated internally |
updated_at |
timestamp |
— |
tracked by MS365 mirror |
generated internally |
Status translation
| Personio |
Core EmployeeStatus |
Microsoft 365 |
active |
active |
account enabled |
onboarding |
onboarding |
not provisioned as active |
leave |
active |
account enabled |
inactive or unknown |
inactive |
account disabled when it exists |
| absent Personio row |
terminated |
account disabled on the next push |
Personio mirror-only snapshot fields
| Field |
Purpose |
external_id |
Stable Personio id, stored as the common mirror identity. |
observed |
Personio fields including company_employee_id and vendor timestamps. |
last_synced_at, sync_error, deleted_at |
Operational state and soft deletion. |
core_employee |
Crosswalk to the canonical employee. |
Microsoft 365 observed snapshot fields
| Field |
Source / meaning |
external_id |
Graph object id, stored as the common mirror identity. |
observed |
Last confirmed Graph values: user_principal_name, display_name, job_title, manager_microsoft_id, account_enabled, and Graph timestamps. |
last_synced_at |
Delivery timestamp in the common mirror envelope. |
Personio references supervisors by Personio id. Resolution is a second pass
after all rows land, so row ordering cannot create a false missing-manager
error. Microsoft manager updates retry when the supervisor has not yet been
provisioned.