Quantcast
Channel: Oracle Fusion Apps | Oracle Fusion | Oracle Apps Training
Viewing all articles
Browse latest Browse all 103

Global Absence Accrual Matrix Fast Formula In Fusion Absence Management: An Introduction

$
0
0

{jcomments off}

Introduction

In this article we would try to understand what a fast formula is. Why is it named such way. Is it about some formula ( what kind of formula) and why is it called Fast ( is it something which is being tracked against time).

The answers to all the above question is ‘I don’t Know’.

Not sure why it is called fast formula it should be rather named as ‘Custom Code on Application UI’ or may be ‘Application Custom Code’.

So basically a Fast Formula or  Application Custom Code ( if you may like to call it that way) is a way which allows you to customize a delivered / seeded solution to meet specific business needs.

Types of Fast Formulas

Most of the times Fast Formulas are used for HCM related modules ( no comments on whether they can be used for other modules that would be a separate topic and would be discussed later) some of the primary ones being :

Functional Areas

  1. Payroll

  2. Absence Management

Technical Areas

  1. Inbound Integration ( Typical Example being Custom Logic to generate Person Number )

  2. Outbound Integration ( HCM Extracts)

In this article we would discuss primarily about Fast Formulas associated with Fusion Applications Absence Management.

While there are multiple types of Fast Formulas in Absence Management some of the ones we are trying to discuss here being:

  1. Global Absence Accrual

  2. Global Absence Accrual Matrix

  3. Global Absence Entry Validation

  4. Global Absence Partial Period Accrual Rate

  5. Global Absence Type Duration

  6. Global Absence Vesting Period

  7. Participation and Rate Eligibility Formula

Global Absence Accrual Matrix

Lets start with describing what do we mean by Global Absence Accrual Matrix. Truly speaking the name could very well have been Absence Accrual Matrix. For now lets say its Global Absence Accrual Matrix and not Absence Accrual Matrix ( for reasons not known to me ).

Absence means lack of presence and Accrual means method of accumulating. So Absence Accrual becomes ‘Method of Accumulating Lack of Presence’ or in simpler words ‘Method of Accumulating Absences’.

Matrix in simpler terms means ‘Multiple Categories / Bands ’.

Hence Global Absence Accrual Matrix will stand for Method of Accumulating Absences for Multiple Combinations / Categories / Bands. So when we have different Accrual Rules for Different Bands we need to use Accrual Matrix Formula.

Each organization may have different ways of accumulating absences like:

  1. Allocate All Leaves on the First Day of the Year ( Frontloaded Accruals)

  2. Allocate Leaves on regular intervals, say first day of month (Incremental Accrual).

A Sample Example

In this example the customer has a requirement where-in the customer wants to have Annual Absence Accrual based on different Bands (categories). The different Accrual Bands are classified based upon the length of Service ( SYSDATE – DATE_OF_HIRE) in Years . So the First Accrual band is for 3 years of LOS (length of Service) and corresponding Accrual Value is 15. Second band is for 6 years of LOS (lengths of Service) with accrual value of 18 and lastly Band 3 for all Individuals having LOS greater than 6, the accrual value is 21.

/*******************************************************************

FORMULA NAME: XX_ANC_XX_ACCMAT_Annual

FORMULA TYPE: Global Absence Accrual Matrix

DESCRIPTION: This sample formula will find the weighted average of the Accrual value based on the number of the days the employee was eligible in a particular band. For example, I an employee has changed from Band 1 to Band 2 on 03-Mar-2014 and accrual value for Band 1 and Band 2 is 100 and 200 respectively. The formula will return:

accrual =

(100*(number of days employee in Band1) + 200*(number of days Employee in Band 2))/365

Change History:

Name Date Comments

--------------------------------------------------------------------------------------------------------------------

Ashish Harbhajanka 12-May-2015 Initial Version

--------------------------------------------------------------------------------------------------------------------

***********************************************************************/

/*=========== DATABASE ITEM DEFAULTS BEGIN =====================*/

