- How do I set up statutory absences for Ireland?
- Set Up Parents Absences
Set Up Parents Absences
Create elements, formula result rules for entitlement results, balance feeds, validation formulas based on delivered formulas, entitlement formula, certificates, absence plan and absence type.
To set up payment for occupational Parents plan and Parents benefit:
-
Create an absence element using these details:
- Primary Classification: Absences​
- Secondary Classification: Maternity, Paternity, Parental, Parents or Adoption
-
Create the adoption benefit offset element using these details:
- Primary Classification: Information​
- Input Values: Pay Value, Process Date
Note: This element will capture the calculated value for adoption benefit. This element should have lower processing priority than the absence element for Adoption. -
Create benefit payment element using:
- Primary Classification: Direct Payment​
Note: This element will be used for directly paying the employee the adoption benefit amount in case the employer is entitled to do so. -
Create formula result rules for the <Absence Element> Entitlement
Result.
Create the formula: ORA_HRX_IE_PARENTS_PAYMENTNote: This is seeded formula for calculating the absence payment and will be invoked from the Entitlement Result formula.
/******************************************************************************** * $Header: * * Formula Name : ORA_HRX_IE_PARENTS_PAYMENT * * Description : This is seeded formula for calculating the absence payment. * This will be invoked from the Entitlement Result formula. * *********************************************************************************/ DEFAULT FOR PAY_DIR_COMP_MIN_START_DATE IS '0001/01/01 00:00:00' (date) DEFAULT FOR PAY_DIR_COMP_MAX_END_DATE IS '0001/01/01 00:00:00' (date) DEFAULT for PAY_EARN_PERIOD_END is '4712/12/31 00:00:00' (DATE) DEFAULT for PAY_EARN_PERIOD_START is '0001/01/01 00:00:00' (date) DEFAULT for ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE_NUMBER1 is 0 DEFAULT for ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE_NUMBER2 is 0 DEFAULT for ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE_DATE1 is '0001/01/01 00:00:00' (date) DEFAULT for ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE_DATE2 is '4712/12/31 00:00:00' (date) DEFAULT for ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE1 is 'X' DEFAULT for ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE2 is 'X' INPUTS ARE i_dir_card_id (NUMBER) ,i_dir_comp_id (NUMBER) ,i_factor (NUMBER) ,i_pay_value (NUMBER) ,i_deduction (NUMBER) ,i_unit (NUMBER) parents_benefit_payment = 0 factor = i_factor pay_value = 0 deduction = i_deduction unit = i_unit L_PROCESS_DATE = '0001/01/01 00:00:00' (date) l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_01 - Inside ORA_HRX_IE_PARENTS_PAYMENT' ) dir_card_id = i_dir_card_id dir_comp_id = i_dir_comp_id l_comp_id = DEDUCTION_COMPONENT_BY_EE l_ded_card_id = DEDUCTION_CARD_BY_EE l_cb_id = GET_CONTEXT(CALC_BREAKDOWN_ID,1) l_person_id = GET_CONTEXT(PERSON_ID,1) l_ORA_HRX_IE_PAR_STD_WKLY_RATE=0 l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_02 - l_cb_id '|| to_char(l_cb_id)) l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_03 - l_person_id '|| to_char(l_person_id)) l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_04 - dir_card_id '||to_char(dir_card_id)) l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_05 - dir_comp_id '||to_char(dir_comp_id)) l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_06 - l_comp_id '||to_char(l_comp_id)) l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_07 - l_ded_card_id '||to_char(l_ded_card_id)) l_comp_id = DEDUCTION_COMPONENT_BY_EE CHANGE_CONTEXTS(DIR_CARD_COMP_ID = l_comp_id) ( l_abs_min_date = PAY_DIR_COMP_MIN_START_DATE l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_08 l_abs_start_date : ' + to_char(l_abs_min_date) ) ) CHANGE_CONTEXTS(DEDUCTION_CARD_ID = dir_card_id , DIR_CARD_COMP_ID = dir_comp_id) ( l_abs_comp_date = PAY_DIR_COMP_MIN_START_DATE L_PROCESS_DATE = l_abs_comp_date l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_09 l_abs_comp_date : ' +to_char(l_abs_comp_date) ) ) CHANGE_CONTEXTS(DEDUCTION_CARD_ID = dir_card_id , DIR_CARD_COMP_ID = l_comp_id,EFFECTIVE_DATE = l_abs_comp_date) ( l_ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE_NUMBER2 = ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE_NUMBER2 temp = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_09 l_ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE_NUMBER2 : ' +to_char(l_ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE_NUMBER2 )) ) l_eff_date = l_abs_comp_date l_day_of_week = GET_DATE_DAY_OF_WEEK(l_eff_date) if factor > 0 then ( l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_10 l_abs_comp_date : ' +to_char(l_abs_comp_date) ) IF (l_day_of_week = 'SUN') then ( parents_benefit_payment = 0 l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_11 l_day_of_week : ' +l_day_of_week ) ) else ( if l_ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE_NUMBER2 > 0 then ( l_ORA_HRX_IE_PAR_STD_WKLY_RATE = l_ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE_NUMBER2 l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_12 l_ORA_HRX_IE_PAR_STD_WKLY_RATE OVERRIDE : ' +to_char(l_ORA_HRX_IE_PAR_STD_WKLY_RATE) ) ) else ( CHANGE_CONTEXTS(PART_NAME = 'ORA_HRX_IE_PAR_STD_WKLY_RATE', EFFECTIVE_DATE = l_abs_comp_date) ( SET_INPUT('BASE', 1) EXECUTE('CALL_CALC_VALUE') l_ORA_HRX_IE_PAR_STD_WKLY_RATE = GET_OUTPUT('DED_AMOUNT',0) l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_13 l_ORA_HRX_IE_PAR_STD_WKLY_RATE : ' +to_char(l_ORA_HRX_IE_PAR_STD_WKLY_RATE) ) ) ) parents_benefit_payment = (l_ORA_HRX_IE_PAR_STD_WKLY_RATE/6) parents_benefit_payment = trunc(parents_benefit_payment + 0.005, 2) l_wsa_code = 'WSA:'||'ORA_HRX_IE_PAR_STD_DAILY_RATE'||'_'||to_char(l_person_id)||'_'|| to_char(l_cb_id) ||'_'|| to_char(l_eff_date) l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_14 l_wsa_code : ' + l_wsa_code ) IF WSA_EXISTS(l_wsa_code,'NUMBER') THEN ( parents_benefit_payment = 0 ) else ( WSA_SET('WSA:'||'ORA_HRX_IE_PAR_STD_DAILY_RATE'||'_'||to_char(l_person_id)||'_'||to_char(l_cb_id)||'_'||to_char(l_eff_date),parents_benefit_payment) l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PARENTS_PAYMENT_15 Set parents_benefit_payment OUTPUT : ' + to_char(parents_benefit_payment) ) ) ) pay_value = parents_benefit_payment ) else ( pay_value = 0 ) RETURN pay_value,L_PROCESS_DATE -
Modify the formula <Absence Element> Entitlement Result to incorporate logic
for occupational payment and benefit payment and add the following code after
this line:
l_log = PAY_INTERNAL_LOG_WRITE('[<Absence Element>_ENTITLEMENT_RESULT] - Absence Override Check Printer OUTPUT : '|| out_ovrd_check_printer)
That is,L_parents_benefit_payment =0 IF IS_EXECUTABLE('GIKUMARI_IE_PARENTS_PAYMENT') THEN ( L_parents_benefit_payment =0 SET_INPUT ('i_dir_card_id', dir_card_id) SET_INPUT ('i_dir_comp_id', dir_comp_id) SET_INPUT ('i_factor', factor) SET_INPUT ('i_pay_value', pay_value) SET_INPUT ('i_deduction', deduction) SET_INPUT ('i_unit', unit) EXECUTE('GIKUMARI_IE_PARENTS_PAYMENT') L_parents_benefit_payment = GET_OUTPUT('pay_value', 0) l_process_date = GET_OUTPUT('L_PROCESS_DATE', l_dummy_date) ) IF pay_value = 0 THEN ( unit = 0 )Note: Replace the formula IE_PARENTS_PAYMENT in the above code with the formula created in step 4. Modify Return Statements to include additional variables i.e.:L_parents_benefit_payment,l_process_dateFor example:RETURN unit ,reduce_type , pay_value ,deduction , net_pay , dir_comp_id,dir_card_id , rate,ded_amount_rate,factor,out_expedite_flag,out_creator_type,out_creator_id,l_pay_unrounded,l_ded_unrounded,L_parents_benefit_payment,l_process_date - Create formula result rules for the Element <Absence Element> Entitlement Result.
- Create calculation factor for the element <Absence Element> Entitlement Result for the value definition Parents Benefit Standard Weekly Rate.
- Create a balance feed benefit offset element for the balance Adoption Benefit Offset.
- Create balance feed benefit payment element (Both Regular and Retro) for the balance Adoption Benefit Payment.
-
Create a validation formula based on a delivered seeded formula: IE
Adoption Absence Validation and configure warnings for these
scenarios:
- Minimum Duration
- Maximum Duration
-
Create an entitlement formula based on a documented sample formula for
entitlement.
Note: This sets the entitlement limits and generates a certificate whenever the required Certificate is marked as Not Received.
/************************************************************************ FORMULA NAME: IE_PAR_ENTITLEMENT FORMULA TYPE: Global Absence Plan Entitlement DESCRIPTION : IE Parents Absence Entitlement Formula ************************************************************************/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 IV_TOTALDURATION IS 0 DEFAULT FOR IV_START_DURATION IS 0 DEFAULT FOR IV_END_DURATION IS 0 DEFAULT FOR IV_ACTUALCHILDBIRTHDATE IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR IV_ACTUALSTARTDATE IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR IV_ACTUALENDDATE IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR IV_EXPECTEDCHILDBIRTHDATE IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR IV_PLANNEDSTARTDATE IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR IV_PLANNEDENDDATE IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR IV_MATCHING_DATE IS '0001/01/01 00:00:00' (DATE) DEFAULT FOR IV_NOTIFICATION_DATE IS '0001/01/01 00:00:00' (DATE) 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_ABSENCE_TYPE_CD IS ' ' DEFAULT FOR ANC_ABS_ENTRS_ABSENCE_STATUS_CD is ' ' DEFAULT FOR ANC_ABS_ENTRS_APPROVAL_STATUS_CD is ' ' DEFAULT FOR ANC_ABS_ENTRS_ABSENCE_TYPE_ID IS 0 DEFAULT FOR ANC_ABS_TYP_NAME IS ' ' DEFAULT FOR ANC_ABS_ENTRS_START_DATE IS '4712-12-31T00:00:00.000Z' (DATE) DEFAULT FOR ANC_ABS_ENTRS_END_DATE IS '4712-12-31T00:00:00.000Z' (DATE) DEFAULT FOR ANC_ABS_MTRNT_ACTUAL_CHILD_BIRTH_DATE IS '4712-12-31T00:00:00.000Z' (DATE) DEFAULT FOR IV_UI_PER_CERT_ID IS ' ' DEFAULT FOR IV_UI_ABS_CERT_ID IS ' ' DEFAULT FOR IV_UI_CERT_TYPE IS ' ' DEFAULT FOR IV_UI_CERT_REVPAYSTART_DATE IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR IV_UI_CERT_REVPAYEND_DATE IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR IV_UI_CERT_REVPAY_FACTOR IS 0 DEFAULT FOR IV_UI_CERT_CREATION_TYPE IS ' ' DEFAULT FOR IV_UI_CERT_STATUS IS ' ' DEFAULT FOR ANC_ABS_ENTR_CERTS_STATUS_ARR IS EMPTY_TEXT_NUMBER DEFAULT_DATA_VALUE FOR ANC_ABS_ENTR_CERTS_STATUS_ARR IS ' ' DEFAULT FOR ANC_ABS_CERTS_INFORMATION1_ARR IS EMPTY_TEXT_NUMBER DEFAULT_DATA_VALUE FOR ANC_ABS_CERTS_INFORMATION1_ARR IS ' ' DEFAULT FOR ANC_ABS_CERTS_NAME_ARR IS EMPTY_TEXT_NUMBER DEFAULT_DATA_VALUE FOR ANC_ABS_CERTS_NAME_ARR IS ' ' DEFAULT FOR ANC_ABS_ENTR_CERTS_REV_PAY_START_DT_ARR IS EMPTY_DATE_NUMBER DEFAULT_DATA_VALUE FOR ANC_ABS_ENTR_CERTS_REV_PAY_START_DT_ARR IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR ANC_ABS_ENTR_CERTS_REV_PAY_END_DT_ARR IS EMPTY_DATE_NUMBER DEFAULT_DATA_VALUE FOR ANC_ABS_ENTR_CERTS_REV_PAY_END_DT_ARR IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR LOC_NUMBER_ARRAY IS EMPTY_NUMBER_TEXT DEFAULT FOR LOC_STRING_ARRAY IS EMPTY_TEXT_TEXT DEFAULT FOR LOC_DATE_ARRAY IS EMPTY_DATE_TEXT DEFAULT FOR LOC_API_SKIP IS 'N' DEFAULT FOR IV_ATTRIBUTE_1 IS 'X' DEFAULT FOR IV_ATTRIBUTE_2 IS 'X' DEFAULT FOR IV_ATTRIBUTE_DATE1 IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR IV_ATTRIBUTE_DATE2 IS '4712/12/31 00:00:00' (DATE) DEFAULT FOR IV_ATTRIBUTE_NUMBER1 IS 0 DEFAULT FOR IV_ATTRIBUTE_NUMBER2 IS 0 INPUTS ARE IV_START_DATE,IV_END_DATE,IV_TOTALDURATION,IV_START_DURATION,IV_END_DURATION, IV_ACTUALCHILDBIRTHDATE,IV_ACTUALSTARTDATE,IV_ACTUALENDDATE,IV_EXPECTEDCHILDBIRTHDATE, IV_PLANNEDSTARTDATE,IV_PLANNEDENDDATE,IV_INFORMATION_DATE1,IV_INFORMATION_DATE2, IV_INFORMATION_DATE3,IV_INFORMATION_DATE4,IV_MATCHING_DATE,IV_NOTIFICATION_DATE, IV_UI_PER_CERT_ID,IV_UI_ABS_CERT_ID,IV_UI_CERT_TYPE,IV_UI_CERT_REVPAYSTART_DATE, IV_UI_CERT_REVPAYEND_DATE,IV_UI_CERT_REVPAY_FACTOR,IV_UI_CERT_CREATION_TYPE, IV_UI_CERT_STATUS,IV_ATTRIBUTE_1,IV_ATTRIBUTE_2,IV_ATTRIBUTE_DATE1,IV_ATTRIBUTE_DATE2, IV_ATTRIBUTE_NUMBER1,IV_ATTRIBUTE_NUMBER2 IF IV_EXPECTEDCHILDBIRTHDATE WAS NOT DEFAULTED THEN ( l_placement_date = IV_EXPECTEDCHILDBIRTHDATE ) IF IV_START_DATE WAS NOT DEFAULTED THEN ( l_start_date = IV_START_DATE ) IF IV_END_DATE WAS NOT DEFAULTED THEN ( l_end_date = IV_END_DATE ) IF IV_ACTUALCHILDBIRTHDATE WAS NOT DEFAULTED THEN ( l_placement_date = IV_ACTUALCHILDBIRTHDATE ) IF IV_ACTUALSTARTDATE WAS NOT DEFAULTED THEN ( l_start_date = IV_ACTUALSTARTDATE ) IF IV_ACTUALENDDATE WAS NOT DEFAULTED THEN ( l_end_date = IV_ACTUALENDDATE ) l_cert_index = 1 band1name = 'Band1Pay' band1payfactor = 100 band1entitlement = 63 band2name = 'Band2Pay' band2payfactor = 0 band2entitlement = 9999 l_cert_id_being_changed = IV_UI_ABS_CERT_ID l_cert_status = IV_UI_CERT_STATUS l_altcd_of_changed_cert = 'XYZ' CERT_NAMES = EMPTY_TEXT_NUMBER CERT_START_DATES = EMPTY_DATE_NUMBER CERT_END_DATES = EMPTY_DATE_NUMBER CERT_COMMENTS = EMPTY_TEXT_NUMBER l_iv_start_date = IV_START_DATE IF l_cert_id_being_changed != ' ' THEN ( l_altcd_of_changed_cert = GET_VALUE_SET('ORA_HRX_IE_CERT_ALTCD' ,'|=CURRENT_CERT_ID='||l_cert_id_being_changed ) ) /*** Parent Certificate Section ***/ l_parents_certificate_received = IV_ATTRIBUTE_1 IF l_parents_certificate_received = 'YES' THEN l_dummy = ess_log_write( 'l_parents_certificate_received '||l_parents_certificate_received) ELSE ( l_create = 'N' l_cert_start_date = l_start_date l_cert_end_date = l_end_date IF ( l_altcd_of_changed_cert = 'XYZ' ) THEN l_create = 'Y' ELSE ( IF ( l_altcd_of_changed_cert = 'CERT300100743094723' ) THEN l_create = 'N' ELSE IF ( l_altcd_of_changed_cert != 'XYZ' ) THEN ( l_create = 'Y' l_array_index = ANC_ABS_CERTS_NAME_ARR.FIRST(-1) while (ANC_ABS_CERTS_NAME_ARR.exists(l_array_index)) loop ( IF(TRUNC(ANC_ABS_ENTR_CERTS_REV_PAY_START_DT_ARR[l_array_index])= TRUNC(l_cert_start_date) AND (TRUNC(ANC_ABS_ENTR_CERTS_REV_PAY_END_DT_ARR[l_array_index]) = TRUNC(l_cert_end_date)) AND (ANC_ABS_ENTR_CERTS_STATUS_ARR[l_array_index] = 'V') AND (ANC_ABS_CERTS_NAME_ARR[l_array_index]= 'GIKUMARI_IE_NO_PAR_CERT_IE')) THEN l_create = 'N' /* found an existing voided cert so don't create */ l_array_index = ANC_ABS_CERTS_NAME_ARR.NEXT(l_array_index,-1) ) ) ) IF ( l_create = 'Y' ) THEN ( CERT_NAMES[l_cert_index] = 'GIKUMARI_IE_NO_PAR_CERT' CERT_COMMENTS[l_cert_index] = 'Non receipt of parents certificate leads to noneligibility for occupational absence payment.' CERT_START_DATES[l_cert_index] = l_cert_start_date CERT_END_DATES[l_cert_index] = l_cert_end_date l_cert_index = l_cert_index + 1 RETURN band1name, band1payfactor, band1entitlement, band2name, band2payfactor, band2entitlement, CERT_NAMES, CERT_START_DATES, CERT_END_DATES, CERT_COMMENTS ) ) /* --------- DBI BLOCK: Cumulative calculation for same child, all blocks ---------- */ l_child_actual_date = l_placement_date i = 1 l_total_statutory_leave_days = 0 search_start_date = IV_ACTUALCHILDBIRTHDATE /* the current block's actual/planned start */ search_end_date=add_days(l_start_date, -1) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : search_start_date : '|| to_char( search_start_date ) ) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : search_end_date : '|| to_char( search_end_date ) ) CHANGE_CONTEXTS(START_DATE=TRUNC(search_start_date), END_DATE=search_end_date) ( l_tot = ANC_PER_ABS_ENTRS_ABSENCE_ENTRY_ID_ARR.COUNT l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : Total absence entries in array: '||to_char(l_tot)) while ANC_PER_ABS_ENTRS_ABSENCE_ENTRY_ID_ARR.exists(i) loop ( iter_absentry = ANC_PER_ABS_ENTRS_ABSENCE_ENTRY_ID_ARR[i] CHANGE_CONTEXTS(ABSENCE_ENTRY_ID=iter_absentry) ( mat_abs_type_id = ANC_ABS_ENTRS_ABSENCE_TYPE_ID abs_entry_approval_cd = ANC_ABS_ENTRS_APPROVAL_STATUS_CD abs_type_name = ' ' l_blk_start = ANC_ABS_ENTRS_START_DATE l_blk_end = ANC_ABS_ENTRS_END_DATE CHANGE_CONTEXTS(ABSENCE_TYPE_ID=mat_abs_type_id) ( abs_type_name = ANC_ABS_TYP_NAME ) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : mat_abs_type_id : '|| to_char(mat_abs_type_id)) l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : abs_entry_id: '||to_char(iter_absentry)) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : : ANC_PER_ABS_ENTRS_ABSENCE_ENTRY_ID_ARR [' ||to_char(i) ||'] = '|| to_char(ANC_PER_ABS_ENTRS_ABSENCE_ENTRY_ID_ARR[i] )) l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : abs_type_name: '||abs_type_name) l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : abs_entry_approval_cd: '||abs_entry_approval_cd) l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : ANC_ABS_MTRNT_ACTUAL_CHILD_BIRTH_DATE: '||to_char(ANC_ABS_MTRNT_ACTUAL_CHILD_BIRTH_DATE)) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : l_blk_start first place: '|| to_char( l_blk_start ) ) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : l_blk_end first place: '|| to_char( l_blk_end ) ) /* Only sum previous APPROVED Parents absences for same child, SKIP the current block */ IF (abs_type_name = 'GIKUMARI_IE_OCCUPATIONAL_PARENTS' AND abs_entry_approval_cd = 'APPROVED' AND ANC_ABS_MTRNT_ACTUAL_CHILD_BIRTH_DATE = l_child_actual_date AND (l_blk_start != l_start_date OR l_blk_end != l_end_date) /* SKIP current */ ) THEN ( cert_for_block = 'YES' array_idx = ANC_ABS_CERTS_NAME_ARR.FIRST(-1) while ANC_ABS_CERTS_NAME_ARR.exists(array_idx) loop ( l_dummy = ess_log_write( '[DEBUG] Checking CERT: ' || ANC_ABS_CERTS_NAME_ARR[array_idx] || ' start:' || to_char(ANC_ABS_ENTR_CERTS_REV_PAY_START_DT_ARR[array_idx]) || ' end:' || to_char(ANC_ABS_ENTR_CERTS_REV_PAY_END_DT_ARR[array_idx]) || ' status:' || ANC_ABS_ENTR_CERTS_STATUS_ARR[array_idx]) IF (ANC_ABS_CERTS_NAME_ARR[array_idx] = 'GIKUMARI_IE_NO_PAR_CERT' AND TRUNC(ANC_ABS_ENTR_CERTS_REV_PAY_START_DT_ARR[array_idx]) = TRUNC(l_blk_start) AND TRUNC(ANC_ABS_ENTR_CERTS_REV_PAY_END_DT_ARR[array_idx]) = TRUNC(l_blk_end) AND ANC_ABS_ENTR_CERTS_STATUS_ARR[array_idx] != 'V') THEN ( cert_for_block = 'NO' ) array_idx = ANC_ABS_CERTS_NAME_ARR.NEXT(array_idx, -1) ) l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : cert_for_block: '||cert_for_block) IF (cert_for_block = 'YES') THEN ( IF (ANC_ABS_ENTRS_START_DATE was not DEFAULTED) THEN l_blk_start = ANC_ABS_ENTRS_START_DATE ELSE l_blk_start = '0001/01/01 00:00:00' (date) IF (ANC_ABS_ENTRS_END_DATE was not DEFAULTED) THEN l_blk_end = ANC_ABS_ENTRS_END_DATE ELSE l_blk_end = '0001/01/01 00:00:00' (date) IF (l_blk_start != '0001/01/01 00:00:00' (date) AND l_blk_end != '0001/01/01 00:00:00' (date)) THEN ( l_days = DAYS_BETWEEN(TRUNC(l_blk_end), TRUNC(l_blk_start)) + 1 l_total_statutory_leave_days = l_total_statutory_leave_days + l_days l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : Counted block of '||to_char(l_days)||' days. Running total: '||to_char(l_total_statutory_leave_days)) ) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : ****************** ****************** ' ) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : l_blk_start : '|| to_char( l_blk_start ) ) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : l_blk_end : '|| to_char( l_blk_end ) ) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : ANC_ABS_ENTRS_START_DATE : '|| to_char( ANC_ABS_ENTRS_START_DATE ) ) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : ANC_ABS_ENTRS_END_DATE : '|| to_char( ANC_ABS_ENTRS_END_DATE) ) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : l_start_date : '|| to_char( l_start_date ) ) l_dummy = ESS_LOG_WRITE( '[Parents Entitlement Formula] : l_end_date : '|| to_char( l_end_date ) ) ) ) ) i = i + 1 ) ) l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : FINAL TOTAL DAYS FROM PRIOR BLOCKS: '||to_char(l_total_statutory_leave_days)) /* --- Block duration calculation --- */ /* Safe fallback: If IV_START_DURATION and IV_END_DURATION are not working, use l_start_date/l_end_date */ l_block_length = 0 IF IV_END_DURATION > 0 AND IV_START_DURATION >= 0 THEN ( l_block_length = IV_END_DURATION - IV_START_DURATION + 1 l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : Used IV_END_DURATION/IV_START_DURATION. l_block_length: '||to_char(l_block_length)) ) ELSE ( /* Use inclusive date difference */ IF (l_start_date != '0001/01/01 00:00:00' (date) AND l_end_date != '4712-12-31 00:00:00' (date)) THEN ( l_block_length = DAYS_BETWEEN(TRUNC(l_end_date), TRUNC(l_start_date)) + 1 l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : Used l_start_date/l_end_date. l_block_length: '||to_char(l_block_length)) ) ELSE ( /* As last resort: 0 (should not happen) */ l_block_length = 0 l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : Unable to determine l_block_length! Value: 0') ) ) l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : l_block_length for current block: '||to_char(l_block_length)) l_paid_days_remaining = 63 - l_total_statutory_leave_days l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : l_paid_days_remaining (as of this block): '||to_char(l_paid_days_remaining)) IF l_paid_days_remaining > 0 THEN ( l_paid_days_in_this_block = LEAST(l_block_length, l_paid_days_remaining) l_unpaid_days_in_this_block = l_block_length - l_paid_days_in_this_block l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : l_paid_days_in_this_block: '||to_char(l_paid_days_in_this_block)) l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : l_unpaid_days_in_this_block: '||to_char(l_unpaid_days_in_this_block)) IF l_unpaid_days_in_this_block > 0 THEN ( CERT_NAMES[l_cert_index] = 'GIKUMARI_IE_MAX_WEEK_EXCEED_PAR_CERT' CERT_COMMENTS[l_cert_index] = 'Ireland Parents Absence: Maximum statutory entitlement (9 weeks) exceeded.' CERT_START_DATES[l_cert_index] = ADD_DAYS(l_start_date, l_paid_days_in_this_block) CERT_END_DATES[l_cert_index] = l_end_date l_cert_index = l_cert_index + 1 l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : Excess found. Certificate generated for excess days.') RETURN band1name, band1payfactor, band1entitlement,band2name, band2payfactor, band2entitlement,CERT_NAMES,CERT_START_DATES,CERT_END_DATES,CERT_COMMENTS ) ) ELSE ( /* All days in this block are unpaid */ CERT_NAMES[l_cert_index] = 'GIKUMARI_IE_MAX_WEEK_EXCEED_PAR_CERT' CERT_COMMENTS[l_cert_index] = 'Ireland Parents Absence: Maximum statutory entitlement (9 weeks) exceeded.' CERT_START_DATES[l_cert_index] = l_start_date CERT_END_DATES[l_cert_index] = l_end_date l_cert_index = l_cert_index + 1 l_dummy = ESS_LOG_WRITE('[Parents Entitlement Formula] : All days exceed statutory entitlement. All unpaid.') RETURN band1name, band1payfactor, band1entitlement,band2name, band2payfactor, band2entitlement,CERT_NAMES,CERT_START_DATES,CERT_END_DATES,CERT_COMMENTS ) RETURN band1name, band1payfactor, band1entitlement, band2name, band2payfactor, band2entitlement, CERT_NAMES, CERT_START_DATES, CERT_END_DATES, CERT_COMMENTSNote: Please replace the variable name in the code above with the actual value in the column of the table ANC_ABS_CERTIFICATIONS_f mentioned here for the certificate created: - Create a certificate for Certificate Not Received.
-
Configure ANC_PER_ABS_ENTRIES_DFF to add the fields:
- Certificate Received
- Weekly Rate Override
Note: Currently, there are six database items for retrieving data in Oracle Payroll related to the segments of: ANC_PER_ABS_ENTRIES_DFF i.e. ATTRIBUTE_1, ATTRIBUTE_2, ATTRIBUTE_DATE1, ATTRIBUTE_DATE2, ATTRIBUTE_NUMBER1 and ATTRIBUTE_NUMBER2. It's recommended to use any one of these segments for the configuration. - Create an Absence Plan and attach it with the entitlement formula.
- Create an Absence Type and attach it with the validation formula and certificate.