DBA Data[Home] [Help]

PACKAGE BODY: APPS.PY_ZA_TX_UTL_01032002

Source


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