DEFAULT for PER_ASG_REL_ORIGINAL_DATE_OF_HIRE is '4712/12/31 00:00:00' (date)

Default for IV_BAND_CHG_DT1 is '1951/01/01 00:00' (date)

Default for IV_BAND_CHG_DT2 is '1951/01/01 00:00' (date)

DEFAULT for IV_ACCRUALPERIODSTARTDATE is '4712/12/31 00:00:00' (date)

DEFAULT for IV_ACCRUALPERIODENDDATE is '4712/12/31 00:00:00' (date)

Default for IV_BAND_CHG_BEFVAL1 is 15

Default for IV_BAND_CHG_AFTVAL1 is 18

Default for IV_BAND_CHG_AFTVAL2 is 21

DEFAULT FOR PER_ASG_PERSON_NUMBER IS 'X'

Default for IV_CEILING is 0

Default for IV_CARRYOVER is 0

Inputs are IV_ACCRUAL,IV_BAND_CHG_DT1,IV_BAND_CHG_DT2,IV_BAND_CHG_BEFVAL1,IV_BAND_CHG_AFTVAL1,IV_BAND_CHG_BEFVAL2,IV_BAND_CHG_AFTVAL2,IV_CARRYOVER,IV_CEILING,IV_ACCRUALPERIODSTARTDATE,IV_ACCRUALPERIODENDDATE

/*=========== DATABASE ITEM DEFAULTS ENDS======================*/

/*================ FORMULA SECTION BEGIN =======================*/

ld_effective_date = GET_CONTEXT(EFFECTIVE_DATE,'4712/12/31 00:00:00' (date))

ld_term_start_date = TO_DATE('01-01-'||TO_CHAR(ld_effective_date, 'rrrr'),'dd-mm-rrrr')

ld_term_end_date = TO_DATE('31-12-'||TO_CHAR(ld_effective_date, 'rrrr'),'dd-mm-rrrr')

ld_band1_end_date = ADD_YEARS(PER_ASG_REL_ORIGINAL_DATE_OF_HIRE,3)

ld_band2_end_date = ADD_YEARS(PER_ASG_REL_ORIGINAL_DATE_OF_HIRE,6)

accrual = IV_ACCRUAL

l_log = ess_log_write('***********************START********************************')

l_log = ess_log_write('PERSON_NUMBER : '|| PER_ASG_PERSON_NUMBER)

l_log = ess_log_write('ld_effective_date : '|| TO_CHAR(ld_effective_date,'DD-MM-YYYY'))

l_log = ess_log_write('ld_band1_end_date : '|| TO_CHAR(ld_band1_end_date,'DD-MM-YYYY'))

l_log = ess_log_write('ld_band2_end_date : '|| TO_CHAR(ld_band2_end_date,'DD-MM-YYYY'))

l_log = ess_log_write('IV_BAND_CHG_BEFVAL1 : '|| TO_CHAR(IV_BAND_CHG_BEFVAL1))

l_log = ess_log_write('IV_BAND_CHG_AFTVAL1 : '|| TO_CHAR(IV_BAND_CHG_AFTVAL1))

l_log = ess_log_write('IV_BAND_CHG_AFTVAL2 : '|| TO_CHAR(IV_BAND_CHG_AFTVAL2))

l_log = ess_log_write('Initial Accrual : '|| TO_CHAR(IV_ACCRUAL))

l_log = ess_log_write('Accrual Period Start Date : '|| TO_CHAR(IV_ACCRUALPERIODSTARTDATE,'DD-MON-RRRR'))

l_log = ess_log_write('Accrual Period End Date : '|| TO_CHAR(IV_ACCRUALPERIODENDDATE,'DD-MON-RRRR'))

l_log = ess_log_write('***********************END********************************')

IF (TO_CHAR(ld_effective_date,'YYYY') = TO_CHAR(ld_band1_end_date,'YYYY')) /* (TO_CHAR(ld_effective_date,'YYYY') = TO_CHAR(IV_BAND_CHG_DT1,'YYYY')) */

