Payroll integration
Officient to ADP iHCM integration: Dutch wages and leavers from Exact Officient to ADP iHCM
An integration between Officient and ADP iHCM passes wage changes and the termination date of employees registered under the Netherlands in Exact Officient to ADP iHCM. Payroll then no longer retypes those changes; first creating a new employee in ADP remains work for payroll.
What the integration does
Organisations that use Exact Officient for employees in Belgium and the Netherlands, and process Dutch payroll at ADP iHCM, enter a pay rise for Dutch employees in ADP by hand.
- HR records a new wage or a termination date in Officient.
- Officient reports the change with the employee ID; KoppelHet fetches the wage history and the employment.
- A new wage with Dutch registration goes to ADP as a salary change.
- A last employment date starts the termination in ADP; a reactivation cancels it.
- Deviations are in an overview for payroll.
What to watch for with Officient and ADP iHCM
- A wage in Officient carries a registration country, such as BE or NL. KoppelHet only sends wages with registration NL to ADP iHCM, so Belgian employees in the same Officient environment stay outside the integration.
- The wage history in Officient contains a start and end date and the base rate per period. KoppelHet sends each new period as a salary change with the start date as effective date, and first checks that it is not before the start of the employment in ADP, because ADP then rejects it.
- The wage in Officient also contains amounts for end-of-year bonus and holiday pay as part of the wage structure. KoppelHet does not send them to ADP as separate payments; how holiday pay and a thirteenth month work is handled by payroll in iHCM.
- Officient has custom wage components besides the base wage. They are continuing and do not fit ADP's variable lines; KoppelHet puts a change to them on the list for payroll in the first version.
- An Officient webhook only contains the person ID. Officient allows thirty calls per five seconds and returns an empty 429 above that. KoppelHet fetches wage and employment after each notification and waits on a 429 before trying again.
- Officient reports with person_reactivated that a departed employee is active again. If the termination is already in ADP, KoppelHet cancels it, because ADP does not allow a termination to be amended; if the run has already been processed, payroll gets a notification.
- Officient keeps the linked payroll provider and the employee number there for each person. KoppelHet uses the ADP number in that field as the key, and reports employees with NL registration without a number to payroll.
How we build and run it
- The integration runs on the KoppelHet platform, hosted in a data centre in the EU.
- Every sync and every error is visible in the functional log; on an error your administrator is notified.
- A change that cannot go through is not half-applied but queued for another attempt.
- KoppelHet is ISO 27001 certified. Data travels encrypted and stays on the platform no longer than needed.
- After go-live we manage the integration and adjust it when your process changes.
- The integration fits next to your existing integration layer. Only the fields in the design are transferred; the platform keeps no register of its own.
Implementation and price
This is not an app you switch on. We build the integration for your organisation on our platform, with building blocks we reuse on every project. So it is custom work that does not start from scratch.
A consultant prepares the intake and analyses both systems. We then record the mapping and exceptions field by field, test in the test or acceptance environment and go live at a moment you choose. Costs are a one-off amount for the setup and a monthly amount for platform, monitoring and support.
Frequently asked questions
Does the integration create new employees in ADP?
No. Payroll creates the employee in ADP; KoppelHet then links them on employee number.
What happens to Belgian employees?
They stay with their own social secretariat. Only wages with Dutch registration go to ADP.
Technical details for IT
For those who want to know how it works under the hood: APIs, fields and sources used.
- Exact Officient API (api.officient.io/1.0, OAuth 2.0): people/list (payroll_provider, linked_payroll_provider_external_id; 30 per page, scope basics:read), people/{id}/detail (linked_payroll_provider, linked_payroll_employee_number, employment.first_employment_date and last_employment_date), wage details and wage history (registration_country_code, base_rate, end_of_year_bonus, holiday_pay, custom_components, start_date, end_date). Webhooks person_added, person_updated, person_deleted, person_reactivated (scope webhooks:write). 30 calls per 5 seconds.
- ADP iHCM through GET /hr/v2/workers, the Base Remuneration Change API (2416 and 2417; effective date not before the start of the work assignment) and the Worker Terminate API (worker.terminate, worker-termination.cancel). Canonicals in the Consumer Application Registry (CAR).
Which fields are transferred
The key fields. The full mapping is agreed per customer.
| Field in Officient | Field in ADP iHCM | Notes |
|---|---|---|
linked_payroll_employee_number | payrollfilenumber | Filled once; see review |
registration_country_code = NL | payrollGroupCode | Fixed pay group per Dutch employer |
base_rate (loon) | Salarisbedrag 2417 met salariscode 2416 | |
start_date (loonhistorie) | effectiveDateTime van de salariswijziging | |
employment.last_employment_date | Beëindiging in worker.terminate | |
Webhook person_reactivated | worker-termination.cancel |
Related
Officient → Active Directory
Officient to Active Directory integration: AD accounts from Exact Officient
Officient → AFAS Profit
Officient to AFAS integration: Dutch employees from Exact Officient in AFAS Profit Payroll
Officient → Arbodienst (SIVI)
Officient to the occupational health service via SIVI: absence periods from Exact Officient as absence reports
Officient → DATEV
Officient to DATEV integration: German employees from Officient to the tax adviser using DATEV