Managing employee leave balances is one thing. Understanding how those balances are built over time is where real insights lie. In Oracle Fusion HCM, absence accruals are calculated based on plan configuration, employee eligibility, and transactional events like accruals, adjustments, and carryovers.
In this post, we will share a powerful SQL query that extracts detailed absence accrual entry data, including transaction-level breakdown, adjustment reasons, and processed dates.
📌 What is Absence Accrual in Oracle Fusion?
Absence accrual refers to the process of accumulating leave balances over time based on predefined rules. For example:
- Monthly accrual (e.g., 1.5 days per month)
- Front-loaded accrual (e.g., 18 days at start of year)
- Prorated accrual for new joiners
These accruals are calculated using plan rules, formulas, and employee service periods.
🎯 Why This Query is Important
Standard reports often show only final balances.
But this query helps you go deeper by showing:
- ✔️ Detailed accrual transactions
- ✔️ Adjustment entries and reasons
- ✔️ Processed dates of accrual
- ✔️ Balance type (Accrual, Adjustment, Carryover, etc.)
- ✔️ Enrollment period details
🧾 SQL Query
/******************************************************************************REPORT ID : GCS_REPORT_11REPORT NAME : ABSENCE ACCRUAL ENTRY DETAILS REPORTREPORT TYPE : BIP REPORTDESCRIPTION : THIS REPORT WILL FETCH THE ABSENCE ACCRUAL ENTRY DETAILS FROM ORACLE FUSION.CHANGE HISTORY:NAME DATE VERSION COMMENTS*********************************************************************************VAIBHAV CHAVAN 21-MAR-2026 V1.0 INITIAL VERSION ********************************************************************************//* THIS CODE IS WRITTEN FOR WWW.GROWCLOUDSKILLS.COM */SELECT PAPF.PERSON_NUMBER AS PERSON_NUMBER ,PPNF.DISPLAY_NAME AS EMPLOYEE_NAME ,ASG.ASSIGNMENT_NAME AS ASSIGNMENT_NAME ,AAPFT.NAME AS PLAN_NAME ,AAPF.PLAN_UOM AS PLAN_UOM ,APAE.END_BAL AS ACCRUAL_BALANCE ,TO_CHAR(AEDTLS.PROCD_DATE, 'DD-MM-YYYY', 'NLS_DATE_LANGUAGE = AMERICAN') AS PROCESSED_DATE ,AEDTLS.TYPE AS BALANCE_TYPE_CODE ,( SELECT FCL.MEANING FROM FND_COMMON_LOOKUPS FCL WHERE FCL.LOOKUP_TYPE = 'ANC_ACCRUAL_ENTRY_TYPE' AND FCL.ENABLED_FLAG = 'Y' AND FCL.LOOKUP_CODE = AEDTLS.TYPE ) AS BALANCE_TYPE_MEANING ,AEDTLS.VALUE AS DETAILED_ACCRUAL_BALANCE ,AEDTLS.ADJUSTMENT_REASON AS ADJUSTMENT_REASON_CODE ,( SELECT FCL.MEANING FROM FND_COMMON_LOOKUPS FCL WHERE FCL.LOOKUP_TYPE = 'ANC_ABS_PLAN_OTHER_REASONS' AND FCL.ENABLED_FLAG = 'Y' AND FCL.LOOKUP_CODE = AEDTLS.ADJUSTMENT_REASON ) AS ADJUSTMENT_REASON_MEANING ,CASE WHEN AEDTLS.STATUS = 'A' THEN 'ACTIVE' ELSE '' END AS STATUS ,TO_CHAR(APPE.ENRT_ST_DT, 'DD-MM-YYYY', 'NLS_DATE_LANGUAGE = AMERICAN') AS ENROLLMENT_START_DATE ,TO_CHAR(APPE.ENRT_END_DT, 'DD-MM-YYYY', 'NLS_DATE_LANGUAGE = AMERICAN') AS ENROLLMENT_END_DATE FROM PER_ALL_PEOPLE_F PAPF ,PER_ALL_ASSIGNMENTS_F ASG ,PER_PERIODS_OF_SERVICE PPOS ,PER_PERSON_TYPES_TL PPTL ,ANC_ABSENCE_PLANS_F_TL AAPFT ,ANC_ABSENCE_PLANS_F AAPF ,ANC_PER_ACCRUAL_ENTRIES APAE ,ANC_PER_ACRL_ENTRY_DTLS AEDTLS ,PER_PERSON_NAMES_F PPNF ,ANC_PER_PLAN_ENROLLMENT APPE WHERE ASG.PERSON_ID = PAPF.PERSON_ID AND PPOS.PERSON_ID = PAPF.PERSON_ID AND APAE.PERSON_ID = PAPF.PERSON_ID AND ASG.PERIOD_OF_SERVICE_ID = PPOS.PERIOD_OF_SERVICE_ID AND APAE.PRD_OF_SVC_ID = ASG.PERIOD_OF_SERVICE_ID AND ASG.PERSON_TYPE_ID = PPTL.PERSON_TYPE_ID AND AAPFT.ABSENCE_PLAN_ID = AAPF.ABSENCE_PLAN_ID AND APAE.PLAN_ID = AAPF.ABSENCE_PLAN_ID AND ASG.PRIMARY_FLAG = 'Y' AND ASG.ASSIGNMENT_TYPE = 'E' AND ASG.ASSIGNMENT_STATUS_TYPE = 'ACTIVE' AND PPTL.LANGUAGE = USERENV('LANG') AND AAPF.PLAN_STATUS = 'A' AND AAPFT.LANGUAGE = 'US' AND AAPFT.NAME = 'Sick Leave' /* change the abs plan*/ AND SYSDATE BETWEEN PAPF.EFFECTIVE_START_DATE AND PAPF.EFFECTIVE_END_DATE AND SYSDATE BETWEEN ASG.EFFECTIVE_START_DATE AND ASG.EFFECTIVE_END_DATE AND SYSDATE BETWEEN AAPF.EFFECTIVE_START_DATE AND AAPF.EFFECTIVE_END_DATE AND SYSDATE BETWEEN AAPFT.EFFECTIVE_START_DATE AND AAPFT.EFFECTIVE_END_DATE AND APAE.PER_ACCRUAL_ENTRY_ID = AEDTLS.PER_ACCRUAL_ENTRY_ID AND AEDTLS.PL_ID = APAE.PLAN_ID AND AEDTLS.VALUE <> 0 AND APAE.PERSON_ID = PPNF.PERSON_ID AND PPNF.NAME_TYPE = 'GLOBAL' AND TRUNC(SYSDATE) BETWEEN PPNF.EFFECTIVE_START_DATE AND PPNF.EFFECTIVE_END_DATE AND APAE.PLAN_ID = APPE.PLAN_ID AND PAPF.PERSON_ID = APPE.PERSON_ID AND APAE.PERSON_EVENT_ID = APPE.PER_EVENT_ID /* THIS CODE IS WRITTEN FOR WWW.GROWCLOUDSKILLS.COM */ AND APPE.ENRT_ST_DT = ( SELECT MAX(APPE1.ENRT_ST_DT) FROM ANC_PER_PLAN_ENROLLMENT APPE1 ,PER_ALL_PEOPLE_F PAPF2 ,ANC_ABSENCE_PLANS_F_TL AAPFT2 WHERE 1 = 1 AND PAPF2.PERSON_ID = APPE1.PERSON_ID AND PAPF2.PERSON_ID = PAPF.PERSON_ID AND AAPFT2.ABSENCE_PLAN_ID = APPE1.PLAN_ID AND AAPFT2.NAME = AAPFT.NAME AND TRUNC(SYSDATE) BETWEEN PAPF2.EFFECTIVE_START_DATE AND PAPF2.EFFECTIVE_END_DATE AND TRUNC(SYSDATE) BETWEEN AAPFT2.EFFECTIVE_START_DATE AND AAPFT2.EFFECTIVE_END_DATE ) AND APAE.ACCRUAL_PERIOD <= ( SELECT NVL(MAX(APAE1.ACCRUAL_PERIOD),'') FROM ANC_PER_ACCRUAL_ENTRIES APAE1 , PER_ALL_PEOPLE_F PAPF1 , ANC_ABSENCE_PLANS_F_TL AAPFT1 WHERE 1=1 AND PAPF1.PERSON_ID = APAE1.PERSON_ID AND PAPF1.PERSON_ID = PAPF.PERSON_ID AND AAPFT1.ABSENCE_PLAN_ID = APAE1.PLAN_ID AND AAPFT1.NAME = AAPFT.NAME AND APAE1.FIRST_LAST_PRD_IN_PL_TERM <> 'FIRSTLAST' AND TRUNC(SYSDATE) BETWEEN PAPF1.EFFECTIVE_START_DATE AND PAPF1.EFFECTIVE_END_DATE AND TRUNC(SYSDATE) BETWEEN AAPFT1.EFFECTIVE_START_DATE AND AAPFT1.EFFECTIVE_END_DATE ) ORDER BY PAPF.PERSON_NUMBER ,AEDTLS.PROCD_DATE /*-------------- CODE ENDS HERE ----------------------*//* For more such queries, visit www.growcloudskills.com */
🚀 Real Business Use Cases
This query is extremely useful in real-world scenarios:
- 🔍 Audit Reports – Track all accrual changes
- 💰 Payroll Validation – Ensure correct leave balances
- 📊 HR Dashboards – Build detailed analytics
- 🛠 Issue Debugging – Identify incorrect accruals
🧩 Understanding the Bigger Picture
In Oracle Fusion, accrual balances are not just static values. They are dynamically calculated based on:
- Absence entries
- Carryover rules
- Net accrual calculations
- Plan configuration rules
This is why having transaction-level visibility (like this query provides) is critical.
📢 Final Thoughts
If you are working on absence management or payroll reporting, this query is a must-have.
It gives you:
✔️ Complete transparency
✔️ Accurate reporting
✔️ Better control over accrual data
🌐 About Us
At GrowCloudSkills, we share practical, real-time Oracle Fusion HCM queries, tutorials, and implementation insights to help you grow in your cloud career.
Visit: www.growcloudskills.com
Learn | Practice | Grow
Follow for more Oracle Fusion content



Leave a Reply