Colleague PUMP to InTIME Integration

Colleague PUMP to InTIME Integration

1. Introduction

What does the Pump integration do?

Recruitment businesses can utilise Pump's integration with RSM InTime's API to manage and automate their pay and bill processes for timesheet capture, timesheet approval, expense capture, billing and payroll. 
Pump's RSM InTime integration is designed in such a way that our customers can automate a seamless process from Placement through to Pay and Bill in InTime and onto their Accounting system.
 
When a Placement is authorised in Pump, the Placement data and associated records, are created within InTime. If the required data does not exist on the Placement in Pump, then the InTime API will prevent the user from pushing this information to InTime.
 
The objective of this integration is to ensure that all data entry could take place within Pump requiring little human intervention within the InTime application itself. Customers can setup Business Rules, Workflows, Business Process Flows and Power Automate flows to ensure that the right data is populated at the right time on the Placement within Pump to suit different contractual scenarios, so that when it comes to pushing the Placement data to InTime, minimal manual validation is required.

Technical Overview:

The Pump integration provides data to the RSM Intime's REST API through a secure Microsoft Custom Workflow (Workflow extension) that sits within your dedicated Pump Microsoft Dynamics 365 Production Environment.
 
For more information about Workflow extensions please see:  https://learn.microsoft.com/en-us/power-apps/developer/data-platform/workflow/workflow-extensions
For more information about Intime's Webservies, please see : https://documentation.in-time.co.uk/display/ds/InTime+Webservices
Please note: Pump currently only integrates with Version 2.8 of the Intime API. This is denoted in the Endpoint URL that RSM provide you with - the URL should end with the following: /services/IntimeServiceV2_8?wsdl

2. Integration Overview

At the point of a Placement being Second Level Authorised (see image below) and assuming that all the necessary data has been entered, a Placement and its related records, such as Overtime Rates and Approvers, will be created within InTime, along with the related Worker (Candidate), Manager (Contact), Client (Invoice Company), Provider (Umbrella Company) and other required entities.
 


 
The integration is therefore designed to collect the information required by InTime and the customer's Pay and Bill process before the Placement is Authorised. If a record exists in InTime with the same unique identifier as that within Pump, the existing record will be updated at the point of the Placement being Second Level Authorised in Pump. The value of some fields will not be overridden if data already exists in the field, in InTime.
 
It is important to note that every new Placement in Pump will be pushed up to InTime as a new Placement. New Placements created for a mid-term change or an extension will be created within InTime. Any update made to an existing Placement through the Unauthorise process will update InTime when the Placement is second level authorised again. If data or required related records to the Placement are missing in Pump, the user will receive a validation error from the InTime API and be unable to push the information to InTime at the point of Second Level Authorisation. The user will continue to receive this warning until all data validation requirements have been met.
 
 Please note: Whilst the Placement will not be created in InTime due validation errors, other records such as the Worker and Client, may be if validation errors do not exist with those records.

 

The latest InTime error is stored in the field 'Pay and Bill Integration Sync Error (colleagu_payandbillintegrationsyncerror)' on the Placement. This field is cleared once the Placement is pushed through to InTime successfully.

Using Providers in Intime (Umbrella and Third Party Companies)

When a Placement is Level 2 Authorised, Placements with 'Umbrella' (which uses the option set code of 752020003) selected within the field 'Payment Method' will result in the following: 

  • A Provider will be created and/or updated and will also be linked to the Worker and Placement in Intime, specified from the Company lookup selected under the  'Contractor / 3rd Party Company' section of the Placement within Pump  

  • The Worker Type will be set to Umbrella within Intime.

How the integration handles blank fields

 If a field is blank in Pump it will not overwrite the equivalent field in InTime if it is already populated.

Approvers and Intime - Managers and Alternative Managers

 On 2nd Level Authorisation of a Placement the following will occur in InTime: 

  • When a Placement without a Primary Approver is 2nd Level Authorised in Pump, the Manager in InTime is set to the Placement's Contact from Pump.

  • When a Placement with a Primary Approver is 2nd Level Authorised in Pump, the Manager in InTime is set as the Placement's Primary Approver from Pump.

  • When a Placement with non-Primary Approvers is 2nd Level Authorised in Pump, these non-Primary Approvers are created as Alternative Managers in InTime. 

