Download as pdf or txt
Download as pdf or txt
You are on page 1of 55

Oracle Fusion HCM (Switzerland):

Absence Setup and Functional Considerations


ORACLE WHITE PAPER | APRIL 2018
Disclaimer
The following is intended to outline our general product direction. It is intended for information
purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any
material, code, or functionality, and should not be relied upon in making purchasing decisions. The
development, release, and timing of any features or functionality described for Oracle’s products
remains at the sole discretion of Oracle.

ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDARATIONS


Table of Contents

Introduction 1

Overview - Annual Vacation and Other Vacation 2

Setting up Annual Vacation 6

Overview 6

Create Absence Plan 7

Create Absence Types 12

Derived Factors 15

Customer Flexfields for Annual Leave – Workdays per Week 17

Examples 19

Annual Vacation for Young Employees (Full Year Employment) 19

Annual Vacation for Young Employees (Partial Year Employment) 19

Annual Vacation for Young Employees (Mid-Month Hire, Mid-Year Termination)

19

Types of Other Vacation 22

Setting up Other Vacation 22

Create Absence Reasons 23

Create Absence Plan - Qualification 23

Create the Absence Type 26

Create Absence Plan – No Entitlement 29

Create Absence Type 31

Working with Absence Reasons 34

Message Alert for Exceeding Duration Limits 34

0 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Appendix 36

Absence Accrual Event Formula 36

Sample event formula 37

Absence Matrix Accrual Formula 41

Sample Matrix Accrual Formula 45

