AFAS Profit logoCoupa logo

Payroll to finance

AFAS to Coupa integration: users with approval rights from AFAS, expenses back into the payroll run

With an integration between AFAS Profit and Coupa, every employee from AFAS is automatically a Coupa user, with employee number, manager and cost centre, and expense reports approved for payment in Coupa go to the next AFAS payroll run. A leaver becomes inactive in Coupa after the last working day, so no requests or approvals run in that name any more.

What the integration does

Organisations that run payroll in AFAS Profit and handle purchasing and expenses in Coupa maintain users and approvers in Coupa by hand. A change of manager in AFAS often reaches Coupa too late, so the wrong person approves, and approved expenses are retyped as a mutation in AFAS every month.

  1. A new employee in AFAS becomes a Coupa user with login, email, employee number, manager and default cost centre, and the expense licence.
  2. A different manager or cost centre in AFAS carries through to Coupa. After the last working day the integration sets the user to inactive.
  3. Up to the cut-off date of the payroll period KoppelHet fetches the expense reports approved for payment and not yet exported.
  4. Per employee the total goes to AFAS as a pay component, with the Coupa expense report number attached; the integration then marks the expense report in Coupa as exported.
AFAS Profit → KoppelHet → CoupaSOURCEAFAS ProfitTARGETCoupaKoppelHetmapping · logging · monitoringAFAS Profit → KoppelHet → CoupaSOURCEAFAS ProfitTARGETCoupaKoppelHetmapping · logging · monitoring
Out: Users with employee number, login and email · Manager, cost centre and approval limits · Licence flag for expenses · Expense reports approved for payment · Pay component for the expense reimbursement in AFAS
Back: Expense reports approved for payment go to AFAS as a pay component

What to watch for with AFAS Profit and Coupa

  • In Coupa login and email are mandatory and unique, and the employee number is unique too. KoppelHet checks AFAS beforehand for duplicate work email or a reused number, so Coupa does not silently refuse a new employee.
  • Coupa works with licence flags per user, for expenses, purchasing, invoices and more. The integration only switches on the expense licence; anyone who also buys or approves invoices gets those rights through Coupa administration, so the integration hands out no licences nobody intended.
  • Approval limits sit on the user in Coupa, separately for expenses, requisitions and invoices. A job change in AFAS adjusts the expense limit through a table maintained by finance, so a promoted manager can approve the right amounts straight away.
  • Coupa sets per user through which channel expenses are paid; by default that is the ERP, but it can also be Coupa Pay. For payment through the AFAS payroll run the ERP channel must stay, otherwise Coupa pays itself and the employee receives the amount twice.
  • A user in Coupa can only be fetched through the API by its own Coupa ID. KoppelHet stores that ID with each AFAS employee as soon as the user is created, so a change or departure always lands on the right user.
  • Coupa allows fetching expense reports that are approved for payment and not yet exported. After processing in AFAS, KoppelHet marks them as exported, and the Coupa expense report number goes along as a reference with the pay component, as Coupa itself recommends.
  • If your organisation uses single sign-on for Coupa, the integration sets the login method to SAML with the SSO ID from the identity provider, instead of having a password invitation sent.

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

Do requisitions and invoices also go to AFAS?

No. Only employee expense reports run through payroll. Purchasing and invoices belong in the financial administration.

Who decides an employee's approval limit?

Finance, in a table per job or level. The integration applies the limit as soon as the job changes in AFAS.

Can cost centres also go from Coupa to AFAS?

That can be added later as an extension. In this integration AFAS is the source for an employee's default cost centre.

Technical details for IT

For those who want to know how it works under the hood: APIs, fields and sources used.

  • AFAS is read with a GetConnector on employees, employments and jobs, filtered on change date. Expense reimbursements go to AFAS through the UpdateConnector HrCompMut, as a pay component in the current period.
  • To Coupa through the Users API (POST /api/users, PUT /api/users/:id) with login, email, employee_number, firstname, lastname, manager, default_account, expense_user, expense_approval_limit, employee_payment_channel, authentication_method (saml) and sso_identifier, and active for departures.
  • Expense reports through GET /api/expense_reports?status=approved_for_payment&exported=false, then marked as exported. Statuses in Coupa include approved_for_payment, scheduled_for_payment and paid.

Which fields are transferred

The key fields. The full mapping is agreed per customer.

Field in AFAS ProfitField in CoupaNotes
Medewerkernummeremployee_numberUnique in Coupa
E-mail werklogin en emailBoth mandatory and unique
Leidinggevendemanager
Kostenplaatsdefault_account
Functie of functieniveauexpense_approval_limitThrough a table finance maintains
Datum uit dienstactive = false
Vaste waardeexpense_user = true en employee_payment_channel = ERP
Totaal per declarant uit CoupaLooncomponent onkostenvergoeding (HrCompMut)With the Coupa expense report number as reference

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.