DBA Data[Home] [Help]

PACKAGE BODY: APPS.PY_ZA_TX_UTL_01032011

Source


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