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