1 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Introduction
Oracle Fusion HCM for Switzerland enables you to manage vacation absences as required by Law
(Obligationsrecht, (OR) and the Centre Patronal (Handbuch des Arbeitgebers) regulations.

The creation of the sample data as described below is based on the law. Any special rules based on
collective or company agreements are not in the scope of this document.

This document covers the following types of absences:

» Annual Vacation (Ferien):


The main purpose of this vacation is to keep the employee healthy and give enough nonworking
time to recover from the pressure of work.

» Other Vacation (Freizeit):


This covers other main events such as marriage, child birth for paid time off.

1 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Overview - Annual Vacation and Other Vacation
The following table provides an overview of the current rules (by law) and common considerations:

Other
Annual Vacation
Vacation

Basic Obligationsrecht (OR) Centre


information Patronal
(Handbuch
des
Arbeitgebers)

Accruing Based on the period of service. For apprentices the year of service is the year of apprenticeship. Absence
period In practice, it is recommended to use the Calendar year. duration.

Accruing 4 weeks. Depending


amount 5 weeks for employees younger than 21 years. on the facts.

It’s a good practice to grant 5 weeks for employees above 50 years.


Further most branch, union and company contracts grant more vacation often based on seniority dates.

Rules for Employees younger than 21 years are entitled for 5 weeks of vacation. ./.
young If the employer wants to calculate the vacation on a monthly basis when the employee turns 21, use pro rata
employees temporis for such cases.
Other employers might grant the higher vacation entitlement for the whole year when the employee turns
21.

Rules for There are no rules for the vacation entitlement for part-time employees; they get the same number of ./.
part-time vacation weeks. Only the calculation for the payment is different.
employees Where an employee works only certain days per week, the vacation accrual is adjusted to the number of
days the employee works per week (see ‘Special rules for new starter’).

Scheduling It’s the task of the employer to schedule the vacation period (considering the preferences of the employee). ./.
of vacation The schedule should be announced as soon as possible.
and It must be at least two consecutive weeks (the other times can be shorter) – but we will not check this
duration company vacation is possible too.

Carry over Vacation must be granted and taken for the calendar year. A transfer to the next year is permissible only ./.
rules when urgent operational reasons justify this.
But the employee doesn’t lose the vacation entitlement in case he can make no use of his right.

Special There is no waiting period – the vacation accrual starts with the first hour/day of the employment. ./.
rules for
new starter
Vacation proration (pro rata temporis) – for the case that the employment starts or ends within a year of
service (see OR article 329a III). The vacation entitlement is 1/12 of the annual vacation accrual per full
month.
Examples:

Weeks of Vacation days per month (1/12) for


vacation per
year of service

6-days week 5 1/2-days week 5- days week 2- days


week

2 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


4 weeks 24 vacation days / 22 vacation days / 20 vacation days / 12 8 vacation
12 months = 2 12 months = 1,83 months = 1,67 days / 12
months =
0,67
5 weeks 30 vacation days 27,5 vacation days / 25 vacation days / 12 10 vacation
/12 months = 2,5 12 months = 2,29 months = 2,08 days / 12
months =
0,83
Calculation steps:
» Annual vacation days = n-days week * number of vacation weeks
» 1/12 of annual vacation days = factor for proration
Example (5 -days week, 4 weeks of vacation):
» 20 annual vacation days = 5-days week * 4 vacation weeks
» 1,67 = 20 annual vacation days / 12
Hire 1. August: vacation entitlement = 5 months * 1,67 = 8,35 -> rounded up to 8,5 vacation days.

Note:
WEKA Business Media AG recommends for cases of mid-month hire or termination to work with 30-day-
months and 360-day-years. The reason is that for such cases the monthly salary is independent from any
calendar or work days.
Example (hire date 15. July 2017, 25 annual vacation days):
» 5 months a 30 days + 16 days of July = 166 days
» 166 / 360 = 0,46
» 25 annual leave days * 0,46 = 11,5 partial vacation days for 2017.

Termination Same as special rules for new starters. Prorate the vacation dependent on the full months of service in the ./.
termination year.

Rules for In case of partial vacation entitlement due to hire/termination or other changes within the year of service ./.
rounding decimals are possible. Legislatively decimals must be rounded to half days.
SECO (State Secretariat for Economic Affairs) recommends to round off fractions up to 0,24 and 0,74 and
to round up higher amounts (ARV 1988 S.3).
Example:
Entitlement of 4 weeks of vacation; 5 days per week; Hire 1. April  8 months a 1,67 vacation days per
month = 13,36 -> rounded up to 13,5 vacation days.

Change of If there is a change of the vacation entitlement during a year of service the calculation takes place using pro ./.
vacation rata temporis (see explanation regarding special rules for new starters).
entitlement
during a
period Example:
A young worker has reached the 20th age as of 30. June; year of service = calendar year; weekly working
time = 5 days:
» vacation entitlement until 30. June = 5 weeks
» vacation entitlement starting from 01. July = 4 weeks
» Calculation:
6 months * 2,08 + 6 months * 1,67 = 12,48 + 10,02 = 22,5 vacation days (or 4 weeks plus 2,5 days)
But in practice there is no pro rata temporis calculation - the age of the beginning of the employment or at
the beginning of a calendar year is the base for the annual vacation entitlement.

Vacation The employer must pay the employee all wages and adequate compensation for the failed payment in kind. Can be paid
payment Employees with fix salary – vacation payment = 100% or not.

For hourly payment and other irregular payment the vacation payment will be paid as wage benefit: If the
absence is
For 4 weeks vacation: 8,33 % (comparison in percentage of 4 vacation weeks with 48 working weeks) paid then
For 5 weeks vacation: 10,64 % (comparison in percentage of 5 vacation weeks with 47 working weeks) with 100%.

3 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Payment in lieu of holiday (Urlaubsabgeltung): normally not allowed but there are some valid cases where it
is possible:
» termination and disturbing the business processes;
» termination and disturbing the finding of a new job;
» or due to a very short employment

Payroll deduction (Lohnabzug): It can be that at time of termination the employee got more vacation days
than he has accrued. For such cases its usual that the employer deducts the excess wages.

Impact of The vacation period is interrupted (stopped) during times for sickness, cure or due to an accident that takes ./.
sickness, longer than 1 or 2 days. For such cases the employee has to give a medical certificate to the employer.
cure or
accident
during the
vacation
period

Impact of The entitlement of the annual vacation depends on other absences like sickness, accident, maternity or self- Absence type
long-time inflicted reasons based on different time rules for the special absence. The reduction of the annual Unpaid
absences entitlement is 1/12 for a full calendar month of absence (see table below). Vacation has
The entitlement can be reduced for a full month by 1/12th of the annual entitlement as of the first full month impact on the
if the employee was not working because their own fault, for example, strike or unpaid leave. The annual
entitlement can be reduced in case of sickness, accident, military service after the second full month of vacation
leave by 1/12th for each full month after the second full month. In case of maternity, the entitlement can be entitlement
reduced by 1/12th for each month after the third full month of maternity leave. (as described
in the table.).
See ‘Obligationsrecht Art. 329b C. Pflichten des Arbeitgebers / VIII. Freizeit, Ferien, Urlaub für Jugendarbeit
und Mutterschaftsurlaub / 2. Ferien / b. Kürzung’.
There is no automated reduction for the vacation entitlement required. For these cases the employer mostly
speaks with the employee about the next steps. It is enough to have a manual override for the entitlement in
place. This could be a feature we might want to include in the future. Please refer to Features out of scope.

Reporting It’s usual to track all components of the vacation account (entitlement, take and balance) on the employee’s It’s usual to
payslip. track the
It can be reported on a different way too. information
for the other
vacation-like
absences too
(entitlement,
take and
balance) on
the
employee’s
payslip.
It can be
reported on a
different way
too.

Payroll The vacation payment calculation In case of


Impact The reporting of the vacation account on payslip and maybe other reports payment
calculation
. (100%)

The following table shows the reduction of annual vacation depending on different kinds of absences:

Absence Duration Self- Inflicted Sickness, Maternity


Reasons (Unpaid Accident,

4 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Vacation, Idling, or Military
Strike) Service
<= 1 month -- -- --
>1 month and < 2 months 1/12 -- --
2 months 2/12 1/12 --
3 months 3/12 2/12 1/12
4 months 4/12 3/12 2/12
5 months 5/12 4/12 3/12
6 months 6/12 5/12 4/12
7 months 7/12 6/12 5/12
8 months 8/12 7/12 6/12
9 months 9/12 8/12 7/12
10 months 10/12 9/12 8/12
11 months 11/12 10/12 9/12
12 months 12/12 11/12 10/12

5 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Setting up Annual Vacation

Overview
The solution uses an absence accrual plan with a matrix setup. The derived factors Age and Seniority constitute the
matrix rows. The age factors determines employees with age 21 or less (as they receive extra vacation). The
seniority factor is for long-term employees who receive extra days based on their seniority in the company. It is
assumed there is no overlap as employees with age less than 21 are usually not eligible for a seniority based
upgrade of days. You can configure this, if required.

The vacation accrual starts in January for the current year. Though it is an annual accrual, the calculation period is
monthly to enable corrections and include employees hired during the year. An event formula is provided that
identifies intervals in the accrual period (full or partial-year) that may be relevant for the number of vacation days
chosen from the matrix. These include start of the year or hire date, year-end or termination date, birthday, day of
seniority change, changes to the employment record in the accrual period.

The event dates/intervals and the accrual values found by matching the derived factors in the accrual matrix at these
event dates are passed into the accrual formula.

The accrual formula calculates the accrual for the identified periods and totals the values. If the age didn't change
around 21 or the seniority did not reach the next level, no proration is done. If there are no other changes during the
year, there is just one interval from 01-Jan to 31-Dec of the year and no proration is required.

You may prorate based on birth date or seniority date through the derived factor setup. The derived factors enable
calculation of the respective values based on the real date or on beginning or end of the year (there are many other
options but these are the ones used in this case). For example, if you calculated the seniority derived factor based
on the real date and the change of years triggers a change in the accrual, proration is done. If the derived factor
provides the seniority as end of the year, no proration is done.

6 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Create Absence Plan
To create an absence plan:
1. In the Absence Administration work area, select Manage Absence Plans under Absence Definitions:

2. Click Create:

3. Select Legislation Switzerland and Plan Type Accrual.


4. Click Continue.
5. Enter the plan attributes as shown in the screen below:

7 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


6. In the General Attributes section, enter the following information:
» Select the Plan UOM Days (which are workdays)
» Enter the plan term type calendar year with the related start dates

Note:
» If working with the accrual event formula (see appendix), ensure that the name of the plan is the same as the
name of this formula (the formula cannot be attached to the plan in the UI).
» When using fast formula, do not include spaces in the name. You may use underscore, if required.

8 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


7. Enter the Participation details as shows below:

8. Define and select an eligibility profile. The eligible persons are enrolled to this plan with the absence start
date. You can also manually enroll the employees.

9 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


9. Enter the Accruals details as shown below:

10. Set the accrual method to Incremental. Together with the accrual formula, the annual vacation accrual will
be calculated, including the required prorations due to fractional years or changes that impact the
workdays per week for part-time employees.
11. Choose a monthly repeating period.
12. Select the option to allow a negative balance and set rules for carryover, if required.
13. Enter the derived factors for age and/or years of service and the accrual formula to calculate the different
accrual rates.

10 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Note: The accrual definition itself is setup in the Accrual Matrix with accrual method Incremental and
calculation frequency monthly. In our example the general Accrual Proration Rule is not used, Pro-ration
happens directly in the accrual formula - driven by the results of the accrual event formula. These results
would not be available to the Accrual Proration Rule. The same applies to the Partial Accrual Period
Formula, pro-ration based on partial periods is also calculated in the matrix accrual formula based on
results of the event formula.
For more information, see the Appendix for matrix accrual formula.
14. Enter the Entries and Balances as shown below:

15. To adjust the vacation balance manually, select the Other adjustments check box. Enter the adjustment
reasons to active this feature.
Note: Currently, the application does not calculate any rates or amounts as payment information, and
transfer it to the payroll. The scope of this document includes providing only the absence setup and related
periods of the employees as basis for a (third-party) payroll interface.

11 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Create Absence Types
The absence type enables you to enter and store information associated with the occurrence of an absence.

To create absence types:


1. From the Absence Administration work area, select Manage Absence Types:

2. Select Create Absence type from the Manage Absence Type page.
3. Enter the effective date, legislation Switzerland and pattern Generic absence:

4. Click Continue.
5. In the Type Attributes tab, enter the details as shown below:

12 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


6. Select UOM as Days.
7. Select the appropriate LDG.
8. Select the eligibility profile, for example, Employee.
9. Enter the duration rules details, if required.
10. Set the partial day rule to enable partial vacation days, if required.
11. In the absence record maintenance, enable the appropriate groups to update the absence records.
12. In the Plans and Reasons tabs, click Select and Add for absence plans.
13. Select the absence plan from the absence plans created earlier and enter the other required information:

14. In the tab Display Features, the information is defaulted as shown below:

13 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Note:

You can use some options to activate displays and rules. In the above example, all settings are defaulted and no
additional action is necessary.

No further action is required for the annual leave.

14 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Tips and Consideration

Derived Factors
You can setup derived factors to determine the employee’s age or seniority, which is used then to calculate extra
vacation days.

To do this, navigate to Home -> Benefits Administration -> Plan Configuration -> Manage Derived Factors

Age Factor

The age factor is used to identify if an employee is 21 or less years old. In such cases, there is an extra accrual of 5
days annual vacation (see absence plan – accrual details – accrual matrix). You can calculate the age by setting
the Determination Rule using one of the predefined options as shown below:

If you select the Determination Rule As of event date, the age changes in the month of the birthday leading to
potential proration in the year employee turns 22)

