IF ACCRUAL_DATE >= ASG_HIRE_DATE guard — this prevents retroactive accrual for periods before the employee's hire date, which can happen if enrollment is processed in bulk at period start.
ASG_HIRE_DATE — Employee's original hire date. Used to calculate years of service for service-based accrual bands. Always declare DEFAULT FOR ASG_HIRE_DATE IS '1900-01-01' to prevent null exceptions.ASG_FTE_VALUE — Full-Time Equivalent (0.0–1.0). Multiply every accrual result by this value to prorate for part-time employees. Default to 1 to avoid zero accruals for employees with missing FTE.ASG_WORK_DAY_HOURS — Standard daily working hours (typically 8). Used to convert between days and hours in the formula.ASG_SCHEDULED_HOURS — Weekly scheduled hours from the work schedule. Useful for shift workers where daily hours vary.ASG_SALARY — Current salary value. Used in Rate of Pay formulas to calculate absence payment amounts.ABSENCE_BALANCE_VALUE — Current balance at the time the formula runs. Used to implement balance caps — if balance already at maximum, return zero accrual.ASG_GRADE — Employee grade code. Used in grade-based entitlement formulas (e.g., senior managers get 5 extra days).PER_ORIGINAL_DATE_OF_HIRE — Original hire date across rehires. Important for companies that want to count continuous service including breaks for re-hired employees.ASG_FTE_VALUE. For example, a 0.5 FTE employee on a plan that grants 168 hours/year to full-timers would receive 84 hours/year.
ASG_GRADE DBI:
DEFAULT FOR ASG_GRADE IS 'STANDARD'
DEFAULT FOR ASG_FTE_VALUE IS 1
/* Grade-based annual entitlement in days */
IF ASG_GRADE = 'EXECUTIVE' THEN
annual_days = 30
ELSE IF ASG_GRADE = 'MANAGER' THEN
annual_days = 25
ELSE
annual_days = 21
END IF
monthly = (annual_days * 8) / 12 * ASG_FTE_VALUE
RETURN monthly
Important consideration: when an employee is promoted and their grade changes mid-year, the formula picks up the new grade value immediately on the next accrual run. If the promotion is backdated, you may need to run a balance adjustment to credit the difference retroactively for prior accrual periods — Oracle's formula runs prospectively, not retroactively, on its own.
ABSENCE_BALANCE_VALUE — IF ABSENCE_BALANCE_VALUE >= MAX_HOURS THEN RETURN 0. This approach gives more control and is transparent in the formula logic.ASG_FTE_VALUE defaulted to 0 instead of 1, or because a conditional path wasn't reached. The process completes without errors but employees have no accrual. This is why formula testing with the Accrual Details report is critical — you can see exactly what value the formula returned for each employee and identify unexpected zeros before they affect large populations.
FTE = 1.0 and attach it to the plan's enrollment configuration. Oracle evaluates this automatically during plan enrollment — employees with FTE below 1.0 are simply not enrolled and will not see the leave type in self-service.
DEFAULT FOR ASG_HIRE_DATE to prevent null exceptions for employees with missing hire date data.
ABSENCE_EXISTS DBI or a custom query via Oracle's formula functions to check for existing records in the requested period.
AbsenceType attribute of the request and return the appropriate approver role or person. The approver can be a specific person, a role (e.g., HR Generalist for the employee's department), or derived from the org hierarchy.
AbsenceDuration <= 2 (or <= 16 hours if using hours) AND AbsenceType = "Sick Leave" THEN set the approval to AutoApprove.AbsenceBalance business object — create a DAT file with columns: EmployeeNumber, PlanName, EffectiveDate, BalanceAmount. Upload via the HCM Data Loader UI or SFTP. Set the effective date to the go-live date to prevent double-counting with future accruals.(Monthly Salary ÷ Working Days in Month) × Unpaid Days.ASG_HOURS_WORKED (from Time & Labor integration) rather than a fixed monthly amount: accrual = hours_worked / 30.MIN(weekly_wage * pay_pct, state_cap).MAX(normal_daily_salary - court_stipend, 0) — the company pays only the difference.Projected Balance = Available Balance − Sum of Future Approved Absence Duration.AND Available Balance > 0 to exclude employees already in deficit — handle those separately.Unused Balance (days) × (Annual Salary ÷ Annual Working Days). The report sums these across all employees to produce a total liability figure. For multi-currency companies, each employee's liability is reported in their local currency with optional conversion to the group reporting currency using GL exchange rates.
DAYOFWEEK(Absence Start Date) — returns 1 (Sunday) to 7 (Saturday) or Monday–Friday labels.Absence Rate (%) = (Total Absence Days ÷ Total Available Working Days) × 100
Absence Duration from the Workforce Absence subject area, filtered by the reporting period and absence type (typically all paid and unpaid excluding planned vacation).Sum(Scheduled Hours) ÷ Work Day Hours.Absence Rate = SUM(absence_days) / SUM(scheduled_working_days) * 100.HierarchyBuilder.getManager() but the manager position is null, causing the lookup to fail.ASG_FTE_VALUE, the result is always zero. Navigate to the employee's assignment and set the FTE to the correct value (e.g., 0.5 for half-time). Then run a balance adjustment or reprocess the accrual for affected periods.DEFAULT FOR ASG_FTE_VALUE IS 1. If FTE is null (not explicitly set), Oracle returns null for the DBI, and null × anything = null, which Oracle treats as zero accrual. Adding the DEFAULT line and recompiling fixes this.ASG_WORK_DAY_HOURS — Oracle uses this to convert days to hours dynamically if a conversion factor is not explicitly set.TRACE_LOG('Debug: years=' || years_of_service) statements at key decision points in the formula. Run Quick Accrual for one employee and review the process log to see the actual DBI values Oracle used and which conditional branch was taken.ABSENCE_BALANCE_VALUE or query consumed absences in the date window — more complex but achievable.
ASG_WORK_DAY_HOURS rather than a fixed 8 — ensuring a "day" always means one standard working day for that employee's schedule.Balance in Days = Balance Hours / Standard Work Day Hours to display in the familiar unit.IF ASG_STATUS = 'LOA' THEN RETURN 0 — explicitly returning zero accrual when the employee is on leave.Unused Leave Days × (Annual Salary ÷ Annual Working Days). The salary used is the employee's salary in their local currency (AED for UAE employees, SAR for KSA, GBP for UK, etc.). This produces a per-employee liability in the correct local currency — the most accurate representation of the actual obligation.
Our certified HCM specialists have delivered absence management implementations across GCC, Europe, and North America.