DBA Data[Home] [Help]

PACKAGE BODY: APPS.PY_ZA_TX_01011001

Source


1 PACKAGE BODY PY_ZA_TX_01011001 AS
2 /* $Header: pyzat001.pkb 120.2 2005/06/28 00:09:32 kapalani noship $ */
3 /* Copyright (c) Oracle Corporation 1999. All rights reserved. */
4 /*
5   PRODUCT
6      Oracle Payroll - ZA Localisation Tax Module
7 
8   NAME
9      ZaTx_01011001.pkb
10 
11   DESCRIPTION
12     This is the main tax package as used in the ZA Localisation Tax Module.
13     The public functions in this package are not for client use and is
14     only referenced by the tax formulae in the Application.
15 
16   PUBLIC FUNCTIONS
17 
18     ZaTxGlb_01011001
19       This function is called from Oracle Applications Fast Formula.
20       It passes all necessary global values to the main tax package.
21 
22     ZaTxDbi_01011001
23       This function is called from Oracle Applications Fast Formula.
24       It passes all necessary Application Database Items to the
25       main tax package.
26 
27     ZaTxBal1_01011001
28       This function is called from Oracle Applications Fast Formula.
29       It passes the first group of balances to the main tax package.
30 
31     ZaTxBal2_01011001
32       This function is called from Oracle Applications Fast Formula.
33       It passes the second group of balances to the main tax package.
34 
35     ZaTxBal3_01011001
36       This function is called from Oracle Applications Fast Formula.
37       It passes the third group of balances to the main tax package.
38 
39     ZaTx_01011001
40       This function is called from Oracle Applications Fast Formula.
41       This is the main tax function from where all necessary
42       validation and calculations are done.  The function will
43       calculate the tax liabilities of the employee assignment
44       and pass it back to the calling formula.
45 
46   PRIVATE FUNCTIONS
47 
48     LstPeriod
49       Boolean function returns true if current period is the
50       last period in the current tax year.
51 
52     EmpTermInPeriod
53       Boolean function returns true if the assignment was terminated
54       in the current pay period.
55 
56     EmpTermPrePeiod
57       Boolean function returns true if the assignment was terminated
58       before the current period.
59 
60     PreErnPeriod
61       Boolean function returns true if this run is deemed to be
62       a Pre-Earnings Calculation Run.
63       For a complete description see the tax module design document.
64 
65     SitePeriod
66       Boolean function returns true if it is a tax site period.
67       For a complete description see the tax module design document.
68 
69     Annualise
70       Returns annualised value to the calling object.
71       For a complete description see the tax module design document.
72 
73     TaxLiability
74       Returns the gross tax liability on passed value.
75       For a complete description see the tax module design document.
76 
77     DeAnnualise
78       Returns the de-annualised value to the calling object.
79       For a complete description see the tax module design document.
80 
81     DaysWorked
82       Returns the number of days worked for the assignment.
83       For a complete description see the tax module design document.
84 
85   PRIVATE PROCEDURES
86 
87     PeriodFactor
88       Calculates the period factor for the assignment.
89       For a complete description see the tax module design document.
90 
91     PossiblePeriodsFactor
92       Calculates the possible period factor for the assignment.
93       For a complete description see the tax module design document.
94 
95     Abatements
96       Calculates all necessary abatements.
97       For a complete description see the tax module design document.
98 
99     ArrearExcess
100       Calculates the arrear excess figure to 'effectively' update the
101       Asg_Itd dimension of the arrear excess pension and retirement
102       annuity balances.  Will only fire on siteperiod.
103 
104     TrvAllYtd
105       Calculates the taxable travel allowance over a period of
106       time based on the effective global values at the time.
107       For a complete description see the tax module design document.
108 
109     TrvAllCal
110       Calculates the taxable travel allowance over a period of
111       time based on the effective global values at the time.
112       For a complete description see the tax module design document.
113 
114     NpVal
115       Validates the calculated category liabilities.
116       For a complete description see the tax module design document.
117 
118     SitPaySplit
119       Calculates the site paye split of tax liabilities.
120       For a complete description see the tax module design document.
121 
122     Trace
123       Traces the tax calculation.
124       For a complete description see the tax module design document.
125 
126     ClearGlobals
127       Clears any set package globals.
128       For a complete description see the tax module design document.
129 
130     SeaCalc
131       A main tax calculation.
132       For a complete description see the tax module design document.
133 
134     SitCalc
135       A main tax calculation.
136       For a complete description see the tax module design document.
137 
138     DirCalc
139       A main tax calculation.
140       For a complete description see the tax module design document.
141 
142     BasCalc
143       A main tax calculation.
144       For a complete description see the tax module design document.
145 
146     CalCalc
147       A main tax calculation.
148       For a complete description see the tax module design document.
149 
150     YtdCalc
151       A main tax calculation.
152       For a complete description see the tax module design document.
153 
154     NorCalc
155       A main tax calculation.
156       For a complete description see the tax module design document.
157 
158   NOTES
159      .
160 
161   MODIFICATION HISTORY
162      Person      Date(DD-MM-YYYY)   Version   Comments
163      ---------   ----------------   -------   -----------------------------------
164      J.N. Louw   06-03-2000         110.5     SitePayeSplit for 'G'
165                                                 Added balance:
166                                                 Total Seasonal Workers Days
167                                                   Worked:
168                                                   bal_TOT_SEA_WRK_DYS_WRK
169                                               c/p_PAYE_PTD,p_SITE_PTD,
170                                                   bal_PAYE_PTD,bal_SITE_PTD
171                                                   /p_PAYE_YTD,p_SITE_YTD,
172                                                 bal_PAYE_YTD,bal_SITE_YTD
173                                               Updated Exception Handling:
174                                                 to level of 01032000 pkg
175                                               Error when no number of days
176                                                 worked for Tax Status 'G'
177                                               New Tax Directive default:
178                                                 0000 instead of 0
179      J.N. Louw   09-02-2000         110.4     Fixed 65 Rebate and Threshold
180                                                 Check
181                                               Altered Threshold Validation:
182                                                 NorCalc, SitCalc
183                                                 Tax on ... Refund
184                                               Altered Ytd Income Validation:
185                                                 DirCalc, NorCalc, SitCalc
186                                                 Tax on ... Refund
187                                               Altered ZaTx_01011001:
188                                                 Tax Status Validation
189                                               Altered NpVal:
190                                                 Override of Liability
191      J.N. Louw   02-02-2000         110.3     Added PreErnPeriod Function
192                                               Addded Balance Feed Functionality
193                                                 for the Total Taxable Income
194                                                 balance
195                                               bal_PRCH_ANU_TXB_RFI_RUN
196                                               Added bal_PAYE_PTD,bal_SITE_PTD
197                                               Fixed BasCalc
198                                               Added LstPeriod,EmpTermInPeriod,
199                                                 EmpTermPrePeriod Functions
200                                               Removed TxbIncYtd check in
201                                                 SitCalc
202                                               Fixed De-annualisation of Public
203                                                 Office Allowance - SitCalc,
204                                                 SeaCalc
205      J.N. Louw   20-01-2000         110.2     Fixed bug on NpVal when Net Pay
206                                                 is zero
207      J.N. Louw   09-12-1999         110.1     Arrear Excess Processing
208      J.N. Louw   13-09-1999         110.0     First Created
209 
210 
211 
212 
213 */
214 
215 /* PACKAGE GLOBAL AREA */
216 -- Contexts
217   con_ASG_ACT_ID NUMBER;
218   con_ASG_ID NUMBER;
219   con_PRL_ACT_ID NUMBER;
220   con_PRL_ID NUMBER;
221 -- Global Values
222   glb_ZA_ADL_TX_RBT NUMBER;
223   glb_ZA_ARR_PF_AN_MX_ABT NUMBER;
224   glb_ZA_ARR_RA_AN_MX_ABT NUMBER;
225   glb_ZA_TRV_ALL_TX_PRC NUMBER;
226   glb_ZA_CC_TX_PRC NUMBER;
227   glb_ZA_PF_AN_MX_ABT NUMBER;
228   glb_ZA_PF_MX_PRC NUMBER;
229   glb_ZA_PRI_TX_RBT NUMBER;
230   glb_ZA_PRI_TX_THRSHLD NUMBER;
231   glb_ZA_PBL_TX_PRC NUMBER;
232   glb_ZA_PBL_TX_RTE NUMBER;
233   glb_ZA_RA_AN_MX_ABT NUMBER;
234   glb_ZA_RA_MX_PRC NUMBER;
235   glb_ZA_SC_TX_THRSHLD NUMBER;
236   glb_ZA_SIT_LIM NUMBER;
237   glb_ZA_TMP_TX_RTE NUMBER;
238   glb_ZA_WRK_DYS_PR_YR NUMBER;
239 -- Database Items
240   dbi_ARR_PF_FRQ VARCHAR2(1);
241   dbi_ARR_RA_FRQ VARCHAR2(1);
242   dbi_ASG_STRT_DTE DATE;
243   dbi_BP_TX_RCV VARCHAR2(1);
244   dbi_PER_AGE NUMBER;
245   dbi_PER_DTE_OF_BRTH DATE;
246   dbi_RA_FRQ VARCHAR2(1);
247   dbi_SEA_WRK_DYS_WRK NUMBER;
248   dbi_SES_DTE DATE;
249   dbi_TX_DIR_VAL NUMBER DEFAULT 25;
250   dbi_TX_STA VARCHAR2(1);
251   dbi_ZA_ACT_END_DTE DATE;
252   dbi_ZA_CUR_PRD_END_DTE DATE;
253   dbi_ZA_CUR_PRD_STRT_DTE DATE;
254   dbi_ZA_DYS_IN_YR NUMBER;
255   dbi_ZA_PAY_PRDS_LFT NUMBER;
256   dbi_ZA_PAY_PRDS_PER_YR NUMBER;
257   dbi_ZA_TX_YR_END DATE;
258   dbi_ZA_TX_YR_STRT DATE;
259 -- Balances
260   bal_AB_NRFI_RUN NUMBER(15,2);
261   bal_AB_NRFI_PTD NUMBER(15,2);
262   bal_AB_NRFI_YTD NUMBER(15,2);
263   bal_AB_RFI_RUN NUMBER(15,2);
264   bal_AB_RFI_PTD NUMBER(15,2);
265   bal_AB_RFI_YTD NUMBER(15,2);
266   bal_ANN_PF_RUN NUMBER(15,2);
267   bal_ANN_PF_PTD NUMBER(15,2);
268   bal_ANN_PF_YTD NUMBER(15,2);
269   bal_ANU_FRM_RET_FND_NRFI_RUN NUMBER(15,2);
270   bal_ANU_FRM_RET_FND_NRFI_PTD NUMBER(15,2);
271   bal_ANU_FRM_RET_FND_NRFI_YTD NUMBER(15,2);
272   bal_ANU_FRM_RET_FND_RFI_RUN NUMBER(15,2);
273   bal_ANU_FRM_RET_FND_RFI_PTD NUMBER(15,2);
274   bal_ANU_FRM_RET_FND_RFI_YTD NUMBER(15,2);
275   bal_ARR_PF_CYTD NUMBER(15,2);
276   bal_ARR_PF_PTD NUMBER(15,2);
277   bal_ARR_PF_YTD NUMBER(15,2);
278   bal_ARR_RA_CYTD NUMBER(15,2);
279   bal_ARR_RA_PTD NUMBER(15,2);
280   bal_ARR_RA_YTD NUMBER(15,2);
281   bal_AST_PRCHD_RVAL_NRFI_CYTD NUMBER(15,2);
282   bal_AST_PRCHD_RVAL_NRFI_RUN NUMBER(15,2);
283   bal_AST_PRCHD_RVAL_NRFI_PTD NUMBER(15,2);
284   bal_AST_PRCHD_RVAL_NRFI_YTD NUMBER(15,2);
285   bal_AST_PRCHD_RVAL_RFI_CYTD NUMBER(15,2);
286   bal_AST_PRCHD_RVAL_RFI_RUN NUMBER(15,2);
287   bal_AST_PRCHD_RVAL_RFI_PTD NUMBER(15,2);
288   bal_AST_PRCHD_RVAL_RFI_YTD NUMBER(15,2);
289   bal_BP_PTD NUMBER(15,2);
290   bal_BP_YTD NUMBER(15,2);
291   bal_BUR_AND_SCH_NRFI_CYTD NUMBER(15,2);
292   bal_BUR_AND_SCH_NRFI_RUN NUMBER(15,2);
293   bal_BUR_AND_SCH_NRFI_PTD NUMBER(15,2);
294   bal_BUR_AND_SCH_NRFI_YTD NUMBER(15,2);
295   bal_BUR_AND_SCH_RFI_CYTD NUMBER(15,2);
296   bal_BUR_AND_SCH_RFI_RUN NUMBER(15,2);
297   bal_BUR_AND_SCH_RFI_PTD NUMBER(15,2);
298   bal_BUR_AND_SCH_RFI_YTD NUMBER(15,2);
299   bal_COMM_NRFI_CYTD NUMBER(15,2);
300   bal_COMM_NRFI_RUN NUMBER(15,2);
301   bal_COMM_NRFI_PTD NUMBER(15,2);
302   bal_COMM_NRFI_YTD NUMBER(15,2);
303   bal_COMM_RFI_CYTD NUMBER(15,2);
304   bal_COMM_RFI_RUN NUMBER(15,2);
305   bal_COMM_RFI_PTD NUMBER(15,2);
306   bal_COMM_RFI_YTD NUMBER(15,2);
307   bal_COMP_ALL_NRFI_CYTD NUMBER(15,2);
308   bal_COMP_ALL_NRFI_RUN NUMBER(15,2);
309   bal_COMP_ALL_NRFI_PTD NUMBER(15,2);
310   bal_COMP_ALL_NRFI_YTD NUMBER(15,2);
311   bal_COMP_ALL_RFI_CYTD NUMBER(15,2);
312   bal_COMP_ALL_RFI_RUN NUMBER(15,2);
313   bal_COMP_ALL_RFI_PTD NUMBER(15,2);
314   bal_COMP_ALL_RFI_YTD NUMBER(15,2);
315   bal_CUR_PF_CYTD NUMBER(15,2);
316   bal_CUR_PF_RUN NUMBER(15,2);
317   bal_CUR_PF_PTD NUMBER(15,2);
318   bal_CUR_PF_YTD NUMBER(15,2);
319   bal_CUR_RA_CYTD NUMBER(15,2);
320   bal_CUR_RA_RUN NUMBER(15,2);
321   bal_CUR_RA_PTD NUMBER(15,2);
322   bal_CUR_RA_YTD NUMBER(15,2);
323   bal_ENT_ALL_NRFI_CYTD NUMBER(15,2);
324   bal_ENT_ALL_NRFI_RUN NUMBER(15,2);
325   bal_ENT_ALL_NRFI_PTD NUMBER(15,2);
326   bal_ENT_ALL_NRFI_YTD NUMBER(15,2);
327   bal_ENT_ALL_RFI_CYTD NUMBER(15,2);
328   bal_ENT_ALL_RFI_RUN NUMBER(15,2);
329   bal_ENT_ALL_RFI_PTD NUMBER(15,2);
330   bal_ENT_ALL_RFI_YTD NUMBER(15,2);
331   bal_EXC_ARR_PEN_ITD NUMBER(15,2);
332   bal_EXC_ARR_PEN_PTD NUMBER(15,2);
333   bal_EXC_ARR_RA_ITD NUMBER(15,2);
334   bal_EXC_ARR_RA_PTD NUMBER(15,2);
335   bal_FREE_ACCOM_NRFI_CYTD NUMBER(15,2);
336   bal_FREE_ACCOM_NRFI_RUN NUMBER(15,2);
337   bal_FREE_ACCOM_NRFI_PTD NUMBER(15,2);
338   bal_FREE_ACCOM_NRFI_YTD NUMBER(15,2);
339   bal_FREE_ACCOM_RFI_CYTD NUMBER(15,2);
340   bal_FREE_ACCOM_RFI_RUN NUMBER(15,2);
341   bal_FREE_ACCOM_RFI_PTD NUMBER(15,2);
342   bal_FREE_ACCOM_RFI_YTD NUMBER(15,2);
343   bal_FREE_SERV_NRFI_CYTD NUMBER(15,2);
344   bal_FREE_SERV_NRFI_RUN NUMBER(15,2);
345   bal_FREE_SERV_NRFI_PTD NUMBER(15,2);
346   bal_FREE_SERV_NRFI_YTD NUMBER(15,2);
347   bal_FREE_SERV_RFI_CYTD NUMBER(15,2);
348   bal_FREE_SERV_RFI_RUN NUMBER(15,2);
349   bal_FREE_SERV_RFI_PTD NUMBER(15,2);
350   bal_FREE_SERV_RFI_YTD NUMBER(15,2);
351   bal_LOW_LOANS_NRFI_CYTD NUMBER(15,2);
352   bal_LOW_LOANS_NRFI_RUN NUMBER(15,2);
353   bal_LOW_LOANS_NRFI_PTD NUMBER(15,2);
354   bal_LOW_LOANS_NRFI_YTD NUMBER(15,2);
355   bal_LOW_LOANS_RFI_CYTD NUMBER(15,2);
356   bal_LOW_LOANS_RFI_RUN NUMBER(15,2);
357   bal_LOW_LOANS_RFI_PTD NUMBER(15,2);
358   bal_LOW_LOANS_RFI_YTD NUMBER(15,2);
359   bal_MLS_AND_VOUCH_NRFI_CYTD NUMBER(15,2);
360   bal_MLS_AND_VOUCH_NRFI_RUN NUMBER(15,2);
361   bal_MLS_AND_VOUCH_NRFI_PTD NUMBER(15,2);
362   bal_MLS_AND_VOUCH_NRFI_YTD NUMBER(15,2);
363   bal_MLS_AND_VOUCH_RFI_CYTD NUMBER(15,2);
364   bal_MLS_AND_VOUCH_RFI_RUN NUMBER(15,2);
365   bal_MLS_AND_VOUCH_RFI_PTD NUMBER(15,2);
366   bal_MLS_AND_VOUCH_RFI_YTD NUMBER(15,2);
367   bal_MED_CONTR_CYTD NUMBER(15,2);
368   bal_MED_CONTR_RUN NUMBER(15,2);
369   bal_MED_CONTR_PTD NUMBER(15,2);
370   bal_MED_CONTR_YTD NUMBER(15,2);
371   bal_MED_PAID_NRFI_CYTD NUMBER(15,2);
372   bal_MED_PAID_NRFI_RUN NUMBER(15,2);
373   bal_MED_PAID_NRFI_PTD NUMBER(15,2);
374   bal_MED_PAID_NRFI_YTD NUMBER(15,2);
375   bal_MED_PAID_RFI_CYTD NUMBER(15,2);
376   bal_MED_PAID_RFI_RUN NUMBER(15,2);
377   bal_MED_PAID_RFI_PTD NUMBER(15,2);
378   bal_MED_PAID_RFI_YTD NUMBER(15,2);
379   bal_NET_PAY_RUN NUMBER(15,2);
380   bal_OTHER_TXB_ALL_NRFI_CYTD NUMBER(15,2);
381   bal_OTHER_TXB_ALL_NRFI_RUN NUMBER(15,2);
382   bal_OTHER_TXB_ALL_NRFI_PTD NUMBER(15,2);
383   bal_OTHER_TXB_ALL_NRFI_YTD NUMBER(15,2);
384   bal_OTHER_TXB_ALL_RFI_CYTD NUMBER(15,2);
385   bal_OTHER_TXB_ALL_RFI_RUN NUMBER(15,2);
386   bal_OTHER_TXB_ALL_RFI_PTD NUMBER(15,2);
387   bal_OTHER_TXB_ALL_RFI_YTD NUMBER(15,2);
388   bal_OVTM_NRFI_CYTD NUMBER(15,2);
389   bal_OVTM_NRFI_RUN NUMBER(15,2);
390   bal_OVTM_NRFI_PTD NUMBER(15,2);
391   bal_OVTM_NRFI_YTD NUMBER(15,2);
392   bal_OVTM_RFI_CYTD NUMBER(15,2);
393   bal_OVTM_RFI_RUN NUMBER(15,2);
394   bal_OVTM_RFI_PTD NUMBER(15,2);
395   bal_OVTM_RFI_YTD NUMBER(15,2);
396   bal_PAYE_YTD NUMBER(15,2);
397   bal_PYM_DBT_NRFI_CYTD NUMBER(15,2);
398   bal_PYM_DBT_NRFI_RUN NUMBER(15,2);
399   bal_PYM_DBT_NRFI_PTD NUMBER(15,2);
400   bal_PYM_DBT_NRFI_YTD NUMBER(15,2);
401   bal_PYM_DBT_RFI_CYTD NUMBER(15,2);
402   bal_PYM_DBT_RFI_RUN NUMBER(15,2);
403   bal_PYM_DBT_RFI_PTD NUMBER(15,2);
404   bal_PYM_DBT_RFI_YTD NUMBER(15,2);
405   bal_PO_NRFI_RUN NUMBER(15,2);
406   bal_PO_NRFI_PTD NUMBER(15,2);
407   bal_PO_NRFI_YTD NUMBER(15,2);
408   bal_PO_RFI_RUN NUMBER(15,2);
409   bal_PO_RFI_PTD NUMBER(15,2);
410   bal_PO_RFI_YTD NUMBER(15,2);
411   bal_PRCH_ANU_TXB_NRFI_RUN NUMBER(15,2);
412   bal_PRCH_ANU_TXB_NRFI_PTD NUMBER(15,2);
413   bal_PRCH_ANU_TXB_NRFI_YTD NUMBER(15,2);
414   bal_PRCH_ANU_TXB_RFI_RUN NUMBER(15,2);
415   bal_PRCH_ANU_TXB_RFI_PTD NUMBER(15,2);
416   bal_PRCH_ANU_TXB_RFI_YTD NUMBER(15,2);
417   bal_RGT_AST_NRFI_CYTD NUMBER(15,2);
418   bal_RGT_AST_NRFI_RUN NUMBER(15,2);
419   bal_RGT_AST_NRFI_PTD NUMBER(15,2);
420   bal_RGT_AST_NRFI_YTD NUMBER(15,2);
421   bal_RGT_AST_RFI_CYTD NUMBER(15,2);
422   bal_RGT_AST_RFI_RUN NUMBER(15,2);
423   bal_RGT_AST_RFI_PTD NUMBER(15,2);
424   bal_RGT_AST_RFI_YTD NUMBER(15,2);
425   bal_SHR_OPT_EXD_NRFI_RUN NUMBER(15,2);
426   bal_SHR_OPT_EXD_NRFI_PTD NUMBER(15,2);
427   bal_SHR_OPT_EXD_NRFI_YTD NUMBER(15,2);
428   bal_SHR_OPT_EXD_RFI_RUN NUMBER(15,2);
429   bal_SHR_OPT_EXD_RFI_PTD NUMBER(15,2);
430   bal_SHR_OPT_EXD_RFI_YTD NUMBER(15,2);
431   bal_SITE_YTD NUMBER(15,2);
432   bal_TXB_AP_NRFI_RUN NUMBER(15,2);
433   bal_TXB_AP_NRFI_PTD NUMBER(15,2);
434   bal_TXB_AP_NRFI_YTD NUMBER(15,2);
435   bal_TXB_AP_RFI_RUN NUMBER(15,2);
436   bal_TXB_AP_RFI_PTD NUMBER(15,2);
437   bal_TXB_AP_RFI_YTD NUMBER(15,2);
438   bal_TXB_INC_NRFI_CYTD NUMBER(15,2);
439   bal_TXB_INC_NRFI_RUN NUMBER(15,2);
440   bal_TXB_INC_NRFI_PTD NUMBER(15,2);
441   bal_TXB_INC_NRFI_YTD NUMBER(15,2);
442   bal_TXB_INC_RFI_CYTD NUMBER(15,2);
443   bal_TXB_INC_RFI_RUN NUMBER(15,2);
444   bal_TXB_INC_RFI_PTD NUMBER(15,2);
445   bal_TXB_INC_RFI_YTD NUMBER(15,2);
446   bal_TXB_PEN_NRFI_CYTD NUMBER(15,2);
447   bal_TXB_PEN_NRFI_RUN NUMBER(15,2);
448   bal_TXB_PEN_NRFI_PTD NUMBER(15,2);
449   bal_TXB_PEN_NRFI_YTD NUMBER(15,2);
450   bal_TXB_PEN_RFI_CYTD NUMBER(15,2);
451   bal_TXB_PEN_RFI_RUN NUMBER(15,2);
452   bal_TXB_PEN_RFI_PTD NUMBER(15,2);
453   bal_TXB_PEN_RFI_YTD NUMBER(15,2);
454   bal_TXB_SUBS_NRFI_RUN NUMBER(15,2);
455   bal_TXB_SUBS_NRFI_PTD NUMBER(15,2);
456   bal_TXB_SUBS_NRFI_YTD NUMBER(15,2);
457   bal_TXB_SUBS_RFI_RUN NUMBER(15,2);
458   bal_TXB_SUBS_RFI_PTD NUMBER(15,2);
459   bal_TXB_SUBS_RFI_YTD NUMBER(15,2);
460   bal_TAX_YTD NUMBER(15,2);
461   bal_TX_ON_AB_PTD NUMBER(15,2);
462   bal_TX_ON_AB_YTD NUMBER(15,2);
463   bal_TX_ON_AP_RUN NUMBER(15,2);
464   bal_TX_ON_AP_PTD NUMBER(15,2);
465   bal_TX_ON_AP_YTD NUMBER(15,2);
466   bal_TX_ON_BP_PTD NUMBER(15,2);
467   bal_TX_ON_BP_YTD NUMBER(15,2);
468   bal_TX_ON_TA_PTD NUMBER(15,2);
469   bal_TX_ON_TA_YTD NUMBER(15,2);
470   bal_TX_ON_FB_PTD NUMBER(15,2);
471   bal_TX_ON_FB_YTD NUMBER(15,2);
472   bal_TX_ON_NI_PTD NUMBER(15,2);
473   bal_TX_ON_NI_YTD NUMBER(15,2);
474   bal_TX_ON_PO_PTD NUMBER(15,2);
475   bal_TX_ON_PO_YTD NUMBER(15,2);
476   bal_TEL_ALL_NRFI_CYTD NUMBER(15,2);
477   bal_TEL_ALL_NRFI_RUN NUMBER(15,2);
478   bal_TEL_ALL_NRFI_PTD NUMBER(15,2);
479   bal_TEL_ALL_NRFI_YTD NUMBER(15,2);
480   bal_TEL_ALL_RFI_CYTD NUMBER(15,2);
481   bal_TEL_ALL_RFI_RUN NUMBER(15,2);
482   bal_TEL_ALL_RFI_PTD NUMBER(15,2);
483   bal_TEL_ALL_RFI_YTD NUMBER(15,2);
484   bal_TOOL_ALL_NRFI_CYTD NUMBER(15,2);
485   bal_TOOL_ALL_NRFI_RUN NUMBER(15,2);
486   bal_TOOL_ALL_NRFI_PTD NUMBER(15,2);
487   bal_TOOL_ALL_NRFI_YTD NUMBER(15,2);
488   bal_TOOL_ALL_RFI_CYTD NUMBER(15,2);
489   bal_TOOL_ALL_RFI_RUN NUMBER(15,2);
490   bal_TOOL_ALL_RFI_PTD NUMBER(15,2);
491   bal_TOOL_ALL_RFI_YTD NUMBER(15,2);
492   bal_TOT_INC_PTD NUMBER(15,2);
493   bal_TOT_INC_YTD NUMBER(15,2);
494   bal_TOT_NRFI_AN_INC_CYTD NUMBER(15,2);
495   bal_TOT_NRFI_AN_INC_RUN NUMBER(15,2);
496   bal_TOT_NRFI_AN_INC_YTD NUMBER(15,2);
497   bal_TOT_NRFI_INC_CYTD NUMBER(15,2);
498   bal_TOT_NRFI_INC_RUN NUMBER(15,2);
499   bal_TOT_NRFI_INC_PTD NUMBER(15,2);
500   bal_TOT_NRFI_INC_YTD NUMBER(15,2);
501   bal_TOT_RFI_AN_INC_CYTD NUMBER(15,2);
502   bal_TOT_RFI_AN_INC_RUN NUMBER(15,2);
503   bal_TOT_RFI_AN_INC_PTD NUMBER(15,2);
504   bal_TOT_RFI_AN_INC_YTD NUMBER(15,2);
505   bal_TOT_RFI_INC_CYTD NUMBER(15,2);
506   bal_TOT_RFI_INC_RUN NUMBER(15,2);
507   bal_TOT_RFI_INC_PTD NUMBER(15,2);
508   bal_TOT_RFI_INC_YTD NUMBER(15,2);
509   bal_TOT_SEA_WRK_DYS_WRK_YTD NUMBER (15,2);
510   bal_TOT_TXB_INC_ITD NUMBER(15,2);
511   bal_TA_NRFI_CYTD NUMBER(15,2);
512   bal_TA_NRFI_PTD NUMBER(15,2);
513   bal_TA_NRFI_YTD NUMBER(15,2);
514   bal_TA_RFI_CYTD NUMBER(15,2);
515   bal_TA_RFI_PTD NUMBER(15,2);
516   bal_TA_RFI_YTD NUMBER(15,2);
517   bal_USE_VEH_NRFI_CYTD NUMBER(15,2);
518   bal_USE_VEH_NRFI_RUN NUMBER(15,2);
519   bal_USE_VEH_NRFI_PTD NUMBER(15,2);
520   bal_USE_VEH_NRFI_YTD NUMBER(15,2);
521   bal_USE_VEH_RFI_CYTD NUMBER(15,2);
522   bal_USE_VEH_RFI_RUN NUMBER(15,2);
523   bal_USE_VEH_RFI_PTD NUMBER(15,2);
524   bal_USE_VEH_RFI_YTD NUMBER(15,2);
525 
526 
527 -- Trace Globals
528 --   These are set within the procedures and function calls!!
529 --   Values can be output by the main function call from formula
530 --
531   -- Calculation Type
532   trc_CalTyp VARCHAR2(7) DEFAULT 'Unknown';
533   -- Factors
534   trc_TxbIncPtd NUMBER(15,2) DEFAULT 0;
535   trc_PrdFactor NUMBER DEFAULT 0;
536   trc_PosFactor NUMBER DEFAULT 0;
537   trc_SitFactor NUMBER := 1;
538   -- Base Income
539   trc_BseErn NUMBER(15,2) DEFAULT 0;
540   trc_TxbBseInc NUMBER(15,2) DEFAULT 0;
541   trc_TotLibBse NUMBER(15,2) DEFAULT 0;
542   -- Period Pension Fund
543   trc_TxbIncYtd NUMBER(15,2) DEFAULT 0;
544   trc_PerTxbInc NUMBER(15,2) DEFAULT 0;
545   trc_PerPenFnd NUMBER(15,2) DEFAULT 0;
546   trc_PerRfiCon NUMBER(15,2) DEFAULT 0;
547   trc_PerRfiTxb NUMBER(15,2) DEFAULT 0;
548   trc_PerPenFndMax NUMBER(15,2) DEFAULT 0;
549   trc_PerPenFndAbm NUMBER(15,2) DEFAULT 0;
550   -- Annual Pension Fund
551   trc_AnnTxbInc NUMBER(15,2) DEFAULT 0;
552   trc_AnnPenFnd NUMBER(15,2) DEFAULT 0;
553   trc_AnnRfiCon NUMBER(15,2) DEFAULT 0;
554   trc_AnnRfiTxb NUMBER(15,2) DEFAULT 0;
555   trc_AnnPenFndMax NUMBER(15,2) DEFAULT 0;
556   trc_AnnPenFndAbm NUMBER(15,2) DEFAULT 0;
557   -- Arrear Pension
558   trc_ArrPenFnd NUMBER(15,2) DEFAULT 0;
559   trc_ArrPenFndAbm NUMBER(15,2) DEFAULT 0;
560   trc_PfUpdFig NUMBER(15,2) DEFAULT 0;
561   -- Retirement Annuity
562   trc_RetAnu NUMBER(15,2) DEFAULT 0;
563   trc_NrfiCon NUMBER(15,2) DEFAULT 0;
564   trc_RetAnuMax NUMBER(15,2) DEFAULT 0;
565   trc_RetAnuAbm NUMBER(15,2) DEFAULT 0;
566   -- Arrear Retirement Annuity
567   trc_ArrRetAnu NUMBER(15,2) DEFAULT 0;
568   trc_ArrRetAnuAbm NUMBER(15,2) DEFAULT 0;
569   trc_RaUpdFig NUMBER(15,2) DEFAULT 0;
570   -- Rebates Thresholds and Med Aid
571   trc_Rebate NUMBER(15,2) DEFAULT 0;
572   trc_Threshold NUMBER(15,2) DEFAULT 0;
573   trc_MedAidAbm NUMBER(15,2) DEFAULT 0;
574   -- Abatement Totals
575   trc_PerTotAbm NUMBER(15,2) DEFAULT 0;
576   trc_AnnTotAbm NUMBER(15,2) DEFAULT 0;
577   -- Normal Income
578   trc_NorIncYtd NUMBER(15,2) DEFAULT 0;
579   trc_NorIncPtd NUMBER(15,2) DEFAULT 0;
580   trc_NorErn NUMBER(15,2) DEFAULT 0;
581   trc_TxbNorInc NUMBER(15,2) DEFAULT 0;
582   trc_LibFyNI NUMBER(15,2) DEFAULT 0;
583   trc_LibFpNI NUMBER(15,2) DEFAULT 0;
584   -- Fringe Benefits
585   trc_FrnBenYtd NUMBER(15,2) DEFAULT 0;
586   trc_FrnBenPtd NUMBER(15,2) DEFAULT 0;
587   trc_FrnBenErn NUMBER(15,2) DEFAULT 0;
588   trc_TxbFrnInc NUMBER(15,2) DEFAULT 0;
589   trc_LibFyFB NUMBER(15,2) DEFAULT 0;
590   trc_LibFpFB NUMBER(15,2) DEFAULT 0;
591   -- Travel Allowance
592   trc_TrvAllYtd NUMBER(15,2) DEFAULT 0;
593   trc_TrvAllPtd NUMBER(15,2) DEFAULT 0;
594   trc_TrvAllErn NUMBER(15,2) DEFAULT 0;
595   trc_TxbTrvInc NUMBER(15,2) DEFAULT 0;
596   trc_LibFyTA NUMBER(15,2) DEFAULT 0;
597   trc_LibFpTA NUMBER(15,2) DEFAULT 0;
598   -- Bonus Provision
599   trc_BonProYtd NUMBER(15,2) DEFAULT 0;
600   trc_BonProPtd NUMBER(15,2) DEFAULT 0;
601   trc_BonProErn NUMBER(15,2) DEFAULT 0;
602   trc_TxbBonProInc NUMBER(15,2) DEFAULT 0;
603   trc_LibFyBP NUMBER(15,2) DEFAULT 0;
604   trc_LibFpBP NUMBER(15,2) DEFAULT 0;
605   -- Annual Bonus
606   trc_AnnBonYtd NUMBER(15,2) DEFAULT 0;
607   trc_AnnBonPtd NUMBER(15,2) DEFAULT 0;
608   trc_AnnBonErn NUMBER(15,2) DEFAULT 0;
609   trc_TxbAnnBonInc NUMBER(15,2) DEFAULT 0;
610   trc_LibFyAB NUMBER(15,2) DEFAULT 0;
611   trc_LibFpAB NUMBER(15,2) DEFAULT 0;
612   -- Annual Payments
613   trc_AnnPymYtd NUMBER(15,2) DEFAULT 0;
614   trc_AnnPymPtd NUMBER(15,2) DEFAULT 0;
615   trc_AnnPymErn NUMBER(15,2) DEFAULT 0;
616   trc_TxbAnnPymInc NUMBER(15,2) DEFAULT 0;
617   trc_LibFyAP NUMBER(15,2) DEFAULT 0;
618   trc_LibFpAP NUMBER(15,2) DEFAULT 0;
619   -- Pubilc Office Allowance
620   trc_PblOffYtd NUMBER(15,2) DEFAULT 0;
621   trc_PblOffPtd NUMBER(15,2) DEFAULT 0;
622   trc_PblOffErn NUMBER(15,2) DEFAULT 0;
623   trc_LibFyPO NUMBER(15,2) DEFAULT 0;
624   trc_LibFpPO NUMBER(15,2) DEFAULT 0;
625   -- Messages
626   trc_MsgTxStatus VARCHAR2(100) DEFAULT ' ';
627   trc_LibWrn VARCHAR2(100) DEFAULT ' ';
628 -- trc_WrnNI
629 --  trc_WrnFB VARCHAR2(100) DEFAULT ' ';
630 --  trc_WrnTA VARCHAR2(100) DEFAULT ' ';
631 --  trc_WrnBP VARCHAR2(100) DEFAULT ' ';
632 --  trc_WrnAB VARCHAR2(100) DEFAULT ' ';
633 --  trc_WrnAP VARCHAR2(100) DEFAULT ' ';
634 --  trc_WrnPO VARCHAR2(100) DEFAULT ' ';
635   -- Pay Value of This Calculation
636   trc_PayValue NUMBER(15,2) DEFAULT 0;
637   -- PAYE and SITE Values
638   trc_PayeVal NUMBER(15,2) DEFAULT 0;
639   trc_SiteVal NUMBER(15,2) DEFAULT 0;
640   -- IT3A Threshold Indicator
641   trc_It3Ind NUMBER DEFAULT 0;
642   -- Tax Percentage Value On trace
643   trc_TxPercVal NUMBER DEFAULT 0;
644   -- Total Taxable Income Update Figure
645   trc_OUpdFig NUMBER(15,2) DEFAULT 0;
646 
647   -- NpVal Override Globals
648   trc_NpValNIOvr BOOLEAN DEFAULT FALSE;
649   trc_NpValFBOvr BOOLEAN DEFAULT FALSE;
650   trc_NpValTAOvr BOOLEAN DEFAULT FALSE;
651   trc_NpValBPOvr BOOLEAN DEFAULT FALSE;
652   trc_NpValABOvr BOOLEAN DEFAULT FALSE;
653   trc_NpValAPOvr BOOLEAN DEFAULT FALSE;
654   trc_NpValPOOvr BOOLEAN DEFAULT FALSE;
655 
656   -- Global Exception Message
657   xpt_Msg VARCHAR2(30) DEFAULT 'No Error';
658   -- Global Exception
659   xpt_E EXCEPTION;
660 
661 
662 
663 
664 /* PACKAGE BODY */
665 -- Utility Functions
666 --
667 
668 FUNCTION LstPeriod RETURN BOOLEAN AS
669 
670 BEGIN
671   -- Is this the last period for the tax year
672   --
673   IF dbi_ZA_PAY_PRDS_LFT = 1 THEN
674     RETURN TRUE;
675   ELSE
676     RETURN FALSE;
677   END IF;
678 
679 EXCEPTION
680   WHEN OTHERS THEN
681     IF xpt_Msg = 'No Error' THEN
682            xpt_Msg := 'LstPeriod: '||TO_CHAR(SQLCODE);
683     END IF;
684     RAISE xpt_E;
685 
686 END LstPeriod;
687 
688 FUNCTION EmpTermInPeriod RETURN BOOLEAN AS
689 
690 BEGIN
691   -- Was the employee terminated in the current period
692   --
693   IF dbi_ZA_ACT_END_DTE BETWEEN dbi_ZA_CUR_PRD_STRT_DTE AND dbi_ZA_CUR_PRD_END_DTE THEN
694     RETURN TRUE;
695   ELSE
696     RETURN FALSE;
697   END IF;
698 
699 EXCEPTION
700   WHEN OTHERS THEN
701     IF xpt_Msg = 'No Error' THEN
702       xpt_Msg := 'EmpTermInPeriod: '||TO_CHAR(SQLCODE);
703     END IF;
704        RAISE xpt_E;
705 
706 END EmpTermInPeriod;
707 
708 FUNCTION EmpTermPrePeriod RETURN BOOLEAN AS
709 
710 BEGIN
711   -- Was the employee terminated before the current period
712   --
713   IF dbi_ZA_ACT_END_DTE <= dbi_ZA_CUR_PRD_STRT_DTE THEN
714     RETURN TRUE;
715   ELSE
716     RETURN FALSE;
717   END IF;
718 
719 EXCEPTION
720   WHEN OTHERS THEN
721     IF xpt_Msg = 'No Error' THEN
722       xpt_Msg := 'EmpTermPrePeriod: '||TO_CHAR(SQLCODE);
723     END IF;
724        RAISE xpt_E;
725 
726 END EmpTermPrePeriod;
727 
728 FUNCTION PreErnPeriod RETURN BOOLEAN AS
729 
730 BEGIN
731 
732   -- PTD Taxable Income
733   --
734   trc_TxbIncPtd :=
735     (bal_AST_PRCHD_RVAL_NRFI_PTD
736     +bal_AST_PRCHD_RVAL_RFI_PTD
737     +bal_BP_PTD
738     +bal_BUR_AND_SCH_NRFI_PTD
739     +bal_BUR_AND_SCH_RFI_PTD
740     +bal_COMM_NRFI_PTD
741     +bal_COMM_RFI_PTD
742     +bal_COMP_ALL_NRFI_PTD
743     +bal_COMP_ALL_RFI_PTD
744     +bal_ENT_ALL_NRFI_PTD
745     +bal_ENT_ALL_RFI_PTD
746     +bal_FREE_ACCOM_NRFI_PTD
747     +bal_FREE_ACCOM_RFI_PTD
748     +bal_FREE_SERV_NRFI_PTD
749     +bal_FREE_SERV_RFI_PTD
750     +bal_LOW_LOANS_NRFI_PTD
751     +bal_LOW_LOANS_RFI_PTD
752     +bal_MLS_AND_VOUCH_NRFI_PTD
753     +bal_MLS_AND_VOUCH_RFI_PTD
754     +bal_MED_PAID_NRFI_PTD
755     +bal_MED_PAID_RFI_PTD
756     +bal_OTHER_TXB_ALL_NRFI_PTD
757     +bal_OTHER_TXB_ALL_RFI_PTD
758     +bal_OVTM_NRFI_PTD
759     +bal_OVTM_RFI_PTD
760     +bal_PYM_DBT_NRFI_PTD
761     +bal_PYM_DBT_RFI_PTD
762     +bal_RGT_AST_NRFI_PTD
763     +bal_RGT_AST_RFI_PTD
764     +bal_TXB_INC_NRFI_PTD
765     +bal_TXB_INC_RFI_PTD
766     +bal_TXB_PEN_NRFI_PTD
767     +bal_TXB_PEN_RFI_PTD
768     +bal_TEL_ALL_NRFI_PTD
769     +bal_TEL_ALL_RFI_PTD
770     +bal_TOOL_ALL_NRFI_PTD
771     +bal_TOOL_ALL_RFI_PTD
772     +bal_TA_NRFI_PTD
773     +bal_TA_RFI_PTD
774     +bal_USE_VEH_NRFI_PTD
775     +bal_USE_VEH_RFI_PTD
776     );
777 
778   -- Ptd Annual Bonus
779   trc_AnnBonPtd :=
780     (bal_AB_NRFI_RUN
781     +bal_AB_RFI_RUN
782     );
783 
784   -- Ytd Annual Payments
785   trc_AnnPymPtd :=
786     (bal_ANU_FRM_RET_FND_NRFI_RUN
787     +bal_ANU_FRM_RET_FND_RFI_RUN
788     +bal_PRCH_ANU_TXB_NRFI_RUN
789     +bal_PRCH_ANU_TXB_RFI_RUN
790     +bal_SHR_OPT_EXD_NRFI_RUN
791     +bal_SHR_OPT_EXD_RFI_RUN
792     +bal_TXB_AP_NRFI_RUN
793     +bal_TXB_AP_RFI_RUN
794     +bal_TXB_SUBS_NRFI_RUN
795     +bal_TXB_SUBS_RFI_RUN
796     );
797 
798   -- Annual Type PTD Income with no Period Type PTD Income
799   IF (trc_AnnBonPtd + trc_AnnPymPtd) > 0 AND trc_TxbIncPtd <= 0 THEN
800     RETURN TRUE;
801   ELSE
802     RETURN FALSE;
803   END IF;
804 
805 
806 
807 EXCEPTION
808   WHEN OTHERS THEN
809     IF xpt_Msg = 'No Error' THEN
810       xpt_Msg := 'PreErnPeriod: '||TO_CHAR(SQLCODE);
811     END IF;
812        RAISE xpt_E;
813 
814 END PreErnPeriod;
815 
816 
817 FUNCTION SitePeriod RETURN BOOLEAN AS
818 
819 BEGIN
820 
821   IF LstPeriod OR EmpTermInPeriod OR EmpTermPrePeriod THEN
822     RETURN TRUE;
823   ELSE
824     RETURN FALSE;
825   END IF;
826 
827 EXCEPTION
828   WHEN OTHERS THEN
829     IF xpt_Msg = 'No Error' THEN
830       xpt_Msg := 'SitePeriod: '||TO_CHAR(SQLCODE);
831     END IF;
832        RAISE xpt_E;
833 
834 END SitePeriod;
835 
836 PROCEDURE PeriodFactor AS
837 
838 BEGIN
839   IF dbi_ZA_TX_YR_STRT < dbi_ASG_STRT_DTE
840   THEN
841 
842     IF bal_TOT_INC_YTD = bal_TOT_INC_PTD  /* i.e. first pay period for the person */
843     THEN
844       trc_PrdFactor := (dbi_ZA_CUR_PRD_END_DTE - dbi_ASG_STRT_DTE + 1) /
845                           (dbi_ZA_CUR_PRD_END_DTE - dbi_ZA_CUR_PRD_STRT_DTE + 1);
846     ELSE
847       trc_PrdFactor := 1;
848     END IF;
849 
850   ELSE
851     trc_PrdFactor := 1;
852   END IF;
853 
854 EXCEPTION
855   WHEN OTHERS THEN
856     IF xpt_Msg = 'No Error' THEN
857       xpt_Msg := 'PeriodFactor: '||TO_CHAR(SQLCODE);
858     END IF;
859        RAISE xpt_E;
860 
861 END PeriodFactor;
862 
863 
864 PROCEDURE PossiblePeriodsFactor AS
865 
866 BEGIN
867   IF dbi_ZA_TX_YR_STRT >= dbi_ASG_STRT_DTE
868   THEN
869     trc_PosFactor := 1;
870   ELSE
871     trc_PosFactor := dbi_ZA_DYS_IN_YR / (dbi_ZA_TX_YR_END - dbi_ASG_STRT_DTE + 1);
872   END IF;
873 
874 EXCEPTION
875   WHEN OTHERS THEN
876     IF xpt_Msg = 'No Error' THEN
877       xpt_Msg := 'PossiblePeriodsFactor: '||TO_CHAR(SQLCODE);
878     END IF;
879        RAISE xpt_E;
880 
881 END PossiblePeriodsFactor;
882 
883 
884 FUNCTION Annualise
885   (p_YtdInc IN NUMBER
886   ,p_PtdInc IN NUMBER
887   ) RETURN NUMBER
888 AS
889   l_AnnFig  NUMBER(15,2);
890   l_PtdFact  NUMBER(15,2);
891 
892 BEGIN
893 
894   l_PtdFact := p_PtdInc / trc_PrdFactor;
895 
896   -- Payment over less than one period?
897   IF trc_PrdFactor < 1 THEN
898     l_AnnFig := ((l_PtdFact * dbi_ZA_PAY_PRDS_LFT)
899                     +(p_YtdInc - p_PtdInc)
900                     ) * trc_PosFactor;
901   ELSE
902     l_AnnFig := ((l_PtdFact * dbi_ZA_PAY_PRDS_LFT)
903                     +(p_YtdInc - l_PtdFact)
904                     ) * trc_PosFactor;
905   END IF;
906 RETURN l_AnnFig;
907 EXCEPTION
908   WHEN OTHERS THEN
909     IF xpt_Msg = 'No Error' THEN
910       xpt_Msg := 'Annualise: '||TO_CHAR(SQLCODE);
911     END IF;
912        RAISE xpt_E;
913 
914 END Annualise;
915 
916 
917 PROCEDURE Abatements AS
918 
919 -- Variables
920   l_65Year DATE;
921 
922 BEGIN
923 -- Initialise the figures needed for the calculation
924 -- of tax abatements and rebates, based on the
925 -- calculation type
926 --
927 -- NorCalc
928 IF trc_CalTyp = 'NorCalc' THEN
929 
930 -- Pension Fund Abatement
931 --
932   -- Period Calculation
933   --
934   trc_TxbIncYtd :=
935   (bal_AST_PRCHD_RVAL_NRFI_YTD
936   +bal_AST_PRCHD_RVAL_RFI_YTD
937   +bal_BP_YTD
938   +bal_BUR_AND_SCH_NRFI_YTD
939   +bal_BUR_AND_SCH_RFI_YTD
940   +bal_COMM_NRFI_YTD
941   +bal_COMM_RFI_YTD
942   +bal_COMP_ALL_NRFI_YTD
943   +bal_COMP_ALL_RFI_YTD
944   +bal_ENT_ALL_NRFI_YTD
945   +bal_ENT_ALL_RFI_YTD
946   +bal_FREE_ACCOM_NRFI_YTD
947   +bal_FREE_ACCOM_RFI_YTD
948   +bal_FREE_SERV_NRFI_YTD
949   +bal_FREE_SERV_RFI_YTD
950   +bal_LOW_LOANS_NRFI_YTD
951   +bal_LOW_LOANS_RFI_YTD
952   +bal_MLS_AND_VOUCH_NRFI_YTD
953   +bal_MLS_AND_VOUCH_RFI_YTD
954   +bal_MED_PAID_NRFI_YTD
955   +bal_MED_PAID_RFI_YTD
956   +bal_OTHER_TXB_ALL_NRFI_YTD
957   +bal_OTHER_TXB_ALL_RFI_YTD
958   +bal_OVTM_NRFI_YTD
959   +bal_OVTM_RFI_YTD
960   +bal_PYM_DBT_NRFI_YTD
961   +bal_PYM_DBT_RFI_YTD
962   +bal_RGT_AST_NRFI_YTD
963   +bal_RGT_AST_RFI_YTD
964   +bal_TXB_INC_NRFI_YTD
965   +bal_TXB_INC_RFI_YTD
966   +bal_TXB_PEN_NRFI_YTD
967   +bal_TXB_PEN_RFI_YTD
968   +bal_TEL_ALL_NRFI_YTD
969   +bal_TEL_ALL_RFI_YTD
970   +bal_TOOL_ALL_NRFI_YTD
971   +bal_TOOL_ALL_RFI_YTD
972   +bal_TA_NRFI_YTD
973   +bal_TA_RFI_YTD
974   +bal_USE_VEH_NRFI_YTD
975   +bal_USE_VEH_RFI_YTD
976   );
977   -- Annualise Period Taxable Income
978   trc_PerTxbInc := Annualise
979                  (p_YtdInc => trc_TxbIncYtd
980                  ,p_PtdInc => trc_TxbIncPtd
981                  );
982   -- Annualise Period Pension Fund Contributions
983   trc_PerPenFnd := Annualise
984                  (p_YtdInc => bal_CUR_PF_YTD
985                  ,p_PtdInc => bal_CUR_PF_PTD
986                  );
987   -- Annualise Period RFIable Contributions
988   trc_PerRfiCon := Annualise
989                  (p_ytdInc => bal_TOT_RFI_INC_YTD
990                  ,p_PtdInc => bal_TOT_RFI_INC_PTD
991                  );
992   -- Annual Calculation
993   --
994   -- Calculate Annual Taxable Income
995   trc_AnnTxbInc :=
996   (trc_PerTxbInc
997   +bal_AB_NRFI_YTD
998   +bal_AB_RFI_YTD
999   +bal_ANU_FRM_RET_FND_NRFI_YTD
1000   +bal_ANU_FRM_RET_FND_RFI_YTD
1001   +bal_PRCH_ANU_TXB_NRFI_YTD
1002   +bal_PRCH_ANU_TXB_RFI_YTD
1003   +bal_SHR_OPT_EXD_NRFI_YTD
1004   +bal_SHR_OPT_EXD_RFI_YTD
1005   +bal_TXB_AP_NRFI_YTD
1006   +bal_TXB_AP_RFI_YTD
1007   +bal_TXB_SUBS_NRFI_YTD
1008   +bal_TXB_SUBS_RFI_YTD
1009   );
1010   -- Annual Pension Fund Contribution
1011   trc_AnnPenFnd := trc_PerPenFnd + bal_ANN_PF_YTD;
1012   -- Annual Rfi Contribution
1013   trc_AnnRfiCon := trc_PerRfiCon + bal_TOT_RFI_AN_INC_YTD;
1014 
1015 -- Arrear Pension Fund Abatement
1016 --
1017   -- Check Arrear Pension Fund Frequency
1018   IF dbi_ARR_PF_FRQ = 'M' THEN
1019     trc_ArrPenFnd := Annualise
1020                    (p_YtdInc => bal_ARR_PF_YTD
1021                    ,p_PtdInc => bal_ARR_PF_PTD
1022                    )
1023                    +bal_EXC_ARR_PEN_ITD;
1024   ELSE
1025     trc_ArrPenFnd := bal_ARR_PF_YTD
1026                  + bal_EXC_ARR_PEN_ITD;
1027   END IF;
1028 
1029 -- Retirement Annuity Abatement
1030 --
1031 
1032   -- Calculate RA Contribution
1033   IF dbi_RA_FRQ = 'M' THEN
1034     trc_RetAnu := Annualise
1035                 (p_YtdInc => bal_CUR_RA_YTD
1036                 ,p_PtdINc => bal_CUR_RA_PTD
1037                 );
1038   ELSE
1039     trc_RetAnu := bal_CUR_RA_YTD;
1040   END IF;
1041 
1042   -- Calculate Nrfi Contribution based on Pension Fund
1043   -- Contributions
1044   IF bal_CUR_PF_YTD = 0 THEN
1045     trc_NrfiCon := Annualise
1046                  (p_YtdInc => bal_TOT_RFI_INC_YTD + bal_TOT_NRFI_INC_YTD
1047                  ,p_PtdInc => bal_TOT_RFI_INC_PTD + bal_TOT_NRFI_INC_PTD
1048                  )
1049                  +bal_TOT_NRFI_AN_INC_YTD
1050                  +bal_TOT_RFI_AN_INC_YTD;
1051   ELSE
1052     trc_NrfiCon := Annualise
1053                  (p_YtdInc => bal_TOT_NRFI_INC_YTD
1054                  ,p_PtdInc => bal_TOT_NRFI_INC_PTD
1055                  )
1056                  +bal_TOT_NRFI_AN_INC_YTD;
1057   END IF;
1058 
1059 
1060 -- Arrear Retirement Annuity Abatement
1061 --
1062   -- Check Arrear Retirement Annuity Frequency
1063   IF dbi_ARR_RA_FRQ = 'M' THEN
1064     trc_ArrRetAnu := Annualise
1065                    (p_YtdInc => bal_ARR_RA_YTD
1066                    ,p_PtdInc => bal_ARR_RA_PTD
1067                    )
1068                    +bal_EXC_ARR_RA_ITD;
1069   ELSE
1070     trc_ArrRetAnu := bal_ARR_RA_YTD
1071                  + bal_EXC_ARR_RA_ITD;
1072   END IF;
1073 
1074 
1075 -- Medical Aid Abatement
1076 --
1077   trc_MedAidAbm := Annualise
1078                  (p_YtdInc => bal_MED_CONTR_YTD
1079                  ,p_PtdInc => bal_MED_CONTR_PTD
1080                  );
1081 
1082 ELSIF trc_CalTyp IN ('YtdCalc','SitCalc') THEN
1083 
1084 -- Pension Fund Abatement
1085 --
1086 
1087   -- Period Calculation
1088   --
1089 
1090   -- Annualise Period Taxable Income
1091   trc_PerTxbInc := trc_TxbIncYtd * trc_SitFactor;
1092   -- Annualise Period Pension Fund Contribution
1093   trc_PerPenFnd := bal_CUR_PF_YTD * trc_SitFactor;
1094   -- Annualise Period Rfiable Contributions
1095   trc_PerRfiCon := bal_TOT_RFI_INC_YTD * trc_SitFactor;
1096 
1097   -- Annual Calculation
1098   --
1099 
1100   -- Calculate Annual Taxable Income
1101   trc_AnnTxbInc :=
1102   ( trc_PerTxbInc
1103   + bal_AB_NRFI_YTD
1104   + bal_AB_RFI_YTD
1105   + bal_ANU_FRM_RET_FND_NRFI_YTD
1106   + bal_ANU_FRM_RET_FND_RFI_YTD
1107   + bal_PRCH_ANU_TXB_NRFI_YTD
1108   + bal_PRCH_ANU_TXB_RFI_YTD
1109   + bal_SHR_OPT_EXD_NRFI_YTD
1110   + bal_SHR_OPT_EXD_RFI_YTD
1111   + bal_TXB_AP_NRFI_YTD
1112   + bal_TXB_AP_RFI_YTD
1113   + bal_TXB_SUBS_NRFI_YTD
1114   + bal_TXB_SUBS_RFI_YTD
1115   );
1116 
1117   -- Annual Pension Fund Contribution
1118   trc_AnnPenFnd := trc_PerPenFnd + bal_ANN_PF_YTD;
1119   -- Annual Rfi Contribution
1120   trc_AnnRfiCon := trc_PerRfiCon + bal_TOT_RFI_AN_INC_YTD;
1121 
1122 -- Arrear Pension Fund Abatement
1123 --
1124 
1125   -- Check Arrear Pension Fund Frequency
1126   IF dbi_ARR_PF_FRQ = 'M' THEN
1127     trc_ArrPenFnd := (bal_ARR_PF_YTD * trc_SitFactor)
1128                    +bal_EXC_ARR_PEN_ITD;
1129   ELSE
1130     trc_ArrPenFnd := bal_ARR_PF_YTD
1131                  + bal_EXC_ARR_PEN_ITD;
1132   END IF;
1133 
1134 -- Retirement Annuity Abatement
1135 --
1136 
1137   -- Calculate RA Contribution
1138   IF dbi_RA_FRQ = 'M' THEN
1139     trc_RetAnu := bal_CUR_RA_YTD * trc_SitFactor;
1140   ELSE
1141     trc_RetAnu := bal_CUR_RA_YTD;
1142   END IF;
1143 
1144   -- Calculate Nrfi Contribution based on Pension Fund
1145   -- Contributions
1146   IF bal_CUR_PF_YTD = 0 THEN
1147     trc_NrfiCon :=
1148     ((bal_TOT_RFI_INC_YTD
1149      + bal_TOT_NRFI_INC_YTD)* trc_SitFactor)
1150      +bal_TOT_NRFI_AN_INC_YTD
1151      +bal_TOT_RFI_AN_INC_YTD;
1152    ELSE
1153      trc_NrfiCon := (bal_TOT_NRFI_INC_YTD * trc_SitFactor)
1154                   +bal_TOT_NRFI_AN_INC_YTD;
1155    END IF;
1156 
1157 
1158 -- Arrear Retirement Annuity Abatement
1159 --
1160   -- Check Arrear Retirement Annuity Frequency
1161   IF dbi_ARR_RA_FRQ = 'M' THEN
1162     trc_ArrRetAnu := (bal_ARR_RA_YTD * trc_SitFactor)
1163                    +bal_EXC_ARR_RA_ITD;
1164   ELSE
1165     trc_ArrRetAnu := bal_ARR_RA_YTD
1166                  + bal_EXC_ARR_RA_ITD;
1167   END IF;
1168 
1169 
1170 -- Medical Aid Abatement
1171   trc_MedAidAbm := bal_MED_CONTR_YTD * trc_SitFactor;
1172 
1173 
1174 
1175 ELSIF trc_CalTyp = 'CalCalc' THEN
1176 -- Pension Fund Abatement
1177 --
1178   -- Period Calculation
1179   --
1180 
1181   -- Annualise Period Taxable Income
1182   trc_PerTxbInc := trc_TxbIncYtd * trc_SitFactor;
1183   -- Annualise Period Pension Fund Contribution
1184   trc_PerPenFnd := bal_CUR_PF_CYTD * trc_SitFactor;
1185   -- Annualise Period Rfiable Contributions
1186   trc_PerRfiCon := bal_TOT_RFI_INC_CYTD * trc_SitFactor;
1187 
1188 
1189   -- Annual Calculation
1190   --
1191 
1192   -- Calculate Annual Taxable Income
1193   trc_AnnTxbInc :=
1194   ( trc_PerTxbInc
1195   + bal_AB_NRFI_YTD
1196   + bal_AB_RFI_YTD
1197   + bal_ANU_FRM_RET_FND_NRFI_YTD
1198   + bal_ANU_FRM_RET_FND_RFI_YTD
1199   + bal_PRCH_ANU_TXB_NRFI_YTD
1200   + bal_PRCH_ANU_TXB_RFI_YTD
1201   + bal_SHR_OPT_EXD_NRFI_YTD
1202   + bal_SHR_OPT_EXD_RFI_YTD
1203   + bal_TXB_AP_NRFI_YTD
1204   + bal_TXB_AP_RFI_YTD
1205   + bal_TXB_SUBS_NRFI_YTD
1206   + bal_TXB_SUBS_RFI_YTD
1207   );
1208 
1209   -- Annual Pension Fund Contribution
1210   trc_AnnPenFnd := trc_PerPenFnd + bal_ANN_PF_YTD;
1211   -- Annual Rfi Contribution
1212   trc_AnnRfiCon := trc_PerRfiCon + bal_TOT_RFI_AN_INC_YTD;
1213 
1214 
1215 -- Arrear Pension Fund Abatement
1216 --
1217 
1218   -- Check Arrear Pension Fund Frequency
1219   IF dbi_ARR_PF_FRQ = 'M' THEN
1220     trc_ArrPenFnd := (bal_ARR_PF_CYTD * trc_SitFactor)
1221                    +bal_EXC_ARR_PEN_ITD;
1222   ELSE
1223     trc_ArrPenFnd := bal_ARR_PF_CYTD
1224                  + bal_EXC_ARR_PEN_ITD;
1225   END IF;
1226 
1227 -- Retirement Annuity Abatement
1228 --
1229 
1230   -- Calculate RA Contribution
1231   IF dbi_RA_FRQ = 'M' THEN
1232     trc_RetAnu := bal_CUR_RA_CYTD * trc_SitFactor;
1233   ELSE
1234     trc_RetAnu := bal_CUR_RA_CYTD;
1235   END IF;
1236 
1237   -- Calculate Nrfi Contribution based on Pension Fund
1238   -- Contributions
1239   IF bal_CUR_PF_CYTD = 0 THEN
1240     trc_NrfiCon :=
1241     ((bal_TOT_RFI_INC_CYTD
1242      + bal_TOT_NRFI_INC_CYTD)* trc_SitFactor)
1243      +bal_TOT_NRFI_AN_INC_CYTD
1244      +bal_TOT_RFI_AN_INC_CYTD;
1245    ELSE
1246      trc_NrfiCon := (bal_TOT_NRFI_INC_CYTD * trc_SitFactor)
1247                   +bal_TOT_NRFI_AN_INC_CYTD;
1248    END IF;
1249 
1250 -- Arrear Retirement Annuity Abatement
1251 --
1252   -- Check Arrear Retirement Annuity Frequency
1253   IF dbi_ARR_RA_FRQ = 'M' THEN
1254     trc_ArrRetAnu := (bal_ARR_RA_CYTD * trc_SitFactor)
1255                      +bal_EXC_ARR_RA_ITD;
1256   ELSE
1257     trc_ArrRetAnu := bal_ARR_RA_CYTD
1258                    + bal_EXC_ARR_RA_ITD;
1259   END IF;
1260 
1261 -- Medical Aid Abatement
1262 --
1263   trc_MedAidAbm := bal_MED_CONTR_CYTD * trc_SitFactor;
1264 
1265 ELSIF trc_CalTyp = 'SeaCalc' THEN
1266 
1267 -- Pension Fund Abatement
1268 --
1269   -- Period Calculation
1270   --
1271   -- Annualise Period Taxable Income
1272   trc_PerTxbInc := trc_TxbIncPtd * trc_SitFactor;
1273   -- Annualise Period Pension Fund Contribution
1274   trc_PerPenFnd := bal_CUR_PF_RUN * trc_SitFactor;
1275   -- Annualise Period Rfiable Contributions
1276   trc_PerRfiCon := bal_TOT_RFI_INC_RUN * trc_SitFactor;
1277 
1278   -- Annual Calculation
1279   --
1280 
1281   -- Calculate Annual Taxable Income
1282   trc_AnnTxbInc :=
1283   ( trc_PerTxbInc
1284   + bal_AB_NRFI_RUN
1285   + bal_AB_RFI_RUN
1286   + bal_ANU_FRM_RET_FND_NRFI_RUN
1287   + bal_ANU_FRM_RET_FND_RFI_RUN
1288   + bal_PRCH_ANU_TXB_NRFI_RUN
1289   + bal_PRCH_ANU_TXB_RFI_RUN
1290   + bal_SHR_OPT_EXD_NRFI_RUN
1291   + bal_SHR_OPT_EXD_RFI_RUN
1292   + bal_TXB_AP_NRFI_RUN
1293   + bal_TXB_AP_RFI_RUN
1294   + bal_TXB_SUBS_NRFI_RUN
1295   + bal_TXB_SUBS_RFI_RUN
1296   );
1297 
1298   -- Annual Pension Fund Contribution
1299   trc_AnnPenFnd := trc_PerPenFnd + bal_ANN_PF_RUN;
1300   -- Annual Rfi Contribution
1301   trc_AnnRfiCon := trc_PerRfiCon + bal_TOT_RFI_AN_INC_RUN;
1302 
1303 -- Arrear pension Fund Abatement
1304 --
1305   trc_ArrPenFndAbm := 0;
1306 -- Retirement Annuity Abatement
1307 --
1308 
1309   -- Calculate RA Contribution
1310   IF dbi_RA_FRQ = 'M' THEN
1311     trc_RetAnu := bal_CUR_RA_RUN * trc_SitFactor;
1312   ELSE
1313     trc_RetAnu := bal_CUR_RA_RUN;
1314   END IF;
1315 
1316   -- Calculate Nrfi Contribution based on Pension Fund
1317   -- Contributions
1318   IF bal_CUR_PF_RUN = 0 THEN
1319     trc_NrfiCon :=
1320     ((bal_TOT_RFI_INC_RUN
1321      + bal_TOT_NRFI_INC_RUN)* trc_SitFactor)
1322      +bal_TOT_NRFI_AN_INC_RUN
1323      +bal_TOT_RFI_AN_INC_RUN;
1324    ELSE
1325      trc_NrfiCon := (bal_TOT_NRFI_INC_RUN * trc_SitFactor)
1326                   +bal_TOT_NRFI_AN_INC_RUN;
1327    END IF;
1328 
1329 -- Arrear Retirement Annuity
1330 --
1331   trc_ArrRetAnuAbm := 0;
1332 -- Medical Aid Abatement
1333 --
1334   trc_MedAidAbm := bal_MED_CONTR_RUN * trc_SitFactor;
1335 
1336 
1337 ELSE
1338   NULL;
1339 END IF;
1340 
1341 
1342 -- CALCULATE THE ABATEMENTS
1343 --
1344 -- Pension Fund Abatement
1345 --
1346   -- Period Calculation
1347   -- Rfi contributions may not be more than Taxable income
1348   trc_PerRfiTxb := LEAST(trc_PerTxbInc, trc_PerRfiCon);
1349 
1350   -- Calculate the Pension Fund Maximum
1351   trc_PerPenFndMax := GREATEST( glb_ZA_PF_AN_MX_ABT
1352                             ,(glb_ZA_PF_MX_PRC / 100 * trc_PerRfiTxb)
1353                             );
1354   -- Calculate Period Pension Fund Abatement
1355   trc_PerPenFndAbm := LEAST(trc_PerPenFnd, trc_PerPenFndMax);
1356 
1357   -- Annual Calculation
1358   -- Taxable Rfi (least of Annual Taxable Income and Annual RFI)
1359   trc_AnnRfiTxb := LEAST(trc_AnnTxbInc, trc_AnnRfiCon);
1360 
1361   -- Calculate the Pension Fund Maximum
1362   trc_AnnPenFndMax := GREATEST(glb_ZA_PF_AN_MX_ABT
1363                             ,glb_ZA_PF_MX_PRC / 100 * trc_AnnRfiTxb
1364                             );
1365 
1366   -- Calculate Annual Pension Fund Abatement
1367   trc_AnnPenFndAbm := LEAST(trc_AnnPenFnd,trc_AnnPenFndMax);
1368 
1369 -- Arrear Pension Fund Abatement
1370 --
1371   trc_ArrPenFndAbm := LEAST(trc_ArrPenFnd, glb_ZA_ARR_PF_AN_MX_ABT);
1372 
1373 -- Retirement Annnnuity Abatement
1374 --
1375   -- Calculate the Retirement Annuity Maximum
1376   trc_RetAnuMax := GREATEST(glb_ZA_PF_AN_MX_ABT
1377                          ,glb_ZA_RA_AN_MX_ABT - trc_AnnPenFndAbm
1378                          ,glb_ZA_RA_MX_PRC / 100 * trc_NrfiCon
1379                          );
1380 
1381   -- Calculate Retirement Annuity Abatement
1382   trc_RetAnuAbm := LEAST(trc_RetAnu, trc_RetAnuMax);
1383 
1384 -- Arrear Retirement Annuity Abatement
1385 --
1386   trc_ArrRetAnuAbm := LEAST(trc_ArrRetAnu, glb_ZA_ARR_RA_AN_MX_ABT);
1387 
1388 -- Tax Rebates, Threshold Figure and Medical Aid
1389 --   Abatements
1390   -- Calculate the assignments 65 Year Date
1391   l_65Year := add_months(dbi_PER_DTE_OF_BRTH,780);
1392 
1393   IF l_65Year <= dbi_ZA_TX_YR_END THEN
1394     -- give the extra abatement
1395     trc_Rebate := glb_ZA_PRI_TX_RBT + glb_ZA_ADL_TX_RBT;
1396     trc_Threshold := glb_ZA_SC_TX_THRSHLD;
1397 
1398   ELSE
1399     -- not eligable for extra abatement
1400     trc_Rebate := glb_ZA_PRI_TX_RBT;
1401     trc_Threshold := glb_ZA_PRI_TX_THRSHLD;
1402     trc_MedAidAbm := 0;
1403 
1404   END IF;
1405 
1406 -- Total Abatements
1407 --
1408 -- Period Total Abatement
1409   trc_PerTotAbm := (trc_PerPenFndAbm
1410                    +trc_ArrPenFndAbm
1411                    +trc_RetAnuAbm
1412                    +trc_ArrRetAnuAbm
1413                    +trc_MedAidAbm
1414                    );
1415 
1416 -- Annual Total Abatements
1417   trc_AnnTotAbm := (trc_AnnPenFndAbm
1418                    +trc_ArrPenFndAbm
1419                    +trc_RetAnuAbm
1420                    +trc_ArrRetAnuAbm
1421                    +trc_MedAidAbm
1422                    );
1423 
1424 EXCEPTION
1425   WHEN OTHERS THEN
1426     IF xpt_Msg = 'No Error' THEN
1427        xpt_Msg := 'Abatements: '||TO_CHAR(SQLCODE);
1428     END IF;
1429        RAISE xpt_E;
1430 
1431 END Abatements;
1432 
1433 PROCEDURE ArrearExcess AS
1434 -- Variables
1435   l_PfExcessAmt NUMBER;
1436   l_RaExcessAmt NUMBER;
1437 
1438 BEGIN
1439 -- Pension Excess
1440   l_PfExcessAmt := (bal_ARR_PF_YTD + (bal_EXC_ARR_PEN_ITD - bal_EXC_ARR_PEN_PTD)) - glb_ZA_ARR_PF_AN_MX_ABT;
1441 
1442   IF l_PfExcessAmt > 0 THEN
1443     trc_PfUpdFig := -1*(bal_EXC_ARR_PEN_ITD) + l_PfExcessAmt;
1444   ELSE
1445     trc_PfUpdFig := -1*(bal_EXC_ARR_PEN_ITD);
1446   END IF;
1447 -- Retirement Annuity
1448   l_RaExcessAmt := (bal_ARR_RA_YTD + (bal_EXC_ARR_RA_ITD - bal_EXC_ARR_RA_PTD)) - glb_ZA_ARR_RA_AN_MX_ABT;
1449 
1450   IF l_RaExcessAmt > 0 THEN
1451     trc_RaUpdFig := -1*(bal_EXC_ARR_RA_ITD) + l_RaExcessAmt;
1452   ELSE
1453     trc_RaUpdFig := -1*(bal_EXC_ARR_RA_ITD);
1454   END IF;
1455 
1456 
1457 
1458 EXCEPTION
1459   WHEN OTHERS THEN
1460     IF xpt_Msg = 'No Error' THEN
1461        xpt_Msg := 'ArrearExcess: '||TO_CHAR(SQLCODE);
1462     END IF;
1463        RAISE xpt_E;
1464 
1465 END ArrearExcess;
1466 
1467 FUNCTION TaxLiability
1468   (p_Amt  IN NUMBER
1469   )RETURN  NUMBER
1470 AS
1471 
1472 -- Variables
1473 --
1474   l_user_table_id pay_user_tables.user_table_id%TYPE;
1475   l_fixed_column_id pay_user_columns.user_column_id%TYPE;
1476   l_limit_column_id pay_user_columns.user_column_id%TYPE;
1477   l_percentage_column_id pay_user_columns.user_column_id%TYPE;
1478   l_bracket_row pay_user_rows_f.user_row_id%TYPE;
1479   l_fixed pay_user_column_instances_f.value%TYPE;
1480   l_limit pay_user_column_instances_f.value%TYPE;
1481   l_percentage pay_user_column_instances_f.value%TYPE;
1482   l_effective_date pay_payroll_actions.effective_date%TYPE;
1483   tax_liability NUMBER(15,2);
1484   l_TxbAmt NUMBER(15,2);
1485 
1486 BEGIN
1487   IF dbi_TX_STA = 'C' THEN
1488     tax_liability := (p_Amt * dbi_TX_DIR_VAL) / 100;
1489   ELSIF dbi_TX_STA = 'D' THEN
1490     tax_liability := (p_Amt * dbi_TX_DIR_VAL) / 100;
1491   ELSIF dbi_TX_STA = 'E' THEN
1492     tax_liability := (p_Amt * glb_ZA_CC_TX_PRC) / 100;
1493   ELSIF dbi_TX_STA = 'F' THEN
1494     tax_liability := (p_Amt * glb_ZA_TMP_TX_RTE) / 100;
1495   ELSE
1496 
1497     /* Taxable Amount must be rounded off to two decimal places */
1498     l_TxbAmt := round(p_Amt,2);
1499 
1500     /* this selects the effective date for the payroll_run*/
1501     SELECT ppa.effective_date
1502       INTO l_effective_date
1503       FROM pay_payroll_actions ppa
1504      WHERE ppa.payroll_action_id = con_PRL_ACT_ID;
1505 
1506 
1507     /* Selects to get the relevant id's */
1508       SELECT user_table_id
1509         INTO l_user_table_id
1510         FROM pay_user_tables
1511        WHERE user_table_name = 'ZA_TAX_TABLE';
1512 
1513       select user_column_id
1514         into l_fixed_column_id
1515         from pay_user_columns
1516         where user_table_id = l_user_table_id
1517         and user_column_name = 'Fixed';
1518 
1519       select user_column_id
1520         into l_limit_column_id
1521         from pay_user_columns
1522         where user_table_id = l_user_table_id
1523         and user_column_name = 'Limit';
1524 
1525       select user_column_id
1526         into l_percentage_column_id
1527         from pay_user_columns
1528         where user_table_id = l_user_table_id
1529         and user_column_name = 'Percentage';
1530 
1531       select purf.user_row_id
1532         into l_bracket_row
1533         from pay_user_rows_f purf
1534         where purf.user_table_id = l_user_table_id
1535         and (l_effective_date >= purf.effective_start_date
1536         and l_effective_date <= purf.effective_end_date)
1537         and (l_TxbAmt >= purf.row_low_range_or_name
1538         and l_TxbAmt <= purf.row_high_range);
1539 
1540     /* Selects to get the actual values */
1541       select pucif.value
1542         into l_fixed
1543         from pay_user_column_instances_f pucif
1544         where pucif.user_row_id = l_bracket_row
1545         and (l_effective_date >= pucif.effective_start_date
1546         and l_effective_date <= pucif.effective_end_date)
1547         and pucif.user_column_id = l_fixed_column_id;
1548 
1549       select pucif.value
1550         into l_limit
1551         from pay_user_column_instances_f pucif
1552         where pucif.user_row_id = l_bracket_row
1553         and (l_effective_date >= pucif.effective_start_date
1554         and l_effective_date <= pucif.effective_end_date)
1555         and pucif.user_column_id = l_limit_column_id;
1556 
1557       select pucif.value
1558         into l_percentage
1559         from pay_user_column_instances_f pucif
1560         where pucif.user_row_id = l_bracket_row
1561         and (l_effective_date >= pucif.effective_start_date
1562         and l_effective_date <= pucif.effective_end_date)
1563         and pucif.user_column_id = l_percentage_column_id;
1564 
1565 
1566       tax_liability := (l_fixed + ((l_TxbAmt - l_limit) * (l_percentage / 100))) -  trc_Rebate;
1567   END IF;
1568 
1569   RETURN tax_liability ;
1570 
1571 EXCEPTION
1572   WHEN OTHERS THEN
1573     IF xpt_Msg = 'No Error' THEN
1574        xpt_Msg := 'TaxLiability: '||TO_CHAR(SQLCODE);
1575     END IF;
1576        RAISE xpt_E;
1577 
1578 END TaxLiability;
1579 
1580 
1581 FUNCTION DeAnnualise
1582   (p_Liab IN NUMBER
1583   ,p_TxOnYtd IN NUMBER
1584   ,p_TxOnPtd IN NUMBER
1585   ) RETURN NUMBER
1586 AS
1587   l_LiabRoy NUMBER(15,2);
1588   l_LiabFp  NUMBER(15,2);
1589 BEGIN
1590   l_LiabRoy := (p_liab/trc_PosFactor - (p_TxOnYtd - p_TxOnPtd))
1591            /dbi_ZA_PAY_PRDS_LFT * trc_PrdFactor;
1592 
1593   l_LiabFp := l_LiabRoy - p_TxOnPtd;
1594   RETURN l_LiabFp;
1595 
1596 EXCEPTION
1597   WHEN OTHERS THEN
1598     IF xpt_Msg = 'No Error' THEN
1599        xpt_Msg := 'DeAnnualise: '||TO_CHAR(SQLCODE);
1600     END IF;
1601        RAISE xpt_E;
1602 
1603 END DeAnnualise;
1604 
1605 
1606 PROCEDURE TrvAllYtd AS
1607 -- Cursors
1608 --
1609   -- Global Effective End Dates
1610   CURSOR c_GlbEffDte
1611     (p_ty_sd DATE       -- tax year start date
1612     ,p_ty_ed DATE       -- tax year end date
1613     )
1614   IS
1615   SELECT effective_end_date,
1616          to_number(global_value) global_value
1617     FROM ff_globals_f
1618     WHERE effective_end_date < p_ty_ed
1619       AND effective_end_date > p_ty_sd
1620       AND effective_end_date < dbi_ZA_CUR_PRD_END_DTE
1621       AND global_name = 'ZA_CAR_ALLOW_TAX_PERC';
1622 
1623 -- Variables
1624 --
1625   l_NrfiBalID  pay_balance_types.balance_type_id%TYPE;
1626   l_RfiBalID   pay_balance_types.balance_type_id%TYPE;
1627   l_StrtDate   DATE;
1628   l_EndDate    DATE;
1629   l_NrfiYtd    NUMBER(15,2) DEFAULT 0;
1630   l_CurNrfiYtd NUMBER(15,2) DEFAULT 0;
1631   l_TotNrfiYtd NUMBER(15,2) DEFAULT 0;
1632   l_CurTxbNrfi NUMBER(15,2) DEFAULT 0;
1633   l_TotTxbNrfi NUMBER(15,2) DEFAULT 0;
1634   l_RfiYtd     NUMBER(15,2) DEFAULT 0;
1635   l_CurRfiYtd  NUMBER(15,2) DEFAULT 0;
1636   l_TotRfiYtd  NUMBER(15,2) DEFAULT 0;
1637   l_CurTxbRfi  NUMBER(15,2) DEFAULT 0;
1638   l_TotTxbRfi  NUMBER(15,2) DEFAULT 0;
1639 
1640 BEGIN
1641 -- Retrieve Balance Type ID's
1642   SELECT balance_type_id
1643     INTO l_NrfiBalID
1644     FROM pay_balance_types
1645     WHERE legislation_code = 'ZA'
1646       AND balance_name = 'Travel Allowance NRFI';
1647 
1648   SELECT balance_type_id
1649     INTO l_RfiBalID
1650     FROM pay_balance_types
1651     WHERE legislation_code = 'ZA'
1652       AND balance_name = 'Travel Allowance RFI';
1653 -- Employee Tax Year Start and End Dates
1654 --
1655   l_StrtDate := GREATEST(dbi_ASG_STRT_DTE, dbi_ZA_TX_YR_STRT);
1656   l_EndDate := LEAST(dbi_ZA_ACT_END_DTE, dbi_ZA_TX_YR_END);
1657 
1658 -- Loop through cursor and for every end date caluclate the balance
1659   FOR v_Date IN c_GlbEffDte
1660                 (l_StrtDate
1661                 ,l_EndDate
1662                 )
1663   LOOP
1664   -- Nrfi Travel Allowance
1665   --
1666     -- Nrfi Balance At That Date
1667     -- 3491357
1668       /*l_NrfiYtd := py_za_bal.calc_asg_tax_ytd_date
1669                    (con_ASG_ID
1670                    ,l_NrfiBalID
1671                    ,v_Date.effective_end_date
1672                    );*/
1673       l_NrfiYtd := py_za_bal.get_balance_value
1674                    (con_ASG_ID
1675                    ,l_NrfiBalID
1676                    ,'_ASG_TAX_YTD'
1677                    ,v_Date.effective_end_date
1678                    );
1679     -- Take Off the Ytd value used already
1680       l_CurNrfiYtd := l_NrfiYtd - l_TotNrfiYtd;
1681     -- Update TotYtd value
1682       l_TotNrfiYtd := l_NrfiYtd;
1683     -- Get the Taxable Travel Allowance at that date
1684       l_CurTxbNrfi := l_CurNrfiYtd * v_Date.global_value/100;
1685     -- Add this to the total
1686       l_TotTxbNrfi := l_TotTxbNrfi + l_CurTxbNrfi;
1687 
1688   -- Rfi Travel Allowance
1689   --
1690     -- Rfi Balance At That Date
1691     -- 3491357
1692       /*l_RfiYtd := py_za_bal.calc_asg_tax_ytd_date
1693                   (con_ASG_ID
1694                   ,l_RfiBalID
1695                   ,v_Date.effective_end_date
1696                   );*/
1697         l_RfiYtd := py_za_bal.get_balance_value
1698                   (con_ASG_ID
1699                   ,l_RfiBalID
1700                   ,'_ASG_TAX_YTD'
1701                   ,v_Date.effective_end_date
1702                   );
1703      -- Take Off the Ytd value used already
1704        l_CurRfiYtd := l_RfiYtd - l_TotRfiYtd;
1705      -- Update TotYtd value
1706        l_TotRfiYtd := l_RfiYtd;
1707      -- Get the Taxable Travel Allowance at that date
1708        l_CurTxbRfi := l_CurRfiYtd * v_Date.global_value/100;
1709      -- Add this to the total
1710        l_TotTxbRfi := l_TotTxbRfi + l_CurTxbRfi;
1711 
1712   END LOOP;
1713 
1714 -- Calculate the current Taxable Travel Allowance Value
1715 -- add this to any calculated in the loop
1716 --
1717 -- Nrfi Travel Allowance
1718 --
1719   -- The Balance at present
1720     l_NrfiYtd := bal_TA_NRFI_YTD;
1721   -- Take Off the Ytd value used already
1722     l_CurNrfiYtd := l_NrfiYtd - l_TotNrfiYtd;
1723   -- Update TotYtd value
1724     l_TotNrfiYtd := l_NrfiYtd;
1725   -- Get the Taxable Travel Allowance at that date
1726     l_CurTxbNrfi := l_CurNrfiYtd * glb_ZA_TRV_ALL_TX_PRC/100;
1727   -- Add this to the total
1728     l_TotTxbNrfi := l_TotTxbNrfi + l_CurTxbNrfi;
1729 
1730 -- Rfi Travel Allowance
1731 --
1732   -- Rfi Balance At
1733     l_RfiYtd := bal_TA_RFI_YTD;
1734   -- Take Off the Ytd value used already
1735     l_CurRfiYtd := l_RfiYtd - l_TotRfiYtd;
1736   -- Update TotYtd value
1737     l_TotRfiYtd := l_RfiYtd;
1738   -- Get the Taxable Travel Allowance at that date
1739     l_CurTxbRfi := l_CurRfiYtd * glb_ZA_TRV_ALL_TX_PRC/100;
1740   -- Add this to the total
1741     l_TotTxbRfi := l_TotTxbRfi + l_CurTxbRfi;
1742 
1743 -- Update Globals
1744   bal_TA_NRFI_YTD := l_TotTxbNrfi;
1745   bal_TA_RFI_YTD := l_TotTxbRfi;
1746 
1747 EXCEPTION
1748   WHEN OTHERS THEN
1749     IF xpt_Msg = 'No Error' THEN
1750        xpt_Msg := 'TrvAllYtd: '||TO_CHAR(SQLCODE);
1751     END IF;
1752        RAISE xpt_E;
1753 
1754 END TrvAllYtd;
1755 
1756 PROCEDURE TrvAllCal AS
1757 -- Cursors
1758 --
1759   -- Global Effective End Dates
1760   CURSOR c_GlbEffDte
1761     (p_StrtDte DATE -- max(assignment start date ,Calendar year start)
1762     ,p_EndDte DATE -- tax year start date
1763     )
1764   IS
1765   SELECT effective_end_date,
1766          global_value
1767     FROM ff_globals_f
1768     WHERE effective_end_date > p_StrtDte
1769       AND effective_end_date < p_EndDte
1770       AND global_name = 'ZA_CAR_ALLOW_TAX_PERC';
1771 
1772 -- Variables
1773 --
1774   l_NrfiBalID  pay_balance_types.balance_type_id%TYPE;
1775   l_RfiBalID   pay_balance_types.balance_type_id%TYPE;
1776   l_StrtDate   DATE;
1777   l_EndDate    DATE;
1778   l_NrfiYtd    NUMBER(15,2) DEFAULT 0;
1779   l_CurNrfiYtd NUMBER(15,2) DEFAULT 0;
1780   l_TotNrfiYtd NUMBER(15,2) DEFAULT 0;
1781   l_CurTxbNrfi NUMBER(15,2) DEFAULT 0;
1782   l_TotTxbNrfi NUMBER(15,2) DEFAULT 0;
1783   l_RfiYtd     NUMBER(15,2) DEFAULT 0;
1784   l_CurRfiYtd  NUMBER(15,2) DEFAULT 0;
1785   l_TotRfiYtd  NUMBER(15,2) DEFAULT 0;
1786   l_CurTxbRfi  NUMBER(15,2) DEFAULT 0;
1787   l_TotTxbRfi  NUMBER(15,2) DEFAULT 0;
1788   l_GlbVal     NUMBER(15,2) DEFAULT 0;
1789 BEGIN
1790 -- Retrieve Balance Type ID's
1791   SELECT balance_type_id
1792     INTO l_NrfiBalID
1793     FROM pay_balance_types
1794     WHERE legislation_code = 'ZA'
1795       AND balance_name = 'Travel Allowance NRFI';
1796 
1797   SELECT balance_type_id
1798     INTO l_RfiBalID
1799     FROM pay_balance_types
1800     WHERE legislation_code = 'ZA'
1801       AND balance_name = 'Travel Allowance RFI';
1802 
1803 -- Employee Tax Year Start and End Dates
1804 --
1805   l_StrtDate := to_date('01-01-'||to_char(dbi_ZA_TX_YR_STRT,'YYYY')||''||'','DD-MM-YYYY');
1806   l_EndDate := dbi_ZA_TX_YR_STRT -1;
1807 
1808 -- Loop through cursor and for every end date caluclate the balance
1809   FOR v_Date IN c_GlbEffDte
1810                 (l_StrtDate
1811                 ,l_EndDate
1812                 )
1813   LOOP
1814   -- Nrfi Travel Allowance
1815   --
1816     -- Nrfi Balance At That Date
1817     -- 3491357
1818       /*l_NrfiYtd := py_za_bal.calc_asg_cal_ytd_date
1819                    (con_ASG_ID
1820                    ,l_NrfiBalID
1821                    ,v_Date.effective_end_date
1822                    );*/
1823         l_NrfiYtd := py_za_bal.get_balance_value
1824                    (con_ASG_ID
1825                    ,l_NrfiBalID
1826                    ,'_ASG_CAL_YTD'
1827                    ,v_Date.effective_end_date
1828                    );
1829     -- Take Off the Ytd value used already
1830       l_CurNrfiYtd := l_NrfiYtd - l_TotNrfiYtd;
1831     -- Update TotYtd value
1832       l_TotNrfiYtd := l_NrfiYtd;
1833     -- Get the Taxable Travel Allowance at that date
1834       l_CurTxbNrfi := l_CurNrfiYtd * v_Date.global_value/100;
1835     -- Add this to the total
1836       l_TotTxbNrfi := l_TotTxbNrfi + l_CurTxbNrfi;
1837 
1838   -- Rfi Travel Allowance
1839   --
1840     -- Rfi Balance At That Date
1841     -- 3491357
1842       /*l_RfiYtd := py_za_bal.calc_asg_cal_ytd_date
1843                   (con_ASG_ID
1844                   ,l_RfiBalID
1845                   ,v_Date.effective_end_date
1846                   );*/
1847         l_RfiYtd := py_za_bal.get_balance_value
1848                   (con_ASG_ID
1849                   ,l_RfiBalID
1850                   ,'_ASG_CAL_YTD'
1851                   ,v_Date.effective_end_date
1852                   );
1853      -- Take Off the Ytd value used already
1854        l_CurRfiYtd := l_RfiYtd - l_TotRfiYtd;
1855      -- Update TotYtd value
1856        l_TotRfiYtd := l_RfiYtd;
1857      -- Get the Taxable Travel Allowance at that date
1858        l_CurTxbRfi := l_CurRfiYtd * v_Date.global_value/100;
1859      -- Add this to the total
1860        l_TotTxbRfi := l_TotTxbRfi + l_CurTxbRfi;
1861 
1862   END LOOP;
1863 
1864 -- Calculate the current Taxable Travel Allowance Value
1865 -- add this to any calculated in the loop
1866 --
1867 
1868 -- Retrieve the Global value effective on l_EndDate
1869 --
1870   SELECT TO_NUMBER(global_value)
1871     INTO l_GlbVal
1872     FROM ff_globals_f
1873    WHERE l_EndDate between effective_start_date and effective_end_date
1874      AND global_name = 'ZA_CAR_ALLOW_TAX_PERC';
1875 -- Nrfi Travel Allowance
1876 --
1877   -- The Balance at present
1878     l_NrfiYtd := bal_TA_NRFI_CYTD;
1879   -- Take Off the Ytd value used already
1880     l_CurNrfiYtd := l_NrfiYtd - l_TotNrfiYtd;
1881   -- Update TotYtd value
1882     l_TotNrfiYtd := l_NrfiYtd;
1883   -- Get the Taxable Travel Allowance at that date
1884     l_CurTxbNrfi := l_CurNrfiYtd * l_GlbVal/100;
1885   -- Add this to the total
1886     l_TotTxbNrfi := l_TotTxbNrfi + l_CurTxbNrfi;
1887 
1888 -- Rfi Travel Allowance
1889 --
1890   -- Rfi Balance At
1891     l_RfiYtd := bal_TA_RFI_CYTD;
1892   -- Take Off the Ytd value used already
1893     l_CurRfiYtd := l_RfiYtd - l_TotRfiYtd;
1894   -- Update TotYtd value
1895     l_TotRfiYtd := l_RfiYtd;
1896   -- Get the Taxable Travel Allowance at that date
1897     l_CurTxbRfi := l_CurRfiYtd * l_GlbVal/100;
1898   -- Add this to the total
1899     l_TotTxbRfi := l_TotTxbRfi + l_CurTxbRfi;
1900 
1901 -- Update Out Parameters
1902   bal_TA_NRFI_CYTD := l_TotTxbNrfi;
1903   bal_TA_RFI_CYTD := l_TotTxbRfi;
1904 
1905 
1906 EXCEPTION
1907   WHEN OTHERS THEN
1908     IF xpt_Msg = 'No Error' THEN
1909        xpt_Msg := 'TrvAllCal: '||TO_CHAR(SQLCODE);
1910     END IF;
1911        RAISE xpt_E;
1912 
1913 END TrvAllCal;
1914 
1915 
1916 PROCEDURE NpVal(
1917   p_Rf IN BOOLEAN DEFAULT FALSE -- Refund Allowed Regardless
1918   )
1919 AS
1920 
1921 -- Type Declaration
1922 --
1923   TYPE r_Row IS RECORD(
1924     Ovrrde BOOLEAN
1925    ,Lib    NUMBER
1926    );
1927 
1928   TYPE t_Table IS TABLE OF r_Row
1929     INDEX BY BINARY_INTEGER;
1930 -- Variable Declaration
1931 --
1932   t_Liabilities t_Table;
1933 
1934   l_TotLib NUMBER(15,2); -- Total Liability
1935   l_TotNp NUMBER(15,2); -- Total Net Pay
1936   l_RecVal NUMBER(15,2); -- Recovery Value
1937   l_NewLib NUMBER(15,2); -- New Liability
1938   i NUMBER; -- Counter
1939 
1940 BEGIN
1941 -- Set up the Table
1942   t_Liabilities(1).Ovrrde := trc_NpValNIOvr;
1943   t_Liabilities(1).Lib := trc_LibFpNI;
1944 
1945   t_Liabilities(2).Ovrrde := trc_NpValFBOvr;
1946   t_Liabilities(2).Lib := trc_LibFpFB;
1947 
1948   t_Liabilities(3).Ovrrde := trc_NpValTAOvr;
1949   t_Liabilities(3).Lib := trc_LibFpTA;
1950 
1951   t_Liabilities(4).Ovrrde := trc_NpValBPOvr;
1952   t_Liabilities(4).Lib := trc_LibFpBP;
1953 
1954   t_Liabilities(5).Ovrrde := trc_NpValABOvr;
1955   t_Liabilities(5).Lib := trc_LibFpAB;
1956 
1957   t_Liabilities(6).Ovrrde := trc_NpValAPOvr;
1958   t_Liabilities(6).Lib := trc_LibFpAP;
1959 
1960   t_Liabilities(7).Ovrrde := trc_NpValPOOvr;
1961   t_Liabilities(7).Lib := trc_LibFpPO;
1962 
1963 
1964 -- Sum the Liabilities
1965   l_TotLib :=
1966   (trc_LibFpNI
1967   +trc_LibFpFB
1968   +trc_LibFpTA
1969   +trc_LibFpBP
1970   +trc_LibFpAB
1971   +trc_LibFpAP
1972   +trc_LibFpPO
1973   );
1974 
1975 -- Set Net Pay
1976   l_TotNp := bal_NET_PAY_RUN;
1977 
1978 -- Start Validation
1979 --
1980   IF l_TotLib = 0 THEN
1981     NULL;
1982   ELSIF l_TotLib > 0 THEN
1983 
1984     IF l_TotNp > 0 THEN
1985 
1986       IF l_TotLib = l_TotNp THEN
1987         NULL;
1988       ELSIF l_TotLib > l_TotNp THEN
1989         l_RecVal := l_TotLib - l_TotNp;
1990         i:= 1;
1991 
1992         FOR i IN 1..7 LOOP
1993 
1994           IF t_Liabilities(i).Lib = 0 THEN
1995             NULL;
1996           ELSIF t_Liabilities(i).Lib > 0 THEN
1997             l_NewLib := t_Liabilities(i).Lib - LEAST(t_Liabilities(i).Lib,l_RecVal);
1998             l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
1999             t_Liabilities(i).Lib := l_NewLib;
2000             trc_LibWrn := 'Warning: Net Pay Balance not enough for Tax Recovery';
2001           ELSE -- lib < 0
2002             NULL;
2003           END IF;
2004 
2005         END LOOP;
2006 
2007       ELSE -- l_TotLib > 0,l_TotNp > 0,l_TotLib < l_TotNp
2008        NULL;
2009       END IF;
2010 
2011     ELSE -- l_TotLib > 0,l_TotNp <= 0
2012       l_RecVal := l_TotLib;
2013       i := 1;
2014 
2015       FOR i IN 1..7 LOOP
2016 
2017         IF t_Liabilities(i).Lib = 0 THEN
2018           NULL;
2019         ELSIF t_Liabilities(i).Lib > 0 THEN
2020           l_NewLib := t_Liabilities(i).Lib - LEAST(t_Liabilities(i).Lib,l_RecVal);
2021           l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
2022           t_Liabilities(i).Lib := l_NewLib;
2023           trc_LibWrn := 'Warning: Net Pay Balance not enough for Tax Recovery';
2024         ELSE -- lib < 0
2025           -- Has the liability been Overridden?
2026           IF t_Liabilities(i).Ovrrde THEN
2027             NULL;
2028           -- Is the assignment under SITE
2029           ELSIF p_Rf THEN
2030             NULL;
2031           ELSE
2032             t_Liabilities(i).Lib := 0;
2033           END IF;
2034 
2035         END IF;
2036 
2037       END LOOP;
2038 
2039     END IF;
2040 
2041   ELSE -- l_TotLib < 0
2042     IF p_Rf THEN
2043       NULL;
2044     ELSE
2045       l_RecVal := l_TotLib;
2046       i := 1;
2047 
2048       FOR i IN 1..7 LOOP
2049 
2050         IF t_Liabilities(i).Lib = 0 THEN
2051           NULL;
2052         ELSIF t_Liabilities(i).Lib > 0 THEN
2053           NULL;
2054         ELSE -- l_lib < 0
2055           -- Has the liability been Overridden?
2056           IF t_Liabilities(i).Ovrrde THEN
2057             NULL;
2058           ELSE
2059             l_NewLib := t_Liabilities(i).Lib - GREATEST(t_Liabilities(i).Lib,l_RecVal);
2060             l_RecVal := l_RecVal - (t_Liabilities(i).Lib - l_NewLib);
2061             t_Liabilities(i).Lib := l_NewLib;
2062           END IF;
2063 
2064         END IF;
2065 
2066       END LOOP;
2067 
2068     END IF;
2069 
2070   END IF;
2071 
2072   trc_LibFpNI := t_Liabilities(1).Lib;
2073   trc_LibFpFB := t_Liabilities(2).Lib;
2074   trc_LibFpTA := t_Liabilities(3).Lib;
2075   trc_LibFpBP := t_Liabilities(4).Lib;
2076   trc_LibFpAB := t_Liabilities(5).Lib;
2077   trc_LibFpAP := t_Liabilities(6).Lib;
2078   trc_LibFpPO := t_Liabilities(7).Lib;
2079 
2080 EXCEPTION
2081   WHEN OTHERS THEN
2082   IF xpt_Msg = 'No Error' THEN
2083      xpt_Msg := 'NpVal: '||TO_CHAR(SQLCODE);
2084   END IF;
2085      RAISE xpt_E;
2086 
2087 END NpVal;
2088 
2089 
2090 -- DaysWorked
2091 /*  Returns the number of days that the person has worked
2092     This could be a negative number that would indicate
2093     a LatePayePeriod
2094 */
2095 FUNCTION DaysWorked RETURN NUMBER
2096 AS
2097   l_DaysWorked NUMBER;
2098   l_EndDte DATE;
2099   l_StrtDte DATE;
2100 
2101 BEGIN
2102   IF trc_CalTyp = 'YtdCalc' THEN
2103     l_EndDte := dbi_ZA_CUR_PRD_STRT_DTE;
2104     l_StrtDte := GREATEST(dbi_ASG_STRT_DTE, dbi_ZA_TX_YR_STRT);
2105   ELSIF trc_CalTyp = 'CalCalc' THEN
2106     l_EndDte := dbi_ZA_TX_YR_STRT;
2107     l_StrtDte := GREATEST(dbi_ASG_STRT_DTE,
2108      to_date('01-JAN-'||to_char(to_number(to_char(dbi_ZA_TX_YR_END,'YYYY'))-1),'DD/MM/YYYY'));
2109   ELSIF trc_CalTyp = 'SitCalc' THEN
2110     l_EndDte := LEAST(dbi_ZA_ACT_END_DTE, dbi_ZA_TX_YR_END);
2111     l_StrtDte := GREATEST(dbi_ASG_STRT_DTE, dbi_ZA_TX_YR_STRT);
2112   END IF;
2113 
2114   l_DaysWorked := l_EndDte - l_StrtDte + 1;
2115 
2116   RETURN l_DaysWorked;
2117   EXCEPTION
2118     WHEN OTHERS THEN
2119     IF xpt_Msg = 'No Error' THEN
2120        xpt_Msg := 'DaysWorked: '||TO_CHAR(SQLCODE);
2121     END IF;
2122        RAISE xpt_E;
2123 
2124 END DaysWorked;
2125 
2126 
2127 PROCEDURE SitPaySplit
2128 AS
2129   l_TxOnSitLim NUMBER(15,2);
2130   l_SitAblTx NUMBER(15,2);
2131 BEGIN
2132 -- Check the Tax Status of the Employee
2133 --
2134   IF dbi_TX_STA in ('C','D','E','F') THEN
2135     -- Check for SitePeriod
2136     IF SitePeriod THEN
2137       trc_PayeVal :=
2138       (bal_TAX_YTD
2139       +trc_LibFpNI
2140       +trc_LibFpFB
2141       +trc_LibFpTA
2142       +trc_LibFpBP
2143       +trc_LibFpAB
2144       +trc_LibFpAP
2145       +trc_LibFpPO
2146       ) - bal_PAYE_YTD;
2147 
2148       trc_SiteVal := -1*bal_SITE_YTD;
2149 
2150     ELSE
2151       trc_PayeVal := 0 - bal_PAYE_YTD;
2152       trc_SiteVal := 0 - bal_SITE_YTD;
2153     END IF;
2154   ELSIF dbi_TX_STA in ('A','B') THEN
2155     -- Get the Tax Liability on the Site Limit
2156     l_TxOnSitLim := TaxLiability(p_Amt => glb_ZA_SIT_LIM)/trc_SitFactor;
2157     -- Get the Tax Amount Liable for SITE
2158     l_SitAblTx :=
2159     (bal_TX_ON_NI_YTD
2160     +bal_TX_ON_FB_YTD
2161     +bal_TX_ON_BP_YTD
2162     +bal_TX_ON_AB_YTD
2163     +bal_TX_ON_AP_YTD
2164     +trc_LibFpNI
2165     +trc_LibFpFB
2166     +trc_LibFpBP
2167     +trc_LibFpAB
2168     +trc_LibFpAP
2169     );
2170     -- Check the Limit
2171     IF l_SitAblTx > l_TxOnSitLim THEN
2172       trc_SiteVal := l_TxOnSitLim - bal_SITE_YTD;
2173 
2174       trc_PayeVal := (
2175         (bal_TAX_YTD
2176         +trc_LibFpNI
2177         +trc_LibFpFB
2178         +trc_LibFpBP
2179         +trc_LibFpAB
2180         +trc_LibFpAP
2181         +trc_LibFpTA
2182         +trc_LibFpPO
2183         ) - l_TxOnSitLim) - bal_PAYE_YTD;
2184 
2185     ELSE
2186       IF (bal_TX_ON_TA_YTD
2187          +trc_LibFpTA
2188          +bal_TX_ON_PO_YTD
2189          +trc_LibFpPO
2190          ) <= 0 THEN
2191         trc_SiteVal := (bal_TAX_YTD
2192                        +trc_LibFpNI
2193                        +trc_LibFpFB
2194                        +trc_LibFpBP
2195                        +trc_LibFpAB
2196                        +trc_LibFpAP
2197                        +trc_LibFpTA
2198                        +trc_LibFpPO) - bal_SITE_YTD;
2199 
2200         trc_PayeVal := 0 - bal_PAYE_YTD;
2201       ELSE
2202         trc_SiteVal := l_SitAblTx - bal_SITE_YTD;
2203 
2204         trc_PayeVal := (
2205           (bal_TAX_YTD
2206           +trc_LibFpNI
2207           +trc_LibFpFB
2208           +trc_LibFpBP
2209           +trc_LibFpAB
2210           +trc_LibFpAP
2211           +trc_LibFpTA
2212           +trc_LibFpPO
2213           ) - l_SitAblTx) - bal_PAYE_YTD;
2214       END IF;
2215 
2216     END IF;
2217 
2218   ELSIF dbi_TX_STA = 'G' THEN
2219      -- Get the SitFactor YTD
2220      trc_SitFactor := glb_ZA_WRK_DYS_PR_YR / bal_TOT_SEA_WRK_DYS_WRK_YTD;
2221     -- Get the Tax Liability on the Site Limit
2222     l_TxOnSitLim := TaxLiability(p_Amt => glb_ZA_SIT_LIM)/trc_SitFactor;
2223     -- Get the Tax Amount Liable for SITE
2224     l_SitAblTx :=
2225     (bal_TX_ON_NI_YTD
2226     +bal_TX_ON_FB_YTD
2227     +bal_TX_ON_AP_YTD
2228     +trc_LibFpNI
2229     +trc_LibFpFB
2230     +trc_LibFpAP
2231     );
2232     -- Check the Limit
2233     IF l_SitAblTx > l_TxOnSitLim THEN
2234       trc_SiteVal := l_TxOnSitLim - bal_SITE_YTD;
2235       trc_PayeVal := ((bal_TX_ON_PO_YTD+trc_LibFpPO) +(l_SitAblTx - l_TxOnSitLim)) - bal_PAYE_YTD;
2236     ELSE
2237       trc_SiteVal := l_SitAblTx - bal_SITE_YTD;
2238       trc_PayeVal := bal_TX_ON_PO_YTD + trc_LibFpPO  - bal_PAYE_YTD;
2239     END IF;
2240 
2241   ELSE -- set the globals to zero
2242     trc_PayeVal := 0 - bal_PAYE_YTD;
2243     trc_SiteVal := 0 - bal_SITE_YTD;
2244 
2245   END IF;
2246 
2247 EXCEPTION
2248   WHEN OTHERS THEN
2249     IF xpt_Msg = 'No Error' THEN
2250        xpt_Msg := 'SitPaySplit: '||TO_CHAR(SQLCODE);
2251     END IF;
2252        RAISE xpt_E;
2253 
2254 END SitPaySplit;
2255 
2256 
2257 -- Trace Function
2258 --
2259 PROCEDURE Trace AS
2260 
2261 BEGIN
2262 
2263 /*DELETE FROM pay_za_tax_traces pztt
2264    WHERE pztt.prl_act_id not in (
2265    SELECT payroll_action_id
2266      from pay_payroll_actions)
2267 */
2268 INSERT INTO pay_za_tax_traces(
2269  ASG_ACT_ID
2270 ,ASG_ID
2271 ,PRL_ACT_ID
2272 ,PRL_ID
2273 ,TX_STA
2274 ,PER_AGE
2275 ,CalTyp
2276 ,TX_DIR_VAL
2277 ,It3Ind
2278 ,TxPercVal
2279 ,ASG_STRT_DTE
2280 ,ZA_ACT_END_DTE
2281 ,ZA_CUR_PRD_STRT_DTE
2282 ,ZA_CUR_PRD_END_DTE
2283 ,ZA_TX_YR_STRT
2284 ,ZA_TX_YR_END
2285 ,SES_DTE
2286 ,PrdFactor
2287 ,PosFactor
2288 ,SitFactor
2289 ,ZA_PAY_PRDS_LFT
2290 ,ZA_PAY_PRDS_PER_YR
2291 ,ZA_DYS_IN_YR
2292 ,SEA_WRK_DYS_WRK
2293 ,ARR_PF_FRQ
2294 ,ARR_RA_FRQ
2295 ,BP_TX_RCV
2296 ,RA_FRQ
2297 ,TxbIncPtd
2298 ,BseErn
2299 ,TxbBseInc
2300 ,TotLibBse
2301 ,TxbIncYtd
2302 ,PerTxbInc
2303 ,PerPenFnd
2304 ,PerRfiCon
2305 ,PerRfiTxb
2306 ,PerPenFndMax
2307 ,PerPenFndAbm
2308 ,AnnTxbInc
2309 ,AnnPenFnd
2310 ,AnnRfiCon
2311 ,AnnRfiTxb
2312 ,AnnPenFndMax
2313 ,AnnPenFndAbm
2314 ,ArrPenFnd
2315 ,ArrPenFndAbm
2316 ,RetAnu
2317 ,NrfiCon
2318 ,RetAnuMax
2319 ,RetAnuAbm
2320 ,ArrRetAnu
2321 ,ArrRetAnuAbm
2322 ,Rebate
2323 ,Threshold
2324 ,MedAidAbm
2325 ,PerTotAbm
2326 ,AnnTotAbm
2327 ,NorIncYtd
2328 ,NorIncPtd
2329 ,NorErn
2330 ,TxbNorInc
2331 ,LibFyNI
2332 ,TX_ON_NI_YTD
2333 ,TX_ON_NI_PTD
2334 ,LibFpNI
2335 ,FrnBenYtd
2336 ,FrnBenPtd
2337 ,FrnBenErn
2338 ,TxbFrnInc
2339 ,LibFyFB
2340 ,TX_ON_FB_YTD
2341 ,TX_ON_FB_PTD
2342 ,LibFpFB
2343 ,TrvAllYtd
2344 ,TrvAllPtd
2345 ,TrvAllErn
2346 ,TxbTrvInc
2347 ,LibFyTA
2348 ,TX_ON_TA_YTD
2349 ,TX_ON_TA_PTD
2350 ,LibFpTA
2351 ,BonProYtd
2352 ,BonProPtd
2353 ,BonProErn
2354 ,TxbBonProInc
2355 ,LibFyBP
2356 ,TX_ON_BP_YTD
2357 ,TX_ON_BP_PTD
2358 ,LibFpBP
2359 ,AnnBonYtd
2360 ,AnnBonErn
2361 ,TxbAnnBonInc
2362 ,LibFyAB
2363 ,TX_ON_AB_YTD
2364 ,TX_ON_AB_PTD
2365 ,LibFpAB
2366 ,AnnPymYtd
2367 ,AnnPymPtd
2368 ,AnnPymErn
2369 ,TxbAnnPymInc
2370 ,LibFyAP
2371 ,TX_ON_AP_YTD
2372 ,TX_ON_AP_PTD
2373 ,LibFpAP
2374 ,PblOffYtd
2375 ,PblOffPtd
2376 ,PblOffErn
2377 ,LibFyPO
2378 ,TX_ON_PO_YTD
2379 ,TX_ON_PO_PTD
2380 ,LibFpPO
2381 ,MsgTxStatus
2382 ,LibWrn
2383 ,PayValue
2384 ,PayeVal
2385 ,SiteVal
2386 )
2387 VALUES(
2388  con_ASG_ACT_ID
2389 ,con_ASG_ID
2390 ,con_PRL_ACT_ID
2391 ,con_PRL_ID
2392 ,dbi_TX_STA
2393 ,dbi_PER_AGE
2394 ,trc_CalTyp
2395 ,dbi_TX_DIR_VAL
2396 ,trc_It3Ind
2397 ,trc_TxPercVal
2398 ,dbi_ASG_STRT_DTE
2399 ,dbi_ZA_ACT_END_DTE
2400 ,dbi_ZA_CUR_PRD_STRT_DTE
2401 ,dbi_ZA_CUR_PRD_END_DTE
2402 ,dbi_ZA_TX_YR_STRT
2403 ,dbi_ZA_TX_YR_END
2404 ,dbi_SES_DTE
2405 ,trc_PrdFactor
2406 ,trc_PosFactor
2407 ,trc_SitFactor
2408 ,dbi_ZA_PAY_PRDS_LFT
2409 ,dbi_ZA_PAY_PRDS_PER_YR
2410 ,dbi_ZA_DYS_IN_YR
2411 ,dbi_SEA_WRK_DYS_WRK
2412 ,dbi_ARR_PF_FRQ
2413 ,dbi_ARR_RA_FRQ
2414 ,dbi_BP_TX_RCV
2415 ,dbi_RA_FRQ
2416 ,trc_TxbIncPtd
2417 ,trc_BseErn
2418 ,trc_TxbBseInc
2419 ,trc_TotLibBse
2420 ,trc_TxbIncYtd
2421 ,trc_PerTxbInc
2422 ,trc_PerPenFnd
2423 ,trc_PerRfiCon
2424 ,trc_PerRfiTxb
2425 ,trc_PerPenFndMax
2426 ,trc_PerPenFndAbm
2427 ,trc_AnnTxbInc
2428 ,trc_AnnPenFnd
2429 ,trc_AnnRfiCon
2430 ,trc_AnnRfiTxb
2431 ,trc_AnnPenFndMax
2432 ,trc_AnnPenFndAbm
2433 ,trc_ArrPenFnd
2434 ,trc_ArrPenFndAbm
2435 ,trc_RetAnu
2436 ,trc_NrfiCon
2437 ,trc_RetAnuMax
2438 ,trc_RetAnuAbm
2439 ,trc_ArrRetAnu
2440 ,trc_ArrRetAnuAbm
2441 ,trc_Rebate
2442 ,trc_Threshold
2443 ,trc_MedAidAbm
2444 ,trc_PerTotAbm
2445 ,trc_AnnTotAbm
2446 ,trc_NorIncYtd
2447 ,trc_NorIncPtd
2448 ,trc_NorErn
2449 ,trc_TxbNorInc
2450 ,trc_LibFyNI
2451 ,bal_TX_ON_NI_YTD
2452 ,bal_TX_ON_NI_PTD
2453 ,trc_LibFpNI
2454 ,trc_FrnBenYtd
2455 ,trc_FrnBenPtd
2456 ,trc_FrnBenErn
2457 ,trc_TxbFrnInc
2458 ,trc_LibFyFB
2459 ,bal_TX_ON_FB_YTD
2460 ,bal_TX_ON_FB_PTD
2461 ,trc_LibFpFB
2462 ,trc_TrvAllYtd
2463 ,trc_TrvAllPtd
2464 ,trc_TrvAllErn
2465 ,trc_TxbTrvInc
2466 ,trc_LibFyTA
2467 ,bal_TX_ON_TA_YTD
2468 ,bal_TX_ON_TA_PTD
2469 ,trc_LibFpTA
2470 ,trc_BonProYtd
2471 ,trc_BonProPtd
2472 ,trc_BonProErn
2473 ,trc_TxbBonProInc
2474 ,trc_LibFyBP
2475 ,bal_TX_ON_BP_YTD
2476 ,bal_TX_ON_BP_PTD
2477 ,trc_LibFpBP
2478 ,trc_AnnBonYtd
2479 ,trc_AnnBonErn
2480 ,trc_TxbAnnBonInc
2481 ,trc_LibFyAB
2482 ,bal_TX_ON_AB_YTD
2483 ,bal_TX_ON_AB_PTD
2484 ,trc_LibFpAB
2485 ,trc_AnnPymYtd
2486 ,trc_AnnPymPtd
2487 ,trc_AnnPymErn
2488 ,trc_TxbAnnPymInc
2489 ,trc_LibFyAP
2490 ,bal_TX_ON_AP_YTD
2491 ,bal_TX_ON_AP_PTD
2492 ,trc_LibFpAP
2493 ,trc_PblOffYtd
2494 ,trc_PblOffPtd
2495 ,trc_PblOffErn
2496 ,trc_LibFyPO
2497 ,bal_TX_ON_PO_YTD
2498 ,bal_TX_ON_PO_PTD
2499 ,trc_LibFpPO
2500 ,trc_MsgTxStatus
2501 ,trc_LibWrn
2502 ,trc_PayValue
2503 ,trc_PayeVal
2504 ,trc_SiteVal);
2505 
2506 EXCEPTION
2507   WHEN OTHERS THEN
2508     IF xpt_Msg = 'No Error' THEN
2509        xpt_Msg := 'Trace: '||TO_CHAR(SQLCODE);
2510     END IF;
2511        RAISE xpt_E;
2512 
2513 END Trace;
2514 
2515 PROCEDURE ClearGlobals AS
2516 
2517 BEGIN
2518   -- Calculation Type
2519   trc_CalTyp := 'Unknown';
2520   -- Factors
2521   trc_TxbIncPtd := 0;
2522   trc_PrdFactor := 0;
2523   trc_PosFactor := 0;
2524   trc_SitFactor := 0;
2525   -- Base Income
2526   trc_BseErn := 0;
2527   trc_TxbBseInc := 0;
2528   trc_TotLibBse := 0;
2529   -- Period Pension Fund
2530   trc_TxbIncYtd := 0;
2531   trc_PerTxbInc := 0;
2532   trc_PerPenFnd := 0;
2533   trc_PerRfiCon := 0;
2534   trc_PerRfiTxb := 0;
2535   trc_PerPenFndMax := 0;
2536   trc_PerPenFndAbm := 0;
2537   -- Annual Pension Fund
2538   trc_AnnTxbInc := 0;
2539   trc_AnnPenFnd := 0;
2540   trc_AnnRfiCon := 0;
2541   trc_AnnRfiTxb := 0;
2542   trc_AnnPenFndMax := 0;
2543   trc_AnnPenFndAbm := 0;
2544   -- Arrear Pension
2545   trc_ArrPenFnd := 0;
2546   trc_ArrPenFndAbm := 0;
2547   trc_PfUpdFig := 0;
2548   -- Retirement Annuity
2549   trc_RetAnu := 0;
2550   trc_NrfiCon := 0;
2551   trc_RetAnuMax := 0;
2552   trc_RetAnuAbm := 0;
2553   -- Arrear Retirement Annuity
2554   trc_ArrRetAnu := 0;
2555   trc_ArrRetAnuAbm := 0;
2556   trc_RaUpdFig := 0;
2557   -- Rebates Thresholds and Med Aid
2558   trc_Rebate := 0;
2559   trc_Threshold := 0;
2560   trc_MedAidAbm := 0;
2561   -- Abatement Totals
2562   trc_PerTotAbm := 0;
2563   trc_AnnTotAbm := 0;
2564   -- Normal Income
2565   trc_NorIncYtd := 0;
2566   trc_NorIncPtd := 0;
2567   trc_NorErn := 0;
2568   trc_TxbNorInc := 0;
2569   trc_LibFyNI := 0;
2570   trc_LibFpNI := 0;
2571   -- Fringe Benefits
2572   trc_FrnBenYtd := 0;
2573   trc_FrnBenPtd := 0;
2574   trc_FrnBenErn := 0;
2575   trc_TxbFrnInc := 0;
2576   trc_LibFyFB := 0;
2577   trc_LibFpFB := 0;
2578   -- Travel Allowance
2579   trc_TrvAllYtd := 0;
2580   trc_TrvAllPtd := 0;
2581   trc_TrvAllErn := 0;
2582   trc_TxbTrvInc := 0;
2583   trc_LibFyTA := 0;
2584   trc_LibFpTA := 0;
2585   -- Bonus Provision
2586   trc_BonProYtd := 0;
2587   trc_BonProPtd := 0;
2588   trc_BonProErn := 0;
2589   trc_TxbBonProInc := 0;
2590   trc_LibFyBP := 0;
2591   trc_LibFpBP := 0;
2592   -- Annual Bonus
2593   trc_AnnBonYtd := 0;
2594   trc_AnnBonPtd := 0;
2595   trc_AnnBonErn := 0;
2596   trc_TxbAnnBonInc := 0;
2597   trc_LibFyAB := 0;
2598   trc_LibFpAB := 0;
2599   -- Annual Payments
2600   trc_AnnPymYtd := 0;
2601   trc_AnnPymPtd := 0;
2602   trc_AnnPymErn := 0;
2603   trc_TxbAnnPymInc := 0;
2604   trc_LibFyAP := 0;
2605   trc_LibFpAP := 0;
2606   -- Pubilc Office Allowance
2607   trc_PblOffYtd := 0;
2608   trc_PblOffPtd := 0;
2609   trc_PblOffErn := 0;
2610   trc_LibFyPO := 0;
2611   trc_LibFpPO := 0;
2612   -- Messages
2613   trc_MsgTxStatus := ' ';
2614   trc_LibWrn := ' ';
2615   -- Pay Value of This Calculation
2616   trc_PayValue := 0;
2617   -- PAYE and SITE Values
2618   trc_PayeVal := 0;
2619   trc_SiteVal := 0;
2620   -- IT3A Threshold Indicator
2621   trc_It3Ind := 0;
2622   -- Tax Percentage Value On trace
2623   trc_TxPercVal := 0;
2624 
2625   -- Total Taxable Income Update Figure
2626   trc_OUpdFig := 0;
2627 
2628   -- NpVal Override Globals
2629   trc_NpValNIOvr := FALSE;
2630   trc_NpValFBOvr := FALSE;
2631   trc_NpValTAOvr := FALSE;
2632   trc_NpValBPOvr := FALSE;
2633   trc_NpValABOvr := FALSE;
2634   trc_NpValAPOvr := FALSE;
2635   trc_NpValPOOvr := FALSE;
2636 
2637 
2638 
2639 EXCEPTION
2640   WHEN OTHERS THEN
2641     IF xpt_Msg = 'No Error' THEN
2642        xpt_Msg := 'ClearGlobals: '||TO_CHAR(SQLCODE);
2643     END IF;
2644        RAISE xpt_E;
2645 
2646 END ClearGlobals;
2647 
2648 -- Main Tax Calculations
2649 --
2650 --
2651 --
2652 --
2653 --
2654 --
2655 
2656 
2657 PROCEDURE SeaCalc AS
2658 -- Variables
2659 --
2660   l_TotLibNI NUMBER(15,2) DEFAULT 0;
2661   l_TotLibFB NUMBER(15,2) DEFAULT 0;
2662   l_TotLibAB NUMBER(15,2) DEFAULT 0;
2663   l_TotLibAP NUMBER(15,2) DEFAULT 0;
2664   l_Np       NUMBER(15,2) DEFAULT 0;
2665   l_65Year   DATE;
2666 
2667 BEGIN
2668 -- Identify the calculation
2669 --
2670   trc_CalTyp := 'SeaCalc';
2671 
2672 -- Update Global Balance Values with correct TAXABLE values
2673 --
2674   bal_PO_RFI_RUN :=
2675     bal_PO_RFI_RUN * glb_ZA_PBL_TX_PRC / 100;
2676 
2677   bal_PO_NRFI_RUN :=
2678     bal_PO_NRFI_RUN * glb_ZA_PBL_TX_PRC / 100;
2679 
2680 -- Period Type Income
2681 --
2682   trc_TxbIncPtd :=
2683   (bal_AST_PRCHD_RVAL_NRFI_RUN
2684   +bal_AST_PRCHD_RVAL_RFI_RUN
2685   +bal_BUR_AND_SCH_NRFI_RUN
2686   +bal_BUR_AND_SCH_RFI_RUN
2687   +bal_COMM_NRFI_RUN
2688   +bal_COMM_RFI_RUN
2689   +bal_COMP_ALL_NRFI_RUN
2690   +bal_COMP_ALL_RFI_RUN
2691   +bal_ENT_ALL_NRFI_RUN
2692   +bal_ENT_ALL_RFI_RUN
2693   +bal_FREE_ACCOM_NRFI_RUN
2694   +bal_FREE_ACCOM_RFI_RUN
2695   +bal_FREE_SERV_NRFI_RUN
2696   +bal_FREE_SERV_RFI_RUN
2697   +bal_LOW_LOANS_NRFI_RUN
2698   +bal_LOW_LOANS_RFI_RUN
2699   +bal_MLS_AND_VOUCH_NRFI_RUN
2700   +bal_MLS_AND_VOUCH_RFI_RUN
2701   +bal_MED_PAID_NRFI_RUN
2702   +bal_MED_PAID_RFI_RUN
2703   +bal_OTHER_TXB_ALL_NRFI_RUN
2704   +bal_OTHER_TXB_ALL_RFI_RUN
2705   +bal_OVTM_NRFI_RUN
2706   +bal_OVTM_RFI_RUN
2707   +bal_PYM_DBT_NRFI_RUN
2708   +bal_PYM_DBT_RFI_RUN
2709   +bal_RGT_AST_NRFI_RUN
2710   +bal_RGT_AST_RFI_RUN
2711   +bal_TXB_INC_NRFI_RUN
2712   +bal_TXB_INC_RFI_RUN
2713   +bal_TXB_PEN_NRFI_RUN
2714   +bal_TXB_PEN_RFI_RUN
2715   +bal_TEL_ALL_NRFI_RUN
2716   +bal_TEL_ALL_RFI_RUN
2717   +bal_TOOL_ALL_NRFI_RUN
2718   +bal_TOOL_ALL_RFI_RUN
2719   +bal_USE_VEH_NRFI_RUN
2720   +bal_USE_VEH_RFI_RUN
2721   );
2722 
2723 -- Check if any Period Income Exists
2724 --
2725   IF trc_TxbIncPtd = 0 THEN -- Pre-Earnings Calc
2726   -- Site Factor
2727   --
2728     trc_SitFactor := glb_ZA_WRK_DYS_PR_YR / dbi_SEA_WRK_DYS_WRK;
2729 
2730   -- Tax Rebates, Threshold Figure and Medical Aid
2731   --   Abatements
2732     -- Calculate the assignments 65 Year Date
2733     l_65Year := add_months(dbi_PER_DTE_OF_BRTH,780);
2734 
2735     IF l_65Year BETWEEN dbi_ZA_TX_YR_STRT AND dbi_ZA_TX_YR_END THEN
2736       -- give the extra abatement
2737       trc_Rebate := glb_ZA_PRI_TX_RBT + glb_ZA_ADL_TX_RBT;
2738       trc_Threshold := glb_ZA_SC_TX_THRSHLD;
2739 
2740     ELSE
2741       -- not eligable for extra abatement
2742       trc_Rebate := glb_ZA_PRI_TX_RBT;
2743       trc_Threshold := glb_ZA_PRI_TX_THRSHLD;
2744 
2745   END IF;
2746 
2747   -- Base Income
2748   --
2749     -- Base Income
2750     trc_BseErn :=
2751     (bal_ANU_FRM_RET_FND_NRFI_RUN
2752     +bal_ANU_FRM_RET_FND_RFI_RUN
2753     +bal_PRCH_ANU_TXB_NRFI_RUN
2754     +bal_PRCH_ANU_TXB_RFI_RUN
2755     +bal_SHR_OPT_EXD_NRFI_RUN
2756     +bal_SHR_OPT_EXD_RFI_RUN
2757     +bal_TXB_AP_NRFI_RUN
2758     +bal_TXB_AP_RFI_RUN
2759     +bal_TXB_SUBS_NRFI_RUN
2760     +bal_TXB_SUBS_RFI_RUN
2761     );
2762     -- Taxable Base Income
2763     trc_TxbBseInc := trc_BseErn * trc_SitFactor;
2764     -- Threshold Check
2765     IF trc_TxbBseInc >= trc_Threshold THEN
2766       -- Tax Liability
2767       trc_TotLibBse := TaxLiability(p_Amt => trc_TxbBseInc);
2768     ELSE
2769       trc_TotLibBse := 0;
2770     END IF;
2771 
2772   -- Annual Payments
2773   --
2774     -- Taxable Annual Payments Income
2775     trc_TxbAnnPymInc := trc_BseErn + trc_TxbBseInc;-- AP was taken as base!
2776     -- Threshold Check
2777     IF trc_TxbAnnPymInc >= trc_Threshold THEN
2778       -- Tax Liability
2779       l_TotLibAP := TaxLiability(p_Amt => trc_TxbAnnPymInc);
2780       trc_LibFpAP := l_TotLibAP - trc_TotLibBse;
2781     ElSE
2782       trc_LibFpAP := 0;
2783     END IF;
2784 
2785   ELSE
2786   -- Site Factor
2787   --
2788     trc_SitFactor := glb_ZA_WRK_DYS_PR_YR / dbi_SEA_WRK_DYS_WRK;
2789 
2790   -- Abatements
2791     Abatements;
2792 
2793   -- Normal Income
2794   --
2795     -- Run Normal Income
2796     trc_NorIncPtd :=
2797     (bal_COMM_NRFI_RUN
2798     +bal_COMM_RFI_RUN
2799     +bal_COMP_ALL_NRFI_RUN
2800     +bal_COMP_ALL_RFI_RUN
2801     +bal_ENT_ALL_NRFI_RUN
2802     +bal_ENT_ALL_RFI_RUN
2803     +bal_OTHER_TXB_ALL_NRFI_RUN
2804     +bal_OTHER_TXB_ALL_RFI_RUN
2805     +bal_OVTM_NRFI_RUN
2806     +bal_OVTM_RFI_RUN
2807     +bal_TXB_INC_NRFI_RUN
2808     +bal_TXB_INC_RFI_RUN
2809     +bal_TXB_PEN_NRFI_RUN
2810     +bal_TXB_PEN_RFI_RUN
2811     +bal_TEL_ALL_NRFI_RUN
2812     +bal_TEL_ALL_RFI_RUN
2813     +bal_TOOL_ALL_NRFI_RUN
2814     +bal_TOOL_ALL_RFI_RUN
2815     );
2816     -- Skip the calculation if there is No Income
2817     IF trc_NorIncPtd <> 0 THEN
2818       -- Normal Earnings
2819       trc_NorErn := trc_NorIncPtd * trc_SitFactor;
2820       -- Taxable Normal Income
2821       trc_TxbNorInc := trc_NorErn - trc_PerTotAbm;
2822       -- Threshold Check
2823       IF trc_TxbNorInc >= trc_Threshold THEN
2824         -- Tax Liability
2825         l_TotLibNI := TaxLiability(p_Amt => trc_TxbNorInc) - 0;
2826         trc_LibFpNI := l_TotLibNI / trc_SitFactor;
2827       ELSE
2828         l_TotLibNI := 0;
2829       END IF;
2830     ELSE
2831       trc_NorErn := 0;
2832       trc_TxbNorInc := 0;
2833       l_TotLibNI := 0;
2834     END IF;
2835 
2836   -- Fringe Benefits
2837   --
2838     -- Run Fringe Benefits
2839     trc_FrnBenPtd :=
2840     (bal_AST_PRCHD_RVAL_NRFI_RUN
2841     +bal_AST_PRCHD_RVAL_RFI_RUN
2842     +bal_BUR_AND_SCH_NRFI_RUN
2843     +bal_BUR_AND_SCH_RFI_RUN
2844     +bal_FREE_ACCOM_NRFI_RUN
2845     +bal_FREE_ACCOM_RFI_RUN
2846     +bal_FREE_SERV_NRFI_RUN
2847     +bal_FREE_SERV_RFI_RUN
2848     +bal_LOW_LOANS_NRFI_RUN
2849     +bal_LOW_LOANS_RFI_RUN
2850     +bal_MLS_AND_VOUCH_NRFI_RUN
2851     +bal_MLS_AND_VOUCH_RFI_RUN
2852     +bal_MED_PAID_NRFI_RUN
2853     +bal_MED_PAID_RFI_RUN
2854     +bal_PYM_DBT_NRFI_RUN
2855     +bal_PYM_DBT_RFI_RUN
2856     +bal_RGT_AST_NRFI_RUN
2857     +bal_RGT_AST_RFI_RUN
2858     +bal_USE_VEH_NRFI_RUN
2859     +bal_USE_VEH_RFI_RUN
2860     );
2861 
2862     -- Skip the calculation if there is No Income
2863     IF trc_FrnBenPtd <> 0 THEN
2864       -- Fringe Benefit Earnings
2865       trc_FrnBenErn := trc_FrnBenPtd * trc_SitFactor + trc_NorErn;
2866       -- Taxable Fringe Income
2867       trc_TxbFrnInc := trc_FrnBenErn - trc_PerTotAbm;
2868       -- Threshold Check
2869       IF trc_TxbFrnInc >= trc_Threshold THEN
2870         -- Tax Liability
2871         l_TotLibFB := TaxLiability(p_Amt => trc_TxbFrnInc) - l_TotLibNI;
2872         trc_LibFpFB := l_TotLibFB / trc_SitFactor;
2873       ElSE
2874         l_TotLibFB := l_TotLibNI;
2875       END IF;
2876     ELSE
2877       trc_FrnBenErn := trc_NorErn;
2878       trc_TxbFrnInc := trc_TxbNorInc;
2879       l_TotLibFB := l_TotLibNI;
2880     END IF;
2881 
2882   -- Annual Payments
2883   --
2884     -- Run Annual Payments
2885     trc_AnnPymPtd :=
2886     (bal_ANU_FRM_RET_FND_NRFI_RUN
2887     +bal_ANU_FRM_RET_FND_RFI_RUN
2888     +bal_PRCH_ANU_TXB_NRFI_RUN
2889     +bal_PRCH_ANU_TXB_RFI_RUN
2890     +bal_SHR_OPT_EXD_NRFI_RUN
2891     +bal_SHR_OPT_EXD_RFI_RUN
2892     +bal_TXB_AP_NRFI_RUN
2893     +bal_TXB_AP_RFI_RUN
2894     +bal_TXB_SUBS_NRFI_RUN
2895     +bal_TXB_SUBS_RFI_RUN
2896     );
2897     -- Skip the calculation if there is No Income
2898     IF trc_AnnPymPtd <> 0 THEN
2899       -- Annual Payments Earnings
2900       trc_AnnPymErn := trc_AnnPymPtd + trc_FrnBenErn;
2901       -- Taxable Annual Payments Income
2902       trc_TxbAnnPymInc := trc_AnnPymErn - trc_AnnTotAbm;
2903       -- Threshold Check
2904       IF trc_TxbAnnPymInc >= trc_Threshold THEN
2905         -- Tax Liability
2906         l_TotLibAP := TaxLiability(p_Amt => trc_TxbAnnPymInc) - l_TotLibFB;
2907         trc_LibFpAP := l_TotLibAP / trc_SitFactor;
2908       ELSE
2909         l_TotLibAP := l_TotLibFB;
2910       END IF;
2911     ELSE
2912       trc_AnnPymErn := trc_FrnBenErn;
2913       trc_TxbAnnPymInc := trc_TxbFrnInc;
2914       l_TotLibAP := l_TotLibFB;
2915     END IF;
2916 
2917   -- Public Office Allowance
2918   --
2919     -- Run Public Office Allowance
2920     trc_PblOffPtd :=
2921     (bal_PO_NRFI_RUN
2922     +bal_PO_RFI_RUN
2923     );
2924     -- Skip the calculation if there is No Income
2925     IF trc_PblOffPtd <> 0 THEN
2926       -- Public Office Earnings
2927       trc_PblOffErn := trc_PblOffPtd * trc_SitFactor;
2928       -- Tax Liability
2929       trc_LibFpPO := (trc_PblOffErn * glb_ZA_PBL_TX_RTE / 100)/trc_SitFactor;
2930     ELSE
2931       trc_LibFpPO := 0;
2932     END IF;
2933 
2934   -- Net Pay Validation
2935   --
2936     NpVal;
2937 
2938   -- Execute the SitPaySplit Procedure
2939   --
2940     SitPaySplit;
2941 
2942   -- Set IT3A Indicator
2943   --
2944     IF trc_TxbAnnPymInc + trc_PblOffErn >= trc_Threshold THEN
2945       trc_It3Ind := 0; -- Over Lim
2946     ELSE
2947       trc_It3Ind := 1; -- Under Lim
2948     END IF;
2949 
2950   END IF;
2951 
2952 EXCEPTION
2953   WHEN OTHERS THEN
2954     IF xpt_Msg = 'No Error' THEN
2955        xpt_Msg := 'SeaCalc: '||TO_CHAR(SQLCODE);
2956     END IF;
2957        RAISE xpt_E;
2958 
2959 END SeaCalc;
2960 
2961 
2962 PROCEDURE SitCalc AS
2963 -- Variables
2964 --
2965   l_TotLibNI NUMBER(15,2) DEFAULT 0;
2966   l_TotLibFB NUMBER(15,2) DEFAULT 0;
2967   l_TotLibTA NUMBER(15,2) DEFAULT 0;
2968   l_TotLibBP NUMBER(15,2) DEFAULT 0;
2969   l_TotLibAB NUMBER(15,2) DEFAULT 0;
2970   l_TotLibAP NUMBER(15,2) DEFAULT 0;
2971   l_Sl       BOOLEAN;
2972   l_Np       NUMBER(15,2);
2973 
2974 BEGIN
2975 -- Identify the calculation
2976 --
2977   trc_CalTyp := 'SitCalc';
2978 
2979 -- Update Global Balance Values with correct TAXABLE values
2980 --
2981   TrvAllYtd;
2982 
2983   bal_PO_RFI_YTD :=
2984     bal_PO_RFI_YTD * glb_ZA_PBL_TX_PRC / 100;
2985 
2986   bal_PO_NRFI_YTD :=
2987     bal_PO_NRFI_YTD * glb_ZA_PBL_TX_PRC / 100;
2988 
2989 -- Ytd Taxable Income
2990 --
2991   trc_TxbIncYtd :=
2992   (bal_AST_PRCHD_RVAL_NRFI_YTD
2993   +bal_AST_PRCHD_RVAL_RFI_YTD
2994   +bal_BP_YTD
2995   +bal_BUR_AND_SCH_NRFI_YTD
2996   +bal_BUR_AND_SCH_RFI_YTD
2997   +bal_COMM_NRFI_YTD
2998   +bal_COMM_RFI_YTD
2999   +bal_COMP_ALL_NRFI_YTD
3000   +bal_COMP_ALL_RFI_YTD
3001   +bal_ENT_ALL_NRFI_YTD
3002   +bal_ENT_ALL_RFI_YTD
3003   +bal_FREE_ACCOM_NRFI_YTD
3004   +bal_FREE_ACCOM_RFI_YTD
3005   +bal_FREE_SERV_NRFI_YTD
3006   +bal_FREE_SERV_RFI_YTD
3007   +bal_LOW_LOANS_NRFI_YTD
3008   +bal_LOW_LOANS_RFI_YTD
3009   +bal_MLS_AND_VOUCH_NRFI_YTD
3010   +bal_MLS_AND_VOUCH_RFI_YTD
3011   +bal_MED_PAID_NRFI_YTD
3012   +bal_MED_PAID_RFI_YTD
3013   +bal_OTHER_TXB_ALL_NRFI_YTD
3014   +bal_OTHER_TXB_ALL_RFI_YTD
3015   +bal_OVTM_NRFI_YTD
3016   +bal_OVTM_RFI_YTD
3017   +bal_PYM_DBT_NRFI_YTD
3018   +bal_PYM_DBT_RFI_YTD
3019   +bal_RGT_AST_NRFI_YTD
3020   +bal_RGT_AST_RFI_YTD
3021   +bal_TXB_INC_NRFI_YTD
3022   +bal_TXB_INC_RFI_YTD
3023   +bal_TXB_PEN_NRFI_YTD
3024   +bal_TXB_PEN_RFI_YTD
3025   +bal_TEL_ALL_NRFI_YTD
3026   +bal_TEL_ALL_RFI_YTD
3027   +bal_TOOL_ALL_NRFI_YTD
3028   +bal_TOOL_ALL_RFI_YTD
3029   +bal_TA_NRFI_YTD
3030   +bal_TA_RFI_YTD
3031   +bal_USE_VEH_NRFI_YTD
3032   +bal_USE_VEH_RFI_YTD
3033   );
3034 
3035   -- Site Factor
3036   --
3037     trc_SitFactor := dbi_ZA_DYS_IN_YR / DaysWorked;
3038 
3039   -- Abatements
3040     Abatements;
3041 
3042   -- Normal Income
3043   --
3044     -- Ytd Normal Income
3045     trc_NorIncYtd :=
3046     (bal_COMM_NRFI_YTD
3047     +bal_COMM_RFI_YTD
3048     +bal_COMP_ALL_NRFI_YTD
3049     +bal_COMP_ALL_RFI_YTD
3050     +bal_ENT_ALL_NRFI_YTD
3051     +bal_ENT_ALL_RFI_YTD
3052     +bal_OTHER_TXB_ALL_NRFI_YTD
3053     +bal_OTHER_TXB_ALL_RFI_YTD
3054     +bal_OVTM_NRFI_YTD
3055     +bal_OVTM_RFI_YTD
3056     +bal_TXB_INC_NRFI_YTD
3057     +bal_TXB_INC_RFI_YTD
3058     +bal_TXB_PEN_NRFI_YTD
3059     +bal_TXB_PEN_RFI_YTD
3060     +bal_TEL_ALL_NRFI_YTD
3061     +bal_TEL_ALL_RFI_YTD
3062     +bal_TOOL_ALL_NRFI_YTD
3063     +bal_TOOL_ALL_RFI_YTD
3064     );
3065     -- Skip the calculation if there is No Income
3066     IF trc_NorIncYtd <> 0 THEN
3067       -- Normal Earnings
3068       trc_NorErn := trc_NorIncYtd * trc_SitFactor;
3069       -- Taxable Normal Income
3070       trc_TxbNorInc := trc_NorErn - trc_PerTotAbm;
3071       -- Threshold Check
3072       IF trc_TxbNorInc >= trc_Threshold THEN
3073         -- Tax Liability
3074         l_TotLibNI := TaxLiability(p_Amt => trc_TxbNorInc);
3075         trc_LibFyNI := (l_TotLibNI - 0) / trc_SitFactor;
3076         trc_LibFpNI := trc_LibFyNI - bal_TX_ON_NI_YTD;
3077       ELSE
3078         l_TotLibNI := 0;
3079         -- Refund any tax paid
3080         trc_LibFpNI := -1 * bal_TX_ON_NI_YTD;
3081         trc_NpValNIOvr := TRUE;
3082       END IF;
3083     ELSE
3084       trc_NorErn := 0;
3085       trc_TxbNorInc := 0;
3086       l_TotLibNI := 0;
3087       -- Refund any tax paid
3088       trc_LibFpNI := -1 * bal_TX_ON_NI_YTD;
3089       trc_NpValNIOvr := TRUE;
3090     END IF;
3091 
3092   -- Fringe Benefits
3093   --
3094     -- Ytd Fringe Benefits
3095     trc_FrnBenYtd :=
3096     (bal_AST_PRCHD_RVAL_NRFI_YTD
3097     +bal_AST_PRCHD_RVAL_RFI_YTD
3098     +bal_BUR_AND_SCH_NRFI_YTD
3099     +bal_BUR_AND_SCH_RFI_YTD
3100     +bal_FREE_ACCOM_NRFI_YTD
3101     +bal_FREE_ACCOM_RFI_YTD
3102     +bal_FREE_SERV_NRFI_YTD
3103     +bal_FREE_SERV_RFI_YTD
3104     +bal_LOW_LOANS_NRFI_YTD
3105     +bal_LOW_LOANS_RFI_YTD
3106     +bal_MLS_AND_VOUCH_NRFI_YTD
3107     +bal_MLS_AND_VOUCH_RFI_YTD
3108     +bal_MED_PAID_NRFI_YTD
3109     +bal_MED_PAID_RFI_YTD
3110     +bal_PYM_DBT_NRFI_YTD
3111     +bal_PYM_DBT_RFI_YTD
3112     +bal_RGT_AST_NRFI_YTD
3113     +bal_RGT_AST_RFI_YTD
3114     +bal_USE_VEH_NRFI_YTD
3115     +bal_USE_VEH_RFI_YTD
3116     );
3117 
3118     -- Skip the calculation if there is No Income
3119     IF trc_FrnBenYtd <> 0 THEN
3120       -- Fringe Benefit Earnings
3121       trc_FrnBenErn := trc_FrnBenYtd * trc_SitFactor + trc_NorErn;
3122       -- Taxable Fringe Income
3123       trc_TxbFrnInc := trc_FrnBenErn - trc_PerTotAbm;
3124       -- Threshold Check
3125       IF trc_TxbFrnInc >= trc_Threshold THEN
3126         -- Tax Liability
3127         l_TotLibFB := TaxLiability(p_Amt => trc_TxbFrnInc);
3128         trc_LibFyFB := (l_TotLibFB - l_TotLibNI) / trc_SitFactor;
3129         trc_LibFpFB := trc_LibFyFB - bal_TX_ON_FB_YTD;
3130       ElSE
3131         l_TotLibFB := l_TotLibNI;
3132         -- Refund any tax paid
3133         trc_LibFpFB := -1 * bal_TX_ON_FB_YTD;
3134         trc_NpValFBOvr := TRUE;
3135       END IF;
3136     ELSE
3137       trc_FrnBenErn := trc_NorErn;
3138       trc_TxbFrnInc := trc_TxbNorInc;
3139       l_TotLibFB := l_TotLibNI;
3140       -- Refund any tax paid
3141       trc_LibFpFB := -1 * bal_TX_ON_FB_YTD;
3142       trc_NpValFBOvr := TRUE;
3143     END IF;
3144 
3145   -- Travel allowance
3146   --
3147     -- Ytd Travel Allowance
3148     trc_TrvAllYtd :=
3149     (bal_TA_NRFI_YTD
3150     +bal_TA_RFI_YTD
3151     );
3152     -- Skip the calculation if there is No Income
3153     IF trc_TrvAllYtd <> 0 THEN
3154       -- Travel Earnings
3155       trc_TrvAllErn := trc_TrvAllYtd * trc_SitFactor + trc_FrnBenErn;
3156       -- Taxable Travel Income
3157       trc_TxbTrvInc := trc_TrvAllErn - trc_PerTotAbm;
3158       -- Threshold Check
3159       IF trc_TxbTrvInc >= trc_Threshold THEN
3160         -- Tax Liability
3161         l_TotLibTA := TaxLiability(p_Amt => trc_TxbTrvInc);
3162         trc_LibFyTA := (l_TotLibTA - l_TotLibFB) / trc_SitFactor;
3163         trc_LibFpTA := trc_LibFyTA - bal_TX_ON_TA_YTD;
3164       ELSE
3165         l_TotLibTA := l_TotLibFB;
3166         -- Refund any tax paid
3167         trc_LibFpTA := -1 * bal_TX_ON_TA_YTD;
3168         trc_NpValTAOvr := TRUE;
3169       END IF;
3170     ELSE
3171       trc_TrvAllErn := trc_FrnBenErn;
3172       trc_TxbTrvInc := trc_TxbFrnInc;
3173       l_TotLibTA := l_TotLibFB;
3174       -- Refund any tax paid
3175       trc_LibFpTA := -1 * bal_TX_ON_TA_YTD;
3176       trc_NpValTAOvr := TRUE;
3177     END IF;
3178 
3179   -- Bonus Provision
3180   --
3181     -- Ytd Bonus Prvision
3182     trc_BonProYtd := bal_BP_YTD;
3183     -- Skip the calculation if there is No Income
3184     IF trc_BonProYtd <> 0 THEN
3185       -- Bonus Provision Earnings
3186       trc_BonProErn := trc_BonProYtd * trc_SitFactor + trc_TrvAllErn;
3187       -- Taxable Bonus Provision Income
3188       trc_TxbBonProInc := trc_BonProErn - trc_PerTotAbm;
3189       -- Threshold Check
3190       IF trc_TxbBonProInc >= trc_Threshold THEN
3191         -- Tax Liability
3192         l_TotLibBP := TaxLiability(p_Amt => trc_TxbBonProInc);
3193         trc_LibFyBP := (l_TotLibBP - l_TotLibTA) / trc_SitFactor;
3194         trc_LibFpBP := trc_LibFyBP - bal_TX_ON_BP_YTD;
3195       ELSE
3196         l_TotLibBP := l_TotLibTA;
3197         -- Refund any tax paid
3198         trc_LibFpBP := -1 * bal_TX_ON_BP_YTD;
3199         trc_NpValBPOvr := TRUE;
3200       END IF;
3201     ELSE
3202       trc_BonProErn := trc_TrvAllErn;
3203       trc_TxbBonProInc := trc_TxbTrvInc;
3204       l_TotLibBP := l_TotLibTA;
3205       -- Refund any tax paid
3206       trc_LibFpBP := -1 * bal_TX_ON_BP_YTD;
3207       trc_NpValBPOvr := TRUE;
3208     END IF;
3209 
3210   -- Annual Bonus
3211   --
3212     -- Ytd Annual Bonus
3213     trc_AnnBonYtd :=
3214     (bal_AB_NRFI_YTD
3215     +bal_AB_RFI_YTD
3216     );
3217     -- Skip the calculation if there is No Income
3218     IF trc_AnnBonYtd <> 0 THEN
3219       -- Annual Bonus Earnings
3220       trc_AnnBonErn := trc_AnnBonYtd + trc_TrvAllErn;
3221       -- Taxable Annual Bonus Income
3222       trc_TxbAnnBonInc := trc_AnnBonErn - trc_AnnTotAbm;
3223       -- Threshold Check
3224       IF trc_TxbAnnBonInc >= trc_Threshold THEN
3225         -- Tax Liability
3226         l_TotLibAB := TaxLiability(p_Amt => trc_TxbAnnBonInc);
3227         trc_LibFyAB := l_TotLibAB - l_TotLibTA;
3228         -- Check Bonus Provision
3229         IF trc_BonProYtd <> 0 THEN
3230           trc_LibFpAB := trc_LibFyAB - (bal_TX_ON_BP_YTD
3231                                    +trc_LibFpBP
3232                                    +bal_TX_ON_AB_YTD
3233                                    );
3234         ELSE
3235           trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
3236         END IF;
3237       ELSE
3238         l_TotLibAB := l_TotLibTA;
3239         -- Refund any tax paid
3240         trc_LibFpAB := -1 * bal_TX_ON_AB_YTD;
3241         trc_NpValABOvr := TRUE;
3242       END IF;
3243     ELSE
3244       trc_AnnBonErn := trc_TrvAllErn;
3245       trc_TxbAnnBonInc := trc_TxbTrvInc;
3246       l_TotLibAB := l_TotLibTA;
3247       -- Refund any tax paid
3248       trc_LibFpAB := -1 * bal_TX_ON_AB_YTD;
3249       trc_NpValABOvr := TRUE;
3250     END IF;
3251 
3252   -- Annual Payments
3253   --
3254     -- Ytd Annual Payments
3255     trc_AnnPymYtd :=
3256     (bal_ANU_FRM_RET_FND_NRFI_YTD
3257     +bal_ANU_FRM_RET_FND_RFI_YTD
3258     +bal_PRCH_ANU_TXB_NRFI_YTD
3259     +bal_PRCH_ANU_TXB_RFI_YTD
3260     +bal_SHR_OPT_EXD_NRFI_YTD
3261     +bal_SHR_OPT_EXD_RFI_YTD
3262     +bal_TXB_AP_NRFI_YTD
3263     +bal_TXB_AP_RFI_YTD
3264     +bal_TXB_SUBS_NRFI_YTD
3265     +bal_TXB_SUBS_RFI_YTD
3266     );
3267     -- Skip the calculation if there is No Income
3268     IF trc_AnnPymYtd <> 0 THEN
3269       -- Annual Payments Earnings
3270       trc_AnnPymErn := trc_AnnPymYtd + trc_AnnBonErn;
3271       -- Taxable Annual Payments Income
3272       trc_TxbAnnPymInc := trc_AnnPymErn - trc_AnnTotAbm;
3273       -- Threshold Check
3274       IF trc_TxbAnnPymInc >= trc_Threshold THEN
3275         -- Tax Liability
3276         l_TotLibAP := TaxLiability(p_Amt => trc_TxbAnnPymInc);
3277         trc_LibFyAP := l_TotLibAP - l_TotLibAB;
3278         trc_LibFpAP := trc_LibFyAP - bal_TX_ON_AP_YTD;
3279       ELSE
3280         l_TotLibAP := l_TotLibAB;
3281         -- Refund any tax paid
3282         trc_LibFpAP := -1 * bal_TX_ON_AP_YTD;
3283         trc_NpValAPOvr := TRUE;
3284       END IF;
3285     ELSE
3286       trc_AnnPymErn := trc_AnnBonErn;
3287       trc_TxbAnnPymInc := trc_TxbAnnBonInc;
3288       l_TotLibAP := l_TotLibAB;
3289       -- Refund any tax paid
3290       trc_LibFpAP := -1 * bal_TX_ON_AP_YTD;
3291       trc_NpValAPOvr := TRUE;
3292     END IF;
3293 
3294   -- Public Office Allowance
3295   --
3296     -- Ytd Public Office Allowance
3297     trc_PblOffYtd :=
3298     (bal_PO_NRFI_YTD
3299     +bal_PO_RFI_YTD
3300     );
3301     -- Skip the calculation if there is No Income
3302     IF trc_PblOffYtd <> 0 THEN
3303       -- Public Office Earnings
3304       trc_PblOffErn := trc_PblOffYtd * trc_SitFactor;
3305       -- Tax Liability
3306       trc_LibFyPO := (trc_PblOffErn * glb_ZA_PBL_TX_RTE / 100)/trc_SitFactor;
3307       trc_LibFpPO := trc_LibFyPO -  bal_TX_ON_PO_YTD;
3308     ELSE
3309       trc_LibFyPO := 0;
3310       -- Refund any tax paid
3311       trc_LibFpPO := -1 * bal_TX_ON_PO_YTD;
3312       trc_NpValPOOvr := TRUE;
3313     END IF;
3314 
3315   -- Net Pay Validation
3316   --
3317     -- Net Pay of the Employee
3318     l_Np := bal_NET_PAY_RUN;
3319     -- Site Limit Check
3320     IF trc_TxbAnnPymInc + trc_PblOffErn < glb_ZA_SIT_LIM THEN
3321       l_Sl := TRUE;
3322     ELSE
3323       l_Sl := FALSE;
3324     END IF;
3325 
3326     NpVal(p_Rf => l_Sl);
3327 
3328   -- Execute the SitPaySplit Procedure
3329   --
3330     SitPaySplit;
3331 
3332   -- Set IT3A Indicator
3333   --
3334     IF trc_TxbAnnPymInc + trc_PblOffErn >= trc_Threshold THEN
3335       trc_It3Ind := 0; -- Over Lim
3336     ELSE
3337       trc_It3Ind := 1; -- Under Lim
3338     END IF;
3339 
3340   -- Calculate Total Taxable Income and pass out
3341   --
3342     trc_OUpdFig := (trc_TxbAnnPymInc + trc_PblOffErn) - bal_TOT_TXB_INC_ITD;
3343 
3344 
3345 EXCEPTION
3346   WHEN OTHERS THEN
3347     IF xpt_Msg = 'No Error' THEN
3348        xpt_Msg := 'SitCalc: '||TO_CHAR(SQLCODE);
3349     END IF;
3350        RAISE xpt_E;
3351 
3352 END SitCalc;
3353 
3354 
3355 PROCEDURE DirCalc AS
3356 -- Variables
3357 --
3358   l_TotLibNI NUMBER(15,2) DEFAULT 0;
3359   l_TotLibFB NUMBER(15,2) DEFAULT 0;
3360   l_TotLibTA NUMBER(15,2) DEFAULT 0;
3361   l_TotLibBP NUMBER(15,2) DEFAULT 0;
3362   l_TotLibAB NUMBER(15,2) DEFAULT 0;
3363   l_TotLibAP NUMBER(15,2) DEFAULT 0;
3364   l_Np       NUMBER(15,2) DEFAULT 0;
3365 
3366 BEGIN
3367 -- Identify the calculation
3368 --
3369   trc_CalTyp := 'DirCalc';
3370 
3371 -- Update Global Balance Values with correct TAXABLE values
3372 --
3373   TrvAllYtd;
3374 
3375   bal_PO_RFI_YTD :=
3376     bal_PO_RFI_YTD * glb_ZA_PBL_TX_PRC / 100;
3377 
3378   bal_PO_NRFI_YTD :=
3379     bal_PO_NRFI_YTD * glb_ZA_PBL_TX_PRC / 100;
3380 
3381 -- Normal Income
3382 --
3383   -- Ytd Normal Income
3384   trc_NorIncYtd :=
3385   (bal_COMM_NRFI_YTD
3386   +bal_COMM_RFI_YTD
3387   +bal_COMP_ALL_NRFI_YTD
3388   +bal_COMP_ALL_RFI_YTD
3389   +bal_ENT_ALL_NRFI_YTD
3390   +bal_ENT_ALL_RFI_YTD
3391   +bal_OTHER_TXB_ALL_NRFI_YTD
3392   +bal_OTHER_TXB_ALL_RFI_YTD
3393   +bal_OVTM_NRFI_YTD
3394   +bal_OVTM_RFI_YTD
3395   +bal_TXB_INC_NRFI_YTD
3396   +bal_TXB_INC_RFI_YTD
3397   +bal_TXB_PEN_NRFI_YTD
3398   +bal_TXB_PEN_RFI_YTD
3399   +bal_TEL_ALL_NRFI_YTD
3400   +bal_TEL_ALL_RFI_YTD
3401   +bal_TOOL_ALL_NRFI_YTD
3402   +bal_TOOL_ALL_RFI_YTD
3403   );
3404   -- Skip the calculation if there is No Income
3405   IF trc_NorIncYtd <> 0 THEN
3406     -- Normal Earnings
3407     trc_NorErn := trc_NorIncYtd;
3408     -- Tax Liability
3409     l_TotLibNI := TaxLiability(p_Amt => trc_NorErn);
3410     trc_LibFyNI := l_TotLibNI - 0;
3411     trc_LibFpNI := trc_LibFyNI - bal_TX_ON_NI_YTD;
3412   ELSE
3413     trc_NorErn := 0;
3414     l_TotLibNI := 0;
3415     -- Refund any tax paid
3416     trc_LibFpNI := -1 * bal_TX_ON_NI_YTD;
3417     trc_NpValNIOvr := TRUE;
3418   END IF;
3419 
3420 -- Fringe Benefits
3421 --
3422   -- Ytd Fringe Benefits
3423   trc_FrnBenYtd :=
3424   (bal_AST_PRCHD_RVAL_NRFI_YTD
3425   +bal_AST_PRCHD_RVAL_RFI_YTD
3426   +bal_BUR_AND_SCH_NRFI_YTD
3427   +bal_BUR_AND_SCH_RFI_YTD
3428   +bal_FREE_ACCOM_NRFI_YTD
3429   +bal_FREE_ACCOM_RFI_YTD
3430   +bal_FREE_SERV_NRFI_YTD
3431   +bal_FREE_SERV_RFI_YTD
3432   +bal_LOW_LOANS_NRFI_YTD
3433   +bal_LOW_LOANS_RFI_YTD
3434   +bal_MLS_AND_VOUCH_NRFI_YTD
3435   +bal_MLS_AND_VOUCH_RFI_YTD
3436   +bal_MED_PAID_NRFI_YTD
3437   +bal_MED_PAID_RFI_YTD
3438   +bal_PYM_DBT_NRFI_YTD
3439   +bal_PYM_DBT_RFI_YTD
3440   +bal_RGT_AST_NRFI_YTD
3441   +bal_RGT_AST_RFI_YTD
3442   +bal_USE_VEH_NRFI_YTD
3443   +bal_USE_VEH_RFI_YTD
3444   );
3445   -- Skip the calculation if there is No Income
3446   IF trc_FrnBenYtd <> 0 THEN
3447     -- Fringe Benefit Earnings
3448     trc_FrnBenErn := trc_FrnBenYtd + trc_NorErn;
3449     -- Tax Liability
3450     l_TotLibFB := TaxLiability(p_Amt => trc_FrnBenErn);
3451     trc_LibFyFB := l_TotLibFB - l_TotLibNI;
3452     trc_LibFpFB := trc_LibFyFB - bal_TX_ON_FB_YTD;
3453   ELSE
3454     trc_FrnBenErn := trc_NorErn;
3455     l_TotLibFB := l_TotLibNI;
3456     -- Refund any tax paid
3457     trc_LibFpFB := -1 * bal_TX_ON_FB_YTD;
3458     trc_NpValFBOvr := TRUE;
3459   END IF;
3460 
3461 -- Travel Allowance
3462 --
3463   -- Ytd Travel Allowance
3464   trc_TrvAllYtd :=
3465   (bal_TA_NRFI_YTD
3466   +bal_TA_RFI_YTD
3467   );
3468   -- Skip the calculation if there is No Income
3469   IF trc_TrvAllYtd <> 0 THEN
3470     -- Travel Allowance Earnings
3471     trc_TrvAllErn := trc_TrvAllYtd + trc_FrnBenErn;
3472     -- Tax Liability
3473     l_TotLibTA := TaxLiability(p_Amt => trc_TrvAllErn);
3474     trc_LibFyTA := l_TotLibTA - l_TotLibFB;
3475     trc_LibFpTA := trc_LibFyTA - bal_TX_ON_TA_YTD;
3476   ELSE
3477     trc_TrvAllErn := trc_FrnBenErn; --Cascade Figure
3478     l_TotLibTA := l_TotLibFB;
3479     -- Refund any tax paid
3480     trc_LibFpTA := -1 * bal_TX_ON_TA_YTD;
3481     trc_NpValTAOvr := TRUE;
3482   END IF;
3483 
3484 -- Bonus Provision
3485 --
3486   -- Ytd Bonus Provision
3487   trc_BonProYtd := bal_BP_YTD;
3488   -- Skip the calculation if there is No Income
3489   IF trc_BonProYtd <> 0 THEN
3490     -- Bonus Provision Earnings
3491     trc_BonProErn := trc_BonProYtd + trc_TrvAllErn;
3492     -- Tax Liability
3493     l_TotLibBP := TaxLiability(p_Amt => trc_BonProErn);
3494     trc_LibFyBP := l_TotLibBP - l_TotLibTA;
3495     trc_LibFpBP := trc_LibFyBP - bal_TX_ON_BP_YTD;
3496   ELSE
3497     trc_BonProErn := trc_TrvAllErn;
3498     l_TotLibBP := l_TotLibTA;
3499     -- Refund any tax paid
3500     trc_LibFpBP := -1 * bal_TX_ON_BP_YTD;
3501     trc_NpValBPOvr := TRUE;
3502   END IF;
3503 
3504 -- Annual Bonus
3505 --
3506   -- Ytd Annual Bonus
3507   trc_AnnBonYtd :=
3508   (bal_AB_NRFI_YTD
3509   +bal_AB_RFI_YTD
3510   );
3511   -- Skip the calculation if there is No Income
3512   IF trc_AnnBonYtd <> 0 THEN
3513     -- Annual Bonus Earnings
3514     trc_AnnBonErn := trc_AnnBonYtd + trc_TrvAllErn;
3515     -- Tax Liability
3516     l_TotLibAB := TaxLiability(p_Amt => trc_AnnBonErn);
3517     trc_LibFyAB := l_TotLibAB - l_TotLibTA;
3518 
3519     -- Check Bonus Provision
3520     IF trc_BonProYtd <> 0 THEN
3521       -- Check Bonus Provision Frequency
3522       IF dbi_BP_TX_RCV = 'A' THEN
3523         trc_LibFpAB := 0;
3524       ELSE
3525         trc_LibFpAB :=
3526         trc_LibFyAB - (bal_TX_ON_BP_YTD
3527                       +trc_LibFpBP
3528                       +bal_TX_ON_AB_YTD);
3529       END IF;
3530     ELSE
3531       trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
3532     END IF;
3533   ELSE
3534     trc_AnnBonErn := trc_TrvAllErn;
3535     l_TotLibAB := l_TotLibTA;
3536     -- Refund any tax paid
3537     trc_LibFpAB := -1 * bal_TX_ON_AB_YTD;
3538     trc_NpValABOvr := TRUE;
3539   END IF;
3540 
3541 -- Annual Payments
3542 --
3543   -- Ytd Annual Payments
3544   trc_AnnPymYtd :=
3545   (bal_ANU_FRM_RET_FND_NRFI_YTD
3546   +bal_ANU_FRM_RET_FND_RFI_YTD
3547   +bal_PRCH_ANU_TXB_NRFI_YTD
3548   +bal_PRCH_ANU_TXB_RFI_YTD
3549   +bal_SHR_OPT_EXD_NRFI_YTD
3550   +bal_SHR_OPT_EXD_RFI_YTD
3551   +bal_TXB_AP_NRFI_YTD
3552   +bal_TXB_AP_RFI_YTD
3553   +bal_TXB_SUBS_NRFI_YTD
3554   +bal_TXB_SUBS_RFI_YTD
3555   );
3556   -- Skip the calculation if there is No Income
3557   IF trc_AnnPymYtd <> 0 THEN
3558     -- Annual Payments Earnings
3559     trc_AnnPymErn := trc_AnnPymYtd + trc_AnnBonErn;
3560     -- Tax Liability
3561     l_TotLibAP := TaxLiability(p_Amt => trc_AnnPymErn);
3562     trc_LibFyAP := l_TotLibAP - l_TotLibAB;
3563     trc_LibFpAP := trc_LibFyAP - bal_TX_ON_AP_YTD;
3564   ElSE
3565     trc_AnnPymErn := trc_AnnBonErn;
3566     l_TotLibAP := l_TotLibAB;
3567     -- Refund any tax paid
3568     trc_LibFpAP := -1 * bal_TX_ON_AP_YTD;
3569     trc_NpValAPOvr := TRUE;
3570   END IF;
3571 
3572 -- Public Office Allowance
3573 --
3574   -- Ytd Public Office Allowance
3575   trc_PblOffYtd :=
3576   (bal_PO_NRFI_YTD
3577   +bal_PO_RFI_YTD
3578   );
3579   -- Skip the calculation if there is No Income
3580   IF trc_PblOffYtd <> 0 THEN
3581     -- Tax Liability
3582     trc_LibFyPO := trc_PblOffYtd * glb_ZA_PBL_TX_RTE / 100;
3583     trc_LibFpPO := trc_LibFyPO -  bal_TX_ON_PO_YTD;
3584   ELSE
3585     trc_LibFyPO := 0;
3586     -- Refund any tax paid
3587     trc_LibFpPO := -1 * bal_TX_ON_PO_YTD;
3588     trc_NpValPOOvr := TRUE;
3589   END IF;
3590 
3591 -- Net Pay Validation
3592 --
3593   NpVal(p_Rf => TRUE);
3594 
3595 -- Execute the SitPaySplit Procedure
3596 --
3597   SitPaySplit;
3598 
3599 -- Tax Percentage Indicator
3600 --
3601   IF dbi_TX_STA = 'D' THEN
3602     trc_TxPercVal := dbi_TX_DIR_VAL;
3603   ELSIF dbi_TX_STA = 'E' THEN
3604     trc_TxPercVal := glb_ZA_CC_TX_PRC;
3605   ELSIF dbi_TX_STA = 'F' THEN
3606     trc_TxPercVal := glb_ZA_TMP_TX_RTE;
3607   ELSE
3608     trc_TxPercVal := 0;
3609   END IF;
3610 
3611 
3612 EXCEPTION
3613   WHEN OTHERS THEN
3614     IF xpt_Msg = 'No Error' THEN
3615        xpt_Msg := 'DirCalc: '||TO_CHAR(SQLCODE);
3616     END IF;
3617        RAISE xpt_E;
3618 
3619 END DirCalc;
3620 
3621 
3622 PROCEDURE BasCalc AS
3623 -- Variables
3624 --
3625   l_TotLibAB NUMBER(15,2);
3626   l_TotLibAP NUMBER(15,2);
3627   l_Np       NUMBER(15,2);
3628   l_65Year   DATE;
3629 
3630 BEGIN
3631 -- Identify the Calculation
3632 --
3633   trc_CalTyp := 'BasCalc';
3634 
3635 -- Tax Rebates, Threshold Figure and Medical Aid
3636 --   Abatements
3637   -- Calculate the assignments 65 Year Date
3638   l_65Year := add_months(dbi_PER_DTE_OF_BRTH,780);
3639 
3640   IF l_65Year BETWEEN dbi_ZA_TX_YR_STRT AND dbi_ZA_TX_YR_END THEN
3641     -- give the extra abatement
3642     trc_Rebate := glb_ZA_PRI_TX_RBT + glb_ZA_ADL_TX_RBT;
3643     trc_Threshold := glb_ZA_SC_TX_THRSHLD;
3644 
3645   ELSE
3646     -- not eligable for extra abatement
3647     trc_Rebate := glb_ZA_PRI_TX_RBT;
3648     trc_Threshold := glb_ZA_PRI_TX_THRSHLD;
3649 
3650   END IF;
3651 
3652 -- Base Earnings
3653 --
3654   --Base Earnings
3655   trc_BseErn :=
3656   (bal_AB_NRFI_PTD
3657   +bal_AB_RFI_PTD
3658   +bal_ANU_FRM_RET_FND_NRFI_PTD
3659   +bal_ANU_FRM_RET_FND_RFI_PTD
3660   +bal_PRCH_ANU_TXB_NRFI_PTD
3661   +bal_PRCH_ANU_TXB_RFI_PTD
3662   +bal_SHR_OPT_EXD_NRFI_PTD
3663   +bal_SHR_OPT_EXD_RFI_PTD
3664   +bal_TXB_AP_NRFI_PTD
3665   +bal_TXB_AP_RFI_PTD
3666   +bal_TXB_SUBS_NRFI_PTD
3667   +bal_TXB_SUBS_RFI_PTD
3668   );
3669   -- Estimate Base Taxable Income
3670   trc_TxbBseInc := trc_BseErn * dbi_ZA_PAY_PRDS_PER_YR;
3671   -- Threshold Check
3672   IF trc_TxbBseInc >= trc_Threshold THEN
3673     -- Tax Liability
3674     trc_TotLibBse := TaxLiability(p_Amt => trc_TxbBseInc);
3675   ELSE
3676     trc_TotLibBse := 0;
3677   END IF;
3678 
3679 -- Annual Bonus
3680 --
3681   -- Ytd Annual Bonus
3682   trc_AnnBonYtd :=
3683   (bal_AB_NRFI_YTD
3684   +bal_AB_RFI_YTD
3685   );
3686   -- Skip the calculation if there is No Income
3687   IF trc_AnnBonYtd <> 0 THEN
3688     -- Taxable Annual Bonus Income
3689     trc_TxbAnnBonInc := trc_AnnBonYtd + trc_TxbBseInc;
3690     -- Threshold Check
3691     IF trc_TxbAnnBonInc >= trc_Threshold THEN
3692       -- Tax Liability
3693       l_TotLibAB := TaxLiability(p_Amt => trc_TxbAnnBonInc);
3694       trc_LibFyAB := l_TotLibAB - trc_TotLibBse;
3695 
3696       -- Check Bonus Provision
3697       IF bal_BP_YTD <> 0 THEN
3698         -- Check Bonus Provision Frequency
3699         IF dbi_BP_TX_RCV = 'A' THEN
3700           trc_LibFpAB := 0;
3701         ELSE
3702           trc_LibFpAB :=
3703           trc_LibFyAB - (bal_TX_ON_BP_YTD
3704                       +bal_TX_ON_AB_YTD);
3705         END IF;
3706       ELSE
3707         trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
3708       END IF;
3709     ELSE
3710       l_TotLibAB := trc_TotLibBse;
3711     END IF;
3712   ELSE
3713     l_TotLibAB := trc_TotLibBse;
3714     trc_TxbAnnBonInc := trc_TxbBseInc;
3715   END IF;
3716 
3717 -- Annual Payments
3718 --
3719   -- Ytd Annual Payments
3720   trc_AnnPymYtd :=
3721   (bal_ANU_FRM_RET_FND_NRFI_YTD
3722   +bal_ANU_FRM_RET_FND_RFI_YTD
3723   +bal_PRCH_ANU_TXB_NRFI_YTD
3724   +bal_PRCH_ANU_TXB_RFI_YTD
3725   +bal_SHR_OPT_EXD_NRFI_YTD
3726   +bal_SHR_OPT_EXD_RFI_YTD
3727   +bal_TXB_AP_NRFI_YTD
3728   +bal_TXB_AP_RFI_YTD
3729   +bal_TXB_SUBS_NRFI_YTD
3730   +bal_TXB_SUBS_RFI_YTD
3731   );
3732   -- Skip the calculation if there is No Income
3733   IF trc_AnnPymYtd <> 0 THEN
3734     -- Taxable Annual Payments Income
3735     trc_TxbAnnPymInc := trc_AnnPymYtd + trc_TxbAnnBonInc;
3736     -- Threshold Check
3737     IF trc_TxbAnnPymInc >= trc_Threshold THEN
3738       -- Tax Liability
3739       l_TotLibAP := TaxLiability(p_Amt => trc_TxbAnnPymInc);
3740       trc_LibFyAP := l_TotLibAP - l_TotLibAB;
3741       trc_LibFpAP := trc_LibFyAP - bal_TX_ON_AP_YTD;
3742     ELSE
3743       NULL;
3744     END IF;
3745   ELSE
3746     NUll;
3747   END IF;
3748 
3749 -- Net Pay Validation
3750 --
3751   NpVal;
3752 
3753 
3754 EXCEPTION
3755   WHEN OTHERS THEN
3756     IF xpt_Msg = 'No Error' THEN
3757        xpt_Msg := 'BasCalc: '||TO_CHAR(SQLCODE);
3758     END IF;
3759        RAISE xpt_E;
3760 
3761 END BasCalc;
3762 
3763 
3764 PROCEDURE CalCalc AS
3765 -- Variables
3766 --
3767   l_TotLibAB NUMBER(15,2);
3768   l_TotLibAP NUMBER(15,2);
3769   l_Np       NUMBER(15,2);
3770 
3771 BEGIN
3772 -- Identify the calculation
3773 --
3774   trc_CalTyp := 'CalCalc';
3775 
3776 -- Update Global Balance Values with correct TAXABLE values
3777 --
3778   TrvAllCal;
3779 
3780 -- Calendar Ytd Taxable Income
3781 --
3782   trc_TxbIncYtd :=
3783   (bal_AST_PRCHD_RVAL_NRFI_CYTD
3784   +bal_AST_PRCHD_RVAL_RFI_CYTD
3785   +bal_BUR_AND_SCH_NRFI_CYTD
3786   +bal_BUR_AND_SCH_RFI_CYTD
3787   +bal_COMM_NRFI_CYTD
3788   +bal_COMM_RFI_CYTD
3789   +bal_COMP_ALL_NRFI_CYTD
3790   +bal_COMP_ALL_RFI_CYTD
3791   +bal_ENT_ALL_NRFI_CYTD
3792   +bal_ENT_ALL_RFI_CYTD
3793   +bal_FREE_ACCOM_NRFI_CYTD
3794   +bal_FREE_ACCOM_RFI_CYTD
3795   +bal_FREE_SERV_NRFI_CYTD
3796   +bal_FREE_SERV_RFI_CYTD
3797   +bal_LOW_LOANS_NRFI_CYTD
3798   +bal_LOW_LOANS_RFI_CYTD
3799   +bal_MLS_AND_VOUCH_NRFI_CYTD
3800   +bal_MLS_AND_VOUCH_RFI_CYTD
3801   +bal_MED_PAID_NRFI_CYTD
3802   +bal_MED_PAID_RFI_CYTD
3803   +bal_OTHER_TXB_ALL_NRFI_CYTD
3804   +bal_OTHER_TXB_ALL_RFI_CYTD
3805   +bal_OVTM_NRFI_CYTD
3806   +bal_OVTM_RFI_CYTD
3807   +bal_PYM_DBT_NRFI_CYTD
3808   +bal_PYM_DBT_RFI_CYTD
3809   +bal_RGT_AST_NRFI_CYTD
3810   +bal_RGT_AST_RFI_CYTD
3811   +bal_TXB_INC_NRFI_CYTD
3812   +bal_TXB_INC_RFI_CYTD
3813   +bal_TXB_PEN_NRFI_CYTD
3814   +bal_TXB_PEN_RFI_CYTD
3815   +bal_TEL_ALL_NRFI_CYTD
3816   +bal_TEL_ALL_RFI_CYTD
3817   +bal_TOOL_ALL_NRFI_CYTD
3818   +bal_TOOL_ALL_RFI_CYTD
3819   +bal_TA_NRFI_CYTD
3820   +bal_TA_RFI_CYTD
3821   +bal_USE_VEH_NRFI_CYTD
3822   +bal_USE_VEH_RFI_CYTD
3823   );
3824 
3825 -- If there is no Income Execute the Base calculation
3826 --
3827   IF trc_TxbIncYtd = 0 THEN
3828     BasCalc;
3829   ELSE -- continue CalCalc
3830 
3831   -- Site Factor
3832   --
3833     trc_SitFactor := dbi_ZA_DYS_IN_YR / DaysWorked;
3834 
3835   -- Abatements
3836     Abatements;
3837 
3838   -- Base Earnings
3839   --
3840     -- Base Earnings
3841     trc_BseErn := trc_TxbIncYtd * trc_SitFactor;
3842     -- Taxable Base Income
3843     trc_TxbBseInc := trc_BseErn - trc_PerTotAbm;
3844     -- Threshold Check
3845     IF trc_TxbBseInc >= trc_Threshold THEN
3846       -- Tax Liability
3847       trc_TotLibBse := TaxLiability(p_Amt => trc_TxbBseInc);
3848     ELSE
3849       trc_TotLibBse := 0;
3850     END IF;
3851 
3852   -- Annual Bonus
3853   --
3854     -- Ytd Annual Bonus
3855     trc_AnnBonYtd :=
3856     (bal_AB_NRFI_YTD
3857     +bal_AB_RFI_YTD
3858     );
3859     -- Skip the calculation if there is No Income
3860     IF trc_AnnBonYtd <> 0 THEN
3861       -- Annual Bonus Earnings
3862       trc_AnnBonErn := trc_AnnBonYtd + trc_BseErn;
3863       -- Taxable Annual Bonus Income
3864       trc_TxbAnnBonInc := trc_AnnBonErn - trc_AnnTotAbm;
3865       -- Threshold Check
3866       IF trc_TxbAnnBonInc >= trc_Threshold THEN
3867         -- Tax Liability
3868         l_TotLibAB := TaxLiability(p_Amt => trc_TxbAnnBonInc);
3869         trc_LibFyAB := l_TotLibAB - trc_TotLibBse;
3870 
3871         -- Check Bonus Provision
3872         IF bal_BP_YTD <> 0 THEN
3873           -- Check Bonus Provision Frequency
3874           IF dbi_BP_TX_RCV = 'A' THEN
3875             trc_LibFpAB := 0;
3876           ELSE
3877             trc_LibFpAB :=
3878               trc_LibFyAB - (bal_TX_ON_BP_YTD
3879                           +bal_TX_ON_AB_YTD);
3880           END IF;
3881         ELSE
3882           trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
3883         END IF;
3884       ELSE
3885         l_TotLibAB := trc_TotLibBse;
3886       END IF;
3887     ELSE
3888       trc_AnnBonErn := trc_BseErn;-- Cascade Figure
3889       trc_TxbAnnBonInc := trc_TxbBseInc;
3890       l_TotLibAB := trc_TotLibBse;
3891     END IF;
3892 
3893   -- Annual Payments
3894   --
3895     -- Ytd Annual Payments
3896     trc_AnnPymYtd :=
3897     (bal_ANU_FRM_RET_FND_NRFI_YTD
3898     +bal_ANU_FRM_RET_FND_RFI_YTD
3899     +bal_PRCH_ANU_TXB_NRFI_YTD
3900     +bal_PRCH_ANU_TXB_RFI_YTD
3901     +bal_SHR_OPT_EXD_NRFI_YTD
3902     +bal_SHR_OPT_EXD_RFI_YTD
3903     +bal_TXB_AP_NRFI_YTD
3904     +bal_TXB_AP_RFI_YTD
3905     +bal_TXB_SUBS_NRFI_YTD
3906     +bal_TXB_SUBS_RFI_YTD
3907     );
3908     -- Skip the calculation if there is No Income
3909     IF trc_AnnPymYtd <> 0 THEN
3910       -- Annual Payments Earnings
3911       trc_AnnPymErn := trc_AnnPymYtd + trc_AnnBonErn;
3912       -- Taxable Annual Payments Income
3913       trc_TxbAnnPymInc := trc_AnnPymErn - trc_AnnTotAbm;
3914       -- Threshold Check
3915       IF trc_TxbAnnPymInc >= trc_Threshold THEN
3916         -- Tax Liability
3917         l_TotLibAP := TaxLiability(p_Amt => trc_TxbAnnPymInc);
3918         trc_LibFyAP := l_TotLibAP - l_TotLibAB;
3919         trc_LibFpAP := trc_LibFyAP - bal_TX_ON_AP_YTD;
3920       ELSE
3921         l_TotLibAP := l_TotLibAB;
3922       END IF;
3923     ELSE
3924       trc_AnnPymErn := trc_AnnBonErn;
3925       trc_TxbAnnPymInc := trc_TxbAnnBonInc;
3926       l_TotLibAP := l_TotLibAB;
3927     END IF;
3928 
3929   -- Net pay Validation
3930   --
3931     NpVal;
3932 
3933 
3934 
3935   END IF;
3936 
3937 
3938 EXCEPTION
3939   WHEN OTHERS THEN
3940     IF xpt_Msg = 'No Error' THEN
3941        xpt_Msg := 'CalCalc: '||TO_CHAR(SQLCODE);
3942     END IF;
3943        RAISE xpt_E;
3944 
3945 END CalCalc;
3946 
3947 
3948 PROCEDURE YtdCalc AS
3949 -- Variables
3950 --
3951   l_TotLibAB NUMBER(15,2);
3952   l_TotLibAP NUMBER(15,2);
3953   l_Np       NUMBER(15,2);
3954 
3955 BEGIN
3956 -- Identify the calculation
3957 --
3958   trc_CalTyp := 'YtdCalc';
3959 
3960 -- Update Global Balance Values with correct TAXABLE values
3961   TrvAllYtd;
3962 
3963 -- Ytd Taxable Income
3964   trc_TxbIncYtd :=
3965   (bal_AST_PRCHD_RVAL_NRFI_YTD
3966   +bal_AST_PRCHD_RVAL_RFI_YTD
3967   +bal_BP_YTD
3968   +bal_BUR_AND_SCH_NRFI_YTD
3969   +bal_BUR_AND_SCH_RFI_YTD
3970   +bal_COMM_NRFI_YTD
3971   +bal_COMM_RFI_YTD
3972   +bal_COMP_ALL_NRFI_YTD
3973   +bal_COMP_ALL_RFI_YTD
3974   +bal_ENT_ALL_NRFI_YTD
3975   +bal_ENT_ALL_RFI_YTD
3976   +bal_FREE_ACCOM_NRFI_YTD
3977   +bal_FREE_ACCOM_RFI_YTD
3978   +bal_FREE_SERV_NRFI_YTD
3979   +bal_FREE_SERV_RFI_YTD
3980   +bal_LOW_LOANS_NRFI_YTD
3981   +bal_LOW_LOANS_RFI_YTD
3982   +bal_MLS_AND_VOUCH_NRFI_YTD
3983   +bal_MLS_AND_VOUCH_RFI_YTD
3984   +bal_MED_PAID_NRFI_YTD
3985   +bal_MED_PAID_RFI_YTD
3986   +bal_OTHER_TXB_ALL_NRFI_YTD
3987   +bal_OTHER_TXB_ALL_RFI_YTD
3988   +bal_OVTM_NRFI_YTD
3989   +bal_OVTM_RFI_YTD
3990   +bal_PYM_DBT_NRFI_YTD
3991   +bal_PYM_DBT_RFI_YTD
3992   +bal_RGT_AST_NRFI_YTD
3993   +bal_RGT_AST_RFI_YTD
3994   +bal_TXB_INC_NRFI_YTD
3995   +bal_TXB_INC_RFI_YTD
3996   +bal_TXB_PEN_NRFI_YTD
3997   +bal_TXB_PEN_RFI_YTD
3998   +bal_TEL_ALL_NRFI_YTD
3999   +bal_TEL_ALL_RFI_YTD
4000   +bal_TOOL_ALL_NRFI_YTD
4001   +bal_TOOL_ALL_RFI_YTD
4002   +bal_TA_NRFI_YTD
4003   +bal_TA_RFI_YTD
4004   +bal_USE_VEH_NRFI_YTD
4005   +bal_USE_VEH_RFI_YTD
4006   );
4007 
4008 -- If the Ytd Taxable Income = 0, execute the CalCalc
4009   IF trc_TxbIncYtd = 0 THEN
4010     CalCalc;
4011   ELSE --Continue YtdCalc
4012 
4013   -- Site Factor
4014     trc_SitFactor := dbi_ZA_DYS_IN_YR / DaysWorked;
4015 
4016   -- Abatements
4017     Abatements;
4018 
4019   -- Base Earnings
4020   --
4021     -- Base Earnings
4022     trc_BseErn := trc_TxbIncYtd * trc_SitFactor;
4023     -- Taxable Base Income
4024     trc_TxbBseInc := trc_BseErn - trc_PerTotAbm;
4025     -- Threshold Check
4026     IF trc_TxbBseInc >= trc_Threshold THEN
4027       -- Tax Liability
4028       trc_TotLibBse := TaxLiability(p_Amt => trc_TxbBseInc);
4029     ELSE
4030       trc_TotLibBse := 0;
4031     END IF;
4032 
4033   -- Annual Bonus
4034   --
4035     -- Ytd Annual Bonus
4036     trc_AnnBonYtd :=
4037     (bal_AB_NRFI_YTD
4038     +bal_AB_RFI_YTD
4039     );
4040     -- Skip the calculation if there is No Income
4041     IF trc_AnnBonYtd <> 0 THEN
4042       -- Annual Bonus Earnings
4043       trc_AnnBonErn := trc_AnnBonYtd + trc_BseErn;
4044       -- Taxable Annual Bonus Income
4045       trc_TxbAnnBonInc := trc_AnnBonErn - trc_AnnTotAbm;
4046       -- Threshold Check
4047       IF trc_TxbAnnBonInc >= trc_Threshold THEN
4048         -- Tax Liability
4049         l_TotLibAB := TaxLiability(p_Amt => trc_TxbAnnBonInc);
4050         trc_LibFyAB := l_TotLibAB - trc_TotLibBse;
4051 
4052         -- Check Bonus Provision
4053         IF bal_BP_YTD <> 0 THEN
4054           -- Check Bonus Provision Frequency
4055           IF dbi_BP_TX_RCV = 'A' THEN
4056             trc_LibFpAB := 0;
4057           ELSE
4058             trc_LibFpAB :=
4059               trc_LibFyAB - (bal_TX_ON_BP_YTD
4060                           +bal_TX_ON_AB_YTD);
4061           END IF;
4062         ELSE
4063           trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
4064         END IF;
4065       ELSE
4066         l_TotLibAB := trc_TotLibBse;
4067       END IF;
4068     ELSE
4069       trc_AnnBonErn := trc_BseErn;-- Cascade Figure
4070       trc_TxbAnnBonInc := trc_TxbBseInc;
4071       l_TotLibAB := trc_TotLibBse;
4072     END IF;
4073 
4074   -- Annual Payment
4075   --
4076     -- Ytd Annual Payments
4077     trc_AnnPymYtd :=
4078     (bal_ANU_FRM_RET_FND_NRFI_YTD
4079     +bal_ANU_FRM_RET_FND_RFI_YTD
4080     +bal_PRCH_ANU_TXB_NRFI_YTD
4081     +bal_PRCH_ANU_TXB_RFI_YTD
4082     +bal_SHR_OPT_EXD_NRFI_YTD
4083     +bal_SHR_OPT_EXD_RFI_YTD
4084     +bal_TXB_AP_NRFI_YTD
4085     +bal_TXB_AP_RFI_YTD
4086     +bal_TXB_SUBS_NRFI_YTD
4087     +bal_TXB_SUBS_RFI_YTD
4088     );
4089     -- Skip the calculation if there is No Income
4090     IF trc_AnnPymYtd <> 0 THEN
4091       -- Annual Payments Earnings
4092       trc_AnnPymErn := trc_AnnPymYtd + trc_AnnBonErn;
4093       -- Taxable Annual Payments Income
4094       trc_TxbAnnPymInc := trc_AnnPymErn - trc_AnnTotAbm;
4095       -- Threshold Check
4096       IF trc_TxbAnnPymInc >= trc_Threshold THEN
4097         -- Tax Liability
4098         l_TotLibAP := TaxLiability(p_Amt => trc_TxbAnnPymInc);
4099         trc_LibFyAP := l_TotLibAP - l_TotLibAB;
4100         trc_LibFpAP := trc_LibFyAP - bal_TX_ON_AP_YTD;
4101       ELSE
4102         l_TotLibAP := l_TotLibAB;
4103       END IF;
4104     ELSE
4105       trc_AnnPymErn := trc_AnnBonErn;-- Cascade Figure
4106       trc_TxbAnnPymInc := trc_TxbAnnBonInc;
4107       l_TotLibAP := l_TotLibAB;
4108     END IF;
4109 
4110   -- Net Pay validation
4111   --
4112     NpVal;
4113 
4114   END IF;
4115 
4116 EXCEPTION
4117   WHEN OTHERS THEN
4118     IF xpt_Msg = 'No Error' THEN
4119        xpt_Msg := 'YtdCalc: '||TO_CHAR(SQLCODE);
4120     END IF;
4121        RAISE xpt_E;
4122 
4123 END YtdCalc;
4124 
4125 
4126 PROCEDURE NorCalc AS
4127 -- Variables
4128 --
4129   l_TotLibNI NUMBER(15,2) DEFAULT 0;
4130   l_TotLibFB NUMBER(15,2) DEFAULT 0;
4131   l_TotLibTA NUMBER(15,2) DEFAULT 0;
4132   l_TotLibBP NUMBER(15,2) DEFAULT 0;
4133   l_TotLibAB NUMBER(15,2) DEFAULT 0;
4134   l_TotLibAP NUMBER(15,2) DEFAULT 0;
4135   l_Np       NUMBER(15,2) DEFAULT 0;
4136 
4137 BEGIN
4138 
4139 -- Identify the calculation
4140 --
4141   trc_CalTyp := 'NorCalc';
4142 
4143 
4144 
4145 -- Update Global Balance Values with correct TAXABLE values
4146 --
4147   bal_TA_RFI_PTD :=
4148     bal_TA_RFI_PTD * glb_ZA_TRV_ALL_TX_PRC / 100;
4149 
4150   bal_TA_NRFI_PTD :=
4151     bal_TA_NRFI_PTD * glb_ZA_TRV_ALL_TX_PRC / 100;
4152 
4153   TrvAllYtd;
4154 
4155   bal_PO_RFI_PTD :=
4156     bal_PO_RFI_PTD * glb_ZA_PBL_TX_PRC / 100;
4157 
4158   bal_PO_NRFI_PTD :=
4159     bal_PO_NRFI_PTD * glb_ZA_PBL_TX_PRC / 100;
4160 
4161   bal_PO_RFI_YTD :=
4162     bal_PO_RFI_YTD * glb_ZA_PBL_TX_PRC / 100;
4163 
4164   bal_PO_NRFI_YTD :=
4165     bal_PO_NRFI_YTD * glb_ZA_PBL_TX_PRC / 100;
4166 
4167 
4168 
4169 -- PTD Taxable Income
4170 --
4171   trc_TxbIncPtd :=
4172     (bal_AST_PRCHD_RVAL_NRFI_PTD
4173     +bal_AST_PRCHD_RVAL_RFI_PTD
4174     +bal_BP_PTD
4175     +bal_BUR_AND_SCH_NRFI_PTD
4176     +bal_BUR_AND_SCH_RFI_PTD
4177     +bal_COMM_NRFI_PTD
4178     +bal_COMM_RFI_PTD
4179     +bal_COMP_ALL_NRFI_PTD
4180     +bal_COMP_ALL_RFI_PTD
4181     +bal_ENT_ALL_NRFI_PTD
4182     +bal_ENT_ALL_RFI_PTD
4183     +bal_FREE_ACCOM_NRFI_PTD
4184     +bal_FREE_ACCOM_RFI_PTD
4185     +bal_FREE_SERV_NRFI_PTD
4186     +bal_FREE_SERV_RFI_PTD
4187     +bal_LOW_LOANS_NRFI_PTD
4188     +bal_LOW_LOANS_RFI_PTD
4189     +bal_MLS_AND_VOUCH_NRFI_PTD
4190     +bal_MLS_AND_VOUCH_RFI_PTD
4191     +bal_MED_PAID_NRFI_PTD
4192     +bal_MED_PAID_RFI_PTD
4193     +bal_OTHER_TXB_ALL_NRFI_PTD
4194     +bal_OTHER_TXB_ALL_RFI_PTD
4195     +bal_OVTM_NRFI_PTD
4196     +bal_OVTM_RFI_PTD
4197     +bal_PYM_DBT_NRFI_PTD
4198     +bal_PYM_DBT_RFI_PTD
4199     +bal_RGT_AST_NRFI_PTD
4200     +bal_RGT_AST_RFI_PTD
4201     +bal_TXB_INC_NRFI_PTD
4202     +bal_TXB_INC_RFI_PTD
4203     +bal_TXB_PEN_NRFI_PTD
4204     +bal_TXB_PEN_RFI_PTD
4205     +bal_TEL_ALL_NRFI_PTD
4206     +bal_TEL_ALL_RFI_PTD
4207     +bal_TOOL_ALL_NRFI_PTD
4208     +bal_TOOL_ALL_RFI_PTD
4209     +bal_TA_NRFI_PTD
4210     +bal_TA_RFI_PTD
4211     +bal_USE_VEH_NRFI_PTD
4212     +bal_USE_VEH_RFI_PTD
4213     );
4214 
4215 
4216   -- Period Factor
4217     PeriodFactor;
4218 
4219   -- Possible Periods Factor
4220     PossiblePeriodsFactor;
4221 
4222   -- Abatements
4223     Abatements;
4224 
4225   -- Normal Income
4226   --
4227     -- Ytd Normal Income
4228     trc_NorIncYtd :=
4229     ( bal_COMM_NRFI_YTD
4230     + bal_COMM_RFI_YTD
4231     + bal_COMP_ALL_NRFI_YTD
4232     + bal_COMP_ALL_RFI_YTD
4233     + bal_ENT_ALL_NRFI_YTD
4234     + bal_ENT_ALL_RFI_YTD
4235     + bal_OTHER_TXB_ALL_NRFI_YTD
4236     + bal_OTHER_TXB_ALL_RFI_YTD
4237     + bal_OVTM_NRFI_YTD
4238     + bal_OVTM_RFI_YTD
4239     + bal_TXB_INC_NRFI_YTD
4240     + bal_TXB_INC_RFI_YTD
4241     + bal_TXB_PEN_NRFI_YTD
4242     + bal_TXB_PEN_RFI_YTD
4243     + bal_TEL_ALL_NRFI_YTD
4244     + bal_TEL_ALL_RFI_YTD
4245     + bal_TOOL_ALL_NRFI_YTD
4246     + bal_TOOL_ALL_RFI_YTD
4247     );
4248 
4249     -- Skip the calculation if there is No Income
4250     IF trc_NorIncYtd <> 0 THEN
4251       -- Ptd Normal Income
4252       trc_NorIncPtd :=
4253       ( bal_COMM_NRFI_PTD
4254       + bal_COMM_RFI_PTD
4255       + bal_COMP_ALL_NRFI_PTD
4256       + bal_COMP_ALL_RFI_PTD
4257       + bal_ENT_ALL_NRFI_PTD
4258       + bal_ENT_ALL_RFI_PTD
4259       + bal_OTHER_TXB_ALL_NRFI_PTD
4260       + bal_OTHER_TXB_ALL_RFI_PTD
4261       + bal_OVTM_NRFI_PTD
4262       + bal_OVTM_RFI_PTD
4263       + bal_TXB_INC_NRFI_PTD
4264       + bal_TXB_INC_RFI_PTD
4265       + bal_TXB_PEN_NRFI_PTD
4266       + bal_TXB_PEN_RFI_PTD
4267       + bal_TEL_ALL_NRFI_PTD
4268       + bal_TEL_ALL_RFI_PTD
4269       + bal_TOOL_ALL_NRFI_PTD
4270       + bal_TOOL_ALL_RFI_PTD
4271       );
4272 
4273       -- Annualise Normal Income
4274       trc_NorErn := Annualise
4275                     (p_YtdInc => trc_NorIncYtd
4276                     ,p_PtdInc => trc_NorIncPtd
4277                     );
4278 
4279       -- Taxable Normal Income
4280       trc_TxbNorInc := trc_NorErn - trc_PerTotAbm;
4281 
4282       -- Threshold Check
4283       IF trc_TxbNorInc >= trc_Threshold THEN
4284         -- Tax Liability
4285         l_TotLibNI := TaxLiability(p_Amt => trc_TxbNorInc);
4286         trc_LibFyNI := l_TotLibNI - 0;
4287 
4288         -- DeAnnualise
4289         trc_LibFpNI := DeAnnualise
4290                        (p_Liab    => trc_LibFyNI
4291                        ,p_TxOnYtd => bal_TX_ON_NI_YTD
4292                        ,p_TxOnPtd => bal_TX_ON_NI_PTD
4293                        );
4294       ELSE
4295         l_TotLibNI := 0;
4296         -- Refund any tax paid
4297         trc_LibFpNI := DeAnnualise
4298                        (p_Liab    => trc_LibFyNI
4299                        ,p_TxOnYtd => bal_TX_ON_NI_YTD
4300                        ,p_TxOnPtd => bal_TX_ON_NI_PTD
4301                        );
4302         trc_NpValNIOvr := TRUE;
4303       END IF;
4304     ELSE
4305       trc_NorErn := 0;
4306       trc_TxbNorInc := 0;
4307       l_TotLibNI := 0;
4308       -- Refund any tax paid
4309       trc_LibFpNI := DeAnnualise
4310                      (p_Liab    => trc_LibFyNI
4311                      ,p_TxOnYtd => bal_TX_ON_NI_YTD
4312                      ,p_TxOnPtd => bal_TX_ON_NI_PTD
4313                      );
4314       trc_NpValNIOvr := TRUE;
4315     END IF;
4316 
4317   -- Fringe Benefits
4318   --
4319     -- Ytd Fringe Benefits
4320     trc_FrnBenYtd :=
4321     (bal_AST_PRCHD_RVAL_NRFI_YTD
4322     +bal_AST_PRCHD_RVAL_RFI_YTD
4323     +bal_BUR_AND_SCH_NRFI_YTD
4324     +bal_BUR_AND_SCH_RFI_YTD
4325     +bal_FREE_ACCOM_NRFI_YTD
4326     +bal_FREE_ACCOM_RFI_YTD
4327     +bal_FREE_SERV_NRFI_YTD
4328     +bal_FREE_SERV_RFI_YTD
4329     +bal_LOW_LOANS_NRFI_YTD
4330     +bal_LOW_LOANS_RFI_YTD
4331     +bal_MLS_AND_VOUCH_NRFI_YTD
4332     +bal_MLS_AND_VOUCH_RFI_YTD
4333     +bal_MED_PAID_NRFI_YTD
4334     +bal_MED_PAID_RFI_YTD
4335     +bal_PYM_DBT_NRFI_YTD
4336     +bal_PYM_DBT_RFI_YTD
4337     +bal_RGT_AST_NRFI_YTD
4338     +bal_RGT_AST_RFI_YTD
4339     +bal_USE_VEH_NRFI_YTD
4340     +bal_USE_VEH_RFI_YTD
4341     );
4342 
4343     -- Skip the calculation if there is No Income
4344     IF trc_FrnBenYtd <> 0 THEN
4345       -- Ptd Fringe Benefits
4346       trc_FrnBenPtd :=
4347       (bal_AST_PRCHD_RVAL_NRFI_PTD
4348       +bal_AST_PRCHD_RVAL_RFI_PTD
4349       +bal_BUR_AND_SCH_NRFI_PTD
4350       +bal_BUR_AND_SCH_RFI_PTD
4351       +bal_FREE_ACCOM_NRFI_PTD
4352       +bal_FREE_ACCOM_RFI_PTD
4353       +bal_FREE_SERV_NRFI_PTD
4354       +bal_FREE_SERV_RFI_PTD
4355       +bal_LOW_LOANS_NRFI_PTD
4356       +bal_LOW_LOANS_RFI_PTD
4357       +bal_MLS_AND_VOUCH_NRFI_PTD
4358       +bal_MLS_AND_VOUCH_RFI_PTD
4359       +bal_MED_PAID_NRFI_PTD
4360       +bal_MED_PAID_RFI_PTD
4361       +bal_PYM_DBT_NRFI_PTD
4362       +bal_PYM_DBT_RFI_PTD
4363       +bal_RGT_AST_NRFI_PTD
4364       +bal_RGT_AST_RFI_PTD
4365       +bal_USE_VEH_NRFI_PTD
4366       +bal_USE_VEH_RFI_PTD
4367       );
4368 
4369       -- Annualise Fringe Benefits
4370       trc_FrnBenErn := Annualise
4371                      (p_YtdInc => trc_FrnBenYtd
4372                      ,p_PtdInc => trc_FrnBenPtd
4373                      ) + trc_NorErn;
4374       -- Taxable Fringe Income
4375       trc_TxbFrnInc := trc_FrnBenErn - trc_PerTotAbm;
4376       -- Threshold Check
4377       IF trc_TxbFrnInc >= trc_Threshold THEN
4378         -- Tax Liability
4379         l_TotLibFB := TaxLiability(p_Amt => trc_TxbFrnInc);
4380         trc_LibFyFB := l_TotLibFB - l_TotLibNI;
4381 
4382         -- DeAnnualise
4383         trc_LibFpFB := DeAnnualise
4384                      (trc_LibFyFB
4385                      ,bal_TX_ON_FB_YTD
4386                      ,bal_TX_ON_FB_PTD
4387                      );
4388       ELSE
4389         l_TotLibFB := l_TotLibNI;
4390         -- Refund any tax paid
4391         trc_LibFpFB := DeAnnualise
4392                        (trc_LibFyFB
4393                        ,bal_TX_ON_FB_YTD
4394                        ,bal_TX_ON_FB_PTD
4395                        );
4396         trc_NpValFBOvr := TRUE;
4397       END IF;
4398     ELSE
4399       trc_FrnBenErn := trc_NorErn;
4400       trc_TxbFrnInc := trc_TxbNorInc;
4401       l_TotLibFB := l_TotLibNI;
4402       -- Refund any tax paid
4403       trc_LibFpFB := DeAnnualise
4404                      (trc_LibFyFB
4405                      ,bal_TX_ON_FB_YTD
4406                      ,bal_TX_ON_FB_PTD
4407                      );
4408       trc_NpValFBOvr := TRUE;
4409     END IF;
4410 
4411   -- Travel Allowance
4412   --
4413     -- Ytd Travel Allowance
4414     trc_TrvAllYtd :=
4415     (bal_TA_NRFI_YTD
4416     +bal_TA_RFI_YTD
4417     );
4418     -- Skip the calculation if there is No Income
4419     IF trc_TrvAllYtd <> 0 THEN
4420       -- Ptd Travel Allowance
4421       trc_TrvAllPtd :=
4422       (bal_TA_NRFI_PTD
4423       +bal_TA_RFI_PTD
4424       );
4425       -- Annualise Travel Allowance
4426       trc_TrvAllErn := Annualise
4427                      (p_YtdInc => trc_TrvAllYtd
4428                      ,p_PtdInc => trc_TrvAllPtd
4429                      ) + trc_FrnBenErn;
4430       -- Taxable Travel Income
4431       trc_TxbTrvInc := trc_TrvAllErn - trc_PerTotAbm;
4432       -- Threshold Check
4433       IF trc_TxbTrvInc >= trc_Threshold THEN
4434         -- Tax Liability
4435         l_TotLibTA := TaxLiability(p_Amt => trc_TxbTrvInc);
4436         trc_LibFyTA := l_TotLibTA - l_TotLibFB;
4437 
4438       -- DeAnnualise
4439       trc_LibFpTA := DeAnnualise
4440                    (trc_LibFyTA
4441                    ,bal_TX_ON_TA_YTD
4442                    ,bal_TX_ON_TA_PTD
4443                    );
4444       ELSE
4445         l_TotLibTA := l_TotLibFB;
4446         -- Refund any tax paid
4447         trc_LibFpTA := DeAnnualise
4448                        (trc_LibFyTA
4449                        ,bal_TX_ON_TA_YTD
4450                        ,bal_TX_ON_TA_PTD
4451                        );
4452         trc_NpValTAOvr := TRUE;
4453       END IF;
4454     ELSE
4455       trc_TrvAllErn := trc_FrnBenErn;-- Cascade Figure
4456       trc_TxbTrvInc := trc_TxbFrnInc;
4457       l_TotLibTA := l_TotLibFB;
4458       -- Refund any tax paid
4459       trc_LibFpTA := DeAnnualise
4460                      (trc_LibFyTA
4461                      ,bal_TX_ON_TA_YTD
4462                      ,bal_TX_ON_TA_PTD
4463                      );
4464       trc_NpValTAOvr := TRUE;
4465     END IF;
4466 
4467   -- Bonus Provision
4468   --
4469     -- Ytd Bonus Prvision
4470     trc_BonProYtd := bal_BP_YTD;
4471     -- Skip the calculation if there is No Income
4472     IF trc_BonProYtd <> 0 THEN
4473       -- Ptd Bonus Provision
4474       trc_BonProPtd := bal_BP_PTD;
4475       -- Annualise Bonus Provision
4476       trc_BonProErn := Annualise
4477                      (p_YtdInc => trc_BonProYtd
4478                      ,p_PtdInc => trc_BonProPtd
4479                      ) + trc_TrvAllErn;
4480       -- Taxable Bonus Provision Income
4481       trc_TxbBonProInc := trc_BonProErn - trc_PerTotAbm;
4482       -- Threshold Check
4483       IF trc_TxbBonProInc >= trc_Threshold THEN
4484         -- Tax Liability
4485         l_TotLibBP := TaxLiability(p_Amt => trc_TxbBonProInc);
4486         trc_LibFyBP := l_TotLibBP - l_TotLibTA;
4487 
4488         -- DeAnnualise
4489         trc_LibFpBP := DeAnnualise
4490                      (trc_LibFyBP
4491                      ,bal_TX_ON_BP_YTD
4492                      ,bal_TX_ON_BP_PTD
4493                      );
4494       ELSE
4495         l_TotLibBP := l_TotLibTA;
4496         -- Refund any tax paid
4497         trc_LibFpBP := DeAnnualise
4498                        (trc_LibFyBP
4499                        ,bal_TX_ON_BP_YTD
4500                        ,bal_TX_ON_BP_PTD
4501                        );
4502         trc_NpValBPOvr := TRUE;
4503       END IF;
4504     ELSE
4505       trc_BonProErn := trc_TrvAllErn;
4506       trc_TxbBonProInc := trc_TxbTrvInc;
4507       l_TotLibBP := l_TotLibTA;
4508       -- Refund any tax paid
4509       trc_LibFpBP := DeAnnualise
4510                      (trc_LibFyBP
4511                      ,bal_TX_ON_BP_YTD
4512                      ,bal_TX_ON_BP_PTD
4513                      );
4514       trc_NpValBPOvr := TRUE;
4515     END IF;
4516 
4517   -- Annual Bonus
4518   --
4519     -- Ytd Annual Bonus
4520     trc_AnnBonYtd :=
4521     (bal_AB_NRFI_YTD
4522     +bal_AB_RFI_YTD
4523     );
4524     -- Skip the calculation if there is No Income
4525     IF trc_AnnBonYtd <> 0 THEN
4526       -- Annual Bonus Earnings
4527       trc_AnnBonErn := trc_AnnBonYtd + trc_TrvAllErn;
4528       -- Taxable Annual Bonus Income
4529       trc_TxbAnnBonInc := trc_AnnBonErn -trc_AnnTotAbm;
4530       -- Threshold Check
4531       IF trc_TxbAnnBonInc >= trc_Threshold THEN
4532         -- Tax Liability
4533         l_TotLibAB := TaxLiability(p_Amt => trc_TxbAnnBonInc);
4534         trc_LibFyAB := l_TotLibAB - l_TotLibTA;
4535 
4536         -- Check Bonus Provision
4537         IF trc_BonProYtd <> 0 THEN
4538           -- Check Bonus Provision Frequency
4539           IF dbi_BP_TX_RCV = 'A' THEN
4540             trc_LibFpAB := 0;
4541           ELSE
4542             trc_LibFpAB :=
4543               trc_LibFyAB - (bal_TX_ON_BP_YTD
4544                            +trc_LibFpBP
4545                            +bal_TX_ON_AB_YTD);
4546           END IF;
4547         ELSE
4548           trc_LibFpAB := trc_LibFyAB - bal_TX_ON_AB_YTD;
4549         END IF;
4550       ELSE
4551         l_TotLibAB := l_TotLibTA;
4552         -- Refund any tax paid
4553         trc_LibFpAB := -1 * bal_TX_ON_AB_YTD;
4554         trc_NpValABOvr := TRUE;
4555       END IF;
4556     ELSE
4557       trc_AnnBonErn := trc_TrvAllErn;
4558       trc_TxbAnnBonInc := trc_TxbTrvInc;
4559       l_TotLibAB := l_TotLibTA;
4560       -- Refund any tax paid
4561       trc_LibFpAB := -1 * bal_TX_ON_AB_YTD;
4562       trc_NpValABOvr := TRUE;
4563     END IF;
4564 
4565   -- Annual Payments
4566   --
4567     -- Ytd Annual Payments
4568     trc_AnnPymYtd :=
4569     (bal_ANU_FRM_RET_FND_NRFI_YTD
4570     +bal_ANU_FRM_RET_FND_RFI_YTD
4571     +bal_PRCH_ANU_TXB_NRFI_YTD
4572     +bal_PRCH_ANU_TXB_RFI_YTD
4573     +bal_SHR_OPT_EXD_NRFI_YTD
4574     +bal_SHR_OPT_EXD_RFI_YTD
4575     +bal_TXB_AP_NRFI_YTD
4576     +bal_TXB_AP_RFI_YTD
4577     +bal_TXB_SUBS_NRFI_YTD
4578     +bal_TXB_SUBS_RFI_YTD
4579     );
4580     -- Skip the calculation if there is No Income
4581     IF trc_AnnPymYtd <> 0 THEN
4582       -- Annual Payments Earnings
4583       trc_AnnPymErn := trc_AnnPymYtd + trc_AnnBonErn;
4584       -- Taxable Annual Payments Income
4585       trc_TxbAnnPymInc := trc_AnnPymErn - trc_AnnTotAbm;
4586       -- Threshold Check
4587       IF trc_TxbAnnPymInc >= trc_Threshold THEN
4588         -- Tax Liability
4589         l_TotLibAP := TaxLiability(p_Amt => trc_TxbAnnPymInc);
4590         trc_LibFyAP := l_TotLibAP - l_TotLibAB;
4591         trc_LibFpAP := trc_LibFyAP - bal_TX_ON_AP_YTD;
4592       ELSE
4593         l_TotLibAP := l_TotLibAB;
4594         -- Refund any tax paid
4595         trc_LibFpAP := -1 * bal_TX_ON_AP_YTD;
4596         trc_NpValAPOvr := TRUE;
4597       END IF;
4598     ELSE
4599       trc_AnnPymErn := trc_AnnBonErn;
4600       trc_TxbAnnPymInc := trc_TxbAnnBonInc;
4601       l_TotLibAP := l_TotLibAB;
4602       -- Refund any tax paid
4603       trc_LibFpAP := -1 * bal_TX_ON_AP_YTD;
4604       trc_NpValAPOvr := TRUE;
4605     END IF;
4606 
4607   -- Public Office Allowance
4608   --
4609     -- Ytd Public Office Allowance
4610     trc_PblOffYtd :=
4611     (bal_PO_NRFI_YTD
4612     +bal_PO_RFI_YTD
4613     );
4614     -- Skip the calculation if there is No Income
4615     IF trc_PblOffYtd <> 0 THEN
4616       -- Ptd Public Office Allowance
4617       trc_PblOffPtd :=
4618       (bal_PO_NRFI_PTD
4619       +bal_PO_RFI_PTD
4620       );
4621       -- Annualise Public Office Allowance
4622       trc_PblOffErn := Annualise
4623                      (p_YtdInc => trc_PblOffYtd
4624                      ,p_PtdInc => trc_PblOffPtd
4625                      );
4626       -- Tax Liability
4627       trc_LibFyPO := trc_PblOffErn * glb_ZA_PBL_TX_RTE / 100;
4628       trc_LibFpPO := DeAnnualise
4629                    (trc_LibFyPO
4630                    ,bal_TX_ON_PO_YTD
4631                    ,bal_TX_ON_PO_PTD
4632                    );
4633     ELSE
4634       -- Refund any tax paid
4635       trc_LibFpPO := DeAnnualise
4636                      (trc_LibFyPO
4637                      ,bal_TX_ON_PO_YTD
4638                      ,bal_TX_ON_PO_PTD
4639                      );
4640       trc_NpValPOOvr := TRUE;
4641     END IF;
4642 
4643   -- Net Pay Validation
4644   --
4645     NpVal;
4646 
4647 
4648   EXCEPTION
4649     WHEN OTHERS THEN
4650     IF xpt_Msg = 'No Error' THEN
4651        xpt_Msg := 'NorCalc: '||TO_CHAR(SQLCODE);
4652     END IF;
4653        RAISE xpt_E;
4654 
4655 END NorCalc;
4656 
4657 
4658 -- Function to Initialise Globals
4659 --
4660 FUNCTION ZaTxGlb_01011001(
4661 -- Global Values
4662    p_ZA_ADL_TX_RBT IN NUMBER DEFAULT 0
4663   ,p_ZA_ARR_PF_AN_MX_ABT IN NUMBER DEFAULT 0
4664   ,p_ZA_ARR_RA_AN_MX_ABT IN NUMBER DEFAULT 0
4665   ,p_ZA_TRV_ALL_TX_PRC IN NUMBER DEFAULT 0
4666   ,p_ZA_CC_TX_PRC IN NUMBER DEFAULT 0
4667   ,p_ZA_PF_AN_MX_ABT IN NUMBER DEFAULT 0
4668   ,p_ZA_PF_MX_PRC IN NUMBER DEFAULT 0
4669   ,p_ZA_PRI_TX_RBT IN NUMBER DEFAULT 0
4670   ,p_ZA_PRI_TX_THRSHLD IN NUMBER DEFAULT 0
4671   ,p_ZA_PBL_TX_PRC IN NUMBER DEFAULT 0
4672   ,p_ZA_PBL_TX_RTE IN NUMBER DEFAULT 0
4673   ,p_ZA_RA_AN_MX_ABT IN NUMBER DEFAULT 0
4674   ,p_ZA_RA_MX_PRC IN NUMBER DEFAULT 0
4675   ,p_ZA_SC_TX_THRSHLD IN NUMBER DEFAULT 0
4676   ,p_ZA_SIT_LIM IN NUMBER DEFAULT 0
4677   ,p_ZA_TMP_TX_RTE IN NUMBER DEFAULT 0
4678   ,p_ZA_WRK_DYS_PR_YR IN NUMBER DEFAULT 0
4679   ) RETURN NUMBER
4680 AS
4681   l_Dum NUMBER := 1;
4682   --id VARCHAR2(30);
4683 
4684 BEGIN
4685   --id := dbms_debug.initialize('JLTX');
4686   --dbms_debug.debug_on;
4687 
4688 -- Initialise Package Globals
4689 -- Global Values
4690   glb_ZA_ADL_TX_RBT       := p_ZA_ADL_TX_RBT;
4691   glb_ZA_ARR_PF_AN_MX_ABT := p_ZA_ARR_PF_AN_MX_ABT;
4692   glb_ZA_ARR_RA_AN_MX_ABT := p_ZA_ARR_RA_AN_MX_ABT;
4693   glb_ZA_TRV_ALL_TX_PRC   := p_ZA_TRV_ALL_TX_PRC;
4694   glb_ZA_CC_TX_PRC        := p_ZA_CC_TX_PRC;
4695   glb_ZA_PF_AN_MX_ABT     := p_ZA_PF_AN_MX_ABT;
4696   glb_ZA_PF_MX_PRC        := p_ZA_PF_MX_PRC;
4697   glb_ZA_PRI_TX_RBT       := p_ZA_PRI_TX_RBT;
4698   glb_ZA_PRI_TX_THRSHLD   := p_ZA_PRI_TX_THRSHLD;
4699   glb_ZA_PBL_TX_PRC       := p_ZA_PBL_TX_PRC;
4700   glb_ZA_PBL_TX_RTE       := p_ZA_PBL_TX_RTE;
4701   glb_ZA_RA_AN_MX_ABT     := p_ZA_RA_AN_MX_ABT;
4702   glb_ZA_RA_MX_PRC        := p_ZA_RA_MX_PRC;
4703   glb_ZA_SC_TX_THRSHLD    := p_ZA_SC_TX_THRSHLD;
4704   glb_ZA_SIT_LIM          := p_ZA_SIT_LIM;
4705   glb_ZA_TMP_TX_RTE       := p_ZA_TMP_TX_RTE;
4706   glb_ZA_WRK_DYS_PR_YR    := p_ZA_WRK_DYS_PR_YR;
4707 
4708   RETURN l_Dum;
4709   EXCEPTION
4710     WHEN OTHERS THEN
4711       hr_utility.set_message(801, 'ZaTxGlb_01011001: '||TO_CHAR(SQLCODE));
4712       hr_utility.raise_error;
4713 END ZaTxGlb_01011001;
4714 
4715 -- Function to Initialise Globals - Database Item Values
4716 --
4717 FUNCTION ZaTxDbi_01011001(
4718 -- Database Items
4719    p_ARR_PF_FRQ IN VARCHAR2 DEFAULT 'M'
4720   ,p_ARR_RA_FRQ IN VARCHAR2 DEFAULT 'M'
4721   ,p_ASG_STRT_DTE IN DATE DEFAULT to_date('31-12-4712','DD-MM-YYYY')
4722   ,p_BP_TX_RCV IN VARCHAR2 DEFAULT 'B'
4723   ,p_PER_AGE IN NUMBER DEFAULT 0
4724   ,p_PER_DTE_OF_BRTH IN DATE DEFAULT to_date('31-12-4712','DD-MM-YYYY')
4725   ,p_RA_FRQ IN VARCHAR2 DEFAULT 'M'
4726   ,p_SEA_WRK_DYS_WRK IN NUMBER DEFAULT 0
4727   ,p_SES_DTE IN DATE DEFAULT to_date('31-12-4712','DD-MM-YYYY')
4728   ,p_TX_DIR_VAL IN NUMBER DEFAULT 0
4729   ,p_TX_STA IN VARCHAR2 DEFAULT 'X'
4730   ,p_ZA_ACT_END_DTE IN DATE DEFAULT to_date('31-12-4712','DD-MM-YYYY')
4731   ,p_ZA_CUR_PRD_END_DTE IN DATE DEFAULT to_date('31-12-4712','DD-MM-YYYY')
4732   ,p_ZA_CUR_PRD_STRT_DTE IN DATE DEFAULT to_date('31-12-4712','DD-MM-YYYY')
4733   ,p_ZA_DYS_IN_YR IN NUMBER DEFAULT 0
4734   ,p_ZA_PAY_PRDS_LFT IN NUMBER DEFAULT 0
4735   ,p_ZA_PAY_PRDS_PER_YR IN NUMBER DEFAULT 0
4736   ,p_ZA_TX_YR_END IN DATE DEFAULT to_date('31-12-4712','DD-MM-YYYY')
4737   ,p_ZA_TX_YR_STRT IN DATE DEFAULT to_date('31-12-4712','DD-MM-YYYY')
4738   ) RETURN NUMBER
4739 AS
4740   l_Dum NUMBER := 1;
4741 
4742 BEGIN
4743 -- Initialise Package Globals
4744 -- Database Items
4745   dbi_ARR_PF_FRQ          := p_ARR_PF_FRQ;
4746   dbi_ARR_RA_FRQ          := p_ARR_RA_FRQ;
4747   dbi_ASG_STRT_DTE        := p_ASG_STRT_DTE;
4748   dbi_BP_TX_RCV           := p_BP_TX_RCV;
4749   dbi_PER_AGE             := p_PER_AGE;
4750   dbi_PER_DTE_OF_BRTH     := p_PER_DTE_OF_BRTH;
4751   dbi_RA_FRQ              := p_RA_FRQ;
4752   dbi_SEA_WRK_DYS_WRK     := p_SEA_WRK_DYS_WRK;
4753   dbi_SES_DTE             := p_SES_DTE;
4754   dbi_TX_DIR_VAL          := p_TX_DIR_VAL;
4755   dbi_TX_STA              := p_TX_STA;
4756   dbi_ZA_ACT_END_DTE      := p_ZA_ACT_END_DTE;
4757   dbi_ZA_CUR_PRD_END_DTE  := p_ZA_CUR_PRD_END_DTE;
4758   dbi_ZA_CUR_PRD_STRT_DTE := p_ZA_CUR_PRD_STRT_DTE;
4759   dbi_ZA_DYS_IN_YR        := p_ZA_DYS_IN_YR;
4760   dbi_ZA_PAY_PRDS_LFT     := p_ZA_PAY_PRDS_LFT;
4761   dbi_ZA_PAY_PRDS_PER_YR  := p_ZA_PAY_PRDS_PER_YR;
4762   dbi_ZA_TX_YR_END        := p_ZA_TX_YR_END;
4763   dbi_ZA_TX_YR_STRT       := p_ZA_TX_YR_STRT;
4764 
4765   RETURN l_Dum;
4766   EXCEPTION
4767     WHEN OTHERS THEN
4768       hr_utility.set_message(801, 'ZaTxDbi_01011001: '||TO_CHAR(SQLCODE));
4769       hr_utility.raise_error;
4770 
4771 END ZaTxDbi_01011001;
4772 
4773 
4774 -- Function to Initialise Globals - Balance Values
4775 -- First Section
4776 FUNCTION ZaTxBal1_01011001(
4777 -- Balances
4778    p_AB_NRFI_RUN IN NUMBER DEFAULT 0
4779   ,p_AB_NRFI_PTD IN NUMBER DEFAULT 0
4780   ,p_AB_NRFI_YTD IN NUMBER DEFAULT 0
4781   ,p_AB_RFI_RUN IN NUMBER DEFAULT 0
4782   ,p_AB_RFI_PTD IN NUMBER DEFAULT 0
4783   ,p_AB_RFI_YTD IN NUMBER DEFAULT 0
4784   ,p_ANN_PF_RUN IN NUMBER DEFAULT 0
4785   ,p_ANN_PF_PTD IN NUMBER DEFAULT 0
4786   ,p_ANN_PF_YTD IN NUMBER DEFAULT 0
4787   ,p_ANU_FRM_RET_FND_NRFI_RUN IN NUMBER DEFAULT 0
4788   ,p_ANU_FRM_RET_FND_NRFI_PTD IN NUMBER DEFAULT 0
4789   ,p_ANU_FRM_RET_FND_NRFI_YTD IN NUMBER DEFAULT 0
4790   ,p_ANU_FRM_RET_FND_RFI_RUN IN NUMBER DEFAULT 0
4791   ,p_ANU_FRM_RET_FND_RFI_PTD IN NUMBER DEFAULT 0
4792   ,p_ANU_FRM_RET_FND_RFI_YTD IN NUMBER DEFAULT 0
4793   ,p_ARR_PF_CYTD IN NUMBER DEFAULT 0
4794   ,p_ARR_PF_PTD IN NUMBER DEFAULT 0
4795   ,p_ARR_PF_YTD IN NUMBER DEFAULT 0
4796   ,p_ARR_RA_CYTD IN NUMBER DEFAULT 0
4797   ,p_ARR_RA_PTD IN NUMBER DEFAULT 0
4798   ,p_ARR_RA_YTD IN NUMBER DEFAULT 0
4799   ,p_AST_PRCHD_RVAL_NRFI_CYTD IN NUMBER DEFAULT 0
4800   ,p_AST_PRCHD_RVAL_NRFI_RUN IN NUMBER DEFAULT 0
4801   ,p_AST_PRCHD_RVAL_NRFI_PTD IN NUMBER DEFAULT 0
4802   ,p_AST_PRCHD_RVAL_NRFI_YTD IN NUMBER DEFAULT 0
4803   ,p_AST_PRCHD_RVAL_RFI_CYTD IN NUMBER DEFAULT 0
4804   ,p_AST_PRCHD_RVAL_RFI_RUN IN NUMBER DEFAULT 0
4805   ,p_AST_PRCHD_RVAL_RFI_PTD IN NUMBER DEFAULT 0
4806   ,p_AST_PRCHD_RVAL_RFI_YTD IN NUMBER DEFAULT 0
4807   ,p_BP_PTD IN NUMBER DEFAULT 0
4808   ,p_BP_YTD IN NUMBER DEFAULT 0
4809   ,p_BUR_AND_SCH_NRFI_CYTD IN NUMBER DEFAULT 0
4810   ,p_BUR_AND_SCH_NRFI_RUN IN NUMBER DEFAULT 0
4811   ,p_BUR_AND_SCH_NRFI_PTD IN NUMBER DEFAULT 0
4812   ,p_BUR_AND_SCH_NRFI_YTD IN NUMBER DEFAULT 0
4813   ,p_BUR_AND_SCH_RFI_CYTD IN NUMBER DEFAULT 0
4814   ,p_BUR_AND_SCH_RFI_RUN IN NUMBER DEFAULT 0
4815   ,p_BUR_AND_SCH_RFI_PTD IN NUMBER DEFAULT 0
4816   ,p_BUR_AND_SCH_RFI_YTD IN NUMBER DEFAULT 0
4817   ,p_COMM_NRFI_CYTD IN NUMBER DEFAULT 0
4818   ,p_COMM_NRFI_RUN IN NUMBER DEFAULT 0
4819   ,p_COMM_NRFI_PTD IN NUMBER DEFAULT 0
4820   ,p_COMM_NRFI_YTD IN NUMBER DEFAULT 0
4821   ,p_COMM_RFI_CYTD IN NUMBER DEFAULT 0
4822   ,p_COMM_RFI_RUN IN NUMBER DEFAULT 0
4823   ,p_COMM_RFI_PTD IN NUMBER DEFAULT 0
4824   ,p_COMM_RFI_YTD IN NUMBER DEFAULT 0
4825   ,p_COMP_ALL_NRFI_CYTD IN NUMBER DEFAULT 0
4826   ,p_COMP_ALL_NRFI_RUN IN NUMBER DEFAULT 0
4827   ,p_COMP_ALL_NRFI_PTD IN NUMBER DEFAULT 0
4828   ,p_COMP_ALL_NRFI_YTD IN NUMBER DEFAULT 0
4829   ,p_COMP_ALL_RFI_CYTD IN NUMBER DEFAULT 0
4830   ,p_COMP_ALL_RFI_RUN IN NUMBER DEFAULT 0
4831   ,p_COMP_ALL_RFI_PTD IN NUMBER DEFAULT 0
4832   ,p_COMP_ALL_RFI_YTD IN NUMBER DEFAULT 0
4833   ,p_CUR_PF_CYTD IN NUMBER DEFAULT 0
4834   ,p_CUR_PF_RUN IN NUMBER DEFAULT 0
4835   ,p_CUR_PF_PTD IN NUMBER DEFAULT 0
4836   ,p_CUR_PF_YTD IN NUMBER DEFAULT 0
4837   ,p_CUR_RA_CYTD IN NUMBER DEFAULT 0
4838   ,p_CUR_RA_RUN IN NUMBER DEFAULT 0
4839   ,p_CUR_RA_PTD IN NUMBER DEFAULT 0
4840   ,p_CUR_RA_YTD IN NUMBER DEFAULT 0
4841   ,p_ENT_ALL_NRFI_CYTD IN NUMBER DEFAULT 0
4842   ,p_ENT_ALL_NRFI_RUN IN NUMBER DEFAULT 0
4843   ,p_ENT_ALL_NRFI_PTD IN NUMBER DEFAULT 0
4844   ,p_ENT_ALL_NRFI_YTD IN NUMBER DEFAULT 0
4845   ,p_ENT_ALL_RFI_CYTD IN NUMBER DEFAULT 0
4846   ,p_ENT_ALL_RFI_RUN IN NUMBER DEFAULT 0
4847   ,p_ENT_ALL_RFI_PTD IN NUMBER DEFAULT 0
4848   ,p_ENT_ALL_RFI_YTD IN NUMBER DEFAULT 0
4849   ,p_EXC_ARR_PEN_ITD IN NUMBER DEFAULT 0
4850   ,p_EXC_ARR_PEN_PTD IN NUMBER DEFAULT 0
4851   ,p_EXC_ARR_RA_ITD IN NUMBER DEFAULT 0
4852   ,p_EXC_ARR_RA_PTD IN NUMBER DEFAULT 0
4853   ,p_FREE_ACCOM_NRFI_CYTD IN NUMBER DEFAULT 0
4854   ,p_FREE_ACCOM_NRFI_RUN IN NUMBER DEFAULT 0
4855   ,p_FREE_ACCOM_NRFI_PTD IN NUMBER DEFAULT 0
4856   ,p_FREE_ACCOM_NRFI_YTD IN NUMBER DEFAULT 0
4857   ,p_FREE_ACCOM_RFI_CYTD IN NUMBER DEFAULT 0
4858   ,p_FREE_ACCOM_RFI_RUN IN NUMBER DEFAULT 0
4859   ,p_FREE_ACCOM_RFI_PTD IN NUMBER DEFAULT 0
4860   ,p_FREE_ACCOM_RFI_YTD IN NUMBER DEFAULT 0
4861   ,p_FREE_SERV_NRFI_CYTD IN NUMBER DEFAULT 0
4862   ,p_FREE_SERV_NRFI_RUN IN NUMBER DEFAULT 0
4863   ,p_FREE_SERV_NRFI_PTD IN NUMBER DEFAULT 0
4864   ,p_FREE_SERV_NRFI_YTD IN NUMBER DEFAULT 0
4865   ,p_FREE_SERV_RFI_CYTD IN NUMBER DEFAULT 0
4866   ,p_FREE_SERV_RFI_RUN IN NUMBER DEFAULT 0
4867   ,p_FREE_SERV_RFI_PTD IN NUMBER DEFAULT 0
4868   ,p_FREE_SERV_RFI_YTD IN NUMBER DEFAULT 0
4869   ,p_LOW_LOANS_NRFI_CYTD IN NUMBER DEFAULT 0
4870   ,p_LOW_LOANS_NRFI_RUN IN NUMBER DEFAULT 0
4871   ,p_LOW_LOANS_NRFI_PTD IN NUMBER DEFAULT 0
4872   ,p_LOW_LOANS_NRFI_YTD IN NUMBER DEFAULT 0
4873   ) RETURN NUMBER
4874 AS
4875   l_Dum NUMBER := 1;
4876 
4877 BEGIN
4878 -- Balances
4879   bal_AB_NRFI_RUN              := p_AB_NRFI_RUN;
4880   bal_AB_NRFI_PTD              := p_AB_NRFI_PTD;
4881   bal_AB_NRFI_YTD              := p_AB_NRFI_YTD;
4882   bal_AB_RFI_RUN               := p_AB_RFI_RUN;
4883   bal_AB_RFI_PTD               := p_AB_RFI_PTD;
4884   bal_AB_RFI_YTD               := p_AB_RFI_YTD;
4885   bal_ANN_PF_RUN               := p_ANN_PF_RUN;
4886   bal_ANN_PF_PTD               := p_ANN_PF_PTD;
4887   bal_ANN_PF_YTD               := p_ANN_PF_YTD;
4888   bal_ANU_FRM_RET_FND_NRFI_RUN := p_ANU_FRM_RET_FND_NRFI_RUN;
4889   bal_ANU_FRM_RET_FND_NRFI_PTD := p_ANU_FRM_RET_FND_NRFI_PTD;
4890   bal_ANU_FRM_RET_FND_NRFI_YTD := p_ANU_FRM_RET_FND_NRFI_YTD;
4891   bal_ANU_FRM_RET_FND_RFI_RUN  := p_ANU_FRM_RET_FND_RFI_RUN;
4892   bal_ANU_FRM_RET_FND_RFI_PTD  := p_ANU_FRM_RET_FND_RFI_PTD;
4893   bal_ANU_FRM_RET_FND_RFI_YTD  := p_ANU_FRM_RET_FND_RFI_YTD;
4894   bal_ARR_PF_CYTD              := p_ARR_PF_CYTD;
4895   bal_ARR_PF_PTD               := p_ARR_PF_PTD;
4896   bal_ARR_PF_YTD               := p_ARR_PF_YTD;
4897   bal_ARR_RA_CYTD              := p_ARR_RA_CYTD;
4898   bal_ARR_RA_PTD               := p_ARR_RA_PTD;
4899   bal_ARR_RA_YTD               := p_ARR_RA_YTD;
4900   bal_AST_PRCHD_RVAL_NRFI_CYTD := p_AST_PRCHD_RVAL_NRFI_CYTD;
4901   bal_AST_PRCHD_RVAL_NRFI_RUN  := p_AST_PRCHD_RVAL_NRFI_RUN;
4902   bal_AST_PRCHD_RVAL_NRFI_PTD  := p_AST_PRCHD_RVAL_NRFI_PTD;
4903   bal_AST_PRCHD_RVAL_NRFI_YTD  := p_AST_PRCHD_RVAL_NRFI_YTD;
4904   bal_AST_PRCHD_RVAL_RFI_CYTD  := p_AST_PRCHD_RVAL_RFI_CYTD;
4905   bal_AST_PRCHD_RVAL_RFI_RUN   := p_AST_PRCHD_RVAL_RFI_RUN;
4906   bal_AST_PRCHD_RVAL_RFI_PTD   := p_AST_PRCHD_RVAL_RFI_PTD;
4907   bal_AST_PRCHD_RVAL_RFI_YTD   := p_AST_PRCHD_RVAL_RFI_YTD;
4908   bal_BP_PTD                   := p_BP_PTD;
4909   bal_BP_YTD                   := p_BP_YTD;
4910   bal_BUR_AND_SCH_NRFI_CYTD    := p_BUR_AND_SCH_NRFI_CYTD;
4911   bal_BUR_AND_SCH_NRFI_RUN     := p_BUR_AND_SCH_NRFI_RUN;
4912   bal_BUR_AND_SCH_NRFI_PTD     := p_BUR_AND_SCH_NRFI_PTD;
4913   bal_BUR_AND_SCH_NRFI_YTD     := p_BUR_AND_SCH_NRFI_YTD;
4914   bal_BUR_AND_SCH_RFI_CYTD     := p_BUR_AND_SCH_RFI_CYTD;
4915   bal_BUR_AND_SCH_RFI_RUN      := p_BUR_AND_SCH_RFI_RUN;
4916   bal_BUR_AND_SCH_RFI_PTD      := p_BUR_AND_SCH_RFI_PTD;
4917   bal_BUR_AND_SCH_RFI_YTD      := p_BUR_AND_SCH_RFI_YTD;
4918   bal_COMM_NRFI_CYTD           := p_COMM_NRFI_CYTD;
4919   bal_COMM_NRFI_RUN            := p_COMM_NRFI_RUN;
4920   bal_COMM_NRFI_PTD            := p_COMM_NRFI_PTD;
4921   bal_COMM_NRFI_YTD            := p_COMM_NRFI_YTD;
4922   bal_COMM_RFI_CYTD            := p_COMM_RFI_CYTD;
4923   bal_COMM_RFI_RUN             := p_COMM_RFI_RUN;
4924   bal_COMM_RFI_PTD             := p_COMM_RFI_PTD;
4925   bal_COMM_RFI_YTD             := p_COMM_RFI_YTD;
4926   bal_COMP_ALL_NRFI_CYTD       := p_COMP_ALL_NRFI_CYTD;
4927   bal_COMP_ALL_NRFI_RUN        := p_COMP_ALL_NRFI_RUN;
4928   bal_COMP_ALL_NRFI_PTD        := p_COMP_ALL_NRFI_PTD;
4929   bal_COMP_ALL_NRFI_YTD        := p_COMP_ALL_NRFI_YTD;
4930   bal_COMP_ALL_RFI_CYTD        := p_COMP_ALL_RFI_CYTD;
4931   bal_COMP_ALL_RFI_RUN         := p_COMP_ALL_RFI_RUN;
4932   bal_COMP_ALL_RFI_PTD         := p_COMP_ALL_RFI_PTD;
4933   bal_COMP_ALL_RFI_YTD         := p_COMP_ALL_RFI_YTD;
4934   bal_CUR_PF_CYTD              := p_CUR_PF_CYTD;
4935   bal_CUR_PF_RUN               := p_CUR_PF_RUN;
4936   bal_CUR_PF_PTD               := p_CUR_PF_PTD;
4937   bal_CUR_PF_YTD               := p_CUR_PF_YTD;
4938   bal_CUR_RA_CYTD              := p_CUR_RA_CYTD;
4939   bal_CUR_RA_RUN               := p_CUR_RA_RUN;
4940   bal_CUR_RA_PTD               := p_CUR_RA_PTD;
4941   bal_CUR_RA_YTD               := p_CUR_RA_YTD;
4942   bal_ENT_ALL_NRFI_CYTD        := p_ENT_ALL_NRFI_CYTD;
4943   bal_ENT_ALL_NRFI_RUN         := p_ENT_ALL_NRFI_RUN;
4944   bal_ENT_ALL_NRFI_PTD         := p_ENT_ALL_NRFI_PTD;
4945   bal_ENT_ALL_NRFI_YTD         := p_ENT_ALL_NRFI_YTD;
4946   bal_ENT_ALL_RFI_CYTD         := p_ENT_ALL_RFI_CYTD;
4947   bal_ENT_ALL_RFI_RUN          := p_ENT_ALL_RFI_RUN;
4948   bal_ENT_ALL_RFI_PTD          := p_ENT_ALL_RFI_PTD;
4949   bal_ENT_ALL_RFI_YTD          := p_ENT_ALL_RFI_YTD;
4950   bal_EXC_ARR_PEN_ITD          := p_EXC_ARR_PEN_ITD;
4951   bal_EXC_ARR_PEN_PTD          := p_EXC_ARR_PEN_PTD;
4952   bal_EXC_ARR_RA_ITD           := p_EXC_ARR_RA_ITD;
4953   bal_EXC_ARR_RA_PTD           := p_EXC_ARR_RA_PTD;
4954   bal_FREE_ACCOM_NRFI_CYTD     := p_FREE_ACCOM_NRFI_CYTD;
4955   bal_FREE_ACCOM_NRFI_RUN      := p_FREE_ACCOM_NRFI_RUN;
4956   bal_FREE_ACCOM_NRFI_PTD      := p_FREE_ACCOM_NRFI_PTD;
4957   bal_FREE_ACCOM_NRFI_YTD      := p_FREE_ACCOM_NRFI_YTD;
4958   bal_FREE_ACCOM_RFI_CYTD      := p_FREE_ACCOM_RFI_CYTD;
4959   bal_FREE_ACCOM_RFI_RUN       := p_FREE_ACCOM_RFI_RUN;
4960   bal_FREE_ACCOM_RFI_PTD       := p_FREE_ACCOM_RFI_PTD;
4961   bal_FREE_ACCOM_RFI_YTD       := p_FREE_ACCOM_RFI_YTD;
4962   bal_FREE_SERV_NRFI_CYTD      := p_FREE_SERV_NRFI_CYTD;
4963   bal_FREE_SERV_NRFI_RUN       := p_FREE_SERV_NRFI_RUN;
4964   bal_FREE_SERV_NRFI_PTD       := p_FREE_SERV_NRFI_PTD;
4965   bal_FREE_SERV_NRFI_YTD       := p_FREE_SERV_NRFI_YTD;
4966   bal_FREE_SERV_RFI_CYTD       := p_FREE_SERV_RFI_CYTD;
4967   bal_FREE_SERV_RFI_RUN        := p_FREE_SERV_RFI_RUN;
4968   bal_FREE_SERV_RFI_PTD        := p_FREE_SERV_RFI_PTD;
4969   bal_FREE_SERV_RFI_YTD        := p_FREE_SERV_RFI_YTD;
4970   bal_LOW_LOANS_NRFI_CYTD      := p_LOW_LOANS_NRFI_CYTD;
4971   bal_LOW_LOANS_NRFI_RUN       := p_LOW_LOANS_NRFI_RUN;
4972   bal_LOW_LOANS_NRFI_PTD       := p_LOW_LOANS_NRFI_PTD;
4973   bal_LOW_LOANS_NRFI_YTD       := p_LOW_LOANS_NRFI_YTD;
4974 
4975   RETURN l_Dum;
4976   EXCEPTION
4977     WHEN OTHERS THEN
4978       hr_utility.set_message(801, 'ZaTxBal1_01011001: '||TO_CHAR(SQLCODE));
4979       hr_utility.raise_error;
4980 END ZaTxBal1_01011001;
4981 
4982 
4983 -- Function to Initialise Globals - Balance Values
4984 -- Second Section
4985 FUNCTION ZaTxBal2_01011001(
4986 -- Balances
4987    p_LOW_LOANS_RFI_CYTD IN NUMBER DEFAULT 0
4988   ,p_LOW_LOANS_RFI_RUN IN NUMBER DEFAULT 0
4989   ,p_LOW_LOANS_RFI_PTD IN NUMBER DEFAULT 0
4990   ,p_LOW_LOANS_RFI_YTD IN NUMBER DEFAULT 0
4991   ,p_MLS_AND_VOUCH_NRFI_CYTD IN NUMBER DEFAULT 0
4992   ,p_MLS_AND_VOUCH_NRFI_RUN IN NUMBER DEFAULT 0
4993   ,p_MLS_AND_VOUCH_NRFI_PTD IN NUMBER DEFAULT 0
4994   ,p_MLS_AND_VOUCH_NRFI_YTD IN NUMBER DEFAULT 0
4995   ,p_MLS_AND_VOUCH_RFI_CYTD IN NUMBER DEFAULT 0
4996   ,p_MLS_AND_VOUCH_RFI_RUN IN NUMBER DEFAULT 0
4997   ,p_MLS_AND_VOUCH_RFI_PTD IN NUMBER DEFAULT 0
4998   ,p_MLS_AND_VOUCH_RFI_YTD IN NUMBER DEFAULT 0
4999   ,p_MED_CONTR_CYTD IN NUMBER DEFAULT 0
5000   ,p_MED_CONTR_RUN IN NUMBER DEFAULT 0
5001   ,p_MED_CONTR_PTD IN NUMBER DEFAULT 0
5002   ,p_MED_CONTR_YTD IN NUMBER DEFAULT 0
5003   ,p_MED_PAID_NRFI_CYTD IN NUMBER DEFAULT 0
5004   ,p_MED_PAID_NRFI_RUN IN NUMBER DEFAULT 0
5005   ,p_MED_PAID_NRFI_PTD IN NUMBER DEFAULT 0
5006   ,p_MED_PAID_NRFI_YTD IN NUMBER DEFAULT 0
5007   ,p_MED_PAID_RFI_CYTD IN NUMBER DEFAULT 0
5008   ,p_MED_PAID_RFI_RUN IN NUMBER DEFAULT 0
5009   ,p_MED_PAID_RFI_PTD IN NUMBER DEFAULT 0
5010   ,p_MED_PAID_RFI_YTD IN NUMBER DEFAULT 0
5011   ,p_NET_PAY_RUN IN NUMBER DEFAULT 0
5012   ,p_OTHER_TXB_ALL_NRFI_CYTD IN NUMBER DEFAULT 0
5013   ,p_OTHER_TXB_ALL_NRFI_RUN IN NUMBER DEFAULT 0
5014   ,p_OTHER_TXB_ALL_NRFI_PTD IN NUMBER DEFAULT 0
5015   ,p_OTHER_TXB_ALL_NRFI_YTD IN NUMBER DEFAULT 0
5016   ,p_OTHER_TXB_ALL_RFI_CYTD IN NUMBER DEFAULT 0
5017   ,p_OTHER_TXB_ALL_RFI_RUN IN NUMBER DEFAULT 0
5018   ,p_OTHER_TXB_ALL_RFI_PTD IN NUMBER DEFAULT 0
5019   ,p_OTHER_TXB_ALL_RFI_YTD IN NUMBER DEFAULT 0
5020   ,p_OVTM_NRFI_CYTD IN NUMBER DEFAULT 0
5021   ,p_OVTM_NRFI_RUN IN NUMBER DEFAULT 0
5022   ,p_OVTM_NRFI_PTD IN NUMBER DEFAULT 0
5023   ,p_OVTM_NRFI_YTD IN NUMBER DEFAULT 0
5024   ,p_OVTM_RFI_CYTD IN NUMBER DEFAULT 0
5025   ,p_OVTM_RFI_RUN IN NUMBER DEFAULT 0
5026   ,p_OVTM_RFI_PTD IN NUMBER DEFAULT 0
5027   ,p_OVTM_RFI_YTD IN NUMBER DEFAULT 0
5028   ,p_PAYE_YTD IN NUMBER DEFAULT 0
5029   ,p_PYM_DBT_NRFI_CYTD IN NUMBER DEFAULT 0
5030   ,p_PYM_DBT_NRFI_RUN IN NUMBER DEFAULT 0
5031   ,p_PYM_DBT_NRFI_PTD IN NUMBER DEFAULT 0
5032   ,p_PYM_DBT_NRFI_YTD IN NUMBER DEFAULT 0
5033   ,p_PYM_DBT_RFI_CYTD IN NUMBER DEFAULT 0
5034   ,p_PYM_DBT_RFI_RUN IN NUMBER DEFAULT 0
5035   ,p_PYM_DBT_RFI_PTD IN NUMBER DEFAULT 0
5036   ,p_PYM_DBT_RFI_YTD IN NUMBER DEFAULT 0
5037   ,p_PO_NRFI_RUN IN NUMBER DEFAULT 0
5038   ,p_PO_NRFI_PTD IN NUMBER DEFAULT 0
5039   ,p_PO_NRFI_YTD IN NUMBER DEFAULT 0
5040   ,p_PO_RFI_RUN IN NUMBER DEFAULT 0
5041   ,p_PO_RFI_PTD IN NUMBER DEFAULT 0
5042   ,p_PO_RFI_YTD IN NUMBER DEFAULT 0
5043   ,p_PRCH_ANU_TXB_NRFI_RUN IN NUMBER DEFAULT 0
5044   ,p_PRCH_ANU_TXB_NRFI_PTD IN NUMBER DEFAULT 0
5045   ,p_PRCH_ANU_TXB_NRFI_YTD IN NUMBER DEFAULT 0
5046   ,p_PRCH_ANU_TXB_RFI_RUN IN NUMBER DEFAULT 0
5047   ,p_PRCH_ANU_TXB_RFI_PTD IN NUMBER DEFAULT 0
5048   ,p_PRCH_ANU_TXB_RFI_YTD IN NUMBER DEFAULT 0
5049   ,p_RGT_AST_NRFI_CYTD IN NUMBER DEFAULT 0
5050   ,p_RGT_AST_NRFI_RUN IN NUMBER DEFAULT 0
5051   ,p_RGT_AST_NRFI_PTD IN NUMBER DEFAULT 0
5052   ,p_RGT_AST_NRFI_YTD IN NUMBER DEFAULT 0
5053   ,p_RGT_AST_RFI_CYTD IN NUMBER DEFAULT 0
5054   ,p_RGT_AST_RFI_RUN IN NUMBER DEFAULT 0
5055   ,p_RGT_AST_RFI_PTD IN NUMBER DEFAULT 0
5056   ,p_RGT_AST_RFI_YTD IN NUMBER DEFAULT 0
5057   ,p_SHR_OPT_EXD_NRFI_RUN IN NUMBER DEFAULT 0
5058   ,p_SHR_OPT_EXD_NRFI_PTD IN NUMBER DEFAULT 0
5059   ,p_SHR_OPT_EXD_NRFI_YTD IN NUMBER DEFAULT 0
5060   ,p_SHR_OPT_EXD_RFI_RUN IN NUMBER DEFAULT 0
5061   ,p_SHR_OPT_EXD_RFI_PTD IN NUMBER DEFAULT 0
5062   ,p_SHR_OPT_EXD_RFI_YTD IN NUMBER DEFAULT 0
5063   ,p_SITE_YTD IN NUMBER DEFAULT 0
5064   ,p_TXB_AP_NRFI_RUN IN NUMBER DEFAULT 0
5065   ,p_TXB_AP_NRFI_PTD IN NUMBER DEFAULT 0
5066   ,p_TXB_AP_NRFI_YTD IN NUMBER DEFAULT 0
5067   ,p_TXB_AP_RFI_RUN IN NUMBER DEFAULT 0
5068   ,p_TXB_AP_RFI_PTD IN NUMBER DEFAULT 0
5069   ,p_TXB_AP_RFI_YTD IN NUMBER DEFAULT 0
5070   ,p_TXB_INC_NRFI_CYTD IN NUMBER DEFAULT 0
5071   ,p_TXB_INC_NRFI_RUN IN NUMBER DEFAULT 0
5072   ,p_TXB_INC_NRFI_PTD IN NUMBER DEFAULT 0
5073   ,p_TXB_INC_NRFI_YTD IN NUMBER DEFAULT 0
5074   ,p_TXB_INC_RFI_CYTD IN NUMBER DEFAULT 0
5075   ,p_TXB_INC_RFI_RUN IN NUMBER DEFAULT 0
5076   ) RETURN NUMBER
5077 AS
5078   l_Dum NUMBER := 1;
5079 
5080 BEGIN
5081 -- Balances
5082   bal_LOW_LOANS_RFI_CYTD       := p_LOW_LOANS_RFI_CYTD;
5083   bal_LOW_LOANS_RFI_RUN        := p_LOW_LOANS_RFI_RUN;
5084   bal_LOW_LOANS_RFI_PTD        := p_LOW_LOANS_RFI_PTD;
5085   bal_LOW_LOANS_RFI_YTD        := p_LOW_LOANS_RFI_YTD;
5086   bal_MLS_AND_VOUCH_NRFI_CYTD  := p_MLS_AND_VOUCH_NRFI_CYTD;
5087   bal_MLS_AND_VOUCH_NRFI_RUN   := p_MLS_AND_VOUCH_NRFI_RUN;
5088   bal_MLS_AND_VOUCH_NRFI_PTD   := p_MLS_AND_VOUCH_NRFI_PTD;
5089   bal_MLS_AND_VOUCH_NRFI_YTD   := p_MLS_AND_VOUCH_NRFI_YTD;
5090   bal_MLS_AND_VOUCH_RFI_CYTD   := p_MLS_AND_VOUCH_RFI_CYTD;
5091   bal_MLS_AND_VOUCH_RFI_RUN    := p_MLS_AND_VOUCH_RFI_RUN;
5092   bal_MLS_AND_VOUCH_RFI_PTD    := p_MLS_AND_VOUCH_RFI_PTD;
5093   bal_MLS_AND_VOUCH_RFI_YTD    := p_MLS_AND_VOUCH_RFI_YTD;
5094   bal_MED_CONTR_CYTD           := p_MED_CONTR_CYTD;
5095   bal_MED_CONTR_RUN            := p_MED_CONTR_RUN;
5096   bal_MED_CONTR_PTD            := p_MED_CONTR_PTD;
5097   bal_MED_CONTR_YTD            := p_MED_CONTR_YTD;
5098   bal_MED_PAID_NRFI_CYTD       := p_MED_PAID_NRFI_CYTD;
5099   bal_MED_PAID_NRFI_RUN        := p_MED_PAID_NRFI_RUN;
5100   bal_MED_PAID_NRFI_PTD        := p_MED_PAID_NRFI_PTD;
5101   bal_MED_PAID_NRFI_YTD        := p_MED_PAID_NRFI_YTD;
5102   bal_MED_PAID_RFI_CYTD        := p_MED_PAID_RFI_CYTD;
5103   bal_MED_PAID_RFI_RUN         := p_MED_PAID_RFI_RUN;
5104   bal_MED_PAID_RFI_PTD         := p_MED_PAID_RFI_PTD;
5105   bal_MED_PAID_RFI_YTD         := p_MED_PAID_RFI_YTD;
5106   bal_NET_PAY_RUN              := p_NET_PAY_RUN;
5107   bal_OTHER_TXB_ALL_NRFI_CYTD  := p_OTHER_TXB_ALL_NRFI_CYTD;
5108   bal_OTHER_TXB_ALL_NRFI_RUN   := p_OTHER_TXB_ALL_NRFI_RUN;
5109   bal_OTHER_TXB_ALL_NRFI_PTD   := p_OTHER_TXB_ALL_NRFI_PTD;
5110   bal_OTHER_TXB_ALL_NRFI_YTD   := p_OTHER_TXB_ALL_NRFI_YTD;
5111   bal_OTHER_TXB_ALL_RFI_CYTD   := p_OTHER_TXB_ALL_RFI_CYTD;
5112   bal_OTHER_TXB_ALL_RFI_RUN    := p_OTHER_TXB_ALL_RFI_RUN;
5113   bal_OTHER_TXB_ALL_RFI_PTD    := p_OTHER_TXB_ALL_RFI_PTD;
5114   bal_OTHER_TXB_ALL_RFI_YTD    := p_OTHER_TXB_ALL_RFI_YTD;
5115   bal_OVTM_NRFI_CYTD           := p_OVTM_NRFI_CYTD;
5116   bal_OVTM_NRFI_RUN            := p_OVTM_NRFI_RUN;
5117   bal_OVTM_NRFI_PTD            := p_OVTM_NRFI_PTD;
5118   bal_OVTM_NRFI_YTD            := p_OVTM_NRFI_YTD;
5119   bal_OVTM_RFI_CYTD            := p_OVTM_RFI_CYTD;
5120   bal_OVTM_RFI_RUN             := p_OVTM_RFI_RUN;
5121   bal_OVTM_RFI_PTD             := p_OVTM_RFI_PTD;
5122   bal_OVTM_RFI_YTD             := p_OVTM_RFI_YTD;
5123   bal_PAYE_YTD                 := p_PAYE_YTD;
5124   bal_PYM_DBT_NRFI_CYTD        := p_PYM_DBT_NRFI_CYTD;
5125   bal_PYM_DBT_NRFI_RUN         := p_PYM_DBT_NRFI_RUN;
5126   bal_PYM_DBT_NRFI_PTD         := p_PYM_DBT_NRFI_PTD;
5127   bal_PYM_DBT_NRFI_YTD         := p_PYM_DBT_NRFI_YTD;
5128   bal_PYM_DBT_RFI_CYTD         := p_PYM_DBT_RFI_CYTD;
5129   bal_PYM_DBT_RFI_RUN          := p_PYM_DBT_RFI_RUN;
5130   bal_PYM_DBT_RFI_PTD          := p_PYM_DBT_RFI_PTD;
5131   bal_PYM_DBT_RFI_YTD          := p_PYM_DBT_RFI_YTD;
5132   bal_PO_NRFI_RUN              := p_PO_NRFI_RUN;
5133   bal_PO_NRFI_PTD              := p_PO_NRFI_PTD;
5134   bal_PO_NRFI_YTD              := p_PO_NRFI_YTD;
5135   bal_PO_RFI_RUN               := p_PO_RFI_RUN;
5136   bal_PO_RFI_PTD               := p_PO_RFI_PTD;
5137   bal_PO_RFI_YTD               := p_PO_RFI_YTD;
5138   bal_PRCH_ANU_TXB_NRFI_RUN    := p_PRCH_ANU_TXB_NRFI_RUN;
5139   bal_PRCH_ANU_TXB_NRFI_PTD    := p_PRCH_ANU_TXB_NRFI_PTD;
5140   bal_PRCH_ANU_TXB_NRFI_YTD    := p_PRCH_ANU_TXB_NRFI_YTD;
5141   bal_PRCH_ANU_TXB_RFI_RUN     := p_PRCH_ANU_TXB_RFI_RUN;
5142   bal_PRCH_ANU_TXB_RFI_PTD     := p_PRCH_ANU_TXB_RFI_PTD;
5143   bal_PRCH_ANU_TXB_RFI_YTD     := p_PRCH_ANU_TXB_RFI_YTD;
5144   bal_RGT_AST_NRFI_CYTD        := p_RGT_AST_NRFI_CYTD;
5145   bal_RGT_AST_NRFI_RUN         := p_RGT_AST_NRFI_RUN;
5146   bal_RGT_AST_NRFI_PTD         := p_RGT_AST_NRFI_PTD;
5147   bal_RGT_AST_NRFI_YTD         := p_RGT_AST_NRFI_YTD;
5148   bal_RGT_AST_RFI_CYTD         := p_RGT_AST_RFI_CYTD;
5149   bal_RGT_AST_RFI_RUN          := p_RGT_AST_RFI_RUN;
5150   bal_RGT_AST_RFI_PTD          := p_RGT_AST_RFI_PTD;
5151   bal_RGT_AST_RFI_YTD          := p_RGT_AST_RFI_YTD;
5152   bal_SHR_OPT_EXD_NRFI_RUN     := p_SHR_OPT_EXD_NRFI_RUN;
5153   bal_SHR_OPT_EXD_NRFI_PTD     := p_SHR_OPT_EXD_NRFI_PTD;
5154   bal_SHR_OPT_EXD_NRFI_YTD     := p_SHR_OPT_EXD_NRFI_YTD;
5155   bal_SHR_OPT_EXD_RFI_RUN      := p_SHR_OPT_EXD_RFI_RUN;
5156   bal_SHR_OPT_EXD_RFI_PTD      := p_SHR_OPT_EXD_RFI_PTD;
5157   bal_SHR_OPT_EXD_RFI_YTD      := p_SHR_OPT_EXD_RFI_YTD;
5158   bal_SITE_YTD                 := p_SITE_YTD;
5159   bal_TXB_AP_NRFI_RUN          := p_TXB_AP_NRFI_RUN;
5160   bal_TXB_AP_NRFI_PTD          := p_TXB_AP_NRFI_PTD;
5161   bal_TXB_AP_NRFI_YTD          := p_TXB_AP_NRFI_YTD;
5162   bal_TXB_AP_RFI_RUN           := p_TXB_AP_RFI_RUN;
5163   bal_TXB_AP_RFI_PTD           := p_TXB_AP_RFI_PTD;
5164   bal_TXB_AP_RFI_YTD           := p_TXB_AP_RFI_YTD;
5165   bal_TXB_INC_NRFI_CYTD        := p_TXB_INC_NRFI_CYTD;
5166   bal_TXB_INC_NRFI_RUN         := p_TXB_INC_NRFI_RUN;
5167   bal_TXB_INC_NRFI_PTD         := p_TXB_INC_NRFI_PTD;
5168   bal_TXB_INC_NRFI_YTD         := p_TXB_INC_NRFI_YTD;
5169   bal_TXB_INC_RFI_CYTD         := p_TXB_INC_RFI_CYTD;
5170   bal_TXB_INC_RFI_RUN          := p_TXB_INC_RFI_RUN;
5171 
5172   RETURN l_Dum;
5173   EXCEPTION
5174     WHEN OTHERS THEN
5175       hr_utility.set_message(801, 'ZaTxBal2_01011001: '||TO_CHAR(SQLCODE));
5176       hr_utility.raise_error;
5177 END ZaTxBal2_01011001;
5178 
5179 
5180 -- Function to Initialise Globals - Balance Values
5181 -- Third Section
5182 FUNCTION ZaTxBal3_01011001(
5183 -- Balances
5184    p_TXB_INC_RFI_PTD IN NUMBER DEFAULT 0
5185   ,p_TXB_INC_RFI_YTD IN NUMBER DEFAULT 0
5186   ,p_TXB_PEN_NRFI_CYTD IN NUMBER DEFAULT 0
5187   ,p_TXB_PEN_NRFI_RUN IN NUMBER DEFAULT 0
5188   ,p_TXB_PEN_NRFI_PTD IN NUMBER DEFAULT 0
5189   ,p_TXB_PEN_NRFI_YTD IN NUMBER DEFAULT 0
5190   ,p_TXB_PEN_RFI_CYTD IN NUMBER DEFAULT 0
5191   ,p_TXB_PEN_RFI_RUN IN NUMBER DEFAULT 0
5192   ,p_TXB_PEN_RFI_PTD IN NUMBER DEFAULT 0
5193   ,p_TXB_PEN_RFI_YTD IN NUMBER DEFAULT 0
5194   ,p_TXB_SUBS_NRFI_RUN IN NUMBER DEFAULT 0
5195   ,p_TXB_SUBS_NRFI_PTD IN NUMBER DEFAULT 0
5196   ,p_TXB_SUBS_NRFI_YTD IN NUMBER DEFAULT 0
5197   ,p_TXB_SUBS_RFI_RUN IN NUMBER DEFAULT 0
5198   ,p_TXB_SUBS_RFI_PTD IN NUMBER DEFAULT 0
5199   ,p_TXB_SUBS_RFI_YTD IN NUMBER DEFAULT 0
5200   ,p_TAX_YTD IN NUMBER DEFAULT 0
5201   ,p_TX_ON_AB_PTD IN NUMBER DEFAULT 0
5202   ,p_TX_ON_AB_YTD IN NUMBER DEFAULT 0
5203   ,p_TX_ON_AP_RUN IN NUMBER DEFAULT 0
5204   ,p_TX_ON_AP_PTD IN NUMBER DEFAULT 0
5205   ,p_TX_ON_AP_YTD IN NUMBER DEFAULT 0
5206   ,p_TX_ON_BP_PTD IN NUMBER DEFAULT 0
5207   ,p_TX_ON_BP_YTD IN NUMBER DEFAULT 0
5208   ,p_TX_ON_TA_PTD IN NUMBER DEFAULT 0
5209   ,p_TX_ON_TA_YTD IN NUMBER DEFAULT 0
5210   ,p_TX_ON_FB_PTD IN NUMBER DEFAULT 0
5211   ,p_TX_ON_FB_YTD IN NUMBER DEFAULT 0
5212   ,p_TX_ON_NI_PTD IN NUMBER DEFAULT 0
5213   ,p_TX_ON_NI_YTD IN NUMBER DEFAULT 0
5214   ,p_TX_ON_PO_PTD IN NUMBER DEFAULT 0
5215   ,p_TX_ON_PO_YTD IN NUMBER DEFAULT 0
5216   ,p_TEL_ALL_NRFI_CYTD IN NUMBER DEFAULT 0
5217   ,p_TEL_ALL_NRFI_RUN IN NUMBER DEFAULT 0
5218   ,p_TEL_ALL_NRFI_PTD IN NUMBER DEFAULT 0
5219   ,p_TEL_ALL_NRFI_YTD IN NUMBER DEFAULT 0
5220   ,p_TEL_ALL_RFI_CYTD IN NUMBER DEFAULT 0
5221   ,p_TEL_ALL_RFI_RUN IN NUMBER DEFAULT 0
5222   ,p_TEL_ALL_RFI_PTD IN NUMBER DEFAULT 0
5223   ,p_TEL_ALL_RFI_YTD IN NUMBER DEFAULT 0
5224   ,p_TOOL_ALL_NRFI_CYTD IN NUMBER DEFAULT 0
5225   ,p_TOOL_ALL_NRFI_RUN IN NUMBER DEFAULT 0
5226   ,p_TOOL_ALL_NRFI_PTD IN NUMBER DEFAULT 0
5227   ,p_TOOL_ALL_NRFI_YTD IN NUMBER DEFAULT 0
5228   ,p_TOOL_ALL_RFI_CYTD IN NUMBER DEFAULT 0
5229   ,p_TOOL_ALL_RFI_RUN IN NUMBER DEFAULT 0
5230   ,p_TOOL_ALL_RFI_PTD IN NUMBER DEFAULT 0
5231   ,p_TOOL_ALL_RFI_YTD IN NUMBER DEFAULT 0
5232   ,p_TOT_INC_PTD IN NUMBER DEFAULT 0
5233   ,p_TOT_INC_YTD IN NUMBER DEFAULT 0
5234   ,p_TOT_NRFI_AN_INC_CYTD IN NUMBER DEFAULT 0
5235   ,p_TOT_NRFI_AN_INC_RUN IN NUMBER DEFAULT 0
5236   ,p_TOT_NRFI_AN_INC_YTD IN NUMBER DEFAULT 0
5237   ,p_TOT_NRFI_INC_CYTD IN NUMBER DEFAULT 0
5238   ,p_TOT_NRFI_INC_RUN IN NUMBER DEFAULT 0
5239   ,p_TOT_NRFI_INC_PTD IN NUMBER DEFAULT 0
5240   ,p_TOT_NRFI_INC_YTD IN NUMBER DEFAULT 0
5241   ,p_TOT_RFI_AN_INC_CYTD IN NUMBER DEFAULT 0
5242   ,p_TOT_RFI_AN_INC_RUN IN NUMBER DEFAULT 0
5243   ,p_TOT_RFI_AN_INC_PTD IN NUMBER DEFAULT 0
5244   ,p_TOT_RFI_AN_INC_YTD IN NUMBER DEFAULT 0
5245   ,p_TOT_RFI_INC_CYTD IN NUMBER DEFAULT 0
5246   ,p_TOT_RFI_INC_RUN IN NUMBER DEFAULT 0
5247   ,p_TOT_RFI_INC_PTD IN NUMBER DEFAULT 0
5248   ,p_TOT_RFI_INC_YTD IN NUMBER DEFAULT 0
5249   ,p_TOT_SEA_WRK_DYS_WRK_YTD IN NUMBER DEFAULT 0
5250   ,p_TOT_TXB_INC_ITD IN NUMBER DEFAULT 0
5251   ,p_TA_NRFI_CYTD IN NUMBER DEFAULT 0
5252   ,p_TA_NRFI_PTD IN NUMBER DEFAULT 0
5253   ,p_TA_NRFI_YTD IN NUMBER DEFAULT 0
5254   ,p_TA_RFI_CYTD IN NUMBER DEFAULT 0
5255   ,p_TA_RFI_PTD IN NUMBER DEFAULT 0
5256   ,p_TA_RFI_YTD IN NUMBER DEFAULT 0
5257   ,p_USE_VEH_NRFI_CYTD IN NUMBER DEFAULT 0
5258   ,p_USE_VEH_NRFI_RUN IN NUMBER DEFAULT 0
5259   ,p_USE_VEH_NRFI_PTD IN NUMBER DEFAULT 0
5260   ,p_USE_VEH_NRFI_YTD IN NUMBER DEFAULT 0
5261   ,p_USE_VEH_RFI_CYTD IN NUMBER DEFAULT 0
5262   ,p_USE_VEH_RFI_RUN IN NUMBER DEFAULT 0
5263   ,p_USE_VEH_RFI_PTD IN NUMBER DEFAULT 0
5264   ,p_USE_VEH_RFI_YTD IN NUMBER DEFAULT 0
5265   ) RETURN NUMBER
5266 AS
5267   l_Dum NUMBER := 1;
5268 
5269 BEGIN
5270 -- Balances
5271   bal_TXB_INC_RFI_PTD          := p_TXB_INC_RFI_PTD;
5272   bal_TXB_INC_RFI_YTD          := p_TXB_INC_RFI_YTD;
5273   bal_TXB_PEN_NRFI_CYTD        := p_TXB_PEN_NRFI_CYTD;
5274   bal_TXB_PEN_NRFI_RUN         := p_TXB_PEN_NRFI_RUN;
5275   bal_TXB_PEN_NRFI_PTD         := p_TXB_PEN_NRFI_PTD;
5276   bal_TXB_PEN_NRFI_YTD         := p_TXB_PEN_NRFI_YTD;
5277   bal_TXB_PEN_RFI_CYTD         := p_TXB_PEN_RFI_CYTD;
5278   bal_TXB_PEN_RFI_RUN          := p_TXB_PEN_RFI_RUN;
5279   bal_TXB_PEN_RFI_PTD          := p_TXB_PEN_RFI_PTD;
5280   bal_TXB_PEN_RFI_YTD          := p_TXB_PEN_RFI_YTD;
5281   bal_TXB_SUBS_NRFI_RUN        := p_TXB_SUBS_NRFI_RUN;
5282   bal_TXB_SUBS_NRFI_PTD        := p_TXB_SUBS_NRFI_PTD;
5283   bal_TXB_SUBS_NRFI_YTD        := p_TXB_SUBS_NRFI_YTD;
5284   bal_TXB_SUBS_RFI_RUN         := p_TXB_SUBS_RFI_RUN;
5285   bal_TXB_SUBS_RFI_PTD         := p_TXB_SUBS_RFI_PTD;
5286   bal_TXB_SUBS_RFI_YTD         := p_TXB_SUBS_RFI_YTD;
5287   bal_TAX_YTD                  := p_TAX_YTD;
5288   bal_TX_ON_AB_PTD             := p_TX_ON_AB_PTD;
5289   bal_TX_ON_AB_YTD             := p_TX_ON_AB_YTD;
5290   bal_TX_ON_AP_RUN             := p_TX_ON_AP_RUN;
5291   bal_TX_ON_AP_PTD             := p_TX_ON_AP_PTD;
5292   bal_TX_ON_AP_YTD             := p_TX_ON_AP_YTD;
5293   bal_TX_ON_BP_PTD             := p_TX_ON_BP_PTD;
5294   bal_TX_ON_BP_YTD             := p_TX_ON_BP_YTD;
5295   bal_TX_ON_TA_PTD             := p_TX_ON_TA_PTD;
5296   bal_TX_ON_TA_YTD             := p_TX_ON_TA_YTD;
5297   bal_TX_ON_FB_PTD             := p_TX_ON_FB_PTD;
5298   bal_TX_ON_FB_YTD             := p_TX_ON_FB_YTD;
5299   bal_TX_ON_NI_PTD             := p_TX_ON_NI_PTD;
5300   bal_TX_ON_NI_YTD             := p_TX_ON_NI_YTD;
5301   bal_TX_ON_PO_PTD             := p_TX_ON_PO_PTD;
5302   bal_TX_ON_PO_YTD             := p_TX_ON_PO_YTD;
5303   bal_TEL_ALL_NRFI_CYTD        := p_TEL_ALL_NRFI_CYTD;
5304   bal_TEL_ALL_NRFI_RUN         := p_TEL_ALL_NRFI_RUN;
5305   bal_TEL_ALL_NRFI_PTD         := p_TEL_ALL_NRFI_PTD;
5306   bal_TEL_ALL_NRFI_YTD         := p_TEL_ALL_NRFI_YTD;
5307   bal_TEL_ALL_RFI_CYTD         := p_TEL_ALL_RFI_CYTD;
5308   bal_TEL_ALL_RFI_RUN          := p_TEL_ALL_RFI_RUN;
5309   bal_TEL_ALL_RFI_PTD          := p_TEL_ALL_RFI_PTD;
5310   bal_TEL_ALL_RFI_YTD          := p_TEL_ALL_RFI_YTD;
5311   bal_TOOL_ALL_NRFI_CYTD       := p_TOOL_ALL_NRFI_CYTD;
5312   bal_TOOL_ALL_NRFI_RUN        := p_TOOL_ALL_NRFI_RUN;
5313   bal_TOOL_ALL_NRFI_PTD        := p_TOOL_ALL_NRFI_PTD;
5314   bal_TOOL_ALL_NRFI_YTD        := p_TOOL_ALL_NRFI_YTD;
5315   bal_TOOL_ALL_RFI_CYTD        := p_TOOL_ALL_RFI_CYTD;
5316   bal_TOOL_ALL_RFI_RUN         := p_TOOL_ALL_RFI_RUN;
5317   bal_TOOL_ALL_RFI_PTD         := p_TOOL_ALL_RFI_PTD;
5318   bal_TOOL_ALL_RFI_YTD         := p_TOOL_ALL_RFI_YTD;
5319   bal_TOT_INC_PTD              := p_TOT_INC_PTD;
5320   bal_TOT_INC_YTD              := p_TOT_INC_YTD;
5321   bal_TOT_NRFI_AN_INC_CYTD     := p_TOT_NRFI_AN_INC_CYTD;
5322   bal_TOT_NRFI_AN_INC_RUN      := p_TOT_NRFI_AN_INC_RUN;
5323   bal_TOT_NRFI_AN_INC_YTD      := p_TOT_NRFI_AN_INC_YTD;
5324   bal_TOT_NRFI_INC_CYTD        := p_TOT_NRFI_INC_CYTD;
5325   bal_TOT_NRFI_INC_RUN         := p_TOT_NRFI_INC_RUN;
5326   bal_TOT_NRFI_INC_PTD         := p_TOT_NRFI_INC_PTD;
5327   bal_TOT_NRFI_INC_YTD         := p_TOT_NRFI_INC_YTD;
5328   bal_TOT_RFI_AN_INC_CYTD      := p_TOT_RFI_AN_INC_CYTD;
5329   bal_TOT_RFI_AN_INC_RUN       := p_TOT_RFI_AN_INC_RUN;
5330   bal_TOT_RFI_AN_INC_PTD       := p_TOT_RFI_AN_INC_PTD;
5331   bal_TOT_RFI_AN_INC_YTD       := p_TOT_RFI_AN_INC_YTD;
5332   bal_TOT_RFI_INC_CYTD         := p_TOT_RFI_INC_CYTD;
5333   bal_TOT_RFI_INC_RUN          := p_TOT_RFI_INC_RUN;
5334   bal_TOT_RFI_INC_PTD          := p_TOT_RFI_INC_PTD;
5335   bal_TOT_RFI_INC_YTD          := p_TOT_RFI_INC_YTD;
5336   bal_TOT_SEA_WRK_DYS_WRK_YTD  := p_TOT_SEA_WRK_DYS_WRK_YTD;
5337   bal_TOT_TXB_INC_ITD          := p_TOT_TXB_INC_ITD;
5338   bal_TA_NRFI_CYTD             := p_TA_NRFI_CYTD;
5339   bal_TA_NRFI_PTD              := p_TA_NRFI_PTD;
5340   bal_TA_NRFI_YTD              := p_TA_NRFI_YTD;
5341   bal_TA_RFI_CYTD              := p_TA_RFI_CYTD;
5342   bal_TA_RFI_PTD               := p_TA_RFI_PTD;
5343   bal_TA_RFI_YTD               := p_TA_RFI_YTD;
5344   bal_USE_VEH_NRFI_CYTD        := p_USE_VEH_NRFI_CYTD;
5345   bal_USE_VEH_NRFI_RUN         := p_USE_VEH_NRFI_RUN;
5346   bal_USE_VEH_NRFI_PTD         := p_USE_VEH_NRFI_PTD;
5347   bal_USE_VEH_NRFI_YTD         := p_USE_VEH_NRFI_YTD;
5348   bal_USE_VEH_RFI_CYTD         := p_USE_VEH_RFI_CYTD;
5349   bal_USE_VEH_RFI_RUN          := p_USE_VEH_RFI_RUN;
5350   bal_USE_VEH_RFI_PTD          := p_USE_VEH_RFI_PTD;
5351   bal_USE_VEH_RFI_YTD          := p_USE_VEH_RFI_YTD;
5352 
5353   RETURN l_Dum;
5354   EXCEPTION
5355     WHEN OTHERS THEN
5356       hr_utility.set_message(801, 'ZaTxBal3_01011001: '||TO_CHAR(SQLCODE));
5357       hr_utility.raise_error;
5358 END ZaTxBal3_01011001;
5359 
5360 
5361 -- Main Tax Function
5362 -- Called from Fast Formula
5363 FUNCTION ZaTx_01011001(
5364 /*  PARAMETERS */
5365 -- Contexts
5366    ASSIGNMENT_ACTION_ID IN NUMBER
5367   ,ASSIGNMENT_ID IN NUMBER
5368   ,PAYROLL_ACTION_ID IN NUMBER
5369   ,PAYROLL_ID IN NUMBER
5370 -- Out Parameters
5371   ,p_MsgTxStatus OUT NOCOPY VARCHAR2
5372   ,p_LibWrn OUT NOCOPY VARCHAR2
5373   --,p_SeaWrkDysErr OUT VARCHAR2
5374   ,p_LibFpNI OUT NOCOPY NUMBER
5375   ,p_LibFpFB OUT NOCOPY NUMBER
5376   ,p_LibFpTA OUT NOCOPY NUMBER
5377   ,p_LibFpBP OUT NOCOPY NUMBER
5378   ,p_LibFpAB OUT NOCOPY NUMBER
5379   ,p_LibFpAP OUT NOCOPY NUMBER
5380   ,p_LibFpPO OUT NOCOPY NUMBER
5381   ,p_PayValue OUT NOCOPY NUMBER
5382   ,p_PayeVal OUT NOCOPY NUMBER
5383   ,p_SiteVal OUT NOCOPY NUMBER
5384   ,p_It3Ind  OUT NOCOPY NUMBER
5385   ,p_PfUpdFig OUT NOCOPY NUMBER
5386   ,p_RaUpdFig OUT NOCOPY NUMBER
5387   ,p_OUpdFig OUT NOCOPY NUMBER
5388   )RETURN NUMBER
5389 AS
5390 -- Variables
5391 --
5392   l_Dum NUMBER := 1;
5393 
5394 
5395 BEGIN
5396 /* BODY */
5397 -- Initialise Package Globals
5398 -- Contexts
5399   con_ASG_ACT_ID := ASSIGNMENT_ACTION_ID;
5400   con_ASG_ID     := ASSIGNMENT_ID;
5401   con_PRL_ACT_ID := PAYROLL_ACTION_ID;
5402   con_PRL_ID     := PAYROLL_ID;
5403 
5404   --  Tax Status Validation --
5405   --
5406     /*
5407     C = Directive Amount
5408     D = Directive Percentage
5409     E = Close Corporation
5410     F = Temporary Worker/Student
5411     G = Seasonal Worker
5412     A = Normal
5413     B = Provisional
5414     H = Zero Tax
5415     */
5416     IF dbi_TX_STA = 'C' THEN
5417       -- Check that directive value is filled in
5418       IF dbi_TX_DIR_VAL = 0000 THEN
5419         trc_MsgTxStatus := 'WARNING: Tax Directive Value was defaulted to 25 Percent(%)';
5420         dbi_TX_DIR_VAL := 25;
5421         DirCalc;
5422       ELSE
5423         trc_CalTyp := 'NoCalc';
5424         trc_LibFpNI := dbi_TX_DIR_VAL;
5425         SitPaySplit;
5426       END IF;
5427     ELSIF dbi_TX_STA in ('D','E','F') THEN
5428       -- Check that directive value is filled in
5429       IF dbi_TX_DIR_VAL = 0000 THEN
5430         trc_MsgTxStatus := 'WARNING: Tax Directive Value was defaulted to 25 Percent(%)';
5431         dbi_TX_DIR_VAL := 25;
5432         DirCalc;
5433       ELSE
5434         DirCalc;
5435       END IF;
5436     ELSIF dbi_TX_STA = 'G' THEN
5437       -- Check that seasonal worker days worked is filled in
5438       IF dbi_SEA_WRK_DYS_WRK = 0 THEN
5439          IF xpt_Msg = 'No Error' THEN
5440             xpt_Msg := 'PY_ZA_TX_SEA_WRK_DYS';
5441          END IF;
5442          RAISE xpt_E;
5443       ELSE
5444         SeaCalc;
5445       END IF;
5446     ELSIF dbi_TX_STA IN ('A','B') THEN
5447       -- Is this a SITE Period in anyway?
5448       IF EmpTermPrePeriod THEN
5449         SitCalc;
5450       ELSIF LstPeriod OR EmpTermInPeriod THEN
5451         IF PreErnPeriod THEN
5452           YtdCalc;
5453         ELSE
5454           SitCalc;
5455         END IF;
5456       ElSE
5457       -- The employee has not been terminated!
5458         IF PreErnPeriod THEN
5459           YtdCalc;
5460         ELSE
5461           NorCalc;
5462         END IF;
5463       END IF;
5464     ELSIF dbi_TX_STA = 'H' THEN
5465       trc_LibFpNI := 0;
5466       trc_LibFpFB := 0;
5467       trc_LibFpTA := 0;
5468       trc_LibFpBP := 0;
5469       trc_LibFpAB := 0;
5470       trc_LibFpAP := 0;
5471       trc_LibFpPO := 0;
5472     ELSE
5473       hr_utility.set_message(801, 'ERROR: Invalid Tax Status');
5474       hr_utility.raise_error;
5475     END IF;
5476 
5477 -- Execute the Arrear Processing
5478 --
5479   IF SitePeriod THEN
5480     ArrearExcess;
5481   END IF;
5482 
5483   -- Setup the Out Parameters
5484   --
5485     -- Messages
5486     p_MsgTxStatus := trc_MsgTxStatus;
5487     p_LibWrn       := trc_LibWrn;
5488 
5489     -- Pay Values
5490     trc_PayValue :=
5491     (trc_LibFpNI
5492     +trc_LibFpFB
5493     +trc_LibFpTA
5494     +trc_LibFpBP
5495     +trc_LibFpAB
5496     +trc_LibFpAP
5497     +trc_LibFpPO
5498     );
5499 
5500     -- Tax On's
5501     p_LibFpNI := trc_LibFpNI;
5502     p_LibFpFB := trc_LibFpFB;
5503     p_LibFpTA := trc_LibFpTA;
5504     p_LibFpBP := trc_LibFpBP;
5505     p_LibFpAB := trc_LibFpAB;
5506     p_LibFpAP := trc_LibFpAP;
5507     p_LibFpPO := trc_LibFpPO;
5508     p_PayValue := trc_PayValue;
5509 
5510     -- Indicators, Splits and Updates
5511     p_PayeVal := trc_PayeVal;
5512     p_SiteVal := trc_SiteVal;
5513     p_It3Ind  := trc_It3Ind;
5514     p_PfUpdFig := trc_PfUpdFig;
5515     p_RaUpdFig := trc_RaUpdFig;
5516     p_OUpdFig := trc_OUpdFig;
5517 
5518 -- Execute The Tax Trace
5519 --
5520   Trace;
5521 -- Clear Globals
5522 --
5523   ClearGlobals;
5524 
5525   --dbms_debug.debug_off;
5526 
5527   RETURN l_Dum;
5528 
5529   EXCEPTION
5530     WHEN xpt_E  THEN
5531        hr_utility.set_message(801, xpt_Msg);
5532        hr_utility.raise_error;
5533     WHEN OTHERS THEN
5534        hr_utility.set_message(801, 'ZaTx_01011001: '||TO_CHAR(SQLCODE));
5535        hr_utility.raise_error;
5536 
5537 
5538 END ZaTx_01011001;
5539 
5540 END PY_ZA_TX_01011001;
5541