DBA Data[Home] [Help]

PACKAGE BODY: APPS.PY_ZA_TX_UTL_01082000

Source


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