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