DBA Data[Home] [Help]

PACKAGE BODY: APPS.PY_ZA_TX_UTL_01032007

Source


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