[Home] [Help]
PACKAGE BODY: APPS.PY_ZA_TX_UTL_01032000
Source
1 PACKAGE BODY py_za_tx_utl_01032000 AS
2 /* $Header: pyzatu01.pkb 120.2 2005/06/28 00:12:22 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_01032000.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 LatePayPeriod
23 Boolean function returns true if the current period
24 is a Late Payment Period, i.e. a payment over the
25 tax year boundary.
26 LstPeriod
27 Boolean function returns true if current period is the
28 last period in the current tax year.
29 EmpTermInPeriod
30 Boolean function returns true if the assignment was terminated
31 in the current pay period.
32 EmpTermPrePeiod
33 Boolean function returns true if the assignment was terminated
34 before the current period.
35 PreErnPeriod
36 Boolean function returns true if this run is deemed to be
37 a Pre-Earnings Calculation Run.
38 For a complete description see the tax module design document.
39 SitePeriod
40 Boolean function returns true if it is a tax site period.
41 For a complete description see the tax module design document.
42 Annualise
43 Returns annualised value to the calling object.
44 For a complete description see the tax module design document.
45 TaxLiability
46 Returns the gross tax liability on passed value.
47 For a complete description see the tax module design document.
48 DeAnnualise
49 Returns the de-annualised value to the calling object.
50 For a complete description see the tax module design document.
51 DaysWorked
52 Returns the number of days worked for the assignment.
53 For a complete description see the tax module design document.
54
55 PUBLIC PROCEDURES
56 StartHrTrace
57 Sets package global that determines if extra trace information
58 will be written to file - hr_utility
59 StopHrTrace
60 Stops trace information from being written to file
61 WriteHrTrace
62 Writes extra trace information to file if global
63 has been set
64 PeriodFactor
65 Calculates the period factor for the assignment.
66 For a complete description see the tax module design document.
67 PossiblePeriodsFactor
68 Calculates the possible period factor for the assignment.
69 For a complete description see the tax module design document.
70 SetRebates
71 Calculate tax Rebate and Threshold values.
72 For a complete description see the tax module design document.
73 Abatements
74 Calculates all necessary abatements.
75 For a complete description see the tax module design document.
76 ArrearExcess
77 Calculates the arrear excess figure to 'effectively' update the
78 Asg_Itd dimension of the arrear excess pension and retirement
79 annuity balances. Will only fire on siteperiod.
80 TrvAll
81 Calculates the taxable travel allowance over a period of
82 time based on the effective global values at the time.
83 For a complete description see the tax module design document.
84 NpVal
85 Validates the calculated category liabilities.
86 For a complete description see the tax module design document.
87 SitPaySplit
88 Calculates the site paye split of tax liabilities.
89 For a complete description see the tax module design document.
90 Trace
91 Traces the tax calculation.
92 For a complete description see the tax module design document.
93 ClearGlobals
94 Clears any set package globals.
95 For a complete description see the tax module design document.
96
97 PRIVATE FUNCTIONS
98 GetTableValue
99 Returns the value from a user table date effectively
100
101 PRIVATE PROCEDURES
102 <none>
103
104 NOTES
105 .
106
107 MODIFICATION HISTORY
108 Person Date Version Comments
109 --------- ---------------- ------- -----------------------------------
110 A. Mahanty 14/04/2005 115.4 Bug 3491357 BRA Enhancement.
111 Balance value retrieval modified
112 L.Kloppers 31/01/2001 115.0 Changed ptp.attribute1 to
113 ptp.prd_information1
114 J.N. Louw 13/12/2000 110.3 Updated SitPaySplit to fire for
115 Latepayperiod
116 J.N. Louw 28/09/2000 110.2 Added SetRebates procedure
117 Modified Abatements procedure
118 J.N. Louw 28/09/2000 110.1 Fixed NpVal Bug
119 J.N. Louw 27/09/2000 110.0 First Created
120 */
121
122 /* PACKAGE BODY */
123
124 -- StartHrTrace
125 -- Wrapper for hr_utility.trace_on
126 PROCEDURE StartHrTrace AS
127 BEGIN
128 IF g_HrTraceEnabled THEN
129 hr_utility.trace_on(null,g_HrTracePipeName);
130 END IF;
131 END StartHrTrace;
132
133 -- StopHrTrace
134 -- Wrapper for hr_utility.trace_off
135 PROCEDURE StopHrTrace AS
136 BEGIN
137 IF g_HrTraceEnabled THEN
138 hr_utility.trace_off;
139 END IF;
140 END StopHrTrace;
141
142 -- WriteHrTrace
143 -- Wrapper for hr_utility.trace
144 PROCEDURE WriteHrTrace(
145 p_Buffer VARCHAR2
146 )
147 AS
148 BEGIN
149 IF g_HrTraceEnabled THEN
150 -- Write the Line
151 hr_utility.trace(p_Buffer);
152 END IF;
153 END WriteHrTrace;
154
155
156
157 -- Tax Utility Functions
158 --
159
160 FUNCTION GlbVal
161 (p_GlbNme ff_globals_f.global_name%TYPE
162 ,p_EffDte DATE
163 ) RETURN ff_globals_f.global_value%TYPE
164 AS
165 -- Variables
166 l_GlbVal NUMBER(15,2);
167 BEGIN
168 hr_utility.set_location('py_za_tx_utl_01032000.GlbVal',1);
169 WriteHrTrace('p_GlbNme :'||p_GlbNme);
170 WriteHrTrace('p_EffDte :'||to_char(p_EffDte,'DD/MM/YYYY'));
171 --
172 SELECT TO_NUMBER(global_value)
173 INTO l_GlbVal
174 FROM ff_globals_f
175 WHERE p_EffDte between effective_start_date and effective_end_date
176 AND global_name = p_GlbNme;
177
178 hr_utility.set_location('py_za_tx_utl_01032000.GlbVal',2);
179 RETURN l_GlbVal;
180
181 EXCEPTION
182 WHEN OTHERS THEN
183 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
184 py_za_tx_01032000.xpt_Msg := 'GlbVal: '||TO_CHAR(SQLCODE);
185 END IF;
186 RAISE py_za_tx_01032000.xpt_E;
187 END GlbVal;
188
189 FUNCTION RetroInPrd RETURN BOOLEAN AS
190 CURSOR c_RetActs(
191 p_AsgId pay_assignment_actions.assignment_id%TYPE
192 , p_AsgActSeq pay_assignment_actions.action_sequence%TYPE
193 , p_TimPrdId pay_payroll_actions.time_period_id%TYPE
194 )
195 IS
196 SELECT 1
197 FROM pay_payroll_actions ppa
198 , pay_assignment_actions paa
199 WHERE paa.assignment_id = p_AsgId
200 AND paa.action_sequence < p_AsgActSeq
201 AND paa.payroll_action_id = ppa.payroll_action_id
202 AND ppa.time_period_id = p_TimPrdId
203 AND ppa.action_status = 'C'
204 AND ppa.action_type IN ('O','G');
205
206 l_AsgActSeq pay_assignment_actions.action_sequence%TYPE;
207 l_TimPrdId pay_payroll_actions.time_period_id%TYPE;
208 v_RetActs c_RetActs%ROWTYPE;
209 -- l_RetroInPeriod BOOLEAN DEFAULT FALSE;
210
211 BEGIN
212 hr_utility.set_location('py_za_tx_utl_01032000.RetroInPrd',1);
213 -- Get Assignment_Action.Action_Sequence
214 SELECT paa.action_sequence
215 , ppa.time_period_id
216 INTO l_AsgActSeq
217 , l_TimPrdId
218 FROM pay_assignment_actions paa
219 , pay_payroll_actions ppa
220 WHERE paa.assignment_action_id = py_za_tx_01032000.con_ASG_ACT_ID
221 AND paa.payroll_action_id = ppa.payroll_action_id;
222
223 hr_utility.set_location('py_za_tx_utl_01032000.RetroInPrd',2);
224 WriteHrTrace('p_AsgId: '||to_char(py_za_tx_01032000.con_ASG_ID));
225 WriteHrTrace('p_AsgActSeq: '||to_char(l_AsgActSeq));
226 WriteHrTrace('p_TimPrdId: '||to_char(l_TimPrdId));
227
228 -- Was there a Retropay action in the period?
229 OPEN c_RetActs(
230 p_AsgId => py_za_tx_01032000.con_ASG_ID
231 , p_AsgActSeq => l_AsgActSeq
232 , p_TimPrdId => l_TimPrdId
233 );
234 FETCH c_RetActs INTO v_RetActs;
235 hr_utility.set_location('py_za_tx_utl_01032000.RetroInPrd',3);
236 IF c_RetActs%FOUND THEN
237 hr_utility.set_location('py_za_tx_utl_01032000.RetroInPrd',4);
238 --l_RetroInPeriod := TRUE;
239 py_za_tx_01032000.trc_RetroInPeriod := TRUE;
240 END IF;
241 CLOSE c_RetActs;
242
243 hr_utility.set_location('py_za_tx_utl_01032000.RetroInPrd',5);
244 RETURN py_za_tx_01032000.trc_RetroInPeriod;
245
246 EXCEPTION
247 WHEN OTHERS THEN
248 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
249 py_za_tx_01032000.xpt_Msg := 'RetroInPrd: '||TO_CHAR(SQLCODE);
250 END IF;
251 RAISE py_za_tx_01032000.xpt_E;
252 END RetroInPrd;
253
254 FUNCTION LatePayPeriod RETURN BOOLEAN AS
255 -- Variables
256 l_CurTxYear NUMBER(15);
257 BEGIN
258 hr_utility.set_location('py_za_tx_utl_01032000.LatePayPeriod',1);
259 -- IF the employee's assignment ended before the current tax year
260 -- it's a Late Pay Period
261 IF py_za_tx_01032000.dbi_ZA_ACT_END_DTE < py_za_tx_01032000.dbi_ZA_TX_YR_STRT THEN
262
263 hr_utility.set_location('py_za_tx_utl_01032000.LatePayPeriod',2);
264
265 -- Valid Late Pay Period?
266 --
267 -- Current Tax Year
268 l_CurTxYear := to_number(to_char(py_za_tx_01032000.dbi_ZA_TX_YR_END,'YYYY'));
269
270 -- Assignment's Tax Year
271 SELECT ptp.prd_information1
272 INTO py_za_tx_01032000.trc_AsgTxYear
273 FROM per_time_periods ptp
274 WHERE ptp.payroll_id = py_za_tx_01032000.con_PRL_ID
275 AND py_za_tx_01032000.dbi_ZA_ACT_END_DTE BETWEEN ptp.start_date AND ptp.end_date;
276
277 hr_utility.set_location('py_za_tx_utl_01032000.LatePayPeriod',3);
278
279 IF (l_CurTxYear - py_za_tx_01032000.trc_AsgTxYear) > 1 THEN
280 hr_utility.set_location('py_za_tx_utl_01032000.LatePayPeriod',4);
281 hr_utility.set_message(801, 'Late Payment Across Two Tax Years!');
282 hr_utility.raise_error;
283 ELSE
284 hr_utility.set_location('py_za_tx_utl_01032000.LatePayPeriod',5);
285 RETURN TRUE;
286 END IF;
287
288 ELSE
289 hr_utility.set_location('py_za_tx_utl_01032000.LatePayPeriod',6);
290 RETURN FALSE;
291 END IF;
292
293 EXCEPTION
294 WHEN OTHERS THEN
295 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
296 py_za_tx_01032000.xpt_Msg := 'LatePayPeriod: '||TO_CHAR(SQLCODE);
297 END IF;
298 RAISE py_za_tx_01032000.xpt_E;
299 END LatePayPeriod;
300
301 FUNCTION LstPeriod RETURN BOOLEAN AS
302 BEGIN
303 -- Is this the last period for the tax year
304 --
305 IF py_za_tx_01032000.dbi_ZA_PAY_PRDS_LFT = 1 THEN
306 hr_utility.set_location('py_za_tx_utl_01032000.LstPeriod',1);
307 RETURN TRUE;
308 ELSE
309 hr_utility.set_location('py_za_tx_utl_01032000.LstPeriod',2);
310 RETURN FALSE;
311 END IF;
312
313 EXCEPTION
314 WHEN OTHERS THEN
315 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
316 py_za_tx_01032000.xpt_Msg := 'LstPeriod: '||TO_CHAR(SQLCODE);
317 END IF;
318 RAISE py_za_tx_01032000.xpt_E;
319 END LstPeriod;
320
321 FUNCTION EmpTermInPeriod RETURN BOOLEAN AS
322
323 BEGIN
324 -- Was the employee terminated in the current period
325 --
326 IF py_za_tx_01032000.dbi_ZA_ACT_END_DTE BETWEEN py_za_tx_01032000.dbi_ZA_CUR_PRD_STRT_DTE AND py_za_tx_01032000.dbi_ZA_CUR_PRD_END_DTE THEN
327 hr_utility.set_location('py_za_tx_utl_01032000.EmpTermInPeriod',1);
328 RETURN TRUE;
329 ELSE
330 hr_utility.set_location('py_za_tx_utl_01032000.EmpTermInPeriod',2);
331 RETURN FALSE;
332 END IF;
333
334 EXCEPTION
335 WHEN OTHERS THEN
336 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
337 py_za_tx_01032000.xpt_Msg := 'EmpTermInPeriod: '||TO_CHAR(SQLCODE);
338 END IF;
339 RAISE py_za_tx_01032000.xpt_E;
340 END EmpTermInPeriod;
341
342 FUNCTION EmpTermPrePeriod RETURN BOOLEAN AS
343
344 BEGIN
345 -- Was the employee terminated before the current period
346 --
347 IF py_za_tx_01032000.dbi_ZA_ACT_END_DTE <= py_za_tx_01032000.dbi_ZA_CUR_PRD_STRT_DTE THEN
348 hr_utility.set_location('py_za_tx_utl_01032000.EmpTermPrePeriod',1);
349 RETURN TRUE;
350 ELSE
351 hr_utility.set_location('py_za_tx_utl_01032000.EmpTermPrePeriod',2);
352 RETURN FALSE;
353 END IF;
354
355 EXCEPTION
356 WHEN OTHERS THEN
357 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
358 py_za_tx_01032000.xpt_Msg := 'EmpTermPrePeriod: '||TO_CHAR(SQLCODE);
359 END IF;
360 RAISE py_za_tx_01032000.xpt_E;
361 END EmpTermPrePeriod;
362
363 FUNCTION PreErnPeriod RETURN BOOLEAN AS
364
365 BEGIN
366 -- PTD Taxable Income
367 --
368 py_za_tx_01032000.trc_TxbIncPtd :=
369 ( py_za_tx_01032000.bal_AST_PRCHD_RVAL_NRFI_PTD
370 + py_za_tx_01032000.bal_AST_PRCHD_RVAL_RFI_PTD
371 + py_za_tx_01032000.bal_BP_PTD
372 + py_za_tx_01032000.bal_BUR_AND_SCH_NRFI_PTD
373 + py_za_tx_01032000.bal_BUR_AND_SCH_RFI_PTD
374 + py_za_tx_01032000.bal_COMM_NRFI_PTD
375 + py_za_tx_01032000.bal_COMM_RFI_PTD
376 + py_za_tx_01032000.bal_COMP_ALL_NRFI_PTD
377 + py_za_tx_01032000.bal_COMP_ALL_RFI_PTD
378 + py_za_tx_01032000.bal_ENT_ALL_NRFI_PTD
379 + py_za_tx_01032000.bal_ENT_ALL_RFI_PTD
380 + py_za_tx_01032000.bal_FREE_ACCOM_NRFI_PTD
381 + py_za_tx_01032000.bal_FREE_ACCOM_RFI_PTD
382 + py_za_tx_01032000.bal_FREE_SERV_NRFI_PTD
383 + py_za_tx_01032000.bal_FREE_SERV_RFI_PTD
384 + py_za_tx_01032000.bal_LOW_LOANS_NRFI_PTD
385 + py_za_tx_01032000.bal_LOW_LOANS_RFI_PTD
386 + py_za_tx_01032000.bal_MLS_AND_VOUCH_NRFI_PTD
387 + py_za_tx_01032000.bal_MLS_AND_VOUCH_RFI_PTD
388 + py_za_tx_01032000.bal_MED_PAID_NRFI_PTD
389 + py_za_tx_01032000.bal_MED_PAID_RFI_PTD
390 + py_za_tx_01032000.bal_OTHER_TXB_ALL_NRFI_PTD
391 + py_za_tx_01032000.bal_OTHER_TXB_ALL_RFI_PTD
392 + py_za_tx_01032000.bal_OVTM_NRFI_PTD
393 + py_za_tx_01032000.bal_OVTM_RFI_PTD
394 + py_za_tx_01032000.bal_PYM_DBT_NRFI_PTD
395 + py_za_tx_01032000.bal_PYM_DBT_RFI_PTD
396 + py_za_tx_01032000.bal_RGT_AST_NRFI_PTD
397 + py_za_tx_01032000.bal_RGT_AST_RFI_PTD
398 + py_za_tx_01032000.bal_TXB_INC_NRFI_PTD
399 + py_za_tx_01032000.bal_TXB_INC_RFI_PTD
400 + py_za_tx_01032000.bal_TXB_PEN_NRFI_PTD
401 + py_za_tx_01032000.bal_TXB_PEN_RFI_PTD
402 + py_za_tx_01032000.bal_TEL_ALL_NRFI_PTD
403 + py_za_tx_01032000.bal_TEL_ALL_RFI_PTD
404 + py_za_tx_01032000.bal_TOOL_ALL_NRFI_PTD
405 + py_za_tx_01032000.bal_TOOL_ALL_RFI_PTD
406 + py_za_tx_01032000.bal_TA_NRFI_PTD
407 + py_za_tx_01032000.bal_TA_RFI_PTD
408 + py_za_tx_01032000.bal_USE_VEH_NRFI_PTD
409 + py_za_tx_01032000.bal_USE_VEH_RFI_PTD
410 );
411
412 -- Ptd Annual Bonus
413 py_za_tx_01032000.trc_AnnBonPtd :=
414 ( py_za_tx_01032000.bal_AB_NRFI_RUN
415 + py_za_tx_01032000.bal_AB_RFI_RUN
416 );
417
418 -- Ytd Annual Payments
419 py_za_tx_01032000.trc_AnnPymPtd :=
420 ( py_za_tx_01032000.bal_ANU_FRM_RET_FND_NRFI_RUN
421 + py_za_tx_01032000.bal_ANU_FRM_RET_FND_RFI_RUN
422 + py_za_tx_01032000.bal_PRCH_ANU_TXB_NRFI_RUN
423 + py_za_tx_01032000.bal_PRCH_ANU_TXB_RFI_RUN
424 + py_za_tx_01032000.bal_TXB_AP_NRFI_RUN
425 + py_za_tx_01032000.bal_TXB_AP_RFI_RUN
426 );
427
428 WriteHrTrace('py_za_tx_01032000.trc_TxbIncPtd: '||to_char(py_za_tx_01032000.trc_TxbIncPtd));
429 WriteHrTrace('py_za_tx_01032000.trc_AnnBonPtd: '||to_char(py_za_tx_01032000.trc_AnnBonPtd));
430 WriteHrTrace('py_za_tx_01032000.trc_AnnPymPtd: '||to_char(py_za_tx_01032000.trc_AnnPymPtd));
431
432 -- Annual Type PTD Income with no Period Type PTD Income
433 IF (py_za_tx_01032000.trc_AnnBonPtd + py_za_tx_01032000.trc_AnnPymPtd) <> 0 AND py_za_tx_01032000.trc_TxbIncPtd <= 0 THEN
434 hr_utility.set_location('py_za_tx_utl_01032000.PreErnPeriod',1);
435 RETURN TRUE;
436 ELSE
437 hr_utility.set_location('py_za_tx_utl_01032000.PreErnPeriod',2);
438 RETURN FALSE;
439 END IF;
440
441 EXCEPTION
442 WHEN OTHERS THEN
443 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
444 py_za_tx_01032000.xpt_Msg := 'PreErnPeriod: '||TO_CHAR(SQLCODE);
445 END IF;
446 RAISE py_za_tx_01032000.xpt_E;
447 END PreErnPeriod;
448
449 FUNCTION SitePeriod RETURN BOOLEAN AS
450 BEGIN
451 IF LstPeriod OR EmpTermInPeriod OR EmpTermPrePeriod THEN
452 hr_utility.set_location('py_za_tx_utl_01032000.SitePeriod',1);
453 RETURN TRUE;
454 ELSE
455 hr_utility.set_location('py_za_tx_utl_01032000.SitePeriod',2);
456 RETURN FALSE;
457 END IF;
458
459 EXCEPTION
460 WHEN OTHERS THEN
461 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
462 py_za_tx_01032000.xpt_Msg := 'SitePeriod: '||TO_CHAR(SQLCODE);
463 END IF;
464 RAISE py_za_tx_01032000.xpt_E;
465 END SitePeriod;
466
467 PROCEDURE PeriodFactor AS
468
469 BEGIN
470 IF py_za_tx_01032000.dbi_ZA_TX_YR_STRT < py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE THEN
471 hr_utility.set_location('py_za_tx_utl_01032000.PeriodFactor',1);
472
473 IF py_za_tx_01032000.bal_TOT_INC_YTD = py_za_tx_01032000.bal_TOT_INC_PTD THEN
474 hr_utility.set_location('py_za_tx_utl_01032000.PeriodFactor',2);
475 /* i.e. first pay period for the person */
476 py_za_tx_01032000.trc_PrdFactor := (py_za_tx_01032000.dbi_ZA_CUR_PRD_END_DTE - py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE + 1) /
477 (py_za_tx_01032000.dbi_ZA_CUR_PRD_END_DTE - py_za_tx_01032000.dbi_ZA_CUR_PRD_STRT_DTE + 1);
478 ELSE
479 hr_utility.set_location('py_za_tx_utl_01032000.PeriodFactor',3);
480 py_za_tx_01032000.trc_PrdFactor := 1;
481 END IF;
482
483 ELSE
484 hr_utility.set_location('py_za_tx_utl_01032000.PeriodFactor',4);
485 py_za_tx_01032000.trc_PrdFactor := 1;
486 END IF;
487
488 WriteHrTrace('py_za_tx_01032000.dbi_ZA_TX_YR_STRT: '||to_char(py_za_tx_01032000.dbi_ZA_TX_YR_STRT,'DD/MM/YYYY'));
489 WriteHrTrace('py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE: '||to_char(py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE,'DD/MM/YYYY'));
490 WriteHrTrace('py_za_tx_01032000.dbi_ZA_CUR_PRD_END_DTE: '||to_char(py_za_tx_01032000.dbi_ZA_CUR_PRD_END_DTE,'DD/MM/YYYY'));
491 WriteHrTrace('py_za_tx_01032000.dbi_ZA_CUR_PRD_STRT_DTE: '||to_char(py_za_tx_01032000.dbi_ZA_CUR_PRD_STRT_DTE,'DD/MM/YYYY'));
492
493 EXCEPTION
494 WHEN OTHERS THEN
495 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
496 py_za_tx_01032000.xpt_Msg := 'PeriodFactor: '||TO_CHAR(SQLCODE);
497 END IF;
498 RAISE py_za_tx_01032000.xpt_E;
499 END PeriodFactor;
500
501
502 PROCEDURE PossiblePeriodsFactor AS
503 BEGIN
504 IF py_za_tx_01032000.dbi_ZA_TX_YR_STRT >= py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE THEN
505 hr_utility.set_location('py_za_tx_utl_01032000.PossiblePeriodsFactor',1);
506 py_za_tx_01032000.trc_PosFactor := 1;
507 ELSE
508 hr_utility.set_location('py_za_tx_utl_01032000.PossiblePeriodsFactor',2);
509 py_za_tx_01032000.trc_PosFactor := py_za_tx_01032000.dbi_ZA_DYS_IN_YR / (py_za_tx_01032000.dbi_ZA_TX_YR_END - py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE + 1);
510 END IF;
511
512 EXCEPTION
513 WHEN OTHERS THEN
514 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
515 py_za_tx_01032000.xpt_Msg := 'PossiblePeriodsFactor: '||TO_CHAR(SQLCODE);
516 END IF;
517 RAISE py_za_tx_01032000.xpt_E;
518 END PossiblePeriodsFactor;
519
520
521 FUNCTION Annualise
522 (p_YtdInc IN NUMBER
523 ,p_PtdInc IN NUMBER
524 ) RETURN NUMBER
525 AS
526 l_AnnFig NUMBER(15,2);
527 l_PtdFact NUMBER(15,2);
528
529 BEGIN
530 l_PtdFact := p_PtdInc / py_za_tx_01032000.trc_PrdFactor;
531
532 -- Payment over less than one period?
533 IF py_za_tx_01032000.trc_PrdFactor < 1 THEN
534 hr_utility.set_location('py_za_tx_utl_01032000.Annualise',1);
535 l_AnnFig := ((l_PtdFact * py_za_tx_01032000.dbi_ZA_PAY_PRDS_LFT)
536 +(p_YtdInc - p_PtdInc)
537 ) * py_za_tx_01032000.trc_PosFactor;
538 ELSE
539 hr_utility.set_location('py_za_tx_utl_01032000.Annualise',2);
540 l_AnnFig := ((l_PtdFact * py_za_tx_01032000.dbi_ZA_PAY_PRDS_LFT)
541 +(p_YtdInc - l_PtdFact)
542 ) * py_za_tx_01032000.trc_PosFactor;
543 END IF;
544
545 WriteHrTrace('p_YtdInc: '||to_char(p_YtdInc));
546 WriteHrTrace('p_PtdInc: '||to_char(p_PtdInc));
547 WriteHrTrace('l_PtdFact: '||to_char(l_PtdFact));
548 WriteHrTrace('py_za_tx_01032000.trc_PrdFactor: '||to_char(py_za_tx_01032000.trc_PrdFactor));
549 WriteHrTrace('py_za_tx_01032000.trc_PosFactor: '||to_char(py_za_tx_01032000.trc_PosFactor));
550 WriteHrTrace('py_za_tx_01032000.dbi_ZA_PAY_PRDS_LFT: '||to_char(py_za_tx_01032000.dbi_ZA_PAY_PRDS_LFT));
551
552 RETURN l_AnnFig;
553
554 EXCEPTION
555 WHEN OTHERS THEN
556 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
557 py_za_tx_01032000.xpt_Msg := 'Annualise: '||TO_CHAR(SQLCODE);
558 END IF;
559 RAISE py_za_tx_01032000.xpt_E;
560 END Annualise;
561
562 PROCEDURE SetRebates AS
563
564 -- Variables
565 l_65Year DATE;
566 l_EndDate per_time_periods.end_date%TYPE;
567
568 l_ZA_TX_YR_END DATE;
569 l_ZA_ADL_TX_RBT NUMBER(15,2);
570 l_ZA_PRI_TX_RBT NUMBER(15,2);
571 l_ZA_PRI_TX_THRSHLD NUMBER(15,2);
572 l_ZA_SC_TX_THRSHLD NUMBER(15,2);
573
574 BEGIN
575 -- Setup the Globals
576 IF py_za_tx_01032000.trc_CalTyp = 'PstCalc' THEN
577 hr_utility.set_location('py_za_tx_utl_01032000.SetRebates',1);
578 -- Employee Tax Year Start and End Dates
579 --
580 SELECT MAX(ptp.end_date) "EndDate"
581 INTO l_EndDate
582 FROM per_time_periods ptp
583 WHERE ptp.payroll_id = py_za_tx_01032000.con_PRL_ID
584 AND ptp.prd_information1 = py_za_tx_01032000.trc_AsgTxYear
585 GROUP BY ptp.prd_information1;
586
587 hr_utility.set_location('py_za_tx_utl_01032000.SetRebates',2);
588
589 -- Global Values
590 l_ZA_TX_YR_END := l_EndDate;
591 l_ZA_ADL_TX_RBT := GlbVal('ZA_ADDITIONAL_TAX_REBATE',l_EndDate);
592 l_ZA_PRI_TX_RBT := GlbVal('ZA_PRIMARY_TAX_REBATE',l_EndDate);
593 l_ZA_PRI_TX_THRSHLD := GlbVal('ZA_PRIM_TAX_THRESHOLD',l_EndDate);
594 l_ZA_SC_TX_THRSHLD := GlbVal('ZA_SEC_TAX_THRESHOLD',l_EndDate);
595 ELSE
596 hr_utility.set_location('py_za_tx_utl_01032000.SetRebates',3);
597 -- Set locals to current values
598 l_ZA_TX_YR_END := py_za_tx_01032000.dbi_ZA_TX_YR_END;
599 l_ZA_ADL_TX_RBT := py_za_tx_01032000.glb_ZA_ADL_TX_RBT;
600 l_ZA_PRI_TX_RBT := py_za_tx_01032000.glb_ZA_PRI_TX_RBT;
601 l_ZA_PRI_TX_THRSHLD := py_za_tx_01032000.glb_ZA_PRI_TX_THRSHLD;
602 l_ZA_SC_TX_THRSHLD := py_za_tx_01032000.glb_ZA_SC_TX_THRSHLD;
603 END IF;
604
605 hr_utility.set_location('py_za_tx_utl_01032000.SetRebates',4);
606
607 -- Calculate the Rebate and Threshold Values
608 IF py_za_tx_01032000.dbi_TX_STA = 'K' THEN
609 hr_utility.set_location('py_za_tx_utl_01032000.SetRebates',5);
610 -- Personal Service Trusts receives no Abatements
611 py_za_tx_01032000.trc_Rebate := 0;
612 py_za_tx_01032000.trc_Threshold := 0;
613 ELSE
614 hr_utility.set_location('py_za_tx_utl_01032000.SetRebates',6);
615 -- Calculate the assignments 65 Year Date
616 l_65Year := add_months(py_za_tx_01032000.dbi_PER_DTE_OF_BRTH,780);
617
618 IF l_65Year <= l_ZA_TX_YR_END THEN
619 hr_utility.set_location('py_za_tx_utl_01032000.SetRebates',7);
620 -- give the extra abatement
621 py_za_tx_01032000.trc_Rebate := l_ZA_PRI_TX_RBT + l_ZA_ADL_TX_RBT;
622 py_za_tx_01032000.trc_Threshold := l_ZA_SC_TX_THRSHLD;
623 ELSE
624 hr_utility.set_location('py_za_tx_utl_01032000.SetRebates',8);
625 -- not eligable for extra abatement
626 py_za_tx_01032000.trc_Rebate := l_ZA_PRI_TX_RBT;
627 py_za_tx_01032000.trc_Threshold := l_ZA_PRI_TX_THRSHLD;
628 END IF;
629 END IF;
630
631 WriteHrTrace('l_ZA_TX_YR_END: '||to_char(l_ZA_TX_YR_END,'DD/MM/YYYY'));
632 WriteHrTrace('l_ZA_ADL_TX_RBT: '||to_char(l_ZA_ADL_TX_RBT));
633 WriteHrTrace('l_ZA_PRI_TX_RBT: '||to_char(l_ZA_PRI_TX_RBT));
634 WriteHrTrace('l_ZA_PRI_TX_THRSHLD: '||to_char(l_ZA_PRI_TX_THRSHLD));
635 WriteHrTrace('l_ZA_SC_TX_THRSHLD: '||to_char(l_ZA_SC_TX_THRSHLD));
636
637 EXCEPTION
638 WHEN OTHERS THEN
639 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
640 py_za_tx_01032000.xpt_Msg := 'SetRebates: '||TO_CHAR(SQLCODE);
641 END IF;
642 RAISE py_za_tx_01032000.xpt_E;
643 END SetRebates;
644
645 PROCEDURE Abatements AS
646
647 -- Variables
648 l_65Year DATE;
649 l_EndDate per_time_periods.end_date%TYPE;
650
651 l_ZA_TX_YR_END DATE;
652 l_ZA_ARR_PF_AN_MX_ABT NUMBER(15,2);
653 l_ZA_ARR_RA_AN_MX_ABT NUMBER(15,2);
654 l_ZA_PF_AN_MX_ABT NUMBER(15,2);
655 l_ZA_PF_MX_PRC NUMBER(15,2);
656 l_ZA_RA_AN_MX_ABT NUMBER(15,2);
657 l_ZA_RA_MX_PRC NUMBER(15,2);
658
659 BEGIN
660 -- Initialise the figures needed for the calculation
661 -- of tax abatements and rebates, based on the
662 -- calculation type
663 --
664 IF py_za_tx_01032000.dbi_TX_STA = 'K' THEN
665 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',1);
666 -- Personal Service Trusts receives no Abatements
667 py_za_tx_01032000.trc_PerTotAbm := 0;
668 py_za_tx_01032000.trc_AnnTotAbm := 0;
669 ELSE
670 IF py_za_tx_01032000.trc_CalTyp = 'NorCalc' THEN
671 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',2);
672
673 -- Pension Fund Abatement
674 --
675 -- Period Calculation
676 --
677 -- Annualise Period Pension Fund Contributions
678 py_za_tx_01032000.trc_PerPenFnd := Annualise
679 (p_YtdInc => py_za_tx_01032000.bal_CUR_PF_YTD
680 ,p_PtdInc => py_za_tx_01032000.bal_CUR_PF_PTD
681 );
682 -- Annualise Period RFIable Contributions
683 py_za_tx_01032000.trc_PerRfiCon := Annualise
684 (p_ytdInc => py_za_tx_01032000.bal_TOT_RFI_INC_YTD
685 ,p_PtdInc => py_za_tx_01032000.bal_TOT_RFI_INC_PTD
686 );
687
688 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',3);
689
690 -- Annual Calculation
691 --
692 -- Annual Pension Fund Contribution
693 py_za_tx_01032000.trc_AnnPenFnd := py_za_tx_01032000.trc_PerPenFnd + py_za_tx_01032000.bal_ANN_PF_YTD;
694 -- Annual Rfi Contribution
695 py_za_tx_01032000.trc_AnnRfiCon := py_za_tx_01032000.trc_PerRfiCon + py_za_tx_01032000.bal_TOT_RFI_AN_INC_YTD;
696
697 -- Arrear Pension Fund Abatement
698 --
699 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',4);
700 -- Check Arrear Pension Fund Frequency
701 IF py_za_tx_01032000.dbi_ARR_PF_FRQ = 'M' THEN
702 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',5);
703
704 py_za_tx_01032000.trc_ArrPenFnd := Annualise
705 (p_YtdInc => py_za_tx_01032000.bal_ARR_PF_YTD
706 ,p_PtdInc => py_za_tx_01032000.bal_ARR_PF_PTD
707 )
708 +py_za_tx_01032000.bal_EXC_ARR_PEN_ITD;
709 ELSE
710 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',6);
711
712 py_za_tx_01032000.trc_ArrPenFnd := py_za_tx_01032000.bal_ARR_PF_YTD
713 + py_za_tx_01032000.bal_EXC_ARR_PEN_ITD;
714 END IF;
715
716 -- Retirement Annuity Abatement
717 --
718 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',7);
719 -- Calculate RA Contribution
720 IF py_za_tx_01032000.dbi_RA_FRQ = 'M' THEN
721 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',8);
722 py_za_tx_01032000.trc_RetAnu := Annualise
723 (p_YtdInc => py_za_tx_01032000.bal_CUR_RA_YTD
724 ,p_PtdINc => py_za_tx_01032000.bal_CUR_RA_PTD
725 );
726 ELSE
727 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',9);
728 py_za_tx_01032000.trc_RetAnu := py_za_tx_01032000.bal_CUR_RA_YTD;
729 END IF;
730
731 -- Calculate Nrfi Contribution based on Pension Fund
732 -- Contributions
733 IF py_za_tx_01032000.bal_CUR_PF_YTD = 0 THEN
734 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',10);
735 py_za_tx_01032000.trc_NrfiCon := Annualise
736 (p_YtdInc => py_za_tx_01032000.bal_TOT_RFI_INC_YTD + py_za_tx_01032000.bal_TOT_NRFI_INC_YTD
737 ,p_PtdInc => py_za_tx_01032000.bal_TOT_RFI_INC_PTD + py_za_tx_01032000.bal_TOT_NRFI_INC_PTD
738 )
739 +py_za_tx_01032000.bal_TOT_NRFI_AN_INC_YTD
740 +py_za_tx_01032000.bal_TOT_RFI_AN_INC_YTD;
741 ELSE
742 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',11);
743 py_za_tx_01032000.trc_NrfiCon := Annualise
744 (p_YtdInc => py_za_tx_01032000.bal_TOT_NRFI_INC_YTD
745 ,p_PtdInc => py_za_tx_01032000.bal_TOT_NRFI_INC_PTD
746 )
747 +py_za_tx_01032000.bal_TOT_NRFI_AN_INC_YTD;
748 END IF;
749
750
751 -- Arrear Retirement Annuity Abatement
752 --
753 -- Check Arrear Retirement Annuity Frequency
754 IF py_za_tx_01032000.dbi_ARR_RA_FRQ = 'M' THEN
755 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',12);
756 py_za_tx_01032000.trc_ArrRetAnu := Annualise
757 (p_YtdInc => py_za_tx_01032000.bal_ARR_RA_YTD
758 ,p_PtdInc => py_za_tx_01032000.bal_ARR_RA_PTD
759 )
760 +py_za_tx_01032000.bal_EXC_ARR_RA_ITD;
761 ELSE
762 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',13);
763 py_za_tx_01032000.trc_ArrRetAnu := py_za_tx_01032000.bal_ARR_RA_YTD
764 + py_za_tx_01032000.bal_EXC_ARR_RA_ITD;
765 END IF;
766
767
768 -- Medical Aid Abatement
769 --
770 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',14);
771 py_za_tx_01032000.trc_MedAidAbm := Annualise
772 (p_YtdInc => py_za_tx_01032000.bal_MED_CONTR_YTD
773 ,p_PtdInc => py_za_tx_01032000.bal_MED_CONTR_PTD
774 );
775
776 ELSIF py_za_tx_01032000.trc_CalTyp IN ('YtdCalc','SitCalc') THEN
777 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',15);
778 -- Pension Fund Abatement
779 --
780 -- Period Calculation
781 --
782 -- Annualise Period Pension Fund Contribution
783 py_za_tx_01032000.trc_PerPenFnd := py_za_tx_01032000.bal_CUR_PF_YTD * py_za_tx_01032000.trc_SitFactor;
784 -- Annualise Period Rfiable Contributions
785 py_za_tx_01032000.trc_PerRfiCon := py_za_tx_01032000.bal_TOT_RFI_INC_YTD * py_za_tx_01032000.trc_SitFactor;
786
787 -- Annual Calculation
788 --
789 -- Annual Pension Fund Contribution
790 py_za_tx_01032000.trc_AnnPenFnd := py_za_tx_01032000.trc_PerPenFnd + py_za_tx_01032000.bal_ANN_PF_YTD;
791 -- Annual Rfi Contribution
792 py_za_tx_01032000.trc_AnnRfiCon := py_za_tx_01032000.trc_PerRfiCon + py_za_tx_01032000.bal_TOT_RFI_AN_INC_YTD;
793
794 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',16);
795
796 -- Arrear Pension Fund Abatement
797 --
798 -- Check Arrear Pension Fund Frequency
799 IF py_za_tx_01032000.dbi_ARR_PF_FRQ = 'M' THEN
800 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',17);
801 py_za_tx_01032000.trc_ArrPenFnd := ( py_za_tx_01032000.bal_ARR_PF_YTD * py_za_tx_01032000.trc_SitFactor)
802 + py_za_tx_01032000.bal_EXC_ARR_PEN_ITD;
803 ELSE
804 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',18);
805 py_za_tx_01032000.trc_ArrPenFnd := py_za_tx_01032000.bal_ARR_PF_YTD + py_za_tx_01032000.bal_EXC_ARR_PEN_ITD;
806 END IF;
807
808 -- Retirement Annuity Abatement
809 --
810 -- Calculate RA Contribution
811 IF py_za_tx_01032000.dbi_RA_FRQ = 'M' THEN
812 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',19);
813 py_za_tx_01032000.trc_RetAnu := py_za_tx_01032000.bal_CUR_RA_YTD * py_za_tx_01032000.trc_SitFactor;
814 ELSE
815 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',20);
816 py_za_tx_01032000.trc_RetAnu := py_za_tx_01032000.bal_CUR_RA_YTD;
817 END IF;
818
819 -- Calculate Nrfi Contribution based on Pension Fund
820 -- Contributions
821 IF py_za_tx_01032000.bal_CUR_PF_YTD = 0 THEN
822 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',21);
823 py_za_tx_01032000.trc_NrfiCon :=
824 (( py_za_tx_01032000.bal_TOT_RFI_INC_YTD
825 + py_za_tx_01032000.bal_TOT_NRFI_INC_YTD
826 )* py_za_tx_01032000.trc_SitFactor)
827 + py_za_tx_01032000.bal_TOT_NRFI_AN_INC_YTD
828 + py_za_tx_01032000.bal_TOT_RFI_AN_INC_YTD;
829 ELSE
830 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',22);
831 py_za_tx_01032000.trc_NrfiCon := ( py_za_tx_01032000.bal_TOT_NRFI_INC_YTD * py_za_tx_01032000.trc_SitFactor)
832 + py_za_tx_01032000.bal_TOT_NRFI_AN_INC_YTD;
833 END IF;
834
835
836 -- Arrear Retirement Annuity Abatement
837 --
838 -- Check Arrear Retirement Annuity Frequency
839 IF py_za_tx_01032000.dbi_ARR_RA_FRQ = 'M' THEN
840 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',23);
841 py_za_tx_01032000.trc_ArrRetAnu := (py_za_tx_01032000.bal_ARR_RA_YTD * py_za_tx_01032000.trc_SitFactor)
842 +py_za_tx_01032000.bal_EXC_ARR_RA_ITD;
843 ELSE
844 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',24);
845 py_za_tx_01032000.trc_ArrRetAnu := py_za_tx_01032000.bal_ARR_RA_YTD
846 + py_za_tx_01032000.bal_EXC_ARR_RA_ITD;
847 END IF;
848
849 -- Medical Aid Abatement
850 py_za_tx_01032000.trc_MedAidAbm := py_za_tx_01032000.bal_MED_CONTR_YTD * py_za_tx_01032000.trc_SitFactor;
851
852 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',25);
853
854 ELSIF py_za_tx_01032000.trc_CalTyp = 'CalCalc' THEN
855 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',26);
856 -- Pension Fund Abatement
857 --
858 -- Period Calculation
859 --
860 -- Annualise Period Pension Fund Contribution
861 py_za_tx_01032000.trc_PerPenFnd := py_za_tx_01032000.bal_CUR_PF_CYTD * py_za_tx_01032000.trc_SitFactor;
862 -- Annualise Period Rfiable Contributions
863 py_za_tx_01032000.trc_PerRfiCon := py_za_tx_01032000.bal_TOT_RFI_INC_CYTD * py_za_tx_01032000.trc_SitFactor;
864
865 -- Annual Calculation
866 --
867 -- Annual Pension Fund Contribution
868 py_za_tx_01032000.trc_AnnPenFnd := py_za_tx_01032000.trc_PerPenFnd + py_za_tx_01032000.bal_ANN_PF_YTD;
869 -- Annual Rfi Contribution
870 py_za_tx_01032000.trc_AnnRfiCon := py_za_tx_01032000.trc_PerRfiCon + py_za_tx_01032000.bal_TOT_RFI_AN_INC_YTD;
871
872 -- Arrear Pension Fund Abatement
873 --
874 -- Check Arrear Pension Fund Frequency
875 IF py_za_tx_01032000.dbi_ARR_PF_FRQ = 'M' THEN
876 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',27);
877 py_za_tx_01032000.trc_ArrPenFnd := (py_za_tx_01032000.bal_ARR_PF_CYTD * py_za_tx_01032000.trc_SitFactor)
878 +py_za_tx_01032000.bal_EXC_ARR_PEN_ITD;
879 ELSE
880 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',28);
881 py_za_tx_01032000.trc_ArrPenFnd := py_za_tx_01032000.bal_ARR_PF_CYTD
882 + py_za_tx_01032000.bal_EXC_ARR_PEN_ITD;
883 END IF;
884
885 -- Retirement Annuity Abatement
886 --
887 -- Calculate RA Contribution
888 IF py_za_tx_01032000.dbi_RA_FRQ = 'M' THEN
889 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',29);
890 py_za_tx_01032000.trc_RetAnu := py_za_tx_01032000.bal_CUR_RA_CYTD * py_za_tx_01032000.trc_SitFactor;
891 ELSE
892 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',30);
893 py_za_tx_01032000.trc_RetAnu := py_za_tx_01032000.bal_CUR_RA_CYTD;
894 END IF;
895
896 -- Calculate Nrfi Contribution based on Pension Fund
897 -- Contributions
898 IF py_za_tx_01032000.bal_CUR_PF_CYTD = 0 THEN
899 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',31);
900 py_za_tx_01032000.trc_NrfiCon :=
901 (( py_za_tx_01032000.bal_TOT_RFI_INC_CYTD
902 + py_za_tx_01032000.bal_TOT_NRFI_INC_CYTD
903 )* py_za_tx_01032000.trc_SitFactor)
904 + py_za_tx_01032000.bal_TOT_NRFI_AN_INC_CYTD
905 + py_za_tx_01032000.bal_TOT_RFI_AN_INC_CYTD;
906 ELSE
907 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',32);
908 py_za_tx_01032000.trc_NrfiCon := (py_za_tx_01032000.bal_TOT_NRFI_INC_CYTD * py_za_tx_01032000.trc_SitFactor)
909 +py_za_tx_01032000.bal_TOT_NRFI_AN_INC_CYTD;
910 END IF;
911
912 -- Arrear Retirement Annuity Abatement
913 --
914 -- Check Arrear Retirement Annuity Frequency
915 IF py_za_tx_01032000.dbi_ARR_RA_FRQ = 'M' THEN
916 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',33);
917 py_za_tx_01032000.trc_ArrRetAnu := (py_za_tx_01032000.bal_ARR_RA_CYTD * py_za_tx_01032000.trc_SitFactor)
918 +py_za_tx_01032000.bal_EXC_ARR_RA_ITD;
919 ELSE
920 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',34);
921 py_za_tx_01032000.trc_ArrRetAnu := py_za_tx_01032000.bal_ARR_RA_CYTD
922 + py_za_tx_01032000.bal_EXC_ARR_RA_ITD;
923 END IF;
924
925 -- Medical Aid Abatement
926 --
927 py_za_tx_01032000.trc_MedAidAbm := py_za_tx_01032000.bal_MED_CONTR_CYTD * py_za_tx_01032000.trc_SitFactor;
928
929 ELSIF py_za_tx_01032000.trc_CalTyp = 'SeaCalc' THEN
930 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',35);
931 -- Pension Fund Abatement
932 --
933 -- Period Calculation
934 --
935 -- Annualise Period Pension Fund Contribution
936 py_za_tx_01032000.trc_PerPenFnd := py_za_tx_01032000.bal_CUR_PF_RUN * py_za_tx_01032000.trc_SitFactor;
937 -- Annualise Period Rfiable Contributions
938 py_za_tx_01032000.trc_PerRfiCon := py_za_tx_01032000.bal_TOT_RFI_INC_RUN * py_za_tx_01032000.trc_SitFactor;
939
940 -- Annual Calculation
941 --
942 -- Annual Pension Fund Contribution
943 py_za_tx_01032000.trc_AnnPenFnd := py_za_tx_01032000.trc_PerPenFnd + py_za_tx_01032000.bal_ANN_PF_RUN;
944 -- Annual Rfi Contribution
945 py_za_tx_01032000.trc_AnnRfiCon := py_za_tx_01032000.trc_PerRfiCon + py_za_tx_01032000.bal_TOT_RFI_AN_INC_RUN;
946
947 -- Arrear pension Fund Abatement
948 --
949 py_za_tx_01032000.trc_ArrPenFndAbm := 0;
950
951 -- Retirement Annuity Abatement
952 --
953 -- Calculate RA Contribution
954 IF py_za_tx_01032000.dbi_RA_FRQ = 'M' THEN
955 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',36);
956 py_za_tx_01032000.trc_RetAnu := py_za_tx_01032000.bal_CUR_RA_RUN * py_za_tx_01032000.trc_SitFactor;
957 ELSE
958 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',37);
959 py_za_tx_01032000.trc_RetAnu := py_za_tx_01032000.bal_CUR_RA_RUN;
960 END IF;
961
962 -- Calculate Nrfi Contribution based on Pension Fund
963 -- Contributions
964 IF py_za_tx_01032000.bal_CUR_PF_RUN = 0 THEN
965 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',38);
966 py_za_tx_01032000.trc_NrfiCon :=
967 (( py_za_tx_01032000.bal_TOT_RFI_INC_RUN
968 + py_za_tx_01032000.bal_TOT_NRFI_INC_RUN
969 )* py_za_tx_01032000.trc_SitFactor)
970 + py_za_tx_01032000.bal_TOT_NRFI_AN_INC_RUN
971 + py_za_tx_01032000.bal_TOT_RFI_AN_INC_RUN;
972 ELSE
973 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',39);
974 py_za_tx_01032000.trc_NrfiCon := (py_za_tx_01032000.bal_TOT_NRFI_INC_RUN * py_za_tx_01032000.trc_SitFactor)
975 + py_za_tx_01032000.bal_TOT_NRFI_AN_INC_RUN;
976 END IF;
977
978 -- Arrear Retirement Annuity
979 --
980 py_za_tx_01032000.trc_ArrRetAnuAbm := 0;
981
982 -- Medical Aid Abatement
983 --
984 py_za_tx_01032000.trc_MedAidAbm := py_za_tx_01032000.bal_MED_CONTR_RUN * py_za_tx_01032000.trc_SitFactor;
985
986 ELSIF py_za_tx_01032000.trc_CalTyp = 'LteCalc' THEN
987 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',40);
988 -- Pension Fund Abatement
989 --
990
991 -- Period Calculation
992 --
993 -- Annualise Period Pension Fund Contribution
994 py_za_tx_01032000.trc_PerPenFnd := py_za_tx_01032000.bal_CUR_PF_YTD;
995 -- Annualise Period Rfiable Contributions
996 py_za_tx_01032000.trc_PerRfiCon := py_za_tx_01032000.bal_TOT_RFI_INC_YTD;
997
998 -- Annual Calculation
999 --
1000 -- Annual Pension Fund Contribution
1001 py_za_tx_01032000.trc_AnnPenFnd := py_za_tx_01032000.trc_PerPenFnd + py_za_tx_01032000.bal_ANN_PF_YTD;
1002 -- Annual Rfi Contribution
1003 py_za_tx_01032000.trc_AnnRfiCon := py_za_tx_01032000.trc_PerRfiCon + py_za_tx_01032000.bal_TOT_RFI_AN_INC_YTD;
1004
1005 -- Arrear Pension Fund Abatement
1006 --
1007 -- Check Arrear Pension Fund Frequency
1008 IF py_za_tx_01032000.dbi_ARR_PF_FRQ = 'M' THEN
1009 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',41);
1010 py_za_tx_01032000.trc_ArrPenFnd := py_za_tx_01032000.bal_ARR_PF_YTD + py_za_tx_01032000.bal_EXC_ARR_PEN_ITD;
1011 ELSE
1012 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',42);
1013 py_za_tx_01032000.trc_ArrPenFnd := py_za_tx_01032000.bal_ARR_PF_YTD + py_za_tx_01032000.bal_EXC_ARR_PEN_ITD;
1014 END IF;
1015
1016 -- Retirement Annuity Abatement
1017 --
1018 -- Calculate RA Contribution
1019 IF py_za_tx_01032000.dbi_RA_FRQ = 'M' THEN
1020 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',43);
1021 py_za_tx_01032000.trc_RetAnu := py_za_tx_01032000.bal_CUR_RA_YTD;
1022 ELSE
1023 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',44);
1024 py_za_tx_01032000.trc_RetAnu := py_za_tx_01032000.bal_CUR_RA_YTD;
1025 END IF;
1026
1027 -- Calculate Nrfi Contribution based on Pension Fund
1028 -- Contributions
1029 IF py_za_tx_01032000.bal_CUR_PF_YTD = 0 THEN
1030 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',45);
1031 py_za_tx_01032000.trc_NrfiCon :=
1032 (py_za_tx_01032000.bal_TOT_RFI_INC_YTD
1033 +py_za_tx_01032000.bal_TOT_NRFI_INC_YTD
1034 +py_za_tx_01032000.bal_TOT_NRFI_AN_INC_YTD
1035 +py_za_tx_01032000.bal_TOT_RFI_AN_INC_YTD
1036 );
1037 ELSE
1038 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',46);
1039 py_za_tx_01032000.trc_NrfiCon := py_za_tx_01032000.bal_TOT_NRFI_INC_YTD +py_za_tx_01032000.bal_TOT_NRFI_AN_INC_YTD;
1040 END IF;
1041
1042 -- Arrear Retirement Annuity Abatement
1043 --
1044 -- Check Arrear Retirement Annuity Frequency
1045 IF py_za_tx_01032000.dbi_ARR_RA_FRQ = 'M' THEN
1046 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',47);
1047 py_za_tx_01032000.trc_ArrRetAnu := py_za_tx_01032000.bal_ARR_RA_YTD +py_za_tx_01032000.bal_EXC_ARR_RA_ITD;
1048 ELSE
1049 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',48);
1050 py_za_tx_01032000.trc_ArrRetAnu := py_za_tx_01032000.bal_ARR_RA_YTD + py_za_tx_01032000.bal_EXC_ARR_RA_ITD;
1051 END IF;
1052
1053 -- Medical Aid Abatement
1054 py_za_tx_01032000.trc_MedAidAbm := py_za_tx_01032000.bal_MED_CONTR_YTD;
1055
1056
1057 ELSIF py_za_tx_01032000.trc_CalTyp = 'PstCalc' THEN
1058 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',49);
1059 -- Pension Fund Abatement
1060 --
1061 -- Period Calculation
1062 --
1063 -- Annualise Period Pension Fund Contribution
1064 py_za_tx_01032000.trc_PerPenFnd := py_za_tx_01032000.bal_CUR_PF_PTD * py_za_tx_01032000.trc_SitFactor;
1065 -- Annualise Period Rfiable Contributions
1066 py_za_tx_01032000.trc_PerRfiCon := py_za_tx_01032000.bal_TOT_RFI_INC_PTD * py_za_tx_01032000.trc_SitFactor;
1067
1068 -- Annual Calculation
1069 --
1070 -- Annual Pension Fund Contribution
1071 py_za_tx_01032000.trc_AnnPenFnd := py_za_tx_01032000.trc_PerPenFnd + py_za_tx_01032000.bal_ANN_PF_PTD;
1072 -- Annual Rfi Contribution
1073 py_za_tx_01032000.trc_AnnRfiCon := py_za_tx_01032000.trc_PerRfiCon + py_za_tx_01032000.bal_TOT_RFI_AN_INC_PTD;
1074
1075 -- Arrear Pension Fund Abatement
1076 --
1077 -- Check Arrear Pension Fund Frequency
1078 IF py_za_tx_01032000.dbi_ARR_PF_FRQ = 'M' THEN
1079 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',50);
1080 py_za_tx_01032000.trc_ArrPenFnd := (py_za_tx_01032000.bal_ARR_PF_PTD * py_za_tx_01032000.trc_SitFactor) + py_za_tx_01032000.bal_EXC_ARR_PEN_PTD;
1081 ELSE
1082 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',51);
1083 py_za_tx_01032000.trc_ArrPenFnd := py_za_tx_01032000.bal_ARR_PF_PTD + py_za_tx_01032000.bal_EXC_ARR_PEN_PTD;
1084 END IF;
1085
1086 -- Retirement Annuity Abatement
1087 --
1088 -- Calculate RA Contribution
1089 IF py_za_tx_01032000.dbi_RA_FRQ = 'M' THEN
1090 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',52);
1091 py_za_tx_01032000.trc_RetAnu := py_za_tx_01032000.bal_CUR_RA_PTD * py_za_tx_01032000.trc_SitFactor;
1092 ELSE
1093 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',53);
1094 py_za_tx_01032000.trc_RetAnu := py_za_tx_01032000.bal_CUR_RA_PTD;
1095 END IF;
1096
1097 -- Calculate Nrfi Contribution based on Pension Fund
1098 -- Contributions
1099 IF py_za_tx_01032000.bal_CUR_PF_PTD = 0 THEN
1100 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',54);
1101 py_za_tx_01032000.trc_NrfiCon :=
1102 (((py_za_tx_01032000.bal_TOT_RFI_INC_PTD+py_za_tx_01032000.bal_TOT_NRFI_INC_PTD) * py_za_tx_01032000.trc_SitFactor)
1103 +py_za_tx_01032000.bal_TOT_NRFI_AN_INC_PTD
1104 +py_za_tx_01032000.bal_TOT_RFI_AN_INC_PTD
1105 );
1106 ELSE
1107 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',55);
1108 py_za_tx_01032000.trc_NrfiCon := py_za_tx_01032000.bal_TOT_NRFI_INC_PTD +py_za_tx_01032000.bal_TOT_NRFI_AN_INC_PTD;
1109 END IF;
1110
1111
1112 -- Arrear Retirement Annuity Abatement
1113 --
1114 -- Check Arrear Retirement Annuity Frequency
1115 IF py_za_tx_01032000.dbi_ARR_RA_FRQ = 'M' THEN
1116 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',56);
1117 py_za_tx_01032000.trc_ArrRetAnu := (py_za_tx_01032000.bal_ARR_RA_PTD * py_za_tx_01032000.trc_SitFactor) +py_za_tx_01032000.bal_EXC_ARR_RA_PTD;
1118 ELSE
1119 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',57);
1120 py_za_tx_01032000.trc_ArrRetAnu := py_za_tx_01032000.bal_ARR_RA_PTD + py_za_tx_01032000.bal_EXC_ARR_RA_PTD;
1121 END IF;
1122
1123 -- Medical Aid Abatement
1124 py_za_tx_01032000.trc_MedAidAbm := py_za_tx_01032000.bal_MED_CONTR_PTD * py_za_tx_01032000.trc_SitFactor;
1125
1126 END IF;
1127
1128
1129 -- CALCULATE THE ABATEMENTS
1130 --
1131 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',58);
1132 -- Check the Calculation Type
1133 IF py_za_tx_01032000.trc_CalTyp = 'PstCalc' THEN
1134 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',59);
1135 -- Employee Tax Year Start and End Dates
1136 --
1137 SELECT MAX(ptp.end_date) "EndDate"
1138 INTO l_EndDate
1139 FROM per_time_periods ptp
1140 WHERE ptp.payroll_id = py_za_tx_01032000.con_PRL_ID
1141 AND ptp.prd_information1 = py_za_tx_01032000.trc_AsgTxYear
1142 GROUP BY ptp.prd_information1;
1143
1144 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',60);
1145
1146 -- Global Values
1147 l_ZA_TX_YR_END := l_EndDate;
1148 l_ZA_ARR_PF_AN_MX_ABT := GlbVal('ZA_ARREAR_PEN_AN_MAX_ABATE',l_EndDate);
1149 l_ZA_ARR_RA_AN_MX_ABT := GlbVal('ZA_ARREAR_RA_AN_MAX_ABATE',l_EndDate);
1150 l_ZA_PF_AN_MX_ABT := GlbVal('ZA_PEN_AN_MAX_ABATE',l_EndDate);
1151 l_ZA_PF_MX_PRC := GlbVal('ZA_PEN_MAX_PERC',l_EndDate);
1152 l_ZA_RA_AN_MX_ABT := GlbVal('ZA_RA_AN_MAX_ABATE',l_EndDate);
1153 l_ZA_RA_MX_PRC := GlbVal('ZA_RA_MAX_PERC',l_EndDate);
1154
1155 ELSE
1156 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',61);
1157 -- Set locals to current values
1158 l_ZA_TX_YR_END := py_za_tx_01032000.dbi_ZA_TX_YR_END;
1159 l_ZA_ARR_PF_AN_MX_ABT := py_za_tx_01032000.glb_ZA_ARR_PF_AN_MX_ABT;
1160 l_ZA_ARR_RA_AN_MX_ABT := py_za_tx_01032000.glb_ZA_ARR_RA_AN_MX_ABT;
1161 l_ZA_PF_AN_MX_ABT := py_za_tx_01032000.glb_ZA_PF_AN_MX_ABT;
1162 l_ZA_PF_MX_PRC := py_za_tx_01032000.glb_ZA_PF_MX_PRC;
1163 l_ZA_RA_AN_MX_ABT := py_za_tx_01032000.glb_ZA_RA_AN_MX_ABT;
1164 l_ZA_RA_MX_PRC := py_za_tx_01032000.glb_ZA_RA_MX_PRC;
1165
1166 END IF;
1167
1168 WriteHrTrace('l_ZA_TX_YR_END: '||to_char(l_ZA_TX_YR_END,'DD/MM/YYYY'));
1169 WriteHrTrace('l_ZA_ARR_PF_AN_MX_ABT: '||to_char(l_ZA_ARR_PF_AN_MX_ABT));
1170 WriteHrTrace('l_ZA_ARR_RA_AN_MX_ABT: '||to_char(l_ZA_ARR_RA_AN_MX_ABT));
1171 WriteHrTrace('l_ZA_PF_AN_MX_ABT: '||to_char(l_ZA_PF_AN_MX_ABT));
1172 WriteHrTrace('l_ZA_PF_MX_PRC: '||to_char(l_ZA_PF_MX_PRC));
1173 WriteHrTrace('l_ZA_RA_AN_MX_ABT: '||to_char(l_ZA_RA_AN_MX_ABT));
1174 WriteHrTrace('l_ZA_RA_MX_PRC: '||to_char(l_ZA_RA_MX_PRC));
1175
1176 -- Pension Fund Abatement
1177 --
1178 -- Period Calculation
1179 -- Calculate the Pension Fund Maximum
1180 py_za_tx_01032000.trc_PerPenFndMax := GREATEST( l_ZA_PF_AN_MX_ABT
1181 ,(l_ZA_PF_MX_PRC / 100 * py_za_tx_01032000.trc_PerRfiCon)
1182 );
1183 -- Calculate Period Pension Fund Abatement
1184 py_za_tx_01032000.trc_PerPenFndAbm := LEAST(py_za_tx_01032000.trc_PerPenFnd, py_za_tx_01032000.trc_PerPenFndMax);
1185
1186 -- Annual Calculation
1187 -- Calculate the Pension Fund Maximum
1188 py_za_tx_01032000.trc_AnnPenFndMax := GREATEST(l_ZA_PF_AN_MX_ABT
1189 ,l_ZA_PF_MX_PRC / 100 * py_za_tx_01032000.trc_AnnRfiCon
1190 );
1191
1192 -- Calculate Annual Pension Fund Abatement
1193 py_za_tx_01032000.trc_AnnPenFndAbm := LEAST(py_za_tx_01032000.trc_AnnPenFnd,py_za_tx_01032000.trc_AnnPenFndMax);
1194
1195 -- Arrear Pension Fund Abatement
1196 --
1197 py_za_tx_01032000.trc_ArrPenFndAbm := LEAST(py_za_tx_01032000.trc_ArrPenFnd, l_ZA_ARR_PF_AN_MX_ABT);
1198
1199 -- Retirement Annnnuity Abatement
1200 --
1201 -- Calculate the Retirement Annuity Maximum
1202 py_za_tx_01032000.trc_RetAnuMax := GREATEST(l_ZA_PF_AN_MX_ABT
1203 ,l_ZA_RA_AN_MX_ABT - py_za_tx_01032000.trc_AnnPenFndAbm
1204 ,l_ZA_RA_MX_PRC / 100 * py_za_tx_01032000.trc_NrfiCon
1205 );
1206
1207 -- Calculate Retirement Annuity Abatement
1208 py_za_tx_01032000.trc_RetAnuAbm := LEAST(py_za_tx_01032000.trc_RetAnu, py_za_tx_01032000.trc_RetAnuMax);
1209
1210 -- Arrear Retirement Annuity Abatement
1211 --
1212 py_za_tx_01032000.trc_ArrRetAnuAbm := LEAST(py_za_tx_01032000.trc_ArrRetAnu, l_ZA_ARR_RA_AN_MX_ABT);
1213
1214 -- Tax Rebates, Threshold Figure and Medical Aid
1215 -- Abatements
1216 -- Calculate the assignments 65 Year Date
1217 l_65Year := add_months(py_za_tx_01032000.dbi_PER_DTE_OF_BRTH,780);
1218
1219 IF l_65Year > l_ZA_TX_YR_END THEN
1220 py_za_tx_01032000.trc_MedAidAbm := 0;
1221 END IF;
1222
1223 hr_utility.set_location('py_za_tx_utl_01032000.Abatements',62);
1224
1225 -- Total Abatements
1226 --
1227 -- Period Total Abatement
1228 py_za_tx_01032000.trc_PerTotAbm :=
1229 ( py_za_tx_01032000.trc_PerPenFndAbm
1230 + py_za_tx_01032000.trc_ArrPenFndAbm
1231 + py_za_tx_01032000.trc_RetAnuAbm
1232 + py_za_tx_01032000.trc_ArrRetAnuAbm
1233 + py_za_tx_01032000.trc_MedAidAbm
1234 );
1235
1236 -- Annual Total Abatements
1237 py_za_tx_01032000.trc_AnnTotAbm :=
1238 ( py_za_tx_01032000.trc_AnnPenFndAbm
1239 + py_za_tx_01032000.trc_ArrPenFndAbm
1240 + py_za_tx_01032000.trc_RetAnuAbm
1241 + py_za_tx_01032000.trc_ArrRetAnuAbm
1242 + py_za_tx_01032000.trc_MedAidAbm
1243 );
1244
1245 WriteHrTrace('py_za_tx_01032000.trc_PerPenFndAbm: '||to_char(py_za_tx_01032000.trc_PerPenFndAbm));
1246 WriteHrTrace('py_za_tx_01032000.trc_AnnPenFndAbm: '||to_char(py_za_tx_01032000.trc_AnnPenFndAbm));
1247 WriteHrTrace('py_za_tx_01032000.trc_ArrPenFndAbm: '||to_char(py_za_tx_01032000.trc_ArrPenFndAbm));
1248 WriteHrTrace('py_za_tx_01032000.trc_RetAnuAbm: '||to_char(py_za_tx_01032000.trc_RetAnuAbm));
1249 WriteHrTrace('py_za_tx_01032000.trc_ArrRetAnuAbm: '||to_char(py_za_tx_01032000.trc_ArrRetAnuAbm));
1250 WriteHrTrace('py_za_tx_01032000.trc_MedAidAbm: '||to_char(py_za_tx_01032000.trc_MedAidAbm));
1251 WriteHrTrace('py_za_tx_01032000.trc_PerTotAbm: '||to_char(py_za_tx_01032000.trc_PerTotAbm));
1252 WriteHrTrace('py_za_tx_01032000.trc_AnnTotAbm: '||to_char(py_za_tx_01032000.trc_AnnTotAbm));
1253 END IF;
1254
1255 EXCEPTION
1256 WHEN OTHERS THEN
1257 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
1258 py_za_tx_01032000.xpt_Msg := 'Abatements: '||TO_CHAR(SQLCODE);
1259 END IF;
1260 RAISE py_za_tx_01032000.xpt_E;
1261 END Abatements;
1262
1263 PROCEDURE ArrearExcess AS
1264 -- Variables
1265 l_PfExcessAmt NUMBER;
1266 l_RaExcessAmt NUMBER;
1267
1268 BEGIN
1269 hr_utility.set_location('py_za_tx_utl_01032000.ArrearExcess',1);
1270 -- Pension Excess
1271 l_PfExcessAmt := (py_za_tx_01032000.bal_ARR_PF_YTD + (py_za_tx_01032000.bal_EXC_ARR_PEN_ITD - py_za_tx_01032000.bal_EXC_ARR_PEN_YTD)) - py_za_tx_01032000.glb_ZA_ARR_PF_AN_MX_ABT;
1272
1273 IF l_PfExcessAmt > 0 THEN
1274 hr_utility.set_location('py_za_tx_utl_01032000.ArrearExcess',2);
1275 py_za_tx_01032000.trc_PfUpdFig := l_PfExcessAmt - py_za_tx_01032000.bal_EXC_ARR_PEN_ITD;
1276 ELSE
1277 hr_utility.set_location('py_za_tx_utl_01032000.ArrearExcess',3);
1278 py_za_tx_01032000.trc_PfUpdFig := -1*(py_za_tx_01032000.bal_EXC_ARR_PEN_ITD);
1279 END IF;
1280
1281 -- Retirement Annuity
1282 l_RaExcessAmt := (py_za_tx_01032000.bal_ARR_RA_YTD + (py_za_tx_01032000.bal_EXC_ARR_RA_ITD - py_za_tx_01032000.bal_EXC_ARR_RA_YTD)) - py_za_tx_01032000.glb_ZA_ARR_RA_AN_MX_ABT;
1283
1284 IF l_RaExcessAmt > 0 THEN
1285 hr_utility.set_location('py_za_tx_utl_01032000.ArrearExcess',4);
1286 py_za_tx_01032000.trc_RaUpdFig := l_RaExcessAmt - py_za_tx_01032000.bal_EXC_ARR_RA_ITD;
1287 ELSE
1288 hr_utility.set_location('py_za_tx_utl_01032000.ArrearExcess',5);
1289 py_za_tx_01032000.trc_RaUpdFig := -1*(py_za_tx_01032000.bal_EXC_ARR_RA_ITD);
1290 END IF;
1291
1292 hr_utility.set_location('py_za_tx_utl_01032000.ArrearExcess',6);
1293 WriteHrTrace('l_PfExcessAmt: '||to_char(l_PfExcessAmt));
1294 WriteHrTrace('l_RaExcessAmt: '||to_char(l_RaExcessAmt));
1295
1296 EXCEPTION
1297 WHEN OTHERS THEN
1298 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
1299 py_za_tx_01032000.xpt_Msg := 'ArrearExcess: '||TO_CHAR(SQLCODE);
1300 END IF;
1301 RAISE py_za_tx_01032000.xpt_E;
1302 END ArrearExcess;
1303
1304 FUNCTION GetTableValue
1305 ( p_TableName IN pay_user_tables.user_table_name%TYPE
1306 , p_ColumnName IN pay_user_columns.user_column_name%TYPE
1307 , p_RowValue IN NUMBER
1308 , p_EffectiveDate IN DATE
1309 ) RETURN VARCHAR2
1310 AS
1311 l_TableValue pay_user_column_instances_f.value%TYPE;
1312 BEGIN
1313
1314 SELECT pucif.value
1315 INTO l_TableValue
1316 FROM pay_user_column_instances_f pucif
1317 , pay_user_columns puc
1318 , pay_user_rows_f pur
1319 , pay_user_tables put
1320 WHERE upper(put.user_table_name) = upper(p_TableName)
1321 AND put.legislation_code = 'ZA'
1322 AND puc.user_table_id = put.user_table_id
1323 AND puc.legislation_code = 'ZA'
1324 AND upper(puc.user_column_name) = upper(p_ColumnName)
1325 AND pucif.user_column_id = puc.user_column_id
1326 AND pur.user_table_id = put.user_table_id
1327 AND p_EffectiveDate BETWEEN pur.effective_start_date AND pur.effective_end_date
1328 AND pur.legislation_code = 'ZA'
1329 AND p_RowValue BETWEEN pur.row_low_range_or_name AND pur.row_high_range
1330 AND put.user_key_units = 'N'
1331 AND pucif.user_row_id = pur.user_row_id
1332 AND p_EffectiveDate BETWEEN pucif.effective_start_date AND pucif.effective_end_date
1333 AND pucif.legislation_code = 'ZA';
1334
1335 RETURN l_TableValue;
1336 EXCEPTION
1337 WHEN OTHERS THEN
1338 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
1339 py_za_tx_01032000.xpt_Msg := 'GetTableValue: '||TO_CHAR(SQLCODE);
1340 END IF;
1341 RAISE py_za_tx_01032000.xpt_E;
1342 END GetTableValue;
1343
1344 FUNCTION TaxLiability
1345 (p_Amt IN NUMBER
1346 )RETURN NUMBER
1347 AS
1348
1349 -- Variables
1350 --
1351 l_fixed pay_user_column_instances_f.value%TYPE;
1352 l_limit pay_user_column_instances_f.value%TYPE;
1353 l_percentage pay_user_column_instances_f.value%TYPE;
1354 l_effective_date pay_payroll_actions.effective_date%TYPE;
1355 tax_liability NUMBER(15,2);
1356 l_TxbAmt NUMBER(15,2);
1357
1358 BEGIN
1359 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',1);
1360 -- First Check for a Tax Override
1361 IF py_za_tx_01032000.trc_OvrTxCalc AND py_za_tx_01032000.trc_OvrTyp = 'P' THEN
1362 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',2);
1363 tax_liability := (p_Amt * py_za_tx_01032000.trc_OvrPrc) / 100;
1364 ELSIF py_za_tx_01032000.dbi_TX_STA = 'C' THEN
1365 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',3);
1366 tax_liability := (p_Amt * py_za_tx_01032000.dbi_TX_DIR_VAL) / 100;
1367 ELSIF py_za_tx_01032000.dbi_TX_STA = 'D' THEN
1368 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',4);
1369 tax_liability := (p_Amt * py_za_tx_01032000.dbi_TX_DIR_VAL) / 100;
1370 ELSIF py_za_tx_01032000.dbi_TX_STA = 'E' THEN
1371 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',5);
1372 tax_liability := (p_Amt * py_za_tx_01032000.glb_ZA_CC_TX_PRC) / 100;
1373 ELSIF py_za_tx_01032000.dbi_TX_STA = 'F' THEN
1374 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',6);
1375 tax_liability := (p_Amt * py_za_tx_01032000.glb_ZA_TMP_TX_RTE) / 100;
1376 ELSIF py_za_tx_01032000.dbi_TX_STA = 'J' THEN
1377 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',7);
1378 tax_liability := (p_Amt * py_za_tx_01032000.glb_ZA_PER_SERV_COMP_PERC) / 100;
1379 ELSIF py_za_tx_01032000.dbi_TX_STA = 'L' THEN
1380 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',8);
1381 tax_liability := (p_Amt * py_za_tx_01032000.glb_ZA_LABOUR_BROK_PERC) / 100;
1382 ELSE
1383 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',9);
1384 /* Taxable Amount must be rounded off to two decimal places */
1385 l_TxbAmt := round(p_Amt,2);
1386
1387 /* this selects the effective date for the payroll_run*/
1388 SELECT ppa.effective_date
1389 INTO l_effective_date
1390 FROM pay_payroll_actions ppa
1391 WHERE ppa.payroll_action_id = py_za_tx_01032000.con_PRL_ACT_ID;
1392
1393 IF py_za_tx_01032000.dbi_TX_STA = 'K' THEN
1394 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',10);
1395 l_fixed := GetTableValue('ZA_TAX_PERSONAL_SERVICE_TRUST','Fixed',l_TxbAmt,l_effective_date);
1396 l_limit := GetTableValue('ZA_TAX_PERSONAL_SERVICE_TRUST','Limit',l_TxbAmt,l_effective_date);
1397 l_percentage := GetTableValue('ZA_TAX_PERSONAL_SERVICE_TRUST','Percentage',l_TxbAmt,l_effective_date);
1398 tax_liability := (l_fixed + ((l_TxbAmt - l_limit) * (l_percentage / 100)));
1399 ELSE
1400 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',11);
1401 l_fixed := GetTableValue('ZA_TAX_TABLE','Fixed',l_TxbAmt,l_effective_date);
1402 l_limit := GetTableValue('ZA_TAX_TABLE','Limit',l_TxbAmt,l_effective_date);
1403 l_percentage := GetTableValue('ZA_TAX_TABLE','Percentage',l_TxbAmt,l_effective_date);
1404 tax_liability := (l_fixed + ((l_TxbAmt - l_limit) * (l_percentage / 100))) - py_za_tx_01032000.trc_Rebate;
1405 END IF;
1406 hr_utility.set_location('py_za_tx_utl_01032000.TaxLiability',12);
1407 END IF;
1408
1409 WriteHrTrace('l_fixed: '||l_fixed);
1410 WriteHrTrace('l_TxbAmt: '||to_char(l_TxbAmt));
1411 WriteHrTrace('l_limit: '||l_limit);
1412 WriteHrTrace('l_percentage: '||l_percentage);
1413 WriteHrTrace('py_za_tx_01032000.trc_Rebate: '||to_char(py_za_tx_01032000.trc_Rebate));
1414 WriteHrTrace('tax_liability: '||to_char(tax_liability));
1415
1416 RETURN tax_liability ;
1417
1418 EXCEPTION
1419 WHEN OTHERS THEN
1420 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
1421 py_za_tx_01032000.xpt_Msg := 'TaxLiability: '||TO_CHAR(SQLCODE);
1422 END IF;
1423 RAISE py_za_tx_01032000.xpt_E;
1424 END TaxLiability;
1425
1426
1427 FUNCTION DeAnnualise
1428 (p_Liab IN NUMBER
1429 ,p_TxOnYtd IN NUMBER
1430 ,p_TxOnPtd IN NUMBER
1431 ) RETURN NUMBER
1432 AS
1433 l_LiabRoy NUMBER(15,2);
1434 l_LiabFp NUMBER(15,2);
1435 BEGIN
1436 hr_utility.set_location('py_za_tx_utl_01032000.DeAnnualise',1);
1437 l_LiabRoy := (p_liab/py_za_tx_01032000.trc_PosFactor - (p_TxOnYtd - p_TxOnPtd))
1438 /py_za_tx_01032000.dbi_ZA_PAY_PRDS_LFT * py_za_tx_01032000.trc_PrdFactor;
1439
1440 l_LiabFp := l_LiabRoy - p_TxOnPtd;
1441
1442 hr_utility.set_location('py_za_tx_utl_01032000.DeAnnualise',2);
1443 WriteHrTrace('p_Liab: '||to_char(p_Liab));
1444 WriteHrTrace('p_TxOnYtd: '||to_char(p_TxOnYtd));
1445 WriteHrTrace('p_TxOnPtd: '||to_char(p_TxOnPtd));
1446 WriteHrTrace('l_LiabRoy: '||to_char(l_LiabRoy));
1447 WriteHrTrace('l_LiabFp: '||to_char(l_LiabFp));
1448
1449 RETURN l_LiabFp;
1450
1451 EXCEPTION
1452 WHEN OTHERS THEN
1453 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
1454 py_za_tx_01032000.xpt_Msg := 'DeAnnualise: '||TO_CHAR(SQLCODE);
1455 END IF;
1456 RAISE py_za_tx_01032000.xpt_E;
1457 END DeAnnualise;
1458
1459
1460 PROCEDURE TrvAll AS
1461 -- Cursors
1462 --
1463 -- Global Effective End Dates
1464 CURSOR c_GlbEffDte
1465 (p_ty_sd DATE -- start date
1466 ,p_ty_ed DATE -- end date
1467 )
1468 IS
1469 SELECT effective_end_date
1470 , to_number(global_value) global_value
1471 FROM ff_globals_f
1472 WHERE effective_end_date < p_ty_ed
1473 AND effective_end_date > p_ty_sd
1474 AND global_name = 'ZA_CAR_ALLOW_TAX_PERC';
1475
1476 -- Variables
1477 --
1478 l_NrfiBalID pay_balance_types.balance_type_id%TYPE;
1479 l_RfiBalID pay_balance_types.balance_type_id%TYPE;
1480 l_StrtDate DATE;
1481 l_EndDate DATE;
1482 l_NrfiYtd NUMBER(15,2) DEFAULT 0;
1483 l_CurNrfiYtd NUMBER(15,2) DEFAULT 0;
1484 l_TotNrfiYtd NUMBER(15,2) DEFAULT 0;
1485 l_CurTxbNrfi NUMBER(15,2) DEFAULT 0;
1486 l_TotTxbNrfi NUMBER(15,2) DEFAULT 0;
1487 l_RfiYtd NUMBER(15,2) DEFAULT 0;
1488 l_CurRfiYtd NUMBER(15,2) DEFAULT 0;
1489 l_TotRfiYtd NUMBER(15,2) DEFAULT 0;
1490 l_CurTxbRfi NUMBER(15,2) DEFAULT 0;
1491 l_TotTxbRfi NUMBER(15,2) DEFAULT 0;
1492 l_GlbVal ff_globals_f.global_value%TYPE DEFAULT '0';
1493
1494 BEGIN
1495 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',1);
1496 -- Retrieve Balance Type ID's
1497 SELECT balance_type_id
1498 INTO l_NrfiBalID
1499 FROM pay_balance_types
1500 WHERE legislation_code = 'ZA'
1501 AND balance_name = 'Travel Allowance NRFI';
1502
1503 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',2);
1504
1505 SELECT balance_type_id
1506 INTO l_RfiBalID
1507 FROM pay_balance_types
1508 WHERE legislation_code = 'ZA'
1509 AND balance_name = 'Travel Allowance RFI';
1510
1511 -- Check Calc and setup correct values
1512 --
1513 IF py_za_tx_01032000.trc_CalTyp in ('DirCalc','NorCalc','SitCalc','YtdCalc') THEN
1514 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',3);
1515 -- Employee Tax Year Start and End Dates
1516 --
1517 l_StrtDate := GREATEST(py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032000.dbi_ZA_TX_YR_STRT);
1518 l_EndDate := LEAST(py_za_tx_01032000.dbi_ZA_ACT_END_DTE, py_za_tx_01032000.dbi_ZA_TX_YR_END,py_za_tx_01032000.dbi_ZA_CUR_PRD_END_DTE);
1519
1520 ELSIF py_za_tx_01032000.trc_CalTyp = 'CalCalc' THEN
1521 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',4);
1522 -- Employee Tax Year Start and End Dates
1523 --
1524 l_StrtDate := to_date('01-01-'||to_char(py_za_tx_01032000.dbi_ZA_TX_YR_STRT,'YYYY')||''||'','DD-MM-YYYY');
1525 l_EndDate := py_za_tx_01032000.dbi_ZA_TX_YR_STRT -1;
1526
1527 ELSIF py_za_tx_01032000.trc_CalTyp = 'LteCalc' THEN
1528 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',5);
1529 -- Employee Tax Year Start and End Dates
1530 --
1531 l_StrtDate := py_za_tx_01032000.dbi_ZA_TX_YR_STRT;
1532 l_EndDate := py_za_tx_01032000.dbi_ZA_CUR_PRD_END_DTE;
1533
1534 ELSIF py_za_tx_01032000.trc_CalTyp = 'PstCalc' THEN
1535 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',6);
1536 -- Employee Tax Year Start and End Dates
1537 --
1538 SELECT MIN(ptp.start_date) "StartDate"
1539 , MAX(ptp.end_date) "EndDate"
1540 INTO l_StrtDate
1541 , l_EndDate
1542 FROM per_time_periods ptp
1543 WHERE ptp.payroll_id = py_za_tx_01032000.con_PRL_ID
1544 AND ptp.prd_information1 = py_za_tx_01032000.trc_AsgTxYear
1545 GROUP BY ptp.prd_information1;
1546 END IF;
1547
1548 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',7);
1549
1550 -- Loop through cursor and for every end date calculate the balance
1551 FOR v_Date IN c_GlbEffDte
1552 (l_StrtDate
1553 ,l_EndDate
1554 )
1555 LOOP
1556 -- Nrfi Travel Allowance
1557 --
1558 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',8);
1559 -- Check Calc Type
1560 IF py_za_tx_01032000.trc_CalTyp IN ('DirCalc','NorCalc','SitCalc','YtdCalc','LteCalc','PstCalc') THEN
1561 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',9);
1562 -- Nrfi Balance At That Date
1563 -- 3491357
1564 /*l_NrfiYtd := py_za_bal.calc_asg_tax_ytd_date
1565 (py_za_tx_01032000.con_ASG_ID
1566 ,l_NrfiBalID
1567 ,v_Date.effective_end_date
1568 );*/
1569 l_NrfiYtd := py_za_bal.get_balance_value
1570 (py_za_tx_01032000.con_ASG_ID
1571 ,l_NrfiBalID
1572 , '_ASG_TAX_YTD'
1573 ,v_Date.effective_end_date
1574 );
1575 ELSIF py_za_tx_01032000.trc_CalTyp = 'CalCalc' THEN
1576 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',10);
1577 -- Nrfi Balance At That Date
1578 -- 3491357
1579 /*l_NrfiYtd := py_za_bal.calc_asg_cal_ytd_date
1580 (py_za_tx_01032000.con_ASG_ID
1581 ,l_NrfiBalID
1582 ,v_Date.effective_end_date
1583 );*/
1584 l_NrfiYtd := py_za_bal.get_balance_value
1585 (py_za_tx_01032000.con_ASG_ID
1586 ,l_NrfiBalID
1587 , '_ASG_CAL_YTD'
1588 ,v_Date.effective_end_date
1589 );
1590 END IF;
1591
1592 -- Take Off the Ytd value used already
1593 l_CurNrfiYtd := l_NrfiYtd - l_TotNrfiYtd;
1594 -- Update TotYtd value
1595 l_TotNrfiYtd := l_NrfiYtd;
1596 -- Get the Taxable Travel Allowance at that date
1597 l_CurTxbNrfi := l_CurNrfiYtd * v_Date.global_value/100;
1598 -- Add this to the total
1599 l_TotTxbNrfi := l_TotTxbNrfi + l_CurTxbNrfi;
1600
1601 -- Rfi Travel Allowance
1602 --
1603 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',11);
1604 -- Check Calc Type
1605 IF py_za_tx_01032000.trc_CalTyp in ('DirCalc','NorCalc','SitCalc','YtdCalc','LteCalc','PstCalc') THEN
1606 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',12);
1607 -- Rfi Balance At That Date
1608 -- 3491357
1609 /*l_RfiYtd := py_za_bal.calc_asg_tax_ytd_date
1610 (py_za_tx_01032000.con_ASG_ID
1611 ,l_RfiBalID
1612 ,v_Date.effective_end_date
1613 );*/
1614 l_RfiYtd := py_za_bal.get_balance_value
1615 (py_za_tx_01032000.con_ASG_ID
1616 ,l_RfiBalID
1617 ,'_ASG_TAX_YTD'
1618 ,v_Date.effective_end_date
1619 );
1620 ELSIF py_za_tx_01032000.trc_CalTyp = 'CalCalc' THEN
1621 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',13);
1622 -- Rfi Balance At That Date
1623 -- 3491357
1624 /*l_RfiYtd := py_za_bal.calc_asg_cal_ytd_date
1625 (py_za_tx_01032000.con_ASG_ID
1626 ,l_RfiBalID
1627 ,v_Date.effective_end_date
1628 );*/
1629 l_RfiYtd := py_za_bal.get_balance_value
1630 (py_za_tx_01032000.con_ASG_ID
1631 ,l_RfiBalID
1632 , '_ASG_CAL_YTD'
1633 ,v_Date.effective_end_date
1634 );
1635 END IF;
1636
1637 -- Take Off the Ytd value used already
1638 l_CurRfiYtd := l_RfiYtd - l_TotRfiYtd;
1639 -- Update TotYtd value
1640 l_TotRfiYtd := l_RfiYtd;
1641 -- Get the Taxable Travel Allowance at that date
1642 l_CurTxbRfi := l_CurRfiYtd * v_Date.global_value/100;
1643 -- Add this to the total
1644 l_TotTxbRfi := l_TotTxbRfi + l_CurTxbRfi;
1645
1646 END LOOP;
1647
1648 WriteHrTrace('l_CurNrfiYtd: '||to_char(l_CurNrfiYtd));
1649 WriteHrTrace('l_TotNrfiYtd: '||to_char(l_TotNrfiYtd));
1650 WriteHrTrace('l_CurTxbNrfi: '||to_char(l_CurTxbNrfi));
1651 WriteHrTrace('l_TotTxbNrfi: '||to_char(l_TotTxbNrfi));
1652 WriteHrTrace('l_CurRfiYtd: '||to_char(l_CurRfiYtd));
1653 WriteHrTrace('l_TotRfiYtd: '||to_char(l_TotRfiYtd));
1654 WriteHrTrace('l_CurTxbRfi: '||to_char(l_CurTxbRfi));
1655 WriteHrTrace('l_TotTxbRfi: '||to_char(l_TotTxbRfi));
1656
1657 -- Calculate the current Taxable Travel Allowance Value
1658 -- add this to any calculated in the loop
1659 --
1660 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',14);
1661 -- Check Calc TYPE
1662 IF py_za_tx_01032000.trc_CalTyp IN ('DirCalc','NorCalc','SitCalc','YtdCalc', 'LteCalc') THEN
1663 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',15);
1664 -- Balance Values
1665 l_NrfiYtd := py_za_tx_01032000.bal_TA_NRFI_YTD;
1666 l_RfiYtd := py_za_tx_01032000.bal_TA_RFI_YTD;
1667 -- Global Value
1668 l_GlbVal := py_za_tx_01032000.glb_ZA_TRV_ALL_TX_PRC;
1669
1670 ELSIF py_za_tx_01032000.trc_CalTyp = 'PstCalc' THEN
1671 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',16);
1672 -- Balance Values
1673 l_NrfiYtd := py_za_tx_01032000.bal_TA_NRFI_PTD;
1674 l_RfiYtd := py_za_tx_01032000.bal_TA_RFI_PTD;
1675 -- Global Value
1676 SELECT TO_NUMBER(global_value)
1677 INTO l_GlbVal
1678 FROM ff_globals_f
1679 WHERE l_EndDate between effective_start_date and effective_end_date
1680 AND global_name = 'ZA_CAR_ALLOW_TAX_PERC';
1681
1682 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',17);
1683
1684 ELSIF py_za_tx_01032000.trc_CalTyp = 'CalCalc' THEN
1685 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',18);
1686 -- Balance Values
1687 l_NrfiYtd := py_za_tx_01032000.bal_TA_NRFI_CYTD;
1688 l_RfiYtd := py_za_tx_01032000.bal_TA_RFI_CYTD;
1689
1690 -- Global Value
1691 SELECT TO_NUMBER(global_value)
1692 INTO l_GlbVal
1693 FROM ff_globals_f
1694 WHERE l_EndDate between effective_start_date and effective_end_date
1695 AND global_name = 'ZA_CAR_ALLOW_TAX_PERC';
1696
1697 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',19);
1698
1699 END IF;
1700
1701 WriteHrTrace('l_NrfiYtd: '||to_char(l_NrfiYtd));
1702 WriteHrTrace('l_RfiYtd: '||to_char(l_RfiYtd));
1703 WriteHrTrace('l_GlbVal: '||l_GlbVal);
1704
1705 -- Nrfi Travel Allowance
1706 --
1707 -- Take Off the Ytd value used already
1708 l_CurNrfiYtd := l_NrfiYtd - l_TotNrfiYtd;
1709 -- Update TotYtd value
1710 l_TotNrfiYtd := l_NrfiYtd;
1711 -- Get the Taxable Travel Allowance at that date
1712 l_CurTxbNrfi := l_CurNrfiYtd * l_GlbVal/100;
1713 -- Add this to the total
1714 l_TotTxbNrfi := l_TotTxbNrfi + l_CurTxbNrfi;
1715
1716 -- Rfi Travel Allowance
1717 --
1718 -- Take Off the Ytd value used already
1719 l_CurRfiYtd := l_RfiYtd - l_TotRfiYtd;
1720 -- Update TotYtd value
1721 l_TotRfiYtd := l_RfiYtd;
1722 -- Get the Taxable Travel Allowance at that date
1723 l_CurTxbRfi := l_CurRfiYtd * l_GlbVal/100;
1724 -- Add this to the total
1725 l_TotTxbRfi := l_TotTxbRfi + l_CurTxbRfi;
1726
1727 -- Update Globals
1728 -- Check Calc Type
1729 IF py_za_tx_01032000.trc_CalTyp IN ('DirCalc','NorCalc','SitCalc','YtdCalc', 'LteCalc') THEN
1730 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',20);
1731 py_za_tx_01032000.bal_TA_NRFI_YTD := l_TotTxbNrfi;
1732 py_za_tx_01032000.bal_TA_RFI_YTD := l_TotTxbRfi;
1733 ELSIF py_za_tx_01032000.trc_CalTyp = 'PstCalc' THEN
1734 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',21);
1735 py_za_tx_01032000.bal_TA_NRFI_PTD := l_TotTxbNrfi;
1736 py_za_tx_01032000.bal_TA_RFI_PTD := l_TotTxbRfi;
1737 ELSIF py_za_tx_01032000.trc_CalTyp = 'CalCalc' THEN
1738 hr_utility.set_location('py_za_tx_utl_01032000.TrvAll',22);
1739 py_za_tx_01032000.bal_TA_NRFI_CYTD := l_TotTxbNrfi;
1740 py_za_tx_01032000.bal_TA_RFI_CYTD := l_TotTxbRfi;
1741 END IF;
1742
1743 WriteHrTrace('l_TotTxbNrfi: '||to_char(l_TotTxbNrfi));
1744 WriteHrTrace('l_TotTxbRfi: '||to_char(l_TotTxbRfi));
1745
1746 EXCEPTION
1747 WHEN OTHERS THEN
1748 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
1749 py_za_tx_01032000.xpt_Msg := 'TrvAll: '||TO_CHAR(SQLCODE);
1750 END IF;
1751 RAISE py_za_tx_01032000.xpt_E;
1752 END TrvAll;
1753
1754
1755
1756 PROCEDURE NpVal(
1757 p_Rf IN BOOLEAN DEFAULT FALSE -- Refund Allowed Regardless
1758 )
1759 AS
1760
1761 -- Type Declaration
1762 --
1763 TYPE r_Row IS RECORD(
1764 Ovrrde BOOLEAN
1765 ,Lib NUMBER
1766 );
1767
1768 TYPE t_Table IS TABLE OF r_Row
1769 INDEX BY BINARY_INTEGER;
1770 -- Variable Declaration
1771 --
1772 t_Liabilities t_Table;
1773
1774 l_TotLib NUMBER(15,2); -- Total Liability
1775 l_TotNp NUMBER(15,2); -- Total Net Pay
1776 l_RecVal NUMBER(15,2); -- Recovery Value
1777 l_NewLib NUMBER(15,2); -- New Liability
1778 i NUMBER; -- Counter
1779
1780 BEGIN
1781 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',1);
1782 -- Set up the Table
1783 t_Liabilities(1).Ovrrde := py_za_tx_01032000.trc_NpValNIOvr;
1784 t_Liabilities(1).Lib := py_za_tx_01032000.trc_LibFpNI;
1785
1786 t_Liabilities(2).Ovrrde := py_za_tx_01032000.trc_NpValFBOvr;
1787 t_Liabilities(2).Lib := py_za_tx_01032000.trc_LibFpFB;
1788
1789 t_Liabilities(3).Ovrrde := py_za_tx_01032000.trc_NpValTAOvr;
1790 t_Liabilities(3).Lib := py_za_tx_01032000.trc_LibFpTA;
1791
1792 t_Liabilities(4).Ovrrde := py_za_tx_01032000.trc_NpValBPOvr;
1793 t_Liabilities(4).Lib := py_za_tx_01032000.trc_LibFpBP;
1794
1795 t_Liabilities(5).Ovrrde := py_za_tx_01032000.trc_NpValABOvr;
1796 t_Liabilities(5).Lib := py_za_tx_01032000.trc_LibFpAB;
1797
1798 t_Liabilities(6).Ovrrde := py_za_tx_01032000.trc_NpValAPOvr;
1799 t_Liabilities(6).Lib := py_za_tx_01032000.trc_LibFpAP;
1800
1801 t_Liabilities(7).Ovrrde := py_za_tx_01032000.trc_NpValPOOvr;
1802 t_Liabilities(7).Lib := py_za_tx_01032000.trc_LibFpPO;
1803
1804 IF py_za_tx_01032000.trc_NpValNIOvr THEN
1805 WriteHrTrace('py_za_tx_01032000.trc_NpValNIOvr: TRUE');
1806 ELSE
1807 WriteHrTrace('py_za_tx_01032000.trc_NpValNIOvr: FALSE');
1808 END IF;
1809 WriteHrTrace('py_za_tx_01032000.trc_LibFpNI: '||to_char(py_za_tx_01032000.trc_LibFpNI));
1810 IF py_za_tx_01032000.trc_NpValFBOvr THEN
1811 WriteHrTrace('py_za_tx_01032000.trc_NpValFBOvr: TRUE');
1812 ELSE
1813 WriteHrTrace('py_za_tx_01032000.trc_NpValFBOvr: FALSE');
1814 END IF;
1815 WriteHrTrace('py_za_tx_01032000.trc_LibFpFB: '||to_char(py_za_tx_01032000.trc_LibFpFB));
1816 IF py_za_tx_01032000.trc_NpValTAOvr THEN
1817 WriteHrTrace('py_za_tx_01032000.trc_NpValTAOvr: TRUE');
1818 ELSE
1819 WriteHrTrace('py_za_tx_01032000.trc_NpValTAOvr: FALSE');
1820 END IF;
1821 WriteHrTrace('py_za_tx_01032000.trc_LibFpTA: '||to_char(py_za_tx_01032000.trc_LibFpTA));
1822 IF py_za_tx_01032000.trc_NpValBPOvr THEN
1823 WriteHrTrace('py_za_tx_01032000.trc_NpValBPOvr: TRUE');
1824 ELSE
1825 WriteHrTrace('py_za_tx_01032000.trc_NpValBPOvr: FALSE');
1826 END IF;
1827 WriteHrTrace('py_za_tx_01032000.trc_LibFpBP: '||to_char(py_za_tx_01032000.trc_LibFpBP));
1828 IF py_za_tx_01032000.trc_NpValABOvr THEN
1829 WriteHrTrace('py_za_tx_01032000.trc_NpValABOvr: TRUE');
1830 ELSE
1831 WriteHrTrace('py_za_tx_01032000.trc_NpValABOvr: FALSE');
1832 END IF;
1833 WriteHrTrace('py_za_tx_01032000.trc_LibFpAB: '||to_char(py_za_tx_01032000.trc_LibFpAB));
1834 IF py_za_tx_01032000.trc_NpValAPOvr THEN
1835 WriteHrTrace('py_za_tx_01032000.trc_NpValAPOvr: TRUE');
1836 ELSE
1837 WriteHrTrace('py_za_tx_01032000.trc_NpValAPOvr: FALSE');
1838 END IF;
1839 WriteHrTrace('py_za_tx_01032000.trc_LibFpAP: '||to_char(py_za_tx_01032000.trc_LibFpAP));
1840 IF py_za_tx_01032000.trc_NpValPOOvr THEN
1841 WriteHrTrace('py_za_tx_01032000.trc_NpValPOOvr: TRUE');
1842 ELSE
1843 WriteHrTrace('py_za_tx_01032000.trc_NpValPOOvr: FALSE');
1844 END IF;
1845 WriteHrTrace('py_za_tx_01032000.trc_LibFpPO: '||to_char(py_za_tx_01032000.trc_LibFpPO));
1846
1847 -- Sum the Liabilities
1848 l_TotLib :=
1849 ( py_za_tx_01032000.trc_LibFpNI
1850 + py_za_tx_01032000.trc_LibFpFB
1851 + py_za_tx_01032000.trc_LibFpTA
1852 + py_za_tx_01032000.trc_LibFpBP
1853 + py_za_tx_01032000.trc_LibFpAB
1854 + py_za_tx_01032000.trc_LibFpAP
1855 + py_za_tx_01032000.trc_LibFpPO
1856 );
1857
1858 -- Set Net Pay
1859 l_TotNp := py_za_tx_01032000.bal_NET_PAY_RUN;
1860 WriteHrTrace('l_TotNp: '||to_char(l_TotNp));
1861 -- Start Validation
1862 --
1863 IF l_TotLib = 0 THEN
1864 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',2);
1865 NULL;
1866 ELSIF l_TotLib > 0 THEN
1867 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',3);
1868 IF l_TotNp > 0 THEN
1869 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',4);
1870 IF l_TotLib = l_TotNp THEN
1871 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',5);
1872 NULL;
1873 ELSIF l_TotLib > l_TotNp THEN
1874 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',6);
1875 l_RecVal := l_TotLib - l_TotNp;
1876 i:= 1;
1877
1878 FOR i IN 1..7 LOOP
1879 IF t_Liabilities(i).Lib = 0 THEN
1880 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',7);
1881 NULL;
1882 ELSIF t_Liabilities(i).Lib > 0 THEN
1883 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',8);
1884 l_NewLib := t_Liabilities(i).Lib - LEAST(t_Liabilities(i).Lib,l_RecVal);
1885 l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
1886 t_Liabilities(i).Lib := l_NewLib;
1887 py_za_tx_01032000.trc_LibWrn := 'Warning: Net Pay Balance not enough for Tax Recovery';
1888 ELSE -- lib < 0
1889 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',9);
1890 NULL;
1891 END IF;
1892 END LOOP;
1893
1894 ELSE -- l_TotLib > 0,l_TotNp > 0,l_TotLib < l_TotNp
1895 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',10);
1896 NULL;
1897 END IF;
1898
1899 ELSE -- l_TotLib > 0,l_TotNp <= 0
1900 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',11);
1901 l_RecVal := l_TotLib;
1902 i := 1;
1903
1904 FOR i IN 1..7 LOOP
1905 IF t_Liabilities(i).Lib > 0 THEN
1906 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',12);
1907 l_NewLib := t_Liabilities(i).Lib - LEAST(t_Liabilities(i).Lib,l_RecVal);
1908 l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
1909 t_Liabilities(i).Lib := l_NewLib;
1910 py_za_tx_01032000.trc_LibWrn := 'Warning: Net Pay Balance not enough for Tax Recovery';
1911 END IF;
1912 END LOOP;
1913 END IF;
1914
1915 ELSE -- l_TotLib < 0
1916 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',13);
1917 IF p_Rf THEN
1918 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',14);
1919 NULL;
1920 ELSE
1921 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',15);
1922 l_RecVal := l_TotLib;
1923 i := 1;
1924 FOR i IN 1..7 LOOP
1925 IF t_Liabilities(i).Lib >= 0 THEN
1926 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',16);
1927 NULL;
1928 ELSE -- l_lib < 0
1929 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',17);
1930 -- Has the liability been Overridden?
1931 IF t_Liabilities(i).Ovrrde THEN
1932 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',18);
1933 NULL;
1934 ELSE
1935 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',19);
1936 l_NewLib := t_Liabilities(i).Lib - GREATEST(t_Liabilities(i).Lib,l_RecVal);
1937 l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
1938 t_Liabilities(i).Lib := l_NewLib;
1939 END IF;
1940 END IF;
1941 END LOOP;
1942 END IF;
1943 END IF;
1944
1945 hr_utility.set_location('py_za_tx_utl_01032000.NpVal',20);
1946
1947 py_za_tx_01032000.trc_LibFpNI := t_Liabilities(1).Lib;
1948 py_za_tx_01032000.trc_LibFpFB := t_Liabilities(2).Lib;
1949 py_za_tx_01032000.trc_LibFpTA := t_Liabilities(3).Lib;
1950 py_za_tx_01032000.trc_LibFpBP := t_Liabilities(4).Lib;
1951 py_za_tx_01032000.trc_LibFpAB := t_Liabilities(5).Lib;
1952 py_za_tx_01032000.trc_LibFpAP := t_Liabilities(6).Lib;
1953 py_za_tx_01032000.trc_LibFpPO := t_Liabilities(7).Lib;
1954
1955 WriteHrTrace('py_za_tx_01032000.trc_LibFpNI: '||to_char(py_za_tx_01032000.trc_LibFpNI));
1956 WriteHrTrace('py_za_tx_01032000.trc_LibFpFB: '||to_char(py_za_tx_01032000.trc_LibFpFB));
1957 WriteHrTrace('py_za_tx_01032000.trc_LibFpTA: '||to_char(py_za_tx_01032000.trc_LibFpTA));
1958 WriteHrTrace('py_za_tx_01032000.trc_LibFpBP: '||to_char(py_za_tx_01032000.trc_LibFpBP));
1959 WriteHrTrace('py_za_tx_01032000.trc_LibFpAB: '||to_char(py_za_tx_01032000.trc_LibFpAB));
1960 WriteHrTrace('py_za_tx_01032000.trc_LibFpAP: '||to_char(py_za_tx_01032000.trc_LibFpAP));
1961 WriteHrTrace('py_za_tx_01032000.trc_LibFpPO: '||to_char(py_za_tx_01032000.trc_LibFpPO));
1962
1963 EXCEPTION
1964 WHEN OTHERS THEN
1965 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
1966 py_za_tx_01032000.xpt_Msg := 'NpVal: '||TO_CHAR(SQLCODE);
1967 END IF;
1968 RAISE py_za_tx_01032000.xpt_E;
1969 END NpVal;
1970
1971
1972 -- DaysWorked
1973 /* Returns the number of days that the person has worked
1974 This could be a negative number that would indicate
1975 a LatePayePeriod
1976 */
1977 FUNCTION DaysWorked RETURN NUMBER
1978 AS
1979 l_DaysWorked NUMBER;
1980 l_EndDte DATE;
1981 l_StrtDte DATE;
1982
1983 BEGIN
1984 IF py_za_tx_01032000.trc_CalTyp = 'YtdCalc' THEN
1985 hr_utility.set_location('py_za_tx_utl_01032000.DaysWorked',1);
1986 l_EndDte := py_za_tx_01032000.dbi_ZA_CUR_PRD_STRT_DTE - 1;
1987 l_StrtDte := GREATEST(py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032000.dbi_ZA_TX_YR_STRT);
1988
1989 ELSIF py_za_tx_01032000.trc_CalTyp = 'CalCalc' THEN
1990 hr_utility.set_location('py_za_tx_utl_01032000.DaysWorked',2);
1991 l_EndDte := py_za_tx_01032000.dbi_ZA_TX_YR_STRT - 1;
1992 l_StrtDte := GREATEST(py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE,
1993 to_date('01-JAN-'||to_char(to_number(to_char(py_za_tx_01032000.dbi_ZA_TX_YR_END,'YYYY'))-1),'DD/MM/YYYY'));
1994
1995 ELSIF py_za_tx_01032000.trc_CalTyp = 'SitCalc' AND
1996 ( py_za_tx_01032000.trc_RetroInPeriod
1997 OR py_za_tx_01032000.trc_OvrTxCalc
1998 )THEN
1999 hr_utility.set_location('py_za_tx_utl_01032000.DaysWorked',3);
2000 l_EndDte := LEAST(py_za_tx_01032000.dbi_ZA_ACT_END_DTE, py_za_tx_01032000.dbi_ZA_CUR_PRD_END_DTE);
2001 l_StrtDte := GREATEST(py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032000.dbi_ZA_TX_YR_STRT);
2002
2003 ELSIF py_za_tx_01032000.trc_CalTyp = 'SitCalc' THEN
2004 hr_utility.set_location('py_za_tx_utl_01032000.DaysWorked',4);
2005 l_EndDte := LEAST(py_za_tx_01032000.dbi_ZA_ACT_END_DTE, py_za_tx_01032000.dbi_ZA_TX_YR_END);
2006 l_StrtDte := GREATEST(py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE, py_za_tx_01032000.dbi_ZA_TX_YR_STRT);
2007
2008 ELSIF py_za_tx_01032000.trc_CalTyp = 'PstCalc' THEN
2009 hr_utility.set_location('py_za_tx_utl_01032000.DaysWorked',5);
2010 l_EndDte := py_za_tx_01032000.dbi_ZA_ACT_END_DTE;
2011 -- Get Asg Start Date
2012 SELECT MIN(ptp.start_date)
2013 INTO l_StrtDte
2014 FROM per_time_periods ptp
2015 WHERE ptp.prd_information1 = py_za_tx_01032000.trc_AsgTxYear
2016 AND ptp.payroll_id = py_za_tx_01032000.con_PRL_ID;
2017
2018 hr_utility.set_location('py_za_tx_utl_01032000.DaysWorked',6);
2019
2020 l_StrtDte := GREATEST(py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE, l_StrtDte);
2021 END IF;
2022
2023 l_DaysWorked := l_EndDte - l_StrtDte + 1; -- remember about the zero!!!!!
2024
2025 WriteHrTrace('l_EndDte: '||to_char(l_EndDte,'DD/MM/YYYY'));
2026 WriteHrTrace('l_StrtDte: '||to_char(l_StrtDte,'DD/MM/YYYY'));
2027 WriteHrTrace('l_DaysWorked: '||to_char(l_DaysWorked));
2028
2029 RETURN l_DaysWorked;
2030
2031 EXCEPTION
2032 WHEN OTHERS THEN
2033 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
2034 py_za_tx_01032000.xpt_Msg := 'DaysWorked: '||TO_CHAR(SQLCODE);
2035 END IF;
2036 RAISE py_za_tx_01032000.xpt_E;
2037 END DaysWorked;
2038
2039
2040 PROCEDURE SitPaySplit
2041 AS
2042 l_TxOnSitLim NUMBER(15,2);
2043 l_SitAblTx NUMBER(15,2);
2044 BEGIN
2045 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',1);
2046 -- Directive Type Statuses
2047 --
2048 IF py_za_tx_01032000.dbi_TX_STA IN ('C','D','E','F','J','K','L') THEN
2049 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',2);
2050 -- Check for SitePeriod
2051 IF SitePeriod THEN
2052 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',3);
2053 py_za_tx_01032000.trc_PayeVal :=
2054 ( py_za_tx_01032000.bal_TAX_YTD
2055 + py_za_tx_01032000.trc_LibFpNI
2056 + py_za_tx_01032000.trc_LibFpFB
2057 + py_za_tx_01032000.trc_LibFpTA
2058 + py_za_tx_01032000.trc_LibFpBP
2059 + py_za_tx_01032000.trc_LibFpAB
2060 + py_za_tx_01032000.trc_LibFpAP
2061 + py_za_tx_01032000.trc_LibFpPO
2062 ) - py_za_tx_01032000.bal_PAYE_YTD;
2063 py_za_tx_01032000.trc_SiteVal := -1*py_za_tx_01032000.bal_SITE_YTD;
2064 ELSE
2065 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',4);
2066 py_za_tx_01032000.trc_PayeVal := -1*py_za_tx_01032000.bal_PAYE_YTD;
2067 py_za_tx_01032000.trc_SiteVal := -1*py_za_tx_01032000.bal_SITE_YTD;
2068 END IF;
2069 -- Normal Type Statuses
2070 --
2071 ELSIF py_za_tx_01032000.dbi_TX_STA IN ('A','B') THEN
2072 IF (SitePeriod AND NOT PreErnPeriod) OR LatePayPeriod THEN
2073 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',5);
2074 -- Get the Tax Liability on the Site Limit
2075 l_TxOnSitLim := TaxLiability(p_Amt => py_za_tx_01032000.glb_ZA_SIT_LIM)/py_za_tx_01032000.trc_SitFactor;
2076 -- Get the Tax Amount Liable for SITE
2077 l_SitAblTx :=
2078 ( py_za_tx_01032000.bal_TX_ON_NI_YTD
2079 + py_za_tx_01032000.bal_TX_ON_FB_YTD
2080 + py_za_tx_01032000.bal_TX_ON_BP_YTD
2081 + py_za_tx_01032000.bal_TX_ON_AB_YTD
2082 + py_za_tx_01032000.bal_TX_ON_AP_YTD
2083 + py_za_tx_01032000.trc_LibFpNI
2084 + py_za_tx_01032000.trc_LibFpFB
2085 + py_za_tx_01032000.trc_LibFpBP
2086 + py_za_tx_01032000.trc_LibFpAB
2087 + py_za_tx_01032000.trc_LibFpAP
2088 );
2089 -- Check the Limit
2090 IF l_SitAblTx > l_TxOnSitLim THEN
2091 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',6);
2092 py_za_tx_01032000.trc_SiteVal := l_TxOnSitLim - py_za_tx_01032000.bal_SITE_YTD;
2093 py_za_tx_01032000.trc_PayeVal := (
2094 ( py_za_tx_01032000.bal_TAX_YTD
2095 + py_za_tx_01032000.trc_LibFpNI
2096 + py_za_tx_01032000.trc_LibFpFB
2097 + py_za_tx_01032000.trc_LibFpBP
2098 + py_za_tx_01032000.trc_LibFpAB
2099 + py_za_tx_01032000.trc_LibFpAP
2100 + py_za_tx_01032000.trc_LibFpTA
2101 + py_za_tx_01032000.trc_LibFpPO
2102 ) - l_TxOnSitLim) - py_za_tx_01032000.bal_PAYE_YTD;
2103
2104 ELSE
2105 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',7);
2106 IF ( py_za_tx_01032000.bal_TX_ON_TA_YTD
2107 + py_za_tx_01032000.trc_LibFpTA
2108 + py_za_tx_01032000.bal_TX_ON_PO_YTD
2109 + py_za_tx_01032000.trc_LibFpPO
2110 ) <= 0 THEN
2111 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',8);
2112 py_za_tx_01032000.trc_SiteVal := ( py_za_tx_01032000.bal_TAX_YTD
2113 + py_za_tx_01032000.trc_LibFpNI
2114 + py_za_tx_01032000.trc_LibFpFB
2115 + py_za_tx_01032000.trc_LibFpBP
2116 + py_za_tx_01032000.trc_LibFpAB
2117 + py_za_tx_01032000.trc_LibFpAP
2118 + py_za_tx_01032000.trc_LibFpTA
2119 + py_za_tx_01032000.trc_LibFpPO) - py_za_tx_01032000.bal_SITE_YTD;
2120
2121 py_za_tx_01032000.trc_PayeVal := -1*py_za_tx_01032000.bal_PAYE_YTD;
2122 ELSE
2123 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',9);
2124 py_za_tx_01032000.trc_SiteVal := l_SitAblTx - py_za_tx_01032000.bal_SITE_YTD;
2125
2126 py_za_tx_01032000.trc_PayeVal := (
2127 ( py_za_tx_01032000.bal_TAX_YTD
2128 + py_za_tx_01032000.trc_LibFpNI
2129 + py_za_tx_01032000.trc_LibFpFB
2130 + py_za_tx_01032000.trc_LibFpBP
2131 + py_za_tx_01032000.trc_LibFpAB
2132 + py_za_tx_01032000.trc_LibFpAP
2133 + py_za_tx_01032000.trc_LibFpTA
2134 + py_za_tx_01032000.trc_LibFpPO
2135 ) - l_SitAblTx) - py_za_tx_01032000.bal_PAYE_YTD;
2136 END IF;
2137 END IF;
2138 ELSE
2139 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',10);
2140 py_za_tx_01032000.trc_PayeVal := -1*py_za_tx_01032000.bal_PAYE_YTD;
2141 py_za_tx_01032000.trc_SiteVal := -1*py_za_tx_01032000.bal_SITE_YTD;
2142 END IF;
2143 -- Seasonal Worker Status
2144 --
2145 ELSIF py_za_tx_01032000.dbi_TX_STA = 'G' THEN
2146 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',11);
2147 -- Get the SitFactor YTD
2148 py_za_tx_01032000.trc_SitFactor := py_za_tx_01032000.glb_ZA_WRK_DYS_PR_YR / py_za_tx_01032000.bal_TOT_SEA_WRK_DYS_WRK_YTD;
2149 -- Get the Tax Liability on the Site Limit
2150 l_TxOnSitLim := TaxLiability(p_Amt => py_za_tx_01032000.glb_ZA_SIT_LIM)/py_za_tx_01032000.trc_SitFactor;
2151 -- Get the Tax Amount Liable for SITE
2152 l_SitAblTx :=
2153 ( py_za_tx_01032000.bal_TX_ON_NI_YTD
2154 + py_za_tx_01032000.bal_TX_ON_FB_YTD
2155 + py_za_tx_01032000.bal_TX_ON_AP_YTD
2156 + py_za_tx_01032000.trc_LibFpNI
2157 + py_za_tx_01032000.trc_LibFpFB
2158 + py_za_tx_01032000.trc_LibFpAP
2159 );
2160 -- Check the Limit
2161 IF l_SitAblTx > l_TxOnSitLim THEN
2162 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',12);
2163 py_za_tx_01032000.trc_SiteVal := l_TxOnSitLim - py_za_tx_01032000.bal_SITE_YTD;
2164 py_za_tx_01032000.trc_PayeVal := ((py_za_tx_01032000.bal_TX_ON_PO_YTD+py_za_tx_01032000.trc_LibFpPO) +(l_SitAblTx - l_TxOnSitLim)) - py_za_tx_01032000.bal_PAYE_YTD;
2165 ELSE
2166 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',13);
2167 py_za_tx_01032000.trc_SiteVal := l_SitAblTx - py_za_tx_01032000.bal_SITE_YTD;
2168 py_za_tx_01032000.trc_PayeVal := py_za_tx_01032000.bal_TX_ON_PO_YTD + py_za_tx_01032000.trc_LibFpPO - py_za_tx_01032000.bal_PAYE_YTD;
2169 END IF;
2170 -- All Other Statuses
2171 --
2172 ELSE -- set the globals to zero
2173 hr_utility.set_location('py_za_tx_utl_01032000.SitPaySplit',14);
2174 py_za_tx_01032000.trc_PayeVal := 0 - py_za_tx_01032000.bal_PAYE_YTD;
2175 py_za_tx_01032000.trc_SiteVal := 0 - py_za_tx_01032000.bal_SITE_YTD;
2176 END IF;
2177
2178 EXCEPTION
2179 WHEN OTHERS THEN
2180 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
2181 py_za_tx_01032000.xpt_Msg := 'SitPaySplit: '||TO_CHAR(SQLCODE);
2182 END IF;
2183 RAISE py_za_tx_01032000.xpt_E;
2184 END SitPaySplit;
2185
2186
2187 -- Trace Function
2188 --
2189 PROCEDURE Trace AS
2190 BEGIN
2191
2192 /*DELETE FROM pay_za_tax_traces pztt
2193 WHERE pztt.prl_act_id not in (
2194 SELECT payroll_action_id
2195 from pay_payroll_actions)
2196 */
2197 INSERT INTO pay_za_tax_traces(
2198 ASG_ACT_ID
2199 ,ASG_ID
2200 ,PRL_ACT_ID
2201 ,PRL_ID
2202 ,TX_STA
2203 ,PER_AGE
2204 ,CalTyp
2205 ,TX_DIR_VAL
2206 ,It3Ind
2207 ,TxPercVal
2208 ,ASG_STRT_DTE
2209 ,ZA_ACT_END_DTE
2210 ,ZA_CUR_PRD_STRT_DTE
2211 ,ZA_CUR_PRD_END_DTE
2212 ,ZA_TX_YR_STRT
2213 ,ZA_TX_YR_END
2214 ,SES_DTE
2215 ,PrdFactor
2216 ,PosFactor
2217 ,SitFactor
2218 ,ZA_PAY_PRDS_LFT
2219 ,ZA_PAY_PRDS_PER_YR
2220 ,ZA_DYS_IN_YR
2221 ,SEA_WRK_DYS_WRK
2222 ,ARR_PF_FRQ
2223 ,ARR_RA_FRQ
2224 ,BP_TX_RCV
2225 ,RA_FRQ
2226 ,TxbIncPtd
2227 ,BseErn
2228 ,TxbBseInc
2229 ,TotLibBse
2230 ,TxbIncYtd
2231 ,PerTxbInc
2232 ,PerPenFnd
2233 ,PerRfiCon
2234 ,PerRfiTxb
2235 ,PerPenFndMax
2236 ,PerPenFndAbm
2237 ,AnnTxbInc
2238 ,AnnPenFnd
2239 ,AnnRfiCon
2240 ,AnnRfiTxb
2241 ,AnnPenFndMax
2242 ,AnnPenFndAbm
2243 ,ArrPenFnd
2244 ,ArrPenFndAbm
2245 ,RetAnu
2246 ,NrfiCon
2247 ,RetAnuMax
2248 ,RetAnuAbm
2249 ,ArrRetAnu
2250 ,ArrRetAnuAbm
2251 ,Rebate
2252 ,Threshold
2253 ,MedAidAbm
2254 ,PerTotAbm
2255 ,AnnTotAbm
2256 ,NorIncYtd
2257 ,NorIncPtd
2258 ,NorErn
2259 ,TxbNorInc
2260 ,LibFyNI
2261 ,TX_ON_NI_YTD
2262 ,TX_ON_NI_PTD
2263 ,LibFpNI
2264 ,FrnBenYtd
2265 ,FrnBenPtd
2266 ,FrnBenErn
2267 ,TxbFrnInc
2268 ,LibFyFB
2269 ,TX_ON_FB_YTD
2270 ,TX_ON_FB_PTD
2271 ,LibFpFB
2272 ,TrvAllYtd
2273 ,TrvAllPtd
2274 ,TrvAllErn
2275 ,TxbTrvInc
2276 ,LibFyTA
2277 ,TX_ON_TA_YTD
2278 ,TX_ON_TA_PTD
2279 ,LibFpTA
2280 ,BonProYtd
2281 ,BonProPtd
2282 ,BonProErn
2283 ,TxbBonProInc
2284 ,LibFyBP
2285 ,TX_ON_BP_YTD
2286 ,TX_ON_BP_PTD
2287 ,LibFpBP
2288 ,AnnBonYtd
2289 ,AnnBonErn
2290 ,TxbAnnBonInc
2291 ,LibFyAB
2292 ,TX_ON_AB_YTD
2293 ,TX_ON_AB_PTD
2294 ,LibFpAB
2295 ,AnnPymYtd
2296 ,AnnPymPtd
2297 ,AnnPymErn
2298 ,TxbAnnPymInc
2299 ,LibFyAP
2300 ,TX_ON_AP_YTD
2301 ,TX_ON_AP_PTD
2302 ,LibFpAP
2303 ,PblOffYtd
2304 ,PblOffPtd
2305 ,PblOffErn
2306 ,LibFyPO
2307 ,TX_ON_PO_YTD
2308 ,TX_ON_PO_PTD
2309 ,LibFpPO
2310 ,MsgTxStatus
2311 ,LibWrn
2312 ,PayValue
2313 ,PayeVal
2314 ,SiteVal
2315 )
2316 VALUES(
2317 py_za_tx_01032000.con_ASG_ACT_ID
2318 ,py_za_tx_01032000.con_ASG_ID
2319 ,py_za_tx_01032000.con_PRL_ACT_ID
2320 ,py_za_tx_01032000.con_PRL_ID
2321 ,py_za_tx_01032000.dbi_TX_STA
2322 ,py_za_tx_01032000.dbi_PER_AGE
2323 ,py_za_tx_01032000.trc_CalTyp
2324 ,py_za_tx_01032000.dbi_TX_DIR_VAL
2325 ,py_za_tx_01032000.trc_It3Ind
2326 ,py_za_tx_01032000.trc_TxPercVal
2327 ,py_za_tx_01032000.dbi_ZA_ACT_STRT_DTE
2328 ,py_za_tx_01032000.dbi_ZA_ACT_END_DTE
2329 ,py_za_tx_01032000.dbi_ZA_CUR_PRD_STRT_DTE
2330 ,py_za_tx_01032000.dbi_ZA_CUR_PRD_END_DTE
2331 ,py_za_tx_01032000.dbi_ZA_TX_YR_STRT
2332 ,py_za_tx_01032000.dbi_ZA_TX_YR_END
2333 ,py_za_tx_01032000.dbi_SES_DTE
2334 ,py_za_tx_01032000.trc_PrdFactor
2335 ,py_za_tx_01032000.trc_PosFactor
2336 ,py_za_tx_01032000.trc_SitFactor
2337 ,py_za_tx_01032000.dbi_ZA_PAY_PRDS_LFT
2338 ,py_za_tx_01032000.dbi_ZA_PAY_PRDS_PER_YR
2339 ,py_za_tx_01032000.dbi_ZA_DYS_IN_YR
2340 ,py_za_tx_01032000.dbi_SEA_WRK_DYS_WRK
2341 ,py_za_tx_01032000.dbi_ARR_PF_FRQ
2342 ,py_za_tx_01032000.dbi_ARR_RA_FRQ
2343 ,py_za_tx_01032000.dbi_BP_TX_RCV
2344 ,py_za_tx_01032000.dbi_RA_FRQ
2345 ,py_za_tx_01032000.trc_TxbIncPtd
2346 ,py_za_tx_01032000.trc_BseErn
2347 ,py_za_tx_01032000.trc_TxbBseInc
2348 ,py_za_tx_01032000.trc_TotLibBse
2349 ,py_za_tx_01032000.trc_TxbIncYtd
2350 ,py_za_tx_01032000.trc_PerTxbInc
2351 ,py_za_tx_01032000.trc_PerPenFnd
2352 ,py_za_tx_01032000.trc_PerRfiCon
2353 ,py_za_tx_01032000.trc_PerRfiTxb
2354 ,py_za_tx_01032000.trc_PerPenFndMax
2355 ,py_za_tx_01032000.trc_PerPenFndAbm
2356 ,py_za_tx_01032000.trc_AnnTxbInc
2357 ,py_za_tx_01032000.trc_AnnPenFnd
2358 ,py_za_tx_01032000.trc_AnnRfiCon
2359 ,py_za_tx_01032000.trc_AnnRfiTxb
2360 ,py_za_tx_01032000.trc_AnnPenFndMax
2361 ,py_za_tx_01032000.trc_AnnPenFndAbm
2362 ,py_za_tx_01032000.trc_ArrPenFnd
2363 ,py_za_tx_01032000.trc_ArrPenFndAbm
2364 ,py_za_tx_01032000.trc_RetAnu
2365 ,py_za_tx_01032000.trc_NrfiCon
2366 ,py_za_tx_01032000.trc_RetAnuMax
2367 ,py_za_tx_01032000.trc_RetAnuAbm
2368 ,py_za_tx_01032000.trc_ArrRetAnu
2369 ,py_za_tx_01032000.trc_ArrRetAnuAbm
2370 ,py_za_tx_01032000.trc_Rebate
2371 ,py_za_tx_01032000.trc_Threshold
2372 ,py_za_tx_01032000.trc_MedAidAbm
2373 ,py_za_tx_01032000.trc_PerTotAbm
2374 ,py_za_tx_01032000.trc_AnnTotAbm
2375 ,py_za_tx_01032000.trc_NorIncYtd
2376 ,py_za_tx_01032000.trc_NorIncPtd
2377 ,py_za_tx_01032000.trc_NorErn
2378 ,py_za_tx_01032000.trc_TxbNorInc
2379 ,py_za_tx_01032000.trc_LibFyNI
2380 ,py_za_tx_01032000.bal_TX_ON_NI_YTD
2381 ,py_za_tx_01032000.bal_TX_ON_NI_PTD
2382 ,py_za_tx_01032000.trc_LibFpNI
2383 ,py_za_tx_01032000.trc_FrnBenYtd
2384 ,py_za_tx_01032000.trc_FrnBenPtd
2385 ,py_za_tx_01032000.trc_FrnBenErn
2386 ,py_za_tx_01032000.trc_TxbFrnInc
2387 ,py_za_tx_01032000.trc_LibFyFB
2388 ,py_za_tx_01032000.bal_TX_ON_FB_YTD
2389 ,py_za_tx_01032000.bal_TX_ON_FB_PTD
2390 ,py_za_tx_01032000.trc_LibFpFB
2391 ,py_za_tx_01032000.trc_TrvAllYtd
2392 ,py_za_tx_01032000.trc_TrvAllPtd
2393 ,py_za_tx_01032000.trc_TrvAllErn
2394 ,py_za_tx_01032000.trc_TxbTrvInc
2395 ,py_za_tx_01032000.trc_LibFyTA
2396 ,py_za_tx_01032000.bal_TX_ON_TA_YTD
2397 ,py_za_tx_01032000.bal_TX_ON_TA_PTD
2398 ,py_za_tx_01032000.trc_LibFpTA
2399 ,py_za_tx_01032000.trc_BonProYtd
2400 ,py_za_tx_01032000.trc_BonProPtd
2401 ,py_za_tx_01032000.trc_BonProErn
2402 ,py_za_tx_01032000.trc_TxbBonProInc
2403 ,py_za_tx_01032000.trc_LibFyBP
2404 ,py_za_tx_01032000.bal_TX_ON_BP_YTD
2405 ,py_za_tx_01032000.bal_TX_ON_BP_PTD
2406 ,py_za_tx_01032000.trc_LibFpBP
2407 ,py_za_tx_01032000.trc_AnnBonYtd
2408 ,py_za_tx_01032000.trc_AnnBonErn
2409 ,py_za_tx_01032000.trc_TxbAnnBonInc
2410 ,py_za_tx_01032000.trc_LibFyAB
2411 ,py_za_tx_01032000.bal_TX_ON_AB_YTD
2412 ,py_za_tx_01032000.bal_TX_ON_AB_PTD
2413 ,py_za_tx_01032000.trc_LibFpAB
2414 ,py_za_tx_01032000.trc_AnnPymYtd
2415 ,py_za_tx_01032000.trc_AnnPymPtd
2416 ,py_za_tx_01032000.trc_AnnPymErn
2417 ,py_za_tx_01032000.trc_TxbAnnPymInc
2418 ,py_za_tx_01032000.trc_LibFyAP
2419 ,py_za_tx_01032000.bal_TX_ON_AP_YTD
2420 ,py_za_tx_01032000.bal_TX_ON_AP_PTD
2421 ,py_za_tx_01032000.trc_LibFpAP
2422 ,py_za_tx_01032000.trc_PblOffYtd
2423 ,py_za_tx_01032000.trc_PblOffPtd
2424 ,py_za_tx_01032000.trc_PblOffErn
2425 ,py_za_tx_01032000.trc_LibFyPO
2426 ,py_za_tx_01032000.bal_TX_ON_PO_YTD
2427 ,py_za_tx_01032000.bal_TX_ON_PO_PTD
2428 ,py_za_tx_01032000.trc_LibFpPO
2429 ,''
2430 ,py_za_tx_01032000.trc_LibWrn
2431 ,py_za_tx_01032000.trc_PayValue
2432 ,py_za_tx_01032000.trc_PayeVal
2433 ,py_za_tx_01032000.trc_SiteVal);
2434
2435 EXCEPTION
2436 WHEN OTHERS THEN
2437 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
2438 py_za_tx_01032000.xpt_Msg := 'Trace: '||TO_CHAR(SQLCODE);
2439 END IF;
2440 RAISE py_za_tx_01032000.xpt_E;
2441 END Trace;
2442
2443 PROCEDURE ClearGlobals AS
2444
2445 BEGIN
2446 hr_utility.set_location('py_za_tx_utl_01032000.ClearGlobals',1);
2447 -- Calculation Type
2448 py_za_tx_01032000.trc_CalTyp := 'Unknown';
2449 -- Factors
2450 py_za_tx_01032000.trc_TxbIncPtd := 0;
2451 py_za_tx_01032000.trc_PrdFactor := 0;
2452 py_za_tx_01032000.trc_PosFactor := 0;
2453 py_za_tx_01032000.trc_SitFactor := 1;
2454 -- Base Income
2455 py_za_tx_01032000.trc_BseErn := 0;
2456 py_za_tx_01032000.trc_TxbBseInc := 0;
2457 py_za_tx_01032000.trc_TotLibBse := 0;
2458 -- Period Pension Fund
2459 py_za_tx_01032000.trc_TxbIncYtd := 0;
2460 py_za_tx_01032000.trc_PerTxbInc := 0;
2461 py_za_tx_01032000.trc_PerPenFnd := 0;
2462 py_za_tx_01032000.trc_PerRfiCon := 0;
2463 py_za_tx_01032000.trc_PerRfiTxb := 0;
2464 py_za_tx_01032000.trc_PerPenFndMax := 0;
2465 py_za_tx_01032000.trc_PerPenFndAbm := 0;
2466 -- Annual Pension Fund
2467 py_za_tx_01032000.trc_AnnTxbInc := 0;
2468 py_za_tx_01032000.trc_AnnPenFnd := 0;
2469 py_za_tx_01032000.trc_AnnRfiCon := 0;
2470 py_za_tx_01032000.trc_AnnRfiTxb := 0;
2471 py_za_tx_01032000.trc_AnnPenFndMax := 0;
2472 py_za_tx_01032000.trc_AnnPenFndAbm := 0;
2473 -- Arrear Pension
2474 py_za_tx_01032000.trc_ArrPenFnd := 0;
2475 py_za_tx_01032000.trc_ArrPenFndAbm := 0;
2476 py_za_tx_01032000.trc_PfUpdFig := 0;
2477 -- Retirement Annuity
2478 py_za_tx_01032000.trc_RetAnu := 0;
2479 py_za_tx_01032000.trc_NrfiCon := 0;
2480 py_za_tx_01032000.trc_RetAnuMax := 0;
2481 py_za_tx_01032000.trc_RetAnuAbm := 0;
2482 -- Arrear Retirement Annuity
2483 py_za_tx_01032000.trc_ArrRetAnu := 0;
2484 py_za_tx_01032000.trc_ArrRetAnuAbm := 0;
2485 py_za_tx_01032000.trc_RaUpdFig := 0;
2486 -- Rebates Thresholds and Med Aid
2487 py_za_tx_01032000.trc_Rebate := 0;
2488 py_za_tx_01032000.trc_Threshold := 0;
2489 py_za_tx_01032000.trc_MedAidAbm := 0;
2490 -- Abatement Totals
2491 py_za_tx_01032000.trc_PerTotAbm := 0;
2492 py_za_tx_01032000.trc_AnnTotAbm := 0;
2493 -- Normal Income
2494 py_za_tx_01032000.trc_NorIncYtd := 0;
2495 py_za_tx_01032000.trc_NorIncPtd := 0;
2496 py_za_tx_01032000.trc_NorErn := 0;
2497 py_za_tx_01032000.trc_TxbNorInc := 0;
2498 py_za_tx_01032000.trc_TotLibNI := 0;
2499 py_za_tx_01032000.trc_LibFyNI := 0;
2500 py_za_tx_01032000.trc_LibFpNI := 0;
2501 -- Fringe Benefits
2502 py_za_tx_01032000.trc_FrnBenYtd := 0;
2503 py_za_tx_01032000.trc_FrnBenPtd := 0;
2504 py_za_tx_01032000.trc_FrnBenErn := 0;
2505 py_za_tx_01032000.trc_TxbFrnInc := 0;
2506 py_za_tx_01032000.trc_TotLibFB := 0;
2507 py_za_tx_01032000.trc_LibFyFB := 0;
2508 py_za_tx_01032000.trc_LibFpFB := 0;
2509 -- Travel Allowance
2510 py_za_tx_01032000.trc_TrvAllYtd := 0;
2511 py_za_tx_01032000.trc_TrvAllPtd := 0;
2512 py_za_tx_01032000.trc_TrvAllErn := 0;
2513 py_za_tx_01032000.trc_TxbTrvInc := 0;
2514 py_za_tx_01032000.trc_TotLibTA := 0;
2515 py_za_tx_01032000.trc_LibFyTA := 0;
2516 py_za_tx_01032000.trc_LibFpTA := 0;
2517 -- Bonus Provision
2518 py_za_tx_01032000.trc_BonProYtd := 0;
2519 py_za_tx_01032000.trc_BonProPtd := 0;
2520 py_za_tx_01032000.trc_BonProErn := 0;
2521 py_za_tx_01032000.trc_TxbBonProInc := 0;
2522 py_za_tx_01032000.trc_TotLibBP := 0;
2523 py_za_tx_01032000.trc_LibFyBP := 0;
2524 py_za_tx_01032000.trc_LibFpBP := 0;
2525 -- Annual Bonus
2526 py_za_tx_01032000.trc_AnnBonYtd := 0;
2527 py_za_tx_01032000.trc_AnnBonPtd := 0;
2528 py_za_tx_01032000.trc_AnnBonErn := 0;
2529 py_za_tx_01032000.trc_TxbAnnBonInc := 0;
2530 py_za_tx_01032000.trc_TotLibAB := 0;
2531 py_za_tx_01032000.trc_LibFyAB := 0;
2532 py_za_tx_01032000.trc_LibFpAB := 0;
2533 -- Annual Payments
2534 py_za_tx_01032000.trc_AnnPymYtd := 0;
2535 py_za_tx_01032000.trc_AnnPymPtd := 0;
2536 py_za_tx_01032000.trc_AnnPymErn := 0;
2537 py_za_tx_01032000.trc_TxbAnnPymInc := 0;
2538 py_za_tx_01032000.trc_TotLibAP := 0;
2539 py_za_tx_01032000.trc_LibFyAP := 0;
2540 py_za_tx_01032000.trc_LibFpAP := 0;
2541 -- Pubilc Office Allowance
2542 py_za_tx_01032000.trc_PblOffYtd := 0;
2543 py_za_tx_01032000.trc_PblOffPtd := 0;
2544 py_za_tx_01032000.trc_PblOffErn := 0;
2545 py_za_tx_01032000.trc_LibFyPO := 0;
2546 py_za_tx_01032000.trc_LibFpPO := 0;
2547 -- Messages
2548 py_za_tx_01032000.trc_LibWrn := ' ';
2549 -- Pay Value of This Calculation
2550 py_za_tx_01032000.trc_PayValue := 0;
2551 -- PAYE and SITE Values
2552 py_za_tx_01032000.trc_PayeVal := 0;
2553 py_za_tx_01032000.trc_SiteVal := 0;
2554 -- IT3A Threshold Indicator
2555 py_za_tx_01032000.trc_It3Ind := 0;
2556 -- Tax Percentage Value On trace
2557 py_za_tx_01032000.trc_TxPercVal := 0;
2558
2559 -- Total Taxable Income Update Figure
2560 py_za_tx_01032000.trc_OUpdFig := 0;
2561
2562 -- Net Taxable Income Update Figure
2563 py_za_tx_01032000.trc_NtiUpdFig := 0;
2564
2565 -- NpVal Override Globals
2566 py_za_tx_01032000.trc_NpValNIOvr := FALSE;
2567 py_za_tx_01032000.trc_NpValFBOvr := FALSE;
2568 py_za_tx_01032000.trc_NpValTAOvr := FALSE;
2569 py_za_tx_01032000.trc_NpValBPOvr := FALSE;
2570 py_za_tx_01032000.trc_NpValABOvr := FALSE;
2571 py_za_tx_01032000.trc_NpValAPOvr := FALSE;
2572 py_za_tx_01032000.trc_NpValPOOvr := FALSE;
2573
2574 -- Assignment Tax Year
2575 py_za_tx_01032000.trc_AsgTxYear := 0;
2576
2577 -- Global Exception Message
2578 py_za_tx_01032000.xpt_Msg := 'No Error';
2579
2580 -- Override Globals
2581 py_za_tx_01032000.trc_OvrTxCalc := FALSE;
2582 py_za_tx_01032000.trc_OvrTyp := 'V';
2583 py_za_tx_01032000.trc_OvrPrc := 0;
2584 py_za_tx_01032000.trc_OvrWrn := ' ';
2585
2586 -- Retro Global
2587 py_za_tx_01032000.trc_RetroInPeriod := FALSE;
2588
2589 EXCEPTION
2590 WHEN OTHERS THEN
2591 IF py_za_tx_01032000.xpt_Msg = 'No Error' THEN
2592 py_za_tx_01032000.xpt_Msg := 'ClearGlobals: '||TO_CHAR(SQLCODE);
2593 END IF;
2594 RAISE py_za_tx_01032000.xpt_E;
2595 END ClearGlobals;
2596
2597 END py_za_tx_utl_01032000;
2598