DBA Data[Home] [Help]

PACKAGE BODY: APPS.ZX_TDS_CALC_SERVICES_PUB_PKG

Source


1 PACKAGE BODY ZX_TDS_CALC_SERVICES_PUB_PKG AS
2  /* $Header: zxdwtxcalsrvpubb.pls 120.132.12010000.5 2009/02/05 14:38:29 tsen ship $ */
3 
4  /* Declare constants */
5 
6  G_PKG_NAME      CONSTANT VARCHAR2(30)   := 'zx_tds_calc_services_pub_pkg';
7  G_MSG_UERROR    CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR;
8  G_MSG_ERROR     CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_ERROR;
9  G_MSG_SUCCESS   CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_SUCCESS;
10 
11  G_MSG_HIGH      CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH;
12  G_MSG_MEDIUM    CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM;
13  G_MSG_LOW       CONSTANT NUMBER         := FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW;
14 
15  NUMBER_DUMMY    CONSTANT NUMBER(15)     := -999999999999999;
16 
17  G_LINES_PER_FETCH   CONSTANT NUMBER       := 1000;
18 
19  l_error_buffer	VARCHAR2(240);
20 
21   TYPE l_tax_prof_id_rec_type IS RECORD(
22      tax_prof_id                        NUMBER,
23      process_for_appl_flg               VARCHAR2(1)
24 );
25 
26 TYPE l_tax_prof_id_tbl_type IS TABLE OF l_tax_prof_id_rec_type INDEX BY BINARY_INTEGER;
27 l_tax_prof_id_tbl l_tax_prof_id_tbl_type;
28 
29 TYPE l_templ_usage_rec_type IS RECORD(
30      det_factor_templ_code      VARCHAR2(30),
31      template_usage_code        VARCHAR2(30)
32 );
33 
34 TYPE l_templ_usage_tbl_type IS TABLE OF l_templ_usage_rec_type INDEX BY BINARY_INTEGER;
35 l_templ_usage_tbl l_templ_usage_tbl_type;
36 
37 PROCEDURE fetch_detail_tax_lines (
38   x_return_status	    OUT NOCOPY 	 VARCHAR2);
39 
40 PROCEDURE process_taxes_for_xml_inv_line (
41   --p_event_class_rec        IN 	        zx_api_pub.event_class_rec_type,
42   x_return_status          OUT NOCOPY   VARCHAR2);
43 
44 PROCEDURE process_taxes_for_xml_inv_hdr (
45   --p_event_class_rec        IN 	        zx_api_pub.event_class_rec_type,
46   x_return_status          OUT NOCOPY   VARCHAR2);
47 
48 PROCEDURE adjust_tax_for_xml_inv_line (
49   --p_event_class_rec        IN 	        zx_api_pub.event_class_rec_type,
50   x_return_status          OUT NOCOPY   VARCHAR2);
51 
52 PROCEDURE adjust_tax_for_xml_inv_hdr (
53   --p_event_class_rec        IN 	        zx_api_pub.event_class_rec_type,
54   x_return_status          OUT NOCOPY   VARCHAR2);
55 
56 PROCEDURE  match_tax_amt_to_summary_line (
57   p_event_class_rec	  IN  OUT NOCOPY  zx_api_pub.event_class_rec_type,
58   x_return_status  	  OUT NOCOPY      VARCHAR2);
59 
60 g_current_runtime_level    NUMBER;
61 g_level_statement          CONSTANT  NUMBER   := FND_LOG.LEVEL_STATEMENT;
62 g_level_procedure          CONSTANT  NUMBER   := FND_LOG.LEVEL_PROCEDURE;
63 g_level_event              CONSTANT  NUMBER   := FND_LOG.LEVEL_EVENT;
64 g_level_error              CONSTANT  NUMBER   := FND_LOG.LEVEL_ERROR;
65 g_level_unexpected         CONSTANT  NUMBER   := FND_LOG.LEVEL_UNEXPECTED;
66 
67 /* ======================================================================*
68  |  PROCEDURE get_tax_regimes                                            |
69  |  This procedure returns applicable tax regimes for each transaction   |
70  |  line and also unique tax regimes for whole transaction               |
71  * ======================================================================*/
72 PROCEDURE  get_tax_regimes (
73   p_trx_line_index         IN	         BINARY_INTEGER,
74   p_event_class_rec        IN OUT NOCOPY ZX_API_PUB.event_class_rec_type,
75   x_return_status          OUT NOCOPY    VARCHAR2 ) IS
76 
77   /* Bug 4959835*/
78   l_template_usage_code zx_det_factor_templ_b.template_usage_code%type;
79   l_templ_usage_indx    BINARY_INTEGER;
80 
81   CURSOR get_template_usage_csr IS
82   SELECT template_usage_code
83   FROM zx_det_factor_templ_b
84   WHERE DET_FACTOR_TEMPL_CODE = p_event_class_rec.DET_FACTOR_TEMPL_CODE;
85   /* End: Bug 4959835*/
86 
87 BEGIN
88   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
89 
90   IF (g_level_procedure >= g_current_runtime_level ) THEN
91     FND_LOG.STRING(g_level_procedure,
92                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes.BEGIN',
93                    'ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes(+)');
94   END IF;
95   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
96 
97   -- Bug fix 3365220, 3426155, skip get_applicable_regimes for
98   -- the following cases
99   --    1) applied_from_application_id is not null
100   --    2) adjusted_doc_application_id is not null
101   --    3) event type code is OVERRIDE_TAX
102   --    4) historical trx lines
103   -- Bug 3010729: skip performing regime applicability for trx lines with
104   --              line level  action 'LINE_INFO_TAX_ONLY'
105   -- Bug 3990418: Skip regime applicability determination process for line
106   --              level actions 'CANCEL', 'SYNCHRONIZE', 'DISCARD' and
107   --              'RECORD_WITH_NO_TAX', 'NO_CHANGE'
108   -- Bug 3893366: Skip regime determination for line_level_action
109   --              'ALLOCATE_LINE_ONLY_ADJUSTMENT'
110   -- Bug 5440023: Do not skip regime determination for line_level_action
111   --              'LINE_INFO_TAX_ONLY' if it is partner integration
112   --
113   IF (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(
114             p_trx_line_index) IS NULL
115     AND  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(
116             p_trx_line_index) IS NULL
117     AND  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code (
118             p_trx_line_index ) <> 'OVERRIDE_TAX'
119     AND  nvl(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.historical_flag (
120             p_trx_line_index ), 'N') = 'N'
121     AND  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action (
122             p_trx_line_index ) NOT IN ('CANCEL', 'SYNCHRONIZE', 'DISCARD',
123             'RECORD_WITH_NO_TAX',  'NO_CHANGE',
124             'ALLOCATE_LINE_ONLY_ADJUSTMENT'))
125    THEN
126 
127      --
128      -- Bug#5440023- do not process non partner and line level
129      -- action is 'LINE_INFO_TAX_ONLY'
130      --
131      IF (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action ( p_trx_line_index ) = 'LINE_INFO_TAX_ONLY'
132         AND NVL(ZX_GLOBAL_STRUCTURES_PKG.g_ptnr_srvc_subscr_flag, 'N') = 'N' ) THEN
133 
134        RETURN;
135 
136      END IF;
137 
138      -- Start: Added for Bug 4959835
139 
140      -- added caching logic here
141      l_templ_usage_indx := dbms_utility.get_hash_value(p_event_class_rec.det_factor_templ_code, 1, 8192);
142 
143      IF l_templ_usage_tbl.EXISTS(l_templ_usage_indx)
144            AND l_templ_usage_tbl(l_templ_usage_indx).det_factor_templ_code = p_event_class_rec.det_factor_templ_code THEN
145           l_template_usage_code := l_templ_usage_tbl(l_templ_usage_indx).template_usage_code;
146      ELSE
147        OPEN get_template_usage_csr;
148        FETCH get_template_usage_csr into l_template_usage_code;
149        CLOSE get_template_usage_csr;
150 
151        l_templ_usage_tbl(l_templ_usage_indx).det_factor_templ_code := p_event_class_rec.det_factor_templ_code;
152        l_templ_usage_tbl(l_templ_usage_indx).template_usage_code := l_template_usage_code;
153      END IF;
154 
155      IF (g_level_statement >= g_current_runtime_level ) THEN
156          FND_LOG.STRING(g_level_statement,
157                 'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes',
158                 'l_template_usage_code := '||l_template_usage_code);
159      END IF;
160 
161      -- Populate the event_class_rec with template_usage_code.This is to avoid
162      -- executing the above same SQL during tax_applicability.
163      p_event_class_rec.template_usage_code := l_template_usage_code;
164 
165      -- Perform Tax Regime Determination only for location based taxes.
166      -- For non-location based scenario(i.e.P2P and O2C OUs where tax method=VAT),
167      -- use direct rate determination process to obtain the candidate taxes.
168 
169      IF l_template_usage_code = 'TAX_REGIME_DETERMINATION'
170      THEN
171           ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes (
172                         p_trx_line_index,
173                         p_event_class_rec,
174 						 x_return_status );
175      END IF;
176      -- End: Bug 4959835
177 
178   END IF;
179 
180   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
181     IF (g_level_error >= g_current_runtime_level ) THEN
182       FND_LOG.STRING(g_level_error,
183                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes',
184                      'Incorrect return_status after calling ' ||
185                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes()');
186       FND_LOG.STRING(g_level_error,
187                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes',
188                      'RETURN_STATUS = ' || x_return_status);
189       FND_LOG.STRING(g_level_error,
190                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes.END',
191                      'ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes(-)');
192     END IF;
193     RETURN;
194   END IF;
195 
196   IF (g_level_procedure >= g_current_runtime_level ) THEN
197 
198     FND_LOG.STRING(g_level_procedure,
199                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes.END',
200                    'ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes(-)');
201   END IF;
202 
203 EXCEPTION
204   WHEN OTHERS THEN
205     -- Start: Added for Bug 4959835
206     IF get_template_usage_csr%ISOPEN THEN
207        CLOSE get_template_usage_csr;
208     END IF;
209     -- End: Bug 4959835
210     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
211 
212     IF (g_level_unexpected >= g_current_runtime_level ) THEN
213       FND_LOG.STRING(g_level_unexpected,
214                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes',
215                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
216       FND_LOG.STRING(g_level_unexpected,
217                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes.END',
218                      'ZX_TDS_CALC_SERVICES_PUB_PKG.get_tax_regimes(-)');
219     END IF;
220 
221 END get_tax_regimes;
222 
223 /* ======================================================================*
224  |  PROCEDURE calculate_tax                                              |
225  |  This procedure is called for every transaction line                  |
226  * ======================================================================*/
227 PROCEDURE  calculate_tax (
228  p_trx_line_index        IN             BINARY_INTEGER,
229  p_event_class_rec       IN OUT NOCOPY  zx_api_pub.event_class_rec_type,
230  x_return_status            OUT NOCOPY  VARCHAR2) IS
231 
232  l_begin_index           BINARY_INTEGER;
233  l_end_index             BINARY_INTEGER;
234  l_provider_id           NUMBER;
235  l_tax_regime_id         zx_regimes_b.tax_regime_id%TYPE;
236  l_tax_date              DATE;
237  l_tax_determine_date    DATE;
238  l_tax_point_date        DATE;
239  l_error_buffer          VARCHAR2(240);
240 
241  l_upg_trx_info_rec      zx_on_fly_trx_upgrade_pkg.zx_upg_trx_info_rec_type;
242  l_trx_migrated_b        BOOLEAN;
243  l_tax_exists_flg        VARCHAR2(1);
244 
245 
246  CURSOR get_source_doc_info(
247           c_application_id    zx_evnt_cls_mappings.application_id%TYPE,
248           c_entity_code       zx_evnt_cls_mappings.entity_code%TYPE,
249           c_event_class_code  zx_evnt_cls_mappings.event_class_code%TYPE
250         )
251  IS
252    SELECT intrcmp_src_appln_id,
253           intrcmp_src_entity_code,
254           intrcmp_src_evnt_cls_code
255      FROM zx_evnt_cls_mappings
256     WHERE application_id = c_application_id
257       AND entity_code = c_entity_code
258       AND event_class_code = c_event_class_code;
259 
260 BEGIN
261   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
262 
263   IF (g_level_procedure >= g_current_runtime_level ) THEN
264     FND_LOG.STRING(g_level_procedure,
265                   'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.BEGIN',
266                   'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(+)');
267   END IF;
268 
269   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
270 
271   -- Bug 3971016: Skip processing tax applicability for line_level_action
272   --              'RECORD_WITH_NO_TAX'
273   -- Bug 3893366: Skip processing tax applicability for line_level_action
274   --              'ALLOCATE_LINE_ONLY_ADJUSTMENT'
275   --
276   IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
277        p_trx_line_index) IN ( 'RECORD_WITH_NO_TAX',
278                               'ALLOCATE_LINE_ONLY_ADJUSTMENT')
279   THEN
280     IF (g_level_procedure >= g_current_runtime_level ) THEN
281 
282       FND_LOG.STRING(g_level_procedure,
283                     'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
284                     'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)'||'Skip processing for RECORD_WITH_NO_TAX');
285     END IF;
286     RETURN;
287   END IF;
288 
289   --comment out for bug fix 5532891, the assignment has been take cared whenever there is
290   --applicable tax
291   --l_begin_index := ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST+1;
292 
293   -- Bug 3971006
294   --
295   IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
296                                            p_trx_line_index) = 'CREATE' AND
297      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
298                                    p_trx_line_index) ='COPY_AND_CREATE'
299   THEN
300 
301      ZX_TDS_CALC_SERVICES_PUB_PKG.g_process_copy_and_create_flg := 'Y';
302 
303   END IF;
304 
305   -- bug fix 5417887
306   -- following setting has been done in the srv type pkg for each trx
307   /*IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
308                                            p_trx_line_index) = 'UPDATE'
309   THEN
310     ZX_GLOBAL_STRUCTURES_PKG.g_update_event_process_flag := 'Y';
311   END IF;
312   */
313 
314   -- bug 3770874: set global variables for line_level_action 'CANCEL'/DISCARD'
315   -- Remove tax_event_type 'DELETE' and 'CANCEL'
316   --
317   IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
318                                            p_trx_line_index) = 'UPDATE' AND
319      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
320        p_trx_line_index) IN ('CANCEL', 'SYNCHRONIZE', 'DISCARD', 'NO_CHANGE',
321                              'UNAPPLY_FROM')
322   THEN
323 
324     IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.historical_flag(p_trx_line_index) = 'Y' AND
325        ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(p_trx_line_index) IN
326                                    ('CANCEL', 'DISCARD', 'NO_CHANGE', 'UNAPPLY_FROM')
327     THEN
328 
329       l_upg_trx_info_rec.application_id
330         := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id(p_trx_line_index);
331       l_upg_trx_info_rec.event_class_code
332         := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.event_class_code(p_trx_line_index);
333       l_upg_trx_info_rec.entity_code
334         := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.entity_code(p_trx_line_index);
335       l_upg_trx_info_rec.trx_id
336         := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_id(p_trx_line_index);
337       l_upg_trx_info_rec.trx_line_id
338         := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
339       l_upg_trx_info_rec.trx_level_type
340         := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
341 
342       ZX_ON_FLY_TRX_UPGRADE_PKG.is_trx_migrated(
343         p_upg_trx_info_rec  => l_upg_trx_info_rec,
344         x_trx_migrated_b    => l_trx_migrated_b,
345         x_return_status     => x_return_status );
346 
347       IF NOT l_trx_migrated_b THEN
348 
349         ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(
350           p_upg_trx_info_rec  => l_upg_trx_info_rec,
351           x_return_status     => x_return_status
352         );
353 
354         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
355           IF (g_level_statement >= g_current_runtime_level ) THEN
356             FND_LOG.STRING(g_level_statement,
357                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
358                    'Incorrect return_status after calling ' ||
359                    ' ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly' ||
360                    ' contine processing ...');
361             FND_LOG.STRING(g_level_statement,
362                           'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
363                           'RETURN_STATUS = ' || x_return_status);
364             FND_LOG.STRING(g_level_statement,
365                           'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
366                           'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
367           END IF;
368         END IF;
369       END IF;    -- NOT l_trx_migrated_b
370     END IF;      -- historical_flag = 'Y'
371 
372     IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
373                                                 p_trx_line_index) ='CANCEL' THEN
374 
375       ZX_TDS_CALC_SERVICES_PUB_PKG.g_ln_action_cancel_exist_flg := 'Y';
376 
377     ELSIF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
378                                                p_trx_line_index) ='DISCARD' THEN
379 
380       ZX_TDS_CALC_SERVICES_PUB_PKG.g_ln_action_discard_exist_flg:= 'Y';
381 
382     ELSIF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
383                                          p_trx_line_index) = 'UNAPPLY_FROM' THEN
384 
385       ZX_TDS_CALC_SERVICES_PUB_PKG.g_ln_action_discard_exist_flg:= 'Y';
386 
387     ELSIF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
388                                                p_trx_line_index) ='NO_CHANGE' THEN
389 
390       ZX_TDS_CALC_SERVICES_PUB_PKG.g_ln_action_nochange_exist_flg := 'Y';
391 
392     END IF;
393 
394     IF (g_level_procedure >= g_current_runtime_level ) THEN
395 
396       FND_LOG.STRING(g_level_procedure,
397                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
398                      'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)'||'Skip processing for cancel, synch, discard, no change');
399     END IF;
400     RETURN;
401   END IF;
402 
403   -- Initialize global data structures
404   g_check_cond_grp_tbl.DELETE;
405   g_tsrm_num_value_tbl.DELETE;
406   g_tsrm_alphanum_value_tbl.DELETE;
407   g_trx_alphanum_value_tbl.DELETE;
408 
409   --  get tax date for tax event type other than 'OVERRIDE_TAX'
410   --
411   IF( ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
412                                        p_trx_line_index) <> 'OVERRIDE_TAX') THEN
413 
414     ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_date(
415 		p_trx_line_index,
416 		l_tax_date,
417 		l_tax_determine_date,
418 		l_tax_point_date,
419 		x_return_status);
420 
421     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
422       IF (g_level_error >= g_current_runtime_level ) THEN
423         FND_LOG.STRING(g_level_error,
424                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
425                        'Incorrect return_status after calling ' ||
426                        'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_date()');
427         FND_LOG.STRING(g_level_error,
428                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
429                        'RETURN_STATUS = ' || x_return_status);
430         FND_LOG.STRING(g_level_error,
431                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
432                        'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
433       END IF;
434       RETURN;
435     END IF;
436   END IF;
437 
438   -- comment out for bug fix 5417887
439   --  Initialize g_detail_tax_lines_tbl when it is the first transaction line
440   --
441   --IF p_trx_line_index = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_id.FIRST
442   --THEN
443 
444   --  g_detail_tax_lines_tbl.DELETE;
445   --END IF;
446 
447   -- If ref_doc_application_id is not null and it is not an override tax case,
448   -- set the g_reference_doc_exist_flg, so that in the tail end service to
449   -- call process_reference_tax_lines().
450 
451   IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(
452                                           p_trx_line_index) IS NOT NULL    AND
453      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
454                                       p_trx_line_index) <> 'OVERRIDE_TAX'
455   THEN
456     g_reference_doc_exist_flg := 'Y';
457   END IF;
458 
459   IF( ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
460                                                 p_trx_line_index) ='CREATE'   OR
461       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
462                                                 p_trx_line_index) ='UPDATE'   OR
463       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
464                                         p_trx_line_index) = 'OVERRIDE_TAX') THEN
465 
466     -- IF it is a migrated transaction,
467     --    fetch all tax lines from current document, skip applicability process
468     --    Only do tax amount calculation and taxable basis
469     --  OR IF tax_event_type_code = 'OVERRIDE_TAX',
470     --     fetch all tax lines from current document, skip applicability process
471     -- ELSIF applied_from_application_id IS NOT NULL,
472     --   call get_det_tax_lines_from_applied. Skip applicability process
473     -- ELSIF adjusted_doc_application_id IS NOT NULL,
474     --   call get_det_tax_lines_from_adjusted. Skip applicability process
475     -- ELSE  perform applicability process.
476     --
477     -- Bug 5688340: Rearranged the order of conditions in IF statement
478     --              (ie. pulled adjusted_doc is NOT NULL condition before
479     --              applied_from).
480     --              The receipt application in AR causes a tax adjustment to be
481     --              created in eBTax, if an earned discount is recognized.
482     --              In this case, AR passes invoice info in adjusted doc columns
483     --              and cash receipt info in applied from columns.
484     --              In this case, tax calculation must be done using invoice
485     --              (ie. adjusted doc info).
486 
487     IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.historical_flag(p_trx_line_index)
488         = 'Y' OR
489        ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
490                                                  p_trx_line_index) = 'OVERRIDE_TAX'
491     THEN
492 
493        ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(
494 			p_event_class_rec,
495 			p_trx_line_index,
496 			NULL,
497 			NULL,
498 			NULL,
499 			l_begin_index,
500 			l_end_index,
501 			x_return_status);
502 
503       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
504 
505         IF (g_level_statement >= g_current_runtime_level ) THEN
506           FND_LOG.STRING(g_level_statement,
507                         'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
508                         'Incorrect return_status after calling ' ||
509                         'ZX_TDS_APPLICABILITY_DETM_PKG.');
510           FND_LOG.STRING(g_level_statement,
511                         'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
512                         'RETURN_STATUS = ' || x_return_status);
513           FND_LOG.STRING(g_level_statement,
514                         'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
515                         'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
516         END IF;
517         RETURN;
518       END IF;
519 
520       -- When no tax line found for the historical transaction, check if the trx line
521       -- exists in zx_lines_det_factors. If yes, it means the historical transaction
522       -- was migrated, but don't have tax. Otherwise, migrate the historical
523       -- transaction on-the-fly and call ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines
524       -- again to fetch the tax lines for the historical transaction.
525 
526       IF ((l_begin_index IS NULL) OR (l_begin_index = l_end_index)) AND
527          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.historical_flag(p_trx_line_index) = 'Y'  THEN
528 
529         l_upg_trx_info_rec.application_id
530           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id(p_trx_line_index);
531         l_upg_trx_info_rec.event_class_code
532           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.event_class_code(p_trx_line_index);
533         l_upg_trx_info_rec.entity_code
534           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.entity_code(p_trx_line_index);
535         l_upg_trx_info_rec.trx_id
536           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_id(p_trx_line_index);
537         l_upg_trx_info_rec.trx_line_id
538           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
539         l_upg_trx_info_rec.trx_level_type
540           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
541 
542         ZX_ON_FLY_TRX_UPGRADE_PKG.is_trx_migrated(
543           p_upg_trx_info_rec  => l_upg_trx_info_rec,
544           x_trx_migrated_b    => l_trx_migrated_b,
545           x_return_status     => x_return_status );
546 
547         IF NOT l_trx_migrated_b THEN
548           ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(
549             p_upg_trx_info_rec  => l_upg_trx_info_rec,
550             x_return_status     => x_return_status
551           );
552 
553           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
554             IF (g_level_statement >= g_current_runtime_level ) THEN
555               FND_LOG.STRING(g_level_statement,
556                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
557                      'Incorrect return_status after calling ' ||
558                      ' ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly');
559               FND_LOG.STRING(g_level_statement,
560                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
561                             'RETURN_STATUS = ' || x_return_status);
562               FND_LOG.STRING(g_level_statement,
563                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
564                             'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
565             END IF;
566             RETURN;
567           END IF;
568 
569           -- after migrate the trx on the fly, fetch tax lines for historical trx again.
570           ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(
571 			                         p_event_class_rec,
572 			                         p_trx_line_index,
573 			                         NULL,
574 			                         NULL,
575 			                         NULL,
576 			                         l_begin_index,
577 			                         l_end_index,
578 			                         x_return_status);
579 
580           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
581 
582             IF (g_level_statement >= g_current_runtime_level ) THEN
583               FND_LOG.STRING(g_level_statement,
584                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
585                      'Incorrect return_status after calling ' ||
586                      'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines');
587               FND_LOG.STRING(g_level_statement,
588                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
589                             'RETURN_STATUS = ' || x_return_status);
590               FND_LOG.STRING(g_level_statement,
591                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
592                             'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
593             END IF;
594             RETURN;
595           END IF;
596 
597         END IF;
598       END IF;
599 
600     ELSIF (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(
601             p_trx_line_index)  IS NOT NULL ) THEN
602 
603       ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust(
604 			p_event_class_rec,
605 			p_trx_line_index,
606 			l_tax_date,
607   			l_tax_determine_date,
608   			l_tax_point_date,
609 			l_begin_index,
610 			l_end_index,
611 			x_return_status);
612 
613       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
614         IF (g_level_statement >= g_current_runtime_level ) THEN
615           FND_LOG.STRING(g_level_statement,
616                  'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
617                  'Incorrect return_status after calling ' ||
618                  'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust');
619           FND_LOG.STRING(g_level_statement,
620                  'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
621                  'RETURN_STATUS = ' || x_return_status);
622           FND_LOG.STRING(g_level_statement,
623                  'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
624                  'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
625         END IF;
626         RETURN;
627       END IF;
628 
629       -- bug fix 4642405 : handle on the fly migration
630       -- When no tax line found for the adjusted doc, check if the trx line
631       -- exists in zx_lines_det_factors. If yes, it means the adjusted doc was
632       -- migrated, but don't have tax. Otherwise, migrate the adjusted doc
633       -- on-the-fly and call ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust
634       -- again to fetch the tax lines for the adjusted doc.
635 
636       IF (l_begin_index IS NULL) OR (l_begin_index = l_end_index)  THEN
637 
638         l_upg_trx_info_rec.application_id
639           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(
640                p_trx_line_index);
641         l_upg_trx_info_rec.event_class_code
642           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_event_class_code(
643                p_trx_line_index);
644         l_upg_trx_info_rec.entity_code
645           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_entity_code(
646                p_trx_line_index);
647         l_upg_trx_info_rec.trx_id
648           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_trx_id(
649                p_trx_line_index);
650         l_upg_trx_info_rec.trx_line_id
651           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_line_id(
652                p_trx_line_index);
653         l_upg_trx_info_rec.trx_level_type
654           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_trx_level_type(
655                p_trx_line_index);
656 
657         ZX_ON_FLY_TRX_UPGRADE_PKG.is_trx_migrated(
658           p_upg_trx_info_rec  => l_upg_trx_info_rec,
659           x_trx_migrated_b    => l_trx_migrated_b,
660           x_return_status     => x_return_status );
661 
662         IF NOT l_trx_migrated_b THEN
663           ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(
664             p_upg_trx_info_rec  => l_upg_trx_info_rec,
665             x_return_status     => x_return_status
666           );
667 
668           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
669             IF (g_level_statement >= g_current_runtime_level ) THEN
670               FND_LOG.STRING(g_level_statement,
671                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
672                      'Incorrect return_status after calling ' ||
673                      ' ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly');
674               FND_LOG.STRING(g_level_statement,
675                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
676                             'RETURN_STATUS = ' || x_return_status);
677               FND_LOG.STRING(g_level_statement,
678                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
679                             'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
680             END IF;
681             RETURN;
682           END IF;
683 
684           -- after migrate the trx on the fly, fetch tax lines for applied_from doc again.
685           ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust(
686   			p_event_class_rec,
687   			p_trx_line_index,
688   			l_tax_date,
689     			l_tax_determine_date,
690     			l_tax_point_date,
691   			l_begin_index,
692   			l_end_index,
693   			x_return_status);
694 
695           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
696 
697             IF (g_level_statement >= g_current_runtime_level ) THEN
698               FND_LOG.STRING(g_level_statement,
699                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
700                      'Incorrect return_status after calling ' ||
701                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust');
702               FND_LOG.STRING(g_level_statement,
703                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
704                             'RETURN_STATUS = ' || x_return_status);
705               FND_LOG.STRING(g_level_statement,
706                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
707                             'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
708             END IF;
709             RETURN;
710           END IF;
711 
712         END IF;
713       END IF;
714 
715     ELSIF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(
716                                                     p_trx_line_index) IS NOT NULL
717     THEN
718 
719        ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied(
720 			p_event_class_rec,
721 			p_trx_line_index,
722 			l_tax_date,
723   			l_tax_determine_date,
724   			l_tax_point_date,
725 			l_begin_index,
726 			l_end_index,
727 			x_return_status);
728 
729       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
730 
731         IF (g_level_statement >= g_current_runtime_level ) THEN
732           FND_LOG.STRING(g_level_statement,
733                  'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
734                  'Incorrect return_status after calling ' ||
735                  'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied');
736           FND_LOG.STRING(g_level_statement,
737                         'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
738                         'RETURN_STATUS = ' || x_return_status);
739           FND_LOG.STRING(g_level_statement,
740                         'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
741                         'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
742         END IF;
743         RETURN;
744       END IF;
745 
746       -- bug fix 4642405 : handle on the fly migration
747       -- When no tax line found for the applied_from doc, check if the trx line
748       -- exists in zx_lines_det_factors. If yes, it means the applied_from doc was
749       -- migrated, but don't have tax. Otherwise, migrate the applied_from doc
750       -- on-the-fly and call ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied
751       -- again to fetch the tax lines for the applied_from doc.
752 
753       IF (l_begin_index IS NULL) OR (l_begin_index = l_end_index)  THEN
754 
755         l_upg_trx_info_rec.application_id
756           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(
757                p_trx_line_index);
758         l_upg_trx_info_rec.event_class_code
759           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_event_class_code(
760                p_trx_line_index);
761         l_upg_trx_info_rec.entity_code
762           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_entity_code(
763                p_trx_line_index);
764         l_upg_trx_info_rec.trx_id
765           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_trx_id(
766                p_trx_line_index);
767         l_upg_trx_info_rec.trx_line_id
768           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_line_id(
769                p_trx_line_index);
770         l_upg_trx_info_rec.trx_level_type
771           := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_trx_level_type(
772                p_trx_line_index);
773 
774         ZX_ON_FLY_TRX_UPGRADE_PKG.is_trx_migrated(
775           p_upg_trx_info_rec  => l_upg_trx_info_rec,
776           x_trx_migrated_b    => l_trx_migrated_b,
777           x_return_status     => x_return_status );
778 
779         IF NOT l_trx_migrated_b THEN
780           ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(
781             p_upg_trx_info_rec  => l_upg_trx_info_rec,
782             x_return_status     => x_return_status
783           );
784 
785           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
786             IF (g_level_statement >= g_current_runtime_level ) THEN
787               FND_LOG.STRING(g_level_statement,
788                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
789                      'Incorrect return_status after calling ' ||
790                      ' ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly');
791               FND_LOG.STRING(g_level_statement,
792                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
793                             'RETURN_STATUS = ' || x_return_status);
794               FND_LOG.STRING(g_level_statement,
795                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
796                             'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
797             END IF;
798             RETURN;
799           END IF;
800 
801           -- after migrate the trx on the fly, fetch tax lines for applied_from doc again.
802           ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied(
803     			p_event_class_rec,
804     			p_trx_line_index,
805     			l_tax_date,
806       			l_tax_determine_date,
807       			l_tax_point_date,
808     			l_begin_index,
809     			l_end_index,
810     			x_return_status);
811 
812           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
813 
814             IF (g_level_statement >= g_current_runtime_level ) THEN
815               FND_LOG.STRING(g_level_statement,
816                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
817                      'Incorrect return_status after calling ' ||
818                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied');
819               FND_LOG.STRING(g_level_statement,
820                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
821                             'RETURN_STATUS = ' || x_return_status);
822               FND_LOG.STRING(g_level_statement,
823                             'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
824                             'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
825             END IF;
826             RETURN;
827           END IF;
828 
829         END IF;
830 
831       END IF;
832 
833     ELSE     -- loop through detail_tax_regime_tbl to get applicable taxes
834 
835       -- For UPDATE case, fetch manual tax lines from zx_lines
836       --
837 
838       IF ((ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
839                  p_trx_line_index) = 'UPDATE')
840           OR
841           (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
842                  p_trx_line_index) ='UPDATE'  AND
843            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
844                  p_trx_line_index) = 'LINE_INFO_TAX_ONLY')) THEN  -- Bug 5291394
845 
846          ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(
847   			p_event_class_rec,
848   			p_trx_line_index,
849 			l_tax_date,
850 			l_tax_determine_date,
851 			l_tax_point_date,
852   			l_begin_index,
853   			l_end_index,
854   			x_return_status);
855 
856         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
857           IF (g_level_statement >= g_current_runtime_level ) THEN
858             FND_LOG.STRING(g_level_statement,
859                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
860                    'Incorrect return_status after calling ' ||
861                    'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines');
862             FND_LOG.STRING(g_level_statement,
863                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
864                    'RETURN_STATUS = ' || x_return_status);
865             FND_LOG.STRING(g_level_statement,
866                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
867                    'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
868           END IF;
869           RETURN;
870         END IF;
871 
872         -- bug fix 4642405 : handle on the fly migration
873         -- When no tax line found for docto be updated, check if the trx line
874         -- exists in zx_lines_det_factors. If yes, it means current doc was
875         -- migrated, but don't have tax. Otherwise, migrate current doc
876         -- on-the-fly and call ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines
877         -- again to fetch the tax lines for current doc.
878 
879         IF (l_begin_index IS NULL) OR (l_begin_index = l_end_index)  THEN
880 
881           l_upg_trx_info_rec.application_id
882             := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id(
883                  p_trx_line_index);
884           l_upg_trx_info_rec.event_class_code
885             := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.event_class_code(
886                  p_trx_line_index);
887           l_upg_trx_info_rec.entity_code
888             := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.entity_code(
889                  p_trx_line_index);
890           l_upg_trx_info_rec.trx_id
891             := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_id(
892                  p_trx_line_index);
893           l_upg_trx_info_rec.trx_line_id
894             := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(
895                  p_trx_line_index);
896           l_upg_trx_info_rec.trx_level_type
897             := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(
898                  p_trx_line_index);
899 
900           ZX_ON_FLY_TRX_UPGRADE_PKG.is_trx_migrated(
901             p_upg_trx_info_rec  => l_upg_trx_info_rec,
902             x_trx_migrated_b    => l_trx_migrated_b,
903             x_return_status     => x_return_status );
904 
905           IF NOT l_trx_migrated_b THEN
906             ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(
907               p_upg_trx_info_rec  => l_upg_trx_info_rec,
908               x_return_status     => x_return_status
909             );
910 
911             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
912               IF (g_level_statement >= g_current_runtime_level ) THEN
913                 FND_LOG.STRING(g_level_statement,
914                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
915                        'Incorrect return_status after calling ' ||
916                        ' ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly');
917                 FND_LOG.STRING(g_level_statement,
918                               'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
919                               'RETURN_STATUS = ' || x_return_status);
920                 FND_LOG.STRING(g_level_statement,
921                               'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
922                               'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
923               END IF;
924               RETURN;
925             END IF;
926 
927             -- after migrate the trx on the fly, fetch tax lines for applied_from doc again.
928             ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(
929     			p_event_class_rec,
930     			p_trx_line_index,
931   			l_tax_date,
932   			l_tax_determine_date,
933   			l_tax_point_date,
934     			l_begin_index,
935     			l_end_index,
936     			x_return_status);
937 
938             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
939 
940               IF (g_level_statement >= g_current_runtime_level ) THEN
941                 FND_LOG.STRING(g_level_statement,
942                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
943                        'Incorrect return_status after calling ' ||
944                        'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines');
945                 FND_LOG.STRING(g_level_statement,
946                               'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
947                               'RETURN_STATUS = ' || x_return_status);
948                 FND_LOG.STRING(g_level_statement,
949                               'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
950                               'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
951               END IF;
952               RETURN;
953             END IF;
954 
955           END IF;
956         END IF;
957       END IF;        -- -- line_level_action = 'UPDATE'
958 
959       IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
960                                  p_trx_line_index) IN ('CREATE', 'UPDATE')
961           AND ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_event_class_code(
962                                  p_trx_line_index) = 'INTERCOMPANY_TRX'
963           AND ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_trx_id(
964                  p_trx_line_index) IS NOT NULL
965       THEN
966 
967          ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(
968   			p_event_class_rec,
969   			p_trx_line_index,
970 			l_tax_date,
971 			l_tax_determine_date,
972 			l_tax_point_date,
973   			l_begin_index,
974   			l_end_index,
975   			x_return_status);
976 
977         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
978           IF (g_level_statement >= g_current_runtime_level ) THEN
979             FND_LOG.STRING(g_level_statement,
980                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
981                    'Incorrect return_status after calling ' ||
982                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx');
983             FND_LOG.STRING(g_level_statement,
984                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
985                    'RETURN_STATUS = ' || x_return_status);
986             FND_LOG.STRING(g_level_statement,
987                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
988                    'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
989           END IF;
990           RETURN;
991         END IF;
992 
993         -- bug fix 4653504 : handle on the fly migration
994         -- When no tax line found for doc to be updated, check if the trx line
995         -- exists in zx_lines_det_factors. If yes, it means current doc was
996         -- migrated, but don't have tax. Otherwise, migrate current doc
997         -- on-the-fly and call ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines
998         -- again to fetch the tax lines for current doc.
999 
1000         IF ((l_begin_index IS NULL) OR (l_begin_index = l_end_index) ) THEN
1001 
1002           OPEN get_source_doc_info (
1003                  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id(p_trx_line_index),
1004                  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.entity_code(p_trx_line_index),
1005                  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.event_class_code(p_trx_line_index)
1006                );
1007 
1008           FETCH get_source_doc_info into
1009                  l_upg_trx_info_rec.application_id,
1010                  l_upg_trx_info_rec.entity_code,
1011                  l_upg_trx_info_rec.event_class_code;
1012 
1013           IF get_source_doc_info%NOTFOUND THEN
1014             -- need to define new error message code
1015             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1016             IF (g_level_statement >= g_current_runtime_level ) THEN
1017               FND_LOG.STRING(g_level_statement,
1018                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1019                      'No record found in zx_evnt_mappings.' );
1020               FND_LOG.STRING(g_level_statement,
1021                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1022                      'application_id: '||
1023                      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id(p_trx_line_index) );
1024               FND_LOG.STRING(g_level_statement,
1025                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1026                      'entity_code: '||
1027                      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.entity_code(p_trx_line_index) );
1028               FND_LOG.STRING(g_level_statement,
1029                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1030                      'event_class_code: '||
1031                      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.event_class_code(p_trx_line_index) );
1032               FND_LOG.STRING(g_level_statement,
1033                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1034                      'RETURN_STATUS = ' || x_return_status);
1035               FND_LOG.STRING(g_level_statement,
1036                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1037                      'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1038             END IF;
1039             RETURN;
1040           END IF;
1041 
1042           IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_class(p_trx_line_index) = 'AP_CREDIT_MEMO' THEN
1043             l_upg_trx_info_rec.event_class_code := 'CREDIT_MEMO';
1044           ELSIF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_class(p_trx_line_index) = 'AP_DEBIT_MEMO' THEN
1045             l_upg_trx_info_rec.event_class_code := 'DEBIT_MEMO';
1046           END IF;
1047 
1048           l_upg_trx_info_rec.trx_id
1049             := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_trx_id(
1050                  p_trx_line_index);
1051           l_upg_trx_info_rec.trx_line_id
1052             := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_line_id(
1053                  p_trx_line_index);
1054           l_upg_trx_info_rec.trx_level_type
1055             := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_trx_level_type(
1056                  p_trx_line_index);
1057 
1058           ZX_ON_FLY_TRX_UPGRADE_PKG.is_trx_migrated(
1059             p_upg_trx_info_rec  => l_upg_trx_info_rec,
1060             x_trx_migrated_b    => l_trx_migrated_b,
1061             x_return_status     => x_return_status );
1062 
1063           IF NOT l_trx_migrated_b THEN
1064             ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(
1065               p_upg_trx_info_rec  => l_upg_trx_info_rec,
1066               x_return_status     => x_return_status
1067             );
1068 
1069             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1070               IF (g_level_statement >= g_current_runtime_level ) THEN
1071                 FND_LOG.STRING(g_level_statement,
1072                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1073                        'Incorrect return_status after calling ' ||
1074                        ' ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly');
1075                 FND_LOG.STRING(g_level_statement,
1076                               'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1077                               'RETURN_STATUS = ' || x_return_status);
1078                 FND_LOG.STRING(g_level_statement,
1079                               'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1080                               'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1081               END IF;
1082               RETURN;
1083             END IF;
1084 
1085             -- after migrate the trx on the fly, fetch tax lines for applied_from doc again.
1086             ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(
1087     			p_event_class_rec,
1088     			p_trx_line_index,
1089   			l_tax_date,
1090   			l_tax_determine_date,
1091   			l_tax_point_date,
1092     			l_begin_index,
1093     			l_end_index,
1094     			x_return_status);
1095 
1096             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1097               IF (g_level_statement >= g_current_runtime_level ) THEN
1098                 FND_LOG.STRING(g_level_statement,
1099                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1100                        'Incorrect return_status after calling ' ||
1101                        'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx');
1102                 FND_LOG.STRING(g_level_statement,
1103                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1104                        'RETURN_STATUS = ' || x_return_status);
1105                 FND_LOG.STRING(g_level_statement,
1106                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1107                        'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1108               END IF;
1109               RETURN;
1110             END IF;
1111 
1112           END IF;
1113         END IF;
1114 
1115       END IF;      --  'INTERCOMPANY_TRX'
1116 
1117       -- Bug 3648628: if line_level_action = 'LINE_INFO_TAX_ONLY', skip the
1118       -- process to create any detail tax line for this trx line (memo line).
1119       --
1120       IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action (
1121                                  p_trx_line_index ) <> 'LINE_INFO_TAX_ONLY' AND
1122          p_event_class_rec.process_for_applicability_flag = 'Y'  AND
1123          NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_process_for_appl_flg, 'Y') = 'Y' AND
1124          -- Bug 4765758: for TM, check source_process_for_appl_flag to determine
1125          -- whether tax needs to be calcualted or not.
1126          NVL(p_event_class_rec.source_process_for_appl_flag, 'Y') = 'Y'
1127       THEN
1128 
1129         /* Start: Added for Bug 4959835 */
1130         -- Based on the Regime Usage code, either direct rate determination
1131         -- processing has to be performed or it should goto the loop part below.
1132         -- If the Regime determination template is 'STCC' (non-location based)
1133         -- then, call get process results directly
1134         -- Else (for location based) call tax applicability.
1135 
1136         IF p_event_class_rec.template_usage_code = 'TAX_RULES'
1137         THEN
1138 
1139           -- The direct rate determination is coded in the applicability pkg
1140           -- in order to reuse some of the existing logic there.
1141           --
1142           ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(p_trx_line_index,
1143                                                             l_tax_date,
1144                                                             l_tax_determine_date,
1145                                                             l_tax_point_date,
1146                                                             p_event_class_rec,
1147                                                             l_begin_index,
1148                                                             l_end_index,
1149                                                             x_return_status);
1150 
1151            IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1152              IF (g_level_error >= g_current_runtime_level ) THEN
1153                FND_LOG.STRING(g_level_error,
1154                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1155                       'Incorrect return_status after calling ' ||
1156                       'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results()');
1157       	       FND_LOG.STRING(g_level_error,
1158                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1159                       'RETURN_STATUS = ' || x_return_status);
1160     	       FND_LOG.STRING(g_level_error,
1161                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1162                       'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1163              END IF;
1164     	     RETURN;
1165     	   END IF;
1166 
1167 
1168         ELSE
1169          FOR regime_index IN
1170              NVL(ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl.FIRST, 0) ..
1171              NVL(ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl.LAST, -1)    LOOP
1172 
1173            IF ( ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl(
1174                          regime_index).trx_line_index = p_trx_line_index)  THEN
1175 
1176              -- tax_regime_id is detail_tax_regime_tbl(regime_index).tax_regime_id.
1177              -- Get the tax_provider_id:
1178              --
1179              l_tax_regime_id := ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl(
1180                                                        regime_index).tax_regime_id;
1181              l_provider_id := ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(
1182                                                   l_tax_regime_id).tax_provider_id;
1183 
1184              IF (l_provider_id IS NULL) THEN
1185 
1186                -- If l_provider_id is null, this tax needs to be processed
1187                --
1188                ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes (
1189                            l_tax_regime_id,
1190                            ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(
1191                                                  l_tax_regime_id).tax_regime_code,
1192                            p_trx_line_index,
1193                            p_event_class_rec,
1194                            l_tax_date,
1195                            l_tax_determine_date,
1196                            l_tax_point_date,
1197                            l_begin_index,
1198                            l_end_index,
1199                            x_return_status );
1200 
1201                IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1202                  IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1203                    IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1204                      FND_LOG.STRING(G_LEVEL_STATEMENT,
1205                                     'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1206                                     'Incorrect return_status after calling ' ||
1207                                     'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes()');
1208                      FND_LOG.STRING(G_LEVEL_STATEMENT,
1209                                   'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1210                                   'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1211                    END IF;
1212                    RETURN;
1213                  END IF;
1214                END IF;
1215 
1216              END IF;  -- provider ID
1217            END IF;    -- detail_regime for this transaction line
1218          END LOOP;    -- regime_index IN detail_tax_regime_tbl
1219         END IF;       -- to be added for the STCC logic
1220       END IF;        -- line_level_action <> 'LINE_INFO_TAX_ONLY'
1221     END IF;          -- applied_from(adjusted_doc)_appl_id IS NOT NULL,OR ELSE
1222 
1223     IF p_event_class_rec.enforce_tax_from_acct_flag = 'Y' AND
1224 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index) > 0
1225    THEN
1226 
1227       ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account(
1228 			p_event_class_rec,
1229 			p_trx_line_index,
1230 			l_tax_date,
1231   			l_tax_determine_date,
1232   			l_tax_point_date,
1233 			l_begin_index,
1234 			l_end_index,
1235 			x_return_status);
1236 
1237       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1238         IF (g_level_statement >= g_current_runtime_level ) THEN
1239           FND_LOG.STRING(g_level_statement,
1240                  'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1241                  'Incorrect return_status after calling ' ||
1242                  'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account');
1243           FND_LOG.STRING(g_level_statement,
1244                  'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1245                  'RETURN_STATUS = ' || x_return_status);
1246           FND_LOG.STRING(g_level_statement,
1247                  'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1248                  'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1249         END IF;
1250         RETURN;
1251       END IF;
1252     END IF;
1253 
1254     -- call the Internal Processes only if tax created
1255     --
1256     IF l_begin_index IS NOT NULL AND l_end_index IS NOT NULL THEN
1257 
1258       -- For migrated transactions, skip tax status and rate determination
1259       --
1260       IF NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.historical_flag(
1261                                            p_trx_line_index), 'N') <> 'Y' THEN
1262 
1263         -- get tax status
1264         --
1265         ZX_TDS_TAX_STATUS_DETM_PKG.get_tax_status(
1266              		l_begin_index,
1267   			l_end_index,
1268   			'TRX_LINE_DIST_TBL',
1269          		p_trx_line_index,
1270   	        	p_event_class_rec,
1271   		        x_return_status,
1272   			l_error_buffer);
1273 
1274         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1275           IF (g_level_error >= g_current_runtime_level ) THEN
1276             FND_LOG.STRING(g_level_error,
1277                           'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1278                           'Incorrect return_status after calling ' ||
1279                           'ZX_TDS_TAX_STATUS_DETM_PKG.get_tax_status()');
1280             FND_LOG.STRING(g_level_error,
1281                           'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1282                           'RETURN_STATUS = ' || x_return_status);
1283             FND_LOG.STRING(g_level_error,
1284                           'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1285                           'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1286           END IF;
1287           RETURN;
1288         END IF;
1289 
1290         -- get tax rate
1291         --
1292         ZX_TDS_RATE_DETM_PKG.get_tax_rate(
1293          		l_begin_index,
1294   			l_end_index,
1295   	       		p_event_class_rec,
1296   			'TRX_LINE_DIST_TBL',
1297          		p_trx_line_index,
1298              		x_return_status,
1299   			l_error_buffer );
1300 
1301         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1302           IF (g_level_error >= g_current_runtime_level ) THEN
1303             FND_LOG.STRING(g_level_error,
1304                            'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1305                            'Incorrect return_status after calling ' ||
1306                            'ZX_TDS_RATE_DETM_PKG.get_tax_rate()');
1307             FND_LOG.STRING(g_level_error,
1308                            'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1309                            'RETURN_STATUS = ' || x_return_status);
1310     	  FND_LOG.STRING(g_level_error,
1311                            'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1312                            'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1313           END IF;
1314           RETURN;
1315         END IF;
1316       END IF;       -- historical_flag <> 'Y'
1317 
1318       -- Get taxable basis
1319       --
1320       ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis(
1321                		l_begin_index,
1322   		        l_end_index,
1323                		p_event_class_rec,
1324 			'TRX_LINE_DIST_TBL',
1325        			p_trx_line_index,
1326         	        x_return_status,
1327 			l_error_buffer );
1328 
1329       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1330         IF (g_level_error >= g_current_runtime_level ) THEN
1331           FND_LOG.STRING(g_level_error,
1332                          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1333                          'Incorrect return_status after calling ' || '
1334                            ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis()');
1335           FND_LOG.STRING(g_level_error,
1336                          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1337                          'RETURN_STATUS = ' || x_return_status);
1338           FND_LOG.STRING(g_level_error,
1339                          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1340                          'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1341         END IF;
1342         RETURN;
1343       END IF;
1344 
1345       -- Calculate tax amount
1346       --
1347       ZX_TDS_CALC_PKG.Get_tax_amount(
1348                		l_begin_index,
1349    		        l_end_index,
1350                 	p_event_class_rec,
1351 			'TRX_LINE_DIST_TBL',
1352                         p_trx_line_index,
1353            	        x_return_status,
1354 			l_error_buffer );
1355 
1356       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1357         IF (g_level_error >= g_current_runtime_level ) THEN
1358           FND_LOG.STRING(g_level_error,
1359                          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1360                          'Incorrect return_status after calling '||
1361                          'ZX_TDS_CALC_PKG.Get_tax_amount()');
1362           FND_LOG.STRING(g_level_error,
1363                          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1364                          'RETURN_STATUS = ' || x_return_status);
1365           FND_LOG.STRING(g_level_error,
1366                          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1367                          'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1368         END IF;
1369         RETURN;
1370       END IF;
1371 
1372       --
1373       -- populate Process_For_Recovery_Flag
1374       --
1375       ZX_TDS_TAX_LINES_POPU_PKG.populate_recovery_flg(
1376                                                 l_begin_index,
1377                                                 l_end_index,
1378                                                 p_event_class_rec,
1379                                                 x_return_status,
1380                                                 l_error_buffer);
1381 
1382       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1383         RETURN;
1384       END IF;
1385 
1386       -- Call Internal_Flag Service to check mandatory columns, like WHO columns,
1387       -- line ids, etc, and populate values if they are missing.
1388       --
1389       ZX_TDS_TAX_LINES_POPU_PKG.pop_tax_line_for_trx_line(
1390             		l_begin_index,
1391             		l_end_index,
1392             		x_return_status,
1393             		l_error_buffer);
1394 
1395       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1396         IF (g_level_error >= g_current_runtime_level ) THEN
1397           FND_LOG.STRING(g_level_error,
1398                          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1399                          'Incorrect return_status after calling '||
1400                          'ZX_TDS_TAX_LINES_POPU_PKG.pop_tax_line_for_trx_line()');
1401           FND_LOG.STRING(g_level_error,
1402                          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1403                          'RETURN_STATUS = ' || x_return_status);
1404           FND_LOG.STRING(g_level_error,
1405                          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1406                          'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1407         END IF;
1408         RETURN;
1409       END IF;
1410     END IF;  -- begin_index and end_index NOT NULL, call internal services
1411   ELSE       -- tax_event_type_code other than 'CREATE','UPDATE','OVERRIDE_TAX'
1412 
1413     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;     -- bug 4893261
1414     IF (g_level_statement >= g_current_runtime_level ) THEN
1415 
1416       FND_LOG.STRING(g_level_statement,
1417                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1418                      'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)'||'Tax Event Type Code: '||
1419                       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
1420                       p_trx_line_index));
1421     END IF;
1422     RETURN;
1423   END IF;    --  tax_event_type_code 'CREATE','UPDATE','OVERRIDE_TAX'
1424 
1425   IF p_event_class_rec.ctrl_total_hdr_tx_amt IS NOT NULL THEN
1426 
1427     -- If ctrl_hdr_tx_appl_flag is 'N', set the self_assessed_flag of detail
1428     -- tax lines to 'Y'
1429     --
1430     -- set overridden_flag = 'Y' and last_manual_entry = 'TAX_AMOUNT'
1431     --
1432 
1433     ZX_TDS_CALC_SERVICES_PUB_PKG.g_ctrl_total_hdr_tx_amt_flg := 'Y'; -- bug 5417887
1434 
1435     IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ctrl_hdr_tx_appl_flag(
1436                                                     p_trx_line_index) = 'N' THEN
1437       FOR tax_line_index IN nvl(l_begin_index,0) .. nvl(l_end_index,-99) LOOP
1438         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1439                                     tax_line_index).self_assessed_flag := 'Y';
1440       END LOOP;
1441 
1442     END IF;      -- ctrl_hdr_tx_appl_flag is 'N'
1443   END IF;        -- ctrl_total_hdr_tx_amt IS NOT NULL
1444 
1445   -- If ctrl_total_line_tx_amt is not null, process taxes for line level
1446   -- xml invoice
1447   --
1448   IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ctrl_total_line_tx_amt (
1449                                                p_trx_line_index) IS NOT NULL
1450   THEN
1451     l_tax_exists_flg := 'N';
1452     FOR i IN  NVL(l_begin_index, 0) .. NVL(l_end_index, -1) LOOP
1453       IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1454                                                i).self_assessed_flag <> 'Y' AND
1455         ( ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1456                                                       i).offset_flag <> 'Y' OR
1457           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1458                                                       i).offset_flag IS NULL) --Bug 5765221
1459       THEN
1460         l_tax_exists_flg := 'Y';
1461         EXIT;
1462       END IF;
1463     END LOOP;
1464 
1465     IF l_tax_exists_flg = 'Y' THEN
1466 
1467       -- populate p_event_class_rec.ctrl_total_line_tx_amt_flg because the value
1468       -- of ctrl_total_line_tx_amt of this transaction line is not null.
1469       --
1470       p_event_class_rec.ctrl_total_line_tx_amt_flg := 'Y';
1471       ZX_TDS_CALC_SERVICES_PUB_PKG.g_ctrl_total_line_tx_amt_flg := 'Y'; -- bug 5417887
1472 
1473     ELSE
1474       IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ctrl_total_line_tx_amt(
1475                                                          p_trx_line_index) <> 0
1476       THEN
1477         x_return_status := FND_API.G_RET_STS_ERROR;
1478         IF (g_level_error >= g_current_runtime_level ) THEN
1479           FND_LOG.STRING(g_level_error,
1480                         'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1481                         'line level control tax amount is not 0, ' ||
1482                         'but there is no tax lines created for the trx line.');
1483 
1484           FND_LOG.STRING(g_level_error,
1485                         'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1486                         'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1487         END IF;
1488 
1489         FND_MESSAGE.SET_NAME('ZX','ZX_LN_CTRL_TOTAL_TAX_NOT_EXIST');
1490 
1491         -- FND_MSG_PUB.Add;
1492         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
1493            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
1494         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
1495            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
1496 
1497         ZX_API_PUB.add_msg(ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
1498 
1499         RETURN;
1500       END IF;    -- ctrl_total_line_tx_amt <> 0
1501     END IF;      -- l_tax_exists_flg = 'Y' or ELSE
1502   END IF;        -- ctrl_total_line_tx_amt IS NOT NULL
1503 
1504   -- If the number of tax lines in g_detail_tax_lines_tbl is greater than,
1505   -- or equals to 1000, dump the detail tax lines to the global temporary
1506   -- table zx_detail_tax_lines_gt
1507   --
1508   IF ( g_detail_tax_lines_tbl.LAST >= 1000) THEN
1509 
1510     dump_detail_tax_lines_into_gt (x_return_status);
1511 
1512     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1513       IF (g_level_error >= g_current_runtime_level ) THEN
1514         FND_LOG.STRING(g_level_error,
1515                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1516                       'Incorrect return_status after calling ' ||
1517                       'dump_detail_tax_lines_into_gt()');
1518         FND_LOG.STRING(g_level_error,
1519                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1520                       'RETURN_STATUS = ' || x_return_status);
1521         FND_LOG.STRING(g_level_error,
1522                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1523                       'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1524       END IF;
1525       RETURN;
1526     END IF;
1527   END IF;
1528 
1529   IF (g_level_procedure >= g_current_runtime_level ) THEN
1530 
1531     FND_LOG.STRING(g_level_procedure,
1532                   'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1533                   'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)'||x_return_status);
1534   END IF;
1535 
1536 EXCEPTION
1537   WHEN OTHERS THEN
1538     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1539 
1540     IF (g_level_unexpected >= g_current_runtime_level ) THEN
1541       FND_LOG.STRING(g_level_unexpected,
1542                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax',
1543                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
1544       FND_LOG.STRING(g_level_unexpected,
1545                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax.END',
1546                      'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
1547     END IF;
1548 
1549 END calculate_tax;
1550 
1551 /* ======================================================================*
1552  |  PROCEDURE override_detail_tax_lines                                  |
1553  |  This procedure is called for every transaction line                  |
1554  * ======================================================================*/
1555 PROCEDURE  override_detail_tax_lines (
1556   p_trx_line_index	  IN	  	  BINARY_INTEGER,
1557   p_event_class_rec	  IN  OUT NOCOPY  zx_api_pub.event_class_rec_type,
1558   x_return_status         OUT NOCOPY      VARCHAR2) IS
1559 
1560 
1561 BEGIN
1562   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1563 
1564   IF (g_level_procedure >= g_current_runtime_level ) THEN
1565     FND_LOG.STRING(g_level_procedure,
1566                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.overide_detail_tax_lines.BEGIN',
1567                    'ZX_TDS_CALC_SERVICES_PUB_PKG.overide_detail_tax_lines(+)');
1568   END IF;
1569   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
1570 
1571   IF (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
1572                                             p_trx_line_index) = 'OVERRIDE_TAX') THEN
1573 
1574     calculate_tax(  p_trx_line_index,
1575 		    p_event_class_rec,
1576 		    x_return_status );
1577 
1578     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1579       IF (g_level_error >= g_current_runtime_level ) THEN
1580         FND_LOG.STRING(g_level_error,
1581                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.overide_detail_tax_lines',
1582                        'Incorrect return_status after calling calculate_tax()');
1583         FND_LOG.STRING(g_level_error,
1584                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.overide_detail_tax_lines',
1585                        'RETURN_STATUS = ' || x_return_status);
1586         FND_LOG.STRING(g_level_error,
1587                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.overide_detail_tax_lines.END',
1588                        'ZX_TDS_CALC_SERVICES_PUB_PKG.override_detail_tax_lines(-)');
1589       END IF;
1590       RETURN;
1591     END IF;
1592 
1593   ELSE
1594     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;     -- bug 4893261
1595     IF (g_level_statement >= g_current_runtime_level ) THEN
1596       FND_LOG.STRING(g_level_statement,
1597                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.override_detail_tax_lines',
1598                      'Tax Event Type Code: '||
1599                       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
1600                       p_trx_line_index) ||' is not correct.');
1601     END IF;
1602   END IF;
1603 
1604   IF (g_level_procedure >= g_current_runtime_level ) THEN
1605 
1606     FND_LOG.STRING(g_level_procedure,
1607                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.overide_detail_tax_lines.END',
1608                    'ZX_TDS_CALC_SERVICES_PUB_PKG.override_detail_tax_lines(-)'||x_return_status);
1609   END IF;
1610 
1611 EXCEPTION
1612   WHEN OTHERS THEN
1613     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1614     IF (g_level_unexpected >= g_current_runtime_level ) THEN
1615       FND_LOG.STRING(g_level_unexpected,
1616                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.override_detail_tax_lines',
1617                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
1618       FND_LOG.STRING(g_level_unexpected,
1619                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.override_detail_tax_lines.END',
1620                      'ZX_TDS_CALC_SERVICES_PUB_PKG.override_detail_tax_lines(-)');
1621     END IF;
1622 
1623 
1624 END override_detail_tax_lines;
1625 
1626 /* ======================================================================*
1627  |  PROCEDURE override_summary_lines                                     |
1628  |                                                                       |
1629  * ======================================================================*/
1630 PROCEDURE  override_summary_tax_lines (
1631   p_trx_line_index	  IN	  	  BINARY_INTEGER,
1632   p_event_class_rec	  IN  OUT NOCOPY  zx_api_pub.event_class_rec_type,
1633   x_return_status  	  OUT NOCOPY      VARCHAR2) IS
1634 
1635 BEGIN
1636   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1637 
1638   IF (g_level_procedure >= g_current_runtime_level ) THEN
1639     FND_LOG.STRING(g_level_procedure,
1640                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines.BEGIN',
1641                    'ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines(+)');
1642   END IF;
1643   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
1644 
1645   IF ( ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
1646                                           p_trx_line_index) = 'OVERRIDE_TAX') THEN
1647 
1648     calculate_tax( p_trx_line_index,
1649 		   p_event_class_rec,
1650 		   x_return_status );
1651 
1652     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1653       IF (g_level_error >= g_current_runtime_level ) THEN
1654         FND_LOG.STRING(g_level_error,
1655                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines',
1656                        'Incorrect return_status after calling calculate_tax()');
1657         FND_LOG.STRING(g_level_error,
1658                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines',
1659                        'RETURN_STATUS = ' || x_return_status);
1660         FND_LOG.STRING(g_level_error,
1661                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines.END',
1662                        'ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines(-)');
1663       END IF;
1664       RETURN;
1665     END IF;
1666 
1667   ELSE
1668     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;     -- bug 4893261
1669     IF (g_level_statement >= g_current_runtime_level ) THEN
1670       FND_LOG.STRING(g_level_statement,
1671                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines',
1672                      'Tax Event Type Code: '||
1673                       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
1674                       p_trx_line_index) ||' is not correct.');
1675     END IF;
1676   END IF;
1677   IF (g_level_procedure >= g_current_runtime_level ) THEN
1678 
1679     FND_LOG.STRING(g_level_procedure,
1680                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines.END',
1681                    'ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines(-)'||x_return_status);
1682   END IF;
1683 
1684 EXCEPTION
1685   WHEN OTHERS THEN
1686     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1687     IF (g_level_unexpected >= g_current_runtime_level ) THEN
1688       FND_LOG.STRING(g_level_unexpected,
1689                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines',
1690                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
1691       FND_LOG.STRING(g_level_unexpected,
1692                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines.END',
1693                      'ZX_TDS_CALC_SERVICES_PUB_PKG.override_summary_tax_lines(-)');
1694     END IF;
1695 
1696 END override_summary_tax_lines;
1697 
1698 /* ====================================================== ===============*
1699  |  PROCEDURE tax_line_determination                                     |
1700  |  This procedure is called for the whole transaction                   |
1701  * ======================================================================*/
1702 PROCEDURE  tax_line_determination (
1703   p_event_class_rec	  IN  OUT NOCOPY  zx_api_pub.event_class_rec_type,
1704   x_return_status         OUT NOCOPY      VARCHAR2) IS
1705 
1706  l_error_buffer 	VARCHAR2(240);
1707 
1708 BEGIN
1709 
1710   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1711 
1712   IF (g_level_procedure >= g_current_runtime_level ) THEN
1713     FND_LOG.STRING(g_level_procedure,
1714            'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination.BEGIN',
1715            'ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(+)');
1716   END IF;
1717 
1718   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
1719 
1720   IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_ctrl_total_line_tx_amt_flg = 'Y' THEN
1721 
1722     -- Prorate tax across tax lines created for the transactrion line
1723     -- where the control_total_tax_line_amt is not null
1724     --
1725     -- Bug fix 5417887
1726     process_taxes_for_xml_inv_line (
1727         -- p_event_class_rec,
1728 	x_return_status);
1729 
1730     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1731       IF (g_level_error >= g_current_runtime_level ) THEN
1732         FND_LOG.STRING(g_level_error,
1733                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1734                       'Incorrect return_status after calling '||
1735                       'ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_line');
1736         FND_LOG.STRING(g_level_error,
1737                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1738                       'RETURN_STATUS = ' || x_return_status);
1739         FND_LOG.STRING(g_level_error,
1740                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination.END',
1741                       'ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(-)');
1742       END IF;
1743       RETURN;
1744     END IF;
1745 
1746   ELSIF ZX_TDS_CALC_SERVICES_PUB_PKG.g_ctrl_total_hdr_tx_amt_flg = 'Y' THEN
1747     -- If ctrl_total_hdr_tx_amt is not null, process taxes for header level
1748     -- xml invoice
1749     --
1750     -- process xml invoice with header level contrl amount
1751     --
1752     -- Bug fix 5417887
1753     process_taxes_for_xml_inv_hdr (
1754 				-- p_event_class_rec,
1755 				x_return_status);
1756 
1757     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1758       IF (g_level_error >= g_current_runtime_level ) THEN
1759         FND_LOG.STRING(g_level_error,
1760                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1761                'Incorrect return_status after calling '||
1762                'ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_hdr');
1763         FND_LOG.STRING(g_level_error,
1764                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1765                'RETURN_STATUS = ' || x_return_status);
1766         FND_LOG.STRING(g_level_error,
1767                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination.END',
1768                'ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(-)');
1769       END IF;
1770       RETURN;
1771     END IF;
1772 
1773   END IF;
1774 
1775   -- call Internal_Flag service ZX_TDS_TAX_LINES_DETM_PKG.determine_tax_lines
1776   --
1777   ZX_TDS_TAX_LINES_DETM_PKG.determine_tax_lines(
1778 					p_event_class_rec,
1779            				x_return_status,
1780            			 	l_error_buffer);
1781 
1782   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1783     IF (g_level_error >= g_current_runtime_level ) THEN
1784       FND_LOG.STRING(g_level_error,
1785              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1786              'Incorrect return_status after calling '||
1787              'ZX_TDS_TAX_LINES_DETM_PKG.determine_tax_lines()');
1788       FND_LOG.STRING(g_level_error,
1789              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1790              'RETURN_STATUS = ' || x_return_status);
1791       FND_LOG.STRING(g_level_error,
1792              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination.END',
1793              'ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(-)');
1794     END IF;
1795     RETURN;
1796   END IF;
1797 
1798   -- adjust tax amount for xml invoices if the rounded total tax amount is
1799   -- different from the control amount
1800   --
1801   -- xml invoice with header level control amount
1802   --
1803   IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_ctrl_total_hdr_tx_amt_flg = 'Y' THEN
1804 
1805     adjust_tax_for_xml_inv_hdr (
1806 			-- p_event_class_rec,
1807 			x_return_status);
1808 
1809     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1810       IF (g_level_error >= g_current_runtime_level ) THEN
1811         FND_LOG.STRING(g_level_error,
1812                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1813                'Incorrect return_status after calling '||
1814                'ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_hdr');
1815         FND_LOG.STRING(g_level_error,
1816                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1817                'RETURN_STATUS = ' || x_return_status);
1818         FND_LOG.STRING(g_level_error,
1819                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination.END',
1820                'ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(-)');
1821       END IF;
1822       RETURN;
1823     END IF;
1824 
1825   ELSIF ZX_TDS_CALC_SERVICES_PUB_PKG.g_ctrl_total_line_tx_amt_flg = 'Y'  THEN
1826 
1827     -- xml invoice with header level control amount
1828     --
1829     -- if p_event_class_rec.ctrl_total_line_tx_amt_flg is 'Y'
1830     -- call adjust_tax_for_xml_inv_line for line level control total amount
1831     --
1832     adjust_tax_for_xml_inv_line (
1833 			 -- p_event_class_rec,
1834 	                 x_return_status);
1835 
1836     IF x_return_status  <> FND_API.G_RET_STS_SUCCESS THEN
1837       IF (g_level_error >= g_current_runtime_level ) THEN
1838         FND_LOG.STRING(g_level_error,
1839                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1840                'Incorrect return_status after calling '||
1841                'ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_line');
1842         FND_LOG.STRING(g_level_error,
1843                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1844                'RETURN_STATUS = ' || x_return_status);
1845         FND_LOG.STRING(g_level_error,
1846                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination.END',
1847                'ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(-)');
1848       END IF;
1849       RETURN;
1850     END IF;
1851 
1852   END IF;
1853 
1854   IF p_event_class_rec.tax_event_type_code = 'OVERRIDE_TAX' AND
1855      p_event_class_rec.override_level = 'SUMMARY_OVERRIDE' THEN
1856 
1857     ZX_TDS_CALC_SERVICES_PUB_PKG.match_tax_amt_to_summary_line (
1858               p_event_class_rec	 => p_event_class_rec,
1859               x_return_status    => x_return_status );
1860 
1861     IF x_return_status  <> FND_API.G_RET_STS_SUCCESS THEN
1862       IF (g_level_error >= g_current_runtime_level ) THEN
1863         FND_LOG.STRING(g_level_error,
1864                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1865                'Incorrect return_status after calling '||
1866                'ZX_TDS_CALC_SERVICES_PUB_PKG.match_tax_amt_to_summary_line');
1867         FND_LOG.STRING(g_level_error,
1868                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1869                'RETURN_STATUS = ' || x_return_status);
1870         FND_LOG.STRING(g_level_error,
1871                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination.END',
1872                'ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(-)');
1873       END IF;
1874       RETURN;
1875     END IF;
1876 
1877   END IF;
1878 
1879   -- Start Bugfix: 5617541
1880   -- Process tolerance check if control total passed
1881   -- bug 5684123
1882   IF (p_event_class_rec.tax_tolerance IS NOT NULL OR
1883       p_event_class_rec.tax_tol_amt_range IS NOT NULL) AND
1884      ((ZX_TDS_CALC_SERVICES_PUB_PKG.g_ctrl_total_hdr_tx_amt_flg = 'Y' OR
1885        ZX_TDS_CALC_SERVICES_PUB_PKG.g_ctrl_total_line_tx_amt_flg = 'Y'
1886       ) OR
1887       (p_event_class_rec.tax_event_type_code = 'UPDATE' AND
1888        ZX_TDS_CALC_SERVICES_PUB_PKG.g_overridden_tax_ln_exist_flg = 'Y'
1889       )
1890      )
1891   THEN
1892 
1893     ZX_TDS_TAX_LINES_POPU_PKG.process_tax_tolerance(
1894             p_event_class_rec,
1895             x_return_status,
1896             l_error_buffer);
1897 
1898     IF x_return_status  <> FND_API.G_RET_STS_SUCCESS THEN
1899       IF (g_level_error >= g_current_runtime_level ) THEN
1900         FND_LOG.STRING(g_level_error,
1901                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1902                'Incorrect return_status after calling '||
1903                'ZX_TDS_TAX_LINES_POPU_PKG.process_tax_tolerance');
1904         FND_LOG.STRING(g_level_error,
1905                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1906                'RETURN_STATUS = ' || x_return_status);
1907         FND_LOG.STRING(g_level_error,
1908                'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination.END
1909 ',
1910                'ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(-)');
1911       END IF;
1912       RETURN;
1913     END IF;
1914 
1915 
1916   END IF;
1917 
1918 -- End Bugfix: 5617541
1919 
1920   IF (g_level_procedure >= g_current_runtime_level ) THEN
1921 
1922     FND_LOG.STRING(g_level_procedure,
1923                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination.END',
1924                    'ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(-)'||x_return_status);
1925   END IF;
1926 
1927 EXCEPTION
1928   WHEN OTHERS THEN
1929     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1930     IF (g_level_unexpected >= g_current_runtime_level ) THEN
1931       FND_LOG.STRING(g_level_unexpected,
1932                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination',
1933                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
1934       FND_LOG.STRING(g_level_unexpected,
1935                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination.END',
1936                      'ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(-)');
1937     END IF;
1938 
1939 END tax_line_determination;
1940 
1941 /*=========================================================================*
1942  | Public procedure prorate_imported_sum_tax_lines is used to prorate      |
1943  | imported summary tax lines to create detail tax lines.                  |
1944  *=========================================================================*/
1945 PROCEDURE prorate_imported_sum_tax_lines (
1946  p_event_class_rec        IN 	         zx_api_pub.event_class_rec_type,
1947  x_return_status             OUT NOCOPY  VARCHAR2) IS
1948 
1949 BEGIN
1950 
1951   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1952 
1953   IF (g_level_procedure >= g_current_runtime_level ) THEN
1954     FND_LOG.STRING(g_level_procedure,
1955            'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines.BEGIN',
1956            'ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines(+)');
1957   END IF;
1958 
1959   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
1960 
1961   -- get detail tax lines from imported summary lines
1962   --
1963   ZX_TDS_IMPORT_DOCUMENT_PKG.prorate_imported_sum_tax_lines(
1964      p_event_class_rec => p_event_class_rec,
1965      x_return_status   => x_return_status);
1966 
1967   IF x_return_status  <> FND_API.G_RET_STS_SUCCESS THEN
1968     IF (g_level_statement >= g_current_runtime_level ) THEN
1969       FND_LOG.STRING(g_level_statement,
1970              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines',
1971              'Incorrect return_status after calling ' ||
1972              'ZX_TDS_IMPORT_DOCUMENT_PKG.prorate_imported_sum_tax_lines() ' || x_return_status);
1973       FND_LOG.STRING(g_level_statement,
1974              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines.END',
1975              'ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines(-)');
1976     END IF;
1977     RETURN;
1978   END IF;
1979 
1980   -- dump detail tax lines created from summary tax lines into
1981   -- zx_detail_tax_lines_gt
1982   --
1983   dump_detail_tax_lines_into_gt (x_return_status);
1984 
1985   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1986     IF (g_level_error >= g_current_runtime_level ) THEN
1987       FND_LOG.STRING(g_level_error,
1988              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines',
1989              'Incorrect return_status after calling ' ||
1990              'dump_detail_tax_lines_into_gt()');
1991       FND_LOG.STRING(g_level_error,
1992              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines',
1993              'RETURN_STATUS = ' || x_return_status);
1994       FND_LOG.STRING(g_level_error,
1995              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines.END',
1996              'ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines(-)');
1997     END IF;
1998     RETURN;
1999   END IF;
2000 
2001   IF (g_level_procedure >= g_current_runtime_level ) THEN
2002 
2003     FND_LOG.STRING(g_level_procedure,
2004            'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines.END',
2005            'ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines(-)'||x_return_status);
2006   END IF;
2007 
2008 EXCEPTION
2009   WHEN OTHERS THEN
2010     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2011     IF (g_level_unexpected >= g_current_runtime_level ) THEN
2012       FND_LOG.STRING(g_level_unexpected,
2013              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines',
2014               sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2015       FND_LOG.STRING(g_level_unexpected,
2016              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines.END',
2017              'ZX_TDS_CALC_SERVICES_PUB_PKG.prorate_imported_sum_tax_lines(-)');
2018     END IF;
2019 END prorate_imported_sum_tax_lines;
2020 
2021 /* ======================================================================*
2022  |  PROCEDURE calculate_tax_for_import                                                     |
2023  * ======================================================================*/
2024 PROCEDURE  calculate_tax_for_import (
2025  p_trx_line_index	  IN	       BINARY_INTEGER,
2026  p_event_class_rec	  IN           zx_api_pub.event_class_rec_type,
2027  x_return_status          OUT NOCOPY   VARCHAR2) IS
2028 
2029  l_tax_date               DATE;
2030  l_tax_determine_date     DATE;
2031  l_tax_point_date         DATE;
2032 
2033 BEGIN
2034   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2035 
2036   IF (g_level_procedure >= g_current_runtime_level ) THEN
2037     FND_LOG.STRING(g_level_procedure,
2038                   'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import.BEGIN',
2039                   'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import(+)');
2040   END IF;
2041 
2042   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
2043 
2044   -- Bug 3971016: Skip processing tax lines for line_level_action
2045   --              'RECORD_WITH_NO_TAX'
2046   --
2047   IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
2048                                       p_trx_line_index) = 'RECORD_WITH_NO_TAX'
2049   THEN
2050     IF (g_level_statement >= g_current_runtime_level ) THEN
2051       FND_LOG.STRING(g_level_statement,
2052          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import.END',
2053          'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import(-)'||' Skip processing for record_with_no_tax');
2054     END IF;
2055     RETURN;
2056   END IF;
2057 
2058   IF(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
2059                                               p_trx_line_index) = 'CREATE') THEN
2060     -- get tax dates
2061     --
2062     ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_date(	p_trx_line_index,
2063 						l_tax_date,
2064  						l_tax_determine_date,
2065  						l_tax_point_date,
2066 						x_return_status	);
2067 
2068     IF x_return_status  <> FND_API.G_RET_STS_SUCCESS  THEN
2069       IF (g_level_error >= g_current_runtime_level ) THEN
2070         FND_LOG.STRING(g_level_error,
2071                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import',
2072                       'Incorrect return_status after calling ' ||
2073                       'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_date()');
2074         FND_LOG.STRING(g_level_error,
2075                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import',
2076                       'RETURN_STATUS = ' || x_return_status);
2077         FND_LOG.STRING(g_level_error,
2078                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import.END',
2079                       'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import(-)');
2080       END IF;
2081       RETURN;
2082     END IF;
2083 
2084     IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(
2085                                                      p_trx_line_index) IS NOT NULL
2086     THEN
2087       g_reference_doc_exist_flg := 'Y';
2088     END IF;
2089 
2090     -- perform additional applicability process for import
2091     --
2092     ZX_TDS_IMPORT_DOCUMENT_PKG.calculate_tax_for_import(
2093 						p_trx_line_index,
2094 		 				p_event_class_rec,
2095 	 					l_tax_date,
2096  		 				l_tax_determine_date,
2097  						l_tax_point_date,
2098 						x_return_status );
2099 
2100     IF x_return_status  <> FND_API.G_RET_STS_SUCCESS THEN
2101       IF (g_level_error >= g_current_runtime_level ) THEN
2102         FND_LOG.STRING(g_level_error,
2103                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import',
2104                        'Incorrect return_status after calling ' ||
2105                        'ZX_TDS_IMPORT_DOCUMENT_PKG.calculate_tax_for_import()');
2106         FND_LOG.STRING(g_level_error,
2107                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import',
2108                        'RETURN_STATUS = ' || x_return_status);
2109         FND_LOG.STRING(g_level_error,
2110                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import.END',
2111                        'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import(-)');
2112       END IF;
2113       RETURN;
2114     END IF;
2115 
2116   ELSE
2117     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;     -- bug 4893261
2118     IF (g_level_error >= g_current_runtime_level ) THEN
2119         FND_LOG.STRING(g_level_error,
2120                     'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import.END',
2121                     'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import(-)'||' tax event type'||
2122                     ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
2123                                               p_trx_line_index));
2124     END IF;
2125     RETURN;
2126   END IF;       -- tax_event_type_code
2127 
2128   IF (g_level_procedure >= g_current_runtime_level ) THEN
2129 
2130     FND_LOG.STRING(g_level_procedure,
2131                   'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import.END',
2132                   'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import(-)'||x_return_status);
2133   END IF;
2134 
2135 EXCEPTION
2136   WHEN OTHERS THEN
2137     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2138     IF (g_level_unexpected >= g_current_runtime_level ) THEN
2139       FND_LOG.STRING(g_level_unexpected,
2140                     'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import',
2141                      sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2142       FND_LOG.STRING(g_level_unexpected,
2143                     'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import.END',
2144                     'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax_for_import(-)');
2145     END IF;
2146 
2147 END calculate_tax_for_import;
2148 
2149 PROCEDURE update_exchange_rate (
2150   p_event_class_rec      	IN          ZX_API_PUB.EVENT_CLASS_REC_TYPE,
2151   p_ledger_id			IN          NUMBER,
2152   p_currency_conversion_rate    IN          NUMBER,
2153   p_currency_conversion_type    IN          VARCHAR2,
2154   p_currency_conversion_date    IN          DATE,
2155   x_return_status        	OUT NOCOPY  VARCHAR2 ) IS
2156 
2157  l_error_buffer			VARCHAR2(240);
2158  l_currency_conversion_rate     NUMBER;
2159 
2160 BEGIN
2161   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2162 
2163   IF (g_level_procedure >= g_current_runtime_level ) THEN
2164     FND_LOG.STRING(g_level_procedure,
2165                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate.BEGIN',
2166                    'ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate(+)');
2167   END IF;
2168   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
2169 
2170   -- assign p_currency_conversion_rate to a local variable for a IN OUT
2171   -- parameter in the calling procedure. This may be changed later.
2172   --
2173   l_currency_conversion_rate := p_currency_conversion_rate;
2174 
2175   -- perform conversion and rounding for tax lines in ZX_LINES
2176   --
2177   ZX_TDS_TAX_ROUNDING_PKG.convert_and_round_curr(
2178                 p_conversion_rate   => l_currency_conversion_rate,
2179                 p_conversion_type   => p_currency_conversion_type,
2180                 p_conversion_date   => p_currency_conversion_date,
2181                 p_event_class_rec   => p_event_class_rec,
2182                 p_return_status     => x_return_status,
2183                 p_error_buffer      => l_error_buffer);
2184 
2185   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2186     IF (g_level_error >= g_current_runtime_level ) THEN
2187       FND_LOG.STRING(g_level_error,
2188                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate',
2189                        'Incorrect return_status after calling ' ||
2190                        'ZX_TDS_TAX_ROUNDING_PKG.convert_and_round_curr()');
2191       FND_LOG.STRING(g_level_error,
2192                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate',
2193                        'RETURN_STATUS = ' || x_return_status);
2194       FND_LOG.STRING(g_level_error,
2195                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate.END',
2196                        'ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate(-)');
2197     END IF;
2198     RETURN;
2199   END IF;
2200 
2201   -- call ZX_TRD_SERVICES_PUB_PKG.update_exchange_rate only if the value
2202   -- of p_event_class_rec.tax_recovery_flag is 'Y',
2203   --
2204   IF p_event_class_rec.tax_recovery_flag = 'Y' THEN
2205 
2206     -- perform conversion and rounding for tax distributions in
2207     -- ZX_REC_NREC_TAX_DIST
2208     --
2209     ZX_TRD_SERVICES_PUB_PKG.update_exchange_rate (
2210   		p_event_class_rec           => p_event_class_rec,
2211   		p_ledger_id                 => p_ledger_id,
2212   		p_currency_conversion_rate  => p_currency_conversion_rate,
2213   		p_currency_conversion_type  => p_currency_conversion_type,
2214   		p_currency_conversion_date  => p_currency_conversion_date,
2215   		x_return_status             => x_return_status);
2216 
2217     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2218       IF (g_level_error >= g_current_runtime_level ) THEN
2219         FND_LOG.STRING(g_level_error,
2220                         'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate',
2221                          'Incorrect return_status after calling ' ||
2222                          'ZX_TRD_INTERNAL_SERVICES_PVT.update_exchange_rate()');
2223         FND_LOG.STRING(g_level_error,
2224                          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate',
2225                          'RETURN_STATUS = ' || x_return_status);
2226         FND_LOG.STRING(g_level_error,
2227                          'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate.END',
2228                          'ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate(-)');
2229       END IF;
2230       RETURN;
2231     END IF;
2232   END IF;    -- p_event_class_rec.tax_recovery_flag = 'Y'
2233 
2234   -- updating related columns in functional currency in ZX_LINES_SUMMARY and
2235   -- ZX_LINES
2236   --
2237   ZX_TRL_PUB_PKG.update_exchange_rate (
2238 		p_event_class_rec          =>  p_event_class_rec,
2239 		x_return_status            =>  x_return_status);
2240 
2241   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2242     IF (g_level_error >= g_current_runtime_level ) THEN
2243       FND_LOG.STRING(g_level_error,
2244                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate',
2245                        'Incorrect return_status after calling ' ||
2246                        'ZX_TRL_PUB_PKG.update_exchange_rate()');
2247       FND_LOG.STRING(g_level_error,
2248                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate',
2249                        'RETURN_STATUS = ' || x_return_status);
2250       FND_LOG.STRING(g_level_error,
2251                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate.END',
2252                        'ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate(-)');
2253     END IF;
2254     RETURN;
2255   END IF;
2256 
2257   IF (g_level_procedure >= g_current_runtime_level ) THEN
2258 
2259     FND_LOG.STRING(g_level_procedure,
2260                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate.END',
2261                    'ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate(-)'||x_return_status);
2262   END IF;
2263 
2264 EXCEPTION
2265   WHEN OTHERS THEN
2266     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2267     IF (g_level_unexpected >= g_current_runtime_level ) THEN
2268       FND_LOG.STRING(g_level_unexpected,
2269                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate',
2270                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2271       FND_LOG.STRING(g_level_unexpected,
2272                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate.END',
2273                      'ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate(-)');
2274     END IF;
2275 
2276 END update_exchange_rate;
2277 
2278 /* ======================================================================*
2279  |  PROCEDURE  validate_document_for_tax                                 |
2280  |  							                 |
2281  * ======================================================================*/
2282 PROCEDURE validate_document_for_tax (
2283   x_return_status	  OUT NOCOPY 		VARCHAR2) IS
2284 
2285   begin_index	  BINARY_INTEGER;
2286 
2287 BEGIN
2288   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2289 
2290   IF (g_level_procedure >= g_current_runtime_level ) THEN
2291     FND_LOG.STRING(g_level_procedure,
2292                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.validate_document_for_tax.BEGIN',
2293                    'ZX_TDS_CALC_SERVICES_PUB_PKG.validate_document_for_tax(+)');
2294   END IF;
2295 
2296   begin_index := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_id.FIRST;
2297 
2298   IF(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
2299                                               begin_index) = 'VALIDATE')  THEN
2300     x_return_status := FND_API.G_RET_STS_SUCCESS;
2301   ELSE
2302     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;     -- bug 4893261
2303     IF (g_level_statement >= g_current_runtime_level ) THEN
2304       FND_LOG.STRING(g_level_statement,
2305                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.validate_document_for_tax',
2306                      'Tax Event Type Code: '||
2307                       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
2308                       begin_index) ||' is not correct.');
2309     END IF;
2310   END IF;
2311 
2312   IF (g_level_procedure >= g_current_runtime_level ) THEN
2313     FND_LOG.STRING(g_level_procedure,
2314                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.validate_document_for_tax',
2315                    'RETURN_STATUS = ' || x_return_status);
2316     FND_LOG.STRING(g_level_procedure,
2317                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.validate_document_for_tax.END',
2318                    'ZX_TDS_CALC_SERVICES_PUB_PKG.validate_document_for_tax(-)');
2319   END IF;
2320 
2321 EXCEPTION
2322   WHEN OTHERS THEN
2323     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2324     IF (g_level_unexpected >= g_current_runtime_level ) THEN
2325       FND_LOG.STRING(g_level_unexpected,
2326                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.validate_document_for_tax',
2327                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2328       FND_LOG.STRING(g_level_unexpected,
2329                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.validate_document_for_tax.END',
2330                      'ZX_TDS_CALC_SERVICES_PUB_PKG.validate_document_for_tax(-)');
2331     END IF;
2332 
2333 END validate_document_for_tax;
2334 
2335 /* ======================================================================*
2336  |  PROCEDURE  reverse_document                                          |
2337  |  							                 |
2338  * ======================================================================*/
2339 PROCEDURE reverse_document (
2340   p_event_class_rec  IN         ZX_API_PUB.EVENT_CLASS_REC_TYPE,
2341   x_return_status    OUT NOCOPY VARCHAR2 ) IS
2342 BEGIN
2343   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2344 
2345   IF (g_level_procedure >= g_current_runtime_level ) THEN
2346     FND_LOG.STRING(g_level_procedure,
2347                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.reverse_document.BEGIN',
2348                    'ZX_TDS_CALC_SERVICES_PUB_PKG.reverse_document(+)');
2349   END IF;
2350 
2351   x_return_status := FND_API.G_RET_STS_SUCCESS;
2352 
2353   --
2354   -- init msg record to be passed back to TSRM
2355   --
2356   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.application_id :=
2357               p_event_class_rec.application_id;
2358   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.entity_code :=
2359               p_event_class_rec.entity_code;
2360   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.event_class_code :=
2361               p_event_class_rec.event_class_code;
2362   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_id :=
2363               p_event_class_rec.trx_id;
2364   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id := NULL;
2365   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type := NULL;
2366   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.summary_tax_line_number :=
2367               NULL;
2368   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.tax_line_id := NULL;
2369   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_dist_id := NULL;
2370 
2371   -- call procedure reverse_document in ZX_TDS_REVERSE_DOCUMENT_PKG
2372   --
2373   ZX_TDS_REVERSE_DOCUMENT_PKG.reverse_document ( p_event_class_rec,
2374                                                  x_return_status );
2375 
2376   IF x_return_status  <> FND_API.G_RET_STS_SUCCESS THEN
2377     IF (g_level_statement >= g_current_runtime_level ) THEN
2378       FND_LOG.STRING(g_level_statement,
2379                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.reverse_document',
2380                      'Incorrect return_status after calling ' ||
2381                      'ZX_TDS_REVERSE_DOCUMENT_PKG.reverse_document() ' || x_return_status);
2382       FND_LOG.STRING(g_level_statement,
2383                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.reverse_document.END',
2384                      'ZX_TDS_CALC_SERVICES_PUB_PKG.reverse_document(-)');
2385     END IF;
2386     RETURN;
2387   END IF;
2388 
2389   IF (g_level_procedure >= g_current_runtime_level ) THEN
2390 
2391     FND_LOG.STRING(g_level_procedure,
2392                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.reverse_document.END',
2393                    'ZX_TDS_CALC_SERVICES_PUB_PKG.reverse_document(-)'||x_return_status);
2394   END IF;
2395 
2396 EXCEPTION
2397   WHEN OTHERS THEN
2398     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2399 
2400     IF (g_level_unexpected >= g_current_runtime_level ) THEN
2401       FND_LOG.STRING(g_level_unexpected,
2402                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.reverse_document',
2403                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2404       FND_LOG.STRING(g_level_unexpected,
2405                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.reverse_document.END',
2406                      'ZX_TDS_CALC_SERVICES_PUB_PKG.reverse_document(-)');
2407     END IF;
2408 
2409 END reverse_document;
2410 
2411 /* ======================================================================*
2412   |   Procedure   set_detail_tax_line_def_val is called to check the     |
2413   |   default values in the global structure                             |
2414   |                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl  |
2415   |   Bug fix 3423300                                                    |
2416   * =====================================================================*/
2417 
2418 PROCEDURE set_detail_tax_line_def_val (
2419   p_detail_tax_lines_rec   IN OUT NOCOPY  ZX_DETAIL_TAX_LINES_GT%ROWTYPE,
2420   x_return_status	   OUT NOCOPY	  VARCHAR2
2421 ) IS
2422 BEGIN
2423   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2424 
2425   IF (g_level_procedure >= g_current_runtime_level ) THEN
2426     FND_LOG.STRING(g_level_procedure,
2427                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.set_detail_tax_line_def_val.BEGIN',
2428                    'ZX_TDS_CALC_SERVICES_PUB_PKG.set_detail_tax_line_def_val(+)');
2429   END IF;
2430   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
2431 
2432   p_detail_tax_lines_rec.tax_amt_included_flag           := NVL( p_detail_tax_lines_rec.tax_amt_included_flag, 'N' );
2433   p_detail_tax_lines_rec.compounding_tax_flag            := NVL( p_detail_tax_lines_rec.compounding_tax_flag, 'N' );
2434   p_detail_tax_lines_rec.self_assessed_flag              := NVL( p_detail_tax_lines_rec.self_assessed_flag, 'N' );
2435   p_detail_tax_lines_rec.reporting_only_flag             := NVL( p_detail_tax_lines_rec.reporting_only_flag, 'N' );
2436   p_detail_tax_lines_rec.associated_child_frozen_flag    := NVL( p_detail_tax_lines_rec.associated_child_frozen_flag, 'N' );
2437   p_detail_tax_lines_rec.copied_from_other_doc_flag        := NVL( p_detail_tax_lines_rec.copied_from_other_doc_flag, 'N' );
2438   p_detail_tax_lines_rec.historical_flag                 := NVL( p_detail_tax_lines_rec.historical_flag, 'N' );
2439   p_detail_tax_lines_rec.offset_flag                     := NVL( p_detail_tax_lines_rec.offset_flag, 'N' );
2440   p_detail_tax_lines_rec.process_for_recovery_flag       := NVL( p_detail_tax_lines_rec.process_for_recovery_flag, 'N' );
2441   p_detail_tax_lines_rec.cancel_flag                     := NVL( p_detail_tax_lines_rec.cancel_flag, 'N' );
2442   p_detail_tax_lines_rec.purge_flag                      := NVL( p_detail_tax_lines_rec.purge_flag, 'N' );
2443   p_detail_tax_lines_rec.delete_flag                     := NVL( p_detail_tax_lines_rec.delete_flag, 'N' );
2444   p_detail_tax_lines_rec.overridden_flag                 := NVL( p_detail_tax_lines_rec.overridden_flag, 'N' );
2445   p_detail_tax_lines_rec.manually_entered_flag           := NVL( p_detail_tax_lines_rec.manually_entered_flag, 'N' );
2446   p_detail_tax_lines_rec.item_dist_changed_flag          := NVL( p_detail_tax_lines_rec.item_dist_changed_flag, 'N' );
2447   p_detail_tax_lines_rec.freeze_until_overridden_flag    := NVL( p_detail_tax_lines_rec.freeze_until_overridden_flag, 'N' );
2448   p_detail_tax_lines_rec.tax_only_line_flag              := NVL( p_detail_tax_lines_rec.tax_only_line_flag, 'N' );
2449   p_detail_tax_lines_rec.enforce_from_natural_acct_flag  := NVL( p_detail_tax_lines_rec.enforce_from_natural_acct_flag, 'N' );
2450 --  p_detail_tax_lines_rec.line_amt_includes_tax_flag      := NVL( p_detail_tax_lines_rec.line_amt_includes_tax_flag, 'N' );
2451   p_detail_tax_lines_rec.recalc_required_flag            := 'N';
2452   p_detail_tax_lines_rec.compounding_dep_tax_flag        := NVL( p_detail_tax_lines_rec.compounding_dep_tax_flag, 'N' );
2453   p_detail_tax_lines_rec.mrc_tax_line_flag               := NVL(p_detail_tax_lines_rec.mrc_tax_line_flag, 'N');
2454   p_detail_tax_lines_rec.tax_apportionment_flag          := NVL(p_detail_tax_lines_rec.tax_apportionment_flag, 'N');
2455 
2456   p_detail_tax_lines_rec.tax_apportionment_line_number   := NVL(p_detail_tax_lines_rec.tax_apportionment_line_number,1);
2457 
2458   p_detail_tax_lines_rec.record_type_code                := NVL(p_detail_tax_lines_rec.record_type_code, 'ETAX_CREATED');
2459 
2460   -- bug 6656723
2461   IF p_detail_tax_lines_rec.tax_event_type_code = 'OVERRIDE_TAX' THEN
2462     p_detail_tax_lines_rec.tax_line_number               := NVL(p_detail_tax_lines_rec.tax_line_number, NUMBER_DUMMY);
2463   ELSE
2464     p_detail_tax_lines_rec.tax_line_number               := NUMBER_DUMMY;
2465   END IF;
2466 
2467   p_detail_tax_lines_rec.object_version_number           := NVL(p_detail_tax_lines_rec.object_version_number, 1);
2468 
2469   p_detail_tax_lines_rec.multiple_jurisdictions_flag     := NVL(p_detail_tax_lines_rec.multiple_jurisdictions_flag, 'N');
2470 
2471   -- Commented out: Bug 4438636
2472   --
2473   -- override the rounding rule from registration party type or tax
2474   -- with the rounding rule from TSRM rounding party hierarchy
2475   --
2476   --IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_rule IS NOT NULL THEN
2477   --  p_detail_tax_lines_rec.rounding_rule_code := ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_rule;
2478   --END IF;
2479 
2480   IF (g_level_procedure >= g_current_runtime_level ) THEN
2481     FND_LOG.STRING(g_level_procedure,
2482                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.set_detail_tax_line_def_val.END',
2483                    'ZX_TDS_CALC_SERVICES_PUB_PKG.set_detail_tax_line_def_val(-)');
2484   END IF;
2485 
2486 END set_detail_tax_line_def_val;
2487 
2488 /* ======================================================================*
2489   |  Procedure dump_detail_tax_lines_into_gt is called to insert detail    |
2490   |    tax lines into the global temporary table zx_detail_tax_lines_gt  |
2491   |     when the number of tax lines in the g_detail_tax_line_tbl        |
2492   |     reaches 1000                                                     |
2493   * =====================================================================*/
2494 
2495 PROCEDURE dump_detail_tax_lines_into_gt (
2496  p_detail_tax_lines_tbl	     IN OUT NOCOPY     	detail_tax_lines_tbl_type,
2497  x_return_status	 	OUT NOCOPY	VARCHAR2) IS
2498 
2499 BEGIN
2500   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2501 
2502   IF (g_level_procedure >= g_current_runtime_level ) THEN
2503     FND_LOG.STRING(g_level_procedure,
2504                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt.BEGIN',
2505                    'ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(+)');
2506   END IF;
2507   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
2508 
2509   IF (p_detail_tax_lines_tbl.COUNT = 0) THEN
2510     IF (g_level_statement >= g_current_runtime_level ) THEN
2511         FND_LOG.STRING(g_level_statement,
2512                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt',
2513                        'p_detail_tax_lines_tbl is empty. ');
2514     END IF;
2515 
2516   ELSE
2517 
2518     --
2519     -- populate default values in tax line before insert
2520     --
2521     FOR i IN p_detail_tax_lines_tbl.FIRST ..
2522              p_detail_tax_lines_tbl.LAST   LOOP
2523       set_detail_tax_line_def_val (
2524             p_detail_tax_lines_tbl(i),
2525             x_return_status );
2526       IF x_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
2527         RETURN;
2528       END IF;
2529     END LOOP;
2530 
2531     FORALL tax_line_index IN p_detail_tax_lines_tbl.FIRST ..
2532                              p_detail_tax_lines_tbl.LAST
2533 
2534       INSERT INTO zx_detail_tax_lines_gt
2535            VALUES p_detail_tax_lines_tbl(tax_line_index);
2536 
2537     -- Flush g_detail_tax_lines_tbl
2538     --p_detail_tax_lines_tbl.DELETE;
2539 
2540   END IF;
2541 
2542   IF (g_level_procedure >= g_current_runtime_level ) THEN
2543 
2544     FND_LOG.STRING(g_level_procedure,
2545                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt.END',
2546                    'ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(-)'||x_return_status);
2547   END IF;
2548 
2549 EXCEPTION
2550   WHEN OTHERS THEN
2551     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2552     IF (g_level_unexpected >= g_current_runtime_level ) THEN
2553       FND_LOG.STRING(g_level_unexpected,
2554                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt',
2555                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2556       FND_LOG.STRING(g_level_unexpected,
2557                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt.END',
2558                      'ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(-)');
2559     END IF;
2560 
2561 END dump_detail_tax_lines_into_gt;
2562 
2563 /* ======================================================================*
2564   |  Procedure dump_detail_tax_lines_into_gt is called to insert detail    |
2565   |  tax lines into the global temporary table zx_detail_tax_lines_gt    |
2566   * =====================================================================*/
2567 
2568 PROCEDURE dump_detail_tax_lines_into_gt (
2569  x_return_status	 	OUT NOCOPY	VARCHAR2) IS
2570 
2571 BEGIN
2572   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2573 
2574   IF (g_level_procedure >= g_current_runtime_level ) THEN
2575     FND_LOG.STRING(g_level_procedure,
2576                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt.BEGIN',
2577                    'ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(+)');
2578   END IF;
2579 
2580   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
2581 
2582   /*
2583    * move to dump_detail_tax_lines_into_gt with 2 parameters
2584    *
2585    * FOR l_index IN
2586    *        NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.FIRST, 1) ..
2587    *        NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST, 0)
2588    * LOOP
2589    *  set_detail_tax_line_def_val (
2590    *       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_index),
2591    *       x_return_status );
2592    *  END LOOP;
2593    */
2594 
2595     dump_detail_tax_lines_into_gt(
2596           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl,
2597           x_return_status  );
2598 
2599     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2600       IF (g_level_error >= g_current_runtime_level ) THEN
2601         FND_LOG.STRING(g_level_error,
2602                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt',
2603                        'Incorrect return_status after calling '||
2604                        'ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt');
2605         FND_LOG.STRING(g_level_error,
2606                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt',
2607                        'RETURN_STATUS = ' || x_return_status);
2608         FND_LOG.STRING(g_level_error,
2609                        'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt.END',
2610                        'ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(-)');
2611       END IF;
2612       RETURN;
2613     END IF;
2614 
2615     -- Flush g_detail_tax_lines_tbl
2616     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.DELETE;
2617 
2618   IF (g_level_procedure >= g_current_runtime_level ) THEN
2619 
2620     FND_LOG.STRING(g_level_procedure,
2621                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt.END',
2622                    'ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(-)'||x_return_status);
2623   END IF;
2624 
2625 EXCEPTION
2626   WHEN OTHERS THEN
2627     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2628     IF (g_level_unexpected >= g_current_runtime_level ) THEN
2629       FND_LOG.STRING(g_level_unexpected,
2630                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt',
2631                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2632       FND_LOG.STRING(g_level_unexpected,
2633                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt.END',
2634                      'ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(-)');
2635     END IF;
2636 
2637 END dump_detail_tax_lines_into_gt;
2638 
2639 /* ======================================================================*
2640  |  PROCEDURE  initialize                                                |
2641  * ======================================================================*/
2642 PROCEDURE initialize IS
2643 
2644 BEGIN
2645   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2646 
2647   IF (g_level_procedure >= g_current_runtime_level ) THEN
2648    FND_LOG.STRING(g_level_procedure,
2649                   'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize.BEGIN',
2650                   'ZX_TDS_CALC_SERVICES_PUB_PKG.initialize(+)');
2651   END IF;
2652   g_detail_tax_lines_tbl.DELETE;
2653 
2654 --  g_trx_lines_counter :=0;
2655 
2656 --  g_check_template_tbl;
2657 --  ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl;
2658 --  g_tax_rate_info_tbl;
2659 --  g_max_tax_line_number;
2660 
2661 --  g_check_cond_grp_tbl.DELETE;
2662   g_fsc_tbl.DELETE;
2663   ZX_TDS_UTILITIES_PKG.g_tax_status_info_tbl.DELETE;
2664 --  g_tsrm_num_value_tbl.DELETE;
2665 --  g_tsrm_alphanum_value_tbl.DELETE;
2666 --  g_trx_alphanum_value_tbl.DELETE;
2667 
2668   IF (g_level_procedure >= g_current_runtime_level ) THEN
2669    FND_LOG.STRING(g_level_procedure,
2670                   'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize.END',
2671                   'ZX_TDS_CALC_SERVICES_PUB_PKG.initialize(-)');
2672   END IF;
2673 
2674 EXCEPTION
2675   WHEN OTHERS THEN
2676     IF (g_level_unexpected >= g_current_runtime_level ) THEN
2677       FND_LOG.STRING(g_level_unexpected,
2678                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
2679                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2680       FND_LOG.STRING(g_level_unexpected,
2681                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize.END',
2682                      'ZX_TDS_CALC_SERVICES_PUB_PKG.initialize(-)');
2683     END IF;
2684 
2685     RAISE;
2686 
2687 END initialize;
2688 
2689 /* ======================================================================*
2690  |  PROCEDURE  fetch_detail_tax_lines                                    |
2691  * ======================================================================*/
2692 PROCEDURE fetch_detail_tax_lines (
2693   x_return_status	   OUT NOCOPY 	     	    VARCHAR2) IS
2694 
2695  CURSOR fetch_detail_tax_lines(p_line_index	NUMBER) IS
2696    SELECT /*+ INDEX(ZX_DETAIL_TAX_LINES_GT ZX_DETAIL_TAX_LINES_GT_U1) */ *
2697     FROM  zx_detail_tax_lines_gt
2698    WHERE  trx_id =
2699           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_id(p_line_index)
2700      AND  application_id =
2701           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id(p_line_index)
2702      AND  entity_code =
2703           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.entity_code(p_line_index)
2704      AND  event_class_code =
2705           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.event_class_code(p_line_index);
2706 
2707  l_last_row 		NUMBER;
2708 
2709 BEGIN
2710 
2711   IF (g_level_procedure>= g_current_runtime_level ) THEN
2712     FND_LOG.STRING(g_level_procedure,
2713                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.fetch_detail_tax_lines.BEGIN',
2714                    'ZX_TDS_CALC_SERVICES_PUB_PKG.fetch_detail_tax_lines(+)');
2715   END IF;
2716    x_return_status :=  FND_API.G_RET_STS_SUCCESS;
2717    l_last_row      := 1;
2718 
2719   -- Initialize p_det_tax_line_tbl
2720   g_detail_tax_lines_tbl.delete;
2721 
2722   FOR detail_tax_lines_rec IN fetch_detail_tax_lines(
2723                      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_id.FIRST) LOOP
2724     g_detail_tax_lines_tbl(l_last_row) := detail_tax_lines_rec;
2725     l_last_row := l_last_row + 1;
2726   END LOOP;
2727 
2728   IF (g_level_procedure >= g_current_runtime_level ) THEN
2729 
2730     FND_LOG.STRING(g_level_procedure,
2731                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.fetch_detail_tax_lines.END',
2732                    'ZX_TDS_CALC_SERVICES_PUB_PKG.fetch_detail_tax_lines(-)'||x_return_status);
2733   END IF;
2734 
2735 EXCEPTION
2736   WHEN OTHERS THEN
2737     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2738     IF (g_level_unexpected >= g_current_runtime_level ) THEN
2739       FND_LOG.STRING(g_level_unexpected,
2740                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.fetch_detail_tax_lines',
2741                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2742       FND_LOG.STRING(g_level_unexpected,
2743                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.fetch_detail_tax_lines.END',
2744                      'ZX_TDS_CALC_SERVICES_PUB_PKG.fetch_detail_tax_lines(-)');
2745     END IF;
2746 
2747 END fetch_detail_tax_lines;
2748 
2749 /*=========================================================================*
2750  | This procedure contains the code for processing tax lines for XML       |
2751  | invoices with line level control amount.                                |
2752  | rewrite for bug fix 3420456                                             |
2753  *=========================================================================*/
2754 
2755 PROCEDURE process_taxes_for_xml_inv_line (
2756   -- p_event_class_rec        IN 	        zx_api_pub.event_class_rec_type,
2757   x_return_status           OUT NOCOPY   VARCHAR2) IS
2758 
2759  CURSOR get_total_line_tax_amt_csr IS
2760  SELECT /*+ INDEX(tax_line ZX_DETAIL_TAX_LINES_GT_U1) */
2761         SUM(tax_line.unrounded_tax_amt),
2762         tax_line.application_id,
2763         tax_line.event_class_code,
2764         tax_line.entity_code,
2765         tax_line.trx_id,
2766         tax_line.trx_line_id,
2767         tax_line.trx_level_type,
2768         tax_line.ctrl_total_line_tx_amt
2769    FROM zx_detail_tax_lines_gt tax_line
2770   WHERE
2771   -- commented out for bug fix 5417887
2772   --     tax_line.application_id = p_event_class_rec.application_id
2773   -- AND tax_line.event_class_code = p_event_class_rec.event_class_code
2774   -- AND tax_line.entity_code = p_event_class_rec.entity_code
2775   -- AND tax_line.trx_id = p_event_class_rec.trx_id
2776   -- AND
2777     nvl(tax_line.ctrl_total_line_tx_amt,0) <> 0
2778     AND tax_line.self_assessed_flag <> 'Y'
2779     AND tax_line.offset_flag <> 'Y'
2780     AND tax_line.offset_link_to_tax_line_id IS NULL
2781     AND NVL(cancel_flag,'N') <> 'Y'
2782     GROUP BY tax_line.application_id,
2783              tax_line.event_class_code,
2784              tax_line.entity_code,
2785              tax_line.trx_id,
2786              tax_line.trx_line_id,
2787              tax_line.trx_level_type,
2788              tax_line.ctrl_total_line_tx_amt;
2789 
2790  CURSOR get_mismatch_tax_lines_csr IS
2791  SELECT /*+ INDEX(tax_line ZX_DETAIL_TAX_LINES_GT_U1) */
2792         SUM(tax_line.unrounded_tax_amt)
2793    FROM zx_detail_tax_lines_gt tax_line
2794   WHERE tax_line.ctrl_total_line_tx_amt <> 0
2795     AND tax_line.self_assessed_flag <> 'Y'
2796     AND tax_line.offset_flag <> 'Y'
2797     AND tax_line.offset_link_to_tax_line_id IS NULL
2798     AND NVL(cancel_flag,'N') <> 'Y'
2799     GROUP BY tax_line.application_id,
2800              tax_line.event_class_code,
2801              tax_line.entity_code,
2802              tax_line.trx_id,
2803              tax_line.trx_line_id,
2804              tax_line.trx_level_type,
2805              tax_line.ctrl_total_line_tx_amt
2806     HAVING NVL(SUM(tax_line.unrounded_tax_amt),0) = 0;
2807 
2808 
2809  l_total_line_tx_amt             NUMBER;
2810  l_temp_char                     VARCHAR2(1);
2811 
2812  TYPE num_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
2813  TYPE var_tbl_type IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
2814 
2815  l_trx_line_id_tbl		num_tbl_type;
2816  l_trx_level_type_tbl		var_tbl_type;
2817  l_total_line_tx_amt_tbl	num_tbl_type;
2818  l_ctrl_total_line_tx_amt_tbl   num_tbl_type;
2819  l_application_id_tbl           num_tbl_type;
2820  l_event_class_code_tbl  var_tbl_type;
2821  l_entity_code_tbl       var_tbl_type;
2822  l_trx_id_tbl     num_tbl_type;
2823 
2824 BEGIN
2825 
2826   IF (g_level_procedure >= g_current_runtime_level ) THEN
2827     FND_LOG.STRING(g_level_procedure,
2828                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_line.BEGIN',
2829                    'ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_line(+)');
2830   END IF;
2831 
2832   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
2833   OPEN get_mismatch_tax_lines_csr;
2834   FETCH get_mismatch_tax_lines_csr INTO l_total_line_tx_amt;
2835 
2836   IF get_mismatch_tax_lines_csr%FOUND THEN
2837     CLOSE get_mismatch_tax_lines_csr;
2838 
2839     -- Raise error if ctrl_total_line_tx_amt <> 0.
2840     -- no action is required, if ctrl_total_line_tx_amt is 0,
2841     --
2842     x_return_status := FND_API.G_RET_STS_ERROR;
2843 
2844     IF (g_level_statement >= g_current_runtime_level ) THEN
2845 
2846       FND_LOG.STRING(g_level_statement,
2847                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_line',
2848                      'line level control tax amount is not 0, ' ||
2849                      'but the total calculated tax amount for this trx line is 0, cannot do tax proration.' );
2850       --FND_LOG.STRING(g_level_statement,
2851       --               'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_line',
2852       --               'trx_line_id = ' || l_trx_line_id_tbl(i));
2853       FND_LOG.STRING(g_level_statement,
2854                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_line.END',
2855                      'ZX_TDS_CALC_SERVICES_PUB_PKG.' ||
2856                      'process_taxes_for_xml_inv_line(-)');
2857     END IF;
2858 
2859     FND_MESSAGE.SET_NAME('ZX','ZX_LN_CTRL_TOTAL_TAX_MISMATCH');
2860 
2861     -- FND_MSG_PUB.Add;
2862     --ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
2863     --                                                     l_trx_line_id_tbl(i);
2864     --ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
2865     --                                                  l_trx_level_type_tbl(i);
2866     ZX_API_PUB.add_msg(ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
2867 
2868     RETURN;
2869   ELSE
2870     CLOSE get_mismatch_tax_lines_csr;
2871   END IF;
2872 
2873   -- open cursor  get_total_line_tax_amt_csr
2874   --
2875   OPEN  get_total_line_tax_amt_csr;
2876   LOOP
2877     FETCH get_total_line_tax_amt_csr BULK COLLECT INTO
2878           l_total_line_tx_amt_tbl,
2879           l_application_id_tbl,
2880           l_event_class_code_tbl,
2881           l_entity_code_tbl,
2882           l_trx_id_tbl,
2883           l_trx_line_id_tbl,
2884           l_trx_level_type_tbl,
2885 	  l_ctrl_total_line_tx_amt_tbl
2886     LIMIT G_LINES_PER_FETCH;
2887 
2888   -- for each trx line prorate the tax amount according to the control total_tax amount
2889   FORALL i IN l_trx_line_id_tbl.FIRST .. l_trx_line_id_tbl.LAST
2890 
2891       -- 1. Prorate tax amt to all tax lines of this transaction line,
2892       --    using l_ctrl_total_line_tx_amt
2893       -- 2. populate ctrl_total_line_tx_amt in g_detail_tax_lines_tbl
2894       -- 3. for now set the original tax_amt, taxable_amt to the unrounded tax_amt
2895       --    and taxable_amount since rounded amounts are not available yet. This
2896       --    logic may need to change based on later Reporting requirements.
2897 
2898       UPDATE /*+ INDEX(line ZX_DETAIL_TAX_LINES_GT_U1) */
2899           zx_detail_tax_lines_gt line
2900       SET line.orig_tax_amt = line.unrounded_tax_amt,
2901           line.orig_taxable_amt = line.unrounded_taxable_amt,
2902           line.orig_tax_rate = line.tax_rate,
2903           line.tax_amt = NULL,
2904           line.unrounded_tax_amt = line.unrounded_tax_amt/l_total_line_tx_amt_tbl(i) * l_ctrl_total_line_tx_amt_tbl(i),
2905           line.ctrl_total_line_tx_amt = l_ctrl_total_line_tx_amt_tbl(i),
2906           line.sync_with_prvdr_flag = DECODE(line.tax_provider_id, NULL, 'N', 'Y'),
2907           line.overridden_flag  = 'Y',
2908           line.last_manual_entry = 'TAX_AMOUNT',
2909           line.taxable_amt = NULL,
2910           (line.unrounded_taxable_amt,
2911            line.tax_rate,
2912            line.taxable_basis_formula)
2913           = (select decode ( NVL(rate.ALLOW_ADHOC_TAX_RATE_FLAG, 'N'),
2914                      'N', decode ( line.tax_rate, 0,  line.unrounded_taxable_amt,
2915                           (line.unrounded_tax_amt/l_total_line_tx_amt_tbl(i) * l_ctrl_total_line_tx_amt_tbl(i))/line.tax_rate*100 ),
2916                      'Y', decode ( NVL(rate.ADJ_FOR_ADHOC_AMT_CODE, 'TAXABLE_BASIS'),
2917                           'TAXABLE_BASIS', decode(line.tax_rate, 0, line.unrounded_taxable_amt,
2918                           (line.unrounded_tax_amt/l_total_line_tx_amt_tbl(i) * l_ctrl_total_line_tx_amt_tbl(i))/line.tax_rate*100 ),
2919                           line.unrounded_taxable_amt),
2920                      line.unrounded_taxable_amt ) unrounded_taxable_amt,
2921 
2922                      decode ( NVL(rate.ALLOW_ADHOC_TAX_RATE_FLAG, 'N'),
2923                      'Y', decode ( NVL(rate.ADJ_FOR_ADHOC_AMT_CODE, 'TAXABLE_BASIS'),
2924                           'TAX_RATE', decode(line.unrounded_taxable_amt, 0, line.tax_rate,
2925                                            (line.unrounded_tax_amt/l_total_line_tx_amt_tbl(i) * l_ctrl_total_line_tx_amt_tbl(i))/line.unrounded_taxable_amt*100 ),
2926                           line.tax_rate),
2927                      line.tax_rate ) tax_rate,
2928 
2929                      decode ( NVL(rate.ALLOW_ADHOC_TAX_RATE_FLAG, 'N'),
2930                      'N', decode ( line.tax_rate, 0,  line.taxable_basis_formula, 'PRORATED_TB' ),
2931                      'Y', decode ( NVL(rate.ADJ_FOR_ADHOC_AMT_CODE, 'TAXABLE_BASIS'),
2932                           'TAXABLE_BASIS', decode(line.tax_rate, 0, line.taxable_basis_formula, 'PRORATED_TB'),
2933                           line.taxable_basis_formula),
2934                      line.taxable_basis_formula ) taxable_basis_formula
2935 
2936               from zx_rates_b rate
2937              where line.tax_rate_id = rate.tax_rate_id
2938            )
2939       WHERE  line.application_id = l_application_id_tbl(i)
2940          AND line.event_class_code = l_event_class_code_tbl(i)
2941          AND line.entity_code = l_entity_code_tbl(i)
2942          AND line.trx_id = l_trx_id_tbl(i)
2943          AND line.trx_line_id = l_trx_line_id_tbl(i)
2944          AND line.trx_level_type = l_trx_level_type_tbl(i)
2945          AND nvl(line.ctrl_total_line_tx_amt,0) <> 0  -- change for this bug 7000903
2946          AND line.self_assessed_flag <> 'Y'
2947          AND line.offset_flag <> 'Y'
2948          AND line.offset_link_to_tax_line_id IS NULL
2949          AND NVL(cancel_flag,'N') <> 'Y';
2950 
2951     EXIT WHEN get_total_line_tax_amt_csr%NOTFOUND;
2952   END LOOP;
2953 
2954   CLOSE get_total_line_tax_amt_csr;
2955 
2956   IF (g_level_procedure >= g_current_runtime_level ) THEN
2957     FND_LOG.STRING(g_level_procedure,
2958                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_line',
2959                    'RETURN_STATUS = ' || x_return_status);
2960     FND_LOG.STRING(g_level_procedure,
2961                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_line.END',
2962                    'ZX_TDS_CALC_SERVICES_PUB_PKG.' ||
2963                    'process_taxes_for_xml_inv_line(-)');
2964  END IF;
2965 
2966 EXCEPTION
2967   WHEN OTHERS THEN
2968     IF get_total_line_tax_amt_csr%ISOPEN THEN
2969        CLOSE get_total_line_tax_amt_csr;
2970     END IF;
2971     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2972     IF (g_level_unexpected >= g_current_runtime_level ) THEN
2973       FND_LOG.STRING(g_level_unexpected,
2974                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_line',
2975                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2976       FND_LOG.STRING(g_level_unexpected,
2977                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_line.END',
2978                      'ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_line(-)');
2979     END IF;
2980 
2981 END process_taxes_for_xml_inv_line;
2982 
2983 /*=========================================================================*
2984  | This procedure contains the code for processing tax lines for XML       |
2985  |   invoices with header level control tax amount.                        |
2986  *=========================================================================*/
2987 
2988 PROCEDURE process_taxes_for_xml_inv_hdr (
2989   --p_event_class_rec        IN 	        zx_api_pub.event_class_rec_type,
2990   x_return_status          OUT NOCOPY   VARCHAR2) IS
2991 
2992  CURSOR get_total_trx_tax_amt_csr IS
2993  SELECT /*+ INDEX(ZX_DETAIL_TAX_LINES_GT ZX_DETAIL_TAX_LINES_GT_U1) */
2994         SUM(tax_line.unrounded_tax_amt),
2995         tax_line.application_id,
2996         tax_line.event_class_code,
2997         tax_line.entity_code,
2998         tax_line.trx_id,
2999         trx_line.ctrl_total_hdr_tx_amt
3000    FROM zx_detail_tax_lines_gt tax_line,
3001         zx_lines_det_factors  trx_line
3002   WHERE tax_line.application_id = trx_line.application_id
3003     AND tax_line.event_class_code = trx_line.event_class_code
3004     AND tax_line.entity_code = trx_line.entity_code
3005     AND tax_line.trx_id = trx_line.trx_id
3006 --  bugfix 5599951
3007     AND tax_line.trx_line_id = trx_line.trx_line_id
3008     AND tax_line.trx_level_type = trx_line.trx_level_type
3009     AND trx_line.ctrl_total_hdr_tx_amt IS NOT NULL
3010     AND tax_line.self_assessed_flag <> 'Y'
3011     AND tax_line.offset_flag <> 'Y'
3012     AND tax_line.offset_link_to_tax_line_id IS NULL
3013     AND NVL(cancel_flag,'N') <> 'Y'
3014     GROUP BY tax_line.application_id,
3015              tax_line.event_class_code,
3016              tax_line.entity_code,
3017              tax_line.trx_id,
3018              trx_line.ctrl_total_hdr_tx_amt;
3019 
3020 
3021  CURSOR get_mismatch_tax_lines_csr IS
3022  SELECT /*+ INDEX(ZX_DETAIL_TAX_LINES_GT ZX_DETAIL_TAX_LINES_GT_U1) */
3023         SUM(tax_line.unrounded_tax_amt)
3024    FROM zx_detail_tax_lines_gt tax_line,
3025         zx_lines_det_factors  trx_line
3026   WHERE tax_line.application_id = trx_line.application_id
3027     AND tax_line.event_class_code = trx_line.event_class_code
3028     AND tax_line.entity_code = trx_line.entity_code
3029     AND tax_line.trx_id = trx_line.trx_id
3030     --  bugfix 5599951
3031     AND tax_line.trx_line_id = trx_line.trx_line_id
3032     AND tax_line.trx_level_type = trx_line.trx_level_type
3033     AND trx_line.ctrl_total_hdr_tx_amt <> 0
3034     AND tax_line.self_assessed_flag <> 'Y'
3035     AND tax_line.offset_flag <> 'Y'
3036     AND tax_line.offset_link_to_tax_line_id IS NULL
3037     AND NVL(cancel_flag,'N') <> 'Y'
3038     GROUP BY tax_line.application_id,
3039              tax_line.event_class_code,
3040              tax_line.entity_code,
3041              tax_line.trx_id,
3042              trx_line.ctrl_total_hdr_tx_amt
3043     HAVING NVL(SUM(tax_line.unrounded_tax_amt), 0) = 0;
3044 
3045 
3046  l_total_trx_tax_amt		NUMBER;
3047 
3048  TYPE num_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3049  TYPE var_tbl_type IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
3050 
3051  l_total_trx_tax_amt_tbl     num_tbl_type;
3052  l_ctrl_total_hdr_tx_amt_tbl num_tbl_type;
3053  l_application_id_tbl           num_tbl_type;
3054  l_event_class_code_tbl  var_tbl_type;
3055  l_entity_code_tbl       var_tbl_type;
3056  l_trx_id_tbl     num_tbl_type;
3057 
3058 BEGIN
3059   IF (g_level_procedure >= g_current_runtime_level ) THEN
3060     FND_LOG.STRING(g_level_procedure,
3061                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_hdr.BEGIN',
3062                    'ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_hdr(+)');
3063   END IF;
3064 
3065   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
3066 
3067   OPEN get_mismatch_tax_lines_csr;
3068   FETCH get_mismatch_tax_lines_csr INTO l_total_trx_tax_amt;
3069 
3070   IF get_mismatch_tax_lines_csr%FOUND THEN
3071     CLOSE get_mismatch_tax_lines_csr;
3072 
3073     x_return_status := FND_API.G_RET_STS_ERROR;
3074     IF (g_level_statement >= g_current_runtime_level ) THEN
3075       FND_LOG.STRING(g_level_statement,
3076                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_hdr',
3077                      'The header level control tax amount is not 0, ' ||
3078                      'but total calculated tax amount for this transaction is 0.');
3079       FND_LOG.STRING(g_level_statement,
3080                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_hdr.END',
3081                      'ZX_TDS_CALC_SERVICES_PUB_PKG.' ||
3082                      'process_taxes_for_xml_inv_hdr(-)');
3083     END IF;
3084 
3085     FND_MESSAGE.SET_NAME('ZX','ZX_HDR_CTRL_TOTAL_TAX_MISMATCH');
3086 
3087     -- FND_MSG_PUB.Add;
3088     ZX_API_PUB.add_msg(ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
3089 
3090     RETURN;
3091   ELSE
3092     CLOSE get_mismatch_tax_lines_csr;
3093   END IF;
3094 
3095 
3096   -- get l_total_trx_tax_amt for all tax lines of this transaction
3097   --
3098   OPEN  get_total_trx_tax_amt_csr;
3099   LOOP
3100 
3101     FETCH get_total_trx_tax_amt_csr  BULK COLLECT INTO
3102           l_total_trx_tax_amt_tbl,
3103           l_application_id_tbl,
3104           l_event_class_code_tbl,
3105           l_entity_code_tbl,
3106           l_trx_id_tbl,
3107           l_ctrl_total_hdr_tx_amt_tbl
3108     LIMIT G_LINES_PER_FETCH;
3109 
3110 
3111   FORALL i IN l_trx_id_tbl.FIRST .. l_trx_id_tbl.LAST
3112     -- 1. prorate tax amount to all tax lines of this transaction.
3113     -- 2. for now set the original tax_amt, taxable_amt to the unrounded tax_amt
3114     --    and taxable_amount since rounded amounts are not available yet. This
3115     --    logic may need to change based on later Reporting requirements.
3116     --
3117     UPDATE /*+ INDEX(line ZX_DETAIL_TAX_LINES_GT_U1) */
3118            zx_detail_tax_lines_gt line
3119        SET line.orig_tax_amt = line.unrounded_tax_amt,
3120            line.orig_taxable_amt = line.unrounded_taxable_amt,
3121            line.orig_tax_rate = line.tax_rate,
3122            line.tax_amt = NULL,
3123            line.unrounded_tax_amt = DECODE(l_total_trx_tax_amt_tbl(i),
3124              0, 0, (line.unrounded_tax_amt/l_total_trx_tax_amt_tbl(i)) * l_ctrl_total_hdr_tx_amt_tbl(i)),
3125            line.sync_with_prvdr_flag = DECODE(tax_provider_id, NULL, 'N', 'Y'),
3126            line.overridden_flag  = 'Y',
3127            line.last_manual_entry = 'TAX_AMOUNT',
3128            line.taxable_amt = NULL,
3129            (line.unrounded_taxable_amt,
3130             line.tax_rate,
3131             line.taxable_basis_formula)
3132            = (select decode ( NVL(rate.ALLOW_ADHOC_TAX_RATE_FLAG, 'N'),
3133                       'N', decode(line.tax_rate, 0,  line.unrounded_taxable_amt,
3134                                   DECODE(l_total_trx_tax_amt_tbl(i), 0, line.unrounded_taxable_amt,
3135                                          (unrounded_tax_amt/l_total_trx_tax_amt_tbl(i) * l_ctrl_total_hdr_tx_amt_tbl(i))/line.tax_rate*100 )
3136                                  ),
3137                       'Y', decode ( NVL(rate.ADJ_FOR_ADHOC_AMT_CODE, 'TAXABLE_BASIS'),
3138                            'TAXABLE_BASIS', decode(line.tax_rate, 0, line.unrounded_taxable_amt,
3139                                                    DECODE(l_total_trx_tax_amt_tbl(i), 0, line.unrounded_taxable_amt,
3140                                                           (line.unrounded_tax_amt/l_total_trx_tax_amt_tbl(i)*l_ctrl_total_hdr_tx_amt_tbl(i))/line.tax_rate*100)
3141                                                          ),
3142                           line.unrounded_taxable_amt),
3143                      line.unrounded_taxable_amt ) unrounded_taxable_amt,
3144 
3145                      decode ( NVL(rate.ALLOW_ADHOC_TAX_RATE_FLAG, 'N'),
3146                       'Y', decode(NVL(rate.ADJ_FOR_ADHOC_AMT_CODE, 'TAXABLE_BASIS'),
3147                                   'TAX_RATE',
3148                                    decode(line.unrounded_taxable_amt,
3149                                           0, line.tax_rate,
3150                                           decode(l_total_trx_tax_amt_tbl(i),
3151                                                   0, line.tax_rate,
3152                                                   (line.unrounded_tax_amt/l_total_trx_tax_amt_tbl(i)*l_ctrl_total_hdr_tx_amt_tbl(i))/line.unrounded_taxable_amt*100
3153                                                 )
3154                                          ),
3155                                  line.tax_rate),
3156                      line.tax_rate ) tax_rate,
3157 
3158                      decode ( NVL(rate.ALLOW_ADHOC_TAX_RATE_FLAG, 'N'),
3159                      'N', decode ( line.tax_rate, 0,  line.taxable_basis_formula, 'PRORATED_TB' ),
3160                      'Y', decode ( NVL(rate.ADJ_FOR_ADHOC_AMT_CODE, 'TAXABLE_BASIS'),
3161                           'TAXABLE_BASIS', decode(line.tax_rate, 0, line.taxable_basis_formula, 'PRORATED_TB'),
3162                           line.taxable_basis_formula),
3163                      line.taxable_basis_formula ) taxable_basis_formula
3164 
3165               from zx_rates_b rate
3166               where line.tax_rate_id = rate.tax_rate_id
3167            )
3168 
3169     WHERE  line.application_id = l_application_id_tbl(i)
3170        AND line.event_class_code = l_event_class_code_tbl(i)
3171        AND line.entity_code = l_entity_code_tbl(i)
3172        AND line.trx_id = l_trx_id_tbl(i)
3173        AND line.self_assessed_flag <> 'Y'
3174        AND line.offset_link_to_tax_line_id IS NULL
3175        AND line.offset_flag <> 'Y'
3176        AND line.mrc_tax_line_flag = 'N'
3177        AND NVL(cancel_flag,'N') <> 'Y';
3178 
3179     EXIT WHEN get_total_trx_tax_amt_csr%NOTFOUND;
3180   END LOOP;
3181 
3182   CLOSE get_total_trx_tax_amt_csr;
3183 
3184   IF (g_level_procedure >= g_current_runtime_level ) THEN
3185     FND_LOG.STRING(g_level_procedure,
3186                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_hdr',
3187                    'RETURN_STATUS = ' || x_return_status);
3188     FND_LOG.STRING(g_level_procedure,
3189                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_hdr.END',
3190                    'ZX_TDS_CALC_SERVICES_PUB_PKG.' ||
3191                    'process_taxes_for_xml_inv_hdr(-)');
3192   END IF;
3193 
3194 EXCEPTION
3195   WHEN OTHERS THEN
3196     IF get_total_trx_tax_amt_csr%ISOPEN THEN
3197        CLOSE get_total_trx_tax_amt_csr;
3198     END IF;
3199     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3200     IF (g_level_unexpected >= g_current_runtime_level ) THEN
3201       FND_LOG.STRING(g_level_unexpected,
3202                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_hdr',
3203                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3204       FND_LOG.STRING(g_level_unexpected,
3205                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_hdr.END',
3206                      'ZX_TDS_CALC_SERVICES_PUB_PKG.process_taxes_for_xml_inv_hdr(-)');
3207     END IF;
3208 
3209 END process_taxes_for_xml_inv_hdr;
3210 
3211 /*=========================================================================*
3212  | This procedure is used to adjust tax lines for XML invoices             |
3213  |   with header level control tax amount.                                 |
3214  *=========================================================================*/
3215 PROCEDURE adjust_tax_for_xml_inv_line (
3216   ---p_event_class_rec        IN 	        zx_api_pub.event_class_rec_type,
3217   x_return_status          OUT NOCOPY   VARCHAR2) IS
3218 
3219  CURSOR get_total_line_tax_amt_csr IS
3220  SELECT /*+ INDEX(ZX_DETAIL_TAX_LINES_GT ZX_DETAIL_TAX_LINES_GT_U1) */
3221         SUM(tax_amt),
3222         MAX(tax_amt),
3223         application_id,
3224         event_class_code,
3225         entity_code,
3226         trx_id,
3227         trx_line_id,
3228         trx_level_type,
3229         ctrl_total_line_tx_amt
3230    FROM zx_detail_tax_lines_gt
3231   WHERE
3232      -- commented out for bug fix 5417887
3233      --     trx_id = p_event_class_rec.trx_id
3234      -- AND application_id = p_event_class_rec.application_id
3235      -- AND event_class_code = p_event_class_rec.event_class_code
3236      -- AND entity_code = p_event_class_rec.entity_code
3237      -- AND
3238         ctrl_total_line_tx_amt IS NOT NULL
3239     AND self_assessed_flag <> 'Y'
3240     AND offset_flag <> 'Y'
3241     AND offset_link_to_tax_line_id IS NULL
3242     AND mrc_tax_line_flag = 'N'
3243     AND NVL(cancel_flag,'N') <> 'Y'
3244     GROUP BY application_id,
3245              event_class_code,
3246              entity_code,
3247              trx_id,
3248              trx_line_id,
3249              trx_level_type,
3250              ctrl_total_line_tx_amt
3251     HAVING SUM(tax_amt) <> ctrl_total_line_tx_amt;
3252 
3253 
3254  TYPE num_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3255  TYPE var_tbl_type IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
3256 
3257  l_trx_line_id_tbl		num_tbl_type;
3258  l_trx_level_type_tbl		var_tbl_type;
3259  l_total_line_tx_amt_tbl	num_tbl_type;
3260  l_max_tax_amt_tbl		num_tbl_type;
3261  l_ctrl_total_line_tx_amt_tbl   num_tbl_type;
3262 
3263  l_trx_line_id_diff_tbl         num_tbl_type;
3264  l_trx_level_type_diff_tbl	var_tbl_type;
3265  l_max_tax_amt_diff_tbl		num_tbl_type;
3266  l_rounding_diff_tbl 		num_tbl_type;
3267 
3268  l_application_id_tbl           num_tbl_type;
3269  l_event_class_code_tbl  var_tbl_type;
3270  l_entity_code_tbl       var_tbl_type;
3271  l_trx_id_tbl     num_tbl_type;
3272 
3273  l_index			NUMBER;
3274 
3275 BEGIN
3276 
3277   IF (g_level_procedure >= g_current_runtime_level ) THEN
3278     FND_LOG.STRING(g_level_procedure,
3279                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_line.BEGIN',
3280                    'ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_line(+)');
3281   END IF;
3282 
3283   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
3284   l_index := 0;
3285 
3286   -- open cursor  get_total_line_tax_amt_csr
3287   --
3288   OPEN  get_total_line_tax_amt_csr;
3289   FETCH get_total_line_tax_amt_csr BULK COLLECT INTO
3290           l_total_line_tx_amt_tbl,
3291           l_max_tax_amt_tbl,
3292 	  l_application_id_tbl,
3293 	  l_event_class_code_tbl,
3294 	  l_entity_code_tbl,
3295 	  l_trx_id_tbl,
3296           l_trx_line_id_tbl,
3297           l_trx_level_type_tbl,
3298 	  l_ctrl_total_line_tx_amt_tbl;
3299   CLOSE get_total_line_tax_amt_csr;
3300 
3301 
3302   FORALL i IN l_trx_line_id_tbl.FIRST ..l_trx_line_id_tbl.LAST
3303 
3304     -- adjust tax amount of the detail tax line with the maximum tax amount.
3305     --
3306     UPDATE /*+ INDEX(ZX_DETAIL_TAX_LINES_GT ZX_DETAIL_TAX_LINES_GT_U1) */
3307            zx_detail_tax_lines_gt
3308        SET tax_amt = tax_amt + l_ctrl_total_line_tx_amt_tbl(i) - l_total_line_tx_amt_tbl(i)
3309            --sync_with_prvdr_flag = DECODE(tax_provider_id, NULL, 'N', 'Y') -- this should have already been set during proration
3310      WHERE application_id = l_application_id_tbl(i)
3311        AND event_class_code = l_event_class_code_tbl(i)
3312        AND entity_code = l_entity_code_tbl(i)
3313        AND trx_id = l_trx_id_tbl(i)
3314        AND trx_line_id = l_trx_line_id_tbl(i)
3315        AND trx_level_type = l_trx_level_type_tbl(i)
3316        AND ctrl_total_line_tx_amt IS NOT NULL
3317        AND self_assessed_flag <> 'Y'
3318        AND offset_link_to_tax_line_id IS NULL
3319        AND offset_flag <> 'Y'
3320        AND mrc_tax_line_flag = 'N'
3321        AND tax_amt = l_max_tax_amt_tbl(i)
3322        AND NVL(cancel_flag,'N') <> 'Y'
3323        AND rownum = 1;
3324 
3325   IF (g_level_procedure >= g_current_runtime_level ) THEN
3326     FND_LOG.STRING(g_level_procedure,
3327                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_line',
3328                    'RETURN_STATUS = ' || x_return_status);
3329     FND_LOG.STRING(g_level_procedure,
3330                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_line.END',
3331                    'ZX_TDS_CALC_SERVICES_PUB_PKG.' ||
3332                    'adjust_tax_for_xml_inv_line(-)');
3333   END IF;
3334 
3335 EXCEPTION
3336   WHEN OTHERS THEN
3337     IF get_total_line_tax_amt_csr%ISOPEN THEN
3338        CLOSE get_total_line_tax_amt_csr;
3339     END IF;
3340     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3341     IF (g_level_unexpected >= g_current_runtime_level ) THEN
3342       FND_LOG.STRING(g_level_unexpected,
3343                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_line',
3344                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3345       FND_LOG.STRING(g_level_unexpected,
3346                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_line.END',
3347                      'ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_line(-)');
3348     END IF;
3349 
3350 END adjust_tax_for_xml_inv_line;
3351 
3352 /*=========================================================================*
3353  | This procedure contains the code for adjusting tax lines for XML        |
3354  |   invoices with header level control tax amount.                        |
3355  *=========================================================================*/
3356 PROCEDURE adjust_tax_for_xml_inv_hdr (
3357   --p_event_class_rec        IN 	        zx_api_pub.event_class_rec_type,
3358   x_return_status          OUT NOCOPY   VARCHAR2) IS
3359 
3360  CURSOR get_total_trx_tax_amt_csr IS
3361  SELECT /*+ INDEX(ZX_DETAIL_TAX_LINES_GT ZX_DETAIL_TAX_LINES_GT_U1) */
3362         SUM(tax_line.tax_amt),
3363         MAX(tax_line.tax_amt),
3364         tax_line.application_id,
3365         tax_line.event_class_code,
3366         tax_line.entity_code,
3367         tax_line.trx_id,
3368         trx_line.ctrl_total_hdr_tx_amt
3369    FROM zx_detail_tax_lines_gt tax_line,
3370         zx_lines_det_factors trx_line
3371   WHERE tax_line.application_id = trx_line.application_id
3372     AND tax_line.event_class_code = trx_line.event_class_code
3373     AND tax_line.entity_code = trx_line.entity_code
3374     AND tax_line.trx_id = trx_line.trx_id
3375 --  bugfix 5599951
3376     AND tax_line.trx_line_id = trx_line.trx_line_id
3377     AND tax_line.trx_level_type = trx_line.trx_level_type
3378     AND tax_line.self_assessed_flag <> 'Y'
3379     AND tax_line.offset_flag <> 'Y'
3380     AND tax_line.offset_link_to_tax_line_id IS NULL
3381     AND tax_line.mrc_tax_line_flag = 'N'
3382     AND trx_line.ctrl_total_hdr_tx_amt IS NOT NULL
3383     AND NVL(cancel_flag,'N') <> 'Y'
3384   GROUP BY tax_line.application_id,
3385            tax_line.event_class_code,
3386            tax_line.entity_code,
3387            tax_line.trx_id,
3388            trx_line.ctrl_total_hdr_tx_amt
3389   HAVING SUM(tax_line.tax_amt) <> trx_line.ctrl_total_hdr_tx_amt;
3390 
3391  TYPE num_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3392  TYPE var_tbl_type IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
3393 
3394  l_total_trx_tax_amt_tbl     num_tbl_type;
3395  l_max_tax_amt_tbl           num_tbl_type;
3396  l_ctrl_total_hdr_tx_amt_tbl num_tbl_type;
3397  l_application_id_tbl           num_tbl_type;
3398  l_event_class_code_tbl  var_tbl_type;
3399  l_entity_code_tbl       var_tbl_type;
3400  l_trx_id_tbl     num_tbl_type;
3401 
3402 BEGIN
3403   IF (g_level_procedure >= g_current_runtime_level ) THEN
3404     FND_LOG.STRING(g_level_procedure,
3405                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_hdr.BEGIN',
3406                    'ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_hdr(+)');
3407   END IF;
3408   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
3409 
3410   -- get l_total_trx_tax_amt for all tax lines of this transaction
3411   --
3412   OPEN  get_total_trx_tax_amt_csr ;
3413   FETCH get_total_trx_tax_amt_csr BULK COLLECT INTO
3414           l_total_trx_tax_amt_tbl,
3415           l_max_tax_amt_tbl,
3416           l_application_id_tbl,
3417           l_event_class_code_tbl,
3418           l_entity_code_tbl,
3419           l_trx_id_tbl,
3420           l_ctrl_total_hdr_tx_amt_tbl;
3421   CLOSE get_total_trx_tax_amt_csr;
3422 
3423   -- adjust tax amount of the detail tax line with the maximum tax amount.
3424   --
3425   FORALL i IN l_trx_id_tbl.FIRST ..l_trx_id_tbl.LAST
3426     UPDATE /*+ INDEX(ZX_DETAIL_TAX_LINES_GT ZX_DETAIL_TAX_LINES_GT_U1) */
3427            zx_detail_tax_lines_gt
3428        SET tax_amt = tax_amt + l_ctrl_total_hdr_tx_amt_tbl(i) - l_total_trx_tax_amt_tbl(i)
3429            --sync_with_prvdr_flag = DECODE(tax_provider_id, NULL, 'N', 'Y') -- this should have already been set during process proration
3430      WHERE application_id = l_application_id_tbl(i)
3431        AND event_class_code = l_event_class_code_tbl(i)
3432        AND entity_code = l_entity_code_tbl(i)
3433        AND trx_id = l_trx_id_tbl(i)
3434        AND self_assessed_flag <> 'Y'
3435        AND offset_link_to_tax_line_id IS NULL
3436        AND offset_flag <> 'Y'
3437        AND mrc_tax_line_flag = 'N'
3438        AND tax_amt = l_max_tax_amt_tbl(i)
3439        AND NVL(cancel_flag,'N') <> 'Y'
3440        AND rownum = 1;
3441 
3442   IF (g_level_procedure >= g_current_runtime_level ) THEN
3443     FND_LOG.STRING(g_level_procedure,
3444                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_hdr',
3445                    'RETURN_STATUS = ' || x_return_status);
3446     FND_LOG.STRING(g_level_procedure,
3447                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_hdr.END',
3448                    'ZX_TDS_CALC_SERVICES_PUB_PKG.' ||
3449                    'adjust_tax_for_xml_inv_hdr(-)');
3450   END IF;
3451 
3452 EXCEPTION
3453   WHEN OTHERS THEN
3454     IF get_total_trx_tax_amt_csr%ISOPEN THEN
3455        CLOSE get_total_trx_tax_amt_csr;
3456     END IF;
3457     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3458     IF (g_level_unexpected >= g_current_runtime_level ) THEN
3459       FND_LOG.STRING(g_level_unexpected,
3460                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_hdr',
3461                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3462       FND_LOG.STRING(g_level_unexpected,
3463                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_hdr.END',
3464                      'ZX_TDS_CALC_SERVICES_PUB_PKG.adjust_tax_for_xml_inv_hdr(-)');
3465     END IF;
3466 
3467 END adjust_tax_for_xml_inv_hdr;
3468 
3469 /* ======================================================================*
3470  |  PROCEDURE match_tax_amt_to_summary_line is used to adjust tax        |
3471  |    amounts  to make sure that the total tax amount matches that of    |
3472  |    the summary line, including manual summary tax line or summary     |
3473  |    tax line with last_manual_entry = 'TAX_AMOUNT'.                    |
3474  |                                                                       |
3475  * ======================================================================*/
3476 PROCEDURE  match_tax_amt_to_summary_line (
3477   p_event_class_rec	  IN  OUT NOCOPY  zx_api_pub.event_class_rec_type,
3478   x_return_status  	  OUT NOCOPY      VARCHAR2) IS
3479 
3480 CURSOR  get_sum_tax_lines_for_adj_csr IS
3481  SELECT tax_amt, summary_tax_line_id
3482    FROM zx_lines_summary
3483   WHERE application_id = p_event_class_rec.application_id
3484     AND entity_code = p_event_class_rec.entity_code
3485     AND event_class_code = p_event_class_rec.event_class_code
3486     AND trx_id = p_event_class_rec.trx_id
3487     AND last_manual_entry = 'TAX_AMOUNT'  -- manual or overridden sum tax line
3488     AND adjust_tax_amt_flag = 'Y'
3489     AND nvl(cancel_flag,'N') <> 'Y'
3490     AND nvl(self_assessed_flag,'N') <> 'Y'
3491     AND tax_provider_id IS NULL;
3492 
3493  CURSOR  get_det_tax_lines_sum_amt_csr(p_summary_tax_line_id 	NUMBER) IS
3494   SELECT /*+ INDEX(ZX_DETAIL_TAX_LINES_GT ZX_DETAIL_TAX_LINES_GT_U1) */
3495          SUM(tax_amt), MAX(tax_amt)
3496     FROM zx_detail_tax_lines_gt
3497    WHERE application_id = p_event_class_rec.application_id
3498      AND entity_code = p_event_class_rec.entity_code
3499      AND event_class_code = p_event_class_rec.event_class_code
3500      AND trx_id = p_event_class_rec.trx_id
3501      AND summary_tax_line_id = p_summary_tax_line_id;
3502 
3503  TYPE l_num_tbl_type IS TABLE OF NUMBER INDEX by BINARY_INTEGER;
3504  l_summary_tax_line_id_tbl 	l_num_tbl_type;
3505  l_max_tax_amt_tbl	 	l_num_tbl_type;
3506  l_rounding_diff_tbl 		l_num_tbl_type;
3507 
3508  l_sum_detail_tax_amt		NUMBER;
3509  l_max_tax_amt			NUMBER;
3510  l_rounding_diff 		NUMBER;
3511  l_tbl_index			BINARY_INTEGER;
3512 
3513 BEGIN
3514 
3515   IF (g_level_procedure >= g_current_runtime_level ) THEN
3516     FND_LOG.STRING(g_level_procedure,
3517            'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.match_tax_amt_to_summary_line.BEGIN',
3518            'ZX_TDS_CALC_SERVICES_PUB_PKG.match_tax_amt_to_summary_line(+)');
3519   END IF;
3520 
3521   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
3522   l_tbl_index := 0;
3523 
3524   FOR sum_tax_rec IN get_sum_tax_lines_for_adj_csr LOOP
3525 
3526     OPEN  get_det_tax_lines_sum_amt_csr(sum_tax_rec.summary_tax_line_id);
3527     FETCH get_det_tax_lines_sum_amt_csr INTO l_sum_detail_tax_amt, l_max_tax_amt;
3528     CLOSE get_det_tax_lines_sum_amt_csr;
3529 
3530     IF l_sum_detail_tax_amt IS NOT NULL THEN
3531 
3532       l_rounding_diff := sum_tax_rec.tax_amt - l_sum_detail_tax_amt;
3533 
3534       IF l_rounding_diff <> 0 THEN
3535         l_tbl_index := l_tbl_index + 1;
3536         l_summary_tax_line_id_tbl(l_tbl_index) := sum_tax_rec.summary_tax_line_id;
3537         l_max_tax_amt_tbl(l_tbl_index) := l_max_tax_amt;
3538         l_rounding_diff_tbl(l_tbl_index) := l_rounding_diff;
3539       END IF;
3540     END IF;
3541   END LOOP;
3542 
3543   IF l_summary_tax_line_id_tbl.COUNT > 0 THEN
3544 
3545     -- adjust tax amount of the detail tax line with the maximum tax amount.
3546     --
3547     FORALL i IN l_summary_tax_line_id_tbl.FIRST .. l_summary_tax_line_id_tbl.LAST
3548 
3549       UPDATE /*+ INDEX(ZX_DETAIL_TAX_LINES_GT ZX_DETAIL_TAX_LINES_GT_U1) */
3550              zx_detail_tax_lines_gt
3551          SET tax_amt = tax_amt + l_rounding_diff_tbl(i)
3552        WHERE trx_id = p_event_class_rec.trx_id
3553          AND application_id = p_event_class_rec.application_id
3554          AND event_class_code = p_event_class_rec.event_class_code
3555          AND entity_code = p_event_class_rec.entity_code
3556          AND summary_tax_line_id = l_summary_tax_line_id_tbl(i)
3557          AND tax_amt = l_max_tax_amt_tbl(i)
3558          AND rownum = 1;
3559 
3560   END IF;    -- l_summary_tax_line_id_tbl.COUNT > 0
3561 
3562   IF (g_level_procedure >= g_current_runtime_level ) THEN
3563     FND_LOG.STRING(g_level_procedure,
3564            'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.match_tax_amt_to_summary_line',
3565            'RETURN_STATUS = ' || x_return_status);
3566     FND_LOG.STRING(g_level_procedure,
3567            'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.match_tax_amt_to_summary_line.END',
3568            'ZX_TDS_CALC_SERVICES_PUB_PKG.' ||
3569            'match_tax_amt_to_summary_line(-)');
3570   END IF;
3571 
3572 EXCEPTION
3573   WHEN OTHERS THEN
3574     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3575     IF (g_level_unexpected >= g_current_runtime_level ) THEN
3576       FND_LOG.STRING(g_level_unexpected,
3577              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.match_tax_amt_to_summary_line',
3578               sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3579       FND_LOG.STRING(g_level_unexpected,
3580              'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.match_tax_amt_to_summary_line.END',
3581              'ZX_TDS_CALC_SERVICES_PUB_PKG.match_tax_amt_to_summary_line(-)');
3582     END IF;
3583 
3584 END match_tax_amt_to_summary_line;
3585 
3586 /* ======================================================================*
3587  |  PROCEDURE init_for_session is used to initialize the Global          |
3588  |  Structures / Global Temp Tables owned by TDM at session level.       |
3589  * ======================================================================*/
3590 PROCEDURE init_for_session (
3591   x_return_status          OUT NOCOPY    VARCHAR2 ) IS
3592 
3593 BEGIN
3594   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3595 
3596   IF (g_level_procedure >= g_current_runtime_level ) THEN
3597     FND_LOG.STRING(g_level_procedure,
3598                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_session.BEGIN',
3599                    'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_session(+)');
3600   END IF;
3601 
3602   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
3603 
3604   -- init gt tables
3605   DELETE FROM ZX_DETAIL_TAX_LINES_GT;
3606 
3607   -- added the following initializations for bug fix 5417887
3608   ZX_TDS_CALC_SERVICES_PUB_PKG.g_ctrl_total_line_tx_amt_flg := 'N';
3609   ZX_TDS_CALC_SERVICES_PUB_PKG.g_ctrl_total_hdr_tx_amt_flg := 'N';
3610 
3611   --bug 7537542
3612   ZX_TDS_CALC_SERVICES_PUB_PKG.g_ln_action_cancel_exist_flg := 'N';
3613   ZX_TDS_CALC_SERVICES_PUB_PKG.g_ln_action_discard_exist_flg := 'N';
3614   ZX_TDS_CALC_SERVICES_PUB_PKG.g_ln_action_nochange_exist_flg := 'N';
3615   ZX_TDS_CALC_SERVICES_PUB_PKG.g_process_copy_and_create_flg := 'N';
3616   ZX_TDS_CALC_SERVICES_PUB_PKG.g_reference_doc_exist_flg := 'N';
3617   --bug 7537542
3618 
3619   ZX_GLOBAL_STRUCTURES_PKG.g_credit_memo_exists_flg := 'N';
3620   ZX_GLOBAL_STRUCTURES_PKG.g_update_event_process_flag := 'N';
3621   ZX_GLOBAL_STRUCTURES_PKG.g_bulk_process_flag := 'N';
3622   ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl.DELETE;
3623 
3624 
3625   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.DELETE;
3626   ZX_TDS_CALC_SERVICES_PUB_PKG.g_check_cond_grp_tbl.DELETE;
3627   ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl.DELETE;
3628 
3629   ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl.DELETE;
3630   ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl.DELETE;
3631   ZX_TDS_CALC_SERVICES_PUB_PKG.g_trx_alphanum_value_tbl.DELETE;
3632 
3633   ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl.DELETE;
3634   ZX_TDS_UTILITIES_PKG.g_tax_rate_info_tbl.DELETE;
3635   ZX_TDS_UTILITIES_PKG.g_tax_status_info_tbl.DELETE;
3636   ZX_TDS_UTILITIES_PKG.g_currency_rec_tbl.DELETE;
3637   ZX_TRD_INTERNAL_SERVICES_PVT.g_tax_recovery_info_tbl.DELETE;
3638   ZX_TDS_TAX_ROUNDING_PKG.g_currency_tbl.DELETE;
3639   ZX_TDS_TAX_ROUNDING_PKG.g_tax_curr_conv_rate_tbl.DELETE;
3640 
3641   ZX_TDS_RULE_BASE_DETM_PVT.g_determining_factor_class_tbl.DELETE;
3642   ZX_TDS_RULE_BASE_DETM_PVT.g_determining_factor_cq_tbl.DELETE;
3643   ZX_TDS_RULE_BASE_DETM_PVT.g_data_type_tbl.DELETE;
3644   ZX_TDS_RULE_BASE_DETM_PVT.g_determining_factor_code_tbl.DELETE;
3645   ZX_TDS_RULE_BASE_DETM_PVT.g_tax_parameter_code_tbl.DELETE;
3646   ZX_TDS_RULE_BASE_DETM_PVT.g_operator_tbl.DELETE;
3647   ZX_TDS_RULE_BASE_DETM_PVT.g_numeric_value_tbl.DELETE;
3648   ZX_TDS_RULE_BASE_DETM_PVT.g_date_value_tbl.DELETE;
3649   ZX_TDS_RULE_BASE_DETM_PVT.g_alphanum_value_tbl.DELETE;
3650   ZX_TDS_RULE_BASE_DETM_PVT.g_value_low_tbl.DELETE;
3651   ZX_TDS_RULE_BASE_DETM_PVT.g_value_high_tbl.DELETE;
3652   ZX_TDS_RULE_BASE_DETM_PVT.g_segment_array.DELETE;
3653 
3654   ZX_TDS_TAX_ROUNDING_PKG.g_euro_code := NULL;
3655   ZX_TDS_CALC_SERVICES_PUB_PKG.g_max_tax_line_number := NULL;
3656   ZX_TDS_CALC_SERVICES_PUB_PKG.g_trx_lines_counter := NULL;
3657   ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_level := NULL;
3658   ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_rule := NULL;
3659   ZX_TDS_CALC_SERVICES_PUB_PKG.g_rnd_lvl_party_tax_prof_id := NULL;
3660   ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_lvl_party_type := NULL;
3661 
3662   -- added for bug 5684123
3663   ZX_TDS_CALC_SERVICES_PUB_PKG.g_overridden_tax_ln_exist_flg := 'N';
3664 
3665   IF (g_level_procedure >= g_current_runtime_level ) THEN
3666     FND_LOG.STRING(g_level_procedure,
3667                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_session',
3668                    'RETURN_STATUS = ' || x_return_status);
3669     FND_LOG.STRING(g_level_procedure,
3670                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_session.END',
3671                    'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_session(-)');
3672   END IF;
3673 
3674 EXCEPTION
3675   WHEN OTHERS THEN
3676     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3677     IF (g_level_unexpected >= g_current_runtime_level ) THEN
3678       FND_LOG.STRING(g_level_unexpected,
3679                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_session',
3680                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3681       FND_LOG.STRING(g_level_unexpected,
3682                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_session.END',
3683                      'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_session(-)');
3684     END IF;
3685 
3686 END init_for_session;
3687 
3688 /* ======================================================================*
3689  |  PROCEDURE init_for_header is used to initialize the Global           |
3690  |  Structures / Global Temp Tables owned by TDM at header level.        |
3691  * ======================================================================*/
3692 PROCEDURE init_for_header (
3693   p_event_class_rec        IN            ZX_API_PUB.event_class_rec_type,
3694   x_return_status          OUT NOCOPY    VARCHAR2 ) IS
3695 
3696 BEGIN
3697   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3698 
3699   IF (g_level_procedure >= g_current_runtime_level ) THEN
3700     FND_LOG.STRING(g_level_procedure,
3701                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_header.BEGIN',
3702                    'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_header(+)');
3703   END IF;
3704 
3705   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
3706 
3707   -- comment out the following init for bug fix 5417887
3708   -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.DELETE;
3709   ZX_TDS_CALC_SERVICES_PUB_PKG.g_check_cond_grp_tbl.DELETE;
3710   ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl.DELETE;
3711   ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl.DELETE;
3712   ZX_TDS_CALC_SERVICES_PUB_PKG.g_trx_alphanum_value_tbl.DELETE;
3713 
3714   ZX_TDS_RULE_BASE_DETM_PVT.g_determining_factor_class_tbl.DELETE;
3715   ZX_TDS_RULE_BASE_DETM_PVT.g_determining_factor_cq_tbl.DELETE;
3716   ZX_TDS_RULE_BASE_DETM_PVT.g_data_type_tbl.DELETE;
3717   ZX_TDS_RULE_BASE_DETM_PVT.g_determining_factor_code_tbl.DELETE;
3718   ZX_TDS_RULE_BASE_DETM_PVT.g_tax_parameter_code_tbl.DELETE;
3719   ZX_TDS_RULE_BASE_DETM_PVT.g_operator_tbl.DELETE;
3720   ZX_TDS_RULE_BASE_DETM_PVT.g_numeric_value_tbl.DELETE;
3721   ZX_TDS_RULE_BASE_DETM_PVT.g_date_value_tbl.DELETE;
3722   ZX_TDS_RULE_BASE_DETM_PVT.g_alphanum_value_tbl.DELETE;
3723   ZX_TDS_RULE_BASE_DETM_PVT.g_value_low_tbl.DELETE;
3724   ZX_TDS_RULE_BASE_DETM_PVT.g_value_high_tbl.DELETE;
3725   ZX_TDS_RULE_BASE_DETM_PVT.g_segment_array.DELETE;
3726 
3727   --bug 7444373
3728   ZX_GLOBAL_STRUCTURES_PKG.ptnr_exemption_tbl.DELETE;
3729 
3730   ZX_TDS_CALC_SERVICES_PUB_PKG.g_max_tax_line_number := NULL;
3731   ZX_TDS_CALC_SERVICES_PUB_PKG.g_trx_lines_counter := NULL;
3732   ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_level := NULL;
3733   ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_rule  := NULL;
3734   ZX_TDS_CALC_SERVICES_PUB_PKG.g_rnd_lvl_party_tax_prof_id := NULL;
3735   ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_lvl_party_type := NULL;
3736   -- bug7537542
3737 /*
3738   ZX_TDS_CALC_SERVICES_PUB_PKG.g_ln_action_cancel_exist_flg := 'N';
3739   ZX_TDS_CALC_SERVICES_PUB_PKG.g_ln_action_discard_exist_flg := 'N';
3740   ZX_TDS_CALC_SERVICES_PUB_PKG.g_ln_action_nochange_exist_flg := 'N';
3741   ZX_TDS_CALC_SERVICES_PUB_PKG.g_process_copy_and_create_flg := 'N';
3742   ZX_TDS_CALC_SERVICES_PUB_PKG.g_reference_doc_exist_flg := 'N';
3743 */
3744   ZX_TRD_INTERNAL_SERVICES_PVT.g_tax_recovery_info_tbl.DELETE;
3745 
3746   --Bug 7519403--
3747   ZX_SRVC_TYP_PKG.l_line_level_tbl.DELETE;
3748 
3749   --
3750   -- init msg record to be passed back to TSRM
3751   --
3752   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.application_id :=
3753               p_event_class_rec.application_id;
3754   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.entity_code :=
3755               p_event_class_rec.entity_code;
3756   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.event_class_code :=
3757               p_event_class_rec.event_class_code;
3758   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_id :=
3759               p_event_class_rec.trx_id;
3760   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id := NULL;
3761   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type := NULL;
3762   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.summary_tax_line_number :=
3763               NULL;
3764   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.tax_line_id := NULL;
3765   ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_dist_id := NULL;
3766 
3767   -- bugfix 5024740: initialize zx_jurisdictions_gt
3768 
3769   delete from zx_jurisdictions_gt;
3770 
3771   IF (g_level_procedure >= g_current_runtime_level ) THEN
3772     FND_LOG.STRING(g_level_procedure,
3773                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_header',
3774                    'RETURN_STATUS = ' || x_return_status);
3775     FND_LOG.STRING(g_level_procedure,
3776                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_header.END',
3777                    'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_header(-)');
3778   END IF;
3779 
3780 EXCEPTION
3781   WHEN OTHERS THEN
3782     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3783     IF (g_level_unexpected >= g_current_runtime_level ) THEN
3784       FND_LOG.STRING(g_level_unexpected,
3785                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_header',
3786                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3787       FND_LOG.STRING(g_level_unexpected,
3788                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_header.END',
3789                      'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_header(-)');
3790     END IF;
3791 
3792 END init_for_header;
3793 
3794 /* ======================================================================*
3795  |  PROCEDURE init_for_line is used to initialize the Global             |
3796  |  Structures / Global Temp Tables owned by TDM at line level.          |
3797  * ======================================================================*/
3798 PROCEDURE init_for_line (
3799   p_event_class_rec        IN            ZX_API_PUB.event_class_rec_type,
3800   x_return_status          OUT NOCOPY    VARCHAR2 ) IS
3801 
3802 BEGIN
3803   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3804 
3805   IF (g_level_procedure >= g_current_runtime_level ) THEN
3806     FND_LOG.STRING(g_level_procedure,
3807                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_line.BEGIN',
3808                    'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_line(+)');
3809   END IF;
3810 
3811   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
3812 
3813   ZX_TDS_CALC_SERVICES_PUB_PKG.g_check_cond_grp_tbl.DELETE;
3814   ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl.DELETE;
3815   ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl.DELETE;
3816   ZX_TDS_CALC_SERVICES_PUB_PKG.g_trx_alphanum_value_tbl.DELETE;
3817 
3818   ZX_TDS_RULE_BASE_DETM_PVT.g_determining_factor_class_tbl.DELETE;
3819   ZX_TDS_RULE_BASE_DETM_PVT.g_determining_factor_cq_tbl.DELETE;
3820   ZX_TDS_RULE_BASE_DETM_PVT.g_data_type_tbl.DELETE;
3821   ZX_TDS_RULE_BASE_DETM_PVT.g_determining_factor_code_tbl.DELETE;
3822   ZX_TDS_RULE_BASE_DETM_PVT.g_tax_parameter_code_tbl.DELETE;
3823   ZX_TDS_RULE_BASE_DETM_PVT.g_operator_tbl.DELETE;
3824   ZX_TDS_RULE_BASE_DETM_PVT.g_numeric_value_tbl.DELETE;
3825   ZX_TDS_RULE_BASE_DETM_PVT.g_date_value_tbl.DELETE;
3826   ZX_TDS_RULE_BASE_DETM_PVT.g_alphanum_value_tbl.DELETE;
3827   ZX_TDS_RULE_BASE_DETM_PVT.g_value_low_tbl.DELETE;
3828   ZX_TDS_RULE_BASE_DETM_PVT.g_value_high_tbl.DELETE;
3829   ZX_TDS_RULE_BASE_DETM_PVT.g_segment_array.DELETE;
3830 
3831   ZX_TDS_CALC_SERVICES_PUB_PKG.g_max_tax_line_number := NULL;
3832 
3833   -- bugfix 5024740: initialize zx_jurisdictions_gt
3834 
3835   delete from zx_jurisdictions_gt;
3836 
3837   IF (g_level_procedure >= g_current_runtime_level ) THEN
3838     FND_LOG.STRING(g_level_procedure,
3839                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_line',
3840                    'RETURN_STATUS = ' || x_return_status);
3841     FND_LOG.STRING(g_level_procedure,
3842                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_line.END',
3843                    'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_line(-)');
3844   END IF;
3845 
3846 EXCEPTION
3847   WHEN OTHERS THEN
3848     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3849     IF (g_level_unexpected >= g_current_runtime_level ) THEN
3850       FND_LOG.STRING(g_level_unexpected,
3851                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_line',
3852                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3853       FND_LOG.STRING(g_level_unexpected,
3854                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_line.END',
3855                      'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_line(-)');
3856     END IF;
3857 
3858 END init_for_line;
3859 
3860 /* ======================================================================*
3861  |  PROCEDURE init_for_tax_line is used to initialize the Global         |
3862  |  Structures / Global Temp Tables owned by TDM at tax line level.      |
3863  * ======================================================================*/
3864 PROCEDURE init_for_tax_line (
3865   p_event_class_rec        IN            ZX_API_PUB.event_class_rec_type,
3866   x_return_status          OUT NOCOPY    VARCHAR2 ) IS
3867 
3868 BEGIN
3869   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3870 
3871   IF (g_level_procedure >= g_current_runtime_level ) THEN
3872     FND_LOG.STRING(g_level_procedure,
3873                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_line.BEGIN',
3874                    'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_line(+)');
3875   END IF;
3876 
3877   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
3878 
3879   ZX_TDS_RULE_BASE_DETM_PVT.g_segment_array.DELETE;
3880 
3881   IF (g_level_procedure >= g_current_runtime_level ) THEN
3882     FND_LOG.STRING(g_level_procedure,
3883                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_line',
3884                    'RETURN_STATUS = ' || x_return_status);
3885     FND_LOG.STRING(g_level_procedure,
3886                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_line.END',
3887                    'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_line(-)');
3888   END IF;
3889 
3890 EXCEPTION
3891   WHEN OTHERS THEN
3892     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3893     IF (g_level_unexpected >= g_current_runtime_level ) THEN
3894       FND_LOG.STRING(g_level_unexpected,
3895                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_line',
3896                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3897       FND_LOG.STRING(g_level_unexpected,
3898                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_line.END',
3899                      'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_line(-)');
3900     END IF;
3901 
3902 END init_for_tax_line;
3903 
3904 /* ======================================================================*
3905  |  PROCEDURE init_for_tax_dist is used to initialize the Global         |
3906  |  Structures/Global Temp Tables owned by TDM at tax distribution level.|
3907  * ======================================================================*/
3908 PROCEDURE init_for_tax_dist (
3909   p_event_class_rec        IN            ZX_API_PUB.event_class_rec_type,
3910   x_return_status          OUT NOCOPY    VARCHAR2 ) IS
3911 
3912 BEGIN
3913   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3914 
3915   IF (g_level_procedure >= g_current_runtime_level ) THEN
3916     FND_LOG.STRING(g_level_procedure,
3917                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_dist.BEGIN',
3918                    'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_dist(+)');
3919   END IF;
3920 
3921   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
3922 
3923   -- init gt tables
3924   DELETE FROM ZX_REC_NREC_DIST_GT;
3925 
3926   IF (g_level_procedure >= g_current_runtime_level ) THEN
3927     FND_LOG.STRING(g_level_procedure,
3928                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_dist',
3929                    'RETURN_STATUS = ' || x_return_status);
3930     FND_LOG.STRING(g_level_procedure,
3931                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_dist.END',
3932                    'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_dist(-)');
3933   END IF;
3934 
3935 EXCEPTION
3936   WHEN OTHERS THEN
3937     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3938     IF (g_level_unexpected >= g_current_runtime_level ) THEN
3939       FND_LOG.STRING(g_level_unexpected,
3940                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_dist',
3941                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3942       FND_LOG.STRING(g_level_unexpected,
3943                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_dist.END',
3944                      'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_dist(-)');
3945     END IF;
3946 
3947 END init_for_tax_dist;
3948 
3949 
3950 /* ======================================================================*
3951  |  PROCEDURE initialize is used to initialize the Global                |
3952  |  Structures / Global Temp Tables owned by TDM                         |
3953  * ======================================================================*/
3954 PROCEDURE initialize (
3955   p_event_class_rec        IN ZX_API_PUB.event_class_rec_type,
3956   p_init_level             IN VARCHAR2,
3957   x_return_status          OUT NOCOPY    VARCHAR2 ) IS
3958 
3959 BEGIN
3960 
3961   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3962 
3963   IF (g_level_procedure >= g_current_runtime_level ) THEN
3964     FND_LOG.STRING(g_level_procedure,
3965                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize.BEGIN',
3966                    'ZX_TDS_CALC_SERVICES_PUB_PKG.initialize(+)');
3967     FND_LOG.STRING(g_level_procedure,
3968                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
3969                    'p_init_level = ' || p_init_level);
3970   END IF;
3971 
3972   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
3973 
3974   IF p_init_level = 'SESSION' THEN
3975 
3976     init_for_session( x_return_status );
3977 
3978     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3979       IF (g_level_error >= g_current_runtime_level ) THEN
3980         FND_LOG.STRING(g_level_error,
3981                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
3982                       'Incorrect return_status after calling ' ||
3983                       'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_session()');
3984         FND_LOG.STRING(g_level_error,
3985                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
3986                       'RETURN_STATUS = ' || x_return_status);
3987         FND_LOG.STRING(g_level_error,
3988                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize.END',
3989                       'ZX_TDS_CALC_SERVICES_PUB_PKG.initialize(-)');
3990       END IF;
3991       RETURN;
3992     END IF;
3993 
3994   ELSIF p_init_level = 'HEADER' THEN
3995 
3996     init_for_header( p_event_class_rec,
3997 		     x_return_status );
3998 
3999     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4000       IF (g_level_error >= g_current_runtime_level ) THEN
4001         FND_LOG.STRING(g_level_error,
4002                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
4003                       'Incorrect return_status after calling ' ||
4004                       'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_header()');
4005         FND_LOG.STRING(g_level_error,
4006                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
4007                       'RETURN_STATUS = ' || x_return_status);
4008         FND_LOG.STRING(g_level_error,
4009                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize.END',
4010                       'ZX_TDS_CALC_SERVICES_PUB_PKG.initialize(-)');
4011       END IF;
4012       RETURN;
4013     END IF;
4014   ELSIF p_init_level = 'LINE' THEN
4015 
4016     init_for_line( p_event_class_rec,
4017 		   x_return_status );
4018 
4019     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4020       IF (g_level_error >= g_current_runtime_level ) THEN
4021         FND_LOG.STRING(g_level_error,
4022                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
4023                       'Incorrect return_status after calling ' ||
4024                       'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_line()');
4025         FND_LOG.STRING(g_level_error,
4026                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
4027                       'RETURN_STATUS = ' || x_return_status);
4028         FND_LOG.STRING(g_level_error,
4029                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize.END',
4030                       'ZX_TDS_CALC_SERVICES_PUB_PKG.initialize(-)');
4031      END IF;
4032      RETURN;
4033     END IF;
4034 
4035   ELSIF p_init_level = 'TAX_LINE' THEN
4036 
4037     init_for_tax_line( p_event_class_rec,
4038 			x_return_status );
4039 
4040     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4041       IF (g_level_error >= g_current_runtime_level ) THEN
4042         FND_LOG.STRING(g_level_error,
4043                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
4044                       'Incorrect return_status after calling ' ||
4045                       'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_line()');
4046         FND_LOG.STRING(g_level_error,
4047                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
4048                       'RETURN_STATUS = ' || x_return_status);
4049         FND_LOG.STRING(g_level_error,
4050                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize.END',
4051                       'ZX_TDS_CALC_SERVICES_PUB_PKG.initialize(-)');
4052       END IF;
4053       RETURN;
4054     END IF;
4055 
4056   ELSIF p_init_level = 'TAX_DISTRIBUTION' THEN
4057 
4058     init_for_tax_dist ( p_event_class_rec,
4059 			x_return_status );
4060 
4061     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4062       IF (g_level_error >= g_current_runtime_level ) THEN
4063         FND_LOG.STRING(g_level_error,
4064                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
4065                       'Incorrect return_status after calling ' ||
4066                       'ZX_TDS_CALC_SERVICES_PUB_PKG.init_for_tax_dist()');
4067         FND_LOG.STRING(g_level_error,
4068                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
4069                       'RETURN_STATUS = ' || x_return_status);
4070         FND_LOG.STRING(g_level_error,
4071                       'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize.END',
4072                       'ZX_TDS_CALC_SERVICES_PUB_PKG.initialize(-)');
4073       END IF;
4074       RETURN;
4075     END IF;
4076 
4077   END IF;
4078 
4079   IF (g_level_procedure >= g_current_runtime_level ) THEN
4080     FND_LOG.STRING(g_level_procedure,
4081                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
4082                    'RETURN_STATUS = ' || x_return_status);
4083     FND_LOG.STRING(g_level_procedure,
4084                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize.END',
4085                    'ZX_TDS_CALC_SERVICES_PUB_PKG.initialize(-)');
4086   END IF;
4087 
4088 EXCEPTION
4089   WHEN OTHERS THEN
4090     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4091     IF (g_level_unexpected >= g_current_runtime_level ) THEN
4092       FND_LOG.STRING(g_level_unexpected,
4093                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize',
4094                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
4095       FND_LOG.STRING(g_level_unexpected,
4096                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.initialize.END',
4097                      'ZX_TDS_CALC_SERVICES_PUB_PKG.initialize(-)');
4098     END IF;
4099 
4100 END initialize;
4101 
4102 PROCEDURE get_process_for_appl_flg (
4103   p_tax_prof_id    IN         NUMBER,
4104   x_return_status  OUT NOCOPY VARCHAR2 )
4105 IS
4106  CURSOR  get_process_for_appl_flg IS
4107  SELECT  process_for_applicability_flag
4108    FROM  zx_party_tax_profile
4109   WHERE  party_tax_profile_id = p_tax_prof_id;
4110 
4111  l_process_for_appl_flg  zx_party_tax_profile.process_for_applicability_flag%TYPE;
4112 
4113 BEGIN
4114   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
4115 
4116   IF (g_level_procedure >= g_current_runtime_level ) THEN
4117     FND_LOG.STRING(g_level_procedure,
4118                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_process_for_appl_flg.BEGIN',
4119                    'ZX_TDS_CALC_SERVICES_PUB_PKG.get_process_for_appl_flg(+)');
4120     FND_LOG.STRING(g_level_procedure,
4121                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_process_for_appl_flg',
4122                    'p_tax_prof_id = ' || p_tax_prof_id);
4123     FND_LOG.STRING(g_level_procedure,'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_process_for_appl_flg',
4124             'ZX_TDS_CALC_SERVICES_PUB_PKG.g_process_for_appl_flg set for supplier site is ' ||ZX_TDS_CALC_SERVICES_PUB_PKG.g_process_for_appl_flg);
4125   END IF;
4126 
4127 
4128   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
4129 
4130   -- Check if the tax calculation level from the party site is 'None'
4131   -- If it is 'None', skip the processing taxes for this transaction
4132   -- line get_process_for_appl_flg
4133   -- If the variable ZX_TDS_CALC_SERVICES_PUB_PKG.g_process_for_appl_flg was set
4134   -- for the supplier site within the rounding package then do not get the
4135   -- process for applicability flag for the rounding party tax profile. Added
4136   -- the if ZX_TDS_CALC_SERVICES_PUB_PKG.g_process_for_appl_flg IS NULL condition
4137   -- for this. Bug 7005483
4138   IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_process_for_appl_flg IS NULL THEN
4139     IF p_tax_prof_id IS NOT NULL THEN
4140       --Introducing caching logic..
4141       IF l_tax_prof_id_tbl.EXISTS(p_tax_prof_id)
4142          AND l_tax_prof_id_tbl(p_tax_prof_id).tax_prof_id = p_tax_prof_id THEN
4143            l_process_for_appl_flg := l_tax_prof_id_tbl(p_tax_prof_id).process_for_appl_flg;
4144       ELSE
4145         OPEN  get_process_for_appl_flg;
4146         FETCH get_process_for_appl_flg INTO l_process_for_appl_flg;
4147         CLOSE get_process_for_appl_flg;
4148 
4149         l_tax_prof_id_tbl(p_tax_prof_id).tax_prof_id := p_tax_prof_id;
4150         l_tax_prof_id_tbl(p_tax_prof_id).process_for_appl_flg := l_process_for_appl_flg;
4151       END IF;
4152       ZX_TDS_CALC_SERVICES_PUB_PKG.g_process_for_appl_flg := l_process_for_appl_flg;
4153     END IF;
4154   END IF;
4155 
4156   IF (g_level_procedure >= g_current_runtime_level ) THEN
4157 
4158     FND_LOG.STRING(g_level_procedure,
4159                    'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_process_for_appl_flg.END',
4160                    'ZX_TDS_CALC_SERVICES_PUB_PKG.get_process_for_appl_flg(-)'||'process for appl flag' ||g_process_for_appl_flg);
4161   END IF;
4162 
4163 EXCEPTION
4164   WHEN OTHERS THEN
4165     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4166     IF (g_level_unexpected >= g_current_runtime_level ) THEN
4167       FND_LOG.STRING(g_level_unexpected,
4168                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_process_for_appl_flg',
4169                       'No data found: p_tax_prof_id: '||p_tax_prof_id);
4170       FND_LOG.STRING(g_level_unexpected,
4171                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_process_for_appl_flg',
4172                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
4173       FND_LOG.STRING(g_level_unexpected,
4174                      'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.get_process_for_appl_flg.END',
4175                      'ZX_TDS_CALC_SERVICES_PUB_PKG.get_process_for_appl_flg(-)');
4176     END IF;
4177 
4178 END get_process_for_appl_flg;
4179 
4180 /* ======================================================================*
4181  |  CONSTRUCTOR                                                          |
4182  * ======================================================================*/
4183 BEGIN
4184   IF (g_level_procedure >= g_current_runtime_level ) THEN
4185    FND_LOG.STRING(g_level_procedure,
4186                   'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.constructor.BEGIN',
4187                   'ZX_TDS_CALC_SERVICES_PUB_PKG.constructor(+)');
4188 
4189   END IF;
4190 
4191   initialize;
4192 
4193   IF (g_level_procedure >= g_current_runtime_level ) THEN
4194    FND_LOG.STRING(g_level_procedure,
4195                   'ZX.PLSQL.ZX_TDS_CALC_SERVICES_PUB_PKG.constructor.END',
4196                   'ZX_TDS_CALC_SERVICES_PUB_PKG.constructor(-)');
4197   END IF;
4198 
4199 END ZX_TDS_CALC_SERVICES_PUB_PKG ;