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