Create Fast Formulas

You can write your own custom logic in the fast formula for absence payments.

To create the formulas:

Navigation: My Client Groups > Payroll > Fast Formulas
  1. Create a validation formula based on a delivered seeded formula IE Carers Absence Validation Included:
    • Warning if carer's leave period that's more than 104 weeks in duration.
    • Warning if carer's leave period that's less than 13 weeks in duration.
    • Warning if someone entered a carer's leave period less than 6 weeks following your previous carer's leave absence.
    • Warning if someone take parental leave when the length of service is less than 1 year.
Validation Formulas:
/**********************************************************************
FORMULA NAME: ORA_HRX_IE_CARE_VALIDATION
FORMULA TYPE: Global Absence Entry Validation 
DESCRIPTION : IE Carers Absence Validation
**********************************************************************/

DEFAULT FOR IV_START_DATE IS '0001/01/01 00:00:00' (DATE)
DEFAULT FOR IV_END_DATE IS '4712/12/31 00:00:00' (DATE)
DEFAULT FOR PER_ASG_REL_DATE_START IS '4712/12/31 00:00:00' (DATE)
/* Arrays for existing absence blocks */
DEFAULT FOR ANC_PER_ABS_ENTRS_ABSENCE_ENTRY_ID_ARR IS EMPTY_NUMBER_NUMBER
DEFAULT_DATA_VALUE FOR ANC_PER_ABS_ENTRS_ABSENCE_ENTRY_ID_ARR IS 0
DEFAULT FOR ANC_ABS_ENTRS_START_DATE IS '4712-12-31 00:00:00' (DATE)
DEFAULT FOR ANC_ABS_ENTRS_END_DATE IS '4712-12-31 00:00:00' (DATE)
DEFAULT FOR ANC_ABS_TYP_NAME IS ' '
DEFAULT FOR ANC_ABS_ENTRS_ABSENCE_TYPE_ID IS 0

INPUTS ARE IV_START_DATE, IV_END_DATE

VALID = 'Y'
ERROR_MESSAGE = 'Success'

l_trunc_eff_date = TRUNC(GET_CONTEXT(EFFECTIVE_DATE,'0001/01/01' (date)))

l_start_date = IV_START_DATE
l_end_date = IV_END_DATE
l_seniority_date = PER_ASG_REL_DATE_START

/* ============================================================
   Rule 1: Duration Limit – Max 104 Weeks (728 Days)
   ============================================================ */
l_char_max_duration = '0'
l_max_duration = 0

