Skip to main content

Signify Payroll Connector for Sage

This document describes the integration process between Signify (V10) and SAGE 300 People with a specific focus on the API integration.

General business rules:

  1. In this case, SAGE is the source of the basic employee information.
  2. The integration job will be executed on the Signify V10 system and is usually scheduled to run during the night.
  3. Signify calls the SAGE APIs to obtain a bulk dataset with multiple fields and all employee records.
  4. If the expected record count of the dataset is expected to exceed 5,000, please liaise with a technical Signify consultant.
  5. Some of the fields in the dataset may be empty due to the fields not being populated in SAGE:
    a. In such cases:
          i.These fields can be maintained on the Signify system
          ii. Left blank, as the client may not require it
    b. If preferred, the client may choose to purchase additional modules in SAGE to maintain such fields in SAGE. It is, however, not a requirement as such fields can be maintained in Signify.
    c. Example: If OFO codes are required, the Skills module in SAGE is required, alternatively, these values can be maintained on the job profile in Signify.

Process business rules:

The integration process architecture is depicted in the image below:

image.png

  1. The integration process that is executed by the Signify system calls an API on the SAGE server to retrieve a dataset with all the employee records from SAGE.
  2. This dataset includes active employee records, as well as employee records for employees who were terminated during the previous [TBD] months.
  3. Optional: An option to provide a parameter to only return records that were changed in the last [X] days will help to limit the size of data to be pulled during the API request. This option must, however, allow for all records to be pulled.
  4. This dataset is stored in a staging table in the Signify system, from which the data transformation is done:
  • Employee number is used as the unique identifier and is used in the [EmployeeCode] and [Username] fields in Signify, where [Username] must be unique.
  • If an employee number does not exist in Signify (in the [Username] field), a new record is created in Signify.
  • If an employee number exists, the existing record is updated in Signify.
  • If Job and Position codes are available from SAGE:
    • If a job code and position code do not exist in Signify, a new job profile and linked position title are created in Signify.
  • If Job and Position codes are NOT available from SAGE:
    • If a job title and position title do not exist in Signify, a new job profile and linked position title are created in Signify.
    • This may cause unused job profiles to remain in Signify and may have to be cleaned up manually.
  • If Organisation unit codes are available in SAGE:
  • If an organisation unit does not exist in Signify, a new organisation unit is created in Signify.
  • The above means that all new appointments, terminations, and movements are made.
For additional information regarding the SAGE 300 People APIs:


http://documenter.getpostman.com/view/7078460/UVRBn6LC#db6e0efe-8d5d-4e1b-b0e7-c6de98410295

Who to involve:

  1. A Signify technical consultant will ensure that the above process is implemented from a Signify point of view.
  2. A SAGE technical consultant (usually a SAGE channel partner) must configure the API on the SAGE hosting environment.
  3. SAGE clients can choose if the way to use their channel partners to configure the necessary API process.
  4. Alternatively, Signify can connect the client or their channel partner with a SAGE technical consultant that Signify has partnered with on previous projects, and who can implement the process within a time effort of between 2 and 6 hours.
  5. The consultant will deploy a custom SQL script on the SAGE database.
  6. An SSL certificate must be purchased by the client and configured by the SAGE consultant.
  7. The SQL script is executed when the Generic SAGE API is called.
  8. The API is: http://{{HostName}}:{{APIPort}}/api/apibase/GenericGet/{{GenGetCodeAsSetupInPeople}}
  9. Below is the list of fields that are required and recommended. Fields with no comments are optional. To ensure complete information, even fields with no comment should be added if available in SAGE:
