DBA Data[Home] [Help]

PACKAGE BODY: APPS.PY_ZA_TX_UTL_01032013

Source


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