

Payroll to finance
Oracle NetSuite and AFAS integration: payroll journal on the Dutch subsidiary, cost centres from NetSuite
With an integration between Oracle NetSuite and AFAS Profit, the payroll journal of every AFAS payroll run becomes a journal entry on the Dutch subsidiary in NetSuite, split over account, department and class. The departments finance manages in NetSuite for the Dutch entity arrive as cost centres in AFAS, so the posting fits after the run without corrections.
What the integration does
Dutch subsidiaries of international groups that book in Oracle NetSuite, with a subsidiary per country, and run HR and payroll in AFAS Profit export a journal file from AFAS every month, which the controller converts by hand to NetSuite departments. New departments from the group only reach AFAS months later.
- KoppelHet reads the departments and classes that apply to the Dutch subsidiary in NetSuite.
- New departments arrive as cost centres at the employer in AFAS. Departments that become inactive in NetSuite appear on a list for payroll, with the employees still assigned to them.
- After a run is closed KoppelHet fetches the payroll journal entry from AFAS.
- KoppelHet checks that debit and credit balance and that the period in NetSuite is still open.
- The journal is in NetSuite on the Dutch subsidiary, in euros, with the run number in the memo, ready for approval by finance.
Back: Payroll journal per closed payroll run · Split over department and class
What to watch for with Oracle NetSuite and AFAS Profit
- A journal entry in NetSuite belongs to exactly one subsidiary. If AFAS has several employers, KoppelHet records per employer which subsidiary it belongs to, and creates a separate journal per employer.
- NetSuite sets the currency of a journal to the subsidiary's base currency by default. The payroll journal therefore goes in euros to the Dutch subsidiary; conversion to the group currency stays with the consolidation in NetSuite.
- Departments in NetSuite can be linked to one or more subsidiaries. KoppelHet only takes over the departments that apply to the Dutch subsidiary, so payroll in AFAS does not see cost centres of other countries.
- AFAS keeps debit and credit apart in the journal entry, and NetSuite does so per line as well. So no plus and minus conversion is needed; KoppelHet does check that the journal balances, because NetSuite does not save a journal that does not balance.
- A closed period in NetSuite cannot be selected by an integration. If AFAS runs a correction over a month finance has already closed, KoppelHet holds the journal and asks finance which period it should be.
- If finance uses journal approval in NetSuite, KoppelHet stages the payroll journal without approval. It only counts once finance has approved it.
- AFAS no longer supports its old exports for external accounting packages. The monthly export file with manual conversion makes way for a direct posting in NetSuite.
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 post the payroll journal in NetSuite straight away?
Only if finance wants it to. By default the journal is staged for approval, so the controller can compare it with the payroll summary from AFAS.
What if an employee in AFAS is on a cost centre that no longer exists in NetSuite?
Then that employee appears on a list for payroll before the run. If the run goes ahead anyway, KoppelHet holds the journal until the line has a valid department.
Does this work if the group reports in dollars?
Yes. The journal goes in euros to the Dutch subsidiary. NetSuite converts to dollars at consolidation, as for any other posting of that subsidiary.
What about the GDPR?
The payroll journal in NetSuite holds amounts per account and cost centre, no data per employee. You are the controller and KoppelHet is the processor, under a data processing agreement; every action is in the audit logging.
Technical details for IT
For those who want to know how it works under the hood: APIs, fields and sources used.
- NetSuite is read and written through SuiteTalk REST web services with OAuth 2.0 (client credentials or authorization code) and a dedicated integration role. Departments and classes through the record or query service (subsidiary, includechildren, isinactive); the journal as a journalentry record with the line sublist (account, debit, credit, department, class, memo) and the header fields subsidiary, currency, trandate, postingperiod and memo.
- With the 'Require Approvals on Journal Entries' preference the approved field stays empty. Closed posting periods can only be selected with the 'Override Period Restrictions' permission; KoppelHet does not give the integration role that permission.
- AFAS is written through the HrCostCentre and HrCostCarrier UpdateConnectors; the payroll journal is read with a dedicated GetConnector.
Which fields are transferred
The key fields. The full mapping is agreed per customer.
| Field in Oracle NetSuite | Field in AFAS Profit | Notes |
|---|---|---|
department (id en naam) | Kostenplaats bij de werkgever | Only departments that apply to the Dutch subsidiary |
class (id en naam) | Kostendrager | If finance uses classes |
Werkgever in AFAS | subsidiary | One employer belongs to one subsidiary |
Grootboekrekening in de journaalpost | line.account | Through a lookup between the AFAS chart of accounts and NetSuite |
Bedrag debet | line.debit | |
Bedrag credit | line.credit | |
Kostenplaats | line.department | |
Kostendrager | line.class | |
Periode en jaar van de run | trandate en postingperiod | |
Runnummer | memo | To prevent double postings |
Related
BambooHR → Oracle NetSuite
BambooHR to NetSuite integration: BambooHR employees as employees per subsidiary, with termination reason
BuddeeHR → Oracle NetSuite
BuddeeHR to NetSuite integration: the Dutch employees from Buddee as employees in NetSuite
Dayforce → Oracle NetSuite
Dayforce to NetSuite integration: employees from Dayforce as employee records in Oracle NetSuite, per subsidiary
Deel → Oracle NetSuite
Deel to NetSuite integration: own employees from Deel as employees under the right subsidiary