THEN

(

l_log = ess_log_write('Within Band 1')

l_no_of_ds1 = DAYS_BETWEEN(ld_band1_end_date,ld_term_start_date) + 1

l_log = ess_log_write('l_no_of_ds1 : '|| TO_CHAR(l_no_of_ds1))

l_no_of_ds2 = DAYS_BETWEEN(ld_term_end_date,ld_band1_end_date) + 1

l_log = ess_log_write('l_no_of_ds2 : '|| TO_CHAR(l_no_of_ds2))

l_no_of_ds3 = 0

l_log = ess_log_write('IV_BAND_CHG_BEFVAL1 : '|| TO_CHAR(IV_BAND_CHG_BEFVAL1))

l_log = ess_log_write('IV_BAND_CHG_AFTVAL1 : '|| TO_CHAR(IV_BAND_CHG_AFTVAL1))

l_log = ess_log_write('IV_BAND_CHG_AFTVAL2 : '|| TO_CHAR(IV_BAND_CHG_AFTVAL2))

accrual=(l_no_of_ds1*IV_BAND_CHG_BEFVAL1 + l_no_of_ds2 * IV_BAND_CHG_AFTVAL1 + l_no_of_ds3*IV_BAND_CHG_AFTVAL2)/ 365

l_log = ess_log_write('Accrual : '|| TO_CHAR(accrual))

)

IF (TO_CHAR(ld_effective_date,'YYYY') = TO_CHAR(ld_band2_end_date,'YYYY')) /*(TO_CHAR(ld_effective_date,'YYYY') = TO_CHAR(IV_BAND_CHG_DT2,'YYYY'))*/

THEN

(

l_log = ess_log_write('Within Band 2')

l_no_of_ds1 = 0

l_no_of_ds2 = DAYS_BETWEEN(ld_band2_end_date,ld_term_start_date) + 1

l_log = ess_log_write('l_no_of_ds2 : '|| TO_CHAR(l_no_of_ds2))

l_no_of_ds3 = DAYS_BETWEEN(ld_term_end_date,ld_band2_end_date) + 1

l_log = ess_log_write('l_no_of_ds3 : '|| TO_CHAR(l_no_of_ds3))

l_log = ess_log_write('IV_BAND_CHG_BEFVAL1 : '|| TO_CHAR(IV_BAND_CHG_BEFVAL1))

l_log = ess_log_write('IV_BAND_CHG_AFTVAL1 : '|| TO_CHAR(IV_BAND_CHG_AFTVAL1))

l_log = ess_log_write('IV_BAND_CHG_AFTVAL2 : '|| TO_CHAR(IV_BAND_CHG_AFTVAL2))

accrual=(l_no_of_ds1*IV_BAND_CHG_BEFVAL1 + l_no_of_ds2 * IV_BAND_CHG_AFTVAL1 + l_no_of_ds3*IV_BAND_CHG_AFTVAL2)/ 365

l_log = ess_log_write('Accrual : '|| TO_CHAR(accrual))

)

l_log = ess_log_write(' Prorated Accrual considered : '|| TO_CHAR(accrual))

floored_accrual = FLOOR(accrual)

decimal_accrual = accrual - floored_accrual

IF (decimal_accrual < 0.5 )

THEN

accrual = floored_accrual

IF (decimal_accrual >= 0.5)

THEN

accrual = floored_accrual + 1

l_log = ess_log_write(' Final Accrual considered : '|| TO_CHAR(accrual))

carryover = IV_CARRYOVER

ceiling = IV_CEILING

l_log = ess_log_write(' Carryover : '|| TO_CHAR(IV_CARRYOVER))

l_log = ess_log_write(' Ceiling : '|| TO_CHAR(IV_CEILING))

return accrual,ceiling,carryover

We would discuss more in details about the other Absence Fast Formula in other article.

Till then bye, do try this out.


Viewing all articles
Browse latest Browse all 103

Trending Articles