Officient logoADP iHCM logo

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.

  1. HR records a new wage or a termination date in Officient.
  2. Officient reports the change with the employee ID; KoppelHet fetches the wage history and the employment.
  3. A new wage with Dutch registration goes to ADP as a salary change.
  4. A last employment date starts the termination in ADP; a reactivation cancels it.
  5. Deviations are in an overview for payroll.
Officient → KoppelHet → ADP iHCMSOURCEOfficientTARGETADP iHCMKoppelHetmapping · logging · monitoringOfficient → KoppelHet → ADP iHCMSOURCEOfficientTARGETADP iHCMKoppelHetmapping · logging · monitoring
Out: Wage with base rate, registration country and term · Custom wage components (as a notification) · Last employment date · Reactivation of a departed employee

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, architecture and compliance

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.

Price indication · Complex

Leave your work email and you see the price indication right away.

We only use your address to follow up on your question about this integration.

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 OfficientField in ADP iHCMNotes
linked_payroll_employee_numberpayrollfilenumberFilled once; see review
registration_country_code = NLpayrollGroupCodeFixed pay group per Dutch employer
base_rate (loon)Salarisbedrag 2417 met salariscode 2416
start_date (loonhistorie)effectiveDateTime van de salariswijziging
employment.last_employment_dateBeëindiging in worker.terminate
Webhook person_reactivatedworker-termination.cancel

Related

Which systems do you want to connect?

Tell us which systems you use and what should happen automatically. Together we define the smallest working solution, with a clear design and a quote before building.