DBA Data[Home] [Help]

PACKAGE BODY: APPS.ZX_TDS_APPLICABILITY_DETM_PKG

Source


1 PACKAGE BODY ZX_TDS_APPLICABILITY_DETM_PKG AS
2  /* $Header: zxditaxapplipkgb.pls 120.260.12010000.9 2009/02/05 14:33:21 tsen ship $ */
3 
4 PROCEDURE rule_base_pos_detm(
5  p_tax_id                   IN            zx_taxes_b.tax_id%TYPE,
6  p_tax_determine_date       IN            DATE,
7  p_tax_service_type_code    IN            zx_rules_b.service_type_code%TYPE,
8  p_event_class_rec          IN            zx_api_pub.event_class_rec_type,
9  p_trx_line_index           IN            BINARY_INTEGER,
10  x_alphanumeric_result         OUT NOCOPY VARCHAR2,
11  x_result_id                   OUT NOCOPY NUMBER,
12  x_return_status               OUT NOCOPY VARCHAR2);
13 
14 PROCEDURE add_tax_regime(
15  p_tax_regime_precedence    IN            zx_regimes_b.regime_precedence%TYPE,
16  p_tax_regime_id            IN            zx_regimes_b.tax_regime_id%TYPE,
17  p_tax_regime_code          IN            zx_regimes_b.tax_regime_code%TYPE,
18  p_parent_regime_code       IN            zx_regimes_b.parent_regime_code%TYPE,
19  p_country_code             IN            zx_regimes_b.country_code%TYPE,
20  p_geography_type           IN            zx_regimes_b.geography_type%TYPE,
21  p_geography_id             IN            zx_regimes_b.geography_id%TYPE,
22  p_effective_from           IN            zx_regimes_b.effective_from%TYPE,
23  p_effective_to             IN            zx_regimes_b.effective_to%TYPE,
24  x_return_status               OUT NOCOPY VARCHAR2);
25 
26 FUNCTION is_tax_applicable(
27  p_tax_id                   IN            zx_taxes_b.tax_id%TYPE,
28  p_tax_determine_date       IN            DATE,
29  p_applicability_rule_flag  IN            zx_taxes_b.applicability_rule_flag%TYPE,
30  p_event_class_rec          IN            zx_api_pub.event_class_rec_type,
31  p_trx_line_index           IN            BINARY_INTEGER,
32  p_applicable_by_default_flag  IN         zx_taxes_b.applicable_by_default_flag%TYPE,
33  x_applicability_result        OUT NOCOPY VARCHAR2,
34  x_applicability_result_id     OUT NOCOPY NUMBER,
35  x_return_status               OUT NOCOPY VARCHAR2) RETURN BOOLEAN;
36 
37 FUNCTION is_direct_rate_applicable(
38  p_tax_id                   IN            zx_taxes_b.tax_id%TYPE,
39  p_tax_determine_date       IN            DATE,
40  p_event_class_rec          IN            zx_api_pub.event_class_rec_type,
41  p_trx_line_index           IN            BINARY_INTEGER,
42  x_direct_rate_result_rec      OUT NOCOPY zx_process_results%ROWTYPE,
43  x_direct_rate_result_id       OUT NOCOPY NUMBER,
44  x_return_status               OUT NOCOPY VARCHAR2) RETURN BOOLEAN;
45 
46 PROCEDURE populate_registration_info(
47  p_event_class_rec     IN            zx_api_pub.event_class_rec_type,
48  p_trx_line_index      IN            NUMBER,
49  p_rownum              IN            NUMBER,
50  p_def_reg_type        IN            zx_taxes_b.def_registr_party_type_code%TYPE,
51  p_reg_rule_flg        IN            zx_taxes_b.registration_type_rule_flag%TYPE,
52  p_tax_determine_date  IN            DATE,
53  x_return_status          OUT NOCOPY VARCHAR2);
54 
55 -- Added for bug 4959835
56 PROCEDURE handle_update_scenarios(
57  p_trx_line_index     IN            BINARY_INTEGER,
58  p_event_class_rec    IN            zx_api_pub.event_class_rec_type,
59  p_row_num                        IN                    NUMBER,
60  p_tax_regime_code        IN                    zx_regimes_b.tax_regime_code%TYPE,
61  p_tax                            IN                    zx_taxes_b.tax%TYPE,
62  p_tax_date           IN            DATE,
63  p_tax_determine_date IN            DATE,
64  p_tax_point_date     IN            DATE,
65  x_self_assessed_flag    OUT NOCOPY     zx_lines.self_assessed_flag%TYPE,
66  x_tax_amt_included_flag OUT NOCOPY zx_lines.tax_amt_included_flag%TYPE,
67  x_tax_jurisdiction_id   OUT NOCOPY zx_lines.tax_jurisdiction_id%TYPE,
68  x_tax_jurisdiction_code OUT NOCOPY zx_lines.tax_jurisdiction_code%TYPE,
69  x_return_status             OUT NOCOPY VARCHAR2);
70 
71  PROCEDURE enforce_tax_from_ref_doc(
72   p_begin_index     IN            BINARY_INTEGER,
73   p_end_index       IN            BINARY_INTEGER,
74   p_trx_line_index  IN            BINARY_INTEGER,
75   x_return_status          OUT NOCOPY VARCHAR2);
76 
77 -- End: Bug 4959835
78 
79  g_current_runtime_level      NUMBER;
80  g_level_statement            CONSTANT NUMBER   := FND_LOG.LEVEL_STATEMENT;
81  g_level_procedure            CONSTANT NUMBER   := FND_LOG.LEVEL_PROCEDURE;
82  g_level_event                CONSTANT NUMBER   := FND_LOG.LEVEL_EVENT;
83  g_level_error                CONSTANT NUMBER   := FND_LOG.LEVEL_ERROR;
84  g_level_unexpected           CONSTANT NUMBER   := FND_LOG.LEVEL_UNEXPECTED;
85 
86  -- cache the most inner and outer jurisdiction
87  g_inner_jurisdiction_code    ZX_JURISDICTIONS_B.tax_jurisdiction_code%TYPE;
88  g_inner_jurisdiction_id      ZX_JURISDICTIONS_B.tax_jurisdiction_id%TYPE;
89  g_outer_jurisdiction_code    ZX_JURISDICTIONS_B.tax_jurisdiction_code%TYPE;
90  g_outer_jurisdiction_id      ZX_JURISDICTIONS_B.tax_jurisdiction_id%TYPE;
91 
92  g_trx_line_id       ZX_LINES.trx_line_id%TYPE;
93 
94 -------------------------------------------------------------------------------
95 --  PUBLIC PROCEDURE
96 --  get_tax_date
97 --
98 --  DESCRIPTION
99 -- This procedure is used to determine the tax determination date.
100 -- Tax determination date will be used to check the validity of all entities
101 -- used in tax determination which have start and end dates such as rates,
102 -- rules etc.
103 
104 -- This procedure will support deriving the tax point date and tax exchange
105 -- rate date in later phases.
106 -------------------------------------------------------------------------------
107 
108 PROCEDURE get_tax_date
109      (p_trx_line_index        IN             BINARY_INTEGER,
110       x_tax_date                 OUT NOCOPY  DATE,
111       x_tax_determine_date       OUT NOCOPY  DATE,
112       x_tax_point_date           OUT NOCOPY  DATE,
113       x_return_status            OUT NOCOPY  VARCHAR2) IS
114 
115 BEGIN
116 
117   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
118 
119   IF (g_level_statement >= g_current_runtime_level ) THEN
120     FND_LOG.STRING(g_level_statement,
121                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_date.BEGIN',
122                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_date(+)');
123   END IF;
124 
125   x_return_status := FND_API.G_RET_STS_SUCCESS;
126 
127   x_tax_date :=
128     NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.related_doc_date(p_trx_line_index),
129      NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.provnl_tax_determination_date(p_trx_line_index),
130       NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_date(p_trx_line_index),
131        NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_date(p_trx_line_index),
132         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_date(p_trx_line_index)))));
133 
134   x_tax_determine_date :=
135     NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.related_doc_date(p_trx_line_index),
136      NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.provnl_tax_determination_date(p_trx_line_index),
137       NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_date(p_trx_line_index),
138        NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_date(p_trx_line_index),
139         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_date(p_trx_line_index)))));
140   x_tax_point_date :=
141     NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.related_doc_date(p_trx_line_index),
142      NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.provnl_tax_determination_date(p_trx_line_index),
143       NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_date(p_trx_line_index),
144        NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_date(p_trx_line_index),
145         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_date(p_trx_line_index)))));
146 
147   IF (g_level_procedure >= g_current_runtime_level ) THEN
148     FND_LOG.STRING(g_level_procedure,
149                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_date(-)',
150                    'Tax date = ' || to_char(x_tax_date, 'DD-MON-YY')||'Tax determine date = ' || to_char(x_tax_determine_date, 'DD-MON-YY')||'Tax point date = ' || to_char(x_tax_point_date, 'DD-MON-YY'));
151   END IF;
152 
153 EXCEPTION
154   WHEN OTHERS THEN
155     x_tax_date := NULL;
156     x_tax_determine_date := NULL;
157     x_tax_point_date := NULL;
158     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
159 
160     IF (g_level_unexpected >= g_current_runtime_level ) THEN
161       FND_LOG.STRING(g_level_unexpected,
162                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_date',
163                      sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
164       FND_LOG.STRING(g_level_unexpected,
165                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_date.END',
166                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_date(-)');
167     END IF;
168 
169 END get_tax_date;
170 
171 ----------------------------------------------------------------------
172 --  PUBLIC PROCEDURE
173 --  get_applicable_regimes
174 --
175 --  DESCRIPTION
176 --
177 --  This procedure returns applicable tax regimes for each transaction line
178 --  and also unique tax regimes for whole transaction
179 --
180 --  IN     p_event_class_rec
181 --         p_event_rec
182 --  OUT NOCOPY    x_return_status
183 --
184 ----------------------------------------------------------------------
185 PROCEDURE get_applicable_regimes (
186   p_trx_line_index        IN          BINARY_INTEGER,
187   p_event_class_rec       IN          zx_api_pub.event_class_rec_type,
188   x_return_status         OUT NOCOPY  VARCHAR2) IS
189 
190  TYPE country_rec_type IS RECORD (
191         country_code    zx_regimes_b.country_code%TYPE);
192  TYPE geography_rec_type IS RECORD (
193         geography_id            hz_geographies.geography_id%TYPE);
194 
195  TYPE country_tab_type IS TABLE OF country_rec_type INDEX BY BINARY_INTEGER;
196  TYPE geography_tab_type IS TABLE OF geography_rec_type INDEX BY BINARY_INTEGER;
197 
198  TYPE det_factor_code_tab_type IS TABLE OF
199     zx_determining_factors_b.determining_factor_code%TYPE INDEX BY BINARY_INTEGER;
200  TYPE det_factor_class_tab_type is TABLE of
201    zx_determining_factors_b.Determining_Factor_Class_Code%TYPE INDEX BY BINARY_INTEGER;
202  TYPE regime_det_level_tab_type IS TABLE OF
203     zx_det_factor_templ_dtl.tax_regime_det_level_code%TYPE INDEX BY BINARY_INTEGER;
204 
205  l_location_id          NUMBER;
206  l_country_code         zx_regimes_b.country_code%TYPE;
207  l_country_idx          NUMBER;
208  table_size             NUMBER;
209  l_error_buffer         VARCHAR2(256);
210  l_geography_id         NUMBER;
211  l_msg_count            NUMBER;
212  l_msg_data             VARCHAR2(2000);
213 
214  l_country_tab          country_tab_type;
215  l_geography_tab        geography_tab_type;
216  l_null_country_tab     country_tab_type;
217  l_det_factor_code_tab  det_factor_code_tab_type;
218  l_det_factor_class_tab det_factor_class_tab_type;
219  l_regime_det_level_tab regime_det_level_tab_type;
220 
221  l_country_num          NUMBER;
222  l_geo_num              NUMBER;
223  l_index                NUMBER;
224  l_new_row_num          NUMBER;
225  l_structure_name       VARCHAR2(30);
226  l_geography_name       VARCHAR2(360);
227  l_location_type        VARCHAR2(30);
228  l_null_country_loc_type   VARCHAR2(30);
229  l_null_country_loc_id   NUMBER;
230 
231  b_location_found       BOOLEAN;
232 
233  l_location_list        VARCHAR2(1000); -- maximum is 13*30
234 
235  l_tax_date             DATE;
236  l_tax_determine_date   DATE;
237  l_tax_point_date       DATE;
238 
239  CURSOR get_det_factor_details_cur (
240         p_reg_template_code    p_event_class_rec.det_factor_templ_code%TYPE) IS
241     SELECT zxdtd.determining_factor_code,
242            zxdtd.determining_factor_class_code,
243            zxdtd.tax_regime_det_level_code
244     FROM   zx_det_factor_templ_b zxdt,
245            zx_det_factor_templ_dtl zxdtd
246     WHERE  zxdtd.det_factor_templ_id = zxdt.det_factor_templ_id
247       AND  zxdt.det_factor_templ_code = p_reg_template_code;
248 
249  -- Assuming the fact that taxes can be defined only for child regimes, fetch
250  -- all regimes that have taxes defined for a given country p_country_code.
251  -- the following cursor is assuming that tax_regime_precedence is available
252  -- in zx_regimes_b
253  --
254  CURSOR get_tax_regime_info_cur(p_country_code varchar2,
255                                 p_tax_determine_date DATE) IS
256    SELECT tax_regime_id,
257           regime_precedence,
258           tax_regime_code,
259           parent_regime_code,
260           country_code,
261           geography_type,
262           geography_id,
263           effective_from,
264           effective_to
265      FROM ZX_REGIMES_B_V  r
266     WHERE country_code = p_country_code
267       AND (p_tax_determine_date >= effective_from AND
268           (p_tax_determine_date <= effective_to OR effective_to IS NULL))
269       AND EXISTS (SELECT /*+ no_unnest */ 1
270                     FROM ZX_SCO_TAXES_B_V  t
271                    WHERE t.tax_regime_code = r.tax_regime_code
272                      AND t.live_for_processing_flag = 'Y'
273                      AND t.live_for_applicability_flag = 'Y'
274                      AND (p_tax_determine_date >= t.effective_from AND
275                          (p_tax_determine_date <= t.effective_to OR t.effective_to IS NULL)))
276  ORDER BY regime_precedence;
277 
278  CURSOR get_zone_level_regimes_cur(c_geography_id   NUMBER, c_date  Date) IS
279    SELECT tax_regime_id,
280           regime_precedence,
281           tax_regime_code,
282           parent_regime_code,
283           country_code,
284           geography_type,
285           geography_id,
286           effective_from,
287           effective_to
288      FROM ZX_REGIMES_B_V regime,
289           hz_relationships relation
290     WHERE relation.object_id = c_geography_id
291       AND relation.object_type = 'COUNTRY'
292       AND relation.subject_id = regime.geography_id
293       AND relation.subject_type = regime.geography_type
294       AND c_date >= relation.start_date
295       AND (c_date <= relation.end_date OR relation.end_date IS NULL)
296       AND (c_date >= regime.effective_from AND
297           (c_date <= regime.effective_to OR regime.effective_to IS NULL))
298       AND EXISTS (SELECT /*+ no_unnest */ 1
299                     FROM ZX_SCO_TAXES_B_V  tax
300                    WHERE tax.tax_regime_code = regime.tax_regime_code
301                      AND tax.live_for_processing_flag = 'Y'
302                      AND tax.live_for_applicability_flag = 'Y'
303                      AND (c_date >= tax.effective_from AND
304                          (c_date <= tax.effective_to OR tax.effective_to IS NULL)))
305  ORDER BY regime.regime_precedence;
306 
307 BEGIN
308 
309   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
310 
311   IF (g_level_procedure >= g_current_runtime_level ) THEN
312     FND_LOG.STRING(g_level_procedure,
313                   'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes.BEGIN',
314                   'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes(+)');
315   END IF;
316 
317   x_return_status := FND_API.G_RET_STS_SUCCESS;
318 
319   b_location_found := FALSE;
320   table_size       := 2048;
321 
322   -- Validations
323   IF p_event_class_rec.det_factor_templ_code IS NULL THEN
324 
325     IF (g_level_error >= g_current_runtime_level ) THEN
326        FND_LOG.STRING(g_level_error,
327                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
328                      'Event Class does not contain Regime Template');
329     END IF;
330 
331      x_return_status := FND_API.G_RET_STS_ERROR;     -- bug 4893261
332      RETURN;
333   END IF;
334 
335   -- Get information about all drivers correponding to the template code
336   -- EVENT_CLASS_REC_TYPE structure contains only one record at any give time.
337   --
338   OPEN  get_det_factor_details_cur(p_event_class_rec.det_factor_templ_code);
339 
340   FETCH get_det_factor_details_cur
341         BULK COLLECT INTO l_det_factor_code_tab,
342                           l_det_factor_class_tab,
343                           l_regime_det_level_tab;
344   CLOSE get_det_factor_details_cur;
345 
346   -- Re-initialize the country table when beginning to process
347   -- a p_transaction_line_tbl line
348   --
349   l_country_tab := l_null_country_tab;
350 
351   -- This loop will determine all the countries associated with a line and
352   -- add them to the l_country_tab table
353   --
354 
355   FOR l_det_factor_tab_rownum IN NVL(l_det_factor_code_tab.FIRST, 0) ..
356                                  NVL(l_det_factor_code_tab.LAST, -1)
357   LOOP
358     -- fetch parameter value(location_id) for each parameter name of driver
359 
360     l_structure_name := 'TRX_LINE_DIST_TBL';
361     ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value(
362            p_struct_name     => l_structure_name,
363            p_struct_index    => p_trx_line_index,
364            p_tax_param_code  => l_det_factor_code_tab(l_det_factor_tab_rownum),
365            x_tax_param_value => l_location_id,
366            x_return_status   => x_return_status );
367 
368     IF NVL(x_return_status,FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
369     THEN
370 
371       IF (g_level_statement >= g_current_runtime_level ) THEN
372         FND_LOG.STRING(g_level_statement,
373                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
374                       'The value of return_status is not ''S'' after calling '||
375                       'ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value');
376         FND_LOG.STRING(g_level_statement,
377                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
378                       'RETURN_STATUS = ' || x_return_status);
379         FND_LOG.STRING(g_level_statement,
380                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes.END',
381                       'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes(-)');
382       END IF;
383       RETURN;
384     END IF;
385 
386    -- If the location_id returned is NOT NULL
387    --
388    IF l_location_id IS NOT NULL THEN
389 
390       IF NOT b_location_found THEN
391          b_location_found := TRUE;
392       END IF;
393 
394       -- Fetch Country code for each parameter value of driver(location_id)
395       --
396       l_location_type := substr(l_det_factor_code_tab(l_det_factor_tab_rownum),1,
397           length(l_det_factor_code_tab(l_det_factor_tab_rownum))-12);
398 
399       ZX_TCM_GEO_JUR_PKG.get_master_geography (
400                      p_location_id    => l_location_id,
401                      p_location_type  => l_location_type,
402                      p_geography_type => 'COUNTRY',
403                      x_geography_id   => l_geography_id,
404                      x_geography_code => l_country_code,
405                      x_geography_name => l_geography_name,
406                      x_return_status  => x_return_status);
407 
408 
409       IF NVL(x_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
410       THEN
411 
412         IF (g_level_statement >= g_current_runtime_level ) THEN
413           FND_LOG.STRING(g_level_statement,
414                         'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
415                         'Incorrect return_status after calling '||
416                         'ZX_TCM_CONTROL_PKG.get_location_country');
417           FND_LOG.STRING(g_level_statement,
418                         'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
419                         'RETURN_STATUS = ' || x_return_status);
420           FND_LOG.STRING(g_level_statement,
421                         'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes.END',
422                         'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes(-)');
423         END IF;
424         --
425         -- add error message before return
426         --
427         FND_MESSAGE.SET_NAME ('ZX', 'ZX_GENERIC_TEXT');
428         FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','Unable to determine the Country code for the Location id: '||
429                               l_location_id||' and Location type: '||l_location_type);
430 
431         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
432           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
433         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
434           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
435 
436         ZX_API_PUB.add_msg(
437             ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
438         RETURN;
439       END IF;
440 
441       -- If status is normal and country code is associated to
442       -- determining factor(location)
443       --
444       IF (l_country_code IS NOT NULL) THEN
445 
446         -- Get hash value for country code
447         --
448         l_country_idx := dbms_utility.get_hash_value (l_country_code, 1, TABLE_SIZE);
449 
450         -- Check if country (hash value) already exists.
451         --
452         IF NOT l_country_tab.EXISTS(l_country_idx) THEN
453           l_country_tab(l_country_idx).country_code := l_country_code;
454         END IF;
455 
456         -- If regime_determination_level is 'ZONE', populate l_zone_tbl
457         --
458         IF l_regime_det_level_tab(l_det_factor_tab_rownum) = 'ZONE' THEN
459 
460           IF NOT l_geography_tab.EXISTS(l_geography_id) THEN
461             l_geography_tab(l_geography_id).geography_id := l_geography_id;
462           END IF;
463         END IF;
464       ELSE
465       --  l_country_tab := l_null_country_tab;
466           l_null_country_loc_id := l_location_id;
467           l_null_country_loc_type := l_location_type;
468         --EXIT;
469         /*x_return_status := FND_API.G_RET_STS_ERROR;
470 
471         FND_MESSAGE.SET_NAME ('ZX', 'ZX_NO_COUNTRY_CODE_FOUND');
472         FND_MESSAGE.SET_TOKEN('LOCATION_TYPE', l_location_type);
473 
474         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
475           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
476         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
477           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
478 
479         ZX_API_PUB.add_msg(
480             ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
481 
482         */
483         IF (g_level_statement >= g_current_runtime_level ) THEN
484            FND_LOG.STRING(g_level_statement,
485                          'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
486                          'No Country Code defined for the location: '|| l_location_id);
487         END IF;
488 
489         --RETURN;
490       END IF;    -- l_country_code
491    END IF;       -- l_location_id is not null
492 
493    -- concatenate the location factor for the error msg.
494    IF l_det_factor_tab_rownum =  l_det_factor_code_tab.FIRST THEN
495      l_location_list := l_det_factor_code_tab(l_det_factor_tab_rownum);
496    ELSE
497      l_location_list := l_location_list || ', ' || l_det_factor_code_tab(l_det_factor_tab_rownum);
498    END IF;
499 
500   END LOOP;    -- l_driver_id_tab
501 
502         -- As a part of 6798559 fix
503     IF l_country_tab.count = 0 THEN
504 
505         x_return_status := FND_API.G_RET_STS_ERROR;
506 
507         FND_MESSAGE.SET_NAME ('ZX', 'ZX_NO_COUNTRY_CODE_FOUND');
508         FND_MESSAGE.SET_TOKEN('LOCATION_TYPE', l_null_country_loc_type);
509 
510         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
511           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
512         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
513           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
514 
515         ZX_API_PUB.add_msg(
516             ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
517 
518         RETURN;
519 
520     END IF;
521   -- End of processing for all the drivers for a line in the
522   -- transaction line Memory Structure (IN parameter to this procedure)
523 
524   IF NOT b_location_found THEN
525    --Bug 5065057
526   /*  x_return_status := FND_API.G_RET_STS_ERROR;
527     FND_MESSAGE.SET_NAME ('ZX', 'ZX_NO_LOCATIONS_FOUND');
528     FND_MESSAGE.SET_TOKEN('TEMPLATE_NAME', p_event_class_rec.det_factor_templ_code);
529     FND_MESSAGE.SET_TOKEN('LOCATIONS_LIST', l_location_list);
530 
531     ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
532       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
533     ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
534       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
535 
536     ZX_API_PUB.add_msg(
537         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);*/
538 
539     RETURN;
540   END IF;
541 
542   -- If p_status is error then break form transaction line and return error.
543 --    IF (x_return_status  <> FND_API.G_RET_STS_SUCCESS) THEN
544 --      EXIT;
545 --    END IF;
546 
547   -- This loop will determine the Regimes corresponding to the different
548   -- countries in the l_country_tab structure and insert into the
549   -- p_detail_tax_regime_tbl for each line and p_tax_regime_tbl for unique
550   -- regimes on whole document.
551   --
552   l_country_num := l_country_tab.FIRST;
553   l_geo_num := l_geography_tab.FIRST;
554 
555   IF l_country_num IS NOT NULL OR l_geo_num IS NOT NULL THEN
556 
557     get_tax_date( p_trx_line_index,
558                 l_tax_date,
559                 l_tax_determine_date,
560                 l_tax_point_date,
561                 x_return_status);
562 
563     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
564       IF (g_level_error >= g_current_runtime_level ) THEN
565         FND_LOG.STRING(g_level_error,
566                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
567                'Incorrect return_status after calling ' ||
568                'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_date()');
569         FND_LOG.STRING(g_level_error,
570                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
571                'RETURN_STATUS = ' || x_return_status);
572         FND_LOG.STRING(g_level_error,
573                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes.END',
574                'ZX_TDS_CALC_SERVICES_PUB_PKG.calculate_tax(-)');
575       END IF;
576       RETURN;
577     END IF;
578   END IF;
579 
580   WHILE l_country_num IS NOT NULL LOOP
581 
582     l_country_code := l_country_tab(l_country_num).country_code;
583 
584     FOR l_regime_rec in get_tax_regime_info_cur(l_country_code, l_tax_determine_date) LOOP
585 
586       --
587       -- Bug#5440023- do not poplate detail_tax_regime_tbl
588       -- for partner integration with 'LINE_INFO_TAX_ONLY' lines
589       --
590       IF NOT (NVL(ZX_GLOBAL_STRUCTURES_PKG.g_ptnr_srvc_subscr_flag, 'N') = 'Y' AND
591               ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action (p_trx_line_index ) =  'LINE_INFO_TAX_ONLY' ) THEN
592 
593         l_new_row_num :=
594                  NVL(ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl.last, 0) + 1;
595 
596         ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl(l_new_row_num).trx_line_index
597                                                                := p_trx_line_index;
598         ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl(l_new_row_num).tax_regime_id
599                                                      := l_regime_rec.tax_regime_id;
600         ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl(
601             l_new_row_num).tax_regime_precedence := l_regime_rec.regime_precedence;
602       END IF;
603 
604       IF NOT ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.EXISTS(l_regime_rec.tax_regime_id)
605       THEN
606         add_tax_regime (
607                 l_regime_rec.regime_precedence,
608                 l_regime_rec.tax_regime_id,
609                 l_regime_rec.tax_regime_code,
610                 l_regime_rec.parent_regime_code,
611                 l_regime_rec.country_code,
612                 l_regime_rec.geography_type,
613                 l_regime_rec.geography_id,
614                 l_regime_rec.effective_from,
615                 l_regime_rec.effective_to,
616                 x_return_status );
617 
618         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
619           IF (g_level_error >= g_current_runtime_level ) THEN
620             FND_LOG.STRING(g_level_error,
621                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
622                            'Incorrect return_status after calling ' ||
623                            'ZX_TDS_APPLICABILITY_DETM_PKG.add_tax_regime');
624             FND_LOG.STRING(g_level_error,
625                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
626                            'RETURN_STATUS = ' || x_return_status);
627             FND_LOG.STRING(g_level_error,
628                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes.END',
629                            'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes(-)');
630           END IF;
631 
632           RETURN;
633         END IF;
634       END IF;     -- NOT tax_regime_tbl.EXISTS(tax_regime_id)
635     END LOOP;     -- added all the regimes for one country and one line
636 
637     -- Process next country
638     --
639     l_country_num := l_country_tab.NEXT(l_country_num);
640 
641   END LOOP;  -- end of processing for all the countries for one line
642 
643   -- Determine the Regimes corresponding to tax_zones
644   --
645   -- l_geo_num := l_geography_tab.FIRST; -- moved up
646 
647   WHILE l_geo_num IS NOT NULL LOOP
648 
649     FOR l_regime_rec IN get_zone_level_regimes_cur(
650         l_geography_tab(l_geo_num).geography_id, l_tax_determine_date) LOOP
651 
652       --
653       -- Bug#5440023- do not poplate detail_tax_regime_tbl
654       -- for partner integration with 'LINE_INFO_TAX_ONLY' lines
655       --
656       IF NOT (NVL(ZX_GLOBAL_STRUCTURES_PKG.g_ptnr_srvc_subscr_flag, 'N') = 'Y' AND
657               ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action (p_trx_line_index ) =  'LINE_INFO_TAX_ONLY' ) THEN
658 
659         l_new_row_num :=
660                  NVL(ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl.last, 0) + 1;
661 
662         ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl(l_new_row_num).trx_line_index
663                                                                := p_trx_line_index;
664         ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl(l_new_row_num).tax_regime_id
665                                                      := l_regime_rec.tax_regime_id;
666         ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl(
667             l_new_row_num).tax_regime_precedence := l_regime_rec.regime_precedence;
668       END IF;
669 
670       IF NOT ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.EXISTS(l_regime_rec.tax_regime_id)
671       THEN
672         add_tax_regime (
673                 l_regime_rec.regime_precedence,
674                 l_regime_rec.tax_regime_id,
675                 l_regime_rec.tax_regime_code,
676                 l_regime_rec.parent_regime_code,
677                 l_regime_rec.country_code,
678                 l_regime_rec.geography_type,
679                 l_regime_rec.geography_id,
680                 l_regime_rec.effective_from,
681                 l_regime_rec.effective_to,
682                 x_return_status );
683 
684         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
685           IF (g_level_error >= g_current_runtime_level ) THEN
686             FND_LOG.STRING(g_level_error,
687                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
688                            'Incorrect return_status after calling ' ||
689                            'ZX_TDS_APPLICABILITY_DETM_PKG.add_tax_regime');
690             FND_LOG.STRING(g_level_error,
691                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
692                            'RETURN_STATUS = ' || x_return_status);
693             FND_LOG.STRING(g_level_error,
694                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes.END',
695                            'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes(-)');
696           END IF;
697 
698           RETURN;
699         END IF;
700       END IF;     -- NOT tax_regime_tbl.EXISTS(tax_regime_id)
701     END LOOP;     -- added all the regimes for one zone and one line
702 
703     -- Process next geography_id
704     --
705     l_geo_num := l_geography_tab.NEXT(l_geo_num);
706 
707   END LOOP;  -- end of processing for all the zones for one line
708 
709   -- Return with ERROR status when there are no regimes.
710   -- This also handles the validation of atleast one driver parameter having
711   -- value for a transaction.
712   --
713   IF ((NVL(l_country_tab.COUNT, 0) > 0 OR NVL(l_geography_tab.count, 0) > 0) AND
714        NVL(ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.COUNT, 0) = 0) THEN
715 --    x_return_status := FND_API.G_RET_STS_ERROR;
716     IF (g_level_statement >= g_current_runtime_level ) THEN
717       FND_LOG.STRING(g_level_statement,
718                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
719                     'No Applicable Regimes');
720       FND_LOG.STRING(g_level_statement,
721                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes.END',
722                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes(-)');
723     END IF;
724     RETURN;
725   END IF;
726 
727   IF (g_level_statement >= g_current_runtime_level ) THEN
728     FND_LOG.STRING(g_level_statement,
729                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
730                    'Count for distinct Countries is: '||
731                     NVL( l_country_tab.COUNT,0));
732   END IF;
733 
734   IF (g_level_procedure >= g_current_runtime_level ) THEN
735     FND_LOG.STRING(g_level_procedure,
736                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
737                    'Count for applicable regimes is: '||
738                     nvl(ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.COUNT,0));
739   END IF;
740 
741   IF (g_level_procedure >= g_current_runtime_level ) THEN
742     FND_LOG.STRING(g_level_procedure,
743                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes.END',
744                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes(-)');
745   END IF;
746 
747   EXCEPTION
748     WHEN OTHERS THEN
749     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
750 
751     IF (g_level_unexpected >= g_current_runtime_level ) THEN
752       FND_LOG.STRING(g_level_unexpected,
753                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
754                      sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
755       FND_LOG.STRING(g_level_unexpected,
756                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes.END',
757                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes(-)');
758     END IF;
759 
760 END get_applicable_regimes;
761 
762 
763 ----------------------------------------------------------------------
764 --  PRIVATE PROCEDURE
765 --  add_tax_regime
766 --
767 --  DESCRIPTION
768 --
769 --  This procedure determines if the Regime already exists and adds the regime
770 --  to p_tax_regime_tbl only when the same regime doesn't exist
771 --
772 --  IN     p_tax_regime_precedence
773 --         p_tax_regime_id
774 --  OUT    x_return_status
775 ----------------------------------------------------------------------
776 
777 PROCEDURE add_tax_regime (
778   p_tax_regime_precedence IN          zx_regimes_b.regime_precedence%TYPE,
779   p_tax_regime_id         IN          zx_regimes_b.tax_regime_id%TYPE,
780   p_tax_regime_code       IN          zx_regimes_b.tax_regime_code%TYPE,
781   p_parent_regime_code    IN          zx_regimes_b.parent_regime_code%TYPE,
782   p_country_code          IN          zx_regimes_b.country_code%TYPE,
783   p_geography_type        IN          zx_regimes_b.geography_type%TYPE,
784   p_geography_id          IN          zx_regimes_b.geography_id%TYPE,
785   p_effective_from        IN          zx_regimes_b.effective_from%TYPE,
786   p_effective_to          IN          zx_regimes_b.effective_to%TYPE,
787   x_return_status         OUT NOCOPY  VARCHAR2) IS
788 
789  l_next_regime_num number;
790 
791 BEGIN
792 
793   x_return_status := FND_API.G_RET_STS_SUCCESS;
794 
795   -- insert the regime_id and the regime_precedence using the regime_id as the
796   -- subscript of the p_Tax_regime_tbl. Hence, when the same tax_regime_id is
797   -- passed multiple times, we overwrite the p_tax_regime_tbl(tax_regime_id) row
798 
799   ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(p_tax_regime_id).tax_regime_precedence :=
800                                                              p_tax_regime_precedence;
801   ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(p_tax_regime_id).tax_regime_id :=
802                                                                 p_tax_regime_id;
803   ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(p_tax_regime_id).tax_regime_code :=
804                                                               p_tax_regime_code;
805   ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(p_tax_regime_id).parent_regime_code :=
806                                                             p_parent_regime_code;
807   ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(p_tax_regime_id).country_code :=
808                                                                   p_country_code;
809   ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(p_tax_regime_id).geography_type :=
810                                                                 p_geography_type;
811   ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(p_tax_regime_id).geography_id :=
812                                                                   p_geography_id;
813   ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(p_tax_regime_id).effective_from :=
814                                                                 p_effective_from;
815   ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(p_tax_regime_id).effective_to :=
816                                                                   p_effective_to;
817 
818 EXCEPTION
819   WHEN OTHERS THEN
820     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
821 
822     IF (g_level_unexpected >= g_current_runtime_level ) THEN
823       FND_LOG.STRING(g_level_unexpected,
824                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.add_tax_regime',
825                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
826       FND_LOG.STRING(g_level_unexpected,
827                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.add_tax_regime.END',
828                      'ZX_TDS_APPLICABILITY_DETM_PKG.add_tax_regime(-)');
829     END IF;
830 
831 END add_tax_regime;
832 
833 
834 ----------------------------------------------------------------------
835 --  PRIVATE PROCEDURE
836 --  is_tax_applicable
837 --
838 --  DESCRIPTION
839 --
840 --  This procedure returns if the tax is applicable or not for a given regime
841 --  TRUE  - Applicable
842 --  FALSE - Not Applicable
843 --
844 --  IN     p_event_class_rec
845 --         p_tax_id
846 --         p_tax_determine_date
847 --         p_applicability_rule_flag
848 --         p_trx_line_index
849 -- OUT     x_applicability_result
850 --         x_applicability_result_id
851 --         x_return_status
852 ----------------------------------------------------------------------
853 FUNCTION is_tax_applicable (
854   p_tax_id                   IN        zx_taxes_b.tax_id%TYPE,
855   p_tax_determine_date       IN        DATE,
856   p_applicability_rule_flag  IN        zx_taxes_b.applicability_rule_flag%TYPE,
857   p_event_class_rec          IN        zx_api_pub.event_class_rec_type,
858   p_trx_line_index           IN        BINARY_INTEGER,
859   p_applicable_by_default_flag  IN     zx_taxes_b.applicable_by_default_flag%TYPE,
860   x_applicability_result     OUT NOCOPY  VARCHAR2,
861   x_applicability_result_id  OUT NOCOPY  NUMBER,
862   x_return_status            OUT NOCOPY  VARCHAR2) RETURN BOOLEAN IS
863 
864  l_tax_service_type_code zx_rules_b.service_type_code%TYPE;
865  l_result   BOOLEAN;
866 
867 BEGIN
868 
869   IF (g_level_procedure >= g_current_runtime_level ) THEN
870     FND_LOG.STRING(g_level_procedure,
871                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable.BEGIN',
872                    'ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable(+)');
873   END IF;
874 
875   IF (g_level_statement >= g_current_runtime_level ) THEN
876     FND_LOG.STRING(g_level_statement,
877                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable',
878                    'l_applicability_rule_flag: '|| p_applicability_rule_flag);
879   END IF;
880 
881   x_return_status := FND_API.G_RET_STS_SUCCESS;
882 
883   l_tax_service_type_code := 'DET_APPLICABLE_TAXES';
884   l_result                := FALSE;
885 
886   IF NVL(p_applicability_rule_flag, 'N') = 'N' THEN
887     -- Bug fix: 4874898
888     --  l_result := TRUE;
889     IF p_applicable_by_default_flag = 'Y' THEN
890       l_result :=TRUE;
891     END IF;
892   ELSIF p_applicability_rule_flag = 'Y' THEN
893 
894     rule_base_pos_detm(
895                 p_tax_id                =>  p_tax_id,
896                 p_tax_determine_date    =>  p_tax_determine_date,
897                 p_tax_service_type_code =>  l_tax_service_type_code,
898                 p_event_class_rec       =>  p_event_class_rec,
899                 p_trx_line_index        =>  p_trx_line_index,
900                 x_alphanumeric_result   => x_applicability_result,
901                 x_result_id             => x_applicability_result_id,
902                 x_return_status         => x_return_status);
903 
904     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
905       IF (g_level_statement >= g_current_runtime_level ) THEN
906         FND_LOG.STRING(g_level_statement,
907                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable',
908                'Incorrect return_status after calling ' ||
909                'ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm');
910          FND_LOG.STRING(g_level_statement,
911                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable',
912                 'RETURN_STATUS = ' || x_return_status);
913          FND_LOG.STRING(g_level_statement,
914                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable.END',
915                 'ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable(-)');
916       END IF;
917       RETURN FALSE;
918     END IF;
919 
920     IF ( x_applicability_result = 'APPLICABLE') THEN
921       l_result := TRUE;
922     ELSE
923       l_result := FALSE;
924       -- Bug fix: 4874898
925       IF x_applicability_result_id IS NULL
926         AND p_applicable_by_default_flag = 'Y'
927       THEN
928         l_result :=TRUE;
929       END IF;
930     END IF;
931 
932   ELSE
933     l_result := FALSE;
934     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;     -- bug 4893261
935     IF (g_level_statement >= g_current_runtime_level ) THEN
936       FND_LOG.STRING(g_level_statement,
937              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable',
938              'applicability_rule_flag = ' || p_applicability_rule_flag );
939       FND_LOG.STRING(g_level_statement,
940              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable',
941              'Error: The valid value for applicability_rule_flag ' ||
942              'should be N or Y.');
943     END IF;
944   END IF;
945 
946   IF (g_level_procedure >= g_current_runtime_level ) THEN
947     FND_LOG.STRING(g_level_procedure,
948                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable.END',
949                    'ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable(-)'||'return_status '||x_return_status);
950   END IF;
951 
952   RETURN l_result;
953 
954 EXCEPTION
955   WHEN OTHERS THEN
956     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
957     IF (g_level_unexpected >= g_current_runtime_level ) THEN
958       FND_LOG.STRING(g_level_unexpected,
959                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable',
960                      sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
961       FND_LOG.STRING(g_level_unexpected,
962                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable.END',
963                     'ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable(-)');
964     END IF;
965     RETURN FALSE;
966 END is_tax_applicable;
967 
968 ----------------------------------------------------------------------
969 --  PRIVATE PROCEDURE
970 --  is_direct_rate_applicable
971 --
972 --  DESCRIPTION
973 --
974 --  This procedure returns if the direct_rate is applicable or not for a
975 --  given regime
976 --  TRUE  - Applicable
977 --  FALSE - Not Applicable
978 --
979 --  IN     p_tax_id
980 --         p_tax_determine_date
981 --         p_event_class_rec
982 --         p_trx_line_index
983 --  OUT    x_direct_rate_result_rec
984 --         x_direct_rate_result_id
985 --         x_return_status
986 ----------------------------------------------------------------------
987 
988 FUNCTION is_direct_rate_applicable (
989   p_tax_id                   IN        zx_taxes_b.tax_id%TYPE,
990   p_tax_determine_date       IN        DATE,
991   p_event_class_rec          IN        zx_api_pub.event_class_rec_type,
992   p_trx_line_index           IN        BINARY_INTEGER,
993   x_direct_rate_result_rec   OUT NOCOPY  zx_process_results%ROWTYPE,
994   x_direct_rate_result_id    OUT NOCOPY  NUMBER,
995   x_return_status            OUT NOCOPY  VARCHAR2) RETURN BOOLEAN IS
996 
997   l_tax_service_type_code    zx_rules_b.service_type_code%TYPE;
998   l_result                   BOOLEAN;
999 
1000   l_error_buffer             VARCHAR2(2000);
1001 
1002 BEGIN
1003 
1004   IF (g_level_procedure >= g_current_runtime_level ) THEN
1005     FND_LOG.STRING(g_level_procedure,
1006            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable.BEGIN',
1007            'ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable(+)');
1008   END IF;
1009 
1010   x_return_status := FND_API.G_RET_STS_SUCCESS;
1011 
1012   l_tax_service_type_code    := 'DET_DIRECT_RATE';
1013   l_result                   :=  FALSE;
1014 
1015   ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process(
1016                                      l_tax_service_type_code,
1017                                      'TRX_LINE_DIST_TBL',
1018                                      p_trx_line_index,
1019                                      p_event_class_rec,
1020                                      p_tax_id,
1021                                      NULL,
1022                                      p_tax_determine_date,
1023                                      NULL,
1024                                      NULL,
1025                                      x_direct_rate_result_rec,
1026                                      x_return_status,
1027                                      l_error_buffer);
1028 
1029   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1030     IF (g_level_statement >= g_current_runtime_level ) THEN
1031       FND_LOG.STRING(g_level_statement,
1032              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable',
1033              'Incorrect return_status after calling ' ||
1034              'ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process');
1035     END IF;
1036 
1037     x_direct_rate_result_rec := NULL;
1038     x_direct_rate_result_id := NULL;
1039 
1040     IF (g_level_statement >= g_current_runtime_level ) THEN
1041       FND_LOG.STRING(g_level_statement,
1042              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable',
1043              'RETURN_STATUS = ' || x_return_status);
1044     END IF;
1045     IF (g_level_procedure >= g_current_runtime_level ) THEN
1046       FND_LOG.STRING(g_level_procedure,
1047              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable.END',
1048              'ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable(-)');
1049     END IF;
1050     RETURN FALSE;
1051   END IF;
1052 
1053   IF (x_direct_rate_result_rec.alphanumeric_result = 'APPLICABLE') THEN
1054     x_direct_rate_result_id := x_direct_rate_result_rec.result_id;
1055     l_result := TRUE;
1056   ELSE
1057     x_direct_rate_result_id := NULL;
1058     l_result := FALSE;
1059   END IF;
1060 
1061   IF (g_level_statement >= g_current_runtime_level ) THEN
1062     FND_LOG.STRING(g_level_statement,
1063            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable',
1064            'RETURN_STATUS = ' || x_return_status);
1065   END IF;
1066 
1067   IF (g_level_procedure >= g_current_runtime_level ) THEN
1068     FND_LOG.STRING(g_level_procedure,
1069            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable.END',
1070            'ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable(-)');
1071   END IF;
1072   RETURN l_result;
1073 
1074 EXCEPTION
1075   WHEN OTHERS THEN
1076     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1077     IF (g_level_unexpected >= g_current_runtime_level ) THEN
1078       FND_LOG.STRING(g_level_unexpected,
1079                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable',
1080                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
1081       FND_LOG.STRING(g_level_unexpected,
1082                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable.END',
1083                      'ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable(-)');
1084     END IF;
1085     RETURN FALSE;
1086 END is_direct_rate_applicable;
1087 
1088 ---------------------------------------------------------------------
1089 -- PUBLIC PROCEDURE
1090 --  fetch_tax_lines
1091 --
1092 --  DESCRIPTION
1093 --
1094 --  This procedure fetch detail tax lines from zx_lines
1095 --
1096 --  IN/OUT
1097 --         p_event_class_rec
1098 --         p_tax_line_tbl
1099 --         x_begin_index
1100 --         x_end_index
1101 --  IN     p_trx_line_index
1102 --  OUT NOCOPY    x_return_status
1103 
1104 PROCEDURE fetch_tax_lines (
1105   p_event_class_rec      IN             zx_api_pub.event_class_rec_type,
1106   p_trx_line_index       IN             NUMBER,
1107   p_tax_date             IN             DATE,
1108   p_tax_determine_date   IN             DATE,
1109   p_tax_point_date       IN             DATE,
1110   x_begin_index          IN OUT NOCOPY  NUMBER,
1111   x_end_index            IN OUT NOCOPY  NUMBER,
1112   x_return_status           OUT NOCOPY  VARCHAR2) IS
1113 
1114  -- fetch manual tax lines for UPDATE
1115  --
1116  CURSOR get_manual_tax_lines IS
1117    SELECT * FROM zx_lines
1118    WHERE trx_id = p_event_class_rec.trx_id
1119      AND application_id = p_event_class_rec.application_id
1120      AND event_class_code = p_event_class_rec.event_class_code
1121      AND entity_code = p_event_class_rec.entity_code
1122      AND trx_line_id =
1123          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index)
1124      AND trx_level_type =
1125          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index)
1126      AND manually_entered_flag = 'Y'
1127      AND cancel_flag <> 'Y'
1128      AND mrc_tax_line_flag = 'N'
1129      AND tax_provider_id IS NULL;
1130 
1131  CURSOR get_tax_lines_override_r IS
1132    SELECT * FROM zx_lines
1133    WHERE trx_id = p_event_class_rec.trx_id
1134      AND application_id = p_event_class_rec.application_id
1135      AND event_class_code = p_event_class_rec.event_class_code
1136      AND entity_code = p_event_class_rec.entity_code
1137      AND trx_line_id =
1138           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index)
1139      AND trx_level_type =
1140          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index)
1141      AND tax_provider_id IS NULL
1142      AND cancel_flag <> 'Y'
1143      AND offset_link_to_tax_line_id IS NULL
1144      AND mrc_tax_line_flag = 'N'
1145      AND recalc_required_flag = 'Y'
1146      ORDER BY manually_entered_flag DESC;
1147 
1148  CURSOR get_tax_lines_override_ri IS
1149    SELECT * FROM zx_lines
1150    WHERE trx_id = p_event_class_rec.trx_id
1151      AND application_id = p_event_class_rec.application_id
1152      AND event_class_code = p_event_class_rec.event_class_code
1153      AND entity_code = p_event_class_rec.entity_code
1154      AND trx_line_id =
1155          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index)
1156      AND trx_level_type =
1157          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index)
1158      AND tax_provider_id IS NULL
1159      AND cancel_flag <> 'Y'
1160      AND offset_link_to_tax_line_id IS NULL
1161      AND mrc_tax_line_flag = 'N'
1162      AND (recalc_required_flag = 'Y' OR tax_amt_included_flag = 'Y')
1163      ORDER BY manually_entered_flag DESC;
1164 
1165  CURSOR get_tax_lines_override_rc IS
1166    SELECT * FROM zx_lines
1167    WHERE trx_id = p_event_class_rec.trx_id
1168      AND application_id = p_event_class_rec.application_id
1169      AND event_class_code = p_event_class_rec.event_class_code
1170      AND entity_code = p_event_class_rec.entity_code
1171      AND trx_line_id =
1172           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index)
1173      AND trx_level_type =
1174          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index)
1175      AND tax_provider_id IS NULL
1176      AND cancel_flag <> 'Y'
1177      AND offset_link_to_tax_line_id IS NULL
1178      AND mrc_tax_line_flag = 'N'
1179      AND (recalc_required_flag = 'Y' OR compounding_tax_flag = 'Y')
1180      ORDER BY manually_entered_flag DESC, compounding_tax_flag DESC,
1181               compounding_dep_tax_flag;
1182 
1183  CURSOR get_tax_lines_override_a IS
1184    SELECT * FROM zx_lines
1185    WHERE trx_id = p_event_class_rec.trx_id
1186      AND application_id = p_event_class_rec.application_id
1187      AND event_class_code = p_event_class_rec.event_class_code
1188      AND entity_code = p_event_class_rec.entity_code
1189      AND trx_line_id =
1190          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index)
1191      AND trx_level_type =
1192          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index)
1193      AND tax_provider_id IS NULL
1194      AND cancel_flag <> 'Y'
1195      AND offset_link_to_tax_line_id IS NULL
1196      AND mrc_tax_line_flag = 'N'
1197      AND (recalc_required_flag = 'Y' OR compounding_tax_flag = 'Y'
1198                                       OR tax_amt_included_flag = 'Y')
1199      ORDER BY manually_entered_flag DESC, compounding_tax_flag DESC,
1200               compounding_dep_tax_flag;
1201 
1202  -- fetch all tax lines for migrated transaction
1203  --
1204  CURSOR get_all_tax_lines_migrated IS
1205    SELECT * FROM zx_lines
1206    WHERE trx_id = p_event_class_rec.trx_id
1207      AND application_id = p_event_class_rec.application_id
1208      AND event_class_code = p_event_class_rec.event_class_code
1209      AND entity_code = p_event_class_rec.entity_code
1210      AND trx_line_id =
1211          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index)
1212      AND trx_level_type =
1213          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index)
1214      AND tax_provider_id IS NULL
1215      AND cancel_flag  <> 'Y'
1216      AND offset_link_to_tax_line_id IS NULL
1217      AND mrc_tax_line_flag = 'N'
1218      ORDER BY tax_regime_code, tax, tax_apportionment_line_number;
1219 
1220  l_tax_regime_rec       zx_global_structures_pkg.tax_regime_rec_type;
1221  l_tax_rec              ZX_TDS_UTILITIES_PKG.zx_tax_info_cache_rec;
1222  l_tax_status_rec       ZX_TDS_UTILITIES_PKG.zx_status_info_rec;
1223  l_tax_rate_rec         ZX_TDS_UTILITIES_PKG.zx_rate_info_rec_type;
1224  l_tax_jurisdiction_rec ZX_TDS_UTILITIES_PKG.zx_jur_info_cache_rec_type;
1225 
1226  l_current_line_amt     zx_lines.line_amt%TYPE;
1227  l_rownum               BINARY_INTEGER;
1228  l_error_buffer         VARCHAR2(200);
1229 
1230  l_tax_class            ZX_RATES_B.tax_class%TYPE;
1231 
1232  -- bug fix 5525890
1233  l_tax_amt_included_flag_usr zx_lines.tax_amt_included_flag%TYPE;
1234  l_self_assessed_flag_usr    zx_lines.self_assessed_flag%TYPE;
1235 
1236 BEGIN
1237 
1238   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1239   IF (g_level_procedure >= g_current_runtime_level ) THEN
1240     FND_LOG.STRING(g_level_procedure,
1241                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.BEGIN',
1242                    'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(+)');
1243   END IF;
1244 
1245   x_return_status := FND_API.G_RET_STS_SUCCESS;
1246 
1247   -- Bug#5417753- determine tax_class value
1248   IF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
1249     l_tax_class := 'OUTPUT';
1250   ELSIF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
1251     l_tax_class := 'INPUT';
1252   END IF;
1253 
1254   l_rownum := NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST, 0);
1255 
1256   IF NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.historical_flag(
1257                                                   p_trx_line_index), 'N') = 'Y'
1258   THEN
1259 
1260     -- For migrated transactions
1261     --
1262     -- Fetch all tax lines for migrated transactions.
1263 
1264     FOR tax_line_rec IN get_all_tax_lines_migrated LOOP
1265 
1266       l_rownum := l_rownum + 1;
1267 
1268       -- populate tax info fetched from zx_lines to g_detail_tax_lines_tbl
1269       --
1270       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum) := tax_line_rec;
1271 
1272       -- populate tax cache : bug 5167406
1273       --
1274       ZX_TDS_UTILITIES_PKG.populate_tax_cache (
1275              p_tax_id         => tax_line_rec.tax_id,
1276              p_return_status  => x_return_status,
1277              p_error_buffer   => l_error_buffer);
1278 
1279       IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1280         IF (g_level_statement >= g_current_runtime_level ) THEN
1281           FND_LOG.STRING(g_level_statement,
1282                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1283                  'Incorrect return_status after calling ' ||
1284                  'ZX_TDS_UTILITIES_PKG.populate_tax_cache');
1285           FND_LOG.STRING(g_level_statement,
1286                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1287                  'RETURN_STATUS = ' || x_return_status);
1288           FND_LOG.STRING(g_level_statement,
1289                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1290                  'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1291         END IF;
1292         RETURN;
1293       END IF;
1294 
1295       -- Set tax_amt to null
1296       --
1297       -- bug 7009115
1298      IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum).tax_amt IS NOT NULL
1299      THEN
1300 
1301       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1302                                    l_rownum).unrounded_tax_amt :=
1303              ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum).tax_amt;
1304 
1305       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum).tax_amt := NULL;
1306      END IF;
1307 
1308       -- bug 6906427: Set summary and detail tax line id to null
1309       --
1310       IF NVL(tax_line_rec.tax_only_line_flag, 'N') <> 'Y' THEN
1311 
1312        --Retain the summary tax line for historical invoices always.
1313        --bug#7695189
1314        -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1315        --                                    l_rownum).summary_tax_line_id := NULL;
1316 
1317         IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
1318                                         p_trx_line_index) <> 'OVERRIDE_TAX'  AND
1319            NVL(tax_line_rec.associated_child_frozen_flag, 'N') = 'Y'
1320         THEN
1321 
1322           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1323                                                    l_rownum).tax_line_id := NULL;
1324           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1325                                   l_rownum).associated_child_frozen_flag := NULL;
1326 
1327         END IF;
1328       END IF;
1329 
1330       -- If the value of p_event_class_rec.tax_recovery_flag is 'N',
1331       -- populate process_for_recovery_flag to 'N'. If it is 'Y', check
1332       -- reporting_only_flag to set tax_recovery_flag
1333       --
1334 
1335       /*
1336        * call populate_recovery_flg in ZX_TDS_TAX_LINES_POPU_PKG instead
1337        *
1338        * IF NVL(p_event_class_rec.tax_recovery_flag, 'N') = 'N' THEN
1339        *   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1340        *                         l_rownum).process_for_recovery_flag := 'N';
1341        * ELSE
1342        *  IF tax_line_rec.reporting_only_flag <> 'Y' THEN
1343        *     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1344        *                           l_rownum).process_for_recovery_flag := 'Y';
1345        *   ELSE
1346        *     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1347        *                          l_rownum).process_for_recovery_flag := 'N';
1348        *   END IF;
1349        *   END IF;
1350        */
1351 
1352       IF (x_begin_index IS NULL) THEN
1353          x_begin_index := l_rownum;
1354       END IF;
1355     END LOOP;    -- tax_line_rec IN get_all_tax_lines_migrated
1356 
1357   ELSIF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
1358                                           p_trx_line_index) = 'OVERRIDE_TAX'
1359   THEN
1360 
1361     -- For OVERRIDE_TAX
1362     --
1363 
1364     IF NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.compounding_tax_flag(
1365                                              p_trx_line_index), 'N') = 'N'  AND
1366        (p_event_class_rec.ctrl_eff_ovrd_calc_lines_flag = 'N' OR
1367         (p_event_class_rec.ctrl_eff_ovrd_calc_lines_flag = 'Y' AND
1368          NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_amt_included_flag(
1369                                                      p_trx_line_index), 'N') = 'N'))
1370     THEN
1371 
1372       -- For OVERRIDE_TAX, fetch all tax lines with recalc_required_flag = 'Y'.
1373       -- Do not need to check the tax lines with compounding_tax_flag = 'Y', or
1374       -- tax_amt_included_flag = 'Y'
1375       --
1376       FOR tax_line_rec IN get_tax_lines_override_r LOOP
1377 
1378         l_rownum := l_rownum + 1;
1379 
1380         -- populate tax info fetched from zx_lines to g_detail_tax_lines_tbl
1381         --
1382         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum) := tax_line_rec;
1383 
1384         -- populate tax cache : bug 5167406
1385         --
1386         ZX_TDS_UTILITIES_PKG.populate_tax_cache (
1387                p_tax_id         => tax_line_rec.tax_id,
1388                p_return_status  => x_return_status,
1389                p_error_buffer   => l_error_buffer);
1390 
1391         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1392           IF (g_level_statement >= g_current_runtime_level ) THEN
1393             FND_LOG.STRING(g_level_statement,
1394                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1395                    'Incorrect return_status after calling ' ||
1396                    'ZX_TDS_UTILITIES_PKG.populate_tax_cache');
1397             FND_LOG.STRING(g_level_statement,
1398                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1399                    'RETURN_STATUS = ' || x_return_status);
1400             FND_LOG.STRING(g_level_statement,
1401                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1402                    'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1403           END IF;
1404           RETURN;
1405         END IF;
1406 
1407         -- copy tax_amt to unrounded_tax_amt, set tax_amt to NULL
1408         -- comment out for bug 4569739
1409         -- uncommented out for bug 5525890
1410         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum).tax_amt := NULL;
1411 
1412         -- Bug 3359512: set summary_tax_line_id to NULL
1413         --
1414         -- bug 4569739: set summary_tax_line_id to null except last_manual_entry
1415         -- is 'TAX_AMOUNT' or 'TAX_RATE'
1416         -- Bug 6402744 - Not able to change rate name in tax details UI
1417         -- as summary tax line id is not regenerated.
1418         -- IF tax_line_rec.last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE') THEN
1419 
1420         -- bug 6906427: Set summary and detail tax line id to null
1421         --
1422         IF NVL(tax_line_rec.tax_only_line_flag, 'N') <> 'Y' AND
1423            NVL(tax_line_rec.associated_child_frozen_flag, 'N') <> 'Y' THEN
1424           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1425                                             l_rownum).summary_tax_line_id := NULL;
1426         END IF;
1427 
1428         -- END IF;
1429 
1430         -- Set x_begin_index
1431         --
1432         IF (x_begin_index IS NULL) THEN
1433            x_begin_index := l_rownum;
1434         END IF;
1435 
1436 /*
1437         IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1438              l_rownum).last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE')
1439         THEN
1440 */
1441 	-- Bugfix 5347691: populate hq estb reg number for manually entered tax lines
1442 
1443         IF (ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1444              l_rownum).manually_entered_flag = 'Y' and
1445            (ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1446              l_rownum).hq_estb_reg_number is null or
1447             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1448              l_rownum).tax_registration_number is null)) or
1449            (ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1450              l_rownum).last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE'))
1451         THEN
1452           -- bug fix 5525890
1453           IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1454              l_rownum).manually_entered_flag = 'Y' THEN
1455 
1456             -- if etax failed to rederive the registration information for
1457             -- the manually entered tax lines, the inclusive flag will be reset
1458             -- to NULL and the self_assessment_flag will be reset to N.
1459             -- For manual entered tax lines, user entered value for the
1460             -- inclusive flag and the self_assessment_flag should be honored.
1461 
1462             l_tax_amt_included_flag_usr :=ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1463                                       l_rownum).tax_amt_included_flag;
1464             l_self_assessed_flag_usr :=ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1465                                       l_rownum).self_assessed_flag;
1466           END IF;
1467           -- bug fix 5525890 end
1468 
1469           populate_registration_info(
1470                p_event_class_rec    => p_event_class_rec,
1471                p_trx_line_index     => p_trx_line_index,
1472                p_rownum             => l_rownum,
1473                p_def_reg_type       => NULL,
1474                p_reg_rule_flg       => NULL,
1475                p_tax_determine_date =>
1476                         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1477                                                     l_rownum).tax_determine_date,
1478                x_return_status      => x_return_status);
1479 
1480           IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1481             IF (g_level_statement >= g_current_runtime_level ) THEN
1482               FND_LOG.STRING(g_level_statement,
1483                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1484                      'Incorrect return_status after calling ' ||
1485                      'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info');
1486               FND_LOG.STRING(g_level_statement,
1487                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1488                      'RETURN_STATUS = ' || x_return_status);
1489               FND_LOG.STRING(g_level_statement,
1490                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1491                      'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1492             END IF;
1493             RETURN;
1494           END IF;
1495 
1496           -- bug fix 5525890
1497           IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1498              l_rownum).manually_entered_flag = 'Y' THEN
1499             -- if etax failed to rederive the registration information for
1500             -- the manually entered tax lines, the inclusive flag will be reset
1501             -- to NULL and the self_assessment_flag will be reset to N.
1502             -- For manual entered tax lines, user entered value for the
1503             -- inclusive flag and the self_assessment_flag should be honored.
1504 
1505             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1506                                       l_rownum).tax_amt_included_flag := l_tax_amt_included_flag_usr;
1507             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1508                                       l_rownum).self_assessed_flag := l_self_assessed_flag_usr;
1509           END IF;
1510           -- bug fix 5525890 end
1511 
1512         END IF; -- last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE')
1513 
1514       END LOOP;
1515 
1516     ELSIF NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.compounding_tax_flag(
1517                                               p_trx_line_index), 'N') = 'N'  AND
1518        (p_event_class_rec.ctrl_eff_ovrd_calc_lines_flag = 'Y' AND
1519          NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_amt_included_flag(
1520                                                      p_trx_line_index), 'N') = 'Y')
1521     THEN
1522 
1523       -- For OVERRIDE_TAX, Need to fetch all tax lines with
1524       -- recalc_required_flag = 'Y', or tax_amt_included_flag = 'Y'.
1525       -- Do not need to fetch the tax lines with compounding_tax_flag = 'Y'.
1526       --
1527       FOR tax_line_rec IN get_tax_lines_override_ri LOOP
1528 
1529         l_rownum := l_rownum + 1;
1530 
1531         -- populate tax info fetched from zx_lines to g_detail_tax_lines_tbl
1532         --
1533         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum) := tax_line_rec;
1534 
1535         -- populate tax cache : bug 5167406
1536         --
1537         ZX_TDS_UTILITIES_PKG.populate_tax_cache (
1538                p_tax_id         => tax_line_rec.tax_id,
1539                p_return_status  => x_return_status,
1540                p_error_buffer   => l_error_buffer);
1541 
1542         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1543           IF (g_level_statement >= g_current_runtime_level ) THEN
1544             FND_LOG.STRING(g_level_statement,
1545                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1546                    'Incorrect return_status after calling ' ||
1547                    'ZX_TDS_UTILITIES_PKG.populate_tax_cache');
1548             FND_LOG.STRING(g_level_statement,
1549                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1550                    'RETURN_STATUS = ' || x_return_status);
1551             FND_LOG.STRING(g_level_statement,
1552                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1553                    'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1554           END IF;
1555           RETURN;
1556         END IF;
1557 
1558         -- copy tax_amt to unrounded_tax_amt, set tax_amt to NULL
1559         -- comment out for bug 4569739
1560         -- uncommented out for bug 5525890
1561         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum).tax_amt := NULL;
1562 
1563         -- Bug 3359512: set summary_tax_line_id to NULL
1564         --
1565         -- bug 4569739: set summary_tax_line_id to null except last_manual_entry
1566         -- is 'TAX_AMOUNT' or 'TAX_RATE'
1567         --
1568         --IF tax_line_rec.last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE') THEN
1569         --  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1570         --                                    l_rownum).summary_tax_line_id := NULL;
1571         --END IF;
1572 
1573         -- bug 6906427: Set summary and detail tax line id to null
1574         --
1575         IF NVL(tax_line_rec.tax_only_line_flag, 'N') <> 'Y' THEN
1576           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1577                                             l_rownum).summary_tax_line_id := NULL;
1578         END IF;
1579 
1580         -- Set x_begin_index
1581         --
1582         IF (x_begin_index IS NULL) THEN
1583            x_begin_index := l_rownum;
1584         END IF;
1585 
1586         IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1587              l_rownum).last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE')
1588         THEN
1589           populate_registration_info(
1590                p_event_class_rec    => p_event_class_rec,
1591                p_trx_line_index     => p_trx_line_index,
1592                p_rownum             => l_rownum,
1593                p_def_reg_type       => NULL,
1594                p_reg_rule_flg       => NULL,
1595                p_tax_determine_date =>
1596                         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1597                                                     l_rownum).tax_determine_date,
1598                x_return_status      => x_return_status);
1599 
1600           IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1601             IF (g_level_statement >= g_current_runtime_level ) THEN
1602               FND_LOG.STRING(g_level_statement,
1603                              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1604                              'Incorrect return_status after calling ' ||
1605                              'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info');
1606               FND_LOG.STRING(g_level_statement,
1607                              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1608                              'RETURN_STATUS = ' || x_return_status);
1609               FND_LOG.STRING(g_level_statement,
1610                              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1611                              'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1612             END IF;
1613             RETURN;
1614           END IF;
1615         END IF;  -- last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE')
1616 
1617       END LOOP;
1618     ELSIF NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.compounding_tax_flag(
1619                                                p_trx_line_index), 'N') = 'Y' AND
1620        (p_event_class_rec.ctrl_eff_ovrd_calc_lines_flag = 'N' OR
1621         (p_event_class_rec.ctrl_eff_ovrd_calc_lines_flag = 'Y' AND
1622          NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_amt_included_flag(
1623                                                         p_trx_line_index), 'N') = 'N'))
1624     THEN
1625 
1626       -- For OVERRIDE_TAX, Need to fetch all tax lines with
1627       -- recalc_required_flag = 'Y', or compounding_tax_flag = 'Y'.
1628       -- Do not need to fetch the tax lines with tax_amt_included_flag = 'Y'.
1629       --
1630       FOR tax_line_rec IN get_tax_lines_override_rc LOOP
1631 
1632         l_rownum := l_rownum + 1;
1633 
1634         -- populate tax info fetched from zx_lines to g_detail_tax_lines_tbl
1635         --
1636         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum) := tax_line_rec;
1637 
1638         -- populate tax cache : bug 5167406
1639         --
1640         ZX_TDS_UTILITIES_PKG.populate_tax_cache (
1641                p_tax_id         => tax_line_rec.tax_id,
1642                p_return_status  => x_return_status,
1643                p_error_buffer   => l_error_buffer);
1644 
1645         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1646           IF (g_level_statement >= g_current_runtime_level ) THEN
1647             FND_LOG.STRING(g_level_statement,
1648                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1649                    'Incorrect return_status after calling ' ||
1650                    'ZX_TDS_UTILITIES_PKG.populate_tax_cache');
1651             FND_LOG.STRING(g_level_statement,
1652                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1653                    'RETURN_STATUS = ' || x_return_status);
1654             FND_LOG.STRING(g_level_statement,
1655                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1656                    'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1657           END IF;
1658           RETURN;
1659         END IF;
1660 
1661         -- copy tax_amt to unrounded_tax_amt, set tax_amt to NULL
1662         -- comment out for bug 4569739
1663         -- uncommented out for bug 5525890
1664         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum).tax_amt := NULL;
1665 
1666         -- Bug 3359512: set summary_tax_line_id to NULL
1667         --
1668         -- bug 4569739: set summary_tax_line_id to null except last_manual_entry
1669         -- is 'TAX_AMOUNT' or 'TAX_RATE'
1670         --
1671         --IF tax_line_rec.last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE') THEN
1672         --  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1673         --                                    l_rownum).summary_tax_line_id := NULL;
1674         --END IF;
1675 
1676         -- bug 6906427: Set summary and detail tax line id to null
1677         --
1678         IF NVL(tax_line_rec.tax_only_line_flag, 'N') <> 'Y' THEN
1679           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1680                                             l_rownum).summary_tax_line_id := NULL;
1681         END IF;
1682 
1683         -- Set x_begin_index
1684         --
1685         IF (x_begin_index IS NULL) THEN
1686            x_begin_index := l_rownum;
1687         END IF;
1688 
1689         IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1690              l_rownum).last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE')
1691         THEN
1692           populate_registration_info(
1693                p_event_class_rec    => p_event_class_rec,
1694                p_trx_line_index     => p_trx_line_index,
1695                p_rownum             => l_rownum,
1696                p_def_reg_type       => NULL,
1697                p_reg_rule_flg       => NULL,
1698                p_tax_determine_date =>
1699                         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1700                                                     l_rownum).tax_determine_date,
1701                x_return_status      => x_return_status);
1702 
1703           IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1704             IF (g_level_statement >= g_current_runtime_level ) THEN
1705               FND_LOG.STRING(g_level_statement,
1706                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1707                      'Incorrect return_status after calling ' ||
1708                      'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info');
1709               FND_LOG.STRING(g_level_statement,
1710                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1711                      'RETURN_STATUS = ' || x_return_status);
1712               FND_LOG.STRING(g_level_statement,
1713                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1714                      'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1715             END IF;
1716             RETURN;
1717           END IF;
1718         END IF;  -- last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE')
1719 
1720       END LOOP;
1721 
1722     ELSIF NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.compounding_tax_flag(
1723                                                p_trx_line_index), 'N') = 'Y' AND
1724        (p_event_class_rec.ctrl_eff_ovrd_calc_lines_flag = 'Y' AND
1725          NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_amt_included_flag(
1726                                                      p_trx_line_index), 'N') = 'Y')
1727     THEN
1728 
1729       -- For OVERRIDE_TAX, Need to fetch all tax lines with
1730       -- recalc_required_flag = 'Y', or compounding_tax_flag = 'Y',
1731       -- or tax_amt_included_flag = 'Y'
1732       --
1733       FOR tax_line_rec IN get_tax_lines_override_a LOOP
1734 
1735         l_rownum := l_rownum + 1;
1736 
1737         -- populate tax info fetched from zx_lines to g_detail_tax_lines_tbl
1738         --
1739         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum) := tax_line_rec;
1740 
1741         -- populate tax cache : bug 5167406
1742         --
1743         ZX_TDS_UTILITIES_PKG.populate_tax_cache (
1744                p_tax_id         => tax_line_rec.tax_id,
1745                p_return_status  => x_return_status,
1746                p_error_buffer   => l_error_buffer);
1747 
1748         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1749           IF (g_level_statement >= g_current_runtime_level ) THEN
1750             FND_LOG.STRING(g_level_statement,
1751                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1752                    'Incorrect return_status after calling ' ||
1753                    'ZX_TDS_UTILITIES_PKG.populate_tax_cache');
1754             FND_LOG.STRING(g_level_statement,
1755                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1756                    'RETURN_STATUS = ' || x_return_status);
1757             FND_LOG.STRING(g_level_statement,
1758                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1759                    'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1760           END IF;
1761           RETURN;
1762         END IF;
1763 
1764         -- copy tax_amt to unrounded_tax_amt, set tax_amt to NULL
1765         -- comment out for bug 4569739
1766         -- uncommented out for bug 5525890
1767         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum).tax_amt := NULL;
1768 
1769         -- Bug 3359512: set summary_tax_line_id to NULL
1770         --
1771         -- bug 4569739: set summary_tax_line_id to null except last_manual_entry
1772         -- is 'TAX_AMOUNT' or 'TAX_RATE'
1773         --
1774         -- IF tax_line_rec.last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE') THEN
1775         --   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1776         --                                     l_rownum).summary_tax_line_id := NULL;
1777         -- END IF;
1778 
1779         -- bug 6906427: Set summary and detail tax line id to null
1780         --
1781         IF NVL(tax_line_rec.tax_only_line_flag, 'N') <> 'Y' THEN
1782           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1783                                             l_rownum).summary_tax_line_id := NULL;
1784         END IF;
1785 
1786         -- Set x_begin_index
1787         --
1788         IF (x_begin_index IS NULL) THEN
1789            x_begin_index := l_rownum;
1790         END IF;
1791 
1792         IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1793              l_rownum).last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE')
1794         THEN
1795           populate_registration_info(
1796                p_event_class_rec    => p_event_class_rec,
1797                p_trx_line_index     => p_trx_line_index,
1798                p_rownum             => l_rownum,
1799                p_def_reg_type       => NULL,
1800                p_reg_rule_flg       => NULL,
1801                p_tax_determine_date =>
1802                         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1803                                                     l_rownum).tax_determine_date,
1804                x_return_status      => x_return_status);
1805 
1806           IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1807             IF (g_level_statement >= g_current_runtime_level ) THEN
1808               FND_LOG.STRING(g_level_statement,
1809                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1810                      'Incorrect return_status after calling ' ||
1811                      'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info');
1812               FND_LOG.STRING(g_level_statement,
1813                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1814                      'RETURN_STATUS = ' || x_return_status);
1815               FND_LOG.STRING(g_level_statement,
1816                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1817                      'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1818             END IF;
1819             RETURN;
1820           END IF;
1821         END IF;  -- last_manual_entry NOT IN ('TAX_AMOUNT', 'TAX_RATE')
1822 
1823       END LOOP;
1824     END IF;
1825   ELSIF ((ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
1826                  p_trx_line_index) = 'UPDATE')
1827           OR
1828           (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(
1829                  p_trx_line_index) ='UPDATE'  AND
1830            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
1831                  p_trx_line_index) = 'LINE_INFO_TAX_ONLY')) THEN  -- Bug 5291394
1832 
1833     -- For Update
1834     --
1835 
1836     FOR tax_line_rec IN get_manual_tax_lines LOOP
1837 
1838       l_rownum := l_rownum + 1;
1839 
1840       -- populate tax info fetched from zx_lines to g_detail_tax_lines_tbl
1841       --
1842       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum) := tax_line_rec;
1843 
1844       -- bug 7008562: Per Harsh and Desh, do not do validation for PO taxes
1845       --              that are not applicable in current AP invoice
1846       --
1847       -- set x_begin_index
1848       --
1849       -- Bug 8220741
1850       ZX_TDS_UTILITIES_PKG.populate_tax_cache (
1851                p_tax_id         => tax_line_rec.tax_id,
1852                p_return_status  => x_return_status,
1853                p_error_buffer   => l_error_buffer);
1854       -- End Bug 8220741
1855 
1856       IF (x_begin_index is NULL) THEN
1857         x_begin_index := l_rownum;
1858       END IF;
1859 
1860       IF tax_line_rec.other_doc_source = 'REFERENCE' AND
1861          tax_line_rec.unrounded_tax_amt = 0 AND
1862          tax_line_rec.unrounded_taxable_amt = 0 AND
1863          tax_line_rec.manually_entered_flag = 'Y' AND
1864          tax_line_rec.freeze_until_overridden_flag ='Y'
1865       THEN
1866 
1867 		--Start of Bug 7383041
1868 		--NULL;
1869 		populate_registration_info(
1870              p_event_class_rec    => p_event_class_rec,
1871              p_trx_line_index     => p_trx_line_index,
1872              p_rownum             => l_rownum,
1873              p_def_reg_type       => NULL,
1874              p_reg_rule_flg       => NULL,
1875              p_tax_determine_date => p_tax_determine_date,
1876              x_return_status      => x_return_status);
1877 
1878         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1879           IF (g_level_statement >= g_current_runtime_level ) THEN
1880             FND_LOG.STRING(g_level_statement,
1881                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1882                            'Incorrect return_status after calling ' ||
1883                            'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info');
1884             FND_LOG.STRING(g_level_statement,
1885                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1886                            'RETURN_STATUS = ' || x_return_status);
1887             FND_LOG.STRING(g_level_statement,
1888                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1889                            'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1890           END IF;
1891           RETURN;
1892         END IF;
1893 --End of Bug 7383041
1894       ELSE
1895         -- validate and populate tax_regime_id
1896         --
1897         ZX_TDS_UTILITIES_PKG.get_regime_cache_info(
1898                           tax_line_rec.tax_regime_code,
1899                           p_tax_determine_date,
1900                           l_tax_regime_rec,
1901                           x_return_status,
1902                           l_error_buffer);
1903 
1904         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1905           IF (g_level_statement >= g_current_runtime_level ) THEN
1906             FND_LOG.STRING(g_level_statement,
1907                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1908                     'Incorrect return_status after calling ' ||
1909                     'ZX_TDS_UTILITIES_PKG.get_regime_cache_info');
1910             FND_LOG.STRING(g_level_statement,
1911                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1912                           'RETURN_STATUS = ' || x_return_status);
1913             FND_LOG.STRING(g_level_statement,
1914                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1915                           'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1916           END IF;
1917           RETURN;
1918         END IF;
1919 
1920         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1921                         l_rownum).tax_regime_id :=
1922                                         l_tax_regime_rec.tax_regime_id;
1923 
1924         -- validate and populate tax_id
1925         --
1926         ZX_TDS_UTILITIES_PKG.get_tax_cache_info(
1927                           tax_line_rec.tax_regime_code,
1928                           tax_line_rec.tax,
1929                           p_tax_determine_date,
1930                           l_tax_rec,
1931                           x_return_status,
1932                           l_error_buffer);
1933 
1934         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1935           IF (g_level_statement >= g_current_runtime_level ) THEN
1936             FND_LOG.STRING(g_level_statement,
1937                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1938                     'Incorrect return_status after calling ' ||
1939                     'ZX_TDS_UTILITIES_PKG.get_tax_cache_info');
1940             FND_LOG.STRING(g_level_statement,
1941                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1942                           'RETURN_STATUS = ' || x_return_status);
1943             FND_LOG.STRING(g_level_statement,
1944                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1945                           'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1946           END IF;
1947           RETURN;
1948         END IF;
1949 
1950         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1951                                             l_rownum).tax_id := l_tax_rec.tax_id;
1952 
1953         --
1954         -- validate and populate tax_jurisdiction_id
1955         --
1956         IF tax_line_rec.tax_jurisdiction_code is not NULL THEN
1957           ZX_TDS_UTILITIES_PKG.get_jurisdiction_cache_info(
1958                           tax_line_rec.tax_regime_code,
1959                           tax_line_rec.tax,
1960                           tax_line_rec.tax_jurisdiction_code,
1961                           p_tax_determine_date,
1962                           l_tax_jurisdiction_rec,
1963                           x_return_status,
1964                           l_error_buffer);
1965 
1966           IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1967             IF (g_level_statement >= g_current_runtime_level ) THEN
1968               FND_LOG.STRING(g_level_statement,
1969                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1970                       'Incorrect return_status after calling ' ||
1971                       'ZX_TDS_UTILITIES_PKG.get_jurisdiction_cache_info');
1972               FND_LOG.STRING(g_level_statement,
1973                             'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
1974                             'RETURN_STATUS = ' || x_return_status);
1975               FND_LOG.STRING(g_level_statement,
1976                             'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
1977                             'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
1978             END IF;
1979             RETURN;
1980           END IF;
1981 
1982           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1983                                    l_rownum).tax_jurisdiction_id :=
1984                                         l_tax_jurisdiction_rec.tax_jurisdiction_id;
1985         END IF;
1986 
1987 
1988         -- validate and populate tax_status_id
1989         ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
1990                           tax_line_rec.tax,
1991                           tax_line_rec.tax_regime_code,
1992                           tax_line_rec.tax_status_code,
1993                           p_tax_determine_date,
1994                           l_tax_status_rec,
1995                           x_return_status,
1996                           l_error_buffer);
1997 
1998         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
1999           IF (g_level_statement >= g_current_runtime_level ) THEN
2000             FND_LOG.STRING(g_level_statement,
2001                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
2002                     'Incorrect return_status after calling ' ||
2003                     'ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info');
2004             FND_LOG.STRING(g_level_statement,
2005                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
2006                           'RETURN_STATUS = ' || x_return_status);
2007             FND_LOG.STRING(g_level_statement,
2008                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
2009                           'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
2010           END IF;
2011           RETURN;
2012         END IF;
2013 
2014         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2015                     l_rownum).tax_status_id := l_tax_status_rec.tax_status_id;
2016 
2017         -- validate and populate tax_rate_id
2018         --
2019         ZX_TDS_UTILITIES_PKG.get_tax_rate_info(
2020                           tax_line_rec.tax_regime_code,
2021                           tax_line_rec.tax,
2022                           tax_line_rec.tax_jurisdiction_code,
2023                           tax_line_rec.tax_status_code,
2024                           tax_line_rec.tax_rate_code,
2025                           p_tax_determine_date,
2026                           l_tax_class,
2027                           l_tax_rate_rec,
2028                           x_return_status,
2029                           l_error_buffer);
2030 
2031         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
2032           IF (g_level_statement >= g_current_runtime_level ) THEN
2033             FND_LOG.STRING(g_level_statement,
2034                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
2035                     'Incorrect return_status after calling ' ||
2036                     'ZX_TDS_UTILITIES_PKG.get_tax_rate_info');
2037             FND_LOG.STRING(g_level_statement,
2038                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
2039                           'RETURN_STATUS = ' || x_return_status);
2040             FND_LOG.STRING(g_level_statement,
2041                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
2042                           'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
2043           END IF;
2044           RETURN;
2045         END IF;
2046 
2047         -- bug 6906427: Set summary and detail tax line id to null
2048         --
2049         IF NVL(tax_line_rec.tax_only_line_flag, 'N') <> 'Y' THEN
2050 
2051           IF tax_line_rec.tax_rate_id <> l_tax_rate_rec.tax_rate_id  THEN
2052 
2053             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2054                                     l_rownum).summary_tax_line_id := NULL;
2055 
2056             IF NVL(tax_line_rec.associated_child_frozen_flag, 'N') = 'Y' THEN
2057 
2058               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2059                                            l_rownum).tax_line_id := NULL;
2060               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2061                           l_rownum).associated_child_frozen_flag := NULL;
2062             END IF;
2063           END IF;
2064         END IF;
2065 
2066         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2067                              l_rownum).tax_rate_id := l_tax_rate_rec.tax_rate_id;
2068 
2069 
2070         -- when Recalculate Manual Tax Lines flag is 'Y',
2071         -- prorate tax amount and taxable amount
2072         --
2073         IF p_event_class_rec.allow_manual_lin_recalc_flag ='Y' THEN
2074 
2075           l_current_line_amt :=
2076             ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt( p_trx_line_index);
2077 
2078           IF tax_line_rec.line_amt <> 0 THEN
2079             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2080                l_rownum).unrounded_tax_amt :=
2081                  tax_line_rec.unrounded_tax_amt *
2082                                         l_current_line_amt/tax_line_rec.line_amt;
2083             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2084                l_rownum).unrounded_taxable_amt :=
2085                  tax_line_rec.unrounded_taxable_amt *
2086                                         l_current_line_amt/tax_line_rec.line_amt;
2087           END IF;
2088 
2089           -- set tax_amt to NULL
2090           --
2091           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum).tax_amt := NULL;
2092 
2093         END IF;
2094 
2095         -- If the value of p_event_class_rec.tax_recovery_flag is 'N',
2096         -- populate process_for_recovery_flag to 'N'. If it is 'Y', check
2097         -- reporting_only_flag to set tax_recovery_flag
2098         --
2099         /*
2100          * call populate_recovery_flg in ZX_TDS_TAX_LINES_POPU_PKG instead
2101          *
2102          * IF NVL(p_event_class_rec.tax_recovery_flag, 'N') = 'N' THEN
2103          *  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2104          *                          l_rownum).process_for_recovery_flag := 'N';
2105          * ELSE
2106          *  IF tax_rec.reporting_only_flag <> 'Y' THEN
2107          *     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2108          *                         l_rownum).process_for_recovery_flag := 'Y';
2109          *   ELSE
2110          *    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2111          *                         l_rownum).process_for_recovery_flag := 'N';
2112          *   END IF;
2113          *  END IF;
2114          */
2115 
2116         -- set x_begin_index
2117         --
2118         IF (x_begin_index is NULL) THEN
2119           x_begin_index := l_rownum;
2120         END IF;
2121 
2122 
2123         -- bug fix 5525890
2124         -- if etax failed to rederive the registration information for
2125         -- the manually entered tax lines, the inclusive flag will be reset
2126         -- to NULL and the self_assessment_flag will be reset to N.
2127         -- For manual entered tax lines, user entered value for the
2128         -- inclusive flag and the self_assessment_flag should be honored.
2129 
2130         l_tax_amt_included_flag_usr :=ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2131                                   l_rownum).tax_amt_included_flag;
2132         l_self_assessed_flag_usr :=ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2133                                   l_rownum).self_assessed_flag;
2134         -- bug fix 5525890 end
2135         populate_registration_info(
2136              p_event_class_rec    => p_event_class_rec,
2137              p_trx_line_index     => p_trx_line_index,
2138              p_rownum             => l_rownum,
2139              p_def_reg_type       => l_tax_rec.def_registr_party_type_code,
2140              p_reg_rule_flg       => l_tax_rec.registration_type_rule_flag,
2141              p_tax_determine_date => p_tax_determine_date,
2142              x_return_status      => x_return_status);
2143 
2144         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
2145           IF (g_level_statement >= g_current_runtime_level ) THEN
2146             FND_LOG.STRING(g_level_statement,
2147                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
2148                            'Incorrect return_status after calling ' ||
2149                            'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info');
2150             FND_LOG.STRING(g_level_statement,
2151                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
2152                            'RETURN_STATUS = ' || x_return_status);
2153             FND_LOG.STRING(g_level_statement,
2154                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
2155                            'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
2156           END IF;
2157           RETURN;
2158         END IF;
2159 
2160         -- bug fix 5525890
2161         -- if etax failed to rederive the registration information for
2162         -- the manually entered tax lines, the inclusive flag will be reset
2163         -- to NULL and the self_assessment_flag will be reset to N.
2164         -- For manual entered tax lines, user entered value for the
2165         -- inclusive flag and the self_assessment_flag should be honored.
2166 
2167         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2168                                   l_rownum).tax_amt_included_flag := l_tax_amt_included_flag_usr;
2169         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2170                                   l_rownum).self_assessed_flag := l_self_assessed_flag_usr;
2171         -- bug fix 5525890 end
2172 
2173       END IF;    -- bug 7008562
2174     END LOOP;    -- tax_rec IN get_manual_tax_lines
2175   END IF;        -- line_level_action, tax_event_type_code
2176 
2177   -- set x_end_index
2178   --
2179   IF (x_begin_index IS NOT NULL) THEN
2180     x_end_index := ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST;
2181   END IF;
2182 
2183   --Besides update action, also need to populate the trx line info onto tax lines for
2184   --manually entered tax lines.
2185   --IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
2186   --                                             p_trx_line_index) = 'UPDATE' THEN
2187     -- copy transaction info to manual tax lines
2188     --
2189     ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines (p_trx_line_index,
2190                                                        x_begin_index,
2191                                                        x_end_index,
2192                                                        x_return_status,
2193                                                        l_error_buffer );
2194 
2195     IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
2196       IF (g_level_statement >= g_current_runtime_level ) THEN
2197         FND_LOG.STRING(g_level_statement,
2198                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
2199                'Incorrect RETURN_STATUS after calling '||
2200                'ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines');
2201         FND_LOG.STRING(g_level_statement,
2202                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
2203                'RETURN_STATUS = ' || x_return_status);
2204         FND_LOG.STRING(g_level_statement,
2205                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
2206                'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
2207       END IF;
2208       RETURN;
2209     END IF;
2210 
2211   IF (g_level_procedure >= g_current_runtime_level ) THEN
2212     FND_LOG.STRING(g_level_procedure,
2213                   'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
2214                   'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
2215   END IF;
2216 
2217 EXCEPTION
2218   WHEN OTHERS THEN
2219     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2220 
2221     IF (g_level_unexpected >= g_current_runtime_level ) THEN
2222       FND_LOG.STRING(g_level_unexpected,
2223                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
2224                      sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2225       FND_LOG.STRING(g_level_unexpected,
2226                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
2227                     'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
2228     END IF;
2229 
2230 END fetch_tax_lines;
2231 
2232 ----------------------------------------------------------------------
2233 --  PUBLIC PROCEDURE
2234 --  get_applicable_taxes
2235 --
2236 --  DESCRIPTION
2237 --
2238 --  This procedure returns applicable taxes
2239 --
2240 --  IN/OUT
2241 --         p_summmary_tax_line_tbl
2242 --         p_event_class_rec
2243 --  IN     p_tax_regime_code
2244 --         p_trx_line_index
2245 --         p_tax_determine_date
2246 --         p_total_trx_amount
2247 --         p_summary_line_index
2248 --  OUT NOCOPY    x_return_status
2249 --         x_begin_index
2250 --         x_end_index
2251 
2252 PROCEDURE get_applicable_taxes (
2253   p_tax_regime_id      IN            zx_regimes_b.tax_regime_id%TYPE,
2254   p_tax_regime_code    IN            zx_regimes_b.tax_regime_code%TYPE,
2255   p_trx_line_index     IN            BINARY_INTEGER,
2256   p_event_class_rec    IN            zx_api_pub.event_class_rec_type,
2257   p_tax_date           IN            DATE,
2258   p_tax_determine_date IN            DATE,
2259   p_tax_point_date     IN            DATE,
2260   x_begin_index        IN OUT NOCOPY BINARY_INTEGER,
2261   x_end_index          IN OUT NOCOPY BINARY_INTEGER,
2262   x_return_status         OUT NOCOPY VARCHAR2) IS
2263 
2264   -- local varaibles
2265   --
2266   l_new_row_num                NUMBER;
2267   l_place_of_supply            VARCHAR2(30);
2268   l_place_of_supply_type_code  zx_taxes_b.def_place_of_supply_type_code%TYPE;
2269   l_place_of_supply_result_id  NUMBER;
2270   l_applicability_result_id    NUMBER;
2271 
2272   l_applicability_result       zx_process_results.alphanumeric_result%TYPE;
2273 
2274   l_direct_rate_result_id      NUMBER;
2275 
2276   l_direct_rate_result_rec     zx_process_results%ROWTYPE;
2277   l_tax_applicable             BOOLEAN;
2278 
2279   /* Commented out as part of restructuring for STCC (bug 4959835)
2280   l_last_manual_entry          zx_lines.last_manual_entry%TYPE;
2281   l_tax_status_code            zx_lines.tax_status_code%TYPE;
2282   l_orig_tax_status_id         zx_lines.orig_tax_status_id%TYPE;
2283   l_orig_tax_status_code       zx_lines.orig_tax_status_code%TYPE;
2284   l_tax_rate_code              zx_lines.tax_rate_code%TYPE;
2285   l_tax_rate                   zx_lines.tax_rate%TYPE;
2286   l_orig_tax_rate_id           zx_lines.orig_tax_rate_id%TYPE;
2287   l_orig_tax_rate_code         zx_lines.orig_tax_rate_code%TYPE;
2288   l_orig_tax_rate              zx_lines.orig_tax_rate%TYPE;
2289   l_tax_amt                    zx_lines.tax_amt%TYPE;
2290   l_orig_tax_amt               zx_lines.orig_tax_amt%TYPE;
2291   l_taxable_amt                zx_lines.taxable_amt%TYPE;
2292   l_orig_taxable_amt           zx_lines.orig_taxable_amt%TYPE;
2293   l_line_amt                   zx_lines.line_amt%TYPE;
2294   l_current_line_amt           zx_lines.line_amt%TYPE;
2295   */
2296 
2297   l_self_assessed_flag         zx_lines.self_assessed_flag%TYPE;
2298   l_tax_amt_included_flag      zx_lines.tax_amt_included_flag%TYPE;
2299   l_tax_jurisdiction_id        zx_lines.tax_jurisdiction_id%TYPE;
2300   l_tax_jurisdiction_code      zx_lines.tax_jurisdiction_code%TYPE;
2301   l_tax_status_rec             ZX_TDS_UTILITIES_PKG.zx_status_info_rec;
2302   l_tax_rate_rec               ZX_TDS_UTILITIES_PKG.zx_rate_info_rec_type;
2303 
2304   l_error_buffer               VARCHAR2(200);
2305   l_tax_tbl_subscript          NUMBER;
2306 
2307   l_trx_line_id                NUMBER;
2308   l_trx_level_type             zx_lines.trx_level_type%TYPE;
2309   l_begin_index                BINARY_INTEGER;
2310   l_end_index                  BINARY_INTEGER;
2311 
2312   /* Bug4959835: Moved to handle_update_scenarios
2313   l_unrounded_taxable_amt     zx_lines.unrounded_taxable_amt%TYPE;
2314   l_unrounded_tax_amt         zx_lines.unrounded_tax_amt%TYPE;
2315   l_cal_tax_amt               zx_lines.cal_tax_amt%TYPE;
2316   */
2317 
2318   l_jur_index                 NUMBER;
2319 
2320   l_jurisdictions_found      VARCHAR2(1);
2321   l_jurisdiction_rec         ZX_TCM_GEO_JUR_PKG.tax_jurisdiction_rec_type;
2322   l_jurisdiction_rec_tbl     ZX_TCM_GEO_JUR_PKG.tax_jurisdiction_rec_tbl_type;
2323   l_tax_class                zx_rates_b.tax_class%TYPE;
2324   l_temp_num                 NUMBER;
2325 
2326   -- cursor to order the jurisdictions in the GT
2327   CURSOR c_get_jurisdiction_from_gt(
2328            c_tax_regime_code  VARCHAR2,
2329            c_tax              VARCHAR2)IS
2330     SELECT tax_jurisdiction_id,
2331            tax_jurisdiction_code,
2332            tax_regime_code,
2333            tax,
2334            precedence_level
2335       FROM zx_jurisdictions_gt
2336      WHERE tax_regime_code = c_tax_regime_code
2337        AND tax = c_tax
2338      ORDER BY precedence_level;
2339 
2340   -- This cursor gets all the taxes for a regime
2341   --
2342   CURSOR get_all_taxes_for_regime_cur IS
2343     SELECT tax_id,
2344            tax,
2345            tax_regime_code,
2346            tax_type_code,
2347            tax_precision,
2348            minimum_accountable_unit,
2349            Rounding_Rule_Code,
2350            Tax_Status_Rule_Flag,
2351            Tax_Rate_Rule_Flag,
2352            Place_Of_Supply_Rule_Flag,
2353            Applicability_Rule_Flag,
2354            Tax_Calc_Rule_Flag,
2355            Taxable_Basis_Rule_Flag,
2356            def_tax_calc_formula,
2357            def_taxable_basis_formula,
2358            Reporting_Only_Flag,
2359            tax_currency_code,
2360            Def_Place_Of_Supply_Type_Code,
2361            Def_Registr_Party_Type_Code,
2362            Registration_Type_Rule_Flag,
2363            Direct_Rate_Rule_Flag,
2364            Def_Inclusive_Tax_Flag,
2365            effective_from,
2366            effective_to,
2367            compounding_precedence,
2368            Has_Other_Jurisdictions_Flag,
2369            Live_For_Processing_Flag,
2370            Regn_Num_Same_As_Le_Flag,
2371            applied_amt_handling_flag,
2372            exchange_rate_type,
2373            applicable_by_default_flag,
2374            record_type_code,
2375            tax_exmpt_cr_method_code,
2376            tax_exmpt_source_tax,
2377            legal_reporting_status_def_val,
2378            def_rec_settlement_option_code,
2379            zone_geography_type,
2380            override_geography_type,
2381            allow_rounding_override_flag,
2382            tax_account_source_tax
2383       FROM ZX_SCO_TAXES  zxt
2384      WHERE zxt.tax_regime_code = p_tax_regime_code
2385        AND live_for_processing_flag = 'Y'
2386        AND live_for_applicability_flag = 'Y'
2387        AND ( p_tax_determine_date >= effective_from AND
2388             (p_tax_determine_date <= effective_to OR effective_to IS NULL))
2389        AND zxt.offset_tax_flag = 'N'
2390       ORDER BY compounding_precedence;
2391 
2392   /* Bug 4959835: Moved to procedure handle_update_scenarios
2393   CURSOR get_key_columns_cur(p_tax    zx_lines.tax%TYPE)  IS
2394     SELECT tax_line_id,
2395            last_manual_entry,
2396            tax_status_code,
2397            orig_tax_status_id,
2398            orig_tax_status_code,
2399            tax_rate_code,
2400            tax_rate,
2401            orig_tax_rate_id,
2402            orig_tax_rate_code,
2403            orig_tax_rate,
2404            tax_amt,
2405            orig_tax_amt,
2406            taxable_amt,
2407            orig_taxable_amt,
2408            line_amt,
2409            self_assessed_flag,
2410            tax_amt_included_flag,
2411            tax_jurisdiction_id,
2412            tax_jurisdiction_code,
2413            orig_self_assessed_flag,
2414            orig_tax_amt_included_flag,
2415            orig_tax_jurisdiction_id,
2416            orig_tax_jurisdiction_code,
2417            unrounded_taxable_amt,
2418            unrounded_tax_amt,
2419            cal_tax_amt,
2420            associated_child_frozen_flag
2421       FROM zx_lines
2422      WHERE application_id = p_event_class_rec.application_id
2423        AND entity_code = p_event_class_rec.entity_code
2424        AND event_class_code = p_event_class_rec.event_class_code
2425        AND trx_id = p_event_class_rec.trx_id
2426        AND trx_line_id =
2427            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index)
2428        AND trx_level_type =
2429            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index)
2430        AND tax_regime_code = p_tax_regime_code
2431        AND tax = p_tax
2432        AND mrc_tax_line_flag = 'N';
2433 
2434   CURSOR  enforce_rate_code_from_ref_doc(
2435                   c_tax                 zx_lines.tax%TYPE,
2436                   c_tax_regime_code     zx_lines.tax_regime_code%TYPE) IS
2437    SELECT tax_status_code,
2438           tax_rate_code,
2439           line_amt,
2440           tax_amt,
2441           taxable_amt
2442      FROM zx_lines
2443     WHERE application_id =
2444           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(p_trx_line_index)
2445       AND event_class_code =
2446           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_event_class_code(p_trx_line_index)
2447       AND entity_code =
2448           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_entity_code(p_trx_line_index)
2449       AND trx_id =
2450           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_trx_id(p_trx_line_index)
2451       AND trx_line_id =
2452           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_line_id(p_trx_line_index)
2453       AND trx_level_type =
2454           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_trx_level_type(p_trx_line_index)
2455       AND tax_regime_code = c_tax_regime_code
2456       AND tax = c_tax
2457       AND cancel_flag <> 'Y'
2458       AND mrc_tax_line_flag = 'N';
2459 
2460       Bug 4959835*/
2461 
2462   -- bug 4728374
2463   CURSOR  check_product_family_group_csr(
2464           c_tax_regime_code   zx_rates_b.tax_regime_code%TYPE,
2465           c_tax               zx_rates_b.tax%TYPE,
2466           c_tax_status_code   zx_rates_b.tax_status_code%TYPE,
2467           c_tax_rate_code     zx_rates_b.tax_rate_code%TYPE,
2468           c_tax_class         zx_rates_b.tax_class%TYPE) IS
2469    SELECT 1
2470      FROM ZX_SCO_RATES_B_V
2471     WHERE effective_from <= p_tax_determine_date
2472       AND (effective_to  >= p_tax_determine_date  OR  effective_to IS NULL )
2473       AND tax_rate_code = c_tax_rate_code
2474       AND tax_status_code = c_tax_status_code
2475       AND tax = c_tax
2476       AND tax_regime_code = c_tax_regime_code
2477       AND Active_Flag = 'Y'
2478       AND (tax_class = c_tax_class or tax_class IS NULL)
2479       AND ROWNUM=1;
2480 
2481 BEGIN
2482 
2483   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2484 
2485   IF (g_level_procedure >= g_current_runtime_level ) THEN
2486     FND_LOG.STRING(g_level_procedure,
2487            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.BEGIN',
2488            'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(+)');
2489   END IF;
2490 
2491   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
2492 
2493   l_tax_applicable := FALSE;
2494 
2495   IF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
2496     l_tax_class := 'OUTPUT';
2497   ELSIF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
2498     l_tax_class := 'INPUT';
2499   END IF;
2500 
2501   l_trx_line_id :=
2502        ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
2503   l_trx_level_type :=
2504     ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
2505 
2506   -- bugfix 5024740: move delete from jurisdictions gt to init_for_header and
2507   -- init_for_line in the wrapper
2508 
2509   IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
2510                                               p_trx_line_index) = 'CREATE' OR
2511      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
2512                                      p_trx_line_index) = 'CREATE_WITH_TAX' OR
2513      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
2514                                               p_trx_line_index) = 'UPDATE' OR
2515      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
2516                                      p_trx_line_index) = 'CREATE_TAX_ONLY' OR
2517      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
2518                                  p_trx_line_index) = 'COPY_AND_CREATE'
2519   THEN
2520 
2521     FOR l_tax_rec IN get_all_taxes_for_regime_cur LOOP
2522       -- init the local indicator of whether the tax is applicable.
2523       l_tax_applicable := FALSE;
2524       l_direct_rate_result_id := NULL;
2525       l_tax_tbl_subscript := NULL;
2526 
2527       IF (g_level_statement >= g_current_runtime_level ) THEN
2528         FND_LOG.STRING(g_level_statement,
2529                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2530                        'p_trx_line_index: '|| p_trx_line_index|| 'p_tax_regime_code: '||l_tax_rec.tax_regime_code|| 'l_tax: '|| l_tax_rec.tax);
2531       END IF;
2532 
2533       -- populate g_tax_rec_tbl, if it does not exist
2534       --
2535       IF NOT ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl.EXISTS(l_tax_rec.tax_id) THEN
2536 
2537         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_rec.tax_id) := l_tax_rec;
2538 
2539         /* Following are commented out since the select column in the cursor
2540           get_all_taxes_for_regime_cur has the same set of column as the definition
2541           of ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl and in the same order. Changed to
2542           assignment as above. If later new columns added to get_all_taxes_for_regime_cur,
2543           but not need to cache, we need to uncomment this part and add the assignment
2544           individually.
2545 
2546         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2547                            l_tax_rec.tax_id).tax_id := l_tax_rec.tax_id;
2548         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2549                            l_tax_rec.tax_id).tax := l_tax_rec.tax;
2550         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2551                            l_tax_rec.tax_id).def_place_of_supply_type_code :=
2552                                       l_tax_rec.def_place_of_supply_type_code;
2553         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2554                            l_tax_rec.tax_id).place_of_supply_rule_flag :=
2555                                       l_tax_rec.place_of_supply_rule_flag;
2556         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2557                            l_tax_rec.tax_id).applicability_rule_flag :=
2558                                       l_tax_rec.applicability_rule_flag;
2559         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2560                 l_tax_rec.tax_id).direct_rate_rule_flag :=
2561                                              l_tax_rec.direct_rate_rule_flag;
2562         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2563                 l_tax_rec.tax_id).def_registr_party_type_code :=
2564                                        l_tax_rec.def_registr_party_type_code;
2565         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2566                 l_tax_rec.tax_id).registration_type_rule_flag  :=
2567                                         l_tax_rec.registration_type_rule_flag;
2568         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2569              l_tax_rec.tax_id).tax_regime_code := l_tax_rec.tax_regime_code;
2570         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2571            l_tax_rec.tax_id).tax_currency_code := l_tax_rec.tax_currency_code;
2572         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2573                    l_tax_rec.tax_id).tax_precision := l_tax_rec.tax_precision;
2574         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2575               l_tax_rec.tax_id).minimum_accountable_unit :=
2576                                           l_tax_rec.minimum_accountable_unit;
2577         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2578          l_tax_rec.tax_id).rounding_rule_code :=l_tax_rec.rounding_rule_code;
2579         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2580              l_tax_rec.tax_id).tax_status_rule_flag :=
2581                                               l_tax_rec.tax_status_rule_flag;
2582         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2583            l_tax_rec.tax_id).tax_rate_rule_flag := l_tax_rec.tax_rate_rule_flag;
2584         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2585            l_tax_rec.tax_id).tax_calc_rule_flag := l_tax_rec.tax_calc_rule_flag;
2586         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2587          l_tax_rec.tax_id).taxable_basis_rule_flag :=
2588                                          l_tax_rec.taxable_basis_rule_flag;
2589         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2590               l_tax_rec.tax_id).def_tax_calc_formula :=
2591                                              l_tax_rec.def_tax_calc_formula;
2592         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2593               l_tax_rec.tax_id).def_taxable_basis_formula :=
2594                                          l_tax_rec.def_taxable_basis_formula;
2595         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2596                 l_tax_rec.tax_id).tax_type_code := l_tax_rec.tax_type_code;
2597         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2598          l_tax_rec.tax_id).reporting_only_flag := l_tax_rec.reporting_only_flag;
2599         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2600              l_tax_rec.tax_id).def_inclusive_tax_flag :=
2601                                               l_tax_rec.def_inclusive_tax_flag;
2602         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2603              l_tax_rec.tax_id).applied_amt_handling_flag :=
2604                                            l_tax_rec.applied_amt_handling_flag;
2605         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2606              l_tax_rec.tax_id).exchange_rate_type :=
2607                                            l_tax_rec.exchange_rate_type;
2608         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2609              l_tax_rec.tax_id).has_other_jurisdictions_flag :=
2610                                         l_tax_rec.has_other_jurisdictions_flag;
2611         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
2612              l_tax_rec.tax_id).tax_exmpt_source_tax :=
2613                                         l_tax_rec.tax_exmpt_source_tax;
2614       */
2615 
2616       END IF;      -- g_tax_rec_tbl(l_tax_rec.tax_id) does not exist
2617 
2618       -- For import service, tax lines may be created from summary lines
2619       --
2620       -- Bug 4277751: For intercompany transaction, need to pull in detail
2621       --   tax lines from source documnet.
2622       --
2623       IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
2624                                        p_trx_line_index) = 'CREATE_WITH_TAX' OR
2625          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
2626                                                 p_trx_line_index) = 'UPDATE' OR
2627           (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
2628                                  p_trx_line_index) IN ('CREATE', 'UPDATE')
2629             AND ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_event_class_code(
2630                                  p_trx_line_index) = 'INTERCOMPANY_TRX')
2631       THEN
2632         -- Check if this tax line exists in the new created applicable tax lines
2633         --
2634         l_tax_tbl_subscript := ZX_TDS_UTILITIES_PKG.get_tax_index(
2635                                            l_tax_rec.tax_regime_code,
2636                                            l_tax_rec.tax,
2637                                            l_trx_line_id,
2638                                            l_trx_level_type,
2639                                            x_begin_index,
2640                                            x_end_index,
2641                                            x_return_status);
2642 
2643         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2644           IF (g_level_statement >= g_current_runtime_level ) THEN
2645             FND_LOG.STRING(g_level_statement,
2646                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2647                    'Incorrect return_status after calling ' ||
2648                    'ZX_TDS_UTILITIES_PKG.get_tax_index');
2649             FND_LOG.STRING(g_level_statement,
2650                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2651                    'RETURN_STATUS = ' || x_return_status);
2652             FND_LOG.STRING(g_level_statement,
2653                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.END',
2654                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(-)');
2655           END IF;
2656           RETURN;
2657         END IF;
2658       END IF;
2659 
2660       -- If this tax does not exist in g_detail_tax_lines_tbl ,create a
2661       -- new detail tax line in it
2662       IF (l_tax_tbl_subscript IS NULL) THEN
2663 
2664         -- Use direct_rate_rule_flag to check if tax is applicable first,
2665         -- if not, use applicability_rule_flag
2666         --
2667         IF l_tax_rec.direct_rate_rule_flag = 'Y' THEN
2668 
2669           l_tax_applicable := is_direct_rate_applicable (
2670                 p_tax_id                 => l_tax_rec.tax_id,
2671                 p_tax_determine_date     => p_tax_determine_date,
2672                 p_event_class_rec        => p_event_class_rec,
2673                 p_trx_line_index         => p_trx_line_index,
2674                 x_direct_rate_result_rec => l_direct_rate_result_rec,
2675                 x_direct_rate_result_id  => l_direct_rate_result_id,
2676                 x_return_status          => x_return_status);
2677 
2678           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2679             IF (g_level_statement >= g_current_runtime_level ) THEN
2680               FND_LOG.STRING(g_level_statement,
2681                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2682                      'Incorrect return_status after calling ' ||
2683                      'ZX_TDS_APPLICABILITY_DETM_PKG.is_direct_rate_applicable');
2684               FND_LOG.STRING(g_level_statement,
2685                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2686                      'RETURN_STATUS = ' || x_return_status);
2687               FND_LOG.STRING(g_level_statement,
2688                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.END',
2689                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(-)');
2690             END IF;
2691             RETURN;
2692           ELSE
2693 
2694             IF l_tax_applicable THEN
2695 
2696               IF (g_level_statement >= g_current_runtime_level ) THEN
2697                 FND_LOG.STRING(g_level_statement,
2698                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2699                        'l_direct_rate_result_rec.status_result = ' ||
2700                         l_direct_rate_result_rec.status_result||'l_direct_rate_result_rec.rate_result = ' ||
2701                         l_direct_rate_result_rec.rate_result);
2702               END IF;
2703 
2704               -- Check if tax rate exists in the same product family group
2705               --
2706               OPEN  check_product_family_group_csr(
2707                      l_tax_rec.tax_regime_code,
2708                      l_tax_rec.tax,
2709                      l_direct_rate_result_rec.status_result,
2710                      l_direct_rate_result_rec.rate_result,
2711                      l_tax_class);
2712               FETCH check_product_family_group_csr INTO l_temp_num;
2713 
2714               IF check_product_family_group_csr%NOTFOUND THEN
2715                 -- tax not applicable, reset l_tax_applicable
2716                 --
2717                 l_tax_applicable := FALSE;
2718 
2719                 IF (g_level_statement >= g_current_runtime_level ) THEN
2720                   FND_LOG.STRING(g_level_statement,
2721                          'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2722                          'Tax Rate does not exist in this product family group. ');
2723                 END IF;
2724               ELSE
2725                 IF (g_level_statement >= g_current_runtime_level ) THEN
2726                   FND_LOG.STRING(g_level_statement,
2727                          'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2728                          'Tax Rate exists in this product family group. ');
2729                 END IF;
2730               END IF;
2731               CLOSE check_product_family_group_csr;
2732             END IF;
2733           END IF;
2734 
2735           IF (g_level_statement >= g_current_runtime_level ) THEN
2736             IF l_tax_applicable THEN
2737               FND_LOG.STRING(g_level_statement,
2738                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2739                      'Direct Rate is Applicable. ');
2740             ELSE
2741               FND_LOG.STRING(g_level_statement,
2742                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2743                      'Direct Rate is not Applicable. ');
2744             END IF;
2745           END IF;
2746         END IF;     -- l_tax_rec.direct_rate_rule_flag = 'Y'
2747 
2748         -- Initialize the TCM jurisdiction global tbl for each tax.
2749         g_inner_jurisdiction_code := NULL;
2750         g_outer_jurisdiction_code := NULL;
2751         g_inner_jurisdiction_id := NULL;
2752         g_outer_jurisdiction_id := NULL;
2753         l_jurisdictions_found := NULL;
2754 
2755         IF l_direct_rate_result_id IS NOT NULL AND NOT l_tax_applicable THEN
2756           -- Direct rate rule returns results, but tax rate does not exist
2757           -- in this product family group
2758           --
2759           NULL;
2760         ELSE
2761           -- Check if the location pointed by place of supply rules or default
2762           -- supply type maps to a jurisdiction.
2763           --
2764           get_place_of_supply (
2765               p_event_class_rec             => p_event_class_rec,
2766               p_tax_regime_code             => l_tax_rec.tax_regime_code,
2767               p_tax_id                      => l_tax_rec.tax_id,
2768               p_tax                         => l_tax_rec.tax,
2769               p_tax_determine_date          => p_tax_determine_date,
2770               p_def_place_of_supply_type_cd => l_tax_rec.def_place_of_supply_type_code,
2771               p_place_of_supply_rule_flag   => l_tax_rec.place_of_supply_rule_flag,
2772               p_applicability_rule_flag     => l_tax_rec.applicability_rule_flag,
2773               p_def_reg_type                => l_tax_rec.def_registr_party_type_code,
2774               p_reg_rule_flg                => l_tax_rec.registration_type_rule_flag,
2775               p_trx_line_index              => p_trx_line_index,
2776               p_direct_rate_result_id       => l_direct_rate_result_id,
2777               x_jurisdiction_rec            => l_jurisdiction_rec,
2778               x_jurisdictions_found         => l_jurisdictions_found,
2779               x_place_of_supply_type_code   => l_place_of_supply_type_code,
2780               x_place_of_supply_result_id   => l_place_of_supply_result_id,
2781               x_return_status               => x_return_status);
2782 
2783           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2784             IF (g_level_statement >= g_current_runtime_level ) THEN
2785               FND_LOG.STRING(g_level_statement,
2786                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2787                      'Incorrect return_status after calling ' ||
2788                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply');
2789             END IF;
2790 
2791             -- For migrated taxes, if the has_other_jurisdictions_flag on the tax is 'N',
2792             -- no jurisdiction required, so ignore the errors raised from get_place_of_supply
2793             --
2794             IF NVL(l_tax_rec.has_other_jurisdictions_flag, 'N') = 'N' AND
2795               NVL(l_tax_rec.record_type_code, 'USER_DEFINED') = 'MIGRATED'
2796             THEN
2797 
2798               x_return_status := FND_API.G_RET_STS_SUCCESS;
2799               IF (g_level_statement >= g_current_runtime_level ) THEN
2800                 FND_LOG.STRING(g_level_statement,
2801                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2802                        'For migrated taxes, if the has_other_jurisdictions_flag on ' ||
2803                        'the tax is N, no jurisdiction required. Continue processing tax... ');
2804               END IF;
2805 
2806             ELSE
2807               IF (g_level_statement >= g_current_runtime_level ) THEN
2808                 FND_LOG.STRING(g_level_statement,
2809                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2810                        'Unable to determine the Place of Supply for tax: '||l_tax_rec.tax||
2811                        ' Place of Supply is mandatory when Direct Rate Determination is not used');
2812                 FND_LOG.STRING(g_level_statement,
2813                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2814                        'RETURN_STATUS = ' || x_return_status);
2815                 FND_LOG.STRING(g_level_statement,
2816                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.END',
2817                        'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(-)');
2818               END IF;
2819 
2820               RETURN;
2821             END IF;
2822           END IF;
2823         END IF;
2824 
2825         IF l_tax_applicable AND
2826            NVL(l_jurisdictions_found, 'N') <> 'Y' AND
2827            NVL(l_tax_rec.has_other_jurisdictions_flag, 'N') = 'Y'
2828         THEN
2829 
2830           l_tax_applicable := FALSE;
2831 
2832         END IF;
2833 
2834         -- If Direct Rate Determination Process does not return
2835         -- successfully, check the mapping to a jurisdiction. If there is no
2836         -- mapping to a jurisdiction, tax is not applicable.
2837         --
2838         IF (NOT l_tax_applicable) AND (l_jurisdictions_found = 'Y' OR
2839                NVL(l_tax_rec.has_other_jurisdictions_flag, 'N') = 'N'
2840 	       AND NVL(l_tax_rec.record_type_code, 'USER_DEFINED') = 'MIGRATED') THEN  --Bug 5854385
2841 
2842           IF l_jurisdictions_found = 'Y'
2843             AND l_jurisdiction_rec.tax_jurisdiction_code IS NULL
2844           THEN
2845 
2846             -- for multiple jurisdictions case: cache the most inner
2847             -- and outer jurisdiction for future usage
2848 
2849             IF (g_level_statement >= g_current_runtime_level ) THEN
2850               FND_LOG.STRING(g_level_statement,
2851                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2852                      'It is a multiple jurisdiction case. ' );
2853             END IF;
2854 
2855             -- Stamp multiple_jurisdiction_flag on the tax line to 'Y'
2856            /* Commented for the : Bug 5045030
2857             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2858               l_new_row_num).multiple_jurisdictions_flag := 'Y';*/
2859 
2860             OPEN c_get_jurisdiction_from_gt(p_tax_regime_code, l_tax_rec.tax);
2861             FETCH c_get_jurisdiction_from_gt
2862               BULK COLLECT INTO l_jurisdiction_rec_tbl;
2863             CLOSE c_get_jurisdiction_from_gt;
2864 
2865             IF l_jurisdiction_rec_tbl.COUNT = 0 THEN
2866               RAISE NO_DATA_FOUND;
2867               IF (g_level_error >= g_current_runtime_level ) THEN
2868                 FND_LOG.STRING(g_level_error,
2869                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2870                      'No data found in ZX_JURISDICTIONS_GT when multiple jurisdictions found.');
2871               END IF;
2872 
2873             END IF;
2874             -- cache the global most inner and outer jurisdiction code
2875             l_jur_index := l_jurisdiction_rec_tbl.FIRST;
2876             g_inner_jurisdiction_code
2877                := l_jurisdiction_rec_tbl(l_jur_index).tax_jurisdiction_code;
2878             g_inner_jurisdiction_id
2879                := l_jurisdiction_rec_tbl(l_jur_index).tax_jurisdiction_id;
2880 
2881             l_jur_index := l_jurisdiction_rec_tbl.LAST;
2882             g_outer_jurisdiction_code
2883                := l_jurisdiction_rec_tbl(l_jur_index).tax_jurisdiction_code;
2884             g_outer_jurisdiction_id
2885                := l_jurisdiction_rec_tbl(l_jur_index).tax_jurisdiction_id;
2886 
2887             IF (g_level_statement >= g_current_runtime_level ) THEN
2888               FND_LOG.STRING(g_level_statement,
2889                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2890                      'inner_jurisdiction_code = '|| g_inner_jurisdiction_code ||'outer_jurisdiction_code = '|| g_outer_jurisdiction_code);
2891 
2892             END IF;
2893 
2894           ELSIF l_jurisdictions_found = 'Y'
2895               AND l_jurisdiction_rec.tax_jurisdiction_code IS NOT NULL
2896           THEN
2897             -- for single jurisdiction case: cache the most inner
2898             -- and outer jurisdiction same as the jurisdiction found
2899             -- for future usage
2900 
2901             g_inner_jurisdiction_code
2902                := l_jurisdiction_rec.tax_jurisdiction_code;
2903             g_inner_jurisdiction_id
2904                := l_jurisdiction_rec.tax_jurisdiction_id;
2905             g_outer_jurisdiction_code
2906                := l_jurisdiction_rec.tax_jurisdiction_code;
2907             g_outer_jurisdiction_id
2908                := l_jurisdiction_rec.tax_jurisdiction_id;
2909 
2910             IF (g_level_statement >= g_current_runtime_level ) THEN
2911               FND_LOG.STRING(g_level_statement,
2912                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2913                      'single jurisdiction code  = '|| g_inner_jurisdiction_code);
2914             END IF;
2915           END IF;
2916 
2917           -- call is_tax_applicable to determine tax applicability
2918           --
2919           l_tax_applicable := is_tax_applicable (
2920                 p_tax_id                  => l_tax_rec.tax_id,
2921                 p_tax_determine_date      => p_tax_determine_date,
2922                 p_applicability_rule_flag => l_tax_rec.applicability_rule_flag,
2923                 p_event_class_rec         => p_event_class_rec,
2924                 p_trx_line_index          => p_trx_line_index,
2925                 p_applicable_by_default_flag => l_tax_rec.applicable_by_default_flag,
2926                 x_applicability_result    => l_applicability_result,
2927                 x_applicability_result_id => l_applicability_result_id,
2928                 x_return_status           => x_return_status);
2929 
2930           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2931             IF (g_level_statement >= g_current_runtime_level ) THEN
2932               FND_LOG.STRING(g_level_statement,
2933                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2934                      'Incorrect return_status after calling ' ||
2935                      'ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable');
2936               FND_LOG.STRING(g_level_statement,
2937                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2938                      'RETURN_STATUS = ' || x_return_status);
2939               FND_LOG.STRING(g_level_statement,
2940                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.END',
2941                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(-)');
2942             END IF;
2943             RETURN;
2944           END IF;
2945         END IF;       -- NOT l_tax_applicable
2946 
2947         IF l_tax_applicable THEN
2948 
2949           l_new_row_num :=
2950             NVL( ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST, 0)+1;
2951 
2952           IF (x_begin_index is null) THEN
2953             x_begin_index := l_new_row_num;
2954           END IF;
2955 
2956           IF(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
2957                                             p_trx_line_index)='UPDATE') THEN
2958 
2959              -- Bug 4959835. Moved the code to a private procedure.
2960              handle_update_scenarios( p_trx_line_index,
2961                                       p_event_class_rec,
2962                                       l_new_row_num,
2963                                       l_tax_rec.tax_regime_code,
2964                                       l_tax_rec.tax,
2965                                       p_tax_date,
2966                                       p_tax_determine_date,
2967                                       p_tax_point_date,
2968                                       l_self_assessed_flag,
2969                                       l_tax_amt_included_flag,
2970                                       l_tax_jurisdiction_id,
2971                                       l_tax_jurisdiction_code,
2972                                       x_return_status);
2973 
2974              IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2975                  IF (g_level_statement >= g_current_runtime_level ) THEN
2976                    FND_LOG.STRING(g_level_statement,
2977                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2978                      'Incorrect return_status after calling ' ||
2979                      'ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable');
2980                    FND_LOG.STRING(g_level_statement,
2981                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
2982                      'RETURN_STATUS = ' || x_return_status);
2983                    FND_LOG.STRING(g_level_statement,
2984                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.END',
2985                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(-)');
2986                  END IF;
2987                 RETURN;
2988              END IF;
2989 
2990           ELSE   -- 'CREATE'
2991            /*
2992             * will be populated by pop_tax_line_for_trx_line
2993             * SELECT zx_lines_s.NEXTVAL
2994             * INTO ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
2995             *                              l_new_row_num).tax_line_id
2996             * FROM dual;
2997             */
2998 
2999             NULL;
3000           END IF;
3001 
3002 	  -- Added for Bug 5045030 :
3003 	  IF l_jurisdictions_found = 'Y' AND
3004 	     l_jurisdiction_rec.tax_jurisdiction_code IS NULL
3005 	  THEN
3006 		ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3007 			      l_new_row_num).multiple_jurisdictions_flag := 'Y';
3008 	  END IF ;
3009 
3010           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3011              l_new_row_num).application_id :=  p_event_class_rec.application_id;
3012           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3013              l_new_row_num).event_class_code := p_event_class_rec.event_class_code;
3014           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3015              l_new_row_num).event_type_code := p_event_class_rec.event_type_code;
3016           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3017              l_new_row_num).entity_code := p_event_class_rec.entity_code;
3018 
3019           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3020                                            l_new_row_num).tax_date := p_tax_date;
3021 
3022           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3023                    l_new_row_num).tax_determine_date := p_tax_determine_date;
3024 
3025           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3026                            l_new_row_num).tax_point_date := p_tax_point_date;
3027 
3028           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3029              l_new_row_num).place_of_supply_type_code :=
3030                                                  l_place_of_supply_type_code;
3031 
3032           -- if orig_tax_jurisdiction_code(id) is not NULL (for UPDATE),
3033           -- populate tax_jurisdiction_code and tax_jurisdiction_id fetched
3034           -- from zx_lines. Otherwise, populate new tax_jurisdiction_code
3035           -- and tax_jurisdiction_id from most inner jurisdiction info
3036           --
3037           IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3038                         l_new_row_num).orig_tax_jurisdiction_code IS NOT NULL
3039           THEN
3040             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3041               l_new_row_num).tax_jurisdiction_code := l_tax_jurisdiction_code;
3042 
3043             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3044               l_new_row_num).tax_jurisdiction_id := l_tax_jurisdiction_id;
3045           ELSE
3046             -- always stamp the most inner jurisdiction code on tax line
3047 
3048             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3049               l_new_row_num).tax_jurisdiction_code
3050                 := NVL(l_jurisdiction_rec.tax_jurisdiction_code,
3051                      g_inner_jurisdiction_code);
3052 
3053             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3054               l_new_row_num).tax_jurisdiction_id
3055                 := NVL(l_jurisdiction_rec.tax_jurisdiction_id,
3056                        g_inner_jurisdiction_id);
3057           END IF;
3058 
3059           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3060                              l_new_row_num).tax_regime_id := p_tax_regime_id;
3061           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3062                  l_new_row_num).tax_regime_code := l_tax_rec.tax_regime_code;
3063           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3064                                          l_new_row_num).tax := l_tax_rec.tax;
3065           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3066                                    l_new_row_num).tax_id := l_tax_rec.tax_id;
3067           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3068              l_new_row_num).tax_currency_code := l_tax_rec.tax_currency_code;
3069           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3070                      l_new_row_num).tax_type_code := l_tax_rec.tax_type_code;
3071           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3072            l_new_row_num).tax_currency_conversion_date := p_tax_determine_date;
3073 
3074           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3075                l_new_row_num).tax_currency_conversion_type :=
3076                                                 l_tax_rec.exchange_rate_type;
3077           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3078            l_new_row_num).reporting_only_flag := l_tax_rec.reporting_only_flag;
3079           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3080                       l_new_row_num).place_of_supply_result_id :=
3081                                                   l_place_of_supply_result_id;
3082 
3083           -- bug 5077691: populate legal_reporting_status
3084           IF p_event_class_rec.tax_reporting_flag = 'Y' THEN
3085             IF NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3086                         l_new_row_num).cancel_flag, 'N') <> 'Y' THEN
3087               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3088                         l_new_row_num).legal_reporting_status :=
3089                                      l_tax_rec.legal_reporting_status_def_val;
3090             END IF;
3091           END IF;
3092 
3093           -- populate applicability_rule_flag
3094           --
3095           IF l_tax_rec.applicability_rule_flag = 'Y' THEN
3096             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3097               l_new_row_num).tax_applicability_result_id :=
3098                                                     l_applicability_result_id;
3099 
3100           ELSIF l_tax_rec.direct_rate_rule_flag = 'Y' AND
3101                 l_direct_rate_result_id IS NOT NULL   AND -- Bug 6816250, add NVL
3102                 NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3103                  l_new_row_num).last_manual_entry,'X') NOT IN ('TAX_RATE','TAX_AMOUNT')
3104           THEN
3105 
3106             -- Populate direct_rate_rule_flag, as well as tax_status_code
3107             -- and tax_rate_code if direct_rate is applicable.
3108             --
3109             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3110               l_new_row_num).direct_rate_result_id := l_direct_rate_result_id;
3111             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3112                  l_new_row_num).tax_status_code :=
3113                                        l_direct_rate_result_rec.status_result;
3114             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3115                  l_new_row_num).tax_rate_code :=
3116                                          l_direct_rate_result_rec.rate_result;
3117 
3118             -- populate tax_status_id
3119             --
3120             ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
3121                                 l_tax_rec.tax,
3122                                 l_tax_rec.tax_regime_code,
3123                                 l_direct_rate_result_rec.status_result,
3124                                 p_tax_determine_date,
3125                                 l_tax_status_rec,
3126                                 x_return_status,
3127                                 l_error_buffer);
3128 
3129             IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3130               IF (g_level_error >= g_current_runtime_level ) THEN
3131                 FND_LOG.STRING(g_level_error,
3132                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3133                        'Incorrect return_status after calling '||
3134                        'ZX_TDS_UTILITIES_PKG.get_tax_rate_info.');
3135                 FND_LOG.STRING(g_level_error,
3136                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3137                        'RETURN_STATUS = ' || x_return_status);
3138                 FND_LOG.STRING(g_level_error,
3139                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.END',
3140                        'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(-)');
3141               END IF;
3142                            --  Bug 4959835: Since this cursor is moved, commenting this out
3143                -- CLOSE get_key_columns_cur;
3144               RETURN;
3145             END IF;
3146 
3147             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3148                                      l_new_row_num).tax_status_id :=
3149                                             l_tax_status_rec.tax_status_id;
3150           END IF;
3151 
3152           -- populate rounding_lvl_party_tax_prof_id and rounding_level_code
3153           --
3154           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3155             l_new_row_num).rounding_lvl_party_tax_prof_id :=
3156                     ZX_TDS_CALC_SERVICES_PUB_PKG.g_rnd_lvl_party_tax_prof_id;
3157 
3158           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3159             l_new_row_num).rounding_level_code :=
3160                                ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_level;
3161 
3162           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3163                 l_new_row_num).rounding_lvl_party_type :=
3164                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_lvl_party_type;
3165 
3166           -- populate hq_estb_party_tax_prof_id
3167           --
3168           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3169            l_new_row_num).hq_estb_party_tax_prof_id :=
3170             ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.hq_estb_party_tax_prof_id(
3171                                                                 p_trx_line_index);
3172 
3173           -- populate tax registration info
3174           --
3175           populate_registration_info(
3176                 p_event_class_rec      => p_event_class_rec,
3177                 p_trx_line_index       => p_trx_line_index,
3178                 p_rownum                 => l_new_row_num,
3179                 p_def_reg_type         => l_tax_rec.def_registr_party_type_code,
3180                 p_reg_rule_flg         => l_tax_rec.registration_type_rule_flag,
3181                 p_tax_determine_date   => p_tax_determine_date,
3182                 x_return_status        => x_return_status);
3183 
3184           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3185             IF (g_level_statement >= g_current_runtime_level ) THEN
3186               FND_LOG.STRING(g_level_statement,
3187                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3188                      'Incorrect return_status after calling ' ||
3189                      'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info');
3190               FND_LOG.STRING(g_level_statement,
3191                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3192                      'RETURN_STATUS = ' || x_return_status);
3193               FND_LOG.STRING(g_level_statement,
3194                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.END',
3195                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(-)');
3196             END IF;
3197             RETURN;
3198           END IF;
3199 
3200           -- If orig_tax_amt_included_flag/orig_self_assessed_flag is not NULL
3201           -- (for UPDATE), populate tax_amt_included_flag/self_assessed_flag
3202           -- fetched from zx_lines. Otherwise, keep tax_amt_included_flag/
3203           -- self_assessed_flag returned from get_tax_registration
3204           --
3205           IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3206                     l_new_row_num).orig_tax_amt_included_flag IS NOT NULL THEN
3207              ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3208               l_new_row_num).tax_amt_included_flag := l_tax_amt_included_flag;
3209           END IF;
3210 
3211           IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3212                        l_new_row_num).orig_self_assessed_flag IS NOT NULL THEN
3213             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3214                    l_new_row_num).self_assessed_flag := l_self_assessed_flag;
3215           END IF;
3216 
3217           -- populate rounding_rule_code if it is null
3218           --
3219           IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3220                                 l_new_row_num).rounding_rule_code IS NULL THEN
3221             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3222              l_new_row_num).rounding_rule_code := l_tax_rec.rounding_rule_code;
3223           END IF;
3224 
3225           -- If the value of p_event_class_rec.self_assess_tax_lines_flag
3226           -- is 'N', populate self_assessed_flg to 'N'
3227           --
3228           IF NVL(p_event_class_rec.self_assess_tax_lines_flag, 'N') = 'N'
3229           THEN
3230             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3231                                     l_new_row_num).self_assessed_flag := 'N';
3232           END IF;
3233 
3234           -- Bug 4277751: For intercompany transaction, detail tax lines from
3235           -- addintional applicability process should be marked as
3236           -- self assessed
3237           --
3238           -- Bug 5705976: Since, we stamp 'INTERCOMPANY_TRX' on both AR and AP
3239           -- transactions, the following code has become incorrect.
3240           --
3241 /*
3242           IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
3243                                  p_trx_line_index) IN ('CREATE', 'UPDATE') AND
3244              ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_event_class_code(
3245                                  p_trx_line_index) = 'INTERCOMPANY_TRX'
3246           THEN
3247             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3248                                     l_new_row_num).self_assessed_flag := 'Y';
3249           END IF;
3250 */
3251           -- If the value of p_event_class_rec.tax_recovery_flag is 'N',
3252           -- populate process_for_recovery_flag to 'N'. If it is 'Y', check
3253           -- reporting_only_flag to set tax_recovery_flag
3254           --
3255           /*
3256            * call populate_recovery_flg in ZX_TDS_TAX_LINES_POPU_PKG instead
3257            *
3258            * IF NVL(p_event_class_rec.tax_recovery_flag, 'N') = 'N' THEN
3259            *   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3260            *                   l_new_row_num).process_for_recovery_flag := 'N';
3261            * ELSE
3262            *  IF NVL(l_tax_rec.reporting_only_flag, 'N') <> 'Y' THEN
3263            *     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3264            *                  l_new_row_num).process_for_recovery_flag := 'Y';
3265            *   ELSE
3266            *    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3267            *                  l_new_row_num).process_for_recovery_flag := 'N';
3268            *   END IF;
3269            * END IF;
3270            */
3271 
3272           /* Move to ZX_TDS_TAXABLE_BASIS_DETM_PKG
3273            *
3274            * -- Populate tax_inclusion_flag and line_amt_includes_tax_flag
3275            * --
3276            * IF (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt_includes_tax_flag(
3277            *                                           p_trx_line_index) = 'A') THEN
3278            *   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3279            *                           l_new_row_num).tax_amt_included_flag := 'Y';
3280            *     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3281            *                         l_new_row_num).line_amt_includes_tax_flag := 'A';
3282            *
3283            * ELSIF(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt_includes_tax_flag(
3284            *                                        p_trx_line_index) = 'N') THEN
3285            *   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3286            *                             l_new_row_num).tax_amt_included_flag := 'N';
3287            *     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3288            *                         l_new_row_num).line_amt_includes_tax_flag := 'N';
3289            *
3290            * ELSIF(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt_includes_tax_flag(
3291            *                                    p_trx_line_index) IN ('S', 'I')) THEN
3292            *   -- Remain the value of tax_inclusion_flag returned by
3293            *   -- get_tax_regostration and set line_amt_includes_tax_flag to 'STANDARD'
3294            *     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3295            *                 l_new_row_num).line_amt_includes_tax_flag := 'S';
3296            *   NULL;
3297            * END IF;
3298          */
3299           -- populate Tax_Only_Line_Flag if line_level_action is 'CREATE_TAX_ONLY'
3300           --
3301           IF (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
3302                                    p_trx_line_index) = 'CREATE_TAX_ONLY') THEN
3303 
3304             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3305                                       l_new_row_num).tax_only_line_flag := 'Y';
3306           END IF;
3307         END IF;       -- l_tax_applicable
3308       END IF;         -- l_tax_tbl_subscript IS NULL
3309     END LOOP;         -- l_tax_rec IN get_all_taxes_for_regime_cur
3310 
3311     IF (x_begin_index is NOT NULL) THEN
3312       x_end_index :=
3313          NVL( ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST, 0);
3314     END IF;
3315 
3316     -- If p_event_class_rec.enforce_tax_from_ref_doc_flag = 'Y' AND
3317     -- trx_line_dist_tbl.ref_doc_application_id(p_trx_line_index) IS NOT NULL,
3318     -- get tax rate code from refefence document
3319     --
3320     IF p_event_class_rec.enforce_tax_from_ref_doc_flag = 'Y' AND
3321        ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(
3322                                                   p_trx_line_index) IS NOT NULL
3323     THEN
3324 
3325       enforce_tax_from_ref_doc(
3326                                   x_begin_index,
3327                                   x_end_index,
3328                                   p_trx_line_index,
3329                                   x_return_status);
3330 
3331           /* Bug 4959835: Moved the following as a private procedure for STCC req
3332       FOR i IN NVL(x_begin_index, -1) .. NVL(x_end_index, 0) LOOP
3333 
3334         OPEN enforce_rate_code_from_ref_doc(
3335           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax,
3336           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_regime_code);
3337 
3338         FETCH enforce_rate_code_from_ref_doc INTO
3339           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_status_code,
3340           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_code,
3341           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3342                                                            i).other_doc_line_amt,
3343           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3344                                                        i).other_doc_line_tax_amt,
3345           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3346                                                    i).other_doc_line_taxable_amt;
3347 
3348         IF enforce_rate_code_from_ref_doc%FOUND THEN
3349 
3350           -- populate copied_from_other_doc_flag and other_doc_source
3351           --
3352           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3353                                          i).copied_from_other_doc_flag := 'Y';
3354           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3355                                            i).other_doc_source := 'REFERENCE';
3356 
3357           IF g_level_statement >= g_current_runtime_level THEN
3358 
3359             FND_LOG.STRING(g_level_statement,
3360                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3361                'p_event_class_rec.enforce_tax_from_ref_doc_flag = Y. '||
3362                'get tax rate code from reference document');
3363             FND_LOG.STRING(g_level_statement,
3364                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3365                'From reference document: tax_status_code = '||
3366                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3367                                                          i).tax_status_code);
3368             FND_LOG.STRING(g_level_statement,
3369                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3370                'From reference document: tax_rate_code = '||
3371                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3372                                                          i).tax_rate_code);
3373             FND_LOG.STRING(g_level_statement,
3374                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3375                'other_doc_line_amt = '||
3376                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3377                                                       i).other_doc_line_amt);
3378             FND_LOG.STRING(g_level_statement,
3379                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3380                'other_doc_line_tax_amt = '||
3381                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3382                                                   i).other_doc_line_tax_amt);
3383             FND_LOG.STRING(g_level_statement,
3384                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3385                'other_doc_line_taxable_amt = '||
3386                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3387                                               i).other_doc_line_taxable_amt);
3388           END IF;
3389         ELSE
3390           IF g_level_statement >= g_current_runtime_level THEN
3391             FND_LOG.STRING(g_level_statement,
3392                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3393                'enforce_tax_from_ref_doc_flag is turned on, but tax status'||
3394                'code and tax rate code are not available from reference doc.');
3395           END IF;
3396         END IF;
3397 
3398         CLOSE enforce_rate_code_from_ref_doc;
3399 
3400       END LOOP;  -- i IN NVL(x_begin_index, -1) .. NVL(x_end_index, 0)
3401       End: enforce tax from doc - Bug 4959835 */
3402     END IF;      -- p_event_class_rec.enforce_tax_from_ref_doc_flag = 'Y'
3403 
3404     -- copy transaction info to new tax lines
3405     --
3406     ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines (p_trx_line_index,
3407                                                        x_begin_index,
3408                                                        x_end_index,
3409                                                        x_return_status,
3410                                                        l_error_buffer );
3411 
3412     IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
3413       IF (g_level_statement >= g_current_runtime_level ) THEN
3414         FND_LOG.STRING(g_level_statement,
3415                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3416                'Incorrect RETURN_STATUS after calling '||
3417                'ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines');
3418         FND_LOG.STRING(g_level_statement,
3419                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3420                'RETURN_STATUS = ' || x_return_status);
3421         FND_LOG.STRING(g_level_statement,
3422                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.END',
3423                'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(-)');
3424       END IF;
3425       RETURN;
3426     END IF;
3427   END IF;   -- line_level_action = 'CREATE', 'UPDATE', 'CREATE_TAX_ONLY'
3428 
3429   IF (g_level_procedure >= g_current_runtime_level ) THEN
3430     FND_LOG.STRING(g_level_procedure,
3431                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.END',
3432                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(-)'||'RETURN_STATUS = ' || x_return_status);
3433   END IF;
3434 
3435 EXCEPTION
3436   WHEN OTHERS THEN
3437     x_begin_index := NULL;
3438     x_end_index := NULL;
3439     IF (get_all_taxes_for_regime_cur%ISOPEN) THEN
3440       CLOSE get_all_taxes_for_regime_cur;
3441     END IF;
3442 
3443     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3444 
3445     IF (g_level_unexpected >= g_current_runtime_level ) THEN
3446       FND_LOG.STRING(g_level_unexpected,
3447                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
3448                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3449       FND_LOG.STRING(g_level_unexpected,
3450                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.END',
3451                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(-)');
3452     END IF;
3453 
3454 END get_applicable_taxes;
3455 
3456 ----------------------------------------------------------------------
3457 --  PROCEDURE
3458 --   get_det_tax_lines_from_applied
3459 --
3460 --  DESCRIPTION
3461 --
3462 --  This procedure get detail tax lines from applied from document
3463 --
3464 --  IN      p_trx_line_index
3465 --
3466 --  IN OUT NOCOPY
3467 --          x_begin_index
3468 --          x_end_index
3469 --  OUT NOCOPY     x_return_status
3470 
3471 PROCEDURE get_det_tax_lines_from_applied(
3472   p_event_class_rec        IN                   zx_api_pub.event_class_rec_type,
3473   p_trx_line_index         IN                   BINARY_INTEGER,
3474   p_tax_date               IN                   DATE,
3475   p_tax_determine_date     IN                   DATE,
3476   p_tax_point_date         IN                   DATE,
3477   x_begin_index            IN OUT NOCOPY        BINARY_INTEGER,
3478   x_end_index              IN OUT NOCOPY        BINARY_INTEGER,
3479   x_return_status          OUT NOCOPY           VARCHAR2) IS
3480 
3481  CURSOR get_tax_lines IS
3482    SELECT * FROM zx_lines
3483     WHERE application_id =
3484           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(p_trx_line_index)
3485       AND entity_code =
3486           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_entity_code(p_trx_line_index)
3487       AND event_class_code  =
3488           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_event_class_code(p_trx_line_index)
3489       AND trx_id =
3490           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_trx_id(p_trx_line_index)
3491       AND trx_line_id =
3492           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_line_id(p_trx_line_index)
3493       AND trx_level_type =
3494           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_trx_level_type(p_trx_line_index)
3495       AND tax_provider_id IS NULL
3496       AND Cancel_Flag<> 'Y'
3497       AND offset_link_to_tax_line_id IS NULL
3498       AND mrc_tax_line_flag = 'N';
3499 
3500  l_new_row_num                  NUMBER;
3501  l_begin_index                  BINARY_INTEGER;
3502  l_error_buffer                 VARCHAR2(200);
3503  l_line_amt_current             NUMBER;
3504  l_status_rec                   ZX_TDS_UTILITIES_PKG.ZX_STATUS_INFO_REC;
3505  l_applied_amt_handling_flag    ZX_TAXES_B.APPLIED_AMT_HANDLING_FLAG%TYPE;
3506 
3507 BEGIN
3508 
3509   IF (g_level_procedure >= g_current_runtime_level ) THEN
3510     FND_LOG.STRING(g_level_procedure,
3511                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied.BEGIN',
3512                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied(+)'|| 'p_trx_line_index = ' || to_char(p_trx_line_index));
3513   END IF;
3514 
3515   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
3516 
3517   -- initialize l_new_row_num
3518   --
3519   l_new_row_num := NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST, 0);
3520 
3521   -- get the begin_index for tax lines created in this procedure
3522   --
3523   l_begin_index := l_new_row_num + 1;
3524 
3525   FOR tax_line_rec in get_tax_lines LOOP
3526 
3527     -- populate tax cache ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl with this tax_id,
3528     -- if it does not exists there.
3529     --
3530     ZX_TDS_UTILITIES_PKG.populate_tax_cache (
3531                 p_tax_id         => tax_line_rec.tax_id,
3532                 p_return_status  => x_return_status,
3533                 p_error_buffer   => l_error_buffer);
3534 
3535     IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
3536       IF (g_level_statement >= g_current_runtime_level ) THEN
3537         FND_LOG.STRING(g_level_statement,
3538                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied',
3539                  'Incorrect return_status after calling ' ||
3540                  'ZX_TDS_UTILITIES_PKG.populate_tax_cache()');
3541         FND_LOG.STRING(g_level_statement,
3542                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied',
3543                  'RETURN_STATUS = ' || x_return_status);
3544         FND_LOG.STRING(g_level_statement,
3545                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied.END',
3546                  'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied(-)');
3547       END IF;
3548 
3549       RETURN;
3550     END IF;
3551 
3552     -- increment l_new_row_num
3553     --
3554     l_new_row_num := l_new_row_num +1;
3555 
3556     -- Populate the tax_line_id with Sequence
3557     --
3558     /*
3559      * will be populated by pop_tax_line_for_trx_line
3560      *
3561      * SELECT zx_lines_s.NEXTVAL
3562      *  INTO ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3563      *        l_new_row_num).tax_line_id from dual;
3564      */
3565     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3566                                             l_new_row_num).tax_line_id := NULL;
3567 
3568     -- populate tax related information from tax_line_rec
3569     --
3570     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3571                      l_new_row_num).tax_regime_id := tax_line_rec.tax_regime_id;
3572     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3573                    l_new_row_num).tax_regime_code:=tax_line_rec.tax_regime_code;
3574     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3575                                    l_new_row_num).tax_id := tax_line_rec.tax_id;
3576     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3577                                         l_new_row_num).tax := tax_line_rec.tax;
3578     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3579                    l_new_row_num).tax_status_code:=tax_line_rec.tax_status_code;
3580     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3581                 l_new_row_num).multiple_jurisdictions_flag :=
3582                                        tax_line_rec.multiple_jurisdictions_flag;
3583   BEGIN
3584     SELECT applied_amt_handling_flag INTO l_applied_amt_handling_flag
3585     FROM zx_taxes_b_tmp
3586     WHERE tax_id = tax_line_rec.tax_id;
3587 
3588     IF l_applied_amt_handling_flag = 'P'  --Bug 5650193
3589     THEN
3590 	  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3591                 l_new_row_num).tax_rate_type :=
3592                                        tax_line_rec.tax_rate_type;
3593     END IF;
3594   EXCEPTION WHEN OTHERS THEN
3595     IF (g_level_statement >= g_current_runtime_level ) THEN
3596         FND_LOG.STRING(g_level_statement,
3597                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied',
3598                  'Could Not Reterive a Row for the Tax Id'||tax_line_rec.tax_id);
3599      END IF;
3600   END;
3601 
3602 
3603     -- bug 5077691: populate legal_reporting_status
3604     IF p_event_class_rec.tax_reporting_flag = 'Y' THEN
3605       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3606                 l_new_row_num).legal_reporting_status :=
3607                       ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
3608                             tax_line_rec.tax_id).legal_reporting_status_def_val;
3609     END IF;
3610 
3611     -- For prepayment trx, tax lines are fetched from the original document and status codes
3612     -- are copied to the new tax lines.  However, since tax determiniation date most likely
3613     -- are different for the current document, the status id will need to be repopulated.
3614 
3615     ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
3616                     tax_line_rec.tax,
3617                     tax_line_rec.tax_regime_code,
3618                     tax_line_rec.tax_status_code,
3619                     p_tax_determine_date,
3620                     l_status_rec,
3621                     x_return_status,
3622                     l_error_buffer);
3623 
3624     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3625       IF (g_level_error >= g_current_runtime_level ) THEN
3626         FND_LOG.STRING(g_level_error,
3627                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied',
3628                'Incorrect return_status after calling ' ||
3629                'ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info()');
3630         FND_LOG.STRING(g_level_error,
3631                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied',
3632                'RETURN_STATUS = ' || x_return_status);
3633         FND_LOG.STRING(g_level_error,
3634                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied.END',
3635                'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied(-)');
3636       END IF;
3637 
3638       --
3639       -- add error message before return
3640       --
3641        FND_MESSAGE.SET_NAME('ZX','ZX_STATUS_NOT_FOUND');
3642        FND_MESSAGE.SET_TOKEN('TAX',tax_line_rec.tax);
3643 
3644       ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
3645         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
3646       ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
3647         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
3648 
3649       ZX_API_PUB.add_msg(
3650           ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
3651 
3652       RETURN;
3653     END IF;
3654     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3655                   l_new_row_num).tax_status_id := l_status_rec.tax_status_id;
3656 
3657     -- populate taxable_basis_formula and tax_calculation_formula
3658     --
3659     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3660                                l_new_row_num).taxable_basis_formula :=
3661                                               tax_line_rec.taxable_basis_formula;
3662     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3663                                l_new_row_num).tax_calculation_formula :=
3664                                             tax_line_rec.tax_calculation_formula;
3665 
3666     -- 1. If applied_amt_handling_flag ='P', populate tax rate percentage from
3667     --    applied from document. Tax is proarted based the amount applied.
3668     -- 2. If applied_amt_handling_flag ='R', populate tax rate Code from
3669     --    applied document. Tax rate is determined in the current document.
3670     --    Tax is recalculated based one the tax rate in the current document.
3671 
3672     IF ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
3673          tax_line_rec.tax_id).applied_amt_handling_flag = 'P' THEN
3674 
3675       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3676                      l_new_row_num).tax_rate_code := tax_line_rec.tax_rate_code;
3677       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3678                          l_new_row_num).tax_rate_id := tax_line_rec.tax_rate_id;
3679       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3680                               l_new_row_num).tax_rate :=  tax_line_rec.tax_rate;
3681 
3682       -- 5758785: copy tax_currency_conversion_date,tax_currency_conversion_type
3683       --          and tax_currency_conversion_rate from prepayment document
3684       --
3685       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3686                   l_new_row_num).tax_currency_conversion_date :=
3687                                        tax_line_rec.tax_currency_conversion_date;
3688       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3689                   l_new_row_num).tax_currency_conversion_type :=
3690                                        tax_line_rec.tax_currency_conversion_type;
3691       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3692                   l_new_row_num).tax_currency_conversion_rate :=
3693                                        tax_line_rec.tax_currency_conversion_rate;
3694 
3695     ELSIF ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
3696          tax_line_rec.tax_id).applied_amt_handling_flag = 'R' THEN
3697 
3698       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3699                      l_new_row_num).tax_rate_code := tax_line_rec.tax_rate_code;
3700 
3701       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3702             l_new_row_num).tax_currency_conversion_date := p_tax_determine_date;
3703       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3704                   l_new_row_num).tax_currency_conversion_type :=
3705                                        tax_line_rec.tax_currency_conversion_type;
3706 
3707       -- prorate prd_total_tax_amt, prd_total_tax_amt_tax_curr and
3708       -- prd_total_tax_amt_funcl_curr
3709       --
3710       l_line_amt_current :=
3711           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index);
3712 
3713       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3714          l_new_row_num).prd_total_tax_amt := tax_line_rec.tax_amt *
3715                                      (l_line_amt_current/tax_line_rec.line_amt);
3716       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3717                           l_new_row_num).prd_total_tax_amt_tax_curr :=
3718                                tax_line_rec.tax_amt_tax_curr *
3719                                        l_line_amt_current/tax_line_rec.line_amt;
3720 
3721 --      IF tax_line_rec.tax_amt_funcl_curr IS NOT NULL THEN
3722          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3723                         l_new_row_num).prd_total_tax_amt_funcl_curr :=
3724                                tax_line_rec.tax_amt_funcl_curr *
3725                                        l_line_amt_current/tax_line_rec.line_amt;
3726 
3727         -- do rounding. May be moved to rounding package later
3728         --
3729         IF tax_line_rec.ledger_id IS NOT NULL THEN
3730           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3731                                  l_new_row_num).prd_total_tax_amt_funcl_curr :=
3732             ZX_TRD_SERVICES_PUB_PKG.round_amt_to_mau (
3733                   tax_line_rec.ledger_id,
3734                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3735                                   l_new_row_num).prd_total_tax_amt_funcl_curr);
3736 
3737           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3738             IF (g_level_statement >= g_current_runtime_level ) THEN
3739               FND_LOG.STRING(g_level_statement,
3740                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied',
3741                  'Incorrect return_status after calling ' ||
3742                  'ZX_TRD_SERVICES_PUB_PKG.round_amt_to_mau');
3743               FND_LOG.STRING(g_level_statement,
3744                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied',
3745                  'RETURN_STATUS = ' || x_return_status);
3746               FND_LOG.STRING(g_level_statement,
3747                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied.END',
3748                  'ZX_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied(-)');
3749             END IF;
3750             RETURN;
3751           END IF;
3752 
3753         END IF;       -- tax_line_rec.ledger_id IS NOT NULL
3754 --      END IF;         -- tax_line_rec.tax_amt_funcl_curr IS NOT NULL
3755     END IF;           -- applied_amt_handling_flag = 'P' or 'R'
3756 
3757     -- If the value of p_event_class_rec.tax_recovery_flag is 'N',
3758     -- populate process_for_recovery_flag to 'N'
3759     --
3760     /*
3761      * call populate_recovery_flg in ZX_TDS_TAX_LINES_POPU_PKG instead
3762      *
3763      * IF NVL(p_event_class_rec.tax_recovery_flag, 'N') = 'N' THEN
3764      *   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3765      *                          l_new_row_num).process_for_recovery_flag := 'N';
3766      * ELSE
3767      *   IF tax_line_rec.reporting_only_flag <> 'Y' THEN
3768      *     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3769      *                          l_new_row_num).process_for_recovery_flag := 'Y';
3770      *  ELSE
3771      *     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3772      *                          l_new_row_num).process_for_recovery_flag := 'N';
3773      *   END IF;
3774      * END IF;
3775      */
3776 
3777     -- Populate other doc line amt, taxable amt and tax amt
3778     --
3779     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3780                      l_new_row_num).other_doc_line_amt := tax_line_rec.line_amt;
3781 
3782     -- bug 7024219
3783     IF NVL(tax_line_rec.historical_flag, 'N') = 'Y' THEN
3784       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3785          l_new_row_num).other_doc_line_taxable_amt :=
3786               NVL(tax_line_rec.unrounded_taxable_amt, tax_line_rec.taxable_amt);
3787       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3788          l_new_row_num).other_doc_line_tax_amt :=
3789                       NVL(tax_line_rec.unrounded_tax_amt, tax_line_rec.tax_amt);
3790     ELSE
3791 
3792       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3793                   l_new_row_num).other_doc_line_taxable_amt :=
3794                                             tax_line_rec.unrounded_taxable_amt;
3795       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3796                   l_new_row_num).other_doc_line_tax_amt :=
3797                                                 tax_line_rec.unrounded_tax_amt;
3798     END IF;
3799 
3800     -- Set copied_from_other_doc_flag to 'Y'
3801     --
3802     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3803                                l_new_row_num).copied_from_other_doc_flag := 'Y';
3804 
3805     -- set other_doc_source
3806     --
3807     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3808                               l_new_row_num).other_doc_source := 'APPLIED_FROM';
3809     --
3810     -- Bug#7302008 (Fusion Bug#7301957)- populate unrounded taxable amt  and unrounded tax amt
3811     --
3812     IF ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
3813          tax_line_rec.tax_id).applied_amt_handling_flag = 'P' THEN
3814 
3815       -- set unrounded taxable amt  and unrounded tax amt
3816       --
3817       IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).other_doc_line_amt <> 0 THEN
3818 
3819         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_taxable_amt:=
3820           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).other_doc_line_taxable_amt *
3821                      ( ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index) /
3822               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).other_doc_line_amt );
3823 
3824          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_tax_amt:=
3825 
3826               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).other_doc_line_tax_amt *
3827                      ( ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index) /
3828                             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).other_doc_line_amt );
3829 
3830 
3831       ELSE   -- other_doc_line_amt = 0 OR IS NULL
3832          -- copy unrounded_taxable_amt from reference document,
3833          --
3834          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_taxable_amt :=
3835               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).other_doc_line_taxable_amt;
3836 
3837          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_tax_amt :=
3838               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).other_doc_line_tax_amt;
3839 
3840       END IF;       -- other_doc_line_amt <> 0
3841 
3842       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).tax_amt:= NULL;
3843 
3844     END IF;
3845    /* end  changes for Bug#7302008 (Fusion Bug#7301957) */
3846 
3847 
3848     -- populate WHO columns
3849     --
3850     /*
3851      * WHO columns will be populated by pop_tax_line_for_trx_line in
3852      * ZX_TDS_TAX_LINES_POPU_PKG
3853      *
3854      * ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3855      *                           l_new_row_num).CREATED_BY  := fnd_global.user_id;
3856      * ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3857      *                                   l_new_row_num).CREATION_DATE :=  sysdate;
3858      * ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3859      *                       l_new_row_num).LAST_UPDATED_BY := fnd_global.user_id;
3860      * ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3861      *                                l_new_row_num).LAST_UPDATE_DATE :=  sysdate;
3862      * ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3863      *                    l_new_row_num).last_update_login := fnd_global.login_id;
3864      */
3865 
3866     -- populate other columns
3867     --
3868     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3869          l_new_row_num).rounding_level_code := tax_line_rec.rounding_level_code;
3870     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3871            l_new_row_num).rounding_rule_code := tax_line_rec.rounding_rule_code;
3872     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3873                                           l_new_row_num).tax_date := p_tax_date;
3874     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3875                       l_new_row_num).tax_determine_date := p_tax_determine_date;
3876     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3877                               l_new_row_num).tax_point_date := p_tax_point_date;
3878     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3879                          l_new_row_num).offset_flag := tax_line_rec.offset_flag;
3880 
3881     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3882                 l_new_row_num).place_of_supply := tax_line_rec.place_of_supply;
3883     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3884        l_new_row_num).place_of_supply_type_code :=
3885                                           tax_line_rec.place_of_supply_type_code;
3886     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3887                          l_new_row_num).place_of_supply_result_id :=
3888                                         tax_line_rec.place_of_supply_result_id;
3889     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3890             l_new_row_num).tax_currency_code := tax_line_rec.tax_currency_code;
3891     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3892                     l_new_row_num).tax_type_code := tax_line_rec.tax_type_code;
3893     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3894           l_new_row_num).reporting_only_flag := tax_line_rec.reporting_only_flag;
3895     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3896                          l_new_row_num).tax_jurisdiction_code :=
3897                                             tax_line_rec.tax_jurisdiction_code;
3898     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3899         l_new_row_num).tax_jurisdiction_id := tax_line_rec.tax_jurisdiction_id;
3900     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3901              l_new_row_num).tax_registration_number :=
3902                                          tax_line_rec.tax_registration_number;
3903     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3904                   l_new_row_num).registration_party_type :=
3905                                          tax_line_rec.registration_party_type;
3906     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3907                          l_new_row_num).tax_applicability_result_id :=
3908                                        tax_line_rec.tax_applicability_result_id;
3909     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3910                          l_new_row_num).direct_rate_result_id :=
3911                                             tax_line_rec.direct_rate_result_id;
3912     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3913                 l_new_row_num).rounding_lvl_party_tax_prof_id :=
3914                                    tax_line_rec.rounding_lvl_party_tax_prof_id;
3915     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3916                        l_new_row_num).rounding_lvl_party_type :=
3917                                           tax_line_rec.rounding_lvl_party_type;
3918 --    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3919 --         l_new_row_num).merchant_party_tax_reg_number :=
3920 --                                    tax_line_rec.merchant_party_tax_reg_number;
3921     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3922           l_new_row_num).self_assessed_flag := tax_line_rec.self_assessed_flag;
3923     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3924                           l_new_row_num).tax_reg_num_det_result_id :=
3925                                        tax_line_rec.tax_reg_num_det_result_id;
3926     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3927        l_new_row_num).tax_amt_included_flag := tax_line_rec.tax_amt_included_flag;
3928 --    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3929 --                         l_new_row_num).line_amt_includes_tax_flag :=
3930 --                                          tax_line_rec.line_amt_includes_tax_flag;
3931     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3932        l_new_row_num).manually_entered_flag := tax_line_rec.manually_entered_flag;
3933     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3934              l_new_row_num).Tax_Only_Line_Flag := tax_line_rec.tax_only_line_flag;
3935     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3936                 l_new_row_num).tax_provider_id := tax_line_rec.tax_provider_id;
3937 
3938     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3939                           l_new_row_num).hq_estb_reg_number :=
3940                                         tax_line_rec.hq_estb_reg_number;
3941     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3942                           l_new_row_num).hq_estb_party_tax_prof_id :=
3943                                         tax_line_rec.hq_estb_party_tax_prof_id;
3944 
3945     -- bug 6815566:
3946     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
3947                     l_new_row_num).tax_apportionment_line_number :=
3948                                       tax_line_rec.tax_apportionment_line_number;
3949 
3950     IF (x_begin_index IS NULL) THEN
3951       x_begin_index := l_new_row_num;
3952     END IF;
3953   END LOOP;   -- FOR tax_line_rec in get_tax_lines
3954 
3955   IF (x_begin_index IS NOT NULL) THEN
3956     x_end_index := ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST;
3957   END IF;
3958 
3959   -- copy transaction info to new tax lines for new tax_lines created here
3960   --
3961   ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines(
3962                                 p_trx_line_index ,
3963                                 l_begin_index,
3964                                 x_end_index,
3965                                 x_return_status,
3966                                 l_error_buffer);
3967 
3968   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3969     IF (g_level_statement >= g_current_runtime_level ) THEN
3970       FND_LOG.STRING(g_level_statement,
3971                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied',
3972                  'Incorrect return_status after calling ' ||
3973                  'ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines');
3974       FND_LOG.STRING(g_level_statement,
3975                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied',
3976                  'RETURN_STATUS = ' || x_return_status);
3977       FND_LOG.STRING(g_level_statement,
3978                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied.END',
3979                  'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied(-)');
3980     END IF;
3981     RETURN;
3982   END IF;
3983 
3984   IF (g_level_procedure >= g_current_runtime_level ) THEN
3985 
3986     FND_LOG.STRING(g_level_procedure,
3987                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied.END',
3988                'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied(-)');
3989   END IF;
3990 
3991 EXCEPTION
3992   WHEN OTHERS THEN
3993     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3994 
3995     IF (g_level_unexpected >= g_current_runtime_level ) THEN
3996       FND_LOG.STRING(g_level_unexpected,
3997                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied',
3998                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3999       FND_LOG.STRING(g_level_unexpected,
4000                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied.END',
4001                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_applied(-)');
4002     END IF;
4003 
4004 END  get_det_tax_lines_from_applied;
4005 
4006 ----------------------------------------------------------------------
4007 --  PROCEDURE
4008 --   get_det_tax_lines_from_adjust
4009 --
4010 --  DESCRIPTION
4011 --
4012 --  This procedure get detail tax lines from adjusted to document
4013 --  AR won't call etax for adjustment to historical transactions.
4014 --
4015 --  IN      p_transaction_line_tbl
4016 --          p_trx_line_index
4017 --  IN OUT NOCOPY  p_detail_tax_lines_tbl
4018 --          x_begin_index
4019 --          x_end_index
4020 --  OUT NOCOPY     x_return_status
4021 
4022 
4023 PROCEDURE get_det_tax_lines_from_adjust (
4024   p_event_class_rec         IN            zx_api_pub.event_class_rec_type,
4025   p_trx_line_index          IN             BINARY_INTEGER,
4026   p_tax_date                IN             DATE,
4027   p_tax_determine_date      IN             DATE,
4028   p_tax_point_date          IN             DATE,
4029   x_begin_index             IN OUT NOCOPY  BINARY_INTEGER,
4030   x_end_index               IN OUT NOCOPY  BINARY_INTEGER,
4031   x_return_status           OUT NOCOPY     VARCHAR2) IS
4032 
4033  CURSOR   get_tax_lines IS
4034    SELECT * FROM zx_lines
4035     WHERE application_id =
4036           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(p_trx_line_index)
4037       AND entity_code =
4038           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_entity_code(p_trx_line_index)
4039       AND event_class_code  =
4040           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_event_class_code(p_trx_line_index)
4041       AND trx_id =
4042           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_trx_id( p_trx_line_index)
4043       AND trx_line_id =
4044           NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_line_id(
4045                                                                     p_trx_line_index), trx_line_id)
4046       AND trx_level_type =
4047           NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_trx_level_type(
4048                                                                  p_trx_line_index), trx_level_type)
4049 /* Bug 5131206:
4050    For partner integration, when the line_level_action is 'ALLOCATE_TAX_ONLY_ADJUSTMENT',
4051    eBTax needs to create prorated tax lines.
4052    In other cases, partner tax lines should be excluded.
4053 */
4054 --      AND tax_provider_id IS  NULL
4055       AND (tax_provider_id IS NULL
4056            OR ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(p_trx_line_index) = 'ALLOCATE_TAX_ONLY_ADJUSTMENT')
4057       AND Cancel_Flag <> 'Y'
4058       AND offset_link_to_tax_line_id IS NULL
4059       AND mrc_tax_line_flag = 'N';
4060 
4061  -- Bug 5675944 : Retain tax_line_id for UPDATE
4062  -- Bug 7597449 Added Tax apportionment line number to pick the correct tax line id for upgraded invoices which have same regime-tax information.
4063  CURSOR get_key_columns_cur
4064            (c_tax_regime_code   zx_regimes_b.tax_regime_code%TYPE,
4065             c_tax               zx_taxes_b.tax%TYPE,
4066             c_apportionment_line_number  zx_lines.tax_apportionment_line_number%type) IS
4067     SELECT * FROM zx_lines
4068      WHERE application_id = p_event_class_rec.application_id
4069        AND entity_code = p_event_class_rec.entity_code
4070        AND event_class_code = p_event_class_rec.event_class_code
4071        AND trx_id = p_event_class_rec.trx_id
4072        AND trx_line_id =
4073            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index)
4074        AND trx_level_type =
4075            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index)
4076        AND tax_regime_code = c_tax_regime_code
4077        AND tax = c_tax
4078        AND tax_apportionment_line_number = c_apportionment_line_number
4079        AND mrc_tax_line_flag = 'N';
4080 
4081  l_tax_line_rec                 zx_lines%ROWTYPE;
4082  l_new_row_num                  NUMBER;
4083  l_begin_index                  BINARY_INTEGER;
4084  l_error_buffer                 VARCHAR2(200);
4085 
4086 BEGIN
4087 
4088   IF (g_level_procedure >= g_current_runtime_level ) THEN
4089     FND_LOG.STRING(g_level_procedure,
4090        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust.BEGIN',
4091        'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust(+)'|| 'trx_line_index = ' || to_char(p_trx_line_index));
4092   END IF;
4093 
4094   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
4095 
4096   l_new_row_num := NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST, 0);
4097   l_begin_index := l_new_row_num + 1;
4098 
4099   FOR tax_line_rec in get_tax_lines LOOP
4100 
4101    -- populate tax cache ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl with this tax_id,
4102     -- if it does not exists there.
4103     --
4104     ZX_TDS_UTILITIES_PKG.populate_tax_cache (
4105                 p_tax_id         => tax_line_rec.tax_id,
4106                 p_return_status  => x_return_status,
4107                 p_error_buffer   => l_error_buffer);
4108 
4109     IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
4110       IF (g_level_statement >= g_current_runtime_level ) THEN
4111         FND_LOG.STRING(g_level_statement,
4112            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust',
4113            'Incorrect return_status after calling ' ||
4114            'ZX_TDS_UTILITIES_PKG.populate_tax_cache()');
4115         FND_LOG.STRING(g_level_statement,
4116            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust',
4117            'RETURN_STATUS = ' || x_return_status);
4118         FND_LOG.STRING(g_level_statement,
4119            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust.END',
4120            'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust(-)');
4121       END IF;
4122 
4123       RETURN;
4124     END IF;
4125 
4126     --increment l_new_row_num
4127     --
4128     l_new_row_num := l_new_row_num +1;
4129 
4130     -- Populate the tax_line_id with Sequence
4131     --
4132     /*
4133      * will be populated by pop_tax_line_for_trx_line
4134      *
4135      * SELECT zx_lines_s.NEXTVAL
4136      *  INTO ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4137      *        l_new_row_num).tax_line_id from dual;
4138      */
4139 
4140     -- bug 5675944: retain tax_line_id for UPDATE
4141     --
4142     IF p_event_class_rec.tax_event_type_code = 'UPDATE' AND
4143        ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(p_trx_line_index) = 'UPDATE'
4144     THEN
4145       OPEN get_key_columns_cur(tax_line_rec.tax_regime_code, tax_line_rec.tax,tax_line_rec.tax_apportionment_line_number); -- Bug7597449
4146 
4147       FETCH get_key_columns_cur INTO l_tax_line_rec;
4148 
4149       IF get_key_columns_cur%FOUND THEN
4150          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4151                        l_new_row_num).tax_line_id := l_tax_line_rec.tax_line_id;
4152          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4153                      l_new_row_num).associated_child_frozen_flag :=
4154                                     l_tax_line_rec.associated_child_frozen_flag;
4155       ELSE
4156         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4157                                             l_new_row_num).tax_line_id := NULL;
4158       END IF;
4159       close get_key_columns_cur; --Bug 5844597
4160     ELSE
4161       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4162                                             l_new_row_num).tax_line_id := NULL;
4163     END IF;
4164 
4165     -- populate tax related information from tax_line_rec
4166     --
4167     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4168                      l_new_row_num).tax_regime_id := tax_line_rec.tax_regime_id;
4169     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4170                    l_new_row_num).tax_regime_code:=tax_line_rec.tax_regime_code;
4171     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4172                                    l_new_row_num).tax_id := tax_line_rec.tax_id;
4173     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4174                                         l_new_row_num).tax := tax_line_rec.tax;
4175     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4176                      l_new_row_num).tax_status_id := tax_line_rec.tax_status_id;
4177     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4178                    l_new_row_num).tax_status_code:=tax_line_rec.tax_status_code;
4179 
4180     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4181                      l_new_row_num).tax_rate_code := tax_line_rec.tax_rate_code;
4182     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4183                          l_new_row_num).tax_rate_id := tax_line_rec.tax_rate_id;
4184     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4185                              l_new_row_num).tax_rate :=  tax_line_rec.tax_rate;
4186     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4187                              l_new_row_num).tax_rate_type :=  tax_line_rec.tax_rate_type; --Bug 5650193
4188 
4189 
4190    -- Bug#6729097 --
4191    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4192               l_new_row_num).tax_apportionment_line_number := tax_line_rec.tax_apportionment_line_number;
4193 
4194  IF (g_level_statement >= g_current_runtime_level ) THEN
4195         FND_LOG.STRING(g_level_statement,
4196            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust',
4197            'Tax Apportionment Line Number: Bug6729097 ' ||
4198            to_char(tax_line_rec.tax_apportionment_line_number));
4199  END IF;
4200 
4201     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4202                 l_new_row_num).multiple_jurisdictions_flag :=
4203                                       tax_line_rec.multiple_jurisdictions_flag;
4204 
4205     -- bug 5508356: populate account_source_tax_rate_id
4206     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4207                           l_new_row_num).account_source_tax_rate_id :=
4208                                         tax_line_rec.account_source_tax_rate_id;
4209 
4210     -- bug 5077691: populate legal_reporting_status
4211     IF p_event_class_rec.tax_reporting_flag = 'Y' THEN
4212       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4213                 l_new_row_num).legal_reporting_status :=
4214                       ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
4215                             tax_line_rec.tax_id).legal_reporting_status_def_val;
4216     END IF;
4217 
4218     -- If the value of p_event_class_rec.tax_recovery_flag is 'N',
4219     -- populate process_for_recovery_flag to 'N'. If it is 'Y', check
4220     -- reporting_only_flag to set tax_recovery_flag
4221     --
4222     /*
4223      * call populate_recovery_flg in ZX_TDS_TAX_LINES_POPU_PKG instead
4224      *
4225      * IF NVL(p_event_class_rec.tax_recovery_flag, 'N') = 'N' THEN
4226      *   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4227      *                          l_new_row_num).process_for_recovery_flag := 'N';
4228      * ELSE
4229      *   IF tax_line_rec.reporting_only_flag <> 'Y' THEN
4230      *     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4231      *                          l_new_row_num).process_for_recovery_flag := 'Y';
4232      *  ELSE
4233      *     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4234      *                          l_new_row_num).process_for_recovery_flag := 'N';
4235      *   END IF;
4236      * END IF;
4237      */
4238 
4239     -- Populate other doc line amt, taxable amt and tax amt
4240     --
4241     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4242                     l_new_row_num).other_doc_line_amt := tax_line_rec.line_amt;
4243     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4244                          l_new_row_num).other_doc_line_taxable_amt :=
4245                                             tax_line_rec.unrounded_taxable_amt;
4246     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4247                          l_new_row_num).other_doc_line_tax_amt :=
4248                                                 tax_line_rec.unrounded_tax_amt;
4249 
4250     -- populate taxable_basis_formula and tax_calculation_formula
4251     --
4252     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4253                                l_new_row_num).taxable_basis_formula :=
4254                                              tax_line_rec.taxable_basis_formula;
4255     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4256                                l_new_row_num).tax_calculation_formula :=
4257                                            tax_line_rec.tax_calculation_formula;
4258 
4259     -- Set copied_from_other_doc_flag to 'Y'
4260     --
4261     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4262                                l_new_row_num).copied_from_other_doc_flag := 'Y';
4263 
4264     -- set other_doc_source
4265     --
4266     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4267                               l_new_row_num).other_doc_source := 'ADJUSTED';
4268 
4269     -- populate WHO columns
4270     --
4271     /*
4272      * WHO columns will be populated by pop_tax_line_for_trx_line
4273      * in ZX_TDS_TAX_LINES_POPU_PKG
4274      *
4275      * ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4276      *                           l_new_row_num).created_by  := fnd_global.user_id;
4277      * ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4278      *                                    l_new_row_num).creation_date :=  sysdate;
4279      * ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4280      *                        l_new_row_num).LAST_UPDATED_BY := fnd_global.user_id;
4281      * ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4282      *                                 l_new_row_num).last_update_date :=  sysdate;
4283      * ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4284      *                    l_new_row_num).last_update_login := fnd_global.login_id;
4285      *
4286      */
4287 
4288     -- populate other columns
4289     --
4290     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4291          l_new_row_num).rounding_level_code := tax_line_rec.rounding_level_code;
4292     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4293             l_new_row_num).rounding_rule_code := tax_line_rec.rounding_rule_code;
4294     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4295                                           l_new_row_num).tax_date := p_tax_date;
4296     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4297                       l_new_row_num).tax_determine_date := p_tax_determine_date;
4298     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4299                               l_new_row_num).tax_point_date := p_tax_point_date;
4300     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4301                            l_new_row_num).offset_flag := tax_line_rec.offset_flag;
4302 
4303     -- Bug 6776312
4304     /*IF NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).offset_flag,'Y') = 'Y' THEN
4305        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).offset_flag := 'N';
4306     ELSE
4307        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).offset_flag := 'Y';
4308     END IF;*/ --bug6929024
4309 
4310     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4311               l_new_row_num).offset_tax_rate_code := tax_line_rec.offset_tax_rate_code;
4312     -- Bug 6776312
4313 
4314     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4315                 l_new_row_num).place_of_supply := tax_line_rec.place_of_supply;
4316     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4317        l_new_row_num).place_of_supply_type_code :=
4318                                         tax_line_rec.place_of_supply_type_code;
4319     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4320                          l_new_row_num).place_of_supply_result_id :=
4321                                         tax_line_rec.place_of_supply_result_id;
4322     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4323             l_new_row_num).tax_currency_code := tax_line_rec.tax_currency_code;
4324 
4325 /* Bug 5149379: When the trx currency is different from the tax currency,
4326                 it is necessary to pick the tax_currency_conversion_date,
4327                 tax_currency_conversion_type, tax_currency_conversion_rate
4328                 information from the invoice tax lines.
4329 */
4330     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4331             l_new_row_num).tax_currency_conversion_date := tax_line_rec.tax_currency_conversion_date;
4332     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4333             l_new_row_num).tax_currency_conversion_type := tax_line_rec.tax_currency_conversion_type;
4334     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4335             l_new_row_num).tax_currency_conversion_rate := tax_line_rec.tax_currency_conversion_rate;
4336 
4337 /* Bug 5131206: For partner integration, when the line_level_action is
4338                 'ALLOCATE_TAX_ONLY_ADJUSTMENT', eBTax needs to create
4339                 prorated tax lines and stamp the tax_provider_id on
4340                 the tax line(s).
4341 */
4342 
4343     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4344             l_new_row_num).tax_provider_id := tax_line_rec.tax_provider_id;
4345 
4346     if(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(p_trx_line_index) = 'ALLOCATE_TAX_ONLY_ADJUSTMENT' and
4347        tax_line_rec.tax_provider_id is not null ) THEN
4348        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).SYNC_WITH_PRVDR_FLAG := 'Y';
4349     end if;
4350 
4351     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4352                     l_new_row_num).tax_type_code := tax_line_rec.tax_type_code;
4353     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4354           l_new_row_num).reporting_only_flag := tax_line_rec.reporting_only_flag;
4355     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4356                          l_new_row_num).tax_jurisdiction_code :=
4357                                             tax_line_rec.tax_jurisdiction_code;
4358     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4359         l_new_row_num).tax_jurisdiction_id := tax_line_rec.tax_jurisdiction_id;
4360     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4361              l_new_row_num).tax_registration_number :=
4362                                          tax_line_rec.tax_registration_number;
4363     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4364                        l_new_row_num).registration_party_type :=
4365                                          tax_line_rec.registration_party_type;
4366     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4367                          l_new_row_num).tax_applicability_result_id :=
4368                                       tax_line_rec.tax_applicability_result_id;
4369     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4370                          l_new_row_num).direct_rate_result_id :=
4371                                             tax_line_rec.direct_rate_result_id;
4372     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4373                 l_new_row_num).rounding_lvl_party_tax_prof_id :=
4374                                    tax_line_rec.rounding_lvl_party_tax_prof_id;
4375     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4376                        l_new_row_num).rounding_lvl_party_type :=
4377                                           tax_line_rec.rounding_lvl_party_type;
4378 --    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4379 --         l_new_row_num).merchant_party_tax_reg_number :=
4380 --                                    tax_line_rec.merchant_party_tax_reg_number;
4381     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4382             l_new_row_num).Self_Assessed_Flag := tax_line_rec.self_assessed_flag;
4383     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4384                           l_new_row_num).tax_reg_num_det_result_id :=
4385                                         tax_line_rec.tax_reg_num_det_result_id;
4386 
4387     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4388                           l_new_row_num).hq_estb_reg_number :=
4389                                         tax_line_rec.hq_estb_reg_number;
4390     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4391                           l_new_row_num).hq_estb_party_tax_prof_id :=
4392                                         tax_line_rec.hq_estb_party_tax_prof_id;
4393 
4394     --   If line_amt_include_tax_flag on trx line is A, then set to 'Y'
4395     --   for other cases, set to the one from adjusted doc.
4396     IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt_includes_tax_flag(
4397          p_trx_line_index) = 'A'
4398     THEN
4399       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4400          l_new_row_num).tax_amt_included_flag := 'Y';
4401 
4402     ELSE
4403       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4404          l_new_row_num).tax_amt_included_flag
4405             := tax_line_rec.tax_amt_included_flag;
4406     END IF;
4407 
4408     --Bug 7133202 Added NVL for deriving unrounded taxable amt and unrounded tax amt. For migrated invoices unrounded taxable amt and unrounded tax amt can be NULL,so in this scenario taxable amt and tax amt values will be used for tax calculation.
4409 
4410     IF NVL(tax_line_rec.historical_flag, 'N') = 'Y' THEN
4411 
4412       IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
4413            p_trx_line_index) = 'ALLOCATE_TAX_ONLY_ADJUSTMENT'
4414       THEN
4415 
4416          -- for tax only adjustment set the unrounded tax amount to the
4417         -- unrounded tax amount of the original doc.
4418         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4419            l_new_row_num).unrounded_taxable_amt := NVL(tax_line_rec.unrounded_taxable_amt,tax_line_rec.taxable_amt);
4420         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4421           l_new_row_num).unrounded_tax_amt := NVL(tax_line_rec.unrounded_tax_amt,tax_line_rec.tax_amt);
4422 
4423       ELSE
4424         -- current trx is a regular adjustment or CM
4425         -- prorate the line amt to get the unrounded taxable/tax amount
4426 
4427         IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4428              l_new_row_num).tax_amt_included_flag ='Y'
4429           AND tax_line_rec.tax_amt_included_flag = 'N'
4430         THEN
4431           -- If current trx is a tax inclusive trx, while the original trx is
4432          -- tax exclusive trx.
4433           IF ( tax_line_rec.line_amt + tax_line_rec.tax_amt) <> 0 THEN
4434             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4435               l_new_row_num).unrounded_taxable_amt
4436                 := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index) *
4437                   ( NVL(tax_line_rec.unrounded_taxable_amt,tax_line_rec.taxable_amt) /
4438                     ( tax_line_rec.line_amt + tax_line_rec.tax_amt) );
4439 
4440             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4441               l_new_row_num).unrounded_tax_amt
4442                 := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index) *
4443                   (NVL(tax_line_rec.unrounded_tax_amt,tax_line_rec.tax_amt) /
4444                     ( tax_line_rec.line_amt + tax_line_rec.tax_amt) );
4445           ELSE
4446             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4447               l_new_row_num).unrounded_taxable_amt
4448                 := NVL(tax_line_rec.unrounded_taxable_amt,tax_line_rec.taxable_amt);
4449             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4450               l_new_row_num).unrounded_tax_amt
4451                 := NVL(tax_line_rec.unrounded_tax_amt,tax_line_rec.tax_amt);
4452           END IF;
4453         ELSE -- both current tax line and original tax line are inclusive and exclusive
4454           IF tax_line_rec.line_amt <> 0 THEN
4455             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_taxable_amt
4456               := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index) *
4457                 (NVL(tax_line_rec.unrounded_taxable_amt,tax_line_rec.taxable_amt) / tax_line_rec.line_amt);
4458 
4459             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_tax_amt
4460               := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index) *
4461                 (NVL(tax_line_rec.unrounded_tax_amt,tax_line_rec.tax_amt) / tax_line_rec.line_amt );
4462           ELSE -- equal to that the original trx is a tax only trx
4463             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_taxable_amt
4464               := NVL(tax_line_rec.unrounded_taxable_amt,tax_line_rec.taxable_amt);
4465             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_tax_amt
4466               := NVL(tax_line_rec.unrounded_tax_amt,tax_line_rec.tax_amt);
4467           END IF;
4468         END IF; -- tax_line_rec.tax_amt_included_flag = 'N'
4469 
4470       END IF; -- 'ALLOCATE_TAX_ONLY_ADJUSTMENT' trx and else
4471     ELSE  -- Historical Flag is 'N'
4472       IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
4473          p_trx_line_index) = 'ALLOCATE_TAX_ONLY_ADJUSTMENT'
4474       THEN
4475 
4476       -- for tax only adjustment set the unrounded tax amount to the
4477       -- unrounded tax amount of the original doc.
4478       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4479          l_new_row_num).unrounded_taxable_amt := tax_line_rec.unrounded_taxable_amt;
4480       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4481          l_new_row_num).unrounded_tax_amt := tax_line_rec.unrounded_tax_amt;
4482 
4483      ELSE
4484       -- current trx is a regular adjustment or CM
4485       -- prorate the line amt to get the unrounded taxable/tax amount
4486 
4487       IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4488            l_new_row_num).tax_amt_included_flag ='Y'
4489          AND tax_line_rec.tax_amt_included_flag = 'N'
4490       THEN
4491         -- If current trx is a tax inclusive trx, while the original trx is
4492         -- tax exclusive trx.
4493         IF ( tax_line_rec.line_amt + tax_line_rec.tax_amt) <> 0 THEN
4494           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4495             l_new_row_num).unrounded_taxable_amt
4496               := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index) *
4497                 ( tax_line_rec.unrounded_taxable_amt /
4498                   ( tax_line_rec.line_amt + tax_line_rec.tax_amt) );
4499 
4500           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4501             l_new_row_num).unrounded_tax_amt
4502               := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index) *
4503                 ( tax_line_rec.unrounded_tax_amt /
4504                   ( tax_line_rec.line_amt + tax_line_rec.tax_amt) );
4505         ELSE
4506           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4507             l_new_row_num).unrounded_taxable_amt
4508               := tax_line_rec.unrounded_taxable_amt;
4509           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4510             l_new_row_num).unrounded_tax_amt
4511               := tax_line_rec.unrounded_tax_amt;
4512         END IF;
4513       ELSE -- both current tax line and original tax line are inclusive and exclusive
4514         IF tax_line_rec.line_amt <> 0 THEN
4515           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_taxable_amt
4516             := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index) *
4517               ( tax_line_rec.unrounded_taxable_amt / tax_line_rec.line_amt);
4518 
4519           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_tax_amt
4520             := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index) *
4521               ( tax_line_rec.unrounded_tax_amt / tax_line_rec.line_amt );
4522         ELSE -- equal to that the original trx is a tax only trx
4523           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_taxable_amt
4524             := tax_line_rec.unrounded_taxable_amt;
4525           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).unrounded_tax_amt
4526             := tax_line_rec.unrounded_tax_amt;
4527         END IF;
4528       END IF; -- tax_line_rec.tax_amt_included_flag = 'N'
4529 
4530     END IF; -- 'ALLOCATE_TAX_ONLY_ADJUSTMENT' trx and else
4531 
4532   END IF; -- Historical Flag check
4533 
4534     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).basis_result_id
4535       := tax_line_rec.basis_result_id;
4536     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).calc_result_id
4537       := tax_line_rec.calc_result_id;
4538     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).tax_base_modifier_rate
4539       := tax_line_rec.tax_base_modifier_rate;
4540 
4541     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).compounding_dep_tax_flag
4542       := tax_line_rec.compounding_dep_tax_flag;
4543     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).compounding_tax_miss_flag
4544       := tax_line_rec.compounding_tax_miss_flag;
4545     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).Compounding_Tax_Flag
4546       := tax_line_rec.compounding_tax_flag;
4547 
4548     IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4549          l_new_row_num).tax_amt_included_flag = 'Y' THEN
4550 
4551       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_amt_included_flag(
4552         p_trx_line_index) := 'Y';
4553     END IF;
4554 
4555     IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4556          l_new_row_num).compounding_dep_tax_flag = 'Y' THEN
4557 
4558       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.compounding_tax_flag(
4559         p_trx_line_index) := 'Y';
4560     END IF;
4561 
4562     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).tax_exemption_id
4563       := tax_line_rec.tax_exemption_id;
4564     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).tax_rate_before_exemption
4565       := tax_line_rec.tax_rate_before_exemption;
4566     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).tax_rate_name_before_exemption
4567       := tax_line_rec.tax_rate_name_before_exemption;
4568 
4569     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).exempt_rate_modifier
4570       := tax_line_rec.exempt_rate_modifier;
4571     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).exempt_certificate_number
4572       := tax_line_rec.exempt_certificate_number;
4573     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).exempt_reason
4574       := tax_line_rec.exempt_reason;
4575     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_new_row_num).exempt_reason_code
4576       := tax_line_rec.exempt_reason_code;
4577 
4578     zx_tds_calc_services_pub_pkg.g_detail_tax_lines_tbl(l_new_row_num).tax_exception_id
4579       := tax_line_rec.tax_exception_id;
4580     zx_tds_calc_services_pub_pkg.g_detail_tax_lines_tbl(l_new_row_num).tax_rate_before_exception
4581       := tax_line_rec.tax_rate_before_exception;
4582     zx_tds_calc_services_pub_pkg.g_detail_tax_lines_tbl(l_new_row_num).tax_rate_name_before_exception
4583       := tax_line_rec.tax_rate_name_before_exception;
4584     zx_tds_calc_services_pub_pkg.g_detail_tax_lines_tbl(l_new_row_num).exception_rate
4585         := tax_line_rec.exception_rate;
4586 
4587     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4588                 l_new_row_num).adjusted_doc_tax_line_id := tax_line_rec.tax_line_id;
4589 
4590     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4591        l_new_row_num).manually_entered_flag := tax_line_rec.manually_entered_flag;
4592     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4593              l_new_row_num).Tax_Only_Line_Flag := tax_line_rec.tax_only_line_flag;
4594     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
4595                 l_new_row_num).tax_provider_id := tax_line_rec.tax_provider_id;
4596 
4597     IF (x_begin_index IS NULL) THEN
4598       x_begin_index := l_new_row_num;
4599     END IF;
4600 
4601   END LOOP;   -- FOR tax_line_rec in get_tax_lines
4602 
4603   IF (x_begin_index IS NOT NULL) THEN
4604     x_end_index := ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST;
4605   END IF;
4606 
4607   -- copy transaction info to new tax lines for new tax_lines created here
4608   --
4609   ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines(
4610                                 p_trx_line_index ,
4611                                 l_begin_index,
4612                                 x_end_index,
4613                                 x_return_status ,
4614                                 l_error_buffer );
4615 
4616   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4617     IF (g_level_statement >= g_current_runtime_level ) THEN
4618       FND_LOG.STRING(g_level_statement,
4619          'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust',
4620          'Incorrect return_status after calling ' ||
4621          'ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines');
4622       FND_LOG.STRING(g_level_statement,
4623          'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust',
4624          'RETURN_STATUS = ' || x_return_status);
4625       FND_LOG.STRING(g_level_statement,
4626          'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust.END',
4627          'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust(-)');
4628     END IF;
4629 
4630     RETURN;
4631   END IF;
4632 
4633   IF (g_level_procedure >= g_current_runtime_level ) THEN
4634 
4635     FND_LOG.STRING(g_level_procedure,
4636        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust.END',
4637        'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust(-)');
4638   END IF;
4639 
4640 EXCEPTION
4641   WHEN OTHERS THEN
4642     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4643 
4644     IF (g_level_unexpected >= g_current_runtime_level ) THEN
4645       FND_LOG.STRING(g_level_unexpected,
4646                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust',
4647                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
4648       FND_LOG.STRING(g_level_unexpected,
4649                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust.END',
4650                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_det_tax_lines_from_adjust(-)');
4651     END IF;
4652 
4653 END get_det_tax_lines_from_adjust;
4654 
4655 ----------------------------------------------------------------------
4656 --  PUBLIC PROCEDURE
4657 --  get_place_of_supply
4658 --
4659 --  DESCRIPTION
4660 --
4661 --  This procedure determines place of supply
4662 --
4663 --  IN/OUT
4664 --         p_event_class_rec
4665 --  IN     p_tax_regime_code
4666 --         p_tax_id
4667 --         p_tax
4668 --         p_trx_line_index
4669 --         p_tax_determine_date
4670 --         p_Def_Place_Of_Supply_Type_Cd
4671 --         p_place_of_supply_rule_flag
4672 --         p_applicability_rule_flag
4673 --         p_def_reg_type
4674 --         p_reg_rule_flg
4675 --  OUT NOCOPY    x_jurisdiction_rec
4676 --         x_place_of_supply_type_code
4677 --         x_place_of_supply_result_id
4678 
4679 PROCEDURE get_place_of_supply (
4680   p_event_class_rec              IN        zx_api_pub.event_class_rec_type,
4681   p_tax_regime_code              IN        zx_regimes_b.tax_regime_code%TYPE,
4682   p_tax_id                       IN        zx_taxes_b.tax_id%TYPE,
4683   p_tax                          IN        zx_taxes_b.tax%TYPE,
4684   p_tax_determine_date           IN        DATE,
4685   p_def_place_of_supply_type_cd  IN        zx_taxes_b.def_place_of_supply_type_code%TYPE,
4686   p_place_of_supply_rule_flag    IN        zx_taxes_b.place_of_supply_rule_flag%TYPE,
4687   p_applicability_rule_flag      IN        zx_taxes_b.applicability_rule_flag%TYPE,
4688   p_def_reg_type                 IN        zx_taxes_b.def_registr_party_type_code%TYPE,
4689   p_reg_rule_flg                 IN        zx_taxes_b.registration_type_rule_flag%TYPE,
4690   p_trx_line_index               IN        BINARY_INTEGER,
4691   p_direct_rate_result_id        IN        NUMBER,
4692   x_jurisdiction_rec           OUT NOCOPY  ZX_TCM_GEO_JUR_PKG.tax_jurisdiction_rec_type,
4693   x_jurisdictions_found        OUT NOCOPY  VARCHAR2,
4694   x_place_of_supply_type_code  OUT NOCOPY  zx_taxes_b.def_place_of_supply_type_code%TYPE,
4695   x_place_of_supply_result_id  OUT NOCOPY  NUMBER,
4696   x_return_status              OUT NOCOPY  VARCHAR2) IS
4697 
4698  l_location_id             NUMBER;
4699  l_tax_service_type_code   zx_rules_b.service_type_code%TYPE;
4700 
4701  l_reg_party               VARCHAR2(256);
4702  l_jurisdiction_id         zx_jurisdictions_b.tax_jurisdiction_id%TYPE;
4703  l_jurisdiction_code       zx_jurisdictions_b.tax_jurisdiction_code%TYPE;
4704  l_tax_param_code          VARCHAR2(30);
4705  l_error_buffer            VARCHAR2(256);
4706  l_structure_name          varchar2(30);
4707  l_msg_count               NUMBER;
4708  l_msg_data                VARCHAR2(2000);
4709  l_pos_type                zx_taxes_b.def_place_of_supply_type_code%TYPE;
4710 
4711 BEGIN
4712   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
4713 
4714   IF (g_level_procedure >= g_current_runtime_level ) THEN
4715     FND_LOG.STRING(g_level_procedure,
4716                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply.BEGIN',
4717                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply(+)');
4718 
4719   END IF;
4720 
4721   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
4722 
4723   l_tax_service_type_code :=  'DET_PLACE_OF_SUPPLY';
4724 
4725   IF (g_level_statement >= g_current_runtime_level ) THEN
4726     FND_LOG.STRING(g_level_statement,
4727                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4728                    'p_place_of_supply_rule_flag = ' || p_place_of_supply_rule_flag ||'p_Def_Place_Of_Supply_Type_Cd = ' || p_def_place_of_supply_type_Cd||'p_applicability_rule_flag = ' || p_applicability_rule_flag
4729                    ||'p_def_reg_type = ' || p_def_reg_type);
4730   END IF;
4731 
4732   IF (p_place_of_supply_rule_flag = 'Y') THEN
4733 
4734     rule_base_pos_detm (
4735                 p_tax_id                => p_tax_id,
4736                 p_tax_determine_date    => p_tax_determine_date,
4737                 p_tax_service_type_code => l_tax_service_type_code,
4738                 p_event_class_rec       => p_event_class_rec,
4739                 p_trx_line_index        => p_trx_line_index,
4740                 x_alphanumeric_result   => x_place_of_supply_type_code,
4741                 x_result_id             => x_place_of_supply_result_id,
4742                 x_return_status         => x_return_status);
4743 
4744     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4745       IF (g_level_statement >= g_current_runtime_level ) THEN
4746         FND_LOG.STRING(g_level_statement,
4747                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4748                       'Incorrect return_status after calling ' ||
4749                       'ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm');
4750       END IF;
4751 
4752       x_place_of_supply_type_code := NULL;
4753       x_place_of_supply_result_id := NULL;
4754 
4755       IF (g_level_statement >= g_current_runtime_level ) THEN
4756         FND_LOG.STRING(g_level_statement,
4757                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply.END',
4758                'ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply(-)');
4759       END IF;
4760       RETURN;
4761     END IF;
4762 
4763     IF (x_place_of_supply_type_code IS NULL) THEN
4764       x_place_of_supply_type_code := p_def_place_of_supply_type_cd;
4765       x_place_of_supply_result_id := NULL;
4766     END IF;
4767 
4768   ELSE
4769     x_place_of_supply_type_code := p_def_place_of_supply_type_cd;
4770     x_place_of_supply_result_id := NULL;
4771     x_return_status := FND_API.G_RET_STS_SUCCESS;
4772   END IF;
4773 
4774   IF (x_place_of_supply_type_code IS NULL) THEN
4775 
4776     x_return_status := FND_API.G_RET_STS_ERROR;
4777 
4778     FND_MESSAGE.SET_NAME('ZX','ZX_POS_NOT_FOUND');
4779     FND_MESSAGE.SET_TOKEN('TAX',p_tax);
4780     --FND_MSG_PUB.Add;
4781 
4782     ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
4783       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
4784     ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
4785       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
4786 
4787     ZX_API_PUB.add_msg(
4788       ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
4789 
4790 
4791     IF (g_level_statement >= g_current_runtime_level ) THEN
4792       FND_LOG.STRING(g_level_statement,
4793              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4794              'Unable to derive Place of Supply Type');
4795     END IF;
4796     RETURN;
4797   END IF;
4798 
4799   IF x_place_of_supply_type_code = 'SHIP_TO_BILL_TO' then
4800      l_pos_type := 'SHIP_TO'; -- first try with ship_to
4801   ELSE
4802      l_pos_type := x_place_of_supply_type_code;
4803   end if;
4804 
4805   l_structure_name := 'TRX_LINE_DIST_TBL';
4806 
4807   l_tax_param_code := get_pos_parameter_name(
4808                           l_pos_type,
4809                           x_return_status);
4810 
4811   IF NVL(x_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4812   THEN
4813     -- TCM procedure called in get_pos_parameter_name will set the error msg
4814     -- here we just need to populate the context information.
4815 
4816     ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
4817       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
4818     ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
4819       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
4820 
4821     ZX_API_PUB.add_msg(
4822       ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
4823 
4824     IF (g_level_statement >= g_current_runtime_level ) THEN
4825       FND_LOG.STRING(g_level_statement,
4826              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4827              'Incorrect return_status after calling ' ||
4828              'ZX_TDS_APPLICABILITY_DETM_PKG.get_pos_parameter_name');
4829       FND_LOG.STRING(g_level_statement,
4830              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4831              'RETURN_STATUS = ' || x_return_status);
4832       FND_LOG.STRING(g_level_statement,
4833              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply.END',
4834              'ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply(-)');
4835     END IF;
4836     RETURN;
4837   END IF;
4838 
4839   ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value(
4840        p_struct_name     => l_structure_name,
4841        p_struct_index    => p_trx_line_index,
4842        p_tax_param_code  => l_tax_param_code,
4843        x_tax_param_value => l_location_id,
4844        x_return_status   => x_return_status );
4845 
4846   IF NVL(x_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4847   THEN
4848     IF (g_level_statement >= g_current_runtime_level ) THEN
4849       FND_LOG.STRING(g_level_statement,
4850              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4851              'Incorrect return_status after calling ' ||
4852              'ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value');
4853       FND_LOG.STRING(g_level_statement,
4854              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4855              'RETURN_STATUS = ' || x_return_status);
4856       FND_LOG.STRING(g_level_statement,
4857              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply.END',
4858              'ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply(-)');
4859     END IF;
4860     RETURN;
4861   END IF;
4862 
4863   IF l_location_id IS NULL
4864   and x_place_of_supply_type_code = 'SHIP_TO_BILL_TO' then
4865 
4866          l_pos_type := 'BILL_TO';
4867 
4868          -- try with bill to now
4869          l_tax_param_code := get_pos_parameter_name(
4870                           l_pos_type,
4871                           x_return_status);
4872 
4873         IF NVL(x_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4874         THEN
4875         -- TCM procedure called in get_pos_parameter_name will set the error msg
4876         -- here we just need to populate the context information.
4877 
4878          ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
4879           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
4880          ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
4881           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
4882 
4883          ZX_API_PUB.add_msg(
4884            ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
4885 
4886          IF (g_level_statement >= g_current_runtime_level ) THEN
4887           FND_LOG.STRING(g_level_statement,
4888              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4889              'Incorrect return_status after calling ' ||
4890              'ZX_TDS_APPLICABILITY_DETM_PKG.get_pos_parameter_name');
4891           FND_LOG.STRING(g_level_statement,
4892              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4893              'RETURN_STATUS = ' || x_return_status);
4894           FND_LOG.STRING(g_level_statement,
4895              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply.END',
4896              'ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply(-)');
4897          END IF;
4898          RETURN;
4899         END IF;
4900 
4901         ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value(
4902                 p_struct_name     => l_structure_name,
4903                 p_struct_index    => p_trx_line_index,
4904                 p_tax_param_code  => l_tax_param_code,
4905                 x_tax_param_value => l_location_id,
4906                 x_return_status   => x_return_status );
4907 
4908         IF NVL(x_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4909         THEN
4910            IF (g_level_statement >= g_current_runtime_level ) THEN
4911             FND_LOG.STRING(g_level_statement,
4912              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4913              'Incorrect return_status after calling ' ||
4914              'ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value');
4915             FND_LOG.STRING(g_level_statement,
4916              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4917              'RETURN_STATUS = ' || x_return_status);
4918             FND_LOG.STRING(g_level_statement,
4919              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply.END',
4920              'ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply(-)');
4921            END IF;
4922            RETURN;
4923         END IF;
4924 
4925   END IF;  -- ship_to_bill_to
4926 
4927 
4928   IF l_location_id IS NOT NULL THEN
4929     -- get the jurisdiction
4930     --
4931     ZX_TCM_GEO_JUR_PKG.get_tax_jurisdictions (
4932                        p_location_id      =>  l_location_id,
4933                        p_location_type    =>  l_pos_type,
4934                        p_tax              =>  p_tax,
4935                        p_tax_regime_code  =>  p_tax_regime_code,
4936                        p_trx_date         =>  p_tax_determine_date,
4937                        x_tax_jurisdiction_rec =>  x_jurisdiction_rec,
4938                        x_jurisdictions_found => x_jurisdictions_found,
4939                        x_return_status    =>  x_return_status);
4940 
4941     IF NVL(x_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4942     THEN
4943       -- populate the trx line context info if jurisdiction API return error
4944       -- jurisdiction API should have populated the error message name and text.
4945 
4946       ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
4947         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
4948       ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
4949         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
4950 
4951       ZX_API_PUB.add_msg(
4952         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
4953 
4954       IF (g_level_statement >= g_current_runtime_level ) THEN
4955         FND_LOG.STRING(g_level_statement,
4956                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4957                       'Incorrect return_status after calling ' ||
4958                       'ZX_TCM_GEO_JUR_PKG.get_tax_jurisdiction');
4959         FND_LOG.STRING(g_level_statement,
4960                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4961                       'RETURN_STATUS = ' || x_return_status);
4962         FND_LOG.STRING(g_level_statement,
4963                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply.END',
4964                       'ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply(-)');
4965       END IF;
4966       RETURN;
4967     END IF;
4968   ELSE
4969     IF  p_direct_rate_result_id IS NULL THEN
4970       --
4971       -- it is not a direct rate case, need to dump warning msg.
4972       --
4973 /*
4974       FND_MESSAGE.SET_NAME('ZX','ZX_POS_MISSING_ON_TRX');
4975       FND_MESSAGE.SET_TOKEN('TAX', p_tax);
4976       FND_MESSAGE.SET_TOKEN('POS_TYPE', l_pos_type);
4977       -- FND_MSG_PUB.Add;
4978 
4979       ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
4980         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
4981       ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
4982         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
4983 
4984       ZX_API_PUB.add_msg(
4985         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
4986 */
4987       IF (g_level_statement >= g_current_runtime_level ) THEN
4988           FND_LOG.STRING(g_level_statement,
4989                         'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
4990                         'Location id is NULL for location type  ' || l_pos_type ||
4991                         ', and direct rate not found for the tax '|| p_tax ||
4992                         '. Hence the tax is not applicable.');
4993       END IF;
4994     END IF;
4995   END IF;
4996 
4997   x_place_of_supply_type_code := l_pos_type;
4998 
4999   IF (g_level_procedure >= g_current_runtime_level ) THEN
5000 
5001     FND_LOG.STRING(g_level_procedure,
5002                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply.END',
5003                     'ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply(-)'||'X_place_of_supply_type_code = '|| x_place_of_supply_type_code);
5004   END IF;
5005 
5006 EXCEPTION
5007   WHEN OTHERS THEN
5008     x_place_of_supply_type_code := NULL;
5009     x_place_of_supply_result_id := NULL;
5010     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5011 
5012     IF (g_level_unexpected >= g_current_runtime_level ) THEN
5013       FND_LOG.STRING(g_level_unexpected,
5014                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply',
5015                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
5016       FND_LOG.STRING(g_level_unexpected,
5017                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply.END',
5018                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply(-)');
5019     END IF;
5020 
5021 END get_place_of_supply;
5022 
5023 ----------------------------------------------------------------------
5024 --  PUBLIC PROCEDURE
5025 --  get_pos_parameter_name
5026 --
5027 --  DESCRIPTION
5028 --
5029 --  This procedure returns parameter name for locations
5030 --
5031 --  IN     p_pos_type
5032 
5033 FUNCTION get_pos_parameter_name (
5034  p_pos_type      IN zx_taxes_b.def_place_of_supply_type_code%TYPE,
5035  x_return_status OUT NOCOPY VARCHAR2
5036 ) RETURN VARCHAR2 IS
5037 
5038     l_loc_tbl        VARCHAR2(30);
5039     l_loc_site       VARCHAR2(30);
5040     x_msg_count      NUMBER;
5041     x_msg_data       VARCHAR2(2000);
5042 
5043 BEGIN
5044   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5045 
5046   IF (g_level_statement >= g_current_runtime_level ) THEN
5047     FND_LOG.STRING(g_level_statement,
5048                   'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_pos_parameter_name.BEGIN',
5049                   'ZX_TDS_APPLICABILITY_DETM_PKG.get_pos_parameter_name(+)'|| 'pos_type = ' || p_pos_type);
5050   END IF;
5051 
5052   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
5053 
5054   -- x_return_status retured from TCM procedure will be handled in the
5055   -- calling procedure
5056   IF (p_pos_type = 'SHIP_TO') THEN
5057 
5058          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5059             zx_valid_init_params_pkg.source_rec.ship_to_party_type,
5060             l_loc_tbl,
5061             l_loc_site,
5062             x_return_status);
5063 
5064      RETURN 'SHIP_TO_'||l_loc_site;
5065 
5066   ELSIF (p_pos_type = 'SHIP_FROM') THEN
5067 
5068          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5069             zx_valid_init_params_pkg.source_rec.ship_from_party_type,
5070             l_loc_tbl,
5071             l_loc_site,
5072             x_return_status);
5073 
5074      RETURN 'SHIP_FROM_'||l_loc_site;
5075 
5076   ELSIF (p_pos_type = 'BILL_TO') THEN
5077 
5078          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5079             zx_valid_init_params_pkg.source_rec.bill_to_party_type,
5080             l_loc_tbl,
5081             l_loc_site,
5082             x_return_status);
5083 
5084      RETURN 'BILL_TO_'||l_loc_site;
5085 
5086   ELSIF (p_pos_type = 'BILL_FROM') THEN
5087 
5088          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5089             zx_valid_init_params_pkg.source_rec.bill_from_party_type,
5090             l_loc_tbl,
5091             l_loc_site,
5092             x_return_status);
5093 
5094      RETURN 'BILL_FROM_'||l_loc_site;
5095 
5096   ELSIF (p_pos_type = 'POINT_OF_ORIGIN') THEN
5097 
5098          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5099             zx_valid_init_params_pkg.source_rec.poo_party_type,
5100             l_loc_tbl,
5101             l_loc_site,
5102             x_return_status);
5103 
5104      RETURN 'POO_'||l_loc_site;
5105 
5106   ELSIF (p_pos_type = 'POINT_OF_ACCEPTANCE') THEN
5107 
5108          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5109             zx_valid_init_params_pkg.source_rec.poa_party_type,
5110             l_loc_tbl,
5111             l_loc_site,
5112             x_return_status);
5113 
5114      RETURN 'POA_'||l_loc_site;
5115 
5116   ELSIF (p_pos_type = 'TRADING_HQ') THEN
5117 
5118          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5119             zx_valid_init_params_pkg.source_rec.trad_hq_party_type,
5120             l_loc_tbl,
5121             l_loc_site,
5122             x_return_status);
5123 
5124      RETURN 'TRADING_HQ_'||l_loc_site;
5125 
5126   ELSIF (p_pos_type = 'OWN_HQ') THEN
5127 
5128          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5129             zx_valid_init_params_pkg.source_rec.own_hq_party_type,
5130             l_loc_tbl,
5131             l_loc_site,
5132             x_return_status);
5133 
5134 
5135      RETURN 'OWN_HQ_'||l_loc_site;
5136 
5137   ELSIF (p_pos_type = 'TITLE_TRANSFER') THEN
5138 
5139          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5140             zx_valid_init_params_pkg.source_rec.ttl_trns_party_type,
5141             l_loc_tbl,
5142             l_loc_site,
5143             x_return_status);
5144 
5145      RETURN 'TITLE_TRANSFER_'||l_loc_site;
5146 
5147   ELSIF (p_pos_type = 'PAYING') THEN
5148 
5149          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5150             zx_valid_init_params_pkg.source_rec.paying_party_type,
5151             l_loc_tbl,
5152             l_loc_site,
5153             x_return_status);
5154 
5155      RETURN 'PAYING_'||l_loc_site;
5156 
5157   ELSIF (p_pos_type = 'CONTRACT') THEN
5158 
5159  /* there is no party type for point of contract. so return hardcoded value
5160          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site
5161            (zx_valid_init_params_pkg.source_rec.poc_party_type,
5162             l_loc_tbl,
5163             l_loc_site,
5164             l_init_msg_list,
5165             x_return_status,
5166             x_msg_count,
5167             x_msg_data);
5168   */
5169 
5170      RETURN 'POC_'||'LOCATION_ID';
5171 
5172   ELSIF (p_pos_type = 'INVENTORY') THEN
5173 
5174          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5175             zx_valid_init_params_pkg.source_rec.poi_party_type,
5176             l_loc_tbl,
5177             l_loc_site,
5178             x_return_status);
5179 
5180      RETURN 'POI_'||l_loc_site;
5181 
5182   ELSIF (p_pos_type = 'DESTINATION') THEN
5183 
5184          ZX_TCM_GEO_JUR_PKG.get_pos_loc_or_site(
5185             zx_valid_init_params_pkg.source_rec.pod_party_type,
5186             l_loc_tbl,
5187             l_loc_site,
5188             x_return_status);
5189 
5190      RETURN 'POD_'||l_loc_site;
5191 
5192   ELSE
5193     IF (g_level_statement >= g_current_runtime_level ) THEN
5194        FND_LOG.STRING(g_level_statement,
5195                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_pos_parameter_name',
5196                       'pos_parameter_name = NULL');
5197      END IF;
5198      RETURN Null;
5199   END IF;
5200 
5201   IF (g_level_procedure >= g_current_runtime_level ) THEN
5202 
5203     FND_LOG.STRING(g_level_procedure,
5204                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_pos_parameter_name.END',
5205                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_pos_parameter_name(-)');
5206   END IF;
5207 
5208 EXCEPTION
5209   WHEN OTHERS THEN
5210     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5211     IF (g_level_unexpected >= g_current_runtime_level ) THEN
5212       FND_LOG.STRING(g_level_unexpected,
5213                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_pos_parameter_name',
5214                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
5215       FND_LOG.STRING(g_level_unexpected,
5216                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_pos_parameter_name.END',
5217                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_pos_parameter_name(-)');
5218     END IF;
5219 
5220 END get_pos_parameter_name;
5221 
5222 --------------------------------------------------------------------------
5223 --  PUBLIC PROCEDURE
5224 --  get_tax_registration_info
5225 --
5226 --  DESCRIPTION
5227 --
5228 --  This function calls TCM get_tax_registration API to return registration
5229 --  information.
5230 --
5231 
5232 PROCEDURE get_tax_registration_info(
5233             p_structure_name         IN     VARCHAR2,
5234             p_structure_index        IN     BINARY_INTEGER,
5235             p_event_class_rec        IN     zx_api_pub.event_class_rec_type,
5236             p_tax_regime_code        IN     zx_regimes_b.tax_regime_code%TYPE,
5237             p_tax                    IN     zx_taxes_b.tax%TYPE,
5238             p_tax_determine_date     IN     zx_lines.tax_determine_date%TYPE,
5239             p_jurisdiction_code      IN     zx_jurisdictions_b.tax_jurisdiction_code%TYPE,
5240             p_reg_party_type         IN     zx_taxes_b.def_registr_party_type_code%TYPE,
5241             x_registration_rec       OUT NOCOPY zx_tcm_control_pkg.zx_registration_info_rec,
5242             x_return_status          OUT NOCOPY VARCHAR2
5243 ) IS
5244 
5245   l_reg_party_prof_id      zx_party_tax_profile.party_tax_profile_id%TYPE;
5246 
5247   l_registration_rec       zx_tcm_control_pkg.zx_registration_info_rec;
5248   l_ret_record_level       VARCHAR2(30);
5249   l_error_buffer           VARCHAR2(200);
5250 
5251   l_account_site_id        hz_cust_acct_sites_all.cust_acct_site_id%TYPE;
5252   l_site_use_id            hz_cust_site_uses_all.site_use_id%TYPE;
5253   l_account_id             hz_cust_accounts.cust_account_id%TYPE;
5254   l_parent_ptp_id          zx_party_tax_profile.party_tax_profile_id%TYPE;
5255   l_site_ptp_id            zx_party_tax_profile.party_tax_profile_id%TYPE;
5256   l_account_type_code      VARCHAR2(30);
5257   l_first_party_flag       BOOLEAN;
5258   l_hq_estb_ptp_id         zx_lines.hq_estb_party_tax_prof_id%TYPE;
5259   l_jurisdiction_code      zx_jurisdictions_b.tax_jurisdiction_code%TYPE;
5260 
5261   -- Bug#5395227
5262   l_tax_rec                ZX_TDS_UTILITIES_PKG.ZX_TAX_INFO_CACHE_REC;
5263   l_has_other_jurisdictions_flag VARCHAR2(1);
5264 
5265 BEGIN
5266   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5267 
5268   IF (g_level_procedure >= g_current_runtime_level ) THEN
5269     FND_LOG.STRING(g_level_procedure,
5270                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info.BEGIN',
5271                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info(+)');
5272   END IF;
5273 
5274   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
5275   -- get l_reg_party_prof_id
5276   --
5277   ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value(
5278             p_structure_name,
5279             p_structure_index,
5280             p_reg_party_type || '_' || 'TAX_PROF_ID',
5281             l_reg_party_prof_id,
5282             x_return_status,
5283             l_error_buffer);
5284 
5285   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5286     IF (g_level_error >= g_current_runtime_level ) THEN
5287       FND_LOG.STRING(g_level_error,
5288                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5289                     'Incorrect return_status after calling ' ||
5290                     'ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value');
5291       FND_LOG.STRING(g_level_error,
5292                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5293                     'l_reg_party_prof_id = ' || l_reg_party_prof_id);
5294       FND_LOG.STRING(g_level_error,
5295                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5296                     'RETURN_STATUS = ' || x_return_status);
5297       FND_LOG.STRING(g_level_error,
5298                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info.END',
5299                     'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info(-)');
5300     END IF;
5301     RETURN;
5302   END IF;
5303 
5304 -- Fix for Bug 4873457 - If registration status of first party is required, then registration of
5305 -- the establishment will be attempted to be derived. If not found, the registration of the HQ
5306 -- establishment will be used. If registration status of third party is required, then the
5307 -- registration at site level will be attemtped to be derived. Failing which, the party level
5308 -- registration will be obtained.
5309 
5310   l_first_party_flag := ZX_TDS_RULE_BASE_DETM_PVT.evaluate_if_first_party(p_reg_party_type);
5311 
5312   IF l_first_party_flag THEN
5313 
5314     ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value(
5315             p_structure_name,
5316             p_structure_index,
5317             'HQ_ESTB_PARTY_TAX_PROF_ID',
5318             l_hq_estb_ptp_id,
5319             x_return_status,
5320             l_error_buffer);
5321 
5322     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5323       IF (g_level_error >= g_current_runtime_level ) THEN
5324         FND_LOG.STRING(g_level_error,
5325                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5326                       'Incorrect return_status after calling ' ||
5327                       'ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value');
5328         FND_LOG.STRING(g_level_error,
5329                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5330                       'l_hq_estb_ptp_id = ' || l_hq_estb_ptp_id);
5331         FND_LOG.STRING(g_level_error,
5332                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5333                       'RETURN_STATUS = ' || x_return_status);
5334         FND_LOG.STRING(g_level_error,
5335                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info.END',
5336                       'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info(-)');
5337       END IF;
5338       x_return_status := FND_API.G_RET_STS_SUCCESS;
5339       RETURN;
5340     END IF;
5341 
5342     l_parent_ptp_id := l_hq_estb_ptp_id;
5343     l_site_ptp_id := l_reg_party_prof_id;
5344     l_account_type_code := NULL;
5345     l_account_id        := NULL;
5346     l_account_site_id   := NULL;
5347     l_site_use_id       := NULL;
5348   ELSE
5349     IF SUBSTR(p_reg_party_type, 1, 7) IN ('SHIP_TO','BILL_TO') OR
5350        SUBSTR(p_reg_party_type, 1, 9) IN ('SHIP_FROM','BILL_FROM')
5351     THEN
5352     -- get l_account_site_id
5353     --
5354        ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value(
5355             p_structure_name,
5356             p_structure_index,
5357             SUBSTR(p_reg_party_type,1,5) || 'THIRD_PTY_ACCT_SITE_ID',
5358             l_account_site_id,
5359             x_return_status,
5360             l_error_buffer);
5361 
5362        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5363          IF (g_level_error >= g_current_runtime_level ) THEN
5364            FND_LOG.STRING(g_level_error,
5365                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5366                       'Incorrect return_status after calling ' ||
5367                       'ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value');
5368            FND_LOG.STRING(g_level_error,
5369                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5370                       'l_account_site_id = ' || l_account_site_id);
5371            FND_LOG.STRING(g_level_error,
5372                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5373                       'RETURN_STATUS = ' || x_return_status);
5374            FND_LOG.STRING(g_level_error,
5375                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info.END',
5376                       'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info(-)');
5377          END IF;
5378          RETURN;
5379        END IF;
5380 
5381     -- get l_account_id
5382     --
5383        ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value(
5384             p_structure_name,
5385             p_structure_index,
5386             SUBSTR(p_reg_party_type,1,5) || 'THIRD_PTY_ACCT_ID',
5387             l_account_id,
5388             x_return_status,
5389             l_error_buffer);
5390 
5391        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5392          IF (g_level_error >= g_current_runtime_level ) THEN
5393            FND_LOG.STRING(g_level_error,
5394                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5395                       'Incorrect return_status after calling ' ||
5396                       'ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value');
5397            FND_LOG.STRING(g_level_error,
5398                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5399                       'l_account_id = ' || l_account_id);
5400            FND_LOG.STRING(g_level_error,
5401                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5402                       'RETURN_STATUS = ' || x_return_status);
5403            FND_LOG.STRING(g_level_error,
5404                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info.END',
5405                       'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info(-)');
5406          END IF;
5407          RETURN;
5408        END IF;
5409     END IF;   -- reg_party_type in ('SHIP_TO/FROM','BILL_TO/FROM')
5410 
5411   -- get l_site_use_id
5412   --
5413     IF SUBSTR(p_reg_party_type, 1, 7) IN ('SHIP_TO', 'BILL_TO') THEN
5414 
5415       ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value(
5416           p_structure_name,
5417           p_structure_index,
5418           SUBSTR(p_reg_party_type, 1,7) || '_' || 'CUST_ACCT_SITE_USE_ID',
5419           l_site_use_id,
5420           x_return_status,
5421           l_error_buffer);
5422 
5423     END IF;
5424 
5425     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5426       IF (g_level_error >= g_current_runtime_level ) THEN
5427         FND_LOG.STRING(g_level_error,
5428                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5429                     'Incorrect return_status after calling ' ||
5430                     'ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value');
5431         FND_LOG.STRING(g_level_error,
5432                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5433                     'l_site_use_id = ' || l_site_use_id);
5434         FND_LOG.STRING(g_level_error,
5435                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5436                     'RETURN_STATUS = ' || x_return_status);
5437         FND_LOG.STRING(g_level_error,
5438                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info.END',
5439                     'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info(-)');
5440       END IF;
5441       RETURN;
5442     END IF;
5443 
5444     -- bug 4359775: TCM API changes parameter list
5445     -- get l_account_type_code, l_parent_ptp_id and l_site_ptp_id
5446 
5447       l_account_type_code := p_event_class_rec.sup_cust_acct_type;
5448 
5449     -- bug 4886911: Registration party type should be XXXX_PARTY only.
5450     -- Alway pass l_parent_ptp_id and l_site_ptp_id
5451     --
5452       l_parent_ptp_id := l_reg_party_prof_id;
5453 
5454     ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value(
5455             p_structure_name,
5456             p_structure_index,
5457             REPLACE(p_reg_party_type, 'PARTY', 'SITE') || '_' || 'TAX_PROF_ID',
5458             l_site_ptp_id,
5459             x_return_status,
5460             l_error_buffer);
5461 
5462     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5463       IF (g_level_error >= g_current_runtime_level ) THEN
5464         FND_LOG.STRING(g_level_error,
5465                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5466                'Incorrect return_status after calling ' ||
5467                'ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value');
5468         FND_LOG.STRING(g_level_error,
5469                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5470                'l_site_ptp_id = ' || l_site_ptp_id);
5471         FND_LOG.STRING(g_level_error,
5472                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5473                'RETURN_STATUS = ' || x_return_status);
5474         FND_LOG.STRING(g_level_error,
5475                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info.END',
5476                'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info(-)');
5477       END IF;
5478       RETURN;
5479     END IF;
5480   END IF;
5481 
5482 -- Bug 5003413
5483 
5484     IF p_jurisdiction_code IS NULL THEN
5485        IF g_outer_jurisdiction_code IS NULL THEN
5486           l_jurisdiction_code := NULL;
5487           -- BEGIN
5488           -- Bug#5395227
5489           l_has_other_jurisdictions_flag := NULL;
5490 
5491           ZX_TDS_UTILITIES_PKG.get_tax_cache_info(
5492                         p_tax_regime_code,
5493                         p_tax,
5494                         p_tax_determine_date,
5495                         l_tax_rec,
5496                         x_return_status,
5497                         l_error_buffer);
5498 
5499           IF x_return_status = FND_API.G_RET_STS_SUCCESS  THEN
5500             l_has_other_jurisdictions_flag := l_tax_rec.has_other_jurisdictions_flag;
5501           END IF;
5502 
5503           IF l_has_other_jurisdictions_flag = 'N' THEN
5504             BEGIN
5505                SELECT tax_jurisdiction_code
5506                INTO   l_jurisdiction_code
5507                FROM   zx_jurisdictions_b jur
5508                WHERE jur.tax_regime_code = p_tax_regime_code
5509                AND   jur.tax             = p_tax
5510                AND   jur.default_jurisdiction_flag = 'Y'
5511                AND   p_tax_determine_date between jur.default_flg_effective_from
5512                      and   nvl(jur.default_flg_effective_to, p_tax_determine_date);
5513               EXCEPTION WHEN OTHERS THEN
5514                  l_jurisdiction_code := NULL;
5515             END;
5516           END IF;
5517        ELSE
5518           l_jurisdiction_code := g_outer_jurisdiction_code;
5519        END IF;
5520     ELSE
5521        l_jurisdiction_code := p_jurisdiction_code;
5522     END IF;
5523 
5524   BEGIN
5525     ZX_TCM_CONTROL_PKG.get_tax_registration (
5526                 p_parent_ptp_id        => l_parent_ptp_id,
5527                 p_site_ptp_id          => l_site_ptp_id,
5528                 p_account_type_code    => l_account_type_code,
5529                 p_tax_determine_date   => p_tax_determine_date,
5530                 p_tax                  => p_tax,
5531                 p_tax_regime_code      => p_tax_regime_code,
5532                 p_jurisdiction_code    => l_jurisdiction_code,
5533                 p_account_id           => l_account_id,
5534                 p_account_site_id      => l_account_site_id,
5535                 p_site_use_id          => l_site_use_id,
5536                 p_zx_registration_rec  => l_registration_rec,
5537                 p_ret_record_level     => l_ret_record_level,
5538                 p_return_status        => x_return_status);
5539 
5540     IF NVL(x_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
5541     THEN
5542       IF (g_level_statement >= g_current_runtime_level ) THEN
5543         FND_LOG.STRING(g_level_statement,
5544                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5545                       'ZX_TCM_CONTROL_PKG.get_tax_registration_info returns with Error');
5546       END IF;
5547       -- Bug 4939819 - Skip registration processing if PTP setupis not found
5548       IF l_parent_ptp_id IS NULL THEN
5549         -- Parent PTP is NULL. Continuing...
5550         x_return_status := FND_API.G_RET_STS_SUCCESS;
5551       END IF;
5552 
5553     ELSE
5554       x_registration_rec := l_registration_rec;
5555     END IF;
5556 
5557   EXCEPTION
5558     WHEN OTHERS THEN
5559       IF (g_level_statement >= g_current_runtime_level ) THEN
5560         FND_LOG.STRING(g_level_statement,
5561                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info',
5562                'Unable to get tax registration number after calling TCM API.');
5563       END IF;
5564   END;
5565 
5566   IF (g_level_procedure >= g_current_runtime_level ) THEN
5567 
5568     FND_LOG.STRING(g_level_procedure,
5569                   'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info.END',
5570                   'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info(-)'||x_return_status);
5571   END IF;
5572 
5573 EXCEPTION
5574   WHEN OTHERS THEN
5575     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5576 
5577     IF (g_level_unexpected >= g_current_runtime_level ) THEN
5578       FND_LOG.STRING(g_level_unexpected,
5579                      'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tax_registration_info',
5580                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
5581     END IF;
5582 
5583 END get_tax_registration_info;
5584 
5585 ----------------------------------------------------------------------
5586 --  PUBLIC PROCEDURE
5587 --  get_tax_registration
5588 --
5589 --  DESCRIPTION
5590 --
5591 --  This function returns registration number for a given party, tax regime
5592 --  and tax defined in default tax or by evaluation of place of supply
5593 --  registration rules
5594 --
5595 --  IN/OUT p_transaction_line_tbl
5596 --         p_tax_inclusion_flag
5597 --         p_event_class_rec
5598 --  IN     p_tax_regime_code
5599 --         p_tax_determine_date
5600 --         p_tax_id
5601 --         p_tax
5602 --         p_jurisdiction_code
5603 --         p_def_reg_type
5604 --         p_reg_rule_flg
5605 --         p_trx_line_index
5606 --  OUT NOCOPY    x_party_id
5607 --         x_party_site_id
5608 --         x_registration_number
5609 --         x_tax_inclusion_flag
5610 --         x_self_assessment_flg
5611 
5612 PROCEDURE get_tax_registration (
5613   p_event_class_rec             IN             zx_api_pub.event_class_rec_type,
5614   p_tax_regime_code             IN             zx_regimes_b.tax_regime_code%TYPE,
5615   p_tax_id                      IN             zx_taxes_b.tax_id%TYPE,
5616   p_tax                         IN             zx_taxes_b.tax%TYPE,
5617   p_tax_determine_date          IN             DATE,
5618   p_jurisdiction_code           IN             zx_jurisdictions_b.tax_jurisdiction_code%TYPE,
5619   p_def_reg_type                IN             zx_taxes_b.def_registr_party_type_code%TYPE,
5620   p_reg_rule_flg                IN             zx_taxes_b.registration_type_rule_flag%TYPE,
5621   p_trx_line_index              IN             BINARY_INTEGER,
5622   x_registration_number         IN OUT NOCOPY  zx_registrations.registration_number%TYPE,
5623   x_tax_inclusion_flag          IN OUT NOCOPY  zx_registrations.inclusive_tax_flag%TYPE,
5624   x_self_assessment_flg         IN OUT NOCOPY  zx_registrations.self_assess_flag%TYPE,
5625   x_tax_registration_result_id     OUT NOCOPY  NUMBER,
5626   x_rounding_rule_code             OUT NOCOPY  zx_registrations.rounding_rule_code%TYPE,
5627   x_registration_party_type        OUT NOCOPY  zx_taxes_b.def_registr_party_type_code%TYPE,
5628   x_return_status                  OUT NOCOPY  VARCHAR2) IS
5629 
5630   l_reg_party_type         zx_taxes_b.def_registr_party_type_code%TYPE;
5631   l_reg_party_prof_id      zx_party_tax_profile.party_tax_profile_id%TYPE;
5632 
5633   l_registration_rec        zx_tcm_control_pkg.zx_registration_info_rec;
5634   l_tax_service_type_code  zx_rules_b.service_type_code%TYPE;
5635   l_error_buffer           VARCHAR2(200);
5636   l_structure_name         VARCHAR2(30);
5637   l_ret_record_level       VARCHAR2(30);
5638 
5639   l_account_site_id        hz_cust_acct_sites_all.cust_acct_site_id%TYPE;
5640   l_site_use_id            hz_cust_site_uses_all.site_use_id%TYPE;
5641   l_account_id             hz_cust_accounts.cust_account_id%TYPE;
5642   l_parent_ptp_id          zx_party_tax_profile.party_tax_profile_id%TYPE;
5643   l_site_ptp_id            zx_party_tax_profile.party_tax_profile_id%TYPE;
5644   l_account_type_code      VARCHAR2(30);
5645 
5646 BEGIN
5647   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5648 
5649   IF (g_level_procedure >= g_current_runtime_level ) THEN
5650     FND_LOG.STRING(g_level_procedure,
5651                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration.BEGIN',
5652                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration(+)'|| 'def_reg_type = ' || p_def_reg_type||'p_reg_rule_flg  = ' || p_reg_rule_flg);
5653 
5654   END IF;
5655 
5656 
5657   l_tax_service_type_code := 'DET_TAX_REGISTRATION';
5658   l_structure_name := 'TRX_LINE_DIST_TBL';
5659 
5660   IF p_reg_rule_flg = 'Y' THEN
5661 
5662     rule_base_pos_detm (
5663                 p_tax_id                =>  p_tax_id,
5664                 p_tax_determine_date    =>  p_tax_determine_date,
5665                 p_tax_service_type_code =>  l_tax_service_type_code,
5666                 p_event_class_rec       =>  p_event_class_rec,
5667                 p_trx_line_index        =>  p_trx_line_index,
5668                 x_alphanumeric_result   =>  l_reg_party_type,
5669                 x_result_id             =>  x_tax_registration_result_id,
5670                 x_return_status         =>  x_return_status);
5671 
5672     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5673       IF (g_level_statement >= g_current_runtime_level ) THEN
5674         FND_LOG.STRING(g_level_statement,
5675                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration',
5676                        'Incorrect return_status after calling ' ||
5677                        'ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm');
5678       END IF;
5679 
5680       x_tax_registration_result_id := NULL;
5681       IF (g_level_statement >= g_current_runtime_level ) THEN
5682         FND_LOG.STRING(g_level_statement,
5683                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration',
5684                        'RETURN_STATUS = ' || x_return_status);
5685         FND_LOG.STRING(g_level_statement,
5686                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration.END',
5687                        'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration(-)');
5688       END IF;
5689 
5690       RETURN;
5691     END IF;
5692 
5693     IF l_reg_party_type IS NULL THEN
5694       l_reg_party_type := p_def_reg_type;
5695     END IF;
5696 
5697   ELSE
5698     l_reg_party_type := p_def_reg_type;
5699   END IF;
5700 
5701   -- Fetch tax registration number associated with
5702   -- tax regime, tax and party
5703   --
5704   IF (l_reg_party_type IS NOT NULL) THEN
5705 
5706     -- populate x_registration_party_type
5707     --
5708     if l_reg_party_type = 'SHIP_TO_BILL_TO' then
5709       x_registration_party_type := 'SHIP_TO_PARTY';
5710     else
5711       x_registration_party_type := l_reg_party_type;
5712     end if;
5713 
5714     -- call get_tax_registration_info
5715     get_tax_registration_info(
5716             p_structure_name     =>  l_structure_name,
5717             p_structure_index    =>  p_trx_line_index,
5718             p_event_class_rec    =>  p_event_class_rec,
5719             p_tax_regime_code    =>  p_tax_regime_code,
5720             p_tax                =>  p_tax,
5721             p_tax_determine_date =>  p_tax_determine_date,
5722             p_jurisdiction_code  =>  p_jurisdiction_code,
5723             p_reg_party_type     =>  x_registration_party_type,
5724             x_registration_rec   =>  l_registration_rec,
5725             x_return_status      =>  x_return_status
5726     );
5727 
5728     IF(NVL(x_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
5729        OR l_registration_rec.registration_id IS NULL)
5730     THEN
5731 
5732         IF l_reg_party_type = 'SHIP_TO_BILL_TO'
5733         AND l_registration_rec.registration_id IS NULL
5734         THEN
5735          -- try with bill to now
5736          x_registration_party_type := 'BILL_TO_PARTY';
5737 
5738          -- call get_tax_registration_info
5739          get_tax_registration_info(
5740             p_structure_name     =>  l_structure_name,
5741             p_structure_index    =>  p_trx_line_index,
5742             p_event_class_rec    =>  p_event_class_rec,
5743             p_tax_regime_code    =>  p_tax_regime_code,
5744             p_tax                =>  p_tax,
5745             p_tax_determine_date =>  p_tax_determine_date,
5746             p_jurisdiction_code  =>  p_jurisdiction_code,
5747             p_reg_party_type     =>  x_registration_party_type,
5748             x_registration_rec   =>  l_registration_rec,
5749             x_return_status      =>  x_return_status
5750          );
5751 
5752         IF(NVL(x_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
5753         OR l_registration_rec.registration_id IS NULL)
5754         THEN
5755 
5756          IF (g_level_statement >= g_current_runtime_level ) THEN
5757             FND_LOG.STRING(g_level_statement,
5758                       'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration',
5759                       'ZX_TCM_CONTROL_PKG.GET_TAX_REGISTRATION returns with ' ||
5760                       ' Exception or no value ');
5761 
5762          END IF;
5763 
5764          x_registration_party_type := 'SHIP_TO_BILL_TO';
5765          x_registration_number := NULL;
5766          x_self_assessment_flg := 'N';
5767          x_tax_inclusion_flag := NULL;
5768          x_return_status := FND_API.G_RET_STS_SUCCESS;
5769 
5770         ELSE  -- Registration record found for BILL_TO registration party type
5771          x_registration_party_type := 'SHIP_TO_BILL_TO';
5772          x_registration_number := l_registration_rec.registration_number;
5773          x_tax_inclusion_flag := l_registration_rec.inclusive_tax_flag;
5774          x_self_assessment_flg := l_registration_rec.self_assess_flag;
5775          x_rounding_rule_code := l_registration_rec.rounding_rule_code;
5776         END IF;
5777 
5778       ELSE
5779          x_registration_number := NULL;
5780          x_self_assessment_flg := 'N';
5781          x_tax_inclusion_flag := NULL;
5782          x_return_status := FND_API.G_RET_STS_SUCCESS;
5783       END IF;
5784 
5785     ELSE  -- Registration record found
5786       x_registration_number := l_registration_rec.registration_number;
5787       x_tax_inclusion_flag := l_registration_rec.inclusive_tax_flag;
5788       x_self_assessment_flg := l_registration_rec.self_assess_flag;
5789       x_rounding_rule_code := l_registration_rec.rounding_rule_code;
5790 
5791     END IF;
5792 
5793   ELSE   -- l_reg_party_type is NULL
5794     x_registration_number := NULL;
5795     x_self_assessment_flg := 'N';
5796     x_tax_inclusion_flag := NULL;
5797 
5798   END IF;
5799 
5800   -- Reset x_rounding_rule_code
5801   --
5802   -- If roung level is 'HEADER', use g_rounding_rule returned with
5803   -- rounding level, if not available, use rounding rule from tax
5804   --
5805   IF UPPER(ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_level) = 'HEADER' THEN
5806 
5807     IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_rule IS NOT NULL THEN
5808       x_rounding_rule_code := ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_rule;
5809     ELSE
5810       x_rounding_rule_code :=
5811         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_tax_id).rounding_rule_code;
5812     END IF;
5813 
5814   ELSE  -- g_rounding_level = 'LINE'
5815 
5816     -- bug#5638230- if allow_rounding_override_flag
5817     -- is 'N',  that means, user can not override the
5818     -- rounding rule at other levels, rounding rule
5819     -- should come from tax level directly
5820     --
5821     IF  ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_tax_id).allow_rounding_override_flag =
5822  'N' THEN
5823       x_rounding_rule_code :=
5824            ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_tax_id).rounding_rule_code;
5825     ELSE
5826       --
5827       -- the rounding rule defined at tax level
5828       -- was overridden at other levels
5829       --
5830 
5831       IF x_rounding_rule_code IS NULL THEN
5832 
5833         -- get rounding_rule
5834         --
5835         ZX_TDS_TAX_ROUNDING_PKG.get_rounding_rule(
5836              p_trx_line_index     => p_trx_line_index,
5837              p_event_class_rec    => p_event_class_rec,
5838              p_tax_regime_code    => p_tax_regime_code,
5839              p_tax                => p_tax,
5840              p_jurisdiction_code  => p_jurisdiction_code,
5841              p_tax_determine_date => p_tax_determine_date,
5842              p_rounding_rule_code => ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_rule,
5843              p_return_status      => x_return_status,
5844              p_error_buffer       => l_error_buffer);
5845 
5846         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
5847 
5848           x_return_status := FND_API.G_RET_STS_SUCCESS;
5849         END IF;
5850 
5851         IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_rule IS NOT NULL THEN
5852           x_rounding_rule_code := ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_rule;
5853         ELSE
5854           x_rounding_rule_code :=
5855             ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_tax_id).rounding_rule_code;
5856         END IF;
5857       END IF;
5858     END IF;
5859   END IF;
5860 
5861   IF (g_level_procedure >= g_current_runtime_level ) THEN
5862 
5863     FND_LOG.STRING(g_level_procedure,
5864                   'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration.END',
5865                   'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration(-)'||'x_registration_number = ' || x_registration_number||'x_tax_inclusion_flag = ' || x_tax_inclusion_flag
5866                   ||'x_self_assessment_flg = ' || x_self_assessment_flg||'x_tax_registration_result_id = ' ||
5867                    to_char(x_tax_registration_result_id)||'X_rounding_rule_code = ' || x_rounding_rule_code||'RETURN_STATUS = ' || x_return_status);
5868   END IF;
5869 
5870  EXCEPTION
5871     WHEN OTHERS THEN
5872       x_registration_number := NULL;
5873       x_self_assessment_flg := 'N';
5874       x_tax_inclusion_flag := NULL;
5875       --   ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_tax_id).def_inclusive_tax_flag;
5876 
5877       -- x_rounding_rule_code
5878       --
5879       IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_rule IS NOT NULL THEN
5880          x_rounding_rule_code := ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_rule;
5881       ELSE
5882         x_rounding_rule_code :=
5883               ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_tax_id).rounding_rule_code;
5884       END IF;
5885 
5886       IF (g_level_statement >= g_current_runtime_level ) THEN
5887         FND_LOG.STRING(g_level_statement,
5888                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration',
5889                'RETURN_STATUS = ' || x_return_status);
5890       END IF;
5891       x_tax_registration_result_id := NULL;
5892 
5893       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5894 
5895       IF (g_level_unexpected >= g_current_runtime_level ) THEN
5896         FND_LOG.STRING(g_level_unexpected,
5897                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration',
5898                            sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
5899         FND_LOG.STRING(g_level_unexpected,
5900                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration.END',
5901                           'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration(-)');
5902       END IF;
5903 
5904 END get_tax_registration;
5905 
5906 ----------------------------------------------------------------------
5907 --  PUBLIC PROCEDURE
5908 --  get_legal_entity_registration
5909 --
5910 --  DESCRIPTION
5911 --
5912 --  This procedure returns registration number for a given legal entity party,
5913 --  tax regime and tax
5914 --
5915 --  IN     p_tax_line_index
5916 --  OUT NOCOPY
5917 --         x_return_status
5918 --         x_error_buffer
5919 
5920 PROCEDURE get_legal_entity_registration(
5921   p_event_class_rec      IN            zx_api_pub.event_class_rec_type,
5922   p_trx_line_index       IN            BINARY_INTEGER,
5923   p_tax_line_index       IN            BINARY_INTEGER,
5924   x_return_status           OUT NOCOPY VARCHAR2,
5925   x_error_buffer            OUT NOCOPY VARCHAR2)
5926 IS
5927   l_hq_estb_ptp_id           zx_lines.hq_estb_party_tax_prof_id%TYPE;
5928   i                          BINARY_INTEGER;
5929   l_tax_id                   BINARY_INTEGER;
5930   l_registration_rec         zx_tcm_control_pkg.zx_registration_info_rec;
5931   l_ret_record_level         VARCHAR2(30);
5932   l_jurisdiction_code        zx_jurisdictions_b.tax_jurisdiction_code%TYPE;
5933   l_party_ptp_id             zx_party_tax_profile.party_tax_profile_id%TYPE;
5934 
5935 BEGIN
5936   IF (g_level_statement >= g_current_runtime_level ) THEN
5937     FND_LOG.STRING(g_level_statement,
5938            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_legal_entity_registration.BEGIN',
5939            'ZX_TDS_APPLICABILITY_DETM_PKG.get_legal_entity_registration(+)');
5940   END IF;
5941 
5942   x_return_status := FND_API.G_RET_STS_SUCCESS;
5943   i := p_tax_line_index;
5944 
5945   l_tax_id := ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_id;
5946   l_hq_estb_ptp_id :=
5947     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).hq_estb_party_tax_prof_id;
5948 
5949   IF (g_level_statement >= g_current_runtime_level ) THEN
5950     FND_LOG.STRING(g_level_statement,
5951            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_legal_entity_registration',
5952            'l_hq_estb_ptp_id = ' || TO_CHAR(l_hq_estb_ptp_id));
5953 
5954   END IF;
5955 
5956   IF l_hq_estb_ptp_id IS NULL THEN
5957     IF (g_level_statement >= g_current_runtime_level ) THEN
5958       FND_LOG.STRING(g_level_statement,
5959              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_legal_entity_registration',
5960              'HQ establishment party tax profile id is not available');
5961     END IF;
5962     RETURN;
5963   END IF;
5964 
5965   IF g_outer_jurisdiction_code IS NOT NULL THEN
5966     -- set most outer level jurisdiction code to find the registration information.
5967     l_jurisdiction_code := g_outer_jurisdiction_code;
5968   ELSE
5969     l_jurisdiction_code
5970       :=ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_jurisdiction_code;
5971   END IF;
5972 
5973   -- bug 4633146
5974   --
5975   IF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
5976 
5977     ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value(
5978                 'TRX_LINE_DIST_TBL',
5979                 p_trx_line_index,
5980                 'SHIP_TO_PARTY_TAX_PROF_ID',
5981                 l_party_ptp_id,
5982                 x_return_status,
5983                 x_error_buffer);
5984 
5985   ELSIF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
5986 
5987     ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value(
5988                 'TRX_LINE_DIST_TBL',
5989                 p_trx_line_index,
5990                 'SHIP_FROM_PARTY_TAX_PROF_ID',
5991                 l_party_ptp_id,
5992                 x_return_status,
5993                 x_error_buffer);
5994 
5995   END IF;
5996 
5997   -- bug 4359775: TCM API changes parameter list
5998   --
5999   ZX_TCM_CONTROL_PKG.get_tax_registration (
6000      p_parent_ptp_id        => l_hq_estb_ptp_id,
6001      p_site_ptp_id          => l_party_ptp_id,
6002      p_account_type_code    => NULL,
6003      p_tax_determine_date   => ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_determine_date,
6004      p_tax                  => ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).tax,
6005      p_tax_regime_code      => ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).tax_regime_code,
6006      p_jurisdiction_code    => l_jurisdiction_code,
6007      p_account_id           => NULL,
6008      p_account_site_id      => NULL,
6009      p_site_use_id          => NULL,
6010      p_zx_registration_rec  => l_registration_rec,
6011      p_ret_record_level     => l_ret_record_level,
6012      p_return_status        => x_return_status);
6013 
6014   IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
6015     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).hq_estb_reg_number :=
6016             l_registration_rec.registration_number;
6017   ELSE
6018 
6019     -- Bug 3511428: In case the TCM API returns no value, or with exception, reset
6020     -- x_return_status to FND_API.G_RET_STS_SUCCESS and continue processing ...
6021     -- processing.
6022     --
6023     x_return_status := FND_API.G_RET_STS_SUCCESS;
6024 
6025     IF (g_level_statement >= g_current_runtime_level ) THEN
6026       FND_LOG.STRING(g_level_statement,
6027              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_legal_entity_registration',
6028              'Warning: ZX_TCM_CONTROL_PKG.get_tax_registration returns ' ||
6029              'with Exception or no value. ');
6030     END IF;
6031   END IF;
6032 
6033   IF (g_level_statement >= g_current_runtime_level ) THEN
6034 
6035     FND_LOG.STRING(g_level_statement,
6036            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_legal_entity_registration.END',
6037            'ZX_TDS_APPLICABILITY_DETM_PKG.get_legal_entity_registration(-)'||'hq_estb_reg_number = ' || l_registration_rec.registration_number||'x_return_status = ' || x_return_status
6038            ||'x_error_buffer  = ' || x_error_buffer);
6039   END IF;
6040 
6041   EXCEPTION
6042     WHEN OTHERS THEN
6043       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6044 
6045       IF (g_level_unexpected >= g_current_runtime_level ) THEN
6046         FND_LOG.STRING(g_level_unexpected,
6047                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_legal_entity_registration',
6048                     sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
6049         FND_LOG.STRING(g_level_unexpected,
6050                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_legal_entity_registration.END',
6051                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_legal_entity_registration(-)');
6052       END IF;
6053 
6054 END get_legal_entity_registration;
6055 
6056 ----------------------------------------------------------------------
6057 --  PUBLIC PROCEDURE
6058 --  rule_base_pos_detm
6059 --
6060 --  DESCRIPTION
6061 --
6062 --  This function determines generic result by evaluating rules.
6063 --
6064 --  IN/OUT
6065 --         p_event_class_rec
6066 --  IN     p_tax
6067 --         p_tax_id
6068 --         p_tax_service_type_code
6069 --         p_trx_line_index
6070 --         p_tax_determine_date
6071 
6072 PROCEDURE rule_base_pos_detm (
6073     p_tax_id                 IN             zx_taxes_b.tax_id%type,
6074     p_tax_determine_date     IN             DATE,
6075     p_tax_service_type_code  IN             zx_rules_b.service_type_code%type,
6076     p_event_class_rec        IN             zx_api_pub.event_class_rec_type,
6077     p_trx_line_index         IN             BINARY_INTEGER,
6078     x_alphanumeric_result       OUT NOCOPY  VARCHAR2,
6079     x_result_id                 OUT NOCOPY  NUMBER,
6080     x_return_status             OUT NOCOPY  VARCHAR2 )  IS
6081 
6082   l_tax_result_rec         zx_process_results%ROWTYPE;
6083   l_error_buffer           VARCHAR2(2000);
6084   l_structure_name         VARCHAR2(30);
6085 
6086 BEGIN
6087 
6088   IF (g_level_statement >= g_current_runtime_level ) THEN
6089     FND_LOG.STRING(g_level_statement,
6090            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm.BEGIN',
6091            'ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm(+)');
6092   END IF;
6093 
6094   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
6095 
6096   ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process(
6097                                         p_tax_service_type_code,
6098                                        'TRX_LINE_DIST_TBL',
6099                                         p_trx_line_index,
6100                                         p_event_class_rec,
6101                                         p_tax_id,
6102                                         NULL,
6103                                         p_tax_determine_date,
6104                                         NULL,
6105                                         NULL,
6106                                         l_tax_result_rec,
6107                                         x_return_status,
6108                                         l_error_buffer);
6109 
6110     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6111       IF (g_level_statement >= g_current_runtime_level ) THEN
6112         FND_LOG.STRING(g_level_statement,
6113                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm',
6114                'Incorrect return_status after calling ' ||
6115                'ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process');
6116       END IF;
6117 
6118     x_alphanumeric_result := NULL;
6119     x_result_id := NULL;
6120     IF (g_level_statement >= g_current_runtime_level ) THEN
6121 
6122       FND_LOG.STRING(g_level_statement,
6123              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm.END',
6124              'ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm(-)'||x_return_status);
6125     END IF;
6126     RETURN;
6127   END IF;
6128 
6129   IF (l_tax_result_rec.alphanumeric_result IS NOT NULL) THEN
6130     x_alphanumeric_result := l_tax_result_rec.alphanumeric_result;
6131     x_result_id := l_tax_result_rec.result_id;
6132 
6133   ELSE
6134     x_alphanumeric_result := NULL;
6135     x_result_id := NULL;
6136   END IF;
6137 
6138   IF (g_level_statement >= g_current_runtime_level ) THEN
6139 
6140     FND_LOG.STRING(g_level_statement,
6141            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm.END',
6142            'ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm(-)'||x_return_status);
6143   END IF;
6144 
6145 EXCEPTION
6146   WHEN OTHERS THEN
6147     x_alphanumeric_result := NULL;
6148     x_result_id := NULL;
6149     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6150 
6151     IF (g_level_unexpected >= g_current_runtime_level ) THEN
6152       FND_LOG.STRING(g_level_unexpected,
6153                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm',
6154                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
6155       FND_LOG.STRING(g_level_unexpected,
6156                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm.END',
6157                      'ZX_TDS_APPLICABILITY_DETM_PKG.rule_base_pos_detm(-)');
6158     END IF;
6159 END rule_base_pos_detm;
6160 
6161 
6162 PROCEDURE populate_registration_info(
6163  p_event_class_rec     IN         zx_api_pub.event_class_rec_type,
6164  p_trx_line_index      IN         NUMBER,
6165  p_rownum              IN         NUMBER,
6166  p_def_reg_type        IN         zx_taxes_b.def_registr_party_type_code%TYPE,
6167  p_reg_rule_flg        IN         zx_taxes_b.registration_type_rule_flag%TYPE,
6168  p_tax_determine_date  IN         DATE,
6169  x_return_status       OUT NOCOPY VARCHAR2) IS
6170 
6171  -- get def_registr_party_type_code and registration_type_rule_flag
6172  --
6173  CURSOR get_reg_type_and_rule_flg_cur(p_tax_id  NUMBER) IS
6174   SELECT def_registr_party_type_code,
6175          registration_type_rule_flag
6176     FROM ZX_TAXES_B
6177    WHERE tax_id = p_tax_id;
6178 
6179  l_def_reg_type         zx_taxes_b.def_registr_party_type_code%TYPE;
6180  l_reg_rule_flg         zx_taxes_b.registration_type_rule_flag%TYPE;
6181 
6182  l_tax_id               NUMBER;
6183  l_error_buffer         VARCHAR2(200);
6184  l_jurisdiction_code    zx_jurisdictions_b.tax_jurisdiction_code%TYPE;
6185  l_self_assessed_flag   zx_lines.self_assessed_flag%TYPE;
6186 
6187 BEGIN
6188 
6189   x_return_status := FND_API.G_RET_STS_SUCCESS;
6190 
6191   IF (g_level_procedure >= g_current_runtime_level ) THEN
6192     FND_LOG.STRING(g_level_procedure,
6193            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info.BEGIN',
6194            'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info(+)');
6195   END IF;
6196 
6197   l_tax_id := ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(p_rownum).tax_id;
6198 
6199   IF p_def_reg_type IS NOT NULL THEN
6200 
6201     l_def_reg_type := p_def_reg_type;
6202     l_reg_rule_flg := p_reg_rule_flg;
6203 
6204   ELSE
6205     -- get def_registr_party_type_code and registration_type_rule_flag
6206     --
6207     OPEN  get_reg_type_and_rule_flg_cur(l_tax_id);
6208     FETCH get_reg_type_and_rule_flg_cur INTO l_def_reg_type,l_reg_rule_flg;
6209     CLOSE get_reg_type_and_rule_flg_cur;
6210   END IF;
6211 
6212   IF g_outer_jurisdiction_code IS NOT NULL THEN
6213     -- use most outer level jurisdiction code to find the registration information.
6214     l_jurisdiction_code := g_outer_jurisdiction_code;
6215   ELSE
6216     l_jurisdiction_code
6217       :=ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6218           p_rownum).tax_jurisdiction_code;
6219   END IF;
6220 
6221   get_tax_registration(
6222     p_event_class_rec     => p_event_class_rec,
6223     p_tax_regime_code     => ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6224                                                          p_rownum).tax_regime_code,
6225     p_tax_id              => l_tax_id,
6226     p_tax                 => ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6227                                                                     p_rownum).tax,
6228     p_tax_determine_date  => p_tax_determine_date,
6229     p_jurisdiction_code   => l_jurisdiction_code,
6230     p_def_reg_type        => l_def_reg_type,
6231     p_reg_rule_flg        => l_reg_rule_flg,
6232     p_trx_line_index      => p_trx_line_index,
6233     x_registration_number => ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6234                                                 p_rownum).tax_registration_number,
6235     x_tax_inclusion_flag  => ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6236                                                   p_rownum).tax_amt_included_flag,
6237     x_self_assessment_flg => l_self_assessed_flag,
6238     x_tax_registration_result_id
6239                           => ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6240                                               p_rownum).tax_reg_num_det_result_id,
6241     x_rounding_rule_code  => ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6242                                                      p_rownum).rounding_rule_code,
6243     x_registration_party_type
6244                           => ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6245                                                 p_rownum).registration_party_type,
6246     x_return_status       => x_return_status);
6247 
6248   IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
6249     IF (g_level_statement >= g_current_runtime_level ) THEN
6250       FND_LOG.STRING(g_level_statement,
6251              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info',
6252              'Incorrect return_status after calling ' ||
6253              'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration');
6254       FND_LOG.STRING(g_level_statement,
6255              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info',
6256              'RETURN_STATUS = ' || x_return_status);
6257       FND_LOG.STRING(g_level_statement,
6258              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info.END',
6259              'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info(-)');
6260     END IF;
6261     RETURN;
6262   END IF;
6263 
6264   -- Do not change the value of self_assessed_flag if
6265   -- 1. self_assessed_flag is overridden (bug 5391331)
6266   -- 2. manual tax line (bug 5391084)
6267   --
6268   IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6269                                   p_rownum).orig_self_assessed_flag IS NULL AND
6270      NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6271                                   p_rownum).manually_entered_flag, 'N') ='N'
6272   THEN
6273 
6274     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6275                          p_rownum).self_assessed_flag := l_self_assessed_flag;
6276   END IF;
6277 
6278   -- get registration number for legal entity
6279   --
6280   get_legal_entity_registration(
6281           p_event_class_rec => p_event_class_rec,
6282           p_trx_line_index  => p_trx_line_index,
6283           p_tax_line_index  => p_rownum,
6284           x_return_status   => x_return_status,
6285           x_error_buffer    => l_error_buffer);
6286   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6287     IF (g_level_statement >= g_current_runtime_level ) THEN
6288       FND_LOG.STRING(g_level_statement,
6289              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info.END',
6290              'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info(-)');
6291     END IF;
6292     RETURN;
6293   END IF;
6294 
6295 
6296 EXCEPTION
6297   WHEN OTHERS THEN
6298 
6299     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6300 
6301     IF (g_level_unexpected >= g_current_runtime_level ) THEN
6302       FND_LOG.STRING(g_level_unexpected,
6303                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info',
6304                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
6305       FND_LOG.STRING(g_level_unexpected,
6306                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info.END',
6307                      'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info(-)');
6308     END IF;
6309 END populate_registration_info;
6310 
6311 ----------------------------------------------------------------------
6312 --  PROCEDURE
6313 --   get_tax_from_account
6314 --
6315 --  DESCRIPTION
6316 --
6317 --  This procedure handle enforcement from natual account.
6318 --
6319 --  IN
6320 --          p_trx_line_index
6321 --
6322 --  IN OUT NOCOPY
6323 --          x_begin_index
6324 --          x_end_index
6325 --  OUT NOCOPY     x_return_status
6326 
6327 PROCEDURE get_tax_from_account(
6328  p_event_class_rec       IN             zx_api_pub.event_class_rec_type,
6329  p_trx_line_index        IN             BINARY_INTEGER,
6330  p_tax_date              IN             DATE,
6331  p_tax_determine_date    IN             DATE,
6332  p_tax_point_date        IN             DATE,
6333  x_begin_index           IN OUT NOCOPY  BINARY_INTEGER,
6334  x_end_index             IN OUT NOCOPY  BINARY_INTEGER,
6335  x_return_status         OUT NOCOPY     VARCHAR2) IS
6336 
6337  CURSOR  get_chart_of_accts_id_csr IS
6338   SELECT chart_of_accounts_id
6339     FROM gl_sets_of_books
6340    WHERE set_of_books_id =
6341           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ledger_id(p_trx_line_index);
6342 
6343  CURSOR get_default_jurisdiction_csr(c_tax_regime_code VARCHAR2, c_tax VARCHAR2) IS
6344  SELECT tax_jurisdiction_id,
6345         tax_jurisdiction_code
6346  FROM zx_jurisdictions_b
6347  WHERE tax_regime_code = c_tax_regime_code
6348  AND tax = c_tax
6349  AND default_jurisdiction_flag = 'Y'
6350  AND (p_tax_determine_date >= default_flg_effective_from AND
6351       (p_tax_determine_date <= default_flg_effective_to OR default_flg_effective_to IS NULL));
6352 
6353  CURSOR  get_det_tax_lines_frm_acct_csr(c_account_seg_value     VARCHAR2) IS
6354   SELECT zxtr.tax_regime_code,
6355          zxtr.tax,
6356          zxtr.tax_status_code,
6357          zxtr.tax_rate_code,
6358          zxtr.amt_incl_tax_flag,
6359          zxtr.allow_rate_override_flag,
6360          zxtr.tax_class,
6361          zxt.tax_id,
6362          zxt.tax_type_code,
6363          zxt.tax_precision,
6364          zxt.minimum_accountable_unit,
6365          zxt.rounding_rule_code,
6366          zxt.tax_status_rule_flag,
6367          zxt.tax_rate_rule_flag,
6368          zxt.place_of_supply_rule_flag,
6369          zxt.applicability_rule_flag,
6370          zxt.tax_calc_rule_flag,
6371          zxt.taxable_basis_rule_flag,
6372          zxt.def_tax_calc_formula,
6373          zxt.def_taxable_basis_formula,
6374          zxt.reporting_only_flag,
6375          zxt.tax_currency_code,
6376          zxt.def_place_of_supply_type_code,
6377          zxt.def_registr_party_type_code,
6378          zxt.registration_type_rule_flag,
6379          zxt.direct_rate_rule_flag,
6380          zxt.def_inclusive_tax_flag,
6381          zxt.effective_from,
6382          zxt.effective_to,
6383          zxt.compounding_precedence,
6384          zxt.has_other_jurisdictions_flag,
6385          zxt.live_for_processing_flag,
6386          zxt.regn_num_same_as_le_flag,
6387          zxt.applied_amt_handling_flag,
6388          zxt.exchange_rate_type,
6389          zxt.applicable_by_default_flag,
6390          zxt.record_type_code,
6391          zxt.tax_exmpt_cr_method_code,
6392          zxt.tax_exmpt_source_tax,
6393          zxt.legal_reporting_status_def_val,
6394          zxt.def_rec_settlement_option_code,
6395          zxt.zone_geography_type,
6396          zxt.override_geography_type,
6397          zxt.allow_rounding_override_flag,
6398          zxt.tax_account_source_tax
6399     FROM zx_sco_account_rates zxtr,
6400          zx_sco_taxes zxt,
6401          fnd_lookups lc
6402    WHERE zxtr.content_owner_id = p_event_class_rec.first_pty_org_id
6403      AND zxtr.ledger_id =
6404          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ledger_id(p_trx_line_index)
6405      AND zxtr.account_segment_value= c_account_seg_value
6406      AND zxt.tax_regime_code = zxtr.tax_regime_code
6407      AND zxt.tax = zxtr.tax
6408      AND zxt.tax_type_code = lc.lookup_code
6409      AND lc.lookup_type = 'ZX_TAX_TYPE_CATEGORY'
6410      AND NVL(zxt.tax_type_code, 'X') <> 'OFFSET'
6411      AND zxt.live_for_processing_flag = 'Y'
6412      AND (p_tax_determine_date >= zxt.effective_from AND
6413           (p_tax_determine_date <= zxt.effective_to OR zxt.effective_to IS NULL))
6414    ORDER BY zxt.compounding_precedence;
6415 
6416  l_app_column_name              fnd_id_flex_segments.application_column_name%TYPE;
6417  l_account_seg_value            gl_code_combinations.segment1%TYPE;
6418  l_delimiter                    varchar2(5) := NULL;
6419  l_num_result                   NUMBER;
6420  l_boolean_result               BOOLEAN;
6421  l_flexsegtab                   fnd_flex_ext.SegmentArray;
6422  l_account_seg_num              NUMBER;
6423  l_chart_of_accounts_id         NUMBER;
6424  l_sql_statement                VARCHAR2(2000);
6425 
6426  l_account_ccid                 NUMBER;
6427  l_account_string               VARCHAR2(2000);
6428  l_trx_line_id                  NUMBER;
6429  l_trx_level_type               VARCHAR2(30);
6430  l_tax_tbl_subscript            NUMBER;
6431  l_new_row_num                  NUMBER;
6432  l_error_buffer                 VARCHAR2(200);
6433 
6434  l_begin_index                  BINARY_INTEGER;
6435  l_end_index                    BINARY_INTEGER;
6436  l_begin_index_from_acct        BINARY_INTEGER;
6437  l_end_index_from_acct          BINARY_INTEGER;
6438 
6439  l_tax_regime_rec               zx_global_structures_pkg.tax_regime_rec_type;
6440  l_tax_status_rec               ZX_TDS_UTILITIES_PKG.zx_status_info_rec;
6441  l_tax_rate_rec                 ZX_TDS_UTILITIES_PKG.zx_rate_info_rec_type;
6442 
6443  l_jurisdiction_id              NUMBER;
6444  l_jurisdiction_code            zx_jurisdictions_b.tax_jurisdiction_code%TYPE;
6445 
6446  l_tax_class                    zx_rates_b.tax_class%TYPE;
6447 
6448 BEGIN
6449 
6450   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6451 
6452   IF (g_level_procedure >= g_current_runtime_level ) THEN
6453     FND_LOG.STRING(g_level_procedure,
6454            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account.BEGIN',
6455            'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account(+)');
6456 
6457   END IF;
6458 
6459   x_return_status :=  FND_API.G_RET_STS_SUCCESS;
6460 
6461   -- Bug#5417753- determine tax_class value
6462   IF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
6463     l_tax_class := 'OUTPUT';
6464   ELSIF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
6465     l_tax_class := 'INPUT';
6466   END IF;
6467 
6468   l_account_ccid :=
6469        ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.account_ccid(p_trx_line_index);
6470   l_account_string :=
6471      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.account_string(p_trx_line_index);
6472 
6473   -- get chart_of_account_id
6474   --
6475   OPEN  get_chart_of_accts_id_csr;
6476   FETCH get_chart_of_accts_id_csr into l_chart_of_accounts_id;
6477   CLOSE get_chart_of_accts_id_csr;
6478 
6479   IF (g_level_statement >= g_current_runtime_level ) THEN
6480     FND_LOG.STRING(g_level_statement,
6481            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6482            'l_chart_of_accounts_id = ' || to_char(l_chart_of_accounts_id));
6483   END IF;
6484 
6485   IF l_chart_of_accounts_id IS NULL THEN
6486     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;     -- bug 4893261
6487     IF g_level_statement >= g_current_runtime_level THEN
6488       FND_LOG.STRING(g_level_statement,
6489              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6490              'chart_of_accounts_id is NULL.');
6491       FND_LOG.STRING(g_level_statement,
6492              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6493              'RETURN_STATUS = ' || x_return_status);
6494       FND_LOG.STRING(g_level_statement,
6495              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account.END',
6496              'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account(-)');
6497     END IF;
6498     RETURN;
6499   END IF;
6500 
6501   IF l_account_ccid IS NOT NULL AND l_account_ccid <> -1  THEN
6502 
6503     -- Get the column name of the account segment in GL_CODE_COMBINATIONS
6504     --
6505     IF (g_level_statement >= g_current_runtime_level ) THEN
6506       FND_LOG.STRING(g_level_statement,
6507              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6508              'Getting tax code using code combination ID.'|| to_char(l_account_ccid));
6509     END IF;
6510 
6511     -- call fnd api to get the column name for natural account
6512     --
6513     l_boolean_result := fnd_flex_apis.get_segment_column (
6514                               101,
6515                              'GL#',
6516                               l_chart_of_accounts_id,
6517                               'GL_ACCOUNT',
6518                               l_app_column_name);
6519 
6520     l_sql_statement :=  'SELECT ' || l_app_column_name ||
6521                         '  FROM gl_code_combinations cc ' ||
6522                         ' WHERE cc.code_combination_id = ' || l_account_ccid;
6523 
6524       EXECUTE IMMEDIATE l_sql_statement INTO l_account_seg_value;
6525 
6526     IF (g_level_statement >= g_current_runtime_level ) THEN
6527       FND_LOG.STRING(g_level_statement,
6528                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6529                     'l_account_seg_value ==' || l_account_seg_value);
6530     END IF;
6531 
6532   ELSIF l_account_string IS NOT NULL THEN
6533 
6534     IF (g_level_statement >= g_current_runtime_level ) THEN
6535       FND_LOG.STRING(g_level_statement,
6536              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6537              'account_string ==' || l_account_string);
6538     END IF;
6539 
6540     --  Get account segment from the concatenated string
6541     --
6542     l_delimiter := fnd_flex_ext.get_delimiter(
6543                       'SQLGL',
6544                       'GL#',
6545                       l_chart_of_accounts_id);
6546 
6547     l_num_result := fnd_flex_ext.breakup_segments(
6548                     l_account_string,
6549                     l_delimiter,
6550                     l_flexsegtab);
6551 
6552     l_boolean_result := fnd_flex_apis.get_qualifier_segnum (
6553                             101,
6554                             'GL#',
6555                             l_chart_of_accounts_id,
6556                             'GL_ACCOUNT',
6557                             l_account_seg_num);
6558 
6559     l_account_seg_value := l_flexsegtab(l_account_seg_num);
6560 
6561     IF (g_level_statement >= g_current_runtime_level ) THEN
6562       FND_LOG.STRING(g_level_statement,
6563              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6564              'l_account_seg_value == ' || l_account_seg_value|| 'l_delimiter == ' || l_delimiter);
6565     END IF;
6566   END IF;
6567 
6568   IF l_account_seg_value IS NOT NULL THEN
6569 
6570     l_begin_index := x_begin_index;
6571     l_end_index := x_end_index;
6572 
6573     -- Get detail tax lines from account
6574     --
6575     l_trx_line_id :=
6576         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
6577     l_trx_level_type :=
6578       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
6579 
6580     FOR l_tax_rec IN get_det_tax_lines_frm_acct_csr(l_account_seg_value) LOOP
6581 
6582       l_tax_tbl_subscript := NULL;
6583 
6584       -- Check if this tax line exists in the applicable tax lines
6585       --
6586       IF l_begin_index IS NOT NULL THEN
6587         l_tax_tbl_subscript := ZX_TDS_UTILITIES_PKG.get_tax_index(
6588                                 l_tax_rec.tax_regime_code,
6589                                 l_tax_rec.tax,
6590                                 l_trx_line_id,
6591                                 l_trx_level_type,
6592                                 l_begin_index,
6593                                 l_end_index,
6594                                 x_return_status);
6595 
6596         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6597           IF (g_level_statement >= g_current_runtime_level ) THEN
6598             FND_LOG.STRING(g_level_statement,
6599                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6600                    'Incorrect return_status after calling ' ||
6601                    'ZX_TDS_UTILITIES_PKG.get_tax_index');
6602             FND_LOG.STRING(g_level_statement,
6603                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6604                    'RETURN_STATUS = ' || x_return_status);
6605             FND_LOG.STRING(g_level_statement,
6606                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account.END',
6607                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account(-)');
6608           END IF;
6609           RETURN;
6610         END IF;
6611       END IF;    -- l_begin_index IS NOT NULL
6612 
6613       IF l_tax_tbl_subscript IS NULL THEN
6614 
6615         -- This tax from account does not exist in the current applicable taxes
6616         -- Create a new tax line in p_detail_tax_lines_tbl
6617         --
6618         -- populate g_tax_rec_tbl, if it does not exist
6619         --
6620         IF NOT ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl.EXISTS(l_tax_rec.tax_id) THEN
6621 
6622 
6623           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6624                   l_tax_rec.tax_id).tax_regime_code := l_tax_rec.tax_regime_code;
6625           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6626                                     l_tax_rec.tax_id).tax_id := l_tax_rec.tax_id;
6627           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_rec.tax_id).tax :=l_tax_rec.tax;
6628 
6629           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6630                  l_tax_rec.tax_id).def_place_of_supply_type_code :=
6631                                          l_tax_rec.def_place_of_supply_type_code;
6632           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6633                  l_tax_rec.tax_id).place_of_supply_rule_flag :=
6634                                              l_tax_rec.place_of_supply_rule_flag;
6635           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6636                  l_tax_rec.tax_id).applicability_rule_flag :=
6637                                                l_tax_rec.applicability_rule_flag;
6638           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6639                  l_tax_rec.tax_id).direct_rate_rule_flag :=
6640                                                  l_tax_rec.direct_rate_rule_flag;
6641           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6642                  l_tax_rec.tax_id).def_registr_party_type_code :=
6643                                            l_tax_rec.def_registr_party_type_code;
6644           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6645                  l_tax_rec.tax_id).registration_type_rule_flag  :=
6646                                            l_tax_rec.registration_type_rule_flag;
6647 
6648           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6649               l_tax_rec.tax_id).tax_currency_code := l_tax_rec.tax_currency_code;
6650           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6651                       l_tax_rec.tax_id).tax_precision := l_tax_rec.tax_precision;
6652           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6653                  l_tax_rec.tax_id).minimum_accountable_unit :=
6654                                               l_tax_rec.minimum_accountable_unit;
6655           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6656              l_tax_rec.tax_id).rounding_rule_code :=l_tax_rec.rounding_rule_code;
6657           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6658                  l_tax_rec.tax_id).tax_status_rule_flag :=
6659                                                   l_tax_rec.tax_status_rule_flag;
6660           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6661             l_tax_rec.tax_id).tax_rate_rule_flag := l_tax_rec.tax_rate_rule_flag;
6662           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6663             l_tax_rec.tax_id).tax_calc_rule_flag := l_tax_rec.tax_calc_rule_flag;
6664           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6665                  l_tax_rec.tax_id).taxable_basis_rule_flag :=
6666                                                l_tax_rec.taxable_basis_rule_flag;
6667           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6668                  l_tax_rec.tax_id).def_tax_calc_formula :=
6669                                                   l_tax_rec.def_tax_calc_formula;
6670           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6671                  l_tax_rec.tax_id).def_taxable_basis_formula :=
6672                                              l_tax_rec.def_taxable_basis_formula;
6673           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6674                       l_tax_rec.tax_id).tax_type_code := l_tax_rec.tax_type_code;
6675           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6676            l_tax_rec.tax_id).reporting_only_flag := l_tax_rec.reporting_only_flag;
6677           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6678                  l_tax_rec.tax_id).def_inclusive_tax_flag :=
6679                                                 l_tax_rec.def_inclusive_tax_flag;
6680           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6681                  l_tax_rec.tax_id).applied_amt_handling_flag :=
6682                                              l_tax_rec.applied_amt_handling_flag;
6683           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6684                  l_tax_rec.tax_id).exchange_rate_type :=
6685                                                     l_tax_rec.exchange_rate_type;
6686           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6687                     l_tax_rec.tax_id).effective_from := l_tax_rec.effective_from;
6688           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6689                         l_tax_rec.tax_id).effective_to := l_tax_rec.effective_to;
6690           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6691                  l_tax_rec.tax_id).compounding_precedence :=
6692                                                 l_tax_rec.compounding_precedence;
6693           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6694                  l_tax_rec.tax_id).has_other_jurisdictions_flag :=
6695                                           l_tax_rec.has_other_jurisdictions_flag;
6696           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6697                  l_tax_rec.tax_id).live_for_processing_flag :=
6698                                               l_tax_rec.live_for_processing_flag;
6699           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6700                  l_tax_rec.tax_id).regn_num_same_as_le_flag:=
6701                                               l_tax_rec.regn_num_same_as_le_flag;
6702           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6703                  l_tax_rec.tax_id).applicable_by_default_flag :=
6704                                         l_tax_rec.applicable_by_default_flag;
6705            ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6706                  l_tax_rec.tax_id).record_type_code :=
6707                                         l_tax_rec.record_type_code;
6708           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6709                  l_tax_rec.tax_id).tax_exmpt_cr_method_code :=
6710                                         l_tax_rec.tax_exmpt_cr_method_code;
6711                    ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6712                  l_tax_rec.tax_id).tax_exmpt_source_tax :=
6713                                         l_tax_rec.tax_exmpt_source_tax;
6714           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6715                  l_tax_rec.tax_id).legal_reporting_status_def_val :=
6716                                         l_tax_rec.legal_reporting_status_def_val;
6717           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6718                  l_tax_rec.tax_id).def_rec_settlement_option_code :=
6719                                         l_tax_rec.def_rec_settlement_option_code;
6720           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6721                  l_tax_rec.tax_id).zone_geography_type :=
6722                                         l_tax_rec.zone_geography_type;
6723          ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6724                  l_tax_rec.tax_id).override_geography_type :=
6725                                         l_tax_rec.override_geography_type;
6726           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6727                  l_tax_rec.tax_id).tax_account_source_tax :=
6728                                         l_tax_rec.tax_account_source_tax;
6729 
6730 
6731         END IF;      -- g_tax_rec_tbl(l_tax_rec.tax_id) does not exist
6732 
6733         -- Create a new record in p_detail_tax_lines_tbl
6734         --
6735         l_new_row_num :=
6736             NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST, 0) + 1;
6737 
6738         -- validate and populate tax_regime_id
6739         --
6740         ZX_TDS_UTILITIES_PKG.get_regime_cache_info(
6741                         l_tax_rec.tax_regime_code,
6742                         p_tax_determine_date,
6743                         l_tax_regime_rec,
6744                         x_return_status,
6745                         l_error_buffer);
6746 
6747         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
6748           IF (g_level_statement >= g_current_runtime_level ) THEN
6749             FND_LOG.STRING(g_level_statement,
6750                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6751                    'Incorrect return_status after calling ' ||
6752                    'ZX_TDS_UTILITIES_PKG.get_regime_cache_info');
6753             FND_LOG.STRING(g_level_statement,
6754                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6755                    'RETURN_STATUS = ' || x_return_status);
6756             FND_LOG.STRING(g_level_statement,
6757                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account.END',
6758                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account(-)');
6759           END IF;
6760           RETURN;
6761         END IF;
6762 
6763         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6764                  l_new_row_num).tax_regime_id := l_tax_regime_rec.tax_regime_id;
6765 
6766         -- validate and populate tax_status_id
6767         --
6768         ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
6769                         l_tax_rec.tax,
6770                         l_tax_rec.tax_regime_code,
6771                         l_tax_rec.tax_status_code,
6772                         p_tax_determine_date,
6773                         l_tax_status_rec,
6774                         x_return_status,
6775                         l_error_buffer);
6776 
6777         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
6778           IF (g_level_statement >= g_current_runtime_level ) THEN
6779             FND_LOG.STRING(g_level_statement,
6780                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6781                    'Incorrect return_status after calling ' ||
6782                    'ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info');
6783             FND_LOG.STRING(g_level_statement,
6784                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6785                    'RETURN_STATUS = ' || x_return_status);
6786             FND_LOG.STRING(g_level_statement,
6787                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account.END',
6788                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account(-)');
6789           END IF;
6790           RETURN;
6791         END IF;
6792 
6793         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6794                  l_new_row_num).tax_status_id := l_tax_status_rec.tax_status_id;
6795 
6796         -- validate and populate tax_rate_id
6797         --
6798         ZX_TDS_UTILITIES_PKG.get_tax_rate_info(
6799                         l_tax_rec.tax_regime_code,
6800                         l_tax_rec.tax,
6801                         NULL,  --++++
6802                         l_tax_rec.tax_status_code,
6803                         l_tax_rec.tax_rate_code,
6804                         p_tax_determine_date,
6805                         l_tax_class,
6806                         l_tax_rate_rec,
6807                         x_return_status,
6808                         l_error_buffer);
6809 
6810         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
6811           IF (g_level_statement >= g_current_runtime_level ) THEN
6812             FND_LOG.STRING(g_level_statement,
6813                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6814                    'Incorrect return_status after calling ' ||
6815                    'ZX_TDS_UTILITIES_PKG.get_tax_rate_info');
6816             FND_LOG.STRING(g_level_statement,
6817                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6818                    'RETURN_STATUS = ' || x_return_status);
6819             FND_LOG.STRING(g_level_statement,
6820                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account.END',
6821                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account(-)');
6822           END IF;
6823           RETURN;
6824         END IF;
6825 
6826         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6827                         l_new_row_num).tax_rate_id := l_tax_rate_rec.tax_rate_id;
6828         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6829                          l_new_row_num).tax_rate := l_tax_rate_rec.percentage_rate;
6830 
6831         -- Copy data from account to the detail_tax_lines_tbl
6832         --
6833         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6834                      l_new_row_num).tax_regime_code := l_tax_rec.tax_regime_code;
6835         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6836                                              l_new_row_num).tax := l_tax_rec.tax;
6837         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6838                                              l_new_row_num).tax_id := l_tax_rec.tax_id;
6839         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6840                      l_new_row_num).tax_status_code := l_tax_rec.tax_status_code;
6841         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6842                          l_new_row_num).tax_rate_code := l_tax_rec.tax_rate_code;
6843 
6844         -- populate default tax jurisdiction code and id - Note that the jurisdiction
6845         -- will always be NULL for the rates associated with GL account segment values.
6846         --
6847         OPEN  get_default_jurisdiction_csr(l_tax_rec.tax_regime_code, l_tax_rec.tax);
6848         FETCH get_default_jurisdiction_csr into l_jurisdiction_id, l_jurisdiction_code;
6849         CLOSE get_default_jurisdiction_csr;
6850 
6851         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6852                      l_new_row_num).tax_jurisdiction_id := l_jurisdiction_id;
6853         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6854                                              l_new_row_num).tax_jurisdiction_code := l_jurisdiction_code;
6855 
6856         -- populate other columns
6857         --
6858         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6859              l_new_row_num).tax_amt_included_flag := l_tax_rec.amt_incl_tax_flag;
6860 
6861         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6862                  l_new_row_num).tax_currency_code := l_tax_rec.tax_currency_code;
6863         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6864                              l_new_row_num).tax_type_code := l_tax_rec.tax_type_code;
6865         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6866               l_new_row_num).tax_currency_conversion_date := p_tax_determine_date;
6867         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6868               l_new_row_num).tax_currency_conversion_type :=
6869                                                            l_tax_rec.exchange_rate_type;
6870         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6871                       l_new_row_num).reporting_only_flag := l_tax_rec.reporting_only_flag;
6872         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6873                l_new_row_num).rounding_rule_code := l_tax_rec.rounding_rule_code;
6874         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6875                                            l_new_row_num).tax_date := p_tax_date;
6876         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6877                        l_new_row_num).tax_determine_date := p_tax_determine_date;
6878         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6879                                l_new_row_num).tax_point_date := p_tax_point_date;
6880 
6881         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6882                       l_new_row_num).enforce_from_natural_acct_flag := 'Y';
6883 
6884         -- populate rounding_lvl_party_tax_prof_id and rounding_level_code
6885         --
6886         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6887                l_new_row_num).rounding_lvl_party_tax_prof_id :=
6888                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_rnd_lvl_party_tax_prof_id;
6889 
6890         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6891                l_new_row_num).rounding_level_code :=
6892                                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_level;
6893 
6894         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6895                l_new_row_num).rounding_lvl_party_type :=
6896                          ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_lvl_party_type;
6897 
6898         -- populate hq_estb_party_tax_prof_id
6899         --
6900         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6901          l_new_row_num).hq_estb_party_tax_prof_id :=
6902           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.hq_estb_party_tax_prof_id(
6903                                                               p_trx_line_index);
6904 
6905         -- bug 5077691: populate legal_reporting_status
6906         IF p_event_class_rec.tax_reporting_flag = 'Y' THEN
6907           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6908                l_new_row_num).legal_reporting_status :=
6909                         ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
6910                               l_tax_rec.tax_id).legal_reporting_status_def_val;
6911         END IF;
6912 
6913         -- populate tax registration info
6914         --
6915         populate_registration_info(
6916               p_event_class_rec      => p_event_class_rec,
6917               p_trx_line_index       => p_trx_line_index,
6918               p_rownum               => l_new_row_num,
6919               p_def_reg_type         => l_tax_rec.def_registr_party_type_code,
6920               p_reg_rule_flg         => l_tax_rec.registration_type_rule_flag,
6921               p_tax_determine_date   => p_tax_determine_date,
6922               x_return_status        => x_return_status);
6923 
6924         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6925           IF (g_level_statement >= g_current_runtime_level ) THEN
6926             FND_LOG.STRING(g_level_statement,
6927                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6928                    'Incorrect return_status after calling ' ||
6929                    'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info');
6930             FND_LOG.STRING(g_level_statement,
6931                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6932                    'RETURN_STATUS = ' || x_return_status);
6933             FND_LOG.STRING(g_level_statement,
6934                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account.END',
6935                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account(-)');
6936           END IF;
6937           RETURN;
6938         END IF;
6939 
6940         -- Set x_begin_index if it has not been set
6941         --
6942         IF (x_begin_index IS NULL)  THEN
6943           x_begin_index := l_new_row_num ;
6944         END IF;
6945 
6946         -- Set l_begin_index_from_acct if it has not been set
6947         --
6948         IF (l_begin_index_from_acct IS NULL)  THEN
6949           l_begin_index_from_acct := l_new_row_num ;
6950         END IF;
6951 
6952       ELSE      -- l_tax_tbl_subscript is not NULL
6953 
6954         -- Set enforce_from_natural_acct_flag to 'Y'
6955         --
6956         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
6957                        l_tax_tbl_subscript).enforce_from_natural_acct_flag := 'Y';
6958 
6959       END IF;   -- l_tax_tbl_subscript
6960     END LOOP;   -- get_tax_lines from accounts
6961 
6962     -- set x_end_index and l_end_index_from_acct
6963     --
6964     IF (x_begin_index IS NOT NULL) THEN
6965        x_end_index := ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST;
6966        l_end_index_from_acct := x_end_index;
6967     END IF;
6968 
6969     -- copy transaction info to new tax lines
6970     --
6971     ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines(
6972                                         p_trx_line_index,
6973                                         l_begin_index_from_acct,
6974                                         l_end_index_from_acct,
6975                                         x_return_status,
6976                                         l_error_buffer );
6977 
6978     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6979       IF (g_level_statement >= g_current_runtime_level ) THEN
6980         FND_LOG.STRING(g_level_statement,
6981                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6982                'Incorrect return_status after calling ' ||
6983                'ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines');
6984         FND_LOG.STRING(g_level_statement,
6985                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
6986                'RETURN_STATUS = ' || x_return_status);
6987         FND_LOG.STRING(g_level_statement,
6988                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account.END',
6989                'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account(-)');
6990       END IF;
6991       RETURN;
6992     END IF;
6993   END IF;  -- l_account_seg_value IS NOT NULL
6994   IF (g_level_procedure >= g_current_runtime_level ) THEN
6995 
6996     FND_LOG.STRING(g_level_procedure,
6997            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account.END',
6998            'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account(-)'||x_return_status);
6999   END IF;
7000 
7001 EXCEPTION
7002   WHEN OTHERS THEN
7003     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7004     IF (g_level_unexpected >= g_current_runtime_level ) THEN
7005       FND_LOG.STRING(g_level_unexpected,
7006              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account',
7007               sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
7008       FND_LOG.STRING(g_level_unexpected,
7009              'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account.END',
7010              'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_from_account(-)');
7011     END IF;
7012 
7013 END get_tax_from_account;
7014 
7015 ---------------------------------------------------------------------
7016 -- PUBLIC PROCEDURE
7017 --  get_taxes_for_intercomp_trx
7018 --
7019 --  DESCRIPTION: This procedure fetch detail tax lines from source
7020 --               document for inter-company transaction.
7021 --
7022 --  April 25, 2005     Hongjun Liu     Created
7023 --
7024 
7025 PROCEDURE get_taxes_for_intercomp_trx(
7026   p_event_class_rec      IN             zx_api_pub.event_class_rec_type,
7027   p_trx_line_index       IN             NUMBER,
7028   p_tax_date             IN             DATE,
7029   p_tax_determine_date   IN             DATE,
7030   p_tax_point_date       IN             DATE,
7031   x_begin_index          IN OUT NOCOPY  NUMBER,
7032   x_end_index            IN OUT NOCOPY  NUMBER,
7033   x_return_status           OUT NOCOPY  VARCHAR2) IS
7034 
7035  CURSOR get_taxes_f_intercomp_trx_csr IS
7036   SELECT zxl.*
7037     FROM zx_lines zxl, zx_evnt_cls_mappings map
7038    WHERE map.application_id =
7039           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id(p_trx_line_index)
7040      AND map.entity_code =
7041           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.entity_code(p_trx_line_index)
7042      AND map.event_class_code =
7043           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.event_class_code(p_trx_line_index)
7044      AND zxl.application_id = map.intrcmp_src_appln_id
7045      AND zxl.entity_code = map.intrcmp_src_entity_code
7046      AND zxl.event_class_code = decode(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_event_class_code(p_trx_line_index),
7047              'INTERCOMPANY_TRX',
7048              decode(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_class(p_trx_line_index),
7049                     'AP_CREDIT_MEMO', 'CREDIT_MEMO',
7050                     'AP_DEBIT_MEMO', 'DEBIT_MEMO',
7051                     map.intrcmp_src_evnt_cls_code), map.intrcmp_src_evnt_cls_code)
7052      AND zxl.trx_id =
7053           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_trx_id(p_trx_line_index)
7054      AND zxl.trx_line_id =
7055           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_line_id(p_trx_line_index)
7056      AND zxl.trx_level_type =
7057           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_trx_level_type(p_trx_line_index)
7058      AND zxl.tax_provider_id IS NULL
7059      AND zxl.cancel_flag <> 'Y'
7060      AND zxl.mrc_tax_line_flag = 'N';
7061 
7062   CURSOR is_tax_migrated_in_ar_csr(
7063      c_tax_rate_id               zx_rates_b.tax_rate_id%TYPE) IS
7064     SELECT tax_regime_code,
7065            tax,
7066            tax_status_code,
7067            record_type_code,
7068            offset_tax_rate_code,
7069            tax_jurisdiction_code
7070       FROM zx_rates_b
7071      WHERE tax_rate_id = c_tax_rate_id
7072      AND   active_flag = 'Y';
7073 
7074   CURSOR get_tax_info_f_ap_input
7075     (c_tax_rate_code           zx_rates_b.tax_rate_code%TYPE)  IS
7076     SELECT tax_regime_code,
7077            tax,
7078            tax_status_code,
7079            tax_jurisdiction_code
7080       FROM zx_sco_rates_b_v
7081      WHERE tax_rate_code = c_tax_rate_code
7082        AND effective_from <= p_tax_determine_date
7083        AND (effective_to >= p_tax_determine_date OR effective_to IS NULL)
7084        AND tax_class = 'INPUT'
7085        AND active_flag = 'Y'
7086      ORDER BY subscription_level_code;
7087 
7088  CURSOR get_tax_info_f_ap_null
7089     (c_tax_rate_code           zx_rates_b.tax_rate_code%TYPE)  IS
7090     SELECT tax_regime_code,
7091            tax,
7092            tax_status_code,
7093            tax_jurisdiction_code
7094       FROM zx_sco_rates_b_v
7095      WHERE tax_rate_code = c_tax_rate_code
7096        AND effective_from <= p_tax_determine_date
7097        AND (effective_to >= p_tax_determine_date OR effective_to IS NULL)
7098        AND tax_class IS NULL
7099        AND active_flag = 'Y'
7100      ORDER BY subscription_level_code;
7101 
7102   CURSOR get_tax_info_f_not_ap
7103     (c_tax_rate_code           zx_rates_b.tax_rate_code%TYPE)  IS
7104     SELECT tax_regime_code,
7105            tax,
7106            tax_status_code,
7107            tax_jurisdiction_code
7108       FROM zx_sco_rates_b_v
7109      WHERE tax_rate_code = c_tax_rate_code
7110        AND effective_from <= p_tax_determine_date
7111        AND (effective_to >= p_tax_determine_date OR effective_to IS NULL)
7112        AND active_flag = 'Y'
7113        AND tax_class <> 'INPUT'
7114      ORDER BY subscription_level_code;
7115 
7116  l_tax_regime_rec                zx_global_structures_pkg.tax_regime_rec_type;
7117  l_tax_rec                       zx_tds_utilities_pkg.zx_tax_info_cache_rec;
7118  l_tax_status_rec                zx_tds_utilities_pkg.zx_status_info_rec;
7119  l_tax_rate_rec                  zx_tds_utilities_pkg.zx_rate_info_rec_type;
7120  l_tax_jurisdiction_rec          ZX_TDS_UTILITIES_PKG.zx_jur_info_cache_rec_type;
7121  l_rownum                        BINARY_INTEGER;
7122  l_error_buffer                  VARCHAR2(200);
7123  l_tax_regime_code               zx_regimes_b.tax_regime_code%TYPE;
7124  l_tax_jurisdiction_code         zx_jurisdictions_b.tax_jurisdiction_code%TYPE;
7125  l_tax                           zx_taxes_b.tax%TYPE;
7126  l_tax_status_code               zx_status_b.tax_status_code%TYPE;
7127  l_record_type_code              zx_rates_b.record_type_code%TYPE;
7128  l_offset_tax_rate_code          zx_rates_b.offset_tax_rate_code%TYPE;
7129  l_tax_found_in_ap_flag          VARCHAR2(1);
7130 
7131  l_tax_class                     zx_rates_b.tax_class%TYPE;
7132  l_is_valid                      BOOLEAN;
7133 
7134 BEGIN
7135 
7136   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
7137 
7138   IF (g_level_procedure >= g_current_runtime_level ) THEN
7139     FND_LOG.STRING(g_level_procedure,
7140            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.BEGIN',
7141            'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(+)');
7142   END IF;
7143 
7144   x_return_status := FND_API.G_RET_STS_SUCCESS;
7145 
7146   -- Bug#5417753- determine tax_class value
7147   IF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
7148     l_tax_class := 'OUTPUT';
7149   ELSIF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
7150     l_tax_class := 'INPUT';
7151   END IF;
7152 
7153   l_rownum := NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST, 0);
7154 
7155   FOR tax_line_rec IN get_taxes_f_intercomp_trx_csr LOOP
7156 
7157     l_is_valid := TRUE;
7158     l_rownum := l_rownum + 1;
7159 
7160     -- populate tax info fetched from zx_lines to g_detail_tax_lines_tbl
7161     --
7162     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum) := tax_line_rec;
7163 
7164     -- set tax_line_id to NULL. It will be reset in pop_tax_line_for_trx_line
7165     --
7166     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7167                                                  l_rownum).tax_line_id := NULL;
7168 
7169     OPEN  is_tax_migrated_in_ar_csr(tax_line_rec.tax_rate_id);
7170 
7171     FETCH is_tax_migrated_in_ar_csr INTO l_tax_regime_code, l_tax,
7172                  l_tax_status_code,l_record_type_code, l_offset_tax_rate_code, l_tax_jurisdiction_code;
7173 
7174     IF is_tax_migrated_in_ar_csr%NOTFOUND THEN
7175 
7176       x_return_status := FND_API.G_RET_STS_ERROR;
7177       l_error_buffer := 'No Tax Rate Found in AR for the specified Tax Rate Id';
7178       IF (g_level_statement >= g_current_runtime_level ) THEN
7179         FND_LOG.STRING(g_level_statement,
7180                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7181                l_error_buffer);
7182         FND_LOG.STRING(g_level_statement,
7183                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7184                'RETURN_STATUS = ' || x_return_status);
7185         FND_LOG.STRING(g_level_statement,
7186                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7187                'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7188       END IF;
7189       RETURN;
7190     END IF;
7191 
7192     CLOSE is_tax_migrated_in_ar_csr;
7193 
7194     IF l_record_type_code <> 'MIGRATED' THEN
7195 
7196       -- Ths is not a migrated tax rate code
7197       -- Need to validate and populate tax_regime_id
7198       --
7199       -- Bug fix 5653907: If the tax_amount fetched from source document is 0 and
7200       -- the tax is not migrated from 11i, it is not madatory to define the same
7201       -- tax in AP as that in AR. In this case, we do not need to error out if
7202       -- the validations fail because we can ignore the tax lines fetched from AR
7203       --
7204       ZX_TDS_UTILITIES_PKG.get_regime_cache_info(
7205                         tax_line_rec.tax_regime_code,
7206                         p_tax_determine_date,
7207                         l_tax_regime_rec,
7208                         x_return_status,
7209                         l_error_buffer);
7210 
7211       IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
7212         l_is_valid := FALSE;
7213         IF (g_level_statement >= g_current_runtime_level ) THEN
7214           FND_LOG.STRING(g_level_statement,
7215                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7216                  'Incorrect return_status after calling ' ||
7217                  'ZX_TDS_UTILITIES_PKG.get_regime_cache_info');
7218           FND_LOG.STRING(g_level_statement,
7219                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7220                  'RETURN_STATUS = ' || x_return_status);
7221           FND_LOG.STRING(g_level_statement,
7222                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7223                  'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7224         END IF;
7225         /*IF tax_line_rec.tax_amt <> 0 THEN
7226           RETURN;
7227         END IF;*/
7228       END IF;
7229 
7230       -- Populate tax_regime_id and validate tax_id
7231       --
7232       IF l_is_valid THEN
7233 
7234         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7235                        l_rownum).tax_regime_id := l_tax_regime_rec.tax_regime_id;
7236 
7237         ZX_TDS_UTILITIES_PKG.get_tax_cache_info(
7238                         tax_line_rec.tax_regime_code,
7239                         tax_line_rec.tax,
7240                         p_tax_determine_date,
7241                         l_tax_rec,
7242                         x_return_status,
7243                         l_error_buffer);
7244 
7245         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7246           l_is_valid := FALSE;
7247           IF (g_level_statement >= g_current_runtime_level ) THEN
7248             FND_LOG.STRING(g_level_statement,
7249                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7250                    'Incorrect return_status after calling ' ||
7251                    'ZX_TDS_UTILITIES_PKG.get_tax_cache_info');
7252             FND_LOG.STRING(g_level_statement,
7253                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7254                    'RETURN_STATUS = ' || x_return_status);
7255             FND_LOG.STRING(g_level_statement,
7256                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7257                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7258           END IF;
7259           /*IF tax_line_rec.tax_amt <> 0 THEN
7260             RETURN;
7261           END IF;*/
7262 
7263         ELSE    -- x_return_status = FND_API.G_RET_STS_SUCCESS
7264 
7265           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7266                                            l_rownum).tax_id := l_tax_rec.tax_id;
7267 
7268           -- bug 5077691: populate legal_reporting_status
7269           --
7270           IF p_event_class_rec.tax_reporting_flag = 'Y' THEN
7271             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7272                 l_rownum).legal_reporting_status :=
7273                       ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
7274                               l_tax_rec.tax_id).legal_reporting_status_def_val;
7275           END IF;
7276         END IF;
7277       END IF;    -- l_is_valid for tax validation
7278 
7279       -- validate tax_jurisdiction_id
7280       --
7281       IF l_is_valid AND tax_line_rec.tax_jurisdiction_code is not NULL THEN
7282 
7283         ZX_TDS_UTILITIES_PKG.get_jurisdiction_cache_info(
7284                         tax_line_rec.tax_regime_code,
7285                         tax_line_rec.tax,
7286                         tax_line_rec.tax_jurisdiction_code,
7287                         p_tax_determine_date,
7288                         l_tax_jurisdiction_rec,
7289                         x_return_status,
7290                         l_error_buffer);
7291 
7292         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
7293           l_is_valid := FALSE;
7294           IF (g_level_statement >= g_current_runtime_level ) THEN
7295             FND_LOG.STRING(g_level_statement,
7296                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
7297                     'Incorrect return_status after calling ' ||
7298                     'ZX_TDS_UTILITIES_PKG.get_jurisdiction_cache_info');
7299             FND_LOG.STRING(g_level_statement,
7300                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
7301                    'RETURN_STATUS = ' || x_return_status);
7302             FND_LOG.STRING(g_level_statement,
7303                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
7304                    'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
7305           END IF;
7306           /*IF tax_line_rec.tax_amt <> 0 THEN
7307             RETURN;
7308           END IF;*/
7309         ELSE
7310 
7311           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7312                     l_rownum).tax_jurisdiction_id :=
7313                                      l_tax_jurisdiction_rec.tax_jurisdiction_id;
7314         END IF;
7315       END IF;    -- l_is_valid for jurisdiction validation
7316 
7317       -- validate tax_status_id
7318       --
7319       IF l_is_valid THEN
7320 
7321         ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
7322                         tax_line_rec.tax,
7323                         tax_line_rec.tax_regime_code,
7324                         tax_line_rec.tax_status_code,
7325                         p_tax_determine_date,
7326                         l_tax_status_rec,
7327                         x_return_status,
7328                         l_error_buffer);
7329 
7330         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
7331           l_is_valid := FALSE;
7332           IF (g_level_statement >= g_current_runtime_level ) THEN
7333             FND_LOG.STRING(g_level_statement,
7334                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7335                    'Incorrect return_status after calling ' ||
7336                    'ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info');
7337             FND_LOG.STRING(g_level_statement,
7338                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7339                    'RETURN_STATUS = ' || x_return_status);
7340             FND_LOG.STRING(g_level_statement,
7341                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7342                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7343           END IF;
7344           /*IF tax_line_rec.tax_amt <> 0 THEN
7345             RETURN;
7346           END IF;*/
7347         END IF;
7348       END IF;    -- l_is_valid for status validation
7349 
7350       -- populate tax_status_id and validate tax_rate_id
7351       --
7352       IF l_is_valid THEN
7353 
7354         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7355                   l_rownum).tax_status_id := l_tax_status_rec.tax_status_id;
7356 
7357         ZX_TDS_UTILITIES_PKG.get_tax_rate_info(
7358                         tax_line_rec.tax_regime_code,
7359                         tax_line_rec.tax,
7360                         tax_line_rec.tax_jurisdiction_code,
7361                         tax_line_rec.tax_status_code,
7362                         tax_line_rec.tax_rate_code,
7363                         p_tax_determine_date,
7364                         l_tax_class,
7365                         l_tax_rate_rec,
7366                         x_return_status,
7367                         l_error_buffer);
7368 
7369         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
7370           l_is_valid := FALSE;
7371           IF (g_level_statement >= g_current_runtime_level ) THEN
7372             FND_LOG.STRING(g_level_statement,
7373                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7374                    'Incorrect return_status after calling ' ||
7375                    'ZX_TDS_UTILITIES_PKG.get_tax_rate_info');
7376             FND_LOG.STRING(g_level_statement,
7377                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7378                    'RETURN_STATUS = ' || x_return_status);
7379             FND_LOG.STRING(g_level_statement,
7380                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7381                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7382           END IF;
7383           /*IF tax_line_rec.tax_amt <> 0 THEN
7384             RETURN;
7385           END IF;*/
7386         END IF;
7387       END IF;      -- l_is_valid for tax rate validation
7388 
7389       IF l_is_valid THEN
7390 
7391         IF l_tax_rate_rec.percentage_rate <> tax_line_rec.tax_rate AND --bug 5010575
7392            l_tax_rate_rec.allow_adhoc_tax_rate_flag = 'N'THEN
7393 
7394           x_return_status := FND_API.G_RET_STS_ERROR;
7395           l_error_buffer := 'Tax Rate Code is not adhoc';
7396 
7397           IF (g_level_statement >= g_current_runtime_level ) THEN
7398             FND_LOG.STRING(g_level_statement,
7399                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7400                    l_error_buffer);
7401             FND_LOG.STRING(g_level_statement,
7402                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7403                    'RETURN_STATUS = ' || x_return_status);
7404             FND_LOG.STRING(g_level_statement,
7405                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7406                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7407           END IF;
7408           RETURN;
7409         END IF;
7410 
7411         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7412                               l_rownum).tax_rate_id := l_tax_rate_rec.tax_rate_id;
7413 
7414         IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum).tax_amt = 0 AND
7415            l_tax_rate_rec.offset_tax_rate_code IS NOT NULL
7416         THEN
7417 
7418           -- Check if offset tax is allowed, if not raise error
7419           --
7420           IF l_tax_rate_rec.percentage_rate <> 0  AND -- bug 5010575
7421              p_event_class_rec.allow_offset_tax_calc_flag = 'N'
7422           THEN
7423             x_return_status := FND_API.G_RET_STS_ERROR;
7424             l_error_buffer := 'Need to create Offset Tax. But offset tax is not allowed';
7425 
7426             IF g_level_statement >= g_current_runtime_level THEN
7427               FND_LOG.STRING(g_level_statement,
7428                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7429                     l_error_buffer);
7430               FND_LOG.STRING(g_level_statement,
7431                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7432                    'RETURN_STATUS = ' || x_return_status);
7433               FND_LOG.STRING(g_level_statement,
7434                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7435                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7436             END IF;
7437             RETURN;
7438           END IF;
7439 
7440           -- set tax_rate column and amt related columns to NULL
7441           -- Tax Rate percentage will be determined in ZX_TDS_RATE_DETM_PKG
7442           --
7443           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7444                                                    l_rownum).offset_flag := 'Y';
7445 
7446           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7447                                                      l_rownum).tax_rate := NULL;
7448           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7449                                                       l_rownum).tax_amt := NULL;
7450           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7451                                              l_rownum).tax_amt_tax_curr := NULL;
7452           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7453                                            l_rownum).tax_amt_funcl_curr := NULL;
7454           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7455                                                   l_rownum).taxable_amt := NULL;
7456           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7457                                          l_rownum).taxable_amt_tax_curr := NULL;
7458           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7459                                        l_rownum).taxable_amt_funcl_curr := NULL;
7460         END IF;    -- tax_amt = 0 AND offset_tax_rate_code IS NOT NULL
7461 
7462       ELSE     -- NOT l_is_valid after rate validation
7463 
7464         --IF tax_line_rec.tax_amt = 0 THEN
7465         -- Commented code to ensure that even if the receivables invoice has a non
7466         -- zero amount, there should be no error in the Payables invoice.
7467         -- if the same tax is not applicable in payables.
7468 
7469         -- delete the entry from g_detail_tax_lines_tbl
7470         --
7471         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.delete(l_rownum);
7472         l_rownum := l_rownum - 1;
7473 
7474         -- set the return status back to SUCCESS
7475         --
7476         x_return_status := FND_API.G_RET_STS_SUCCESS;
7477 
7478         IF g_level_statement >= g_current_runtime_level THEN
7479           FND_LOG.STRING(g_level_statement,
7480                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7481                  'RETURN_STATUS = ' || x_return_status);
7482           FND_LOG.STRING(g_level_statement,
7483                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7484                  'Remove this tax line and reset return_status');
7485         END IF;
7486 
7487         /*ELSE
7488           -- return with error
7489           --
7490           RETURN;
7491 
7492         END IF;*/
7493       END IF;    -- l_is_valid OR ELSE
7494 
7495     ELSE      -- For migrated tax rate code
7496 
7497       l_tax_found_in_ap_flag := 'N';
7498       l_tax_regime_code := NULL;
7499       l_tax := NULL;
7500       l_tax_status_code := NULL;
7501       l_tax_jurisdiction_code := NULL;
7502 
7503       OPEN  get_tax_info_f_ap_input(tax_line_rec.tax_rate_code);
7504       FETCH get_tax_info_f_ap_input INTO
7505                                    l_tax_regime_code, l_tax, l_tax_status_code, l_tax_jurisdiction_code;
7506       CLOSE get_tax_info_f_ap_input;
7507 
7508       IF l_tax IS NULL THEN
7509 
7510         OPEN  get_tax_info_f_ap_null(tax_line_rec.tax_rate_code);
7511         FETCH get_tax_info_f_ap_null INTO
7512                                 l_tax_regime_code, l_tax, l_tax_status_code, l_tax_jurisdiction_code;
7513         CLOSE get_tax_info_f_ap_null;
7514       END IF;
7515 
7516         IF l_tax IS NOT NULL THEN
7517               l_tax_found_in_ap_flag := 'Y';
7518 
7519               IF (g_level_statement >= g_current_runtime_level ) THEN
7520                 FND_LOG.STRING(g_level_statement,
7521                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7522                        'Tax rate code is defined in Payables.');
7523               END IF;
7524 
7525         ELSE  -- l_tax IS NULL
7526 
7527           IF (g_level_statement >= g_current_runtime_level ) THEN
7528             FND_LOG.STRING(g_level_statement,
7529                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7530                    'Tax rate code is not defined in Payables.');
7531           END IF;
7532 
7533           -- Tax not defined in AP, try to find other tax rate code
7534           --
7535           OPEN  get_tax_info_f_not_ap(tax_line_rec.tax_rate_code);
7536           FETCH get_tax_info_f_not_ap INTO l_tax_regime_code,l_tax,l_tax_status_code,l_tax_jurisdiction_code;
7537           CLOSE get_tax_info_f_not_ap;
7538 
7539           IF l_tax IS NULL THEN
7540 
7541             -- Matching tax rate code is not defined in AP or other product,
7542             -- raise error
7543             --
7544             x_return_status := FND_API.G_RET_STS_ERROR;
7545             l_error_buffer := 'tax_amt <> 0. Tax Rate Code is not adhoc';
7546             IF (g_level_statement >= g_current_runtime_level ) THEN
7547               FND_LOG.STRING(g_level_statement,
7548                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7549                      'Tax rate code is not defined in AP and other product.');
7550               FND_LOG.STRING(g_level_statement,
7551                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7552                      'RETURN_STATUS = ' || x_return_status);
7553               FND_LOG.STRING(g_level_statement,
7554                      'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7555                      'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7556             END IF;
7557             RETURN;
7558           END IF;
7559         END IF;
7560 
7561       -- Tax Defined in AP or other product.
7562       -- Need to validate and populate tax_regime_id
7563       --
7564       ZX_TDS_UTILITIES_PKG.get_regime_cache_info(
7565                         l_tax_regime_code,
7566                         p_tax_determine_date,
7567                         l_tax_regime_rec,
7568                         x_return_status,
7569                         l_error_buffer);
7570 
7571       IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
7572         IF (g_level_statement >= g_current_runtime_level ) THEN
7573           FND_LOG.STRING(g_level_statement,
7574                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7575                  'Incorrect return_status after calling ' ||
7576                  'ZX_TDS_UTILITIES_PKG.get_regime_cache_info');
7577           FND_LOG.STRING(g_level_statement,
7578                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7579                  'RETURN_STATUS = ' || x_return_status);
7580           FND_LOG.STRING(g_level_statement,
7581                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7582                  'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7583         END IF;
7584         RETURN;
7585       END IF;
7586 
7587       -- populate new id
7588       --
7589       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7590                      l_rownum).tax_regime_id := l_tax_regime_rec.tax_regime_id;
7591 
7592       -- validate and populate tax_id
7593       --
7594       ZX_TDS_UTILITIES_PKG.get_tax_cache_info(
7595                         l_tax_regime_code,
7596                         l_tax,
7597                         p_tax_determine_date,
7598                         l_tax_rec,
7599                         x_return_status,
7600                         l_error_buffer);
7601 
7602       IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
7603         IF (g_level_statement >= g_current_runtime_level ) THEN
7604           FND_LOG.STRING(g_level_statement,
7605                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7606                  'Incorrect return_status after calling ' ||
7607                  'ZX_TDS_UTILITIES_PKG.get_tax_cache_info');
7608           FND_LOG.STRING(g_level_statement,
7609                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7610                  'RETURN_STATUS = ' || x_return_status);
7611           FND_LOG.STRING(g_level_statement,
7612                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7613                  'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7614         END IF;
7615         RETURN;
7616       END IF;
7617 
7618       -- populate new id
7619       --
7620       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7621                                          l_rownum).tax_id := l_tax_rec.tax_id;
7622 
7623       -- bug 5077691: populate legal_reporting_status
7624       IF p_event_class_rec.tax_reporting_flag = 'Y' THEN
7625         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7626                 l_rownum).legal_reporting_status :=
7627                       ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
7628                               l_tax_rec.tax_id).legal_reporting_status_def_val;
7629       END IF;
7630       --
7631       -- validate and populate tax_jurisdiction_id
7632       --
7633       IF tax_line_rec.tax_jurisdiction_code is not NULL THEN
7634         ZX_TDS_UTILITIES_PKG.get_jurisdiction_cache_info(
7635                         l_tax_regime_code,
7636                         l_tax,
7637                         l_tax_jurisdiction_code,
7638                         p_tax_determine_date,
7639                         l_tax_jurisdiction_rec,
7640                         x_return_status,
7641                         l_error_buffer);
7642 
7643         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
7644           IF (g_level_statement >= g_current_runtime_level ) THEN
7645             FND_LOG.STRING(g_level_statement,
7646                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
7647                     'Incorrect return_status after calling ' ||
7648                     'ZX_TDS_UTILITIES_PKG.get_jurisdiction_cache_info');
7649             FND_LOG.STRING(g_level_statement,
7650                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines',
7651                           'RETURN_STATUS = ' || x_return_status);
7652             FND_LOG.STRING(g_level_statement,
7653                           'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines.END',
7654                           'ZX_TDS_APPLICABILITY_DETM_PKG.fetch_tax_lines(-)');
7655           END IF;
7656           RETURN;
7657         END IF;
7658 
7659         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7660                              l_rownum).tax_jurisdiction_id :=
7661                                      l_tax_jurisdiction_rec.tax_jurisdiction_id;
7662       END IF;
7663 
7664 
7665       -- validate and populate tax_status_id
7666       --
7667       ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
7668                         l_tax,
7669                         l_tax_regime_code,
7670                         l_tax_status_code,
7671                         p_tax_determine_date,
7672                         l_tax_status_rec,
7673                         x_return_status,
7674                         l_error_buffer);
7675 
7676       IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
7677         IF (g_level_statement >= g_current_runtime_level ) THEN
7678           FND_LOG.STRING(g_level_statement,
7679                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7680                  'Incorrect return_status after calling ' ||
7681                  'ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info');
7682           FND_LOG.STRING(g_level_statement,
7683                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7684                  'RETURN_STATUS = ' || x_return_status);
7685           FND_LOG.STRING(g_level_statement,
7686                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7687                  'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7688         END IF;
7689         RETURN;
7690       END IF;
7691 
7692       -- populate new id
7693       --
7694       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7695                   l_rownum).tax_status_id := l_tax_status_rec.tax_status_id;
7696 
7697 
7698       IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(l_rownum).tax_amt <> 0
7699       THEN
7700 
7701         -- validate and populate tax_rate_id and retain rate % and tax amount
7702         --
7703         ZX_TDS_UTILITIES_PKG.get_tax_rate_info(
7704                         l_tax_regime_code,
7705                         l_tax,
7706                         l_tax_jurisdiction_code,
7707                         l_tax_status_code,
7708                         tax_line_rec.tax_rate_code,
7709                         p_tax_determine_date,
7710                         l_tax_class,
7711                         l_tax_rate_rec,
7712                         x_return_status,
7713                         l_error_buffer);
7714 
7715         IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
7716           IF (g_level_statement >= g_current_runtime_level ) THEN
7717             FND_LOG.STRING(g_level_statement,
7718                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7719                    'Incorrect return_status after calling ' ||
7720                    'ZX_TDS_UTILITIES_PKG.get_tax_rate_info');
7721             FND_LOG.STRING(g_level_statement,
7722                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7723                    'RETURN_STATUS = ' || x_return_status);
7724             FND_LOG.STRING(g_level_statement,
7725                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7726                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7727           END IF;
7728           RETURN;
7729         END IF;
7730 
7731         IF l_tax_rate_rec.percentage_rate <> tax_line_rec.tax_rate  AND   -- Bug 5010575
7732            l_tax_rate_rec.allow_adhoc_tax_rate_flag = 'N'
7733         THEN
7734 
7735           x_return_status := FND_API.G_RET_STS_ERROR;
7736           l_error_buffer := 'Tax Rate Code is not adhoc';
7737           IF (g_level_statement >= g_current_runtime_level ) THEN
7738             FND_LOG.STRING(g_level_statement,
7739                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7740                    l_error_buffer);
7741             FND_LOG.STRING(g_level_statement,
7742                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7743                    'RETURN_STATUS = ' || x_return_status);
7744             FND_LOG.STRING(g_level_statement,
7745                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7746                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7747           END IF;
7748           RETURN;
7749         END IF;
7750 
7751         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7752                                 l_rownum).tax_rate_id := l_tax_rate_rec.tax_rate_id;
7753 
7754         IF l_tax_found_in_ap_flag = 'Y' THEN
7755 
7756           -- replace tax_regime_code, tax and tax_status_code
7757           --
7758           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7759                                              l_rownum).tax_regime_code := l_tax_regime_code;
7760           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7761                                                          l_rownum).tax := l_tax;
7762           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7763                                              l_rownum).tax_status_code := l_tax_status_code;
7764 
7765         END IF;
7766 
7767       ELSE        -- tax_amt = 0
7768 
7769         -- Check if offset tax is allowed, if not raise error
7770         --
7771         IF l_tax_rate_rec.percentage_rate <> 0   -- Bug 5010575
7772         AND p_event_class_rec.allow_offset_tax_calc_flag = 'N'
7773         THEN
7774           x_return_status := FND_API.G_RET_STS_ERROR;
7775           l_error_buffer := 'Need to create Offset Tax. But offset tax is not allowed';
7776 
7777           IF g_level_statement >= g_current_runtime_level THEN
7778             FND_LOG.STRING(g_level_statement,
7779                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7780                     l_error_buffer);
7781             FND_LOG.STRING(g_level_statement,
7782                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7783                    'RETURN_STATUS = ' || x_return_status);
7784             FND_LOG.STRING(g_level_statement,
7785                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7786                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7787           END IF;
7788           RETURN;
7789         END IF;
7790 
7791         -- set tax_rate column and amt related columns to NULL
7792         -- Tax Rate percentage will be determined in ZX_TDS_RATE_DETM_PKG
7793         --
7794         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7795                                                    l_rownum).offset_flag := 'Y';
7796 
7797         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7798                                                      l_rownum).tax_rate := NULL;
7799         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7800                                                       l_rownum).tax_amt := NULL;
7801         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7802                                              l_rownum).tax_amt_tax_curr := NULL;
7803         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7804                                            l_rownum).tax_amt_funcl_curr := NULL;
7805         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7806                                                   l_rownum).taxable_amt := NULL;
7807         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7808                                          l_rownum).taxable_amt_tax_curr := NULL;
7809         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
7810                                        l_rownum).taxable_amt_funcl_curr := NULL;
7811       END IF;     -- tax_amt <> 0 OR NOT
7812     END IF;       -- tax rate code is migrated or not
7813 
7814     IF l_is_valid THEN
7815       -- set x_begin_index
7816       --
7817       IF (x_begin_index is NULL) THEN
7818         x_begin_index := l_rownum;
7819       END IF;
7820 
7821       populate_registration_info(
7822          p_event_class_rec    => p_event_class_rec,
7823          p_trx_line_index     => p_trx_line_index,
7824          p_rownum             => l_rownum,
7825          p_def_reg_type       => l_tax_rec.def_registr_party_type_code,
7826          p_reg_rule_flg       => l_tax_rec.registration_type_rule_flag,
7827          p_tax_determine_date => p_tax_determine_date,
7828          x_return_status      => x_return_status);
7829 
7830       IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
7831         IF (g_level_statement >= g_current_runtime_level ) THEN
7832           FND_LOG.STRING(g_level_statement,
7833                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7834                  'Incorrect return_status after calling ' ||
7835                  'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info');
7836           FND_LOG.STRING(g_level_statement,
7837                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7838                  'RETURN_STATUS = ' || x_return_status);
7839           FND_LOG.STRING(g_level_statement,
7840                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7841                  'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7842         END IF;
7843         RETURN;
7844       END IF;
7845     END IF;    -- l_is_valid
7846   END LOOP;    -- tax_line_rec IN get_taxes_f_intercomp_trx_csr
7847 
7848   -- set x_end_index
7849   --
7850   IF (x_begin_index IS NOT NULL) THEN
7851     x_end_index := ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST;
7852   END IF;
7853 
7854   ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines (p_trx_line_index,
7855                                                        x_begin_index,
7856                                                        x_end_index,
7857                                                        x_return_status,
7858                                                        l_error_buffer );
7859 
7860   IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
7861       IF (g_level_statement >= g_current_runtime_level ) THEN
7862         FND_LOG.STRING(g_level_statement,
7863                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7864                'Incorrect RETURN_STATUS after calling '||
7865                'ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines');
7866         FND_LOG.STRING(g_level_statement,
7867                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7868                'RETURN_STATUS = ' || x_return_status);
7869         FND_LOG.STRING(g_level_statement,
7870                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7871                'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7872       END IF;
7873       RETURN;
7874   END IF;
7875 
7876   IF (g_level_procedure >= g_current_runtime_level ) THEN
7877     FND_LOG.STRING(g_level_procedure,
7878            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7879            'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)'||x_return_status);
7880   END IF;
7881 
7882 EXCEPTION
7883   WHEN OTHERS THEN
7884     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7885     IF (g_level_unexpected >= g_current_runtime_level ) THEN
7886       FND_LOG.STRING(g_level_unexpected,
7887                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx',
7888                      sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
7889       FND_LOG.STRING(g_level_unexpected,
7890                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx.END',
7891                     'ZX_TDS_APPLICABILITY_DETM_PKG.get_taxes_for_intercomp_trx(-)');
7892     END IF;
7893 
7894 END get_taxes_for_intercomp_trx;
7895 
7896 -- Added for STCC Bug 4959835
7897 ---------------------------------------------------------------------
7898 -- PUBLIC PROCEDURE
7899 --  get_process_results
7900 --
7901 --  DESCRIPTION: This procedure is to fetch the applicable tax lines
7902 --               directly from the process results for non-location based
7903 --               scenario (P2P and O2C VAT)
7904 --
7905 --  January 05, 2006     Usha Srikumaran     Created
7906 --
7907 
7908 PROCEDURE get_process_results(
7909   p_trx_line_index        IN            BINARY_INTEGER,
7910   p_tax_date              IN            DATE,
7911   p_tax_determine_date    IN            DATE,
7912   p_tax_point_date        IN            DATE,
7913   p_event_class_rec       IN            zx_api_pub.event_class_rec_type,
7914   x_begin_index           IN OUT NOCOPY BINARY_INTEGER,
7915   x_end_index             IN OUT NOCOPY BINARY_INTEGER,
7916   x_return_status            OUT NOCOPY VARCHAR2) IS
7917 
7918   CURSOR get_unique_constraint_csr(
7919           c_tax_classification_code    zx_lines_det_factors.input_tax_classification_code%TYPE,
7920           c_internal_organization_id   zx_lines_det_factors.internal_organization_id%TYPE)
7921   IS
7922   SELECT cg.constraint_id
7923     FROM zx_condition_groups_b cg,
7924          ar_tax_conditions_all tc
7925    WHERE cg.condition_group_code like c_tax_classification_code||'~'||'%'
7926      AND cg.enabled_flag = 'Y'
7927      AND cg.constraint_id IS NOT NULL
7928      AND tc.tax_condition_id = cg.constraint_id
7929      AND tc.org_id = c_internal_organization_id;
7930 
7931 
7932 --  CURSOR get_constraints_csr
7933 --         (c_tax_classification_code  zx_lines_det_factors.input_tax_classification_code%TYPE)
7934 --  IS
7935 --  SELECT cg.CONSTRAINT_ID
7936 --    FROM zx_condition_groups_b cg
7937 --   WHERE cg.CONDITION_GROUP_CODE like c_tax_classification_code||'~'||'%'
7938 --     AND cg.enabled_flag = 'Y'
7939 --     AND cg.constraint_id IS NOT NULL;
7940 --
7941 --
7942 --  CURSOR get_unique_constraint_csr(
7943 --          c_tax_classification_code    zx_lines_det_factors.input_tax_classification_code%TYPE,
7944 --          c_internal_organization_id   zx_lines_det_factors.internal_organization_id%TYPE)
7945 --  IS
7946 --  SELECT cg.constraint_id
7947 --    FROM zx_condition_groups_b cg,
7948 --         ar_tax_conditions tc
7949 --   WHERE cg.condition_group_code like c_tax_classification_code||'~'||'%'
7950 --     AND cg.enabled_flag = 'Y'
7951 --     AND tc.tax_condition_id = cg.constraint_id
7952 --     AND tc.org_id = c_internal_organization_id;
7953 
7954   CURSOR get_candidate_taxes_csr(
7955          c_condition_group_code   zx_condition_groups_b.condition_group_code%TYPE,
7956          c_tax_rate_code      zx_rates_b.tax_rate_code%TYPE,
7957          c_tax_class          zx_rates_b.tax_class%TYPE,
7958          c_tax_determine_date DATE) IS
7959   SELECT /*+ leading(PR) use_nl(RL) */
7960          rl.tax_regime_code,
7961          rl.tax,
7962          pr.status_result,
7963          pr.rate_result,
7964          pr.condition_set_id,
7965          pr.exception_set_id,
7966          pr.result_id,
7967          1  query_num
7968     FROM ZX_PROCESS_RESULTS pr,
7969          ZX_SCO_RULES_B_V rl
7970          --ZX_SCO_RATES_B_V rt
7971    WHERE (pr.CONDITION_GROUP_CODE = c_condition_group_code or
7972           pr.CONDITION_GROUP_CODE like c_condition_group_code ||'~'||'%')
7973      AND rl.effective_from <= c_tax_determine_date                              ---Bug 5691957
7974      AND (rl.effective_to  >= c_tax_determine_date OR rl.effective_to IS NULL ) ---Bug 5691957
7975      AND pr.enabled_flag = 'Y'
7976      AND rl.tax_rule_id = pr.tax_rule_id
7977      AND rl.service_type_code = 'DET_DIRECT_RATE'
7978      AND EXISTS
7979               (SELECT /*+ no_unnest */ 1
7980                FROM ZX_SCO_RATES_B_V rt
7981                WHERE rt.tax_regime_code = rl.tax_regime_code                                -- bug 6680676
7982                AND   rt.tax = rl.tax
7983                AND   rt.tax_status_code = pr.status_result
7984                AND   rt.tax_rate_code = pr.rate_result
7985                AND   rt.effective_from <= c_tax_determine_date
7986                AND  (rt.effective_to  >= c_tax_determine_date OR rt.effective_to IS NULL )
7987                AND   rt.Active_Flag = 'Y'
7988                AND  (rt.tax_class = c_tax_class OR rt.tax_class IS NULL))
7989    UNION ALL
7990   SELECT /*+ leading(RT.a) use_nl(RT.sd) */
7991          DISTINCT rt.tax_regime_code,
7992          rt.tax,
7993          rt.tax_status_code,
7994          rt.tax_rate_code,
7995          NULL  condition_set_id,
7996          NULL  exception_set_id,
7997          NULL  result_id,
7998          2     query_num
7999     FROM ZX_SCO_RATES_B_V rt
8000    WHERE rt.tax_rate_code = c_tax_rate_code
8001      AND rt.rate_type_code <> 'RECOVERY'
8002      AND rt.effective_from <= c_tax_determine_date
8003      AND (rt.effective_to  >= c_tax_determine_date OR rt.effective_to IS NULL )
8004      AND rt.Active_Flag = 'Y'
8005      AND (rt.tax_class = c_tax_class or rt.tax_class IS NULL)
8006 -- Bug 5481559: Though jurisdiction code is NULL for migrated tax classification
8007 --              codes, it can be entered for newly created tax rates, in which
8008 --              case,w e should consider the tax rate if jurisdiction matches. i--              Jurisdiction match will be checked when place of supply is
8009 --              validated.
8010 --    AND rt.tax_jurisdiction_code is NULL
8011      AND EXISTS (SELECT 1
8012                   FROM ZX_SCO_TAXES_B_V tax
8013                  WHERE tax.tax_regime_code = rt.tax_regime_code
8014                    AND tax.tax = rt.tax
8015                    AND tax.live_for_processing_flag = 'Y'
8016                    AND tax.live_for_applicability_flag = 'Y');
8017 
8018 
8019   -- To filter based on rate class
8020   --
8021   CURSOR check_tax_rate_class_csr(
8022          c_tax_regime_code    zx_rates_b.tax_regime_code%TYPE,
8023          c_tax                zx_rates_b.tax%TYPE,
8024          c_tax_status_code    zx_rates_b.tax_status_code%TYPE,
8025          c_tax_rate_code      zx_rates_b.tax_rate_code%TYPE,
8026          c_tax_class          zx_rates_b.tax_class%TYPE,
8027          c_tax_determine_date DATE) IS
8028   SELECT 1
8029     FROM ZX_SCO_RATES_B_V
8030    WHERE tax_regime_code = c_tax_regime_code
8031      AND tax = c_tax
8032      AND tax_status_code = c_tax_status_code
8033      AND tax_rate_code = c_tax_rate_code
8034      AND effective_from <= c_tax_determine_date
8035      AND (effective_to  >= c_tax_determine_date OR effective_to IS NULL )
8036      AND Active_Flag = 'Y'
8037      AND (tax_class = c_tax_class or tax_class IS NULL)
8038      AND rownum=1;
8039 
8040    -- cursor to order the jurisdictions in the GT
8041   CURSOR c_get_jurisdiction_from_gt(
8042            c_tax_regime_code  VARCHAR2,
8043            c_tax              VARCHAR2)IS
8044     SELECT tax_jurisdiction_id,
8045            tax_jurisdiction_code,
8046            tax_regime_code,
8047            tax,
8048            precedence_level
8049       FROM zx_jurisdictions_gt
8050      WHERE tax_regime_code = c_tax_regime_code
8051        AND tax = c_tax
8052      ORDER BY precedence_level;
8053 
8054 
8055      CURSOR  get_tax_info_csr(c_tax_regime_code    IN ZX_REGIMES_B.tax_regime_code%TYPE,
8056                               c_tax                IN zx_taxes_b.tax%TYPE,
8057                               c_tax_determine_date IN DATE) IS
8058    SELECT tax_id,
8059           tax,
8060           tax_regime_code,
8061           tax_type_code,
8062           tax_precision,
8063           minimum_accountable_unit,
8064           Rounding_Rule_Code,
8065           Tax_Status_Rule_Flag,
8066           Tax_Rate_Rule_Flag,
8067           Place_Of_Supply_Rule_Flag,
8068           Applicability_Rule_Flag,
8069           Tax_Calc_Rule_Flag,
8070           Taxable_Basis_Rule_Flag,
8071           def_tax_calc_formula,
8072           def_taxable_basis_formula,
8073           Reporting_Only_Flag,
8074           tax_currency_code,
8075           Def_Place_Of_Supply_Type_Code,
8076           Def_Registr_Party_Type_Code,
8077           Registration_Type_Rule_Flag,
8078           Direct_Rate_Rule_Flag,
8079           Def_Inclusive_Tax_Flag,
8080           effective_from,
8081           effective_to,
8082           compounding_precedence,
8083           Has_Other_Jurisdictions_Flag,
8084           Live_For_Processing_Flag,
8085           Regn_Num_Same_As_Le_Flag,
8086           applied_amt_handling_flag,
8087           exchange_rate_type,
8088           applicable_by_default_flag,
8089           record_type_code,
8090           tax_exmpt_cr_method_code,
8091           tax_exmpt_source_tax,
8092           legal_reporting_status_def_val,
8093           def_rec_settlement_option_code,
8094           zone_geography_type,
8095           override_geography_type,
8096           allow_rounding_override_flag,
8097           tax_account_source_tax
8098      FROM ZX_SCO_TAXES_B_V
8099     WHERE tax = c_tax
8100       AND tax_regime_code = c_tax_regime_code
8101       AND (effective_from <= c_tax_determine_date AND
8102             (effective_to >= c_tax_determine_date OR effective_to IS NULL))
8103       AND live_for_processing_flag = 'Y'
8104       AND live_for_applicability_flag = 'Y'
8105       -- AND rownum = 1;
8106     ORDER BY subscription_level_code;
8107 
8108 
8109   -- Local variables
8110   --
8111   l_constraint_id              zx_condition_groups_b.constraint_id%TYPE;
8112   l_condition_group_code       zx_condition_groups_b.condition_group_code%TYPE;
8113   l_tax_classification_code    zx_lines_det_factors.input_tax_classification_code%TYPE;
8114   l_internal_organization_id   zx_lines_det_factors.internal_organization_id%TYPE;
8115   l_cec_result                 BOOLEAN;
8116   l_action_rec_tbl             ZX_TDS_PROCESS_CEC_PVT.action_rec_tbl_type;
8117   l_tax_regime_code_tbl        tax_regime_code_tbl;
8118   l_tax_tbl                    tax_tbl;
8119   l_result_id_tbl              result_id_tbl;
8120   l_query_num_tbl              ZX_GLOBAL_STRUCTURES_PKG.NUMBER_tbl_type;
8121   l_status_result_tbl          status_result_tbl;
8122   l_rate_result_tbl            rate_result_tbl;
8123   l_condition_set_tbl          condition_set_tbl;
8124   l_exception_set_tbl          exception_set_tbl;
8125   l_counter                    NUMBER;
8126   i                            NUMBER;
8127   l_tax_regime_rec             zx_global_structures_pkg.tax_regime_rec_type;
8128   l_tax_rec                    ZX_TDS_UTILITIES_PKG.zx_tax_info_cache_rec;
8129   l_tax_status_rec             ZX_TDS_UTILITIES_PKG.zx_status_info_rec;
8130   l_tax_rate_rec               ZX_TDS_UTILITIES_PKG.zx_rate_info_rec_type;
8131   l_error_buffer               VARCHAR2(200);
8132   l_rownum                     BINARY_INTEGER;
8133   l_curr_rownum                BINARY_INTEGER;
8134   l_tax_class                  zx_rates_b.tax_class%TYPE;
8135   l_temp_num                   NUMBER;
8136   l_jurisdictions_found        VARCHAR2(1);
8137   l_jurisdiction_rec           ZX_TCM_GEO_JUR_PKG.tax_jurisdiction_rec_type;
8138   l_place_of_supply_type_code  zx_taxes_b.def_place_of_supply_type_code%TYPE;
8139   l_place_of_supply_result_id  NUMBER;
8140   l_begin_index                BINARY_INTEGER;
8141   l_end_index                  BINARY_INTEGER;
8142   l_regimerownum               BINARY_INTEGER;
8143   l_tax_index                  NUMBER;
8144   l_trx_line_id                NUMBER;
8145   l_trx_level_type             VARCHAR2(30);
8146 
8147   l_self_assessed_flag         zx_lines.self_assessed_flag%TYPE;
8148   l_tax_amt_included_flag      zx_lines.tax_amt_included_flag%TYPE;
8149   l_tax_jurisdiction_id        zx_lines.tax_jurisdiction_id%TYPE;
8150   l_tax_jurisdiction_code      zx_lines.tax_jurisdiction_code%TYPE;
8151   l_jur_index                  NUMBER;
8152   l_jurisdiction_rec_tbl       ZX_TCM_GEO_JUR_PKG.tax_jurisdiction_rec_tbl_type;
8153   l_index                      NUMBER;
8154   l_tbl_index                  BINARY_INTEGER;
8155   l_rate_exists_same_prod_family BOOLEAN;
8156   l_tax_applicable               BOOLEAN;
8157   l_applicability_result_id    NUMBER;
8158   l_applicability_result       zx_process_results.alphanumeric_result%TYPE;
8159   l_exception_rate             zx_lines.exception_rate%TYPE;
8160 
8161 BEGIN
8162 
8163   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
8164 
8165   IF (g_level_procedure >= g_current_runtime_level ) THEN
8166     FND_LOG.STRING(g_level_procedure,
8167            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results.BEGIN',
8168            'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(+)');
8169   END IF;
8170 
8171   x_return_status := FND_API.G_RET_STS_SUCCESS;
8172 
8173   l_tax_classification_code :=
8174     NVL(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INPUT_TAX_CLASSIFICATION_CODE(p_trx_line_index),
8175         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.OUTPUT_TAX_CLASSIFICATION_CODE(p_trx_line_index));
8176 
8177   l_internal_organization_id :=
8178     ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(p_trx_line_index);
8179 
8180   l_condition_group_code := l_tax_classification_code;
8181 
8182   IF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
8183     l_tax_class := 'OUTPUT';
8184   ELSIF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
8185     l_tax_class := 'INPUT';
8186   END IF;
8187 
8188   l_trx_line_id :=
8189        ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
8190   l_trx_level_type :=
8191     ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
8192 
8193   IF l_tax_classification_code IS NOT NULL THEN
8194   IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
8195                 p_trx_line_index) = 'CREATE' OR
8196          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
8197                 p_trx_line_index) = 'CREATE_WITH_TAX' OR
8198      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
8199                 p_trx_line_index) = 'UPDATE' OR
8200      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
8201                 p_trx_line_index) = 'CREATE_TAX_ONLY' OR
8202      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
8203                 p_trx_line_index) = 'COPY_AND_CREATE'
8204   THEN
8205 
8206 
8207     IF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
8208 
8209 
8210       OPEN  get_unique_constraint_csr(l_tax_classification_code,
8211                                       l_internal_organization_id);
8212       FETCH get_unique_constraint_csr INTO l_constraint_id;
8213       CLOSE get_unique_constraint_csr;
8214 
8215 --      OPEN  get_constraints_csr(l_tax_classification_code);
8216 --
8217 --      -- There may be multiple records if there are 2 tax groups with the same code
8218 --      -- having different constraint_id. In that case, get the correct record based
8219 --      -- on the internal OU.
8220 --
8221 --      IF get_constraints_csr%ROWCOUNT > 1 THEN
8222 --
8223 --        OPEN  get_unique_constraint_csr(l_tax_classification_code,
8224 --                                        l_internal_organization_id);
8225 --        FETCH get_unique_constraint_csr into l_constraint_id;
8226 --        CLOSE get_unique_constraint_csr;
8227 --      ELSE
8228 --        FETCH get_constraints_csr into l_constraint_id;
8229 --      END IF;
8230 
8231       IF l_constraint_id IS NOT NULL THEN
8232         l_condition_group_code := l_tax_classification_code || '~' ||
8233                                   l_constraint_id;
8234 
8235         -- The following procedure is currently PRIVATE inside rule engine.
8236         -- It has to be made public to be called as below
8237 
8238         ZX_TDS_RULE_BASE_DETM_PVT.init_cec_params (
8239                                     p_structure_name  => 'TRX_LINE_DIST_TBL',
8240                                     p_structure_index => p_trx_line_index,
8241                                     p_return_status   => x_return_status,
8242                                     p_error_buffer    => l_error_buffer);
8243 
8244         ZX_TDS_PROCESS_CEC_PVT.evaluate_cec(
8245                             p_constraint_id                => l_constraint_id,
8246                             p_cec_ship_to_party_site_id    => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_ship_to_party_site_id,
8247                             p_cec_bill_to_party_site_id    => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_bill_to_party_site_id,
8248                             p_cec_ship_to_party_id         => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_ship_to_party_id,
8249                             p_cec_bill_to_party_id         => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_bill_to_party_id,
8250                             p_cec_poo_location_id          => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_poo_location_id,
8251                             p_cec_poa_location_id          => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_poa_location_id,
8252                             p_cec_trx_id                   => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_trx_id,
8253                             p_cec_trx_line_id              => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_trx_line_id,
8254                             p_cec_ledger_id                => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_ledger_id,
8255                             p_cec_internal_organization_id => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_internal_organization_id,
8256                             p_cec_so_organization_id       => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_so_organization_id,
8257                             p_cec_product_org_id           => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_product_org_id,
8258                             p_cec_product_id               => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_product_id,
8259                             p_cec_trx_line_date            => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_trx_line_date,
8260                             p_cec_trx_type_id              => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_trx_type_id,
8261                             p_cec_fob_point                => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_fob_point,
8262                             p_cec_ship_to_site_use_id      => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_ship_to_site_use_id,
8263                             p_cec_bill_to_site_use_id      => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_bill_to_site_use_id,
8264                             p_cec_result                   => l_cec_result,
8265                             p_action_rec_tbl               => l_action_rec_tbl,
8266                             p_return_status                => x_return_status,
8267                             p_error_buffer                 => l_error_buffer);
8268 
8269         FOR i IN 1.. NVL(l_action_rec_tbl.last,0) LOOP
8270 
8271           IF UPPER(l_action_rec_tbl(i).action_code) in ('ERROR_MESSAGE','SYSTEM_ERROR') then
8272             x_return_status := FND_API.G_RET_STS_ERROR;
8273             app_exception.raise_exception;
8274           ELSIF UPPER(l_action_rec_tbl(i).action_code) = 'DO_NOT_USE_THIS_TAX_GROUP' then
8275             l_cec_result := FALSE;
8276           ELSIF  UPPER(l_action_rec_tbl(i).action_code) = 'USE_THIS_TAX_GROUP' then
8277             l_cec_result := TRUE;
8278           ELSIF UPPER(l_action_rec_tbl(i).action_code) = 'DEFAULT_TAX_CODE' then
8279 
8280             NULL;
8281             --++ How do we default a Tax Code at Tax Group level if there are
8282             --   multiple tax codes associated with that tax group? Even if we default,
8283             --   should we evaluate the conditions and exceptions and if there is an action
8284             --   DEFAULT_TAX_CODE should we honour that one ? Revisit later
8285           END IF;
8286         END LOOP;
8287       END IF;   -- l_constraint_id IS NOT NULL
8288 
8289 --      CLOSE get_constraints_csr;
8290 
8291     END IF; -- O2C prod family grp
8292 
8293     IF l_cec_result OR l_constraint_id IS NULL THEN
8294 
8295       l_curr_rownum := NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST, 0);
8296       l_rownum := l_curr_rownum;
8297 
8298       -- Evaluate the conditions and exceptions
8299       --
8300 
8301       OPEN get_candidate_taxes_csr(
8302          c_condition_group_code => l_condition_group_code,
8303          c_tax_rate_code        => l_tax_classification_code,
8304          c_tax_class            => l_tax_class,
8305          c_tax_determine_date   => p_tax_determine_date);
8306 
8307       LOOP
8308         FETCH get_candidate_taxes_csr bulk collect INTO
8309                   l_tax_regime_code_tbl,
8310                   l_tax_tbl,
8311                   l_status_result_tbl,
8312                   l_rate_result_tbl,
8313                   l_condition_set_tbl,
8314                   l_exception_set_tbl,
8315                   l_result_id_tbl,
8316                   l_query_num_tbl
8317         LIMIT c_lines_per_commit;
8318 
8319       l_counter := l_tax_regime_code_tbl.count;
8320 
8321       FOR j IN 1..l_counter LOOP
8322 
8323         l_tax_index := NULL;
8324 
8325         l_end_index := NVL( ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST, 0);
8326         -- Check if this tax line exists in the new created applicable tax lines
8327         l_tax_index := ZX_TDS_UTILITIES_PKG.get_tax_index(
8328                                            l_tax_regime_code_tbl(j),
8329                                            l_tax_tbl(j),
8330                                            l_trx_line_id,
8331                                            l_trx_level_type,
8332                                            x_begin_index,
8333                                            l_end_index,
8334                                            x_return_status);
8335 
8336         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8337           IF (g_level_statement >= g_current_runtime_level ) THEN
8338             FND_LOG.STRING(g_level_statement,
8339                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8340                    'Incorrect return_status after calling ' ||
8341                    'ZX_TDS_UTILITIES_PKG.get_tax_index');
8342             FND_LOG.STRING(g_level_statement,
8343                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8344                    'RETURN_STATUS = ' || x_return_status);
8345             FND_LOG.STRING(g_level_statement,
8346                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results.END',
8347                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(-)');
8348           END IF;
8349           RETURN;
8350         END IF;
8351 
8352         --Only process the taxes which has NOT been added to the detail tax lines.
8353         IF l_tax_index is NULL THEN
8354 
8355           IF l_condition_set_tbl(j) IS NOT NULL OR l_exception_set_tbl(j) IS NOT NULL
8356           THEN
8357 
8358             l_action_rec_tbl.delete;
8359             l_cec_result := TRUE;		-- bugfix 5572117
8360             l_exception_rate := NULL;           -- bugfix 6906653
8361 
8362 
8363             IF  l_constraint_id is NULL then
8364 
8365 
8366 
8367               -- The initialization would have occurred earlier if the constraint_id was NOT NULL
8368 
8369                ZX_TDS_RULE_BASE_DETM_PVT.init_cec_params (
8370 
8371                                 p_structure_name  => 'TRX_LINE_DIST_TBL',
8372 
8373                                 p_structure_index => p_trx_line_index,
8374 
8375                                 p_return_status   => x_return_status,
8376 
8377                                 p_error_buffer    => l_error_buffer);
8378 
8379             END IF;
8380 
8381 
8382 
8383             ZX_TDS_PROCESS_CEC_PVT.evaluate_cec(
8384                           p_condition_set_id             => l_condition_set_tbl(j),
8385                           p_exception_set_id             => l_exception_set_tbl(j),
8386                           p_cec_ship_to_party_site_id    => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_ship_to_party_site_id,
8387                           p_cec_bill_to_party_site_id    => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_bill_to_party_site_id,
8388                           p_cec_ship_to_party_id         => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_ship_to_party_id,
8389                           p_cec_bill_to_party_id         => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_bill_to_party_id,
8390                           p_cec_poo_location_id          => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_poo_location_id,
8391                           p_cec_poa_location_id          => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_poa_location_id,
8392                           p_cec_trx_id                   => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_trx_id,
8393                           p_cec_trx_line_id              => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_trx_line_id,
8394                           p_cec_ledger_id                => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_ledger_id,
8395                           p_cec_internal_organization_id => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_internal_organization_id,
8396                           p_cec_so_organization_id       => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_so_organization_id,
8397                           p_cec_product_org_id           => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_product_org_id,
8398                           p_cec_product_id               => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_product_id,
8399                           p_cec_trx_line_date            => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_trx_line_date,
8400                           p_cec_trx_type_id              => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_trx_type_id,
8401                           p_cec_fob_point                => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_fob_point,
8402                           p_cec_ship_to_site_use_id      => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_ship_to_site_use_id,
8403                           p_cec_bill_to_site_use_id      => ZX_TDS_RULE_BASE_DETM_PVT.g_cec_bill_to_site_use_id,
8404                           p_cec_result                   => l_cec_result,
8405                           p_action_rec_tbl               => l_action_rec_tbl,
8406                           p_return_status                => x_return_status,
8407                           p_error_buffer                 => l_error_buffer);
8408 
8409        for i in 1.. nvl(l_action_rec_tbl.last,0) loop
8410 
8411           IF (g_level_statement >= g_current_runtime_level ) THEN
8412             FND_LOG.STRING(g_level_statement,
8413                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8414                    'action code ' ||
8415                    l_action_rec_tbl(i).action_code);
8416 	   END IF;
8417            if upper(l_action_rec_tbl(i).action_code) in ('ERROR_MESSAGE','SYSTEM_ERROR') then
8418               x_return_status := FND_API.G_RET_STS_ERROR;
8419               IF (g_level_error >= g_current_runtime_level ) THEN
8420                 FND_LOG.STRING(g_level_error,
8421                                'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result',
8422                                'Action_code is ERROR_MESSAGE,SYSTEM_ERROR');
8423               END IF;
8424 
8425               app_exception.raise_exception;
8426            elsif upper(l_action_rec_tbl(i).action_code) in  ('DO_NOT_USE_THIS_TAX_CODE',
8427                                                             'DO_NOT_USE_THIS_TAX_GROUP') then
8428               l_cec_result := FALSE;
8429 
8430            elsif  upper(l_action_rec_tbl(i).action_code) in ('USE_THIS_TAX_CODE','USE_TAX_CODE',
8431                                                               'DEFAULT_TAX_CODE','DO_NOT_APPLY_EXCEPTION') then --Bug 5865988
8432               l_cec_result := TRUE;
8433 
8434 -- Bug 5730672
8435 
8436               IF upper(l_action_rec_tbl(i).action_code)= 'DEFAULT_TAX_CODE' THEN
8437                  BEGIN
8438                     SELECT DISTINCT rt.tax_status_code,
8439                                     rt.tax_rate_code,
8440                                     2
8441                       INTO l_status_result_tbl(j),
8442                            l_rate_result_tbl(j),
8443                            l_query_num_tbl(j)
8444                       FROM ZX_SCO_RATES_B_V rt
8445                      WHERE rt.tax_rate_code = l_action_rec_tbl(i).action_value
8446                        AND tax_regime_code = l_tax_regime_code_tbl(j)
8447                        AND tax = l_tax_tbl(j)
8448                        AND rt.effective_from <= p_tax_determine_date
8449                        AND (rt.effective_to  >= p_tax_determine_date
8450                            OR rt.effective_to IS NULL )
8451                        AND rt.Active_Flag = 'Y'
8452                        AND (rt.tax_class = l_tax_class or rt.tax_class IS NULL)
8453                        AND EXISTS (SELECT 1
8454                                      FROM ZX_SCO_TAXES_B_V tax
8455                                     WHERE tax.tax_regime_code = rt.tax_regime_code
8456                                       AND tax.tax = rt.tax
8457                                       AND tax.live_for_processing_flag = 'Y'
8458                                       AND tax.live_for_applicability_flag = 'Y');
8459                  EXCEPTION
8460                     WHEN OTHERS THEN
8461                        l_cec_result := FALSE;       -- Revisit
8462                  END;
8463               END IF;
8464 -- Bug 5730672
8465 
8466 /*
8467              if upper(l_action_rec_tbl(i).action_code)= 'USE_THIS_TAX_CODE' then
8468                  get_tsrm_num_value(p_structure_name,
8469                      p_structure_index,
8470                      'OUTPUT_TAX_CLASSIFICATION_CODE',
8471                      l_override_tax_rate_code,
8472                      p_return_status,
8473                      p_error_buffer);
8474              elsif upper(l_action_rec_tbl(i).action_code)in ('DEFAULT_TAX_CODE','USE_TAX_CODE') then
8475                   l_override_tax_rate_code := l_action_rec_tbl(i).action_value;
8476              end if;
8477 
8478              -- Get the Tax regime, Tax, Status, Rate Code based on override_tax_rate_code
8479              -- and set it on the result_rec.
8480 
8481                  Open select_tax_status_rate_code (p_tax_regime_code, p_tax, l_override_tax_rate_code,
8482                                                    p_tax_determine_date);
8483                  fetch select_tax_status_rate_code into l_tax_status_code, l_tax_rate_code;
8484 
8485                  If select_tax_status_rate_code%NOTFOUND then
8486                     --A record does not exist with that tax rate code for the given tax.
8487                     --Raise error;
8488 
8489                     p_return_status := FND_API.G_RET_STS_ERROR;
8490                     p_error_buffer  := SUBSTR(SQLERRM, 1, 80);
8491                     IF (g_level_error >= g_current_runtime_level ) THEN
8492                       FND_LOG.STRING(g_level_error,
8493                                      'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result',
8494                                       'Cannot set the tax rate code to '||l_override_tax_rate_code ||
8495                                       ', ERROR: '||p_error_buffer);
8496                     END IF;
8497                     IF select_tax_status_rate_code%isopen then
8498                          Close select_tax_status_rate_code;
8499                     END IF;
8500                     app_exception.raise_exception;
8501                  ELSE
8502                     p_zx_result_rec.rate_result := l_tax_rate_code;
8503                     p_zx_result_rec.status_result :=  l_tax_status_code;
8504                  End if;
8505 
8506                  Close select_tax_status_rate_code;
8507           */
8508            elsif upper(l_action_rec_tbl(i).action_code)= 'DO_NOT_APPLY_EXCEPTION' then
8509                  NULL;
8510            elsif upper(l_action_rec_tbl(i).action_code) = 'APPLY_EXCEPTION' then
8511                 -- populate the numeric result column of the result rec.
8512                 -- This rate will be used during Tax Rate Determination process
8513                 -- The Rate determination process will check if the rate is ad-hoc and
8514                 -- accordingly honour this rate or raise exception.
8515               l_cec_result := TRUE;
8516 	      --bug6604498
8517 	      l_exception_rate := to_number(l_action_rec_tbl(i).action_value);
8518 
8519 /*            this part also needs to be revisited.  How to use an exception rate.
8520                Begin
8521                 p_zx_result_rec.numeric_result := l_action_rec_tbl(i).action_value;
8522                exception
8523                 when others then
8524                     FND_MESSAGE.SET_NAME('ZX','GENERIC_MESSAGE');
8525                     FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','The action value for APPLY_EXCEPTION action code'||
8526                         'does not contain number');
8527                     FND_MSG_PUB.Add;
8528                     IF (g_level_error >= g_current_runtime_level ) THEN
8529                       FND_LOG.STRING(g_level_error,
8530                                      'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result',
8531                                      'The action value for APPLY_EXCEPTION action code '||
8532                                      'does not contain number');
8533                     END IF;
8534                     app_exception.raise_exception;
8535                end;
8536 */
8537            end if;
8538 	end loop;
8539           END IF; -- Not null conditions or exceptions
8540 
8541           -- Question: Should we check for l_action_rec_tbl? refer to get_result
8542           -- procedure in zxdirulenginpvtb.pls for this
8543 
8544           IF (l_cec_result OR
8545               (l_condition_set_tbl(j) IS NULL and l_exception_set_tbl(j) is NULL))
8546           THEN
8547 
8548             l_rate_exists_same_prod_family := TRUE;
8549 
8550             IF l_rate_result_tbl(j) IS NOT NULL
8551             -- nipatel need to check if rate exists in the same product family only
8552             -- if the record was fetched from the first query (i.e. based on rules)
8553             AND l_query_num_tbl(j) = 1 THEN
8554 
8555               -- Filter based on tax rate class
8556               -- Check if tax rate exists in the same product family group
8557               --
8558 
8559                   l_tbl_index := dbms_utility.get_hash_value(
8560                      l_tax_regime_code_tbl(j)||l_tax_tbl(j)||
8561                      l_status_result_tbl(j)||l_rate_result_tbl(j),
8562                      1,
8563                      8192);
8564 
8565 
8566                   IF  ZX_TDS_UTILITIES_PKG.g_tax_rate_info_ind_by_hash.exists(l_tbl_index)
8567                   THEN
8568                   -- cehck the product family from the cached structure
8569 
8570                      IF  ZX_TDS_UTILITIES_PKG.g_tax_rate_info_ind_by_hash(l_tbl_index).tax_class is NULL THEN
8571 
8572                            l_rate_exists_same_prod_family := TRUE;
8573 
8574                      ELSIF (ZX_TDS_UTILITIES_PKG.g_tax_rate_info_ind_by_hash(l_tbl_index).tax_class is NOT NULL
8575                      AND ZX_TDS_UTILITIES_PKG.g_tax_rate_info_ind_by_hash(l_tbl_index).tax_class = l_tax_class)
8576                      THEN
8577 
8578                             l_rate_exists_same_prod_family := TRUE;
8579 
8580                      ELSIF (ZX_TDS_UTILITIES_PKG.g_tax_rate_info_ind_by_hash(l_tbl_index).tax_class is NOT NULL
8581                      AND ZX_TDS_UTILITIES_PKG.g_tax_rate_info_ind_by_hash(l_tbl_index).tax_class <> l_tax_class)
8582                      THEN
8583 
8584                             l_rate_exists_same_prod_family := FALSE;
8585 
8586                      END IF;
8587                  END IF; -- ZX_TDS_UTILITIES_PKG.g_tax_rate_info_ind_by_hash.exists(l_tbl_index)
8588 
8589                  IF ( NOT ZX_TDS_UTILITIES_PKG.g_tax_rate_info_ind_by_hash.exists(l_tbl_index) )
8590                  OR  l_rate_exists_same_prod_family = FALSE THEN
8591                  -- check product family using cursor
8592 
8593                        OPEN  check_tax_rate_class_csr(
8594                                     l_tax_regime_code_tbl(j),
8595                                     l_tax_tbl(j),
8596                                     l_status_result_tbl(j),
8597                                     l_rate_result_tbl(j),
8598                                     l_tax_class,
8599                                     p_tax_determine_date);
8600                         FETCH check_tax_rate_class_csr INTO l_temp_num;
8601 
8602                         IF check_tax_rate_class_csr%NOTFOUND THEN
8603 
8604                           close check_tax_rate_class_csr;
8605                           l_rate_exists_same_prod_family := FALSE;
8606                           -- tax not applicable. goto the next record
8607                           --
8608                           IF (g_level_statement >= g_current_runtime_level ) THEN
8609                             FND_LOG.STRING(g_level_statement,
8610                                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8611                                    'Tax Rate does not exist in this product family group. ');
8612                           END IF;
8613                         ELSE
8614                           close check_tax_rate_class_csr;
8615                         END IF;
8616 
8617                  END IF; -- check product family using cursor
8618 
8619             END IF;  -- l_rate_result_tbl(j) IS NOT NULL
8620 
8621             -- Handle for candidate taxes got from direct rate rules without tax rate/status defined
8622             -- and taxes got from rates_b table with approperiate rate defined.
8623             IF l_rate_result_tbl(j) IS NULL OR
8624               (l_rate_result_tbl(j) IS NOT NULL AND l_rate_exists_same_prod_family)
8625             THEN
8626               -- validate and populate tax_id
8627               --
8628 
8629               -- Bug 5252411
8630 
8631              l_index := ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl.FIRST;
8632              l_tax_rec := NULL;
8633              WHILE l_index IS NOT NULL LOOP
8634 
8635                IF (l_tax_tbl(j) = ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_index).tax AND
8636                    l_tax_regime_code_tbl(j) = ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_index).tax_regime_code)
8637                THEN
8638                  IF (g_level_statement >= g_current_runtime_level ) THEN
8639                    FND_LOG.STRING(g_level_statement,
8640                                   'ZX.PLSQL.ZX_TDS_UTILITIES_PKG.get_tax_cache_info',
8641                                   'tax found in tax cache, at index '||
8642                                    to_char(l_index));
8643                  END IF;
8644 
8645                  IF  ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_index).effective_from <= p_tax_determine_date
8646                  AND (ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_index).effective_to >= p_tax_determine_date
8647                       OR ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_index).effective_to IS NULL)
8648                  THEN
8649                    l_tax_rec := ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_index);
8650 
8651                  END IF;
8652                  EXIT;
8653                END IF;  -- tax found in cache
8654 
8655                l_index := ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl.NEXT(l_index);
8656              END LOOP;
8657 
8658              -- tax not exists in the cache structure, retrieve tax info from table
8659              IF l_tax_rec.TAX IS NULL THEN
8660 
8661                   OPEN get_tax_info_csr(l_tax_regime_code_tbl(j),
8662                                         l_tax_tbl(j),
8663                                         p_tax_determine_date);
8664                   FETCH get_tax_info_csr into l_tax_rec;
8665                   CLOSE get_tax_info_csr;
8666 
8667                   -- bug fix 5579156: cache the tax detail info when tax found effective.
8668                   IF l_tax_rec.tax_id IS NOT NULL THEN
8669                     ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_rec.tax_id) := l_tax_rec;
8670                   END IF;
8671 
8672              END IF;
8673 
8674 
8675                IF l_tax_rec.TAX IS NOT NULL THEN -- Process tax only if it is enabled for processing
8676 
8677                  get_place_of_supply(
8678                     p_event_class_rec             => p_event_class_rec,
8679                     p_tax_regime_code             => l_tax_rec.tax_regime_code,
8680                     p_tax_id                      => l_tax_rec.tax_id,
8681                     p_tax                         => l_tax_rec.tax,
8682                     p_tax_determine_date          => p_tax_determine_date,
8683                     p_def_place_of_supply_type_cd => l_tax_rec.def_place_of_supply_type_code,
8684                     p_place_of_supply_rule_flag   => l_tax_rec.place_of_supply_rule_flag,
8685                     p_applicability_rule_flag     => l_tax_rec.applicability_rule_flag,
8686                     p_def_reg_type                => l_tax_rec.def_registr_party_type_code,
8687                     p_reg_rule_flg                => l_tax_rec.registration_type_rule_flag,
8688                     p_trx_line_index              => p_trx_line_index,
8689                     p_direct_rate_result_id       => l_result_id_tbl(j),
8690                     x_jurisdiction_rec            => l_jurisdiction_rec,
8691                     x_jurisdictions_found         => l_jurisdictions_found,
8692                     x_place_of_supply_type_code   => l_place_of_supply_type_code,
8693                     x_place_of_supply_result_id   => l_place_of_supply_result_id,
8694                     x_return_status               => x_return_status);
8695 
8696                  IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8697                    IF (g_level_statement >= g_current_runtime_level ) THEN
8698                      FND_LOG.STRING(g_level_statement,
8699                             'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8700                             'Incorrect return_status after calling ' ||
8701                             'ZX_TDS_APPLICABILITY_DETM_PKG.get_place_of_supply');
8702                    END IF;
8703 
8704                    -- For migrated taxes, if the has_other_jurisdictions_flag on the tax is 'N',
8705                    -- no jurisdiction required, so ignore the errors raised from get_place_of_supply
8706                    --
8707                    IF NVL(l_tax_rec.has_other_jurisdictions_flag, 'N') = 'N' AND
8708                      NVL(l_tax_rec.record_type_code, 'USER_DEFINED') = 'MIGRATED'
8709                    THEN
8710                      x_return_status := FND_API.G_RET_STS_SUCCESS;
8711                      IF (g_level_statement >= g_current_runtime_level ) THEN
8712                        FND_LOG.STRING(g_level_statement,
8713                               'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8714                               'For migrated taxes, if the has_other_jurisdictions_flag on ' ||
8715                               'the tax is N, no jurisdiction required. Continue processing tax... ');
8716                      END IF;
8717 
8718                    ELSE
8719                      IF (g_level_statement >= g_current_runtime_level ) THEN
8720                        FND_LOG.STRING(g_level_statement,
8721                               'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8722                               'Unable to determine the Place of Supply for tax: '||l_tax_rec.tax||
8723                               ' Place of Supply is mandatory when Direct Rate Determination is for l usocation based taxes');
8724                        FND_LOG.STRING(g_level_statement,
8725                               'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results.END',
8726                               'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(-)'||', RETURN_STATUS = ' || x_return_status);
8727                      END IF;
8728 
8729                      RETURN;
8730                    END IF;
8731                  END IF;
8732 
8733                  -- bug 5120930
8734                  IF (l_jurisdictions_found = 'Y' OR
8735                      NVL(l_tax_rec.has_other_jurisdictions_flag, 'N') = 'N') THEN
8736 
8737                     IF l_jurisdictions_found = 'Y'
8738                       AND l_jurisdiction_rec.tax_jurisdiction_code IS NULL
8739                     THEN
8740 
8741                       -- for multiple jurisdictions case: cache the most inner
8742                       -- and outer jurisdiction for future usage
8743 
8744                       OPEN c_get_jurisdiction_from_gt(l_tax_rec.tax_regime_code, l_tax_rec.tax);
8745                       FETCH c_get_jurisdiction_from_gt
8746                         BULK COLLECT INTO l_jurisdiction_rec_tbl;
8747                       CLOSE c_get_jurisdiction_from_gt;
8748 
8749                       IF l_jurisdiction_rec_tbl.COUNT = 0 THEN
8750 
8751                         IF (g_level_statement >= g_current_runtime_level ) THEN
8752                           FND_LOG.STRING(g_level_statement,
8753                                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8754                                'No data found in ZX_JURISDICTIONS_GT when multiple jurisdictions found.');
8755                         END IF;
8756                         RAISE NO_DATA_FOUND;
8757 
8758                       END IF;
8759                       -- cache the global most inner and outer jurisdiction code
8760                       l_jur_index := l_jurisdiction_rec_tbl.FIRST;
8761                       g_inner_jurisdiction_code
8762                          := l_jurisdiction_rec_tbl(l_jur_index).tax_jurisdiction_code;
8763                       g_inner_jurisdiction_id
8764                          := l_jurisdiction_rec_tbl(l_jur_index).tax_jurisdiction_id;
8765 
8766                       l_jur_index := l_jurisdiction_rec_tbl.LAST;
8767                       g_outer_jurisdiction_code
8768                          := l_jurisdiction_rec_tbl(l_jur_index).tax_jurisdiction_code;
8769                       g_outer_jurisdiction_id
8770                          := l_jurisdiction_rec_tbl(l_jur_index).tax_jurisdiction_id;
8771 
8772                       IF (g_level_statement >= g_current_runtime_level ) THEN
8773                         FND_LOG.STRING(g_level_statement,
8774                                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8775                                'g_inner_jurisdiction_code = '|| g_inner_jurisdiction_code||'g_outer_jurisdiction_code = '|| g_outer_jurisdiction_code);
8776 
8777                       END IF;
8778 
8779                     ELSIF l_jurisdictions_found = 'Y'
8780                       AND l_jurisdiction_rec.tax_jurisdiction_code IS NOT NULL
8781                     THEN
8782                       -- for single jurisdiction case: cache the most inner
8783                       -- and outer jurisdiction same as the jurisdiction found
8784                       -- for future usage
8785 
8786                       g_inner_jurisdiction_code
8787                          := l_jurisdiction_rec.tax_jurisdiction_code;
8788                       g_inner_jurisdiction_id
8789                          := l_jurisdiction_rec.tax_jurisdiction_id;
8790                       g_outer_jurisdiction_code
8791                          := l_jurisdiction_rec.tax_jurisdiction_code;
8792                       g_outer_jurisdiction_id
8793                          := l_jurisdiction_rec.tax_jurisdiction_id;
8794 
8795                       IF (g_level_statement >= g_current_runtime_level ) THEN
8796                         FND_LOG.STRING(g_level_statement,
8797                                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8798                                'g_inner_jurisdiction_code = '|| g_inner_jurisdiction_code|| 'g_outer_jurisdiction_code = '|| g_outer_jurisdiction_code);
8799 
8800                       END IF;
8801                     END IF;
8802 
8803                     l_tax_applicable := FALSE;
8804 
8805                     IF NVL(l_tax_rec.applicability_rule_flag, 'N') = 'N' THEN
8806                       -- for migrated taxes, if no additioncal applicability rule
8807                       -- defined, treate tax as applicable
8808 
8809                       l_tax_applicable := TRUE;
8810 
8811                     ELSE
8812                       -- call is_tax_applicable to determine additional tax applicability
8813                       --
8814                       l_tax_applicable := is_tax_applicable (
8815                             p_tax_id                  => l_tax_rec.tax_id,
8816                             p_tax_determine_date      => p_tax_determine_date,
8817                             p_applicability_rule_flag => l_tax_rec.applicability_rule_flag,
8818                             p_event_class_rec         => p_event_class_rec,
8819                             p_trx_line_index          => p_trx_line_index,
8820                             p_applicable_by_default_flag => l_tax_rec.applicable_by_default_flag,
8821                             x_applicability_result    => l_applicability_result,
8822                             x_applicability_result_id => l_applicability_result_id,
8823                             x_return_status           => x_return_status);
8824 
8825                       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8826                         IF (g_level_statement >= g_current_runtime_level ) THEN
8827                           FND_LOG.STRING(g_level_statement,
8828                                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
8829                                  'Incorrect return_status after calling ' ||
8830                                  'ZX_TDS_APPLICABILITY_DETM_PKG.is_tax_applicable');
8831                           FND_LOG.STRING(g_level_statement,
8832                                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes',
8833                                  'RETURN_STATUS = ' || x_return_status);
8834                           FND_LOG.STRING(g_level_statement,
8835                                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes.END',
8836                                  'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_taxes(-)');
8837                         END IF;
8838                         RETURN;
8839                       END IF;
8840                     END IF; --NVL(l_tax_rec.applicability_rule_flag, 'N') = 'N'
8841 
8842                  END IF;  -- l_jurisdictions_found ='Y' OR NVL(l_tax_rec.has_other_jurisdictions_flag, 'N') = 'N')
8843 
8844                  /* --bug 5385188
8845                  -- Since Direct Rate is applicable, POS is not mandatory. So ignore
8846                  -- the errors raised from get_place_of_supply
8847 
8848                  x_return_status := FND_API.G_RET_STS_SUCCESS;
8849                  */
8850 
8851                  IF l_tax_applicable THEN
8852                    -- build the new detail tax lines ONLY AFTER the tax is evaluated to be applicable.
8853                    l_begin_index := l_curr_rownum + 1;
8854                    l_rownum := l_rownum + 1;
8855 
8856                    -- validate and populate tax_regime_id
8857                    --
8858                    ZX_TDS_UTILITIES_PKG.get_regime_cache_info(
8859                                             l_tax_regime_code_tbl(j),
8860                                             p_tax_determine_date,
8861                                             l_tax_regime_rec,
8862                                             x_return_status,
8863                                             l_error_buffer);
8864 
8865                    IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
8866                      IF (g_level_statement >= g_current_runtime_level ) THEN
8867                        FND_LOG.STRING(g_level_statement,
8868                               'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8869                               'Incorrect return_status after calling ' ||
8870                               'ZX_TDS_UTILITIES_PKG.get_regime_cache_info');
8871                        FND_LOG.STRING(g_level_statement,
8872                               'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8873                               'RETURN_STATUS = ' || x_return_status);
8874                        FND_LOG.STRING(g_level_statement,
8875                               'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results.END',
8876                               'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(-)');
8877                      END IF;
8878                      RETURN;
8879                    END IF;
8880 
8881                    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
8882                                     l_rownum).tax_regime_id := l_tax_regime_rec.tax_regime_id;
8883 
8884                    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
8885                                               l_rownum).tax_id := l_tax_rec.tax_id;
8886 
8887                    -- bug 5077691: populate legal_reporting_status
8888                    IF p_event_class_rec.tax_reporting_flag = 'Y' THEN
8889                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
8890                         l_rownum).legal_reporting_status :=
8891                              ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
8892                                    l_tax_rec.tax_id).legal_reporting_status_def_val;
8893                    END IF;
8894 
8895                    IF l_jurisdictions_found = 'Y'
8896                      AND l_jurisdiction_rec.tax_jurisdiction_code IS NULL
8897                    THEN
8898 
8899                      -- Stamp multiple_jurisdiction_flag on the tax line to 'Y'
8900                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
8901                        l_rownum).multiple_jurisdictions_flag := 'Y';
8902 
8903                    END IF;
8904 
8905                    IF l_status_result_tbl(j) IS NOT NULL THEN
8906                      -- validate and populate tax_status_id
8907                      --
8908                      ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
8909                                               l_tax_tbl(j),
8910                                               l_tax_regime_code_tbl(j),
8911                                               l_status_result_tbl(j),
8912                                               p_tax_determine_date,
8913                                               l_tax_status_rec,
8914                                               x_return_status,
8915                                               l_error_buffer);
8916 
8917                      IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
8918                        IF (g_level_statement >= g_current_runtime_level ) THEN
8919                          FND_LOG.STRING(g_level_statement,
8920                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8921                                  'Incorrect return_status after calling ' ||
8922                                  'ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info');
8923                          FND_LOG.STRING(g_level_statement,
8924                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8925                                 'RETURN_STATUS = ' || x_return_status);
8926                          FND_LOG.STRING(g_level_statement,
8927                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results.END',
8928                                 'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(-)');
8929                        END IF;
8930                        RETURN;
8931                      END IF;
8932 
8933                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
8934                                          l_rownum).tax_status_id := l_tax_status_rec.tax_status_id;
8935 
8936                    END IF; --l_status_result_tbl(j) IS NOT NULL
8937 
8938                    IF l_rate_result_tbl(j) IS NOT NULL THEN
8939                      -- validate and populate tax_rate_id
8940                      --
8941 
8942                      -- bug 5475775:
8943 
8944                        IF l_jurisdiction_rec.tax_jurisdiction_code is NULL and
8945                           l_jurisdictions_found = 'Y' THEN
8946 
8947                           -- multiple jurisdictions situation
8948 
8949                           FOR i IN 1 .. nvl(l_jurisdiction_rec_tbl.count, 0) LOOP
8950 
8951                                ZX_TDS_UTILITIES_PKG.get_tax_rate_info(
8952                                            l_tax_regime_code_tbl(j),
8953                                            l_tax_tbl(j),
8954                                            l_jurisdiction_rec_tbl(i).tax_jurisdiction_code,
8955                                            l_status_result_tbl(j),
8956                                            l_rate_result_tbl(j),
8957                                            p_tax_determine_date,
8958                                            l_tax_class,
8959                                            l_tax_rate_rec,
8960                                            x_return_status,
8961                                            l_error_buffer);
8962 
8963                               IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
8964                                  l_tax_rate_rec.tax_rate_id is not NULL and
8965                                  l_tax_rate_rec.tax_jurisdiction_code = l_jurisdiction_rec_tbl(i).tax_jurisdiction_code
8966                               THEN
8967                                   -- A matching rate record is found. use this record for processing
8968                                   EXIT;
8969                               END IF;
8970 
8971                           END LOOP;
8972 
8973                        ELSE
8974 
8975                             -- Single Jurisdiction
8976 
8977                             ZX_TDS_UTILITIES_PKG.get_tax_rate_info(
8978                                            l_tax_regime_code_tbl(j),
8979                                            l_tax_tbl(j),
8980                                            l_jurisdiction_rec.tax_jurisdiction_code,
8981                                            l_status_result_tbl(j),
8982                                            l_rate_result_tbl(j),
8983                                            p_tax_determine_date,
8984                                            l_tax_class,
8985                                            l_tax_rate_rec,
8986                                            x_return_status,
8987                                            l_error_buffer);
8988                        END IF;
8989 
8990 
8991                      IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
8992                        IF (g_level_statement >= g_current_runtime_level ) THEN
8993                          FND_LOG.STRING(g_level_statement,
8994                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8995                                 'Incorrect return_status after calling ' ||
8996                                 'ZX_TDS_UTILITIES_PKG.get_tax_rate_info');
8997                          FND_LOG.STRING(g_level_statement,
8998                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
8999                                 'RETURN_STATUS = ' || x_return_status);
9000                          FND_LOG.STRING(g_level_statement,
9001                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results.END',
9002                                 'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(-)');
9003                        END IF;
9004                        RETURN;
9005                      END IF;
9006 
9007                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9008                                           l_rownum).tax_rate_id := l_tax_rate_rec.tax_rate_id;
9009 
9010                    END IF; --l_rate_result_tbl(j) IS NOT NULL
9011 
9012                      -- >> Update call
9013                      IF(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
9014                                                            p_trx_line_index)='UPDATE') THEN
9015 
9016                        handle_update_scenarios(p_trx_line_index,
9017                                                p_event_class_rec,
9018                                                l_rownum,
9019                                                l_tax_rec.tax_regime_code,
9020                                                l_tax_rec.tax,
9021                                                p_tax_date,
9022                                                p_tax_determine_date,
9023                                                p_tax_point_date,
9024                                                l_self_assessed_flag,
9025                                                l_tax_amt_included_flag,
9026                                                l_tax_jurisdiction_id,
9027                                                l_tax_jurisdiction_code,
9028                                                x_return_status);
9029 
9030                        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9031                          IF (g_level_statement >= g_current_runtime_level ) THEN
9032                             FND_LOG.STRING(g_level_statement,
9033                                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
9034                                    'Incorrect return_status after calling ' ||
9035                                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results');
9036                             FND_LOG.STRING(g_level_statement,
9037                                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
9038                                    'RETURN_STATUS = ' || x_return_status);
9039                             FND_LOG.STRING(g_level_statement,
9040                                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results.END',
9041                                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(-)');
9042                          END IF;
9043                          RETURN;
9044                        END IF;
9045                      END IF;
9046 
9047                      -- Populate the g_detail_tax_lines structure
9048                      --
9049                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9050                            l_rownum).application_id :=  p_event_class_rec.application_id;
9051                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9052                         l_rownum).event_class_code := p_event_class_rec.event_class_code;
9053                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9054                           l_rownum).event_type_code := p_event_class_rec.event_type_code;
9055                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9056                                   l_rownum).entity_code := p_event_class_rec.entity_code;
9057 
9058                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9059                                                         l_rownum).tax_date := p_tax_date;
9060 
9061                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9062                                     l_rownum).tax_determine_date := p_tax_determine_date;
9063 
9064                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9065                                            l_rownum).tax_point_date := p_tax_point_date;
9066 
9067                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9068                        l_rownum).place_of_supply_type_code := l_place_of_supply_type_code;
9069 
9070                      -- stamp trx_level_type and trx_line_id, since they are used for
9071                      -- tax line index checking.
9072                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9073                                   l_rownum).trx_level_type :=
9074                      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index);
9075 
9076                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9077                                   l_rownum).trx_line_id :=
9078                      ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index);
9079 
9080                      -- if orig_tax_jurisdiction_code(id) is not NULL (for UPDATE),
9081                      -- populate tax_jurisdiction_code and tax_jurisdiction_id fetched
9082                      -- from zx_lines. Otherwise, populate new tax_jurisdiction_code
9083                      -- and tax_jurisdiction_id from most inner jurisdiction info
9084                      --
9085                      IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9086                                         l_rownum).orig_tax_jurisdiction_code IS NOT NULL
9087                      THEN
9088                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9089                               l_rownum).tax_jurisdiction_code := l_tax_jurisdiction_code;
9090 
9091                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9092                                   l_rownum).tax_jurisdiction_id := l_tax_jurisdiction_id;
9093                      ELSE
9094                         -- bug 5120930
9095                         -- always stamp the most inner jurisdiction code on tax line
9096 
9097                         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9098                           l_rownum).tax_jurisdiction_code
9099                             := NVL(l_jurisdiction_rec.tax_jurisdiction_code,
9100                                  g_inner_jurisdiction_code);
9101 
9102                         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9103                           l_rownum).tax_jurisdiction_id
9104                             := NVL(l_jurisdiction_rec.tax_jurisdiction_id,
9105                                    g_inner_jurisdiction_id);
9106                      END IF;
9107 
9108                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9109                                   l_rownum).tax_regime_code := l_tax_rec.tax_regime_code;
9110                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9111                                                   l_rownum).tax := l_tax_rec.tax;
9112                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9113                               l_rownum).tax_currency_code := l_tax_rec.tax_currency_code;
9114                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9115                                       l_rownum).tax_type_code := l_tax_rec.tax_type_code;
9116                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9117                           l_rownum).tax_currency_conversion_date := p_tax_determine_date;
9118                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9119                                  l_rownum).tax_currency_conversion_type :=
9120                                                            l_tax_rec.exchange_rate_type;
9121                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9122                           l_rownum).reporting_only_flag := l_tax_rec.reporting_only_flag;
9123                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9124                                        l_rownum).place_of_supply_result_id :=
9125                                                             l_place_of_supply_result_id;
9126                      -- Populate direct_rate_rule_flag, as well as tax_status_code
9127                      -- and tax_rate_code if direct_rate is applicable.
9128                      --
9129                      IF NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9130                         l_rownum).last_manual_entry,'X') NOT IN ('TAX_RATE','TAX_AMOUNT')
9131                      THEN
9132                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9133                                    l_rownum).direct_rate_result_id := l_result_id_tbl(j);
9134                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9135                                      l_rownum).tax_status_code := l_status_result_tbl(j);
9136                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9137                                          l_rownum).tax_rate_code := l_rate_result_tbl(j);
9138                      END IF;
9139 
9140                      --bug6604498
9141                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9142                                          l_rownum).exception_rate := l_exception_rate;
9143 
9144                      -- populate rounding_lvl_party_tax_prof_id and rounding_level_code
9145                      --
9146                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9147                                     l_rownum).rounding_lvl_party_tax_prof_id :=
9148                                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_rnd_lvl_party_tax_prof_id;
9149 
9150                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9151                                              l_rownum).rounding_level_code :=
9152                                            ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_level;
9153 
9154                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9155                                          l_rownum).rounding_lvl_party_type :=
9156                                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_rounding_lvl_party_type;
9157 
9158                      -- populate hq_estb_party_tax_prof_id
9159                      --
9160                      ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9161                                     l_rownum).hq_estb_party_tax_prof_id :=
9162                        ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.hq_estb_party_tax_prof_id(
9163                                                                          p_trx_line_index);
9164 
9165                      -- populate tax registration info
9166                      --
9167                      populate_registration_info(
9168                            p_event_class_rec    => p_event_class_rec,
9169                            p_trx_line_index     => p_trx_line_index,
9170                            p_rownum                       => l_rownum,
9171                            p_def_reg_type       => l_tax_rec.def_registr_party_type_code,
9172                            p_reg_rule_flg       => l_tax_rec.registration_type_rule_flag,
9173                            p_tax_determine_date => p_tax_determine_date,
9174                            x_return_status      => x_return_status);
9175 
9176                      IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9177                        IF (g_level_statement >= g_current_runtime_level ) THEN
9178                          FND_LOG.STRING(g_level_statement,
9179                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
9180                                 'Incorrect return_status after calling ' ||
9181                                 'ZX_TDS_APPLICABILITY_DETM_PKG.populate_registration_info');
9182                          FND_LOG.STRING(g_level_statement,
9183                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
9184                                 'RETURN_STATUS = ' || x_return_status);
9185                          FND_LOG.STRING(g_level_statement,
9186                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results.END',
9187                                 'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(-)');
9188                        END IF;
9189                        RETURN;
9190                      END IF;
9191 
9192                      -- If orig_tax_amt_included_flag/orig_self_assessed_flag is not NULL
9193                      -- (for UPDATE), populate tax_amt_included_flag/self_assessed_flag
9194                      -- fetched from zx_lines. Otherwise, keep tax_amt_included_flag/
9195                      -- self_assessed_flag returned from get_tax_registration
9196                      --
9197                      IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9198                                 l_rownum).orig_tax_amt_included_flag IS NOT NULL THEN
9199                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9200                               l_rownum).tax_amt_included_flag := l_tax_amt_included_flag;
9201                      END IF;
9202 
9203                      IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9204                                      l_rownum).orig_self_assessed_flag IS NOT NULL THEN
9205                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9206                                     l_rownum).self_assessed_flag := l_self_assessed_flag;
9207                      END IF;
9208 
9209                      -- populate rounding_rule_code if it is null
9210                      --
9211                      IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9212                                             l_rownum).rounding_rule_code IS NULL THEN
9213                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9214                             l_rownum).rounding_rule_code := l_tax_rec.rounding_rule_code;
9215                      END IF;
9216 
9217                      -- If the value of p_event_class_rec.self_assess_tax_lines_flag
9218                      -- is 'N', populate self_assessed_flg to 'N'
9219                            --
9220                      IF NVL(p_event_class_rec.self_assess_tax_lines_flag, 'N') = 'N'
9221                      THEN
9222 
9223                          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9224                                                 l_rownum).self_assessed_flag := 'N';
9225                      END IF;
9226 
9227                      -- Bug 4277751: For intercompany transaction, detail tax lines from
9228                      -- addintional applicability process should be marked as
9229                      -- self assessed
9230                      --
9231           --
9232           -- Bug 5705976: Since, we stamp 'INTERCOMPANY_TRX' on both AR and AP
9233           -- transactions, the following code has become incorrect.
9234           --
9235           /*
9236                      IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(
9237                                          p_trx_line_index) IN ('CREATE', 'UPDATE') AND
9238                         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_event_class_code(
9239                                             p_trx_line_index) = 'INTERCOMPANY_TRX'
9240                      THEN
9241                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9242                                                    l_rownum).self_assessed_flag := 'Y';
9243                      END IF;
9244           */
9245                      -- Populate Regime and Regime detail table
9246                      --
9247 
9248                      --
9249                      -- Bug#5440023- do not poplate detail_tax_regime_tbl
9250                      -- for partner integration with 'LINE_INFO_TAX_ONLY' lines
9251                      --
9252                      IF NOT (NVL(ZX_GLOBAL_STRUCTURES_PKG.g_ptnr_srvc_subscr_flag, 'N')  = 'Y' AND
9253                              ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action (p_trx_line_index ) =  'LINE_INFO_TAX_ONLY' ) THEN
9254 
9255 
9256                       l_regimerownum :=
9257                          NVL(ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl.last, 0) + 1;
9258 
9259                        ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl(
9260                                       l_regimerownum).trx_line_index := p_trx_line_index;
9261                        ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl(
9262                           l_regimerownum).tax_regime_id:= l_tax_regime_rec.tax_regime_id;
9263                        ZX_GLOBAL_STRUCTURES_PKG.detail_tax_regime_tbl(
9264                                    l_regimerownum).tax_regime_precedence :=
9265                                                   l_tax_regime_rec.tax_regime_precedence;
9266 
9267                      END IF;
9268 
9269                      add_tax_regime (l_tax_regime_rec.tax_regime_precedence,
9270                                      l_tax_regime_rec.tax_regime_id,
9271                                      l_tax_regime_rec.tax_regime_code,
9272                                      l_tax_regime_rec.parent_regime_code,
9273                                      l_tax_regime_rec.country_code,
9274                                      l_tax_regime_rec.geography_type,
9275                                      l_tax_regime_rec.geography_id,
9276                                      l_tax_regime_rec.effective_from,
9277                                      l_tax_regime_rec.effective_to,
9278                                      x_return_status );
9279                      IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
9280                        IF (g_level_error >= g_current_runtime_level ) THEN
9281                          FND_LOG.STRING(g_level_error,
9282                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
9283                                 'Incorrect return_status after calling ' ||
9284                                 'ZX_TDS_APPLICABILITY_DETM_PKG.add_tax_regime');
9285                          FND_LOG.STRING(g_level_error,
9286                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes',
9287                                 'RETURN_STATUS = ' || x_return_status);
9288                          FND_LOG.STRING(g_level_error,
9289                                 'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes.END',
9290                                 'ZX_TDS_APPLICABILITY_DETM_PKG.get_applicable_regimes(-)');
9291                        END IF;
9292                        RETURN;
9293                      END IF;
9294                  END IF; -- l_tax_applicable
9295                END IF; -- l_tax_rec.TAX IS NOT NULL
9296             END IF; -- l_rate_result_tbl(j) IS NULL  OR
9297                     -- (l_rate_result_tbl(j) IS NOT NULL AND l_rate_exists_same_prod_family)
9298           END IF;     -- If condition is valid or NULL
9299         END IF;       -- IF condition for get_tax_index
9300 
9301         IF (x_begin_index is null) THEN
9302           x_begin_index := l_begin_index;
9303         END IF;
9304       END LOOP; -- End For loop
9305 
9306       EXIT WHEN get_candidate_taxes_csr%NOTFOUND;
9307 
9308     END LOOP; -- get_candidate_taxes_csr
9309     CLOSE get_candidate_taxes_csr;
9310   END IF; -- If constraint is VALID or NULL
9311 
9312   --IF (l_begin_index is NOT NULL) THEN
9313   IF (x_begin_index is NOT NULL) THEN
9314      x_end_index :=
9315         NVL( ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl.LAST, 0);
9316   END IF;
9317 
9318   -- If p_event_class_rec.enforce_tax_from_ref_doc_flag = 'Y' AND
9319   -- trx_line_dist_tbl.ref_doc_application_id(p_trx_line_index) IS NOT NULL,
9320   -- get tax rate code from refefence document
9321   --
9322   IF p_event_class_rec.enforce_tax_from_ref_doc_flag = 'Y' AND
9323     ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(
9324                                                p_trx_line_index) IS NOT NULL
9325   THEN
9326 
9327         enforce_tax_from_ref_doc(
9328                                   x_begin_index,
9329                                   x_end_index,
9330                                   p_trx_line_index,
9331                                   x_return_status);
9332   END IF;
9333 
9334   -- copy transaction info to new tax lines
9335 
9336   ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines (p_trx_line_index,
9337                                                      x_begin_index,
9338                                                      x_end_index,
9339                                                      x_return_status,
9340                                                      l_error_buffer );
9341 
9342   IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
9343      IF (g_level_statement >= g_current_runtime_level ) THEN
9344        FND_LOG.STRING(g_level_statement,
9345               'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
9346               'Incorrect RETURN_STATUS after calling '||
9347               'ZX_TDS_TAX_LINES_POPU_PKG.cp_tsrm_val_to_zx_lines');
9348        FND_LOG.STRING(g_level_statement,
9349               'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
9350               'RETURN_STATUS = ' || x_return_status);
9351        FND_LOG.STRING(g_level_statement,
9352               'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results.END',
9353               'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(-)');
9354      END IF;
9355     RETURN;
9356   END IF;
9357  END IF; -- line_level_action = 'CREATE', 'UPDATE', 'CREATE_TAX_ONLY'
9358 
9359  END IF;
9360  IF (g_level_procedure >= g_current_runtime_level ) THEN
9361     FND_LOG.STRING(g_level_procedure,
9362                    'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results.END',
9363                    'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(-)');
9364  END IF;
9365 
9366 
9367 EXCEPTION
9368   WHEN OTHERS THEN
9369     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9370     l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
9371     IF (g_level_unexpected >= g_current_runtime_level ) THEN
9372       FND_LOG.STRING(g_level_unexpected,
9373                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results',
9374                      l_error_buffer);
9375       FND_LOG.STRING(g_level_unexpected,
9376                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results.END',
9377                     'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(-)');
9378     END IF;
9379 END get_process_results;
9380 -- End: Bug 4959835
9381 
9382 /*Start:  Moved from get_applicable_taxes as part of restructuring for STCC */
9383 ----------------------------------------------------------------------
9384 --  PROCEDURE
9385 --   handle_update_scenarios
9386 --
9387 --  DESCRIPTION
9388 --
9389 --  This procedure populates the appropriate cache structures
9390 --  and key columns of g_detail_tax_lines_tbl when the
9391 --  transaction line level action is 'Update'
9392 --
9393 --  IN
9394 --               p_row_num
9395 --               p_tax_regime_code
9396 --               p_tax
9397 --               p_trx_line_index
9398 --               p_event_class_rec
9399 --               p_tax_date
9400 --               p_tax_determine_date
9401 --               p_tax_point_date
9402 --
9403 --  OUT NOCOPY   x_return_status
9404 --               x_self_assessed_flag
9405 --               x_tax_amt_included_flag
9406 --               x_tax_jurisdiction_id
9407 --               x_tax_jurisdiction_code
9408 --
9409 --  Key Columns:
9410 --               tax_line_id,
9411 --               last_manual_entry,
9412 --               tax_status_code,
9413 --               orig_tax_status_id,
9414 --               orig_tax_status_code,
9415 --               tax_rate_code,
9416 --               tax_rate,
9417 --               orig_tax_rate_id,
9418 --               orig_tax_rate_code,
9419 --               orig_tax_rate,
9420 --               tax_amt,
9421 --               orig_tax_amt,
9422 --               taxable_amt,
9423 --               orig_taxable_amt,
9424 --               line_amt,
9425 --               self_assessed_flag,
9426 --               tax_amt_included_flag,
9427 --               tax_jurisdiction_id,
9428 --               tax_jurisdiction_code,
9429 --               orig_self_assessed_flag,
9430 --               orig_tax_amt_included_flag,
9431 --               orig_tax_jurisdiction_id,
9432 --               orig_tax_jurisdiction_code,
9433 --               unrounded_taxable_amt,
9434 --               unrounded_tax_amt,
9435 --               cal_tax_amt,
9436 --               associated_child_frozen_flag
9437 --               cancel_flag
9438 ----------------------------------------------------------------------
9439 
9440 PROCEDURE handle_update_scenarios(
9441  p_trx_line_index     IN            BINARY_INTEGER,
9442  p_event_class_rec    IN            zx_api_pub.event_class_rec_type,
9443  p_row_num            IN            NUMBER,
9444  p_tax_regime_code    IN            zx_regimes_b.tax_regime_code%TYPE,
9445  p_tax                IN            zx_taxes_b.tax%TYPE,
9446  p_tax_date           IN            DATE,
9447  p_tax_determine_date IN            DATE,
9448  p_tax_point_date     IN            DATE,
9449  x_self_assessed_flag    OUT NOCOPY     zx_lines.self_assessed_flag%TYPE,
9450  x_tax_amt_included_flag OUT NOCOPY zx_lines.tax_amt_included_flag%TYPE,
9451  x_tax_jurisdiction_id   OUT NOCOPY zx_lines.tax_jurisdiction_id%TYPE,
9452  x_tax_jurisdiction_code OUT NOCOPY zx_lines.tax_jurisdiction_code%TYPE,
9453  x_return_status             OUT NOCOPY VARCHAR2) IS
9454 
9455  -- Local variables
9456   l_current_line_amt           zx_lines.line_amt%TYPE;
9457   l_tax_line_rec               zx_lines%ROWTYPE;
9458 
9459   l_tax_status_rec             ZX_TDS_UTILITIES_PKG.zx_status_info_rec;
9460   l_tax_rate_rec               ZX_TDS_UTILITIES_PKG.zx_rate_info_rec_type;
9461   l_error_buffer               VARCHAR2(200);
9462 
9463   l_tax_class                  zx_rates_b.tax_class%TYPE;
9464 
9465 
9466  CURSOR get_key_columns_cur IS
9467     SELECT * FROM zx_lines
9468      WHERE application_id = p_event_class_rec.application_id
9469        AND entity_code = p_event_class_rec.entity_code
9470        AND event_class_code = p_event_class_rec.event_class_code
9471        AND trx_id = p_event_class_rec.trx_id
9472        AND trx_line_id =
9473            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(p_trx_line_index)
9474        AND trx_level_type =
9475            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(p_trx_line_index)
9476        AND tax_regime_code = p_tax_regime_code
9477        AND tax = p_tax
9478        AND mrc_tax_line_flag = 'N'
9479        AND tax_apportionment_line_number > 0
9480        ORDER BY tax_apportionment_line_number;
9481 
9482 BEGIN
9483 
9484   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
9485 
9486   IF (g_level_procedure >= g_current_runtime_level ) THEN
9487     FND_LOG.STRING(g_level_procedure,
9488            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios.BEGIN',
9489            'ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios(+)');
9490   END IF;
9491 
9492   x_return_status := FND_API.G_RET_STS_SUCCESS;
9493 
9494   -- Bug#5417753- determine tax_class value
9495   IF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
9496     l_tax_class := 'OUTPUT';
9497   ELSIF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
9498     l_tax_class := 'INPUT';
9499   END IF;
9500 
9501   OPEN get_key_columns_cur;
9502 
9503   FETCH get_key_columns_cur INTO l_tax_line_rec;
9504 
9505 
9506   IF get_key_columns_cur%FOUND THEN
9507 
9508       x_self_assessed_flag := l_tax_line_rec.self_assessed_flag;
9509       x_tax_amt_included_flag := l_tax_line_rec.tax_amt_included_flag;
9510       x_tax_jurisdiction_id := l_tax_line_rec.tax_jurisdiction_id;
9511       x_tax_jurisdiction_code := l_tax_line_rec.tax_jurisdiction_code;
9512 
9513       IF l_tax_line_rec.cancel_flag = 'Y' THEN
9514         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(p_row_num) :=
9515                                                                 l_tax_line_rec;
9516         IF (g_level_procedure >= g_current_runtime_level ) THEN
9517           FND_LOG.STRING(g_level_procedure,
9518                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios.BEGIN',
9519                  'ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios(-)');
9520         END IF;
9521         RETURN;
9522       END IF;
9523 
9524       -- bug 6906427: 1. Retain tax_line_id and associated_child_frozen_flag
9525       --                 for tax only line, or associated_child_frozen_flag
9526       --                 is 'N'. When associated_child_frozen_flag is 'Y',
9527       --                 the tail end service will check if tax line id
9528       --                 needs to be retained
9529       --              2. Retain summary tax line id for tax only line
9530       --
9531       IF NVL(l_tax_line_rec.tax_only_line_flag, 'N') = 'Y' THEN
9532 
9533         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9534                            p_row_num).tax_line_id := l_tax_line_rec.tax_line_id;
9535         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9536                            p_row_num).associated_child_frozen_flag :=
9537                                       l_tax_line_rec.associated_child_frozen_flag;
9538         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9539              p_row_num).summary_tax_line_id := l_tax_line_rec.summary_tax_line_id;
9540 
9541       ELSIF NVL(l_tax_line_rec.associated_child_frozen_flag, 'N') = 'N' THEN
9542 
9543         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9544                            p_row_num).tax_line_id := l_tax_line_rec.tax_line_id;
9545         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9546                            p_row_num).associated_child_frozen_flag :=
9547                                       l_tax_line_rec.associated_child_frozen_flag;
9548 
9549       END IF;
9550 
9551       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9552                            p_row_num).orig_self_assessed_flag :=
9553                                          l_tax_line_rec.orig_self_assessed_flag;
9554       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9555                            p_row_num).orig_tax_amt_included_flag :=
9556                                       l_tax_line_rec.orig_tax_amt_included_flag;
9557       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9558                            p_row_num).orig_tax_jurisdiction_id :=
9559                                         l_tax_line_rec.orig_tax_jurisdiction_id;
9560       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9561                            p_row_num).orig_tax_jurisdiction_code :=
9562                                       l_tax_line_rec.orig_tax_jurisdiction_code;
9563 
9564       -- bug 5633271
9565       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9566                    p_row_num).overridden_flag := l_tax_line_rec.overridden_flag;
9567 
9568       --Bug7339485
9569        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9570                    p_row_num).TAX_RATE_TYPE := l_tax_line_rec.tax_rate_type;
9571 
9572        IF (g_level_procedure >= g_current_runtime_level ) THEN
9573           FND_LOG.STRING(g_level_procedure,
9574                  'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9575                  'Value for TAX_RATE_TYPE '||ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9576                    p_row_num).TAX_RATE_TYPE);
9577        END IF;
9578 
9579 
9580 
9581       -- bug 5684123: 1. Set g_overridden_tax_ln_exist_flg
9582       --              2. Prorate orig_tax_amt_tax_curr for P2P
9583       --
9584       IF NVL(l_tax_line_rec.overridden_flag, 'N') = 'Y' THEN
9585 
9586         ZX_TDS_CALC_SERVICES_PUB_PKG.g_overridden_tax_ln_exist_flg := 'Y';
9587 
9588 
9589 
9590         IF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
9591           l_current_line_amt :=
9592             ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(p_trx_line_index);
9593 
9594           IF l_tax_line_rec.line_amt <> 0 AND
9595              l_tax_line_rec.line_amt <> l_current_line_amt THEN
9596 
9597             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9598                         p_row_num).orig_tax_amt_tax_curr :=
9599                                    l_tax_line_rec.orig_tax_amt_tax_curr *
9600                                      l_current_line_amt/l_tax_line_rec.line_amt;
9601 
9602             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9603                         p_row_num).orig_taxable_amt_tax_curr :=
9604                                    l_tax_line_rec.orig_taxable_amt_tax_curr *
9605                                      l_current_line_amt/l_tax_line_rec.line_amt;
9606           ELSE      /* Bug 5684123 */
9607             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9608                       p_row_num).orig_tax_amt_tax_curr :=
9609                                            l_tax_line_rec.orig_tax_amt_tax_curr;
9610             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9611                       p_row_num).orig_taxable_amt_tax_curr :=
9612                                        l_tax_line_rec.orig_taxable_amt_tax_curr;
9613           END IF;
9614         ELSE
9615           -- bug 5636132
9616           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9617                       p_row_num).orig_tax_amt_tax_curr :=
9618                                            l_tax_line_rec.orig_tax_amt_tax_curr;
9619           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9620                       p_row_num).orig_taxable_amt_tax_curr :=
9621                                        l_tax_line_rec.orig_taxable_amt_tax_curr;
9622         END IF;    -- p_event_class_rec.prod_family_grp_code = 'P2P'
9623       END IF;      -- overridden_flag = 'Y'
9624 
9625               IF l_tax_line_rec.last_manual_entry = 'STATUSTORATE' THEN
9626 
9627                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9628                             p_row_num).last_manual_entry := 'TAX_STATUS';
9629                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9630                           p_row_num).tax_status_code := l_tax_line_rec.tax_status_code;
9631                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9632                   p_row_num).orig_tax_status_code:=l_tax_line_rec.orig_tax_status_code;
9633                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9634                     p_row_num).orig_tax_status_id := l_tax_line_rec.orig_tax_status_id;
9635 
9636                 -- populate tax_status_id
9637                 --
9638                 ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
9639                                 p_tax,
9640                                 p_tax_regime_code,
9641                                 l_tax_line_rec.tax_status_code,
9642                                 p_tax_determine_date,
9643                                 l_tax_status_rec,
9644                                 x_return_status,
9645                                 l_error_buffer);
9646 
9647                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9648                   IF (g_level_error >= g_current_runtime_level ) THEN
9649                     FND_LOG.STRING(g_level_error,
9650                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9651                            'Incorrect return_status after calling '||
9652                            'ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info.');
9653                     FND_LOG.STRING(g_level_error,
9654                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9655                            'RETURN_STATUS = ' || x_return_status);
9656                     FND_LOG.STRING(g_level_error,
9657                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios.END',
9658                            'ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios(-)');
9659                   END IF;
9660                   CLOSE get_key_columns_cur;
9661                   RETURN;
9662                 END IF;
9663 
9664                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9665                               p_row_num).tax_status_id :=
9666                                               l_tax_status_rec.tax_status_id;
9667 
9668               ELSIF l_tax_line_rec.last_manual_entry = 'TAX_RATE_CODE' THEN
9669 
9670                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9671                           p_row_num).last_manual_entry := 'TAX_RATE_CODE';
9672                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9673                           p_row_num).tax_status_code := l_tax_line_rec.tax_status_code;
9674                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9675                   p_row_num).orig_tax_status_code:=l_tax_line_rec.orig_tax_status_code;
9676                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9677                     p_row_num).orig_tax_status_id := l_tax_line_rec.orig_tax_status_id;
9678                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9679                               p_row_num).tax_rate_code := l_tax_line_rec.tax_rate_code;
9680                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9681                     p_row_num).orig_tax_rate_code := l_tax_line_rec.orig_tax_rate_code;
9682                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9683                         p_row_num).orig_tax_rate_id := l_tax_line_rec.orig_tax_rate_id;
9684                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9685                               p_row_num).orig_tax_rate := l_tax_line_rec.orig_tax_rate;
9686 
9687                 -- populate tax_status_id
9688                 --
9689                 ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
9690                                 p_tax,
9691                                 p_tax_regime_code,
9692                                 l_tax_line_rec.tax_status_code,
9693                                 p_tax_determine_date,
9694                                 l_tax_status_rec,
9695                                 x_return_status,
9696                                 l_error_buffer);
9697 
9698                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9699                   IF (g_level_error >= g_current_runtime_level ) THEN
9700                     FND_LOG.STRING(g_level_error,
9701                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9702                            'Incorrect return_status after calling '||
9703                            'ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info.');
9704                     FND_LOG.STRING(g_level_error,
9705                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9706                            'RETURN_STATUS = ' || x_return_status);
9707                     FND_LOG.STRING(g_level_error,
9708                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios.END',
9709                            'ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios(-)');
9710                   END IF;
9711                   CLOSE get_key_columns_cur;
9712                   RETURN;
9713                 END IF;
9714 
9715                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9716                                        p_row_num).tax_status_id :=
9717                                               l_tax_status_rec.tax_status_id;
9718 
9719                 -- validate and populate tax_rate_id
9720                 --
9721                 ZX_TDS_UTILITIES_PKG.get_tax_rate_info(
9722                                                 p_tax_regime_code,
9723                                 p_tax,
9724                                 x_tax_jurisdiction_code,
9725                                 l_tax_line_rec.tax_status_code,
9726                                 l_tax_line_rec.tax_rate_code,
9727                                                 p_tax_determine_date,
9728                                                 l_tax_class,
9729                                                 l_tax_rate_rec,
9730                                                 x_return_status,
9731                                                 l_error_buffer);
9732 
9733                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9734                   IF (g_level_error >= g_current_runtime_level ) THEN
9735                     FND_LOG.STRING(g_level_error,
9736                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9737                            'Incorrect return_status after calling '||
9738                            'ZX_TDS_UTILITIES_PKG.get_tax_rate_info.');
9739                     FND_LOG.STRING(g_level_error,
9740                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9741                            'RETURN_STATUS = ' || x_return_status);
9742                     FND_LOG.STRING(g_level_error,
9743                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios.END',
9744                            'ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios(-)');
9745                   END IF;
9746                   CLOSE get_key_columns_cur;
9747                   RETURN;
9748                 END IF;
9749 
9750                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9751                    p_row_num).tax_rate_id := l_tax_rate_rec.tax_rate_id;
9752 
9753               ELSIF l_tax_line_rec.last_manual_entry = 'TAX_RATE' THEN
9754 
9755                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9756                           p_row_num).last_manual_entry := 'TAX_RATE';
9757                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9758                           p_row_num).tax_status_code := l_tax_line_rec.tax_status_code;
9759                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9760                   p_row_num).orig_tax_status_code:=l_tax_line_rec.orig_tax_status_code;
9761                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9762                     p_row_num).orig_tax_status_id := l_tax_line_rec.orig_tax_status_id;
9763                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9764                               p_row_num).tax_rate_code := l_tax_line_rec.tax_rate_code;
9765                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9766                                         p_row_num).tax_rate := l_tax_line_rec.tax_rate;
9767                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9768                     p_row_num).orig_tax_rate_code := l_tax_line_rec.orig_tax_rate_code;
9769                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9770                         p_row_num).orig_tax_rate_id := l_tax_line_rec.orig_tax_rate_id;
9771                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9772                               p_row_num).orig_tax_rate := l_tax_line_rec.orig_tax_rate;
9773 
9774                 -- populate tax_status_id
9775                 --
9776                 ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
9777                                                         p_tax,
9778                                                         p_tax_regime_code,
9779                                                         l_tax_line_rec.tax_status_code,
9780                                                         p_tax_determine_date,
9781                                                         l_tax_status_rec,
9782                                                         x_return_status,
9783                                                         l_error_buffer);
9784 
9785                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9786                   IF (g_level_error >= g_current_runtime_level ) THEN
9787                     FND_LOG.STRING(g_level_error,
9788                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9789                            'Incorrect return_status after calling '||
9790                            'ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info.');
9791                     FND_LOG.STRING(g_level_error,
9792                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9793                            'RETURN_STATUS = ' || x_return_status);
9794                     FND_LOG.STRING(g_level_error,
9795                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios.END',
9796                            'ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios(-)');
9797                   END IF;
9798                   CLOSE get_key_columns_cur;
9799                   RETURN;
9800                 END IF;
9801 
9802                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9803                                        p_row_num).tax_status_id :=
9804                                               l_tax_status_rec.tax_status_id;
9805 
9806                 -- validate and populate tax_rate_id
9807                 --
9808                 ZX_TDS_UTILITIES_PKG.get_tax_rate_info(
9809                                 p_tax_regime_code,
9810                                 p_tax,
9811                                 x_tax_jurisdiction_code,
9812                                 l_tax_line_rec.tax_status_code,
9813                                 l_tax_line_rec.tax_rate_code,
9814                                 p_tax_determine_date,
9815                                 l_tax_class,
9816                                 l_tax_rate_rec,
9817                                 x_return_status,
9818                                 l_error_buffer);
9819 
9820                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9821                   IF (g_level_error >= g_current_runtime_level ) THEN
9822                     FND_LOG.STRING(g_level_error,
9823                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9824                            'Incorrect return_status after calling '||
9825                            'ZX_TDS_UTILITIES_PKG.get_tax_rate_info.');
9826                     FND_LOG.STRING(g_level_error,
9827                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9828                            'RETURN_STATUS = ' || x_return_status);
9829                     FND_LOG.STRING(g_level_error,
9830                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios.END',
9831                            'ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios(-)');
9832                   END IF;
9833                   CLOSE get_key_columns_cur;
9834                   RETURN;
9835                 END IF;
9836 
9837                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9838                    p_row_num).tax_rate_id := l_tax_rate_rec.tax_rate_id;
9839 
9840               ELSIF l_tax_line_rec.last_manual_entry = 'TAX_AMOUNT' THEN
9841 
9842                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9843                           p_row_num).last_manual_entry := 'TAX_AMOUNT';
9844                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9845                           p_row_num).tax_status_code := l_tax_line_rec.tax_status_code;
9846                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9847                  p_row_num).orig_tax_status_code :=l_tax_line_rec.orig_tax_status_code;
9848                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9849                     p_row_num).orig_tax_status_id := l_tax_line_rec.orig_tax_status_id;
9850                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9851                               p_row_num).tax_rate_code := l_tax_line_rec.tax_rate_code;
9852                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9853                                         p_row_num).tax_rate := l_tax_line_rec.tax_rate;
9854                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9855                     p_row_num).orig_tax_rate_code := l_tax_line_rec.orig_tax_rate_code;
9856                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9857                         p_row_num).orig_tax_rate_id := l_tax_line_rec.orig_tax_rate_id;
9858                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9859                               p_row_num).orig_tax_rate := l_tax_line_rec.orig_tax_rate;
9860                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9861                                 p_row_num).orig_tax_amt := l_tax_line_rec.orig_tax_amt;
9862                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9863                         p_row_num).orig_taxable_amt := l_tax_line_rec.orig_taxable_amt;
9864 
9865                 -- bug 5684123: move to the top.-- bug 5636132,
9866                 -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9867                 --        p_row_num).orig_tax_amt_tax_curr :=
9868                 --                                 l_tax_line_rec.orig_tax_amt_tax_curr;
9869                 -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9870                 --        p_row_num).orig_taxable_amt_tax_curr :=
9871                 --                             l_tax_line_rec.orig_taxable_amt_tax_curr;
9872 
9873 
9874 
9875                 -- bug 5633271
9876                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9877                                 p_row_num).tax_calculation_formula :=
9878                                                 l_tax_line_rec.tax_calculation_formula;
9879                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9880                                 p_row_num).taxable_basis_formula :=
9881                                                   l_tax_line_rec.taxable_basis_formula;
9882 
9883                 -- populate tax_status_id
9884                 --
9885                 ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
9886                                 p_tax,
9887                                 p_tax_regime_code,
9888                                 l_tax_line_rec.tax_status_code,
9889                                 p_tax_determine_date,
9890                                 l_tax_status_rec,
9891                                 x_return_status,
9892                                 l_error_buffer);
9893 
9894                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9895                   IF (g_level_error >= g_current_runtime_level ) THEN
9896                     FND_LOG.STRING(g_level_error,
9897                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9898                            'Incorrect return_status after calling '||
9899                            'ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info.');
9900                     FND_LOG.STRING(g_level_error,
9901                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9902                            'RETURN_STATUS = ' || x_return_status);
9903                     FND_LOG.STRING(g_level_error,
9904                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios.END',
9905                            'ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios(-)');
9906                   END IF;
9907                   CLOSE get_key_columns_cur;
9908                   RETURN;
9909                 END IF;
9910 
9911                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9912                               p_row_num).tax_status_id :=
9913                                               l_tax_status_rec.tax_status_id;
9914 
9915                 -- validate and populate tax_rate_id
9916                 --
9917                 ZX_TDS_UTILITIES_PKG.get_tax_rate_info(
9918                                 p_tax_regime_code,
9919                                 p_tax,
9920                                 x_tax_jurisdiction_code,
9921                                 l_tax_line_rec.tax_status_code,
9922                                 l_tax_line_rec.tax_rate_code,
9923                                 p_tax_determine_date,
9924                                 l_tax_class,
9925                                 l_tax_rate_rec,
9926                                 x_return_status,
9927                                 l_error_buffer);
9928 
9929                 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9930                   IF (g_level_error >= g_current_runtime_level ) THEN
9931                     FND_LOG.STRING(g_level_error,
9932                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9933                            'Incorrect return_status after calling '||
9934                            'ZX_TDS_UTILITIES_PKG.get_tax_rate_info.');
9935                     FND_LOG.STRING(g_level_error,
9936                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9937                            'RETURN_STATUS = ' || x_return_status);
9938                     FND_LOG.STRING(g_level_error,
9939                            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios.END',
9940                            'ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios(-)');
9941                   END IF;
9942                   CLOSE get_key_columns_cur;
9943                   RETURN;
9944                 END IF;
9945 
9946                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9947                     p_row_num).tax_rate_id := l_tax_rate_rec.tax_rate_id;
9948 
9949                 -- prorate tax amount and taxable amount
9950                 --
9951                 l_current_line_amt :=
9952                    ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt(
9953                                                              p_trx_line_index);
9954 
9955                 IF l_tax_line_rec.line_amt <> 0 THEN
9956                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9957                      p_row_num).unrounded_tax_amt :=
9958                            l_tax_line_rec.unrounded_tax_amt*l_current_line_amt/l_tax_line_rec.line_amt;
9959                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9960                      p_row_num).unrounded_taxable_amt :=
9961                        l_tax_line_rec.unrounded_taxable_amt*l_current_line_amt/l_tax_line_rec.line_amt;
9962 
9963                   -- set tax_amt to NULL
9964                   --
9965                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9966                                                p_row_num).tax_amt := NULL;
9967 
9968                 ELSE
9969                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9970                       p_row_num).unrounded_tax_amt := l_tax_line_rec.unrounded_tax_amt;
9971                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9972                        p_row_num).unrounded_taxable_amt
9973                                                    := l_tax_line_rec.unrounded_taxable_amt;
9974                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9975                                 p_row_num).tax_amt := l_tax_line_rec.tax_amt;
9976                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9977                         p_row_num).taxable_amt := l_tax_line_rec.taxable_amt;
9978                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9979                         p_row_num).cal_tax_amt := l_tax_line_rec.cal_tax_amt;
9980 
9981                 END IF;
9982 
9983               END IF;
9984 
9985             ELSIF get_key_columns_cur%NOTFOUND THEN
9986               /*
9987                * will be populated by pop_tax_line_for_trx_line
9988                * SELECT zx_lines_s.NEXTVAL
9989                *  INTO ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
9990                *                                    p_row_num).tax_line_id
9991                * FROM dual;
9992                */
9993 
9994               IF (g_level_statement >= g_current_runtime_level ) THEN
9995                 FND_LOG.STRING(g_level_statement,
9996                        'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
9997                        'get_key_columns_cur NOTFOUND..');
9998               END IF;
9999 
10000               NULL;
10001             END IF;
10002 
10003   CLOSE get_key_columns_cur;
10004 
10005   IF (g_level_procedure >= g_current_runtime_level ) THEN
10006     FND_LOG.STRING(g_level_procedure,
10007            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios.BEGIN',
10008            'ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios(-)');
10009   END IF;
10010 
10011 EXCEPTION
10012   WHEN OTHERS THEN
10013     CLOSE get_key_columns_cur;
10014     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10015     l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
10016     IF (g_level_unexpected >= g_current_runtime_level ) THEN
10017       FND_LOG.STRING(g_level_unexpected,
10018                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios',
10019                      l_error_buffer);
10020       FND_LOG.STRING(g_level_unexpected,
10021                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios.END',
10022                     'ZX_TDS_APPLICABILITY_DETM_PKG.handle_update_scenarios(-)');
10023     END IF;
10024 END handle_update_scenarios;
10025 
10026 /*Start:  Moved from get_applicable_taxes as part of restructuring for STCC */
10027 ----------------------------------------------------------------------
10028 --  PROCEDURE
10029 --   enforce_tax_from_ref_doc
10030 --
10031 --  DESCRIPTION
10032 --
10033 --  This procedure obtains the tax details from reference
10034 --  docs and populates g_detail_tax_lines_tbl.
10035 --
10036 --
10037 --  IN
10038 --              p_begin_index
10039 --                      p_end_index
10040 --                  p_trx_line_index
10041 --
10042 --  OUT NOCOPY     x_return_status
10043 --
10044 
10045 PROCEDURE enforce_tax_from_ref_doc(
10046   p_begin_index     IN            BINARY_INTEGER,
10047   p_end_index       IN            BINARY_INTEGER,
10048   p_trx_line_index  IN            BINARY_INTEGER,
10049   x_return_status          OUT NOCOPY VARCHAR2) IS
10050 
10051  -- Local variables
10052  i                              NUMBER;
10053  l_tax_status_rec             ZX_TDS_UTILITIES_PKG.zx_status_info_rec;
10054  l_error_buffer                 VARCHAR2(200);
10055 
10056  -- Cursor definitions
10057  CURSOR  enforce_rate_code_from_ref_doc(
10058                 c_tax                 zx_lines.tax%TYPE,
10059                 c_tax_regime_code     zx_lines.tax_regime_code%TYPE) IS
10060  SELECT tax_status_code,
10061         tax_rate_code,
10062         line_amt,
10063         tax_amt,
10064         taxable_amt,
10065    -- nipatel bug 6648042
10066         tax_apportionment_line_number
10067    -- nipatel bug 6648042
10068    FROM zx_lines
10069   WHERE application_id =
10070         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(p_trx_line_index)
10071     AND event_class_code =
10072         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_event_class_code(p_trx_line_index)
10073     AND entity_code =
10074         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_entity_code(p_trx_line_index)
10075     AND trx_id =
10076         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_trx_id(p_trx_line_index)
10077     AND trx_line_id =
10078         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_line_id(p_trx_line_index)
10079     AND trx_level_type =
10080         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_trx_level_type(p_trx_line_index)
10081     AND tax_regime_code = c_tax_regime_code
10082     AND tax = c_tax
10083     AND cancel_flag <> 'Y'
10084     AND mrc_tax_line_flag = 'N';
10085 
10086 BEGIN
10087 
10088   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
10089 
10090   IF (g_level_procedure >= g_current_runtime_level ) THEN
10091     FND_LOG.STRING(g_level_procedure,
10092            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc.BEGIN',
10093            'ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc(+)');
10094   END IF;
10095 
10096   x_return_status := FND_API.G_RET_STS_SUCCESS;
10097 
10098   FOR i IN NVL(p_begin_index, 1) .. NVL(p_end_index, 0) LOOP
10099 
10100         OPEN enforce_rate_code_from_ref_doc(
10101           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax,
10102           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_regime_code);
10103 
10104         FETCH enforce_rate_code_from_ref_doc INTO
10105           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_status_code,
10106           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_code,
10107           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
10108                                                            i).other_doc_line_amt,
10109           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
10110                                                        i).other_doc_line_tax_amt,
10111           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
10112                                                    i).other_doc_line_taxable_amt,
10113           -- nipatel bug 6648042
10114           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
10115                                                    i).tax_apportionment_line_number;
10116           -- nipatel bug 6648042
10117 
10118         IF enforce_rate_code_from_ref_doc%FOUND THEN
10119 
10120           -- populate copied_from_other_doc_flag and other_doc_source
10121           --
10122           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
10123                                          i).copied_from_other_doc_flag := 'Y';
10124           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
10125                                            i).other_doc_source := 'REFERENCE';
10126 
10127           -- bugfix 5176149:populate tax_status_id
10128           --
10129           ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
10130                                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax,
10131                                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_regime_code,
10132                                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_status_code,
10133                                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_determine_date,
10134                                        l_tax_status_rec,
10135                                        x_return_status,
10136                                        l_error_buffer);
10137 
10138           IF x_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
10139                 IF (g_level_statement >= g_current_runtime_level ) THEN
10140                   FND_LOG.STRING(g_level_statement,
10141                          'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc',
10142                           'Incorrect return_status after calling ' ||
10143                           'ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info');
10144                   FND_LOG.STRING(g_level_statement,
10145                          'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc',
10146                          'RETURN_STATUS = ' || x_return_status);
10147                   FND_LOG.STRING(g_level_statement,
10148                          'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc.END',
10149                          'ZX_TDS_APPLICABILITY_DETM_PKG.get_process_results(-)');
10150                 END IF;
10151                 RETURN;
10152           END IF;
10153 
10154           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
10155                                   i).tax_status_id := l_tax_status_rec.tax_status_id;
10156 
10157         ELSE
10158           IF g_level_statement >= g_current_runtime_level THEN
10159             FND_LOG.STRING(g_level_statement,
10160                'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc',
10161                'enforce_tax_from_ref_doc_flag is turned on, but tax status'||
10162                'code and tax rate code are not available from reference doc.');
10163           END IF;
10164         END IF;
10165 
10166    CLOSE enforce_rate_code_from_ref_doc;
10167 
10168 
10169   END LOOP;  -- i IN NVL(x_begin_index, -1) .. NVL(x_end_index, 0)
10170 
10171   IF (g_level_procedure >= g_current_runtime_level ) THEN
10172     FND_LOG.STRING(g_level_procedure,
10173            'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc.BEGIN',
10174            'ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc(-)');
10175   END IF;
10176 
10177 EXCEPTION
10178   WHEN NO_DATA_FOUND THEN
10179     x_return_status := FND_API.G_RET_STS_ERROR;
10180     l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
10181     IF (g_level_error >= g_current_runtime_level ) THEN
10182       FND_LOG.STRING(g_level_error,
10183                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc',
10184                      l_error_buffer);
10185       FND_LOG.STRING(g_level_error,
10186                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc.END',
10187                     'ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc(-)');
10188     END IF;
10189 
10190   WHEN OTHERS THEN
10191     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10192     l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
10193     IF (g_level_unexpected >= g_current_runtime_level ) THEN
10194       FND_LOG.STRING(g_level_unexpected,
10195                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc',
10196                      l_error_buffer);
10197       FND_LOG.STRING(g_level_unexpected,
10198                     'ZX.PLSQL.ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc.END',
10199                     'ZX_TDS_APPLICABILITY_DETM_PKG.enforce_tax_from_ref_doc(-)');
10200     END IF;
10201 END enforce_tax_from_ref_doc;
10202 
10203 END ZX_TDS_APPLICABILITY_DETM_PKG;
10204