Oracle NetSuite logoAFAS Profit logo

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.

  1. KoppelHet reads the departments and classes that apply to the Dutch subsidiary in NetSuite.
  2. 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.
  3. After a run is closed KoppelHet fetches the payroll journal entry from AFAS.
  4. KoppelHet checks that debit and credit balance and that the period in NetSuite is still open.
  5. The journal is in NetSuite on the Dutch subsidiary, in euros, with the run number in the memo, ready for approval by finance.
Oracle NetSuite → KoppelHet → AFAS ProfitSOURCEOracle NetSuiteTARGETAFAS ProfitKoppelHetmapping · logging · monitoringOracle NetSuite → KoppelHet → AFAS ProfitSOURCEOracle NetSuiteTARGETAFAS ProfitKoppelHetmapping · logging · monitoring
Out: Departments and classes of the Dutch subsidiary · Cost centres and cost units per employer in AFAS · Payroll journal per run (back to NetSuite) · GL accounts · Posting period and approval
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, 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 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 NetSuiteField in AFAS ProfitNotes
department (id en naam)Kostenplaats bij de werkgeverOnly departments that apply to the Dutch subsidiary
class (id en naam)KostendragerIf finance uses classes
Werkgever in AFASsubsidiaryOne employer belongs to one subsidiary
Grootboekrekening in de journaalpostline.accountThrough a lookup between the AFAS chart of accounts and NetSuite
Bedrag debetline.debit
Bedrag creditline.credit
Kostenplaatsline.department
Kostendragerline.class
Periode en jaar van de runtrandate en postingperiod
RunnummermemoTo prevent double postings

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.