Set Up Paternity Absences

Create paternity 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 calculation of payment for occupational Paternity plan and Paternity benefit:

  1. Create an absence element using these details:
    • Primary Classification: Absences​
    • Secondary Classification: Maternity, Paternity, Parental, Parents or Adoption
  2. 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.
  3. 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.
  4. Create formula result rules for the <Absence Element> Entitlement Result.
    Create the formula: ORA_HRX_IE_PATERNITY_PAYMENT
    Note: This is seeded formula for calculating the absence payment and will be invoked from the Entitlement Result formula.
    /********************************************************************************
    * $Header:                                                                     *
     * Formula Name : ORA_HRX_IE_PATERNITY_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)
    
    paternity_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_PATERNITY_PAYMENT_01 - Inside ORA_HRX_IE_PATERNITY_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_PAT_STD_WKLY_RATE=0
    
    l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PATERNITY_PAYMENT_02 - l_cb_id '|| to_char(l_cb_id))
    l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PATERNITY_PAYMENT_03 - l_person_id '|| to_char(l_person_id))
    l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PATERNITY_PAYMENT_04 - dir_card_id '||to_char(dir_card_id))
    l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PATERNITY_PAYMENT_05 - dir_comp_id '||to_char(dir_comp_id))
    l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PATERNITY_PAYMENT_06 - l_comp_id '||to_char(l_comp_id))
    l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PATERNITY_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_PATERNITY_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_PATERNITY_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_PATERNITY_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_PATERNITY_PAYMENT_10 l_abs_comp_date      : ' +to_char(l_abs_comp_date) )      
    
    	IF (l_day_of_week = 'SUN') then 
    	(
    	paternity_benefit_payment = 0
        l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PATERNITY_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_PAT_STD_WKLY_RATE = l_ORA_HRX_IE_ABS_REF_ABS_RECORD_ATTRIBUTE_NUMBER2
    			l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PATERNITY_PAYMENT_12 l_ORA_HRX_IE_PAT_STD_WKLY_RATE OVERRIDE : ' +to_char(l_ORA_HRX_IE_PAT_STD_WKLY_RATE) )      
    			)
    			else
    			(
    				
    			CHANGE_CONTEXTS(PART_NAME = 'ORA_HRX_IE_PAT_STD_WKLY_RATE', EFFECTIVE_DATE = l_abs_comp_date)
    				(
    				SET_INPUT('BASE', 1)
    				EXECUTE('CALL_CALC_VALUE')
    				l_ORA_HRX_IE_PAT_STD_WKLY_RATE = GET_OUTPUT('DED_AMOUNT',0)
    				l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PATERNITY_PAYMENT_13 l_ORA_HRX_IE_PAT_STD_WKLY_RATE : ' +to_char(l_ORA_HRX_IE_PAT_STD_WKLY_RATE) )      			
    				)
    			)
    		
    			paternity_benefit_payment = (l_ORA_HRX_IE_PAT_STD_WKLY_RATE/6)
    			paternity_benefit_payment = trunc(paternity_benefit_payment + 0.005, 2)
    			l_wsa_code = 'WSA:'||'ORA_HRX_IE_PAT_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_PATERNITY_PAYMENT_14 l_wsa_code : ' + l_wsa_code )      			
    				
    		IF WSA_EXISTS(l_wsa_code,'NUMBER')  THEN
    		(  
    				paternity_benefit_payment = 0
    		)
    		else
    		( 
    				WSA_SET('WSA:'||'ORA_HRX_IE_PAT_STD_DAILY_RATE'||'_'||to_char(l_person_id)||'_'||to_char(l_cb_id)||'_'||to_char(l_eff_date),paternity_benefit_payment)
    				l_log = PAY_INTERNAL_LOG_WRITE('ORA_HRX_IE_PATERNITY_PAYMENT_15 Set paternity_benefit_payment OUTPUT : ' + to_char(paternity_benefit_payment) )      				
    		)
    			
    	)		
    	pay_value = paternity_benefit_payment
    	)
    	else
    	(
    	pay_value = 0
    	)
        RETURN pay_value,L_PROCESS_DATE
    
  5. 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_paternity_benefit_payment =0
    IF IS_EXECUTABLE('GIKUMARI_IE_PATERNITY_PAYMENT') THEN
          (
    L_paternity_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_PATERNITY_PAYMENT')
            
    		L_paternity_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_PATERNITY_PAYMENT in the above code with the formula created in step 4. Modify Return Statements to include additional variables i.e.:
    L_paternity_benefit_payment,l_process_date
    For 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_paternity_benefit_payment,l_process_date
  6. Create formula result rules for the Element <Absence Element> Entitlement Result.
  7. Create calculation factor for the element <Absence Element> Entitlement Result for the value definition Paternity Benefit Standard Weekly Rate.
  8. Create a balance feed benefit offset element for the balance Adoption Benefit Offset.
  9. Create balance feed benefit payment element (Both Regular and Retro) for the balance Adoption Benefit Payment.
  10. Create a validation formula based on a delivered seeded formula: IE Adoption Absence Validation and configure warnings for these scenarios:
    • Minimum Duration
    • Maximum Duration
  11. 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_PAT_ENTITLEMENT
    FORMULA TYPE: Global Absence Plan Entitlement
    DESCRIPTION : IE Paternity 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 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
    
    l_dummy = ess_log_write( 'PAT_Entitlement  >>  Start of Formula')
    l_trunc_eff_date = TRUNC(GET_CONTEXT(EFFECTIVE_DATE,'0001/01/01' (date)))
    
    
    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
    )
    
    
    LOC_API_SKIP = 'N'
    
    l_cert_index = 1
    band1name = 'Band1Pay'
    band1payfactor = 100
    band1entitlement = 14
    
    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
    
    /* In case certified is being touched then get certificate details */
    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 )
    )
    
    
    /*** Start of section for paternity certificate   ***/
    l_paternity_certificate_received = 'NO'
    l_paternity_certificate_received = IV_ATTRIBUTE_1
    
    
    /* start if clause paternity certificate  */
    IF l_paternity_certificate_received = 'YES' THEN
    (
    l_dummy = ess_log_write( 'l_paternity_certificate_received '||l_paternity_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 = 'CERT300100736707725' ) 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_PAT_CERT_IE')) THEN
    	  (
    		l_create = 'N'  /* we have found an existing voided cert so don't create */
    	  )
    	  l_array_index=ANC_ABS_CERTS_NAME_ARR.NEXT(l_array_index,-1)
    	) /** end while **/
    	  )
    	)
    	IF ( l_create = 'Y'     ) THEN
    	(
    	  CERT_NAMES[l_cert_index] = 'GIKUMARI_IE_NO_PAT_CERT'
    	  CERT_COMMENTS[l_cert_index] = 'Non receipt of paternity 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
    	)
    
    ) /** end of if clause paternity certificate **/
    RETURN band1name, band1payfactor, band1entitlement,band2name, band2payfactor, band2entitlement,CERT_NAMES,CERT_START_DATES,CERT_END_DATES,CERT_COMMENTS
    
    Note: 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:
  12. Create a certificate for Certificate Not Received.
  13. 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.
  14. Create an Absence Plan and attach it with the entitlement formula.
  15. Create an Absence Type and attach it with the validation formula and certificate.