DBA Data[Home] [Help]

PACKAGE BODY: APPS.PY_ZA_TX_UTL_01032009

Source


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