DBA Data[Home] [Help]

PACKAGE BODY: APPS.ZX_TDS_TAXABLE_BASIS_DETM_PKG

Source


1 PACKAGE BODY ZX_TDS_TAXABLE_BASIS_DETM_PKG AS
2 /* $Header: zxditxbsisdtpkgb.pls 120.80.12010000.3 2008/11/26 02:07:28 tsen ship $ */
3 
4 g_current_runtime_level      NUMBER;
5 g_level_statement            CONSTANT  NUMBER   := FND_LOG.LEVEL_STATEMENT;
6 g_level_procedure            CONSTANT  NUMBER   := FND_LOG.LEVEL_PROCEDURE;
7 g_level_unexpected           CONSTANT  NUMBER   := FND_LOG.LEVEL_UNEXPECTED;
8 g_level_error                CONSTANT  NUMBER   := FND_LOG.LEVEL_ERROR;
9 
10 PROCEDURE populate_inclusive_tax_flag (
11     p_tax_line_index    IN         NUMBER,
12     p_event_class_rec   IN         ZX_API_PUB.event_class_rec_type,
13     p_structure_name    IN         VARCHAR2,
14     p_structure_index   IN         BINARY_INTEGER,
15     p_return_status     OUT NOCOPY VARCHAR2,
16     p_error_buffer      OUT NOCOPY VARCHAR2);
17 
18 
19 ------------------------------------------------------------------------------
20 --  PUBLIC PROCEDURE
21 --   get_taxable_basis
22 --
23 --  DESCRIPTION
24 --   This is the main procedure in this package.
25 --   This procedure is used to calculate taxable basis for for all tax lines
26 --   belonging to a transaction line (indicated by p_begin_index and p_end_index)
27 ------------------------------------------------------------------------------
28 
29 PROCEDURE Get_taxable_basis (
30             p_begin_index          IN       NUMBER,
31             p_end_index            IN       NUMBER,
32             p_event_class_rec      IN       ZX_API_PUB.event_class_rec_type,
33             p_structure_name       IN       VARCHAR2,
34             p_structure_index      IN       BINARY_INTEGER,
35             p_return_status        OUT   NOCOPY VARCHAR2,
36             p_error_buffer         OUT   NOCOPY VARCHAR2)
37 
38 IS
39 
40    l_Taxable_Basis_Rule_Flag    ZX_TAXES_B.Taxable_Basis_Rule_Flag%type;
41    l_def_formula               varchar(30);
42    l_formula_from_rate         VARCHAR(30);
43    l_formula_code              varchar2(30);
44    l_formula_id                number;
45    l_line_amt                  number;
46    l_discount_amt              number;
47 --   i                         number;
48    l_sum_basiscoef             number;
49    l_sum_constcoef             number;
50    l_tax_id                    number;
51    l_tax_rate_id               zx_rates_b.tax_rate_id%TYPE;
52    l_compounding_tax_id        number;
53    l_zx_result_rec             ZX_PROCESS_RESULTS%ROWTYPE;
54    l_perc_discount             number;
55    l_common_comp_base         number;
56    l_compounding_tax           varchar2(30);
57    l_cpdg_tax_regime_code      varchar2(30);
58    l_Compounding_Type_Code          varchar2(30);
59    l_compounding_factor        number;
60    l_tax_date                  date;
61    l_Formula_Type_Code              ZX_FORMULA_B.Formula_Type_Code%type;
62    l_Taxable_Basis_Type_Code        ZX_FORMULA_B.Taxable_Basis_Type_Code%type;
63    l_base_rate_modifier        ZX_FORMULA_B.base_rate_modifier%type;
64    l_Cash_Discount_Appl_Flag    ZX_FORMULA_B.Cash_Discount_Appl_Flag%type;
65    l_Volume_Discount_Appl_Flag  ZX_FORMULA_B.Volume_Discount_Appl_Flag%type;
66    l_Trading_Discount_Appl_Flag ZX_FORMULA_B.Trading_Discount_Appl_Flag%type;
67    l_Transfer_Charge_Appl_Flag  ZX_FORMULA_B.Transfer_Charge_Appl_Flag%type;
68    l_TRANS_CHRG_APPL_FLG       ZX_FORMULA_B.Transport_Charge_Appl_Flag%type;
69    l_Insurance_Charge_Appl_Flag ZX_FORMULA_B.Insurance_Charge_Appl_Flag%type;
70    l_Other_Charge_Appl_Flag     ZX_FORMULA_B.Other_Charge_Appl_Flag%type;
71    l_enforce_compounding_flag   ZX_FORMULA_DETAILS.ENFORCE_COMPOUNDING_FLAG%TYPE;
72 
73    l_allow_adhoc_tax_rate_flag  VARCHAR2(1);
74    l_adj_for_adhoc_amt_code     ZX_RATES_B.ADJ_FOR_ADHOC_AMT_CODE%TYPE;
75 
76    l_tax_determine_date         date;
77    l_tax_rec                    ZX_TDS_UTILITIES_PKG.ZX_TAX_INFO_CACHE_REC;
78    l_tax_rate_rec               ZX_TDS_UTILITIES_PKG.zx_rate_info_rec_type;
79 
80 TYPE parameter_rec IS RECORD (
81      tax_id                 number,
82      formula_code           varchar(30),
83      incl_indicator              number,
84      weird_indicator              number,
85      composite_incl_indicator              number,
86      base_rate_modifier     number,
87      discount               number,
88      tax_rate               number,
89      tax_amt             number,
90      taxable_amt         number,
91      compounding_flg        varchar(1),
92      compounding_dep_flg    varchar(1),
93      basiscoef              number,
94      constcoef              number,
95      Taxable_Basis_Type_Code        ZX_FORMULA_B.Taxable_Basis_Type_Code%type,
96      overrideconst          number );
97 
98 TYPE parameter_tbl_type IS TABLE OF parameter_rec INDEX BY BINARY_INTEGER;
99 
100     parameter_tbl parameter_tbl_type;
101 
102 
103  cursor getFormulaInfoH(c_formula_code in varchar2,
104                         c_tax_date     in date ) is
105 
106        select FORMULA_ID,
107               Formula_Type_Code,
108               Taxable_Basis_Type_Code,
109               BASE_RATE_MODIFIER,
110               Cash_Discount_Appl_Flag,
111               Volume_Discount_Appl_Flag,
112               Trading_Discount_Appl_Flag,
113               Transfer_Charge_Appl_Flag,
114               Transport_Charge_Appl_Flag,
115               Insurance_Charge_Appl_Flag,
116               Other_Charge_Appl_Flag
117          from ZX_SCO_FORMULA
118         where formula_code = c_formula_code
119           and effective_from <= c_tax_date
120           and ( effective_to >= c_tax_date or
121                 effective_to is null )
122           and Enabled_Flag = 'Y';
123 
124 
125  cursor getFormulaInfoD(c_formula_id in number ) is
126          select compounding_tax,
127                 compounding_tax_regime_code,
128                 Compounding_Type_Code,
129                 enforce_compounding_flag
130           from ZX_FORMULA_DETAILS
131         where formula_id = c_formula_id;
132 
133 /* Bug#5395227 -- use cache structure
134  cursor getTaxId(c_tax varchar2,
135                 c_tax_regime_code varchar2) is
136         select tax_id from ZX_SCO_TAXES
137          where tax = c_tax
138            and tax_regime_code = c_tax_regime_code;
139 */
140 
141  cursor getAdhocInfo( c_tax_rate_id IN NUMBER) is
142         select NVL(ADJ_FOR_ADHOC_AMT_CODE, 'TAXABLE_BASIS'), NVL(ALLOW_ADHOC_TAX_RATE_FLAG, 'N')
143         from zx_rates_b
144         where TAX_RATE_ID = c_tax_rate_id;
145 
146  CURSOR get_formula_code_from_rate_csr(
147         c_tax_rate_id        zx_rates_b.tax_rate_id%TYPE) IS
148  SELECT taxable_basis_formula_code
149    FROM zx_rates_b
150   WHERE tax_rate_id = c_tax_rate_id;
151 
152 BEGIN
153 
154  g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
155 
156  IF (g_level_procedure >= g_current_runtime_level ) THEN
157    FND_LOG.STRING(g_level_procedure,
158                   'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis.BEGIN',
159                   'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (+)');
160  END IF;
161 
162  p_return_status:= FND_API.G_RET_STS_SUCCESS;
163 
164  IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(
165             p_structure_index) IS NOT NULL  THEN
166 
167    IF (g_level_procedure >= g_current_runtime_level ) THEN
168 
169      FND_LOG.STRING(g_level_procedure,
170                   'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis.END',
171                   'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (-)'||' skip processing for credit memo');
172    END IF;
173    RETURN;
174  END IF;
175 
176  l_sum_basiscoef:= 1;
177  l_sum_constcoef:= 0;
178 
179  -- Bug#5520167- get line amt from trx line
180  --l_line_amt:= ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(p_begin_index).line_amt;
181 
182  l_line_amt:= ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt( p_structure_index);
183 
184 
185  IF p_begin_index is null or p_end_index is null THEN
186 
187     p_return_status:= FND_API.G_RET_STS_ERROR;
188     IF (g_level_procedure >= g_current_runtime_level ) THEN
189 
190       FND_LOG.STRING(g_level_procedure,
191                      'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis.END',
192                      'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (-)'||' Error: begin index or end index is null');
193     END IF;
194     RETURN;
195 
196  END IF;
197 
198  For i  IN p_begin_index..p_end_index
199  Loop
200 
201    IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).other_doc_source = 'REFERENCE' AND
202          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_tax_amt = 0 AND
203          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_taxable_amt = 0 AND
204          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).manually_entered_flag = 'Y' AND
205          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).freeze_until_overridden_flag ='Y'
206    THEN
207 
208      NULL;
209 
210    ELSE
211 
212 
213     l_tax_id :=ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_id;
214     l_tax_rate_id :=
215           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_id;
216 
217 
218     l_tax_date :=ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_date;
219 
220     l_tax_determine_date := ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_determine_date;
221 
222     l_Taxable_Basis_Rule_Flag:=
223        ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).Taxable_Basis_Rule_Flag;
224     l_def_formula:=
225        ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).def_taxable_basis_formula;
226 
227     -- Do not re-determine tax_amt_included_flag if
228     -- bug 5391331: tax_amt_included_flag is overridden
229     -- bug 5391084: manual tax line
230     --
231     -- changed the following condition out for bug 5525890 and bug 5525816
232     -- Commented the code for Bug 7438875 to populate inclusive flag even if last_manual_entry is set to TAX_AMOUNT
233     IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
234                                      i).orig_tax_amt_included_flag IS NULL AND
235        /*(
236           NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
237                                      i).last_manual_entry, 'X') <> 'TAX_AMOUNT'
238           -- bugfix 5619762
239           OR
240           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ctrl_total_hdr_tx_amt(p_structure_index) is not null
241           OR
242           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ctrl_total_line_tx_amt(p_structure_index) is not null
243        ) AND*/
244        NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
245                                      i).manually_entered_flag, 'N') ='N'
246     THEN
247       -- populate inclusive_tax_flag by calling populate_inclusive_tax_flag
248       --
249       populate_inclusive_tax_flag (
250                          p_tax_line_index    => i,
251                          p_event_class_rec   => p_event_class_rec,
252                          p_structure_name    => p_structure_name,
253                          p_structure_index   => p_structure_index,
254                          p_return_status     => p_return_status,
255                          p_error_buffer      => p_error_buffer);
256 
257       IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
258         IF (g_level_statement>= g_current_runtime_level ) THEN
259           FND_LOG.STRING(g_level_statement,
260                  'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
261                  'Incorrect return_status after calling ' ||
262                  'ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag');
263           FND_LOG.STRING(g_level_statement,
264                  'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis.END',
265                  'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (-)');
266         END IF;
267         RETURN;
268       END IF;
269     END IF;
270 
271     --  Do not calculate taxes for those lines where tax_provider_id is not null
272     --  Provider services will calculate taxes for these lines
273 
274     --  Do not calculate tax for those lines which are copied from reference
275     --  document and which also have Freeze_Until_Overridden_Flag = Y. These are
276     --  the manual tax lines on reference document not found applicable on the
277     --  current document. Hiwever, if Freeze_Until_Overridden_Flag is 'Y' and the
278     --  tax event type is OVERRIDE, then taxable amount should be calculated.
279 
280     --   In case of override, only process those tax lines which need
281     --   to be recalculated. i.e.in case of inclusive or compounded taxes only,
282     --   we should recalculate all taxes, otherwise only recalculate taxes which
283     --   have recalculate_tax_flg ='Y'
284 
285    CASE
286     WHEN (ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).recalc_required_flag <> 'Y' AND
287           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_event_type_code = 'OVERRIDE_TAX') OR
288          (NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).last_manual_entry, 'X') = 'TAX_AMOUNT') OR
289           (ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).other_doc_source = 'APPLIED_FROM' AND
290            ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).applied_amt_handling_flag = 'P')
291     THEN
292 
293       --  RECALC_REQUIRED_FLAG will be populated by tax lines Determination
294       --  table handler when the user overrides one or more tax lines. (When the
295       --  line being overridden is inclusive or used to compound other taxes,
296       --  then this flag will be set to 'Y' for all the tax lines belonging to
297       --  the current transaction line)  If the value of RACALC_REQUIRED_FLAG = 'N'
298       --  then skip the process and only perform population of relevant Tax Rate
299       --  Determination columns into detail tax lines structure.
300 
301       -- NULL;
302 
303       -- Bug 3560223: populate parameter_tbl for compounding tax and
304       -- inclusive tax
305       --
306       parameter_tbl(l_tax_id).tax_id := l_tax_id;
307       parameter_tbl(l_tax_id).tax_rate :=
308                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate;
309       parameter_tbl(l_tax_id).formula_code :=
310        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).taxable_basis_formula;
311 
312       IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_amt_included_flag = 'S'
313       THEN
314           parameter_tbl(l_tax_id).weird_indicator:= 1;
315           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
316                                                   i).tax_amt_included_flag := 'Y';
317       ELSE
318           parameter_tbl(l_tax_id).weird_indicator:= 0;
319       END IF;
320 
321       IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt_includes_tax_flag(
322                                                 p_structure_index) = 'I' OR
323          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
324                                                   i).tax_amt_included_flag = 'Y'
325       THEN
326           parameter_tbl(l_tax_id).incl_indicator:= 1;
327       ELSE
328           parameter_tbl(l_tax_id).incl_indicator:= 0;
329       END IF;
330 
331 
332       parameter_tbl(l_tax_id).composite_incl_indicator :=
333                                 parameter_tbl(l_tax_id).incl_indicator -
334                                         parameter_tbl(l_tax_id).weird_indicator;
335 
336       parameter_tbl(l_tax_id).basiscoef:= 0;
337       parameter_tbl(l_tax_id).constcoef:= 0;
338       parameter_tbl(l_tax_id).overrideconst:=
339         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_tax_amt;
340 
341       -- l_sum_basiscoef:= l_sum_basiscoef + parameter_tbl(l_tax_id).composite_incl_indicator *
342       --                  parameter_tbl(l_tax_id).basiscoef * parameter_tbl(l_tax_id).tax_rate / 100;
343 
344       l_sum_constcoef:= l_sum_constcoef + parameter_tbl(l_tax_id).composite_incl_indicator *
345                         parameter_tbl(l_tax_id).constcoef * parameter_tbl(l_tax_id).tax_rate /100
346                       + parameter_tbl(l_tax_id).composite_incl_indicator *
347                         parameter_tbl(l_tax_id).overrideconst;
348 
349       IF (g_level_statement >= g_current_runtime_level ) THEN
350         FND_LOG.STRING(g_level_statement,
351                        'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
352                        ' sum_basiscoef: ' || l_sum_basiscoef||
353                        ' sum_constcoef: ' || l_sum_constcoef);
354       END IF;
355 
356     WHEN  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_provider_id is NOT NULL OR
357          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Delete_Flag = 'Y'
358     THEN
359 
360       -- Do not perform taxable basis determination for provider calculated lines. Taxes
361       -- calculated by providers cannot be compounded by taxes calculated by eTax and
362       -- vice versa. Also, do not process tax lines which are marked for deletion.
363 
364       NULL;
365 
366     WHEN
367          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).OTHER_DOC_SOURCE ='ADJUSTED' AND
368          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_event_type_code <> 'OVERRIDE_TAX'
369     THEN
370        -- In case when the tax line is copied from 'Applied From' or 'Adjusted' Document,
371        -- Applicability process will copy Tax Regime, Tax, Status, Rate, Place of Supply,
372        -- Reg. Number, Offset tax columns  from original document. in this case,
373        -- taxable amount will be a proration and no need to calculate multipliers for
374        -- this tax line.
375 
376        NULL;
377 
378     --WHEN
379     --  (ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_event_type_code = 'OVERRIDE_TAX' AND
380     --   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).last_manual_entry = 'TAX_AMOUNT')
381     --THEN
382 
383       --  In case of an override event on tax line, where the user has overridden tax amount,
384       --  we need not calculate multiplier for that tax line, the taxable amount will be
385       --  computed as tax amount / tax rate in the next loop.
386 
387       --NULL;
388 
389     WHEN
390         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).COPIED_FROM_OTHER_DOC_FLAG = 'Y' AND
391         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Manually_Entered_Flag = 'Y' AND
392         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).OTHER_DOC_SOURCE = 'REFERENCE'
393     THEN
394       -- When a manual tax line is copied from reference document, the Tax Regime, Tax, Status, Rate,
395       -- and other columns are copied from manual tax line in reference document as well. in this
396       -- case, the taxable amount will be computed as a percentage of taxable amount on reference
397       -- document. So no need to calculate multiplier for that tax line.
398 
399       -- Condition Other_Doc_Source = 'REFERENCE' added as a fix of bug#6891479
400 
401       NULL;
402     /* comment out for bug fix 3391186
403     WHEN
404        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Freeze_Until_Overridden_Flag = 'Y' AND
405          ( ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Overridden_Flag <> 'Y'
406            OR
407            ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).COPIED_FROM_OTHER_DOC_FLAG = 'Y' )
408     THEN
409     */
410     WHEN
411        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Freeze_Until_Overridden_Flag = 'Y' AND
412        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Overridden_Flag <> 'Y'
413     THEN
414        -- When the transaction is matched to a reference document, and if a tax
415        -- that was applicable on the reference document is not found applicable
416        -- during applicability process, the tax line from the reference document
417        -- is copied, but the tax rate, status, amounts are populated as zero,
418        -- until the user views that tax line and overrides it. So skip taxable basis determination
419        -- in this case.
420 
421        NULL;
422 
423    WHEN
424      (NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Freeze_Until_Overridden_Flag,'N') <> 'Y' OR
425       NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).COPIED_FROM_OTHER_DOC_FLAG,'N') <> 'Y')  OR
426       (ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).other_doc_source = 'APPLIED_FROM' AND
427           ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).applied_amt_handling_flag = 'R')                   OR
428       (ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_event_type_code = 'OVERRIDE_TAX' AND
429        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Recalc_Required_Flag = 'Y'           AND
430        -- bug fix 5525890
431        NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).last_manual_entry,'X') <> 'TAX_AMOUNT' )
432    THEN
433 
434     -- Initialize compounding_dep_tax_flag and compounding_tax_miss_flag
435     --
436     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).compounding_dep_tax_flag := 'N';
437     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).compounding_tax_miss_flag := 'N';
438 
439        --   In case of manual tax lines or override with last manual entry
440        --   of tax_amount, calculate the taxable amount based on tax amount
441        --   and line amount and not using the evaluation loop.
442 
443        --   In case of copied from reference document, prorate the taxable
444        --   amount based on the other_doc_tax_amt and other_doc_line_amt
445 
446        --   hence the above cases are excluded from this loop
447 
448      IF nvl(l_Taxable_Basis_Rule_Flag,'N') = 'Y'  THEN
449 
450        ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process(
451             'DET_TAXABLE_BASIS',
452             p_structure_name,
453             p_structure_index,
454             p_event_class_rec,
455             l_tax_id,
456             NULL,
457             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_determine_date,
458             NULL,
459             NULL,
460             l_zx_result_rec,
461             p_return_status,
462             p_error_buffer);
463 
464         if l_zx_result_rec.alphanumeric_result is not null then
465           l_formula_code:= l_zx_result_rec.alphanumeric_result;
466           IF (g_level_statement >= g_current_runtime_level ) THEN
467             FND_LOG.STRING(g_level_statement,
468                           'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
469                           'Get Formula code from rule_base_process '|| l_formula_code);
470           END IF;
471 
472         else
473           /* use cache
474           OPEN get_formula_code_from_rate_csr(l_tax_rate_id);
475           FETCH get_formula_code_from_rate_csr INTO l_formula_from_rate;
476           CLOSE get_formula_code_from_rate_csr;
477           */
478 
479           ZX_TDS_UTILITIES_PKG.get_tax_rate_info (
480                          p_tax_rate_id  => l_tax_rate_id,
481                          p_tax_rate_rec  => l_tax_rate_rec,
482                          p_return_status  => p_return_status,
483                          p_error_buffer   => p_error_buffer);
484 
485           l_formula_from_rate := l_tax_rate_rec.taxable_basis_formula_code;
486 
487           IF l_formula_from_rate IS NOT NULL THEN
488             l_formula_code:= l_formula_from_rate;
489             IF (g_level_statement >= g_current_runtime_level ) THEN
490               FND_LOG.STRING(g_level_statement,
491                             'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
492                             'Get Formula code from tax rate '||l_formula_code);
493             END IF;
494           ELSE
495             l_formula_code:= l_def_formula;
496             IF (g_level_statement >= g_current_runtime_level ) THEN
497               FND_LOG.STRING(g_level_statement,
498                             'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
499                             'Get Default Formula code from tax '||l_formula_code);
500             END IF;
501           END IF;
502         end if;
503 
504         l_formula_id:= l_zx_result_rec.numeric_result;
505         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).basis_result_id:= l_zx_result_rec.result_id;
506 
507      ELSE
508 
509        /* use cache
510        OPEN get_formula_code_from_rate_csr(l_tax_rate_id);
511        FETCH get_formula_code_from_rate_csr INTO l_formula_from_rate;
512        CLOSE get_formula_code_from_rate_csr;
513        */
514 
515         ZX_TDS_UTILITIES_PKG.get_tax_rate_info (
516                          p_tax_rate_id  => l_tax_rate_id,
517                          p_tax_rate_rec  => l_tax_rate_rec,
518                          p_return_status  => p_return_status,
519                          p_error_buffer   => p_error_buffer);
520 
521         l_formula_from_rate := l_tax_rate_rec.taxable_basis_formula_code;
522 
523 
524 
525        IF l_formula_from_rate IS NOT NULL THEN
526          l_formula_code := l_formula_from_rate;
527          IF (g_level_statement >= g_current_runtime_level ) THEN
528            FND_LOG.STRING(g_level_statement,
529                          'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
530                          'Get Formula code from tax rate '|| l_formula_code);
531          END IF;
532        ELSE
533          l_formula_code:= l_def_formula;
534          IF (g_level_statement >= g_current_runtime_level ) THEN
535            FND_LOG.STRING(g_level_statement,
536                          'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
537                          'Get Default Formula code from tax '|| l_formula_code);
538          END IF;
539        END IF;
540      END IF;
541 
542      IF l_formula_code IS NULL THEN
543        p_return_status := FND_API.G_RET_STS_ERROR;
544        IF (g_level_error >= g_current_runtime_level ) THEN
545 
546          FND_LOG.STRING(g_level_error ,
547                 'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis.END',
548                 'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (-)'||' error: can not determine formula code');
549        END IF;
550        RETURN;
551      END IF;
552 
553      parameter_tbl(l_tax_id).tax_id:= l_tax_id;
554      parameter_tbl(l_tax_id).tax_rate:= ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate;
555      parameter_tbl(l_tax_id).formula_code:= l_formula_code;
556 
557 
558      --   This is the end of getting formula code
559 
560      if  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Tax_Amt_Included_Flag = 'S' then
561          parameter_tbl(l_tax_id).weird_indicator:= 1;
562          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
563                                                   i).tax_amt_included_flag := 'Y';
564      else
565          parameter_tbl(l_tax_id).weird_indicator:= 0;
566      end if;
567 
568      IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt_includes_tax_flag(
569                                                       p_structure_index) = 'I' OR
570         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
571                                                 i).tax_amt_included_flag = 'Y'
572      THEN
573          parameter_tbl(l_tax_id).incl_indicator:= 1;
574      ELSE
575          parameter_tbl(l_tax_id).incl_indicator:= 0;
576      END IF;
577 
578      IF (g_level_statement >= g_current_runtime_level ) THEN
579        FND_LOG.STRING(g_level_statement,
580                       'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
581                       'parameter_tbl( ' || l_tax_id || ' ).incl_indicator:= ' ||
582                        parameter_tbl(l_tax_id).incl_indicator||
583                       'weird_indicator:= ' ||
584                        parameter_tbl(l_tax_id).weird_indicator);
585      END IF;
586 
587     parameter_tbl(l_tax_id).composite_incl_indicator:= parameter_tbl(l_tax_id).incl_indicator -
588                              parameter_tbl(l_tax_id).weird_indicator;
589 
590 
591      parameter_tbl(l_tax_id).basiscoef:= 1;
592      parameter_tbl(l_tax_id).constcoef:= 0;
593      parameter_tbl(l_tax_id).overrideconst:= 0;
594 
595      IF l_formula_code IN ('STANDARD_TB', 'STANDARD_QUANTITY') THEN
596 
597        -- When formula code is STANDARD_TB, the rate type should be PERCENT.
598        -- When formula code is STANDARD_QUANTITY, the rate type should be QUANTITY. Otherwise
599        -- multiplying taxable basis by tax rate will give incorrect result.
600        IF ( l_formula_code = 'STANDARD_TB' AND
601             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_type <> 'PERCENTAGE'  )
602          -- add following condition for bug fix 5481559
603          OR ( l_formula_code = 'STANDARD_QUANTITY' AND
604             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_type <> 'QUANTITY' )
605        THEN
606 
607           p_return_status:= FND_API.G_RET_STS_ERROR;
608 
609           FND_MESSAGE.SET_NAME('ZX','ZX_RATE_FORMULA_MISMATCH');
610           FND_MESSAGE.SET_TOKEN('RATE_TYPE',
611               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_type);
612           FND_MESSAGE.SET_TOKEN('TAX',ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax );
613           FND_MESSAGE.SET_TOKEN('TAXABLE_BASIS_TYPE', NVL(l_Taxable_Basis_Type_Code, 'PERCENTAGE') );
614           FND_MESSAGE.SET_TOKEN('FORMULA_CODE', l_formula_code );
615 
616           -- FND_MSG_PUB.Add;
617           ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
618             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).trx_line_id;
619           ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
620             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).trx_level_type;
621 
622           ZX_API_PUB.add_msg(
623                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
624 
625           IF (g_level_error >= g_current_runtime_level ) THEN
626                FND_LOG.STRING(g_level_error ,
627                       'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
628                       'Taxable basis type and tax Rate Type do not match ');
629                FND_LOG.STRING(g_level_error,
630                       'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis.END',
631                       'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (-)');
632           END IF;
633 
634           RETURN;
635 
636        END IF;
637 
638        -- When formula code is STANDARD_TB then no discounts or charges are
639        -- applicable. Base rate modifier is set to 1
640        parameter_tbl(l_tax_id).discount:= 0;
641        parameter_tbl(l_tax_id).base_rate_modifier:= 1;
642 
643 --       if ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).last_manual_entry = 'TAX_AMOUNT'
644 --          and ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_event_type_code = 'OVERRIDE_TAX' then
645 --
646 --          -- This is a case where user has overridden tax amt on the tax engine
647 --          -- calculated tax. Hence do not apply taxable basis formula again, but
648 --          -- only set the overrideconst to overriddne tax amt.
649 --          parameter_tbl(l_tax_id).basiscoef:= 0;
650 --          parameter_tbl(l_tax_id).constcoef:= 0;
651 --          parameter_tbl(l_tax_id).overrideconst:=
652 --                     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_tax_amt;
653 --
654 --       else
655 --          parameter_tbl(l_tax_id).basiscoef:= 1;
656 --          parameter_tbl(l_tax_id).constcoef:= 0;
657 --          parameter_tbl(l_tax_id).overrideconst:= 0;
658 --       end if;
659 
660      ELSIF   l_formula_code <> 'STANDARD_QUANTITY' THEN
661 
662        open getFormulaInfoH(l_formula_code,l_tax_date);
663        fetch getFormulaInfoH
664             into l_FORMULA_ID,
665                  l_Formula_Type_Code,
666                  l_Taxable_Basis_Type_Code,
667                  l_BASE_RATE_MODIFIER,
668                  l_Cash_Discount_Appl_Flag,
669                  l_Volume_Discount_Appl_Flag,
670                  l_Trading_Discount_Appl_Flag,
671                  l_Transfer_Charge_Appl_Flag,
672                  L_TRANS_CHRG_APPL_FLG,
673                  l_Insurance_Charge_Appl_Flag,
674                  l_Other_Charge_Appl_Flag;
675 
676        if getFormulaInfoH%notfound then
677 
678           p_return_status:= FND_API.G_RET_STS_ERROR;
679           IF (g_level_error >= g_current_runtime_level ) THEN
680             FND_LOG.STRING(g_level_error,
681                            'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
682                            'Formula Info not found for formula code ' || l_formula_code );
683             FND_LOG.STRING(g_level_error,
684                            'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis.END',
685                            'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (-)');
686           END IF;
687 
688        end if;
689 
690        close getFormulaInfoH;
691 
692        IF (g_level_statement >= g_current_runtime_level ) THEN
693 
694          FND_LOG.STRING(g_level_statement,
695                         'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
696                         'Taxable Basis Type: '|| l_Taxable_Basis_Type_Code||' base rate modifier: '||l_BASE_RATE_MODIFIER||
697 			'Cash_Discount_Appl_Flag: '||l_Cash_Discount_Appl_Flag||' Volume_Discount_Appl_Flag: '||l_Volume_Discount_Appl_Flag||
698 			' Trading_Discount_Appl_Flag: '||l_Trading_Discount_Appl_Flag||' Transfer_Charge_Appl_Flag: '||
699                         l_Transfer_Charge_Appl_Flag||' TRANS_CHRG_APPL_FLG: '||L_TRANS_CHRG_APPL_FLG||
700                         ' Insurance_Charge_Appl_Flag: '||l_Insurance_Charge_Appl_Flag||' Other_Charge_Appl_Flag: '||l_Other_Charge_Appl_Flag);
701        END IF;
702 
703 
704        parameter_tbl(l_tax_id).base_rate_modifier := 1 + nvl(l_BASE_RATE_MODIFIER,0)/100;
705        parameter_tbl(l_tax_id).Taxable_Basis_Type_Code := upper(l_Taxable_Basis_Type_Code);
706 
707        if parameter_tbl(l_tax_id).Taxable_Basis_Type_Code <> 'ASSESSABLE_VALUE' then
708 
709        -- When Taxable Basis Type is not QUANTITY but the rate type is QUANTITY
710        -- then error should be raised, otherwise the tax calculation result will be incorrect.
711        IF ( parameter_tbl(l_tax_id).Taxable_Basis_Type_Code <> 'QUANTITY' AND
712             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_type = 'QUANTITY')
713            OR
714           ( parameter_tbl(l_tax_id).Taxable_Basis_Type_Code = 'QUANTITY' AND
715             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_type <> 'QUANTITY')
716        THEN
717 
718           p_return_status:= FND_API.G_RET_STS_ERROR;
719 
720           FND_MESSAGE.SET_NAME('ZX','ZX_RATE_FORMULA_MISMATCH');
721           FND_MESSAGE.SET_TOKEN('RATE_TYPE',
722               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_type);
723           FND_MESSAGE.SET_TOKEN('TAX',ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax );
724           FND_MESSAGE.SET_TOKEN('TAXABLE_BASIS_TYPE', parameter_tbl(l_tax_id).Taxable_Basis_Type_Code);
725           FND_MESSAGE.SET_TOKEN('FORMULA_CODE', l_formula_code );
726 
727           -- FND_MSG_PUB.Add;
728           ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
729             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).trx_line_id;
730           ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
731             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).trx_level_type;
732 
733           ZX_API_PUB.add_msg(
734                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
735 
736           IF (g_level_error >= g_current_runtime_level ) THEN
737                FND_LOG.STRING(g_level_error ,
738                       'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
739                       'Taxable basis type for Formula Code '||l_formula_code||
740                       ' and tax Rate Type QUANTITY do not match ');
741                FND_LOG.STRING(g_level_error ,
742                       'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis.END',
743                       'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (-)');
744           END IF;
745           RETURN;
746 
747        END IF;
748 
749 
750        if parameter_tbl(l_tax_id).Taxable_Basis_Type_Code = 'PRIOR_TAX' then
751 
752            parameter_tbl(l_tax_id).base_rate_modifier := 0;
753 
754        end if;
755 
756        l_discount_amt:= 0;
757 
758 
759        if  l_Cash_Discount_Appl_Flag  = 'Y' then
760            l_discount_amt:= l_discount_amt -
761              ABS(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.cash_discount(p_structure_index));
762 
763        end if;
764 
765        if  l_Volume_Discount_Appl_Flag  = 'Y' then
766            l_discount_amt:= l_discount_amt -
767               ABS(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.volume_discount(p_structure_index));
768 
769        end if;
770 
771        if  l_Trading_Discount_Appl_Flag  = 'Y' then
772            l_discount_amt:= l_discount_amt -
773               ABS(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trading_discount(p_structure_index));
774 
775        end if;
776 
777 
778        if  l_Transfer_Charge_Appl_Flag  = 'Y' then
779            l_discount_amt:= l_discount_amt +
780              ABS(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.transfer_charge(p_structure_index));
781 
782        end if;
783 
784 
785        if  L_TRANS_CHRG_APPL_FLG  = 'Y' then
786            l_discount_amt:= l_discount_amt +
787              ABS(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.transportation_charge(p_structure_index));
788 
789        end if;
790 
791 
792        if  l_Insurance_Charge_Appl_Flag  = 'Y' then
793            l_discount_amt:= l_discount_amt +
794              ABS(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.insurance_charge(p_structure_index));
795 
796        end if;
797 
798        if  l_Other_Charge_Appl_Flag  = 'Y' then
799            l_discount_amt:= l_discount_amt +
800              ABS(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.other_charge(p_structure_index));
801 
802        end if;
803 
804        IF (g_level_statement >= g_current_runtime_level ) THEN
805          FND_LOG.STRING(g_level_statement,
806                         'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
807                         'Total discount or charge: '||
808                          nvl(l_discount_amt,0));
809        END IF;
810 
811        parameter_tbl(l_tax_id).discount:= nvl(l_discount_amt,0);
812 
813 --     end of discount / charge
814 
815 
816 --       if ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).last_manual_entry = 'TAX_AMOUNT'
817 --          and ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_event_type_code = 'OVERRIDE_TAX' then
818 
819 --          -- This is a case where user has overridden tax amt on the tax engine
820 --          -- calculated tax. Hence do not apply taxable basis formula again, but
821 --          -- only set the overrideconst to overridden tax amt.
822 --          parameter_tbl(l_tax_id).basiscoef:= 0;
823 --          parameter_tbl(l_tax_id).constcoef:= 0;
824 --          parameter_tbl(l_tax_id).overrideconst:=
825 --                  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_tax_amt;
826 
827 --       else
828 
829           parameter_tbl(l_tax_id).basiscoef:=
830                 parameter_tbl(l_tax_id).base_rate_modifier;
831 
832           parameter_tbl(l_tax_id).constcoef:=
833                 parameter_tbl(l_tax_id).discount;
834 
835           parameter_tbl(l_tax_id).overrideconst:= 0;
836           IF (g_level_statement >= g_current_runtime_level ) THEN
837             FND_LOG.STRING(g_level_statement,
838                            'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
839                            'basiscoef: ' ||parameter_tbl(l_tax_id).basiscoef ||' constcoef: ' ||
840                             parameter_tbl(l_tax_id).constcoef);
841           END IF;
842 
843           if l_formula_id is null then
844               p_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
845               IF (g_level_error >= g_current_runtime_level ) THEN
846                 FND_LOG.STRING(g_level_error ,
847                                'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
848                                'l_formula_id is null ');
849                 FND_LOG.STRING(g_level_error ,
850                                'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
851                                'p_return_status is ' || p_return_status);
852                 FND_LOG.STRING(g_level_error ,
853                               'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis.END',
854                               'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (-)');
855               END IF;
856               RETURN;
857           end if;
858 
859           open getFormulaInfoD(l_formula_id);
860           fetch getFormulaInfoD into l_compounding_tax,l_cpdg_tax_regime_code,
861                                      l_Compounding_Type_Code, l_enforce_compounding_flag;
862 
863           while getFormulaInfoD%found loop
864 
865             IF (g_level_statement >= g_current_runtime_level ) THEN
866               FND_LOG.STRING(g_level_statement,
867                              'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
868                              ' Compounding tax: ' || l_compounding_tax||
869                              ' Compounding tax regime code: ' || l_cpdg_tax_regime_code||
870                              ' Compounding tax type: ' || l_Compounding_Type_Code);
871             END IF;
872 
873             -- set the compounding_dep_tax_flag here
874             parameter_tbl(l_tax_id).compounding_dep_flg:= 'Y';
875 
876             -- Bug#5395227- use cache structure
877             -- open getTaxId(l_compounding_tax, l_cpdg_tax_regime_code);
878             -- fetch getTaxId into l_compounding_tax_id;
879 
880             -- Bug#5395227- replace getTaxId by the code below
881             --
882             -- init tax record for each new tax regime and tax
883             --
884             l_tax_rec            := NULL;
885             l_compounding_tax_id := NULL;
886 
887             ZX_TDS_UTILITIES_PKG.get_tax_cache_info(
888                         l_cpdg_tax_regime_code,
889                         l_compounding_tax,
890                         l_tax_determine_date,
891                         l_tax_rec,
892                         p_return_status,
893                         p_error_buffer);
894 
895             if p_return_status = FND_API.G_RET_STS_SUCCESS  then
896               l_compounding_tax_id := l_tax_rec.tax_id;
897             end if;
898 
899             -- if getTaxID%notfound then
900             if l_compounding_tax_id IS NULL then
901                p_return_status:= FND_API.G_RET_STS_ERROR;
902 
903                IF (g_level_error >= g_current_runtime_level ) THEN
904                  FND_LOG.STRING(g_level_error ,
905                                 'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
906                                 ' Compounding tax id does not exist');
907                  FND_LOG.STRING(g_level_error ,
908                                 'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis.END',
909                                 'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (-)');
910                END IF;
911                RETURN;
912             end if;
913 
914             IF (g_level_statement >= g_current_runtime_level ) THEN
915               FND_LOG.STRING(g_level_statement,
916                              'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
917                              ' Compounding tax id is ' || l_compounding_tax_id);
918             END IF;
919             -- close getTaxId;
920 
921             IF parameter_tbl.exists(l_compounding_tax_id) THEN
922 
923                if l_Compounding_Type_Code = 'ADD'  then
924                   l_compounding_factor:= 1;
925                else
926                   l_compounding_factor:= -1;
927                end if;
928 
929                parameter_tbl(l_tax_id).basiscoef:= parameter_tbl(l_tax_id).basiscoef +
930                  parameter_tbl(l_compounding_tax_id).basiscoef *
931                  (parameter_tbl(l_compounding_tax_id).tax_rate /100) * l_compounding_factor;
932 
933                parameter_tbl(l_tax_id).constcoef:= parameter_tbl(l_tax_id).constcoef +
934                  parameter_tbl(l_compounding_tax_id).constcoef *
935                  (parameter_tbl(l_compounding_tax_id).tax_rate/100) * l_compounding_factor +
936                  parameter_tbl(l_compounding_tax_id).overrideconst * l_compounding_factor;
937 
938                parameter_tbl(l_compounding_tax_id).compounding_flg:= 'Y';
939 
940             ELSE  --l_compounding_tax_id not exists
941 
942                -- bug fix 3282007: add the following IF condition handling.
943                IF l_enforce_compounding_flag = 'Y' THEN
944 
945                  p_return_status:= FND_API.G_RET_STS_ERROR;
946 
947                  FND_MESSAGE.SET_NAME('ZX','ZX_COMPND_TAX_NOT_FOUND');
948                  FND_MESSAGE.SET_TOKEN('TAX',l_compounding_tax);
949                  FND_MESSAGE.SET_TOKEN('FORMULA_CODE',l_formula_code);
950                  -- FND_MSG_PUB.Add;
951                  ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
952                    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).trx_line_id;
953                  ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
954                    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).trx_level_type;
955 
956                  ZX_API_PUB.add_msg(
957                        ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
958 
959                  IF (g_level_error >= g_current_runtime_level ) THEN
960                    FND_LOG.STRING(g_level_error,
961                                   'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
962                                   'Either Tax ' || l_compounding_tax_id ||
963                                   ' is not applicable or compounding precedence is wrong');
964                    FND_LOG.STRING(g_level_error,
965                                   'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis.END',
966                                   'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (-)');
967                  END IF;
968 
969                  RETURN;
970                ELSE
971                  -- bug 3644541: set compounding_tax_miss_flag
972                  --
973                  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
974                                             i).compounding_tax_miss_flag := 'Y';
975                END IF;
976 
977             END IF; -- parameter_tbl.exists
978 
979             fetch getFormulaInfoD into l_compounding_tax,l_cpdg_tax_regime_code,
980                                        l_Compounding_Type_Code, l_enforce_compounding_flag;
981          end loop;
982 
983          close getFormulaInfoD;
984 
985 --       end if;   -- last manual entry
986 
987        end if;	-- taxable basis type code
988 
989      END IF; -- l_formula_code
990 
991 
992        l_sum_basiscoef:= l_sum_basiscoef + parameter_tbl(l_tax_id).composite_incl_indicator *
993                          parameter_tbl(l_tax_id).basiscoef * parameter_tbl(l_tax_id).tax_rate / 100;
994 
995        l_sum_constcoef:= l_sum_constcoef + parameter_tbl(l_tax_id).composite_incl_indicator *
996                          parameter_tbl(l_tax_id).constcoef * parameter_tbl(l_tax_id).tax_rate /100
997                        + parameter_tbl(l_tax_id).composite_incl_indicator *
998                          parameter_tbl(l_tax_id).overrideconst;
999 
1000        IF (g_level_statement >= g_current_runtime_level ) THEN
1001          FND_LOG.STRING(g_level_statement,
1002                         'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
1003                         ' sum_basiscoef: ' || l_sum_basiscoef||
1004                         ' sum_constcoef: ' || l_sum_constcoef);
1005        END IF;
1006 
1007    ELSE  -- default case
1008 
1009       NULL;
1010 
1011    END CASE;  -- Delete_Flag
1012 
1013    IF p_return_status IN ( FND_API.G_RET_STS_ERROR, FND_API.G_RET_STS_UNEXP_ERROR) THEN
1014        EXIT;
1015    END IF;
1016    END IF;
1017 
1018  END LOOP;
1019 
1020  IF (g_level_statement >= g_current_runtime_level ) THEN
1021    FND_LOG.STRING(g_level_statement,
1022                   'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
1023                   ' ');
1024  END IF;
1025 
1026  IF nvl(p_return_status, 'SUCCESS') <> FND_API.G_RET_STS_ERROR THEN
1027 
1028  l_common_comp_base := (l_line_amt - l_sum_constcoef) / l_sum_basiscoef;
1029 
1030  IF (g_level_statement >= g_current_runtime_level ) THEN
1031    FND_LOG.STRING(g_level_statement,
1032                   'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
1033                   'l_sum_basiscoef is ' || l_sum_basiscoef);
1034    FND_LOG.STRING(g_level_statement,
1035                   'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
1036                   'l_sum_constcoef is ' || l_sum_constcoef);
1037    FND_LOG.STRING(g_level_statement,
1038                   'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
1039                   'l_common_comp_base is ' || l_common_comp_base);
1040 
1041  --This complete the building of multipliers. Now update columns
1042 
1043    FND_LOG.STRING(g_level_statement,
1044                   'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
1045                   'update columns');
1046  END IF;
1047 
1048  for i in p_begin_index..p_end_index loop
1049 
1050     l_tax_id := ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_id;
1051 
1052 
1053   -- Update the columns only for those lines which were not marked for
1054   -- deletion and which were not marked for claculation by providers
1055   -- and which are not manual tax lines copied from reference document.
1056 
1057   -- Even if Freeze_Until_Overridden_Flag is 'Y', if the tax event type is
1058   -- OVERRIDE, then taxable amount should be calculated.
1059 
1060   CASE
1061     WHEN  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_provider_id is NOT NULL OR
1062          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Delete_Flag = 'Y'
1063     THEN
1064 
1065       NULL;
1066 
1067    WHEN  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).OTHER_DOC_SOURCE = 'APPLIED_FROM' AND
1068          ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).applied_amt_handling_flag = 'P' AND
1069          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_event_type_code <> 'OVERRIDE_TAX'
1070    THEN
1071      --  Proration Scenarios:
1072      --  In the following cases, taxable basis is not calculated using taxable
1073      --  basis formula, but proration is done based on reference / applied from
1074      --  adjusted to docs.
1075 
1076      --  1. XML Invoices with control total (for all taxes within the document):
1077      --     taxable basis determination prorates the taxable amount.
1078      --     This case is open and not yet finalized
1079      --
1080      --  2. Transaction line with Adjusted to/Applied from information:
1081      --     Taxable basis Determination proartes the taxable amount
1082      --     eg. payables credit memo, adjusted to a payables invoice
1083      --         payables invoice, applied from a prepayment
1084      --
1085      --  3. Imported summary tax lines with allocation link structure
1086      --     Taxable basis determination prorates the taxable amount
1087      --     (should we have tax event type called IMPORT to identify this ?
1088      --
1089      --  4. Tax amount overridden in the summary tax line through the User Interface
1090      --     Taxable basis determination calcuates the taxable amount as
1091      --         tax amount / tax rate
1092 
1093       IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).other_doc_line_amt <> 0 THEN
1094 
1095         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_taxable_amt:=
1096           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).other_doc_line_taxable_amt *
1097                      ( ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).line_amt /
1098               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).other_doc_line_amt );
1099 
1100       ELSE   -- other_doc_line_amt = 0 OR IS NULL
1101         -- copy unrounded_taxable_amt from reference document,
1102         --
1103         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_taxable_amt :=
1104               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).other_doc_line_taxable_amt;
1105 
1106       END IF;       -- other_doc_line_amt <> 0
1107 
1108 
1109    WHEN
1110        ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Freeze_Until_Overridden_Flag = 'Y' AND
1111           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Overridden_Flag <> 'Y'
1112    THEN
1113         -- Taxable amounts should have been set to zero in applicability process.
1114         -- hence no processing required here.
1115 
1116         NULL;
1117    WHEN nvl(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Delete_Flag,'N') <> 'Y' AND
1118         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_provider_id is NULL    AND
1119        (nvl(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Freeze_Until_Overridden_Flag,'N') <> 'Y' OR
1120          nvl(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).COPIED_FROM_OTHER_DOC_FLAG,'N') <> 'Y')  OR
1121         (ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_event_type_code = 'OVERRIDE_TAX' AND
1122          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Recalc_Required_Flag = 'Y') THEN
1123 
1124         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).taxable_basis_formula:=
1125                                                                  parameter_tbl(l_tax_id).formula_code;
1126 
1127     IF parameter_tbl(l_tax_id).formula_code = 'STANDARD_QUANTITY'  THEN
1128     -- For quantity based taxes, the calculation is not performed using
1129     -- the regular calculation cycle. Hence calculate the taxable amt
1130     -- and tax amt for quantity based taxes.
1131     -- For quantity based taxes, taxable amt is set equal to quantity
1132     -- although the field name indicates it is amt.
1133 
1134       	parameter_tbl(l_tax_id).taxable_amt:=
1135              ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).trx_line_quantity;
1136 
1137         parameter_tbl(l_tax_id).tax_amt:=  parameter_tbl(l_tax_id).taxable_amt *
1138                          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate;--Bug 5185614
1139 
1140     ELSIF parameter_tbl(l_tax_id).Taxable_Basis_Type_Code = 'ASSESSABLE_VALUE' then
1141     -- For ASSESSABLE_VALUE formula, the taxable amt is the line assessable value.
1142       	parameter_tbl(l_tax_id).taxable_amt:=
1143             nvl(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).line_assessable_value,
1144                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).line_amt);
1145 
1146         parameter_tbl(l_tax_id).tax_amt:=  parameter_tbl(l_tax_id).taxable_amt *
1147                          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate / 100;
1148 
1149     ELSE
1150 
1151       parameter_tbl(l_tax_id).taxable_amt:= l_common_comp_base *
1152                     parameter_tbl(l_tax_id).basiscoef
1153                  +  parameter_tbl(l_tax_id).constcoef;
1154 
1155 
1156       parameter_tbl(l_tax_id).tax_amt:=  parameter_tbl(l_tax_id).taxable_amt *
1157                     parameter_tbl(l_tax_id).tax_rate/100
1158                  +  parameter_tbl(l_tax_id).overrideconst;
1159 
1160     END IF;
1161 
1162     if ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).last_manual_entry is null OR
1163          ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).last_manual_entry <> 'TAX_AMOUNT' then
1164 
1165         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_taxable_amt:= parameter_tbl(l_tax_id).taxable_amt;
1166         ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_tax_amt:=
1167                 parameter_tbl(l_tax_id).tax_amt;
1168 
1169     elsif ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).last_manual_entry = 'TAX_AMOUNT' THEN
1170       -- bug 5237144:
1171       --  and ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_event_type_code = 'OVERRIDE_TAX' then
1172 
1173        /* use cache
1174         OPEN getAdhocInfo(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_id);
1175         FETCH getAdhocInfo into l_adj_for_adhoc_amt_code, l_allow_adhoc_tax_rate_flag;
1176         IF getAdhocInfo%NOTFOUND THEN
1177           close getAdhocInfo;
1178           p_return_status := FND_API.G_RET_STS_ERROR;
1179           IF (g_level_error >= g_current_runtime_level ) THEN
1180             FND_LOG.STRING(g_level_error,
1181                    'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
1182                    'No Data Found for tax_rate_code: '||
1183                    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_code ||
1184                    ' tax_rate_id: ' ||
1185                    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_id  );
1186             FND_LOG.STRING(g_level_error,
1187                    'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis.END',
1188                    'ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis (-)');
1189           END IF;
1190           RETURN;
1191         END IF;
1192         CLOSE getAdhocInfo;
1193         */
1194 
1195         ZX_TDS_UTILITIES_PKG.get_tax_rate_info (
1196                          p_tax_rate_id  => ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate_id,
1197                          p_tax_rate_rec  => l_tax_rate_rec,
1198                          p_return_status  => p_return_status,
1199                          p_error_buffer   => p_error_buffer);
1200 
1201 
1202         -- bug#7344499- return error to user when rate is not found
1203 
1204         IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1205           -- no rate found for the specify tax_rate_id
1206           RETURN;
1207         END IF;
1208 
1209 		  l_adj_for_adhoc_amt_code := nvl(l_tax_rate_rec.adj_for_adhoc_amt_code,'TAXABLE_BASIS');
1210           l_allow_adhoc_tax_rate_flag := nvl(l_tax_rate_rec.Allow_Adhoc_Tax_Rate_Flag,'N');
1211 
1212         IF l_allow_adhoc_tax_rate_flag = 'N' OR
1213            (l_allow_adhoc_tax_rate_flag = 'Y' AND l_adj_for_adhoc_amt_code = 'TAXABLE_BASIS') OR
1214            NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).manually_entered_flag, 'N') = 'Y'
1215         THEN
1216           IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate <> 0 THEN
1217             IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).orig_taxable_amt IS NULL THEN
1218               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).orig_taxable_amt :=
1219                  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).taxable_amt;
1220             END IF;
1221             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_taxable_amt:=
1222                ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_tax_amt /
1223 			           --Start Bug 7310806
1224 				   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate * 100;
1225                                    --parameter_tbl(l_tax_id).tax_rate * 100;
1226 				   --End Bug 7310806
1227 
1228            -- ensuring that PRORATED_TB is not set for overriden tax lines.
1229            IF NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).overridden_flag,'N') = 'N'
1230               OR NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).manually_entered_flag,'N') = 'Y' THEN
1231               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).taxable_basis_formula:= 'PRORATED_TB';
1232            END IF;
1233 
1234           ELSE
1235 
1236             -- when tax_rate = 0, unrounded_tax_amt = 0, do nothing.
1237             -- Error out when Tax_rate = 0, unrounded_tax_amt <> 0.
1238             IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_tax_amt <> 0 THEN
1239               p_return_status := FND_API.G_RET_STS_ERROR;
1240               IF (g_level_error >= g_current_runtime_level ) THEN
1241                 FND_LOG.STRING(g_level_error,
1242                        'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis',
1243                        'adj_for_adhoc_amt_code:  ' ||l_adj_for_adhoc_amt_code );
1244                 FND_LOG.STRING(g_level_error,
1245                        'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis',
1246                        'Tax_rate = 0, unrounded_tax_amt <> 0. ' ||
1247                        'Cannot calculate taxable basis amount.');
1248                 FND_LOG.STRING(g_level_error,
1249                        'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
1250                        'p_return_status = ' || p_return_status);
1251                 FND_LOG.STRING(g_level_error,
1252                        'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis.END',
1253                        'ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis (-)');
1254               END IF;
1255               RETURN;
1256             END IF;
1257           END IF;  -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate
1258 
1259         ELSIF (l_allow_adhoc_tax_rate_flag = 'Y' AND l_adj_for_adhoc_amt_code = 'TAX_RATE')
1260         THEN
1261           IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_taxable_amt <> 0 THEN
1262 
1263               IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).orig_tax_rate IS NULL THEN
1264                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).orig_tax_rate :=
1265                    ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate;
1266               END IF;
1267 
1268               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_rate :=
1269                 round(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_tax_amt/
1270                   ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_taxable_amt*100, 6);
1271 
1272           ELSE
1273             -- when Taxable_amt = 0, unrounded_tax_amt = 0, do nothing.
1274             -- Error out when Taxable_amt = 0, unrounded_tax_amt <> 0.
1275             IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_tax_amt <> 0 THEN
1276               p_return_status := FND_API.G_RET_STS_ERROR;
1277               IF (g_level_error >= g_current_runtime_level ) THEN
1278                 FND_LOG.STRING(g_level_error,
1279                        'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis',
1280                        'adj_for_adhoc_amt_code:  ' ||l_adj_for_adhoc_amt_code );
1281                 FND_LOG.STRING(g_level_error,
1282                        'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis',
1283                        'Taxable_amt = 0, unrounded_tax_amt <> 0. ' ||
1284                        'Cannot calculate tax rate.');
1285                 FND_LOG.STRING(g_level_error,
1286                        'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.Get_taxable_basis',
1287                        'p_return_status = ' || p_return_status);
1288                 FND_LOG.STRING(g_level_error,
1289                        'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis.END',
1290                        'ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis (-)');
1291               END IF;
1292               RETURN;
1293             END IF;
1294 
1295           END IF;  -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).unrounded_taxable_amt
1296         END IF;
1297 
1298     end if;    -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).last_manual_entry
1299 
1300     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).tax_base_modifier_rate:=
1301                        parameter_tbl(l_tax_id).base_rate_modifier;
1302     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Compounding_Tax_Flag:=
1303                        parameter_tbl(l_tax_id).compounding_flg;
1304     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Compounding_Dep_Tax_Flag:=
1305                        parameter_tbl(l_tax_id).compounding_dep_flg;
1306 
1307 
1308    WHEN  ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(i).Freeze_Until_Overridden_Flag = 'Y' THEN
1309 
1310         NULL;
1311 
1312    ELSE  -- default case
1313 
1314       NULL;
1315 
1316   END CASE; -- Delete_Flag
1317 
1318   -- polpulate tax_amt_included_flag and compounding_tax_flag in
1319   -- ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl
1320   --
1321   IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1322                                              i).tax_amt_included_flag = 'Y' THEN
1323 
1324     ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_amt_included_flag(
1325                                                       p_structure_index) := 'Y';
1326   END IF;
1327 
1328   IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1329                                              i).compounding_dep_tax_flag = 'Y' THEN
1330 
1331     ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.compounding_tax_flag(
1332                                                       p_structure_index) := 'Y';
1333   END IF;
1334 
1335  end loop;
1336 
1337 END IF;
1338 
1339  IF (g_level_procedure >= g_current_runtime_level ) THEN
1340    FND_LOG.STRING(g_level_procedure,
1341                   'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.get_taxable_basis.END',
1342                   'ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS (-)');
1343  END IF;
1344 
1345 EXCEPTION
1346    WHEN OTHERS THEN
1347      p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1348      p_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1349 
1350     IF (g_level_unexpected >= g_current_runtime_level ) THEN
1351       FND_LOG.STRING(g_level_unexpected,
1352                      'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.GET_TAXABLE_BASIS',
1353                       p_error_buffer);
1354     END IF;
1355 
1356 END get_taxable_basis;
1357 
1358 PROCEDURE populate_inclusive_tax_flag (
1359     p_tax_line_index   IN          NUMBER,
1360     p_event_class_rec  IN          ZX_API_PUB.event_class_rec_type,
1361     p_structure_name   IN          VARCHAR2,
1362     p_structure_index  IN          BINARY_INTEGER,
1363     p_return_status    OUT NOCOPY  VARCHAR2,
1364     p_error_buffer     OUT NOCOPY  VARCHAR2) IS
1365 
1366  l_inclusive_tax_flag      VARCHAR2(1);
1367  l_reg_party_type          zx_lines.registration_party_type%TYPE;
1368  l_ptp_id                  zx_party_tax_profile.party_tax_profile_id%TYPE;
1369  l_site_ptp_id             zx_party_tax_profile.party_tax_profile_id%TYPE;
1370 
1371  CURSOR get_inclusive_flag_from_rate(
1372         c_tax_rate_id        zx_rates_b.tax_rate_id%TYPE) IS
1373  SELECT inclusive_tax_flag
1374    FROM zx_rates_b
1375   WHERE tax_rate_id = c_tax_rate_id;
1376 
1377  CURSOR get_inclusive_flag_from_ptp(
1378         c_ptp_id         zx_party_tax_profile.party_tax_profile_id%TYPE) IS
1379  SELECT inclusive_tax_flag
1380    FROM zx_party_tax_profile
1381   WHERE party_tax_profile_id = c_ptp_id;
1382   l_tax_rate_rec ZX_TDS_UTILITIES_PKG.zx_rate_info_rec_type;
1383 
1384 BEGIN
1385 
1386   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1387 
1388   IF (g_level_procedure >= g_current_runtime_level ) THEN
1389     FND_LOG.STRING(g_level_procedure,
1390       'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag.BEGIN',
1391       'ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag (+)');
1392   END IF;
1393 
1394   p_return_status:= FND_API.G_RET_STS_SUCCESS;
1395 
1396 
1397   -- IF line_amt_includes_tax_flag is 'A'/'N', tax_amt_included_flag
1398   -- is 'Y'/'N'. If line_amt_includes_tax_flag IN ('S', 'I'), need to
1399   -- determine tax_amt_included_flag from tax rate/tax registration/
1400   -- PTP/Tax.
1401   --
1402   IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt_includes_tax_flag(
1403                                                    p_structure_index) = 'A'
1404   THEN
1405     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1406                             p_tax_line_index).tax_amt_included_flag := 'Y';
1407 
1408 
1409   ELSIF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_amt_includes_tax_flag(
1410                                                         p_structure_index) = 'N'
1411   THEN
1412     ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1413                               p_tax_line_index).tax_amt_included_flag := 'N';
1414 
1415   ELSIF ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.line_amt_includes_tax_flag(
1416                                                p_structure_index) IN ('S', 'I')
1417   THEN
1418 
1419     -- Get tax_amt_included_flag from tax rate
1420     --
1421     /* use cache
1422       OPEN  get_inclusive_flag_from_rate(
1423           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(p_tax_line_index).tax_rate_id);
1424       FETCH get_inclusive_flag_from_rate INTO l_inclusive_tax_flag;
1425       CLOSE get_inclusive_flag_from_rate;
1426     */
1427 
1428             ZX_TDS_UTILITIES_PKG.get_tax_rate_info (
1429                          p_tax_rate_id  => ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1430                                                 p_tax_line_index).tax_rate_id,
1431                          p_tax_rate_rec  => l_tax_rate_rec,
1432                          p_return_status  => p_return_status,
1433                          p_error_buffer   => p_error_buffer);
1434 
1435           l_inclusive_tax_flag := l_tax_rate_rec.inclusive_tax_flag;
1436 
1437     IF l_inclusive_tax_flag IS NOT NULL THEN
1438 
1439       -- populate inclusive_tax_flag onto detail tax line
1440       --
1441       ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1442              p_tax_line_index).tax_amt_included_flag := l_inclusive_tax_flag;
1443 
1444       IF g_level_statement >= g_current_runtime_level THEN
1445         FND_LOG.STRING(g_level_statement,
1446            'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1447            'Get Inclusive_tax_flag from Tax Rate: ' ||
1448             l_inclusive_tax_flag);
1449       END IF;
1450     ELSE
1451       -- Check inclusive_tax_flag returned from tax registration
1452       -- process(inclusive_tax_flag has already been stamped onto
1453       -- detail tax line). If it is not available, get
1454       -- inclusive_tax_flag from ptp table
1455       --
1456       IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1457                          p_tax_line_index).tax_amt_included_flag IS NOT NULL THEN
1458         IF g_level_statement >= g_current_runtime_level THEN
1459           FND_LOG.STRING(g_level_statement,
1460              'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1461              'tax_amt_included_flag available from tax registration. ' ||
1462               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1463                                        p_tax_line_index).tax_amt_included_flag);
1464          END IF;
1465       ELSE
1466 
1467         -- Bug 5335580: Query inclusive_tax_flag from PTP table with registration
1468         --     party site level PTP id first. If it is not found, query
1469         --     inclusive_tax_flag using registration party PTP id.
1470         --
1471         -- Get tax inclusive flag with l_site_ptp_id
1472         --
1473         l_reg_party_type :=
1474           REPLACE(ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1475                   p_tax_line_index).registration_party_type,
1476                   'PARTY', 'SITE') || '_' || 'TAX_PROF_ID';
1477 
1478         ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value(
1479                  p_structure_name,
1480                  p_structure_index,
1481                  l_reg_party_type,
1482                  l_site_ptp_id,
1483                  p_return_status );
1484 
1485         IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1486           IF (g_level_error >= g_current_runtime_level ) THEN
1487             FND_LOG.STRING(g_level_error ,
1488               'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1489               'Incorrect return_status after call ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value().');
1490 
1491             FND_LOG.STRING(g_level_error,
1492               'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1493               'return_status: '|| p_return_status);
1494           END IF;
1495         END IF;
1496 
1497         OPEN  get_inclusive_flag_from_ptp(l_site_ptp_id);
1498         FETCH get_inclusive_flag_from_ptp INTO l_inclusive_tax_flag;
1499         CLOSE get_inclusive_flag_from_ptp;
1500 
1501         IF l_inclusive_tax_flag IS NOT NULL THEN
1502 
1503           -- populate inclusive_tax_flag onto detail tax line
1504           --
1505           ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1506                p_tax_line_index).tax_amt_included_flag := l_inclusive_tax_flag;
1507 
1508           IF g_level_statement >= g_current_runtime_level THEN
1509             FND_LOG.STRING(g_level_statement,
1510                'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1511                'Get tax_amt_included_flag from SITE PTP: ' ||
1512                 l_inclusive_tax_flag);
1513           END IF;
1514 
1515         ELSE  -- l_inclusive_tax_flag is not found from SITE PTP
1516 
1517           -- Get tax inclusive flag with l_ptp_id
1518           --
1519           l_reg_party_type:= ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1520                      p_tax_line_index).registration_party_type || '_TAX_PROF_ID';
1521 
1522           ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value(
1523                  p_structure_name,
1524                  p_structure_index,
1525                  l_reg_party_type,
1526                  l_ptp_id,
1527                  p_return_status );
1528 
1529           IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1530             IF (g_level_statement>= g_current_runtime_level ) THEN
1531               FND_LOG.STRING(g_level_statement,
1532                 'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1533                 'Incorrect return_status after call ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value().');
1534 
1535               FND_LOG.STRING(g_level_statement,
1536                 'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1537                 'return_status: '|| p_return_status);
1538             END IF;
1539           END IF;
1540 
1541           OPEN  get_inclusive_flag_from_ptp(l_ptp_id);
1542           FETCH get_inclusive_flag_from_ptp INTO l_inclusive_tax_flag;
1543           CLOSE get_inclusive_flag_from_ptp;
1544 
1545           IF l_inclusive_tax_flag IS NOT NULL THEN
1546 
1547             -- populate inclusive_tax_flag onto detail tax line
1548             --
1549             ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1550                  p_tax_line_index).tax_amt_included_flag := l_inclusive_tax_flag;
1551 
1552             IF g_level_statement >= g_current_runtime_level THEN
1553               FND_LOG.STRING(g_level_statement,
1554                  'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1555                  'Get tax_amt_included_flag from PARTY PTP: ' ||
1556                   l_inclusive_tax_flag);
1557             END IF;
1558           ELSE
1559             -- Get Get tax inclusive flag from Tax
1560             --
1561             l_inclusive_tax_flag := ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
1562                 ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1563                                p_tax_line_index).tax_id).def_inclusive_tax_flag;
1564 
1565             IF l_inclusive_tax_flag IS NOT NULL THEN
1566 
1567               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1568                  p_tax_line_index).tax_amt_included_flag := l_inclusive_tax_flag;
1569 
1570               IF g_level_statement >= g_current_runtime_level THEN
1571                 FND_LOG.STRING(g_level_statement,
1572                    'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1573                    'Get tax_amt_included_flag from tax: ' ||
1574                     l_inclusive_tax_flag);
1575               END IF;
1576 
1577             ELSE
1578 
1579               -- Bug 4778841: default l_inclusive_tax_flag to 'N' when it is NULL
1580               --
1581               l_inclusive_tax_flag := 'N';
1582               ZX_TDS_CALC_SERVICES_PUB_PKG.g_detail_tax_lines_tbl(
1583                   p_tax_line_index).tax_amt_included_flag := l_inclusive_tax_flag;
1584 
1585               IF g_level_statement >= g_current_runtime_level THEN
1586                 FND_LOG.STRING(g_level_statement,
1587                    'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1588                    'Inclusive tax flag is defaulted to N. ');
1589               END IF;
1590 
1591               ---- raise error because l_inclusive_tax_flag is not available
1592               ----
1593               --p_return_status := FND_API.G_RET_STS_ERROR;
1594               --p_error_buffer := 'Inclusive Tax Flag is not available.';
1595               --
1596               --FND_MESSAGE.SET_NAME('ZX','GENERIC_MESSAGE');
1597               --FND_MESSAGE.SET_TOKEN('GENERIC_TEXT',
1598               --              'populate_inclusive_tax_flag- '|| p_error_buffer);
1599               --FND_MSG_PUB.Add;
1600               --IF (g_level_unexpected >= g_current_runtime_level ) THEN
1601               --   FND_LOG.STRING(g_level_unexpected,
1602               --          'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1603               --           p_error_buffer);
1604               --   FND_LOG.STRING(g_level_unexpected,
1605               --          'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1606               --          'Exception :ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag (-)');
1607               --END IF;
1608               --RETURN;
1609 
1610             END IF;   -- tax_amt_included_flag is avialbale from tax
1611           END IF;     -- tax_amt_included_flag is avialbale from PARTY PTP
1612         END IF;       -- tax_amt_included_flag is avialbale from SITE PTP
1613       END IF;         -- tax_amt_included_flag is avialbale from tax registration
1614     END IF;           -- tax_amt_included_flag is avialbale from tax rate
1615   END IF;             -- line_amt_includes_tax_flag
1616 
1617   IF (g_level_procedure >= g_current_runtime_level ) THEN
1618     FND_LOG.STRING(g_level_procedure,
1619            'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag.END',
1620            'ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag (-)');
1621   END IF;
1622 
1623 EXCEPTION
1624   WHEN OTHERS THEN
1625    p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1626    p_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1627 
1628    IF (g_level_unexpected >= g_current_runtime_level ) THEN
1629      FND_LOG.STRING(g_level_unexpected,
1630             'ZX.PLSQL.ZX_TDS_TAXABLE_BASIS_DETM_PKG.populate_inclusive_tax_flag',
1631              p_error_buffer);
1632    END IF;
1633 END populate_inclusive_tax_flag;
1634 
1635 END ZX_TDS_TAXABLE_BASIS_DETM_PKG;
1636