Global Absence Partial Period Accrual Rate

The Global Absence Partial Period Accrual Rate fast formula is where any logic required for proration of accrual balance during enrollment year and disenrollment year needs to be entered.

If the annual accrual that a worker is eligible for every year is 20 days and the worker has enrolled into the plan mid year, the organization would like to grant the worker 10 days for the year of enrollment since the worker is eligible only for half the year. Similarly, if a worker disenrolls from a plan mid year, the total accrual for that year would need to be reduced from 20 to 10 because the worker was enrolled into the plan for only half the year.

This formula is invoked when enrollment or disenrollment dates fall within the repeating period for which the accrual is being processed.

Configuration Point in HCM Cloud

If you have created this formula, you can attach this formula to the absence plan definition.

Navigation

  1. In the Absence Administration work area, click Absence Plans to open the Absence Plans page.
  2. On the Search Results section toolbar, click Create to open the Create Absence Plan dialog box.
  3. In the Plan Type field, select Accrual.
  4. Click Continue.
  5. On the Edit Absence Plan page Accruals tab Accrual Attributes section, select the desired formula in the Partial Accrual Period Formula field.

Contexts

The following contexts are available in this formula type:

Context Name Data Type
ABSENCE_ENTRY_ID Number
ABSENCE_TYPE_ID Number
ACCRUAL_PLAN_ID Number
DATE_EARNED Date
EFFECTIVE_DATE Date
END_DATE Date
ENTERPRISE_ID Number
HR_ASSIGNMENT_ID Number
HR_RELATIONSHIP_ID Number
HR_TERM_ID Number
JOB_ID Number
LEGAL_EMPLOYER_ID Number
LEGISLATIVE_DATA_GROUP_ID Number
ORGANIZATION_ID Number
PAYROLL_ASSIGNMENT_ID Number
PAYROLL_ID Number
PAYROLL_RELATIONSHIP_ID Number
PAYROLL_TERM_ID Number
PERSON_ID Number
START_DATE Date

Input Values

Variable Name Data Type Description
IV_ACCRUAL Number Accrual value received from the accrual matrix
IV_CARRYOVER Number Carryover limit received from accrual matrix
IV_CEILING Number Ceiling limit received from the accrual matrix
IV_ACCRUALPERIODSTARTDATE Date Start date of accrual period
IV_ACCRUALPERIODENDDATE Date End date of accrual period
IV_CALEDARSTARTDATE Date Start date of accrual calendar year
IV_CALEDARENDDATE Date End date of accrual calendar year
IV_PLANENROLLMENTSTARTDATE Date Start date of enrollment
IV_PLANENROLLMENTENDDATE Date End date of enrollment
IV_BAND_CHG_DT1* Date If the accrual matrix band definition consists of grades or derived factors length of service or age, then this input value fetches the date on which worker has had a change in any of these factors within the period.
IV_BAND_CHG_BEFVAL1* Number Accrual value as per the matrix before IV_BAND_CHG_DT1
IV_BAND_CHG_AFTVAL1* Number Accrual value as per the matrix after IV_BAND_CHG_DT1
IV_ACCRUAL_CEILING Number Annual accrual limit from the accrual matrix

*the sequence for these input values can be extended to 5.

Return Variables

Variable Name Data Type Description
accrual Number Partial period prorated accrual value returned for the particular partial repeating period. Value is returned gets added as an accrual line. For processing termination of enrollment for front loaded plans, the variable should return a negative value, to deduct prorated amount from the existing annual accrual value.

Sample Formula

Requirement: The organization has a partial period rule where accruals are prorated based on months enrolled for the plan.

Solution: A Global Absence Partial Period Accrual Rate formula such as the one below can be used.

FORMULA NAME: ANC_PARACC

FORMULA TYPE: Global Absence Partial Period Accrual Rate Formula

DESCRIPTION: This formula returns the accrual for mid period enrollments and unenrollments for Vacation absence plan

