Absence Accrual Entry Details Report

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

SQL Query to Fetch Absence Accrual Entry Details.sql
SQL
/******************************************************************************
REPORT ID : GCS_REPORT_11
REPORT NAME : ABSENCE ACCRUAL ENTRY DETAILS REPORT
REPORT TYPE : BIP REPORT
DESCRIPTION : 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

Author

Vaibhav Chavan

Oracle Fusion HCM Cloud Consultant


8 x Oracle Certified | 5+ Years of Experience in Oracle Fusion


Helping you master Oracle Fusion with practical tutorials, covering technical, functional, and real-world scenarios with tips and best practices..

🎯 Explore Digital Products & 1-on-1 Sessions

Looking for premium digital products, mock interviews, and personalized Oracle Fusion HCM guidance?

Quote of the week

“Every expert was once a beginner who didn’t quit..”

~ Vaibhav

Discover more from GrowCloudSkills

Subscribe now to keep reading and get access to the full archive.

Continue reading