Report

    Report Details

    Accrual Plan Balance

    Extract the current Annual Leave Provision balances for active employees from the payroll system, including relevant personal, assignment, and plan details as of a specific calculation date.

    HCM - Human Capital Management
    Core HR
    WITH payroll AS(
    	SELECT 
    	pf.person_id,
    	CASE WHEN  UPPER(piv.name)='VACATION TRANSACTIONS'
    		THEN ABS(TO_NUMBER(prrv.result_value))
    		ELSE TO_NUMBER(prrv.result_value) END  result_value,
    	payrel.assignment_id
    	
    	FROM
    		per_person_secured_list_v pf,	
    		(SELECT PAA1.*,
    		RANK() OVER (PARTITION BY paa1.PERSON_ID ORDER BY paa1.EFFECTIVE_START_DATE DESC) ASSIGN_RANK
    		FROM per_all_assignments_f paa1
    		WHERE 1=1
                    AND paa1.SYSTEM_PERSON_TYPE = 'EMP'
    		AND paa1.assignment_status_type = 'ACTIVE')paa,
    		pay_pay_relationships_dn prel,
    		pay_rel_groups_dn payrel,
    		pay_assigned_payrolls_dn papd,
    		pay_payroll_secured_list_v pp,
    		pay_payroll_actions ppa,
    		pay_payroll_rel_actions ppra,
    		pay_run_results prr,
    		pay_input_values_vl piv,
    		pay_run_result_values prrv,
    		pay_element_types_vl ele,
    		pay_time_periods ptp,
    		pay_ele_classifications_vl pec
    
    	WHERE 1=1
    AND paa.ASSIGN_RANK=1
    --AND pf.PERSON_ID='300000010666308'
    		AND pf.person_id=paa.person_id 
    		--AND paa.primary_flag = 'Y'
    		--AND paa.assignment_status_type = 'ACTIVE'
    		AND pf.person_id=prel.person_id
    		AND prel.payroll_relationship_id = payrel.payroll_relationship_id
    		AND prel.payroll_relationship_id = ppra.payroll_relationship_id
    		AND payrel.parent_rel_group_id = papd.payroll_term_id
    		AND payrel.assignment_id = paa.assignment_id
    		AND papd.payroll_id = pp.payroll_id
    		AND papd.payroll_id = ppa.payroll_id
    		AND ppa.payroll_action_id = ppra.payroll_action_id
    		AND ppra.payroll_rel_action_id = prr.payroll_rel_action_id
    		AND prr.run_result_id = prrv.run_result_id
    		AND prr.enterprise_id = prrv.enterprise_id
    		AND prr.element_type_id = ele.element_type_id
    		AND prr.element_type_id = piv.element_type_id
    		AND ptp.time_period_id = ppa.earn_time_period_id --payroll period for employee action
    		AND ptp.period_category = 'E' --earning period category
    		AND piv.input_value_id = prrv.input_value_id --input value is a out put parameter for each element default is pay value
    		AND UPPER(ele.element_name)='ANNUAL LEAVE PROVISION'
    		AND UPPER(piv.name) IN ('ENDING ACCRUAL BALANCE','VACATION TRANSACTIONS')
    		AND UPPER(pec.classification_name) ='INFORMATION'
    		AND ppra.action_status = 'C' --payroll run completed
    		AND ppa.action_type in ('R', 'Q') --types of payroll run(payroll calculation r, quick pay q)
    		AND ppa.action_status = 'C' --payroll run completed
    		AND ppra.retro_component_id IS NULL --retro payment
    		AND ele.classification_id = pec.classification_id
    		AND payrel.group_type = 'A'
    		
    		AND ppa.effective_date  BETWEEN  ptp.start_date AND  ptp.end_date
    		AND  ppa.effective_date BETWEEN TRUNC(:p_calculation_date, 'MM') AND LAST_DAY(:p_calculation_date)
    			
    		AND ppa.effective_date BETWEEN pf.effective_start_date AND LAST_DAY(pf.effective_end_date)
    		AND ppa.effective_date BETWEEN prel.start_date AND prel.end_date
    		AND ppa.effective_date BETWEEN payrel.start_date AND payrel.end_date
    		AND ppa.effective_date BETWEEN papd.start_date AND papd.end_date
    		AND ppa.effective_date BETWEEN pp.effective_start_date AND pp.effective_end_date
    		AND ppa.effective_date BETWEEN piv.effective_start_date AND piv.effective_end_date
    		AND ppa.effective_date BETWEEN ele.effective_start_date AND ele.effective_end_date
    )
    SELECT papf.person_number,
           papf.person_id                                      person,
           ppnf.display_name                                   Employee_Name,
           bu.name                                             Business_unit,
           dept.name                                           Department,
           pptvl.user_person_type                              Person_Type,
           asg_act.assignment_status_type                      Assignment_Status,
           To_char(ppos.date_start, 'DD/MM/YYYY')              Hire_date,
           To_char(ppos.actual_termination_date, 'DD/MM/YYYY') Termination_date,
           aapf.name                                           Plan_Name,
    	   aapf.absence_plan_id,
           To_char(:p_calculation_date, 'DD/MM/YYYY')
           Last_Balance_Calculation_Period,
    	   MAX(apaed.procd_date) 							  Procd_date,
           payroll_name.payroll_name ,
    	   assignment_category.c1 assignment_category,asg_act.assignment_id
    	   ,CASE WHEN aapf.name='Annual Leave' 
    	   THEN NVL((SELECT SUM(PAYROLL.RESULT_VALUE)
    	   FROM PAYROLL
    	   WHERE  papf.person_id=PAYROLL.person_id 
    		AND asg_act.assignment_id=PAYROLL.assignment_id
    	   ),0) 
    		ELSE  0 END RESULT_VALUE
    
    FROM   per_person_secured_list_v papf,--changed to Secured View used on 25/08/2022
           per_person_names_f ppnf,
           per_all_assignments_f asg_act,
           hr_organization_units bu,
           hr_organization_units dept,
           per_person_types_vl pptvl,
           per_periods_of_service ppos,
           anc_per_acrl_entry_dtls apaed,
           anc_absence_plans_f_tl aapf,
           anc_per_abs_entries apae,
    	   anc_per_plan_enrollment appe,
           per_position_secured_list_v hap,
           --changed to Secured View used on 25/08/2022 
           per_job_secured_list_v pj,---changed to Secured View used on 25/08/2022 
           per_location_secured_list_v pldf,
           ---changed to Secured View used on 25/08/2022 
           per_grade_secured_list_v pg,
           ---changed to Secured View used on 25/08/2022 
           hr_organization_units hou,
    	   ---------------------assignment_category----------
    	   (SELECT T492958.c61309499 AS c1,
                    T492958.c36361321 AS c2
             FROM   (SELECT V483283710.meaning     AS C61309499,
                            V483283710.lookup_code AS C36361321,
                            V483283710.lookup_type AS C319008066
                     FROM   hcm_lookups V483283710
                     WHERE  ((( V483283710.lookup_type = 'EMP_CAT' )))) T492958)assignment_category,
    	   ---------------------PAyroll Name COde-------------
           (SELECT  pay_rule.payroll_name,
                            papf.person_id
    		FROM   per_all_assignments_f paaf,
                   pay_assigned_payrolls_dn papd,
                   pay_rel_groups_dn prgd,
                   pay_all_payrolls_f pay_rule,
                   per_person_secured_list_v papf
            WHERE  papd.payroll_id = pay_rule.payroll_id
                   AND paaf.assignment_id = prgd.assignment_id
                   AND papd.payroll_term_id = prgd.parent_rel_group_id
                   AND papf.person_id = paaf.person_id
                   AND Upper (Trim (prgd.group_type(+))) = Upper (Trim ('A'))
                   --active group
                   AND Upper (paaf.primary_flag) = Upper ('Y')
                   AND Upper (paaf.effective_latest_change) = Upper ('Y')
                   AND Trunc (SYSDATE) BETWEEN Trunc (pay_rule.effective_start_date)
                                               AND
                                               Trunc (
                                               pay_rule.effective_end_date)
                   AND Trunc (SYSDATE) BETWEEN Trunc (prgd.start_date) AND
                                               Trunc (prgd.end_date)
                   AND Trunc (SYSDATE) BETWEEN Trunc (papd.start_date) AND
                                               Trunc (papd.end_date)
                   AND Trunc (SYSDATE) BETWEEN Trunc (papf.effective_start_date) AND
                                               Trunc (papf.effective_end_date)
                   AND Trunc (SYSDATE) BETWEEN Trunc (paaf.effective_start_date) AND
                                               Trunc (paaf.effective_end_date)
            ORDER  BY pay_rule.payroll_name)payroll_name
    		
    WHERE  papf.person_id = ppnf.person_id(+)
           AND papf.person_id = asg_act.person_id(+)
           AND bu.organization_id(+) = asg_act.business_unit_id
           AND asg_act.organization_id = dept.organization_id(+)
           AND asg_act.person_type_id = pptvl.person_type_id(+)
           AND ppos.person_id(+) = asg_act.person_id
           AND ppos.period_of_service_id(+) = asg_act.period_of_service_id
           AND apaed.person_id(+) = papf.person_id
           AND apaed.work_term_asg_id(+) = asg_act.work_terms_assignment_id
           AND apaed.assignment_id(+) = asg_act.assignment_id
           AND apaed.pl_id = aapf.absence_plan_id(+) 
           AND apae.person_id(+) = papf.person_id
    	   AND papf.person_id = appe.person_id(+)
    	   AND appe.plan_id = aapf.absence_plan_id
           AND asg_act.position_id = hap.position_id(+) --data may not exist
           AND asg_act.job_id = pj.job_id(+) --data may not exist
           AND pldf.location_id (+) = asg_act.location_id
           --To get all employee records
           AND pg.grade_id (+) = asg_act.grade_id
           AND hou.organization_id(+) = asg_act.legal_entity_id
    	   AND assignment_category.c2(+) = asg_act.employment_category
    	   AND payroll_name.person_id(+) = papf.person_id
    	   AND ppos.date_start = (SELECT MAX(ppos1.date_start)FROM per_periods_of_service ppos1,
    														per_all_assignments_f asg_act1, 
    														per_all_people_f papf1
    								WHERE papf1.person_id = asg_act1.person_id
    								AND asg_act1.person_id = ppos1.person_id
    								AND asg_act1.period_of_service_id = ppos1.period_of_service_id
    								AND papf1.person_id = papf.person_id
    								AND Upper (asg_act1.primary_flag) = Upper ('Y') -- should fetch only primary assignment
    								AND asg_act1.assignment_status_type = 'ACTIVE'
    								AND Upper (asg_act1.effective_latest_change) = Upper ('Y') ---If required add this to get Active employees only---
    								AND Upper (asg_act1.assignment_type) = Upper ('E') --should fetch this assignment type
    								AND Trunc(Nvl(ppos1.actual_termination_date,sysdate)) BETWEEN Trunc(Nvl(asg_act1.effective_start_date,sysdate))AND Trunc(Nvl(asg_act1.effective_end_date,sysdate))
    								AND Trunc(Nvl(ppos1.actual_termination_date,sysdate)) BETWEEN Trunc(Nvl(papf1.effective_start_date,sysdate)) AND Trunc(Nvl(papf1.effective_end_date,sysdate)))							  
    		
           AND ppnf.name_type = 'GLOBAL'
           AND Upper (asg_act.primary_flag) = Upper ('Y')
           AND Upper (asg_act.effective_latest_change) = Upper ('Y')
           AND asg_act.assignment_type = 'E' -------to Pick the Employee type only
           AND asg_act.assignment_status_type = 'ACTIVE' ---ACTIVE STATUS
           AND aapf.LANGUAGE (+) = 'US' -- FOR SOURCE LANG
           AND aapf.source_lang (+) = 'US' -- FOR SOURCE LANG
    	   AND Apaed.type IN ('ACRL','ORA_ANC_ROLLOVER','COVR')
    	   AND appe.status='A'
    	   
    	
           AND Trunc(SYSDATE) BETWEEN Trunc(
               Nvl(asg_act.effective_start_date, SYSDATE))AND
                                          Trunc(
                                          Nvl(asg_act.effective_end_date, SYSDATE))
           AND Trunc(SYSDATE) BETWEEN Trunc(Nvl(papf.effective_start_date, SYSDATE))
                                      AND
    Trunc(Nvl(papf.effective_end_date, SYSDATE))
    AND Trunc(SYSDATE) BETWEEN Trunc(Nvl(ppnf.effective_start_date, SYSDATE)) AND
    Trunc(Nvl(ppnf.effective_end_date, SYSDATE))
    AND Trunc(SYSDATE) BETWEEN Trunc(Nvl(aapf.effective_start_date, SYSDATE)) AND
    Trunc(Nvl(aapf.effective_end_date, SYSDATE))
    AND Trunc(SYSDATE) BETWEEN Trunc(Nvl(appe.enrt_st_dt,SYSDATE))AND
    Trunc(Nvl(appe.enrt_end_dt,SYSDATE))
    AND Trunc(SYSDATE) BETWEEN Trunc(Nvl(hap.effective_start_date, SYSDATE))AND
    Trunc(Nvl(hap.effective_end_date(+), SYSDATE))
    -------------------------------------------Parameters---------------------------------  
    AND ( papf.person_number IN ( :p_employee_number )
    OR 'ALL' IN ( :p_employee_number
    || 'ALL' ) )
    AND ( dept.name IN ( :p_department )
    OR 'ALL' IN ( :p_department
    || 'ALL' ) )
    AND ( hap.position_code IN ( :p_position )
    OR 'ALL' IN ( :p_position
    || 'ALL' ) )
    AND ( pj.job_code IN ( :p_job )
    OR 'ALL' IN ( :p_job
    || 'ALL' ) )
    AND ( pldf.internal_location_code IN ( :p_location )
    OR 'ALL' IN ( :p_location
    || 'ALL' ) )
    AND ( pg.grade_code IN ( :p_grade )
    OR 'ALL' IN ( :p_grade
    || 'ALL' ) )
    AND ( bu.name IN ( :P_Business_Unit )
    OR 'ALL' IN ( 'ALL'
    ||:P_Business_Unit ) )
    AND ( hou.name IN ( :P_Legal_Entity_Name )
    OR 'ALL' IN ( 'ALL'
    ||:P_Legal_Entity_Name ) )
    AND ( assignment_category.c1 IN ( :P_Assignment_Category )
    OR 'ALL' IN ( 'ALL'
    ||:P_Assignment_Category ) )
    GROUP  BY papf.person_number,
              papf.person_id,
              ppnf.display_name,
              bu.name,
              dept.name,
              pptvl.user_person_type,
              asg_act.employment_category,
              asg_act.assignment_status_type,
              ppos.date_start,
              ppos.actual_termination_date,
              aapf.name,
    		  aapf.absence_plan_id,
              payroll_name.payroll_name,
    		  assignment_category.c1,
    asg_act.assignment_id
    ORDER  BY papf.person_number

    Similar Reports

    Bank File
    42% match
    To calculate and display employee payroll data, focusing on basic salary and allowance.
    HCM - Human Capital Management
    Payroll
    Annual Leave Provision
    39% match
    To calculate and display employee-related payroll data, focusing on annual leave provision details.
    HCM - Human Capital Management
    Payroll
    Annual Leave Provision
    39% match
    The query retrieves and pivots key annual leave balances and payroll values for active employees.
    HCM - Human Capital Management
    Payroll
    © 2025 Oracle Fusion BI Query Assistant
    Developed byANFAL ALQUBISY