DBA Data[Home] [Help]

PACKAGE BODY: APPS.PY_ZA_TX_UTL_01032006

Source


1 PACKAGE BODY py_za_tx_utl_01032006 AS
2 /* $Header: pyzatu07.pkb 120.0.12000000.2 2007/03/26 16:35:37 rajesrin 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_utl_01032006.pkb
10 
11    DESCRIPTION
12       This is the ZA Tax Module utility package.  It contains
13       functions and procedures used by the main tax package.
14 
15    PUBLIC FUNCTIONS
16       GlbVal
17          Returns the value of a Oracle Application Global
18          date effectively
19       NegPtd
20          Boolean function returns true if any current PTD
21          total balance value is negative
22       LatePayPeriod
23          Boolean function returns true if the current period
24          is a Late Payment Period, i.e. a payment over the
25          tax year boundary.
26       LstPeriod
27          Boolean function returns true if current period is the
28          last period in the current tax year.
29       EmpTermInPeriod
30          Boolean function returns true if the assignment was terminated
31          in the current pay period.
32       EmpTermPrePeiod
33          Boolean function returns true if the assignment was terminated
34          before the current period.
35       PreErnPeriod
36          Boolean function returns true if this run is deemed to be
37          a Pre-Earnings Calculation Run.
38          For a complete description see the tax module design document.
39       SitePeriod
40          Boolean function returns true if it is a tax site period.
41          For a complete description see the tax module design document.
42       Annualise
43          Returns annualised value to the calling object.
44          For a complete description see the tax module design document.
45       TaxLiability
46          Returns the gross tax liability on passed value.
47          For a complete description see the tax module design document.
48       DeAnnualise
49          Returns the de-annualised value to the calling object.
50          For a complete description see the tax module design document.
51       DaysWorked
52          Returns the number of days worked for the assignment.
53          For a complete description see the tax module design document.
54 
55    PUBLIC PROCEDURES
56       StartHrTrace
57          Sets package global that determines if extra trace information
58          will be written to file - hr_utility
59       StopHrTrace
60          Stops trace information from being written to file
61       WriteHrTrace
62          Writes extra trace information to file if global
63          has been set
64       PeriodFactor
65          Calculates the period factor for the assignment.
66          For a complete description see the tax module design document.
67       PossiblePeriodsFactor
68          Calculates the possible period factor for the assignment.
69          For a complete description see the tax module design document.
70       SetRebates
71          Calculate tax Rebate and Threshold values.
72          For a complete description see the tax module design document.
73       Abatements
74          Calculates all necessary abatements.
75          For a complete description see the tax module design document.
76       ArrearExcess
77          Calculates the arrear excess figure to 'effectively' update the
78          Asg_Itd dimension of the arrear excess pension and retirement
79          annuity balances.  Will only fire on siteperiod.
80       TrvAll
81          Calculates the taxable travel allowance over a period of
82          time based on the effective global values at the time.
83          For a complete description see the tax module design document.
84       NpVal
85          Validates the calculated category liabilities.
86          For a complete description see the tax module design document.
87       SitPaySplit
88          Calculates the site paye split of tax liabilities.
89          For a complete description see the tax module design document.
90       Trace
91          Traces the tax calculation.
92          For a complete description see the tax module design document.
93       ClearGlobals
94          Clears any set package globals.
95          For a complete description see the tax module design document.
96 
97    PRIVATE FUNCTIONS
98       GetTableValue
99          Returns the value from a user table date effectively
100 
101    PRIVATE PROCEDURES
102       <none>
103 
104    NOTES
105       .
106 
107    MODIFICATION HISTORY
108    Person    Date       Version        Bug     Comments
109    --------- ---------- -------------- ------- --------------------------------
110    J.N. Louw 14/02/2007 115.2          5634416 Modified TaxLiability
111    J.N. Louw 06/12/2005 115.1          4861242 For detail history see
112                                                py_za_tx_utl_01032005
113  */
114 -------------------------------------------------------------------------------
115 --                               PACKAGE BODY                                --
116 -------------------------------------------------------------------------------
117 
118 -------------------------------------------------------------------------------
119 -- StartHrTrace                                                              --
120 -- Wrapper for hr_utility.trace_on                                           --
121 -------------------------------------------------------------------------------
122 PROCEDURE StartHrTrace AS
123 BEGIN
124    IF g_HrTraceEnabled THEN
125       hr_utility.trace_on(null,g_HrTracePipeName);
126    END IF;
127 END StartHrTrace;
128 -------------------------------------------------------------------------------
129 -- StartHrTrace                                                              --
130 -- Function wrapper for hr_utility.trace_on                                  --
131 -------------------------------------------------------------------------------
132 FUNCTION StartHrTrace(
133    p_HrTracePipeName VARCHAR2
134    ) RETURN VARCHAR2
135 AS
136 BEGIN
137    hr_utility.trace_on(null,p_HrTracePipeName);
138    RETURN p_HrTracePipeName;
139 END StartHrTrace;
140 -------------------------------------------------------------------------------
141 -- StopHrTrace                                                               --
142 -- Wrapper for hr_utility.trace_off                                          --
143 -------------------------------------------------------------------------------
144 PROCEDURE StopHrTrace AS
145 BEGIN
146    IF g_HrTraceEnabled THEN
147       hr_utility.trace_off;
148    END IF;
149 END StopHrTrace;
150 -------------------------------------------------------------------------------
151 -- StopHrTrace                                                               --
152 -- Function wrapper for hr_utility.trace_off                                 --
153 -------------------------------------------------------------------------------
154 FUNCTION StopHrTrace RETURN VARCHAR2 AS
155 BEGIN
156    hr_utility.trace_off;
157    RETURN 'TRACE_OFF';
158 END StopHrTrace;
159 -------------------------------------------------------------------------------
160 -- WriteHrTrace                                                              --
161 -- Wrapper for hr_utility.trace                                              --
162 -------------------------------------------------------------------------------
163 PROCEDURE WriteHrTrace(
164    p_Buffer VARCHAR2
165    )
166 AS
167 BEGIN
168    IF g_HrTraceEnabled THEN
169       -- Write the Line
170       hr_utility.trace(p_Buffer);
171    END IF;
172 END WriteHrTrace;
173 
174 
175 -------------------------------------------------------------------------------
176 --                           Tax Utility Functions                           --
177 -------------------------------------------------------------------------------
178 -------------------------------------------------------------------------------
179 -- GlbVal                                                                    --
180 -------------------------------------------------------------------------------
181 FUNCTION GlbVal
182    (p_GlbNme ff_globals_f.global_name%TYPE
183    ,p_EffDte DATE
184    ) RETURN ff_globals_f.global_value%TYPE
185 AS
186 -- Variables
187    l_GlbVal t_balance;
188 BEGIN
189    hr_utility.set_location('py_za_tx_utl_01032006.GlbVal',1);
190    WriteHrTrace('p_GlbNme :'||p_GlbNme);
191    WriteHrTrace('p_EffDte :'||to_char(p_EffDte,'DD/MM/YYYY'));
192    --
193    SELECT TO_NUMBER(global_value)
194      INTO l_GlbVal
195      FROM ff_globals_f
196     WHERE p_EffDte between effective_start_date and effective_end_date
197       AND global_name = p_GlbNme;
198 
199    hr_utility.set_location('py_za_tx_utl_01032006.GlbVal',2);
200    RETURN l_GlbVal;
201 
202 EXCEPTION
203    WHEN OTHERS THEN
204       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
205          py_za_tx_01032006.xpt_Msg := 'GlbVal: '||TO_CHAR(SQLCODE);
206       END IF;
207       RAISE py_za_tx_01032006.xpt_E;
208 END GlbVal;
209 
210 
211 -------------------------------------------------------------------------------
212 -- TotPrdTxbIncYtd
213 -------------------------------------------------------------------------------
214 FUNCTION TotPrdTxbIncYtd RETURN t_balance AS
215    ------------
216    -- Variables
217    ------------
218    l_tot_txb_prd_inc_ytd t_balance;
219 
220 -------------------------------------------------------------------------------
221 BEGIN --                  MAIN                                               --
222 -------------------------------------------------------------------------------
223    hr_utility.set_location('py_za_tx_utl_01032006.TotPrdTxbIncYtd',1);
224 
225    l_tot_txb_prd_inc_ytd :=
226       ( py_za_tx_01032006.bal_TOT_TXB_NI_YTD
227       + py_za_tx_01032006.bal_TOT_TXB_FB_YTD
228       + py_za_tx_01032006.bal_TOT_TXB_TA_YTD
229       );
230    hr_utility.set_location('py_za_tx_utl_01032006.TotPrdTxbIncYtd',2);
231    RETURN l_tot_txb_prd_inc_ytd;
232 
233 EXCEPTION
234    WHEN OTHERS THEN
235       hr_utility.set_location('py_za_tx_utl_01032006.TotPrdTxbIncYtd',3);
236       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
237          py_za_tx_01032006.xpt_Msg := 'TotPrdTxbIncYtd: '||TO_CHAR(SQLCODE);
238       END IF;
239       RAISE py_za_tx_01032006.xpt_E;
240 -------------------------------------------------------------------------------
241 END TotPrdTxbIncYtd;
242 
243 
244 -------------------------------------------------------------------------------
245 -- TotPrdTxbIncPtd
246 -------------------------------------------------------------------------------
247 FUNCTION TotPrdTxbIncPtd RETURN t_balance AS
248    ------------
249    -- Variables
250    ------------
251    l_tot_txb_prd_inc_ptd t_balance;
252 
253 -------------------------------------------------------------------------------
254 BEGIN --                  MAIN                                               --
255 -------------------------------------------------------------------------------
256    hr_utility.set_location('py_za_tx_utl_01032006.TotPrdTxbIncPtd',1);
257 
258    l_tot_txb_prd_inc_ptd :=
259       ( py_za_tx_01032006.bal_TOT_TXB_NI_PTD
260       + py_za_tx_01032006.bal_TOT_TXB_FB_PTD
261       + py_za_tx_01032006.bal_TOT_TXB_TA_PTD
262       );
263    hr_utility.set_location('py_za_tx_utl_01032006.TotPrdTxbIncPtd',2);
264    RETURN l_tot_txb_prd_inc_ptd;
265 
266 EXCEPTION
267    WHEN OTHERS THEN
268       hr_utility.set_location('py_za_tx_utl_01032006.TotPrdTxbIncPtd',3);
269       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
270          py_za_tx_01032006.xpt_Msg := 'TotPrdTxbIncPtd: '||TO_CHAR(SQLCODE);
271       END IF;
272       RAISE py_za_tx_01032006.xpt_E;
273 -------------------------------------------------------------------------------
274 END TotPrdTxbIncPtd;
275 
276 
277 -------------------------------------------------------------------
278 -- NegPtd
279 -------------------------------------------------------------------
280 FUNCTION NegPtd RETURN BOOLEAN AS
281    ------------
282    -- Variables
283    ------------
284    l_Retval BOOLEAN DEFAULT FALSE;
285 
286 -------------------------------------------------------------------
287 BEGIN --                   NegPtd - MAIN                         --
288 -------------------------------------------------------------------
289    hr_utility.set_location('py_za_tx_utl_01032006.NegPtd',1);
290    -- If any period ptd income value is negative
291    -- a site calc has to be done
292 
293    py_za_tx_01032006.trc_NorIncPtd := py_za_tx_01032006.bal_TOT_TXB_NI_PTD;
294    py_za_tx_01032006.trc_FrnBenPtd := py_za_tx_01032006.bal_TOT_TXB_FB_PTD;
295    py_za_tx_01032006.trc_TrvAllPtd := py_za_tx_01032006.bal_TOT_TXB_TA_PTD;
296 
297    py_za_tx_01032006.trc_BonProPtd := py_za_tx_01032006.bal_BP_PTD;
298 
299    IF LEAST( py_za_tx_01032006.trc_NorIncPtd
300            , py_za_tx_01032006.trc_FrnBenPtd
301            , py_za_tx_01032006.trc_TrvAllPtd
302            , py_za_tx_01032006.trc_BonProPtd
303            ) < 0
304    THEN
305       hr_utility.set_location('py_za_tx_utl_01032006.NegPtd',2);
306       py_za_tx_01032006.trc_NegPtd := TRUE;
307    END IF;
308 
309    hr_utility.set_location('py_za_tx_utl_01032006.NegPtd',3);
310    RETURN py_za_tx_01032006.trc_NegPtd;
311 
312 EXCEPTION
313    WHEN OTHERS THEN
314       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
315          py_za_tx_01032006.xpt_Msg := 'NegPtd: '||TO_CHAR(SQLCODE);
316       END IF;
317       RAISE py_za_tx_01032006.xpt_E;
318 END NegPtd;
319 
320 -------------------------------------------------------------------------------
321 -- LatePayPeriod                                                             --
322 -------------------------------------------------------------------------------
323 FUNCTION LatePayPeriod RETURN BOOLEAN AS
324 -- Variables
325    l_CurTxYear NUMBER(15);
326 BEGIN
327    hr_utility.set_location('py_za_tx_utl_01032006.LatePayPeriod',1);
328 -- IF the employee's assignment ended before the current tax year
329 -- it's a Late Pay Period
330    IF py_za_tx_01032006.dbi_ZA_ACT_END_DTE < py_za_tx_01032006.dbi_ZA_TX_YR_STRT THEN
331 
332       hr_utility.set_location('py_za_tx_utl_01032006.LatePayPeriod',2);
333 
334    -- Valid Late Pay Period?
335    --
336    -- Current Tax Year
337       l_CurTxYear := to_number(to_char(py_za_tx_01032006.dbi_ZA_TX_YR_END,'YYYY'));
338 
339       hr_utility.set_location('py_za_tx_utl_01032006.LatePayPeriod',3);
340 
341       IF (l_CurTxYear - py_za_tx_01032006.dbi_ZA_ASG_TX_YR) > 1 THEN
342          hr_utility.set_location('py_za_tx_utl_01032006.LatePayPeriod',4);
343          hr_utility.set_message(801, 'Late Payment Across Two Tax Years!');
344          hr_utility.raise_error;
345       ELSE
346          hr_utility.set_location('py_za_tx_utl_01032006.LatePayPeriod',5);
347          RETURN TRUE;
348       END IF;
349 
350    ELSE
351       hr_utility.set_location('py_za_tx_utl_01032006.LatePayPeriod',6);
352       RETURN FALSE;
353    END IF;
354 
355 EXCEPTION
356    WHEN OTHERS THEN
357       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
358          py_za_tx_01032006.xpt_Msg := 'LatePayPeriod: '||TO_CHAR(SQLCODE);
359       END IF;
360       RAISE py_za_tx_01032006.xpt_E;
361 END LatePayPeriod;
362 -------------------------------------------------------------------------------
363 -- LstPeriod                                                                 --
364 -------------------------------------------------------------------------------
365 FUNCTION LstPeriod RETURN BOOLEAN AS
366 BEGIN
367    -- Is this the last period for the tax year
368    --
369    IF py_za_tx_01032006.dbi_ZA_PAY_PRDS_LFT = 1 THEN
370       hr_utility.set_location('py_za_tx_utl_01032006.LstPeriod',1);
371       RETURN TRUE;
372    ELSE
373       hr_utility.set_location('py_za_tx_utl_01032006.LstPeriod',2);
374       RETURN FALSE;
375    END IF;
376 
377 EXCEPTION
378    WHEN OTHERS THEN
379       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
380          py_za_tx_01032006.xpt_Msg := 'LstPeriod: '||TO_CHAR(SQLCODE);
381       END IF;
382       RAISE py_za_tx_01032006.xpt_E;
383 END LstPeriod;
384 -------------------------------------------------------------------------------
385 -- EmpTermInPeriod                                                           --
386 -------------------------------------------------------------------------------
387 FUNCTION EmpTermInPeriod RETURN BOOLEAN AS
388 
389 BEGIN
390    -- Was the employee terminated in the current period
391    --
392    IF py_za_tx_01032006.dbi_ZA_ACT_END_DTE BETWEEN py_za_tx_01032006.dbi_ZA_CUR_PRD_STRT_DTE
393                                                AND py_za_tx_01032006.dbi_ZA_CUR_PRD_END_DTE
394    THEN
395       hr_utility.set_location('py_za_tx_utl_01032006.EmpTermInPeriod',1);
396       RETURN TRUE;
397    ELSE
398       hr_utility.set_location('py_za_tx_utl_01032006.EmpTermInPeriod',2);
399       RETURN FALSE;
400    END IF;
401 
402 EXCEPTION
403    WHEN OTHERS THEN
404       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
405          py_za_tx_01032006.xpt_Msg := 'EmpTermInPeriod: '||TO_CHAR(SQLCODE);
406       END IF;
407       RAISE py_za_tx_01032006.xpt_E;
408 END EmpTermInPeriod;
409 -------------------------------------------------------------------------------
410 -- EmpTermPrePeriod                                                          --
411 -------------------------------------------------------------------------------
412 FUNCTION EmpTermPrePeriod RETURN BOOLEAN AS
413 
414 BEGIN
415    -- Was the employee terminated before the current period
416    --
417    IF py_za_tx_01032006.dbi_ZA_ACT_END_DTE <= py_za_tx_01032006.dbi_ZA_CUR_PRD_STRT_DTE THEN
418       hr_utility.set_location('py_za_tx_utl_01032006.EmpTermPrePeriod',1);
419       RETURN TRUE;
420    ELSE
421       hr_utility.set_location('py_za_tx_utl_01032006.EmpTermPrePeriod',2);
422       RETURN FALSE;
423    END IF;
424 
425 EXCEPTION
426    WHEN OTHERS THEN
427       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
428          py_za_tx_01032006.xpt_Msg := 'EmpTermPrePeriod: '||TO_CHAR(SQLCODE);
429       END IF;
430       RAISE py_za_tx_01032006.xpt_E;
431 END EmpTermPrePeriod;
432 -------------------------------------------------------------------------------
433 -- PreErnPeriod                                                              --
434 -------------------------------------------------------------------------------
435 FUNCTION PreErnPeriod RETURN BOOLEAN AS
436 
437 BEGIN
438    -- PTD Taxable Income
439    --
440 
441    py_za_tx_01032006.trc_TxbIncPtd :=
442       ( py_za_tx_01032006.bal_TOT_TXB_NI_PTD
443       + py_za_tx_01032006.bal_TOT_TXB_FB_PTD
444       + py_za_tx_01032006.bal_TOT_TXB_TA_PTD
445       + py_za_tx_01032006.bal_BP_PTD
446       );
447    -- Ptd Annual Bonus
448    py_za_tx_01032006.trc_AnnBonPtd := py_za_tx_01032006.bal_TOT_TXB_AB_RUN;
449    -- Ytd Annual Payments
450    py_za_tx_01032006.trc_AnnPymPtd := py_za_tx_01032006.bal_TOT_TXB_AP_YTD;
451 
452    WriteHrTrace('py_za_tx_01032006.trc_TxbIncPtd: '||to_char(py_za_tx_01032006.trc_TxbIncPtd));
453    WriteHrTrace('py_za_tx_01032006.trc_AnnBonPtd: '||to_char(py_za_tx_01032006.trc_AnnBonPtd));
454    WriteHrTrace('py_za_tx_01032006.trc_AnnPymPtd: '||to_char(py_za_tx_01032006.trc_AnnPymPtd));
455 
456    -- Annual Type PTD Income with no Period Type PTD Income
457    IF (py_za_tx_01032006.trc_AnnBonPtd + py_za_tx_01032006.trc_AnnPymPtd) <> 0 AND py_za_tx_01032006.trc_TxbIncPtd <= 0 THEN
458       hr_utility.set_location('py_za_tx_utl_01032006.PreErnPeriod',1);
459       RETURN TRUE;
460    ELSE
461       hr_utility.set_location('py_za_tx_utl_01032006.PreErnPeriod',2);
462       RETURN FALSE;
463    END IF;
464 
465 EXCEPTION
466   WHEN OTHERS THEN
467     IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
468        py_za_tx_01032006.xpt_Msg := 'PreErnPeriod: '||TO_CHAR(SQLCODE);
469     END IF;
470        RAISE py_za_tx_01032006.xpt_E;
471 END PreErnPeriod;
472 -------------------------------------------------------------------------------
473 -- SitePeriod                                                                --
474 -------------------------------------------------------------------------------
475 FUNCTION SitePeriod RETURN BOOLEAN AS
476 BEGIN
477    IF LstPeriod OR EmpTermInPeriod OR EmpTermPrePeriod THEN
478       hr_utility.set_location('py_za_tx_utl_01032006.SitePeriod',1);
479       RETURN TRUE;
480    ELSE
481       hr_utility.set_location('py_za_tx_utl_01032006.SitePeriod',2);
482       RETURN FALSE;
483    END IF;
484 
485 EXCEPTION
486    WHEN OTHERS THEN
487       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
488          py_za_tx_01032006.xpt_Msg := 'SitePeriod: '||TO_CHAR(SQLCODE);
489       END IF;
490       RAISE py_za_tx_01032006.xpt_E;
491 END SitePeriod;
492 -------------------------------------------------------------------------------
493 -- PeriodFactor                                                              --
494 -------------------------------------------------------------------------------
495 PROCEDURE PeriodFactor AS
496    ------------
497    -- Variables
498    ------------
499    l_tot_inc_ytd t_balance;
500    l_tot_inc_ptd t_balance;
501 BEGIN
502    hr_utility.set_location('py_za_tx_utl_01032006.PeriodFactor',1);
503 
504    l_tot_inc_ytd := TotPrdTxbIncYtd;
505    l_tot_inc_ptd := TotPrdTxbIncPtd;
506 
507    hr_utility.set_location('py_za_tx_utl_01032006.PeriodFactor',2);
508 
509    IF py_za_tx_01032006.dbi_ZA_TX_YR_STRT < py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE THEN
510       hr_utility.set_location('py_za_tx_utl_01032006.PeriodFactor',3);
511 
512       IF l_tot_inc_ytd = l_tot_inc_ptd THEN
513          hr_utility.set_location('py_za_tx_utl_01032006.PeriodFactor',3);
514          -- i.e. first pay period for the person
515          py_za_tx_01032006.trc_PrdFactor :=
516          ( py_za_tx_01032006.dbi_ZA_CUR_PRD_END_DTE
517          - py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE
518          + 1
519          )
520          /
521          ( py_za_tx_01032006.dbi_ZA_CUR_PRD_END_DTE
522          - py_za_tx_01032006.dbi_ZA_CUR_PRD_STRT_DTE
523          + 1
524          );
525       ELSE
526          hr_utility.set_location('py_za_tx_utl_01032006.PeriodFactor',5);
527          py_za_tx_01032006.trc_PrdFactor := 1;
528       END IF;
529 
530    ELSE
531       hr_utility.set_location('py_za_tx_utl_01032006.PeriodFactor',6);
532       py_za_tx_01032006.trc_PrdFactor := 1;
533    END IF;
534 
535    WriteHrTrace('dbi_ZA_TX_YR_STRT:       '
536       ||to_char(py_za_tx_01032006.dbi_ZA_TX_YR_STRT,'DD/MM/YYYY'));
537    WriteHrTrace('dbi_ZA_ACT_STRT_DTE:     '
538       ||to_char(py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE,'DD/MM/YYYY'));
539    WriteHrTrace('dbi_ZA_CUR_PRD_END_DTE:  '
540       ||to_char(py_za_tx_01032006.dbi_ZA_CUR_PRD_END_DTE,'DD/MM/YYYY'));
541    WriteHrTrace('dbi_ZA_CUR_PRD_STRT_DTE: '
542       ||to_char(py_za_tx_01032006.dbi_ZA_CUR_PRD_STRT_DTE,'DD/MM/YYYY'));
543    WriteHrTrace('l_tot_inc_ytd:           '
544       ||to_char(l_tot_inc_ytd));
545    WriteHrTrace('l_tot_inc_ptd:           '
546       ||to_char(l_tot_inc_ptd));
547 
548 EXCEPTION
549    WHEN OTHERS THEN
550       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
551          py_za_tx_01032006.xpt_Msg := 'PeriodFactor: '||TO_CHAR(SQLCODE);
552       END IF;
553       RAISE py_za_tx_01032006.xpt_E;
554 END PeriodFactor;
555 -------------------------------------------------------------------------------
556 -- PossiblePeriodsFactor                                                     --
557 -------------------------------------------------------------------------------
558 PROCEDURE PossiblePeriodsFactor AS
559 BEGIN
560    IF py_za_tx_01032006.dbi_ZA_TX_YR_STRT >= py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE THEN
561       hr_utility.set_location('py_za_tx_utl_01032006.PossiblePeriodsFactor',1);
562       py_za_tx_01032006.trc_PosFactor := 1;
563    ELSE
564       IF py_za_tx_01032006.trc_PrdFactor <> 1 THEN
565          hr_utility.set_location('py_za_tx_utl_01032006.PossiblePeriodsFactor',2);
566          --
567          py_za_tx_01032006.trc_PosFactor :=
568             py_za_tx_01032006.dbi_ZA_DYS_IN_YR
569           / ( py_za_tx_01032006.dbi_ZA_TX_YR_END
570             - py_za_tx_01032006.dbi_ZA_CUR_PRD_STRT_DTE
571             + 1
572             );
573       ELSE
574          hr_utility.set_location('py_za_tx_utl_01032006.PossiblePeriodsFactor',3);
575          --
576          py_za_tx_01032006.trc_PosFactor :=
577             py_za_tx_01032006.dbi_ZA_DYS_IN_YR
578           / ( py_za_tx_01032006.dbi_ZA_TX_YR_END
579             - py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE
580             + 1
581             );
582       END IF;
583    END IF;
584 EXCEPTION
585    WHEN OTHERS THEN
586       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
587          py_za_tx_01032006.xpt_Msg := 'PossiblePeriodsFactor: '||TO_CHAR(SQLCODE);
588       END IF;
589       RAISE py_za_tx_01032006.xpt_E;
590 END PossiblePeriodsFactor;
591 -------------------------------------------------------------------------------
592 -- Annualise                                                                 --
593 -------------------------------------------------------------------------------
594 FUNCTION Annualise
595    (p_YtdInc IN NUMBER
596    ,p_PtdInc IN NUMBER
597    ) RETURN NUMBER
598 AS
599    l_AnnFig1  t_balance;
600    l_AnnFig2  t_balance;
601    l_AnnFig3  t_balance;
602    l_AnnFig4  t_balance;
603 
604 BEGIN
605    hr_utility.set_location('py_za_tx_utl_01032006.Annualise',1);
606    -- 1
607    l_AnnFig1 := p_PtdInc / py_za_tx_01032006.trc_PrdFactor;
608    -- 2
609    l_AnnFig2 := l_AnnFig1 * py_za_tx_01032006.dbi_ZA_PAY_PRDS_LFT;
610    -- 3
611    l_AnnFig3 := l_AnnFig2 + p_YtdInc - p_PtdInc;
612    -- 4
613    l_AnnFig4 := l_AnnFig3 * py_za_tx_01032006.trc_PosFactor;
614    --
615    hr_utility.set_location('py_za_tx_utl_01032006.Annualise',2);
616    --
617    WriteHrTrace('p_PtdInc:                             '||to_char(p_PtdInc));
618    WriteHrTrace('py_za_tx_01032006.trc_PrdFactor:      '||to_char(py_za_tx_01032006.trc_PrdFactor));
619    WriteHrTrace('l_AnnFig1:                            '||to_char(l_AnnFig1));
620    WriteHrTrace('py_za_tx_01032006.dbi_ZA_PAY_PRDS_LFT:'||to_char(py_za_tx_01032006.dbi_ZA_PAY_PRDS_LFT));
621    WriteHrTrace('l_AnnFig2:                            '||to_char(l_AnnFig2));
622    WriteHrTrace('p_YtdInc:                             '||to_char(p_YtdInc));
623    WriteHrTrace('p_PtdInc:                             '||to_char(p_PtdInc));
624    WriteHrTrace('l_AnnFig3:                            '||to_char(l_AnnFig3));
625    WriteHrTrace('py_za_tx_01032006.trc_PosFactor:      '||to_char(py_za_tx_01032006.trc_PosFactor));
626    WriteHrTrace('l_AnnFig4:                            '||to_char(l_AnnFig4));
627    --
628    RETURN l_AnnFig4;
629 
630 EXCEPTION
631    WHEN OTHERS THEN
632       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
633          py_za_tx_01032006.xpt_Msg := 'Annualise: '||TO_CHAR(SQLCODE);
634       END IF;
635       RAISE py_za_tx_01032006.xpt_E;
636 END Annualise;
637 -------------------------------------------------------------------------------
638 -- SetRebates                                                                --
639 -------------------------------------------------------------------------------
640 PROCEDURE SetRebates AS
641 
642 -- Variables
643    l_65Year DATE;
644    l_EndDate per_time_periods.end_date%TYPE;
645 
646    l_ZA_TX_YR_END        DATE;
647    l_ZA_ADL_TX_RBT       t_balance;
648    l_ZA_PRI_TX_RBT       t_balance;
649    l_ZA_PRI_TX_THRSHLD   t_balance;
650    l_ZA_SC_TX_THRSHLD    t_balance;
651 
652 BEGIN
653    -- Setup the Globals
654    IF py_za_tx_01032006.trc_CalTyp = 'PstCalc' THEN
655       hr_utility.set_location('py_za_tx_utl_01032006.SetRebates',1);
656       -- Employee Tax Year Start and End Dates
657       --
658       l_EndDate  := py_za_tx_01032006.dbi_ZA_ASG_TX_YR_END;
659 
660       hr_utility.set_location('py_za_tx_utl_01032006.SetRebates',2);
661 
662       -- Global Values
663       l_ZA_TX_YR_END        := l_EndDate;
664       l_ZA_ADL_TX_RBT       := GlbVal('ZA_ADDITIONAL_TAX_REBATE',l_EndDate);
665       l_ZA_PRI_TX_RBT       := GlbVal('ZA_PRIMARY_TAX_REBATE',l_EndDate);
666       l_ZA_PRI_TX_THRSHLD   := GlbVal('ZA_PRIM_TAX_THRESHOLD',l_EndDate);
667       l_ZA_SC_TX_THRSHLD    := GlbVal('ZA_SEC_TAX_THRESHOLD',l_EndDate);
668    ELSE
669       hr_utility.set_location('py_za_tx_utl_01032006.SetRebates',3);
670       -- Set locals to current values
671       l_ZA_TX_YR_END         := py_za_tx_01032006.dbi_ZA_TX_YR_END;
672       l_ZA_ADL_TX_RBT        := py_za_tx_01032006.glb_ZA_ADL_TX_RBT;
673       l_ZA_PRI_TX_RBT        := py_za_tx_01032006.glb_ZA_PRI_TX_RBT;
674       l_ZA_PRI_TX_THRSHLD    := py_za_tx_01032006.glb_ZA_PRI_TX_THRSHLD;
675       l_ZA_SC_TX_THRSHLD     := py_za_tx_01032006.glb_ZA_SC_TX_THRSHLD;
676    END IF;
677 
678    hr_utility.set_location('py_za_tx_utl_01032006.SetRebates',4);
679 
680 -- Calculate the Rebate and Threshold Values
681    hr_utility.set_location('py_za_tx_utl_01032006.SetRebates',5);
682    -- Calculate the assignments 65 Year Date
683    l_65Year := add_months(py_za_tx_01032006.dbi_PER_DTE_OF_BRTH,780);
684 
685    IF l_65Year <= l_ZA_TX_YR_END THEN
686       hr_utility.set_location('py_za_tx_utl_01032006.SetRebates',6);
687       -- give the extra abatement
688       py_za_tx_01032006.trc_Rebate    := l_ZA_PRI_TX_RBT + l_ZA_ADL_TX_RBT;
689       py_za_tx_01032006.trc_Threshold := l_ZA_SC_TX_THRSHLD;
690    ELSE
691       hr_utility.set_location('py_za_tx_utl_01032006.SetRebates',7);
692       -- not eligable for extra abatement
693       py_za_tx_01032006.trc_Rebate    := l_ZA_PRI_TX_RBT;
694       py_za_tx_01032006.trc_Threshold := l_ZA_PRI_TX_THRSHLD;
695    END IF;
696 
697    WriteHrTrace('l_ZA_TX_YR_END:      '||to_char(l_ZA_TX_YR_END,'DD/MM/YYYY'));
698    WriteHrTrace('l_ZA_ADL_TX_RBT:     '||to_char(l_ZA_ADL_TX_RBT));
699    WriteHrTrace('l_ZA_PRI_TX_RBT:     '||to_char(l_ZA_PRI_TX_RBT));
700    WriteHrTrace('l_ZA_PRI_TX_THRSHLD: '||to_char(l_ZA_PRI_TX_THRSHLD));
701    WriteHrTrace('l_ZA_SC_TX_THRSHLD:  '||to_char(l_ZA_SC_TX_THRSHLD));
702 
703 EXCEPTION
704    WHEN OTHERS THEN
705       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
706          py_za_tx_01032006.xpt_Msg := 'SetRebates: '||TO_CHAR(SQLCODE);
707       END IF;
708       RAISE py_za_tx_01032006.xpt_E;
709 END SetRebates;
710 -------------------------------------------------------------------------------
711 -- Abatements
712 -------------------------------------------------------------------------------
713 PROCEDURE Abatements AS
714 
715 -- Variables
716    l_65Year DATE;
717    l_EndDate per_time_periods.end_date%TYPE;
718 
719    l_ZA_TX_YR_END        DATE;
720    l_ZA_ARR_PF_AN_MX_ABT t_balance;
721    l_ZA_ARR_RA_AN_MX_ABT t_balance;
722    l_ZA_PF_AN_MX_ABT     t_balance;
723    l_ZA_PF_MX_PRC        t_balance;
724    l_ZA_RA_AN_MX_ABT     t_balance;
725    l_ZA_RA_MX_PRC        t_balance;
726 
727 ------------------------------------------------------------------------------
728 BEGIN --                      Abatements - Main                             --
729 ------------------------------------------------------------------------------
730 -- Calculate the assignments 65 Year Date
731    l_65Year        := add_months(py_za_tx_01032006.dbi_PER_DTE_OF_BRTH,780);
732    l_ZA_TX_YR_END  := py_za_tx_01032006.dbi_ZA_ASG_TX_YR_END;
733 
734 -- Initialise the figures needed for the calculation
735 -- of tax abatements and rebates, based on the
736 -- calculation type
737 --
738    -------------------------------------------------------------------------
739    IF py_za_tx_01032006.trc_CalTyp = 'NorCalc' THEN                       --
740    -------------------------------------------------------------------------
741    hr_utility.set_location('py_za_tx_utl_01032006.Abatements',1);
742    -------------------------
743    -- Pension Fund Abatement
744    -------------------------
745       ---------------------
746       -- Period Calculation
747       ---------------------
748       -- Annualise Period Pension Fund Contributions
749       py_za_tx_01032006.trc_PerPenFnd := Annualise
750                  (p_YtdInc => py_za_tx_01032006.bal_CUR_PF_YTD
751                  ,p_PtdInc => py_za_tx_01032006.bal_CUR_PF_PTD
752                  );
753       -- Annualise Period RFIable Contributions
754       py_za_tx_01032006.trc_PerRfiCon := Annualise
755                  (p_ytdInc => py_za_tx_01032006.bal_TOT_RFI_INC_YTD
756                  ,p_PtdInc => py_za_tx_01032006.bal_TOT_RFI_INC_PTD
757                  );
758 
759       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',17);
760 
761       ---------------------
762       -- Annual Calculation
763       ---------------------
764       -- Annual Pension Fund Contribution
765       py_za_tx_01032006.trc_AnnPenFnd :=
766          py_za_tx_01032006.trc_PerPenFnd
767        + py_za_tx_01032006.bal_ANN_PF_YTD;
768       -- Annual Rfi Contribution
769       py_za_tx_01032006.trc_AnnRfiCon :=
770          py_za_tx_01032006.trc_PerRfiCon
771        + py_za_tx_01032006.bal_TOT_RFI_AN_INC_YTD;
772 
773    --------------------------------
774    -- Arrear Pension Fund Abatement
775    --------------------------------
776       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',18);
777       -------------
778       -- Excess ITD
779       -------------
780       py_za_tx_01032006.trc_PerArrPenFnd :=
781          py_za_tx_01032006.bal_EXC_ARR_PEN_ITD;
782 
783       ----------
784       -- Current
785       ----------
786       py_za_tx_01032006.trc_PerArrPenFnd :=
787          py_za_tx_01032006.trc_PerArrPenFnd
788        + Annualise
789          ( p_YtdInc => py_za_tx_01032006.bal_ARR_PF_YTD
790          , p_PtdInc => py_za_tx_01032006.bal_ARR_PF_PTD
791          );
792       ---------
793       -- Annual
794       ---------
795       py_za_tx_01032006.trc_AnnArrPenFnd :=
796            py_za_tx_01032006.trc_PerArrPenFnd
797          + py_za_tx_01032006.bal_ANN_ARR_PF_YTD;
798 
799    -------------------------------
800    -- Retirement Annuity Abatement
801    -------------------------------
802       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',19);
803 
804       -------------
805       -- Current RA
806       -------------
807       py_za_tx_01032006.trc_PerRetAnu :=
808          Annualise
809             ( p_YtdInc => py_za_tx_01032006.bal_CUR_RA_YTD
810             , p_PtdInc => py_za_tx_01032006.bal_CUR_RA_PTD
811             );
812       ---------------------
813       -- Current NRFI Contr
814       ---------------------
815 
816       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',20);
817       py_za_tx_01032006.trc_PerNrfiCon :=
818             Annualise
819                ( p_YtdInc => py_za_tx_01032006.bal_TOT_NRFI_INC_YTD
820                , p_PtdInc => py_za_tx_01032006.bal_TOT_NRFI_INC_PTD
821                );
822 
823 
824       ------------
825       -- Annual RA
826       ------------
827       py_za_tx_01032006.trc_AnnRetAnu :=
828          py_za_tx_01032006.trc_PerRetAnu
829        + py_za_tx_01032006.bal_ANN_RA_YTD;
830 
831 
832       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',21);
833       py_za_tx_01032006.trc_AnnNrfiCon :=
834             py_za_tx_01032006.trc_PerNrfiCon
835           + py_za_tx_01032006.bal_TOT_NRFI_AN_INC_YTD;
836 
837 
838    --------------------------------------
839    -- Arrear Retirement Annuity Abatement
840    --------------------------------------
841          hr_utility.set_location('py_za_tx_utl_01032006.Abatements',22);
842       -------------
843       -- Excess ITD
844       -------------
845       py_za_tx_01032006.trc_PerArrRetAnu :=
846          py_za_tx_01032006.bal_EXC_ARR_RA_ITD;
847       ----------
848       -- Current
849       ----------
850       py_za_tx_01032006.trc_PerArrRetAnu :=
851          py_za_tx_01032006.trc_PerArrRetAnu
852        + Annualise
853             ( p_YtdInc => py_za_tx_01032006.bal_ARR_RA_YTD
854             , p_PtdInc => py_za_tx_01032006.bal_ARR_RA_PTD
855             );
856       ---------
857       -- Annual
858       ---------
859       py_za_tx_01032006.trc_AnnArrRetAnu :=
860          py_za_tx_01032006.trc_PerArrRetAnu
861        + py_za_tx_01032006.bal_ANN_ARR_RA_YTD;
862 
863    ------------------------
864    -- Medical Aid Abatement
865    ------------------------
866       -- If the person is not yet 65 this tax year
867       IF l_65Year > l_ZA_TX_YR_END THEN
868          ----------
869          -- Current
870          ----------
871          py_za_tx_01032006.trc_PerMedAidAbm :=
872             Annualise
873                ( p_YtdInc => py_za_tx_01032006.bal_MED_CNTRB_ABM_YTD
874                , p_PtdInc => py_za_tx_01032006.bal_MED_CNTRB_ABM_PTD
875                );
876          ---------
877          -- Annual
878          ---------
879          py_za_tx_01032006.trc_AnnMedAidAbm :=
880             py_za_tx_01032006.trc_PerMedAidAbm
881           + py_za_tx_01032006.bal_ANN_MED_CNTRB_ABM_YTD;
882       ELSE
883       -- if the person is over 65
884          ----------
885          -- Current
886          ----------
887          py_za_tx_01032006.trc_PerMedAidAbm :=
888             Annualise
889                ( p_YtdInc => py_za_tx_01032006.bal_MED_CONTR_YTD
890                , p_PtdInc => py_za_tx_01032006.bal_MED_CONTR_PTD
891                );
892          ---------
893          -- Annual
894          ---------
895          py_za_tx_01032006.trc_AnnMedAidAbm := py_za_tx_01032006.trc_PerMedAidAbm;
896       END IF;
897       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',23);
898 
899    ---------------------------
900    -- Income Protection Policy
901    ---------------------------
902       ---------------------
903       -- Period Calculation
904       ---------------------
905       -- Annualise Income Protection Policy Contributions
906       py_za_tx_01032006.trc_PerIncProPolAbm := Annualise
907                  (p_YtdInc => py_za_tx_01032006.bal_EE_INC_PRO_POL_YTD
908                  ,p_PtdInc => py_za_tx_01032006.bal_EE_INC_PRO_POL_PTD
909                  );
910 
911       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',24);
912 
913       ---------------------
914       -- Annual Calculation
915       ---------------------
916       -- Annual Income Protection Policy Contributions
917       py_za_tx_01032006.trc_AnnIncProPolAbm :=
918          py_za_tx_01032006.trc_PerIncProPolAbm
919        + py_za_tx_01032006.bal_ANN_EE_INC_PRO_POL_YTD;
920 
921    -------------------------------------------------------------------------
922    ELSIF py_za_tx_01032006.trc_CalTyp IN ('YtdCalc','SitCalc') THEN       --
923    -------------------------------------------------------------------------
924       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',25);
925    -------------------------
926    -- Pension Fund Abatement
927    -------------------------
928       ---------------------
929       -- Period Calculation
930       ---------------------
931       -- Annualise Period Pension Fund Contribution
932       py_za_tx_01032006.trc_PerPenFnd :=
933          py_za_tx_01032006.bal_CUR_PF_YTD
934        * py_za_tx_01032006.trc_SitFactor;
935       -- Annualise Period Rfiable Contributions
936       py_za_tx_01032006.trc_PerRfiCon :=
937          py_za_tx_01032006.bal_TOT_RFI_INC_YTD
938        * py_za_tx_01032006.trc_SitFactor;
939       ---------------------
940       -- Annual Calculation
941       ---------------------
942       -- Annual Pension Fund Contribution
943       py_za_tx_01032006.trc_AnnPenFnd :=
944          py_za_tx_01032006.trc_PerPenFnd
945        + py_za_tx_01032006.bal_ANN_PF_YTD;
946       -- Annual Rfi Contribution
947       py_za_tx_01032006.trc_AnnRfiCon :=
948          py_za_tx_01032006.trc_PerRfiCon
949        + py_za_tx_01032006.bal_TOT_RFI_AN_INC_YTD;
950 
951       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',40);
952 
953    --------------------------------
954    -- Arrear Pension Fund Abatement
955    --------------------------------
956       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',41);
957       -------------
958       -- Excess ITD
959       -------------
960       py_za_tx_01032006.trc_PerArrPenFnd :=
961          py_za_tx_01032006.bal_EXC_ARR_PEN_ITD;
962 
963       ----------
964       -- Current
965       ----------
966       py_za_tx_01032006.trc_PerArrPenFnd :=
967           py_za_tx_01032006.trc_PerArrPenFnd
968       + ( py_za_tx_01032006.bal_ARR_PF_YTD
969         * py_za_tx_01032006.trc_SitFactor
970         );
971       ---------
972       -- Annual
973       ---------
974       py_za_tx_01032006.trc_AnnArrPenFnd :=
975            py_za_tx_01032006.trc_PerArrPenFnd
976          + py_za_tx_01032006.bal_ANN_ARR_PF_YTD;
977 
978 
979    -------------------------------
980    -- Retirement Annuity Abatement
981    -------------------------------
982       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',42);
983 
984       -------------
985       -- Current RA
986       -------------
987       -- Calculate RA Contribution
988       py_za_tx_01032006.trc_PerRetAnu :=
989          py_za_tx_01032006.bal_CUR_RA_YTD
990        * py_za_tx_01032006.trc_SitFactor;
991       ---------------------
992       -- Current NRFI Contr
993       ---------------------
994 
995       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',43);
996       py_za_tx_01032006.trc_PerNrfiCon :=
997             py_za_tx_01032006.bal_TOT_NRFI_INC_YTD
998           * py_za_tx_01032006.trc_SitFactor;
999 
1000       ------------
1001       -- Annual RA
1002       ------------
1003       py_za_tx_01032006.trc_AnnRetAnu :=
1004          py_za_tx_01032006.trc_PerRetAnu
1005        + py_za_tx_01032006.bal_ANN_RA_YTD;
1006 
1007 
1008       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',44);
1009       py_za_tx_01032006.trc_AnnNrfiCon :=
1010             py_za_tx_01032006.trc_PerNrfiCon
1011           + py_za_tx_01032006.bal_TOT_NRFI_AN_INC_YTD;
1012 
1013 
1014    --------------------------------------
1015    -- Arrear Retirement Annuity Abatement
1016    --------------------------------------
1017       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',45);
1018       -------------
1019       -- Excess ITD
1020       -------------
1021       py_za_tx_01032006.trc_PerArrRetAnu :=
1022          py_za_tx_01032006.bal_EXC_ARR_RA_ITD;
1023       ----------
1024       -- Current
1025       ----------
1026       py_za_tx_01032006.trc_PerArrRetAnu :=
1027          py_za_tx_01032006.trc_PerArrRetAnu
1028        + ( py_za_tx_01032006.bal_ARR_RA_YTD
1029          * py_za_tx_01032006.trc_SitFactor
1030          );
1031       ---------
1032       -- Annual
1033       ---------
1034       py_za_tx_01032006.trc_AnnArrRetAnu :=
1035          py_za_tx_01032006.trc_PerArrRetAnu
1036        + py_za_tx_01032006.bal_ANN_ARR_RA_YTD;
1037 
1038    ------------------------
1039    -- Medical Aid Abatement
1040    ------------------------
1041       -- If the person is not yet 65 this tax year
1042       IF l_65Year > l_ZA_TX_YR_END THEN
1043          ----------
1044          -- Current
1045          ----------
1046          py_za_tx_01032006.trc_PerMedAidAbm :=
1047             py_za_tx_01032006.bal_MED_CNTRB_ABM_YTD
1048           * py_za_tx_01032006.trc_SitFactor;
1049          ---------
1050          -- Annual
1051          ---------
1052          py_za_tx_01032006.trc_AnnMedAidAbm :=
1053             py_za_tx_01032006.trc_PerMedAidAbm
1054           + py_za_tx_01032006.bal_ANN_MED_CNTRB_ABM_YTD;
1055       ELSE
1056       -- if the person is over 65
1057          ----------
1058          -- Current
1059          ----------
1060          py_za_tx_01032006.trc_PerMedAidAbm :=
1061             py_za_tx_01032006.bal_MED_CONTR_YTD
1062           * py_za_tx_01032006.trc_SitFactor;
1063          ---------
1064          -- Annual
1065          ---------
1066          py_za_tx_01032006.trc_AnnMedAidAbm := py_za_tx_01032006.trc_PerMedAidAbm;
1067       END IF;
1068 
1069    hr_utility.set_location('py_za_tx_utl_01032006.Abatements',46);
1070 
1071    ---------------------------
1072    -- Income Protection Policy
1073    ---------------------------
1074       ---------------------
1075       -- Period Calculation
1076       ---------------------
1077       -- Annualise Income Protection Policy Contributions
1078       py_za_tx_01032006.trc_PerIncProPolAbm :=
1079          py_za_tx_01032006.bal_EE_INC_PRO_POL_YTD
1080        * py_za_tx_01032006.trc_SitFactor;
1081 
1082       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',47);
1083 
1084       ---------------------
1085       -- Annual Calculation
1086       ---------------------
1087       -- Annual Income Protection Policy Contributions
1088       py_za_tx_01032006.trc_AnnIncProPolAbm :=
1089          py_za_tx_01032006.trc_PerIncProPolAbm
1090        + py_za_tx_01032006.bal_ANN_EE_INC_PRO_POL_YTD;
1091 
1092    -------------------------------------------------------------------------
1093    ELSIF py_za_tx_01032006.trc_CalTyp = 'CalCalc' THEN                    --
1094    -------------------------------------------------------------------------
1095       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',48);
1096    -------------------------
1097    -- Pension Fund Abatement
1098    -------------------------
1099       ---------------------
1100       -- Period Calculation
1101       ---------------------
1102       -- Annualise Period Pension Fund Contribution
1103       py_za_tx_01032006.trc_PerPenFnd :=
1104          py_za_tx_01032006.bal_CUR_PF_CYTD
1105        * py_za_tx_01032006.trc_SitFactor;
1106       -- Annualise Period Rfiable Contributions
1107       py_za_tx_01032006.trc_PerRfiCon :=
1108          py_za_tx_01032006.bal_TOT_RFI_INC_CYTD
1109        * py_za_tx_01032006.trc_SitFactor;
1110       ---------------------
1111       -- Annual Calculation
1112       ---------------------
1113       -- Annual Pension Fund Contribution
1114       py_za_tx_01032006.trc_AnnPenFnd :=
1115          py_za_tx_01032006.trc_PerPenFnd
1116        + py_za_tx_01032006.bal_ANN_PF_YTD;
1117       -- Annual Rfi Contribution
1118       py_za_tx_01032006.trc_AnnRfiCon :=
1119          py_za_tx_01032006.trc_PerRfiCon
1120        + py_za_tx_01032006.bal_TOT_RFI_AN_INC_YTD;
1121 
1122    --------------------------------
1123    -- Arrear Pension Fund Abatement
1124    --------------------------------
1125       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',61);
1126       -------------
1127       -- Excess ITD
1128       -------------
1129       py_za_tx_01032006.trc_PerArrPenFnd :=
1130          py_za_tx_01032006.bal_EXC_ARR_PEN_ITD;
1131       ------------------------------------
1132       -- Current/Annual based on frequency
1133       ------------------------------------
1134       py_za_tx_01032006.trc_PerArrPenFnd :=
1135           py_za_tx_01032006.trc_PerArrPenFnd
1136       + ( py_za_tx_01032006.bal_ARR_PF_CYTD
1137         * py_za_tx_01032006.trc_SitFactor
1138         );
1139       ---------
1140       -- Annual
1141       ---------
1142       py_za_tx_01032006.trc_AnnArrPenFnd :=
1143            py_za_tx_01032006.trc_PerArrPenFnd
1144          + py_za_tx_01032006.bal_ANN_ARR_PF_YTD;
1145 
1146    -------------------------------
1147    -- Retirement Annuity Abatement
1148    -------------------------------
1149       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',62);
1150 
1151       -------------
1152       -- Current RA
1153       -------------
1154       -- Calculate RA Contribution
1155       py_za_tx_01032006.trc_PerRetAnu :=
1156          py_za_tx_01032006.bal_CUR_RA_CYTD
1157        * py_za_tx_01032006.trc_SitFactor;
1158       ---------------------
1159       -- Current NRFI Contr
1160       ---------------------
1161 
1162       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',63);
1163       py_za_tx_01032006.trc_PerNrfiCon :=
1164             py_za_tx_01032006.bal_TOT_NRFI_INC_CYTD
1165           * py_za_tx_01032006.trc_SitFactor;
1166 
1167       ------------
1168       -- Annual RA
1169       ------------
1170       py_za_tx_01032006.trc_AnnRetAnu :=
1171          py_za_tx_01032006.trc_PerRetAnu
1172        + py_za_tx_01032006.bal_ANN_RA_YTD;
1173 
1174 
1175       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',64);
1176       py_za_tx_01032006.trc_AnnNrfiCon :=
1177             py_za_tx_01032006.trc_PerNrfiCon
1178           + py_za_tx_01032006.bal_TOT_NRFI_AN_INC_YTD;
1179 
1180 
1181    --------------------------------------
1182    -- Arrear Retirement Annuity Abatement
1183    --------------------------------------
1184       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',65);
1185       -------------
1186       -- Excess ITD
1187       -------------
1188       py_za_tx_01032006.trc_PerArrRetAnu := py_za_tx_01032006.bal_EXC_ARR_RA_ITD;
1189       ----------
1190       -- Current
1191       ----------
1192       py_za_tx_01032006.trc_PerArrRetAnu :=
1193          py_za_tx_01032006.trc_PerArrRetAnu
1194        + ( py_za_tx_01032006.bal_ARR_RA_CYTD
1195          * py_za_tx_01032006.trc_SitFactor
1196          );
1197       ---------
1198       -- Annual
1199       ---------
1200       py_za_tx_01032006.trc_AnnArrRetAnu :=
1201          py_za_tx_01032006.trc_PerArrRetAnu
1202        + py_za_tx_01032006.bal_ANN_ARR_RA_YTD;
1203 
1204    ------------------------
1205    -- Medical Aid Abatement
1206    ------------------------
1207       -- If the person is not yet 65 this tax year
1208       IF l_65Year > l_ZA_TX_YR_END THEN
1209          ----------
1210          -- Current
1211          ----------
1212          py_za_tx_01032006.trc_PerMedAidAbm :=
1213             py_za_tx_01032006.bal_MED_CNTRB_ABM_CYTD
1214           * py_za_tx_01032006.trc_SitFactor;
1215          ---------
1216          -- Annual
1217          ---------
1218          py_za_tx_01032006.trc_AnnMedAidAbm :=
1219             py_za_tx_01032006.trc_PerMedAidAbm
1220           + py_za_tx_01032006.bal_ANN_MED_CNTRB_ABM_YTD;
1221       ELSE
1222       -- if the person is over 65
1223          ----------
1224          -- Current
1225          ----------
1226          py_za_tx_01032006.trc_PerMedAidAbm :=
1227             py_za_tx_01032006.bal_MED_CONTR_CYTD
1228           * py_za_tx_01032006.trc_SitFactor;
1229          ---------
1230          -- Annual
1231          ---------
1232          py_za_tx_01032006.trc_AnnMedAidAbm := py_za_tx_01032006.trc_PerMedAidAbm;
1233       END IF;
1234 
1235    ---------------------------
1236    -- Income Protection Policy
1237    ---------------------------
1238       ---------------------
1239       -- Period Calculation
1240       ---------------------
1241       -- Annualise Income Protection Policy Contributions
1242       py_za_tx_01032006.trc_PerIncProPolAbm :=
1243          py_za_tx_01032006.bal_EE_INC_PRO_POL_CYTD
1244        * py_za_tx_01032006.trc_SitFactor;
1245 
1246       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',66);
1247 
1248       ---------------------
1249       -- Annual Calculation
1250       ---------------------
1251       -- Annual Income Protection Policy Contributions
1252       py_za_tx_01032006.trc_AnnIncProPolAbm :=
1253          py_za_tx_01032006.trc_PerIncProPolAbm
1254        + py_za_tx_01032006.bal_ANN_EE_INC_PRO_POL_YTD;
1255 
1256    -------------------------------------------------------------------------
1257    ELSIF py_za_tx_01032006.trc_CalTyp IN ('BasCalc') THEN       --
1258    -------------------------------------------------------------------------
1259       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',67);
1260    -------------------------
1261    -- Pension Fund Abatement
1262    -------------------------
1263       ---------------------
1264       -- Annual Calculation
1265       ---------------------
1266       -- Annual Pension Fund Contribution
1267       py_za_tx_01032006.trc_AnnPenFnd := py_za_tx_01032006.bal_ANN_PF_YTD;
1268       -- Annual Rfi Contribution
1269       py_za_tx_01032006.trc_AnnRfiCon := py_za_tx_01032006.bal_TOT_RFI_AN_INC_YTD;
1270 
1271       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',78);
1272 
1273    --------------------------------
1274    -- Arrear Pension Fund Abatement
1275    --------------------------------
1276       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',79);
1277       -------------
1278       -- Excess ITD
1279       -------------
1280       py_za_tx_01032006.trc_PerArrPenFnd := py_za_tx_01032006.bal_EXC_ARR_PEN_ITD;
1281 
1282       ---------
1283       -- Annual
1284       ---------
1285       py_za_tx_01032006.trc_AnnArrPenFnd := py_za_tx_01032006.trc_PerArrPenFnd
1286                                           + py_za_tx_01032006.bal_ANN_ARR_PF_YTD;
1287 
1288 
1289    -------------------------------
1290    -- Retirement Annuity Abatement
1291    -------------------------------
1292       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',80);
1293 
1294       ------------
1295       -- Annual RA
1296       ------------
1297       py_za_tx_01032006.trc_AnnRetAnu := py_za_tx_01032006.bal_ANN_RA_YTD;
1298 
1299       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',81);
1300       py_za_tx_01032006.trc_AnnNrfiCon := py_za_tx_01032006.bal_TOT_NRFI_AN_INC_YTD;
1301 
1302 
1303    --------------------------------------
1304    -- Arrear Retirement Annuity Abatement
1305    --------------------------------------
1306       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',82);
1307       -------------
1308       -- Excess ITD
1309       -------------
1310       py_za_tx_01032006.trc_PerArrRetAnu := py_za_tx_01032006.bal_EXC_ARR_RA_ITD;
1311 
1312       ---------
1313       -- Annual
1314       ---------
1315       py_za_tx_01032006.trc_AnnArrRetAnu := py_za_tx_01032006.trc_PerArrRetAnu
1316                                           + py_za_tx_01032006.bal_ANN_ARR_RA_YTD;
1317 
1318    ------------------------
1319    -- Medical Aid Abatement
1320    ------------------------
1321       py_za_tx_01032006.trc_PerMedAidAbm := 0;
1322       py_za_tx_01032006.trc_AnnMedAidAbm := 0;
1323 
1324    hr_utility.set_location('py_za_tx_utl_01032006.Abatements',83);
1325 
1326 
1327    ---------------------------
1328    -- Income Protection Policy
1329    ---------------------------
1330       ---------------------
1331       -- Annual Calculation
1332       ---------------------
1333       -- Annual Income Protection Policy Contributions
1334       py_za_tx_01032006.trc_AnnIncProPolAbm :=
1335          py_za_tx_01032006.bal_ANN_EE_INC_PRO_POL_YTD;
1336 
1337    -------------------------------------------------------------------------
1338    ELSIF py_za_tx_01032006.trc_CalTyp = 'SeaCalc' THEN                    --
1339    -------------------------------------------------------------------------
1340       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',84);
1341    -------------------------
1342    -- Pension Fund Abatement
1343    -------------------------
1344       ---------------------
1345       -- Period Calculation
1346       ---------------------
1347       -- Annualise Period Pension Fund Contribution
1348       py_za_tx_01032006.trc_PerPenFnd :=
1349          py_za_tx_01032006.bal_CUR_PF_RUN
1350        * py_za_tx_01032006.trc_SitFactor;
1351       -- Annualise Period Rfiable Contributions
1352       py_za_tx_01032006.trc_PerRfiCon :=
1353          py_za_tx_01032006.bal_TOT_RFI_INC_RUN
1354        * py_za_tx_01032006.trc_SitFactor;
1355       ---------------------
1356       -- Annual Calculation
1357       ---------------------
1358       -- Annual Pension Fund Contribution
1359       py_za_tx_01032006.trc_AnnPenFnd :=
1360          py_za_tx_01032006.trc_PerPenFnd
1361        + py_za_tx_01032006.bal_ANN_PF_RUN;
1362       -- Annual Rfi Contribution
1363       py_za_tx_01032006.trc_AnnRfiCon :=
1364          py_za_tx_01032006.trc_PerRfiCon
1365        + py_za_tx_01032006.bal_TOT_RFI_AN_INC_RUN;
1366 
1367    --------------------------------
1368    -- Arrear Pension Fund Abatement
1369    --------------------------------
1370       py_za_tx_01032006.trc_PerArrPenFnd := 0;
1371       py_za_tx_01032006.trc_AnnArrPenFnd := 0;
1372 
1373    -------------------------------
1374    -- Retirement Annuity Abatement
1375    -------------------------------
1376       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',85);
1377 
1378       -------------
1379       -- Current RA
1380       -------------
1381       -- Calculate RA Contribution
1382       py_za_tx_01032006.trc_PerRetAnu :=
1383          py_za_tx_01032006.bal_CUR_RA_RUN
1384        * py_za_tx_01032006.trc_SitFactor;
1385       ---------------------
1386       -- Current NRFI Contr
1387       ---------------------
1388 
1389       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',86);
1390       py_za_tx_01032006.trc_PerNrfiCon :=
1391             py_za_tx_01032006.bal_TOT_NRFI_INC_RUN
1392           * py_za_tx_01032006.trc_SitFactor;
1393 
1394 
1395       ------------
1396       -- Annual RA
1397       ------------
1398       py_za_tx_01032006.trc_AnnRetAnu :=
1399          py_za_tx_01032006.trc_PerRetAnu
1400        + py_za_tx_01032006.bal_ANN_RA_RUN;
1401 
1402 
1403       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',87);
1404       py_za_tx_01032006.trc_AnnNrfiCon :=
1405             py_za_tx_01032006.trc_PerNrfiCon
1406           + py_za_tx_01032006.bal_TOT_NRFI_AN_INC_RUN;
1407 
1408 
1409    ----------------------------
1410    -- Arrear Retirement Annuity
1411    ----------------------------
1412       py_za_tx_01032006.trc_PerArrRetAnu := 0;
1413       py_za_tx_01032006.trc_AnnArrRetAnu := 0;
1414 
1415    ------------------------
1416    -- Medical Aid Abatement
1417    ------------------------
1418       -- If the person is not yet 65 this tax year
1419       IF l_65Year > l_ZA_TX_YR_END THEN
1420          ----------
1421          -- Current
1422          ----------
1423          py_za_tx_01032006.trc_PerMedAidAbm :=
1424             py_za_tx_01032006.bal_MED_CNTRB_ABM_RUN
1425           * py_za_tx_01032006.trc_SitFactor;
1426          ---------
1427          -- Annual
1428          ---------
1429          py_za_tx_01032006.trc_AnnMedAidAbm :=
1430             py_za_tx_01032006.trc_PerMedAidAbm
1431           + py_za_tx_01032006.bal_ANN_MED_CNTRB_ABM_RUN;
1432       ELSE
1433       -- if the person is over 65
1434          ----------
1435          -- Current
1436          ----------
1437          py_za_tx_01032006.trc_PerMedAidAbm :=
1438             py_za_tx_01032006.bal_MED_CONTR_RUN
1439           * py_za_tx_01032006.trc_SitFactor;
1440          ---------
1441          -- Annual
1442          ---------
1443          py_za_tx_01032006.trc_AnnMedAidAbm := py_za_tx_01032006.trc_PerMedAidAbm;
1444       END IF;
1445 
1446    ---------------------------
1447    -- Income Protection Policy
1448    ---------------------------
1449       ---------------------
1450       -- Period Calculation
1451       ---------------------
1452       -- Annualise Income Protection Policy Contributions
1453       py_za_tx_01032006.trc_PerIncProPolAbm :=
1454          py_za_tx_01032006.bal_EE_INC_PRO_POL_RUN
1455        * py_za_tx_01032006.trc_SitFactor;
1456 
1457       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',88);
1458 
1459       ---------------------
1460       -- Annual Calculation
1461       ---------------------
1462       -- Annual Income Protection Policy Contributions
1463       py_za_tx_01032006.trc_AnnIncProPolAbm :=
1464          py_za_tx_01032006.trc_PerIncProPolAbm
1465        + py_za_tx_01032006.bal_ANN_EE_INC_PRO_POL_RUN;
1466 
1467    -------------------------------------------------------------------------
1468    ELSIF py_za_tx_01032006.trc_CalTyp = 'LteCalc' THEN                    --
1469    -------------------------------------------------------------------------
1470       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',89);
1471    -------------------------
1472    -- Pension Fund Abatement
1473    -------------------------
1474       ---------------------
1475       -- Period Calculation
1476       ---------------------
1477       -- Annualise Period Pension Fund Contribution
1478       py_za_tx_01032006.trc_PerPenFnd :=
1479          py_za_tx_01032006.bal_CUR_PF_YTD;
1480       -- Annualise Period Rfiable Contributions
1481       py_za_tx_01032006.trc_PerRfiCon :=
1482          py_za_tx_01032006.bal_TOT_RFI_INC_YTD;
1483       ---------------------
1484       -- Annual Calculation
1485       ---------------------
1486       -- Annual Pension Fund Contribution
1487       py_za_tx_01032006.trc_AnnPenFnd :=
1488          py_za_tx_01032006.trc_PerPenFnd
1489        + py_za_tx_01032006.bal_ANN_PF_YTD;
1490       -- Annual Rfi Contribution
1491       py_za_tx_01032006.trc_AnnRfiCon :=
1492          py_za_tx_01032006.trc_PerRfiCon
1493        + py_za_tx_01032006.bal_TOT_RFI_AN_INC_YTD;
1494 
1495    --------------------------------
1496    -- Arrear Pension Fund Abatement
1497    --------------------------------
1498       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',104);
1499       -------------
1500       -- Excess ITD
1501       -------------
1502       py_za_tx_01032006.trc_PerArrPenFnd :=
1503          py_za_tx_01032006.bal_EXC_ARR_PEN_ITD;
1504       ----------
1505       -- Current
1506       ----------
1507       py_za_tx_01032006.trc_PerArrPenFnd :=
1508          py_za_tx_01032006.trc_PerArrPenFnd
1509        + py_za_tx_01032006.bal_ARR_PF_YTD;
1510        ---------
1511        -- Annual
1512        ---------
1513        py_za_tx_01032006.trc_AnnArrPenFnd :=
1514           py_za_tx_01032006.trc_PerArrPenFnd
1515         + py_za_tx_01032006.bal_ANN_ARR_PF_YTD;
1516 
1517    -------------------------------
1518    -- Retirement Annuity Abatement
1519    -------------------------------
1520       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',105);
1521       -------------
1522       -- Current RA
1523       -------------
1524       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',106);
1525       -- Calculate RA Contribution
1526       py_za_tx_01032006.trc_PerRetAnu :=
1527          py_za_tx_01032006.bal_CUR_RA_YTD;
1528       ---------------------
1529       -- Current NRFI Contr
1530       ---------------------
1531 
1532       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',107);
1533       py_za_tx_01032006.trc_PerNrfiCon :=
1534             py_za_tx_01032006.bal_TOT_NRFI_INC_YTD;
1535 
1536 
1537       ------------
1538       -- Annual RA
1539       ------------
1540       py_za_tx_01032006.trc_AnnRetAnu :=
1541          py_za_tx_01032006.trc_PerRetAnu
1542        + py_za_tx_01032006.bal_ANN_RA_YTD;
1543 
1544 
1545       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',108);
1546       py_za_tx_01032006.trc_AnnNrfiCon :=
1547             py_za_tx_01032006.trc_PerNrfiCon
1548           + py_za_tx_01032006.bal_TOT_NRFI_AN_INC_YTD;
1549 
1550 
1551    --------------------------------------
1552    -- Arrear Retirement Annuity Abatement
1553    --------------------------------------
1554       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',109);
1555       -------------
1556       -- Excess ITD
1557       -------------
1558       py_za_tx_01032006.trc_PerArrRetAnu :=
1559          py_za_tx_01032006.bal_EXC_ARR_RA_ITD;
1560       ----------
1561       -- Current
1562       ----------
1563       py_za_tx_01032006.trc_PerArrRetAnu :=
1564          py_za_tx_01032006.trc_PerArrRetAnu
1565        + py_za_tx_01032006.bal_ARR_RA_YTD;
1566       ---------
1567       -- Annual
1568       ---------
1569       py_za_tx_01032006.trc_AnnArrRetAnu :=
1570          py_za_tx_01032006.trc_PerArrRetAnu
1571        + py_za_tx_01032006.bal_ANN_ARR_RA_YTD;
1572 
1573    ------------------------
1574    -- Medical Aid Abatement
1575    ------------------------
1576       IF l_65Year > l_ZA_TX_YR_END THEN
1577          ----------
1578          -- Current
1579          ----------
1580          py_za_tx_01032006.trc_PerMedAidAbm :=
1581             py_za_tx_01032006.bal_MED_CNTRB_ABM_YTD;
1582          ---------
1583          -- Annual
1584          ---------
1585          py_za_tx_01032006.trc_AnnMedAidAbm :=
1586             py_za_tx_01032006.trc_PerMedAidAbm
1587           + py_za_tx_01032006.bal_ANN_MED_CNTRB_ABM_YTD;
1588       ELSE
1589       -- if the person is over 65
1590          ----------
1591          -- Current
1592          ----------
1593          py_za_tx_01032006.trc_PerMedAidAbm :=
1594             py_za_tx_01032006.bal_MED_CONTR_YTD;
1595          ---------
1596          -- Annual
1597          ---------
1598          py_za_tx_01032006.trc_AnnMedAidAbm := py_za_tx_01032006.trc_PerMedAidAbm;
1599       END IF;
1600 
1601    ---------------------------
1602    -- Income Protection Policy
1603    ---------------------------
1604       ---------------------
1605       -- Period Calculation
1606       ---------------------
1607       -- Annualise Income Protection Policy Contributions
1608       py_za_tx_01032006.trc_PerIncProPolAbm :=
1609          py_za_tx_01032006.bal_EE_INC_PRO_POL_YTD;
1610 
1611       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',110);
1612 
1613       ---------------------
1614       -- Annual Calculation
1615       ---------------------
1616       -- Annual Income Protection Policy Contributions
1617       py_za_tx_01032006.trc_AnnIncProPolAbm :=
1618          py_za_tx_01032006.trc_PerIncProPolAbm
1619        + py_za_tx_01032006.bal_ANN_EE_INC_PRO_POL_YTD;
1620 
1621    -------------------------------------------------------------------------
1622    ELSIF py_za_tx_01032006.trc_CalTyp = 'PstCalc' THEN                    --
1623    -------------------------------------------------------------------------
1624       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',111);
1625    -------------------------
1626    -- Pension Fund Abatement
1627    -------------------------
1628       ---------------------
1629       -- Period Calculation
1630       ---------------------
1631       -- Annualise Period Pension Fund Contribution
1632       py_za_tx_01032006.trc_PerPenFnd :=
1633          py_za_tx_01032006.bal_CUR_PF_PTD
1634        * py_za_tx_01032006.trc_SitFactor;
1635       -- Annualise Period Rfiable Contributions
1636       py_za_tx_01032006.trc_PerRfiCon :=
1637          py_za_tx_01032006.bal_TOT_RFI_INC_PTD
1638        * py_za_tx_01032006.trc_SitFactor;
1639       ---------------------
1640       -- Annual Calculation
1641       ---------------------
1642       -- Annual Pension Fund Contribution
1643       py_za_tx_01032006.trc_AnnPenFnd :=
1644          py_za_tx_01032006.trc_PerPenFnd
1645        + py_za_tx_01032006.bal_ANN_PF_PTD;
1646       -- Annual Rfi Contribution
1647       py_za_tx_01032006.trc_AnnRfiCon :=
1648          py_za_tx_01032006.trc_PerRfiCon
1649        + py_za_tx_01032006.bal_TOT_RFI_AN_INC_PTD;
1650 
1651    --------------------------------
1652    -- Arrear Pension Fund Abatement
1653    --------------------------------
1654       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',118);
1655       -------------
1656       -- Excess ITD
1657       -------------
1658       py_za_tx_01032006.trc_PerArrPenFnd :=
1659          py_za_tx_01032006.bal_EXC_ARR_PEN_PTD;
1660       ----------
1661       -- Current
1662       ----------
1663       py_za_tx_01032006.trc_PerArrPenFnd :=
1664           py_za_tx_01032006.trc_PerArrPenFnd
1665       + ( py_za_tx_01032006.bal_ARR_PF_PTD
1666         * py_za_tx_01032006.trc_SitFactor
1667         );
1668       ---------
1669       -- Annual
1670       ---------
1671       py_za_tx_01032006.trc_AnnArrPenFnd :=
1672          py_za_tx_01032006.trc_PerArrPenFnd
1673        + py_za_tx_01032006.bal_ANN_ARR_PF_PTD;
1674 
1675    -------------------------------
1676    -- Retirement Annuity Abatement
1677    -------------------------------
1678       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',119);
1679 
1680       -------------
1681       -- Current RA
1682       -------------
1683       -- Calculate RA Contribution
1684       py_za_tx_01032006.trc_PerRetAnu :=
1685          py_za_tx_01032006.bal_CUR_RA_PTD
1686        * py_za_tx_01032006.trc_SitFactor;
1687       ---------------------
1688       -- Current NRFI Contr
1689       ---------------------
1690 
1691       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',120);
1692       py_za_tx_01032006.trc_PerNrfiCon :=
1693             py_za_tx_01032006.bal_TOT_NRFI_INC_PTD
1694           * py_za_tx_01032006.trc_SitFactor;
1695 
1696 
1697       ------------
1698       -- Annual RA
1699       ------------
1700       py_za_tx_01032006.trc_AnnRetAnu :=
1701          py_za_tx_01032006.trc_PerRetAnu
1702        + py_za_tx_01032006.bal_ANN_RA_PTD;
1703 
1704 
1705       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',121);
1706       py_za_tx_01032006.trc_AnnNrfiCon :=
1707             py_za_tx_01032006.trc_PerNrfiCon
1708           + py_za_tx_01032006.bal_TOT_NRFI_AN_INC_PTD;
1709 
1710 
1711    --------------------------------------
1712    -- Arrear Retirement Annuity Abatement
1713    --------------------------------------
1714       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',122);
1715       -------------
1716       -- Excess ITD
1717       -------------
1718       py_za_tx_01032006.trc_PerArrRetAnu :=
1719          py_za_tx_01032006.bal_EXC_ARR_RA_PTD;
1720       ----------
1721       -- Current
1722       ----------
1723       py_za_tx_01032006.trc_PerArrRetAnu :=
1724          py_za_tx_01032006.trc_PerArrRetAnu
1725        + ( py_za_tx_01032006.bal_ARR_RA_PTD
1726          * py_za_tx_01032006.trc_SitFactor
1727          );
1728       ---------
1729       -- Annual
1730       ---------
1731       py_za_tx_01032006.trc_AnnArrRetAnu :=
1732          py_za_tx_01032006.trc_PerArrRetAnu
1733        + py_za_tx_01032006.trc_AnnArrRetAnu
1734        + py_za_tx_01032006.bal_ANN_ARR_RA_PTD;
1735 
1736    ------------------------
1737    -- Medical Aid Abatement
1738    ------------------------
1739       -- If the person is not yet 65 this tax year
1740       IF l_65Year > l_ZA_TX_YR_END THEN
1741          ----------
1742          -- Current
1743          ----------
1744          py_za_tx_01032006.trc_PerMedAidAbm :=
1745             py_za_tx_01032006.bal_MED_CNTRB_ABM_PTD
1746           * py_za_tx_01032006.trc_SitFactor;
1747          ---------
1748          -- Annual
1749          ---------
1750          py_za_tx_01032006.trc_AnnMedAidAbm :=
1751             py_za_tx_01032006.trc_PerMedAidAbm
1752           + py_za_tx_01032006.bal_ANN_MED_CNTRB_ABM_PTD;
1753       ELSE
1754       -- if the person is over 65
1755          ----------
1756          -- Current
1757          ----------
1758          py_za_tx_01032006.trc_PerMedAidAbm :=
1759             py_za_tx_01032006.bal_MED_CONTR_PTD
1760           * py_za_tx_01032006.trc_SitFactor;
1761          ---------
1762          -- Annual
1763          ---------
1764          py_za_tx_01032006.trc_AnnMedAidAbm := py_za_tx_01032006.trc_PerMedAidAbm;
1765       END IF;
1766 
1767    ---------------------------
1768    -- Income Protection Policy
1769    ---------------------------
1770       ---------------------
1771       -- Period Calculation
1772       ---------------------
1773       -- Annualise Income Protection Policy Contributions
1774       py_za_tx_01032006.trc_PerIncProPolAbm :=
1775          py_za_tx_01032006.bal_EE_INC_PRO_POL_PTD
1776        * py_za_tx_01032006.trc_SitFactor;
1777 
1778       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',123);
1779 
1780       ---------------------
1781       -- Annual Calculation
1782       ---------------------
1783       -- Annual Income Protection Policy Contributions
1784       py_za_tx_01032006.trc_AnnIncProPolAbm :=
1785          py_za_tx_01032006.trc_PerIncProPolAbm
1786        + py_za_tx_01032006.bal_ANN_EE_INC_PRO_POL_PTD;
1787 
1788    -------------------------------------------------------------------------
1789    END IF;--                End CalcTyp Check
1790    -------------------------------------------------------------------------
1791 
1792 
1793 ----------------------------------------------------------------------------
1794 --                        CALCULATE THE ABATEMENTS                        --
1795 ----------------------------------------------------------------------------
1796    hr_utility.set_location('py_za_tx_utl_01032006.Abatements',124);
1797    -- Check the Calculation Type
1798    IF py_za_tx_01032006.trc_CalTyp = 'PstCalc' THEN
1799       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',125);
1800       -- Employee Tax Year Start and End Dates
1801       --
1802       l_EndDate  := py_za_tx_01032006.dbi_ZA_ASG_TX_YR_END;
1803 
1804       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',126);
1805 
1806       -- Global Values
1807       l_ZA_TX_YR_END        := l_EndDate;
1808       l_ZA_ARR_PF_AN_MX_ABT := GlbVal('ZA_ARREAR_PEN_AN_MAX_ABATE',l_EndDate);
1809       l_ZA_ARR_RA_AN_MX_ABT := GlbVal('ZA_ARREAR_RA_AN_MAX_ABATE' ,l_EndDate);
1810       l_ZA_PF_AN_MX_ABT     := GlbVal('ZA_PEN_AN_MAX_ABATE'       ,l_EndDate);
1811       l_ZA_PF_MX_PRC        := GlbVal('ZA_PEN_MAX_PERC'           ,l_EndDate);
1812       l_ZA_RA_AN_MX_ABT     := GlbVal('ZA_RA_AN_MAX_ABATE'        ,l_EndDate);
1813       l_ZA_RA_MX_PRC        := GlbVal('ZA_RA_MAX_PERC'            ,l_EndDate);
1814 
1815    ELSE
1816       hr_utility.set_location('py_za_tx_utl_01032006.Abatements',127);
1817       -- Set locals to current values
1818       l_ZA_TX_YR_END         := py_za_tx_01032006.dbi_ZA_TX_YR_END;
1819       l_ZA_ARR_PF_AN_MX_ABT  := py_za_tx_01032006.glb_ZA_ARR_PF_AN_MX_ABT;
1820       l_ZA_ARR_RA_AN_MX_ABT  := py_za_tx_01032006.glb_ZA_ARR_RA_AN_MX_ABT;
1821       l_ZA_PF_AN_MX_ABT      := py_za_tx_01032006.glb_ZA_PF_AN_MX_ABT;
1822       l_ZA_PF_MX_PRC         := py_za_tx_01032006.glb_ZA_PF_MX_PRC;
1823       l_ZA_RA_AN_MX_ABT      := py_za_tx_01032006.glb_ZA_RA_AN_MX_ABT;
1824       l_ZA_RA_MX_PRC         := py_za_tx_01032006.glb_ZA_RA_MX_PRC;
1825 
1826    END IF;
1827 
1828    WriteHrTrace('l_ZA_TX_YR_END:        '||to_char(l_ZA_TX_YR_END,'DD/MM/YYYY'));
1829    WriteHrTrace('l_ZA_ARR_PF_AN_MX_ABT: '||to_char(l_ZA_ARR_PF_AN_MX_ABT      ));
1830    WriteHrTrace('l_ZA_ARR_RA_AN_MX_ABT: '||to_char(l_ZA_ARR_RA_AN_MX_ABT      ));
1831    WriteHrTrace('l_ZA_PF_AN_MX_ABT:     '||to_char(l_ZA_PF_AN_MX_ABT          ));
1832    WriteHrTrace('l_ZA_PF_MX_PRC:        '||to_char(l_ZA_PF_MX_PRC             ));
1833    WriteHrTrace('l_ZA_RA_AN_MX_ABT:     '||to_char(l_ZA_RA_AN_MX_ABT          ));
1834    WriteHrTrace('l_ZA_RA_MX_PRC:        '||to_char(l_ZA_RA_MX_PRC             ));
1835 
1836 -------------------------
1837 -- Pension Fund Abatement
1838 -------------------------
1839    ---------------------
1840    -- Period Calculation
1841    ---------------------
1842    -- Calculate the Pension Fund Maximum
1843    py_za_tx_01032006.trc_PerPenFndMax :=
1844       GREATEST( l_ZA_PF_AN_MX_ABT
1845               , l_ZA_PF_MX_PRC / 100 * py_za_tx_01032006.trc_PerRfiCon
1846               );
1847    -- Calculate Period Pension Fund Abatement
1848    py_za_tx_01032006.trc_PerPenFndAbm :=
1849       LEAST( py_za_tx_01032006.trc_PerPenFnd
1850            , py_za_tx_01032006.trc_PerPenFndMax);
1851    ---------------------
1852    -- Annual Calculation
1853    ---------------------
1854    -- Calculate the Pension Fund Maximum
1855    py_za_tx_01032006.trc_AnnPenFndMax :=
1856       GREATEST( l_ZA_PF_AN_MX_ABT
1857               , l_ZA_PF_MX_PRC / 100 * py_za_tx_01032006.trc_AnnRfiCon
1858               );
1859 
1860    -- Calculate Annual Pension Fund Abatement
1861    py_za_tx_01032006.trc_AnnPenFndAbm :=
1862       LEAST( py_za_tx_01032006.trc_AnnPenFnd
1863            , py_za_tx_01032006.trc_AnnPenFndMax);
1864 --------------------------------
1865 -- Arrear Pension Fund Abatement
1866 --------------------------------
1867    ---------------------
1868    -- Period Calculation
1869    ---------------------
1870    py_za_tx_01032006.trc_PerArrPenFndAbm :=
1871       LEAST( py_za_tx_01032006.trc_PerArrPenFnd
1872            , l_ZA_ARR_PF_AN_MX_ABT
1873            );
1874    ---------------------
1875    -- Annual Calculation
1876    ---------------------
1877    py_za_tx_01032006.trc_AnnArrPenFndAbm :=
1878       LEAST( py_za_tx_01032006.trc_AnnArrPenFnd
1879            , l_ZA_ARR_PF_AN_MX_ABT
1880            );
1881 ---------------------------------
1882 -- Retirement Annnnuity Abatement
1883 ---------------------------------
1884    ---------------------
1885    -- Period Calculation
1886    ---------------------
1887    -- Calculate the Retirement Annuity Maximum
1888    py_za_tx_01032006.trc_PerRetAnuMax :=
1889       GREATEST( l_ZA_PF_AN_MX_ABT
1890               , l_ZA_RA_AN_MX_ABT - py_za_tx_01032006.trc_PerPenFndAbm
1891               , l_ZA_RA_MX_PRC / 100 * py_za_tx_01032006.trc_PerNrfiCon
1892               );
1893 
1894    -- Calculate Retirement Annuity Abatement
1895    py_za_tx_01032006.trc_PerRetAnuAbm :=
1896       LEAST( py_za_tx_01032006.trc_PerRetAnu
1897            , py_za_tx_01032006.trc_PerRetAnuMax);
1898    ---------------------
1899    -- Annual Calculation
1900    ---------------------
1901    py_za_tx_01032006.trc_AnnRetAnuMax :=
1902       GREATEST( l_ZA_PF_AN_MX_ABT
1903               , l_ZA_RA_AN_MX_ABT - py_za_tx_01032006.trc_AnnPenFndAbm
1904               , l_ZA_RA_MX_PRC / 100 * py_za_tx_01032006.trc_AnnNrfiCon
1905               );
1906 
1907    -- Calculate Retirement Annuity Abatement
1908    py_za_tx_01032006.trc_AnnRetAnuAbm :=
1909       LEAST( py_za_tx_01032006.trc_AnnRetAnu
1910            , py_za_tx_01032006.trc_AnnRetAnuMax);
1911 --------------------------------------
1912 -- Arrear Retirement Annuity Abatement
1913 --------------------------------------
1914    ---------------------
1915    -- Period Calculation
1916    ---------------------
1917    py_za_tx_01032006.trc_PerArrRetAnuAbm :=
1918       LEAST( py_za_tx_01032006.trc_PerArrRetAnu
1919            , l_ZA_ARR_RA_AN_MX_ABT);
1920    ---------------------
1921    -- Annual Calculation
1922    ---------------------
1923    py_za_tx_01032006.trc_AnnArrRetAnuAbm :=
1924       LEAST( py_za_tx_01032006.trc_AnnArrRetAnu
1925            , l_ZA_ARR_RA_AN_MX_ABT);
1926 
1927 -------------------
1928 -- TOTAL ABATEMENTS
1929 -------------------
1930    -- Period Total Abatement
1931    py_za_tx_01032006.trc_PerTotAbm := ( py_za_tx_01032006.trc_PerPenFndAbm
1932                                       + py_za_tx_01032006.trc_PerArrPenFndAbm
1933                                       + py_za_tx_01032006.trc_PerRetAnuAbm
1934                                       + py_za_tx_01032006.trc_PerArrRetAnuAbm
1935                                       + py_za_tx_01032006.trc_PerMedAidAbm
1936                                       + py_za_tx_01032006.trc_PerIncProPolAbm
1937                                       );
1938 
1939    -- Annual Total Abatements
1940    py_za_tx_01032006.trc_AnnTotAbm := ( py_za_tx_01032006.trc_AnnPenFndAbm
1941                                       + py_za_tx_01032006.trc_AnnArrPenFndAbm
1942                                       + py_za_tx_01032006.trc_AnnRetAnuAbm
1943                                       + py_za_tx_01032006.trc_AnnArrRetAnuAbm
1944                                       + py_za_tx_01032006.trc_AnnMedAidAbm
1945                                       + py_za_tx_01032006.trc_AnnIncProPolAbm
1946                                       );
1947 
1948 
1949    WriteHrTrace('py_za_tx_01032006.trc_PerTotAbm:                      '||to_char(py_za_tx_01032006.trc_PerTotAbm ));
1950    WriteHrTrace('   trc_PerTotAbm consists of:               __________');
1951    WriteHrTrace('   py_za_tx_01032006.trc_PerPenFndAbm:         '||to_char(py_za_tx_01032006.trc_PerPenFndAbm   ));
1952    WriteHrTrace('   py_za_tx_01032006.trc_PerArrPenFndAbm:      '||to_char(py_za_tx_01032006.trc_PerArrPenFndAbm));
1953    WriteHrTrace('   py_za_tx_01032006.trc_PerRetAnuAbm:         '||to_char(py_za_tx_01032006.trc_PerRetAnuAbm   ));
1954    WriteHrTrace('   py_za_tx_01032006.trc_PerArrRetAnuAbm:      '||to_char(py_za_tx_01032006.trc_PerArrRetAnuAbm));
1955    WriteHrTrace('   py_za_tx_01032006.trc_PerMedAidAbm:         '||to_char(py_za_tx_01032006.trc_PerMedAidAbm      ));
1956    WriteHrTrace('   py_za_tx_01032006.trc_PerIncProPolAbm:      '||to_char(py_za_tx_01032006.trc_PerIncProPolAbm));
1957    WriteHrTrace(' ');
1958    WriteHrTrace('py_za_tx_01032006.trc_AnnTotAbm:                      '||to_char(py_za_tx_01032006.trc_AnnTotAbm ));
1959    WriteHrTrace('   trc_AnnTotAbm consists of:               __________');
1960    WriteHrTrace('   py_za_tx_01032006.trc_AnnPenFndAbm:      '||to_char(py_za_tx_01032006.trc_AnnPenFndAbm   ));
1961    WriteHrTrace('   py_za_tx_01032006.trc_AnnArrPenFndAbm:   '||to_char(py_za_tx_01032006.trc_AnnArrPenFndAbm));
1962    WriteHrTrace('   py_za_tx_01032006.trc_AnnRetAnuAbm:      '||to_char(py_za_tx_01032006.trc_AnnRetAnuAbm   ));
1963    WriteHrTrace('   py_za_tx_01032006.trc_AnnArrRetAnuAbm:   '||to_char(py_za_tx_01032006.trc_AnnArrRetAnuAbm));
1964    WriteHrTrace('   py_za_tx_01032006.trc_AnnMedAidAbm:      '||to_char(py_za_tx_01032006.trc_AnnMedAidAbm      ));
1965    WriteHrTrace('   py_za_tx_01032006.trc_AnnIncProPolAbm:   '||to_char(py_za_tx_01032006.trc_AnnIncProPolAbm));
1966 
1967 EXCEPTION
1968    WHEN OTHERS THEN
1969       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
1970          py_za_tx_01032006.xpt_Msg := 'Abatements: '||TO_CHAR(SQLCODE);
1971       END IF;
1972       RAISE py_za_tx_01032006.xpt_E;
1973 END Abatements;
1974 -------------------------------------------------------------------------------
1975 -- ArrearExcess                                                              --
1976 -------------------------------------------------------------------------------
1977 PROCEDURE ArrearExcess AS
1978 -- Variables
1979    l_PfExcessAmt NUMBER;
1980    l_RaExcessAmt NUMBER;
1981 
1982 BEGIN
1983    hr_utility.set_location('py_za_tx_utl_01032006.ArrearExcess',1);
1984 -- Pension Excess
1985    l_PfExcessAmt := ( py_za_tx_01032006.bal_ARR_PF_YTD
1986                     + ( py_za_tx_01032006.bal_EXC_ARR_PEN_ITD
1987                       - py_za_tx_01032006.bal_EXC_ARR_PEN_YTD
1988                       )
1989                     ) - py_za_tx_01032006.glb_ZA_ARR_PF_AN_MX_ABT;
1990 
1991    IF l_PfExcessAmt > 0 THEN
1992       hr_utility.set_location('py_za_tx_utl_01032006.ArrearExcess',2);
1993       py_za_tx_01032006.trc_PfUpdFig := l_PfExcessAmt - py_za_tx_01032006.bal_EXC_ARR_PEN_ITD;
1994    ELSE
1995       hr_utility.set_location('py_za_tx_utl_01032006.ArrearExcess',3);
1996       py_za_tx_01032006.trc_PfUpdFig := -1*(py_za_tx_01032006.bal_EXC_ARR_PEN_ITD);
1997    END IF;
1998 
1999 -- Retirement Annuity
2000    l_RaExcessAmt := ( py_za_tx_01032006.bal_ARR_RA_YTD
2001                     + ( py_za_tx_01032006.bal_EXC_ARR_RA_ITD
2002                       - py_za_tx_01032006.bal_EXC_ARR_RA_YTD
2003                       )
2004                     ) - py_za_tx_01032006.glb_ZA_ARR_RA_AN_MX_ABT;
2005 
2006    IF l_RaExcessAmt > 0 THEN
2007       hr_utility.set_location('py_za_tx_utl_01032006.ArrearExcess',4);
2008       py_za_tx_01032006.trc_RaUpdFig := l_RaExcessAmt - py_za_tx_01032006.bal_EXC_ARR_RA_ITD;
2009    ELSE
2010       hr_utility.set_location('py_za_tx_utl_01032006.ArrearExcess',5);
2011       py_za_tx_01032006.trc_RaUpdFig := -1*(py_za_tx_01032006.bal_EXC_ARR_RA_ITD);
2012    END IF;
2013 
2014    hr_utility.set_location('py_za_tx_utl_01032006.ArrearExcess',6);
2015    WriteHrTrace('l_PfExcessAmt: '||to_char(l_PfExcessAmt));
2016    WriteHrTrace('l_RaExcessAmt: '||to_char(l_RaExcessAmt));
2017 
2018 EXCEPTION
2019    WHEN OTHERS THEN
2020       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
2021          py_za_tx_01032006.xpt_Msg := 'ArrearExcess: '||TO_CHAR(SQLCODE);
2022       END IF;
2023       RAISE py_za_tx_01032006.xpt_E;
2024 END ArrearExcess;
2025 -------------------------------------------------------------------------------
2026 -- GetTableValue                                                             --
2027 -------------------------------------------------------------------------------
2028 FUNCTION GetTableValue
2029    ( p_TableName     IN pay_user_tables.user_table_name%TYPE
2030    , p_ColumnName    IN pay_user_columns.user_column_name%TYPE
2031    , p_RowValue      IN NUMBER
2032    , p_EffectiveDate IN DATE
2033    ) RETURN VARCHAR2
2034 AS
2035 -- Variables
2036 --
2037    l_UserTableID pay_user_tables.user_table_id%TYPE;
2038    l_ColumnID    pay_user_columns.user_column_id%TYPE;
2039    l_RowID       pay_user_rows_f.user_row_id%TYPE;
2040    l_TableValue  pay_user_column_instances_f.value%TYPE;
2041 BEGIN
2042    hr_utility.set_location('py_za_tx_utl_01032006.GetTableValue',1);
2043    -- Get the user_table_id
2044    --
2045    select put.user_table_id
2046      INTO l_UserTableID
2047      from pay_user_tables put
2048     where upper(put.user_table_name) = upper(p_TableName)
2049       AND put.legislation_code       = 'ZA';
2050 
2051    hr_utility.set_location('py_za_tx_utl_01032006.GetTableValue',2);
2052    -- Get the user_column_id
2053    --
2054    select puc.user_column_id
2055      INTO l_ColumnID
2056      from pay_user_columns            puc
2057     where puc.user_table_id           = l_UserTableID
2058       AND puc.legislation_code        = 'ZA'
2059       and puc.business_group_id       is null
2060       AND upper(puc.user_column_name) = upper(p_ColumnName);
2061 
2062    hr_utility.set_location('py_za_tx_utl_01032006.GetTableValue',3);
2063    -- Get the user_row_id
2064    --
2065    select pur.user_row_id
2066      INTO l_RowID
2067      from pay_user_tables      put
2068         , pay_user_rows_f      pur
2069     where put.user_table_id    = l_UserTableID
2070       and pur.user_table_id    = put.user_table_id
2071       AND pur.row_high_range   IS NOT NULL
2072       AND p_EffectiveDate      BETWEEN pur.effective_start_date
2073                                    AND pur.effective_end_date
2074       AND pur.legislation_code = 'ZA'
2075       AND p_RowValue           BETWEEN decode ( put.user_key_units
2076                                               , 'N', pur.row_low_range_or_name
2077                                               , p_RowValue+1
2078                                               )
2079                                    AND decode ( put.user_key_units
2080                                               , 'N', pur.row_high_range
2081                                               , p_RowValue-1
2082                                               );
2083 
2084    hr_utility.set_location('py_za_tx_utl_01032006.GetTableValue',4);
2085    -- Get the value
2086    --
2087    SELECT pucif.value
2088      INTO l_TableValue
2089      FROM pay_user_column_instances_f pucif
2090     where pucif.user_column_id        = l_ColumnID
2091       and pucif.user_row_id           = l_RowID
2092       AND pucif.legislation_code      = 'ZA'
2093       and p_EffectiveDate             BETWEEN pucif.effective_start_date
2094                                           AND pucif.effective_end_date;
2095 
2096    hr_utility.set_location('py_za_tx_utl_01032006.GetTableValue',5);
2097    RETURN l_TableValue;
2098 EXCEPTION
2099    WHEN OTHERS THEN
2100       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
2101          py_za_tx_01032006.xpt_Msg := 'GetTableValue: '||TO_CHAR(SQLCODE);
2102       END IF;
2103       RAISE py_za_tx_01032006.xpt_E;
2104 END GetTableValue;
2105 -------------------------------------------------------------------------------
2106 -- TaxLiability                                                              --
2107 -------------------------------------------------------------------------------
2108 FUNCTION TaxLiability
2109    (p_Amt  IN NUMBER
2110    )RETURN  NUMBER
2111 AS
2112 --
2113 -- Variables
2114 --
2115    l_fixed          pay_user_column_instances_f.value%TYPE;
2116    l_limit          pay_user_column_instances_f.value%TYPE;
2117    l_percentage     pay_user_column_instances_f.value%TYPE;
2118    l_effective_date pay_payroll_actions.effective_date%TYPE;
2119    tax_liability    t_Balance;
2120    l_TxbAmt         t_Balance;
2121 --
2122 BEGIN
2123    hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',1);
2124    -------------------------------------------------------------------------------
2125    -- First Check for a Tax Override
2126    -------------------------------------------------------------------------------
2127    IF py_za_tx_01032006.trc_OvrTxCalc AND py_za_tx_01032006.trc_OvrTyp = 'P' THEN
2128       hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',2);
2129       tax_liability := (p_Amt * py_za_tx_01032006.trc_OvrPrc) / 100;
2130    -------------------------------------------------------------------------------
2131    -- D = Directive Percentage
2132    -- P = Private Director wth Directive Percentage
2133    -------------------------------------------------------------------------------
2134    ELSIF py_za_tx_01032006.dbi_TX_STA IN ('D','P') THEN
2135       hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',3);
2136       tax_liability := (p_Amt * py_za_tx_01032006.dbi_TX_DIR_VAL) / 100;
2137    -------------------------------------------------------------------------------
2138    -- E = Close Corporation
2139    -------------------------------------------------------------------------------
2140    ELSIF py_za_tx_01032006.dbi_TX_STA = 'E' THEN
2141       hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',4);
2142       tax_liability := (p_Amt * py_za_tx_01032006.glb_ZA_CC_TX_PRC) / 100;
2143    -------------------------------------------------------------------------------
2144    -- F = Temporary Worker/Student
2145    -------------------------------------------------------------------------------
2146    ELSIF py_za_tx_01032006.dbi_TX_STA = 'F' THEN
2147       hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',5);
2148       tax_liability := (p_Amt * py_za_tx_01032006.glb_ZA_TMP_TX_RTE) / 100;
2149    -------------------------------------------------------------------------------
2150    -- J = Personal Service Company
2151    -------------------------------------------------------------------------------
2152    ELSIF py_za_tx_01032006.dbi_TX_STA = 'J' THEN
2153       hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',6);
2154       tax_liability := (p_Amt * py_za_tx_01032006.glb_ZA_PER_SERV_COMP_PERC) / 100;
2155    -------------------------------------------------------------------------------
2156    -- K = Personal Service Trust
2157    -------------------------------------------------------------------------------
2158    ELSIF py_za_tx_01032006.dbi_TX_STA = 'K' THEN
2159       hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',7);
2160       tax_liability := (p_Amt * py_za_tx_01032006.glb_ZA_PER_SERV_TRST_PERC) / 100;
2161    -------------------------------------------------------------------------------
2162    -- L = Labour Broker
2163    -------------------------------------------------------------------------------
2164    ELSIF py_za_tx_01032006.dbi_TX_STA = 'L' THEN
2165       hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',8);
2166       tax_liability := (p_Amt * py_za_tx_01032006.glb_ZA_PER_SERV_COMP_PERC) / 100;
2167    -------------------------------------------------------------------------------
2168    -- A = Normal
2169    -- B = Provisional
2170    -- G = Seasonal Worker
2171    -- M = Private Director
2172    -------------------------------------------------------------------------------
2173    ELSIF py_za_tx_01032006.dbi_TX_STA IN ('A','B','G','M') THEN
2174       hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',9);
2175       -- Taxable Amount must be rounded off to two decimal places
2176       l_TxbAmt := round(p_Amt,2);
2177 
2178       -- effective date for the payroll_run
2179       l_effective_date := py_za_tx_01032006.dbi_PAY_PROC_PRD_DTE_PD;
2180 
2181       hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',10);
2182       l_fixed       := GetTableValue('ZA_TAX_TABLE','Fixed',l_TxbAmt,l_effective_date);
2183       l_limit       := GetTableValue('ZA_TAX_TABLE','Limit',l_TxbAmt,l_effective_date);
2184       l_percentage  := GetTableValue('ZA_TAX_TABLE','Percentage',l_TxbAmt,l_effective_date);
2185       tax_liability := (l_fixed + ((l_TxbAmt - l_limit) * (l_percentage / 100)));
2186       tax_liability := greatest(tax_liability -  py_za_tx_01032006.trc_Rebate,0);
2187       hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',11);
2188    -------------------------------------------------------------------------------
2189    -- Tax Status invalid for the call to TaxLiability
2190    -------------------------------------------------------------------------------
2191    ELSE
2192       hr_utility.set_location('py_za_tx_utl_01032006.TaxLiability',12);
2193       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
2194          py_za_tx_01032006.xpt_Msg := 'TaxLiability: Invalid Tax Status';
2195       END IF;
2196       RAISE py_za_tx_01032006.xpt_E;
2197    END IF;
2198 
2199    WriteHrTrace('l_fixed:       '||        l_fixed                      );
2200    WriteHrTrace('l_TxbAmt:      '||to_char(l_TxbAmt                    ));
2201    WriteHrTrace('l_limit:       '||        l_limit                      );
2202    WriteHrTrace('l_percentage:  '||        l_percentage                 );
2203    WriteHrTrace('trc_Rebate:    '||to_char(py_za_tx_01032006.trc_Rebate));
2204    WriteHrTrace('tax_liability: '||to_char(tax_liability               ));
2205 
2206    RETURN tax_liability;
2207 
2208 EXCEPTION
2209    WHEN OTHERS THEN
2210       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
2211          py_za_tx_01032006.xpt_Msg := 'TaxLiability: '||TO_CHAR(SQLCODE);
2212       END IF;
2213       RAISE py_za_tx_01032006.xpt_E;
2214 END TaxLiability;
2215 -------------------------------------------------------------------------------
2216 -- DeAnnualise                                                               --
2217 -------------------------------------------------------------------------------
2218 FUNCTION DeAnnualise
2219    (p_Liab IN NUMBER
2220    ,p_TxOnYtd IN NUMBER
2221    ,p_TxOnPtd IN NUMBER
2222    ) RETURN NUMBER
2223 AS
2224    l_LiabRoy1 t_balance;
2225    l_LiabRoy2 t_balance;
2226    l_LiabRoy3 t_balance;
2227    l_LiabRoy4 t_balance;
2228    l_LiabFp   t_balance;
2229 BEGIN
2230    hr_utility.set_location('py_za_tx_utl_01032006.DeAnnualise',1);
2231    -- 1
2232    l_LiabRoy1 := p_liab / py_za_tx_01032006.trc_PosFactor;
2233    -- 2
2234    l_LiabRoy2 := l_LiabRoy1 - p_TxOnYtd + p_TxOnPtd;
2235    -- 3
2236    l_LiabRoy3 := l_LiabRoy2 / py_za_tx_01032006.dbi_ZA_PAY_PRDS_LFT;
2237    -- 4
2238    l_LiabRoy4 := l_LiabRoy3 * py_za_tx_01032006.trc_PrdFactor;
2239    -- 5
2240    l_LiabFp   := l_LiabRoy4 - p_TxOnPtd;
2241    --
2242    hr_utility.set_location('py_za_tx_utl_01032006.DeAnnualise',2);
2243    --
2244    WriteHrTrace('p_liab:                               '||to_char(p_liab));
2245    WriteHrTrace('py_za_tx_01032006.trc_PosFactor:      '||to_char(py_za_tx_01032006.trc_PosFactor));
2246    WriteHrTrace('l_LiabRoy1:                           '||to_char(l_LiabRoy1));
2247    WriteHrTrace('p_TxOnYtd:                            '||to_char(p_TxOnYtd));
2248    WriteHrTrace('p_TxOnPtd:                            '||to_char(p_TxOnPtd));
2249    WriteHrTrace('l_LiabRoy2:                           '||to_char(l_LiabRoy2));
2250    WriteHrTrace('py_za_tx_01032006.dbi_ZA_PAY_PRDS_LFT:'||to_char(py_za_tx_01032006.dbi_ZA_PAY_PRDS_LFT));
2251    WriteHrTrace('l_LiabRoy3:                           '||to_char(l_LiabRoy3));
2252    WriteHrTrace('py_za_tx_01032006.trc_PrdFactor:      '||to_char(py_za_tx_01032006.trc_PrdFactor));
2253    WriteHrTrace('l_LiabRoy4:                           '||to_char(l_LiabRoy4));
2254    WriteHrTrace('l_LiabFp:                             '||to_char(l_LiabFp));
2255    --
2256    RETURN l_LiabFp;
2257 
2258 EXCEPTION
2259    WHEN OTHERS THEN
2260       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
2261          py_za_tx_01032006.xpt_Msg := 'DeAnnualise: '||TO_CHAR(SQLCODE);
2262       END IF;
2263       RAISE py_za_tx_01032006.xpt_E;
2264 END DeAnnualise;
2265 -------------------------------------------------------------------------------
2266 -- TrvAll                                                                    --
2267 -------------------------------------------------------------------------------
2268 PROCEDURE TrvAll AS
2269 -- Cursors
2270 --
2271   -- Global Effective End Dates
2272   CURSOR c_GlbEffDte
2273     (p_ty_sd DATE       -- start date
2274     ,p_ty_ed DATE       -- end date
2275     )
2276   IS
2277   SELECT effective_end_date
2278        , to_number(global_value) global_value
2279     FROM ff_globals_f
2280    WHERE effective_end_date < p_ty_ed
2281      AND effective_end_date > p_ty_sd
2282      AND global_name        = 'ZA_CAR_ALLOW_TAX_PERC';
2283 
2284 -- Variables
2285 --
2286   l_RfiBalID   pay_balance_types.balance_type_id%TYPE;
2287   l_StrtDate   DATE;
2288   l_EndDate    DATE;
2289   l_RfiYtd     t_balance DEFAULT 0;
2290   l_CurRfiYtd  t_balance DEFAULT 0;
2291   l_TotRfiYtd  t_balance DEFAULT 0;
2292   l_CurTxbRfi  t_balance DEFAULT 0;
2293   l_TotTxbRfi  t_balance DEFAULT 0;
2294   l_GlbVal     ff_globals_f.global_value%TYPE DEFAULT '0';
2295 
2296 BEGIN
2297    hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',1);
2298 -- Retrieve Balance Type ID's
2299 
2300    SELECT balance_type_id
2301      INTO l_RfiBalID
2302      FROM pay_balance_types
2303     WHERE legislation_code = 'ZA'
2304       AND balance_name     = 'ZATax Total Taxable Travel Allowance';
2305 
2306 -- Check Calc and setup correct values
2307 --
2308    IF py_za_tx_01032006.trc_CalTyp in ('DirCalc','NorCalc','SitCalc','YtdCalc') THEN
2309       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',3);
2310       -- Employee Tax Year Start and End Dates
2311       --
2312       l_StrtDate := GREATEST( py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE
2313                             , py_za_tx_01032006.dbi_ZA_TX_YR_STRT
2314                             );
2315       l_EndDate  := LEAST( py_za_tx_01032006.dbi_ZA_ACT_END_DTE
2316                          , py_za_tx_01032006.dbi_ZA_TX_YR_END
2317                          , py_za_tx_01032006.dbi_ZA_CUR_PRD_END_DTE
2318                          );
2319 
2320    ELSIF py_za_tx_01032006.trc_CalTyp = 'CalCalc' THEN
2321       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',4);
2322       -- Employee Tax Year Start and End Dates
2323       --
2324       l_StrtDate := to_date('01-01-'||to_char(py_za_tx_01032006.dbi_ZA_TX_YR_STRT,'YYYY')||''||'','DD-MM-YYYY');
2325       l_EndDate  := py_za_tx_01032006.dbi_ZA_TX_YR_STRT -1;
2326 
2327    ELSIF py_za_tx_01032006.trc_CalTyp = 'LteCalc' THEN
2328       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',5);
2329       -- Employee Tax Year Start and End Dates
2330       --
2331       l_StrtDate := py_za_tx_01032006.dbi_ZA_TX_YR_STRT;
2332       l_EndDate  := py_za_tx_01032006.dbi_ZA_CUR_PRD_END_DTE;
2333 
2334    ELSIF py_za_tx_01032006.trc_CalTyp = 'PstCalc' THEN
2335       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',6);
2336       -- Employee Tax Year Start and End Dates
2337       --
2338       l_StrtDate := py_za_tx_01032006.dbi_ZA_ASG_TX_YR_STRT;
2339       l_EndDate := py_za_tx_01032006.dbi_ZA_ASG_TX_YR_END;
2340    END IF;
2341 
2342    hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',7);
2343 
2344 -- Loop through cursor and for every end date calculate the balance
2345    FOR v_Date IN c_GlbEffDte
2346                  (l_StrtDate
2347                  ,l_EndDate
2348                  )
2349    LOOP
2350    -- Rfi Travel Allowance
2351    --
2352       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',11);
2353       -- Check Calc Type
2354       IF py_za_tx_01032006.trc_CalTyp in ('DirCalc','NorCalc','SitCalc','YtdCalc','LteCalc','PstCalc') THEN
2355          hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',12);
2356          -- Rfi Balance At That Date
2357            l_RfiYtd := py_za_bal.get_balance_value
2358                         ( py_za_tx_01032006.con_ASG_ID
2359                         , l_RfiBalID
2360                         , '_ASG_TAX_YTD'
2361                         , v_Date.effective_end_date
2362                         );
2363       ELSIF py_za_tx_01032006.trc_CalTyp = 'CalCalc' THEN
2364          hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',13);
2365          -- Rfi Balance At That Date
2366            l_RfiYtd := py_za_bal.get_balance_value
2367                         ( py_za_tx_01032006.con_ASG_ID
2368                         , l_RfiBalID
2369                         , '_ASG_CAL_YTD'
2370                         , v_Date.effective_end_date
2371                         );
2372       END IF;
2373 
2374       -- Take Off the Ytd value used already
2375       l_CurRfiYtd := l_RfiYtd - l_TotRfiYtd;
2376       -- Update TotYtd value
2377       l_TotRfiYtd := l_RfiYtd;
2378       -- Get the Taxable Travel Allowance at that date
2379       l_CurTxbRfi := l_CurRfiYtd * v_Date.global_value/100;
2380       -- Add this to the total
2381       l_TotTxbRfi := l_TotTxbRfi + l_CurTxbRfi;
2382 
2383    END LOOP;
2384 
2385    WriteHrTrace('l_CurRfiYtd:  '||to_char(l_CurRfiYtd));
2386    WriteHrTrace('l_TotRfiYtd:  '||to_char(l_TotRfiYtd));
2387    WriteHrTrace('l_CurTxbRfi:  '||to_char(l_CurTxbRfi));
2388    WriteHrTrace('l_TotTxbRfi:  '||to_char(l_TotTxbRfi));
2389 
2390 -- Calculate the current Taxable Travel Allowance Value
2391 -- add this to any calculated in the loop
2392 --
2393    hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',14);
2394    -- Check Calc TYPE
2395    IF py_za_tx_01032006.trc_CalTyp IN ('DirCalc','NorCalc','SitCalc','YtdCalc', 'LteCalc') THEN
2396       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',15);
2397       -- Balance Values
2398       l_RfiYtd  := py_za_tx_01032006.bal_TOT_TXB_TA_YTD;
2399       -- Global Value
2400       l_GlbVal  := py_za_tx_01032006.glb_ZA_TRV_ALL_TX_PRC;
2401 
2402    ELSIF py_za_tx_01032006.trc_CalTyp = 'PstCalc' THEN
2403       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',16);
2404       -- Balance Values
2405       l_RfiYtd := py_za_tx_01032006.bal_TOT_TXB_TA_PTD;
2406       -- Global Value
2407       SELECT TO_NUMBER(global_value)
2408         INTO l_GlbVal
2409         FROM ff_globals_f
2410        WHERE l_EndDate between effective_start_date
2411                            and effective_end_date
2412          AND global_name     = 'ZA_CAR_ALLOW_TAX_PERC';
2413 
2414       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',17);
2415 
2416    ELSIF py_za_tx_01032006.trc_CalTyp = 'CalCalc' THEN
2417       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',18);
2418       -- Balance Values
2419       l_RfiYtd  := py_za_tx_01032006.bal_TOT_TXB_TA_CYTD;
2420 
2421       -- Global Value
2422       SELECT TO_NUMBER(global_value)
2423         INTO l_GlbVal
2424         FROM ff_globals_f
2425        WHERE l_EndDate between effective_start_date
2426                            and effective_end_date
2427          AND global_name     = 'ZA_CAR_ALLOW_TAX_PERC';
2428 
2429       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',19);
2430 
2431    END IF;
2432 
2433    WriteHrTrace('l_RfiYtd:  '||to_char(l_RfiYtd));
2434    WriteHrTrace('l_GlbVal:  '||l_GlbVal);
2435 
2436 -- Rfi Travel Allowance
2437 --
2438    -- Take Off the Ytd value used already
2439    l_CurRfiYtd := l_RfiYtd - l_TotRfiYtd;
2440    -- Update TotYtd value
2441    l_TotRfiYtd := l_RfiYtd;
2442    -- Get the Taxable Travel Allowance at that date
2443    l_CurTxbRfi := l_CurRfiYtd * l_GlbVal/100;
2444    -- Add this to the total
2445    l_TotTxbRfi := l_TotTxbRfi + l_CurTxbRfi;
2446 
2447 -- Update Globals
2448 --
2449    -- Check Calc Type
2450    IF py_za_tx_01032006.trc_CalTyp IN ('DirCalc','NorCalc','SitCalc','YtdCalc', 'LteCalc') THEN
2451       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',20);
2452       py_za_tx_01032006.bal_TOT_TXB_TA_YTD  := l_TotTxbRfi;
2453    ELSIF py_za_tx_01032006.trc_CalTyp = 'PstCalc' THEN
2454       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',21);
2455       py_za_tx_01032006.bal_TOT_TXB_TA_PTD  := l_TotTxbRfi;
2456    ELSIF py_za_tx_01032006.trc_CalTyp = 'CalCalc' THEN
2457       hr_utility.set_location('py_za_tx_utl_01032006.TrvAll',22);
2458       py_za_tx_01032006.bal_TOT_TXB_TA_CYTD  := l_TotTxbRfi;
2459    END IF;
2460 
2461    WriteHrTrace('l_TotTxbRfi:  '||to_char(l_TotTxbRfi));
2462 
2463 EXCEPTION
2464    WHEN OTHERS THEN
2465       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
2466          py_za_tx_01032006.xpt_Msg := 'TrvAll: '||TO_CHAR(SQLCODE);
2467       END IF;
2468       RAISE py_za_tx_01032006.xpt_E;
2469 END TrvAll;
2470 -------------------------------------------------------------------------------
2471 -- ValidateTaxOns                                                            --
2472 -------------------------------------------------------------------------------
2473 PROCEDURE ValidateTaxOns(
2474    p_Rf IN BOOLEAN DEFAULT FALSE -- Refund Allowed Regardless
2475    )
2476 AS
2477 
2478 -- Type Declaration
2479 --
2480    TYPE r_Row IS RECORD(
2481      Ovrrde BOOLEAN
2482     ,Lib    NUMBER
2483     );
2484 
2485    TYPE t_Table IS TABLE OF r_Row
2486       INDEX BY BINARY_INTEGER;
2487 -- Variable Declaration
2488 --
2489    t_Liabilities t_Table;
2490 
2491    l_TotLib t_Balance; -- Total Liability
2492    l_TotNp  t_Balance; -- Total Net Pay
2493    l_RecVal t_Balance; -- Recovery Value
2494    l_NewLib t_Balance; -- New Liability
2495    i NUMBER; -- Counter
2496 
2497 BEGIN
2498    hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',1);
2499 -- Set up the Table
2500    t_Liabilities(1).Ovrrde := py_za_tx_01032006.trc_LibFpNIOvr;
2501    t_Liabilities(1).Lib    := py_za_tx_01032006.trc_LibFpNI;
2502 
2503    t_Liabilities(2).Ovrrde := py_za_tx_01032006.trc_LibFpFBOvr;
2504    t_Liabilities(2).Lib    := py_za_tx_01032006.trc_LibFpFB;
2505 
2506    t_Liabilities(3).Ovrrde := py_za_tx_01032006.trc_LibFpTAOvr;
2507    t_Liabilities(3).Lib    := py_za_tx_01032006.trc_LibFpTA;
2508 
2509    t_Liabilities(4).Ovrrde := py_za_tx_01032006.trc_LibFpBPOvr;
2510    t_Liabilities(4).Lib    := py_za_tx_01032006.trc_LibFpBP;
2511 
2512    t_Liabilities(5).Ovrrde := py_za_tx_01032006.trc_LibFpABOvr;
2513    t_Liabilities(5).Lib    := py_za_tx_01032006.trc_LibFpAB;
2514 
2515    t_Liabilities(6).Ovrrde := py_za_tx_01032006.trc_LibFpAPOvr;
2516    t_Liabilities(6).Lib    := py_za_tx_01032006.trc_LibFpAP;
2517 
2518    t_Liabilities(7).Ovrrde := py_za_tx_01032006.trc_LibFpPOOvr;
2519    t_Liabilities(7).Lib    := py_za_tx_01032006.trc_LibFpPO;
2520 
2521    IF py_za_tx_01032006.trc_LibFpNIOvr THEN
2522       WriteHrTrace('py_za_tx_01032006.trc_LibFpNIOvr: TRUE');
2523    ELSE
2524       WriteHrTrace('py_za_tx_01032006.trc_LibFpNIOvr: FALSE');
2525    END IF;
2526    WriteHrTrace('py_za_tx_01032006.trc_LibFpNI: '||to_char(py_za_tx_01032006.trc_LibFpNI));
2527    IF py_za_tx_01032006.trc_LibFpFBOvr THEN
2528       WriteHrTrace('py_za_tx_01032006.trc_LibFpFBOvr: TRUE');
2529    ELSE
2530       WriteHrTrace('py_za_tx_01032006.trc_LibFpFBOvr: FALSE');
2531    END IF;
2532    WriteHrTrace('py_za_tx_01032006.trc_LibFpFB: '||to_char(py_za_tx_01032006.trc_LibFpFB));
2533    IF py_za_tx_01032006.trc_LibFpTAOvr THEN
2534       WriteHrTrace('py_za_tx_01032006.trc_LibFpTAOvr: TRUE');
2535    ELSE
2536       WriteHrTrace('py_za_tx_01032006.trc_LibFpTAOvr: FALSE');
2537    END IF;
2538    WriteHrTrace('py_za_tx_01032006.trc_LibFpTA: '||to_char(py_za_tx_01032006.trc_LibFpTA));
2539    IF py_za_tx_01032006.trc_LibFpBPOvr THEN
2540       WriteHrTrace('py_za_tx_01032006.trc_LibFpBPOvr: TRUE');
2541    ELSE
2542       WriteHrTrace('py_za_tx_01032006.trc_LibFpBPOvr: FALSE');
2543    END IF;
2544    WriteHrTrace('py_za_tx_01032006.trc_LibFpBP: '||to_char(py_za_tx_01032006.trc_LibFpBP));
2545    IF py_za_tx_01032006.trc_LibFpABOvr THEN
2546       WriteHrTrace('py_za_tx_01032006.trc_LibFpABOvr: TRUE');
2547    ELSE
2548       WriteHrTrace('py_za_tx_01032006.trc_LibFpABOvr: FALSE');
2549    END IF;
2550    WriteHrTrace('py_za_tx_01032006.trc_LibFpAB: '||to_char(py_za_tx_01032006.trc_LibFpAB));
2551    IF py_za_tx_01032006.trc_LibFpAPOvr THEN
2552       WriteHrTrace('py_za_tx_01032006.trc_LibFpAPOvr: TRUE');
2553    ELSE
2554       WriteHrTrace('py_za_tx_01032006.trc_LibFpAPOvr: FALSE');
2555    END IF;
2556    WriteHrTrace('py_za_tx_01032006.trc_LibFpAP: '||to_char(py_za_tx_01032006.trc_LibFpAP));
2557    IF py_za_tx_01032006.trc_LibFpPOOvr THEN
2558       WriteHrTrace('py_za_tx_01032006.trc_LibFpPOOvr: TRUE');
2559    ELSE
2560       WriteHrTrace('py_za_tx_01032006.trc_LibFpPOOvr: FALSE');
2561    END IF;
2562    WriteHrTrace('py_za_tx_01032006.trc_LibFpPO: '||to_char(py_za_tx_01032006.trc_LibFpPO));
2563 
2564 -- Sum the Liabilities
2565    l_TotLib :=
2566    ( py_za_tx_01032006.trc_LibFpNI
2567    + py_za_tx_01032006.trc_LibFpFB
2568    + py_za_tx_01032006.trc_LibFpTA
2569    + py_za_tx_01032006.trc_LibFpBP
2570    + py_za_tx_01032006.trc_LibFpAB
2571    + py_za_tx_01032006.trc_LibFpAP
2572    + py_za_tx_01032006.trc_LibFpPO
2573    );
2574 
2575 -- Set Net Pay
2576    l_TotNp := py_za_tx_01032006.bal_NET_PAY_RUN;
2577    WriteHrTrace('l_TotNp: '||to_char(l_TotNp));
2578 -- Start Validation
2579 --
2580    IF l_TotLib = 0 THEN
2581       hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',2);
2582       NULL;
2583    ELSIF l_TotLib > 0 THEN
2584       hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',3);
2585       IF l_TotNp > 0 THEN
2586          hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',4);
2587          IF l_TotLib = l_TotNp THEN
2588             hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',5);
2589             NULL;
2590          ELSIF l_TotLib > l_TotNp THEN
2591             hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',6);
2592             l_RecVal := l_TotLib - l_TotNp;
2593             i:= 1;
2594 
2595             FOR i IN 1..7 LOOP
2596                IF t_Liabilities(i).Lib = 0 THEN
2597                   hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',7);
2598                   NULL;
2599                ELSIF t_Liabilities(i).Lib > 0 THEN
2600                   hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',8);
2601                   l_NewLib := t_Liabilities(i).Lib - LEAST(t_Liabilities(i).Lib,l_RecVal);
2602                   l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
2603                   t_Liabilities(i).Lib := l_NewLib;
2604                   py_za_tx_01032006.trc_LibWrn := 'Warning: Net Pay Balance not enough for Tax Recovery';
2605                ELSE -- lib < 0
2606                   hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',9);
2607                   NULL;
2608                END IF;
2609            END LOOP;
2610 
2611          ELSE -- l_TotLib > 0,l_TotNp > 0,l_TotLib < l_TotNp
2612             hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',10);
2613             NULL;
2614          END IF;
2615 
2616       ELSE -- l_TotLib > 0,l_TotNp <= 0
2617          hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',11);
2618          l_RecVal := l_TotLib;
2619          i := 1;
2620 
2621          FOR i IN 1..7 LOOP
2622             IF t_Liabilities(i).Lib > 0 THEN
2623                hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',12);
2624                l_NewLib := t_Liabilities(i).Lib - LEAST(t_Liabilities(i).Lib,l_RecVal);
2625                l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
2626                t_Liabilities(i).Lib := l_NewLib;
2627                py_za_tx_01032006.trc_LibWrn := 'Warning: Net Pay Balance not enough for Tax Recovery';
2628             END IF;
2629          END LOOP;
2630       END IF;
2631 
2632    ELSE -- l_TotLib < 0
2633       hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',13);
2634       IF p_Rf THEN
2635          hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',14);
2636          NULL;
2637       ELSE
2638          hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',15);
2639          l_RecVal := l_TotLib;
2640          i := 1;
2641          FOR i IN 1..7 LOOP
2642             IF t_Liabilities(i).Lib >= 0 THEN
2643                hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',16);
2644                NULL;
2645             ELSE -- l_lib < 0
2646                hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',17);
2647                -- Has the liability been Overridden?
2648                IF t_Liabilities(i).Ovrrde THEN
2649                   hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',18);
2650                   NULL;
2651                ELSE
2652                   hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',19);
2653                   l_NewLib := t_Liabilities(i).Lib - GREATEST(t_Liabilities(i).Lib,l_RecVal);
2654                   l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
2655                   t_Liabilities(i).Lib := l_NewLib;
2656                END IF;
2657            END IF;
2658          END LOOP;
2659       END IF;
2660    END IF;
2661 
2662    hr_utility.set_location('py_za_tx_utl_01032006.ValidateTaxOns',20);
2663 
2664    py_za_tx_01032006.trc_LibFpNI := t_Liabilities(1).Lib;
2665    py_za_tx_01032006.trc_LibFpFB := t_Liabilities(2).Lib;
2666    py_za_tx_01032006.trc_LibFpTA := t_Liabilities(3).Lib;
2667    py_za_tx_01032006.trc_LibFpBP := t_Liabilities(4).Lib;
2668    py_za_tx_01032006.trc_LibFpAB := t_Liabilities(5).Lib;
2669    py_za_tx_01032006.trc_LibFpAP := t_Liabilities(6).Lib;
2670    py_za_tx_01032006.trc_LibFpPO := t_Liabilities(7).Lib;
2671 
2672    WriteHrTrace('py_za_tx_01032006.trc_LibFpNI: '||to_char(py_za_tx_01032006.trc_LibFpNI));
2673    WriteHrTrace('py_za_tx_01032006.trc_LibFpFB: '||to_char(py_za_tx_01032006.trc_LibFpFB));
2674    WriteHrTrace('py_za_tx_01032006.trc_LibFpTA: '||to_char(py_za_tx_01032006.trc_LibFpTA));
2675    WriteHrTrace('py_za_tx_01032006.trc_LibFpBP: '||to_char(py_za_tx_01032006.trc_LibFpBP));
2676    WriteHrTrace('py_za_tx_01032006.trc_LibFpAB: '||to_char(py_za_tx_01032006.trc_LibFpAB));
2677    WriteHrTrace('py_za_tx_01032006.trc_LibFpAP: '||to_char(py_za_tx_01032006.trc_LibFpAP));
2678    WriteHrTrace('py_za_tx_01032006.trc_LibFpPO: '||to_char(py_za_tx_01032006.trc_LibFpPO));
2679 
2680 EXCEPTION
2681    WHEN OTHERS THEN
2682       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
2683          py_za_tx_01032006.xpt_Msg := 'ValidateTaxOns: '||TO_CHAR(SQLCODE);
2684       END IF;
2685       RAISE py_za_tx_01032006.xpt_E;
2686 END ValidateTaxOns;
2687 -------------------------------------------------------------------------------
2688 -- DaysWorked                                                                --
2689 --  Returns the number of days that the person has worked                    --
2690 --    This could be a negative number that would indicate                    --
2691 --    a LatePayePeriod                                                       --
2692 -------------------------------------------------------------------------------
2693 FUNCTION DaysWorked RETURN NUMBER
2694 AS
2695    l_DaysWorked NUMBER;
2696    l_EndDte     DATE;
2697    l_StrtDte    DATE;
2698 
2699 BEGIN
2700    IF py_za_tx_01032006.trc_OvrTxCalc AND py_za_tx_01032006.trc_OvrTyp = 'V' THEN
2701       hr_utility.set_location('py_za_tx_utl_01032006.DaysWorked',1);
2702       IF LatePayPeriod THEN
2703          hr_utility.set_location('py_za_tx_utl_01032006.DaysWorked',2);
2704          -- This will set the sitfactor = 1
2705          l_EndDte  := py_za_tx_01032006.dbi_ZA_TX_YR_END;
2706          l_StrtDte := py_za_tx_01032006.dbi_ZA_TX_YR_STRT;
2707       ELSE
2708          hr_utility.set_location('py_za_tx_utl_01032006.DaysWorked',3);
2709          l_EndDte  := LEAST(py_za_tx_01032006.dbi_ZA_ACT_END_DTE, py_za_tx_01032006.dbi_ZA_CUR_PRD_END_DTE);
2710          l_StrtDte := GREATEST(py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032006.dbi_ZA_TX_YR_STRT);
2711       END IF;
2712 
2713    ELSIF py_za_tx_01032006.trc_CalTyp = 'YtdCalc' THEN
2714       hr_utility.set_location('py_za_tx_utl_01032006.DaysWorked',4);
2715       l_EndDte  := py_za_tx_01032006.dbi_ZA_CUR_PRD_STRT_DTE - 1;
2716       l_StrtDte := GREATEST(py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032006.dbi_ZA_TX_YR_STRT);
2717 
2718    ELSIF py_za_tx_01032006.trc_CalTyp = 'CalCalc' THEN
2719       hr_utility.set_location('py_za_tx_utl_01032006.DaysWorked',5);
2720       l_EndDte  := py_za_tx_01032006.dbi_ZA_TX_YR_STRT - 1;
2721       l_StrtDte := GREATEST(py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE,
2722       to_date('01/01/'||to_char(to_number(to_char(py_za_tx_01032006.dbi_ZA_TX_YR_END,'YYYY'))-1),'DD/MM/YYYY'));
2723 
2724    ELSIF py_za_tx_01032006.trc_CalTyp = 'SitCalc' AND
2725        ( py_za_tx_01032006.dbi_ZA_ASG_TX_RTR_PRD = 'Y'
2726       OR py_za_tx_01032006.trc_OvrTxCalc
2727       OR py_za_tx_01032006.trc_NegPtd
2728        )THEN
2729       hr_utility.set_location('py_za_tx_utl_01032006.DaysWorked',6);
2730       l_EndDte  := LEAST(py_za_tx_01032006.dbi_ZA_ACT_END_DTE, py_za_tx_01032006.dbi_ZA_CUR_PRD_END_DTE);
2731       l_StrtDte := GREATEST(py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032006.dbi_ZA_TX_YR_STRT);
2732 
2733    ELSIF py_za_tx_01032006.trc_CalTyp = 'SitCalc' THEN
2734       hr_utility.set_location('py_za_tx_utl_01032006.DaysWorked',7);
2735       l_EndDte  := LEAST(py_za_tx_01032006.dbi_ZA_ACT_END_DTE, py_za_tx_01032006.dbi_ZA_TX_YR_END);
2736       l_StrtDte := GREATEST(py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032006.dbi_ZA_TX_YR_STRT);
2737 
2738    ELSIF py_za_tx_01032006.trc_CalTyp = 'PstCalc' THEN
2739       hr_utility.set_location('py_za_tx_utl_01032006.DaysWorked',8);
2740       l_EndDte := py_za_tx_01032006.dbi_ZA_ACT_END_DTE;
2741       l_StrtDte := py_za_tx_01032006.dbi_ZA_ASG_TX_YR_STRT;
2742 
2743       hr_utility.set_location('py_za_tx_utl_01032006.DaysWorked',9);
2744 
2745       l_StrtDte := GREATEST(py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE, l_StrtDte);
2746    END IF;
2747 
2748    l_DaysWorked := l_EndDte - l_StrtDte + 1;
2749 
2750    WriteHrTrace('l_EndDte:     '||to_char(l_EndDte,'DD/MM/YYYY'));
2751    WriteHrTrace('l_StrtDte:    '||to_char(l_StrtDte,'DD/MM/YYYY'));
2752    WriteHrTrace('l_DaysWorked: '||to_char(l_DaysWorked));
2753 
2754    RETURN l_DaysWorked;
2755 
2756 EXCEPTION
2757    WHEN OTHERS THEN
2758       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
2759          py_za_tx_01032006.xpt_Msg := 'DaysWorked: '||TO_CHAR(SQLCODE);
2760       END IF;
2761       RAISE py_za_tx_01032006.xpt_E;
2762 END DaysWorked;
2763 -------------------------------------------------------------------------------
2764 -- SitPaySplit                                                               --
2765 -------------------------------------------------------------------------------
2766 PROCEDURE SitPaySplit
2767 AS
2768    l_TxOnSitLim t_Balance;
2769    l_SitAblTx t_Balance;
2770 BEGIN
2771    hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',1);
2772 -- Directive Type Statuses
2773 --
2774    IF py_za_tx_01032006.dbi_TX_STA IN ('C','D','E','F','J','K','L','N','P') THEN
2775       hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',2);
2776    -- Check for SitePeriod
2777       IF SitePeriod THEN
2778          hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',3);
2779          py_za_tx_01032006.trc_PayeVal :=
2780             ( py_za_tx_01032006.bal_TAX_YTD
2781             + py_za_tx_01032006.trc_LibFpNI
2782             + py_za_tx_01032006.trc_LibFpFB
2783             + py_za_tx_01032006.trc_LibFpTA
2784             + py_za_tx_01032006.trc_LibFpBP
2785             + py_za_tx_01032006.trc_LibFpAB
2786             + py_za_tx_01032006.trc_LibFpAP
2787             + py_za_tx_01032006.trc_LibFpPO
2788             ) - py_za_tx_01032006.bal_PAYE_YTD;
2789          py_za_tx_01032006.trc_SiteVal := -1*py_za_tx_01032006.bal_SITE_YTD;
2790       ELSE
2791          hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',4);
2792          py_za_tx_01032006.trc_PayeVal := -1*py_za_tx_01032006.bal_PAYE_YTD;
2793          py_za_tx_01032006.trc_SiteVal := -1*py_za_tx_01032006.bal_SITE_YTD;
2794       END IF;
2795 -- Normal Type Statuses
2796 --
2797    ELSIF py_za_tx_01032006.dbi_TX_STA IN ('A','B') THEN
2798       IF (SitePeriod AND NOT PreErnPeriod) OR EmpTermPrePeriod THEN
2799          hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',5);
2800       -- Get the Tax Liability on the Site Limit
2801          l_TxOnSitLim := TaxLiability(p_Amt => py_za_tx_01032006.glb_ZA_SIT_LIM)/py_za_tx_01032006.trc_SitFactor;
2802       -- Get the Tax Amount Liable for SITE
2803          l_SitAblTx :=
2804          ( py_za_tx_01032006.bal_TX_ON_NI_YTD
2805          + py_za_tx_01032006.bal_TX_ON_FB_YTD
2806          + py_za_tx_01032006.bal_TX_ON_BP_YTD
2807          + py_za_tx_01032006.bal_TX_ON_AB_YTD
2808          + py_za_tx_01032006.bal_TX_ON_AP_YTD
2809          + py_za_tx_01032006.trc_LibFpNI
2810          + py_za_tx_01032006.trc_LibFpFB
2811          + py_za_tx_01032006.trc_LibFpBP
2812          + py_za_tx_01032006.trc_LibFpAB
2813          + py_za_tx_01032006.trc_LibFpAP
2814          );
2815       -- Check the Limit
2816          IF l_SitAblTx > l_TxOnSitLim THEN
2817             hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',6);
2818             py_za_tx_01032006.trc_SiteVal := l_TxOnSitLim - py_za_tx_01032006.bal_SITE_YTD;
2819             py_za_tx_01032006.trc_PayeVal := (
2820               ( py_za_tx_01032006.bal_TAX_YTD
2821               + py_za_tx_01032006.trc_LibFpNI
2822               + py_za_tx_01032006.trc_LibFpFB
2823               + py_za_tx_01032006.trc_LibFpBP
2824               + py_za_tx_01032006.trc_LibFpAB
2825               + py_za_tx_01032006.trc_LibFpAP
2826               + py_za_tx_01032006.trc_LibFpTA
2827               + py_za_tx_01032006.trc_LibFpPO
2828               ) - l_TxOnSitLim) - py_za_tx_01032006.bal_PAYE_YTD;
2829 
2830          ELSE
2831             hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',7);
2832             IF ( py_za_tx_01032006.bal_TX_ON_TA_YTD
2833                + py_za_tx_01032006.trc_LibFpTA
2834                + py_za_tx_01032006.bal_TX_ON_PO_YTD
2835                + py_za_tx_01032006.trc_LibFpPO
2836                ) <= 0 THEN
2837                hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',8);
2838                py_za_tx_01032006.trc_SiteVal := ( py_za_tx_01032006.bal_TAX_YTD
2839                               + py_za_tx_01032006.trc_LibFpNI
2840                               + py_za_tx_01032006.trc_LibFpFB
2841                               + py_za_tx_01032006.trc_LibFpBP
2842                               + py_za_tx_01032006.trc_LibFpAB
2843                               + py_za_tx_01032006.trc_LibFpAP
2844                               + py_za_tx_01032006.trc_LibFpTA
2845                               + py_za_tx_01032006.trc_LibFpPO) - py_za_tx_01032006.bal_SITE_YTD;
2846 
2847                py_za_tx_01032006.trc_PayeVal := -1*py_za_tx_01032006.bal_PAYE_YTD;
2848             ELSE
2849                hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',9);
2850                py_za_tx_01032006.trc_SiteVal := l_SitAblTx - py_za_tx_01032006.bal_SITE_YTD;
2851 
2852                py_za_tx_01032006.trc_PayeVal := (
2853                  ( py_za_tx_01032006.bal_TAX_YTD
2854                  + py_za_tx_01032006.trc_LibFpNI
2855                  + py_za_tx_01032006.trc_LibFpFB
2856                  + py_za_tx_01032006.trc_LibFpBP
2857                  + py_za_tx_01032006.trc_LibFpAB
2858                  + py_za_tx_01032006.trc_LibFpAP
2859                  + py_za_tx_01032006.trc_LibFpTA
2860                  + py_za_tx_01032006.trc_LibFpPO
2861                  ) - l_SitAblTx) - py_za_tx_01032006.bal_PAYE_YTD;
2862             END IF;
2863          END IF;
2864       ELSE
2865          hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',10);
2866          py_za_tx_01032006.trc_PayeVal := -1*py_za_tx_01032006.bal_PAYE_YTD;
2867          py_za_tx_01032006.trc_SiteVal := -1*py_za_tx_01032006.bal_SITE_YTD;
2868       END IF;
2869 -- Seasonal Worker Status
2870 --
2871    ELSIF py_za_tx_01032006.dbi_TX_STA = 'G' THEN
2872       hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',11);
2873    -- Get the SitFactor YTD
2874       py_za_tx_01032006.trc_SitFactor := py_za_tx_01032006.glb_ZA_WRK_DYS_PR_YR / py_za_tx_01032006.bal_TOT_SEA_WRK_DYS_WRK_YTD;
2875    -- Get the Tax Liability on the Site Limit
2876       l_TxOnSitLim := TaxLiability(p_Amt => py_za_tx_01032006.glb_ZA_SIT_LIM)/py_za_tx_01032006.trc_SitFactor;
2877    -- Get the Tax Amount Liable for SITE
2878       l_SitAblTx := ( py_za_tx_01032006.bal_TX_ON_NI_YTD
2879                     + py_za_tx_01032006.bal_TX_ON_FB_YTD
2880                     + py_za_tx_01032006.bal_TX_ON_AP_YTD
2881                     + py_za_tx_01032006.trc_LibFpNI
2882                     + py_za_tx_01032006.trc_LibFpFB
2883                     + py_za_tx_01032006.trc_LibFpAP
2884                     );
2885    -- Check the Limit
2886       IF l_SitAblTx > l_TxOnSitLim THEN
2887          hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',12);
2888          py_za_tx_01032006.trc_SiteVal := l_TxOnSitLim - py_za_tx_01032006.bal_SITE_YTD;
2889          py_za_tx_01032006.trc_PayeVal := ( (py_za_tx_01032006.bal_TX_ON_PO_YTD + py_za_tx_01032006.trc_LibFpPO)
2890                                           + (l_SitAblTx - l_TxOnSitLim)
2891                                           ) - py_za_tx_01032006.bal_PAYE_YTD;
2892       ELSE
2893          hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',13);
2894          py_za_tx_01032006.trc_SiteVal := l_SitAblTx - py_za_tx_01032006.bal_SITE_YTD;
2895          py_za_tx_01032006.trc_PayeVal := py_za_tx_01032006.bal_TX_ON_PO_YTD
2896                                         + py_za_tx_01032006.trc_LibFpPO
2897                                         - py_za_tx_01032006.bal_PAYE_YTD;
2898       END IF;
2899 -- Private Director
2900 --
2901    ELSIF py_za_tx_01032006.dbi_TX_STA = 'M' THEN
2902       IF (SitePeriod AND NOT PreErnPeriod) OR EmpTermPrePeriod THEN
2903          hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',14);
2904          py_za_tx_01032006.trc_PayeVal :=
2905             ( py_za_tx_01032006.bal_TAX_YTD
2906             + py_za_tx_01032006.trc_LibFpDR
2907             + py_za_tx_01032006.trc_LibFpNI
2908             + py_za_tx_01032006.trc_LibFpFB
2909             + py_za_tx_01032006.trc_LibFpTA
2910             + py_za_tx_01032006.trc_LibFpBP
2911             + py_za_tx_01032006.trc_LibFpAB
2912             + py_za_tx_01032006.trc_LibFpAP
2913             + py_za_tx_01032006.trc_LibFpPO
2914             ) - py_za_tx_01032006.bal_PAYE_YTD;
2915          py_za_tx_01032006.trc_SiteVal := -1*py_za_tx_01032006.bal_SITE_YTD;
2916       ELSE
2917          hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',15);
2918          py_za_tx_01032006.trc_PayeVal := -1*py_za_tx_01032006.bal_PAYE_YTD;
2919          py_za_tx_01032006.trc_SiteVal := -1*py_za_tx_01032006.bal_SITE_YTD;
2920       END IF;
2921 -- All Other Statuses
2922 --
2923    ELSE -- set the globals to zero
2924       hr_utility.set_location('py_za_tx_utl_01032006.SitPaySplit',16);
2925       py_za_tx_01032006.trc_PayeVal := 0 - py_za_tx_01032006.bal_PAYE_YTD;
2926       py_za_tx_01032006.trc_SiteVal := 0 - py_za_tx_01032006.bal_SITE_YTD;
2927    END IF;
2928 
2929 EXCEPTION
2930    WHEN OTHERS THEN
2931       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
2932          py_za_tx_01032006.xpt_Msg := 'SitPaySplit: '||TO_CHAR(SQLCODE);
2933       END IF;
2934       RAISE py_za_tx_01032006.xpt_E;
2935 END SitPaySplit;
2936 -------------------------------------------------------------------------------
2937 -- Trace Function                                                            --
2938 -------------------------------------------------------------------------------
2939 PROCEDURE Trace AS
2940 BEGIN
2941 
2942 /*DELETE FROM pay_za_tax_traces pztt
2943    WHERE pztt.prl_act_id not in (
2944    SELECT payroll_action_id
2945      from pay_payroll_actions)
2946 */
2947    INSERT INTO pay_za_tax_traces(
2948     ASG_ACT_ID
2949    ,ASG_ID
2950    ,PRL_ACT_ID
2951    ,PRL_ID
2952    ,TX_STA
2953    ,PER_AGE
2954    ,CalTyp
2955    ,TX_DIR_VAL
2956    ,It3Ind
2957    ,TxPercVal
2958    ,ASG_STRT_DTE
2959    ,ZA_ACT_END_DTE
2960    ,ZA_CUR_PRD_STRT_DTE
2961    ,ZA_CUR_PRD_END_DTE
2962    ,ZA_TX_YR_STRT
2963    ,ZA_TX_YR_END
2964    ,SES_DTE
2965    ,PrdFactor
2966    ,PosFactor
2967    ,SitFactor
2968    ,ZA_PAY_PRDS_LFT
2969    ,ZA_PAY_PRDS_PER_YR
2970    ,ZA_DYS_IN_YR
2971    ,SEA_WRK_DYS_WRK
2972    ,BP_TX_RCV
2973    ,TxbIncPtd
2974    ,BseErn
2975    ,TxbBseInc
2976    ,TotLibBse
2977    ,TxbIncYtd
2978    ,PerTxbInc
2979    ,PerPenFnd
2980    ,PerRfiCon
2981    ,PerRfiTxb
2982    ,PerPenFndMax
2983    ,PerPenFndAbm
2984    ,AnnTxbInc
2985    ,AnnPenFnd
2986    ,AnnRfiCon
2987    ,AnnRfiTxb
2988    ,AnnPenFndMax
2989    ,AnnPenFndAbm
2990    ,ArrPenFnd
2991    ,ArrPenFndAbm
2992    ,AnnArrPenFnd
2993    ,AnnArrPenFndAbm
2994    ,RetAnu
2995    ,NrfiCon
2996    ,RetAnuMax
2997    ,RetAnuAbm
2998    ,AnnRetAnu
2999    ,AnnNrfiCon
3000    ,AnnRetAnuMax
3001    ,AnnRetAnuAbm
3002    ,ArrRetAnu
3003    ,ArrRetAnuAbm
3004    ,AnnArrRetAnu
3005    ,AnnArrRetAnuAbm
3006    ,Rebate
3007    ,Threshold
3008    ,MedAidAbm
3009    ,PerTotAbm
3010    ,AnnTotAbm
3011    ,NorIncYtd
3012    ,NorIncPtd
3013    ,NorErn
3014    ,TxbNorInc
3015    ,LibFyNI
3016    ,TX_ON_NI_YTD
3017    ,TX_ON_NI_PTD
3018    ,LibFpNI
3019    ,FrnBenYtd
3020    ,FrnBenPtd
3021    ,FrnBenErn
3022    ,TxbFrnInc
3023    ,LibFyFB
3024    ,TX_ON_FB_YTD
3025    ,TX_ON_FB_PTD
3026    ,LibFpFB
3027    ,TrvAllYtd
3028    ,TrvAllPtd
3029    ,TrvAllErn
3030    ,TxbTrvInc
3031    ,LibFyTA
3032    ,TX_ON_TA_YTD
3033    ,TX_ON_TA_PTD
3034    ,LibFpTA
3035    ,BonProYtd
3036    ,BonProPtd
3037    ,BonProErn
3038    ,TxbBonProInc
3039    ,LibFyBP
3040    ,TX_ON_BP_YTD
3041    ,TX_ON_BP_PTD
3042    ,LibFpBP
3043    ,AnnBonYtd
3044    ,AnnBonErn
3045    ,TxbAnnBonInc
3046    ,LibFyAB
3047    ,TX_ON_AB_YTD
3048    ,TX_ON_AB_PTD
3049    ,LibFpAB
3050    ,AnnPymYtd
3051    ,AnnPymPtd
3052    ,AnnPymErn
3053    ,TxbAnnPymInc
3054    ,LibFyAP
3055    ,TX_ON_AP_YTD
3056    ,TX_ON_AP_PTD
3057    ,LibFpAP
3058    ,PblOffYtd
3059    ,PblOffPtd
3060    ,PblOffErn
3061    ,LibFyPO
3062    ,TX_ON_PO_YTD
3063    ,TX_ON_PO_PTD
3064    ,LibFpPO
3065    ,LibWrn
3066    ,PayValue
3067    ,PayeVal
3068    ,SiteVal
3069    )
3070    VALUES(
3071     py_za_tx_01032006.con_ASG_ACT_ID
3072    ,py_za_tx_01032006.con_ASG_ID
3073    ,py_za_tx_01032006.con_PRL_ACT_ID
3074    ,py_za_tx_01032006.con_PRL_ID
3075    ,py_za_tx_01032006.dbi_TX_STA
3076    ,py_za_tx_01032006.dbi_PER_AGE
3077    ,py_za_tx_01032006.trc_CalTyp
3078    ,py_za_tx_01032006.dbi_TX_DIR_VAL
3079    ,py_za_tx_01032006.trc_It3Ind
3080    ,py_za_tx_01032006.trc_TxPercVal
3081    ,py_za_tx_01032006.dbi_ZA_ACT_STRT_DTE
3082    ,py_za_tx_01032006.dbi_ZA_ACT_END_DTE
3083    ,py_za_tx_01032006.dbi_ZA_CUR_PRD_STRT_DTE
3084    ,py_za_tx_01032006.dbi_ZA_CUR_PRD_END_DTE
3085    ,py_za_tx_01032006.dbi_ZA_TX_YR_STRT
3086    ,py_za_tx_01032006.dbi_ZA_TX_YR_END
3087    ,py_za_tx_01032006.dbi_SES_DTE
3088    ,py_za_tx_01032006.trc_PrdFactor
3089    ,py_za_tx_01032006.trc_PosFactor
3090    ,py_za_tx_01032006.trc_SitFactor
3091    ,py_za_tx_01032006.dbi_ZA_PAY_PRDS_LFT
3092    ,py_za_tx_01032006.dbi_ZA_PAY_PRDS_PER_YR
3093    ,py_za_tx_01032006.dbi_ZA_DYS_IN_YR
3094    ,py_za_tx_01032006.dbi_SEA_WRK_DYS_WRK
3095    ,py_za_tx_01032006.dbi_BP_TX_RCV
3096    ,py_za_tx_01032006.trc_TxbIncPtd
3097    ,py_za_tx_01032006.trc_BseErn
3098    ,py_za_tx_01032006.trc_TxbBseInc
3099    ,py_za_tx_01032006.trc_TotLibBse
3100    ,py_za_tx_01032006.trc_TxbIncYtd
3101    ,py_za_tx_01032006.trc_PerTxbInc
3102    ,py_za_tx_01032006.trc_PerPenFnd
3103    ,py_za_tx_01032006.trc_PerRfiCon
3104    ,py_za_tx_01032006.trc_PerRfiTxb
3105    ,py_za_tx_01032006.trc_PerPenFndMax
3106    ,py_za_tx_01032006.trc_PerPenFndAbm
3107    ,py_za_tx_01032006.trc_AnnTxbInc
3108    ,py_za_tx_01032006.trc_AnnPenFnd
3109    ,py_za_tx_01032006.trc_AnnRfiCon
3110    ,py_za_tx_01032006.trc_AnnRfiTxb
3111    ,py_za_tx_01032006.trc_AnnPenFndMax
3112    ,py_za_tx_01032006.trc_AnnPenFndAbm
3113    ,py_za_tx_01032006.trc_PerArrPenFnd
3114    ,py_za_tx_01032006.trc_PerArrPenFndAbm
3115    ,py_za_tx_01032006.trc_AnnArrPenFnd
3116    ,py_za_tx_01032006.trc_AnnArrPenFndAbm
3117    ,py_za_tx_01032006.trc_PerRetAnu
3118    ,py_za_tx_01032006.trc_PerNrfiCon
3119    ,py_za_tx_01032006.trc_PerRetAnuMax
3120    ,py_za_tx_01032006.trc_PerRetAnuAbm
3121    ,py_za_tx_01032006.trc_AnnRetAnu
3122    ,py_za_tx_01032006.trc_AnnNrfiCon
3123    ,py_za_tx_01032006.trc_AnnRetAnuMax
3124    ,py_za_tx_01032006.trc_AnnRetAnuAbm
3125    ,py_za_tx_01032006.trc_PerArrRetAnu
3126    ,py_za_tx_01032006.trc_PerArrRetAnuAbm
3127    ,py_za_tx_01032006.trc_AnnArrRetAnu
3128    ,py_za_tx_01032006.trc_AnnArrRetAnuAbm
3129    ,py_za_tx_01032006.trc_Rebate
3130    ,py_za_tx_01032006.trc_Threshold
3131    ,py_za_tx_01032006.trc_PerMedAidAbm
3132    ,py_za_tx_01032006.trc_PerTotAbm
3133    ,py_za_tx_01032006.trc_AnnTotAbm
3134    ,py_za_tx_01032006.trc_NorIncYtd
3135    ,py_za_tx_01032006.trc_NorIncPtd
3136    ,py_za_tx_01032006.trc_NorErn
3137    ,py_za_tx_01032006.trc_TxbNorInc
3138    ,py_za_tx_01032006.trc_LibFyNI
3139    ,py_za_tx_01032006.bal_TX_ON_NI_YTD
3140    ,py_za_tx_01032006.bal_TX_ON_NI_PTD
3141    ,py_za_tx_01032006.trc_LibFpNI
3142    ,py_za_tx_01032006.trc_FrnBenYtd
3143    ,py_za_tx_01032006.trc_FrnBenPtd
3144    ,py_za_tx_01032006.trc_FrnBenErn
3145    ,py_za_tx_01032006.trc_TxbFrnInc
3146    ,py_za_tx_01032006.trc_LibFyFB
3147    ,py_za_tx_01032006.bal_TX_ON_FB_YTD
3148    ,py_za_tx_01032006.bal_TX_ON_FB_PTD
3149    ,py_za_tx_01032006.trc_LibFpFB
3150    ,py_za_tx_01032006.trc_TrvAllYtd
3151    ,py_za_tx_01032006.trc_TrvAllPtd
3152    ,py_za_tx_01032006.trc_TrvAllErn
3153    ,py_za_tx_01032006.trc_TxbTrvInc
3154    ,py_za_tx_01032006.trc_LibFyTA
3155    ,py_za_tx_01032006.bal_TX_ON_TA_YTD
3156    ,py_za_tx_01032006.bal_TX_ON_TA_PTD
3157    ,py_za_tx_01032006.trc_LibFpTA
3158    ,py_za_tx_01032006.trc_BonProYtd
3159    ,py_za_tx_01032006.trc_BonProPtd
3160    ,py_za_tx_01032006.trc_BonProErn
3161    ,py_za_tx_01032006.trc_TxbBonProInc
3162    ,py_za_tx_01032006.trc_LibFyBP
3163    ,py_za_tx_01032006.bal_TX_ON_BP_YTD
3164    ,py_za_tx_01032006.bal_TX_ON_BP_PTD
3165    ,py_za_tx_01032006.trc_LibFpBP
3166    ,py_za_tx_01032006.trc_AnnBonYtd
3167    ,py_za_tx_01032006.trc_AnnBonErn
3168    ,py_za_tx_01032006.trc_TxbAnnBonInc
3169    ,py_za_tx_01032006.trc_LibFyAB
3170    ,py_za_tx_01032006.bal_TX_ON_AB_YTD
3171    ,py_za_tx_01032006.bal_TX_ON_AB_PTD
3172    ,py_za_tx_01032006.trc_LibFpAB
3173    ,py_za_tx_01032006.trc_AnnPymYtd
3174    ,py_za_tx_01032006.trc_AnnPymPtd
3175    ,py_za_tx_01032006.trc_AnnPymErn
3176    ,py_za_tx_01032006.trc_TxbAnnPymInc
3177    ,py_za_tx_01032006.trc_LibFyAP
3178    ,py_za_tx_01032006.bal_TX_ON_AP_YTD
3179    ,py_za_tx_01032006.bal_TX_ON_AP_PTD
3180    ,py_za_tx_01032006.trc_LibFpAP
3181    ,py_za_tx_01032006.trc_PblOffYtd
3182    ,py_za_tx_01032006.trc_PblOffPtd
3183    ,py_za_tx_01032006.trc_PblOffErn
3184    ,py_za_tx_01032006.trc_LibFyPO
3185    ,py_za_tx_01032006.bal_TX_ON_PO_YTD
3186    ,py_za_tx_01032006.bal_TX_ON_PO_PTD
3187    ,py_za_tx_01032006.trc_LibFpPO
3188    ,py_za_tx_01032006.trc_LibWrn
3189    ,py_za_tx_01032006.trc_PayValSD
3190    ,py_za_tx_01032006.trc_PayeVal
3191    ,py_za_tx_01032006.trc_SiteVal);
3192 
3193 EXCEPTION
3194    WHEN OTHERS THEN
3195       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
3196          py_za_tx_01032006.xpt_Msg := 'Trace: '||TO_CHAR(SQLCODE);
3197       END IF;
3198       RAISE py_za_tx_01032006.xpt_E;
3199 END Trace;
3200 -------------------------------------------------------------------------------
3201 -- ClearGlobals                                                              --
3202 -------------------------------------------------------------------------------
3203 PROCEDURE ClearGlobals AS
3204 
3205 BEGIN
3206    hr_utility.set_location('py_za_tx_utl_01032006.ClearGlobals',1);
3207    -- Calculation Type
3208    py_za_tx_01032006.trc_CalTyp               := 'Unknown';
3209    -- Factors
3210    py_za_tx_01032006.trc_TxbIncPtd            := 0;
3211    py_za_tx_01032006.trc_PrdFactor            := 0;
3212    py_za_tx_01032006.trc_PosFactor            := 0;
3213    py_za_tx_01032006.trc_SitFactor            := 1;
3214    -- Deemed Remuneration
3215    py_za_tx_01032006.trc_DmdRmnRun            := 0;
3216    py_za_tx_01032006.trc_TxbDmdRmn            := 0;
3217    py_za_tx_01032006.trc_TotLibDR             := 0;
3218    py_za_tx_01032006.trc_LibFyDR              := 0;
3219    py_za_tx_01032006.trc_LibFpDR              := 0;
3220    -- Base Income
3221    py_za_tx_01032006.trc_BseErn               := 0;
3222    py_za_tx_01032006.trc_TxbBseInc            := 0;
3223    py_za_tx_01032006.trc_TotLibBse            := 0;
3224    -- Period Pension Fund
3225    py_za_tx_01032006.trc_TxbIncYtd            := 0;
3226    py_za_tx_01032006.trc_PerTxbInc            := 0;
3227    py_za_tx_01032006.trc_PerPenFnd            := 0;
3228    py_za_tx_01032006.trc_PerRfiCon            := 0;
3229    py_za_tx_01032006.trc_PerRfiTxb            := 0;
3230    py_za_tx_01032006.trc_PerPenFndMax         := 0;
3231    py_za_tx_01032006.trc_PerPenFndAbm         := 0;
3232    -- Annual Pension Fund
3233    py_za_tx_01032006.trc_AnnTxbInc            := 0;
3234    py_za_tx_01032006.trc_AnnPenFnd            := 0;
3235    py_za_tx_01032006.trc_AnnRfiCon            := 0;
3236    py_za_tx_01032006.trc_AnnRfiTxb            := 0;
3237    py_za_tx_01032006.trc_AnnPenFndMax         := 0;
3238    py_za_tx_01032006.trc_AnnPenFndAbm         := 0;
3239    -- Period Arrear Pension
3240    py_za_tx_01032006.trc_PerArrPenFnd         := 0;
3241    py_za_tx_01032006.trc_PerArrPenFndAbm      := 0;
3242    -- Annual Arrear Pension
3243    py_za_tx_01032006.trc_AnnArrPenFnd         := 0;
3244    py_za_tx_01032006.trc_AnnArrPenFndAbm      := 0;
3245    -- Arrear Excess Update Value
3246    py_za_tx_01032006.trc_PfUpdFig             := 0;
3247    -- Period Retirement Annuity
3248    py_za_tx_01032006.trc_PerRetAnu            := 0;
3249    py_za_tx_01032006.trc_PerNrfiCon           := 0;
3250    py_za_tx_01032006.trc_PerRetAnuMax         := 0;
3251    py_za_tx_01032006.trc_PerRetAnuAbm         := 0;
3252    -- Annual Retirement Annuity
3253    py_za_tx_01032006.trc_AnnRetAnu            := 0;
3254    py_za_tx_01032006.trc_AnnNrfiCon           := 0;
3255    py_za_tx_01032006.trc_AnnRetAnuMax         := 0;
3256    py_za_tx_01032006.trc_AnnRetAnuAbm         := 0;
3257    -- Period Arrear Retirement Annuity
3258    py_za_tx_01032006.trc_PerArrRetAnu         := 0;
3259    py_za_tx_01032006.trc_PerArrRetAnuAbm      := 0;
3260    -- Annual Arrear Retirement Annuity
3261    py_za_tx_01032006.trc_AnnArrRetAnu         := 0;
3262    py_za_tx_01032006.trc_AnnArrRetAnuAbm      := 0;
3263    -- Arrear Excess Update Value
3264    py_za_tx_01032006.trc_RaUpdFig             := 0;
3265    -- Medical Aid Abatement
3266    py_za_tx_01032006.trc_PerMedAidAbm         := 0;
3267    py_za_tx_01032006.trc_AnnMedAidAbm         := 0;
3268    -- Rebates Thresholds
3269    py_za_tx_01032006.trc_Rebate               := 0;
3270    py_za_tx_01032006.trc_Threshold            := 0;
3271    -- Abatement Totals
3272    py_za_tx_01032006.trc_PerTotAbm            := 0;
3273    py_za_tx_01032006.trc_AnnTotAbm            := 0;
3274    -- Normal Income
3275    py_za_tx_01032006.trc_NorIncYtd            := 0;
3276    py_za_tx_01032006.trc_NorIncPtd            := 0;
3277    py_za_tx_01032006.trc_NorErn               := 0;
3278    py_za_tx_01032006.trc_TxbNorInc            := 0;
3279    py_za_tx_01032006.trc_TotLibNI             := 0;
3280    py_za_tx_01032006.trc_LibFyNI              := 0;
3281    py_za_tx_01032006.trc_LibFpNI              := 0;
3282    -- Fringe Benefits
3283    py_za_tx_01032006.trc_FrnBenYtd            := 0;
3284    py_za_tx_01032006.trc_FrnBenPtd            := 0;
3285    py_za_tx_01032006.trc_FrnBenErn            := 0;
3286    py_za_tx_01032006.trc_TxbFrnInc            := 0;
3287    py_za_tx_01032006.trc_TotLibFB             := 0;
3288    py_za_tx_01032006.trc_LibFyFB              := 0;
3289    py_za_tx_01032006.trc_LibFpFB              := 0;
3290    -- Travel Allowance
3291    py_za_tx_01032006.trc_TrvAllYtd            := 0;
3292    py_za_tx_01032006.trc_TrvAllPtd            := 0;
3293    py_za_tx_01032006.trc_TrvAllErn            := 0;
3294    py_za_tx_01032006.trc_TxbTrvInc            := 0;
3295    py_za_tx_01032006.trc_TotLibTA             := 0;
3296    py_za_tx_01032006.trc_LibFyTA              := 0;
3297    py_za_tx_01032006.trc_LibFpTA              := 0;
3298    -- Bonus Provision
3299    py_za_tx_01032006.trc_BonProYtd            := 0;
3300    py_za_tx_01032006.trc_BonProPtd            := 0;
3301    py_za_tx_01032006.trc_BonProErn            := 0;
3302    py_za_tx_01032006.trc_TxbBonProInc         := 0;
3303    py_za_tx_01032006.trc_TotLibBP             := 0;
3304    py_za_tx_01032006.trc_LibFyBP              := 0;
3305    py_za_tx_01032006.trc_LibFpBP              := 0;
3306    -- Annual Bonus
3307    py_za_tx_01032006.trc_AnnBonYtd            := 0;
3308    py_za_tx_01032006.trc_AnnBonPtd            := 0;
3309    py_za_tx_01032006.trc_AnnBonErn            := 0;
3310    py_za_tx_01032006.trc_TxbAnnBonInc         := 0;
3311    py_za_tx_01032006.trc_TotLibAB             := 0;
3312    py_za_tx_01032006.trc_LibFyAB              := 0;
3313    py_za_tx_01032006.trc_LibFpAB              := 0;
3314    -- Annual Payments
3315    py_za_tx_01032006.trc_AnnPymYtd            := 0;
3316    py_za_tx_01032006.trc_AnnPymPtd            := 0;
3317    py_za_tx_01032006.trc_AnnPymErn            := 0;
3318    py_za_tx_01032006.trc_TxbAnnPymInc         := 0;
3319    py_za_tx_01032006.trc_TotLibAP             := 0;
3320    py_za_tx_01032006.trc_LibFyAP              := 0;
3321    py_za_tx_01032006.trc_LibFpAP              := 0;
3322    -- Pubilc Office Allowance
3323    py_za_tx_01032006.trc_PblOffYtd            := 0;
3324    py_za_tx_01032006.trc_PblOffPtd            := 0;
3325    py_za_tx_01032006.trc_PblOffErn            := 0;
3326    py_za_tx_01032006.trc_LibFyPO              := 0;
3327    py_za_tx_01032006.trc_LibFpPO              := 0;
3328    -- Messages
3329    py_za_tx_01032006.trc_LibWrn               := ' ';
3330 
3331    -- Statutory Deduction Value
3332    py_za_tx_01032006.trc_PayValSD             := 0;
3333    -- Employer Contribution Value
3334    py_za_tx_01032006.trc_PayValEC             := 0;
3335    -- PAYE and SITE Values
3336    py_za_tx_01032006.trc_PayeVal              := 0;
3337    py_za_tx_01032006.trc_SiteVal              := 0;
3338    -- IT3A Threshold Indicator
3339    py_za_tx_01032006.trc_It3Ind               := 0;
3340    -- Tax Percentage Value On trace
3341    py_za_tx_01032006.trc_TxPercVal            := 0;
3342    -- Total Taxable Income Update Figure
3343    py_za_tx_01032006.trc_OUpdFig              := 0;
3344 
3345    -- Net Taxable Income Update Figure
3346    py_za_tx_01032006.trc_NtiUpdFig            := 0;
3347 
3348    -- ValidateTaxOns Override Globals
3349    py_za_tx_01032006.trc_LibFpDROvr           := FALSE;
3350    py_za_tx_01032006.trc_LibFpNIOvr           := FALSE;
3351    py_za_tx_01032006.trc_LibFpFBOvr           := FALSE;
3352    py_za_tx_01032006.trc_LibFpTAOvr           := FALSE;
3353    py_za_tx_01032006.trc_LibFpBPOvr           := FALSE;
3354    py_za_tx_01032006.trc_LibFpABOvr           := FALSE;
3355    py_za_tx_01032006.trc_LibFpAPOvr           := FALSE;
3356    py_za_tx_01032006.trc_LibFpPOOvr           := FALSE;
3357 
3358    -- Global Exception Message
3359    py_za_tx_01032006.xpt_Msg                  := 'No Error';
3360 
3361    -- Override Globals
3362    py_za_tx_01032006.trc_OvrTxCalc            := FALSE;
3363    py_za_tx_01032006.trc_OvrTyp               := 'V';
3364    py_za_tx_01032006.trc_OvrPrc               := 0;
3365    py_za_tx_01032006.trc_OvrWrn               := ' ';
3366 
3367    -- Negative Ptd Global
3368    py_za_tx_01032006.trc_NegPtd               := FALSE;
3369 
3370 EXCEPTION
3371    WHEN OTHERS THEN
3372       IF py_za_tx_01032006.xpt_Msg = 'No Error' THEN
3373          py_za_tx_01032006.xpt_Msg := 'ClearGlobals: '||TO_CHAR(SQLCODE);
3374       END IF;
3375       RAISE py_za_tx_01032006.xpt_E;
3376 END ClearGlobals;
3377 
3378 
3379 
3380 END py_za_tx_utl_01032006;
3381