Public Holidays in SAP SuccessFactors Time Management – Latest Enhancements (1H 2023)
Hi there! The 1H 2023 release upgrade is just around the corner and with that some great enhancements around the handling of public holidays are waiting to be implemented and used. So, let me tell you a little bit about those enhancements, what their purpose is and what you need to do to get everything up and running. Ready?
Great! Then grab a coffee and let’s start with a short overview of the single topics. Chapter 2 and 3 are independent from each other, but they both build upon chapter 1.
- Some Groundwork: Transition from Holiday Class to Holiday Planned Working Time
We’re now fully moving away from the holiday class. Learn how this impacts the holiday calendar and get to know our new object: Holiday Planned Working Time Determination.
IMPORTANT: You now need to fill the holiday category instead of the holiday class.
- Extended Support of Partial Holidays (incl. Half Holidays for Clock Time Recorders – yay!)
Partial holidays are holidays which don’t last the full day, common in several countries of the globe. Learn about our new bouquet of possibilities to define a partial holiday.
- Support of Regular Work on Holidays: A Tribute to our Heroes who Keep Businesses Running 365 Days a Year
Holidays don’t necessarily lead to time off, at least not for everyone. A hospital, for example, cannot close only because it’s a holiday, so certain holiday staff needs to regularly work even on holidays. Learn how you can now easily realize this.
Get an overview of how all the enhancements play together to determine the planned working time of an employee on a holiday.
Until production upgrade, the same disclaimer as for the SAP SuccessFactors What’s New | SAP Help Portal applies.
Some groundwork: Transition from Holiday Class to Holiday Planned Working Time
First, let’s open our history books: Back in time, the holiday class with its values ‘Full’, ‘Half’, and ‘None’ used to be an essential part of each holiday assignment and up to the 2H 2022 release it had in essence two different means:
(1) provide information about the planned working time on the holiday (e.g., holiday class = Full means that the day is a full day off),
(2) serve as a filter attribute in time valuation to pay holiday-related premiums.
Then, with the 2H 2022 release, we introduced the holiday category, in addition to the holiday class. The holiday category also consists of the same values ‘Full’, ‘Half’, and ‘None’ but in contrast to the holiday class it has the advantage that additional custom holiday categories can be created, whereas the holiday class values couldn’t be extended. Why did we do that? The holiday class as a filter attribute in the time valuation (see (2) above) wasn’t flexible enough. Many customers needed a more granular grouping of holidays to pay for example higher premiums on special holidays like Labor Day – or no premiums on company-specific holidays.
But we didn’t stop here. We didn’t want you to always maintain two fields (holiday class and holiday category). So, with 1H 2023 we’re now also replacing the planned working time function of the holiday class (see (1) above) by introducing the “Holiday Planned Working Time”. But one step after the other.
Let’s first have a look how the holiday calendar looks now starting from the 1H 2023 release:
One of the first things you will notice is that the holiday class is not editable anymore, whereas when clicking on ‘Details’ you will see that the Holiday Category (which has been introduced with 2H 2022) has become editable per default (if you had not yet made it editable anyways):
And even more: The holiday class can also not be changed to editable anymore which means you can no longer fill it manually. It’s now always filled automatically on save based on the value selected for the holiday category. In turn this means that going forward you’ll need to fill the holiday category instead of the holiday class when adding holiday assignments. But no worries, this shouldn’t bother you a lot because, as already mentioned, for the holiday category we are providing you with the same default values as you know them from the holiday class:
Note: If you import your holiday assignments, keep in mind to download the updated import template via Admin Center > Import and Export Data > Download Template.
The holiday class is still filled (by the system) to not disrupt any existing integrations that rely on the holiday class or if you have business rules that refer to the holiday class. And we also kept it read-only to ensure you can still read the field via OData in case this applies to you. If it doesn’t, I’d recommend that you just make the field invisible. To do so, go to Admin Center > Configure Object Definition > Object Definition > Holiday Assignment > Take Action > Make Correction. Click on ‘Details’ for the field holidayClass and set the visibility to ‘Not visible’:
Now that we’re anyways in the object definition, let’s also move up the holidayCategory field right after the holiday field to have all fields to be filled next to each other (you do so by clicking on the arrow that points up until the field is at the right place):
(And if you cannot make the holidayClass invisible because you need to read it in one or the other way, this would also be the moment to at least move the holidayClass field down.)
Let’s check the holiday calendar again…Yup, this looks better, doesn’t it? Now we have all relevant fields to be filled at one place, without the need to click on ‘Details’.
For those of you who already know that the Holiday Category is an MDF object consisting just of external code and name, you might have already started wondering how we know what is the correct holiday class that needs to be set by the system, or better: what is the impact on the planned working time of a holiday category, especially custom holiday categories? This brings us to our new object called ‘Holiday Planned Working Time Determination’:
There can be only one such object in each instance and it will be created automatically with the external code “HOLIDAY_PLANNED_WORKING_TIME_DETERMINATION” during the release upgrade. The effective start date of the first record is 01/01/1900 and cannot be changed. It will contain ‘Holiday Planned Working Time Specifications’ for all holiday categories that have already been used in any of the holiday assignments. So, it might look slightly different for you, depending on which holiday categories are already in use in your instance. Let me first mention which permissions you need to access this object so that you can open the object on your end as well:
- User Permission > Time Management Object Permissions > Holiday Planned Working Time Determination
- User Permission > Time Management Object Permissions > Holiday Planned Working Time Determination.Holiday Planned Working Time Specifications
Once you have granted the permission, you can open the object via Admin Center > Manage Data > Holiday Planned Working Time Determination > HOLIDAY_PLANNED_WORKING_TIME_DETERMINATION.
Got it? Ok, then let’s go on.
For each holiday category you need to set here the ‘Holiday Planned Working Time’, i.e., the impact a holiday with that holiday category will have on the planned working time of an employee (which was earlier handled by the holiday class). The available values for Holiday Planned Working Time are:
- Scheduled Working Time: no impact on the planned working time; the employee will work as scheduled by the (temporary) work schedule (corresponds to holiday class ‘None’)
- No Planned Working Time: the day becomes a non-working day due to the holiday (corresponds to holiday class ‘Full’)
- Reduced Planned Working Time: the day becomes a partial day off due to the holiday (corresponds to holiday class ‘Half’)
As you can see, each of the Holiday Planned Working Time values corresponds to one of the holiday classes – this is how we set the holiday class: You enter a holiday category in the holiday assignment, we check what is the Holiday Planned Working Time for this holiday category and translate this back to a holiday class based on the above mapping.
Whenever you use a new holiday category* after the 1H 2023 release, you first need to add this holiday category in the Holiday Planned Working Time Determination, before you can use it in any of the holiday assignments, such that the system knows how to determine the planned working time on the holiday (and, consequently, how to set the holiday class). HERE you can find a video explaining how to use custom holiday categories.
I know you can’t wait to create new holiday categories and try to add them to the Holiday Planned Working Time Determination object and, indeed, I encourage you to do that – BUT: Do not yet use the holiday categories in your holiday assignments before you’ve made yourself familiar with all the public holiday-related enhancements (see below). Changes to our new configuration objects (e.g., the Holiday Planned Working Time Determination) do not trigger an automatic recalculation nor do they trigger an update of workforce availability data that is sent outside SuccessFactors or the planned working time replication to Payroll. Hence, we have several validations in place that hold you from making changes that could potentially lead to data inconsistencies. I don’t want to bore you here with details, so just one take away: Adding the holiday assignment should always be your last step when setting up the enhancements, no matter which enhancement(s) you want to use. So, make sure you first set up correctly everything else before you make the changes to the holiday calendar.
HERE you can find the What’s New Viewer topic related to the holiday calendar changes.
* Note: You need an SAP SuccessFactors Time Tracking subscription to create additional holiday categories other than the default values Full, Half, and None.
Extended Support of Partial Holidays (incl. Half Holidays for Clock Time Recorders – yay!)
Before we get into this: In return for this feature I want to see at least 32 likes for this blog post 😉, which is the number of votes on the corresponding influence request: Improvement Request Details – Customer Influence (sap.com) !! 😊
As already mentioned, the holiday planned working time ‘Reduced planned working time’ is the equivalent to the holiday class ‘Half’. This means that it will reduce the planned working time by 50%. Now, the nice thing is that whereas earlier this was only working for duration-based recorders, this setting can now also be used for clock time-based recorders, wohoo! What you need to know is that in case of clock time-based recorders it’s the second half of the day which will be considered as off. Let’s take an example: On 24 December 2023 (Christmas’ Eve), an employee, Stefan, is scheduled (i.e. planned as per the work schedule) to work from 8am to 5pm, with two scheduled unpaid breaks amounting to 1 hour of break in total, leading to 8 hours of working time:
Christmas’ Eve is considered a half holiday, so the actual planned working time for the employee (considering the holiday) on 24 December 2023 will be from 8am to 12:15pm, including the break from 10:00am to 10:15am (4 hours working time = 8 hours x 0.5):
(This screenshot is taken from our new planned working time UI, see more information HERE.)
If you have already been using the holiday class ‘Half’ in your instance before, then you don’t need to do any additional configuration to use this feature. You can now just add half-day holidays to the holiday calendars by using the holiday category ‘Half’, even if those holiday calendars are assigned to clock-time recorders. Because if you have already used the holiday class ‘Half’ before, then we have already maintained the Holiday Planned Working Time ‘Reduced Planned Working Time’ for the holiday category ‘Half’ for you. Hence, it will work out of the box as described above. If you’ve not been using the holiday class ‘Half’ before, you first need to add the holiday category ‘Half’ (or any other custom holiday category of your choice) to the Holiday Planned Working Time Determination object and set the Holiday Planned Working Time value to “Reduced Planned Working Time”. Only then you can start using the holiday category in your holiday assignments.
If you now say the behavior described above is not what you need, because maybe you want all employees to go home at exactly 2pm (no matter if this leads then to 50% or some other fraction), or maybe you have the requirement to reduce the planned working time by an absolute number of hours (e.g., everyone can go home 1 hour earlier – you may have this requirement even for duration recorders), then we now have something else for you in addition to this 50% default logic: You can assign variants to a day model where you can schedule deviating working times which can then be used as a basis for the planned working time on a partial holiday (i.e., a holiday with holiday planned working time = reduced planned working time). This provides you lots of flexibility, but in turn comes at the cost of some configuration effort. But don’t worry. I will explain here now step by step what needs to be done in terms of configuration.
Let’s start from the day model of Stefan. We have added a new field to the day model object called ‘Day Model Usage’:
Per default, this field is set to ‘Regular Day Model’. The alternative value is ‘Variant for Partial Holidays’. When the field is set to ‘Regular Day Model’, the day model is a normal day model as you know it; when the field is set to ‘Variant for Partial Holidays’, instead, the day model is not treated as a normal day model, but as what we call a “Day Model Variant”. Day Model Variants have the characteristic that they cannot be assigned as day models in a work schedule or temporary time information. They can only be assigned as a variant of a regular day model, which in turn is assigned to the work schedule.
To achieve this, the day model object has a new child object called ‘Variant Assignments’. To access this, we first need to grant the following permission:
User Permission > Time Management Object Permissions > Work Schedule Day Model.Variant Assignments (Work Schedule Day Model Variant Assignment)
Now let’s edit the day model and have a look at the Variant Assignment fields:
A day model can have multiple variant assignments and each variant assignment consists of a ‘Day Model Variant Identifier’ and the actual ‘Day Model Variant’. Let’s first have a closer look at the Day Model Variant Identifier. The Day Model Variant Identifier is an MDF object and in essence consists just of external code and name. To create a day model variant identifier, you need the following permission:
User Permission > Time Management Object Permissions > Work Schedule Day Model Variant Identifier
And this is how it looks like:
To explain you what this object is there for, let’s simply imagine the variant assignments without the day model variant identifier field. As mentioned, a day model can have multiple variant assignments. So, when calculating the planned working time, we somehow need to know which variant applies. And here, the Day Model Variant Identifier comes into play. It helps to identify which day model variant needs to be used on a certain holiday. Let’s assume that for Stefan there are two partial holidays per year: Christmas’ Eve (24 December) and New year’s Eve (31 December). From next year (01/01/2024) the following rules shall apply:
- Christmas’ Eve: work ends at 12 pm
- New Year’s Eve: work ends at 2 pm
This means that his day model requires two different variants, along with two different day model variant identifiers.
So, we’ll create two day model variant identifiers now, called “Christmas’ Eve” and “New year’s Eve”, and use them in the variant assignments:
Then, we also create two different day model variants. For the creation of a day model variant, you need to know that:
- It cannot be a non-working day
- It cannot have the same planned working time as the day model, where the variant is assigned to
- For clock time-based day models, the scheduled working time of the variant needs to be within the scheduled working time segment of the day model where the variant is assigned to. (We plan to enhance this in future)
In our case, the day model has a scheduled working time from 8 am to 5 pm. Hence, the scheduled working time of the day model variants can be somewhere between 8 am to 5 pm, but not exactly 8 am to 5 pm.
So, we’ll now create a day model variant with a scheduled working time from 8 am to 12 pm for Christmas’ Eve, and another day model variant with a scheduled working time from 8 am to 2 pm for New Year’s Eve.
(Note: If you set the field ‘Day Model Usage’ to “Variant for Partial Holidays” the Variants assignments section disappears because a variant cannot have another variant assigned.)
Finally, we’re assigning both the variants to Stefan’s day model. You will notice in the drop down that you can only select day models where the field ‘Day Model Usage’ is set to “Variant for Partial Holidays”. Additionally, some further checks like time recording variant or country are performed to ensure you get a pre-filtered list of day model variants for selection:
Now we’re almost there. We have assigned relevant day model variants and have made them “identifiable” via the day model variant identifier. But one piece is missing. We still need to define which variant should be used for which holiday. This brings us back to the Holiday Planned Working Time Determination. When selecting “Reduced Planned Working Time” as ‘Holiday Planned Working Time’, the field ‘Day Model Variant Identifier’ becomes available there as well:
Holiday category “Half” is the one we’re using for Christmas’ Eve (24 December), and as described above work on that day is supposed to end at 12 pm. Hence, Stefan’s planned working time would be 8 am to 12 pm (no break). The variant assignment with this variant has the day model variant identifier “Christmas’ Eve”. Hence, this is the one we need to select for the holiday category “Half” in the Holiday Planned Working Time Specification.
Note: In our example, we would now need a separate holiday category for New Year’s Eve to be able to assign a different day model variant identifier and, hence, use a different variant on that day.
There’s one important aspect to consider: You may remember that I mentioned earlier in this blog post that we cannot make changes to the Holiday Planned Working Time Determination which could lead to a change in the planned working time. Since there are already existing holiday assignments with holiday category “Half” from the past, we cannot simply edit the existing holiday planned working time specification. Because that would mean that the planned working time of all back-dated holidays (since 01/01/1900) with that category would change. This means that we need to insert a new Holiday Planned Working Time Determination record with an effective start date after which there are not yet any holiday assignments with holiday category “Half”. In our example, we anyways want the change to be effective only from 1 Jan 2024 and we have also not yet added any holiday assignments for the year 2024, so it’s possible.
Tip: If you don’t know up to which date you have used a certain holiday category, you can export the Holiday calendars, filter for the holiday category in question and then check the latest holiday assignment date. If you have added holiday assignments for several years ahead, you might need to remove those future holiday assignments first before making the changes.
Now, for any holiday assignment where the holiday category is “Half” and the date is on or after 1 January 2024 (e.g., 24 December 2024), the planned working time will not be the 50% default logic but be based on the day model variant with the day model variant identifier “Christmas’ Eve”. In Stefan’s example the variant assignment with day model variant identifier “Christmas’ Eve” has the variant with a planned working time from 8 am to 12 pm. This is the planned working time for Stefan on such holidays. We will create the holiday assignment on 24 December 2024 to see this live at the end of this blog post. As mentioned in the beginning, we’ll first go through all the configuration enhancements and will add the holiday assignments in the very end to avoid we’re running into any of the validation checks.
Note: If a day model variant identifier is used in the Holiday Planned Working Time Determination, but the corresponding day model doesn’t have a variant with the same day model variant identifier, then the planned working time will fall back to the 50% default.
HERE you can find the What’s New Viewer topic related to the partial holiday enhancements.
Support of Regular Work on Holidays: A Tribute to our Heroes who Keep Businesses Running 365 Days a Year
What do police officers, nurses, 24×7 production workers etc. have in common?
They need to cover shifts 24×7, 365 days a year – no matter whether it’s a holiday or not.
This brings us to our last, but not least, public holiday enhancement for 1H 2023.
Organizations with such employee groups typically need to cover both cases. In a hospital, for example, nurses need to be present even on public holidays whereas the hospital accountant for example doesn’t need to work on a public holiday. Let’s assume Stefan is an accountant in a hospital. But then there’s also Emma, surgeon in the same hospital. The nature of their jobs determines the work pattern on public holidays: whereas Stefan can enjoy time off on public holidays, Emma needs to work on public holidays (if she’s scheduled to work). To distinguish between the two groups of employees, we’re introducing the ‘Holiday Work Pattern’. The Holiday Work Pattern is again an MDF object, consisting of external code and name. To create a Holiday Work Pattern the following permission is required:
User Permission > Time Management Object Permissions > Holiday Work Pattern
We will now create two Holiday Work Patterns: one that represents Emma’s and one that represents Stefan’s work pattern on Holidays:
Two holiday work patterns will probably hold good for most cases. However, you can create also more, if required.
The holiday work pattern is then assigned to the job information of an employee. For this, we’ve added a new job info field, also called ‘Holiday Work Pattern’. You first need to add the field via Admin Center > Manage Business Configuration > jobInfo > Take Action > Make correction. Add a new field with the following settings:
- Identifier: holiday-work-pattern-code
- Label: “Holiday Work Pattern”
- Section: Time Management
- Enabled: Yes
Before we can assign a holiday work pattern in the job information, we also need to add the permission for the job information field. The relevant permission is:
User Permission > Employee Central Effective Dated Entities > Job Information > Holiday Work Pattern
Now we can assign Stefan and Emma a holiday work pattern. So, even though they both have the same work schedule (not realistic, I know, but makes it easier to explain 😉) and the same holiday calendar, their planned working time on holidays will now be different – thanks to the holiday work pattern.
But how is this possible? Holiday Work Pattern only has external code and name which can be defined completely flexibly. So, how does the system know what impact it has for the planned working time? Sounds familiar? Yes! It’s like for the holiday category – the holiday work pattern needs to be added to the Holiday Planned Working Time Determination. Maybe you had already noticed it in any of the earlier screenshots: The Holiday Planned Working Time Specification also has the field ‘Holiday Work Pattern’:
However, whereas the holiday category field is mandatory, the holiday work pattern is an optional field. We have here now the possibility to not only define the Holiday Planned Working Time per holiday category, but per combination of holiday category & holiday work pattern. So, let’s do this. Again, we have here the same restriction as in the previous chapter: If we make changes to a holiday category (edit or delete an existing holiday planned working time specification or add a new one with this holiday category), then we need to make sure the change is done from an effective start date on or after which there aren’t any holiday assignments yet with that holiday category. As mentioned earlier, in my instance there aren’t yet any holiday assignments for 2024, so we are good to make those changes effective from 1 January 2024. Before adding the Holiday Planned Working Time Specifications containing the holiday work patterns, some remarks:
- There needs to be always one specification per holiday category, where the holiday work pattern is left blank. This serves as the default specification which is used to fill the holiday class and which is used whenever the holiday work pattern field on the job info isn’t filled (it’s optional) or when it’s filled but there isn’t any Holiday Planned Working Time Specification defining the Holiday Planned Working Time for this holiday work pattern in combination with the respective holiday category.
- Because of the previous point, we don’t need to explicitly add specifications for the holiday work pattern “Off on Holidays” because it would be exactly the same as the default entries. And if there is no specification for “Off on Holidays”, anyways the default specification will be used.
Now we’ve defined that for the holiday category “Half” and “Full” the Holiday Planned Working Time will be “Scheduled Working Time” given that the holiday work pattern is “Regular Work on Holidays”. Otherwise, it will be “Reduced Planned Working Time” (for “Half”) or “No Planned Working Time” (for “Full”). Since Stefan has the Holiday Work Pattern “Off on Holidays” for which there is no dedicated specification, the latter will apply. For Emma, since she has the holiday work pattern “Regular Work on Holidays”, all holidays will be regular working days, as if it wasn’t a holiday.
Now, that we’re done with the configuration, we can finally add the holiday assignments to the holiday calendar which is assigned to Emma and Stefan. We will add two holidays for 2024:
- Christmas’ Eve on 24 December 2024 with holiday category “Half”, and
- Christmas on 25 December 2024 with holiday category “Full”
If we now compare Emma’s and Stefan’s time sheet, we see that the planned working time for the two employees is different:
For Emma, both days are regular working days. The work schedule takes precedence over the holiday calendar.
Note: If any of the holidays were a non-working day as per the work schedule, Emma would not be required to work on that holiday. Whether or not she needs to work depends only on the work schedule (or temporary time information) when the Holiday Planned Working Time is set to “Scheduled Working Time”.
For Stefan, we can see that Christmas Eve is a partial day off. Planned working time is from 8am to 12pm as we had defined it in the day model variant. Christmas, instead, is a complete day off for him.
Remember: If you add/delete/change holiday assignments, you should also create a manual Time Management Recalculation Event. For example, if Stefan would have already created an absence for 24 December 2024, the system would have deducted 1 day before assigning the holiday. Now, after assigning the holiday, the absence would need to get recalculated to 0.5 days due to the half holiday.
Finally, it’s also possible to generate different holiday premium payments depending on the holiday work pattern. This means that even if Emma and Stefan are treated differently in terms of premium payment on public holidays, they can be assigned the same time recording profile. To achieve this, we have added the Holiday Work Pattern as filter attribute to the Time Records Filter:
To use the Holiday Work Pattern filter in the Time Records Filter the following 2 prerequisites need to be met:
- You need an SAP SuccessFactors Time Tracking subscription
- You need the following permission:
User Permission > Time Management Object Permissions > Time Records Filter.Holiday Work Pattern (Holiday Work Pattern)
The rest is business as usual: You create the time records filters, use them in your time valuations, and assign the time valuations to the time recording profile. More information can be found HERE.
HERE you can find the What’s New Viewer topic related to the support of regular work on public holidays.
I hope this blog post gives you a good overview on what is in for public holidays with the 1H 2023 release and how to set things up. If you have any questions or feedback, just drop a comment.
By the way: In Germany we have a long weekend ahead as 1 May is Labor Day, like in many other countries as well. What a nice opportunity to not only cheer the new public holiday features, but also the way work has already changed and will continue to change for good: From 137 years ago when workers in the US fought for an 8-hour working day over HCM to HXM – Happy Holiday everyone!