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