How to configure "8/13 rule for Bank Holidays"

Updated by Leigh Hutchens

The “8/13 rule for bank holidays” is developed to compensate employees not working on a bank holiday that is on the same weekday that they usually work on.

In this case, the "8/13" means that if the bank holiday is on a Friday you have to have worked at least 8 of the previous 13 Fridays to be eligible for compensation on this bank holiday. If an employee is eligible, then they should be compensated for an average of the worked/absence time (hours to minutes) on the Fridays worked in the above example. If the employee does work on the bank holiday (the Friday in our example), those hours should be deducted from the average compensation.

How the outcome will be presented when configured correctly

The outcome will be as follows when the eligibility and compensation rules are configured correctly.

  • On the specified bank holiday, the employee will be reimbursed with a generated salary type that is based on the average worked hours (including specified leaves) for the last 13 weeks.
    • If the employee works on the actual bank holiday, the average compensation for the last 13 weeks will be deducted from the worked hours on the actual bank holiday.
  • The generated salary type will be generated even if there is no shift or no punch on the bank holiday.
  • The generated salary type can be defined to be transferred to payroll, saved to a Time Tracker, or both.
  • The generated salary type does not count toward nominal hours.
  • The generated salary type can be generated at the same time as a standard bank holiday rule configuration.
As of March 2023, we can only define the eligibility rule and compensation rule through API. We are working to add this to the GUI during the current year. The below steps describe the functionality as it is currently.

How to Configure the “8/13 rule for bank holidays”

Step 1: Create or make sure all bank holidays exist for the desired time period

The bank holidays can either be standard bank holidays* or defined on agreement templates. There might also potentially be a mix of both. They need to exist before we start connecting the eligibility and compensation rules.

*If the customer uses parallel agreements (where not all agreements should generate compensation) the bank holidays need to be configured on the agreement templates and not standard bank holidays. This is because if it is a standard bank holiday, we get into the logical dilemma of not knowing exactly what agreement template to look at since the same bank holiday is defined on both (or more) templates.

Step 2: Create a new salary type and activate it on desired agreement templates

The outcome of the compensation for a bank holiday must have a defined salary type. This salary type first needs to be created and then activated on the desired agreement templates and might possibly also be connected to Time Trackers, if needed.

Write down the standard code for this salary type. In the example below, we see standard code 4049.

Step 3: Define what absences are to be used for eligibility and compensation calculation

Absences usually count towards employees being eligible for compensation and also those absences should be counted into the “worked” hours for the compensation.

There is one possibility to define that all absences that count as worked hours from the absence type settings are all included in the eligibility an compensation calculation. It is also possible to specifically define what absences should be included in the eligibility and compensation calculation. Below, we explain how to find the identifiers for the absences.

If you want to specify particular absences, use one of the options below to find the IDs of those absences, and then write them down. We will be needing those IDs in steps 4 and 6.

Option 1: Absence ID from URL in the Manager Portal

This option works quite well if the customer does not have that many absences that should be added.

In the manager portal, navigate to Account settings > Absence settings. When you click to “edit” an absence, you can see an ID in the URL. This ID is what you need to define what absences should be counted.

In the example below, 39075.

Option 2: Absence id from SOAP Web Service request

If the customer has many absences, then clicking on all might not be an option. Then we can use an API to fetch them with the customer's main unit API key.

3.7 wsdlGetLeaveReasons

Step 4: Create eligibility rule

Now, we can create the eligibility rule to define that an employee has to have worked 8 out of the 13 last weeks on the same day as the bank holiday. For example, if the bank holiday is on a Friday then the definition is how the employee has worked the last 13 weeks. In this case, meaning an employee must work at least 8 Fridays to be eligible for compensation.

  • Replace API KEY OF MAIN UNIT with real API key of main unit.
  • If you want to have all absences that are counted as worked hours to be in the eligibility rule. then set countAbsences as True <countAbsences xsi:type="xsd:boolean">false</countAbsences>
  • If you want to define specific absences to be in the eligibility rule then set countAbsences as False and specify the absences to be used as list of the absence ids taken from step 3 above and add it to <allowedAbsences xsi:type="xsd:string">ENTER THE ABSENCES HERE SEPARATED BY COMMA</allowedAbsences>
  • Write down the eligibility rule ID from the response, we will need it at step 6.

 <soapenv:Envelope xmlns:xsi="" xmlns:xsd="" xmlns:soapenv="" xmlns:uri="uri:FlexForce" xmlns:soapenc="">



