DBA Data[Home] [Help]

PACKAGE BODY: APPS.PY_ZA_TX_01032005

Source


1 PACKAGE BODY py_za_tx_01032005 AS
2 /* $Header: pyzat006.pkb 120.7 2006/05/16 11:28:13 amahanty noship $ */
3 /* Copyright (c) Oracle Corporation 1999. All rights reserved. */
4 /*
5    PRODUCT
6       Oracle Payroll - ZA Localisation Tax Module
7 
8    NAME
9       py_za_tx_01032005.pkb
10 
11    DESCRIPTION
12       This is the main tax package as used in the ZA Localisation Tax Module.
13       The public functions in this package are not for client use and is
14       only referenced by the tax formulae in the Application.
15 
16    PUBLIC FUNCTIONS
17       Descriptions in package header
18       ZaTxOvr_01032005
19       ZaTxGlb_01032005
20       ZaTxDbi_01032005
21       ZaTxBal1_01032005
22       ZaTxBal2_01032005
23       ZaTxBal3_01032005
24       ZaTx_01032005
25 
26    PRIVATE FUNCTIONS
27       <none>
28 
29 
30    PRIVATE PROCEDURES
31       WrtHrTrc
32          Wrapper procedure for py_za_tx_utl_01032005.WriteHrTrace
33       NetTxbIncCalc
34          Procedure to calculate a Net Taxable Income figure used
35          to properly calculate the Skills Development Levy
36       LteCalc
37          A main tax calculation.
38          For a complete description see the tax module design document.
39       SeaCalc
40          A main tax calculation.
41          For a complete description see the tax module design document.
42       SitCalc
43          A main tax calculation.
44          For a complete description see the tax module design document.
45       DirCalc
46          A main tax calculation.
47          For a complete description see the tax module design document.
48       BasCalc
49          A main tax calculation.
50          For a complete description see the tax module design document.
51       CalCalc
52          A main tax calculation.
53          For a complete description see the tax module design document.
54       YtdCalc
55          A main tax calculation.
56          For a complete description see the tax module design document.
57       NorCalc
58          A main tax calculation.
59          For a complete description see the tax module design document.
60 
61    NOTES
62       .
63 
64    MODIFICATION HISTORY
65       Person      Date       Version Bug     Comments
66       ----------- ---------- ------- ------- ---------------------------------
67       A. Mahanty  16/05/2006 115.12  5148830 References to the dimension _rtr_asg_tax_ptd
68                                              added in ZATX6_01032006.  Norcalc is used
69                                              even when the asg has retro results.
70       A. Mahanty  01/03/2006 115.11  4346955 References to the dimension _non_rtr_asg_tax_ptd
71                                              removed in ZATX6_01032005. SitCalc is used when
72                                              the assignment has retropay results.
73       A. Mahanty  03/11/2005 115.10  4346955 Enh Retropay: ZATX6_01032005 modified
74                                              to use the new dimension _non_rtr_asg_tax_ptd
75       J.N. Louw   24/08/2005 115.9   4566053 Updated
76       J.N. Louw   17/08/2005 115.8   4346920 Updated
77       R.V. Pahune 05/08/2005 115.7   4346920 Balance feed enhancement
78       A. Mahanty  14/04/2005 115.6   3491357 BRA Enhancement
79                                              Balance Value retrieval modified.
80       J.N. Louw   05/04/2005 115.5   4032647
81       R.V. Pahune 05/04/2005 115.4   4276047
82       J.N. Louw   31/01/2005 115.3   4153654
83       J.N. Louw   12/01/2005 115.2   4117011
84       J.N. Louw   07/01/2005 115.1   4106307
85                                      4106240
86       J.N. Louw   22/12/2004 115.0           Next Version of Main ZA Tax
87                                              Package.
88                                              For detail history see
89                                              py_za_tx_01032004
90 */
91 
92 -------------------------------------------------------------------------------
93 --                               PACKAGE BODY                                --
94 -------------------------------------------------------------------------------
95 
96 -------------------------------------------------------------------------------
97 -- WrtHrTrc
98 -- Wrapper for py_za_tx_utl_01032005.WriteHrTrace
99 -------------------------------------------------------------------------------
100 PROCEDURE WrtHrTrc(
101    p_Buf IN VARCHAR2
102    )
103 AS
104 
105 BEGIN
106    py_za_tx_utl_01032005.WriteHrTrace(p_Buf);
107 END WrtHrTrc;
108 
109 -------------------------------------------------------------------------------
110 -- NetTxbIncCalc
111 -- Calculates the net taxable income value for the calendar month
112 -------------------------------------------------------------------------------
113 PROCEDURE NetTxbIncCalc AS
114 
115    -- Variable Declaration
116    nti_CurMthStrtDte        DATE;
117    nti_CurMthEndDte         DATE;
118    nti_SitFactor            NUMBER;
119    nti_PerTypInc            BALANCE DEFAULT 0;
120    nti_PerTypErn            BALANCE DEFAULT 0;
121    nti_AnnTypErn            BALANCE DEFAULT 0;
122    nti_PerPenFnd            BALANCE DEFAULT 0;
123    nti_PerRfiCon            BALANCE DEFAULT 0;
124    nti_PerPenFndMax         BALANCE DEFAULT 0;
125    nti_PerPenFndAbm         BALANCE DEFAULT 0;
126    nti_AnnPenFnd            BALANCE DEFAULT 0;
127    nti_AnnRfiCon            BALANCE DEFAULT 0;
128    nti_AnnPenFndMax         BALANCE DEFAULT 0;
129    nti_AnnPenFndAbm         BALANCE DEFAULT 0;
130    nti_PerArrPenFnd         BALANCE DEFAULT 0;
131    nti_PerArrPenFndAbm      BALANCE DEFAULT 0;
132    nti_PerRetAnu            BALANCE DEFAULT 0;
133    nti_PerNrfiCon           BALANCE DEFAULT 0;
134    nti_PerRetAnuMax         BALANCE DEFAULT 0;
135    nti_PerRetAnuAbm         BALANCE DEFAULT 0;
136    nti_PerArrRetAnu         BALANCE DEFAULT 0;
137    nti_PerArrRetAnuAbm      BALANCE DEFAULT 0;
138    nti_AnnArrPenFnd         BALANCE DEFAULT 0;
139    nti_AnnArrPenFndAbm      BALANCE DEFAULT 0;
140    nti_AnnRetAnu            BALANCE DEFAULT 0;
141    nti_AnnNrfiCon           BALANCE DEFAULT 0;
142    nti_AnnRetAnuMax         BALANCE DEFAULT 0;
143    nti_AnnRetAnuAbm         BALANCE DEFAULT 0;
144    nti_AnnArrRetAnu         BALANCE DEFAULT 0;
145    nti_AnnArrRetAnuAbm      BALANCE DEFAULT 0;
146    nti_MedAidAbm            BALANCE DEFAULT 0;
147    nti_PerTotAbm            BALANCE DEFAULT 0;
148    nti_AnnTotAbm            BALANCE DEFAULT 0;
149    nti_TxbPerTypInc         BALANCE DEFAULT 0;
150    nti_TxbAnnTypInc         BALANCE DEFAULT 0;
151    nti_NetPerTxbInc         BALANCE DEFAULT 0;
152    nti_NetAnnTxbInc         BALANCE DEFAULT 0;
153    l_65Year                 DATE;
154    -- Fixed Pension Basis
155    nti_PerTxbPkg            BALANCE DEFAULT 0;
156    nti_AnnTxbPkg            BALANCE DEFAULT 0;
157    nti_TotPkg               BALANCE DEFAULT 0;
158    nti_TxbFxdPrc            BALANCE DEFAULT 0;
159    nti_PerRFITotPkgPTD      BALANCE DEFAULT 0;
160    nti_PerNRFITotPkgPTD     BALANCE DEFAULT 0;
161    nti_AnnRFITotPkgPTD      BALANCE DEFAULT 0;
162    nti_AnnNRFITotPkgPTD     BALANCE DEFAULT 0;
163    nti_PerRFITotPkgPTD_Upd  BALANCE DEFAULT 0;
164    nti_PerNRFITotPkgPTD_Upd BALANCE DEFAULT 0;
165    nti_AnnRFITotPkgPTD_Upd  BALANCE DEFAULT 0;
166    nti_AnnNRFITotPkgPTD_Upd BALANCE DEFAULT 0;
167    -- Income Protection Policy
168    nti_PerIncProPolAbm      BALANCE DEFAULT 0;
169    nti_AnnIncProPolAbm      BALANCE DEFAULT 0;
170 
171 BEGIN
172    hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',1);
173 -- Calculate the Current Effective Calendar Month to Date Start Date
174 --
175    SELECT trunc(dbi_SES_DTE,'Month')
176      INTO nti_CurMthStrtDte
177      FROM dual;
178    hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',2);
179 
180 -- Calculate the Current Effective Calendar Month to Date End Date
181 --
182    SELECT last_day(dbi_SES_DTE)
183      INTO nti_CurMthEndDte
184      FROM dual;
185    hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',3);
186 
187 -- Calculate Site Factor
188 --
189    -- Based on the number of days in the calendar year over days in the calendar month
190    nti_SitFactor := dbi_ZA_DYS_IN_YR / (nti_CurMthEndDte - nti_CurMthStrtDte + 1);
191 
192    hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',4);
193 
194    WrtHrTrc('nti_CurMthEndDte:  '||to_char(nti_CurMthEndDte,'DD/MM/YYYY'));
195    WrtHrTrc('nti_CurMthStrtDte: '||to_char(nti_CurMthStrtDte,'DD/MM/YYYY'));
196 
197 -- Calculate the Taxable Portion of the Not-Fully Taxable Income Balances
198 --
199    bal_TOT_TXB_TA_CMTD  := bal_TOT_TXB_TA_CMTD * glb_ZA_TRV_ALL_TX_PRC / 100;
200 
201    bal_TOT_TXB_PO_CMTD  := bal_TOT_TXB_PO_CMTD * glb_ZA_PBL_TX_PRC / 100;
202 
203 -- Sum Period Type Income Calendar Month to Date Balances
204 --
205    nti_PerTypInc := bal_TOT_SKL_INC_CMTD;
206 -- Annualise by the Site Factor the Period Type Income
207 --
208    nti_PerTypErn := nti_PerTypInc * nti_SitFactor;
209 -- Sum Annual Type Income Calendar Month to Date Balances
210 --
211    nti_AnnTypErn := nti_PerTypErn + bal_TOT_SKL_ANN_INC_CMTD;
212 
213 -----------------------------
214 -- Calculate Abatement Values
215 -----------------------------
216    -------------------------
217    -- Pension Fund Abatement
218    -------------------------
219       ---------------------
220       -- Period Calculation
221       ---------------------
222          -- Annualise Period Pension Fund Contribution
223          nti_PerPenFnd := bal_CUR_PF_CMTD * nti_SitFactor;
224          -- Annualise Period Rfiable Contributions
225          nti_PerRfiCon := bal_TOT_RFI_INC_CMTD * nti_SitFactor;
226       ---------------------
227       -- Annual Calculation
228       ---------------------
229          -- Annual Pension Fund Contribution
230          nti_AnnPenFnd := nti_PerPenFnd + bal_ANN_PF_CMTD;
231          -- Annual Rfi Contribution
232          nti_AnnRfiCon := nti_PerRfiCon + bal_TOT_RFI_AN_INC_CMTD;
233 
234       --------------------------------
235       -- Arrear Pension Fund Abatement
236       --------------------------------
237          hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',19);
238          -------------
239          -- Excess ITD
240          -------------
241          nti_PerArrPenFnd := bal_EXC_ARR_PEN_ITD;
242          ------------------------------------
243          -- Current/Annual based on frequency
244          ------------------------------------
245          nti_PerArrPenFnd :=
246             nti_PerArrPenFnd + ( bal_ARR_PF_CMTD * nti_SitFactor);
247           ---------
248           -- Annual
249           ---------
250           nti_AnnArrPenFnd := nti_PerArrPenFnd + bal_ANN_ARR_PF_CMTD;
251 
252       -------------------------------
253       -- Retirement Annuity Abatement
254       -------------------------------
255          hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',20);
256          -------------
257          -- Current RA
258          -------------
259          -- Calculate RA Contribution
260          nti_PerRetAnu := bal_CUR_RA_CMTD * nti_SitFactor;
261          ---------------------
262          -- Current NRFI Contr
263          ---------------------
264          IF bal_CUR_PF_CMTD + bal_ANN_PF_CMTD = 0 THEN
265             hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',21);
266             nti_PerNrfiCon := (
267                                 bal_TOT_RFI_INC_CMTD + bal_TOT_NRFI_INC_CMTD
268                               )
269                               * nti_SitFactor;
270          ELSE
271             hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',22);
272             nti_PerNrfiCon := bal_TOT_NRFI_INC_CMTD * nti_SitFactor;
273          END IF;
274          ------------
275          -- Annual RA
276          ------------
277          nti_AnnRetAnu := nti_PerRetAnu + bal_ANN_RA_CMTD;
278 
279          IF bal_CUR_PF_CMTD + bal_ANN_PF_CMTD = 0 THEN
280             hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',23);
281 
282             nti_AnnNrfiCon := nti_PerNrfiCon
283                             + bal_TOT_NRFI_AN_INC_CMTD
284                             + bal_TOT_RFI_AN_INC_CMTD;
285          ELSE
286             hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',24);
287             nti_AnnNrfiCon := nti_PerNrfiCon + bal_TOT_NRFI_AN_INC_CMTD;
288          END IF;
289       --------------------------------------
290       -- Arrear Retirement Annuity Abatement
291       --------------------------------------
292          hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',25);
293          -------------
294          -- Excess ITD
295          -------------
296          nti_PerArrRetAnu := bal_EXC_ARR_RA_ITD;
297          ------------------------------------
298          -- Current/Annual based on frequency
299          ------------------------------------
300          nti_PerArrRetAnu :=   nti_PerArrRetAnu
301                            + ( bal_ARR_RA_CMTD
302                              * nti_SitFactor
303                              );
304          ---------
305          -- Annual
306          ---------
307          nti_AnnArrRetAnu := nti_PerArrRetAnu
308                            + nti_AnnArrRetAnu
309                            + bal_ANN_ARR_RA_CMTD;
310 
311       ------------------------
312       -- Medical Aid Abatement
313       ------------------------
314          nti_MedAidAbm := bal_MED_CONTR_CMTD * nti_SitFactor;
315 
316    ---------------------------
317    -- Income Protection Policy
318    ---------------------------
319       ---------------------
320       -- Period Calculation
321       ---------------------
322       -- Annualise Income Protection Policy Contributions
323       nti_PerIncProPolAbm := bal_EE_INC_PRO_POL_CMTD * nti_SitFactor;
324 
325       hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',26);
326 
327       ---------------------
328       -- Annual Calculation
329       ---------------------
330       -- Annual Income Protection Policy Contributions
331       nti_AnnIncProPolAbm :=
332          nti_PerIncProPolAbm
333        + bal_ANN_EE_INC_PRO_POL_CMTD;
334 
335    ----------------------------------------------------------------------------
336    --                        CALCULATE THE ABATEMENTS                        --
337    ----------------------------------------------------------------------------
338    -------------------------
339    -- Pension Fund Abatement
340    -------------------------
341       ---------------------
342       -- Period Calculation
343       ---------------------
344       -- Calculate the Pension Fund Maximum
345       nti_PerPenFndMax := GREATEST( glb_ZA_PF_AN_MX_ABT
346                                   , glb_ZA_PF_MX_PRC / 100 * nti_PerRfiCon
347                                   );
348       -- Calculate Period Pension Fund Abatement
349       nti_PerPenFndAbm := LEAST(nti_PerPenFnd, nti_PerPenFndMax);
350       ---------------------
351       -- Annual Calculation
352       ---------------------
353       -- Calculate the Pension Fund Maximum
354       nti_AnnPenFndMax := GREATEST( glb_ZA_PF_AN_MX_ABT
355                                   , glb_ZA_PF_MX_PRC / 100 * nti_AnnRfiCon
356                                   );
357 
358       -- Calculate Annual Pension Fund Abatement
359       nti_AnnPenFndAbm := LEAST(nti_AnnPenFnd, nti_AnnPenFndMax);
360    --------------------------------
361    -- Arrear Pension Fund Abatement
362    --------------------------------
363       ---------------------
364       -- Period Calculation
365       ---------------------
366       nti_PerArrPenFndAbm := LEAST(nti_PerArrPenFnd, glb_ZA_ARR_PF_AN_MX_ABT);
367       ---------------------
368       -- Annual Calculation
369       ---------------------
370       nti_AnnArrPenFndAbm := LEAST(nti_AnnArrPenFnd, glb_ZA_ARR_PF_AN_MX_ABT);
371    ---------------------------------
372    -- Retirement Annnnuity Abatement
373    ---------------------------------
374       ---------------------
375       -- Period Calculation
376       ---------------------
377       -- Calculate the Retirement Annuity Maximum
378       nti_PerRetAnuMax := GREATEST( glb_ZA_PF_AN_MX_ABT
379                                   , glb_ZA_RA_AN_MX_ABT - nti_PerPenFndAbm
380                                   , glb_ZA_RA_MX_PRC / 100 * nti_PerNrfiCon
381                                   );
382 
383       -- Calculate Retirement Annuity Abatement
384       nti_PerRetAnuAbm := LEAST(nti_PerRetAnu, nti_PerRetAnuMax);
385       ---------------------
386       -- Annual Calculation
387       ---------------------
388       nti_AnnRetAnuMax := GREATEST( glb_ZA_PF_AN_MX_ABT
389                                   , glb_ZA_RA_AN_MX_ABT - nti_AnnPenFndAbm
390                                   , glb_ZA_RA_MX_PRC / 100 * nti_AnnNrfiCon
391                                   );
392 
393       -- Calculate Retirement Annuity Abatement
394       nti_AnnRetAnuAbm := LEAST(nti_AnnRetAnu, nti_AnnRetAnuMax);
395    --------------------------------------
396    -- Arrear Retirement Annuity Abatement
397    --------------------------------------
398       ---------------------
399       -- Period Calculation
400       ---------------------
401       nti_PerArrRetAnuAbm := LEAST(nti_PerArrRetAnu, glb_ZA_ARR_RA_AN_MX_ABT);
402       ---------------------
403       -- Annual Calculation
404       ---------------------
405       nti_AnnArrRetAnuAbm := LEAST(nti_AnnArrRetAnu, glb_ZA_ARR_RA_AN_MX_ABT);
406 
407    -----------------------------------------------------------
408    -- Tax Rebates, Threshold Figure and Medical Aid Abatements
409    -----------------------------------------------------------
410       -- Calculate the assignments 65 Year Date
411       l_65Year := add_months(py_za_tx_01032005.dbi_PER_DTE_OF_BRTH,780);
412 
413       IF l_65Year > dbi_ZA_TX_YR_END THEN
414          nti_MedAidAbm := 0;
415       END IF;
416 
417       hr_utility.set_location('py_za_tx_01032005.NetTxbIncCalc',27);
418 
419    -------------------
420    -- Total Abatements
421    -------------------
422       -- Period Total Abatement
423       nti_PerTotAbm := ( nti_PerPenFndAbm
424                        + nti_PerArrPenFndAbm
425                        + nti_PerRetAnuAbm
426                        + nti_PerArrRetAnuAbm
427                        + nti_MedAidAbm
428                        + nti_PerIncProPolAbm
429                        );
430       -- Annual Total Abatements
431       nti_AnnTotAbm := ( nti_AnnPenFndAbm
432                        + nti_AnnArrPenFndAbm
433                        + nti_AnnRetAnuAbm
434                        + nti_AnnArrRetAnuAbm
435                        + nti_MedAidAbm
436                        + nti_AnnIncProPolAbm
437                        );
438 
439 -- Calculate New O Figures
440 --
441    nti_TxbPerTypInc := nti_PerTypErn - nti_PerTotAbm;
442    nti_TxbAnnTypInc := nti_AnnTypErn - nti_AnnTotAbm;
443 
444 -- Deannualise Period O Figure
445 --
446    nti_NetPerTxbInc := nti_TxbPerTypInc / nti_SitFactor;
447 -- Calculate the Net Taxable Annual Type Income
448 --
449    nti_NetAnnTxbInc := nti_TxbAnnTypInc - nti_TxbPerTypInc;
450 
451 -- Calculate New Net Taxable Income Balance
452 --
453    trc_NtiUpdFig := (nti_NetPerTxbInc + nti_NetAnnTxbInc) - bal_NET_TXB_INC_CMTD;
454 
455    WrtHrTrc('nti_SitFactor:            '||to_char(nti_SitFactor));
456    WrtHrTrc('nti_PerTypErn:            '||to_char(nti_PerTypErn));
457    WrtHrTrc('nti_AnnTypErn:            '||to_char(nti_AnnTypErn));
458    WrtHrTrc('nti_NetPerTxbInc:         '||to_char(nti_NetPerTxbInc));
459    WrtHrTrc('nti_NetAnnTxbInc:         '||to_char(nti_NetAnnTxbInc));
460    WrtHrTrc('bal_NET_TXB_INC_CMTD:     '||to_char(bal_NET_TXB_INC_CMTD));
461    WrtHrTrc('trc_NtiUpdFig:            '||to_char(trc_NtiUpdFig));
462    WrtHrTrc(' ');
463    WrtHrTrc('-- Fixed Pension Basis');
464    WrtHrTrc('nti_PerTxbPkg:            '||to_char(nti_PerTxbPkg           ));
465    WrtHrTrc('nti_AnnTxbPkg:            '||to_char(nti_AnnTxbPkg           ));
466    WrtHrTrc('nti_TotPkg:               '||to_char(nti_TotPkg              ));
467    WrtHrTrc('nti_TxbFxdPrc:            '||to_char(nti_TxbFxdPrc           ));
468    WrtHrTrc('nti_PerRFITotPkgPTD:      '||to_char(nti_PerRFITotPkgPTD     ));
469    WrtHrTrc('nti_PerNRFITotPkgPTD:     '||to_char(nti_PerNRFITotPkgPTD    ));
470    WrtHrTrc('nti_AnnRFITotPkgPTD:      '||to_char(nti_AnnRFITotPkgPTD     ));
471    WrtHrTrc('nti_AnnNRFITotPkgPTD:     '||to_char(nti_AnnNRFITotPkgPTD    ));
472    WrtHrTrc('nti_PerRFITotPkgPTD_Upd:  '||to_char(nti_PerRFITotPkgPTD_Upd ));
473    WrtHrTrc('nti_PerNRFITotPkgPTD_Upd: '||to_char(nti_PerNRFITotPkgPTD_Upd));
474    WrtHrTrc('nti_AnnRFITotPkgPTD_Upd:  '||to_char(nti_AnnRFITotPkgPTD_Upd ));
475    WrtHrTrc('nti_AnnNRFITotPkgPTD_Upd: '||to_char(nti_AnnNRFITotPkgPTD_Upd));
476    WrtHrTrc(' ');
477    WrtHrTrc('nti_PerTotAbm:            '||to_char(nti_PerTotAbm));
478    WrtHrTrc('nti_PerTotAbm consists of:');
479    WrtHrTrc('nti_PerPenFndAbm:         '||to_char(nti_PerPenFndAbm));
480    WrtHrTrc('nti_PerArrPenFndAbm:      '||to_char(nti_PerArrPenFndAbm));
481    WrtHrTrc('nti_PerRetAnuAbm:         '||to_char(nti_PerRetAnuAbm));
482    WrtHrTrc('nti_PerArrRetAnuAbm:      '||to_char(nti_PerArrRetAnuAbm));
483    WrtHrTrc('nti_MedAidAbm:            '||to_char(nti_MedAidAbm));
484    WrtHrTrc('nti_PerIncProPolAbm:      '||to_char(nti_PerIncProPolAbm));
485    WrtHrTrc(' ');
486    WrtHrTrc('nti_AnnTotAbm:            '||to_char(nti_AnnTotAbm));
487    WrtHrTrc('nti_AnnTotAbm consists of:');
488    WrtHrTrc('nti_AnnPenFndAbm:         '||to_char(nti_AnnPenFndAbm));
489    WrtHrTrc('nti_AnnArrPenFndAbm:      '||to_char(nti_AnnArrPenFndAbm));
490    WrtHrTrc('nti_AnnRetAnuAbm:         '||to_char(nti_AnnRetAnuAbm));
491    WrtHrTrc('nti_AnnArrRetAnuAbm:      '||to_char(nti_AnnArrRetAnuAbm));
492    WrtHrTrc('nti_MedAidAbm:            '||to_char(nti_MedAidAbm));
493    WrtHrTrc('nti_AnnIncProPolAbm:      '||to_char(nti_AnnIncProPolAbm));
494 
495 
496 EXCEPTION
497    WHEN OTHERS THEN
498       IF xpt_Msg = 'No Error' THEN
499          xpt_Msg := 'NetTxbIncCalc: '||TO_CHAR(SQLCODE);
500       END IF;
501        RAISE xpt_E;
502 END NetTxbIncCalc;
503 
504 -------------------------------------------------------------------------------
505 -- Tax Override Function
506 -------------------------------------------------------------------------------
507 FUNCTION ZaTxOvr_01032005(
508     p_OvrTyp IN VARCHAR2
509    ,p_TxOnNI IN NUMBER
510    ,p_TxOnAP IN NUMBER
511    ,p_TxPrc  IN NUMBER
512    )RETURN NUMBER
513 AS
514    l_Dum NUMBER := 1;
515 BEGIN
516    -- Set the Override Global
517    trc_OvrTxCalc := TRUE;
518 
519    -- Set Override Values
520    trc_OvrTyp  := p_OvrTyp;
521 
522    IF p_OvrTyp = 'V' THEN
523       trc_LibFpNI := p_TxOnNI;
524       trc_LibFpAP := p_TxOnAP;
525    ELSIF p_OvrTyp = 'P' THEN
526       trc_OvrPrc  := p_TxPrc;
527    END IF;
528    RETURN l_Dum;
529 
530 EXCEPTION
531    WHEN OTHERS THEN
532       hr_utility.set_message(801, 'ZaTxOvr_01032005: '||TO_CHAR(SQLCODE));
533       hr_utility.raise_error;
534 END ZaTxOvr_01032005;
535 
536 -------------------------------------------------------------------------------
537 --                    Main Tax Calculation Procedures                        --
538 -------------------------------------------------------------------------------
539 -------------------------------------------------------------------------------
540 -- LteCalc
541 -------------------------------------------------------------------------------
542 PROCEDURE LteCalc AS
543 
544    -- Variables
545    l_EndDate             DATE;
546    l_StrtDte             DATE;
547    l_65Year              DATE;
548    l_ZA_TX_YR_END        DATE;
549    l_ZA_ADL_TX_RBT       NUMBER;
550    l_ZA_PRI_TX_RBT       NUMBER;
551    l_ZA_PRI_TX_THRSHLD   NUMBER;
552    l_ZA_SC_TX_THRSHLD    NUMBER;
553 
554    l_Sl                  BOOLEAN;
555    l_Np                  BALANCE DEFAULT 0;
556 
557 
558    -- Private Functions
559    --
560       FUNCTION getBalVal
561          (p_BalNme IN pay_balance_types.balance_name%TYPE
562          ,p_EffDte   IN DATE
563          ) RETURN NUMBER
564       AS
565          -- Variables
566          l_BalVal BALANCE;
567          l_BalTypId pay_balance_types.balance_type_id%TYPE;
568          l_dimension pay_balance_dimensions.dimension_name%TYPE ;
569 
570       BEGIN
571          hr_utility.set_location('py_za_tx_01032005.LteCalc',1);
572          -- Get the Balance Type ID
573          SELECT pbt.balance_type_id
574            INTO l_BalTypId
575            FROM pay_balance_types pbt
576           WHERE pbt.balance_name = p_BalNme;
577 
578          hr_utility.set_location('py_za_tx_01032005.LteCalc',2);
579 
580          -- Get the Balance Value
581          l_dimension := '_ASG_TAX_YTD';
582          l_BalVal := py_za_bal.get_balance_value
583                                       ( con_ASG_ID
584                                       , l_BalTypId
585                                       , l_dimension
586                                       , p_EffDte
587                                       );
588          RETURN l_BalVal;
589       END getBalVal;
590 
591       FUNCTION getBalVal2
592          (p_BalNme IN pay_balance_types.balance_name%TYPE
593          ,p_EffDte   IN DATE
594          ) RETURN NUMBER
595       AS
596          -- Variables
597          l_BalVal BALANCE;
598          l_BalTypId pay_balance_types.balance_type_id%TYPE;
599          l_dimension pay_balance_dimensions.dimension_name%TYPE ;
600       BEGIN
601          hr_utility.set_location('py_za_tx_01032005.LteCalc',3);
602          -- Get the Balance Type ID
603          SELECT pbt.balance_type_id
604            INTO l_BalTypId
605            FROM pay_balance_types pbt
606           WHERE pbt.balance_name = p_BalNme;
607 
608          hr_utility.set_location('py_za_tx_01032005.LteCalc',4);
609 
610          -- Get the Balance Value
611          l_dimension := '_ASG_ITD';
612          l_BalVal := py_za_bal.get_balance_value
613                                        ( con_ASG_ID
614                                        , l_BalTypId
615                                        , l_dimension
616                                        , p_EffDte
617                                        );
618          RETURN l_BalVal;
619       END getBalVal2;
620 
621 BEGIN
622    hr_utility.set_location('py_za_tx_01032005.LteCalc',5);
623    -- Does the Assignment have an OFigure?
624    --
625    IF bal_TOT_TXB_INC_ITD <= 0 THEN
626       hr_utility.set_location('py_za_tx_01032005.LteCalc',6);
627       -- Calculate the 'O' Figure
628       -- Set the Global
629       trc_CalTyp := 'PstCalc';
630       -- Set the Site Factor to the value of the previous tax year
631       l_StrtDte := dbi_ZA_ASG_TX_YR_STRT;
632       l_EndDate := dbi_ZA_ASG_TX_YR_END;
633       hr_utility.set_location('py_za_tx_01032005.LteCalc',8);
634 
635       trc_SitFactor := (l_EndDate - l_StrtDte + 1) / py_za_tx_utl_01032005.DaysWorked;
636       hr_utility.set_location('py_za_tx_01032005.LteCalc',9);
637 
638       -- Populate Local Balance Variables
639       -- The PTD Globals are used as dummy to store the previous tax year's
640       -- Balance values
641 
642       bal_ANN_ARR_PF_PTD           := getBalVal('Annual Arrear Pension Fund',l_EndDate);
643       bal_ANN_ARR_RA_PTD           := getBalVal('Annual Arrear Retirement Annuity',l_EndDate);
644       bal_ANN_PF_PTD               := getBalVal('Annual Pension Fund',l_EndDate);
645       bal_ANN_RA_PTD               := getBalVal('Annual Retirement Annuity',l_EndDate);
646       bal_ARR_PF_PTD               := getBalVal('Arrear Pension Fund',l_EndDate);
647       bal_ARR_RA_PTD               := getBalVal('Arrear Retirement Annuity',l_EndDate);
648       bal_BP_PTD                   := getBalVal('Bonus Provision',l_EndDate);
649       bal_CUR_PF_PTD               := getBalVal('Current Pension Fund',l_EndDate);
650       bal_CUR_RA_PTD               := getBalVal('Current Retirement Annuity',l_EndDate);
651       bal_EXC_ARR_PEN_PTD          := getBalVal2('Excess Arrear Pension',l_EndDate);
652       bal_EXC_ARR_RA_PTD           := getBalVal2('Excess Arrear Retirement Annuity',l_EndDate);
653       bal_MED_CONTR_PTD            := getBalVal('Medical Aid Contribution',l_EndDate);
654       bal_TOT_INC_PTD              := getBalVal('Total Income',l_EndDate);
655       bal_TOT_NRFI_AN_INC_PTD      := getBalVal('Total NRFIable Annual Income',l_EndDate);
656       bal_TOT_NRFI_INC_PTD         := getBalVal('Total NRFIable Income',l_EndDate);
657       bal_TOT_RFI_AN_INC_PTD       := getBalVal('Total RFIable Annual Income',l_EndDate);
658       bal_TOT_RFI_INC_PTD          := getBalVal('Total RFIable Income',l_EndDate);
659       bal_TOT_TXB_AB_PTD           := getBalVal('ZATax Total Taxable Annual Bonus',l_EndDate);
660       bal_TOT_TXB_AP_PTD           := getBalVal('ZATax Total Taxable Annual Payments',l_EndDate);
661       bal_TOT_TXB_FB_PTD           := getBalVal('ZATax Total Taxable Fringe Benefits',l_EndDate);
662       bal_TOT_TXB_NI_PTD           := getBalVal('ZATax Total Taxable Normal Income',l_EndDate);
663       bal_TOT_TXB_TA_PTD           := getBalVal('ZATax Total Taxable Travel Allowance',l_EndDate);
664       bal_TOT_TXB_PO_PTD           := getBalVal('ZATax Total Taxable Public Office Allowance',l_EndDate);
665 
666       hr_utility.set_location('py_za_tx_01032005.LteCalc',10);
667 
668       -- Update Globals with Correct Taxable Values
669       py_za_tx_utl_01032005.TrvAll;
670 
671       bal_TOT_TXB_PO_PTD  := bal_TOT_TXB_PO_PTD
672                        * py_za_tx_utl_01032005.GlbVal('ZA_PUBL_TAX_PERC',l_EndDate)
673                        / 100;
674       hr_utility.set_location('py_za_tx_01032005.LteCalc',11);
675 
676       -- Rebates
677       py_za_tx_utl_01032005.SetRebates;
678       -- Abatements
679       py_za_tx_utl_01032005.Abatements;
680 
681       hr_utility.set_location('py_za_tx_01032005.LteCalc',12);
682 
683       -- Base Earnings
684       --
685        trc_BseErn :=
686          ( ( bal_TOT_TXB_NI_PTD
687            + bal_TOT_TXB_FB_PTD
688            + bal_TOT_TXB_TA_PTD
689            + bal_TOT_TXB_PO_PTD
690            + bal_BP_PTD
691          )* trc_SitFactor
692          )
693          + bal_TOT_TXB_AB_PTD
694          + bal_TOT_TXB_AP_PTD;
695       -- Taxable Base Income
696       trc_TxbBseInc := trc_BseErn - trc_AnnTotAbm;
697       -- Threshold Check
698       IF trc_TxbBseInc >= trc_Threshold THEN
699          hr_utility.set_location('py_za_tx_01032005.LteCalc',13);
700       -- Tax Liability
701          trc_TotLibBse := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbBseInc);
702       ELSE
703          hr_utility.set_location('py_za_tx_01032005.LteCalc',14);
704          trc_TotLibBse := 0;
705       END IF;
706 
707       -- Populate the O Figure
708       trc_OUpdFig := trc_TxbBseInc - bal_TOT_TXB_INC_ITD;
709 
710       -- Base Income
711       WrtHrTrc('trc_BseErn:    '||to_char(trc_BseErn));
712       WrtHrTrc('trc_TxbBseInc: '||to_char(trc_TxbBseInc));
713       WrtHrTrc('trc_TotLibBse: '||to_char(trc_TotLibBse));
714 
715    ELSE
716       hr_utility.set_location('py_za_tx_01032005.LteCalc',15);
717       -- Use the 'O' Figure as Base
718       -- Set the Global
719       trc_CalTyp := 'LteCalc';
720 
721       -- Get the assignment's previous tax year's
722       --   threshold and rebate figures
723       -- Employee Tax Year Start and End Dates
724       l_EndDate  := dbi_ZA_ASG_TX_YR_END;
725 
726       hr_utility.set_location('py_za_tx_01032005.LteCalc',16);
727 
728       -- Global Values
729       l_ZA_TX_YR_END        := l_EndDate;
730       l_ZA_ADL_TX_RBT       := py_za_tx_utl_01032005.GlbVal('ZA_ADDITIONAL_TAX_REBATE',l_EndDate);
731       l_ZA_PRI_TX_RBT       := py_za_tx_utl_01032005.GlbVal('ZA_PRIMARY_TAX_REBATE',l_EndDate);
732       l_ZA_PRI_TX_THRSHLD   := py_za_tx_utl_01032005.GlbVal('ZA_PRIM_TAX_THRESHOLD',l_EndDate);
733       l_ZA_SC_TX_THRSHLD    := py_za_tx_utl_01032005.GlbVal('ZA_SEC_TAX_THRESHOLD',l_EndDate);
734 
735       -- Calculate the assignments 65 Year Date
736       l_65Year := add_months(dbi_PER_DTE_OF_BRTH,780);
737 
738       IF l_65Year <= l_ZA_TX_YR_END THEN
739          hr_utility.set_location('py_za_tx_01032005.LteCalc',17);
740          -- give the extra abatement
741          trc_Rebate    := l_ZA_PRI_TX_RBT + l_ZA_ADL_TX_RBT;
742          trc_Threshold := l_ZA_SC_TX_THRSHLD;
743       ELSE
744          hr_utility.set_location('py_za_tx_01032005.LteCalc',18);
745          -- not eligable for extra abatement
746          trc_Rebate    := l_ZA_PRI_TX_RBT;
747          trc_Threshold := l_ZA_PRI_TX_THRSHLD;
748       END IF;
749 
750 
751    -- Base Earnings
752    --
753       -- Take the OFigure as Taxable Base Income
754       trc_TxbBseInc := bal_TOT_TXB_INC_ITD;
755       -- Threshold Check
756       IF trc_TxbBseInc >= trc_Threshold THEN
757          hr_utility.set_location('py_za_tx_01032005.LteCalc',19);
758          -- Tax Liability
759          trc_TotLibBse := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbBseInc);
760       ELSE
761          hr_utility.set_location('py_za_tx_01032005.LteCalc',20);
762          trc_TotLibBse := 0;
763       END IF;
764 
765       -- Base Income
766       WrtHrTrc('trc_BseErn:    '||to_char(trc_BseErn));
767       WrtHrTrc('trc_TxbBseInc: '||to_char(trc_TxbBseInc));
768       WrtHrTrc('trc_TotLibBse: '||to_char(trc_TotLibBse));
769    END IF;
770 
771    -- Override the Global
772    trc_CalTyp := 'LteCalc';
773    -- Set the SitFactor back to 1
774    trc_SitFactor := 1;
775 
776    hr_utility.set_location('py_za_tx_01032005.LteCalc',21);
777 
778    -- Rebates
779    py_za_tx_utl_01032005.SetRebates;
780    -- Abatements
781    py_za_tx_utl_01032005.Abatements;
782 
783    hr_utility.set_location('py_za_tx_01032005.LteCalc',22);
784 
785    -- Update Global Balance Values with correct TAXABLE values
786    py_za_tx_utl_01032005.TrvAll;
787 
788    bal_TOT_TXB_PO_YTD  := bal_TOT_TXB_PO_YTD * glb_ZA_PBL_TX_PRC / 100;
789 
790 -- Normal Income
791 --
792    -- Ytd Normal Income
793    trc_NorIncYtd := bal_TOT_TXB_NI_YTD;
794    -- Skip the calculation if there is No Income
795    IF trc_NorIncYtd <> 0 THEN
796       hr_utility.set_location('py_za_tx_01032005.LteCalc',23);
797       -- Normal Earnings
798       trc_NorErn := trc_NorIncYtd + trc_TxbBseInc;
799       -- Taxable Normal Income
800       trc_TxbNorInc := trc_NorErn - trc_PerTotAbm;
801       -- Threshold Check
802       IF trc_TxbNorInc >= trc_Threshold THEN
803          hr_utility.set_location('py_za_tx_01032005.LteCalc',24);
804          -- Tax Liability
805          trc_TotLibNI := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbNorInc);
806          trc_LibFyNI  := trc_TotLibNI - least(trc_TotLibNI,trc_TotLibBse);
807          trc_TotLibNI := greatest(trc_TotLibNI,trc_TotLibBse);
808          trc_LibFpNI  := trc_LibFyNI - bal_TX_ON_NI_YTD;
809       ELSE
810          hr_utility.set_location('py_za_tx_01032005.LteCalc',25);
811          -- Set Cascade Figures and Refund
812          trc_TotLibNI   := 0;
813          trc_LibFpNI    := -1 * bal_TX_ON_NI_YTD;
814          trc_LibFpNIOvr := TRUE;
815       END IF;
816    ELSE
817       hr_utility.set_location('py_za_tx_01032005.LteCalc',26);
818       -- Set Cascade Figures and Refund
819       trc_NorErn     := trc_TxbBseInc;
820       trc_TxbNorInc  := 0;
821       trc_TotLibNI   := trc_TotLibBse;
822       trc_LibFpNI    := -1 * bal_TX_ON_NI_YTD;
823       trc_LibFpNIOvr := TRUE;
824    END IF;
825 
826 -- Fringe Benefits
827 --
828    trc_FrnBenYtd := bal_TOT_TXB_FB_YTD;
829    -- Skip the calculation if there is No Income
830    IF trc_FrnBenYtd <> 0 THEN
831       hr_utility.set_location('py_za_tx_01032005.LteCalc',27);
832       -- Fringe Benefit Earnings
833       trc_FrnBenErn := trc_FrnBenYtd + trc_NorErn;
834       -- Taxable Fringe Income
835       trc_TxbFrnInc := trc_FrnBenErn - trc_PerTotAbm;
836       -- Threshold Check
837       IF trc_TxbFrnInc >= trc_Threshold THEN
838          hr_utility.set_location('py_za_tx_01032005.LteCalc',28);
839          -- Tax Liability
840          trc_TotLibFB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbFrnInc);
841          trc_LibFyFB  := trc_TotLibFB - least(trc_TotLibFB,trc_TotLibNI);
842          trc_TotLibFB := greatest(trc_TotLibFB,trc_TotLibNI);
843          trc_LibFpFB  := trc_LibFyFB - bal_TX_ON_FB_YTD;
844       ElSE
845          hr_utility.set_location('py_za_tx_01032005.LteCalc',29);
846          -- Set Cascade Figures and Refund
847          trc_TotLibFB   := trc_TotLibNI;
848          trc_LibFpFB    := -1 * bal_TX_ON_FB_YTD;
849          trc_LibFpFBOvr := TRUE;
850       END IF;
851    ELSE
852       hr_utility.set_location('py_za_tx_01032005.LteCalc',30);
853       -- Set Cascade Figures and Refund
854       trc_FrnBenErn  := trc_NorErn;
855       trc_TxbFrnInc  := trc_TxbNorInc;
856       trc_TotLibFB   := trc_TotLibNI;
857       trc_LibFpFB    := -1 * bal_TX_ON_FB_YTD;
858       trc_LibFpFBOvr := TRUE;
859    END IF;
860 
861 -- Travel Allowance
862 --
863    -- Ytd Travel Allowance
864    trc_TrvAllYtd := bal_TOT_TXB_TA_YTD;
865    -- Skip the calculation if there is No Income
866    IF trc_TrvAllYtd <> 0 THEN
867       hr_utility.set_location('py_za_tx_01032005.LteCalc',31);
868       -- Travel Earnings
869       trc_TrvAllErn := trc_TrvAllYtd + trc_FrnBenErn;
870       -- Taxable Travel Income
871       trc_TxbTrvInc := trc_TrvAllErn - trc_PerTotAbm;
872       -- Threshold Check
873       IF trc_TxbTrvInc >= trc_Threshold THEN
874          hr_utility.set_location('py_za_tx_01032005.LteCalc',32);
875          -- Tax Liability
876          trc_TotLibTA := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbTrvInc);
877          trc_LibFyTA  := trc_TotLibTA - least(trc_TotLibTA,trc_TotLibFB);
878          trc_TotLibTA := greatest(trc_TotLibTA,trc_TotLibFB);
879          trc_LibFpTA  := trc_LibFyTA - bal_TX_ON_TA_YTD;
880       ELSE
881          hr_utility.set_location('py_za_tx_01032005.LteCalc',33);
882          -- Set Cascade Figures and Refund
883          trc_TotLibTA   := trc_TotLibFB;
884          trc_LibFpTA    := -1 * bal_TX_ON_TA_YTD;
885          trc_LibFpTAOvr := TRUE;
886       END IF;
887    ELSE
888       hr_utility.set_location('py_za_tx_01032005.LteCalc',34);
889       -- Set Cascade Figures and Refund
890       trc_TrvAllErn  := trc_FrnBenErn;
891       trc_TxbTrvInc  := trc_TxbFrnInc;
892       trc_TotLibTA   := trc_TotLibFB;
893       trc_LibFpTA    := -1 * bal_TX_ON_TA_YTD;
894       trc_LibFpTAOvr := TRUE;
895    END IF;
896 
897 -- Annual Bonus
898 --
899    -- Ytd Annual Bonus
900    trc_AnnBonYtd := bal_TOT_TXB_AB_YTD;
901    -- Skip the calculation if there is No Income
902    IF trc_AnnBonYtd <> 0 THEN
903       hr_utility.set_location('py_za_tx_01032005.LteCalc',35);
904       -- Annual Bonus Earnings
905       trc_AnnBonErn := trc_AnnBonYtd + trc_TrvAllErn;
906       -- Taxable Annual Bonus Income
907       trc_TxbAnnBonInc := trc_AnnBonErn - trc_AnnTotAbm;
908       -- Threshold Check
909       IF trc_TxbAnnBonInc >= trc_Threshold THEN
910          hr_utility.set_location('py_za_tx_01032005.LteCalc',36);
911          -- Tax Liability
912          trc_TotLibAB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnBonInc);
913          trc_LibFyAB  := trc_TotLibAB - least(trc_TotLibAB,trc_TotLibTA);
914          trc_TotLibAB := greatest(trc_TotLibAB,trc_TotLibTA);
915          trc_LibFpAB  := trc_LibFyAB - bal_TX_ON_AB_YTD;
916       ELSE
917          hr_utility.set_location('py_za_tx_01032005.LteCalc',39);
918          -- Set Cascade Figures and Refund
919          trc_TotLibAB   := trc_TotLibTA;
920          trc_LibFpAB    := -1 * bal_TX_ON_AB_YTD;
921          trc_LibFpABOvr := TRUE;
922       END IF;
923    ELSE
924       hr_utility.set_location('py_za_tx_01032005.LteCalc',40);
925       -- Set Cascade Figures and Refund
926       trc_AnnBonErn    := trc_TrvAllErn;
927       trc_TxbAnnBonInc := trc_TxbTrvInc;
928       trc_TotLibAB     := trc_TotLibTA;
929       trc_LibFpAB      := -1 * bal_TX_ON_AB_YTD;
930       trc_LibFpABOvr   := TRUE;
931    END IF;
932 
933 -- Annual Payments
934 --
935    -- Ytd Annual Payments
936    trc_AnnPymYtd := bal_TOT_TXB_AP_YTD;
937    -- Skip the calculation if there is No Income
938    IF trc_AnnPymYtd <> 0 THEN
939       hr_utility.set_location('py_za_tx_01032005.LteCalc',41);
940       -- Annual Payments Earnings
941       trc_AnnPymErn := trc_AnnPymYtd + trc_AnnBonErn;
942       -- Taxable Annual Payments Income
943       trc_TxbAnnPymInc := trc_AnnPymErn - trc_AnnTotAbm;
944       -- Threshold Check
945       IF trc_TxbAnnPymInc >= trc_Threshold THEN
946          hr_utility.set_location('py_za_tx_01032005.LteCalc',42);
947          -- Tax Liability
948          trc_TotLibAP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnPymInc);
949          trc_LibFyAP  := trc_TotLibAP - least(trc_TotLibAP,trc_TotLibAB);
950          trc_TotLibAP := greatest(trc_TotLibAP,trc_TotLibAB);
951          trc_LibFpAP  := trc_LibFyAP - bal_TX_ON_AP_YTD;
952       ELSE
953          hr_utility.set_location('py_za_tx_01032005.LteCalc',45);
954          -- Set Cascade Figures and Refund
955          trc_TotLibAP   := trc_TotLibAB;
956          trc_LibFpAP    := -1 * bal_TX_ON_AP_YTD;
957          trc_LibFpAPOvr := TRUE;
958       END IF;
959    ELSE
960       hr_utility.set_location('py_za_tx_01032005.LteCalc',46);
961       -- Set Cascade Figures and Refund
962       trc_AnnPymErn    := trc_AnnBonErn;
963       trc_TxbAnnPymInc := trc_TxbAnnBonInc;
964       trc_TotLibAP     := trc_TotLibAB;
965       trc_LibFpAP      := -1 * bal_TX_ON_AP_YTD;
966       trc_LibFpAPOvr   := TRUE;
967    END IF;
968 
969 -- Public Office Allowance
970 --
971    -- Ytd Public Office Allowance
972    trc_PblOffYtd := bal_TOT_TXB_PO_YTD;
973    -- Skip the calculation if there is No Income
974    IF trc_PblOffYtd <> 0 THEN
975       hr_utility.set_location('py_za_tx_01032005.LteCalc',47);
976       -- Public Office Earnings
977       trc_PblOffErn := trc_PblOffYtd;
978       -- Tax Liability
979       trc_LibFyPO := trc_PblOffErn * glb_ZA_PBL_TX_RTE / 100;
980       trc_LibFpPO := trc_LibFyPO -  bal_TX_ON_PO_YTD;
981    ELSE
982       hr_utility.set_location('py_za_tx_01032005.LteCalc',48);
983       -- Set Cascade Figures and Refund
984       trc_LibFyPO    := 0;
985       trc_LibFpPO    := -1 * bal_TX_ON_PO_YTD;
986       trc_LibFpPOOvr := TRUE;
987    END IF;
988 
989 -- Net Pay Validation
990 --
991    -- Net Pay of the Employee
992    l_Np := bal_NET_PAY_RUN;
993    -- Site Limit Check
994    IF trc_TxbAnnPymInc + trc_PblOffErn < glb_ZA_SIT_LIM THEN
995       hr_utility.set_location('py_za_tx_01032005.LteCalc',49);
996       l_Sl := TRUE;
997    ELSE
998       hr_utility.set_location('py_za_tx_01032005.LteCalc',50);
999       l_Sl := FALSE;
1000    END IF;
1001 
1002    py_za_tx_utl_01032005.ValidateTaxOns(p_Rf => l_Sl);
1003 
1004 -- Set IT3A Indicator
1005 --
1006    IF trc_TxbAnnPymInc + trc_PblOffErn >= trc_Threshold THEN
1007       hr_utility.set_location('py_za_tx_01032005.LteCalc',51);
1008       trc_It3Ind := 0; -- Over Lim
1009    ELSE
1010       hr_utility.set_location('py_za_tx_01032005.LteCalc',52);
1011       trc_It3Ind := 1; -- Under Lim
1012    END IF;
1013 
1014    -- Normal Income
1015    WrtHrTrc('trc_NorIncYtd:    '||to_char(trc_NorIncYtd));
1016    WrtHrTrc('trc_NorIncPtd:    '||to_char(trc_NorIncPtd));
1017    WrtHrTrc('trc_NorErn:       '||to_char(trc_NorErn));
1018    WrtHrTrc('trc_TxbNorInc:    '||to_char(trc_TxbNorInc));
1019    WrtHrTrc('trc_TotLibNI:     '||to_char(trc_TotLibNI));
1020    WrtHrTrc('trc_LibFyNI:      '||to_char(trc_LibFyNI));
1021    WrtHrTrc('trc_LibFpNI:      '||to_char(trc_LibFpNI));
1022    -- Fringe Benefits
1023    WrtHrTrc('trc_FrnBenYtd:    '||to_char(trc_FrnBenYtd));
1024    WrtHrTrc('trc_FrnBenPtd:    '||to_char(trc_FrnBenPtd));
1025    WrtHrTrc('trc_FrnBenErn:    '||to_char(trc_FrnBenErn));
1026    WrtHrTrc('trc_TxbFrnInc:    '||to_char(trc_TxbFrnInc));
1027    WrtHrTrc('trc_TotLibFB:     '||to_char(trc_TotLibFB));
1028    WrtHrTrc('trc_LibFyFB:      '||to_char(trc_LibFyFB));
1029    WrtHrTrc('trc_LibFpFB:      '||to_char(trc_LibFpFB));
1030    -- Travel Allowance
1031    WrtHrTrc('trc_TrvAllYtd:    '||to_char(trc_TrvAllYtd));
1032    WrtHrTrc('trc_TrvAllPtd:    '||to_char(trc_TrvAllPtd));
1033    WrtHrTrc('trc_TrvAllErn:    '||to_char(trc_TrvAllErn));
1034    WrtHrTrc('trc_TxbTrvInc:    '||to_char(trc_TxbTrvInc));
1035    WrtHrTrc('trc_TotLibTA:     '||to_char(trc_TotLibTA));
1036    WrtHrTrc('trc_LibFyTA:      '||to_char(trc_LibFyTA));
1037    WrtHrTrc('trc_LibFpTA:      '||to_char(trc_LibFpTA));
1038    -- Annual Bonus
1039    WrtHrTrc('trc_AnnBonYtd:    '||to_char(trc_AnnBonYtd));
1040    WrtHrTrc('trc_AnnBonPtd:    '||to_char(trc_AnnBonPtd));
1041    WrtHrTrc('trc_AnnBonErn:    '||to_char(trc_AnnBonErn));
1042    WrtHrTrc('trc_TxbAnnBonInc: '||to_char(trc_TxbAnnBonInc));
1043    WrtHrTrc('trc_TotLibAB:     '||to_char(trc_TotLibAB));
1044    WrtHrTrc('trc_LibFyAB:      '||to_char(trc_LibFyAB));
1045    WrtHrTrc('trc_LibFpAB:      '||to_char(trc_LibFpAB));
1046    -- Annual Payments
1047    WrtHrTrc('trc_AnnPymYtd:    '||to_char(trc_AnnPymYtd));
1048    WrtHrTrc('trc_AnnPymPtd:    '||to_char(trc_AnnPymPtd));
1049    WrtHrTrc('trc_AnnPymErn:    '||to_char(trc_AnnPymErn));
1050    WrtHrTrc('trc_TxbAnnPymInc: '||to_char(trc_TxbAnnPymInc));
1051    WrtHrTrc('trc_TotLibAP:     '||to_char(trc_TotLibAP));
1052    WrtHrTrc('trc_LibFyAP:      '||to_char(trc_LibFyAP));
1053    WrtHrTrc('trc_LibFpAP:      '||to_char(trc_LibFpAP));
1054    -- Pubilc Office Allowance
1055    WrtHrTrc('trc_PblOffYtd:    '||to_char(trc_PblOffYtd));
1056    WrtHrTrc('trc_PblOffPtd:    '||to_char(trc_PblOffPtd));
1057    WrtHrTrc('trc_PblOffErn:    '||to_char(trc_PblOffErn));
1058    WrtHrTrc('trc_LibFyPO:      '||to_char(trc_LibFyPO));
1059    WrtHrTrc('trc_LibFpPO:      '||to_char(trc_LibFpPO));
1060 
1061 EXCEPTION
1062    WHEN OTHERS THEN
1063       IF xpt_Msg = 'No Error' THEN
1064          xpt_Msg := 'LteCalc: '||TO_CHAR(SQLCODE);
1065       END IF;
1066       RAISE xpt_E;
1067 END LteCalc;
1068 -------------------------------------------------------------------------------
1069 -- SeaCalc                                                                   --
1070 -- Tax Calculation for Seasonal Workers                                      --
1071 -------------------------------------------------------------------------------
1072 PROCEDURE SeaCalc AS
1073 -- Variables
1074 --
1075    l_Np       BALANCE DEFAULT 0;
1076    l_65Year   DATE;
1077 
1078 BEGIN
1079    hr_utility.set_location('py_za_tx_01032005.SeaCalc',1);
1080 -- Identify the calculation
1081 --
1082    trc_CalTyp := 'SeaCalc';
1083 
1084 -- Period Type Income
1085 --
1086    trc_TxbIncPtd :=
1087       ( bal_TOT_TXB_NI_RUN
1088       + bal_TOT_TXB_FB_RUN
1089       );
1090 -- Check if any Period Income Exists
1091 --
1092    hr_utility.set_location('py_za_tx_01032005.SeaCalc',2);
1093    IF trc_TxbIncPtd = 0 THEN -- Pre-Earnings Calc
1094       hr_utility.set_location('py_za_tx_01032005.SeaCalc',3);
1095       -- Site Factor
1096       --
1097       trc_SitFactor := glb_ZA_WRK_DYS_PR_YR / dbi_SEA_WRK_DYS_WRK;
1098 
1099       -- Tax Rebates, Threshold Figure and Medical Aid
1100       -- Abatements
1101       -- Calculate the assignments 65 Year Date
1102       l_65Year := add_months(dbi_PER_DTE_OF_BRTH,780);
1103 
1104       IF l_65Year BETWEEN dbi_ZA_TX_YR_STRT AND dbi_ZA_TX_YR_END THEN
1105          hr_utility.set_location('py_za_tx_01032005.SeaCalc',4);
1106          -- give the extra abatement
1107          trc_Rebate    := glb_ZA_PRI_TX_RBT + glb_ZA_ADL_TX_RBT;
1108          trc_Threshold := glb_ZA_SC_TX_THRSHLD;
1109       ELSE
1110          hr_utility.set_location('py_za_tx_01032005.SeaCalc',5);
1111          -- not eligable for extra abatement
1112          trc_Rebate    := glb_ZA_PRI_TX_RBT;
1113          trc_Threshold := glb_ZA_PRI_TX_THRSHLD;
1114       END IF;
1115 
1116    -- Base Income
1117    --
1118       -- Base Income
1119       trc_BseErn := bal_TOT_TXB_AP_RUN;
1120       -- Taxable Base Income
1121       trc_TxbBseInc := trc_BseErn * trc_SitFactor;
1122       -- Threshold Check
1123       IF trc_TxbBseInc >= trc_Threshold THEN
1124          hr_utility.set_location('py_za_tx_01032005.SeaCalc',6);
1125          -- Tax Liability
1126          trc_TotLibBse := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbBseInc);
1127       ELSE
1128          hr_utility.set_location('py_za_tx_01032005.SeaCalc',7);
1129          trc_TotLibBse := 0;
1130       END IF;
1131 
1132    -- Annual Payments
1133    --
1134       -- Taxable Annual Payments Income
1135       trc_TxbAnnPymInc := trc_BseErn + trc_TxbBseInc;-- AP was taken as base!
1136       -- Threshold Check
1137       IF trc_TxbAnnPymInc >= trc_Threshold THEN
1138          hr_utility.set_location('py_za_tx_01032005.SeaCalc',8);
1139          -- Tax Liability
1140          trc_TotLibAP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnPymInc);
1141          trc_LibFpAP  := trc_TotLibAP - least(trc_TotLibAP,trc_TotLibBse);
1142       ElSE
1143          hr_utility.set_location('py_za_tx_01032005.SeaCalc',9);
1144          trc_LibFpAP := 0;
1145       END IF;
1146 
1147       -- Base Income
1148       WrtHrTrc('trc_BseErn: '      ||to_char(trc_BseErn));
1149       WrtHrTrc('trc_TxbBseInc: '   ||to_char(trc_TxbBseInc));
1150       WrtHrTrc('trc_TotLibBse: '   ||to_char(trc_TotLibBse));
1151       -- Annual Payments
1152       WrtHrTrc('trc_AnnPymYtd: '   ||to_char(trc_AnnPymYtd));
1153       WrtHrTrc('trc_AnnPymPtd: '   ||to_char(trc_AnnPymPtd));
1154       WrtHrTrc('trc_AnnPymErn: '   ||to_char(trc_AnnPymErn));
1155       WrtHrTrc('trc_TxbAnnPymInc: '||to_char(trc_TxbAnnPymInc));
1156       WrtHrTrc('trc_TotLibAP: '    ||to_char(trc_TotLibAP));
1157       WrtHrTrc('trc_LibFyAP: '     ||to_char(trc_LibFyAP));
1158       WrtHrTrc('trc_LibFpAP: '     ||to_char(trc_LibFpAP));
1159 
1160 
1161    ELSE
1162       hr_utility.set_location('py_za_tx_01032005.SeaCalc',10);
1163       -- Site Factor
1164       --
1165       trc_SitFactor := glb_ZA_WRK_DYS_PR_YR / dbi_SEA_WRK_DYS_WRK;
1166 
1167       -- Rebates
1168       py_za_tx_utl_01032005.SetRebates;
1169 
1170       -- Abatements
1171       py_za_tx_utl_01032005.Abatements;
1172 
1173    hr_utility.set_location('py_za_tx_01032005.SeaCalc',11);
1174 
1175    -- Normal Income
1176    --
1177       -- Run Normal Income
1178       trc_NorIncPtd := bal_TOT_TXB_NI_RUN;
1179       -- Skip the calculation if there is No Income
1180       IF trc_NorIncPtd <> 0 THEN
1181          hr_utility.set_location('py_za_tx_01032005.SeaCalc',12);
1182          -- Normal Earnings
1183          trc_NorErn := trc_NorIncPtd * trc_SitFactor;
1184          -- Taxable Normal Income
1185          trc_TxbNorInc := trc_NorErn - trc_PerTotAbm;
1186          -- Threshold Check
1187          IF trc_TxbNorInc >= trc_Threshold THEN
1188             hr_utility.set_location('py_za_tx_01032005.SeaCalc',13);
1189             -- Tax Liability
1190             trc_TotLibNI := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbNorInc);
1191             trc_LibFyNI  := trc_TotLibNI - 0;
1192             trc_TotLibNI := greatest(trc_TotLibNI,0);
1193             trc_LibFpNI  := trc_LibFyNI / trc_SitFactor;
1194          ELSE
1195             hr_utility.set_location('py_za_tx_01032005.SeaCalc',14);
1196             trc_TotLibNI := 0;
1197          END IF;
1198       ELSE
1199          hr_utility.set_location('py_za_tx_01032005.SeaCalc',15);
1200          trc_NorErn    := 0;
1201          trc_TxbNorInc := 0;
1202          trc_TotLibNI  := 0;
1203       END IF;
1204 
1205    -- Fringe Benefits
1206    --
1207       -- Run Fringe Benefits
1208       trc_FrnBenPtd := bal_TOT_TXB_FB_RUN;
1209       -- Skip the calculation if there is No Income
1210       IF trc_FrnBenPtd <> 0 THEN
1211          hr_utility.set_location('py_za_tx_01032005.SeaCalc',16);
1212          -- Fringe Benefit Earnings
1213          trc_FrnBenErn := trc_FrnBenPtd * trc_SitFactor + trc_NorErn;
1214          -- Taxable Fringe Income
1215          trc_TxbFrnInc := trc_FrnBenErn - trc_PerTotAbm;
1216          -- Threshold Check
1217          IF trc_TxbFrnInc >= trc_Threshold THEN
1218             hr_utility.set_location('py_za_tx_01032005.SeaCalc',17);
1219             -- Tax Liability
1220             trc_TotLibFB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbFrnInc);
1221             trc_LibFyFB  := trc_TotLibFB - least(trc_TotLibFB,trc_TotLibNI);
1222             trc_TotLibFB := greatest(trc_TotLibFB,trc_TotLibNI);
1223             trc_LibFpFB  := trc_LibFyFB / trc_SitFactor;
1224          ELSE
1225             hr_utility.set_location('py_za_tx_01032005.SeaCalc',18);
1226             trc_TotLibFB := trc_TotLibNI;
1227          END IF;
1228       ELSE
1229          hr_utility.set_location('py_za_tx_01032005.SeaCalc',19);
1230          trc_FrnBenErn := trc_NorErn;
1231          trc_TxbFrnInc := trc_TxbNorInc;
1232          trc_TotLibFB  := trc_TotLibNI;
1233       END IF;
1234 
1235    -- Annual Payments
1236    --
1237       -- Run Annual Payments
1238       trc_AnnPymPtd :=  bal_TOT_TXB_AP_RUN;
1239       -- Skip the calculation if there is No Income
1240       IF trc_AnnPymPtd <> 0 THEN
1241          hr_utility.set_location('py_za_tx_01032005.SeaCalc',20);
1242          -- Annual Payments Earnings
1243          trc_AnnPymErn := trc_AnnPymPtd + trc_FrnBenErn;
1244          -- Taxable Annual Payments Income
1245          trc_TxbAnnPymInc := trc_AnnPymErn - trc_AnnTotAbm;
1246          -- Threshold Check
1247          IF trc_TxbAnnPymInc >= trc_Threshold THEN
1248             hr_utility.set_location('py_za_tx_01032005.SeaCalc',21);
1249             -- Tax Liability
1250             trc_TotLibAP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnPymInc);
1251             trc_LibFyAP  := trc_TotLibAP - least(trc_TotLibAP,trc_TotLibFB);
1252             trc_TotLibAP := greatest(trc_TotLibAP,trc_TotLibFB);
1253             trc_LibFpAP  := trc_LibFyAP;
1254          ELSE
1255             hr_utility.set_location('py_za_tx_01032005.SeaCalc',22);
1256             trc_TotLibAP := trc_TotLibFB;
1257          END IF;
1258       ELSE
1259          hr_utility.set_location('py_za_tx_01032005.SeaCalc',23);
1260          trc_AnnPymErn    := trc_FrnBenErn;
1261          trc_TxbAnnPymInc := trc_TxbFrnInc;
1262          trc_TotLibAP     := trc_TotLibFB;
1263       END IF;
1264 
1265 
1266    -- Net Pay Validation
1267    --
1268       py_za_tx_utl_01032005.ValidateTaxOns;
1269 
1270    hr_utility.set_location('py_za_tx_01032005.SeaCalc',24);
1271 
1272    -- Set IT3A Indicator
1273    --
1274       IF trc_TxbAnnPymInc + trc_PblOffErn >= trc_Threshold THEN
1275          hr_utility.set_location('py_za_tx_01032005.SeaCalc',25);
1276          trc_It3Ind := 0; -- Over Lim
1277       ELSE
1278          hr_utility.set_location('py_za_tx_01032005.SeaCalc',26);
1279          trc_It3Ind := 1; -- Under Lim
1280       END IF;
1281    END IF;
1282 
1283    -- Normal Income
1284    WrtHrTrc('trc_NorIncYtd:    '||to_char(trc_NorIncYtd));
1285    WrtHrTrc('trc_NorIncPtd:    '||to_char(trc_NorIncPtd));
1286    WrtHrTrc('trc_NorErn:       '||to_char(trc_NorErn));
1287    WrtHrTrc('trc_TxbNorInc:    '||to_char(trc_TxbNorInc));
1288    WrtHrTrc('trc_TotLibNI:     '||to_char(trc_TotLibNI));
1289    WrtHrTrc('trc_LibFyNI:      '||to_char(trc_LibFyNI));
1290    WrtHrTrc('trc_LibFpNI:      '||to_char(trc_LibFpNI));
1291    -- Fringe Benefits
1292    WrtHrTrc('trc_FrnBenYtd:    '||to_char(trc_FrnBenYtd));
1293    WrtHrTrc('trc_FrnBenPtd:    '||to_char(trc_FrnBenPtd));
1294    WrtHrTrc('trc_FrnBenErn:    '||to_char(trc_FrnBenErn));
1295    WrtHrTrc('trc_TxbFrnInc:    '||to_char(trc_TxbFrnInc));
1296    WrtHrTrc('trc_TotLibFB:     '||to_char(trc_TotLibFB));
1297    WrtHrTrc('trc_LibFyFB:      '||to_char(trc_LibFyFB));
1298    WrtHrTrc('trc_LibFpFB:      '||to_char(trc_LibFpFB));
1299    -- Annual Payments
1300    WrtHrTrc('trc_AnnPymYtd:    '||to_char(trc_AnnPymYtd));
1301    WrtHrTrc('trc_AnnPymPtd:    '||to_char(trc_AnnPymPtd));
1302    WrtHrTrc('trc_AnnPymErn:    '||to_char(trc_AnnPymErn));
1303    WrtHrTrc('trc_TxbAnnPymInc: '||to_char(trc_TxbAnnPymInc));
1304    WrtHrTrc('trc_TotLibAP:     '||to_char(trc_TotLibAP));
1305    WrtHrTrc('trc_LibFyAP:      '||to_char(trc_LibFyAP));
1306    WrtHrTrc('trc_LibFpAP:      '||to_char(trc_LibFpAP));
1307 
1308 EXCEPTION
1309    WHEN OTHERS THEN
1310       IF xpt_Msg = 'No Error' THEN
1311          xpt_Msg := 'SeaCalc: '||TO_CHAR(SQLCODE);
1312       END IF;
1313       RAISE xpt_E;
1314 END SeaCalc;
1315 
1316 -------------------------------------------------------------------------------
1317 -- SitCalc                                                                   --
1318 -- End of Year Tax Calculation                                               --
1319 -------------------------------------------------------------------------------
1320 PROCEDURE SitCalc AS
1321 -- Variables
1322 --
1323    l_Sl       BOOLEAN;
1324    l_Np       BALANCE;
1325 
1326 BEGIN
1327 
1328    hr_utility.set_location('py_za_tx_01032005.SitCalc',1);
1329 -- Identify the calculation
1330 --
1331    trc_CalTyp := 'SitCalc';
1332 
1333 -- Update Global Balance Values with correct TAXABLE values
1334 --
1335    py_za_tx_utl_01032005.TrvAll;
1336 
1337    hr_utility.set_location('py_za_tx_01032005.SitCalc',2);
1338 
1339    bal_TOT_TXB_PO_YTD  := bal_TOT_TXB_PO_YTD * glb_ZA_PBL_TX_PRC / 100;
1340 
1341 -- Ytd Taxable Income
1342 --
1343  trc_TxbIncYtd :=
1344     ( bal_TOT_TXB_NI_YTD
1345     + bal_TOT_TXB_FB_YTD
1346     + bal_TOT_TXB_TA_YTD
1347     + bal_BP_YTD
1348     );
1349    hr_utility.set_location('py_za_tx_01032005.SitCalc',3);
1350 
1351 -- Site Factor
1352 --
1353    trc_SitFactor := dbi_ZA_DYS_IN_YR / py_za_tx_utl_01032005.DaysWorked;
1354 
1355    hr_utility.set_location('py_za_tx_01032005.SitCalc',4);
1356 
1357 -- Rebates
1358    py_za_tx_utl_01032005.SetRebates;
1359 
1360 -- Abatements
1361    py_za_tx_utl_01032005.Abatements;
1362 
1363    hr_utility.set_location('py_za_tx_01032005.SitCalc',5);
1364 
1365 -- Deemed Remuneration
1366 --
1367    -- Run Deemed Remuneration
1368    trc_DmdRmnRun := bal_DIR_DMD_RMN_ITD;
1369 
1370    -- Skip the calculation if there is No Income
1371    IF trc_DmdRmnRun <> 0 THEN
1372       hr_utility.set_location('py_za_tx_01032005.SitCalc',6);
1373       -- Taxable Deemed Remuneration
1374       trc_TxbDmdRmn := trc_DmdRmnRun;
1375       -- Threshold Check
1376       IF trc_TxbDmdRmn >= trc_Threshold THEN
1377          hr_utility.set_location('py_za_tx_01032005.SitCalc',7);
1378          -- Tax Liability
1379          trc_TotLibDR := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbDmdRmn);
1380          trc_LibFyDR  := (trc_TotLibDR - 0) / trc_SitFactor;
1381          trc_TotLibDR := greatest(trc_TotLibDR,0);
1382          trc_LibFpDR  := trc_LibFyDR - bal_TX_ON_DR_YTD;
1383       ELSE
1384          hr_utility.set_location('py_za_tx_01032005.SitCalc',8);
1385          -- Set Cascade Figures and Refund
1386          trc_TotLibDR   := 0;
1387          trc_LibFpDR    := -1 * bal_TX_ON_DR_YTD;
1388          trc_LibFpDROvr := TRUE;
1389       END IF;
1390    ELSE
1391       hr_utility.set_location('py_za_tx_01032005.SitCalc',9);
1392       -- Set Cascade Figures and Refund
1393       trc_TxbDmdRmn  := 0;
1394       trc_TotLibDR   := 0;
1395       trc_LibFpDR    := -1 * bal_TX_ON_DR_YTD;
1396       trc_LibFpDROvr := TRUE;
1397    END IF;
1398 
1399    hr_utility.set_location('py_za_tx_01032005.SitCalc',10);
1400 
1401 -- Normal Income
1402 --
1403    -- Ytd Normal Income
1404    trc_NorIncYtd := bal_TOT_TXB_NI_YTD;
1405    -- Skip the calculation if there is No Income
1406    IF trc_NorIncYtd <> 0 THEN
1407       hr_utility.set_location('py_za_tx_01032005.SitCalc',11);
1408       -- Normal Earnings
1409       trc_NorErn := trc_NorIncYtd * trc_SitFactor;
1410       -- Taxable Normal Income
1411       trc_TxbNorInc := trc_NorErn - trc_PerTotAbm;
1412       -- Threshold Check
1413       IF trc_TxbNorInc >= trc_Threshold THEN
1414          hr_utility.set_location('py_za_tx_01032005.SitCalc',12);
1415          -- Tax Liability
1416          trc_TotLibNI := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbNorInc);
1417          trc_LibFyNI  := (trc_TotLibNI - least(trc_TotLibNI,trc_TotLibDR)) / trc_SitFactor;
1418          trc_TotLibNI := greatest(trc_TotLibNI,trc_TotLibDR);
1419          trc_LibFpNI  := trc_LibFyNI - bal_TX_ON_NI_YTD;
1420       ELSE
1421          hr_utility.set_location('py_za_tx_01032005.SitCalc',13);
1422          -- Set Cascade Figures and Refund
1423          trc_TotLibNI   := trc_TotLibDR;
1424          trc_LibFpNI    := -1 * bal_TX_ON_NI_YTD;
1425          trc_LibFpNIOvr := TRUE;
1426       END IF;
1427    ELSE
1428       hr_utility.set_location('py_za_tx_01032005.SitCalc',14);
1429       -- Set Cascade Figures and Refund
1430       trc_NorErn     := 0;
1431       trc_TxbNorInc  := 0;
1432       trc_TotLibNI   := trc_TotLibDR;
1433       trc_LibFpNI    := -1 * bal_TX_ON_NI_YTD;
1434       trc_LibFpNIOvr := TRUE;
1435    END IF;
1436 
1437 -- Fringe Benefits
1438 --
1439    -- Ytd Fringe Benefits
1440    trc_FrnBenYtd := bal_TOT_TXB_FB_YTD;
1441    -- Skip the calculation if there is No Income
1442    IF trc_FrnBenYtd <> 0 THEN
1443       hr_utility.set_location('py_za_tx_01032005.SitCalc',15);
1444       -- Fringe Benefit Earnings
1445       trc_FrnBenErn := trc_FrnBenYtd * trc_SitFactor + trc_NorErn;
1446       -- Taxable Fringe Income
1447       trc_TxbFrnInc := trc_FrnBenErn - trc_PerTotAbm;
1448       -- Threshold Check
1449       IF trc_TxbFrnInc >= trc_Threshold THEN
1450          hr_utility.set_location('py_za_tx_01032005.SitCalc',16);
1451          -- Tax Liability
1452          trc_TotLibFB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbFrnInc);
1453          trc_LibFyFB  := (trc_TotLibFB - least(trc_TotLibFB,trc_TotLibNI)) / trc_SitFactor;
1454          trc_TotLibFB := greatest(trc_TotLibFB,trc_TotLibNI);
1455          trc_LibFpFB  := trc_LibFyFB - bal_TX_ON_FB_YTD;
1456       ElSE
1457          hr_utility.set_location('py_za_tx_01032005.SitCalc',17);
1458          -- Set Cascade Figures and Refund
1459          trc_TotLibFB   := trc_TotLibNI;
1460          trc_LibFpFB    := -1 * bal_TX_ON_FB_YTD;
1461          trc_LibFpFBOvr := TRUE;
1462       END IF;
1463    ELSE
1464       hr_utility.set_location('py_za_tx_01032005.SitCalc',18);
1465       -- Set Cascade Figures and Refund
1466       trc_FrnBenErn  := trc_NorErn;
1467       trc_TxbFrnInc  := trc_TxbNorInc;
1468       trc_TotLibFB   := trc_TotLibNI;
1469       trc_LibFpFB    := -1 * bal_TX_ON_FB_YTD;
1470       trc_LibFpFBOvr := TRUE;
1471    END IF;
1472 
1473 -- Travel Allowance
1474 --
1475    -- Ytd Travel Allowance
1476    trc_TrvAllYtd := bal_TOT_TXB_TA_YTD;
1477    -- Skip the calculation if there is No Income
1478    IF trc_TrvAllYtd <> 0 THEN
1479       hr_utility.set_location('py_za_tx_01032005.SitCalc',19);
1480       -- Travel Earnings
1481       trc_TrvAllErn := trc_TrvAllYtd * trc_SitFactor + trc_FrnBenErn;
1482       -- Taxable Travel Income
1483       trc_TxbTrvInc := trc_TrvAllErn - trc_PerTotAbm;
1484       -- Threshold Check
1485       IF trc_TxbTrvInc >= trc_Threshold THEN
1486          hr_utility.set_location('py_za_tx_01032005.SitCalc',20);
1487          -- Tax Liability
1488          trc_TotLibTA := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbTrvInc);
1489          trc_LibFyTA  := (trc_TotLibTA - least(trc_TotLibTA,trc_TotLibFB)) / trc_SitFactor;
1490          trc_TotLibTA := greatest(trc_TotLibTA,trc_TotLibFB);
1491          trc_LibFpTA  := trc_LibFyTA - bal_TX_ON_TA_YTD;
1492       ELSE
1493          hr_utility.set_location('py_za_tx_01032005.SitCalc',21);
1494          -- Set Cascade Figures and Refund
1495          trc_TotLibTA   := trc_TotLibFB;
1496          trc_LibFpTA    := -1 * bal_TX_ON_TA_YTD;
1497          trc_LibFpTAOvr := TRUE;
1498       END IF;
1499    ELSE
1500       hr_utility.set_location('py_za_tx_01032005.SitCalc',22);
1501       -- Set Cascade Figures and Refund
1502       trc_TrvAllErn  := trc_FrnBenErn;
1503       trc_TxbTrvInc  := trc_TxbFrnInc;
1504       trc_TotLibTA   := trc_TotLibFB;
1505       trc_LibFpTA    := -1 * bal_TX_ON_TA_YTD;
1506       trc_LibFpTAOvr := TRUE;
1507    END IF;
1508 
1509 -- Bonus Provision
1510 --
1511    -- Ytd Bonus Prvision
1512    trc_BonProYtd := bal_BP_YTD;
1513    -- Skip the calculation if there is No Income
1514    IF trc_BonProYtd <> 0 THEN
1515       hr_utility.set_location('py_za_tx_01032005.SitCalc',23);
1516       -- Bonus Provision Earnings
1517       trc_BonProErn := trc_BonProYtd * trc_SitFactor + trc_TrvAllErn;
1518       -- Taxable Bonus Provision Income
1519       trc_TxbBonProInc := trc_BonProErn - trc_PerTotAbm;
1520       -- Threshold Check
1521       IF trc_TxbBonProInc >= trc_Threshold THEN
1522          hr_utility.set_location('py_za_tx_01032005.SitCalc',24);
1523          -- Tax Liability
1524          trc_TotLibBP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbBonProInc);
1525          trc_LibFyBP  := (trc_TotLibBP - least(trc_TotLibBP,trc_TotLibTA)) / trc_SitFactor;
1526          trc_TotLibBP := greatest(trc_TotLibBP,trc_TotLibTA);
1527          trc_LibFpBP  := trc_LibFyBP - bal_TX_ON_BP_YTD;
1528       ELSE
1529          hr_utility.set_location('py_za_tx_01032005.SitCalc',25);
1530          -- Set Cascade Figures and Refund
1531          trc_TotLibBP   := trc_TotLibTA;
1532          trc_LibFpBP    := -1 * bal_TX_ON_BP_YTD;
1533          trc_LibFpBPOvr := TRUE;
1534       END IF;
1535    ELSE
1536       hr_utility.set_location('py_za_tx_01032005.SitCalc',26);
1537       -- Set Cascade Figures and Refund
1538       trc_BonProErn    := trc_TrvAllErn;
1539       trc_TxbBonProInc := trc_TxbTrvInc;
1540       trc_TotLibBP     := trc_TotLibTA;
1541       trc_LibFpBP      := -1 * bal_TX_ON_BP_YTD;
1542       trc_LibFpBPOvr   := TRUE;
1543    END IF;
1544 
1545 -- Annual Bonus
1546 --
1547    -- Ytd Annual Bonus
1548    trc_AnnBonYtd := bal_TOT_TXB_AB_YTD;
1549    -- Skip the calculation if there is No Income
1550    IF trc_AnnBonYtd <> 0 THEN
1551       hr_utility.set_location('py_za_tx_01032005.SitCalc',27);
1552       -- Annual Bonus Earnings
1553       trc_AnnBonErn := trc_AnnBonYtd + trc_TrvAllErn;
1554       -- Taxable Annual Bonus Income
1555       trc_TxbAnnBonInc := trc_AnnBonErn - trc_AnnTotAbm;
1556       -- Threshold Check
1557       IF trc_TxbAnnBonInc >= trc_Threshold THEN
1558          hr_utility.set_location('py_za_tx_01032005.SitCalc',28);
1559          -- Tax Liability
1560          trc_TotLibAB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnBonInc);
1561          trc_LibFyAB := trc_TotLibAB - least(trc_TotLibAB,trc_TotLibTA);
1562          trc_TotLibAB := greatest(trc_TotLibAB,trc_TotLibTA);
1563          hr_utility.set_location('py_za_tx_01032005.SitCalc',29);
1564          -- Check Bonus Provision
1565          IF trc_BonProYtd <> 0 THEN
1566             hr_utility.set_location('py_za_tx_01032005.SitCalc',30);
1567             -- Check Bonus Provision Frequency
1568             IF dbi_BP_TX_RCV = 'B' OR py_za_tx_utl_01032005.SitePeriod THEN
1569                hr_utility.set_location('py_za_tx_01032005.SitCalc',31);
1570                trc_LibFpAB :=
1571                trc_LibFyAB - (bal_TX_ON_BP_YTD
1572                              + trc_LibFpBP
1573                              + bal_TX_ON_AB_YTD);
1574             ELSE
1575                hr_utility.set_location('py_za_tx_01032005.SitCalc',32);
1576                trc_LibFpAB := 0;
1577             END IF;
1578          ELSE
1579             hr_utility.set_location('py_za_tx_01032005.SitCalc',33);
1580             trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
1581          END IF;
1582       ELSE
1583          hr_utility.set_location('py_za_tx_01032005.SitCalc',34);
1584          -- Set Cascade Figures and Refund
1585          trc_TotLibAB   := trc_TotLibTA;
1586          trc_LibFpAB    := -1 * bal_TX_ON_AB_YTD;
1587          trc_LibFpABOvr := TRUE;
1588       END IF;
1589    ELSE
1590       hr_utility.set_location('py_za_tx_01032005.SitCalc',35);
1591       -- Set Cascade Figures and Refund
1592       trc_LibFpAB      := -1 * bal_TX_ON_AB_YTD;
1593       trc_LibFpABOvr   := TRUE;
1594 
1595       IF dbi_BP_TX_RCV = 'A' AND py_za_tx_utl_01032005.SitePeriod THEN
1596          hr_utility.set_location('py_za_tx_01032005.SitCalc',36);
1597          trc_LibFpBP      := -1 * bal_TX_ON_BP_YTD;
1598          trc_LibFpBPOvr   := TRUE;
1599          trc_LibFpAPOvr   := TRUE;
1600 
1601          trc_AnnBonErn    := trc_TrvAllErn;
1602          trc_TxbAnnBonInc := trc_TxbTrvInc;
1603          trc_TotLibAB     := trc_TotLibTA;
1604       ELSE
1605          hr_utility.set_location('py_za_tx_01032005.SitCalc',37);
1606          trc_AnnBonErn    := trc_BonProErn;
1607          trc_TxbAnnBonInc := trc_TxbBonProInc;
1608          trc_TotLibAB     := trc_TotLibBP;
1609       END IF;
1610    END IF;
1611 
1612 -- Annual Payments
1613 --
1614    -- Ytd Annual Payments
1615    trc_AnnPymYtd := bal_TOT_TXB_AP_YTD;
1616    -- Skip the calculation if there is No Income
1617    IF trc_AnnPymYtd <> 0 THEN
1618       hr_utility.set_location('py_za_tx_01032005.SitCalc',38);
1619       -- Annual Payments Earnings
1620       trc_AnnPymErn := trc_AnnPymYtd + trc_AnnBonErn;
1621       -- Taxable Annual Payments Income
1622       trc_TxbAnnPymInc := trc_AnnPymErn - trc_AnnTotAbm;
1623       -- Threshold Check
1624       IF trc_TxbAnnPymInc >= trc_Threshold THEN
1625          hr_utility.set_location('py_za_tx_01032005.SitCalc',39);
1626          -- Tax Liability
1627          trc_TotLibAP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnPymInc);
1628          trc_LibFyAP  := trc_TotLibAP - least(trc_TotLibAP,trc_TotLibAB);
1629          trc_TotLibAP := greatest(trc_TotLibAP,trc_TotLibAB);
1630          trc_LibFpAP  := trc_LibFyAP - bal_TX_ON_AP_YTD;
1631       ELSE
1632          hr_utility.set_location('py_za_tx_01032005.SitCalc',40);
1633          -- Set Cascade Figures and Refund
1634          trc_TotLibAP   := trc_TotLibAB;
1635          trc_LibFpAP    := -1 * bal_TX_ON_AP_YTD;
1636          trc_LibFpAPOvr := TRUE;
1637       END IF;
1638    ELSE
1639       hr_utility.set_location('py_za_tx_01032005.SitCalc',41);
1640       -- Set Cascade Figures and Refund
1641       trc_AnnPymErn    := trc_AnnBonErn;
1642       trc_TxbAnnPymInc := trc_TxbAnnBonInc;
1643       trc_TotLibAP     := trc_TotLibAB;
1644       trc_LibFpAP      := -1 * bal_TX_ON_AP_YTD;
1645       trc_LibFpAPOvr   := TRUE;
1646    END IF;
1647 
1648 -- Public Office Allowance
1649 --
1650    -- Ytd Public Office Allowance
1651    trc_PblOffYtd := bal_TOT_TXB_PO_YTD;
1652    -- Skip the calculation if there is No Income
1653    IF trc_PblOffYtd <> 0 THEN
1654       hr_utility.set_location('py_za_tx_01032005.SitCalc',42);
1655       -- Public Office Earnings
1656       trc_PblOffErn := trc_PblOffYtd * trc_SitFactor;
1657       -- Tax Liability
1658       trc_LibFyPO := (trc_PblOffErn * glb_ZA_PBL_TX_RTE / 100)/trc_SitFactor;
1659       trc_LibFpPO := trc_LibFyPO -  bal_TX_ON_PO_YTD;
1660    ELSE
1661       hr_utility.set_location('py_za_tx_01032005.SitCalc',43);
1662       -- Set Cascade Figures and Refund
1663       trc_LibFyPO    := 0;
1664       trc_LibFpPO    := -1 * bal_TX_ON_PO_YTD;
1665       trc_LibFpPOOvr := TRUE;
1666    END IF;
1667 
1668 -- Net Pay Validation
1669 --
1670    -- Net Pay of the Employee
1671    l_Np := bal_NET_PAY_RUN;
1672    -- Site Limit Check
1673    IF trc_TxbAnnPymInc + trc_PblOffErn < glb_ZA_SIT_LIM THEN
1674       hr_utility.set_location('py_za_tx_01032005.SitCalc',44);
1675       l_Sl := TRUE;
1676    ELSE
1677       hr_utility.set_location('py_za_tx_01032005.SitCalc',45);
1678       l_Sl := FALSE;
1679    END IF;
1680 
1681    py_za_tx_utl_01032005.ValidateTaxOns(p_Rf => l_Sl);
1682 
1683    hr_utility.set_location('py_za_tx_01032005.SitCalc',46);
1684 
1685 -- Set IT3A Indicator
1686 --
1687    IF trc_TxbAnnPymInc + trc_PblOffErn >= trc_Threshold THEN
1688       hr_utility.set_location('py_za_tx_01032005.SitCalc',47);
1689       trc_It3Ind := 0; -- Over Lim
1690    ELSE
1691       hr_utility.set_location('py_za_tx_01032005.SitCalc',48);
1692       trc_It3Ind := 1; -- Under Lim
1693    END IF;
1694 
1695 -- Calculate Total Taxable Income and pass out
1696 --
1697    trc_OUpdFig := (trc_TxbAnnPymInc + trc_PblOffErn) - bal_TOT_TXB_INC_ITD;
1698 
1699    hr_utility.set_location('py_za_tx_01032005.SitCalc',49);
1700 
1701    -- Deemed Remuneration
1702    WrtHrTrc('trc_TxbDmdRmn:    '||to_char(trc_TxbDmdRmn));
1703    WrtHrTrc('trc_TotLibDR:     '||to_char(trc_TotLibDR));
1704    WrtHrTrc('trc_LibFyDR:      '||to_char(trc_LibFyDR));
1705    WrtHrTrc('trc_LibFpDR:      '||to_char(trc_LibFpDR));
1706    -- Base Income
1707    WrtHrTrc('trc_BseErn:       '||to_char(trc_BseErn));
1708    WrtHrTrc('trc_TxbBseInc:    '||to_char(trc_TxbBseInc));
1709    WrtHrTrc('trc_TotLibBse:    '||to_char(trc_TotLibBse));
1710    -- Normal Income
1711    WrtHrTrc('trc_NorIncYtd:    '||to_char(trc_NorIncYtd));
1712    WrtHrTrc('trc_NorIncPtd:    '||to_char(trc_NorIncPtd));
1713    WrtHrTrc('trc_NorErn:       '||to_char(trc_NorErn));
1714    WrtHrTrc('trc_TxbNorInc:    '||to_char(trc_TxbNorInc));
1715    WrtHrTrc('trc_TotLibNI:     '||to_char(trc_TotLibNI));
1716    WrtHrTrc('trc_LibFyNI:      '||to_char(trc_LibFyNI));
1717    WrtHrTrc('trc_LibFpNI:      '||to_char(trc_LibFpNI));
1718    -- Fringe Benefits
1719    WrtHrTrc('trc_FrnBenYtd:    '||to_char(trc_FrnBenYtd));
1720    WrtHrTrc('trc_FrnBenPtd:    '||to_char(trc_FrnBenPtd));
1721    WrtHrTrc('trc_FrnBenErn:    '||to_char(trc_FrnBenErn));
1722    WrtHrTrc('trc_TxbFrnInc:    '||to_char(trc_TxbFrnInc));
1723    WrtHrTrc('trc_TotLibFB:     '||to_char(trc_TotLibFB));
1724    WrtHrTrc('trc_LibFyFB:      '||to_char(trc_LibFyFB));
1725    WrtHrTrc('trc_LibFpFB:      '||to_char(trc_LibFpFB));
1726    -- Travel Allowance
1727    WrtHrTrc('trc_TrvAllYtd:    '||to_char(trc_TrvAllYtd));
1728    WrtHrTrc('trc_TrvAllPtd:    '||to_char(trc_TrvAllPtd));
1729    WrtHrTrc('trc_TrvAllErn:    '||to_char(trc_TrvAllErn));
1730    WrtHrTrc('trc_TxbTrvInc:    '||to_char(trc_TxbTrvInc));
1731    WrtHrTrc('trc_TotLibTA:     '||to_char(trc_TotLibTA));
1732    WrtHrTrc('trc_LibFyTA:      '||to_char(trc_LibFyTA));
1733    WrtHrTrc('trc_LibFpTA:      '||to_char(trc_LibFpTA));
1734    -- Bonus Provision
1735    WrtHrTrc('trc_BonProYtd:    '||to_char(trc_BonProYtd));
1736    WrtHrTrc('trc_BonProPtd:    '||to_char(trc_BonProPtd));
1737    WrtHrTrc('trc_BonProErn:    '||to_char(trc_BonProErn));
1738    WrtHrTrc('trc_TxbBonProInc: '||to_char(trc_TxbBonProInc));
1739    WrtHrTrc('trc_TotLibBP:     '||to_char(trc_TotLibBP));
1740    WrtHrTrc('trc_LibFyBP:      '||to_char(trc_LibFyBP));
1741    WrtHrTrc('trc_LibFpBP:      '||to_char(trc_LibFpBP));
1742    -- Annual Bonus
1743    WrtHrTrc('trc_AnnBonYtd:    '||to_char(trc_AnnBonYtd));
1744    WrtHrTrc('trc_AnnBonPtd:    '||to_char(trc_AnnBonPtd));
1745    WrtHrTrc('trc_AnnBonErn:    '||to_char(trc_AnnBonErn));
1746    WrtHrTrc('trc_TxbAnnBonInc: '||to_char(trc_TxbAnnBonInc));
1747    WrtHrTrc('trc_TotLibAB:     '||to_char(trc_TotLibAB));
1748    WrtHrTrc('trc_LibFyAB:      '||to_char(trc_LibFyAB));
1749    WrtHrTrc('trc_LibFpAB:      '||to_char(trc_LibFpAB));
1750    -- Annual Payments
1751    WrtHrTrc('trc_AnnPymYtd:    '||to_char(trc_AnnPymYtd));
1752    WrtHrTrc('trc_AnnPymPtd:    '||to_char(trc_AnnPymPtd));
1753    WrtHrTrc('trc_AnnPymErn:    '||to_char(trc_AnnPymErn));
1754    WrtHrTrc('trc_TxbAnnPymInc: '||to_char(trc_TxbAnnPymInc));
1755    WrtHrTrc('trc_TotLibAP:     '||to_char(trc_TotLibAP));
1756    WrtHrTrc('trc_LibFyAP:      '||to_char(trc_LibFyAP));
1757    WrtHrTrc('trc_LibFpAP:      '||to_char(trc_LibFpAP));
1758 
1759 EXCEPTION
1760    WHEN OTHERS THEN
1761       IF xpt_Msg = 'No Error' THEN
1762          xpt_Msg := 'SitCalc: '||TO_CHAR(SQLCODE);
1763       END IF;
1764       RAISE xpt_E;
1765 END SitCalc;
1766 
1767 -------------------------------------------------------------------------------
1768 -- DirCalc                                                                   --
1769 -- Tax Calculation for Directive Assignments                                 --
1770 -------------------------------------------------------------------------------
1771 PROCEDURE DirCalc AS
1772 -- Variables
1773 --
1774    l_Np       BALANCE DEFAULT 0;
1775 
1776 BEGIN
1777 
1778    hr_utility.set_location('py_za_tx_01032005.DirCalc',1);
1779 -- Identify the calculation
1780 --
1781    trc_CalTyp := 'DirCalc';
1782 
1783 -- Update Global Balance Values with correct TAXABLE values
1784 --
1785    py_za_tx_utl_01032005.TrvAll;
1786 
1787    hr_utility.set_location('py_za_tx_01032005.DirCalc',2);
1788 
1789    bal_TOT_TXB_PO_YTD  := bal_TOT_TXB_PO_YTD * glb_ZA_PBL_TX_PRC / 100;
1790 
1791 -- Normal Income
1792 --
1793    -- Ytd Normal Income
1794    trc_NorIncYtd := bal_TOT_TXB_NI_YTD;
1795    -- Skip the calculation if there is No Income
1796    IF trc_NorIncYtd <> 0 THEN
1797       hr_utility.set_location('py_za_tx_01032005.DirCalc',3);
1798       -- Normal Earnings
1799       trc_NorErn := trc_NorIncYtd;
1800       -- Tax Liability
1801       trc_TotLibNI := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_NorErn);
1802       trc_LibFyNI  := trc_TotLibNI - 0;
1803       trc_TotLibNI := greatest(trc_TotLibNI,0);
1804       trc_LibFpNI  := trc_LibFyNI - bal_TX_ON_NI_YTD;
1805    ELSE
1806       hr_utility.set_location('py_za_tx_01032005.DirCalc',4);
1807       -- Set Cascade Figures and Refund
1808       trc_NorErn     := 0;
1809       trc_TotLibNI   := 0;
1810       trc_LibFpNI    := -1 * bal_TX_ON_NI_YTD;
1811       trc_LibFpNIOvr := TRUE;
1812    END IF;
1813 
1814 -- Fringe Benefits
1815 --
1816    -- Ytd Fringe Benefits
1817      trc_FrnBenYtd := bal_TOT_TXB_FB_YTD;
1818    -- Skip the calculation if there is No Income
1819    IF trc_FrnBenYtd <> 0 THEN
1820       hr_utility.set_location('py_za_tx_01032005.DirCalc',5);
1821       -- Fringe Benefit Earnings
1822       trc_FrnBenErn := trc_FrnBenYtd + trc_NorErn;
1823       -- Tax Liability
1824       trc_TotLibFB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_FrnBenErn);
1825       trc_LibFyFB  := trc_TotLibFB - least(trc_TotLibFB,trc_TotLibNI);
1826       trc_TotLibFB := greatest(trc_TotLibFB,trc_TotLibNI);
1827       trc_LibFpFB  := trc_LibFyFB - bal_TX_ON_FB_YTD;
1828    ELSE
1829       hr_utility.set_location('py_za_tx_01032005.DirCalc',6);
1830       -- Set Cascade Figures and Refund
1831       trc_FrnBenErn  := trc_NorErn;
1832       trc_TotLibFB   := trc_TotLibNI;
1833       trc_LibFpFB    := -1 * bal_TX_ON_FB_YTD;
1834       trc_LibFpFBOvr := TRUE;
1835    END IF;
1836 
1837 -- Travel Allowance
1838 --
1839    -- Ytd Travel Allowance
1840    trc_TrvAllYtd := bal_TOT_TXB_TA_YTD;
1841    -- Skip the calculation if there is No Income
1842    IF trc_TrvAllYtd <> 0 THEN
1843       hr_utility.set_location('py_za_tx_01032005.DirCalc',7);
1844       -- Travel Allowance Earnings
1845       trc_TrvAllErn := trc_TrvAllYtd + trc_FrnBenErn;
1846       -- Tax Liability
1847       trc_TotLibTA := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TrvAllErn);
1848       trc_LibFyTA  := trc_TotLibTA - least(trc_TotLibTA,trc_TotLibFB);
1849       trc_TotLibTA := greatest(trc_TotLibTA,trc_TotLibFB);
1850       trc_LibFpTA  := trc_LibFyTA - bal_TX_ON_TA_YTD;
1851    ELSE
1852       hr_utility.set_location('py_za_tx_01032005.DirCalc',8);
1853       -- Set Cascade Figures and Refund
1854       trc_TrvAllErn  := trc_FrnBenErn; --Cascade Figure
1855       trc_TotLibTA   := trc_TotLibFB;
1856       trc_LibFpTA    := -1 * bal_TX_ON_TA_YTD;
1857       trc_LibFpTAOvr := TRUE;
1858    END IF;
1859 
1860 -- Bonus Provision
1861 --
1862    -- Ytd Bonus Provision
1863    trc_BonProYtd := bal_BP_YTD;
1864    -- Skip the calculation if there is No Income
1865    IF trc_BonProYtd <> 0 THEN
1866       hr_utility.set_location('py_za_tx_01032005.DirCalc',9);
1867       -- Bonus Provision Earnings
1868       trc_BonProErn := trc_BonProYtd + trc_TrvAllErn;
1869       -- Tax Liability
1870       trc_TotLibBP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_BonProErn);
1871       trc_LibFyBP  := trc_TotLibBP - least(trc_TotLibBP,trc_TotLibTA);
1872       trc_TotLibBP := greatest(trc_TotLibBP,trc_TotLibTA);
1873       trc_LibFpBP  := trc_LibFyBP - bal_TX_ON_BP_YTD;
1874    ELSE
1875       hr_utility.set_location('py_za_tx_01032005.DirCalc',10);
1876       -- Set Cascade Figures and Refund
1877       trc_BonProErn  := trc_TrvAllErn;
1878       trc_TotLibBP   := trc_TotLibTA;
1879       trc_LibFpBP    := -1 * bal_TX_ON_BP_YTD;
1880       trc_LibFpBPOvr := TRUE;
1881    END IF;
1882 
1883 -- Annual Bonus
1884 --
1885    -- Ytd Annual Bonus
1886    trc_AnnBonYtd := bal_TOT_TXB_AB_YTD;
1887    -- Skip the calculation if there is No Income
1888    IF trc_AnnBonYtd <> 0 THEN
1889       hr_utility.set_location('py_za_tx_01032005.DirCalc',11);
1890       -- Annual Bonus Earnings
1891       trc_AnnBonErn := trc_AnnBonYtd + trc_TrvAllErn;
1892       -- Tax Liability
1893       trc_TotLibAB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_AnnBonErn);
1894       trc_LibFyAB  := trc_TotLibAB - least(trc_TotLibAB,trc_TotLibTA);
1895       trc_TotLibAB := greatest(trc_TotLibAB,trc_TotLibTA);
1896       -- Check Bonus Provision
1897       IF trc_BonProYtd <> 0 THEN
1898          hr_utility.set_location('py_za_tx_01032005.DirCalc',12);
1899          -- Check Bonus Provision Frequency
1900          IF dbi_BP_TX_RCV = 'B' OR py_za_tx_utl_01032005.SitePeriod THEN
1901             hr_utility.set_location('py_za_tx_01032005.DirCalc',13);
1902             trc_LibFpAB :=
1903             trc_LibFyAB - (bal_TX_ON_BP_YTD
1904                           + trc_LibFpBP
1905                           + bal_TX_ON_AB_YTD);
1906          ELSE
1907             hr_utility.set_location('py_za_tx_01032005.DirCalc',14);
1908             trc_LibFpAB := 0;
1909          END IF;
1910       ELSE
1911          hr_utility.set_location('py_za_tx_01032005.DirCalc',15);
1912          trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
1913       END IF;
1914    ELSE
1915       hr_utility.set_location('py_za_tx_01032005.DirCalc',16);
1916       -- Set Cascade Figures and Refund
1917       trc_LibFpAB    := -1 * bal_TX_ON_AB_YTD;
1918       trc_LibFpABOvr := TRUE;
1919 
1920       IF dbi_BP_TX_RCV = 'A' AND py_za_tx_utl_01032005.SitePeriod THEN
1921          hr_utility.set_location('py_za_tx_01032005.DirCalc',17);
1922          trc_LibFpBP    := -1 * bal_TX_ON_BP_YTD;
1923          trc_LibFpBPOvr := TRUE;
1924          trc_LibFpAPOvr := TRUE;
1925 
1926          trc_AnnBonErn  := trc_TrvAllErn;
1927          trc_TotLibAB   := trc_TotLibTA;
1928       ELSE
1929          hr_utility.set_location('py_za_tx_01032005.DirCalc',18);
1930          trc_AnnBonErn  := trc_BonProErn;
1931          trc_TotLibAB   := trc_TotLibBP;
1932       END IF;
1933    END IF;
1934 
1935 -- Annual Payments
1936 --
1937    -- Ytd Annual Payments
1938    trc_AnnPymYtd := bal_TOT_TXB_AP_YTD;
1939    -- Skip the calculation if there is No Income
1940    IF trc_AnnPymYtd <> 0 THEN
1941       hr_utility.set_location('py_za_tx_01032005.DirCalc',19);
1942       -- Annual Payments Earnings
1943       trc_AnnPymErn := trc_AnnPymYtd + trc_AnnBonErn;
1944       -- Tax Liability
1945       trc_TotLibAP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_AnnPymErn);
1946       trc_LibFyAP  := trc_TotLibAP - least(trc_TotLibAP,trc_TotLibAB);
1947       trc_TotLibAP := greatest(trc_TotLibAP,trc_TotLibAB);
1948       trc_LibFpAP  := trc_LibFyAP - bal_TX_ON_AP_YTD;
1949    ElSE
1950       hr_utility.set_location('py_za_tx_01032005.DirCalc',20);
1951       -- Set Cascade Figures and Refund
1952       trc_AnnPymErn  := trc_AnnBonErn;
1953       trc_TotLibAP   := trc_TotLibAB;
1954       trc_LibFpAP    := -1 * bal_TX_ON_AP_YTD;
1955       trc_LibFpAPOvr := TRUE;
1956    END IF;
1957 
1958 -- Public Office Allowance
1959 --
1960    -- Ytd Public Office Allowance
1961    trc_PblOffYtd := bal_TOT_TXB_PO_YTD;
1962    -- Skip the calculation if there is No Income
1963    IF trc_PblOffYtd <> 0 THEN
1964       hr_utility.set_location('py_za_tx_01032005.DirCalc',21);
1965       -- Tax Liability
1966       trc_LibFyPO := trc_PblOffYtd * glb_ZA_PBL_TX_RTE / 100;
1967       trc_LibFpPO := trc_LibFyPO -  bal_TX_ON_PO_YTD;
1968    ELSE
1969       hr_utility.set_location('py_za_tx_01032005.DirCalc',22);
1970       -- Set Cascade Figures and Refund
1971       trc_LibFyPO    := 0;
1972       trc_LibFpPO    := -1 * bal_TX_ON_PO_YTD;
1973       trc_LibFpPOOvr := TRUE;
1974    END IF;
1975 
1976 -- Net Pay Validation
1977 --
1978    py_za_tx_utl_01032005.ValidateTaxOns(p_Rf => TRUE);
1979 
1980    hr_utility.set_location('py_za_tx_01032005.DirCalc',23);
1981 
1982 -- Tax Percentage Indicator
1983 --
1984    IF dbi_TX_STA    IN ('D','P') THEN
1985       hr_utility.set_location('py_za_tx_01032005.DirCalc',24);
1986       trc_TxPercVal := dbi_TX_DIR_VAL;
1987    ELSIF dbi_TX_STA = 'E' THEN
1988       hr_utility.set_location('py_za_tx_01032005.DirCalc',25);
1989       trc_TxPercVal := glb_ZA_CC_TX_PRC;
1990    ELSIF dbi_TX_STA = 'F' THEN
1991       hr_utility.set_location('py_za_tx_01032005.DirCalc',26);
1992       trc_TxPercVal := glb_ZA_TMP_TX_RTE;
1993    ELSIF dbi_TX_STA = 'J' THEN
1994       hr_utility.set_location('py_za_tx_01032005.DirCalc',27);
1995       trc_TxPercVal := glb_ZA_PER_SERV_COMP_PERC;
1996    ELSIF dbi_TX_STA = 'K' THEN
1997       hr_utility.set_location('py_za_tx_01032005.DirCalc',28);
1998       trc_TxPercVal := glb_ZA_PER_SERV_TRST_PERC;
1999    ELSIF dbi_TX_STA = 'L' THEN
2000       hr_utility.set_location('py_za_tx_01032005.DirCalc',29);
2001       trc_TxPercVal := glb_ZA_PER_SERV_COMP_PERC;
2002    ELSE
2003       hr_utility.set_location('py_za_tx_01032005.DirCalc',30);
2004       trc_TxPercVal := 0;
2005    END IF;
2006 
2007    hr_utility.set_location('py_za_tx_01032005.DirCalc',31);
2008 
2009    -- Base Income
2010    WrtHrTrc('trc_BseErn:       '||to_char(trc_BseErn));
2011    WrtHrTrc('trc_TxbBseInc:    '||to_char(trc_TxbBseInc));
2012    WrtHrTrc('trc_TotLibBse:    '||to_char(trc_TotLibBse));
2013    -- Normal Income
2014    WrtHrTrc('trc_NorIncYtd:    '||to_char(trc_NorIncYtd));
2015    WrtHrTrc('trc_NorIncPtd:    '||to_char(trc_NorIncPtd));
2016    WrtHrTrc('trc_NorErn:       '||to_char(trc_NorErn));
2017    WrtHrTrc('trc_TxbNorInc:    '||to_char(trc_TxbNorInc));
2018    WrtHrTrc('trc_TotLibNI:     '||to_char(trc_TotLibNI));
2019    WrtHrTrc('trc_LibFyNI:      '||to_char(trc_LibFyNI));
2020    WrtHrTrc('trc_LibFpNI:      '||to_char(trc_LibFpNI));
2021    -- Fringe Benefits
2022    WrtHrTrc('trc_FrnBenYtd:    '||to_char(trc_FrnBenYtd));
2023    WrtHrTrc('trc_FrnBenPtd:    '||to_char(trc_FrnBenPtd));
2024    WrtHrTrc('trc_FrnBenErn:    '||to_char(trc_FrnBenErn));
2025    WrtHrTrc('trc_TxbFrnInc:    '||to_char(trc_TxbFrnInc));
2026    WrtHrTrc('trc_TotLibFB:     '||to_char(trc_TotLibFB));
2027    WrtHrTrc('trc_LibFyFB:      '||to_char(trc_LibFyFB));
2028    WrtHrTrc('trc_LibFpFB:      '||to_char(trc_LibFpFB));
2029    -- Travel Allowance
2030    WrtHrTrc('trc_TrvAllYtd:    '||to_char(trc_TrvAllYtd));
2031    WrtHrTrc('trc_TrvAllPtd:    '||to_char(trc_TrvAllPtd));
2032    WrtHrTrc('trc_TrvAllErn:    '||to_char(trc_TrvAllErn));
2033    WrtHrTrc('trc_TxbTrvInc:    '||to_char(trc_TxbTrvInc));
2034    WrtHrTrc('trc_TotLibTA:     '||to_char(trc_TotLibTA));
2035    WrtHrTrc('trc_LibFyTA:      '||to_char(trc_LibFyTA));
2036    WrtHrTrc('trc_LibFpTA:      '||to_char(trc_LibFpTA));
2037    -- Bonus Provision
2038    WrtHrTrc('trc_BonProYtd:    '||to_char(trc_BonProYtd));
2039    WrtHrTrc('trc_BonProPtd:    '||to_char(trc_BonProPtd));
2040    WrtHrTrc('trc_BonProErn:    '||to_char(trc_BonProErn));
2041    WrtHrTrc('trc_TxbBonProInc: '||to_char(trc_TxbBonProInc));
2042    WrtHrTrc('trc_TotLibBP:     '||to_char(trc_TotLibBP));
2043    WrtHrTrc('trc_LibFyBP:      '||to_char(trc_LibFyBP));
2044    WrtHrTrc('trc_LibFpBP:      '||to_char(trc_LibFpBP));
2045    -- Annual Bonus
2046    WrtHrTrc('trc_AnnBonYtd:    '||to_char(trc_AnnBonYtd));
2047    WrtHrTrc('trc_AnnBonPtd:    '||to_char(trc_AnnBonPtd));
2048    WrtHrTrc('trc_AnnBonErn:    '||to_char(trc_AnnBonErn));
2049    WrtHrTrc('trc_TxbAnnBonInc: '||to_char(trc_TxbAnnBonInc));
2050    WrtHrTrc('trc_TotLibAB:     '||to_char(trc_TotLibAB));
2051    WrtHrTrc('trc_LibFyAB:      '||to_char(trc_LibFyAB));
2052    WrtHrTrc('trc_LibFpAB:      '||to_char(trc_LibFpAB));
2053    -- Annual Payments
2054    WrtHrTrc('trc_AnnPymYtd:    '||to_char(trc_AnnPymYtd));
2055    WrtHrTrc('trc_AnnPymPtd:    '||to_char(trc_AnnPymPtd));
2056    WrtHrTrc('trc_AnnPymErn:    '||to_char(trc_AnnPymErn));
2057    WrtHrTrc('trc_TxbAnnPymInc: '||to_char(trc_TxbAnnPymInc));
2058    WrtHrTrc('trc_TotLibAP:     '||to_char(trc_TotLibAP));
2059    WrtHrTrc('trc_LibFyAP:      '||to_char(trc_LibFyAP));
2060    WrtHrTrc('trc_LibFpAP:      '||to_char(trc_LibFpAP));
2061    -- Pubilc Office Allowance
2062    WrtHrTrc('trc_PblOffYtd:    '||to_char(trc_PblOffYtd));
2063    WrtHrTrc('trc_PblOffPtd:    '||to_char(trc_PblOffPtd));
2064    WrtHrTrc('trc_PblOffErn:    '||to_char(trc_PblOffErn));
2065    WrtHrTrc('trc_LibFyPO:      '||to_char(trc_LibFyPO));
2066    WrtHrTrc('trc_LibFpPO:      '||to_char(trc_LibFpPO));
2067 
2068 EXCEPTION
2069    WHEN OTHERS THEN
2070       IF xpt_Msg = 'No Error' THEN
2071          xpt_Msg := 'DirCalc: '||TO_CHAR(SQLCODE);
2072       END IF;
2073       RAISE xpt_E;
2074 END DirCalc;
2075 
2076 -------------------------------------------------------------------------------
2077 -- BasCalc                                                                   --
2078 -- Pre-Earnings Tax Calculation                                              --
2079 -------------------------------------------------------------------------------
2080 PROCEDURE BasCalc AS
2081 -- Variables
2082 --
2083    l_Np       BALANCE;
2084    l_65Year   DATE;
2085 
2086 BEGIN
2087 
2088    hr_utility.set_location('py_za_tx_01032005.BasCalc',1);
2089 -- Identify the Calculation
2090 --
2091    trc_CalTyp := 'BasCalc';
2092 
2093 -- Rebates
2094    py_za_tx_utl_01032005.SetRebates;
2095 
2096 -- Abatements
2097    py_za_tx_utl_01032005.Abatements;
2098 
2099 -- Deemed Remuneration
2100 --
2101    -- Run Deemed Remuneration
2102    trc_DmdRmnRun := bal_DIR_DMD_RMN_ITD;
2103 
2104    -- Skip the calculation if there is No Income
2105    IF trc_DmdRmnRun <> 0 THEN
2106       hr_utility.set_location('py_za_tx_01032005.BasCalc',2);
2107       -- Taxable Deemed Remuneration
2108       trc_TxbDmdRmn := trc_DmdRmnRun;
2109       -- Threshold Check
2110       IF trc_TxbDmdRmn >= trc_Threshold THEN
2111          hr_utility.set_location('py_za_tx_01032005.BasCalc',3);
2112          -- Tax Liability
2113          trc_TotLibDR := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbDmdRmn);
2114       ELSE
2115          hr_utility.set_location('py_za_tx_01032005.BasCalc',4);
2116          trc_TotLibDR := 0;
2117       END IF;
2118    ELSE
2119       hr_utility.set_location('py_za_tx_01032005.BasCalc',5);
2120       trc_TotLibDR := 0;
2121    END IF;
2122 
2123    hr_utility.set_location('py_za_tx_01032005.BasCalc',6);
2124 
2125 -- Base Earnings
2126 --
2127    --Base Earnings
2128    trc_BseErn := bal_TOT_TXB_AB_PTD + bal_TOT_TXB_AP_PTD;
2129       -- Estimate Base Taxable Income
2130       trc_TxbBseInc := trc_BseErn * dbi_ZA_PAY_PRDS_PER_YR;
2131    -- Threshold Check
2132    IF trc_TxbBseInc >= trc_Threshold THEN
2133       hr_utility.set_location('py_za_tx_01032005.BasCalc',7);
2134       -- Tax Liability
2135       trc_TotLibBse := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbBseInc);
2136       trc_TotLibBse := greatest(trc_TotLibBse,trc_TotLibDR);
2137    ELSE
2138       hr_utility.set_location('py_za_tx_01032005.BasCalc',8);
2139       trc_TotLibBse := trc_TotLibDR;
2140    END IF;
2141 
2142    hr_utility.set_location('py_za_tx_01032005.BasCalc',9);
2143 
2144 -- Annual Bonus
2145 --
2146    -- Ytd Annual Bonus
2147    trc_AnnBonYtd := bal_TOT_TXB_AB_YTD;
2148    -- Skip the calculation if there is No Income
2149    IF trc_AnnBonYtd <> 0 THEN
2150       hr_utility.set_location('py_za_tx_01032005.BasCalc',10);
2151       -- Annual Bonus Earnings
2152       trc_AnnBonErn := trc_AnnBonYtd + trc_TxbBseInc;
2153       -- Taxable Annual Bonus Income
2154       trc_TxbAnnBonInc := trc_AnnBonErn - trc_AnnTotAbm;
2155       -- Threshold Check
2156       IF trc_TxbAnnBonInc >= trc_Threshold THEN
2157          hr_utility.set_location('py_za_tx_01032005.BasCalc',11);
2158          -- Tax Liability
2159          trc_TotLibAB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnBonInc);
2160          trc_LibFyAB  := trc_TotLibAB - least(trc_TotLibAB,trc_TotLibBse);
2161          trc_TotLibAB := greatest(trc_TotLibAB,trc_TotLibBse);
2162          -- Check Bonus Provision
2163          IF bal_BP_YTD <> 0 THEN
2164             hr_utility.set_location('py_za_tx_01032005.BasCalc',12);
2165             -- Check Bonus Provision Frequency
2166             IF dbi_BP_TX_RCV = 'A' THEN
2167                hr_utility.set_location('py_za_tx_01032005.BasCalc',13);
2168                trc_LibFpAB := 0;
2169             ELSE
2170                hr_utility.set_location('py_za_tx_01032005.BasCalc',14);
2171                trc_LibFpAB := trc_LibFyAB - ( bal_TX_ON_BP_YTD
2172                                             + bal_TX_ON_AB_YTD);
2173             END IF;
2174          ELSE
2175             hr_utility.set_location('py_za_tx_01032005.BasCalc',15);
2176             trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
2177          END IF;
2178       ELSE
2179          hr_utility.set_location('py_za_tx_01032005.BasCalc',16);
2180          trc_TotLibAB := trc_TotLibBse;
2181       END IF;
2182    ELSE
2183       hr_utility.set_location('py_za_tx_01032005.BasCalc',17);
2184       trc_TotLibAB     := trc_TotLibBse;
2185       trc_TxbAnnBonInc := trc_TxbBseInc;
2186    END IF;
2187 
2188    hr_utility.set_location('py_za_tx_01032005.BasCalc',18);
2189 
2190 -- Annual Payments
2191 --
2192    -- Ytd Annual Payments
2193    trc_AnnPymYtd := bal_TOT_TXB_AP_YTD;
2194    -- Skip the calculation if there is No Income
2195    IF trc_AnnPymYtd <> 0 THEN
2196       hr_utility.set_location('py_za_tx_01032005.BasCalc',19);
2197    -- Taxable Annual Payments Income
2198       trc_TxbAnnPymInc := trc_AnnPymYtd + trc_TxbAnnBonInc;
2199    -- Threshold Check
2200       IF trc_TxbAnnPymInc >= trc_Threshold THEN
2201          hr_utility.set_location('py_za_tx_01032005.BasCalc',20);
2202       -- Tax Liability
2203          trc_TotLibAP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnPymInc);
2204          trc_LibFyAP  := trc_TotLibAP - least(trc_TotLibAP,trc_TotLibAB);
2205          trc_TotLibAP := greatest(trc_TotLibAP,trc_TotLibAB);
2206          trc_LibFpAP  := trc_LibFyAP - bal_TX_ON_AP_YTD;
2207       ELSE
2208          hr_utility.set_location('py_za_tx_01032005.BasCalc',21);
2209          NULL;
2210       END IF;
2211    ELSE
2212       hr_utility.set_location('py_za_tx_01032005.BasCalc',22);
2213       NULL;
2214    END IF;
2215 
2216 -- Net Pay Validation
2217 --
2218    py_za_tx_utl_01032005.ValidateTaxOns;
2219 
2220    -- Deemed Remuneration
2221    WrtHrTrc('trc_TxbDmdRmn:    '||to_char(trc_TxbDmdRmn));
2222    WrtHrTrc('trc_TotLibDR:     '||to_char(trc_TotLibDR));
2223    WrtHrTrc('trc_LibFyDR:      '||to_char(trc_LibFyDR));
2224    WrtHrTrc('trc_LibFpDR:      '||to_char(trc_LibFpDR));
2225    -- Base Income
2226    WrtHrTrc('trc_BseErn:       '||to_char(trc_BseErn));
2227    WrtHrTrc('trc_TxbBseInc:    '||to_char(trc_TxbBseInc));
2228    WrtHrTrc('trc_TotLibBse:    '||to_char(trc_TotLibBse));
2229    -- Normal Income
2230    WrtHrTrc('trc_NorIncYtd:    '||to_char(trc_NorIncYtd));
2231    WrtHrTrc('trc_NorIncPtd:    '||to_char(trc_NorIncPtd));
2232    WrtHrTrc('trc_NorErn:       '||to_char(trc_NorErn));
2233    WrtHrTrc('trc_TxbNorInc:    '||to_char(trc_TxbNorInc));
2234    WrtHrTrc('trc_TotLibNI:     '||to_char(trc_TotLibNI));
2235    WrtHrTrc('trc_LibFyNI:      '||to_char(trc_LibFyNI));
2236    WrtHrTrc('trc_LibFpNI:      '||to_char(trc_LibFpNI));
2237    -- Fringe Benefits
2238    WrtHrTrc('trc_FrnBenYtd:    '||to_char(trc_FrnBenYtd));
2239    WrtHrTrc('trc_FrnBenPtd:    '||to_char(trc_FrnBenPtd));
2240    WrtHrTrc('trc_FrnBenErn:    '||to_char(trc_FrnBenErn));
2241    WrtHrTrc('trc_TxbFrnInc:    '||to_char(trc_TxbFrnInc));
2242    WrtHrTrc('trc_TotLibFB:     '||to_char(trc_TotLibFB));
2243    WrtHrTrc('trc_LibFyFB:      '||to_char(trc_LibFyFB));
2244    WrtHrTrc('trc_LibFpFB:      '||to_char(trc_LibFpFB));
2245    -- Travel Allowance
2246    WrtHrTrc('trc_TrvAllYtd:    '||to_char(trc_TrvAllYtd));
2247    WrtHrTrc('trc_TrvAllPtd:    '||to_char(trc_TrvAllPtd));
2248    WrtHrTrc('trc_TrvAllErn:    '||to_char(trc_TrvAllErn));
2249    WrtHrTrc('trc_TxbTrvInc:    '||to_char(trc_TxbTrvInc));
2250    WrtHrTrc('trc_TotLibTA:     '||to_char(trc_TotLibTA));
2251    WrtHrTrc('trc_LibFyTA:      '||to_char(trc_LibFyTA));
2252    WrtHrTrc('trc_LibFpTA:      '||to_char(trc_LibFpTA));
2253    -- Bonus Provision
2254    WrtHrTrc('trc_BonProYtd:    '||to_char(trc_BonProYtd));
2255    WrtHrTrc('trc_BonProPtd:    '||to_char(trc_BonProPtd));
2256    WrtHrTrc('trc_BonProErn:    '||to_char(trc_BonProErn));
2257    WrtHrTrc('trc_TxbBonProInc: '||to_char(trc_TxbBonProInc));
2258    WrtHrTrc('trc_TotLibBP:     '||to_char(trc_TotLibBP));
2259    WrtHrTrc('trc_LibFyBP:      '||to_char(trc_LibFyBP));
2260    WrtHrTrc('trc_LibFpBP:      '||to_char(trc_LibFpBP));
2261    -- Annual Bonus
2262    WrtHrTrc('trc_AnnBonYtd:    '||to_char(trc_AnnBonYtd));
2263    WrtHrTrc('trc_AnnBonPtd:    '||to_char(trc_AnnBonPtd));
2264    WrtHrTrc('trc_AnnBonErn:    '||to_char(trc_AnnBonErn));
2265    WrtHrTrc('trc_TxbAnnBonInc: '||to_char(trc_TxbAnnBonInc));
2266    WrtHrTrc('trc_TotLibAB:     '||to_char(trc_TotLibAB));
2267    WrtHrTrc('trc_LibFyAB:      '||to_char(trc_LibFyAB));
2268    WrtHrTrc('trc_LibFpAB:      '||to_char(trc_LibFpAB));
2269    -- Annual Payments
2270    WrtHrTrc('trc_AnnPymYtd:    '||to_char(trc_AnnPymYtd));
2271    WrtHrTrc('trc_AnnPymPtd:    '||to_char(trc_AnnPymPtd));
2272    WrtHrTrc('trc_AnnPymErn:    '||to_char(trc_AnnPymErn));
2273    WrtHrTrc('trc_TxbAnnPymInc: '||to_char(trc_TxbAnnPymInc));
2274    WrtHrTrc('trc_TotLibAP:     '||to_char(trc_TotLibAP));
2275    WrtHrTrc('trc_LibFyAP:      '||to_char(trc_LibFyAP));
2276    WrtHrTrc('trc_LibFpAP:      '||to_char(trc_LibFpAP));
2277    -- Pubilc Office Allowance
2278    WrtHrTrc('trc_PblOffYtd:    '||to_char(trc_PblOffYtd));
2279    WrtHrTrc('trc_PblOffPtd:    '||to_char(trc_PblOffPtd));
2280    WrtHrTrc('trc_PblOffErn:    '||to_char(trc_PblOffErn));
2281    WrtHrTrc('trc_LibFyPO:      '||to_char(trc_LibFyPO));
2282    WrtHrTrc('trc_LibFpPO:      '||to_char(trc_LibFpPO));
2283 
2284 EXCEPTION
2285    WHEN OTHERS THEN
2286       IF xpt_Msg = 'No Error' THEN
2287          xpt_Msg := 'BasCalc: '||TO_CHAR(SQLCODE);
2288       END IF;
2289       RAISE xpt_E;
2290 END BasCalc;
2291 
2292 -------------------------------------------------------------------------------
2293 -- CalCalc                                                                   --
2294 -- Pre-Earnings Tax Calculation                                              --
2295 -------------------------------------------------------------------------------
2296 PROCEDURE CalCalc AS
2297 -- Variables
2298 --
2299    l_Np       BALANCE;
2300 
2301 BEGIN
2302 
2303    hr_utility.set_location('py_za_tx_01032005.CalCalc',1);
2304 -- Identify the calculation
2305 --
2306    trc_CalTyp := 'CalCalc';
2307 
2308 -- Update Global Balance Values with correct TAXABLE values
2309 --
2310    py_za_tx_utl_01032005.TrvAll;
2311 
2312    hr_utility.set_location('py_za_tx_01032005.CalCalc',2);
2313 
2314 -- Calendar Ytd Taxable Income
2315 --
2316    trc_TxbIncYtd := ( bal_TOT_TXB_NI_CYTD
2317                     + bal_TOT_TXB_FB_CYTD
2318                     + bal_TOT_TXB_TA_CYTD );
2319 -- If there is no Income Execute the Base calculation
2320 --
2321    IF trc_TxbIncYtd = 0 THEN
2322       hr_utility.set_location('py_za_tx_01032005.CalCalc',3);
2323       BasCalc;
2324    ELSE -- continue CalCalc
2325       hr_utility.set_location('py_za_tx_01032005.CalCalc',4);
2326    -- Site Factor
2327    --
2328       trc_SitFactor := dbi_ZA_DYS_IN_YR / py_za_tx_utl_01032005.DaysWorked;
2329 
2330    -- Rebates
2331       py_za_tx_utl_01032005.SetRebates;
2332 
2333    -- Abatements
2334       py_za_tx_utl_01032005.Abatements;
2335 
2336       hr_utility.set_location('py_za_tx_01032005.CalCalc',5);
2337 
2338    -- Deemed Remuneration
2339    --
2340       -- Run Deemed Remuneration
2341       trc_DmdRmnRun := bal_DIR_DMD_RMN_ITD;
2342 
2343       -- Skip the calculation if there is No Income
2344       IF trc_DmdRmnRun <> 0 THEN
2345          hr_utility.set_location('py_za_tx_01032005.CalCalc',6);
2346          -- Taxable Deemed Remuneration
2347          trc_TxbDmdRmn := trc_DmdRmnRun;
2348          -- Threshold Check
2349          IF trc_TxbDmdRmn >= trc_Threshold THEN
2350             hr_utility.set_location('py_za_tx_01032005.CalCalc',7);
2351          -- Tax Liability
2352             trc_TotLibDR := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbDmdRmn);
2353          ELSE
2354             hr_utility.set_location('py_za_tx_01032005.CalCalc',8);
2355             trc_TotLibDR := 0;
2356          END IF;
2357       ELSE
2358          hr_utility.set_location('py_za_tx_01032005.CalCalc',9);
2359          trc_TotLibDR := 0;
2360       END IF;
2361 
2362       hr_utility.set_location('py_za_tx_01032005.CalCalc',10);
2363 
2364    -- Base Earnings
2365    --
2366       -- Base Earnings
2367       trc_BseErn := trc_TxbIncYtd * trc_SitFactor;
2368       -- Taxable Base Income
2369       trc_TxbBseInc := trc_BseErn - trc_PerTotAbm;
2370       -- Threshold Check
2371       IF trc_TxbBseInc >= trc_Threshold THEN
2372          hr_utility.set_location('py_za_tx_01032005.CalCalc',11);
2373          -- Tax Liability
2374          trc_TotLibBse := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbBseInc);
2375          trc_TotLibBse := greatest(trc_TotLibBse,trc_TotLibDR);
2376       ELSE
2377          hr_utility.set_location('py_za_tx_01032005.CalCalc',12);
2378          trc_TotLibBse := trc_TotLibDR;
2379       END IF;
2380 
2381       hr_utility.set_location('py_za_tx_01032005.CalCalc',13);
2382 
2383    -- Annual Bonus
2384    --
2385       -- Ytd Annual Bonus
2386       trc_AnnBonYtd := bal_TOT_TXB_AB_YTD;
2387       -- Skip the calculation if there is No Income
2388       IF trc_AnnBonYtd <> 0 THEN
2389          hr_utility.set_location('py_za_tx_01032005.CalCalc',14);
2390          -- Annual Bonus Earnings
2391          trc_AnnBonErn := trc_AnnBonYtd + trc_BseErn;
2392          -- Taxable Annual Bonus Income
2393          trc_TxbAnnBonInc := trc_AnnBonErn - trc_AnnTotAbm;
2394          -- Threshold Check
2395          IF trc_TxbAnnBonInc >= trc_Threshold THEN
2396             hr_utility.set_location('py_za_tx_01032005.CalCalc',15);
2397             -- Tax Liability
2398             trc_TotLibAB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnBonInc);
2399             trc_LibFyAB := trc_TotLibAB - least(trc_TotLibAB,trc_TotLibBse);
2400             trc_TotLibAB := greatest(trc_TotLibAB,trc_TotLibBse);
2401             -- Check Bonus Provision
2402             IF bal_BP_YTD <> 0 THEN
2403                hr_utility.set_location('py_za_tx_01032005.CalCalc',16);
2404                -- Check Bonus Provision Frequency
2405                IF dbi_BP_TX_RCV = 'A' THEN
2406                   hr_utility.set_location('py_za_tx_01032005.CalCalc',17);
2407                   trc_LibFpAB := 0;
2408                ELSE
2409                   hr_utility.set_location('py_za_tx_01032005.CalCalc',18);
2410                   trc_LibFpAB := trc_LibFyAB - ( bal_TX_ON_BP_YTD
2411                                                + bal_TX_ON_AB_YTD);
2412                END IF;
2413             ELSE
2414                hr_utility.set_location('py_za_tx_01032005.CalCalc',19);
2415                trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
2416             END IF;
2417          ELSE
2418             hr_utility.set_location('py_za_tx_01032005.CalCalc',20);
2419             trc_TotLibAB := trc_TotLibBse;
2420          END IF;
2421       ELSE
2422          hr_utility.set_location('py_za_tx_01032005.CalCalc',21);
2423          trc_AnnBonErn    := trc_BseErn;
2424          trc_TxbAnnBonInc := trc_TxbBseInc;
2425          trc_TotLibAB     := trc_TotLibBse;
2426       END IF;
2427 
2428       hr_utility.set_location('py_za_tx_01032005.CalCalc',22);
2429 
2430    -- Annual Payments
2431    --
2432       -- Ytd Annual Payments
2433       trc_AnnPymYtd := bal_TOT_TXB_AP_YTD ;
2434       -- Skip the calculation if there is No Income
2435       IF trc_AnnPymYtd <> 0 THEN
2436          hr_utility.set_location('py_za_tx_01032005.CalCalc',23);
2437          -- Annual Payments Earnings
2438          trc_AnnPymErn := trc_AnnPymYtd + trc_AnnBonErn;
2439          -- Taxable Annual Payments Income
2440          trc_TxbAnnPymInc := trc_AnnPymErn - trc_AnnTotAbm;
2441          -- Threshold Check
2442          IF trc_TxbAnnPymInc >= trc_Threshold THEN
2443             hr_utility.set_location('py_za_tx_01032005.CalCalc',24);
2444             -- Tax Liability
2445             trc_TotLibAP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnPymInc);
2446             trc_LibFyAP  := trc_TotLibAP - least(trc_TotLibAP,trc_TotLibAB);
2447             trc_TotLibAP := greatest(trc_TotLibAP,trc_TotLibAB);
2448             trc_LibFpAP  := trc_LibFyAP - bal_TX_ON_AP_YTD;
2449          ELSE
2450             hr_utility.set_location('py_za_tx_01032005.CalCalc',25);
2451             trc_TotLibAP := trc_TotLibAB;
2452          END IF;
2453       ELSE
2454          hr_utility.set_location('py_za_tx_01032005.CalCalc',26);
2455          trc_AnnPymErn    := trc_AnnBonErn;
2456          trc_TxbAnnPymInc := trc_TxbAnnBonInc;
2457          trc_TotLibAP     := trc_TotLibAB;
2458       END IF;
2459 
2460    -- Net pay Validation
2461    --
2462       py_za_tx_utl_01032005.ValidateTaxOns;
2463 
2464       -- Deemed Remuneration
2465       WrtHrTrc('trc_TxbDmdRmn:    '||to_char(trc_TxbDmdRmn));
2466       WrtHrTrc('trc_TotLibDR:     '||to_char(trc_TotLibDR));
2467       WrtHrTrc('trc_LibFyDR:      '||to_char(trc_LibFyDR));
2468       WrtHrTrc('trc_LibFpDR:      '||to_char(trc_LibFpDR));
2469       -- Base Income
2470       WrtHrTrc('trc_BseErn:       '||to_char(trc_BseErn));
2471       WrtHrTrc('trc_TxbBseInc:    '||to_char(trc_TxbBseInc));
2472       WrtHrTrc('trc_TotLibBse:    '||to_char(trc_TotLibBse));
2473       -- Normal Income
2474       WrtHrTrc('trc_NorIncYtd:    '||to_char(trc_NorIncYtd));
2475       WrtHrTrc('trc_NorIncPtd:    '||to_char(trc_NorIncPtd));
2476       WrtHrTrc('trc_NorErn:       '||to_char(trc_NorErn));
2477       WrtHrTrc('trc_TxbNorInc:    '||to_char(trc_TxbNorInc));
2478       WrtHrTrc('trc_TotLibNI:     '||to_char(trc_TotLibNI));
2479       WrtHrTrc('trc_LibFyNI:      '||to_char(trc_LibFyNI));
2480       WrtHrTrc('trc_LibFpNI:      '||to_char(trc_LibFpNI));
2481       -- Fringe Benefits
2482       WrtHrTrc('trc_FrnBenYtd:    '||to_char(trc_FrnBenYtd));
2483       WrtHrTrc('trc_FrnBenPtd:    '||to_char(trc_FrnBenPtd));
2484       WrtHrTrc('trc_FrnBenErn:    '||to_char(trc_FrnBenErn));
2485       WrtHrTrc('trc_TxbFrnInc:    '||to_char(trc_TxbFrnInc));
2486       WrtHrTrc('trc_TotLibFB:     '||to_char(trc_TotLibFB));
2487       WrtHrTrc('trc_LibFyFB:      '||to_char(trc_LibFyFB));
2488       WrtHrTrc('trc_LibFpFB:      '||to_char(trc_LibFpFB));
2489       -- Travel Allowance
2490       WrtHrTrc('trc_TrvAllYtd:    '||to_char(trc_TrvAllYtd));
2491       WrtHrTrc('trc_TrvAllPtd:    '||to_char(trc_TrvAllPtd));
2492       WrtHrTrc('trc_TrvAllErn:    '||to_char(trc_TrvAllErn));
2493       WrtHrTrc('trc_TxbTrvInc:    '||to_char(trc_TxbTrvInc));
2494       WrtHrTrc('trc_TotLibTA:     '||to_char(trc_TotLibTA));
2495       WrtHrTrc('trc_LibFyTA:      '||to_char(trc_LibFyTA));
2496       WrtHrTrc('trc_LibFpTA:      '||to_char(trc_LibFpTA));
2497       -- Bonus Provision
2498       WrtHrTrc('trc_BonProYtd:    '||to_char(trc_BonProYtd));
2499       WrtHrTrc('trc_BonProPtd:    '||to_char(trc_BonProPtd));
2500       WrtHrTrc('trc_BonProErn:    '||to_char(trc_BonProErn));
2501       WrtHrTrc('trc_TxbBonProInc: '||to_char(trc_TxbBonProInc));
2502       WrtHrTrc('trc_TotLibBP:     '||to_char(trc_TotLibBP));
2503       WrtHrTrc('trc_LibFyBP:      '||to_char(trc_LibFyBP));
2504       WrtHrTrc('trc_LibFpBP:      '||to_char(trc_LibFpBP));
2505       -- Annual Bonus
2506       WrtHrTrc('trc_AnnBonYtd:    '||to_char(trc_AnnBonYtd));
2507       WrtHrTrc('trc_AnnBonPtd:    '||to_char(trc_AnnBonPtd));
2508       WrtHrTrc('trc_AnnBonErn:    '||to_char(trc_AnnBonErn));
2509       WrtHrTrc('trc_TxbAnnBonInc: '||to_char(trc_TxbAnnBonInc));
2510       WrtHrTrc('trc_TotLibAB:     '||to_char(trc_TotLibAB));
2511       WrtHrTrc('trc_LibFyAB:      '||to_char(trc_LibFyAB));
2512       WrtHrTrc('trc_LibFpAB:      '||to_char(trc_LibFpAB));
2513       -- Annual Payments
2514       WrtHrTrc('trc_AnnPymYtd:    '||to_char(trc_AnnPymYtd));
2515       WrtHrTrc('trc_AnnPymPtd:    '||to_char(trc_AnnPymPtd));
2516       WrtHrTrc('trc_AnnPymErn:    '||to_char(trc_AnnPymErn));
2517       WrtHrTrc('trc_TxbAnnPymInc: '||to_char(trc_TxbAnnPymInc));
2518       WrtHrTrc('trc_TotLibAP:     '||to_char(trc_TotLibAP));
2519       WrtHrTrc('trc_LibFyAP:      '||to_char(trc_LibFyAP));
2520       WrtHrTrc('trc_LibFpAP:      '||to_char(trc_LibFpAP));
2521       -- Pubilc Office Allowance
2522       WrtHrTrc('trc_PblOffYtd:    '||to_char(trc_PblOffYtd));
2523       WrtHrTrc('trc_PblOffPtd:    '||to_char(trc_PblOffPtd));
2524       WrtHrTrc('trc_PblOffErn:    '||to_char(trc_PblOffErn));
2525       WrtHrTrc('trc_LibFyPO:      '||to_char(trc_LibFyPO));
2526       WrtHrTrc('trc_LibFpPO:      '||to_char(trc_LibFpPO));
2527 
2528    END IF;
2529 
2530    hr_utility.set_location('py_za_tx_01032005.CalCalc',27);
2531 
2532 EXCEPTION
2533    WHEN OTHERS THEN
2534       IF xpt_Msg = 'No Error' THEN
2535          xpt_Msg := 'CalCalc: '||TO_CHAR(SQLCODE);
2536       END IF;
2537       RAISE xpt_E;
2538 END CalCalc;
2539 -------------------------------------------------------------------------------
2540 -- YtdCalc                                                                   --
2541 -- Pre-Earnings Tax Calculation                                              --
2542 -------------------------------------------------------------------------------
2543 PROCEDURE YtdCalc AS
2544 -- Variables
2545 --
2546    l_Np       BALANCE;
2547 
2548 BEGIN
2549 
2550    hr_utility.set_location('py_za_tx_01032005.YtdCalc',1);
2551 -- Identify the calculation
2552 --
2553    trc_CalTyp := 'YtdCalc';
2554 
2555 -- Update Global Balance Values with correct TAXABLE values
2556    py_za_tx_utl_01032005.TrvAll;
2557 
2558    hr_utility.set_location('py_za_tx_01032005.YtdCalc',2);
2559 
2560 -- Ytd Taxable Income
2561    trc_TxbIncYtd :=
2562       ( bal_TOT_TXB_NI_YTD
2563       + bal_TOT_TXB_FB_YTD
2564       + bal_TOT_TXB_TA_YTD
2565       + bal_BP_YTD
2566       );
2567 -- If the Ytd Taxable Income = 0, execute the CalCalc
2568    IF trc_TxbIncYtd = 0 THEN
2569       hr_utility.set_location('py_za_tx_01032005.YtdCalc',3);
2570       CalCalc;
2571    ELSE --Continue YtdCalc
2572       hr_utility.set_location('py_za_tx_01032005.YtdCalc',4);
2573    -- Site Factor
2574       trc_SitFactor := dbi_ZA_DYS_IN_YR / py_za_tx_utl_01032005.DaysWorked;
2575 
2576    -- Rebates
2577       py_za_tx_utl_01032005.SetRebates;
2578 
2579    -- Abatements
2580       py_za_tx_utl_01032005.Abatements;
2581 
2582       hr_utility.set_location('py_za_tx_01032005.YtdCalc',5);
2583 
2584    -- Deemed Remuneration
2585    --
2586       -- Run Deemed Remuneration
2587       trc_DmdRmnRun := bal_DIR_DMD_RMN_ITD;
2588 
2589       -- Skip the calculation if there is No Income
2590       IF trc_DmdRmnRun <> 0 THEN
2591          hr_utility.set_location('py_za_tx_01032005.YtdCalc',6);
2592          -- Taxable Deemed Remuneration
2593          trc_TxbDmdRmn := trc_DmdRmnRun;
2594          -- Threshold Check
2595          IF trc_TxbDmdRmn >= trc_Threshold THEN
2596             hr_utility.set_location('py_za_tx_01032005.YtdCalc',7);
2597             -- Tax Liability
2598             trc_TotLibDR := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbDmdRmn);
2599          ELSE
2600             hr_utility.set_location('py_za_tx_01032005.YtdCalc',8);
2601             trc_TotLibDR := 0;
2602          END IF;
2603       ELSE
2604          hr_utility.set_location('py_za_tx_01032005.YtdCalc',9);
2605          trc_TotLibDR := 0;
2606       END IF;
2607 
2608       hr_utility.set_location('py_za_tx_01032005.YtdCalc',10);
2609 
2610    -- Base Earnings
2611    --
2612       -- Base Earnings
2613       trc_BseErn := trc_TxbIncYtd * trc_SitFactor;
2614       -- Taxable Base Income
2615       trc_TxbBseInc := trc_BseErn - trc_PerTotAbm;
2616       -- Threshold Check
2617       IF trc_TxbBseInc >= trc_Threshold THEN
2618          hr_utility.set_location('py_za_tx_01032005.YtdCalc',11);
2619          -- Tax Liability
2620          trc_TotLibBse := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbBseInc);
2621          trc_TotLibBse := greatest(trc_TotLibBse,trc_TotLibDR);
2622       ELSE
2623          hr_utility.set_location('py_za_tx_01032005.YtdCalc',12);
2624          trc_TotLibBse := trc_TotLibDR;
2625       END IF;
2626 
2627       hr_utility.set_location('py_za_tx_01032005.YtdCalc',13);
2628 
2629    -- Annual Bonus
2630    --
2631       -- Ytd Annual Bonus
2632       trc_AnnBonYtd := bal_TOT_TXB_AB_YTD;
2633       -- Skip the calculation if there is No Income
2634       IF trc_AnnBonYtd <> 0 THEN
2635          hr_utility.set_location('py_za_tx_01032005.YtdCalc',14);
2636          -- Annual Bonus Earnings
2637          trc_AnnBonErn := trc_AnnBonYtd + trc_BseErn;
2638          -- Taxable Annual Bonus Income
2639          trc_TxbAnnBonInc := trc_AnnBonErn - trc_AnnTotAbm;
2640          -- Threshold Check
2641          IF trc_TxbAnnBonInc >= trc_Threshold THEN
2642             hr_utility.set_location('py_za_tx_01032005.YtdCalc',15);
2643             -- Tax Liability
2644             trc_TotLibAB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnBonInc);
2645             trc_LibFyAB  := trc_TotLibAB - least(trc_TotLibAB,trc_TotLibBse);
2646             trc_TotLibAB := greatest(trc_TotLibAB,trc_TotLibBse);
2647             -- Check Bonus Provision
2648             IF bal_BP_YTD <> 0 THEN
2649                hr_utility.set_location('py_za_tx_01032005.YtdCalc',16);
2650                -- Check Bonus Provision Frequency
2651                IF dbi_BP_TX_RCV = 'A' THEN
2652                   hr_utility.set_location('py_za_tx_01032005.YtdCalc',17);
2653                   trc_LibFpAB := 0;
2654                ELSE
2655                   hr_utility.set_location('py_za_tx_01032005.YtdCalc',18);
2656                   trc_LibFpAB := trc_LibFyAB - ( bal_TX_ON_BP_YTD
2657                                                + bal_TX_ON_AB_YTD);
2658                END IF;
2659             ELSE
2660                hr_utility.set_location('py_za_tx_01032005.YtdCalc',19);
2661                trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
2662             END IF;
2663          ELSE
2664             hr_utility.set_location('py_za_tx_01032005.YtdCalc',20);
2665             trc_TotLibAB := trc_TotLibBse;
2666          END IF;
2667       ELSE
2668          hr_utility.set_location('py_za_tx_01032005.YtdCalc',21);
2669          trc_AnnBonErn    := trc_BseErn;
2670          trc_TxbAnnBonInc := trc_TxbBseInc;
2671          trc_TotLibAB     := trc_TotLibBse;
2672       END IF;
2673 
2674       hr_utility.set_location('py_za_tx_01032005.YtdCalc',22);
2675 
2676    -- Annual Payments
2677    --
2678       -- Ytd Annual Payments
2679       trc_AnnPymYtd := bal_TOT_TXB_AP_YTD;
2680       -- Skip the calculation if there is No Income
2681       IF trc_AnnPymYtd <> 0 THEN
2682          hr_utility.set_location('py_za_tx_01032005.YtdCalc',23);
2683          -- Annual Payments Earnings
2684          trc_AnnPymErn := trc_AnnPymYtd + trc_AnnBonErn;
2685          -- Taxable Annual Payments Income
2686          trc_TxbAnnPymInc := trc_AnnPymErn - trc_AnnTotAbm;
2687          -- Threshold Check
2688          IF trc_TxbAnnPymInc >= trc_Threshold THEN
2689             hr_utility.set_location('py_za_tx_01032005.YtdCalc',24);
2690             -- Tax Liability
2691             trc_TotLibAP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnPymInc);
2692             trc_LibFyAP  := trc_TotLibAP - least(trc_TotLibAP,trc_TotLibAB);
2693             trc_TotLibAP := greatest(trc_TotLibAP,trc_TotLibAB);
2694             trc_LibFpAP  := trc_LibFyAP - bal_TX_ON_AP_YTD;
2695          ELSE
2696             hr_utility.set_location('py_za_tx_01032005.YtdCalc',25);
2697             trc_TotLibAP := trc_TotLibAB;
2698          END IF;
2699       ELSE
2700          hr_utility.set_location('py_za_tx_01032005.YtdCalc',26);
2701          trc_AnnPymErn    := trc_AnnBonErn;
2702          trc_TxbAnnPymInc := trc_TxbAnnBonInc;
2703          trc_TotLibAP     := trc_TotLibAB;
2704       END IF;
2705 
2706    -- Net Pay validation
2707    --
2708       py_za_tx_utl_01032005.ValidateTaxOns;
2709 
2710       hr_utility.set_location('py_za_tx_01032005.YtdCalc',27);
2711 
2712       -- Deemed Remuneration
2713       WrtHrTrc('trc_TxbDmdRmn:    '||to_char(trc_TxbDmdRmn));
2714       WrtHrTrc('trc_TotLibDR:     '||to_char(trc_TotLibDR));
2715       WrtHrTrc('trc_LibFyDR:      '||to_char(trc_LibFyDR));
2716       WrtHrTrc('trc_LibFpDR:      '||to_char(trc_LibFpDR));
2717       -- Base Income
2718       WrtHrTrc('trc_BseErn:       '||to_char(trc_BseErn));
2719       WrtHrTrc('trc_TxbBseInc:    '||to_char(trc_TxbBseInc));
2720       WrtHrTrc('trc_TotLibBse:    '||to_char(trc_TotLibBse));
2721       -- Normal Income
2722       WrtHrTrc('trc_NorIncYtd:    '||to_char(trc_NorIncYtd));
2723       WrtHrTrc('trc_NorIncPtd:    '||to_char(trc_NorIncPtd));
2724       WrtHrTrc('trc_NorErn:       '||to_char(trc_NorErn));
2725       WrtHrTrc('trc_TxbNorInc:    '||to_char(trc_TxbNorInc));
2726       WrtHrTrc('trc_TotLibNI:     '||to_char(trc_TotLibNI));
2727       WrtHrTrc('trc_LibFyNI:      '||to_char(trc_LibFyNI));
2728       WrtHrTrc('trc_LibFpNI:      '||to_char(trc_LibFpNI));
2729       -- Fringe Benefits
2730       WrtHrTrc('trc_FrnBenYtd:    '||to_char(trc_FrnBenYtd));
2731       WrtHrTrc('trc_FrnBenPtd:    '||to_char(trc_FrnBenPtd));
2732       WrtHrTrc('trc_FrnBenErn:    '||to_char(trc_FrnBenErn));
2733       WrtHrTrc('trc_TxbFrnInc:    '||to_char(trc_TxbFrnInc));
2734       WrtHrTrc('trc_TotLibFB:     '||to_char(trc_TotLibFB));
2735       WrtHrTrc('trc_LibFyFB:      '||to_char(trc_LibFyFB));
2736       WrtHrTrc('trc_LibFpFB:      '||to_char(trc_LibFpFB));
2737       -- Travel Allowance
2738       WrtHrTrc('trc_TrvAllYtd:    '||to_char(trc_TrvAllYtd));
2739       WrtHrTrc('trc_TrvAllPtd:    '||to_char(trc_TrvAllPtd));
2740       WrtHrTrc('trc_TrvAllErn:    '||to_char(trc_TrvAllErn));
2741       WrtHrTrc('trc_TxbTrvInc:    '||to_char(trc_TxbTrvInc));
2742       WrtHrTrc('trc_TotLibTA:     '||to_char(trc_TotLibTA));
2743       WrtHrTrc('trc_LibFyTA:      '||to_char(trc_LibFyTA));
2744       WrtHrTrc('trc_LibFpTA:      '||to_char(trc_LibFpTA));
2745       -- Bonus Provision
2746       WrtHrTrc('trc_BonProYtd:    '||to_char(trc_BonProYtd));
2747       WrtHrTrc('trc_BonProPtd:    '||to_char(trc_BonProPtd));
2748       WrtHrTrc('trc_BonProErn:    '||to_char(trc_BonProErn));
2749       WrtHrTrc('trc_TxbBonProInc: '||to_char(trc_TxbBonProInc));
2750       WrtHrTrc('trc_TotLibBP:     '||to_char(trc_TotLibBP));
2751       WrtHrTrc('trc_LibFyBP:      '||to_char(trc_LibFyBP));
2752       WrtHrTrc('trc_LibFpBP:      '||to_char(trc_LibFpBP));
2753       -- Annual Bonus
2754       WrtHrTrc('trc_AnnBonYtd:    '||to_char(trc_AnnBonYtd));
2755       WrtHrTrc('trc_AnnBonPtd:    '||to_char(trc_AnnBonPtd));
2756       WrtHrTrc('trc_AnnBonErn:    '||to_char(trc_AnnBonErn));
2757       WrtHrTrc('trc_TxbAnnBonInc: '||to_char(trc_TxbAnnBonInc));
2758       WrtHrTrc('trc_TotLibAB:     '||to_char(trc_TotLibAB));
2759       WrtHrTrc('trc_LibFyAB:      '||to_char(trc_LibFyAB));
2760       WrtHrTrc('trc_LibFpAB:      '||to_char(trc_LibFpAB));
2761       -- Annual Payments
2762       WrtHrTrc('trc_AnnPymYtd:    '||to_char(trc_AnnPymYtd));
2763       WrtHrTrc('trc_AnnPymPtd:    '||to_char(trc_AnnPymPtd));
2764       WrtHrTrc('trc_AnnPymErn:    '||to_char(trc_AnnPymErn));
2765       WrtHrTrc('trc_TxbAnnPymInc: '||to_char(trc_TxbAnnPymInc));
2766       WrtHrTrc('trc_TotLibAP:     '||to_char(trc_TotLibAP));
2767       WrtHrTrc('trc_LibFyAP:      '||to_char(trc_LibFyAP));
2768       WrtHrTrc('trc_LibFpAP:      '||to_char(trc_LibFpAP));
2769       -- Pubilc Office Allowance
2770       WrtHrTrc('trc_PblOffYtd:    '||to_char(trc_PblOffYtd));
2771       WrtHrTrc('trc_PblOffPtd:    '||to_char(trc_PblOffPtd));
2772       WrtHrTrc('trc_PblOffErn:    '||to_char(trc_PblOffErn));
2773       WrtHrTrc('trc_LibFyPO:      '||to_char(trc_LibFyPO));
2774       WrtHrTrc('trc_LibFpPO:      '||to_char(trc_LibFpPO));
2775 
2776    END IF;
2777 
2778 EXCEPTION
2779    WHEN OTHERS THEN
2780       IF xpt_Msg = 'No Error' THEN
2781          xpt_Msg := 'YtdCalc: '||TO_CHAR(SQLCODE);
2782       END IF;
2783       RAISE xpt_E;
2784 END YtdCalc;
2785 -------------------------------------------------------------------------------
2786 -- NorCalc                                                                   --
2787 -- Main Tax Calculation for Periodic Income                                  --
2788 -------------------------------------------------------------------------------
2789 PROCEDURE NorCalc AS
2790 -- Variables
2791 --
2792    l_Np       BALANCE DEFAULT 0;
2793 
2794 BEGIN
2795 
2796    hr_utility.set_location('py_za_tx_01032005.NorCalc',1);
2797 -- Identify the calculation
2798 --
2799    trc_CalTyp := 'NorCalc';
2800 
2801 -- Update Global Balance Values with correct TAXABLE values
2802 --
2803    bal_TOT_TXB_TA_PTD  := bal_TOT_TXB_TA_PTD * glb_ZA_TRV_ALL_TX_PRC / 100;
2804 
2805    py_za_tx_utl_01032005.TrvAll;
2806 
2807    hr_utility.set_location('py_za_tx_01032005.NorCalc',2);
2808 
2809    bal_TOT_TXB_PO_PTD  := bal_TOT_TXB_PO_PTD * glb_ZA_PBL_TX_PRC / 100;
2810    bal_TOT_TXB_PO_YTD  := bal_TOT_TXB_PO_YTD * glb_ZA_PBL_TX_PRC / 100;
2811 
2812 -- PTD Taxable Income
2813 --
2814    trc_TxbIncPtd :=
2815       ( bal_TOT_TXB_NI_PTD
2816       + bal_TOT_TXB_FB_PTD
2817       + bal_TOT_TXB_TA_PTD
2818       + bal_BP_PTD
2819       );
2820 -- Period Factor
2821    py_za_tx_utl_01032005.PeriodFactor;
2822 
2823 -- Possible Periods Factor
2824    py_za_tx_utl_01032005.PossiblePeriodsFactor;
2825 
2826 -- Rebates
2827    py_za_tx_utl_01032005.SetRebates;
2828 
2829 -- Abatements
2830    py_za_tx_utl_01032005.Abatements;
2831 
2832    hr_utility.set_location('py_za_tx_01032005.NorCalc',3);
2833 
2834 -- Deemed Remuneration
2835 --
2836    -- Run Deemed Remuneration
2837    trc_DmdRmnRun := bal_DIR_DMD_RMN_ITD;
2838    -- Skip the calculation if there is No Income
2839    IF trc_DmdRmnRun <> 0 THEN
2840       hr_utility.set_location('py_za_tx_01032005.NorCalc',4);
2841       -- Taxable Deemed Remuneration
2842       trc_TxbDmdRmn := trc_DmdRmnRun;
2843       -- Threshold Check
2844       IF trc_TxbDmdRmn >= trc_Threshold THEN
2845          hr_utility.set_location('py_za_tx_01032005.NorCalc',5);
2846          -- Tax Liability
2847          trc_TotLibDR := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbDmdRmn);
2848          trc_LibFyDR  := trc_TotLibDR - 0;
2849          trc_TotLibDR := greatest(trc_TotLibDR,0);
2850          -- DeAnnualise
2851          trc_LibFpDR := py_za_tx_utl_01032005.DeAnnualise
2852                            ( p_Liab    => trc_LibFyDR
2853                            , p_TxOnYtd => bal_TX_ON_DR_YTD
2854                            , p_TxOnPtd => bal_TX_ON_DR_PTD
2855                            );
2856       ELSE
2857          hr_utility.set_location('py_za_tx_01032005.NorCalc',6);
2858          -- Set Cascade Figures and Refund
2859          trc_TotLibDR   := 0;
2860          trc_LibFpDR    := -1 * bal_TX_ON_DR_YTD;
2861          trc_LibFpDROvr := TRUE;
2862       END IF;
2863    ELSE
2864       hr_utility.set_location('py_za_tx_01032005.NorCalc',7);
2865       -- Set Cascade Figures and Refund
2866       trc_TxbDmdRmn  := 0;
2867       trc_TotLibDR   := 0;
2868       trc_LibFpDR    := -1 * bal_TX_ON_DR_YTD;
2869       trc_LibFpDROvr := TRUE;
2870    END IF;
2871 
2872 -- Normal Income
2873 --
2874    -- Ytd Normal Income
2875    trc_NorIncYtd := bal_TOT_TXB_NI_YTD;
2876    -- Skip the calculation if there is No Income
2877    IF trc_NorIncYtd <> 0 THEN
2878       hr_utility.set_location('py_za_tx_01032005.NorCalc',8);
2879 
2880       -- Annualise Normal Income
2881       trc_NorErn := py_za_tx_utl_01032005.Annualise
2882          (p_YtdInc => trc_NorIncYtd
2883          ,p_PtdInc => trc_NorIncPtd
2884          );
2885       -- Taxable Normal Income
2886       trc_TxbNorInc := trc_NorErn - trc_PerTotAbm;
2887       -- Threshold Check
2888       IF trc_TxbNorInc >= trc_Threshold THEN
2889          hr_utility.set_location('py_za_tx_01032005.NorCalc',9);
2890          -- Tax Liability
2891          trc_TotLibNI := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbNorInc);
2892          trc_LibFyNI  := trc_TotLibNI - least(trc_TotLibNI,trc_TotLibDR);
2893          trc_TotLibNI := greatest(trc_TotLibNI,trc_TotLibDR);
2894          -- DeAnnualise
2895          trc_LibFpNI := py_za_tx_utl_01032005.DeAnnualise
2896                            ( p_Liab    => trc_LibFyNI
2897                            , p_TxOnYtd => bal_TX_ON_NI_YTD
2898                            , p_TxOnPtd => bal_TX_ON_NI_PTD
2899                            );
2900       ELSE
2901          hr_utility.set_location('py_za_tx_01032005.NorCalc',10);
2902          -- Set Cascade Figures and Refund
2903          trc_TotLibNI   := trc_TotLibDR;
2904          trc_LibFpNI    := -1 * bal_TX_ON_NI_YTD;
2905          trc_LibFpNIOvr := TRUE;
2906       END IF;
2907    ELSE
2908       hr_utility.set_location('py_za_tx_01032005.NorCalc',11);
2909       -- Set Cascade Figures and Refund
2910       trc_NorErn     := 0;
2911       trc_TxbNorInc  := 0;
2912       trc_TotLibNI   := trc_TotLibDR;
2913       trc_LibFpNI    := -1 * bal_TX_ON_NI_YTD;
2914       trc_LibFpNIOvr := TRUE;
2915    END IF;
2916 
2917 -- Fringe Benefits
2918 --
2919    -- Ytd Fringe Benefits
2920    trc_FrnBenYtd := bal_TOT_TXB_FB_YTD;
2921    -- Skip the calculation if there is No Income
2922    IF trc_FrnBenYtd <> 0 THEN
2923       hr_utility.set_location('py_za_tx_01032005.NorCalc',12);
2924 
2925       -- Annualise Fringe Benefits
2926       trc_FrnBenErn := py_za_tx_utl_01032005.Annualise
2927                           ( p_YtdInc => trc_FrnBenYtd
2928                           , p_PtdInc => trc_FrnBenPtd
2929                           ) + trc_NorErn;
2930       -- Taxable Fringe Income
2931       trc_TxbFrnInc := trc_FrnBenErn - trc_PerTotAbm;
2932       -- Threshold Check
2933       IF trc_TxbFrnInc >= trc_Threshold THEN
2934          hr_utility.set_location('py_za_tx_01032005.NorCalc',13);
2935          -- Tax Liability
2936          trc_TotLibFB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbFrnInc);
2937          trc_LibFyFB  := trc_TotLibFB - least(trc_TotLibFB,trc_TotLibNI);
2938          trc_TotLibFB := greatest(trc_TotLibFB,trc_TotLibNI);
2939          -- DeAnnualise
2940          trc_LibFpFB := py_za_tx_utl_01032005.DeAnnualise
2941                            ( trc_LibFyFB
2942                            , bal_TX_ON_FB_YTD
2943                            , bal_TX_ON_FB_PTD
2944                            );
2945       ELSE
2946          hr_utility.set_location('py_za_tx_01032005.NorCalc',14);
2947          -- Set Cascade Figures and Refund
2948          trc_TotLibFB   := trc_TotLibNI;
2949          trc_LibFpFB    := -1 * bal_TX_ON_FB_YTD;
2950          trc_LibFpFBOvr := TRUE;
2951       END IF;
2952    ELSE
2953       hr_utility.set_location('py_za_tx_01032005.NorCalc',15);
2954       -- Set Cascade Figures and Refund
2955       trc_FrnBenErn  := trc_NorErn;
2956       trc_TxbFrnInc  := trc_TxbNorInc;
2957       trc_TotLibFB   := trc_TotLibNI;
2958       trc_LibFpFB    := -1 * bal_TX_ON_FB_YTD;
2959       trc_LibFpFBOvr := TRUE;
2960    END IF;
2961 
2962 -- Travel Allowance
2963 --
2964    -- Ytd Travel Allowance
2965    trc_TrvAllYtd := bal_TOT_TXB_TA_YTD;
2966    -- Skip the calculation if there is No Income
2967    IF trc_TrvAllYtd <> 0 THEN
2968       hr_utility.set_location('py_za_tx_01032005.NorCalc',16);
2969       -- Ptd Travel Allowance
2970       trc_TrvAllPtd := bal_TOT_TXB_TA_PTD;
2971       -- Annualise Travel Allowance
2972       trc_TrvAllErn := py_za_tx_utl_01032005.Annualise
2973                           ( p_YtdInc => trc_TrvAllYtd
2974                           , p_PtdInc => trc_TrvAllPtd
2975                           ) + trc_FrnBenErn;
2976       -- Taxable Travel Income
2977       trc_TxbTrvInc := trc_TrvAllErn - trc_PerTotAbm;
2978       -- Threshold Check
2979       IF trc_TxbTrvInc >= trc_Threshold THEN
2980          hr_utility.set_location('py_za_tx_01032005.NorCalc',17);
2981          -- Tax Liability
2982          trc_TotLibTA := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbTrvInc);
2983          trc_LibFyTA  := trc_TotLibTA - least(trc_TotLibTA,trc_TotLibFB);
2984          trc_TotLibTA := greatest(trc_TotLibTA,trc_TotLibFB);
2985          -- DeAnnualise
2986          trc_LibFpTA := py_za_tx_utl_01032005.DeAnnualise
2987                            ( trc_LibFyTA
2988                            , bal_TX_ON_TA_YTD
2989                            , bal_TX_ON_TA_PTD
2990                            );
2991       ELSE
2992          hr_utility.set_location('py_za_tx_01032005.NorCalc',18);
2993          -- Set Cascade Figures and Refund
2994          trc_TotLibTA   := trc_TotLibFB;
2995          trc_LibFpTA    := -1 * bal_TX_ON_TA_YTD;
2996          trc_LibFpTAOvr := TRUE;
2997       END IF;
2998    ELSE
2999       hr_utility.set_location('py_za_tx_01032005.NorCalc',19);
3000       -- Set Cascade Figures and Refund
3001       trc_TrvAllErn  := trc_FrnBenErn;
3002       trc_TxbTrvInc  := trc_TxbFrnInc;
3003       trc_TotLibTA   := trc_TotLibFB;
3004       trc_LibFpTA    := -1 * bal_TX_ON_TA_YTD;
3005       trc_LibFpTAOvr := TRUE;
3006    END IF;
3007 
3008 -- Bonus Provision
3009 --
3010    -- Ytd Bonus Prvision
3011    trc_BonProYtd := bal_BP_YTD;
3012    -- Skip the calculation if there is No Income
3013    IF trc_BonProYtd <> 0 THEN
3014       hr_utility.set_location('py_za_tx_01032005.NorCalc',20);
3015       -- Annualise Bonus Provision
3016       trc_BonProErn := py_za_tx_utl_01032005.Annualise
3017                           ( p_YtdInc => trc_BonProYtd
3018                           , p_PtdInc => trc_BonProPtd
3019                           ) + trc_TrvAllErn;
3020       -- Taxable Bonus Provision Income
3021       trc_TxbBonProInc := trc_BonProErn - trc_PerTotAbm;
3022       -- Threshold Check
3023       IF trc_TxbBonProInc >= trc_Threshold THEN
3024          hr_utility.set_location('py_za_tx_01032005.NorCalc',21);
3025          -- Tax Liability
3026          trc_TotLibBP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbBonProInc);
3027          trc_LibFyBP  := trc_TotLibBP - least(trc_TotLibBP,trc_TotLibTA);
3028          trc_TotLibBP := greatest(trc_TotLibBP,trc_TotLibTA);
3029          -- DeAnnualise
3030          trc_LibFpBP := py_za_tx_utl_01032005.DeAnnualise
3031                            ( trc_LibFyBP
3032                            , bal_TX_ON_BP_YTD
3033                            , bal_TX_ON_BP_PTD
3034                            );
3035       ELSE
3036          hr_utility.set_location('py_za_tx_01032005.NorCalc',22);
3037          -- Set Cascade Figures and Refund
3038          trc_TotLibBP   := trc_TotLibTA;
3039          trc_LibFpBP    := -1 * bal_TX_ON_BP_YTD;
3040          trc_LibFpBPOvr := TRUE;
3041       END IF;
3042    ELSE
3043       hr_utility.set_location('py_za_tx_01032005.NorCalc',23);
3044       -- Set Cascade Figures and Refund
3045       trc_BonProErn    := trc_TrvAllErn;
3046       trc_TxbBonProInc := trc_TxbTrvInc;
3047       trc_TotLibBP     := trc_TotLibTA;
3048       trc_LibFpBP      := -1 * bal_TX_ON_BP_YTD;
3049       trc_LibFpBPOvr   := TRUE;
3050    END IF;
3051 
3052 -- Annual Bonus
3053 --
3054    -- Ytd Annual Bonus
3055    trc_AnnBonYtd := bal_TOT_TXB_AB_YTD;
3056    -- Skip the calculation if there is No Income
3057    IF trc_AnnBonYtd <> 0 THEN
3058       hr_utility.set_location('py_za_tx_01032005.NorCalc',24);
3059       -- Annual Bonus Earnings
3060       trc_AnnBonErn := trc_AnnBonYtd + trc_TrvAllErn;
3061       -- Taxable Annual Bonus Income
3062       trc_TxbAnnBonInc := trc_AnnBonErn - trc_AnnTotAbm;
3063       -- Threshold Check
3064       IF trc_TxbAnnBonInc >= trc_Threshold THEN
3065          hr_utility.set_location('py_za_tx_01032005.NorCalc',25);
3066          -- Tax Liability
3067          trc_TotLibAB := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnBonInc);
3068          trc_LibFyAB  := trc_TotLibAB - least(trc_TotLibAB,trc_TotLibTA);
3069          trc_TotLibAB := greatest(trc_TotLibAB,trc_TotLibTA);
3070          -- Check Bonus Provision
3071          IF trc_BonProYtd <> 0 THEN
3072             hr_utility.set_location('py_za_tx_01032005.NorCalc',26);
3073             -- Check Bonus Provision Frequency
3074             IF dbi_BP_TX_RCV = 'A' THEN
3075                hr_utility.set_location('py_za_tx_01032005.NorCalc',27);
3076                trc_LibFpAB := 0;
3077             ELSE
3078                hr_utility.set_location('py_za_tx_01032005.NorCalc',28);
3079                trc_LibFpAB := trc_LibFyAB - ( bal_TX_ON_BP_YTD
3080                                             + trc_LibFpBP
3081                                             + bal_TX_ON_AB_YTD);
3082             END IF;
3083          ELSE
3084             hr_utility.set_location('py_za_tx_01032005.NorCalc',29);
3085             trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
3086          END IF;
3087       ELSE
3088          hr_utility.set_location('py_za_tx_01032005.NorCalc',30);
3089          -- Set Cascade Figures and Refund
3090          trc_TotLibAB   := trc_TotLibTA;
3091          trc_LibFpAB    := -1 * bal_TX_ON_AB_YTD;
3092          trc_LibFpABOvr := TRUE;
3093       END IF;
3094    ELSE
3095       hr_utility.set_location('py_za_tx_01032005.NorCalc',31);
3096       -- Set Cascade Figures and Refund
3097       trc_AnnBonErn    := trc_BonProErn;
3098       trc_TxbAnnBonInc := trc_TxbBonProInc;
3099       trc_TotLibAB     := trc_TotLibBP;
3100       trc_LibFpAB      := -1 * bal_TX_ON_AB_YTD;
3101       trc_LibFpABOvr   := TRUE;
3102    END IF;
3103 
3104 -- Annual Payments
3105 --
3106    -- Ytd Annual Payments
3107    trc_AnnPymYtd := bal_TOT_TXB_AP_YTD ;
3108    -- Skip the calculation if there is No Income
3109    IF trc_AnnPymYtd <> 0 THEN
3110       hr_utility.set_location('py_za_tx_01032005.NorCalc',32);
3111       -- Annual Payments Earnings
3112       trc_AnnPymErn := trc_AnnPymYtd + trc_AnnBonErn;
3113       -- Taxable Annual Payments Income
3114       trc_TxbAnnPymInc := trc_AnnPymErn - trc_AnnTotAbm;
3115       -- Threshold Check
3116       IF trc_TxbAnnPymInc >= trc_Threshold THEN
3117          hr_utility.set_location('py_za_tx_01032005.NorCalc',33);
3118          -- Tax Liability
3119          trc_TotLibAP := py_za_tx_utl_01032005.TaxLiability(p_Amt => trc_TxbAnnPymInc);
3120          trc_LibFyAP  := trc_TotLibAP - least(trc_TotLibAP,trc_TotLibAB);
3121          trc_TotLibAP := greatest(trc_TotLibAP,trc_TotLibAB);
3122          hr_utility.set_location('py_za_tx_01032005.NorCalc',34);
3123          trc_LibFpAP  := trc_LibFyAP - bal_TX_ON_AP_YTD;
3124       ELSE
3125          hr_utility.set_location('py_za_tx_01032005.NorCalc',35);
3126          -- Set Cascade Figures and Refund
3127          trc_TotLibAP   := trc_TotLibAB;
3128          trc_LibFpAP    := -1 * bal_TX_ON_AP_YTD;
3129          trc_LibFpAPOvr := TRUE;
3130       END IF;
3131    ELSE
3132       hr_utility.set_location('py_za_tx_01032005.NorCalc',36);
3133       -- Set Cascade Figures and Refund
3134       trc_AnnPymErn    := trc_AnnBonErn;
3135       trc_TxbAnnPymInc := trc_TxbAnnBonInc;
3136       trc_TotLibAP     := trc_TotLibAB;
3137       trc_LibFpAP      := -1 * bal_TX_ON_AP_YTD;
3138       trc_LibFpAPOvr   := TRUE;
3139    END IF;
3140 
3141 -- Public Office Allowance
3142 --
3143    -- Ytd Public Office Allowance
3144    trc_PblOffYtd := bal_TOT_TXB_PO_YTD;
3145    -- Skip the calculation if there is No Income
3146    IF trc_PblOffYtd <> 0 THEN
3147       hr_utility.set_location('py_za_tx_01032005.NorCalc',37);
3148       -- Ptd Public Office Allowance
3149       trc_PblOffPtd := bal_TOT_TXB_PO_PTD;
3150       -- Annualise Public Office Allowance
3151       trc_PblOffErn := py_za_tx_utl_01032005.Annualise
3152                           ( p_YtdInc => trc_PblOffYtd
3153                           , p_PtdInc => trc_PblOffPtd
3154                           );
3155       -- Tax Liability
3156       trc_LibFyPO := trc_PblOffErn * glb_ZA_PBL_TX_RTE / 100;
3157       trc_LibFpPO := py_za_tx_utl_01032005.DeAnnualise
3158                         ( trc_LibFyPO
3159                         , bal_TX_ON_PO_YTD
3160                         , bal_TX_ON_PO_PTD
3161                         );
3162    ELSE
3163       hr_utility.set_location('py_za_tx_01032005.NorCalc',38);
3164       -- Set Cascade Figures and Refund
3165       trc_LibFpPO    := -1 * bal_TX_ON_PO_YTD;
3166       trc_LibFpPOOvr := TRUE;
3167    END IF;
3168 
3169 -- Net Pay Validation
3170 --
3171    py_za_tx_utl_01032005.ValidateTaxOns;
3172 
3173    hr_utility.set_location('py_za_tx_01032005.NorCalc',39);
3174 
3175    -- Deemed Remuneration
3176    WrtHrTrc('trc_TxbDmdRmn:    '||to_char(trc_TxbDmdRmn));
3177    WrtHrTrc('trc_TotLibDR:     '||to_char(trc_TotLibDR ));
3178    WrtHrTrc('trc_LibFyDR:      '||to_char(trc_LibFyDR  ));
3179    WrtHrTrc('trc_LibFpDR:      '||to_char(trc_LibFpDR  ));
3180    -- Base Income
3181    WrtHrTrc('trc_BseErn:       '||to_char(trc_BseErn   ));
3182    WrtHrTrc('trc_TxbBseInc:    '||to_char(trc_TxbBseInc));
3183    WrtHrTrc('trc_TotLibBse:    '||to_char(trc_TotLibBse));
3184    -- Normal Income
3185    WrtHrTrc('trc_NorIncYtd:    '||to_char(trc_NorIncYtd));
3186    WrtHrTrc('trc_NorIncPtd:    '||to_char(trc_NorIncPtd));
3187    WrtHrTrc('trc_NorErn:       '||to_char(trc_NorErn   ));
3188    WrtHrTrc('trc_TxbNorInc:    '||to_char(trc_TxbNorInc));
3189    WrtHrTrc('trc_TotLibNI:     '||to_char(trc_TotLibNI ));
3190    WrtHrTrc('trc_LibFyNI:      '||to_char(trc_LibFyNI  ));
3191    WrtHrTrc('trc_LibFpNI:      '||to_char(trc_LibFpNI  ));
3192    -- Fringe Benefits
3193    WrtHrTrc('trc_FrnBenYtd:    '||to_char(trc_FrnBenYtd));
3194    WrtHrTrc('trc_FrnBenPtd:    '||to_char(trc_FrnBenPtd));
3195    WrtHrTrc('trc_FrnBenErn:    '||to_char(trc_FrnBenErn));
3196    WrtHrTrc('trc_TxbFrnInc:    '||to_char(trc_TxbFrnInc));
3197    WrtHrTrc('trc_TotLibFB:     '||to_char(trc_TotLibFB ));
3198    WrtHrTrc('trc_LibFyFB:      '||to_char(trc_LibFyFB  ));
3199    WrtHrTrc('trc_LibFpFB:      '||to_char(trc_LibFpFB  ));
3200    -- Travel Allowance
3201    WrtHrTrc('trc_TrvAllYtd:    '||to_char(trc_TrvAllYtd));
3202    WrtHrTrc('trc_TrvAllPtd:    '||to_char(trc_TrvAllPtd));
3203    WrtHrTrc('trc_TrvAllErn:    '||to_char(trc_TrvAllErn));
3204    WrtHrTrc('trc_TxbTrvInc:    '||to_char(trc_TxbTrvInc));
3205    WrtHrTrc('trc_TotLibTA:     '||to_char(trc_TotLibTA ));
3206    WrtHrTrc('trc_LibFyTA:      '||to_char(trc_LibFyTA  ));
3207    WrtHrTrc('trc_LibFpTA:      '||to_char(trc_LibFpTA  ));
3208    -- Bonus Provision
3209    WrtHrTrc('trc_BonProYtd:    '||to_char(trc_BonProYtd));
3210    WrtHrTrc('trc_BonProPtd:    '||to_char(trc_BonProPtd));
3211    WrtHrTrc('trc_BonProErn:    '||to_char(trc_BonProErn));
3212    WrtHrTrc('trc_TxbBonProInc: '||to_char(trc_TxbBonProInc));
3213    WrtHrTrc('trc_TotLibBP:     '||to_char(trc_TotLibBP ));
3214    WrtHrTrc('trc_LibFyBP:      '||to_char(trc_LibFyBP  ));
3215    WrtHrTrc('trc_LibFpBP:      '||to_char(trc_LibFpBP  ));
3216    -- Annual Bonus
3217    WrtHrTrc('trc_AnnBonYtd:    '||to_char(trc_AnnBonYtd));
3218    WrtHrTrc('trc_AnnBonPtd:    '||to_char(trc_AnnBonPtd));
3219    WrtHrTrc('trc_AnnBonErn:    '||to_char(trc_AnnBonErn));
3220    WrtHrTrc('trc_TxbAnnBonInc: '||to_char(trc_TxbAnnBonInc));
3221    WrtHrTrc('trc_TotLibAB:     '||to_char(trc_TotLibAB ));
3222    WrtHrTrc('trc_LibFyAB:      '||to_char(trc_LibFyAB  ));
3223    WrtHrTrc('trc_LibFpAB:      '||to_char(trc_LibFpAB  ));
3224    -- Annual Payments
3225    WrtHrTrc('trc_AnnPymYtd:    '||to_char(trc_AnnPymYtd));
3226    WrtHrTrc('trc_AnnPymPtd:    '||to_char(trc_AnnPymPtd));
3227    WrtHrTrc('trc_AnnPymErn:    '||to_char(trc_AnnPymErn));
3228    WrtHrTrc('trc_TxbAnnPymInc: '||to_char(trc_TxbAnnPymInc));
3229    WrtHrTrc('trc_TotLibAP:     '||to_char(trc_TotLibAP ));
3230    WrtHrTrc('trc_LibFyAP:      '||to_char(trc_LibFyAP  ));
3231    WrtHrTrc('trc_LibFpAP:      '||to_char(trc_LibFpAP  ));
3232    -- Pubilc Office Allowance
3233    WrtHrTrc('trc_PblOffYtd:    '||to_char(trc_PblOffYtd));
3234    WrtHrTrc('trc_PblOffPtd:    '||to_char(trc_PblOffPtd));
3235    WrtHrTrc('trc_PblOffErn:    '||to_char(trc_PblOffErn));
3236    WrtHrTrc('trc_LibFyPO:      '||to_char(trc_LibFyPO  ));
3237    WrtHrTrc('trc_LibFpPO:      '||to_char(trc_LibFpPO  ));
3238 
3239 EXCEPTION
3240    WHEN OTHERS THEN
3241       IF xpt_Msg = 'No Error' THEN
3242          xpt_Msg := 'NorCalc: '||TO_CHAR(SQLCODE);
3243       END IF;
3244       RAISE xpt_E;
3245 END NorCalc;
3246 -------------------------------------------------------------------------------
3247 -- ZaTxGlb_01032005                                                          --
3248 -- Tax module supporting function                                            --
3249 -------------------------------------------------------------------------------
3250 FUNCTION ZaTxGlb_01032005(
3251 -- Global Values
3252     p_ZA_ADL_TX_RBT         IN NUMBER
3253    ,p_ZA_ARR_PF_AN_MX_ABT   IN NUMBER
3254    ,p_ZA_ARR_RA_AN_MX_ABT   IN NUMBER
3255    ,p_ZA_TRV_ALL_TX_PRC     IN NUMBER
3256    ,p_ZA_CC_TX_PRC          IN NUMBER
3257    ,p_ZA_PF_AN_MX_ABT       IN NUMBER
3258    ,p_ZA_PF_MX_PRC          IN NUMBER
3259    ,p_ZA_PER_SERV_COMP_PERC IN NUMBER
3260    ,p_ZA_PER_SERV_TRST_PERC IN NUMBER
3261    ,p_ZA_PRI_TX_RBT         IN NUMBER
3262    ,p_ZA_PRI_TX_THRSHLD     IN NUMBER
3263    ,p_ZA_PBL_TX_PRC         IN NUMBER
3264    ,p_ZA_PBL_TX_RTE         IN NUMBER
3265    ,p_ZA_RA_AN_MX_ABT       IN NUMBER
3266    ,p_ZA_RA_MX_PRC          IN NUMBER
3267    ,p_ZA_SC_TX_THRSHLD      IN NUMBER
3268    ,p_ZA_SIT_LIM            IN NUMBER
3269    ,p_ZA_TMP_TX_RTE         IN NUMBER
3270    ,p_ZA_WRK_DYS_PR_YR      IN NUMBER
3271    ) RETURN NUMBER
3272 AS
3273    l_Dum NUMBER := 1;
3274    --id VARCHAR2(30);
3275 
3276 BEGIN
3277 
3278    --id := dbms_debug.initialize('JLTX');
3279    --dbms_debug.debug_on;
3280 
3281 -- Initialise Package Globals
3282 -- Global Values
3283    glb_ZA_ADL_TX_RBT         := p_ZA_ADL_TX_RBT;
3284    glb_ZA_ARR_PF_AN_MX_ABT   := p_ZA_ARR_PF_AN_MX_ABT;
3285    glb_ZA_ARR_RA_AN_MX_ABT   := p_ZA_ARR_RA_AN_MX_ABT;
3286    glb_ZA_TRV_ALL_TX_PRC     := p_ZA_TRV_ALL_TX_PRC;
3287    glb_ZA_CC_TX_PRC          := p_ZA_CC_TX_PRC;
3288    glb_ZA_PF_AN_MX_ABT       := p_ZA_PF_AN_MX_ABT;
3289    glb_ZA_PF_MX_PRC          := p_ZA_PF_MX_PRC;
3290    glb_ZA_PER_SERV_COMP_PERC := p_ZA_PER_SERV_COMP_PERC;
3291    glb_ZA_PER_SERV_TRST_PERC := p_ZA_PER_SERV_TRST_PERC;
3292    glb_ZA_PRI_TX_RBT         := p_ZA_PRI_TX_RBT;
3293    glb_ZA_PRI_TX_THRSHLD     := p_ZA_PRI_TX_THRSHLD;
3294    glb_ZA_PBL_TX_PRC         := p_ZA_PBL_TX_PRC;
3295    glb_ZA_PBL_TX_RTE         := p_ZA_PBL_TX_RTE;
3296    glb_ZA_RA_AN_MX_ABT       := p_ZA_RA_AN_MX_ABT;
3297    glb_ZA_RA_MX_PRC          := p_ZA_RA_MX_PRC;
3298    glb_ZA_SC_TX_THRSHLD      := p_ZA_SC_TX_THRSHLD;
3299    glb_ZA_SIT_LIM            := p_ZA_SIT_LIM;
3300    glb_ZA_TMP_TX_RTE         := p_ZA_TMP_TX_RTE;
3301    glb_ZA_WRK_DYS_PR_YR      := p_ZA_WRK_DYS_PR_YR;
3302 
3303    RETURN l_Dum;
3304 EXCEPTION
3305    WHEN OTHERS THEN
3306       hr_utility.set_message(801, 'ZaTxGlb_01032005: '||TO_CHAR(SQLCODE));
3307       hr_utility.raise_error;
3308 END ZaTxGlb_01032005;
3309 -------------------------------------------------------------------------------
3310 -- ZaTxDbi_01032005                                                          --
3311 -- Tax module supporting function                                            --
3312 -------------------------------------------------------------------------------
3313 FUNCTION ZaTxDbi_01032005(
3314 -- Database Items
3315    p_PAY_PROC_PRD_DTE_PD   IN DATE
3316   ,p_PER_AGE               IN NUMBER
3317   ,p_PER_DTE_OF_BRTH       IN DATE
3318   ,p_SES_DTE               IN DATE
3319   ,p_ZA_ACT_END_DTE        IN DATE
3320   ,p_ZA_ACT_STRT_DTE       IN DATE
3321   ,p_ZA_ASG_TX_RTR_PRD     IN VARCHAR2
3322   ,p_ZA_ASG_TAX_RTR_RSLTS  IN VARCHAR2
3323   ,p_ZA_ASG_TX_YR          IN NUMBER
3324   ,p_ZA_ASG_TX_YR_END      IN DATE
3325   ,p_ZA_ASG_TX_YR_STRT     IN DATE
3326   ,p_ZA_CUR_PRD_END_DTE    IN DATE
3327   ,p_ZA_CUR_PRD_STRT_DTE   IN DATE
3328   ,p_ZA_DYS_IN_YR          IN NUMBER
3329   ,p_ZA_PAY_PRDS_LFT       IN NUMBER
3330   ,p_ZA_PAY_PRDS_PER_YR    IN NUMBER
3331   ,p_ZA_TX_YR_END          IN DATE
3332   ,p_ZA_TX_YR_STRT         IN DATE
3333   ,p_BP_TX_RCV             IN VARCHAR2
3334   ,p_SEA_WRK_DYS_WRK       IN NUMBER
3335   ,p_TX_DIR_NUM            IN VARCHAR2
3336   ,p_TX_DIR_VAL            IN NUMBER
3337   ,p_TX_STA                IN VARCHAR2
3338   ,p_ZA_LS_DIR_NUM         IN VARCHAR2
3339   ,p_ZA_LS_DIR_VAL         IN NUMBER
3340    ) RETURN NUMBER
3341 AS
3342    l_Dum NUMBER := 1;
3343 
3344 BEGIN
3345 
3346 -- Initialise Package Globals
3347 -- Database Items
3348    dbi_PAY_PROC_PRD_DTE_PD  := p_PAY_PROC_PRD_DTE_PD;
3349    dbi_PER_AGE              := p_PER_AGE;
3350    dbi_PER_DTE_OF_BRTH      := p_PER_DTE_OF_BRTH;
3351    dbi_SES_DTE              := p_SES_DTE;
3352    dbi_ZA_ACT_END_DTE       := p_ZA_ACT_END_DTE;
3353    dbi_ZA_ACT_STRT_DTE      := p_ZA_ACT_STRT_DTE;
3354    dbi_ZA_ASG_TX_RTR_PRD    := p_ZA_ASG_TX_RTR_PRD;
3355    dbi_ZA_ASG_TAX_RTR_RSLTS := p_ZA_ASG_TAX_RTR_RSLTS;
3356    dbi_ZA_ASG_TX_YR         := p_ZA_ASG_TX_YR;
3357    dbi_ZA_ASG_TX_YR_END     := p_ZA_ASG_TX_YR_END;
3358    dbi_ZA_ASG_TX_YR_STRT    := p_ZA_ASG_TX_YR_STRT;
3359    dbi_ZA_CUR_PRD_END_DTE   := p_ZA_CUR_PRD_END_DTE;
3360    dbi_ZA_CUR_PRD_STRT_DTE  := p_ZA_CUR_PRD_STRT_DTE;
3361    dbi_ZA_DYS_IN_YR         := p_ZA_DYS_IN_YR;
3362    dbi_ZA_PAY_PRDS_LFT      := p_ZA_PAY_PRDS_LFT;
3363    dbi_ZA_PAY_PRDS_PER_YR   := p_ZA_PAY_PRDS_PER_YR;
3364    dbi_ZA_TX_YR_END         := p_ZA_TX_YR_END;
3365    dbi_ZA_TX_YR_STRT        := p_ZA_TX_YR_STRT;
3366    dbi_BP_TX_RCV            := p_BP_TX_RCV;
3367    dbi_SEA_WRK_DYS_WRK      := p_SEA_WRK_DYS_WRK;
3368    dbi_TX_DIR_NUM           := p_TX_DIR_NUM;
3369    dbi_TX_DIR_VAL           := p_TX_DIR_VAL;
3370    dbi_TX_STA               := p_TX_STA;
3371    dbi_ZA_LS_DIR_NUM        := p_ZA_LS_DIR_NUM;
3372    dbi_ZA_LS_DIR_VAL        := p_ZA_LS_DIR_VAL;
3373 
3374    RETURN l_Dum;
3375 EXCEPTION
3376    WHEN OTHERS THEN
3377       hr_utility.set_message(801, 'ZaTxDbi_01032005: '||TO_CHAR(SQLCODE));
3378       hr_utility.raise_error;
3379 END ZaTxDbi_01032005;
3380 -------------------------------------------------------------------------------
3381 -- ZaTxBal1_01032005                                                         --
3382 -- Tax module supporting function                                            --
3383 -------------------------------------------------------------------------------
3384 FUNCTION ZaTxBal1_01032005(
3385 -- Balances
3386     p_ANN_ARR_PF_CMTD           IN NUMBER
3387    ,p_ANN_ARR_PF_CYTD           IN NUMBER
3388    ,p_ANN_ARR_PF_RUN            IN NUMBER
3389    ,p_ANN_ARR_PF_PTD            IN NUMBER
3390    ,p_ANN_ARR_PF_YTD            IN NUMBER
3391    ,p_ANN_ARR_RA_CMTD           IN NUMBER
3392    ,p_ANN_ARR_RA_CYTD           IN NUMBER
3393    ,p_ANN_ARR_RA_RUN            IN NUMBER
3394    ,p_ANN_ARR_RA_PTD            IN NUMBER
3395    ,p_ANN_ARR_RA_YTD            IN NUMBER
3396    ,p_ANN_EE_INC_PRO_POL_CMTD   IN NUMBER
3397    ,p_ANN_EE_INC_PRO_POL_CYTD   IN NUMBER
3398    ,p_ANN_EE_INC_PRO_POL_RUN    IN NUMBER
3399    ,p_ANN_EE_INC_PRO_POL_PTD    IN NUMBER
3400    ,p_ANN_EE_INC_PRO_POL_YTD    IN NUMBER
3401    ,p_ANN_PF_CMTD               IN NUMBER
3402    ,p_ANN_PF_CYTD               IN NUMBER
3403    ,p_ANN_PF_RUN                IN NUMBER
3404    ,p_ANN_PF_PTD                IN NUMBER
3405    ,p_ANN_PF_YTD                IN NUMBER
3406    ,p_ANN_RA_CMTD               IN NUMBER
3407    ,p_ANN_RA_CYTD               IN NUMBER
3408    ,p_ANN_RA_RUN                IN NUMBER
3409    ,p_ANN_RA_PTD                IN NUMBER
3410    ,p_ANN_RA_YTD                IN NUMBER
3411    ) RETURN NUMBER
3412 AS
3413    l_Dum NUMBER := 1;
3414 
3415 BEGIN
3416 -- Balances
3417    bal_ANN_ARR_PF_CMTD         := p_ANN_ARR_PF_CMTD;
3418    bal_ANN_ARR_PF_CYTD         := p_ANN_ARR_PF_CYTD;
3419    bal_ANN_ARR_PF_RUN          := p_ANN_ARR_PF_RUN;
3420    bal_ANN_ARR_PF_PTD          := p_ANN_ARR_PF_PTD;
3421    bal_ANN_ARR_PF_YTD          := p_ANN_ARR_PF_YTD;
3422    bal_ANN_ARR_RA_CMTD         := p_ANN_ARR_RA_CMTD;
3423    bal_ANN_ARR_RA_CYTD         := p_ANN_ARR_RA_CYTD;
3424    bal_ANN_ARR_RA_RUN          := p_ANN_ARR_RA_RUN;
3425    bal_ANN_ARR_RA_PTD          := p_ANN_ARR_RA_PTD;
3426    bal_ANN_ARR_RA_YTD          := p_ANN_ARR_RA_YTD;
3427    bal_ANN_EE_INC_PRO_POL_CMTD := p_ANN_EE_INC_PRO_POL_CMTD;
3428    bal_ANN_EE_INC_PRO_POL_CYTD := p_ANN_EE_INC_PRO_POL_CYTD;
3429    bal_ANN_EE_INC_PRO_POL_RUN  := p_ANN_EE_INC_PRO_POL_RUN;
3430    bal_ANN_EE_INC_PRO_POL_PTD  := p_ANN_EE_INC_PRO_POL_PTD;
3431    bal_ANN_EE_INC_PRO_POL_YTD  := p_ANN_EE_INC_PRO_POL_YTD;
3432    bal_ANN_PF_CMTD             := p_ANN_PF_CMTD;
3433    bal_ANN_PF_CYTD             := p_ANN_PF_CYTD;
3434    bal_ANN_PF_RUN              := p_ANN_PF_RUN;
3435    bal_ANN_PF_PTD              := p_ANN_PF_PTD;
3436    bal_ANN_PF_YTD              := p_ANN_PF_YTD;
3437    bal_ANN_RA_CMTD             := p_ANN_RA_CMTD;
3438    bal_ANN_RA_CYTD             := p_ANN_RA_CYTD;
3439    bal_ANN_RA_RUN              := p_ANN_RA_RUN;
3440    bal_ANN_RA_PTD              := p_ANN_RA_PTD;
3441    bal_ANN_RA_YTD              := p_ANN_RA_YTD;
3442 
3443    RETURN l_Dum;
3444 EXCEPTION
3445    WHEN OTHERS THEN
3446       hr_utility.set_message(801, 'ZaTxBal1_01032005: '||TO_CHAR(SQLCODE));
3447       hr_utility.raise_error;
3448 END ZaTxBal1_01032005;
3449 -------------------------------------------------------------------------------
3450 -- ZaTxBal2_01032005                                                         --
3451 -- Tax module supporting function                                            --
3452 -------------------------------------------------------------------------------
3453 FUNCTION ZaTxBal2_01032005(
3454 -- Balances
3455     p_ARR_PF_CMTD                IN NUMBER
3456    ,p_ARR_PF_CYTD                IN NUMBER
3457    ,p_ARR_PF_PTD                 IN NUMBER
3458    ,p_ARR_PF_YTD                 IN NUMBER
3459    ,p_ARR_RA_CMTD                IN NUMBER
3460    ,p_ARR_RA_CYTD                IN NUMBER
3461    ,p_ARR_RA_PTD                 IN NUMBER
3462    ,p_ARR_RA_YTD                 IN NUMBER
3463    ,p_BP_CMTD                    IN NUMBER
3464    ,p_BP_PTD                     IN NUMBER
3465    ,p_BP_YTD                     IN NUMBER
3466    ,p_CUR_PF_CMTD                IN NUMBER
3467    ,p_CUR_PF_CYTD                IN NUMBER
3468    ,p_CUR_PF_RUN                 IN NUMBER
3469    ,p_CUR_PF_PTD                 IN NUMBER
3470    ,p_CUR_PF_YTD                 IN NUMBER
3471    ,p_CUR_RA_CMTD                IN NUMBER
3472    ,p_CUR_RA_CYTD                IN NUMBER
3473    ,p_CUR_RA_RUN                 IN NUMBER
3474    ,p_CUR_RA_PTD                 IN NUMBER
3475    ,p_CUR_RA_YTD                 IN NUMBER
3476    ,p_DIR_DMD_RMN_ITD            IN NUMBER
3477    ) RETURN NUMBER
3478 AS
3479    l_Dum NUMBER := 1;
3480 
3481 BEGIN
3482 -- Balances
3483    bal_ARR_PF_CMTD     := p_ARR_PF_CMTD;
3484    bal_ARR_PF_CYTD     := p_ARR_PF_CYTD;
3485    bal_ARR_PF_PTD      := p_ARR_PF_PTD;
3486    bal_ARR_PF_YTD      := p_ARR_PF_YTD;
3487    bal_ARR_RA_CMTD     := p_ARR_RA_CMTD;
3488    bal_ARR_RA_CYTD     := p_ARR_RA_CYTD;
3489    bal_ARR_RA_PTD      := p_ARR_RA_PTD;
3490    bal_ARR_RA_YTD      := p_ARR_RA_YTD;
3491    bal_BP_CMTD         := p_BP_CMTD;
3492    bal_BP_PTD          := p_BP_PTD;
3493    bal_BP_YTD          := p_BP_YTD;
3494    bal_CUR_PF_CMTD     := p_CUR_PF_CMTD;
3495    bal_CUR_PF_CYTD     := p_CUR_PF_CYTD;
3496    bal_CUR_PF_RUN      := p_CUR_PF_RUN;
3497    bal_CUR_PF_PTD      := p_CUR_PF_PTD;
3498    bal_CUR_PF_YTD      := p_CUR_PF_YTD;
3499    bal_CUR_RA_CMTD     := p_CUR_RA_CMTD;
3500    bal_CUR_RA_CYTD     := p_CUR_RA_CYTD;
3501    bal_CUR_RA_RUN      := p_CUR_RA_RUN;
3502    bal_CUR_RA_PTD      := p_CUR_RA_PTD;
3503    bal_CUR_RA_YTD      := p_CUR_RA_YTD;
3504    bal_DIR_DMD_RMN_ITD := p_DIR_DMD_RMN_ITD;
3505 
3506    RETURN l_Dum;
3507 EXCEPTION
3508    WHEN OTHERS THEN
3509       hr_utility.set_message(801, 'ZaTxBal2_01032005: '||TO_CHAR(SQLCODE));
3510       hr_utility.raise_error;
3511 END ZaTxBal2_01032005;
3512 -------------------------------------------------------------------------------
3513 -- ZaTxBal3_01032005                                                         --
3514 -- Tax module supporting function                                            --
3515 -------------------------------------------------------------------------------
3516 FUNCTION ZaTxBal3_01032005(
3517 -- Balances
3518     p_EE_INC_PRO_POL_CMTD        IN NUMBER
3519    ,p_EE_INC_PRO_POL_CYTD        IN NUMBER
3520    ,p_EE_INC_PRO_POL_RUN         IN NUMBER
3521    ,p_EE_INC_PRO_POL_PTD         IN NUMBER
3522    ,p_EE_INC_PRO_POL_YTD         IN NUMBER
3523    ,p_EXC_ARR_PEN_ITD            IN NUMBER
3524    ,p_EXC_ARR_PEN_PTD            IN NUMBER
3525    ,p_EXC_ARR_PEN_YTD            IN NUMBER
3526    ,p_EXC_ARR_RA_ITD             IN NUMBER
3527    ,p_EXC_ARR_RA_PTD             IN NUMBER
3528    ,p_EXC_ARR_RA_YTD             IN NUMBER
3529    ,p_MED_CONTR_CMTD             IN NUMBER
3530    ,p_MED_CONTR_CYTD             IN NUMBER
3531    ,p_MED_CONTR_RUN              IN NUMBER
3532    ,p_MED_CONTR_PTD              IN NUMBER
3533    ,p_MED_CONTR_YTD              IN NUMBER
3534    ,p_NET_PAY_RUN                IN NUMBER
3535    ,p_NET_TXB_INC_CMTD           IN NUMBER
3536    ) RETURN NUMBER
3537 AS
3538    l_Dum NUMBER := 1;
3539 
3540 BEGIN
3541 -- Balances
3542    bal_EE_INC_PRO_POL_CMTD := p_EE_INC_PRO_POL_CMTD;
3543    bal_EE_INC_PRO_POL_CYTD := p_EE_INC_PRO_POL_CYTD;
3544    bal_EE_INC_PRO_POL_RUN  := p_EE_INC_PRO_POL_RUN;
3545    bal_EE_INC_PRO_POL_PTD  := p_EE_INC_PRO_POL_PTD;
3546    bal_EE_INC_PRO_POL_YTD  := p_EE_INC_PRO_POL_YTD;
3547    bal_EXC_ARR_PEN_ITD     := p_EXC_ARR_PEN_ITD;
3548    bal_EXC_ARR_PEN_PTD     := p_EXC_ARR_PEN_PTD;
3549    bal_EXC_ARR_PEN_YTD     := p_EXC_ARR_PEN_YTD;
3550    bal_EXC_ARR_RA_ITD      := p_EXC_ARR_RA_ITD;
3551    bal_EXC_ARR_RA_PTD      := p_EXC_ARR_RA_PTD;
3552    bal_EXC_ARR_RA_YTD      := p_EXC_ARR_RA_YTD;
3553    bal_MED_CONTR_CMTD      := p_MED_CONTR_CMTD;
3554    bal_MED_CONTR_CYTD      := p_MED_CONTR_CYTD;
3555    bal_MED_CONTR_RUN       := p_MED_CONTR_RUN;
3556    bal_MED_CONTR_PTD       := p_MED_CONTR_PTD;
3557    bal_MED_CONTR_YTD       := p_MED_CONTR_YTD;
3558    bal_NET_PAY_RUN         := p_NET_PAY_RUN;
3559    bal_NET_TXB_INC_CMTD    := p_NET_TXB_INC_CMTD;
3560 
3561    RETURN l_Dum;
3562 EXCEPTION
3563    WHEN OTHERS THEN
3564       hr_utility.set_message(801, 'ZaTxBal3_01032005: '||TO_CHAR(SQLCODE));
3565       hr_utility.raise_error;
3566 END ZaTxBal3_01032005;
3567 -------------------------------------------------------------------------------
3568 -- ZaTxBal4_01032005                                                         --
3569 -- Tax module supporting function                                            --
3570 -------------------------------------------------------------------------------
3571 FUNCTION ZaTxBal4_01032005(
3572 -- Balances
3573     p_PAYE_YTD                   IN NUMBER
3574    ,p_SITE_YTD                   IN NUMBER
3575    ,p_TAX_YTD                    IN NUMBER
3576    ,p_TX_ON_AB_PTD               IN NUMBER
3577    ,p_TX_ON_AB_YTD               IN NUMBER
3578    ,p_TX_ON_AP_PTD               IN NUMBER
3579    ,p_TX_ON_AP_YTD               IN NUMBER
3580    ,p_TX_ON_BP_PTD               IN NUMBER
3581    ,p_TX_ON_BP_YTD               IN NUMBER
3582    ,p_TX_ON_TA_PTD               IN NUMBER
3583    ,p_TX_ON_TA_YTD               IN NUMBER
3584    ,p_TX_ON_DR_PTD               IN NUMBER
3585    ,p_TX_ON_DR_YTD               IN NUMBER
3586    ,p_TX_ON_FB_PTD               IN NUMBER
3587    ,p_TX_ON_FB_YTD               IN NUMBER
3588    ,p_TX_ON_NI_PTD               IN NUMBER
3589    ,p_TX_ON_NI_YTD               IN NUMBER
3590    ,p_TX_ON_PO_PTD               IN NUMBER
3591    ,p_TX_ON_PO_YTD               IN NUMBER
3592    ) RETURN NUMBER
3593 AS
3594    l_Dum NUMBER := 1;
3595 
3596 BEGIN
3597 -- Balances
3598    bal_PAYE_YTD     := p_PAYE_YTD;
3599    bal_SITE_YTD     := p_SITE_YTD;
3600    bal_TAX_YTD      := p_TAX_YTD;
3601    bal_TX_ON_AB_PTD := p_TX_ON_AB_PTD;
3602    bal_TX_ON_AB_YTD := p_TX_ON_AB_YTD;
3603    bal_TX_ON_AP_PTD := p_TX_ON_AP_PTD;
3604    bal_TX_ON_AP_YTD := p_TX_ON_AP_YTD;
3605    bal_TX_ON_BP_PTD := p_TX_ON_BP_PTD;
3606    bal_TX_ON_BP_YTD := p_TX_ON_BP_YTD;
3607    bal_TX_ON_TA_PTD := p_TX_ON_TA_PTD;
3608    bal_TX_ON_TA_YTD := p_TX_ON_TA_YTD;
3609    bal_TX_ON_DR_PTD := p_TX_ON_DR_PTD;
3610    bal_TX_ON_DR_YTD := p_TX_ON_DR_YTD;
3611    bal_TX_ON_FB_PTD := p_TX_ON_FB_PTD;
3612    bal_TX_ON_FB_YTD := p_TX_ON_FB_YTD;
3613    bal_TX_ON_NI_PTD := p_TX_ON_NI_PTD;
3614    bal_TX_ON_NI_YTD := p_TX_ON_NI_YTD;
3615    bal_TX_ON_PO_PTD := p_TX_ON_PO_PTD;
3616    bal_TX_ON_PO_YTD := p_TX_ON_PO_YTD;
3617 
3618    RETURN l_Dum;
3619 EXCEPTION
3620    WHEN OTHERS THEN
3621       hr_utility.set_message(801, 'ZaTxBal4_01032005: '||TO_CHAR(SQLCODE));
3622       hr_utility.raise_error;
3623 END ZaTxBal4_01032005;
3624 -------------------------------------------------------------------------------
3625 -- ZaTxBal5_01032005                                                         --
3626 -- Tax module supporting function                                            --
3627 -------------------------------------------------------------------------------
3628 FUNCTION ZaTxBal5_01032005(
3629 -- Balances
3630     p_TOT_INC_PTD                IN NUMBER
3631    ,p_TOT_INC_YTD                IN NUMBER
3632    ,p_TOT_NRFI_AN_INC_CMTD       IN NUMBER
3633    ,p_TOT_NRFI_AN_INC_CYTD       IN NUMBER
3634    ,p_TOT_NRFI_AN_INC_RUN        IN NUMBER
3635    ,p_TOT_NRFI_AN_INC_PTD        IN NUMBER
3636    ,p_TOT_NRFI_AN_INC_YTD        IN NUMBER
3637    ,p_TOT_NRFI_INC_CMTD          IN NUMBER
3638    ,p_TOT_NRFI_INC_CYTD          IN NUMBER
3639    ,p_TOT_NRFI_INC_RUN           IN NUMBER
3640    ,p_TOT_NRFI_INC_PTD           IN NUMBER
3641    ,p_TOT_NRFI_INC_YTD           IN NUMBER
3642    ,p_TOT_RFI_AN_INC_CMTD        IN NUMBER
3643    ,p_TOT_RFI_AN_INC_CYTD        IN NUMBER
3644    ,p_TOT_RFI_AN_INC_RUN         IN NUMBER
3645    ,p_TOT_RFI_AN_INC_PTD         IN NUMBER
3646    ,p_TOT_RFI_AN_INC_YTD         IN NUMBER
3647    ,p_TOT_RFI_INC_CMTD           IN NUMBER
3648    ,p_TOT_RFI_INC_CYTD           IN NUMBER
3649    ,p_TOT_RFI_INC_RUN            IN NUMBER
3650    ,p_TOT_RFI_INC_PTD            IN NUMBER
3651    ,p_TOT_RFI_INC_YTD            IN NUMBER
3652    ,p_TOT_SEA_WRK_DYS_WRK_YTD    IN NUMBER
3653    ,p_TOT_SKL_ANN_INC_CMTD       IN NUMBER
3654    ,p_TOT_SKL_INC_CMTD           IN NUMBER
3655    ,p_TOT_TXB_INC_ITD            IN NUMBER
3656    ) RETURN NUMBER
3657 AS
3658    l_Dum NUMBER := 1;
3659 
3660 BEGIN
3661 -- Balances
3662    bal_TOT_INC_PTD             := p_TOT_INC_PTD;
3663    bal_TOT_INC_YTD             := p_TOT_INC_YTD;
3664    bal_TOT_NRFI_AN_INC_CMTD    := p_TOT_NRFI_AN_INC_CMTD;
3665    bal_TOT_NRFI_AN_INC_CYTD    := p_TOT_NRFI_AN_INC_CYTD;
3666    bal_TOT_NRFI_AN_INC_RUN     := p_TOT_NRFI_AN_INC_RUN;
3667    bal_TOT_NRFI_AN_INC_PTD     := p_TOT_NRFI_AN_INC_PTD;
3668    bal_TOT_NRFI_AN_INC_YTD     := p_TOT_NRFI_AN_INC_YTD;
3669    bal_TOT_NRFI_INC_CMTD       := p_TOT_NRFI_INC_CMTD;
3670    bal_TOT_NRFI_INC_CYTD       := p_TOT_NRFI_INC_CYTD;
3671    bal_TOT_NRFI_INC_RUN        := p_TOT_NRFI_INC_RUN;
3672    bal_TOT_NRFI_INC_PTD        := p_TOT_NRFI_INC_PTD;
3673    bal_TOT_NRFI_INC_YTD        := p_TOT_NRFI_INC_YTD;
3674    bal_TOT_RFI_AN_INC_CMTD     := p_TOT_RFI_AN_INC_CMTD;
3675    bal_TOT_RFI_AN_INC_CYTD     := p_TOT_RFI_AN_INC_CYTD;
3676    bal_TOT_RFI_AN_INC_RUN      := p_TOT_RFI_AN_INC_RUN;
3677    bal_TOT_RFI_AN_INC_PTD      := p_TOT_RFI_AN_INC_PTD;
3678    bal_TOT_RFI_AN_INC_YTD      := p_TOT_RFI_AN_INC_YTD;
3679    bal_TOT_RFI_INC_CMTD        := p_TOT_RFI_INC_CMTD;
3680    bal_TOT_RFI_INC_CYTD        := p_TOT_RFI_INC_CYTD;
3681    bal_TOT_RFI_INC_RUN         := p_TOT_RFI_INC_RUN;
3682    bal_TOT_RFI_INC_PTD         := p_TOT_RFI_INC_PTD;
3683    bal_TOT_RFI_INC_YTD         := p_TOT_RFI_INC_YTD;
3684    bal_TOT_SEA_WRK_DYS_WRK_YTD := p_TOT_SEA_WRK_DYS_WRK_YTD;
3685    bal_TOT_SKL_ANN_INC_CMTD    := p_TOT_SKL_ANN_INC_CMTD;
3686    bal_TOT_SKL_INC_CMTD        := p_TOT_SKL_INC_CMTD;
3687    bal_TOT_TXB_INC_ITD         := p_TOT_TXB_INC_ITD;
3688 
3689    RETURN l_Dum;
3690 EXCEPTION
3691    WHEN OTHERS THEN
3692       hr_utility.set_message(801, 'ZaTxBal5_01032005: '||TO_CHAR(SQLCODE));
3693       hr_utility.raise_error;
3694 END ZaTxBal5_01032005;
3695 
3696 -------------------------------------------------------------------------------
3697 -- ZaTxBal6_01032005                                                         --
3698 -- Tax module supporting function                                            --
3699 -------------------------------------------------------------------------------
3700 FUNCTION ZaTxBal6_01032005(
3701 -- Balances
3702     p_TOT_TXB_AB_CMTD       IN NUMBER
3703    ,p_TOT_TXB_AB_RUN        IN NUMBER
3704    ,p_TOT_TXB_AB_PTD        IN NUMBER
3705    ,p_TOT_TXB_AB_YTD        IN NUMBER
3706    ,p_TOT_TXB_AP_CMTD       IN NUMBER
3707    ,p_TOT_TXB_AP_RUN        IN NUMBER
3708    ,p_TOT_TXB_AP_PTD        IN NUMBER
3709    ,p_TOT_TXB_AP_YTD        IN NUMBER
3710    ,p_TOT_TXB_FB_CMTD       IN NUMBER
3711    ,p_TOT_TXB_FB_CYTD       IN NUMBER
3712    ,p_TOT_TXB_FB_RUN        IN NUMBER
3713    ,p_TOT_TXB_FB_PTD        IN NUMBER
3714    ,p_TOT_TXB_FB_YTD        IN NUMBER
3715    ,p_TOT_TXB_NI_CMTD       IN NUMBER
3716    ,p_TOT_TXB_NI_CYTD       IN NUMBER
3717    ,p_TOT_TXB_NI_RUN        IN NUMBER
3718    ,p_TOT_TXB_NI_PTD        IN NUMBER
3719    ,p_TOT_TXB_NI_YTD        IN NUMBER
3720    ,p_TOT_TXB_PO_CMTD       IN NUMBER
3721    ,p_TOT_TXB_PO_PTD        IN NUMBER
3722    ,p_TOT_TXB_PO_YTD        IN NUMBER
3723    ,p_TOT_TXB_TA_CMTD       IN NUMBER
3724    ,p_TOT_TXB_TA_CYTD       IN NUMBER
3725    ,p_TOT_TXB_TA_PTD        IN NUMBER
3726    ,p_TOT_TXB_TA_YTD        IN NUMBER
3727    ) RETURN NUMBER
3728 AS
3729    l_Dum NUMBER := 1;
3730 
3731 BEGIN
3732 -- Balances
3733    bal_TOT_TXB_AB_CMTD   := p_TOT_TXB_AB_CMTD;
3734    bal_TOT_TXB_AB_RUN    := p_TOT_TXB_AB_RUN;
3735    bal_TOT_TXB_AB_PTD    := p_TOT_TXB_AB_PTD;
3736    bal_TOT_TXB_AB_YTD    := p_TOT_TXB_AB_YTD;
3737    bal_TOT_TXB_AP_CMTD   := p_TOT_TXB_AP_CMTD;
3738    bal_TOT_TXB_AP_RUN    := p_TOT_TXB_AP_RUN;
3739    bal_TOT_TXB_AP_PTD    := p_TOT_TXB_AP_PTD;
3740    bal_TOT_TXB_AP_YTD    := p_TOT_TXB_AP_YTD;
3741    bal_TOT_TXB_FB_CMTD   := p_TOT_TXB_FB_CMTD;
3742    bal_TOT_TXB_FB_CYTD   := p_TOT_TXB_FB_CYTD;
3743    bal_TOT_TXB_FB_RUN    := p_TOT_TXB_FB_RUN;
3744    bal_TOT_TXB_FB_PTD    := p_TOT_TXB_FB_PTD;
3745    bal_TOT_TXB_FB_YTD    := p_TOT_TXB_FB_YTD;
3746    bal_TOT_TXB_NI_CMTD   := p_TOT_TXB_NI_CMTD;
3747    bal_TOT_TXB_NI_CYTD   := p_TOT_TXB_NI_CYTD;
3748    bal_TOT_TXB_NI_RUN    := p_TOT_TXB_NI_RUN;
3749    bal_TOT_TXB_NI_PTD    := p_TOT_TXB_NI_PTD;
3750    bal_TOT_TXB_NI_YTD    := p_TOT_TXB_NI_YTD;
3751    bal_TOT_TXB_PO_CMTD   := p_TOT_TXB_PO_CMTD;
3752    bal_TOT_TXB_PO_PTD    := p_TOT_TXB_PO_PTD;
3753    bal_TOT_TXB_PO_YTD    := p_TOT_TXB_PO_YTD;
3754    bal_TOT_TXB_TA_CMTD   := p_TOT_TXB_TA_CMTD;
3755    bal_TOT_TXB_TA_CYTD   := p_TOT_TXB_TA_CYTD;
3756    bal_TOT_TXB_TA_PTD    := p_TOT_TXB_TA_PTD;
3757    bal_TOT_TXB_TA_YTD    := p_TOT_TXB_TA_YTD;
3758 
3759    RETURN l_Dum;
3760 EXCEPTION
3761    WHEN OTHERS THEN
3762       hr_utility.set_message(801, 'ZaTxBal6_01032005: '||TO_CHAR(SQLCODE));
3763       hr_utility.raise_error;
3764 END ZaTxBal6_01032005;
3765 
3766 -------------------------------------------------------------------------------
3767 -- ZaTx_01032005                                                             --
3768 -- Main Tax module function                                                  --
3769 -------------------------------------------------------------------------------
3770 FUNCTION ZaTx_01032005(
3771 /*  PARAMETERS */
3772    -- Contexts
3773      ASSIGNMENT_ACTION_ID IN NUMBER
3774    , ASSIGNMENT_ID        IN NUMBER
3775    , PAYROLL_ACTION_ID    IN NUMBER
3776    , PAYROLL_ID           IN NUMBER
3777    -- Out Parameters
3778    , p_LibWrn            OUT NOCOPY VARCHAR2
3779    , p_LibFpDR           OUT NOCOPY NUMBER
3780    , p_LibFpNI           OUT NOCOPY NUMBER
3781    , p_LibFpFB           OUT NOCOPY NUMBER
3782    , p_LibFpTA           OUT NOCOPY NUMBER
3783    , p_LibFpBP           OUT NOCOPY NUMBER
3784    , p_LibFpAB           OUT NOCOPY NUMBER
3785    , p_LibFpAP           OUT NOCOPY NUMBER
3786    , p_LibFpPO           OUT NOCOPY NUMBER
3787    , p_PayValSD          OUT NOCOPY NUMBER
3788    , p_PayValEC          OUT NOCOPY NUMBER
3789    , p_PayeVal           OUT NOCOPY NUMBER
3790    , p_SiteVal           OUT NOCOPY NUMBER
3791    , p_It3Ind            OUT NOCOPY NUMBER
3792    , p_PfUpdFig          OUT NOCOPY NUMBER
3793    , p_RaUpdFig          OUT NOCOPY NUMBER
3794    , p_OUpdFig           OUT NOCOPY NUMBER
3795    , p_NtiUpdFig         OUT NOCOPY NUMBER
3796    , p_OvrWrn            OUT NOCOPY VARCHAR2
3797    , p_LSDirNum          OUT NOCOPY VARCHAR2
3798    , p_LSDirVal          OUT NOCOPY NUMBER
3799    )RETURN NUMBER
3800 AS
3801 -- Variables
3802 --
3803    l_Dum NUMBER := 1;
3804 
3805    xpt_FxdPrc EXCEPTION;
3806 
3807 -------------------------------------------------------------------------------
3808 BEGIN--                           MAIN                                       --
3809 -------------------------------------------------------------------------------
3810 -- Set hr_utility globals if debugging
3811 --
3812 --      py_za_tx_utl_01032005.g_HrTraceEnabled  := TRUE;
3813 --      py_za_tx_utl_01032005.g_HrTracePipeName := 'ZATAX';
3814 
3815 -- Call hr_utility start procedure
3816    py_za_tx_utl_01032005.StartHrTrace;
3817 
3818 -- Setup Trace Header Info
3819    WrtHrTrc(' ');
3820    WrtHrTrc(' ');
3821    WrtHrTrc(' ');
3822    WrtHrTrc('------------------------------------------------------------');
3823    WrtHrTrc('-- Start of Tax Trace File');
3824    WrtHrTrc('------------------------------------------------------------');
3825    WrtHrTrc(' ');
3826    WrtHrTrc('   Processing Assignment ID :     '||to_char(ASSIGNMENT_ID       ));
3827    WrtHrTrc('   Assignment Action ID     :     '||to_char(ASSIGNMENT_ACTION_ID));
3828    WrtHrTrc('   Payroll Action ID        :     '||to_char(PAYROLL_ACTION_ID   ));
3829    WrtHrTrc('   Payroll ID               :     '||to_char(PAYROLL_ID          ));
3830    WrtHrTrc(' ');
3831    WrtHrTrc('------------------------------------------------------------');
3832    WrtHrTrc(' ');
3833    WrtHrTrc('-------------------------------------------------------------------------------');
3834    WrtHrTrc('-- Application Global Values');
3835    WrtHrTrc('-------------------------------------------------------------------------------');
3836    WrtHrTrc('   glb_ZA_ADL_TX_RBT:             '||to_char(glb_ZA_ADL_TX_RBT        ));
3837    WrtHrTrc('   glb_ZA_ARR_PF_AN_MX_ABT:       '||to_char(glb_ZA_ARR_PF_AN_MX_ABT  ));
3838    WrtHrTrc('   glb_ZA_ARR_RA_AN_MX_ABT:       '||to_char(glb_ZA_ARR_RA_AN_MX_ABT  ));
3839    WrtHrTrc('   glb_ZA_TRV_ALL_TX_PRC:         '||to_char(glb_ZA_TRV_ALL_TX_PRC    ));
3840    WrtHrTrc('   glb_ZA_CC_TX_PRC:              '||to_char(glb_ZA_CC_TX_PRC         ));
3841    WrtHrTrc('   glb_ZA_PF_AN_MX_ABT:           '||to_char(glb_ZA_PF_AN_MX_ABT      ));
3842    WrtHrTrc('   glb_ZA_PF_MX_PRC:              '||to_char(glb_ZA_PF_MX_PRC         ));
3843    WrtHrTrc('   glb_ZA_PER_SERV_COMP_PERC:     '||to_char(glb_ZA_PER_SERV_COMP_PERC));
3844    WrtHrTrc('   glb_ZA_PER_SERV_TRST_PERC:     '||to_char(glb_ZA_PER_SERV_TRST_PERC));
3845    WrtHrTrc('   glb_ZA_PRI_TX_RBT:             '||to_char(glb_ZA_PRI_TX_RBT        ));
3846    WrtHrTrc('   glb_ZA_PRI_TX_THRSHLD:         '||to_char(glb_ZA_PRI_TX_THRSHLD    ));
3847    WrtHrTrc('   glb_ZA_PBL_TX_PRC:             '||to_char(glb_ZA_PBL_TX_PRC        ));
3848    WrtHrTrc('   glb_ZA_PBL_TX_RTE:             '||to_char(glb_ZA_PBL_TX_RTE        ));
3849    WrtHrTrc('   glb_ZA_RA_AN_MX_ABT:           '||to_char(glb_ZA_RA_AN_MX_ABT      ));
3850    WrtHrTrc('   glb_ZA_RA_MX_PRC:              '||to_char(glb_ZA_RA_MX_PRC         ));
3851    WrtHrTrc('   glb_ZA_SC_TX_THRSHLD:          '||to_char(glb_ZA_SC_TX_THRSHLD     ));
3852    WrtHrTrc('   glb_ZA_SIT_LIM:                '||to_char(glb_ZA_SIT_LIM           ));
3853    WrtHrTrc('   glb_ZA_TMP_TX_RTE:             '||to_char(glb_ZA_TMP_TX_RTE        ));
3854    WrtHrTrc('   glb_ZA_WRK_DYS_PR_YR:          '||to_char(glb_ZA_WRK_DYS_PR_YR     ));
3855    WrtHrTrc('-------------------------------------------------------------------------------');
3856    WrtHrTrc('-- Application Database Items');
3857    WrtHrTrc('-------------------------------------------------------------------------------');
3858    WrtHrTrc('   dbi_BP_TX_RCV:                 '||        dbi_BP_TX_RCV                        );
3859    WrtHrTrc('   dbi_PAY_PROC_PRD_DTE_PD:       '||to_char(dbi_PAY_PROC_PRD_DTE_PD,'DD/MM/YYYY'));
3860    WrtHrTrc('   dbi_PER_AGE:                   '||to_char(dbi_PER_AGE                         ));
3861    WrtHrTrc('   dbi_PER_DTE_OF_BRTH:           '||to_char(dbi_PER_DTE_OF_BRTH    ,'DD/MM/YYYY'));
3862    WrtHrTrc('   dbi_SEA_WRK_DYS_WRK:           '||to_char(dbi_SEA_WRK_DYS_WRK                 ));
3863    WrtHrTrc('   dbi_SES_DTE:                   '||to_char(dbi_SES_DTE            ,'DD/MM/YYYY'));
3864    WrtHrTrc('   dbi_TX_DIR_NUM:                '||        dbi_TX_DIR_NUM                       );
3865    WrtHrTrc('   dbi_TX_DIR_VAL:                '||to_char(dbi_TX_DIR_VAL                      ));
3866    WrtHrTrc('   dbi_TX_STA:                    '||        dbi_TX_STA                           );
3867    WrtHrTrc('   dbi_ZA_ACT_END_DTE:            '||to_char(dbi_ZA_ACT_END_DTE     ,'DD/MM/YYYY'));
3868    WrtHrTrc('   dbi_ZA_ACT_STRT_DTE:           '||to_char(dbi_ZA_ACT_STRT_DTE    ,'DD/MM/YYYY'));
3869    WrtHrTrc('   dbi_ZA_ASG_TX_RTR_PRD:         '||        dbi_ZA_ASG_TX_RTR_PRD                );
3870    WrtHrTrc('   dbi_ZA_ASG_TAX_RTR_RSLTS:      '||        dbi_ZA_ASG_TAX_RTR_RSLTS              );
3871    WrtHrTrc('   dbi_ZA_ASG_TX_YR:              '||to_char(dbi_ZA_ASG_TX_YR                    ));
3872    WrtHrTrc('   dbi_ZA_ASG_TX_YR_END:          '||to_char(dbi_ZA_ASG_TX_YR_END   ,'DD/MM/YYYY'));
3873    WrtHrTrc('   dbi_ZA_ASG_TX_YR_STRT:         '||to_char(dbi_ZA_ASG_TX_YR_STRT  ,'DD/MM/YYYY'));
3874    WrtHrTrc('   dbi_ZA_CUR_PRD_END_DTE:        '||to_char(dbi_ZA_CUR_PRD_END_DTE ,'DD/MM/YYYY'));
3875    WrtHrTrc('   dbi_ZA_CUR_PRD_STRT_DTE:       '||to_char(dbi_ZA_CUR_PRD_STRT_DTE,'DD/MM/YYYY'));
3876    WrtHrTrc('   dbi_ZA_DYS_IN_YR:              '||to_char(dbi_ZA_DYS_IN_YR                    ));
3877    WrtHrTrc('   dbi_ZA_PAY_PRDS_LFT:           '||to_char(dbi_ZA_PAY_PRDS_LFT                 ));
3878    WrtHrTrc('   dbi_ZA_PAY_PRDS_PER_YR:        '||to_char(dbi_ZA_PAY_PRDS_PER_YR              ));
3879    WrtHrTrc('   dbi_ZA_TX_YR_END:              '||to_char(dbi_ZA_TX_YR_END       ,'DD/MM/YYYY'));
3880    WrtHrTrc('   dbi_ZA_TX_YR_STRT:             '||to_char(dbi_ZA_TX_YR_STRT      ,'DD/MM/YYYY'));
3881    WrtHrTrc('   dbi_ZA_LS_DIR_NUM:             '||        dbi_ZA_LS_DIR_NUM                    );
3882    WrtHrTrc('   dbi_ZA_LS_DIR_VAL:             '||to_char(dbi_ZA_LS_DIR_VAL                   ));
3883    WrtHrTrc('-------------------------------------------------------------------------------');
3884    WrtHrTrc('-- Balances');
3885    WrtHrTrc('-------------------------------------------------------------------------------');
3886    WrtHrTrc('   bal_ANN_ARR_PF_CMTD:           '||to_char(bal_ANN_ARR_PF_CMTD          ));
3887    WrtHrTrc('   bal_ANN_ARR_PF_CYTD:           '||to_char(bal_ANN_ARR_PF_CYTD          ));
3888    WrtHrTrc('   bal_ANN_ARR_PF_RUN:            '||to_char(bal_ANN_ARR_PF_RUN           ));
3889    WrtHrTrc('   bal_ANN_ARR_PF_PTD:            '||to_char(bal_ANN_ARR_PF_PTD           ));
3890    WrtHrTrc('   bal_ANN_ARR_PF_YTD:            '||to_char(bal_ANN_ARR_PF_YTD           ));
3891    WrtHrTrc('   bal_ANN_ARR_RA_CMTD:           '||to_char(bal_ANN_ARR_RA_CMTD          ));
3892    WrtHrTrc('   bal_ANN_ARR_RA_CYTD:           '||to_char(bal_ANN_ARR_RA_CYTD          ));
3893    WrtHrTrc('   bal_ANN_ARR_RA_RUN:            '||to_char(bal_ANN_ARR_RA_RUN           ));
3894    WrtHrTrc('   bal_ANN_ARR_RA_PTD:            '||to_char(bal_ANN_ARR_RA_PTD           ));
3895    WrtHrTrc('   bal_ANN_ARR_RA_YTD:            '||to_char(bal_ANN_ARR_RA_YTD           ));
3896    WrtHrTrc('   bal_ANN_EE_INC_PRO_POL_CMTD:   '||to_char(bal_ANN_EE_INC_PRO_POL_CMTD  ));
3897    WrtHrTrc('   bal_ANN_EE_INC_PRO_POL_CYTD:   '||to_char(bal_ANN_EE_INC_PRO_POL_CYTD  ));
3898    WrtHrTrc('   bal_ANN_EE_INC_PRO_POL_RUN:    '||to_char(bal_ANN_EE_INC_PRO_POL_RUN   ));
3899    WrtHrTrc('   bal_ANN_EE_INC_PRO_POL_PTD:    '||to_char(bal_ANN_EE_INC_PRO_POL_PTD   ));
3900    WrtHrTrc('   bal_ANN_EE_INC_PRO_POL_YTD:    '||to_char(bal_ANN_EE_INC_PRO_POL_YTD   ));
3901    WrtHrTrc('   bal_ANN_PF_CMTD:               '||to_char(bal_ANN_PF_CMTD              ));
3902    WrtHrTrc('   bal_ANN_PF_CYTD:               '||to_char(bal_ANN_PF_CYTD              ));
3903    WrtHrTrc('   bal_ANN_PF_RUN:                '||to_char(bal_ANN_PF_RUN               ));
3904    WrtHrTrc('   bal_ANN_PF_PTD:                '||to_char(bal_ANN_PF_PTD               ));
3905    WrtHrTrc('   bal_ANN_PF_YTD:                '||to_char(bal_ANN_PF_YTD               ));
3906    WrtHrTrc('   bal_ANN_RA_CMTD:               '||to_char(bal_ANN_RA_CMTD              ));
3907    WrtHrTrc('   bal_ANN_RA_CYTD:               '||to_char(bal_ANN_RA_CYTD              ));
3908    WrtHrTrc('   bal_ANN_RA_RUN:                '||to_char(bal_ANN_RA_RUN               ));
3909    WrtHrTrc('   bal_ANN_RA_PTD:                '||to_char(bal_ANN_RA_PTD               ));
3910    WrtHrTrc('   bal_ANN_RA_YTD:                '||to_char(bal_ANN_RA_YTD               ));
3911    WrtHrTrc('   bal_ARR_PF_CMTD:               '||to_char(bal_ARR_PF_CMTD              ));
3912    WrtHrTrc('   bal_ARR_PF_CYTD:               '||to_char(bal_ARR_PF_CYTD              ));
3913    WrtHrTrc('   bal_ARR_PF_PTD:                '||to_char(bal_ARR_PF_PTD               ));
3914    WrtHrTrc('   bal_ARR_PF_YTD:                '||to_char(bal_ARR_PF_YTD               ));
3915    WrtHrTrc('   bal_ARR_RA_CMTD:               '||to_char(bal_ARR_RA_CMTD              ));
3916    WrtHrTrc('   bal_ARR_RA_CYTD:               '||to_char(bal_ARR_RA_CYTD              ));
3917    WrtHrTrc('   bal_ARR_RA_PTD:                '||to_char(bal_ARR_RA_PTD               ));
3918    WrtHrTrc('   bal_ARR_RA_YTD:                '||to_char(bal_ARR_RA_YTD               ));
3919    WrtHrTrc('   bal_BP_CMTD:                   '||to_char(bal_BP_CMTD                  ));
3920    WrtHrTrc('   bal_BP_PTD:                    '||to_char(bal_BP_PTD                   ));
3921    WrtHrTrc('   bal_BP_YTD:                    '||to_char(bal_BP_YTD                   ));
3922    WrtHrTrc('   bal_CUR_PF_CMTD:               '||to_char(bal_CUR_PF_CMTD              ));
3923    WrtHrTrc('   bal_CUR_PF_CYTD:               '||to_char(bal_CUR_PF_CYTD              ));
3924    WrtHrTrc('   bal_CUR_PF_RUN:                '||to_char(bal_CUR_PF_RUN               ));
3925    WrtHrTrc('   bal_CUR_PF_PTD:                '||to_char(bal_CUR_PF_PTD               ));
3926    WrtHrTrc('   bal_CUR_PF_YTD:                '||to_char(bal_CUR_PF_YTD               ));
3927    WrtHrTrc('   bal_CUR_RA_CMTD:               '||to_char(bal_CUR_RA_CMTD              ));
3928    WrtHrTrc('   bal_CUR_RA_CYTD:               '||to_char(bal_CUR_RA_CYTD              ));
3929    WrtHrTrc('   bal_CUR_RA_RUN:                '||to_char(bal_CUR_RA_RUN               ));
3930    WrtHrTrc('   bal_CUR_RA_PTD:                '||to_char(bal_CUR_RA_PTD               ));
3931    WrtHrTrc('   bal_CUR_RA_YTD:                '||to_char(bal_CUR_RA_YTD               ));
3932    WrtHrTrc('   bal_DIR_DMD_RMN_ITD:           '||to_char(bal_DIR_DMD_RMN_ITD          ));
3933    WrtHrTrc('   bal_EE_INC_PRO_POL_CMTD:       '||to_char(bal_EE_INC_PRO_POL_CMTD      ));
3934    WrtHrTrc('   bal_EE_INC_PRO_POL_CYTD:       '||to_char(bal_EE_INC_PRO_POL_CYTD      ));
3935    WrtHrTrc('   bal_EE_INC_PRO_POL_RUN:        '||to_char(bal_EE_INC_PRO_POL_RUN       ));
3936    WrtHrTrc('   bal_EE_INC_PRO_POL_PTD:        '||to_char(bal_EE_INC_PRO_POL_PTD       ));
3937    WrtHrTrc('   bal_EE_INC_PRO_POL_YTD:        '||to_char(bal_EE_INC_PRO_POL_YTD       ));
3938    WrtHrTrc('   bal_EXC_ARR_PEN_ITD:           '||to_char(bal_EXC_ARR_PEN_ITD          ));
3939    WrtHrTrc('   bal_EXC_ARR_PEN_PTD:           '||to_char(bal_EXC_ARR_PEN_PTD          ));
3940    WrtHrTrc('   bal_EXC_ARR_PEN_YTD:           '||to_char(bal_EXC_ARR_PEN_YTD          ));
3941    WrtHrTrc('   bal_EXC_ARR_RA_ITD:            '||to_char(bal_EXC_ARR_RA_ITD           ));
3942    WrtHrTrc('   bal_EXC_ARR_RA_PTD:            '||to_char(bal_EXC_ARR_RA_PTD           ));
3943    WrtHrTrc('   bal_EXC_ARR_RA_YTD:            '||to_char(bal_EXC_ARR_RA_YTD           ));
3944    WrtHrTrc('   bal_MED_CONTR_CMTD:            '||to_char(bal_MED_CONTR_CMTD           ));
3945    WrtHrTrc('   bal_MED_CONTR_CYTD:            '||to_char(bal_MED_CONTR_CYTD           ));
3946    WrtHrTrc('   bal_MED_CONTR_RUN:             '||to_char(bal_MED_CONTR_RUN            ));
3947    WrtHrTrc('   bal_MED_CONTR_PTD:             '||to_char(bal_MED_CONTR_PTD            ));
3948    WrtHrTrc('   bal_MED_CONTR_YTD:             '||to_char(bal_MED_CONTR_YTD            ));
3949    WrtHrTrc('   bal_NET_PAY_RUN:               '||to_char(bal_NET_PAY_RUN              ));
3950    WrtHrTrc('   bal_NET_TXB_INC_CMTD:          '||to_char(bal_NET_TXB_INC_CMTD         ));
3951    WrtHrTrc('   bal_PAYE_YTD:                  '||to_char(bal_PAYE_YTD                 ));
3952    WrtHrTrc('   bal_SITE_YTD:                  '||to_char(bal_SITE_YTD                 ));
3953    WrtHrTrc('   bal_TAX_YTD:                   '||to_char(bal_TAX_YTD                  ));
3954    WrtHrTrc('   bal_TX_ON_AB_PTD:              '||to_char(bal_TX_ON_AB_PTD             ));
3955    WrtHrTrc('   bal_TX_ON_AB_YTD:              '||to_char(bal_TX_ON_AB_YTD             ));
3956    WrtHrTrc('   bal_TX_ON_AP_PTD:              '||to_char(bal_TX_ON_AP_PTD             ));
3957    WrtHrTrc('   bal_TX_ON_AP_YTD:              '||to_char(bal_TX_ON_AP_YTD             ));
3958    WrtHrTrc('   bal_TX_ON_BP_PTD:              '||to_char(bal_TX_ON_BP_PTD             ));
3959    WrtHrTrc('   bal_TX_ON_BP_YTD:              '||to_char(bal_TX_ON_BP_YTD             ));
3960    WrtHrTrc('   bal_TX_ON_TA_PTD:              '||to_char(bal_TX_ON_TA_PTD             ));
3961    WrtHrTrc('   bal_TX_ON_TA_YTD:              '||to_char(bal_TX_ON_TA_YTD             ));
3962    WrtHrTrc('   bal_TX_ON_DR_PTD:              '||to_char(bal_TX_ON_DR_PTD             ));
3963    WrtHrTrc('   bal_TX_ON_DR_YTD:              '||to_char(bal_TX_ON_DR_YTD             ));
3964    WrtHrTrc('   bal_TX_ON_FB_PTD:              '||to_char(bal_TX_ON_FB_PTD             ));
3965    WrtHrTrc('   bal_TX_ON_FB_YTD:              '||to_char(bal_TX_ON_FB_YTD             ));
3966    WrtHrTrc('   bal_TX_ON_NI_PTD:              '||to_char(bal_TX_ON_NI_PTD             ));
3967    WrtHrTrc('   bal_TX_ON_NI_YTD:              '||to_char(bal_TX_ON_NI_YTD             ));
3968    WrtHrTrc('   bal_TX_ON_PO_PTD:              '||to_char(bal_TX_ON_PO_PTD             ));
3969    WrtHrTrc('   bal_TX_ON_PO_YTD:              '||to_char(bal_TX_ON_PO_YTD             ));
3970    WrtHrTrc('   bal_TOT_INC_PTD:               '||to_char(bal_TOT_INC_PTD              ));
3971    WrtHrTrc('   bal_TOT_INC_YTD:               '||to_char(bal_TOT_INC_YTD              ));
3972    WrtHrTrc('   bal_TOT_NRFI_AN_INC_CMTD:      '||to_char(bal_TOT_NRFI_AN_INC_CMTD     ));
3973    WrtHrTrc('   bal_TOT_NRFI_AN_INC_CYTD:      '||to_char(bal_TOT_NRFI_AN_INC_CYTD     ));
3974    WrtHrTrc('   bal_TOT_NRFI_AN_INC_RUN:       '||to_char(bal_TOT_NRFI_AN_INC_RUN      ));
3975    WrtHrTrc('   bal_TOT_NRFI_AN_INC_PTD:       '||to_char(bal_TOT_NRFI_AN_INC_PTD      ));
3976    WrtHrTrc('   bal_TOT_NRFI_AN_INC_YTD:       '||to_char(bal_TOT_NRFI_AN_INC_YTD      ));
3977    WrtHrTrc('   bal_TOT_NRFI_INC_CMTD:         '||to_char(bal_TOT_NRFI_INC_CMTD        ));
3978    WrtHrTrc('   bal_TOT_NRFI_INC_CYTD:         '||to_char(bal_TOT_NRFI_INC_CYTD        ));
3979    WrtHrTrc('   bal_TOT_NRFI_INC_RUN:          '||to_char(bal_TOT_NRFI_INC_RUN         ));
3980    WrtHrTrc('   bal_TOT_NRFI_INC_PTD:          '||to_char(bal_TOT_NRFI_INC_PTD         ));
3981    WrtHrTrc('   bal_TOT_NRFI_INC_YTD:          '||to_char(bal_TOT_NRFI_INC_YTD         ));
3982    WrtHrTrc('   bal_TOT_RFI_AN_INC_CMTD:       '||to_char(bal_TOT_RFI_AN_INC_CMTD      ));
3983    WrtHrTrc('   bal_TOT_RFI_AN_INC_CYTD:       '||to_char(bal_TOT_RFI_AN_INC_CYTD      ));
3984    WrtHrTrc('   bal_TOT_RFI_AN_INC_RUN:        '||to_char(bal_TOT_RFI_AN_INC_RUN       ));
3985    WrtHrTrc('   bal_TOT_RFI_AN_INC_PTD:        '||to_char(bal_TOT_RFI_AN_INC_PTD       ));
3986    WrtHrTrc('   bal_TOT_RFI_AN_INC_YTD:        '||to_char(bal_TOT_RFI_AN_INC_YTD       ));
3987    WrtHrTrc('   bal_TOT_RFI_INC_CMTD:          '||to_char(bal_TOT_RFI_INC_CMTD         ));
3988    WrtHrTrc('   bal_TOT_RFI_INC_CYTD:          '||to_char(bal_TOT_RFI_INC_CYTD         ));
3989    WrtHrTrc('   bal_TOT_RFI_INC_RUN:           '||to_char(bal_TOT_RFI_INC_RUN          ));
3990    WrtHrTrc('   bal_TOT_RFI_INC_PTD:           '||to_char(bal_TOT_RFI_INC_PTD          ));
3991    WrtHrTrc('   bal_TOT_RFI_INC_YTD:           '||to_char(bal_TOT_RFI_INC_YTD          ));
3992    WrtHrTrc('   bal_TOT_SEA_WRK_DYS_WRK_YTD:   '||to_char(bal_TOT_SEA_WRK_DYS_WRK_YTD  ));
3993    WrtHrTrc('   bal_TOT_SKL_ANN_INC_CMTD:      '||to_char(bal_TOT_SKL_ANN_INC_CMTD     ));
3994    WrtHrTrc('   bal_TOT_SKL_INC_CMTD:          '||to_char(bal_TOT_SKL_INC_CMTD         ));
3995    WrtHrTrc('   bal_TOT_TXB_INC_ITD:           '||to_char(bal_TOT_TXB_INC_ITD          ));
3996    WrtHrTrc('   bal_TOT_TXB_AB_CMTD:           '||to_char(bal_TOT_TXB_AB_CMTD          ));
3997    WrtHrTrc('   bal_TOT_TXB_AB_RUN:            '||to_char(bal_TOT_TXB_AB_RUN           ));
3998    WrtHrTrc('   bal_TOT_TXB_AB_PTD:            '||to_char(bal_TOT_TXB_AB_PTD           ));
3999    WrtHrTrc('   bal_TOT_TXB_AB_YTD:            '||to_char(bal_TOT_TXB_AB_YTD           ));
4000    WrtHrTrc('   bal_TOT_TXB_AP_CMTD:           '||to_char(bal_TOT_TXB_AP_CMTD          ));
4001    WrtHrTrc('   bal_TOT_TXB_AP_RUN:            '||to_char(bal_TOT_TXB_AP_RUN           ));
4002    WrtHrTrc('   bal_TOT_TXB_AP_PTD:            '||to_char(bal_TOT_TXB_AP_PTD           ));
4003    WrtHrTrc('   bal_TOT_TXB_AP_YTD:            '||to_char(bal_TOT_TXB_AP_YTD           ));
4004    WrtHrTrc('   bal_TOT_TXB_FB_CMTD:           '||to_char(bal_TOT_TXB_FB_CMTD          ));
4005    WrtHrTrc('   bal_TOT_TXB_FB_CYTD:           '||to_char(bal_TOT_TXB_FB_CYTD          ));
4006    WrtHrTrc('   bal_TOT_TXB_FB_RUN:            '||to_char(bal_TOT_TXB_FB_RUN           ));
4007    WrtHrTrc('   bal_TOT_TXB_FB_PTD:            '||to_char(bal_TOT_TXB_FB_PTD           ));
4008    WrtHrTrc('   bal_TOT_TXB_FB_YTD:            '||to_char(bal_TOT_TXB_FB_YTD           ));
4009    WrtHrTrc('   bal_TOT_TXB_NI_CMTD:           '||to_char(bal_TOT_TXB_NI_CMTD          ));
4010    WrtHrTrc('   bal_TOT_TXB_NI_CYTD:           '||to_char(bal_TOT_TXB_NI_CYTD          ));
4011    WrtHrTrc('   bal_TOT_TXB_NI_RUN:            '||to_char(bal_TOT_TXB_NI_RUN           ));
4012    WrtHrTrc('   bal_TOT_TXB_NI_PTD:            '||to_char(bal_TOT_TXB_NI_PTD           ));
4013    WrtHrTrc('   bal_TOT_TXB_NI_YTD:            '||to_char(bal_TOT_TXB_NI_YTD           ));
4014    WrtHrTrc('   bal_TOT_TXB_PO_CMTD:           '||to_char(bal_TOT_TXB_PO_CMTD          ));
4015    WrtHrTrc('   bal_TOT_TXB_PO_PTD:            '||to_char(bal_TOT_TXB_PO_PTD           ));
4016    WrtHrTrc('   bal_TOT_TXB_PO_YTD:            '||to_char(bal_TOT_TXB_PO_YTD           ));
4017    WrtHrTrc('   bal_TOT_TXB_TA_CMTD:           '||to_char(bal_TOT_TXB_TA_CMTD          ));
4018    WrtHrTrc('   bal_TOT_TXB_TA_CYTD:           '||to_char(bal_TOT_TXB_TA_CYTD          ));
4019    WrtHrTrc('   bal_TOT_TXB_TA_PTD:            '||to_char(bal_TOT_TXB_TA_PTD           ));
4020    WrtHrTrc('   bal_TOT_TXB_TA_YTD:            '||to_char(bal_TOT_TXB_TA_YTD           ));
4021 
4022    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',1);
4023 
4024 -- Initialise Package Globals
4025 -- Contexts
4026    con_ASG_ACT_ID := ASSIGNMENT_ACTION_ID;
4027    con_ASG_ID     := ASSIGNMENT_ID;
4028    con_PRL_ACT_ID := PAYROLL_ACTION_ID;
4029    con_PRL_ID     := PAYROLL_ID;
4030 
4031    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',2);
4032 
4033 -- Tax Override Validation
4034 --
4035    /*
4036    V = Amount
4037    P = Percentage
4038    S = Force Site Calculation
4039    */
4040 
4041 --  Tax Status Validation
4042 --
4043    /*
4044    A = Normal
4045    B = Provisional
4046    C = Directive Amount
4047    D = Directive Percentage
4048    E = Close Corporation
4049    F = Temporary Worker/Student
4050    G = Seasonal Worker
4051    H = Zero Tax
4052    J = Personal Service Company
4053    K = Personal Service Trust
4054    L = Labour Broker
4055    M = Private Director
4056    N = Private Director with Directive Amount
4057    P = Private Director with Directive Percentage
4058    Q = Private Director Zero Tax
4059    */
4060    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',3);
4061 
4062 -- C = Directive Amount
4063 -- N = Private Director with Directive Amount
4064 --
4065    IF dbi_TX_STA IN ('C','N') THEN
4066       IF trc_OvrTxCalc AND (trc_OvrTyp = 'S' OR trc_OvrTyp = 'P') THEN
4067          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',4);
4068          IF xpt_Msg = 'No Error' THEN
4069             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',5);
4070             xpt_Msg := 'PY_ZA_TX_OVR_TX_STATE_C';
4071          END IF;
4072          RAISE xpt_E;
4073          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',6);
4074       ELSIF trc_OvrTxCalc AND trc_OvrTyp = 'V' THEN
4075          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',7);
4076          trc_CalTyp := 'OvrCalc';
4077          trc_OvrWrn := 'WARNING: Tax Override - Total Tax Value: '||to_char(trc_LibFpNI + trc_LibFpAP);
4078       -- Check Directive Number First
4079       ELSIF dbi_TX_DIR_NUM = 'NULL' THEN
4080          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',8);
4081          IF xpt_Msg = 'No Error' THEN
4082             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',9);
4083             xpt_Msg := 'PY_ZA_TX_DIR_NUM';
4084          END IF;
4085          RAISE xpt_E;
4086       -- Check that directive value is filled in
4087       ELSIF dbi_TX_DIR_VAL = -1 THEN
4088          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',10);
4089          IF xpt_Msg = 'No Error' THEN
4090             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',11);
4091             xpt_Msg := 'PY_ZA_TX_DIR_MONT';
4092          END IF;
4093          RAISE xpt_E;
4094       ELSE
4095          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',12);
4096          trc_CalTyp := 'NoCalc';
4097          -- Liability = entered value
4098          trc_LibFpNI := dbi_TX_DIR_VAL;
4099          -- Standard NetPay Validation
4100          py_za_tx_utl_01032005.ValidateTaxOns;
4101       END IF;
4102 -- D = Directive Percentage
4103 -- P = Private Director wth Directive Percentage
4104 --
4105    ELSIF dbi_TX_STA IN ('D','P') THEN
4106       IF trc_OvrTxCalc AND trc_OvrTyp = 'S' THEN
4107          IF xpt_Msg = 'No Error' THEN
4108             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',13);
4109             xpt_Msg := 'PY_ZA_TX_OVR_TX_STATE_DEF';
4110          END IF;
4111          RAISE xpt_E;
4112          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',14);
4113       ELSIF trc_OvrTxCalc AND trc_OvrTyp = 'V' THEN
4114          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',15);
4115          trc_CalTyp := 'OvrCalc';
4116          trc_OvrWrn := 'WARNING: Tax Override - Total Tax Value: '||to_char(trc_LibFpNI + trc_LibFpAP);
4117       ELSE
4118          IF trc_OvrTxCalc AND trc_OvrTyp = 'P' THEN
4119             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',16);
4120             trc_OvrWrn := 'WARNING: Tax Override - '||to_char(trc_OvrPrc)||' Percent';
4121             -- Percentage taken into account in py_za_tx_utl_01032005.TaxLiability
4122          END IF;
4123          -- Check Directive Number First
4124          IF dbi_TX_DIR_NUM = 'NULL' THEN
4125             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',17);
4126             IF xpt_Msg = 'No Error' THEN
4127                hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',18);
4128                xpt_Msg := 'PY_ZA_TX_DIR_NUM';
4129             END IF;
4130             RAISE xpt_E;
4131          -- Check that directive value is filled in
4132          ELSIF dbi_TX_DIR_VAL = -1 THEN
4133             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',19);
4134             IF xpt_Msg = 'No Error' THEN
4135                hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',20);
4136                xpt_Msg := 'PY_ZA_TX_DIR_PERC';
4137             END IF;
4138             RAISE xpt_E;
4139          ELSE
4140             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',21);
4141             DirCalc;
4142          END IF;
4143       END IF;
4144 -- E = Close Corporation
4145 -- F = Temporary Worker/Student
4146 -- J = Personal Service Company
4147 -- K = Personal Service Trust
4148 -- L = Labour Broker
4149 --
4150    ELSIF dbi_TX_STA IN ('E','F','J','K','L') THEN
4151       IF trc_OvrTxCalc AND trc_OvrTyp = 'S' THEN
4152          IF xpt_Msg = 'No Error' THEN
4153             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',22);
4154             xpt_Msg := 'PY_ZA_TX_OVR_TX_STATE_DEF';
4155          END IF;
4156          RAISE xpt_E;
4157          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',23);
4158       ELSIF trc_OvrTxCalc AND trc_OvrTyp = 'V' THEN
4159          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',24);
4160          trc_CalTyp := 'OvrCalc';
4161          trc_OvrWrn := 'WARNING: Tax Override - Total Tax Value: '||to_char(trc_LibFpNI + trc_LibFpAP);
4162       ELSE
4163          IF trc_OvrTxCalc AND trc_OvrTyp = 'P' THEN
4164             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',25);
4165             trc_OvrWrn := 'WARNING: Tax Override - '||to_char(trc_OvrPrc)||' Percent';
4166             -- Percentage taken into account in py_za_tx_utl_01032005.TaxLiability
4167          END IF;
4168          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',26);
4169          -- Simply Execute the Directive Calculation
4170          DirCalc;
4171       END IF;
4172 -- G = Seasonal Worker
4173 --
4174    ELSIF dbi_TX_STA = 'G' THEN
4175       IF trc_OvrTxCalc AND (trc_OvrTyp = 'S' OR trc_OvrTyp = 'P') THEN
4176          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',27);
4177          IF xpt_Msg = 'No Error' THEN
4178             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',28);
4179             xpt_Msg := 'PY_ZA_TX_OVR_TX_STATE_G';
4180          END IF;
4181          RAISE xpt_E;
4182          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',29);
4183       -- Check that seasonal worker days worked is filled in
4184       ELSIF dbi_SEA_WRK_DYS_WRK = 0 THEN
4185          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',30);
4186          IF xpt_Msg = 'No Error' THEN
4187             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',31);
4188             xpt_Msg := 'PY_ZA_TX_SEA_WRK_DYS';
4189          END IF;
4190          RAISE xpt_E;
4191       ELSE
4192          IF trc_OvrTxCalc AND trc_OvrTyp = 'V' THEN
4193             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',32);
4194             trc_CalTyp := 'OvrCalc';
4195             trc_OvrWrn := 'WARNING: Tax Override - Total Tax Value: '||to_char(trc_LibFpNI + trc_LibFpAP);
4196             py_za_tx_utl_01032005.SetRebates;
4197          ELSE
4198             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',33);
4199             SeaCalc;
4200          END IF;
4201       END IF;
4202 -- A = Normal
4203 -- B = Provisional
4204 -- M = Private Director
4205 --
4206    ELSIF dbi_TX_STA IN ('A','B','M') THEN
4207       IF dbi_TX_STA <> 'M' THEN
4208          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',34);
4209          -- Deemed Remuneration only applicable to 'M'
4210          bal_DIR_DMD_RMN_ITD := 0;
4211       END IF;
4212 
4213       IF trc_OvrTxCalc AND trc_OvrTyp = 'V' THEN
4214          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',35);
4215          trc_CalTyp := 'OvrCalc';
4216          trc_OvrWrn := 'WARNING: Tax Override - Total Tax Value: '||to_char(trc_LibFpNI + trc_LibFpAP);
4217          py_za_tx_utl_01032005.SetRebates;
4218          trc_SitFactor := dbi_ZA_DYS_IN_YR / py_za_tx_utl_01032005.DaysWorked;
4219       ELSIF trc_OvrTxCalc AND trc_OvrTyp = 'S' THEN
4220          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',36);
4221          trc_CalTyp := 'OvrCalc';
4222          trc_OvrWrn := 'WARNING: Tax Override - Forced Site Calculation';
4223          -- Force the Site Calculation
4224          SitCalc;
4225          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',37);
4226       ELSE
4227          IF trc_OvrTxCalc AND trc_OvrTyp = 'P' THEN
4228             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',38);
4229             trc_OvrWrn := 'WARNING: Tax Override - '||to_char(trc_OvrPrc)||' Percent';
4230             -- Percentage taken into account in py_za_tx_utl_01032005.TaxLiability
4231          END IF;
4232 
4233          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',39);
4234          IF py_za_tx_utl_01032005.LatePayPeriod THEN
4235             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',40);
4236             LteCalc;
4237          -- Is this a SITE Period?
4238          ELSIF py_za_tx_utl_01032005.EmpTermPrePeriod THEN
4239             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',41);
4240             SitCalc;
4241          ELSIF py_za_tx_utl_01032005.LstPeriod OR py_za_tx_utl_01032005.EmpTermInPeriod THEN
4242             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',42);
4243             IF py_za_tx_utl_01032005.PreErnPeriod THEN
4244                hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',43);
4245                YtdCalc;
4246             ELSE
4247                hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',44);
4248                SitCalc;
4249             END IF;
4250          ElSE
4251             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',45);
4252             -- The employee has NOT been terminated!
4253             IF py_za_tx_utl_01032005.PreErnPeriod THEN
4254                hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',46);
4255                YtdCalc;
4256           --  Bug 4346955
4257           /*  ELSIF dbi_ZA_ASG_TX_RTR_PRD = 'Y' THEN
4258                hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',47);
4259                IF dbi_ZA_ASG_TAX_RTR_RSLTS = 'Y' THEN
4260                   hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',48);
4261                   SitCalc;
4262                ELSIF py_za_tx_utl_01032005.NegPtd THEN
4263                   hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',49);
4264                   SitCalc;
4265                ELSE
4266                   hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',50);
4267                   NorCalc;
4268                END IF; */
4269             ELSIF py_za_tx_utl_01032005.NegPtd THEN
4270                hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',51);
4271                SitCalc;
4272             ELSE
4273                hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',52);
4274                NorCalc;
4275             END IF;
4276          END IF;
4277       END IF;
4278 -- H = Zero Tax
4279 -- Q = Private Director Zero Tax
4280 --
4281    ELSIF dbi_TX_STA IN ('H','Q') THEN
4282       IF trc_OvrTxCalc THEN
4283          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',53);
4284          IF xpt_Msg = 'No Error' THEN
4285             hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',54);
4286             xpt_Msg := 'PY_ZA_TX_OVR_TX_STATE_H';
4287          END IF;
4288          RAISE xpt_E;
4289       ELSE
4290          hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',55);
4291          trc_LibFpNI := -1 * bal_TX_ON_NI_YTD;
4292          trc_LibFpFB := -1 * bal_TX_ON_FB_YTD;
4293          trc_LibFpTA := -1 * bal_TX_ON_TA_YTD;
4294          trc_LibFpBP := -1 * bal_TX_ON_BP_YTD;
4295          trc_LibFpAB := -1 * bal_TX_ON_AB_YTD;
4296          trc_LibFpAP := -1 * bal_TX_ON_AP_YTD;
4297          trc_LibFpPO := -1 * bal_TX_ON_PO_YTD;
4298       END IF;
4299    ELSE
4300       hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',56);
4301       hr_utility.set_message(801, 'ERROR: Invalid Tax Status');
4302       hr_utility.raise_error;
4303    END IF;
4304 
4305    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',57);
4306 
4307 -- Post Calculation Steps
4308 --
4309    py_za_tx_utl_01032005.SitPaySplit;
4310 
4311    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',58);
4312 
4313 -- Execute the Arrear Processing
4314 --
4315    IF py_za_tx_utl_01032005.SitePeriod THEN
4316       hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',59);
4317       py_za_tx_utl_01032005.ArrearExcess;
4318    END IF;
4319 
4320    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',60);
4321 
4322 -- Calculate Net Taxable Income
4323 --
4324    NetTxbIncCalc;
4325 
4326    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',61);
4327 
4328 -- Setup the Out Parameters
4329 --
4330    -- Messages
4331    p_LibWrn := trc_LibWrn;   -- Liability Warning
4332    p_OvrWrn := trc_OvrWrn;   -- Override Warning
4333 
4334    -- Pay Values
4335    trc_PayValSD := ( trc_LibFpNI
4336                    + trc_LibFpFB
4337                    + trc_LibFpTA
4338                    + trc_LibFpBP
4339                    + trc_LibFpAB
4340                    + trc_LibFpAP
4341                    + trc_LibFpPO
4342                    );
4343    trc_PayValEC := trc_LibFpDR;
4344 
4345    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',62);
4346 
4347    -- Tax On's
4348    p_LibFpDR  := trc_LibFpDR;
4349    p_LibFpNI  := trc_LibFpNI;
4350    p_LibFpFB  := trc_LibFpFB;
4351    p_LibFpTA  := trc_LibFpTA;
4352    p_LibFpBP  := trc_LibFpBP;
4353    p_LibFpAB  := trc_LibFpAB;
4354    p_LibFpAP  := trc_LibFpAP;
4355    p_LibFpPO  := trc_LibFpPO;
4356    p_PayValSD := trc_PayValSD;
4357    p_PayValEC := trc_PayValEC;
4358 
4359    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',63);
4360 
4361    -- Indicators, Splits and Updates
4362    p_PayeVal              := trc_PayeVal;
4363    p_SiteVal              := trc_SiteVal;
4364    p_It3Ind               := trc_It3Ind;
4365    p_PfUpdFig             := trc_PfUpdFig;
4366    p_RaUpdFig             := trc_RaUpdFig;
4367    p_OUpdFig              := trc_OUpdFig;
4368    p_NtiUpdFig            := trc_NtiUpdFig;
4369 
4370    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',64);
4371 
4372    p_LSDirNum  := dbi_ZA_LS_DIR_NUM;
4373    p_LSDirVal  := dbi_ZA_LS_DIR_VAL;
4374 
4375 -- Execute The Tax Trace
4376 --
4377    py_za_tx_utl_01032005.Trace;
4378 
4379    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',65);
4380 
4381 -- Clear Globals
4382 --
4383    py_za_tx_utl_01032005.ClearGlobals;
4384 
4385    hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',66);
4386 
4387 -- End off Trace File
4388    WrtHrTrc('------------------------------------------------------------');
4389    WrtHrTrc('--                End of Tax Trace File                   --');
4390    WrtHrTrc('------------------------------------------------------------');
4391    WrtHrTrc('                             --                             ');
4392 
4393 -- Call hr_utility stop procedure
4394    py_za_tx_utl_01032005.StopHrTrace;
4395 
4396   --dbms_debug.debug_off;
4397 
4398    RETURN l_Dum;
4399 
4400 EXCEPTION
4401    WHEN xpt_FxdPrc THEN
4402       hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',67);
4403       WrtHrTrc('Sql error msg: Fixed Percentage was not entered');
4404       py_za_tx_utl_01032005.StopHrTrace;
4405       hr_utility.set_message(801, 'Fixed Percentage not entered');
4406       py_za_tx_utl_01032005.ClearGlobals;
4407       hr_utility.raise_error;
4408    WHEN xpt_E  THEN
4409       hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',68);
4410       WrtHrTrc('xpt_Msg: '||xpt_Msg);
4411       py_za_tx_utl_01032005.StopHrTrace;
4412       hr_utility.set_message(801, xpt_Msg);
4413       py_za_tx_utl_01032005.ClearGlobals;
4414       hr_utility.raise_error;
4415    WHEN OTHERS THEN
4416       hr_utility.set_location('py_za_tx_01032005.ZaTx_01032005',69);
4417       WrtHrTrc('Sql error code: '||TO_CHAR(SQLCODE));
4418       WrtHrTrc('Sql error msg: '||SUBSTR(SQLERRM(SQLCODE), 1, 100));
4419       py_za_tx_utl_01032005.StopHrTrace;
4420       hr_utility.set_message(801, 'ZaTx_01032005: '||TO_CHAR(SQLCODE));
4421       py_za_tx_utl_01032005.ClearGlobals;
4422       hr_utility.raise_error;
4423 END ZaTx_01032005;
4424 
4425 END PY_ZA_TX_01032005;
4426