DEFAULT FOR IV_ACCRUAL IS 0
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_CALEDARSTARTDATE IS '4712/12/31 00:00:00' (date)
DEFAULT FOR IV_CALEDARENDDATE IS '4712/12/31 00:00:00' (date)
DEFAULT FOR IV_PLANENROLLMENTSTARTDATE IS '4712/12/31 00:00:00' (date)
DEFAULT FOR IV_PLANENROLLMENTENDDATE IS '4712/12/31 00:00:00' (date)

INPUTS ARE IV_ACCRUAL, IV_ACCRUALPERIODSTARTDATE (date), IV_ACCRUALPERIODENDDATE (date), IV_CALEDARSTARTDATE (date), IV_CALEDARENDDATE (date), IV_PLANENROLLMENTSTARTDATE (date), IV_PLANENROLLMENTENDDATE (date)

ln_same_year_duration = 0
lc_first_month_flag = 'N'
ln_first_month_accrual = 0
ln_participation_duration = 0
ln_term_duration = 1 + (TO_NUMBER(TO_CHAR(IV_CALEDARENDDATE, 'yy')) - TO_NUMBER(TO_CHAR(IV_CALEDARSTARTDATE, 'yy'))) * 12 + (TO_NUMBER(TO_CHAR(IV_CALEDARENDDATE, 'mm')) - TO_NUMBER(TO_CHAR(IV_CALEDARSTARTDATE, 'mm')))
ld_start_date = GREATEST (IV_PLANENROLLMENTSTARTDATE,IV_CALEDARSTARTDATE)
ld_end_date = LEAST (IV_PLANENROLLMENTENDDATE, IV_CALEDARENDDATE)

/*Calculating the duration for which the enrollment was active*/
ln_participation_duration = (TO_NUMBER(TO_CHAR(ld_end_date, 'yy')) - TO_NUMBER(TO_CHAR(ld_start_date, 'yy'))) * 12 + (TO_NUMBER(TO_CHAR(ld_end_date, 'mm')) - TO_NUMBER(TO_CHAR(ld_start_date, 'mm'))) + 1

/*Capturing this in case un-enrollment occurred in the same month as  calendar start month*/
ln_first_month_accrual = IV_ACCRUAL * (ln_participation_duration / ln_term_duration) 

/*Checking if un-enrollment happend before end of calendar year*/
IF IV_PLANENROLLMENTENDDATE < IV_CALEDARENDDATE
THEN
(
/*Checking if enrollment also happened within the same year as unenrollment*/
IF (IV_PLANENROLLMENTSTARTDATE > IV_CALEDARSTARTDATE)
THEN 
	(
	/*If enrollment happened in the same year as the un-enrollment, calculating the duration from calendar start date to enrollment start date so that this can be subtracted from total*/
	ln_same_year_duration = (TO_NUMBER(TO_CHAR(IV_PLANENROLLMENTSTARTDATE, 'yy')) - TO_NUMBER(TO_CHAR(IV_CALEDARSTARTDATE, 'yy'))) * 12 + (TO_NUMBER(TO_CHAR(IV_PLANENROLLMENTSTARTDATE, 'mm')) - TO_NUMBER(TO_CHAR(IV_CALEDARSTARTDATE, 'mm')))
	)
/*The termination pro-ration has to return a negative value - the amount that needs to be subtracted from the current balance*/
ln_participation_duration = -1 * (ln_term_duration - ln_participation_duration - ln_same_year_duration)
/*Checking if un-enrollment happened in the first month of the calendar year*/
IF ( (TO_CHAR(IV_CALEDARSTARTDATE, 'mm') = TO_CHAR(IV_PLANENROLLMENTENDDATE, 'mm')) AND (TO_CHAR(IV_CALEDARSTARTDATE, 'yyyy') = TO_CHAR(IV_PLANENROLLMENTENDDATE, 'yyyy')) )
THEN
(lc_first_month_flag = 'Y')
)

prorated_accrual = IV_ACCRUAL * (ln_participation_duration / ln_term_duration)
/*If un-enrollment happened in the first month of the calendar year, then return the pro-ration for the single month*/
IF (lc_first_month_flag = 'Y')
THEN
(prorated_accrual = ln_first_month_accrual)

accrual = ROUND(prorated_accrual,2)

RETURN accrual