---
title: "Feature: Synchronise the organisational unit and function type"
manual: "Academic Profiles"
version: "main"
source: "Changelog/3.0/Feature-FrontendUserRelationMapping.rst"
rendered: "2026-10-02T20:47:49+00:00"
---

# Feature: Synchronise the organisational unit and function type {#feature-frontend-user-relation-mapping}

## Description {#description}

The synchronisation of `academic:createprofiles` and
`academic:updateprofiles` never set the organisational unit or the
function type of the imported contract. Projects that take both from their
directory or HR data needed a profile factory of their own.

The `contract` map of `frontendUserSync` in
`Configuration/AcademicPersons/Settings.yaml` gains two relations,
`organisationalUnit` and `functionType`:

-   `column` names the `fe_users` column holding the value, and
    `matchBy` the field of the record it is compared with: the unique
    name or the unit name of an organisational unit, the name of a function
    type.
-   `create: true` creates a missing record on the page
    `storagePid`. Creation is off by default, and switching it on
    without a storage page is a mistake in the map.
-   The value has to match exactly, on every database. Hidden records match,
    deleted records, drafts of a workspace and translations do not. Of several
    matching records the one with the lowest uid is assigned.
-   An empty column clears a mapped relation, and so does a value that matches
    nothing while creation is off. A relation that is not mapped keeps what an
    editor chose.

The employee type is not synchronised. See
[Organisational unit and function type](../../Configuration/FrontendUserSync/Index.html#configuration-frontend-user-sync-relations).

## Impact {#impact}

Nothing changes for an installation without a map of its own: the shipped map
leaves both relations unmapped.

A site package that maps a relation owns it from then on: the next run of
`academic:updateprofiles` overwrites an organisational unit or function
type an editor chose on an imported contract, and clears it where the column is
empty.
