Professional Documents
Culture Documents
Absence Implementation - Fast Formula Sample PDF
Absence Implementation - Fast Formula Sample PDF
Introduction 1
Overview 6
Derived Factors 15
Examples 19
19
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.
Other
Annual Vacation
Vacation
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.
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:
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%.
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.
The following table shows the reduction of annual vacation depending on different kinds of absences:
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.
2. Click Create:
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. 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.
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.
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.
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:
14. In the tab Display Features, the information is defaulted as shown below:
You can use some options to activate displays and rules. In the above example, all settings are defaulted and no
additional action is necessary.
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.
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.
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.
2. Search for and select the task Manage Employment Descriptive Flexfields.
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.
» The balance is calculated with 25 days based on the age less than 21 years.
» 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.
» 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
» 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:
Absences due to family care Family care (care for sick children, …) Paid absences, entitled for 1 to
3 days
1. In the Absence Administration work area, select Manage Absence Plans under Absence Definitions:
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:
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:
2. In the Type Attributes tab, enter the required information as shown below:
10. In the Display Reasons tab, ensure that the reason field is displayed and editable or set as Entry Required:
You can use some options to activate displays and rules. In the above example, all settings are defaulted and no
additional action is necessary.
1. From the Absence Administration work area, select Manage Absence Plans:
2. Click Create:
2. Select Create Absence type from the Manage Absence Type page. Enter the effective date, legislation
Switzerland and pattern Generic absence:
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.
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:
Prerequisites
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:
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.
,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)
l_birth_date = PER_PER_DATE_OF_BIRTH
l_hire_date = PER_TERM_REL_DATE_START
l_termination_date = PER_TRM_REL_ACTUAL_TERMINATION_DATE
l_normal_hours = PER_TRM_NORMAL_HOURS
TEMP_EVENT_DATES[1] = l_hire_date
else
TEMP_EVENT_DATES[1] = IV_CALEDARSTARTDATE
TEMP_EVENT_DATES[2] = l_termination_date
else
TEMP_EVENT_DATES[2] = IV_CALEDARENDDATE
j=3
/* add birthday if not - hire in current year and birthday before hire */
TEMP_EVENT_DATES[j] = l_birth_day
j = j+1
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
THEN (
TEMP_EVENT_DATES[j] = PER_HIST_ASG_EFFECTIVE_START_DATE[i]
j=j+1
mn = mn + 1
i=i+1
s=1
i=1
j=2
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
j=1
i=1
WHILE TEMP_EVENT_DATES.EXISTS(j)
LOOP
IV_EVENT_DATES[i] = TEMP_EVENT_DATES[j]
i=i+1
cmp_date = TEMP_EVENT_DATES[j]
j = j+1
return IV_EVENT_DATES
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:
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)
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.
Rounding explained: For rounding vacation days per interval in the year the formula is using the following method
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
Note: If no accrual has been stored yet for the year, the value calculated in step 1 will be stored as is.
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
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
01 20
02 0
03 0
05 0
06 0
07 0
08 0
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
02 0
03 0
06 0
07 0
08 0
09 0
10 0
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
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
in_accrual = 0.0
in_accrual = IV_ACCRUAL
l_prev_accrual = 0.0
l_interval_month = 0.0
accrual = 0.0
c_company_workdays_per_week = 5.0
l_workdays = 5.0
l_previous_workdays = 0.0
l_workday_factor = 0.0
l_months = 0.0
l_fraction2 = 0.0
l_interval = 0.0
j=1
WHILE IV_EVENT_DATES.EXISTS(j)
LOOP
CHANGE_CONTEXTS(EFFECTIVE_DATE = IV_EVENT_DATES[j])
l_workdays = PER_ASG_ATTRIBUTE_NUMBER5
if (j = 1) then
l_interval_start = IV_EVENT_DATES[j]
l_previous_workdays = l_workdays
l_prev_accrual = IV_ACCRUAL_VALUES[j]
if (j > 1) then
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]
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_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_previous_workdays = l_workdays
l_prev_accrual = IV_ACCRUAL_VALUES[j]
j = j+1
/* accrual = ROUND(accrual) */
accrual = FLOOR(accrual)
accrual = FLOOR(accrual) + 1
else
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))
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
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 */
l_front_load_period = 1
l_expected_months =
TRUNC(MONTHS_BETWEEN(ADD_DAYS(l_effective_date,1),TO_DATE(to_text(IV_EVENT_DATES[1],'YYYYMM'
)||'01'))) -1
accrual = 0.0
RETURN accrual
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]