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