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 |
|---|---|---|---|---|---|
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) |