Create Fast Formulas
You can write your own custom logic in the fast formula for absence payments.
To create the formulas:
Navigation:
- 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.
/**********************************************************************
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