Professional Documents
Culture Documents
Accrual Plan Set Up
Accrual Plan Set Up
1.
Accrual Plan:
Oracle Provides Accrual plan Functionality for calculating leaves balance calculation and Balance Carry Over
calculations
The following points should be taken into consideration for calculation Balances
Opening Balance : Some of the Organization Provides Yearly opening balance to employee. We need to store these opening balances in
an Element
2.
Leave Adjustment: There are cases in which adjustments are made because of redundancies in calculation of leave balance. In such
cases we need to store these adjustments in an element and make the use of the same.
3.
Leave Encashment:
Organizations provide policy for encashment of leave when Leave balance exceeds a given amount. In order to
capture these details, we need to have an element for the same
How to Setup Leave Accruals
1)
2)
3)
4)
5)
6)
Go to Accrual Bands to define the No of Leaves employee could avail during the Year
7)
8)
9)
When one creates an accrual plan, system automatically generate below said elements and their corresponding links
too (Create Links Manually if not created Automatically)
Vacation Leave Plan
Vacation Leave Plan Carried Over
Vacation Leave Plan Payroll Balance
Vacation Leave Plan Residual
Vacation Leave Plan Tagging
Register Employee with the Accrual Plan
Navigation: HRMS Super User People Enter &Maintain Search for an
Employee Assignment Entries Add Vacation Leave Plan on Effective Date
10)
Now in the Above Scenario we are using the seeded Formula PTO_PAYROLL_CALCULATION, this would
calculate as per the accrual bands set for the said duration of Service.
Requirements could vary as per each of the clients; we have created a scenario wherein we would be taking the
Accruals as per the contract type of the employee
1.
2.
Create New Function which would return, Leaves Accrued as on Effective Date
CREATE OR REPLACE FUNCTIONAPPS.xxx_get_leave_accrual_f (
p_business_group_id
NUMBER,
p_assignment_id
VARCHAR2,
p_calculation_date
DATE,
p_contract_start_date OUT DATE,
p_contract_end_date OUT DATE
)
RETURN NUMBER
AS
l_err_msg
VARCHAR2 (500) := NULL;
l_person_id
NUMBER := NULL;
l_hire_date
DATE := NULL;
l_nationality
VARCHAR2 (250) := NULL;
l_contract_type
VARCHAR2 (250) := NULL;
l_yearly_accrual
NUMBER := NULL;
l_per_day_accrual
NUMBER := NULL;
l_accrual_start_date DATE := NULL;
l_calc_start_date
DATE := NULL;
l_accrual_total_days NUMBER := NULL;
l_net_accrual
NUMBER := 0;
BEGIN
BEGIN
SELECT per.person_id,
NVL (
hr_general.decode_lookup('NATIONALITY', per.nationality),
'XX'
)
nationality,
pps.date_start hire_date,
ppg.segment6 contract_type
INTO l_person_id,
l_nationality,
l_hire_date,
l_contract_type
FROM per_all_people_f per,
per_all_assignments_f paaf,
per_periods_of_service pps,
pay_people_groups ppg
WHERE
per.person_id = paaf.person_id
AND per.person_type_id IN (1126,1127)
AND paaf.assignment_type = 'E'
AND paaf.assignment_status_type_idIN (1, 2)
AND paaf.primary_flag = 'Y'
AND paaf.business_group_id =p_business_group_id
AND paaf.period_of_service_id =pps.period_of_service_id
AND p_calculation_date BETWEENper.effective_start_date
AND per.effective_end_date
AND p_calculation_date BETWEENpaaf.effective_start_date
AND paaf.effective_end_date
AND paaf.assignment_id =p_assignment_id
AND paaf.people_group_id =ppg.people_group_id;
EXCEPTION
WHEN OTHERS
THEN
l_err_msg := SQLERRM;
debug_script_p ('Exception - Employee Details: ' || l_err_msg);
END;
IF l_contract_type IS NOT NULL
THEN
SELECT hruserdt.get_table_value(p_business_group_id,
'Leave Accruals',
'Vacation Leave',
l_contract_type,
p_calculation_date)
INTO l_yearly_accrual
FROM DUAL;
END IF;
l_per_day_accrual := ROUND ( (l_yearly_accrual/ 360), 3);
l_accrual_start_date :=
TO_DATE ('01-JAN-' || TO_CHAR(p_calculation_date, 'YYYY'),
'DD-MON-YYYY');
IF l_accrual_start_date > l_hire_date
THEN
l_calc_start_date := l_accrual_start_date;
ELSE
l_calc_start_date := l_hire_date;
END IF;
l_accrual_total_days := p_calculation_date -l_accrual_start_date;
l_net_accrual := ROUND (l_accrual_total_days * l_per_day_accrual, 0);
p_contract_start_date := l_hire_date;
p_contract_end_date := TO_DATE ('31-DEC-4312','DD-MON-YYYY');
RETURN l_net_accrual;
EXCEPTION
WHEN OTHERS
THEN
RETURN 0;
END;
/
3.
4.
IS '0'
Attach the Accrual Formula to the corresponding PLAN and test various scenarios