DBA Data[Home] [Help]

PACKAGE BODY: APPS.PY_ZA_TX_01032007

Source


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