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