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