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