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