<uri:wsdlUpdateEligibilityRules soapenv:encodingStyle="">

<apiKey xsi:type="xsd:string">API KEY OF MAIN UNIT</apiKey>

<eligibilityRules xsi:type="flex:EligibilityRules" soapenc:arrayType="flex:EligibilityRule[]" xmlns:flex="">

<item xsi:type="tns:EligibilityRule">

<name xsi:type="xsd:string">8 of the last 13 weeks same day</name>

<employeeCondition xsi:type="xsd:int">3</employeeCondition>

<employeeConditionAmount xsi:type="xsd:int">8</employeeConditionAmount>

<employeePeriodType xsi:type="xsd:int">5</employeePeriodType>

<periodConditionAmount xsi:type="xsd:int">13</periodConditionAmount>

<periodConditionType xsi:type="xsd:int">2</periodConditionType>

<countAbsences xsi:type="xsd:boolean">false</countAbsences>

<allowedAbsences xsi:type="xsd:string">ENTER THE ABSENCES HERE SEPARATED BY COMMA

example 123,987</allowedAbsences>

<overrideCountAsWorkedHours xsi:type="xsd:boolean">false</overrideCountAsWorkedHours><virtualShiftsAsWorkedTimeDay xsi:type="xsd:boolean">false</virtualShiftsAsWorkedTimeDay></item>





Step 5: Find bank holiday ID for desired bank holidays

Option 1: Only standard bank holidays are used

In this case, we can use the API: 3.35 wsdlGetStandardBankHolidays

Option 2: Agreement bank holidays are used or a combination of both

In this case, we need to fetch the IDs with the help of Quinyx support currently. If you are a superuser or Quinyx support contact, please reach out to them through the support portal.

Step 6: Create compensation rules for each unique bank holiday ID

Replace API KEY OF MAIN UNIT with real API key of main unit for customer

Replace REPLACE WITH STD CODE OF DESIRED SALARY TYPE with the salary ID type from STEP 2

Replace REPLACE WITH ELIGIBILITY RULE ID with the eligibility rule ID type from STEP 4

Replace ENTER THE ABSENCES HERE SEPARATED BY COMMA with the same list as added in allowed absences in STEP 3

Replace REPLACE WITH BANK HOLIDAY ID with the found bank holiday ids from STEP 5

<soapenv:Envelope xmlns:xsi="" xmlns:xsd="" xmlns:soapenv="" xmlns:uri="uri:FlexForce" xmlns:soapenc="">



<uri:wsdlUpdateSalaryCompensations soapenv:encodingStyle="">

<apiKey xsi:type="xsd:string">API KEY OF MAIN UNIT</apiKey>

<salaryCompensations xsi:type="flex:SalaryCompensations" soapenc:arrayType="flex:SalaryCompensation[]" xmlns:flex="http://test.quinyx.local/soap/FlexForce">

<item xsi:type="tns:SalaryCompensation">

<name xsi:type="xsd:string">8/13 rule</name>

<reddayId xsi:type="xsd:int">REPLACE WITH BANK HOLIDAY ID</reddayId>

<salaryCodes xsi:type="xsd:string"></salaryCodes>

<eligibilityRuleIds xsi:type="xsd:string">REPLACE WITH ELIGIBILITY RULE ID</eligibilityRuleIds>

<salaryCodeName xsi:type="xsd:int">REPLACE WITH STD CODE OF DESIRED SALARY TYPE</salaryCodeName><periodType xsi:type="xsd:int">2</periodType>

<periodLength xsi:type="xsd:int">13</periodLength>

<allowedAbsences xsi:type="xsd:string">ENTER THE ABSENCES HERE SEPARATED BY COMMA example 123,987</allowedAbsences>

<fixedNrOfWorkedDays xsi:type="xsd:int">0</fixedNrOfWorkedDays>

<calculationType xsi:type="xsd:int">2</calculationType>

<periodCalculationType xsi:type="xsd:int">2</periodCalculationType> <includeAllAbsencesCountedAsWorkedHours xsi:type="xsd:boolean">false</includeAllAbsencesCountedAsWorkedHours><countVirtualShiftAsWorkingDay xsi:type="xsd:boolean">false</countVirtualShiftAsWorkingDay><deductWorkingHoursFromCompensation xsi:type="xsd:boolean">true</deductWorkingHoursFromCompensation>

<percentageOfSummedSalaries xsi:type="xsd:decimal">0.00</percentageOfSummedSalaries>







How Did We Do?