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