What Data is returned from InTime?

 
Last Timesheet and/or Invoice Raised

When Placements have Timesheets or Invoices associated with them in InTime two fields: Invoice Raised and Last Timesheet, are updated by the integration. A warning message will also be displayed at the top of Placement form to indicate this too.
 

 

3. Configuration

Before you setup the InTime integration on your Pump instance, please contact Pump Support to ensure your RSM Intime integration sync has been setup. Additionally please ensure you have configured your Intime environment(s). You can find a handy checklist here : https://documentation.in-time.co.uk/display/ds/Go+Live+Checklist
 
For the InTime integration to work you must also have the Username, Password, Agency Ref Code and Endpoint URL of your InTime environment. Please contact your RSM account manager or the InTime support team if you are unsure of this information.
Please also ensure you have the Security Role 'Pump - Pay and Bill Integration Admin' assigned to your administration user.  
Once the Pump-Intime sync has been setup you must populate the following fields in the Pay and Bill Integration Settings tab of Pump's Global Settings area found by selecting 'Pump' and then 'Settings' in the bottom left hand side of the interface. You must do this separately for your Sandbox environment and your Production environment.
 

  • Integration Provider = "InTime"

  • Username = InTime Username

  • Password = InTime Password

  • Agency Ref Code = InTime Agency Reference Code

  • Endpoint URL = the API endpoint URL your Intime Agency uses

 

 Please note: If you are already using InTime we recommend setting up a test InTime Agency environment and integrating it with your Pump Sandbox. You will also need to contact Pump Support and the InTime team to arrange for the update of your InTime data's unique identifiers to match your Pump data before you go live with Pump in order to ensure business continuity.
 

 

Other Settings

In addition to configuring your Intime integration you an also set the following within the Settings area:  

  • Sync Country ISO Code -  sync Country ISO Codes from Pump to Intime by setting this field to 'Yes.'

  • Suffix Provider name with Currency ISO Code – Suffix the Contractor Company's name selected on the Placement with the Placement's Pay Currency ISO Code on a newly created Provider record within Intime (utilised when Placement Payment Method = Umbrella)  

  • Standard Rate Settings – ensure your standard rate names are lined up with Intime rate for hourly, daily, weekly and monthly rates e.g. Basic Pay.  

  • Disable Worker / Manager Emails – If set to No then newly created Managers (Contacts / Approvers) and Workers (Candidates) will not receive an Intime registration email when pushed to Intime. Instead this can be handled manually.

  • Previous Days Placements To Sync - Sets how far back the integration background service checks Intime for new invoice and timesheet activity. The sync defaults to 1 day previous.

Configuring Pump to work with multiple InTime Agencies (environments):

If you only wish to integrate your Pump instance with a single InTime Agency environment, then you only need to configure the above fields. However if you wish to push data to multiple InTime Agency environments due to your organisational structure you must toggle 'Use Owning Company Credentials?' to 'Yes.'
 
Doing so allows you setup different InTime credentials on separate Owning Company records for each environment. The Placement, and associated data, will be pushed to the InTime Agency associated with the Owning Company selected in the 'Sales Owning Company' lookup field on the Placement. 
 

 Please note: If 'Use Owning Company Credentials?' is set to Yes then every Sales Owning Company must contain credentials, even if they are pointing to the same environment.
 
The Pay and Bill Integration Password field in both Global Settings and Owning Companies is hidden unless users have the Security Role 'Pump - Pay and Bill Integration Admin' assigned.
 

 

Customising your Pump Solution to work with your Intime environment:

You will also customise your Pump Unmanaged Solution in your Sandbox to meet any custom option sets you have setup within your InTime environment. 
 
In InTime, it is possible to have custom options for the following field types (which also have an equivalent value in Pump).  

  • Currencies (Exchange Rates in InTime)

  • Tax Codes.

  • Pay Elements (for Overtime Rates).

  • Invoice Frequencies.

  • Payment Frequencies.  

 

For the Currency/Exchange Rate, Tax Code, Pay Element and Payment Frequency options, values are matched using the following:

  • Currency/Exchange Rate: ISO Currency Code (e.g. 'GBP').

  • Tax Code: The Tax Code Option Set 'Label' matches with the Tax Rate 'Name' (NOT code) in InTime.

  • Pay Element: Pay Element Name (e.g. 'Basic Pay').

  • Payment Frequency: Payment Frequency Name (e.g. 'Weekly').

 
