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