If you select First of calendar year, the age remains the same as the value employee had on the 01-January for all
calculation periods and the thus the accrual will not change.

15 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Years of Service Factor

This factor is used to determine the service years of the employee. The employees receive additional vacation days
after serving the company for multiple years. There is no common rule for the scale, the factor is used as an
example on how to setup customer-specific matrices. Similar to the age factor, you can use the determination rule
(which determines as of which date variation the value is calculated) to select whether or not you want to prorate on
the exact day or month. For example, by using the service date as of the 1st of January for the whole year’s
calculation.

16 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Customer Flexfields for Annual Leave – Workdays per Week
The vacation accrual maybe influenced by additional factors such as number of workdays per week. If the attribute
is not available on the person or employment or disability record, the customer may add a flexfield segment to
capture this data and then use the generic DBI for the respective column to retrieve the data item in the accrual
formula.

This example uses a hypothetical customer flexfield segment for the number of working days for the employee. This
is relevant for part-time employees because the vacation accrual is prorated by dividing standard company
workdays per week by the number of days the employee works. An alternative to this attribute would be evaluating
the schedule, if one was assigned.

To set up the customer flexfield:

1. Navigate to the Setup & Maintenance work area.

2. Search for and select the task Manage Employment Descriptive Flexfields.

3. Select PER_ASG_DF Flexfield:

17 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


A new global segment was created - WorkdaysPerWeek. In this example, the value set is Number 1. The value
range is 1-7. The attribute is displayed on the Assignment page of the employee as Workdays per week. The
collected data is stored in table per_all_assignments_m, column ASS_ATTRIBUTE_NUMBER5.

The new attribute is displayed as Workdays per week on the Manage Employment - Assignment page. In the
example, it is set to 2 for a specific effective date, the employee is working part-time and the part-time hours worked
is equivalent to 2 days of the week. Hence, the employee vacation accrual for the year must be prorated. You can
view the value of the attribute can be read in the accrual fast formula using the database item
PER_ASG_ATTRIBUTE_NUMBER5.

18 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Examples

Annual Vacation for Young Employees (Full Year Employment)


» Hire a young employee on 01-Jan -2018 (Date of Birth 01.Jan-2000) as of 01-Jan-2018, 5 workdays per week.
» Run the absence accrual process for January 2018:

» The balance is calculated with 25 days based on the age less than 21 years.

Annual Vacation for Young Employees (Partial Year Employment)