For the Invoice Frequency options, values are matched using their option value/index (both Pump and InTime must have the same options in the same order). Out-of-the-box options are:

  • 0 – Weekly

  • 1 - Two Weekly

  • 2 - Four Weekly

  • 3 - Calendar Monthly

  • 4 - 4-4-5

  • 5 - Other

Placement Business Process Flow Customisation

In order to most effectively utilise the integration the customer should incorporate the necessary mandatory fields into branches of the Placement Business Process Flow for the different Pay and Bill scenarios you are pushing to Intime before Level 2 Authorisation stage.


4. Field Mapping

 

CANDIDATE/WORKER FIELDS

InTime Field

Pump Field/Value

Display Name

Entity Name

Mandatory (Required by InTime)

Notes

InTime Field

Pump Field/Value

Display Name

Entity Name

Mandatory (Required by InTime)

Notes

Worker.externalId

colleagu_PersonReference

Person Reference

Person (Contact)

Yes

Person Reference format (e.g. 'PER-1784').

Worker.refCode

ContactId

Person

Person (Contact)

Yes

GUID format.

Worker.paymentFrequency

colleagu_Payment_Frequency

Payment Frequency

Placement (colleagu_placement)

Yes

An equivalent Payement Frequency must exist in InTime. This field is labelled as Payroll in InTime's application

Worker.commsDisabled

colleagu_payandbillintegrationdisableworkeremails

Disable Worker (Candidate) Emails

Global Settings (colleagu_globalsettings)

No

For new Workers, 'Comms Disabled' is set to the value of the Disable Worker (Candidate) Emails Global Setting. If the Worker already exists, then this field is NOT updated.

Worker.emailDisabled

colleagu_payandbillintegrationdisableworkeremails

Disable Worker (Candidate) Emails

Global Settings (colleagu_globalsettings)

No

For new Workers, 'Email Disabled' is set to the value of the Disable Worker (Candidate) Emails Global Setting. If the Worker already exists, then this field is NOT updated.

Worker.dateOfJoining

colleagu_StartDate

Start Date

Placement (colleagu_placement)

Yes

This value is only set on Worker creation and not for updates.

Worker.workerType

colleagu_PaymentMethod

Payment Method

Placement (colleagu_placement)

Yes

If Payment Method = Umbrella, value is 'umbrella', if Payment Method = PAYE, value is 'paye', otherwise value is 'ltd'.

Worker.limitedCompanyProviderId

colleagu_ContractorCompany

Contractor Company

Placement (colleagu_placement)

No

Output providerId from InTime Provider, which is created from the Contractor Company.

Worker.limitedCompanyProviderExternalId

colleagu_ContractorCompany

Contractor Company

Placement (colleagu_placement)

No

Output externalId from InTime Provider, which is created from the Contractor Company.

Worker.nationalInsuranceNumber

colleagu_NationalInsuranceNumber

National Insurance Number

Placement (colleagu_placement)

Yes (if Worker Type = PAYE)

Only set if Worker Type = PAYE.

Worker.niTableLetter

colleagu_NationalInsuranceTableLetter

National Insurance Table Letter

Placement (colleagu_placement)

Yes (if Worker Type = PAYE)

Only set if Worker Type = PAYE.

Worker.limitedCompany

colleagu_ContractorCompany

Contractor Company

Placement (colleagu_placement)

No

Only set for Contract Placements.

Worker.ltdCompanyContact.firstname

colleagu_CandidateFirstName

Candidate First Name

Placement (colleagu_placement)

No

Not mapped/synced.

Worker.ltdCompanyContact.lastname

colleagu_CandidateLastName

Candidate Last Name

Placement (colleagu_placement)

No

Not mapped/synced.

Worker.ltdCompanyContact.email

Remittance Email Address

colleagu_RemittanceEmail

Placement (colleagu_placement)

No

 

Worker.ltdCompanyContact.address.line1

colleagu_ContractAddressStreet1

Contractor Company Address Street 1

Placement (colleagu_placement)

No

 

Worker.ltdCompanyContact.address.line2

colleagu_ContractAddressStreet2

