1: PACKAGE BODY py_za_tx_utl_01032002 AS
2: /* $Header: pyzatu04.pkb 120.0 2005/05/29 10:32:33 appldev noship $ */
3: /* Copyright (c) Oracle Corporation 2000. All rights reserved. */
4: /*
5: PRODUCT
5: PRODUCT
6: Oracle Payroll - ZA Localisation Tax Module
7:
8: NAME
9: py_za_tx_utl_01032002.pkb
10:
11: DESCRIPTION
12: This is the ZA Tax Module utility package. It contains
13: functions and procedures used by the main tax package.
194: AS
195: -- Variables
196: l_GlbVal t_balance;
197: BEGIN
198: hr_utility.set_location('py_za_tx_utl_01032002.GlbVal',1);
199: WriteHrTrace('p_GlbNme :'||p_GlbNme);
200: WriteHrTrace('p_EffDte :'||to_char(p_EffDte,'DD/MM/YYYY'));
201: --
202: SELECT TO_NUMBER(global_value)
204: FROM ff_globals_f
205: WHERE p_EffDte between effective_start_date and effective_end_date
206: AND global_name = p_GlbNme;
207:
208: hr_utility.set_location('py_za_tx_utl_01032002.GlbVal',2);
209: RETURN l_GlbVal;
210:
211: EXCEPTION
212: WHEN OTHERS THEN
228:
229: -------------------------------------------------------------------------------
230: BEGIN -- MAIN --
231: -------------------------------------------------------------------------------
232: hr_utility.set_location('py_za_tx_utl_01032002.TotPrdTxbIncYtd',1);
233: l_tot_txb_prd_inc_ytd :=
234: ( py_za_tx_01032002.bal_AST_PRCHD_RVAL_NRFI_YTD + py_za_tx_01032002.bal_AST_PRCHD_RVAL_RFI_YTD
235: + py_za_tx_01032002.bal_BUR_AND_SCH_NRFI_YTD + py_za_tx_01032002.bal_BUR_AND_SCH_RFI_YTD
236: + py_za_tx_01032002.bal_COMM_NRFI_YTD + py_za_tx_01032002.bal_COMM_RFI_YTD
253: + py_za_tx_01032002.bal_TXB_PEN_NRFI_YTD + py_za_tx_01032002.bal_TXB_PEN_RFI_YTD
254: + py_za_tx_01032002.bal_USE_VEH_NRFI_YTD + py_za_tx_01032002.bal_USE_VEH_RFI_YTD
255: );
256:
257: hr_utility.set_location('py_za_tx_utl_01032002.TotPrdTxbIncYtd',2);
258: RETURN l_tot_txb_prd_inc_ytd;
259:
260: EXCEPTION
261: WHEN OTHERS THEN
258: RETURN l_tot_txb_prd_inc_ytd;
259:
260: EXCEPTION
261: WHEN OTHERS THEN
262: hr_utility.set_location('py_za_tx_utl_01032002.TotPrdTxbIncYtd',3);
263: IF py_za_tx_01032002.xpt_Msg = 'No Error' THEN
264: py_za_tx_01032002.xpt_Msg := 'TotPrdTxbIncYtd: '||TO_CHAR(SQLCODE);
265: END IF;
266: RAISE py_za_tx_01032002.xpt_E;
279:
280: -------------------------------------------------------------------------------
281: BEGIN -- MAIN --
282: -------------------------------------------------------------------------------
283: hr_utility.set_location('py_za_tx_utl_01032002.TotPrdTxbIncPtd',1);
284: l_tot_txb_prd_inc_ptd :=
285: ( py_za_tx_01032002.bal_AST_PRCHD_RVAL_NRFI_PTD + py_za_tx_01032002.bal_AST_PRCHD_RVAL_RFI_PTD
286: + py_za_tx_01032002.bal_BUR_AND_SCH_NRFI_PTD + py_za_tx_01032002.bal_BUR_AND_SCH_RFI_PTD
287: + py_za_tx_01032002.bal_COMM_NRFI_PTD + py_za_tx_01032002.bal_COMM_RFI_PTD
304: + py_za_tx_01032002.bal_TXB_PEN_NRFI_PTD + py_za_tx_01032002.bal_TXB_PEN_RFI_PTD
305: + py_za_tx_01032002.bal_USE_VEH_NRFI_PTD + py_za_tx_01032002.bal_USE_VEH_RFI_PTD
306: );
307:
308: hr_utility.set_location('py_za_tx_utl_01032002.TotPrdTxbIncPtd',2);
309: RETURN l_tot_txb_prd_inc_ptd;
310:
311: EXCEPTION
312: WHEN OTHERS THEN
309: RETURN l_tot_txb_prd_inc_ptd;
310:
311: EXCEPTION
312: WHEN OTHERS THEN
313: hr_utility.set_location('py_za_tx_utl_01032002.TotPrdTxbIncPtd',3);
314: IF py_za_tx_01032002.xpt_Msg = 'No Error' THEN
315: py_za_tx_01032002.xpt_Msg := 'TotPrdTxbIncPtd: '||TO_CHAR(SQLCODE);
316: END IF;
317: RAISE py_za_tx_01032002.xpt_E;
330:
331: -------------------------------------------------------------------
332: BEGIN -- NegPtd - MAIN --
333: -------------------------------------------------------------------
334: hr_utility.set_location('py_za_tx_utl_01032002.NegPtd',1);
335: -- If any period ptd income value is negative
336: -- a site calc has to be done
337: py_za_tx_01032002.trc_NorIncPtd :=
338: ( py_za_tx_01032002.bal_COMM_NRFI_PTD + py_za_tx_01032002.bal_COMM_RFI_PTD
371: , py_za_tx_01032002.trc_TrvAllPtd
372: , py_za_tx_01032002.trc_BonProPtd
373: ) < 0
374: THEN
375: hr_utility.set_location('py_za_tx_utl_01032002.NegPtd',2);
376: py_za_tx_01032002.trc_NegPtd := TRUE;
377: END IF;
378:
379: hr_utility.set_location('py_za_tx_utl_01032002.NegPtd',3);
375: hr_utility.set_location('py_za_tx_utl_01032002.NegPtd',2);
376: py_za_tx_01032002.trc_NegPtd := TRUE;
377: END IF;
378:
379: hr_utility.set_location('py_za_tx_utl_01032002.NegPtd',3);
380: RETURN py_za_tx_01032002.trc_NegPtd;
381:
382: EXCEPTION
383: WHEN OTHERS THEN
393: FUNCTION LatePayPeriod RETURN BOOLEAN AS
394: -- Variables
395: l_CurTxYear NUMBER(15);
396: BEGIN
397: hr_utility.set_location('py_za_tx_utl_01032002.LatePayPeriod',1);
398: -- IF the employee's assignment ended before the current tax year
399: -- it's a Late Pay Period
400: IF py_za_tx_01032002.dbi_ZA_ACT_END_DTE < py_za_tx_01032002.dbi_ZA_TX_YR_STRT THEN
401:
398: -- IF the employee's assignment ended before the current tax year
399: -- it's a Late Pay Period
400: IF py_za_tx_01032002.dbi_ZA_ACT_END_DTE < py_za_tx_01032002.dbi_ZA_TX_YR_STRT THEN
401:
402: hr_utility.set_location('py_za_tx_utl_01032002.LatePayPeriod',2);
403:
404: -- Valid Late Pay Period?
405: --
406: -- Current Tax Year
405: --
406: -- Current Tax Year
407: l_CurTxYear := to_number(to_char(py_za_tx_01032002.dbi_ZA_TX_YR_END,'YYYY'));
408:
409: hr_utility.set_location('py_za_tx_utl_01032002.LatePayPeriod',3);
410:
411: IF (l_CurTxYear - py_za_tx_01032002.dbi_ZA_ASG_TX_YR) > 1 THEN
412: hr_utility.set_location('py_za_tx_utl_01032002.LatePayPeriod',4);
413: hr_utility.set_message(801, 'Late Payment Across Two Tax Years!');
408:
409: hr_utility.set_location('py_za_tx_utl_01032002.LatePayPeriod',3);
410:
411: IF (l_CurTxYear - py_za_tx_01032002.dbi_ZA_ASG_TX_YR) > 1 THEN
412: hr_utility.set_location('py_za_tx_utl_01032002.LatePayPeriod',4);
413: hr_utility.set_message(801, 'Late Payment Across Two Tax Years!');
414: hr_utility.raise_error;
415: ELSE
416: hr_utility.set_location('py_za_tx_utl_01032002.LatePayPeriod',5);
412: hr_utility.set_location('py_za_tx_utl_01032002.LatePayPeriod',4);
413: hr_utility.set_message(801, 'Late Payment Across Two Tax Years!');
414: hr_utility.raise_error;
415: ELSE
416: hr_utility.set_location('py_za_tx_utl_01032002.LatePayPeriod',5);
417: RETURN TRUE;
418: END IF;
419:
420: ELSE
417: RETURN TRUE;
418: END IF;
419:
420: ELSE
421: hr_utility.set_location('py_za_tx_utl_01032002.LatePayPeriod',6);
422: RETURN FALSE;
423: END IF;
424:
425: EXCEPTION
436: BEGIN
437: -- Is this the last period for the tax year
438: --
439: IF py_za_tx_01032002.dbi_ZA_PAY_PRDS_LFT = 1 THEN
440: hr_utility.set_location('py_za_tx_utl_01032002.LstPeriod',1);
441: RETURN TRUE;
442: ELSE
443: hr_utility.set_location('py_za_tx_utl_01032002.LstPeriod',2);
444: RETURN FALSE;
439: IF py_za_tx_01032002.dbi_ZA_PAY_PRDS_LFT = 1 THEN
440: hr_utility.set_location('py_za_tx_utl_01032002.LstPeriod',1);
441: RETURN TRUE;
442: ELSE
443: hr_utility.set_location('py_za_tx_utl_01032002.LstPeriod',2);
444: RETURN FALSE;
445: END IF;
446:
447: EXCEPTION
461: --
462: IF py_za_tx_01032002.dbi_ZA_ACT_END_DTE BETWEEN py_za_tx_01032002.dbi_ZA_CUR_PRD_STRT_DTE
463: AND py_za_tx_01032002.dbi_ZA_CUR_PRD_END_DTE
464: THEN
465: hr_utility.set_location('py_za_tx_utl_01032002.EmpTermInPeriod',1);
466: RETURN TRUE;
467: ELSE
468: hr_utility.set_location('py_za_tx_utl_01032002.EmpTermInPeriod',2);
469: RETURN FALSE;
464: THEN
465: hr_utility.set_location('py_za_tx_utl_01032002.EmpTermInPeriod',1);
466: RETURN TRUE;
467: ELSE
468: hr_utility.set_location('py_za_tx_utl_01032002.EmpTermInPeriod',2);
469: RETURN FALSE;
470: END IF;
471:
472: EXCEPTION
484: BEGIN
485: -- Was the employee terminated before the current period
486: --
487: IF py_za_tx_01032002.dbi_ZA_ACT_END_DTE <= py_za_tx_01032002.dbi_ZA_CUR_PRD_STRT_DTE THEN
488: hr_utility.set_location('py_za_tx_utl_01032002.EmpTermPrePeriod',1);
489: RETURN TRUE;
490: ELSE
491: hr_utility.set_location('py_za_tx_utl_01032002.EmpTermPrePeriod',2);
492: RETURN FALSE;
487: IF py_za_tx_01032002.dbi_ZA_ACT_END_DTE <= py_za_tx_01032002.dbi_ZA_CUR_PRD_STRT_DTE THEN
488: hr_utility.set_location('py_za_tx_utl_01032002.EmpTermPrePeriod',1);
489: RETURN TRUE;
490: ELSE
491: hr_utility.set_location('py_za_tx_utl_01032002.EmpTermPrePeriod',2);
492: RETURN FALSE;
493: END IF;
494:
495: EXCEPTION
552: WriteHrTrace('py_za_tx_01032002.trc_AnnPymPtd: '||to_char(py_za_tx_01032002.trc_AnnPymPtd));
553:
554: -- Annual Type PTD Income with no Period Type PTD Income
555: IF (py_za_tx_01032002.trc_AnnBonPtd + py_za_tx_01032002.trc_AnnPymPtd) <> 0 AND py_za_tx_01032002.trc_TxbIncPtd <= 0 THEN
556: hr_utility.set_location('py_za_tx_utl_01032002.PreErnPeriod',1);
557: RETURN TRUE;
558: ELSE
559: hr_utility.set_location('py_za_tx_utl_01032002.PreErnPeriod',2);
560: RETURN FALSE;
555: IF (py_za_tx_01032002.trc_AnnBonPtd + py_za_tx_01032002.trc_AnnPymPtd) <> 0 AND py_za_tx_01032002.trc_TxbIncPtd <= 0 THEN
556: hr_utility.set_location('py_za_tx_utl_01032002.PreErnPeriod',1);
557: RETURN TRUE;
558: ELSE
559: hr_utility.set_location('py_za_tx_utl_01032002.PreErnPeriod',2);
560: RETURN FALSE;
561: END IF;
562:
563: EXCEPTION
572: -------------------------------------------------------------------------------
573: FUNCTION SitePeriod RETURN BOOLEAN AS
574: BEGIN
575: IF LstPeriod OR EmpTermInPeriod OR EmpTermPrePeriod THEN
576: hr_utility.set_location('py_za_tx_utl_01032002.SitePeriod',1);
577: RETURN TRUE;
578: ELSE
579: hr_utility.set_location('py_za_tx_utl_01032002.SitePeriod',2);
580: RETURN FALSE;
575: IF LstPeriod OR EmpTermInPeriod OR EmpTermPrePeriod THEN
576: hr_utility.set_location('py_za_tx_utl_01032002.SitePeriod',1);
577: RETURN TRUE;
578: ELSE
579: hr_utility.set_location('py_za_tx_utl_01032002.SitePeriod',2);
580: RETURN FALSE;
581: END IF;
582:
583: EXCEPTION
596: ------------
597: l_tot_inc_ytd t_balance;
598: l_tot_inc_ptd t_balance;
599: BEGIN
600: hr_utility.set_location('py_za_tx_utl_01032002.PeriodFactor',1);
601:
602: l_tot_inc_ytd := TotPrdTxbIncYtd;
603: l_tot_inc_ptd := TotPrdTxbIncPtd;
604:
601:
602: l_tot_inc_ytd := TotPrdTxbIncYtd;
603: l_tot_inc_ptd := TotPrdTxbIncPtd;
604:
605: hr_utility.set_location('py_za_tx_utl_01032002.PeriodFactor',2);
606:
607: IF py_za_tx_01032002.dbi_ZA_TX_YR_STRT < py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE THEN
608: hr_utility.set_location('py_za_tx_utl_01032002.PeriodFactor',3);
609:
604:
605: hr_utility.set_location('py_za_tx_utl_01032002.PeriodFactor',2);
606:
607: IF py_za_tx_01032002.dbi_ZA_TX_YR_STRT < py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE THEN
608: hr_utility.set_location('py_za_tx_utl_01032002.PeriodFactor',3);
609:
610: IF l_tot_inc_ytd = l_tot_inc_ptd THEN
611: hr_utility.set_location('py_za_tx_utl_01032002.PeriodFactor',3);
612: -- i.e. first pay period for the person
607: IF py_za_tx_01032002.dbi_ZA_TX_YR_STRT < py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE THEN
608: hr_utility.set_location('py_za_tx_utl_01032002.PeriodFactor',3);
609:
610: IF l_tot_inc_ytd = l_tot_inc_ptd THEN
611: hr_utility.set_location('py_za_tx_utl_01032002.PeriodFactor',3);
612: -- i.e. first pay period for the person
613: py_za_tx_01032002.trc_PrdFactor :=
614: ( py_za_tx_01032002.dbi_ZA_CUR_PRD_END_DTE
615: - py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE
620: - py_za_tx_01032002.dbi_ZA_CUR_PRD_STRT_DTE
621: + 1
622: );
623: ELSE
624: hr_utility.set_location('py_za_tx_utl_01032002.PeriodFactor',5);
625: py_za_tx_01032002.trc_PrdFactor := 1;
626: END IF;
627:
628: ELSE
625: py_za_tx_01032002.trc_PrdFactor := 1;
626: END IF;
627:
628: ELSE
629: hr_utility.set_location('py_za_tx_utl_01032002.PeriodFactor',6);
630: py_za_tx_01032002.trc_PrdFactor := 1;
631: END IF;
632:
633: WriteHrTrace('dbi_ZA_TX_YR_STRT: '
655: -------------------------------------------------------------------------------
656: PROCEDURE PossiblePeriodsFactor AS
657: BEGIN
658: IF py_za_tx_01032002.dbi_ZA_TX_YR_STRT >= py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE THEN
659: hr_utility.set_location('py_za_tx_utl_01032002.PossiblePeriodsFactor',1);
660: py_za_tx_01032002.trc_PosFactor := 1;
661: ELSE
662: IF py_za_tx_01032002.trc_PrdFactor <> 1 THEN
663: hr_utility.set_location('py_za_tx_utl_01032002.PossiblePeriodsFactor',2);
659: hr_utility.set_location('py_za_tx_utl_01032002.PossiblePeriodsFactor',1);
660: py_za_tx_01032002.trc_PosFactor := 1;
661: ELSE
662: IF py_za_tx_01032002.trc_PrdFactor <> 1 THEN
663: hr_utility.set_location('py_za_tx_utl_01032002.PossiblePeriodsFactor',2);
664: --
665: py_za_tx_01032002.trc_PosFactor :=
666: py_za_tx_01032002.dbi_ZA_DYS_IN_YR
667: / ( py_za_tx_01032002.dbi_ZA_TX_YR_END
668: - py_za_tx_01032002.dbi_ZA_CUR_PRD_STRT_DTE
669: + 1
670: );
671: ELSE
672: hr_utility.set_location('py_za_tx_utl_01032002.PossiblePeriodsFactor',3);
673: --
674: py_za_tx_01032002.trc_PosFactor :=
675: py_za_tx_01032002.dbi_ZA_DYS_IN_YR
676: / ( py_za_tx_01032002.dbi_ZA_TX_YR_END
699: l_AnnFig3 t_balance;
700: l_AnnFig4 t_balance;
701:
702: BEGIN
703: hr_utility.set_location('py_za_tx_utl_01032002.Annualise',1);
704: -- 1
705: l_AnnFig1 := p_PtdInc / py_za_tx_01032002.trc_PrdFactor;
706: -- 2
707: l_AnnFig2 := l_AnnFig1 * py_za_tx_01032002.dbi_ZA_PAY_PRDS_LFT;
709: l_AnnFig3 := l_AnnFig2 + p_YtdInc - p_PtdInc;
710: -- 4
711: l_AnnFig4 := l_AnnFig3 * py_za_tx_01032002.trc_PosFactor;
712: --
713: hr_utility.set_location('py_za_tx_utl_01032002.Annualise',2);
714: --
715: WriteHrTrace('p_PtdInc: '||to_char(p_PtdInc));
716: WriteHrTrace('py_za_tx_01032002.trc_PrdFactor: '||to_char(py_za_tx_01032002.trc_PrdFactor));
717: WriteHrTrace('l_AnnFig1: '||to_char(l_AnnFig1));
749:
750: BEGIN
751: -- Setup the Globals
752: IF py_za_tx_01032002.trc_CalTyp = 'PstCalc' THEN
753: hr_utility.set_location('py_za_tx_utl_01032002.SetRebates',1);
754: -- Employee Tax Year Start and End Dates
755: --
756: l_EndDate := py_za_tx_01032002.dbi_ZA_ASG_TX_YR_END;
757:
754: -- Employee Tax Year Start and End Dates
755: --
756: l_EndDate := py_za_tx_01032002.dbi_ZA_ASG_TX_YR_END;
757:
758: hr_utility.set_location('py_za_tx_utl_01032002.SetRebates',2);
759:
760: -- Global Values
761: l_ZA_TX_YR_END := l_EndDate;
762: l_ZA_ADL_TX_RBT := GlbVal('ZA_ADDITIONAL_TAX_REBATE',l_EndDate);
763: l_ZA_PRI_TX_RBT := GlbVal('ZA_PRIMARY_TAX_REBATE',l_EndDate);
764: l_ZA_PRI_TX_THRSHLD := GlbVal('ZA_PRIM_TAX_THRESHOLD',l_EndDate);
765: l_ZA_SC_TX_THRSHLD := GlbVal('ZA_SEC_TAX_THRESHOLD',l_EndDate);
766: ELSE
767: hr_utility.set_location('py_za_tx_utl_01032002.SetRebates',3);
768: -- Set locals to current values
769: l_ZA_TX_YR_END := py_za_tx_01032002.dbi_ZA_TX_YR_END;
770: l_ZA_ADL_TX_RBT := py_za_tx_01032002.glb_ZA_ADL_TX_RBT;
771: l_ZA_PRI_TX_RBT := py_za_tx_01032002.glb_ZA_PRI_TX_RBT;
772: l_ZA_PRI_TX_THRSHLD := py_za_tx_01032002.glb_ZA_PRI_TX_THRSHLD;
773: l_ZA_SC_TX_THRSHLD := py_za_tx_01032002.glb_ZA_SC_TX_THRSHLD;
774: END IF;
775:
776: hr_utility.set_location('py_za_tx_utl_01032002.SetRebates',4);
777:
778: -- Calculate the Rebate and Threshold Values
779: hr_utility.set_location('py_za_tx_utl_01032002.SetRebates',5);
780: -- Calculate the assignments 65 Year Date
775:
776: hr_utility.set_location('py_za_tx_utl_01032002.SetRebates',4);
777:
778: -- Calculate the Rebate and Threshold Values
779: hr_utility.set_location('py_za_tx_utl_01032002.SetRebates',5);
780: -- Calculate the assignments 65 Year Date
781: l_65Year := add_months(py_za_tx_01032002.dbi_PER_DTE_OF_BRTH,780);
782:
783: IF l_65Year <= l_ZA_TX_YR_END THEN
780: -- Calculate the assignments 65 Year Date
781: l_65Year := add_months(py_za_tx_01032002.dbi_PER_DTE_OF_BRTH,780);
782:
783: IF l_65Year <= l_ZA_TX_YR_END THEN
784: hr_utility.set_location('py_za_tx_utl_01032002.SetRebates',6);
785: -- give the extra abatement
786: py_za_tx_01032002.trc_Rebate := l_ZA_PRI_TX_RBT + l_ZA_ADL_TX_RBT;
787: py_za_tx_01032002.trc_Threshold := l_ZA_SC_TX_THRSHLD;
788: ELSE
785: -- give the extra abatement
786: py_za_tx_01032002.trc_Rebate := l_ZA_PRI_TX_RBT + l_ZA_ADL_TX_RBT;
787: py_za_tx_01032002.trc_Threshold := l_ZA_SC_TX_THRSHLD;
788: ELSE
789: hr_utility.set_location('py_za_tx_utl_01032002.SetRebates',7);
790: -- not eligable for extra abatement
791: py_za_tx_01032002.trc_Rebate := l_ZA_PRI_TX_RBT;
792: py_za_tx_01032002.trc_Threshold := l_ZA_PRI_TX_THRSHLD;
793: END IF;
831: --
832: -------------------------------------------------------------------------
833: IF py_za_tx_01032002.trc_CalTyp = 'NorCalc' THEN --
834: -------------------------------------------------------------------------
835: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',1);
836: -------------------------
837: -- Pension Fund Abatement
838: -------------------------
839: ---------------------
849: (p_ytdInc => py_za_tx_01032002.bal_TOT_RFI_INC_YTD
850: ,p_PtdInc => py_za_tx_01032002.bal_TOT_RFI_INC_PTD
851: );
852:
853: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',2);
854:
855: ---------------------
856: -- Annual Calculation
857: ---------------------
866:
867: --------------------------------
868: -- Arrear Pension Fund Abatement
869: --------------------------------
870: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',3);
871: -------------
872: -- Excess ITD
873: -------------
874: py_za_tx_01032002.trc_PerArrPenFnd :=
892:
893: -------------------------------
894: -- Retirement Annuity Abatement
895: -------------------------------
896: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',4);
897:
898: -------------
899: -- Current RA
900: -------------
906: ---------------------
907: -- Current NRFI Contr
908: ---------------------
909:
910: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',6);
911: py_za_tx_01032002.trc_PerNrfiCon :=
912: Annualise
913: ( p_YtdInc => py_za_tx_01032002.bal_TOT_NRFI_INC_YTD
914: , p_PtdInc => py_za_tx_01032002.bal_TOT_NRFI_INC_PTD
922: py_za_tx_01032002.trc_PerRetAnu
923: + py_za_tx_01032002.bal_ANN_RA_YTD;
924:
925:
926: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',8);
927: py_za_tx_01032002.trc_AnnNrfiCon :=
928: py_za_tx_01032002.trc_PerNrfiCon
929: + py_za_tx_01032002.bal_TOT_NRFI_AN_INC_YTD;
930:
931:
932: --------------------------------------
933: -- Arrear Retirement Annuity Abatement
934: --------------------------------------
935: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',9);
936: -------------
937: -- Excess ITD
938: -------------
939: py_za_tx_01032002.trc_PerArrRetAnu :=
956:
957: ------------------------
958: -- Medical Aid Abatement
959: ------------------------
960: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',10);
961: py_za_tx_01032002.trc_MedAidAbm :=
962: Annualise
963: ( p_YtdInc => py_za_tx_01032002.bal_MED_CONTR_YTD
964: , p_PtdInc => py_za_tx_01032002.bal_MED_CONTR_PTD
966:
967: -------------------------------------------------------------------------
968: ELSIF py_za_tx_01032002.trc_CalTyp IN ('YtdCalc','SitCalc') THEN --
969: -------------------------------------------------------------------------
970: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',11);
971: -------------------------
972: -- Pension Fund Abatement
973: -------------------------
974: ---------------------
993: py_za_tx_01032002.trc_AnnRfiCon :=
994: py_za_tx_01032002.trc_PerRfiCon
995: + py_za_tx_01032002.bal_TOT_RFI_AN_INC_YTD;
996:
997: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',12);
998:
999: --------------------------------
1000: -- Arrear Pension Fund Abatement
1001: --------------------------------
998:
999: --------------------------------
1000: -- Arrear Pension Fund Abatement
1001: --------------------------------
1002: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',13);
1003: -------------
1004: -- Excess ITD
1005: -------------
1006: py_za_tx_01032002.trc_PerArrPenFnd :=
1024:
1025: -------------------------------
1026: -- Retirement Annuity Abatement
1027: -------------------------------
1028: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',14);
1029:
1030: -------------
1031: -- Current RA
1032: -------------
1037: ---------------------
1038: -- Current NRFI Contr
1039: ---------------------
1040:
1041: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',16);
1042: py_za_tx_01032002.trc_PerNrfiCon :=
1043: py_za_tx_01032002.bal_TOT_NRFI_INC_YTD
1044: * py_za_tx_01032002.trc_SitFactor;
1045:
1050: py_za_tx_01032002.trc_PerRetAnu
1051: + py_za_tx_01032002.bal_ANN_RA_YTD;
1052:
1053:
1054: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',18);
1055: py_za_tx_01032002.trc_AnnNrfiCon :=
1056: py_za_tx_01032002.trc_PerNrfiCon
1057: + py_za_tx_01032002.bal_TOT_NRFI_AN_INC_YTD;
1058:
1059:
1060: --------------------------------------
1061: -- Arrear Retirement Annuity Abatement
1062: --------------------------------------
1063: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',19);
1064: -------------
1065: -- Excess ITD
1066: -------------
1067: py_za_tx_01032002.trc_PerArrRetAnu :=
1087: py_za_tx_01032002.trc_MedAidAbm :=
1088: py_za_tx_01032002.bal_MED_CONTR_YTD
1089: * py_za_tx_01032002.trc_SitFactor;
1090:
1091: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',20);
1092:
1093: -------------------------------------------------------------------------
1094: ELSIF py_za_tx_01032002.trc_CalTyp = 'CalCalc' THEN --
1095: -------------------------------------------------------------------------
1092:
1093: -------------------------------------------------------------------------
1094: ELSIF py_za_tx_01032002.trc_CalTyp = 'CalCalc' THEN --
1095: -------------------------------------------------------------------------
1096: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',21);
1097: -------------------------
1098: -- Pension Fund Abatement
1099: -------------------------
1100: ---------------------
1122:
1123: --------------------------------
1124: -- Arrear Pension Fund Abatement
1125: --------------------------------
1126: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',22);
1127: -------------
1128: -- Excess ITD
1129: -------------
1130: py_za_tx_01032002.trc_PerArrPenFnd :=
1146:
1147: -------------------------------
1148: -- Retirement Annuity Abatement
1149: -------------------------------
1150: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',23);
1151:
1152: -------------
1153: -- Current RA
1154: -------------
1159: ---------------------
1160: -- Current NRFI Contr
1161: ---------------------
1162:
1163: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',25);
1164: py_za_tx_01032002.trc_PerNrfiCon :=
1165: py_za_tx_01032002.bal_TOT_NRFI_INC_CYTD
1166: * py_za_tx_01032002.trc_SitFactor;
1167:
1172: py_za_tx_01032002.trc_PerRetAnu
1173: + py_za_tx_01032002.bal_ANN_RA_YTD;
1174:
1175:
1176: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',27);
1177: py_za_tx_01032002.trc_AnnNrfiCon :=
1178: py_za_tx_01032002.trc_PerNrfiCon
1179: + py_za_tx_01032002.bal_TOT_NRFI_AN_INC_YTD;
1180:
1181:
1182: --------------------------------------
1183: -- Arrear Retirement Annuity Abatement
1184: --------------------------------------
1185: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',28);
1186: -------------
1187: -- Excess ITD
1188: -------------
1189: py_za_tx_01032002.trc_PerArrRetAnu := py_za_tx_01032002.bal_EXC_ARR_RA_ITD;
1211:
1212: -------------------------------------------------------------------------
1213: ELSIF py_za_tx_01032002.trc_CalTyp IN ('BasCalc') THEN --
1214: -------------------------------------------------------------------------
1215: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',29);
1216: -------------------------
1217: -- Pension Fund Abatement
1218: -------------------------
1219: ---------------------
1223: py_za_tx_01032002.trc_AnnPenFnd := py_za_tx_01032002.bal_ANN_PF_YTD;
1224: -- Annual Rfi Contribution
1225: py_za_tx_01032002.trc_AnnRfiCon := py_za_tx_01032002.bal_TOT_RFI_AN_INC_YTD;
1226:
1227: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',30);
1228:
1229: --------------------------------
1230: -- Arrear Pension Fund Abatement
1231: --------------------------------
1228:
1229: --------------------------------
1230: -- Arrear Pension Fund Abatement
1231: --------------------------------
1232: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',31);
1233: -------------
1234: -- Excess ITD
1235: -------------
1236: py_za_tx_01032002.trc_PerArrPenFnd := py_za_tx_01032002.bal_EXC_ARR_PEN_ITD;
1244:
1245: -------------------------------
1246: -- Retirement Annuity Abatement
1247: -------------------------------
1248: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',32);
1249:
1250: ------------
1251: -- Annual RA
1252: ------------
1251: -- Annual RA
1252: ------------
1253: py_za_tx_01032002.trc_AnnRetAnu := py_za_tx_01032002.bal_ANN_RA_YTD;
1254:
1255: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',34);
1256: py_za_tx_01032002.trc_AnnNrfiCon := py_za_tx_01032002.bal_TOT_NRFI_AN_INC_YTD;
1257:
1258:
1259: --------------------------------------
1258:
1259: --------------------------------------
1260: -- Arrear Retirement Annuity Abatement
1261: --------------------------------------
1262: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',35);
1263: -------------
1264: -- Excess ITD
1265: -------------
1266: py_za_tx_01032002.trc_PerArrRetAnu := py_za_tx_01032002.bal_EXC_ARR_RA_ITD;
1275: -- Medical Aid Abatement
1276: ------------------------
1277: py_za_tx_01032002.trc_MedAidAbm := 0;
1278:
1279: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',36);
1280:
1281:
1282: -------------------------------------------------------------------------
1283: ELSIF py_za_tx_01032002.trc_CalTyp = 'SeaCalc' THEN --
1281:
1282: -------------------------------------------------------------------------
1283: ELSIF py_za_tx_01032002.trc_CalTyp = 'SeaCalc' THEN --
1284: -------------------------------------------------------------------------
1285: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',37);
1286: -------------------------
1287: -- Pension Fund Abatement
1288: -------------------------
1289: ---------------------
1317:
1318: -------------------------------
1319: -- Retirement Annuity Abatement
1320: -------------------------------
1321: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',38);
1322:
1323: -------------
1324: -- Current RA
1325: -------------
1330: ---------------------
1331: -- Current NRFI Contr
1332: ---------------------
1333:
1334: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',40);
1335: py_za_tx_01032002.trc_PerNrfiCon :=
1336: py_za_tx_01032002.bal_TOT_NRFI_INC_RUN
1337: * py_za_tx_01032002.trc_SitFactor;
1338:
1344: py_za_tx_01032002.trc_PerRetAnu
1345: + py_za_tx_01032002.bal_ANN_RA_RUN;
1346:
1347:
1348: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',42);
1349: py_za_tx_01032002.trc_AnnNrfiCon :=
1350: py_za_tx_01032002.trc_PerNrfiCon
1351: + py_za_tx_01032002.bal_TOT_NRFI_AN_INC_RUN;
1352:
1366:
1367: -------------------------------------------------------------------------
1368: ELSIF py_za_tx_01032002.trc_CalTyp = 'LteCalc' THEN --
1369: -------------------------------------------------------------------------
1370: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',43);
1371: -------------------------
1372: -- Pension Fund Abatement
1373: -------------------------
1374: ---------------------
1394:
1395: --------------------------------
1396: -- Arrear Pension Fund Abatement
1397: --------------------------------
1398: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',44);
1399: -------------
1400: -- Excess ITD
1401: -------------
1402: py_za_tx_01032002.trc_PerArrPenFnd :=
1416:
1417: -------------------------------
1418: -- Retirement Annuity Abatement
1419: -------------------------------
1420: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',45);
1421: -------------
1422: -- Current RA
1423: -------------
1424: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',46);
1420: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',45);
1421: -------------
1422: -- Current RA
1423: -------------
1424: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',46);
1425: -- Calculate RA Contribution
1426: py_za_tx_01032002.trc_PerRetAnu :=
1427: py_za_tx_01032002.bal_RA_YTD;
1428: ---------------------
1428: ---------------------
1429: -- Current NRFI Contr
1430: ---------------------
1431:
1432: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',48);
1433: py_za_tx_01032002.trc_PerNrfiCon :=
1434: py_za_tx_01032002.bal_TOT_NRFI_INC_YTD;
1435:
1436:
1441: py_za_tx_01032002.trc_PerRetAnu
1442: + py_za_tx_01032002.bal_ANN_RA_YTD;
1443:
1444:
1445: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',50);
1446: py_za_tx_01032002.trc_AnnNrfiCon :=
1447: py_za_tx_01032002.trc_PerNrfiCon
1448: + py_za_tx_01032002.bal_TOT_NRFI_AN_INC_YTD;
1449:
1450:
1451: --------------------------------------
1452: -- Arrear Retirement Annuity Abatement
1453: --------------------------------------
1454: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',51);
1455: -------------
1456: -- Excess ITD
1457: -------------
1458: py_za_tx_01032002.trc_PerArrRetAnu :=
1478:
1479: -------------------------------------------------------------------------
1480: ELSIF py_za_tx_01032002.trc_CalTyp = 'PstCalc' THEN --
1481: -------------------------------------------------------------------------
1482: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',52);
1483: -------------------------
1484: -- Pension Fund Abatement
1485: -------------------------
1486: ---------------------
1508:
1509: --------------------------------
1510: -- Arrear Pension Fund Abatement
1511: --------------------------------
1512: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',53);
1513: -------------
1514: -- Excess ITD
1515: -------------
1516: py_za_tx_01032002.trc_PerArrPenFnd :=
1532:
1533: -------------------------------
1534: -- Retirement Annuity Abatement
1535: -------------------------------
1536: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',54);
1537:
1538: -------------
1539: -- Current RA
1540: -------------
1545: ---------------------
1546: -- Current NRFI Contr
1547: ---------------------
1548:
1549: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',56);
1550: py_za_tx_01032002.trc_PerNrfiCon :=
1551: py_za_tx_01032002.bal_TOT_NRFI_INC_PTD
1552: * py_za_tx_01032002.trc_SitFactor;
1553:
1559: py_za_tx_01032002.trc_PerRetAnu
1560: + py_za_tx_01032002.bal_ANN_RA_PTD;
1561:
1562:
1563: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',58);
1564: py_za_tx_01032002.trc_AnnNrfiCon :=
1565: py_za_tx_01032002.trc_PerNrfiCon
1566: + py_za_tx_01032002.bal_TOT_NRFI_AN_INC_PTD;
1567:
1568:
1569: --------------------------------------
1570: -- Arrear Retirement Annuity Abatement
1571: --------------------------------------
1572: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',59);
1573: -------------
1574: -- Excess ITD
1575: -------------
1576: py_za_tx_01032002.trc_PerArrRetAnu :=
1604:
1605: ----------------------------------------------------------------------------
1606: -- CALCULATE THE ABATEMENTS --
1607: ----------------------------------------------------------------------------
1608: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',60);
1609: -- Check the Calculation Type
1610: IF py_za_tx_01032002.trc_CalTyp = 'PstCalc' THEN
1611: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',61);
1612: -- Employee Tax Year Start and End Dates
1607: ----------------------------------------------------------------------------
1608: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',60);
1609: -- Check the Calculation Type
1610: IF py_za_tx_01032002.trc_CalTyp = 'PstCalc' THEN
1611: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',61);
1612: -- Employee Tax Year Start and End Dates
1613: --
1614: l_EndDate := py_za_tx_01032002.dbi_ZA_ASG_TX_YR_END;
1615:
1612: -- Employee Tax Year Start and End Dates
1613: --
1614: l_EndDate := py_za_tx_01032002.dbi_ZA_ASG_TX_YR_END;
1615:
1616: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',62);
1617:
1618: -- Global Values
1619: l_ZA_TX_YR_END := l_EndDate;
1620: l_ZA_ARR_PF_AN_MX_ABT := GlbVal('ZA_ARREAR_PEN_AN_MAX_ABATE',l_EndDate);
1624: l_ZA_RA_AN_MX_ABT := GlbVal('ZA_RA_AN_MAX_ABATE' ,l_EndDate);
1625: l_ZA_RA_MX_PRC := GlbVal('ZA_RA_MAX_PERC' ,l_EndDate);
1626:
1627: ELSE
1628: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',63);
1629: -- Set locals to current values
1630: l_ZA_TX_YR_END := py_za_tx_01032002.dbi_ZA_TX_YR_END;
1631: l_ZA_ARR_PF_AN_MX_ABT := py_za_tx_01032002.glb_ZA_ARR_PF_AN_MX_ABT;
1632: l_ZA_ARR_RA_AN_MX_ABT := py_za_tx_01032002.glb_ZA_ARR_RA_AN_MX_ABT;
1745: IF l_65Year > l_ZA_TX_YR_END THEN
1746: py_za_tx_01032002.trc_MedAidAbm := 0;
1747: END IF;
1748:
1749: hr_utility.set_location('py_za_tx_utl_01032002.Abatements',64);
1750:
1751: -------------------
1752: -- Total Abatements
1753: -------------------
1798: l_PfExcessAmt NUMBER;
1799: l_RaExcessAmt NUMBER;
1800:
1801: BEGIN
1802: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',1);
1803: -- Pension Excess
1804: l_PfExcessAmt := ( py_za_tx_01032002.bal_ARR_PF_YTD
1805: + ( py_za_tx_01032002.bal_EXC_ARR_PEN_ITD
1806: - py_za_tx_01032002.bal_EXC_ARR_PEN_YTD
1807: )
1808: ) - py_za_tx_01032002.glb_ZA_ARR_PF_AN_MX_ABT;
1809:
1810: IF l_PfExcessAmt > 0 THEN
1811: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',2);
1812: py_za_tx_01032002.trc_PfUpdFig := l_PfExcessAmt - py_za_tx_01032002.bal_EXC_ARR_PEN_ITD;
1813: ELSE
1814: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',3);
1815: py_za_tx_01032002.trc_PfUpdFig := -1*(py_za_tx_01032002.bal_EXC_ARR_PEN_ITD);
1810: IF l_PfExcessAmt > 0 THEN
1811: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',2);
1812: py_za_tx_01032002.trc_PfUpdFig := l_PfExcessAmt - py_za_tx_01032002.bal_EXC_ARR_PEN_ITD;
1813: ELSE
1814: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',3);
1815: py_za_tx_01032002.trc_PfUpdFig := -1*(py_za_tx_01032002.bal_EXC_ARR_PEN_ITD);
1816: END IF;
1817:
1818: -- Retirement Annuity
1822: )
1823: ) - py_za_tx_01032002.glb_ZA_ARR_RA_AN_MX_ABT;
1824:
1825: IF l_RaExcessAmt > 0 THEN
1826: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',4);
1827: py_za_tx_01032002.trc_RaUpdFig := l_RaExcessAmt - py_za_tx_01032002.bal_EXC_ARR_RA_ITD;
1828: ELSE
1829: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',5);
1830: py_za_tx_01032002.trc_RaUpdFig := -1*(py_za_tx_01032002.bal_EXC_ARR_RA_ITD);
1825: IF l_RaExcessAmt > 0 THEN
1826: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',4);
1827: py_za_tx_01032002.trc_RaUpdFig := l_RaExcessAmt - py_za_tx_01032002.bal_EXC_ARR_RA_ITD;
1828: ELSE
1829: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',5);
1830: py_za_tx_01032002.trc_RaUpdFig := -1*(py_za_tx_01032002.bal_EXC_ARR_RA_ITD);
1831: END IF;
1832:
1833: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',6);
1829: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',5);
1830: py_za_tx_01032002.trc_RaUpdFig := -1*(py_za_tx_01032002.bal_EXC_ARR_RA_ITD);
1831: END IF;
1832:
1833: hr_utility.set_location('py_za_tx_utl_01032002.ArrearExcess',6);
1834: WriteHrTrace('l_PfExcessAmt: '||to_char(l_PfExcessAmt));
1835: WriteHrTrace('l_RaExcessAmt: '||to_char(l_RaExcessAmt));
1836:
1837: EXCEPTION
1857: l_ColumnID pay_user_columns.user_column_id%TYPE;
1858: l_RowID pay_user_rows_f.user_row_id%TYPE;
1859: l_TableValue pay_user_column_instances_f.value%TYPE;
1860: BEGIN
1861: hr_utility.set_location('py_za_tx_utl_01032002.GetTableValue',1);
1862: -- Get the user_table_id
1863: --
1864: select put.user_table_id
1865: INTO l_UserTableID
1866: from pay_user_tables put
1867: where upper(put.user_table_name) = upper(p_TableName)
1868: AND put.legislation_code = 'ZA';
1869:
1870: hr_utility.set_location('py_za_tx_utl_01032002.GetTableValue',2);
1871: -- Get the user_column_id
1872: --
1873: select puc.user_column_id
1874: INTO l_ColumnID
1877: AND puc.legislation_code = 'ZA'
1878: and puc.business_group_id is null
1879: AND upper(puc.user_column_name) = upper(p_ColumnName);
1880:
1881: hr_utility.set_location('py_za_tx_utl_01032002.GetTableValue',3);
1882: -- Get the user_row_id
1883: --
1884: select pur.user_row_id
1885: INTO l_RowID
1899: , 'N', pur.row_high_range
1900: , p_RowValue-1
1901: );
1902:
1903: hr_utility.set_location('py_za_tx_utl_01032002.GetTableValue',4);
1904: -- Get the value
1905: --
1906: SELECT pucif.value
1907: INTO l_TableValue
1911: AND pucif.legislation_code = 'ZA'
1912: and p_EffectiveDate BETWEEN pucif.effective_start_date
1913: AND pucif.effective_end_date;
1914:
1915: hr_utility.set_location('py_za_tx_utl_01032002.GetTableValue',5);
1916: RETURN l_TableValue;
1917: EXCEPTION
1918: WHEN OTHERS THEN
1919: IF py_za_tx_01032002.xpt_Msg = 'No Error' THEN
1938: tax_liability t_Balance;
1939: l_TxbAmt t_Balance;
1940:
1941: BEGIN
1942: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',1);
1943: -------------------------------------------------------------------------------
1944: -- First Check for a Tax Override
1945: -------------------------------------------------------------------------------
1946: IF py_za_tx_01032002.trc_OvrTxCalc AND py_za_tx_01032002.trc_OvrTyp = 'P' THEN
1943: -------------------------------------------------------------------------------
1944: -- First Check for a Tax Override
1945: -------------------------------------------------------------------------------
1946: IF py_za_tx_01032002.trc_OvrTxCalc AND py_za_tx_01032002.trc_OvrTyp = 'P' THEN
1947: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',2);
1948: tax_liability := (p_Amt * py_za_tx_01032002.trc_OvrPrc) / 100;
1949: -------------------------------------------------------------------------------
1950: -- D = Directive Percentage
1951: -- P = Private Director wth Directive Percentage
1950: -- D = Directive Percentage
1951: -- P = Private Director wth Directive Percentage
1952: -------------------------------------------------------------------------------
1953: ELSIF py_za_tx_01032002.dbi_TX_STA IN ('D','P') THEN
1954: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',3);
1955: tax_liability := (p_Amt * py_za_tx_01032002.dbi_TX_DIR_VAL) / 100;
1956: -------------------------------------------------------------------------------
1957: -- E = Close Corporation
1958: -------------------------------------------------------------------------------
1956: -------------------------------------------------------------------------------
1957: -- E = Close Corporation
1958: -------------------------------------------------------------------------------
1959: ELSIF py_za_tx_01032002.dbi_TX_STA = 'E' THEN
1960: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',4);
1961: tax_liability := (p_Amt * py_za_tx_01032002.glb_ZA_CC_TX_PRC) / 100;
1962: -------------------------------------------------------------------------------
1963: -- F = Temporary Worker/Student
1964: -------------------------------------------------------------------------------
1962: -------------------------------------------------------------------------------
1963: -- F = Temporary Worker/Student
1964: -------------------------------------------------------------------------------
1965: ELSIF py_za_tx_01032002.dbi_TX_STA = 'F' THEN
1966: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',5);
1967: tax_liability := (p_Amt * py_za_tx_01032002.glb_ZA_TMP_TX_RTE) / 100;
1968: -------------------------------------------------------------------------------
1969: -- J = Personal Service Company
1970: -------------------------------------------------------------------------------
1968: -------------------------------------------------------------------------------
1969: -- J = Personal Service Company
1970: -------------------------------------------------------------------------------
1971: ELSIF py_za_tx_01032002.dbi_TX_STA = 'J' THEN
1972: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',6);
1973: tax_liability := (p_Amt * py_za_tx_01032002.glb_ZA_PER_SERV_COMP_PERC) / 100;
1974: -------------------------------------------------------------------------------
1975: -- K = Personal Service Trust
1976: -------------------------------------------------------------------------------
1974: -------------------------------------------------------------------------------
1975: -- K = Personal Service Trust
1976: -------------------------------------------------------------------------------
1977: ELSIF py_za_tx_01032002.dbi_TX_STA = 'K' THEN
1978: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',7);
1979: tax_liability := (p_Amt * py_za_tx_01032002.glb_ZA_PER_SERV_TRST_PERC) / 100;
1980: -------------------------------------------------------------------------------
1981: -- L = Labour Broker
1982: -------------------------------------------------------------------------------
1980: -------------------------------------------------------------------------------
1981: -- L = Labour Broker
1982: -------------------------------------------------------------------------------
1983: ELSIF py_za_tx_01032002.dbi_TX_STA = 'L' THEN
1984: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',8);
1985: tax_liability := (p_Amt * py_za_tx_01032002.glb_ZA_LABOUR_BROK_PERC) / 100;
1986: -------------------------------------------------------------------------------
1987: -- A = Normal
1988: -- B = Provisional
1989: -- G = Seasonal Worker
1990: -- M = Private Director
1991: -------------------------------------------------------------------------------
1992: ELSIF py_za_tx_01032002.dbi_TX_STA IN ('A','B','G','M') THEN
1993: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',9);
1994: -- Taxable Amount must be rounded off to two decimal places
1995: l_TxbAmt := round(p_Amt,2);
1996:
1997: -- effective date for the payroll_run
1996:
1997: -- effective date for the payroll_run
1998: l_effective_date := py_za_tx_01032002.dbi_PAY_PROC_PRD_DTE_PD;
1999:
2000: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',10);
2001: l_fixed := GetTableValue('ZA_TAX_TABLE','Fixed',l_TxbAmt,l_effective_date);
2002: l_limit := GetTableValue('ZA_TAX_TABLE','Limit',l_TxbAmt,l_effective_date);
2003: l_percentage := GetTableValue('ZA_TAX_TABLE','Percentage',l_TxbAmt,l_effective_date);
2004: tax_liability := (l_fixed + ((l_TxbAmt - l_limit) * (l_percentage / 100))) - py_za_tx_01032002.trc_Rebate;
2001: l_fixed := GetTableValue('ZA_TAX_TABLE','Fixed',l_TxbAmt,l_effective_date);
2002: l_limit := GetTableValue('ZA_TAX_TABLE','Limit',l_TxbAmt,l_effective_date);
2003: l_percentage := GetTableValue('ZA_TAX_TABLE','Percentage',l_TxbAmt,l_effective_date);
2004: tax_liability := (l_fixed + ((l_TxbAmt - l_limit) * (l_percentage / 100))) - py_za_tx_01032002.trc_Rebate;
2005: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',11);
2006: -------------------------------------------------------------------------------
2007: -- Tax Status invalid for the call to TaxLiability
2008: -------------------------------------------------------------------------------
2009: ELSE
2006: -------------------------------------------------------------------------------
2007: -- Tax Status invalid for the call to TaxLiability
2008: -------------------------------------------------------------------------------
2009: ELSE
2010: hr_utility.set_location('py_za_tx_utl_01032002.TaxLiability',12);
2011: IF py_za_tx_01032002.xpt_Msg = 'No Error' THEN
2012: py_za_tx_01032002.xpt_Msg := 'TaxLiability: Invalid Tax Status';
2013: END IF;
2014: RAISE py_za_tx_01032002.xpt_E;
2044: l_LiabRoy3 t_balance;
2045: l_LiabRoy4 t_balance;
2046: l_LiabFp t_balance;
2047: BEGIN
2048: hr_utility.set_location('py_za_tx_utl_01032002.DeAnnualise',1);
2049: -- 1
2050: l_LiabRoy1 := p_liab / py_za_tx_01032002.trc_PosFactor;
2051: -- 2
2052: l_LiabRoy2 := l_LiabRoy1 - p_TxOnYtd + p_TxOnPtd;
2056: l_LiabRoy4 := l_LiabRoy3 * py_za_tx_01032002.trc_PrdFactor;
2057: -- 5
2058: l_LiabFp := l_LiabRoy4 - p_TxOnPtd;
2059: --
2060: hr_utility.set_location('py_za_tx_utl_01032002.DeAnnualise',2);
2061: --
2062: WriteHrTrace('p_liab: '||to_char(p_liab));
2063: WriteHrTrace('py_za_tx_01032002.trc_PosFactor: '||to_char(py_za_tx_01032002.trc_PosFactor));
2064: WriteHrTrace('l_LiabRoy1: '||to_char(l_LiabRoy1));
2117: l_TotTxbRfi t_balance DEFAULT 0;
2118: l_GlbVal ff_globals_f.global_value%TYPE DEFAULT '0';
2119:
2120: BEGIN
2121: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',1);
2122: -- Retrieve Balance Type ID's
2123: SELECT balance_type_id
2124: INTO l_NrfiBalID
2125: FROM pay_balance_types
2125: FROM pay_balance_types
2126: WHERE legislation_code = 'ZA'
2127: AND balance_name = 'Travel Allowance NRFI';
2128:
2129: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',2);
2130:
2131: SELECT balance_type_id
2132: INTO l_RfiBalID
2133: FROM pay_balance_types
2136:
2137: -- Check Calc and setup correct values
2138: --
2139: IF py_za_tx_01032002.trc_CalTyp in ('DirCalc','NorCalc','SitCalc','YtdCalc') THEN
2140: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',3);
2141: -- Employee Tax Year Start and End Dates
2142: --
2143: l_StrtDate := GREATEST( py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE
2144: , py_za_tx_01032002.dbi_ZA_TX_YR_STRT
2148: , py_za_tx_01032002.dbi_ZA_CUR_PRD_END_DTE
2149: );
2150:
2151: ELSIF py_za_tx_01032002.trc_CalTyp = 'CalCalc' THEN
2152: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',4);
2153: -- Employee Tax Year Start and End Dates
2154: --
2155: l_StrtDate := to_date('01-01-'||to_char(py_za_tx_01032002.dbi_ZA_TX_YR_STRT,'YYYY')||''||'','DD-MM-YYYY');
2156: l_EndDate := py_za_tx_01032002.dbi_ZA_TX_YR_STRT -1;
2155: l_StrtDate := to_date('01-01-'||to_char(py_za_tx_01032002.dbi_ZA_TX_YR_STRT,'YYYY')||''||'','DD-MM-YYYY');
2156: l_EndDate := py_za_tx_01032002.dbi_ZA_TX_YR_STRT -1;
2157:
2158: ELSIF py_za_tx_01032002.trc_CalTyp = 'LteCalc' THEN
2159: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',5);
2160: -- Employee Tax Year Start and End Dates
2161: --
2162: l_StrtDate := py_za_tx_01032002.dbi_ZA_TX_YR_STRT;
2163: l_EndDate := py_za_tx_01032002.dbi_ZA_CUR_PRD_END_DTE;
2162: l_StrtDate := py_za_tx_01032002.dbi_ZA_TX_YR_STRT;
2163: l_EndDate := py_za_tx_01032002.dbi_ZA_CUR_PRD_END_DTE;
2164:
2165: ELSIF py_za_tx_01032002.trc_CalTyp = 'PstCalc' THEN
2166: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',6);
2167: -- Employee Tax Year Start and End Dates
2168: --
2169: l_StrtDate := py_za_tx_01032002.dbi_ZA_ASG_TX_YR_STRT;
2170: l_EndDate := py_za_tx_01032002.dbi_ZA_ASG_TX_YR_END;
2169: l_StrtDate := py_za_tx_01032002.dbi_ZA_ASG_TX_YR_STRT;
2170: l_EndDate := py_za_tx_01032002.dbi_ZA_ASG_TX_YR_END;
2171: END IF;
2172:
2173: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',7);
2174:
2175: -- Loop through cursor and for every end date calculate the balance
2176: FOR v_Date IN c_GlbEffDte
2177: (l_StrtDate
2179: )
2180: LOOP
2181: -- Nrfi Travel Allowance
2182: --
2183: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',8);
2184: -- Check Calc Type
2185: IF py_za_tx_01032002.trc_CalTyp IN ('DirCalc','NorCalc','SitCalc','YtdCalc','LteCalc','PstCalc') THEN
2186: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',9);
2187: -- Nrfi Balance At That Date
2182: --
2183: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',8);
2184: -- Check Calc Type
2185: IF py_za_tx_01032002.trc_CalTyp IN ('DirCalc','NorCalc','SitCalc','YtdCalc','LteCalc','PstCalc') THEN
2186: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',9);
2187: -- Nrfi Balance At That Date
2188: -- 3491357
2189: /*l_NrfiYtd := py_za_bal.calc_asg_tax_ytd_date
2190: ( py_za_tx_01032002.con_ASG_ID
2197: , '_ASG_TAX_YTD'
2198: , v_Date.effective_end_date
2199: );
2200: ELSIF py_za_tx_01032002.trc_CalTyp = 'CalCalc' THEN
2201: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',10);
2202: -- Nrfi Balance At That Date
2203: --3491357
2204: /*l_NrfiYtd := py_za_bal.calc_asg_cal_ytd_date
2205: ( py_za_tx_01032002.con_ASG_ID
2224: l_TotTxbNrfi := l_TotTxbNrfi + l_CurTxbNrfi;
2225:
2226: -- Rfi Travel Allowance
2227: --
2228: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',11);
2229: -- Check Calc Type
2230: IF py_za_tx_01032002.trc_CalTyp in ('DirCalc','NorCalc','SitCalc','YtdCalc','LteCalc','PstCalc') THEN
2231: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',12);
2232: -- Rfi Balance At That Date
2227: --
2228: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',11);
2229: -- Check Calc Type
2230: IF py_za_tx_01032002.trc_CalTyp in ('DirCalc','NorCalc','SitCalc','YtdCalc','LteCalc','PstCalc') THEN
2231: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',12);
2232: -- Rfi Balance At That Date
2233: -- 3491357
2234: /*l_RfiYtd := py_za_bal.calc_asg_tax_ytd_date
2235: ( py_za_tx_01032002.con_ASG_ID
2242: , '_ASG_TAX_YTD'
2243: , v_Date.effective_end_date
2244: );
2245: ELSIF py_za_tx_01032002.trc_CalTyp = 'CalCalc' THEN
2246: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',13);
2247: -- Rfi Balance At That Date
2248: -- 3491357
2249: /*l_RfiYtd := py_za_bal.calc_asg_cal_ytd_date
2250: ( py_za_tx_01032002.con_ASG_ID
2281:
2282: -- Calculate the current Taxable Travel Allowance Value
2283: -- add this to any calculated in the loop
2284: --
2285: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',14);
2286: -- Check Calc TYPE
2287: IF py_za_tx_01032002.trc_CalTyp IN ('DirCalc','NorCalc','SitCalc','YtdCalc', 'LteCalc') THEN
2288: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',15);
2289: -- Balance Values
2284: --
2285: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',14);
2286: -- Check Calc TYPE
2287: IF py_za_tx_01032002.trc_CalTyp IN ('DirCalc','NorCalc','SitCalc','YtdCalc', 'LteCalc') THEN
2288: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',15);
2289: -- Balance Values
2290: l_NrfiYtd := py_za_tx_01032002.bal_TA_NRFI_YTD;
2291: l_RfiYtd := py_za_tx_01032002.bal_TA_RFI_YTD;
2292: -- Global Value
2292: -- Global Value
2293: l_GlbVal := py_za_tx_01032002.glb_ZA_TRV_ALL_TX_PRC;
2294:
2295: ELSIF py_za_tx_01032002.trc_CalTyp = 'PstCalc' THEN
2296: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',16);
2297: -- Balance Values
2298: l_NrfiYtd := py_za_tx_01032002.bal_TA_NRFI_PTD;
2299: l_RfiYtd := py_za_tx_01032002.bal_TA_RFI_PTD;
2300: -- Global Value
2304: WHERE l_EndDate between effective_start_date
2305: and effective_end_date
2306: AND global_name = 'ZA_CAR_ALLOW_TAX_PERC';
2307:
2308: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',17);
2309:
2310: ELSIF py_za_tx_01032002.trc_CalTyp = 'CalCalc' THEN
2311: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',18);
2312: -- Balance Values
2307:
2308: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',17);
2309:
2310: ELSIF py_za_tx_01032002.trc_CalTyp = 'CalCalc' THEN
2311: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',18);
2312: -- Balance Values
2313: l_NrfiYtd := py_za_tx_01032002.bal_TA_NRFI_CYTD;
2314: l_RfiYtd := py_za_tx_01032002.bal_TA_RFI_CYTD;
2315:
2320: WHERE l_EndDate between effective_start_date
2321: and effective_end_date
2322: AND global_name = 'ZA_CAR_ALLOW_TAX_PERC';
2323:
2324: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',19);
2325:
2326: END IF;
2327:
2328: WriteHrTrace('l_NrfiYtd: '||to_char(l_NrfiYtd));
2354: -- Update Globals
2355: --
2356: -- Check Calc Type
2357: IF py_za_tx_01032002.trc_CalTyp IN ('DirCalc','NorCalc','SitCalc','YtdCalc', 'LteCalc') THEN
2358: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',20);
2359: py_za_tx_01032002.bal_TA_NRFI_YTD := l_TotTxbNrfi;
2360: py_za_tx_01032002.bal_TA_RFI_YTD := l_TotTxbRfi;
2361: ELSIF py_za_tx_01032002.trc_CalTyp = 'PstCalc' THEN
2362: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',21);
2358: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',20);
2359: py_za_tx_01032002.bal_TA_NRFI_YTD := l_TotTxbNrfi;
2360: py_za_tx_01032002.bal_TA_RFI_YTD := l_TotTxbRfi;
2361: ELSIF py_za_tx_01032002.trc_CalTyp = 'PstCalc' THEN
2362: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',21);
2363: py_za_tx_01032002.bal_TA_NRFI_PTD := l_TotTxbNrfi;
2364: py_za_tx_01032002.bal_TA_RFI_PTD := l_TotTxbRfi;
2365: ELSIF py_za_tx_01032002.trc_CalTyp = 'CalCalc' THEN
2366: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',22);
2362: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',21);
2363: py_za_tx_01032002.bal_TA_NRFI_PTD := l_TotTxbNrfi;
2364: py_za_tx_01032002.bal_TA_RFI_PTD := l_TotTxbRfi;
2365: ELSIF py_za_tx_01032002.trc_CalTyp = 'CalCalc' THEN
2366: hr_utility.set_location('py_za_tx_utl_01032002.TrvAll',22);
2367: py_za_tx_01032002.bal_TA_NRFI_CYTD := l_TotTxbNrfi;
2368: py_za_tx_01032002.bal_TA_RFI_CYTD := l_TotTxbRfi;
2369: END IF;
2370:
2405: l_NewLib t_Balance; -- New Liability
2406: i NUMBER; -- Counter
2407:
2408: BEGIN
2409: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',1);
2410: -- Set up the Table
2411: t_Liabilities(1).Ovrrde := py_za_tx_01032002.trc_LibFpNIOvr;
2412: t_Liabilities(1).Lib := py_za_tx_01032002.trc_LibFpNI;
2413:
2488: WriteHrTrace('l_TotNp: '||to_char(l_TotNp));
2489: -- Start Validation
2490: --
2491: IF l_TotLib = 0 THEN
2492: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',2);
2493: NULL;
2494: ELSIF l_TotLib > 0 THEN
2495: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',3);
2496: IF l_TotNp > 0 THEN
2491: IF l_TotLib = 0 THEN
2492: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',2);
2493: NULL;
2494: ELSIF l_TotLib > 0 THEN
2495: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',3);
2496: IF l_TotNp > 0 THEN
2497: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',4);
2498: IF l_TotLib = l_TotNp THEN
2499: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',5);
2493: NULL;
2494: ELSIF l_TotLib > 0 THEN
2495: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',3);
2496: IF l_TotNp > 0 THEN
2497: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',4);
2498: IF l_TotLib = l_TotNp THEN
2499: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',5);
2500: NULL;
2501: ELSIF l_TotLib > l_TotNp THEN
2495: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',3);
2496: IF l_TotNp > 0 THEN
2497: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',4);
2498: IF l_TotLib = l_TotNp THEN
2499: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',5);
2500: NULL;
2501: ELSIF l_TotLib > l_TotNp THEN
2502: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',6);
2503: l_RecVal := l_TotLib - l_TotNp;
2498: IF l_TotLib = l_TotNp THEN
2499: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',5);
2500: NULL;
2501: ELSIF l_TotLib > l_TotNp THEN
2502: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',6);
2503: l_RecVal := l_TotLib - l_TotNp;
2504: i:= 1;
2505:
2506: FOR i IN 1..7 LOOP
2504: i:= 1;
2505:
2506: FOR i IN 1..7 LOOP
2507: IF t_Liabilities(i).Lib = 0 THEN
2508: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',7);
2509: NULL;
2510: ELSIF t_Liabilities(i).Lib > 0 THEN
2511: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',8);
2512: l_NewLib := t_Liabilities(i).Lib - LEAST(t_Liabilities(i).Lib,l_RecVal);
2507: IF t_Liabilities(i).Lib = 0 THEN
2508: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',7);
2509: NULL;
2510: ELSIF t_Liabilities(i).Lib > 0 THEN
2511: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',8);
2512: l_NewLib := t_Liabilities(i).Lib - LEAST(t_Liabilities(i).Lib,l_RecVal);
2513: l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
2514: t_Liabilities(i).Lib := l_NewLib;
2515: py_za_tx_01032002.trc_LibWrn := 'Warning: Net Pay Balance not enough for Tax Recovery';
2513: l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
2514: t_Liabilities(i).Lib := l_NewLib;
2515: py_za_tx_01032002.trc_LibWrn := 'Warning: Net Pay Balance not enough for Tax Recovery';
2516: ELSE -- lib < 0
2517: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',9);
2518: NULL;
2519: END IF;
2520: END LOOP;
2521:
2519: END IF;
2520: END LOOP;
2521:
2522: ELSE -- l_TotLib > 0,l_TotNp > 0,l_TotLib < l_TotNp
2523: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',10);
2524: NULL;
2525: END IF;
2526:
2527: ELSE -- l_TotLib > 0,l_TotNp <= 0
2524: NULL;
2525: END IF;
2526:
2527: ELSE -- l_TotLib > 0,l_TotNp <= 0
2528: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',11);
2529: l_RecVal := l_TotLib;
2530: i := 1;
2531:
2532: FOR i IN 1..7 LOOP
2530: i := 1;
2531:
2532: FOR i IN 1..7 LOOP
2533: IF t_Liabilities(i).Lib > 0 THEN
2534: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',12);
2535: l_NewLib := t_Liabilities(i).Lib - LEAST(t_Liabilities(i).Lib,l_RecVal);
2536: l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
2537: t_Liabilities(i).Lib := l_NewLib;
2538: py_za_tx_01032002.trc_LibWrn := 'Warning: Net Pay Balance not enough for Tax Recovery';
2540: END LOOP;
2541: END IF;
2542:
2543: ELSE -- l_TotLib < 0
2544: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',13);
2545: IF p_Rf THEN
2546: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',14);
2547: NULL;
2548: ELSE
2542:
2543: ELSE -- l_TotLib < 0
2544: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',13);
2545: IF p_Rf THEN
2546: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',14);
2547: NULL;
2548: ELSE
2549: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',15);
2550: l_RecVal := l_TotLib;
2545: IF p_Rf THEN
2546: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',14);
2547: NULL;
2548: ELSE
2549: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',15);
2550: l_RecVal := l_TotLib;
2551: i := 1;
2552: FOR i IN 1..7 LOOP
2553: IF t_Liabilities(i).Lib >= 0 THEN
2550: l_RecVal := l_TotLib;
2551: i := 1;
2552: FOR i IN 1..7 LOOP
2553: IF t_Liabilities(i).Lib >= 0 THEN
2554: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',16);
2555: NULL;
2556: ELSE -- l_lib < 0
2557: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',17);
2558: -- Has the liability been Overridden?
2553: IF t_Liabilities(i).Lib >= 0 THEN
2554: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',16);
2555: NULL;
2556: ELSE -- l_lib < 0
2557: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',17);
2558: -- Has the liability been Overridden?
2559: IF t_Liabilities(i).Ovrrde THEN
2560: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',18);
2561: NULL;
2556: ELSE -- l_lib < 0
2557: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',17);
2558: -- Has the liability been Overridden?
2559: IF t_Liabilities(i).Ovrrde THEN
2560: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',18);
2561: NULL;
2562: ELSE
2563: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',19);
2564: l_NewLib := t_Liabilities(i).Lib - GREATEST(t_Liabilities(i).Lib,l_RecVal);
2559: IF t_Liabilities(i).Ovrrde THEN
2560: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',18);
2561: NULL;
2562: ELSE
2563: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',19);
2564: l_NewLib := t_Liabilities(i).Lib - GREATEST(t_Liabilities(i).Lib,l_RecVal);
2565: l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
2566: t_Liabilities(i).Lib := l_NewLib;
2567: END IF;
2569: END LOOP;
2570: END IF;
2571: END IF;
2572:
2573: hr_utility.set_location('py_za_tx_utl_01032002.ValidateTaxOns',20);
2574:
2575: py_za_tx_01032002.trc_LibFpNI := t_Liabilities(1).Lib;
2576: py_za_tx_01032002.trc_LibFpFB := t_Liabilities(2).Lib;
2577: py_za_tx_01032002.trc_LibFpTA := t_Liabilities(3).Lib;
2608: l_StrtDte DATE;
2609:
2610: BEGIN
2611: IF py_za_tx_01032002.trc_OvrTxCalc AND py_za_tx_01032002.trc_OvrTyp = 'V' THEN
2612: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',1);
2613: IF LatePayPeriod THEN
2614: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',2);
2615: -- This will set the sitfactor = 1
2616: l_EndDte := py_za_tx_01032002.dbi_ZA_TX_YR_END;
2610: BEGIN
2611: IF py_za_tx_01032002.trc_OvrTxCalc AND py_za_tx_01032002.trc_OvrTyp = 'V' THEN
2612: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',1);
2613: IF LatePayPeriod THEN
2614: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',2);
2615: -- This will set the sitfactor = 1
2616: l_EndDte := py_za_tx_01032002.dbi_ZA_TX_YR_END;
2617: l_StrtDte := py_za_tx_01032002.dbi_ZA_TX_YR_STRT;
2618: ELSE
2615: -- This will set the sitfactor = 1
2616: l_EndDte := py_za_tx_01032002.dbi_ZA_TX_YR_END;
2617: l_StrtDte := py_za_tx_01032002.dbi_ZA_TX_YR_STRT;
2618: ELSE
2619: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',3);
2620: l_EndDte := LEAST(py_za_tx_01032002.dbi_ZA_ACT_END_DTE, py_za_tx_01032002.dbi_ZA_CUR_PRD_END_DTE);
2621: l_StrtDte := GREATEST(py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032002.dbi_ZA_TX_YR_STRT);
2622: END IF;
2623:
2621: l_StrtDte := GREATEST(py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032002.dbi_ZA_TX_YR_STRT);
2622: END IF;
2623:
2624: ELSIF py_za_tx_01032002.trc_CalTyp = 'YtdCalc' THEN
2625: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',4);
2626: l_EndDte := py_za_tx_01032002.dbi_ZA_CUR_PRD_STRT_DTE - 1;
2627: l_StrtDte := GREATEST(py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032002.dbi_ZA_TX_YR_STRT);
2628:
2629: ELSIF py_za_tx_01032002.trc_CalTyp = 'CalCalc' THEN
2626: l_EndDte := py_za_tx_01032002.dbi_ZA_CUR_PRD_STRT_DTE - 1;
2627: l_StrtDte := GREATEST(py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032002.dbi_ZA_TX_YR_STRT);
2628:
2629: ELSIF py_za_tx_01032002.trc_CalTyp = 'CalCalc' THEN
2630: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',5);
2631: l_EndDte := py_za_tx_01032002.dbi_ZA_TX_YR_STRT - 1;
2632: l_StrtDte := GREATEST(py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE,
2633: to_date('01/01/'||to_char(to_number(to_char(py_za_tx_01032002.dbi_ZA_TX_YR_END,'YYYY'))-1),'DD/MM/YYYY'));
2634:
2636: ( py_za_tx_01032002.dbi_ZA_ASG_TX_RTR_PRD = 'Y'
2637: OR py_za_tx_01032002.trc_OvrTxCalc
2638: OR py_za_tx_01032002.trc_NegPtd
2639: )THEN
2640: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',6);
2641: l_EndDte := LEAST(py_za_tx_01032002.dbi_ZA_ACT_END_DTE, py_za_tx_01032002.dbi_ZA_CUR_PRD_END_DTE);
2642: l_StrtDte := GREATEST(py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032002.dbi_ZA_TX_YR_STRT);
2643:
2644: ELSIF py_za_tx_01032002.trc_CalTyp = 'SitCalc' THEN
2641: l_EndDte := LEAST(py_za_tx_01032002.dbi_ZA_ACT_END_DTE, py_za_tx_01032002.dbi_ZA_CUR_PRD_END_DTE);
2642: l_StrtDte := GREATEST(py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032002.dbi_ZA_TX_YR_STRT);
2643:
2644: ELSIF py_za_tx_01032002.trc_CalTyp = 'SitCalc' THEN
2645: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',7);
2646: l_EndDte := LEAST(py_za_tx_01032002.dbi_ZA_ACT_END_DTE, py_za_tx_01032002.dbi_ZA_TX_YR_END);
2647: l_StrtDte := GREATEST(py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032002.dbi_ZA_TX_YR_STRT);
2648:
2649: ELSIF py_za_tx_01032002.trc_CalTyp = 'PstCalc' THEN
2646: l_EndDte := LEAST(py_za_tx_01032002.dbi_ZA_ACT_END_DTE, py_za_tx_01032002.dbi_ZA_TX_YR_END);
2647: l_StrtDte := GREATEST(py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032002.dbi_ZA_TX_YR_STRT);
2648:
2649: ELSIF py_za_tx_01032002.trc_CalTyp = 'PstCalc' THEN
2650: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',8);
2651: l_EndDte := py_za_tx_01032002.dbi_ZA_ACT_END_DTE;
2652: l_StrtDte := py_za_tx_01032002.dbi_ZA_ASG_TX_YR_STRT;
2653:
2654: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',9);
2650: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',8);
2651: l_EndDte := py_za_tx_01032002.dbi_ZA_ACT_END_DTE;
2652: l_StrtDte := py_za_tx_01032002.dbi_ZA_ASG_TX_YR_STRT;
2653:
2654: hr_utility.set_location('py_za_tx_utl_01032002.DaysWorked',9);
2655:
2656: l_StrtDte := GREATEST(py_za_tx_01032002.dbi_ZA_ACT_STRT_DTE, l_StrtDte);
2657: END IF;
2658:
2678: AS
2679: l_TxOnSitLim t_Balance;
2680: l_SitAblTx t_Balance;
2681: BEGIN
2682: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',1);
2683: -- Directive Type Statuses
2684: --
2685: IF py_za_tx_01032002.dbi_TX_STA IN ('C','D','E','F','J','K','L','N','P') THEN
2686: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',2);
2682: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',1);
2683: -- Directive Type Statuses
2684: --
2685: IF py_za_tx_01032002.dbi_TX_STA IN ('C','D','E','F','J','K','L','N','P') THEN
2686: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',2);
2687: -- Check for SitePeriod
2688: IF SitePeriod THEN
2689: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',3);
2690: py_za_tx_01032002.trc_PayeVal :=
2685: IF py_za_tx_01032002.dbi_TX_STA IN ('C','D','E','F','J','K','L','N','P') THEN
2686: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',2);
2687: -- Check for SitePeriod
2688: IF SitePeriod THEN
2689: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',3);
2690: py_za_tx_01032002.trc_PayeVal :=
2691: ( py_za_tx_01032002.bal_TAX_YTD
2692: + py_za_tx_01032002.trc_LibFpNI
2693: + py_za_tx_01032002.trc_LibFpFB
2698: + py_za_tx_01032002.trc_LibFpPO
2699: ) - py_za_tx_01032002.bal_PAYE_YTD;
2700: py_za_tx_01032002.trc_SiteVal := -1*py_za_tx_01032002.bal_SITE_YTD;
2701: ELSE
2702: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',4);
2703: py_za_tx_01032002.trc_PayeVal := -1*py_za_tx_01032002.bal_PAYE_YTD;
2704: py_za_tx_01032002.trc_SiteVal := -1*py_za_tx_01032002.bal_SITE_YTD;
2705: END IF;
2706: -- Normal Type Statuses
2706: -- Normal Type Statuses
2707: --
2708: ELSIF py_za_tx_01032002.dbi_TX_STA IN ('A','B') THEN
2709: IF (SitePeriod AND NOT PreErnPeriod) OR EmpTermPrePeriod THEN
2710: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',5);
2711: -- Get the Tax Liability on the Site Limit
2712: l_TxOnSitLim := TaxLiability(p_Amt => py_za_tx_01032002.glb_ZA_SIT_LIM)/py_za_tx_01032002.trc_SitFactor;
2713: -- Get the Tax Amount Liable for SITE
2714: l_SitAblTx :=
2724: + py_za_tx_01032002.trc_LibFpAP
2725: );
2726: -- Check the Limit
2727: IF l_SitAblTx > l_TxOnSitLim THEN
2728: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',6);
2729: py_za_tx_01032002.trc_SiteVal := l_TxOnSitLim - py_za_tx_01032002.bal_SITE_YTD;
2730: py_za_tx_01032002.trc_PayeVal := (
2731: ( py_za_tx_01032002.bal_TAX_YTD
2732: + py_za_tx_01032002.trc_LibFpNI
2738: + py_za_tx_01032002.trc_LibFpPO
2739: ) - l_TxOnSitLim) - py_za_tx_01032002.bal_PAYE_YTD;
2740:
2741: ELSE
2742: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',7);
2743: IF ( py_za_tx_01032002.bal_TX_ON_TA_YTD
2744: + py_za_tx_01032002.trc_LibFpTA
2745: + py_za_tx_01032002.bal_TX_ON_PO_YTD
2746: + py_za_tx_01032002.trc_LibFpPO
2744: + py_za_tx_01032002.trc_LibFpTA
2745: + py_za_tx_01032002.bal_TX_ON_PO_YTD
2746: + py_za_tx_01032002.trc_LibFpPO
2747: ) <= 0 THEN
2748: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',8);
2749: py_za_tx_01032002.trc_SiteVal := ( py_za_tx_01032002.bal_TAX_YTD
2750: + py_za_tx_01032002.trc_LibFpNI
2751: + py_za_tx_01032002.trc_LibFpFB
2752: + py_za_tx_01032002.trc_LibFpBP
2756: + py_za_tx_01032002.trc_LibFpPO) - py_za_tx_01032002.bal_SITE_YTD;
2757:
2758: py_za_tx_01032002.trc_PayeVal := -1*py_za_tx_01032002.bal_PAYE_YTD;
2759: ELSE
2760: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',9);
2761: py_za_tx_01032002.trc_SiteVal := l_SitAblTx - py_za_tx_01032002.bal_SITE_YTD;
2762:
2763: py_za_tx_01032002.trc_PayeVal := (
2764: ( py_za_tx_01032002.bal_TAX_YTD
2772: ) - l_SitAblTx) - py_za_tx_01032002.bal_PAYE_YTD;
2773: END IF;
2774: END IF;
2775: ELSE
2776: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',10);
2777: py_za_tx_01032002.trc_PayeVal := -1*py_za_tx_01032002.bal_PAYE_YTD;
2778: py_za_tx_01032002.trc_SiteVal := -1*py_za_tx_01032002.bal_SITE_YTD;
2779: END IF;
2780: -- Seasonal Worker Status
2779: END IF;
2780: -- Seasonal Worker Status
2781: --
2782: ELSIF py_za_tx_01032002.dbi_TX_STA = 'G' THEN
2783: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',11);
2784: -- Get the SitFactor YTD
2785: py_za_tx_01032002.trc_SitFactor := py_za_tx_01032002.glb_ZA_WRK_DYS_PR_YR / py_za_tx_01032002.bal_TOT_SEA_WRK_DYS_WRK_YTD;
2786: -- Get the Tax Liability on the Site Limit
2787: l_TxOnSitLim := TaxLiability(p_Amt => py_za_tx_01032002.glb_ZA_SIT_LIM)/py_za_tx_01032002.trc_SitFactor;
2794: + py_za_tx_01032002.trc_LibFpAP
2795: );
2796: -- Check the Limit
2797: IF l_SitAblTx > l_TxOnSitLim THEN
2798: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',12);
2799: py_za_tx_01032002.trc_SiteVal := l_TxOnSitLim - py_za_tx_01032002.bal_SITE_YTD;
2800: py_za_tx_01032002.trc_PayeVal := ( (py_za_tx_01032002.bal_TX_ON_PO_YTD + py_za_tx_01032002.trc_LibFpPO)
2801: + (l_SitAblTx - l_TxOnSitLim)
2802: ) - py_za_tx_01032002.bal_PAYE_YTD;
2800: py_za_tx_01032002.trc_PayeVal := ( (py_za_tx_01032002.bal_TX_ON_PO_YTD + py_za_tx_01032002.trc_LibFpPO)
2801: + (l_SitAblTx - l_TxOnSitLim)
2802: ) - py_za_tx_01032002.bal_PAYE_YTD;
2803: ELSE
2804: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',13);
2805: py_za_tx_01032002.trc_SiteVal := l_SitAblTx - py_za_tx_01032002.bal_SITE_YTD;
2806: py_za_tx_01032002.trc_PayeVal := py_za_tx_01032002.bal_TX_ON_PO_YTD
2807: + py_za_tx_01032002.trc_LibFpPO
2808: - py_za_tx_01032002.bal_PAYE_YTD;
2810: -- Private Director
2811: --
2812: ELSIF py_za_tx_01032002.dbi_TX_STA = 'M' THEN
2813: IF (SitePeriod AND NOT PreErnPeriod) OR EmpTermPrePeriod THEN
2814: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',14);
2815: py_za_tx_01032002.trc_PayeVal :=
2816: ( py_za_tx_01032002.bal_TAX_YTD
2817: + py_za_tx_01032002.trc_LibFpDR
2818: + py_za_tx_01032002.trc_LibFpNI
2824: + py_za_tx_01032002.trc_LibFpPO
2825: ) - py_za_tx_01032002.bal_PAYE_YTD;
2826: py_za_tx_01032002.trc_SiteVal := -1*py_za_tx_01032002.bal_SITE_YTD;
2827: ELSE
2828: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',15);
2829: py_za_tx_01032002.trc_PayeVal := -1*py_za_tx_01032002.bal_PAYE_YTD;
2830: py_za_tx_01032002.trc_SiteVal := -1*py_za_tx_01032002.bal_SITE_YTD;
2831: END IF;
2832: -- All Other Statuses
2831: END IF;
2832: -- All Other Statuses
2833: --
2834: ELSE -- set the globals to zero
2835: hr_utility.set_location('py_za_tx_utl_01032002.SitPaySplit',16);
2836: py_za_tx_01032002.trc_PayeVal := 0 - py_za_tx_01032002.bal_PAYE_YTD;
2837: py_za_tx_01032002.trc_SiteVal := 0 - py_za_tx_01032002.bal_SITE_YTD;
2838: END IF;
2839:
3113: -------------------------------------------------------------------------------
3114: PROCEDURE ClearGlobals AS
3115:
3116: BEGIN
3117: hr_utility.set_location('py_za_tx_utl_01032002.ClearGlobals',1);
3118: -- Calculation Type
3119: py_za_tx_01032002.trc_CalTyp := 'Unknown';
3120: -- Factors
3121: py_za_tx_01032002.trc_TxbIncPtd := 0;
3285: END ClearGlobals;
3286:
3287:
3288:
3289: END py_za_tx_utl_01032002;
3290: