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