Contractor Company Address Street 2

Placement (colleagu_placement)

No

 

Worker.ltdCompanyContact.address.town

colleagu_ContractAddressCity

Contractor Company Address City

Placement (colleagu_placement)

No

 

Worker.ltdCompanyContact.address.county

colleagu_ContractAddressCounty

Contractor Company Address County

Placement (colleagu_placement)

No

 

Worker.ltdCompanyContact.address.postcode

colleagu_ContractAddressZipPostalCode

Contractor Company Address ZIP/Postal Code

Placement (colleagu_placement)

No

 

Worker.ltdCompanyContact.address.country

colleagu_ContractAddressCountry

Contractor Company Address Country/Region

Placement (colleagu_placement)

No

 

Worker.ltdCompanyContact.address.countryCode

colleagu_ContractAddressCountry

Contractor Company Address Country/Region

Placement (colleagu_placement)

No

A linked record field used to get the Country ISO Code: Country - ISO Code (colleagu_country.colleagu_ISOCode). Syncing of this field can be switched off in Global Settings (see 'Settings Fields' section at the bottom of this sheet).

Worker.limitedCompany.invoiceDeliveryMethod

Always set to 'Email'.

N/A

N/A

No

This value is set even if the Limited Company is blank.

Worker.firstname

colleagu_CandidateFirstName

Candidate First Name

Placement (colleagu_placement)

Yes

 

Worker.lastname

colleagu_CandidateLastName

Candidate Last Name

Placement (colleagu_placement)

Yes

 

Worker.email

EMailAddress1

Email 1

Person (Contact)

Yes

Person Lookup: Placement - Candidate (colleagu_PlacedCandidate).

Worker.phone

Telephone1

Business Phone

Person (Contact)

No

Person Lookup: Placement - Candidate (colleagu_PlacedCandidate).

Worker.mobile

MobilePhone

Mobile Phone

Person (Contact)

No

Person Lookup: Placement - Candidate (colleagu_PlacedCandidate).

Worker.gender

colleagu_Gender

Gender

Placement (colleagu_placement)

Yes

M = Male or F = Female.

Worker.dateOfBirth

colleagu_candidatedateofbirth

Candidate Date of Birth

Placement (colleagu_placement)

No

 

Worker.accountsReference

colleagu_CandidateAccountReference

Candidate Account Reference

Placement (colleagu_placement)

No

 

Worker.bankAccount.bank

colleagu_CandidateBankName

Candidate Bank Name

Placement (colleagu_placement)

No

Bank Name, Account Name, Sort Code and Account Number all need to be filled in for these fields to be populated (you can't just populate individual fields).

Worker.bankAccount.bankaccountName

colleagu_CandidateBankAccountName

Candidate Bank Account Name

Placement (colleagu_placement)

Yes (if Worker Type = PAYE)

Bank Name, Account Name, Sort Code and Account Number all need to be filled in for these fields to be populated (you can't just populate individual fields).

Worker.bankAccount.banksortCode

colleagu_CandidateBankAccountSortCode

Candidate Bank Account Sort Code

Placement (colleagu_placement)

Yes (if Worker Type = PAYE)

Bank Name, Account Name, Sort Code and Account Number all need to be filled in for these fields to be populated (you can't just populate individual fields).

Worker.bankAccount.bankaccountNumber

colleagu_CandidateBankAccountNumber

Candidate Bank Account Number

Placement (colleagu_placement)

Yes (if Worker Type = PAYE)

Bank Name, Account Name, Sort Code and Account Number all need to be filled in for these fields to be populated (you can't just populate individual fields).

Worker.defaultPaymentCurrency

colleagu_PayCurrency

Pay Currency

Placement (colleagu_placement)

No

A linked record field is used to get the Currency: Currency - ISO Code (TransactionCurrency.ISOCurrencyCode). An equivalent Exchange Rate for this currency must exist in InTime.

Worker.vatCode

colleagu_CandidateTaxCode

Candidate Tax Code

Placement (colleagu_placement)

Yes (field cannot be null in InTime)

There must be an equivalent named Tax Rate in InTime (the code doesn't need to match).

Worker.selfBilling

colleagu_AllowSelfBilling

Allow Candidate Self Billing?

Placement (colleagu_placement)