» Hire a young employee (Date of Birth01-Jan-2000 as of 01-Feb-2018, 5 working days per week.
» After running the absence accrual process for February 2018:

» The balance is calculated with 23 days based on the age less than 21 years and partial employment, that is 11
months in a year.

Annual Vacation for Young Employees (Mid-Month Hire, Mid-Year Termination)


» Hire a young employee (Date of Birth 01-Jan-2000) as of 15-July-2018, 5 working days per week.

19 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


» After running the absence accrual process for July 2018:

» The balance is calculated with 11,5 days based on the age less than 21 years and prorated based on the hire
date 15. July 2018:
5 months x 30 days + 17 partial days for July = 167 partial days of the year

167 partial days / 360 full days = 0,46

25 vacation days * 0,46 = 11,5 vacation days

» Entered termination as of 30. November 2018:

» The balance is calculated with 9,5 days:


4 months x 30 days + 17 partial days for July = 137 partial days of the year

137 partial days / 360 full days = 0,38

25 vacation days * 0,38 = 9,5 vacation days

Annual vacation for a young employee, who turns 21 in February 2018

» Hired a young employee (born 15. February 1997) as of 01.January 2018, 5 working days per week.
» After running the absence accrual process for January 2018:

» The balance is calculated with 20,5 days:


1/12 of 25 days (where he is still 20 years old) + 11/12 of 20 days (for the months of 21 years)

2,08 + 18,33 = 20,5 vacation days

Annual vacation for a part-time employee

20 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


» Hired a person as of 01.January 2018 with 2 working days per week
» After running the absence accrual process for January 2018:

» The balance is calculated with 8 days

21 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Types of Other Vacation
The following table gives an overview about the different types of other vacation:

Absence Type Absence Sub Type Comment

Common free hours / days Paid absences, entitled for:


Marriage 1-3 days
Birth 1 day
Death (Parents, Spouse, Child) 3 days
Death of other close relatives 1 day
Change of residence ½ to 1 day

Other by the employee required Unpaid Vacation Necessary time


free time

Absences due to family care Family care (care for sick children, …) Paid absences, entitled for 1 to
3 days

Absences due to a doctor’s visit Doctor Paid absence; necessary time


Dentist

Religious holidays (other than ./. Paid absence if the employee


valid in canton) catch up the lost time

Job Search ./. Paid or unpaid absence;


entitled for necessary time

Unjustified absences Being delayed Unpaid absence; no


entitlement

Force majeure Of avalanches buried way to work Unpaid absence; no


Canceled flight entitlement

Delay of the public transport

Not showing up or leaving without ./. Unpaid absence; no


giving notice entitlement

Vacation for non-school relevant ./. Unpaid absence; entitled for 5


service of young persons days

Professional education and Qualification required by employer Paid absence


training Qualification required by employee Paid or unpaid vacation

Setting up Other Vacation


To enable this feature, define different absence types (one for each absence reason) or work with absence reasons
that you assign to an absence type. There are two ways to enable the different other vacations. For each kind of
absence, you could either setup you own absence type or setup different absence reasons and assign them to one
absence type, that is, common free hours/days, force majeure or professional education and training.

The following example demonstrates the setup with absence reasons:

22 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Create Absence Reasons
1. From the Absence Administration work area, select Manage Absence Reasons:
2. Click Create and enter the required information as shown below:

Here an overview that shows possible reasons for other vacation:

Create Absence Plan - Qualification


For absences for which the employee is qualified (this are mostly paid absences), you can setup absence plans
from plan type Qualification. For other absences like unpaid vacation, you can setup absence plan from plan type
No Entitlement. The following example shows how you setup an absence plan from type Qualification.

1. In the Absence Administration work area, select Manage Absence Plans under Absence Definitions:

23 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


2. Click Create:

3. Define the plan type for the Swiss legislation as Qualification plan.
4. Click Continue.
5. In the Plan Attributes tab, define the UOM as Days and the plan term type as Absence duration:

24 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


6. In the Participation tab, select the eligibility profile this plan applies to:

7. In the Entitlements tabs, use the qualification band matrix to define the expression in the expression
builder, for example, 1=1.
8. Define a dummy duration in the qualification details:

25 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Note: Currently, the application does not calculate any rates or amounts as payment information, and transfer it to
the payroll. The scope of this document includes providing only the absence setup and related periods for the
employees as basis for a (third-party) payroll interface.

Create the Absence Type


1. Select the pattern as Generic absence:

2. In the Type Attributes tab, enter the required information as shown below:

26 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


3. Select unit of measurement (UOM) as Days.
4. Select the appropriate LDG.
5. Select the eligibility profile, for example, Employee.
6. Enter the duration rules details, if required.
Note: To create a message for a limitation of the absence duration, enter the duration rules. In this
example, a warning message is generated when the duration limit is exceeded.
7. Set the partial day rule to enable partial vacation days.
8. In the absence record maintenance, enable the appropriate groups to update the absence records.
9. In the Plans and Reasons tab, assign the absence plan and the reasons:

10. In the Display Reasons tab, ensure that the reason field is displayed and editable or set as Entry Required:

27 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Note:

You can use some options to activate displays and rules. In the above example, all settings are defaulted and no
additional action is necessary.

28 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Create Absence Plan – No Entitlement
For absence types for which the employee is not qualified (for example unpaid vacation), you can setup absence
plans from plan type No Entitlement.

1. From the Absence Administration work area, select Manage Absence Plans:

2. Click Create:

3. Select Legislation Switzerland.


4. Select the plan type No entitlement.
5. Click Continue.
6. Enter the plan attributes as shown in the screen below:

29 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


7. In the General Attributes section, enter the following information:
» Select the Plan UOM as Calendar Days.
» Enter the plan term type calendar year with the related start dates.
8. Enter the Participation details as shows below:

9. Click the Entries and Balances tab:

30 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Note: Currently, the application does not to calculate any rates or amounts as payment information, and transfer it to
the payroll. The scope of this document includes providing only the absence setup and related periods for the
employees as basis for a (third-party) payroll interface.

Create Absence Type


To create absence types:
1. From the Absence Administration work area, select Manage Absence Types:

2. Select Create Absence type from the Manage Absence Type page. Enter the effective date, legislation
Switzerland and pattern Generic absence:

31 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


3. Click Continue.
4. In the Type Attributes tab, enter the details as shown below:

5. Select unit of measurement (UOM) as Calendar Days.


6. Select the appropriate LDG.
7. Select the eligibility profile, for example, Employee.
8. Enter the duration rules details, if required.
9. Set the partial day rule to enable partial vacation days.
10. In the absence record maintenance, enable the appropriate groups to update the absence records.
11. In the Legislative Information section, enter the following information:

32 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


12. In the Plans and Reasons tabs, click Select and Add for absence plans and if available also for absence
reasons:

13. In the Display Reasons tab, ensure that the reason field is displayed and editable or set as ‘Entry
Required’:

Note:

You can use some options to activate displays and rules. In the above example, all settings are defaulted and no
additional action is necessary.

No further action is required for the unpaid leave.

33 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Working with Absence Reasons
If you have defined absence reasons and added them to an absence type, you must select the appropriate one
while entering an absence record.

In this example, there are a few absence reasons defined for other vacation, that is, common free days. These are
assigned to the absence type Common free days.

To specify a different absence reason, in the Manage Absence Records under Absence Administration, select the
appropriate reason in the details section:

Message Alert for Exceeding Duration Limits


You can set warning alerts for absences that exceed a duration limit (in this example, 3 days).

Prerequisites

34 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


» To enable this, you must have set the duration rule when you create the absence type.
If you then enter an absence, for example, 7/2/18 – 7/6/18, the application generates the following warning
message:

35 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Appendix

Absence Accrual Event Formula


The absence event formula calculated dates (event dates) at which an event happens during the accrual period that
may impact the calculation. It returns an array of the calculated dates that is passed on to the accrual matrix formula.

Note: You cannot attach the accrual formula to the accrual plan using the setup. It needs to have the same LDG
name LDG as the accrual plan and is executed automatically. Fast formulas may not have spaces in the name
whereas absence plan may have them. Hence, the plan needs to be defined with a name without spaces.
Underscores are allowed.

As a minimum the event formula should return the beginning and end of the accrual period. The considered period
for the accrual is the calendar year, thus the input variable IV_CALENDARSTARTDATE and
IV_CALENDARENDDATE are used for a 'normal year'. If the employee is hired mid-year the accrual period for that
year is shortened and the hire date is used instead of calendar start. Similar to termination, if the employee is
terminated in the year under consideration, the actual termination date is used instead of the calendar end date.

The birth day of the employee is also inserted into the event array as the accrual may change with the age. It is only
inserted if it falls into the active working period. For example, if the employee is hired on March 1st and the birthday
is in February, it's not inserted into the result array. The date on which the years of service change is also inserted
into the result array as accrual may change when a certain number of years of service is reached. This is done for
all years excluding the year of hire because in that case the service date and the hire date are the same.

Additionally the event formula inserts all dates into the result array on which the employment record has changed
during the year. It uses the PER_HIST_ASG_EFFECTIVE_START_DATE array DBI to identify the dates inside of
the active period - the full or fractional year. In the example, the formula changes considered are limited to changes
on Employment Terms by using the condition PER_HIST_ASG_ASSIGNMENT_TYPE[i] = 'ET', this may of course
be changed if multiple assignments are used and the assignment holds information relevant for the accrual.

Finally, the array is sorted in ascending order and any potential duplicates are removed, so that the accrual formula
receives a sorted array of dates in the year that have a potential impact on the accrual calculation. The accrual
formula assumes the ascending sort for its determination algorithm.

Example:

An employee is hired on 03-Jan-2017 and his birthday is 08-Dec. The employee changed location on 05-Jan-2017
(employment change) and changed from full to part-time with 2 days per week on 10-Jan-17 (employment change).
The result array will hold 5 dates:

ARRAY INDEX VALUE IN IV_EVENT_DATES REASON

1 03/01/17 Start of the active period - hired in current year

2 05/01/17 employment change

3 08/12/17 birthday, lets assume employee turns 21

4 10/01/17 employment change (work time)

5 12/31/17 end of year

Whether or not the annual accrual value changes as of any of these dates will be identified in the accrual matrix
formula. Not all of these dates may be relevant.

36 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Sample event formula
________________________________________

DEFAULT FOR PER_PER_DATE_OF_BIRTH IS '0001/01/01 00:00:00' (DATE)

DEFAULT FOR PER_TERM_REL_DATE_START IS '0001/01/01 00:00:00' (DATE)

DEFAULT FOR PER_TRM_REL_ACTUAL_TERMINATION_DATE IS '0001/01/01 00:00:00' (DATE)

DEFAULT FOR PER_TRM_NORMAL_HOURS IS 0.0

DEFAULT FOR PER_ASG_EFFECTIVE_START_DATE IS '4712/12/31 00:00:00' (date)

DEFAULT_DATA_VALUE FOR PER_HIST_ASG_EFFECTIVE_START_DATE IS '4712/12/31 00:00:00' (date)

DEFAULT_DATA_VALUE FOR PER_HIST_ASG_ASSIGNMENT_TYPE is ' '

DEFAULT_DATA_VALUE FOR PER_HIST_ASG_EFFECTIVE_LATEST_CHANGE is ' '

DEFAULT_DATA_VALUE FOR PER_HIST_ASG_ASSIGNMENT_ID is 0

DEFAULT FOR IV_CALEDARSTARTDATE IS '4712/12/31 00:00:00' (date)

DEFAULT FOR IV_CALEDARENDDATE IS '4712/12/31 00:00:00' (date)

DEFAULT FOR IV_BAND_CHG_DT1 IS '4712/12/31 00:00:00' (date)

DEFAULT FOR IV_BAND_CHG_BEFVAL1 IS 0.0

DEFAULT FOR IV_BAND_CHG_AFTVAL1 IS 0.0

DEFAULT FOR IV_EVENT_DATES IS EMPTY_DATE_NUMBER

INPUTS ARE IV_ACCRUALPERIODSTARTDATE (date)

,IV_ACCRUALPERIODENDDATE (date)

,IV_CALEDARSTARTDATE (date)

,IV_CALEDARENDDATE (date)

,IV_PLANENROLLMENTSTARTDATE (date)

,IV_PLANENROLLMENTENDDATE (date)

,IV_BAND_CHG_DT1 (date)

,IV_BAND_CHG_BEFVAL1 (number)

,IV_BAND_CHG_AFTVAL1 (number)

DEFAULT FOR TEMP_EVENT_DATES is EMPTY_DATE_NUMBER

37 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


l_birth_date = '0001/01/01 00:00:00' (DATE)

l_hire_date = '0001/01/01 00:00:00' (DATE)

l_termination_date = '0001/01/01 00:00:00' (DATE)

IF PER_PER_DATE_OF_BIRTH WAS NOT DEFAULTED THEN

l_birth_date = PER_PER_DATE_OF_BIRTH

IF PER_TERM_REL_DATE_START WAS NOT DEFAULTED THEN

l_hire_date = PER_TERM_REL_DATE_START

IF PER_TRM_REL_ACTUAL_TERMINATION_DATE WAS NOT DEFAULTED THEN

l_termination_date = PER_TRM_REL_ACTUAL_TERMINATION_DATE

IF PER_TRM_NORMAL_HOURS WAS NOT DEFAULTED THEN

l_normal_hours = PER_TRM_NORMAL_HOURS

/* year begin or hire date if hired in the current year */

If l_hire_date > IV_CALEDARSTARTDATE then

TEMP_EVENT_DATES[1] = l_hire_date

else

TEMP_EVENT_DATES[1] = IV_CALEDARSTARTDATE

/* year end or termination date if terminated in the current year */

if (l_termination_date < IV_CALEDARENDDATE and l_termination_date > IV_CALEDARSTARTDATE) then

TEMP_EVENT_DATES[2] = l_termination_date

else

TEMP_EVENT_DATES[2] = IV_CALEDARENDDATE

l_birth_day = to_date(to_text(IV_CALEDARSTARTDATE,'YYYY') || to_text(l_birth_date,'MMDD'),'YYYYMMDD')

l_service_day = to_date(to_text(IV_CALEDARSTARTDATE,'YYYY') || to_text(l_hire_date,'MMDD'),'YYYYMMDD')

j=3

/* add birthday if not - hire in current year and birthday before hire */

38 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


if ((TEMP_EVENT_DATES[1] = IV_CALEDARSTARTDATE) OR (l_hire_date < l_birth_day)) then (

TEMP_EVENT_DATES[j] = l_birth_day

j = j+1

/* add service day if not hired in current year */

if (not l_service_day = l_hire_date) then (

TEMP_EVENT_DATES[j] = l_service_day

j = j+1

i=1

mn = 1

/* add term/assignment change date if not yet in array and a relevant change happend */

WHILE PER_HIST_ASG_EFFECTIVE_START_DATE.EXISTS(i)

LOOP

IF (PER_HIST_ASG_EFFECTIVE_START_DATE[i] > TEMP_EVENT_DATES[1] AND


PER_HIST_ASG_EFFECTIVE_START_DATE[i] < TEMP_EVENT_DATES[2] AND
PER_HIST_ASG_EFFECTIVE_START_DATE[i] != TEMP_EVENT_DATES[mn])

THEN (

if (PER_HIST_ASG_ASSIGNMENT_TYPE[i] = 'ET' and PER_HIST_ASG_EFFECTIVE_LATEST_CHANGE[i]


= 'Y') then (

TEMP_EVENT_DATES[j] = PER_HIST_ASG_EFFECTIVE_START_DATE[i]

j=j+1

mn = mn + 1

i=i+1

/* run bubble-sort on TEMP_EVENT_DATES */

s=1

x = '0001/01/01 00:00:00' (DATE)

39 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


while s < TEMP_EVENT_DATES.count - 1 loop (

i=1

j=2

while TEMP_EVENT_DATES.exists(j) loop (

if TEMP_EVENT_DATES[j] < TEMP_EVENT_DATES[i] then (

x = TEMP_EVENT_DATES[i]

TEMP_EVENT_DATES[i] = TEMP_EVENT_DATES[j]

TEMP_EVENT_DATES[j] = x

i=i+1

j=j+1

s=s+1

/* copy distinct ordered dates to IV_EVENT_DATES array */

j=1

i=1

cmp_date = '0001/01/01 00:00:00' (DATE)

WHILE TEMP_EVENT_DATES.EXISTS(j)

LOOP

if (NOT TEMP_EVENT_DATES[j] = cmp_date) then (

IV_EVENT_DATES[i] = TEMP_EVENT_DATES[j]

i=i+1

cmp_date = TEMP_EVENT_DATES[j]

j = j+1

return IV_EVENT_DATES

40 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Absence Matrix Accrual Formula
The matrix accrual formula calculates the annual vacation accrual of the employee, including potentially necessary
pro-rations due to fractional years and/or other changes that impact the value like work days in the wee for part time
employees.

As the absence event formula is used in this example, it works hand-in-hand with the matrix accrual formula. How
does this handshake work?
» The absence core system passes the date array that is returned by the absence event formula as input parameter
to the accrual matrix formula: input parameter IV_EVENT_DATES
» The absence core system evaluates the matrix as of ANY of the event dates in this array. According to the
absence doc this is done for age and years-of-service derived factors
» The absence core system creates a further input array IV_ACCRUAL_VALUES that holds the matrix accrual
value of the matrix row that corresponds to the derived factors AS OF the corresponding event date in the
IV_EVENT_DATES
Let’s consider the accrual matrix that has been setup in this plan:

For each of the dates in the IV_EVENT_DATES array that has been produced by the event formula, the system
» evaluates the derived factors
» fetches the accrual rate from the matching row
» puts the accrual rate into the IV_ACCRUAL_VALUES array
then passes both arrays IV_EVENT_DATES and IV_ACCRUAL_VALUES to the accrual formula.

So if we consider the example from the event formula description here again and additionally assume that the
determination rule for the age and YOS derived factors had been set to 'As of event date', the input arrays to the
accrual formula would look like this:

IV_EVENT_DATES value IV_ACCRUAL_VALUES value


Index Explanation

1 03/01/17 25 age is < 21, row 10 selected

2 05/01/17 25 age is < 21, row 10 selected

3 08/12/17 20 age = 21 and YOS < 1, row 20 selected

4 10/01/17 20 age = 21 and YOS < 1, row 20 selected

5 12/31/17 20 age = 21 and YOS < 1, row 20 selected

41 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Note: If the determination rule for the age factor would have been 'Begin of calendar year', factor would have
computed to 20 for all of the dates and the accrual would have been 25 for all dates. Just to illustrate how the
determination rule in the derived factor determines pro-ration.

With receiving these two input arrays as input parameters, the accrual matrix formula determines the accrual value.
This is done in three steps, reflected in the parts of the sample formula
1. Determine the annual accrual value
2. Compare to (potentially) already created accrual for the current year and create/store the delta
3. Handle uncommitted accruals (technical issue)

1. Determine the annual accrual value

In the first part, the formula steps through the event dates and evaluates the passed accrual value from
IV_ACCRUAL_VALUES as well as other values that may impact the accrual calculation. In the example this is the
attribute workdays per week that was created as a customer flex segment on assignments. It reads the value using
the DBI ASS_ATTRIBUTE_NUMBER5 as of the event date.

If one of the values changed in respect to the previous segment, it calculates the pro-rated accrual for the length of
the segment in full months using the respective values for that segment and adds it to the annual accrual value. If
hire or termination happen mid-month, the partial month is not counted. If any of the other changes happen mid-
months (e.g. a relevant birthday), the full month is added to the previous period.

In the data example we're using this would mean:


» Start 03/01/17
» 05/01/17 - no relevant change = skip
» 08/12/17 - accrual change due to age = 6 months from 03/01 resulting in (5*30+12) /360 * 25 = 11.25 rounded up
to 11.5 days
» 10/01/17 - accrual change due to work time change 2 days out of 5, 1 month from 8/31 resulting in (19+30) *20 /
360 = 2.72 rounded down to 2.5 days
» 12/31/17 - end of period resulting in final fractional accrual, 3 months from 10/1 resulting in (90/360 * 20 * 2/5) = 2
days
The annual accrual is 16 days. This is of course a rather complex scenario. In case there is no hire/termination/work
time change during the year there would be just one segment of 12 month with a single accrual value.

Rounding explained: For rounding vacation days per interval in the year the formula is using the following method

» each full month counts 30 days


» each partial month counts the days in the actual interval (e.g. hire on the 20.3 counts 20 days for March)
» the sum is divided by 360
» fractional values below 0.25 will be rounded down
» fractional values between 0.25 and 0.74 will be rounded to 0.5
» fractional values above 0.74 will be rounded to the next full integer

2. Compare to (potentially) already created accrual for the current year and create/store the delta

Changes to relevant data like termination or work time might be entered into the system AFTER the annual accrual
had been created in the initial calculation for the year (January or Hire Month). If this is the case, the calculated

42 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


accrual should not be stored directly but rather should the balance be updated to reflect the now current accrual
value for the year. The second part of the formula scans the already generated accrual values for the employee
using the ABS_EXT_ACR_ENT_VALUE array DBI and related ones. It then creates the necessary delta and
updates the balance.

Note: If no accrual has been stored yet for the year, the value calculated in step 1 will be stored as is.

3. Handle uncommitted accruals

The final step of the formula prevents writing a value to the balances in certain cases. This is necessary for the
correct handling of termination reversals and termination date changes. In these two cases the core system
calculates a series of months in one run and does not commit the calculated accrual after each month. Hence the
ABS_EXT_ACR_ENT_VALUE sees 'old' and not 'new' values and would store corrections for each calculate month
and not just one. The sample formula is built so that it stores the balance update for the first recalculated month in
these scenarios and not in the other ones (using the l_number_of_month_stored < l_expected_months condition).

Scenario Explanation:
1. Absence calculation for an employee has been run up to March
2. Employee is terminated to 8/31
3. Employee termination is moved to 10/31
4. Employee termination is reversed
Start point:

EXPLANATION
MONTH ACCRUAL VALUE

01 20 Annual accrual

02 0 no change

02 0 no change

Termination is entered before April absence run:

The system automatically processes all monthly periods outstanding for the employee up to the termination date.
This is done during termination processing from the UI

MONTH ACCRUAL VALUE EXPLANATION

01 20

02 0

03 0

04 -6.5 Termination entered, annual accrual is 13.5 days

05 0

06 0

07 0

08 0

43 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Termination is moved in May to 10/31 (Update Termination) - before the May absence run:

Note: The plan eligibility date for the employee needs to be updated using the Absence Records UI, it is not done
automatically

ACCRUAL
MONTH EXPLANATION
VALUE

01 20 original annual accrual

02 0

03 0

04 -6.5 pro-ration due to initial termination date

05 3 change termination date results in 16.5 days annual accrual, delta 3

06 0

07 0

08 0

09 0

10 0

Termination is completely reversed in July:

Note:

» The month in which the accrual update is stored depends on when the employee is calculated again (either
individually from the UI or in batch)
» As with termination correction, on reversal the plan eligibility date for the employee needs to be reset using
the UI
»
For the example, lets assume that the termination was reversed in the UI in July and that July absence hasn't yet
been run:

ACCRUAL
MONTH EXPLANATION
VALUE

01 20 Original accrual

02 0

03 0

04 -7 initial termination

05 3 moved termination date

06 0

correction for termination reversal, again full 20 days, later accrual periods are removed (July run) as the
07 3.5
employee is non-terminated now

44 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Sample Matrix Accrual Formula
________________________________________

DEFAULT FOR PER_ASG_ATTRIBUTE_NUMBER5 IS 0.0

DEFAULT FOR IV_ACCRUAL IS 0.0

DEFAULT FOR IV_EVENT_DATES IS EMPTY_DATE_NUMBER

DEFAULT FOR IV_ACCRUAL_VALUES IS EMPTY_NUMBER_NUMBER

DEFAULT_DATA_VALUE FOR ABS_EXT_ACR_ENT_PROCD_DATE IS '1900/01/01 00:00:00' (date)

DEFAULT_DATA_VALUE FOR ABS_EXT_ACR_ENT_TYPE is ' '

DEFAULT_DATA_VALUE FOR ABS_EXT_ACR_ENT_VALUE is 0

DEFAULT_DATA_VALUE FOR ABS_EXT_ACR_ENT_PL_ID is ' '

INPUTS ARE IV_ACCRUAL, IV_EVENT_DATES, IV_ACCRUAL_VALUES

in_accrual = 0.0

in_accrual = IV_ACCRUAL

l_interval_start = '0001/01/01 00:00:00' (DATE)

l_interval_end = '0001/01/01 00:00:00' (DATE)

l_interval_fm_start = '0001/01/01 00:00:00' (DATE)

l_interval_fm_end = '0001/01/01 00:00:00' (DATE)

l_prev_accrual = 0.0

l_interval_month = 0.0

accrual = 0.0

c_company_workdays_per_week = 5.0

/* initializing with default in case it was not set */

l_workdays = 5.0

l_previous_workdays = 0.0

l_workday_factor = 0.0

l_months = 0.0

45 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


l_fraction1 = 0.0

l_fraction2 = 0.0

l_interval = 0.0

j=1

WHILE IV_EVENT_DATES.EXISTS(j)

LOOP

/* compare to previous and set interval if required */

CHANGE_CONTEXTS(EFFECTIVE_DATE = IV_EVENT_DATES[j])

IF PER_ASG_ATTRIBUTE_NUMBER5 WAS NOT DEFAULTED THEN

l_workdays = PER_ASG_ATTRIBUTE_NUMBER5

if (j = 1) then

/* intialize the compare */

l_interval_start = IV_EVENT_DATES[j]

l_previous_workdays = l_workdays

l_prev_accrual = IV_ACCRUAL_VALUES[j]

if (j > 1) then

/* calculate the interval and add to accrual*/

if ((NOT l_workdays = l_previous_workdays) OR (NOT IV_ACCRUAL_VALUES[j] = l_prev_accrual) OR


(NOT IV_EVENT_DATES.EXISTS(j+1))) then

46 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


/* for intervals in the middle end data is one day less than next event date */

if (IV_EVENT_DATES.EXISTS(j+1)) then

l_interval_end = ADD_DAYS(IV_EVENT_DATES[j],-1)

else

l_interval_end = IV_EVENT_DATES[j]

/* interval begins at month begin? */

if (l_interval_start = TRUNC(l_interval_start,'MM')) then (

l_interval_fm_start = l_interval_start

l_fraction1 = 0.0

else (

l_interval_fm_start = ADD_DAYS(LAST_DAY(l_interval_start),1)

l_fraction1 = DAYS_BETWEEN(l_interval_fm_start, l_interval_start)

/* interval ends at end of a month? */

if (l_interval_end = LAST_DAY(l_interval_end)) then (

l_interval_fm_end = l_interval_end

l_fraction2 = 0.0

else (

l_interval_fm_end = ADD_DAYS(TRUNC(l_interval_end,'MM'),-1)

l_fraction2 = to_num(to_text(l_interval_end,'DD'))

l_months = TRUNC(MONTHS_BETWEEN
(ADD_DAYS(l_interval_fm_end,1) , l_interval_fm_start))

l_interval = (l_months * 30) + l_fraction1 + l_fraction2

l_workday_factor = l_previous_workdays / c_company_workdays_per_week

/* accrual = accrual + (l_prev_accrual * l_interval/12 * l_workday_factor) */

accrual = accrual + (l_prev_accrual * l_interval/360 * l_workday_factor)

47 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


l_interval_start = IV_EVENT_DATES[j]

l_previous_workdays = l_workdays

l_prev_accrual = IV_ACCRUAL_VALUES[j]

j = j+1

/* accrual = ROUND(accrual) */

if accrual - FLOOR(accrual) < 0.25 then

accrual = FLOOR(accrual)

else if accrual - FLOOR(accrual) > 0.74 then

accrual = FLOOR(accrual) + 1

else

accrual = FLOOR(accrual) + 0.5

/* already accrued in current in current year */

l_accrual_plan_id = GET_CONTEXT( ACCRUAL_PLAN_ID, 0)

l_effective_date = GET_CONTEXT( EFFECTIVE_DATE, to_date('0001-01-01','YYYY-MM-DD'))

l_accrued_ytd= 0

l_number_of_month_stored = 0

l_expected_months = 0

b_uncommitted_data = 0

l_front_load_period = 0

index = ABS_EXT_ACR_ENT_PROCD_DATE.FIRST(-1)

WHILE (ABS_EXT_ACR_ENT_PROCD_DATE.EXISTS(index))

48 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


LOOP (

l_proc_date = ABS_EXT_ACR_ENT_PROCD_DATE[index]

l_plan_id = ABS_EXT_ACR_ENT_PL_ID[index]

l_acrl_type = ABS_EXT_ACR_ENT_TYPE[index]

l_acrl_value = ABS_EXT_ACR_ENT_VALUE[index]

if (to_num(l_plan_id) = l_accrual_plan_id

AND l_proc_date >= to_date( to_text(IV_EVENT_DATES[1],'YYYY') || '0101' , 'YYYYMMDD')

AND l_proc_date < l_effective_date

AND (l_acrl_type = 'ACRL' OR l_acrl_type = 'FLDR')) then

l_accrued_ytd = l_accrued_ytd + l_acrl_value

l_number_of_month_stored = l_number_of_month_stored + 1

/* if front loaded, the only month that may be corrected is the one where front loading happened */

if (l_acrl_type = 'FLDR' and trunc(l_proc_date,'MM') = trunc(l_effective_date)) then

l_front_load_period = 1

index = ABS_EXT_ACR_ENT_PROCD_DATE.NEXT(index ,-1)

/* if number of stored month < current month number -1

* there are non-committed month due to term processing

* so flag this in order to to corrections only once */

l_expected_months =
TRUNC(MONTHS_BETWEEN(ADD_DAYS(l_effective_date,1),TO_DATE(to_text(IV_EVENT_DATES[1],'YYYYMM'
)||'01'))) -1

accrual = accrual - l_accrued_ytd

if ((l_number_of_month_stored < l_expected_months) and (l_front_load_period =0)) then

49 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


/* uncommitted value exists */

accrual = 0.0

RETURN accrual

50 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS


Oracle Corporation, World Headquarters Worldwide Inquiries
500 Oracle Parkway Phone: +1.650.506.7000
Redwood Shores, CA 94065, USA Fax: +1.650.506.7200

CONNECT W ITH US

blogs.oracle.com/oracle
Copyright © 2018, Oracle and/or its affiliates. All rights reserved. This document is provided for information purposes only, and the
contents hereof are subject to change without notice. This document is not warranted to be error-free, nor subject to any other
facebook.com/oracle warranties or conditions, whether expressed orally or implied in law, including implied warranties and conditions of merchantability or
fitness for a particular purpose. We specifically disclaim any liability with respect to this document, and no contractual obligations are
formed either directly or indirectly by this document. This document may not be reproduced or transmitted in any form or by any means,
twitter.com/oracle electronic or mechanical, for any purpose, without our prior written permission.

oracle.com Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and
are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are
trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group. 0418

White Paper Title: Oracle Fusion HCM (Switzerland): Absence Implementation and Functional Considerations
April 2018
Author: Sabine Bergmann
Contributing Authors: [OPTIONAL]

51 | ORACLE FUSION HCM (SWITZERLAND): ABSENCE IMPLEMENTATION AND FUNCTIONAL CONSIDERATIONS

You might also like