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