l_char_max_duration = GET_VALUE_SET('ORA_HRX_IE_GET_CARE_MAX_WKS','|=CURRENT_EFFDATE='''||TO_CHAR(trunc(l_trunc_eff_date),'YYYY/MM/DD')||'''')
l_max_duration = to_number(l_char_max_duration)

l_max_duration = l_max_duration *7

l_days_duration = DAYS_BETWEEN(l_end_date, l_start_date) 
IF (l_days_duration > l_max_duration) THEN (
    VALID = 'N'
    ERROR_CODE = 'W'
    ERROR_MESSAGE = 'HRX:::HRX_IE_CARE_MAX_DURATION'
    RETURN VALID, ERROR_MESSAGE, ERROR_CODE
)

/* ============================================================
   Rule 2: Duration Minimum – Min 13 Weeks (91 Days)
   ============================================================ */
l_char_min_duration = '0'
l_min_duration = 0

l_char_min_duration = GET_VALUE_SET('ORA_HRX_IE_GET_CARE_MIN_WKS','|=CURRENT_EFFDATE='''||TO_CHAR(trunc(l_trunc_eff_date),'YYYY/MM/DD')||'''')
l_min_duration = to_number(l_char_min_duration)

l_min_duration = l_min_duration *7

l_days_duration = DAYS_BETWEEN(l_end_date, l_start_date)+1
IF (l_days_duration < l_min_duration) THEN (
    VALID = 'N'
    ERROR_CODE = 'W'
    ERROR_MESSAGE = 'HRX:::HRX_IE_CARE_MIN_DURATION'
    RETURN VALID, ERROR_MESSAGE, ERROR_CODE
)

/* ============================================================
   Rule 3: Length of Service – Employee must have 1 year service
   ============================================================ */
l_required_service_date = ADD_MONTHS(l_seniority_date, 12)
IF (l_start_date < l_required_service_date) THEN (
    VALID = 'N'
    ERROR_CODE = 'W'
    ERROR_MESSAGE = 'HRX:::HRX_IE_CARE_LOS'
    RETURN VALID, ERROR_MESSAGE, ERROR_CODE
)
/* ============================================================
   Rule 4: Minimum 6 week (42 day) gap between Carer's Leave blocks
   ============================================================ */

/* --- Calculate search window for block absences --- */
search_start_date = l_seniority_date                     /* Typically employee's hire date or start of eligibility */
search_end_date   = add_days(l_start_date, -1)           /* The day before the current new block starts */

l_char_min_gap = '0'
l_min_gap = 0

l_char_min_gap = GET_VALUE_SET('ORA_HRX_IE_GET_CARE_GAP_WKS','|=CURRENT_EFFDATE='''||TO_CHAR(trunc(l_trunc_eff_date),'YYYY/MM/DD')||'''')
l_min_gap = to_number(l_char_min_gap)

l_min_gap = l_min_gap *7

l_prev_end_date = '0001/01/01 00:00:00' (DATE)
i = 1

l_dummy = ESS_LOG_WRITE('[Carers Validation] Will set date context for block evaluation. Search start: '||to_char(search_start_date)||', search end: '||to_char(search_end_date))

CHANGE_CONTEXTS(START_DATE=TRUNC(search_start_date), END_DATE=search_end_date)
(
    while ANC_PER_ABS_ENTRS_ABSENCE_ENTRY_ID_ARR.exists(i) loop (
        abs_entry = ANC_PER_ABS_ENTRS_ABSENCE_ENTRY_ID_ARR[i]
        IF (abs_entry > 0) THEN (
             CHANGE_CONTEXTS(ABSENCE_ENTRY_ID=abs_entry) (
			   car_abs_type_id = ANC_ABS_ENTRS_ABSENCE_TYPE_ID
               abs_type_name = ' '
			   prev_start = ANC_ABS_ENTRS_START_DATE
               prev_end = ANC_ABS_ENTRS_END_DATE
               CHANGE_CONTEXTS(ABSENCE_TYPE_ID=car_abs_type_id)
               (
                    abs_type_name = ANC_ABS_TYP_NAME
               )
			   IF ( abs_type_name = 'ZHRX_IE_OCCUPATIONAL_CARERS'
                    AND (TRUNC(prev_start) != TRUNC(l_start_date) OR TRUNC(prev_end) != TRUNC(l_end_date))
                    AND TRUNC(prev_end) < TRUNC(l_start_date )) THEN (
                    IF ( l_prev_end_date = '0001/01/01 00:00:00' (DATE) OR TRUNC(prev_end) > TRUNC(l_prev_end_date )) THEN (
                        l_prev_end_date = prev_end
                    )
                )


             )
			
        )
        i = i + 1
    )
)
IF (l_prev_end_date != '0001/01/01 00:00:00' (DATE)) THEN (
    l_gap = DAYS_BETWEEN(TRUNC(l_start_date), TRUNC(l_prev_end_date)) +1
    l_dummy = ESS_LOG_WRITE('[Carers Validation] Calculated gap between previous end date and current start date: '||to_char(l_gap))
    IF (l_gap < l_min_gap) THEN (
        l_dummy = ESS_LOG_WRITE('[Carers Validation] Warning: Minimum 6 week gap not met! Gap is '||to_char(l_gap)||' days.')
        VALID = 'N'
        ERROR_CODE = 'W'
        ERROR_MESSAGE = 'HRX:::HRX_IE_CARE_MIN_GAP' 
        RETURN VALID, ERROR_MESSAGE, ERROR_CODE
    )
)
/* Return success */
RETURN VALID