Mandatory
Signify in
Field Name
Field
Signify
Type
Description Required/Optional/ ESS ConfiguredRequired / Recommended / Notes
(If blank, optional)
EmployeeNumberexternalId UsernameInt YExternal Payroll Identity IdOptionalRecommended: SAGE’s unique UserID for the employee
IdNumberusername IdNumberstring AsUsername perto setupallow inthe Signifyuser to loginRequiredRequired – Usually the employee number
GroupJoinDateemployeeCode StartDatestring YWhen empty it is set equal to usernameESS ConfiguredRequired. Usually the employee number. If not provided, the username will be used.
TerminationDatename EndDatestring AsName perof setupthe inuser ESS ConfiguredRecommended
TerminationReasonsurname ReasonForTerminationstring IfSurname Terminatedof the userESS ConfiguredRecommended
PassportNumberemailAddress PassportNumberstring AsEmail perfor setupmost notifications in Signifythe system e.g. Password resetESS ConfiguredRecommended as it can be used for communication and password resets
EmployeeIdalternateEmailAddress ExternalIdstring AsEmail perfor setupreporting ESS SignifyConfigured
CellNumberidNumber MobileNumberstring AsId perNumber setupof inthe SignifyuserESS ConfiguredRecommended, but can be blank if required by client
EmailpassportNumber EmailAddressstring AsPassport pernumber setupof inthe SignifyuserESS ConfiguredRecommended, but can be blank if required by client
FirstNamemobileNumber Namestring YMobile number preferably with country codeESS ConfiguredRecommended as it can be used for communication and password resets
LastNameworkNumber Surnamestring YWork number preferably with country codeESS Configured
EmployeePositionIdhomeNumber JobExternalIdstring YHome number preferably with country codeESS Configured
OrganizationPositionmiddleName JobCodestring YMiddle name of userESS Configured
OrganizationPositioninitials JobTitlestring YInitials of the user ESS ConfiguredRecommended
EmployeePositionIdtitle PositionExternalIdstring YTitle of userESS ConfiguredRecommended
OrganizationPositionknownAs PosCodestring YThe user is known asESS ConfiguredRecommended
OrganizationPositionhomeLanguage PosTitlestring Y
ESS Configured
DirectlyReportsEmployeeNumbergender LineManagerUsernamestring N
ESS Configured
DirectlyReportsEmployeeNumberrace PerformanceManagerUsernamestring N
ESS Configured
PositionTypecitizenship AppointmentTypestring N
ESS Configured
UploadCode (OrganizationUnit)maritalStatus Org Code Level 1-9string Y
ESS Configured
Description (OrganizationUnit)birthDay Org Name Level 1-9string YDate of birth of the userESS Configured
OrganizationUnitId (OrganizationUnit)
disability
Org Id Level 1-9string YA single disability for the userESS Configured
PassportNumber
residentialUnitNumber
PassportNumber
string
N
Optional
EmployeeId
residentialComplexName
PayrollId
string
Y
Optional
MiddleNameresidentialStreetNumber
MiddleName
string
N
Optional
InitialsresidentialStreetName
Initials
string
N
Optional
TitleresidentialSuburbDistrict
Title
string
N
Optional
PreferredNameresidentialCityTown
KnownAs
string
N
Optional
LanguageresidentialCountry
HomeLanguage
string
N
Required when any residential field supplied
GenderresidentialProvince
Gender
string
N
Required when any residential field supplied
RaceresidentialPostalCode
Race
string
N
Optional
CitizenshipresidentialAsPostal
Citizenship
string
N
Optional
MaritalStatuspostalUnitNumber
MaritalStatus
string
N
Optional
WorkNumberpostalComplexName
WorkNumber
string
N
Optional
HomeNumberpostalStreetNumber
HomeNumber
string
N
Optional
BirthdaypostalStreetName
BirthDay
string
N
Optional
UnitNumberpostalSuburbDistrict
ResidentialUnitNumber
string
N
Optional
ComplexpostalCityTown
ResidentialComplexName
string
N
Optional
StreetNumberpostalCountry
ResidentialStreetNumber
string
N
Required when any postal field supplied
AddressLine1postalProvince
ResidentialStreetName
string
N
Required when any postal field is supplied
AddressLine2postalCode
ResidentialSuburbDistrict
string
N
Optional
AddressLine3jobExternalId
ResidentialCityTown
int
NThe payroll job IDOptional
AddressCountryjobTitle string Name
ResidentialCountry
of the job 
NOptional
ProvincejobCode
ResidentialProvince
string
NCode of the jobOptional
AddressCodeoccupationalCategory
ResidentialPostalCode
string
NOccupation Category of the jobOptional
SameAsPhysicaloccupationalLevel
UseResidentialAsPostal
string
NOccupational Level of the job within the categoryOptional
UnitNumberjobOfoCode
PostalUnitNumber
string
NOFO code of the jobOptional
ComplexjobGrade PostalComplexNamestring NGrade of the jobOptional
StreetNumbergradingType
PostalStreetNumber
string
NGrading used for the jobOptional
AddressLine1positionExternalId
PostalStreetName
int
NThe payroll position IdOptional
AddressLine2positionTitle
PostalSuburbDistrict
string
NPosition NameOptional
AddressLine3positionCode
PostalCityTown
string
NPosition CodeOptional
AddressCountryappointmentType
PostalCountry
string
NHow the user is appointed in the positionOptional
ProvincestartDate
PostalProvince
string
NStart date in the positionOptional
AddressCodeendDate
PostalCode
string
NEnd date in the position, when empty, the user is not terminatedOptional
DisabledTypereasonForTermination
Disability
string
NThe reason the user's employment has endedOptional
GroupJoinDatestartDateInGroup
StartDateInGroup
string
NThe start date in the groupOptional
startDateInCompanystringThe start date in the company within the groupOptional
orgLevel1_externalIdIntOrg unit Id on payrollOptionalRecommended if available in SAGE
orgLevel1_namestring
RequiredRequired – can be hardcoded if not available in source system
orgLevel1_codestringUnique code per ruleset for org unitOptionalRequired
orgLevel1_workLocationNamestring
OptionalRecommended if the client has this level in the org
orgLevel2_externalIdIntOrg unit Id on payrollOptionalRecommended if the client has this level in the org
orgLevel2_namestring
OptionalRecommended if the client has this level in the org
orgLevel2_codestringUnique code per ruleset for org unitOptionalRecommended if the client has this level in the org
orgLevel2_workLocationNamestring
Optional
orgLevel3_externalIdIntOrg unit Id on payrollOptionalRecommended if the client has this level in the org
orgLevel3_namestring
OptionalRecommended if the client has this level in org
orgLevel3_codestringUnique code per ruleset for org unitOptionalRecommended if client has this level in org
orgLevel3_workLocationNamestring
Optional
orgLevel4_externalIdIntOrg unit Id on payrollOptional
orgLevel4_namestring
OptionalRecommended if client has this level in org
orgLevel4_codestringUnique code per ruleset for org unitOptionalRecommended if client has this level in org
orgLevel4_workLocationNamestring
Optional
orgLevel5_externalIdIntOrg unit Id on payrollOptional
orgLevel5_namestring
OptionalRecommended if the client has this level in the org
orgLevel5_codestringUnique code per ruleset for org unitOptionalRecommended if the client has this level in the org
orgLevel5_workLocationNamestring
Optional
orgLevel6_externalIdIntOrg unit Id on payrollOptionalRecommended if the client has this level in the org
orgLevel6_namestring
OptionalRecommended if client has this level in org
orgLevel6_codestringUnique code per ruleset for org unitOptionalRecommended if client has this level in org
orgLevel6_workLocationNamestring
Optional
orgLevel7_externalIdIntOrg unit Id on payrollOptionalRecommended if the client has this level in the org
orgLevel7_namestring
OptionalRecommended if the client has this level in the org
orgLevel7_codestringUnique code per ruleset for org unitOptionalRecommended if the client has this level in the org
orgLevel7_workLocationNamestring
Optional
orgLevel8_externalIdIntOrg unit Id on payrollOptionalRecommended if the client has this level in the org
orgLevel8_namestring
OptionalRecommended if the client has this level in the org
orgLevel8_codestringUnique code per ruleset for org unitOptionalRecommended if the client has this level in the org
orgLevel8_workLocationNamestring
Optional
orgLevel9_externalIdIntOrg unit Id on payrollOptionalRecommended if the client has this level in the org
orgLevel9_namestring
OptionalRecommended if the client has this level in the org
orgLevel9_codestringUnique code per ruleset for org unitOptionalRecommended if the client has this level in the org
orgLevel9_workLocationNamestring
Optional
lineManagerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
performanceManagerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
departmentManagerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
trainingManagerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
pdpFirstApproverUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
pdpSecondApproverUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
leaveManagerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
salaryReviewManagerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
talentManagementManagerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
secondaryReportingManagerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
lineManagerOnceRemovedUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
workflowOriginatorUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
financeManagerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
financeOfficerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
hrOfficerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
hrRecruitmentOfficerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
businessUnitHrManagerUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
secondaryJobRequisitionApproverUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional
leaveManagerAlternateApproverUsernamestringThe username of the manager, existing in the system or part of the API bodyOptional