Employee profiles and files
Personio's profile model is rigid: fields can't carry conditional logic, multi-employment for the same person isn't supported in v2, and parts of the product don't share data cleanly with each other.
What people actually say
✕Personio has no buildable logic between fields, which lets incorrect data through and forces manual reconciliation downstream.
Source: Capterra Personio verified reviews ↗✕API v2 cannot add, update or delete multiple employments for one person, and there's no official endpoint to fetch internal field IDs that used to be string-addressable in v1.
Source: Personio developer forum, API v2 missing endpoints ↗✕Reviewers flag that parts of Personio aren't linked, so a sickness-rate report can read absences in days but not in hours, and the same employee data looks different across modules.
Source: Capterra Personio verified reviews ↗
We model employees in Postgres with country-aware schemas — German Steuer-ID and social-insurance numbers, French SIRET and convention collective, UK NI, Spanish NIE — and treat multiple concurrent employments per person as first-class rows, not a workaround. Conditional field rules, validation and cross-field logic live in plain TypeScript next to the schema, and every module reads from the same canonical table instead of its own out-of-sync copy.