DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_LINE_DEFINITIONS_PVT

Source


1 PACKAGE BODY xla_line_definitions_pvt AS
2 /* $Header: xlaamjld.pkb 120.37.12000000.3 2007/06/12 07:12:47 svellani ship $ */
3 
4 -------------------------------------------------------------------------------
5 -- declaring global types
6 -------------------------------------------------------------------------------
7 TYPE t_array_codes         IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
8 TYPE t_array_type_codes    IS TABLE OF VARCHAR2(1)  INDEX BY BINARY_INTEGER;
9 
10 --=============================================================================
11 --               *********** Local Trace Routine **********
12 --=============================================================================
13 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
14 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
15 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
16 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
17 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
18 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
19 
20 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
21 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_line_definitions_pvt';
22 
23 g_log_level           NUMBER;
24 g_log_enabled         BOOLEAN;
25 
26 PROCEDURE trace
27   (p_msg                        IN VARCHAR2
28   ,p_module                     IN VARCHAR2
29   ,p_level                      IN NUMBER) IS
30 BEGIN
31   ----------------------------------------------------------------------------
32   -- Following is for FND log.
33   ----------------------------------------------------------------------------
34   IF (p_msg IS NULL AND p_level >= g_log_level) THEN
35     fnd_log.message(p_level, p_module);
36   ELSIF p_level >= g_log_level THEN
37     fnd_log.string(p_level, p_module, p_msg);
38   END IF;
39 
40 EXCEPTION
41   WHEN xla_exceptions_pkg.application_exception THEN
42     RAISE;
43 
44   WHEN OTHERS THEN
45     xla_exceptions_pkg.raise_message
46       (p_location   => 'xla_line_definitions_pvt.trace');
47 END trace;
48 
49 
50 --=============================================================================
51 --
52 --
53 --
54 --
55 --          *********** private procedures and functions **********
56 --
57 --
58 --
59 --
60 --=============================================================================
61 
62 
63 --=============================================================================
64 --
65 -- Name: invalid_line_ac
66 -- Description: Returns true if sources for the analytical criteria invalid
67 --
68 --=============================================================================
69 FUNCTION invalid_line_ac
70   (p_application_id                   IN NUMBER
71   ,p_amb_context_code                 IN VARCHAR2
72   ,p_entity_code                      IN VARCHAR2
73   ,p_event_class_code                 IN VARCHAR2
74   ,p_ac_type_code                     IN VARCHAR2
75   ,p_ac_code                          IN VARCHAR2)
76 RETURN BOOLEAN
77 IS
78   l_return                  BOOLEAN;
79   l_exist                   VARCHAR2(1);
80 
81   CURSOR c_event_sources IS
82     SELECT 'x'
83       FROM xla_analytical_sources  a
84      WHERE application_id                 = p_application_id
85        AND amb_context_code               = p_amb_context_code
86        AND entity_code                    = p_entity_code
87        AND event_class_code               = p_event_class_code
88        AND analytical_criterion_code      = p_ac_code
89        AND analytical_criterion_type_code = p_ac_type_code;
90 
91   CURSOR c_line_analytical IS
92     SELECT 'X'
93       FROM xla_analytical_sources  a
94      WHERE application_id                 = p_application_id
95        AND amb_context_code               = p_amb_context_code
96        AND entity_code                    = p_entity_code
97        AND event_class_code               = p_event_class_code
98        AND analytical_criterion_code      = p_ac_code
99        AND analytical_criterion_type_code = p_ac_type_code
100        AND source_type_code               = 'S'
101        AND not exists (SELECT 'y'
102                          FROM xla_event_sources s
103                         WHERE s.source_application_id = a.source_application_id
104                           AND s.source_type_code      = a.source_type_code
105                           AND s.source_code           = a.source_code
106                           AND s.application_id        = p_application_id
107                           AND s.entity_code           = p_entity_code
108                           AND s.event_class_code      = p_event_class_code
109                           AND s.active_flag          = 'Y');
110 
111   CURSOR c_analytical_der_sources IS
112     SELECT source_code, source_type_code
113       FROM xla_analytical_sources  a
114      WHERE application_id                = p_application_id
115        AND amb_context_code              = p_amb_context_code
116        AND entity_code                   = p_entity_code
117        AND event_class_code              = p_event_class_code
118        AND analytical_criterion_code      = p_ac_code
119        AND analytical_criterion_type_code = p_ac_type_code
120        AND a.source_type_code            = 'D';
121 
122   l_log_module  VARCHAR2(240);
123 BEGIN
124   IF g_log_enabled THEN
125     l_log_module := C_DEFAULT_MODULE||'.invalid_line_ac';
126   END IF;
127 
128   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
129     trace(p_msg    => 'BEGIN of procedure invalid_line_ac'
130          ,p_module => l_log_module
131          ,p_level  => C_LEVEL_PROCEDURE);
132   END IF;
133 
134   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
135     trace(p_msg    => 'application_id = '||p_application_id||
136                       ',amb_context_code = '||p_amb_context_code||
137                       ',entity_code = '||p_entity_code||
138                       ',event_class_code = '||p_event_class_code||
139                       ',analytical_criterion_type_code = '||p_ac_type_code||
140                       ',analytical_criterion_code = '||p_ac_code
141          ,p_module => l_log_module
142          ,p_level  => C_LEVEL_STATEMENT);
143   END IF;
144 
145   OPEN c_event_sources;
146   FETCH c_event_sources INTO l_exist;
147   IF c_event_sources%found then
148     l_return := FALSE;
149   ELSE
150     l_return := TRUE;
151   END IF;
152   CLOSE c_event_sources;
153 
154   IF l_return = FALSE THEN
155     OPEN c_line_analytical;
156     FETCH c_line_analytical INTO l_exist;
157     IF c_line_analytical%found then
158       l_return := TRUE;
159     ELSE
160       l_return := FALSE;
161     END IF;
162     CLOSE c_line_analytical;
163   END IF;
164 
165   --
166   -- check analytical criteria has derived sources that do not belong to the event class
167   --
168   IF l_return = FALSE THEN
169     FOR l_source IN c_analytical_der_sources LOOP
170       EXIT WHEN l_return = TRUE;
171 
172       IF xla_sources_pkg.derived_source_is_invalid
173               (p_application_id           => p_application_id
174               ,p_derived_source_code      => l_source.source_code
175               ,p_derived_source_type_code => 'D'
176               ,p_event_class_code         => p_event_class_code
177               ,p_level                    => 'L')  = 'TRUE' THEN
178 
179         l_return := TRUE;
180       ELSE
181         l_return := FALSE;
182       END IF;
183     END LOOP;
184   END IF;
185 
186   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
187     trace(p_msg    => 'END of procedure invalid_line_ac'
188          ,p_module => l_log_module
189          ,p_level  => C_LEVEL_PROCEDURE);
190   END IF;
191 
192   RETURN l_return;
193 
194 EXCEPTION
195   WHEN xla_exceptions_pkg.application_exception THEN
196     IF (c_event_sources%ISOPEN) THEN
197       CLOSE c_event_sources;
198     END IF;
199     IF (c_line_analytical%ISOPEN) THEN
200       CLOSE c_line_analytical;
201     END IF;
202     IF (c_analytical_der_sources%ISOPEN) THEN
203       CLOSE c_analytical_der_sources;
204     END IF;
205     RAISE;
206 
207   WHEN OTHERS THEN
208     IF (c_event_sources%ISOPEN) THEN
209       CLOSE c_event_sources;
210     END IF;
211     IF (c_line_analytical%ISOPEN) THEN
212       CLOSE c_line_analytical;
213     END IF;
214     IF (c_analytical_der_sources%ISOPEN) THEN
215       CLOSE c_analytical_der_sources;
216     END IF;
217     xla_exceptions_pkg.raise_message
218       (p_location   => 'xla_line_definitions_pvt.invalid_line_ac');
219 
220 END invalid_line_ac;
221 
222 --=============================================================================
223 --
224 -- Name: invalid_line_desc
225 -- Description: Returns true if sources for the line description are invalid
226 --
227 --=============================================================================
228 FUNCTION invalid_line_desc
229   (p_application_id                   IN NUMBER
230   ,p_amb_context_code                 IN VARCHAR2
231   ,p_entity_code                      IN VARCHAR2
232   ,p_event_class_code                 IN VARCHAR2
233   ,p_description_type_code            IN VARCHAR2
234   ,p_description_code                 IN VARCHAR2)
235 RETURN BOOLEAN
236 IS
237   l_return          BOOLEAN;
238   l_exist           VARCHAR2(1);
239 
240   CURSOR c_desc_detail_sources IS
241     SELECT 'X'
242       FROM xla_descript_details_b d, xla_desc_priorities p
243      WHERE d.description_prio_id   = p.description_prio_id
244        AND p.application_id        = p_application_id
245        AND p.amb_context_code      = p_amb_context_code
246        AND p.description_type_code = p_description_type_code
247        AND p.description_code      = p_description_code
248        AND d.source_code           IS NOT NULL
249        AND d.source_type_code      = 'S'
250        AND NOT EXISTS (SELECT 'y'
251                          FROM xla_event_sources s
252                         WHERE s.source_application_id = d.source_application_id
253                           AND s.source_type_code      = d.source_type_code
254                           AND s.source_code           = d.source_code
255                           AND s.application_id        = p_application_id
256                           AND s.entity_code           = p_entity_code
257                           AND s.event_class_code      = p_event_class_code
258                           AND s.active_flag          = 'Y');
259 
260   CURSOR c_desc_condition_sources IS
261     SELECT 'X'
262       FROM xla_conditions c, xla_desc_priorities d
263      WHERE c.description_prio_id   = d.description_prio_id
264        AND d.application_id        = p_application_id
265        AND d.amb_context_code      = p_amb_context_code
266        AND d.description_type_code = p_description_type_code
267        AND d.description_code      = p_description_code
268        AND c.source_code           IS NOT NULL
269        AND c.source_type_code      = 'S'
270        AND NOT EXISTS (SELECT 'y'
271                          FROM xla_event_sources s
272                         WHERE s.source_application_id = c.source_application_id
273                           AND s.source_type_code      = c.source_type_code
274                           AND s.source_code           = c.source_code
275                           AND s.application_id        = p_application_id
276                           AND s.entity_code           = p_entity_code
277                           AND s.event_class_code      = p_event_class_code
278                           AND s.active_flag          = 'Y')
279     UNION
280     SELECT 'X' source_code
281       FROM xla_conditions c, xla_desc_priorities d
282      WHERE c.description_prio_id     = d.description_prio_id
283        AND d.application_id          = p_application_id
284        AND d.amb_context_code        = p_amb_context_code
285        AND d.description_type_code   = p_description_type_code
286        AND d.description_code        = p_description_code
287        AND c.value_source_code       IS NOT NULL
288        AND c.value_source_type_code  = 'S'
289        AND NOT EXISTS (SELECT 'y'
290                          FROM xla_event_sources s
291                         WHERE s.source_application_id = c.value_source_application_id
292                           AND s.source_type_code      = c.value_source_type_code
293                           AND s.source_code           = c.value_source_code
294                           AND s.application_id        = p_application_id
295                           AND s.entity_code           = p_entity_code
296                           AND s.event_class_code      = p_event_class_code
297                           AND s.active_flag          = 'Y');
298 
299   CURSOR c_desc_detail_der_sources IS
300     SELECT source_type_code, source_code
301       FROM xla_descript_details_b d, xla_desc_priorities p
302      WHERE d.description_prio_id   = p.description_prio_id
303        AND p.application_id        = p_application_id
304        AND p.amb_context_code      = p_amb_context_code
305        AND p.description_type_code = p_description_type_code
306        AND p.description_code      = p_description_code
307        AND d.source_code           IS NOT NULL
308        AND d.source_type_code      = 'D';
309 
310   CURSOR c_desc_condition_der_sources IS
311     SELECT source_type_code source_type_code, source_code source_code
312       FROM xla_conditions c, xla_desc_priorities d
313      WHERE c.description_prio_id   = d.description_prio_id
314        AND d.application_id        = p_application_id
315        AND d.amb_context_code      = p_amb_context_code
316        AND d.description_type_code = p_description_type_code
317        AND d.description_code      = p_description_code
318        AND c.source_code           IS NOT NULL
319        AND c.source_type_code      = 'D'
320     UNION
321     SELECT value_source_type_code source_type_code, value_source_code source_code
322       FROM xla_conditions c, xla_desc_priorities d
323      WHERE c.description_prio_id     = d.description_prio_id
324        AND d.application_id          = p_application_id
325        AND d.amb_context_code        = p_amb_context_code
326        AND d.description_type_code   = p_description_type_code
327        AND d.description_code        = p_description_code
328        AND c.value_source_code       IS NOT NULL
329        AND c.value_source_type_code  = 'D';
330 
331   l_log_module  VARCHAR2(240);
332 BEGIN
333   IF g_log_enabled THEN
334     l_log_module := C_DEFAULT_MODULE||'.invalid_line_desc';
335   END IF;
336 
337   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
338     trace(p_msg    => 'BEGIN of procedure invalid_line_desc'
339          ,p_module => l_log_module
340          ,p_level  => C_LEVEL_PROCEDURE);
341   END IF;
342 
343   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
344     trace(p_msg    => 'application_id = '||p_application_id||
345                       ',amb_context_code = '||p_amb_context_code||
346                       ',entity_code = '||p_entity_code||
347                       ',event_class_code = '||p_event_class_code||
348                       ',description_type_code = '||p_description_type_code||
349                       ',description_code = '||p_description_code
350          ,p_module => l_log_module
351          ,p_level  => C_LEVEL_STATEMENT);
352   END IF;
353 
354   --
355   -- check description has sources that do not belong to the event class
356   --
357   OPEN c_desc_detail_sources;
358   FETCH c_desc_detail_sources INTO l_exist;
359   IF c_desc_detail_sources%found then
360     l_return := TRUE;
361   ELSE
362     l_return := FALSE;
363   END IF;
364   CLOSE c_desc_detail_sources;
365 
366   IF l_return = FALSE THEN
367     OPEN c_desc_condition_sources;
368     FETCH c_desc_condition_sources INTO l_exist;
369     IF c_desc_condition_sources%found then
370       l_return := TRUE;
371     ELSE
372       l_return := FALSE;
373     END IF;
374     CLOSE c_desc_condition_sources;
375   END IF;
376 
377   --
378   -- check description has derived sources that do not belong to the event class
379   --
380   IF l_return = FALSE THEN
381     FOR l_source IN c_desc_detail_der_sources LOOP
382       EXIT WHEN l_return = TRUE;
383 
384       IF xla_sources_pkg.derived_source_is_invalid
385               (p_application_id           => p_application_id
386               ,p_derived_source_code      => l_source.source_code
387               ,p_derived_source_type_code => 'D'
388               ,p_event_class_code         => p_event_class_code
389               ,p_level                    => 'L')  = 'TRUE' THEN
390 
391         l_return := TRUE;
392       ELSE
393         l_return := FALSE;
394       END IF;
395     END LOOP;
396   END IF;
397 
398   IF l_return = FALSE THEN
399     FOR l_source IN c_desc_condition_der_sources LOOP
400       EXIT WHEN l_return = TRUE;
401 
402       IF xla_sources_pkg.derived_source_is_invalid
403               (p_application_id           => p_application_id
404               ,p_derived_source_code      => l_source.source_code
405               ,p_derived_source_type_code => 'D'
406               ,p_event_class_code         => p_event_class_code
407               ,p_level                    => 'L') = 'TRUE' THEN
408 
409         l_return := TRUE;
410       ELSE
411         l_return := FALSE;
412       END IF;
413     END LOOP;
414   END IF;
415 
416   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
417     trace(p_msg    => 'END of procedure invalid_line_desc'
418          ,p_module => l_log_module
419          ,p_level  => C_LEVEL_PROCEDURE);
420   END IF;
421 
422   RETURN l_return;
423 
424 EXCEPTION
425   WHEN xla_exceptions_pkg.application_exception THEN
426     IF c_desc_condition_sources%ISOPEN THEN
427       CLOSE c_desc_condition_sources;
428     END IF;
429     IF c_desc_detail_sources%ISOPEN THEN
430       CLOSE c_desc_detail_sources;
431     END IF;
432     IF c_desc_condition_der_sources%ISOPEN THEN
433       CLOSE c_desc_condition_der_sources;
434     END IF;
435     IF c_desc_detail_der_sources%ISOPEN THEN
436       CLOSE c_desc_detail_der_sources;
437     END IF;
438     RAISE;
439 
440   WHEN OTHERS THEN
441     IF c_desc_condition_sources%ISOPEN THEN
442       CLOSE c_desc_condition_sources;
443     END IF;
444     IF c_desc_detail_sources%ISOPEN THEN
445       CLOSE c_desc_detail_sources;
446     END IF;
447     IF c_desc_condition_der_sources%ISOPEN THEN
448       CLOSE c_desc_condition_der_sources;
449     END IF;
450     IF c_desc_detail_der_sources%ISOPEN THEN
451       CLOSE c_desc_detail_der_sources;
452     END IF;
453 
454     xla_exceptions_pkg.raise_message
455       (p_location   => 'xla_line_definitions_pvt.invalid_line_desc');
456 
457 END invalid_line_desc;
458 
459 --=============================================================================
460 --
461 -- Name: invalid_seg_rule
462 -- Description: Returns true if sources for the segment rule are invalid
463 --
464 --=============================================================================
465 FUNCTION invalid_seg_rule
466   (p_application_id                   IN NUMBER
467   ,p_amb_context_code                 IN VARCHAR2
468   ,p_entity_code                      IN VARCHAR2
469   ,p_event_class_code                 IN VARCHAR2
470   ,p_segment_rule_appl_id             IN NUMBER   DEFAULT NULL
471   ,p_segment_rule_type_code           IN VARCHAR2
472   ,p_segment_rule_code                IN VARCHAR2)
473 RETURN BOOLEAN
474 IS
475   l_return          BOOLEAN;
476   l_exist           VARCHAR2(1);
477 
478   CURSOR c_seg_details IS
479     SELECT 'x'
480       FROM xla_seg_rule_details d
481      WHERE application_id         = NVL(p_segment_rule_appl_id
482                                        ,p_application_id)
483        AND amb_context_code       = p_amb_context_code
484        AND segment_rule_type_code = p_segment_rule_type_code
485        AND segment_rule_code      = p_segment_rule_code;
486 
487   CURSOR c_seg_value_sources IS
488     SELECT 'x'
489       FROM xla_seg_rule_details d
490      WHERE application_id         = NVL(p_segment_rule_appl_id
491                                        ,p_application_id)
492        AND amb_context_code       = p_amb_context_code
493        AND segment_rule_type_code = p_segment_rule_type_code
494        AND segment_rule_code      = p_segment_rule_code
495        AND value_source_code      IS NOT NULL
496        AND value_source_type_code = 'S'
497        AND NOT EXISTS (SELECT 'y'
498                          FROM xla_event_sources s
499                         WHERE s.source_application_id = d.value_source_application_id
500                           AND s.source_type_code      = d.value_source_type_code
501                           AND s.source_code           = d.value_source_code
502                           AND s.application_id        = p_application_id
503                           AND s.entity_code           = p_entity_code
504                           AND s.event_class_code      = p_event_class_code
505                           AND s.active_flag          = 'Y')
506     UNION
507     SELECT 'x'
508       FROM xla_seg_rule_details d
509      WHERE application_id         = NVL(p_segment_rule_appl_id
510                                        ,p_application_id)
511        AND amb_context_code       = p_amb_context_code
512        AND segment_rule_type_code = p_segment_rule_type_code
513        AND segment_rule_code      = p_segment_rule_code
514        AND input_source_code      IS NOT NULL
515        AND input_source_type_code = 'S'
516        AND NOT EXISTS (SELECT 'y'
517                          FROM xla_event_sources s
518                         WHERE s.source_application_id = d.input_source_application_id
519                           AND s.source_type_code      = d.input_source_type_code
520                           AND s.source_code           = d.input_source_code
521                           AND s.application_id        = p_application_id
522                           AND s.entity_code           = p_entity_code
523                           AND s.event_class_code      = p_event_class_code
524                           AND s.active_flag          = 'Y');
525 
526   CURSOR c_seg_condition_sources IS
527     SELECT 'x'
528       FROM xla_conditions c, xla_seg_rule_details d
529      WHERE c.segment_rule_detail_id = d.segment_rule_detail_id
530        AND d.application_id         = NVL(p_segment_rule_appl_id
531                                          ,p_application_id)
532        AND d.amb_context_code       = p_amb_context_code
533        AND d.segment_rule_type_code = p_segment_rule_type_code
534        AND d.segment_rule_code      = p_segment_rule_code
535        AND c.source_code            IS NOT NULL
536        AND c.source_type_code       = 'S'
537        AND NOT EXISTS (SELECT 'y'
538                          FROM xla_event_sources s
539                         WHERE s.source_application_id = c.source_application_id
540                           AND s.source_type_code      = c.source_type_code
541                           AND s.source_code           = c.source_code
542                           AND s.application_id        = p_application_id
543                           AND s.entity_code           = p_entity_code
544                           AND s.event_class_code      = p_event_class_code
545                           AND s.active_flag          = 'Y')
546     UNION
547     SELECT 'x'
548       FROM xla_conditions c, xla_seg_rule_details d
549      WHERE c.segment_rule_detail_id = d.segment_rule_detail_id
550        AND d.application_id         = NVL(p_segment_rule_appl_id
551                                          ,p_application_id)
552        AND d.amb_context_code       = p_amb_context_code
553        AND d.segment_rule_type_code = p_segment_rule_type_code
554        AND d.segment_rule_code      = p_segment_rule_code
555        AND c.value_source_code      IS NOT NULL
556        AND c.value_source_type_code = 'S'
557        AND NOT EXISTS (SELECT 'y'
558                          FROM xla_event_sources s
559                         WHERE s.source_application_id = c.value_source_application_id
560                           AND s.source_type_code      = c.value_source_type_code
561                           AND s.source_code           = c.value_source_code
562                           AND s.application_id        = p_application_id
563                           AND s.entity_code           = p_entity_code
564                           AND s.event_class_code      = p_event_class_code
565                           AND s.active_flag          = 'Y');
566 
567   CURSOR c_seg_value_der_sources IS
568     SELECT value_source_type_code source_type_code, value_source_code source_code
569       FROM xla_seg_rule_details d
570      WHERE application_id         = NVL(p_segment_rule_appl_id,
571                                         p_application_id)
572        AND amb_context_code       = p_amb_context_code
573        AND segment_rule_type_code = p_segment_rule_type_code
574        AND segment_rule_code      = p_segment_rule_code
575        AND value_source_code      IS NOT NULL
576        AND value_source_type_code = 'D'
577     UNION
578     SELECT input_source_type_code source_type_code, input_source_code source_code
579       FROM xla_seg_rule_details d
580      WHERE application_id         = NVL(p_segment_rule_appl_id,
581                                         p_application_id)
582        AND amb_context_code       = p_amb_context_code
583        AND segment_rule_type_code = p_segment_rule_type_code
584        AND segment_rule_code      = p_segment_rule_code
585        AND input_source_code      IS NOT NULL
586        AND input_source_type_code = 'D';
587 
588   CURSOR c_seg_condition_der_sources IS
589     SELECT c.source_type_code source_type_code, c.source_code source_code
590       FROM xla_conditions c, xla_seg_rule_details d
591      WHERE c.segment_rule_detail_id = d.segment_rule_detail_id
592        AND d.application_id         = NVL(p_segment_rule_appl_id
593                                          ,p_application_id)
594        AND d.amb_context_code       = p_amb_context_code
595        AND d.segment_rule_type_code = p_segment_rule_type_code
596        AND d.segment_rule_code      = p_segment_rule_code
597        AND c.source_code            IS NOT NULL
598        AND c.source_type_code       = 'D'
599     UNION
600     SELECT c.value_source_type_code source_type_code, c.value_source_code source_code
601       FROM xla_conditions c, xla_seg_rule_details d
602      WHERE c.segment_rule_detail_id = d.segment_rule_detail_id
603        AND d.application_id         = NVL(p_segment_rule_appl_id
604                                          ,p_application_id)
605        AND d.amb_context_code       = p_amb_context_code
606        AND d.segment_rule_type_code = p_segment_rule_type_code
607        AND d.segment_rule_code      = p_segment_rule_code
608        AND c.value_source_code      IS NOT NULL
609        AND c.value_source_type_code = 'D';
610 
611   l_log_module  VARCHAR2(240);
612 BEGIN
613   IF g_log_enabled THEN
614     l_log_module := C_DEFAULT_MODULE||'.invalid_seg_rule';
615   END IF;
616 
617   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
618     trace(p_msg    => 'BEGIN of procedure invalid_seg_rule'
619          ,p_module => l_log_module
620          ,p_level  => C_LEVEL_PROCEDURE);
621   END IF;
622 
623   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
624     trace(p_msg    => 'application_id = '||p_application_id||
625                       ',amb_context_code = '||p_amb_context_code||
626                       ',entity_code = '||p_entity_code||
627                       ',event_class_code = '||p_event_class_code||
628                       ',segment_rule_appl_id = '||p_segment_rule_appl_id||
629                       ',segment_rule_type_code = '||p_segment_rule_type_code||
630                       ',segment_rule_code = '||p_segment_rule_code
631          ,p_module => l_log_module
632          ,p_level  => C_LEVEL_STATEMENT);
633   END IF;
634 
635   --
636   -- check if segment rules has details existing
637   --
638   OPEN c_seg_details;
639   FETCH c_seg_details INTO l_exist;
640   IF c_seg_details%notfound then
641     l_return := TRUE;
642   ELSE
643     l_return := FALSE;
644   END IF;
645   CLOSE c_seg_details;
646 
647   IF l_return = FALSE THEN
648     --
649     -- check if segment rules has sources that do not belong to the event class
650     --
651     OPEN c_seg_value_sources;
652     FETCH c_seg_value_sources INTO l_exist;
653       IF c_seg_value_sources%found then
654         l_return := TRUE;
655       ELSE
656         l_return := FALSE;
657       END IF;
658     CLOSE c_seg_value_sources;
659   END IF;
660 
661   IF l_return = FALSE THEN
662     OPEN c_seg_condition_sources;
663     FETCH c_seg_condition_sources INTO l_exist;
664     IF c_seg_condition_sources%found then
665       l_return := TRUE;
666     ELSE
667       l_return := FALSE;
668     END IF;
669     CLOSE c_seg_condition_sources;
670   END IF;
671 
672   IF l_return = FALSE THEN
673     FOR l_source IN c_seg_value_der_sources LOOP
674       EXIT WHEN l_return = TRUE;
675 
676       IF xla_sources_pkg.derived_source_is_invalid
677               (p_application_id           => p_application_id
678               ,p_derived_source_code      => l_source.source_code
679               ,p_derived_source_type_code => 'D'
680               ,p_event_class_code         => p_event_class_code
681               ,p_level                    => 'L') = 'TRUE' THEN
682 
683          l_return := TRUE;
684        ELSE
685          l_return := FALSE;
686        END IF;
687      END LOOP;
688    END IF;
689 
690    IF l_return = FALSE THEN
691      FOR l_source IN c_seg_condition_der_sources LOOP
692        EXIT WHEN l_return = TRUE;
693 
694        IF xla_sources_pkg.derived_source_is_invalid
695               (p_application_id           => p_application_id
696               ,p_derived_source_code      => l_source.source_code
697               ,p_derived_source_type_code => 'D'
698               ,p_event_class_code         => p_event_class_code
699               ,p_level                    => 'L') = 'TRUE' THEN
700 
701           l_return := TRUE;
702        ELSE
703           l_return := FALSE;
704        END IF;
705      END LOOP;
706    END IF;
707 
708   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
709     trace(p_msg    => 'END of procedure invalid_seg_rule'
710          ,p_module => l_log_module
711          ,p_level  => C_LEVEL_PROCEDURE);
712   END IF;
713 
714   RETURN l_return;
715 
716 EXCEPTION
717   WHEN xla_exceptions_pkg.application_exception THEN
718     IF c_seg_details%ISOPEN THEN
719       CLOSE c_seg_details;
720     END IF;
721     IF c_seg_condition_sources%ISOPEN THEN
722       CLOSE c_seg_condition_sources;
723     END IF;
724     IF c_seg_value_sources%ISOPEN THEN
725       CLOSE c_seg_value_sources;
726     END IF;
727     IF c_seg_condition_der_sources%ISOPEN THEN
728       CLOSE c_seg_condition_der_sources;
729     END IF;
730     IF c_seg_value_der_sources%ISOPEN THEN
731       CLOSE c_seg_value_der_sources;
732     END IF;
733     RAISE;
734 
735   WHEN OTHERS                                   THEN
736     IF c_seg_details%ISOPEN THEN
737       CLOSE c_seg_details;
738     END IF;
739     IF c_seg_condition_sources%ISOPEN THEN
740       CLOSE c_seg_condition_sources;
741     END IF;
742     IF c_seg_value_sources%ISOPEN THEN
743       CLOSE c_seg_value_sources;
744     END IF;
745     IF c_seg_condition_der_sources%ISOPEN THEN
746       CLOSE c_seg_condition_der_sources;
747     END IF;
748     IF c_seg_value_der_sources%ISOPEN THEN
749       CLOSE c_seg_value_der_sources;
750     END IF;
751 
752     xla_exceptions_pkg.raise_message
753       (p_location   => 'xla_line_definitions_pvt.invalid_seg_rule');
754 
755 END invalid_seg_rule;
756 
757 
758 --=============================================================================
759 --
760 -- Name: chk_adr_side_is_valid
761 -- Description: Validate if any JLT assignment that does not have a valid
762 --              side_code associaged
763 -- Return Value:
764 --   TRUE - if the side_codes of all ADR assignments are valid
765 --   FALSE - if the side_code of any ADR assignment is invalid
766 --
767 --=============================================================================
768 FUNCTION chk_adr_side_is_valid
769   (p_application_id                   IN NUMBER
770   ,p_amb_context_code                 IN VARCHAR2
771   ,p_event_class_code                 IN VARCHAR2
772   ,p_event_type_code                  IN VARCHAR2
773   ,p_line_definition_owner_code       IN VARCHAR2
774   ,p_line_definition_code             IN VARCHAR2)
775 RETURN BOOLEAN
776 IS
777   --
778   -- Get debit/credit line assignments that contains debit/credit/all
779   -- side_code adr assignment and gain_loss line assignments that contains
780   -- 'NA' side_code
781   --
782   CURSOR c_invalid_side_code IS
783     SELECT distinct xlj.accounting_line_type_code, xlj.accounting_line_code
784       FROM xla_line_defn_jlt_assgns xlj
785            , xla_acct_line_types_b xalt
786            , xla_line_defn_adr_assgns xld
787      WHERE xlj.application_id             = p_application_id
788        AND xlj.amb_context_code           = p_amb_context_code
789        AND xlj.event_class_code           = p_event_class_code
790        AND xlj.event_type_code            = p_event_type_code
791        AND xlj.line_definition_owner_code = p_line_definition_owner_code
792        AND xlj.line_definition_code       = p_line_definition_code
793        AND xalt.accounting_line_type_code = xlj.accounting_line_type_code
794        AND xalt.accounting_line_code      = xlj.accounting_line_code
795        AND xalt.event_class_code          = xlj.event_class_code
796        AND xalt.application_id            = xlj.application_id
797        AND xalt.amb_context_code          = xlj.amb_context_code
798        AND xlj.application_id             = xld.application_id
799        AND xlj.amb_context_code           = xld.amb_context_code
800        AND xlj.event_class_code           = xld.event_class_code
801        AND xlj.event_type_code            = xld.event_type_code
802        AND xlj.line_definition_owner_code = xld.line_definition_owner_code
803        AND xlj.line_definition_code       = xld.line_definition_code
804        AND xlj.accounting_line_type_code  = xld.accounting_line_type_code
805        AND xlj.accounting_line_code       = xld.accounting_line_code
806        AND ((xalt.natural_side_code       = 'G' AND xld.side_code ='NA')
807             OR (xalt.natural_side_code    <>'G' AND xld.side_code <> 'NA'));
808 
809   l_return      BOOLEAN;
810   l_log_module  VARCHAR2(240);
811 BEGIN
812   IF g_log_enabled THEN
813     l_log_module := C_DEFAULT_MODULE||'.chk_adr_side_is_valid';
814   END IF;
815 
816   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
817     trace(p_msg    => 'BEGIN of procedure chk_adr_side_is_valid'
818          ,p_module => l_log_module
819          ,p_level  => C_LEVEL_PROCEDURE);
820   END IF;
821 
822   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
823     trace(p_msg    => 'application_id = '||p_application_id||
824                       ',amb_context_code = '||p_amb_context_code||
825                       ',event_class_code = '||p_event_class_code||
826                       ',event_type_code = '||p_event_type_code||
827                       ',line_definition_owner_code = '||p_line_definition_owner_code||
828                       ',line_definition_code = '||p_line_definition_code
829          ,p_module => l_log_module
830          ,p_level  => C_LEVEL_STATEMENT);
831   END IF;
832 
833   l_return := TRUE;
834 
835   FOR l_adr_assgns IN c_invalid_side_code LOOP
836     l_return := FALSE;
837 
838     xla_amb_setup_err_pkg.stack_error
839               (p_message_name               => 'XLA_AB_WRONG_SIDE'
840               ,p_message_type               => 'E'
841               ,p_message_category           => 'LINE_ASSIGNMENT'
842               ,p_category_sequence          => 9
843               ,p_application_id             => p_application_id
844               ,p_amb_context_code           => p_amb_context_code
845               ,p_event_class_code           => p_event_class_code
846               ,p_event_type_code            => p_event_type_code
847               ,p_line_definition_owner_code => p_line_definition_owner_code
848               ,p_line_definition_code       => p_line_definition_code
849               ,p_accounting_line_type_code  => l_adr_assgns.accounting_line_type_code
850               ,p_accounting_line_code       => l_adr_assgns.accounting_line_code);
851   END LOOP;
852 
853   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
854     trace(p_msg    => 'END of procedure chk_adr_side_is_valid'
855          ,p_module => l_log_module
856          ,p_level  => C_LEVEL_PROCEDURE);
857   END IF;
858 
859   RETURN l_return;
860 
861 EXCEPTION
862   WHEN xla_exceptions_pkg.application_exception THEN
863     IF c_invalid_side_code%ISOPEN THEN
864       CLOSE c_invalid_side_code;
865     END IF;
866     RAISE;
867   WHEN OTHERS                                   THEN
868     xla_exceptions_pkg.raise_message
869       (p_location   => 'xla_line_definitions_pvt.chk_adr_side_is_valid');
870 END chk_adr_side_is_valid;
871 
872 --=============================================================================
873 --=============================================================================
874 --
875 -- Name: chk_adr_assgns_is_complete
876 -- Description: Validate if any JLT assignment that does not contain flexfield
877 --              assignment and does not have complete segment assignments
878 --              There are two types of ADR assignment - Regular, and ADR for
879 --              non-upgrade entries (for Federal only.)  For non-upgrade case,
880 --              the JLT must be a prior entry JLT.
881 --              All JLT assignment that is not for prior entry must have ADR
882 --              assignment. (For prior entry, ADR assignment may exist for
883 --              upgrade ADR for federal.)
884 --              If there is ADR assignment, it must be complete.
885 -- Return Value:
886 --   TRUE - if all ADR assignments are valid
887 --   FALSE - if any ADR assignment is invalid
888 --
889 --=============================================================================
890 FUNCTION chk_adr_assgns_is_complete
891   (p_application_id                   IN NUMBER
892   ,p_amb_context_code                 IN VARCHAR2
893   ,p_event_class_code                 IN VARCHAR2
894   ,p_event_type_code                  IN VARCHAR2
895   ,p_line_definition_owner_code       IN VARCHAR2
896   ,p_line_definition_code             IN VARCHAR2)
897 RETURN BOOLEAN
898 IS
899   CURSOR c_coa_id IS
900     SELECT xld.accounting_coa_id
901       FROM xla_line_definitions_b xld
902      WHERE xld.application_id             = p_application_id
903        AND xld.amb_context_code           = p_amb_context_code
904        AND xld.event_class_code           = p_event_class_code
905        AND xld.event_type_code            = p_event_type_code
906        AND xld.line_definition_owner_code = p_line_definition_owner_code
907        AND xld.line_definition_code       = p_line_definition_code;
908 
909   -- For JLT assignment of non-prior-entry JLT, there must be ADR assignment.
910   CURSOR c_invalid_no_adr IS
911     SELECT distinct xlj.accounting_line_type_code, xlj.accounting_line_code
912       FROM xla_line_defn_jlt_assgns xlj
913           ,xla_acct_line_types_b jlt
914      WHERE xlj.application_id             = p_application_id
915        AND xlj.amb_context_code           = p_amb_context_code
916        AND xlj.event_class_code           = p_event_class_code
917        AND xlj.event_type_code            = p_event_type_code
918        AND xlj.line_definition_owner_code = p_line_definition_owner_code
919        AND xlj.line_definition_code       = p_line_definition_code
920        AND xlj.active_flag                = 'Y'
921        AND xlj.application_id             = jlt.application_id
922        AND xlj.amb_context_code           = jlt.amb_context_code
923        AND xlj.event_class_code           = jlt.event_class_code
924        AND xlj.accounting_line_type_code  = jlt.accounting_line_type_code
925        AND xlj.accounting_line_code       = jlt.accounting_line_code
926        AND jlt.business_method_code      <> 'PRIOR_ENTRY'
927        AND NOT EXISTS
928                  (SELECT 1 FROM xla_line_defn_adr_assgns xad1
929                    WHERE xlj.application_id             = xad1.application_id
930                      AND xlj.amb_context_code           = xad1.amb_context_code
931                      AND xlj.event_class_code           = xad1.event_class_code
932                      AND xlj.event_type_code            = xad1.event_type_code
933                      AND xlj.line_definition_owner_code = xad1.line_definition_owner_code
934                      AND xlj.line_definition_code       = xad1.line_definition_code
935                      AND xlj.accounting_line_type_code  = xad1.accounting_line_type_code
936                      AND xlj.accounting_line_code       = xad1.accounting_line_code);
937 
938 
939   --
940   -- If ADR assignment exists, the ADR assignment must be complete
941   --
942   CURSOR c_invalid_adrs_no_coa IS
943     SELECT distinct xlj.accounting_line_type_code, xlj.accounting_line_code
944       FROM xla_line_defn_jlt_assgns xlj
945           --,xla_acct_line_types_b jlt
946      WHERE xlj.application_id             = p_application_id
947        AND xlj.amb_context_code           = p_amb_context_code
948        AND xlj.event_class_code           = p_event_class_code
949        AND xlj.event_type_code            = p_event_type_code
950        AND xlj.line_definition_owner_code = p_line_definition_owner_code
951        AND xlj.line_definition_code       = p_line_definition_code
952        AND xlj.active_flag                = 'Y'
953        --AND xlj.application_id             = jlt.application_id
954        --AND xlj.amb_context_code           = jlt.amb_context_code
955        --AND xlj.event_class_code           = jlt.event_class_code
956        --AND xlj.accounting_line_type_code  = jlt.accounting_line_type_code
957        --AND xlj.accounting_line_code       = jlt.accounting_line_code
958        --AND jlt.business_method_code      <> 'PRIOR_ENTRY'
959        AND EXISTS (SELECT 1 FROM xla_line_defn_adr_assgns xad1
960                    WHERE xlj.application_id             = xad1.application_id
961                      AND xlj.amb_context_code           = xad1.amb_context_code
962                      AND xlj.event_class_code           = xad1.event_class_code
963                      AND xlj.event_type_code            = xad1.event_type_code
964                      AND xlj.line_definition_owner_code = xad1.line_definition_owner_code
965                      AND xlj.line_definition_code       = xad1.line_definition_code
966                      AND xlj.accounting_line_type_code  = xad1.accounting_line_type_code
967                      AND xlj.accounting_line_code       = xad1.accounting_line_code )
968        AND 2<>
969            (SELECT nvl(sum(decode(side_code, 'ALL', 2, 'NA', 2, 1)), 0)
970               FROM xla_line_defn_adr_assgns xad
971              WHERE xlj.application_id             = xad.application_id
972                AND xlj.amb_context_code           = xad.amb_context_code
973                AND xlj.event_class_code           = xad.event_class_code
974                AND xlj.event_type_code            = xad.event_type_code
975                AND xlj.line_definition_owner_code = xad.line_definition_owner_code
976                AND xlj.line_definition_code       = xad.line_definition_code
977                AND xlj.accounting_line_type_code  = xad.accounting_line_type_code
978                AND xlj.accounting_line_code       = xad.accounting_line_code
979                AND xad.flexfield_segment_code     = 'ALL');
980 
981   l_coa_id      INTEGER;
982 
983   --
984   -- If ADR assignment exists, it must be complete.
985   --
986   CURSOR c_invalid_adrs IS
987     SELECT distinct xlj.accounting_line_type_code, xlj.accounting_line_code
988       FROM xla_line_defn_jlt_assgns xlj
989           ,fnd_id_flex_segments_vl  fif
990    --       , xla_acct_line_types_b jlt
991      WHERE fif.application_id             = 101
992        AND fif.id_flex_code               = 'GL#'
993        AND fif.id_flex_num                = l_coa_id
994        AND fif.enabled_flag               = 'Y'
995        AND xlj.application_id             = p_application_id
996        AND xlj.amb_context_code           = p_amb_context_code
997        AND xlj.event_class_code           = p_event_class_code
998        AND xlj.event_type_code            = p_event_type_code
999        AND xlj.line_definition_owner_code = p_line_definition_owner_code
1000        AND xlj.line_definition_code       = p_line_definition_code
1001        AND xlj.active_flag                = 'Y'
1002 --       AND xlj.application_id             = jlt.application_id
1003 --       AND xlj.amb_context_code           = jlt.amb_context_code
1004 --       AND xlj.event_class_code           = jlt.event_class_code
1005 --       AND xlj.accounting_line_type_code  = jlt.accounting_line_type_code
1006 --       AND xlj.accounting_line_code       = jlt.accounting_line_code
1007 --       AND jlt.business_method_code      <> 'PRIOR_ENTRY'     -- Bug 4922099
1008        AND EXISTS (SELECT 1 FROM xla_line_defn_adr_assgns xad1
1009                    WHERE xlj.application_id             = xad1.application_id
1010                      AND xlj.amb_context_code           = xad1.amb_context_code
1011                      AND xlj.event_class_code           = xad1.event_class_code
1012                      AND xlj.event_type_code            = xad1.event_type_code
1013                      AND xlj.line_definition_owner_code = xad1.line_definition_owner_code
1014                      AND xlj.line_definition_code       = xad1.line_definition_code
1015                      AND xlj.accounting_line_type_code  = xad1.accounting_line_type_code
1016                      AND xlj.accounting_line_code       = xad1.accounting_line_code )
1017        AND (
1018          (NOT EXISTS
1019            (SELECT 'Y'
1020               FROM xla_line_defn_adr_assgns xad
1021              WHERE xlj.application_id             = xad.application_id
1022                AND xlj.amb_context_code           = xad.amb_context_code
1023                AND xlj.event_class_code           = xad.event_class_code
1024                AND xlj.event_type_code            = xad.event_type_code
1025                AND xlj.line_definition_owner_code = xad.line_definition_owner_code
1026                AND xlj.line_definition_code       = xad.line_definition_code
1027                AND xlj.accounting_line_type_code  = xad.accounting_line_type_code
1028                AND xlj.accounting_line_code       = xad.accounting_line_code
1029                AND xad.flexfield_segment_code     = fif.application_column_name
1030                AND xad.side_code in ('NA', 'CREDIT', 'ALL'))
1031           AND NOT EXISTS
1032            (SELECT 'Y'
1033               FROM xla_line_defn_adr_assgns xad
1034              WHERE xlj.application_id             = xad.application_id
1035                AND xlj.amb_context_code           = xad.amb_context_code
1036                AND xlj.event_class_code           = xad.event_class_code
1037                AND xlj.event_type_code            = xad.event_type_code
1038                AND xlj.line_definition_owner_code = xad.line_definition_owner_code
1039                AND xlj.line_definition_code       = xad.line_definition_code
1040                AND xlj.accounting_line_type_code  = xad.accounting_line_type_code
1041                AND xlj.accounting_line_code       = xad.accounting_line_code
1042                AND xad.flexfield_segment_code     = 'ALL'
1043                AND xad.side_code in ('NA', 'CREDIT', 'ALL')))
1044          OR ( NOT EXISTS
1045            (SELECT 'Y'
1046               FROM xla_line_defn_adr_assgns xad
1047              WHERE xlj.application_id             = xad.application_id
1048                AND xlj.amb_context_code           = xad.amb_context_code
1049                AND xlj.event_class_code           = xad.event_class_code
1050                AND xlj.event_type_code            = xad.event_type_code
1051                AND xlj.line_definition_owner_code = xad.line_definition_owner_code
1052                AND xlj.line_definition_code       = xad.line_definition_code
1053                AND xlj.accounting_line_type_code  = xad.accounting_line_type_code
1054                AND xlj.accounting_line_code       = xad.accounting_line_code
1055                AND xad.flexfield_segment_code     = fif.application_column_name
1056                AND xad.side_code in ('NA', 'DEBIT', 'ALL'))
1057           AND NOT EXISTS
1058            (SELECT 'Y'
1059               FROM xla_line_defn_adr_assgns xad
1060              WHERE xlj.application_id             = xad.application_id
1061                AND xlj.amb_context_code           = xad.amb_context_code
1062                AND xlj.event_class_code           = xad.event_class_code
1063                AND xlj.event_type_code            = xad.event_type_code
1064                AND xlj.line_definition_owner_code = xad.line_definition_owner_code
1065                AND xlj.line_definition_code       = xad.line_definition_code
1066                AND xlj.accounting_line_type_code  = xad.accounting_line_type_code
1067                AND xlj.accounting_line_code       = xad.accounting_line_code
1068                AND xad.flexfield_segment_code     = 'ALL'
1069                AND xad.side_code in ('NA', 'DEBIT', 'ALL'))));
1070 
1071   l_return      BOOLEAN;
1072   l_log_module  VARCHAR2(240);
1073 BEGIN
1074   IF g_log_enabled THEN
1075     l_log_module := C_DEFAULT_MODULE||'.chk_adr_assgns_is_complete';
1076   END IF;
1077 
1078   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1079     trace(p_msg    => 'BEGIN of procedure chk_adr_assgns_is_complete'
1080          ,p_module => l_log_module
1081          ,p_level  => C_LEVEL_PROCEDURE);
1082   END IF;
1083 
1084   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1085     trace(p_msg    => 'application_id = '||p_application_id||
1086                       ',amb_context_code = '||p_amb_context_code||
1087                       ',event_class_code = '||p_event_class_code||
1088                       ',event_type_code = '||p_event_type_code||
1089                       ',line_definition_owner_code = '||p_line_definition_owner_code||
1090                       ',line_definition_code = '||p_line_definition_code
1091          ,p_module => l_log_module
1092          ,p_level  => C_LEVEL_STATEMENT);
1093   END IF;
1094 
1095   l_return := TRUE;
1096 
1097   FOR l_adr_assgns IN c_invalid_no_adr LOOP
1098     l_return := FALSE;
1099 
1100     xla_amb_setup_err_pkg.stack_error
1101               (p_message_name               => 'XLA_AB_INCOMPLETE_ACCT'
1102               ,p_message_type               => 'E'
1103               ,p_message_category           => 'LINE_ASSIGNMENT'
1104               ,p_category_sequence          => 9
1105               ,p_application_id             => p_application_id
1106               ,p_amb_context_code           => p_amb_context_code
1107               ,p_event_class_code           => p_event_class_code
1108               ,p_event_type_code            => p_event_type_code
1109               ,p_line_definition_owner_code => p_line_definition_owner_code
1110               ,p_line_definition_code       => p_line_definition_code
1111               ,p_accounting_line_type_code  => l_adr_assgns.accounting_line_type_code
1112               ,p_accounting_line_code       => l_adr_assgns.accounting_line_code);
1113   END LOOP;
1114 
1115   OPEN c_coa_id;
1116   FETCH c_coa_id INTO l_coa_id;
1117   CLOSE c_coa_id;
1118 
1119   IF (l_coa_id IS NULL) THEN
1120     --
1121     -- Check if all JLT assignments contain ADR assignments
1122     --
1123     FOR l_adr_assgns IN c_invalid_adrs_no_coa LOOP
1124       l_return := FALSE;
1125 
1126       xla_amb_setup_err_pkg.stack_error
1127               (p_message_name               => 'XLA_AB_INCOMPLETE_ACCT'
1128               ,p_message_type               => 'E'
1129               ,p_message_category           => 'LINE_ASSIGNMENT'
1130               ,p_category_sequence          => 9
1131               ,p_application_id             => p_application_id
1132               ,p_amb_context_code           => p_amb_context_code
1133               ,p_event_class_code           => p_event_class_code
1134               ,p_event_type_code            => p_event_type_code
1135               ,p_line_definition_owner_code => p_line_definition_owner_code
1136               ,p_line_definition_code       => p_line_definition_code
1137               ,p_accounting_line_type_code  => l_adr_assgns.accounting_line_type_code
1138               ,p_accounting_line_code       => l_adr_assgns.accounting_line_code);
1139     END LOOP;
1140   ELSE
1141     FOR l_adr_assgns IN c_invalid_adrs LOOP
1142       l_return := FALSE;
1143 
1144       xla_amb_setup_err_pkg.stack_error
1145               (p_message_name               => 'XLA_AB_INCOMPLETE_ACCT'
1146               ,p_message_type               => 'E'
1147               ,p_message_category           => 'LINE_ASSIGNMENT'
1148               ,p_category_sequence          => 9
1149               ,p_application_id             => p_application_id
1150               ,p_amb_context_code           => p_amb_context_code
1151               ,p_event_class_code           => p_event_class_code
1152               ,p_event_type_code            => p_event_type_code
1153               ,p_line_definition_owner_code => p_line_definition_owner_code
1154               ,p_line_definition_code       => p_line_definition_code
1155               ,p_accounting_line_type_code  => l_adr_assgns.accounting_line_type_code
1156               ,p_accounting_line_code       => l_adr_assgns.accounting_line_code);
1157     END LOOP;
1158   END IF;
1159 
1160   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1161     trace(p_msg    => 'END of procedure chk_adr_assgns_is_complete'
1162          ,p_module => l_log_module
1163          ,p_level  => C_LEVEL_PROCEDURE);
1164   END IF;
1165 
1166   RETURN l_return;
1167 
1168 EXCEPTION
1169   WHEN xla_exceptions_pkg.application_exception THEN
1170     IF c_invalid_adrs%ISOPEN THEN
1171       CLOSE c_invalid_adrs;
1172     END IF;
1173     RAISE;
1174   WHEN OTHERS                                   THEN
1175     xla_exceptions_pkg.raise_message
1176       (p_location   => 'xla_line_definitions_pvt.chk_adr_assgns_is_complete');
1177 END chk_adr_assgns_is_complete;
1178 
1179 --=============================================================================
1180 --
1181 -- Name: chk_adr_is_enabled
1182 -- Description:
1183 --
1184 --=============================================================================
1185 FUNCTION chk_adr_is_enabled
1186   (p_application_id                   IN NUMBER
1187   ,p_amb_context_code                 IN VARCHAR2
1188   ,p_event_class_code                 IN VARCHAR2
1189   ,p_event_type_code                  IN VARCHAR2
1190   ,p_line_definition_owner_code       IN VARCHAR2
1191   ,p_line_definition_code             IN VARCHAR2)
1192 RETURN BOOLEAN
1193 IS
1194   CURSOR c_invalid_adrs IS
1195     SELECT distinct xsr.segment_rule_type_code, xsr.segment_rule_code
1196       FROM xla_line_defn_jlt_assgns xjl
1197           ,xla_line_defn_adr_assgns xad
1198           ,xla_seg_rules_b          xsr
1199      WHERE xsr.application_id             = xad.application_id
1200        AND xsr.amb_context_code           = xad.amb_context_code
1201        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
1202        AND xsr.segment_rule_code          = xad.segment_rule_code
1203        AND xsr.enabled_flag               <> 'Y'
1204        AND xad.application_id             = xjl.application_id
1205        AND xad.amb_context_code           = xjl.amb_context_code
1206        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
1207        AND xad.line_definition_code       = xjl.line_definition_code
1208        AND xad.event_class_code           = xjl.event_class_code
1209        AND xad.event_type_code            = xjl.event_type_code
1210        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
1211        AND xad.accounting_line_code       = xjl.accounting_line_code
1212        AND xad.segment_rule_code           is not null
1213        AND xjl.application_id             = p_application_id
1214        AND xjl.amb_context_code           = p_amb_context_code
1215        AND xjl.event_class_code           = p_event_class_code
1216        AND xjl.event_type_code            = p_event_type_code
1217        AND xjl.line_definition_owner_code = p_line_definition_owner_code
1218        AND xjl.line_definition_code       = p_line_definition_code
1219        AND xjl.active_flag                = 'Y';
1220 
1221   CURSOR c_adr IS
1222     SELECT distinct xsr.application_id, xsr.amb_context_code,
1223                     xsr.segment_rule_type_code, xsr.segment_rule_code
1224       FROM xla_line_defn_jlt_assgns xjl
1225           ,xla_line_defn_adr_assgns xad
1226           ,xla_seg_rules_b          xsr
1227      WHERE xsr.application_id             = xad.application_id
1228        AND xsr.amb_context_code           = xad.amb_context_code
1229        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
1230        AND xsr.segment_rule_code          = xad.segment_rule_code
1231        AND xad.application_id             = xjl.application_id
1232        AND xad.amb_context_code           = xjl.amb_context_code
1233        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
1234        AND xad.line_definition_code       = xjl.line_definition_code
1235        AND xad.event_class_code           = xjl.event_class_code
1236        AND xad.event_type_code            = xjl.event_type_code
1237        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
1238        AND xad.accounting_line_code       = xjl.accounting_line_code
1239        AND xad.segment_rule_code           is not null
1240        AND xjl.application_id             = p_application_id
1241        AND xjl.amb_context_code           = p_amb_context_code
1242        AND xjl.event_class_code           = p_event_class_code
1243        AND xjl.event_type_code            = p_event_type_code
1244        AND xjl.line_definition_owner_code = p_line_definition_owner_code
1245        AND xjl.line_definition_code       = p_line_definition_code
1246        AND xjl.active_flag                = 'Y';
1247 
1248     l_adr     c_adr%rowtype;
1249 
1250     CURSOR c_invalid_child_adr IS
1251     SELECT xsd.value_segment_rule_type_code, xsd.value_segment_rule_code
1252       FROM xla_seg_rule_details xsd
1253           ,xla_seg_rules_b      xsr
1254      WHERE xsd.application_id                   = l_adr.application_id
1255        AND xsd.amb_context_code                 = l_adr.amb_context_code
1256        AND xsd.segment_rule_type_code           = l_adr.segment_rule_type_code
1257        AND xsd.segment_rule_code                = l_adr.segment_rule_code
1258        AND xsd.value_type_code                  = 'A'
1259        AND xsd.value_segment_rule_appl_id   = xsr.application_id
1260        AND xsd.value_segment_rule_type_code = xsr.segment_rule_type_code
1261        AND xsd.value_segment_rule_code      = xsr.segment_rule_code
1262        AND xsd.amb_context_code             = xsr.amb_context_code
1263        AND xsr.enabled_flag                <> 'Y';
1264 
1265   l_return      BOOLEAN;
1266   l_log_module  VARCHAR2(240);
1267 BEGIN
1268   IF g_log_enabled THEN
1269     l_log_module := C_DEFAULT_MODULE||'.chk_adr_is_enabled';
1270   END IF;
1271 
1272   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1273     trace(p_msg    => 'BEGIN of procedure chk_adr_is_enabled'
1274          ,p_module => l_log_module
1275          ,p_level  => C_LEVEL_PROCEDURE);
1276   END IF;
1277 
1278   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1279     trace(p_msg    => 'application_id = '||p_application_id||
1280                       ',amb_context_code = '||p_amb_context_code||
1281                       ',event_class_code = '||p_event_class_code||
1282                       ',event_type_code = '||p_event_type_code||
1283                       ',line_definition_owner_code = '||p_line_definition_owner_code||
1284                       ',line_definition_code = '||p_line_definition_code
1285          ,p_module => l_log_module
1286          ,p_level  => C_LEVEL_STATEMENT);
1287   END IF;
1288 
1289   l_return := TRUE;
1290 
1291   FOR l_err IN c_invalid_adrs LOOP
1292     l_return := FALSE;
1293 
1294     xla_amb_setup_err_pkg.stack_error
1295               (p_message_name               => 'XLA_AB_DISABLD_SEG_RULE'
1296               ,p_message_type               => 'E'
1297               ,p_message_category           => 'SEG_RULE'
1298               ,p_category_sequence          => 13
1299               ,p_application_id             => p_application_id
1300               ,p_amb_context_code           => p_amb_context_code
1301               ,p_event_class_code           => p_event_class_code
1302               ,p_event_type_code            => p_event_type_code
1303               ,p_line_definition_owner_code => p_line_definition_owner_code
1304               ,p_line_definition_code       => p_line_definition_code
1305               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
1306               ,p_segment_rule_code          => l_err.segment_rule_code);
1307 
1308   END LOOP;
1309 
1310   OPEN c_adr;
1311   LOOP
1312      FETCH c_adr
1313       INTO l_adr;
1314      EXIT WHEN c_adr%notfound;
1315 
1316      FOR l_child_adr IN c_invalid_child_adr LOOP
1317          l_return := FALSE;
1318 
1319          xla_amb_setup_err_pkg.stack_error
1320               (p_message_name               => 'XLA_AB_DISABLD_SEG_RULE'
1321               ,p_message_type               => 'E'
1322               ,p_message_category           => 'SEG_RULE'
1323               ,p_category_sequence          => 13
1324               ,p_application_id             => p_application_id
1325               ,p_amb_context_code           => p_amb_context_code
1326               ,p_event_class_code           => p_event_class_code
1327               ,p_event_type_code            => p_event_type_code
1328               ,p_line_definition_owner_code => p_line_definition_owner_code
1329               ,p_line_definition_code       => p_line_definition_code
1330               ,p_segment_rule_type_code     => l_child_adr.value_segment_rule_type_code
1331               ,p_segment_rule_code          => l_child_adr.value_segment_rule_code);
1332 
1333      END LOOP;
1334   END LOOP;
1335   CLOSE c_adr;
1336 
1337   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1338     trace(p_msg    => 'END of procedure chk_adr_is_enabled'
1339          ,p_module => l_log_module
1340          ,p_level  => C_LEVEL_PROCEDURE);
1341   END IF;
1342 
1343   RETURN l_return;
1344 
1345 EXCEPTION
1346   WHEN xla_exceptions_pkg.application_exception THEN
1347     IF c_invalid_adrs%ISOPEN THEN
1348       CLOSE c_invalid_adrs;
1349     END IF;
1350     RAISE;
1351 
1352   WHEN OTHERS                                   THEN
1353     IF c_invalid_adrs%ISOPEN THEN
1354       CLOSE c_invalid_adrs;
1355     END IF;
1356     xla_exceptions_pkg.raise_message
1357       (p_location   => 'xla_line_definitions_pvt.chk_adr_is_enabled');
1358 END chk_adr_is_enabled;
1359 
1360 --=============================================================================
1361 --
1362 -- Name: chk_adr_has_details
1363 -- Description:
1364 --
1365 --=============================================================================
1366 FUNCTION chk_adr_has_details
1367   (p_application_id                   IN NUMBER
1368   ,p_amb_context_code                 IN VARCHAR2
1369   ,p_event_class_code                 IN VARCHAR2
1370   ,p_event_type_code                  IN VARCHAR2
1371   ,p_line_definition_owner_code       IN VARCHAR2
1372   ,p_line_definition_code             IN VARCHAR2)
1373 RETURN BOOLEAN
1374 IS
1375   CURSOR c_invalid_adrs IS
1376    SELECT distinct xad.segment_rule_code, xad.segment_rule_type_code
1377      FROM xla_line_defn_adr_assgns xad, xla_line_defn_jlt_assgns xjl
1378     WHERE xad.application_id             = xjl.application_id
1379       AND xad.amb_context_code           = xjl.amb_context_code
1380       AND xad.event_class_code           = xjl.event_class_code
1381       AND xad.event_type_code            = xjl.event_type_code
1382       AND xad.line_definition_code       = xjl.line_definition_code
1383       AND xad.line_definition_owner_code = xjl.line_definition_owner_code
1384       AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
1385       AND xad.accounting_line_code       = xjl.accounting_line_code
1386       AND xjl.application_id             = p_application_id
1387       AND xjl.amb_context_code           = p_amb_context_code
1388       AND xjl.event_class_code           = p_event_class_code
1389       AND xjl.event_type_code            = p_event_type_code
1390       AND xjl.line_definition_owner_code = p_line_definition_owner_code
1391       AND xjl.line_definition_code       = p_line_definition_code
1392       AND xjl.active_flag                = 'Y'
1393       AND xad.segment_rule_code          is not null
1394       AND NOT EXISTS
1395           (SELECT 'x'
1396              FROM xla_seg_rule_details xsr
1397             WHERE xsr.application_id         = NVL(xad.segment_rule_appl_id,xad.application_id)
1398               AND xsr.amb_context_code       = xad.amb_context_code
1399               AND xsr.segment_rule_type_code = xad.segment_rule_type_code
1400               AND xsr.segment_rule_code      = xad.segment_rule_code);
1401 
1402   CURSOR c_adr IS
1403     SELECT distinct xsr.application_id, xsr.amb_context_code,
1404                     xsr.segment_rule_type_code, xsr.segment_rule_code
1405       FROM xla_line_defn_jlt_assgns xjl
1406           ,xla_line_defn_adr_assgns xad
1407           ,xla_seg_rules_b          xsr
1408      WHERE xsr.application_id             = xad.application_id
1409        AND xsr.amb_context_code           = xad.amb_context_code
1410        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
1411        AND xsr.segment_rule_code          = xad.segment_rule_code
1412        AND xad.application_id             = xjl.application_id
1413        AND xad.amb_context_code           = xjl.amb_context_code
1414        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
1415        AND xad.line_definition_code       = xjl.line_definition_code
1416        AND xad.event_class_code           = xjl.event_class_code
1417        AND xad.event_type_code            = xjl.event_type_code
1418        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
1419        AND xad.accounting_line_code       = xjl.accounting_line_code
1420        AND xad.segment_rule_code           is not null
1421        AND xjl.application_id             = p_application_id
1422        AND xjl.amb_context_code           = p_amb_context_code
1423        AND xjl.event_class_code           = p_event_class_code
1424        AND xjl.event_type_code            = p_event_type_code
1425        AND xjl.line_definition_owner_code = p_line_definition_owner_code
1426        AND xjl.line_definition_code       = p_line_definition_code
1427        AND xjl.active_flag                = 'Y';
1428 
1429     l_adr     c_adr%rowtype;
1430 
1431     CURSOR c_invalid_child_adr IS
1432     SELECT xsd.value_segment_rule_type_code, xsd.value_segment_rule_code
1433       FROM xla_seg_rule_details xsd
1434      WHERE xsd.application_id                   = l_adr.application_id
1435        AND xsd.amb_context_code                 = l_adr.amb_context_code
1436        AND xsd.segment_rule_type_code           = l_adr.segment_rule_type_code
1437        AND xsd.segment_rule_code                = l_adr.segment_rule_code
1438        AND xsd.value_type_code                  = 'A'
1439        AND not exists (SELECT 'x'
1440                          FROM xla_seg_rule_details xcd
1441                         WHERE xcd.application_id                   = xsd.value_segment_rule_appl_id
1442                           AND xcd.amb_context_code                 = xsd.amb_context_code
1443                           AND xcd.segment_rule_type_code           = xsd.value_segment_rule_type_code
1444                           AND xcd.segment_rule_code                = xsd.value_segment_rule_code);
1445 
1446   l_return      BOOLEAN;
1447   l_log_module  VARCHAR2(240);
1448 BEGIN
1449   IF g_log_enabled THEN
1450     l_log_module := C_DEFAULT_MODULE||'.chk_adr_has_details';
1451   END IF;
1452 
1453   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1454     trace(p_msg    => 'BEGIN of procedure chk_adr_has_details'
1455          ,p_module => l_log_module
1456          ,p_level  => C_LEVEL_PROCEDURE);
1457   END IF;
1458 
1459   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1460     trace(p_msg    => 'application_id = '||p_application_id||
1461                       ',amb_context_code = '||p_amb_context_code||
1462                       ',event_class_code = '||p_event_class_code||
1463                       ',event_type_code = '||p_event_type_code||
1464                       ',line_definition_owner_code = '||p_line_definition_owner_code||
1465                       ',line_definition_code = '||p_line_definition_code
1466          ,p_module => l_log_module
1467          ,p_level  => C_LEVEL_STATEMENT);
1468   END IF;
1469 
1470   l_return := TRUE;
1471 
1472   FOR l_err IN c_invalid_adrs LOOP
1473     l_return := FALSE;
1474 
1475     xla_amb_setup_err_pkg.stack_error
1476               (p_message_name               => 'XLA_AB_SR_NO_DETAIL'
1477               ,p_message_type               => 'E'
1478               ,p_message_category           => 'SEG_RULE'
1479               ,p_category_sequence          => 13
1480               ,p_application_id             => p_application_id
1481               ,p_amb_context_code           => p_amb_context_code
1482               ,p_event_class_code           => p_event_class_code
1483               ,p_event_type_code            => p_event_type_code
1484               ,p_line_definition_owner_code => p_line_definition_owner_code
1485               ,p_line_definition_code       => p_line_definition_code
1486               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
1487               ,p_segment_rule_code          => l_err.segment_rule_code);
1488   END LOOP;
1489 
1490   OPEN c_adr;
1491   LOOP
1492      FETCH c_adr
1493       INTO l_adr;
1494      EXIT WHEN c_adr%notfound;
1495 
1496      FOR l_child_adr IN c_invalid_child_adr LOOP
1497          l_return := FALSE;
1498 
1499          xla_amb_setup_err_pkg.stack_error
1500               (p_message_name               => 'XLA_AB_SR_NO_DETAIL'
1501               ,p_message_type               => 'E'
1502               ,p_message_category           => 'SEG_RULE'
1503               ,p_category_sequence          => 13
1504               ,p_application_id             => p_application_id
1505               ,p_amb_context_code           => p_amb_context_code
1506               ,p_event_class_code           => p_event_class_code
1507               ,p_event_type_code            => p_event_type_code
1508               ,p_line_definition_owner_code => p_line_definition_owner_code
1509               ,p_line_definition_code       => p_line_definition_code
1510               ,p_segment_rule_type_code     => l_child_adr.value_segment_rule_type_code
1511               ,p_segment_rule_code          => l_child_adr.value_segment_rule_code);
1512      END LOOP;
1513   END LOOP;
1514   CLOSE c_adr;
1515 
1516   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1517     trace(p_msg    => 'END of procedure chk_adr_has_details'
1518          ,p_module => l_log_module
1519          ,p_level  => C_LEVEL_PROCEDURE);
1520   END IF;
1521 
1522   RETURN l_return;
1523 
1524 EXCEPTION
1525   WHEN xla_exceptions_pkg.application_exception THEN
1526     IF c_invalid_adrs%ISOPEN THEN
1527       CLOSE c_invalid_adrs;
1528     END IF;
1529     RAISE;
1530 
1531   WHEN OTHERS                                   THEN
1532     IF c_invalid_adrs%ISOPEN THEN
1533       CLOSE c_invalid_adrs;
1534     END IF;
1535     xla_exceptions_pkg.raise_message
1536       (p_location   => 'xla_line_definitions_pvt.chk_adr_has_details');
1537 END chk_adr_has_details;
1538 
1539 
1540 --=============================================================================
1541 --
1542 -- Name: chk_adr_invalid_source_in_cond
1543 -- Description: Check if all sources used in the ADR condition is valid
1544 --
1545 --=============================================================================
1546 FUNCTION chk_adr_invalid_source_in_cond
1547   (p_application_id                   IN NUMBER
1548   ,p_amb_context_code                 IN VARCHAR2
1549   ,p_event_class_code                 IN VARCHAR2
1550   ,p_event_type_code                  IN VARCHAR2
1551   ,p_line_definition_owner_code       IN VARCHAR2
1552   ,p_line_definition_code             IN VARCHAR2)
1553 RETURN BOOLEAN
1554 IS
1555   --
1556   -- Get all JLT that have sources that do not belong to the event class of the
1557   -- line definition
1558   --
1559   CURSOR c_invalid_sources IS
1560    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
1561           xco.source_type_code, xco.source_code
1562      FROM xla_conditions           xco
1563          ,xla_seg_rule_details     xsr
1564          ,xla_line_defn_adr_assgns xad
1565          ,xla_line_defn_jlt_assgns xjl
1566     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
1567       AND xsr.application_id              = xad.application_id
1568       AND xsr.amb_context_code            = xad.amb_context_code
1569       AND xsr.segment_rule_type_code      = xad.segment_rule_type_code
1570       AND xsr.segment_rule_code           = xad.segment_rule_code
1571       AND xco.source_type_code            = 'S'
1572       AND xad.application_id              = xjl.application_id
1573       AND xad.amb_context_code            = xjl.amb_context_code
1574       AND xad.event_class_code            = xjl.event_class_code
1575       AND xad.event_type_code             = xjl.event_type_code
1576       AND xad.line_definition_code        = xjl.line_definition_code
1577       AND xad.line_definition_owner_code  = xjl.line_definition_owner_code
1578       AND xad.accounting_line_type_code   = xjl.accounting_line_type_code
1579       AND xad.accounting_line_code        = xjl.accounting_line_code
1580       AND xad.segment_rule_code           is not null
1581       AND xjl.application_id              = p_application_id
1582       AND xjl.amb_context_code            = p_amb_context_code
1583       AND xjl.event_class_code            = p_event_class_code
1584       AND xjl.event_type_code             = p_event_type_code
1585       AND xjl.line_definition_owner_code  = p_line_definition_owner_code
1586       AND xjl.line_definition_code        = p_line_definition_code
1587       AND xjl.active_flag                 = 'Y'
1588       AND NOT EXISTS
1589           (SELECT 'y'
1590              FROM xla_event_sources xes
1591             WHERE xes.source_application_id = xco.source_application_id
1592               AND xes.source_type_code      = xco.source_type_code
1593               AND xes.source_code           = xco.source_code
1594               AND xes.application_id        = p_application_id
1595               AND xes.event_class_code      = p_event_class_code
1596               AND xes.active_flag           = 'Y')
1597    UNION
1598    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
1599           xco.value_source_type_code source_type_code, xco.value_source_code source_code
1600      FROM xla_conditions           xco
1601          ,xla_seg_rule_details     xsr
1602          ,xla_line_defn_adr_assgns xad
1603          ,xla_line_defn_jlt_assgns xjl
1604     WHERE xco.segment_rule_detail_id        = xsr.segment_rule_detail_id
1605       AND xsr.application_id              = xad.application_id
1606       AND xsr.amb_context_code            = xad.amb_context_code
1607       AND xsr.segment_rule_type_code      = xad.segment_rule_type_code
1608       AND xsr.segment_rule_code           = xad.segment_rule_code
1609       AND xco.value_source_type_code      = 'S'
1610       AND xad.application_id              = xjl.application_id
1611       AND xad.amb_context_code            = xjl.amb_context_code
1612       AND xad.event_class_code            = xjl.event_class_code
1613       AND xad.event_type_code             = xjl.event_type_code
1614       AND xad.line_definition_code        = xjl.line_definition_code
1615       AND xad.line_definition_owner_code  = xjl.line_definition_owner_code
1616       AND xad.accounting_line_type_code   = xjl.accounting_line_type_code
1617       AND xad.accounting_line_code        = xjl.accounting_line_code
1618       AND xad.segment_rule_code           is not null
1619       AND xjl.application_id              = p_application_id
1620       AND xjl.amb_context_code            = p_amb_context_code
1621       AND xjl.event_class_code            = p_event_class_code
1622       AND xjl.event_type_code             = p_event_type_code
1623       AND xjl.line_definition_owner_code  = p_line_definition_owner_code
1624       AND xjl.line_definition_code        = p_line_definition_code
1625       AND xjl.active_flag                 = 'Y'
1626       AND NOT EXISTS
1627           (SELECT 'y'
1628              FROM xla_event_sources xes
1629             WHERE xes.source_application_id = xco.value_source_application_id
1630               AND xes.source_type_code      = xco.value_source_type_code
1631               AND xes.source_code           = xco.value_source_code
1632               AND xes.application_id        = p_application_id
1633               AND xes.event_class_code      = p_event_class_code
1634               AND xes.active_flag           = 'Y');
1635 
1636   CURSOR c_cond_der_sources IS
1637    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
1638           xco.source_type_code source_type_code, xco.source_code source_code
1639      FROM xla_conditions           xco
1640          ,xla_seg_rule_details     xsr
1641          ,xla_line_defn_adr_assgns xad
1642          ,xla_line_defn_jlt_assgns xjl
1643     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
1644       AND xsr.application_id              = xad.application_id
1645       AND xsr.amb_context_code            = xad.amb_context_code
1646       AND xsr.segment_rule_type_code      = xad.segment_rule_type_code
1647       AND xsr.segment_rule_code           = xad.segment_rule_code
1648       AND xco.source_type_code            = 'D'
1649       AND xad.application_id              = xjl.application_id
1650       AND xad.amb_context_code            = xjl.amb_context_code
1651       AND xad.event_class_code            = xjl.event_class_code
1652       AND xad.event_type_code             = xjl.event_type_code
1653       AND xad.line_definition_code        = xjl.line_definition_code
1654       AND xad.line_definition_owner_code  = xjl.line_definition_owner_code
1655       AND xad.accounting_line_type_code   = xjl.accounting_line_type_code
1656       AND xad.accounting_line_code        = xjl.accounting_line_code
1657       AND xad.segment_rule_code           is not null
1658       AND xjl.application_id              = p_application_id
1659       AND xjl.amb_context_code            = p_amb_context_code
1660       AND xjl.event_class_code            = p_event_class_code
1661       AND xjl.event_type_code             = p_event_type_code
1662       AND xjl.line_definition_owner_code  = p_line_definition_owner_code
1663       AND xjl.line_definition_code        = p_line_definition_code
1664       AND xjl.active_flag                   = 'Y'
1665    UNION
1666    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
1667           xco.value_source_type_code source_type_code, xco.value_source_code source_code
1668      FROM xla_conditions           xco
1669          ,xla_seg_rule_details     xsr
1670          ,xla_line_defn_adr_assgns xad
1671          ,xla_line_defn_jlt_assgns xjl
1672     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
1673       AND xsr.application_id              = xad.application_id
1674       AND xsr.amb_context_code            = xad.amb_context_code
1675       AND xsr.segment_rule_type_code      = xad.segment_rule_type_code
1676       AND xsr.segment_rule_code           = xad.segment_rule_code
1677       AND xco.value_source_type_code      = 'D'
1678       AND xad.application_id              = xjl.application_id
1679       AND xad.amb_context_code            = xjl.amb_context_code
1680       AND xad.event_class_code            = xjl.event_class_code
1681       AND xad.event_type_code             = xjl.event_type_code
1682       AND xad.line_definition_code        = xjl.line_definition_code
1683       AND xad.line_definition_owner_code  = xjl.line_definition_owner_code
1684       AND xad.accounting_line_type_code   = xjl.accounting_line_type_code
1685       AND xad.accounting_line_code        = xjl.accounting_line_code
1686       AND xad.segment_rule_code           is not null
1687       AND xjl.application_id              = p_application_id
1688       AND xjl.amb_context_code            = p_amb_context_code
1689       AND xjl.event_class_code            = p_event_class_code
1690       AND xjl.event_type_code             = p_event_type_code
1691       AND xjl.line_definition_owner_code  = p_line_definition_owner_code
1692       AND xjl.line_definition_code        = p_line_definition_code
1693       AND xjl.active_flag                   = 'Y';
1694 
1695   CURSOR c_child_adr IS
1696     SELECT distinct xsr.segment_rule_type_code, xsr.segment_rule_code,
1697                     xsr.value_segment_rule_appl_id,
1698                     xsr.value_segment_rule_type_code, xsr.value_segment_rule_code
1699       FROM xla_line_defn_jlt_assgns xjl
1700           ,xla_line_defn_adr_assgns xad
1701           ,xla_seg_rule_details    xsr
1702      WHERE xsr.application_id             = xad.application_id
1703        AND xsr.amb_context_code           = xad.amb_context_code
1704        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
1705        AND xsr.segment_rule_code          = xad.segment_rule_code
1706        AND xsr.value_type_code            = 'A'
1707        AND xad.application_id             = xjl.application_id
1708        AND xad.amb_context_code           = xjl.amb_context_code
1709        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
1710        AND xad.line_definition_code       = xjl.line_definition_code
1711        AND xad.event_class_code           = xjl.event_class_code
1712        AND xad.event_type_code            = xjl.event_type_code
1713        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
1714        AND xad.accounting_line_code       = xjl.accounting_line_code
1715        AND xad.segment_rule_code           is not null
1716        AND xjl.application_id             = p_application_id
1717        AND xjl.amb_context_code           = p_amb_context_code
1718        AND xjl.event_class_code           = p_event_class_code
1719        AND xjl.event_type_code            = p_event_type_code
1720        AND xjl.line_definition_owner_code = p_line_definition_owner_code
1721        AND xjl.line_definition_code       = p_line_definition_code
1722        AND xjl.active_flag                = 'Y';
1723 
1724   l_child_adr     c_child_adr%rowtype;
1725 
1726   CURSOR c_invalid_child_sources IS
1727    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
1728           xco.source_type_code, xco.source_code
1729      FROM xla_conditions           xco
1730          ,xla_seg_rule_details     xsr
1731     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
1732       AND xsr.application_id             = l_child_adr.value_segment_rule_appl_id
1733       AND xsr.amb_context_code           = p_amb_context_code
1734       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
1735       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
1736       AND xco.source_type_code            = 'S'
1737       AND NOT EXISTS
1738           (SELECT 'y'
1739              FROM xla_event_sources xes
1740             WHERE xes.source_application_id = xco.source_application_id
1741               AND xes.source_type_code      = xco.source_type_code
1742               AND xes.source_code           = xco.source_code
1743               AND xes.application_id        = p_application_id
1744               AND xes.event_class_code      = p_event_class_code
1745               AND xes.active_flag           = 'Y')
1746    UNION
1747    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
1748           xco.value_source_type_code source_type_code, xco.value_source_code source_code
1749      FROM xla_conditions           xco
1750          ,xla_seg_rule_details     xsr
1751     WHERE xco.segment_rule_detail_id        = xsr.segment_rule_detail_id
1752       AND xsr.application_id             = l_child_adr.value_segment_rule_appl_id
1753       AND xsr.amb_context_code           = p_amb_context_code
1754       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
1755       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
1756       AND xco.value_source_type_code      = 'S'
1757       AND NOT EXISTS
1758           (SELECT 'y'
1759              FROM xla_event_sources xes
1760             WHERE xes.source_application_id = xco.value_source_application_id
1761               AND xes.source_type_code      = xco.value_source_type_code
1762               AND xes.source_code           = xco.value_source_code
1763               AND xes.application_id        = p_application_id
1764               AND xes.event_class_code      = p_event_class_code
1765               AND xes.active_flag           = 'Y');
1766 
1767   CURSOR c_child_der_sources IS
1768    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
1769           xco.source_type_code source_type_code, xco.source_code source_code
1770      FROM xla_conditions           xco
1771          ,xla_seg_rule_details     xsr
1772     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
1773       AND xsr.application_id             = l_child_adr.value_segment_rule_appl_id
1774       AND xsr.amb_context_code           = p_amb_context_code
1775       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
1776       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
1777       AND xco.source_type_code            = 'D'
1778    UNION
1779    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
1780           xco.value_source_type_code source_type_code, xco.value_source_code source_code
1781      FROM xla_conditions           xco
1782          ,xla_seg_rule_details     xsr
1783     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
1784       AND xsr.application_id             = l_child_adr.value_segment_rule_appl_id
1785       AND xsr.amb_context_code           = p_amb_context_code
1786       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
1787       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
1788       AND xco.value_source_type_code      = 'D';
1789 
1790   l_return      BOOLEAN;
1791   l_log_module  VARCHAR2(240);
1792 BEGIN
1793   IF g_log_enabled THEN
1794     l_log_module := C_DEFAULT_MODULE||'.chk_adr_invalid_source_in_cond';
1795   END IF;
1796 
1797   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1798     trace(p_msg    => 'BEGIN of procedure chk_adr_invalid_source_in_cond'
1799          ,p_module => l_log_module
1800          ,p_level  => C_LEVEL_PROCEDURE);
1801   END IF;
1802 
1803   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1804     trace(p_msg    => 'application_id = '||p_application_id||
1805                       ',amb_context_code = '||p_amb_context_code||
1806                       ',event_class_code = '||p_event_class_code||
1807                       ',event_type_code = '||p_event_type_code||
1808                       ',line_definition_owner_code = '||p_line_definition_owner_code||
1809                       ',line_definition_code = '||p_line_definition_code
1810          ,p_module => l_log_module
1811          ,p_level  => C_LEVEL_STATEMENT);
1812   END IF;
1813 
1814   l_return := TRUE;
1815 
1816   --
1817   -- Check if the condition of any JLT have seeded sources that are not assigned
1818   -- to the event class of the line definition
1819   --
1820   FOR l_err IN c_invalid_sources LOOP
1821     l_return := FALSE;
1822 
1823     xla_amb_setup_err_pkg.stack_error
1824               (p_message_name               => 'XLA_AB_SR_CON_UNASN_SRCE'
1825               ,p_message_type               => 'E'
1826               ,p_message_category           => 'SEG_RULE'
1827               ,p_category_sequence          => 13
1828               ,p_application_id             => p_application_id
1829               ,p_amb_context_code           => p_amb_context_code
1830               ,p_event_class_code           => p_event_class_code
1831               ,p_event_type_code            => p_event_type_code
1832               ,p_line_definition_owner_code => p_line_definition_owner_code
1833               ,p_line_definition_code       => p_line_definition_code
1834               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
1835               ,p_segment_rule_code          => l_err.segment_rule_code
1836               ,p_source_type_code           => l_err.source_type_code
1837               ,p_source_code                => l_err.source_code);
1838   END LOOP;
1839 
1840   FOR l_err IN c_cond_der_sources LOOP
1841     IF xla_sources_pkg.derived_source_is_invalid
1842               (p_application_id           => p_application_id
1843               ,p_derived_source_code      => l_err.source_code
1844               ,p_derived_source_type_code => 'D'
1845               ,p_event_class_code         => p_event_class_code
1846               ,p_level                    => 'L') = 'TRUE' THEN
1847 
1848       l_return := FALSE;
1849 
1850       xla_amb_setup_err_pkg.stack_error
1851               (p_message_name               => 'XLA_AB_SR_CON_UNASN_SRCE'
1852               ,p_message_type               => 'E'
1853               ,p_message_category           => 'SEG_RULE'
1854               ,p_category_sequence          => 13
1855               ,p_application_id             => p_application_id
1856               ,p_amb_context_code           => p_amb_context_code
1857               ,p_event_class_code           => p_event_class_code
1858               ,p_event_type_code            => p_event_type_code
1859               ,p_line_definition_owner_code => p_line_definition_owner_code
1860               ,p_line_definition_code       => p_line_definition_code
1861               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
1862               ,p_segment_rule_code          => l_err.segment_rule_code
1863               ,p_source_type_code           => l_err.source_type_code
1864               ,p_source_code                => l_err.source_code);
1865      END IF;
1866    END LOOP;
1867 
1868   OPEN c_child_adr;
1869   LOOP
1870      FETCH c_child_adr
1871       INTO l_child_adr;
1872      EXIT WHEN c_child_adr%notfound;
1873 
1874      FOR l_err IN c_invalid_child_sources LOOP
1875          l_return := FALSE;
1876 
1877          xla_amb_setup_err_pkg.stack_error
1878               (p_message_name               => 'XLA_AB_SR_REF_RULE_COND'
1879               ,p_message_type               => 'E'
1880               ,p_message_category           => 'SEG_RULE'
1881               ,p_category_sequence          => 13
1882               ,p_application_id             => p_application_id
1883               ,p_amb_context_code           => p_amb_context_code
1884               ,p_event_class_code           => p_event_class_code
1885               ,p_event_type_code            => p_event_type_code
1886               ,p_line_definition_owner_code => p_line_definition_owner_code
1887               ,p_line_definition_code       => p_line_definition_code
1888               ,p_segment_rule_type_code     => l_child_adr.segment_rule_type_code
1889               ,p_segment_rule_code          => l_child_adr.segment_rule_code);
1890      END LOOP;
1891 
1892      FOR l_err IN c_child_der_sources LOOP
1893        IF xla_sources_pkg.derived_source_is_invalid
1894               (p_application_id           => p_application_id
1895               ,p_derived_source_code      => l_err.source_code
1896               ,p_derived_source_type_code => 'D'
1897               ,p_event_class_code         => p_event_class_code
1898               ,p_level                    => 'L') = 'TRUE' THEN
1899 
1900          l_return := FALSE;
1901          xla_amb_setup_err_pkg.stack_error
1902               (p_message_name               => 'XLA_AB_SR_REF_RULE_COND'
1903               ,p_message_type               => 'E'
1904               ,p_message_category           => 'SEG_RULE'
1905               ,p_category_sequence          => 13
1906               ,p_application_id             => p_application_id
1907               ,p_amb_context_code           => p_amb_context_code
1908               ,p_event_class_code           => p_event_class_code
1909               ,p_event_type_code            => p_event_type_code
1910               ,p_line_definition_owner_code => p_line_definition_owner_code
1911               ,p_line_definition_code       => p_line_definition_code
1912               ,p_segment_rule_type_code     => l_child_adr.segment_rule_type_code
1913               ,p_segment_rule_code          => l_child_adr.segment_rule_code);
1914        END IF;
1915      END LOOP;
1916   END LOOP;
1917   CLOSE c_child_adr;
1918 
1919   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1920     trace(p_msg    => 'END of procedure chk_adr_invalid_source_in_cond'
1921          ,p_module => l_log_module
1922          ,p_level  => C_LEVEL_PROCEDURE);
1923   END IF;
1924 
1925   RETURN l_return;
1926 
1927 EXCEPTION
1928   WHEN xla_exceptions_pkg.application_exception THEN
1929     IF c_invalid_sources%ISOPEN THEN
1930       CLOSE c_invalid_sources;
1931     END IF;
1932     IF c_cond_der_sources%ISOPEN THEN
1933       CLOSE c_cond_der_sources;
1934     END IF;
1935     RAISE;
1936 
1937   WHEN OTHERS                                   THEN
1938     IF c_invalid_sources%ISOPEN THEN
1939       CLOSE c_invalid_sources;
1940     END IF;
1941     IF c_cond_der_sources%ISOPEN THEN
1942       CLOSE c_cond_der_sources;
1943     END IF;
1944     xla_exceptions_pkg.raise_message
1945       (p_location   => 'xla_line_definitions_pvt.chk_adr_invalid_source_in_cond');
1946 END chk_adr_invalid_source_in_cond;
1947 
1948 
1949 
1950 --=============================================================================
1951 --
1952 -- Name: chk_adr_source_event_class
1953 -- Description: Check if all JLT of the line definition has all required
1954 --              accounting sources assigned
1955 --
1956 --=============================================================================
1957 FUNCTION chk_adr_source_event_class
1958   (p_application_id                   IN NUMBER
1959   ,p_amb_context_code                 IN VARCHAR2
1960   ,p_event_class_code                 IN VARCHAR2
1961   ,p_event_type_code                  IN VARCHAR2
1962   ,p_line_definition_owner_code       IN VARCHAR2
1963   ,p_line_definition_code             IN VARCHAR2)
1964 RETURN BOOLEAN
1965 IS
1966   --
1967   -- Get all JLT for which not all required line accounting sources are assigned
1968   --
1969   CURSOR c_invalid_sources IS
1970    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
1971           xsr.value_source_type_code source_type_code, xsr.value_source_code source_code
1972      FROM xla_seg_rule_details     xsr
1973          ,xla_line_defn_adr_assgns xad
1974          ,xla_line_defn_jlt_assgns xjl
1975     WHERE xsr.application_id             = xad.application_id
1976       AND xsr.amb_context_code           = xad.amb_context_code
1977       AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
1978       AND xsr.segment_rule_code          = xad.segment_rule_code
1979       AND xsr.value_source_type_code     = 'S'
1980       AND xad.application_id             = xjl.application_id
1981       AND xad.amb_context_code           = xjl.amb_context_code
1982       AND xad.line_definition_code       = xjl.line_definition_code
1983       AND xad.event_class_code           = xjl.event_class_code
1984       AND xad.event_type_code            = xjl.event_type_code
1985       AND xad.line_definition_owner_code = xjl.line_definition_owner_code
1986       AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
1987       AND xad.accounting_line_code       = xjl.accounting_line_code
1988       AND xad.segment_rule_code           is not null
1989       AND xjl.application_id             = p_application_id
1990       AND xjl.amb_context_code           = p_amb_context_code
1991       AND xjl.event_class_code           = p_event_class_code
1992       AND xjl.event_type_code            = p_event_type_code
1993       AND xjl.line_definition_owner_code = p_line_definition_owner_code
1994       AND xjl.line_definition_code       = p_line_definition_code
1995       AND xjl.active_flag                = 'Y'
1996       AND NOT EXISTS
1997           (SELECT 'y'
1998              FROM xla_event_sources xes
1999             WHERE xes.source_application_id = xsr.value_source_application_id
2000               AND xes.source_type_code      = xsr.value_source_type_code
2001               AND xes.source_code           = xsr.value_source_code
2002               AND xes.application_id        = xsr.application_id
2003               AND xes.event_class_code      = p_event_class_code
2004               AND xes.active_flag          = 'Y')
2005    UNION
2006    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
2007           xsr.input_source_type_code source_type_code, xsr.input_source_code source_code
2008      FROM xla_seg_rule_details     xsr
2009          ,xla_line_defn_adr_assgns xad
2010          ,xla_line_defn_jlt_assgns xjl
2011     WHERE xsr.application_id             = xad.application_id
2012       AND xsr.amb_context_code           = xad.amb_context_code
2013       AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
2014       AND xsr.segment_rule_code          = xad.segment_rule_code
2015       AND xsr.input_source_type_code     = 'S'
2016       AND xad.application_id             = xjl.application_id
2017       AND xad.amb_context_code           = xjl.amb_context_code
2018       AND xad.line_definition_code       = xjl.line_definition_code
2019       AND xad.event_class_code           = xjl.event_class_code
2020       AND xad.event_type_code            = xjl.event_type_code
2021       AND xad.line_definition_owner_code = xjl.line_definition_owner_code
2022       AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
2023       AND xad.accounting_line_code       = xjl.accounting_line_code
2024       AND xad.segment_rule_code           is not null
2025       AND xjl.application_id             = p_application_id
2026       AND xjl.amb_context_code           = p_amb_context_code
2027       AND xjl.event_class_code           = p_event_class_code
2028       AND xjl.event_type_code            = p_event_type_code
2029       AND xjl.line_definition_owner_code = p_line_definition_owner_code
2030       AND xjl.line_definition_code       = p_line_definition_code
2031       AND xjl.active_flag                = 'Y'
2032       AND NOT EXISTS
2033           (SELECT 'y'
2034              FROM xla_event_sources xes
2035             WHERE xes.source_application_id = xsr.input_source_application_id
2036               AND xes.source_type_code      = xsr.input_source_type_code
2037               AND xes.source_code           = xsr.input_source_code
2038               AND xes.application_id        = xsr.application_id
2039               AND xes.event_class_code      = p_event_class_code
2040               AND xes.active_flag          = 'Y');
2041 
2042   CURSOR c_der_sources IS
2043    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
2044           xsr.value_source_type_code source_type_code, xsr.value_source_code source_code
2045      FROM xla_seg_rule_details     xsr
2046          ,xla_line_defn_adr_assgns xad
2047          ,xla_line_defn_jlt_assgns xjl
2048     WHERE xsr.application_id                = xad.application_id
2049       AND xsr.amb_context_code              = xad.amb_context_code
2050       AND xsr.segment_rule_type_code        = xad.segment_rule_type_code
2051       AND xsr.segment_rule_code             = xad.segment_rule_code
2052       AND xsr.value_source_type_code        = 'D'
2053       AND xad.application_id                = xjl.application_id
2054       AND xad.amb_context_code              = xjl.amb_context_code
2055       AND xad.event_class_code              = xjl.event_class_code
2056       AND xad.event_type_code               = xjl.event_type_code
2057       AND xad.line_definition_code          = xjl.line_definition_code
2058       AND xad.line_definition_owner_code    = xjl.line_definition_owner_code
2059       AND xad.accounting_line_type_code     = xjl.accounting_line_type_code
2060       AND xad.accounting_line_code          = xjl.accounting_line_code
2061       AND xad.segment_rule_code           is not null
2062       AND xjl.application_id                = p_application_id
2063       AND xjl.amb_context_code              = p_amb_context_code
2064       AND xjl.line_definition_owner_code    = p_line_definition_owner_code
2065       AND xjl.line_definition_code          = p_line_definition_code
2066       AND xjl.active_flag                   = 'Y'
2067    UNION
2068    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
2069           xsr.input_source_type_code source_type_code, xsr.input_source_code source_code
2070      FROM xla_seg_rule_details     xsr
2071          ,xla_line_defn_adr_assgns xad
2072          ,xla_line_defn_jlt_assgns xjl
2073     WHERE xsr.application_id                = xad.application_id
2074       AND xsr.amb_context_code              = xad.amb_context_code
2075       AND xsr.segment_rule_type_code        = xad.segment_rule_type_code
2076       AND xsr.segment_rule_code             = xad.segment_rule_code
2077       AND xsr.input_source_type_code        = 'D'
2078       AND xad.application_id                = xjl.application_id
2079       AND xad.amb_context_code              = xjl.amb_context_code
2080       AND xad.event_class_code              = xjl.event_class_code
2081       AND xad.event_type_code               = xjl.event_type_code
2082       AND xad.line_definition_code          = xjl.line_definition_code
2083       AND xad.line_definition_owner_code    = xjl.line_definition_owner_code
2084       AND xad.accounting_line_type_code     = xjl.accounting_line_type_code
2085       AND xad.accounting_line_code          = xjl.accounting_line_code
2086       AND xad.segment_rule_code           is not null
2087       AND xjl.application_id                = p_application_id
2088       AND xjl.amb_context_code              = p_amb_context_code
2089       AND xjl.line_definition_owner_code    = p_line_definition_owner_code
2090       AND xjl.line_definition_code          = p_line_definition_code
2091       AND xjl.active_flag                   = 'Y';
2092 
2093 
2094   CURSOR c_child_adr IS
2095     SELECT distinct xsr.segment_rule_type_code, xsr.segment_rule_code,
2096                     xsr.value_segment_rule_appl_id,
2097                     xsr.value_segment_rule_type_code, xsr.value_segment_rule_code
2098       FROM xla_line_defn_jlt_assgns xjl
2099           ,xla_line_defn_adr_assgns xad
2100           ,xla_seg_rule_details    xsr
2101      WHERE xsr.application_id             = xad.application_id
2102        AND xsr.amb_context_code           = xad.amb_context_code
2103        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
2104        AND xsr.segment_rule_code          = xad.segment_rule_code
2105        AND xsr.value_type_code            = 'A'
2106        AND xad.application_id             = xjl.application_id
2107        AND xad.amb_context_code           = xjl.amb_context_code
2108        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
2109        AND xad.line_definition_code       = xjl.line_definition_code
2110        AND xad.event_class_code           = xjl.event_class_code
2111        AND xad.event_type_code            = xjl.event_type_code
2112        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
2113        AND xad.accounting_line_code       = xjl.accounting_line_code
2114        AND xad.segment_rule_code           is not null
2115        AND xjl.application_id             = p_application_id
2116        AND xjl.amb_context_code           = p_amb_context_code
2117        AND xjl.event_class_code           = p_event_class_code
2118        AND xjl.event_type_code            = p_event_type_code
2119        AND xjl.line_definition_owner_code = p_line_definition_owner_code
2120        AND xjl.line_definition_code       = p_line_definition_code
2121        AND xjl.active_flag                = 'Y';
2122 
2123   l_child_adr     c_child_adr%rowtype;
2124 
2125   CURSOR c_invalid_child_sources IS
2126    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
2127           xsr.value_source_type_code source_type_code, xsr.value_source_code source_code
2128      FROM xla_seg_rule_details     xsr
2129     WHERE xsr.application_id             = l_child_adr.value_segment_rule_appl_id
2130       AND xsr.amb_context_code           = p_amb_context_code
2131       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
2132       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
2133       AND xsr.value_source_type_code     = 'S'
2134       AND NOT EXISTS
2135           (SELECT 'y'
2136              FROM xla_event_sources xes
2137             WHERE xes.source_application_id = xsr.value_source_application_id
2138               AND xes.source_type_code      = xsr.value_source_type_code
2139               AND xes.source_code           = xsr.value_source_code
2140               AND xes.application_id        = xsr.application_id
2141               AND xes.event_class_code      = p_event_class_code
2142               AND xes.active_flag          = 'Y')
2143    UNION
2144    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
2145           xsr.input_source_type_code source_type_code, xsr.input_source_code source_code
2146      FROM xla_seg_rule_details     xsr
2147     WHERE xsr.application_id             = l_child_adr.value_segment_rule_appl_id
2148       AND xsr.amb_context_code           = p_amb_context_code
2149       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
2150       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
2151       AND xsr.input_source_type_code     = 'S'
2152       AND NOT EXISTS
2153           (SELECT 'y'
2154              FROM xla_event_sources xes
2155             WHERE xes.source_application_id = xsr.input_source_application_id
2156               AND xes.source_type_code      = xsr.input_source_type_code
2157               AND xes.source_code           = xsr.input_source_code
2158               AND xes.application_id        = xsr.application_id
2159               AND xes.event_class_code      = p_event_class_code
2160               AND xes.active_flag          = 'Y');
2161 
2162   CURSOR c_child_der_sources IS
2163    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
2164           xsr.value_source_type_code source_type_code, xsr.value_source_code source_code
2165      FROM xla_seg_rule_details     xsr
2166     WHERE xsr.application_id             = l_child_adr.value_segment_rule_appl_id
2167       AND xsr.amb_context_code           = p_amb_context_code
2168       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
2169       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
2170       AND xsr.value_source_type_code        = 'D'
2171    UNION
2172    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
2173           xsr.input_source_type_code source_type_code, xsr.input_source_code source_code
2174      FROM xla_seg_rule_details     xsr
2175     WHERE xsr.application_id             = l_child_adr.value_segment_rule_appl_id
2176       AND xsr.amb_context_code           = p_amb_context_code
2177       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
2178       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
2179       AND xsr.input_source_type_code        = 'D';
2180 
2181   l_return      BOOLEAN;
2182   l_log_module  VARCHAR2(240);
2183 BEGIN
2184   IF g_log_enabled THEN
2185     l_log_module := C_DEFAULT_MODULE||'.chk_adr_source_event_class';
2186   END IF;
2187 
2188   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2189     trace(p_msg    => 'BEGIN of procedure chk_adr_source_event_class'
2190          ,p_module => l_log_module
2191          ,p_level  => C_LEVEL_PROCEDURE);
2192   END IF;
2193 
2194   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2195     trace(p_msg    => 'application_id = '||p_application_id||
2196                       ',amb_context_code = '||p_amb_context_code||
2197                       ',event_class_code = '||p_event_class_code||
2198                       ',event_type_code = '||p_event_type_code||
2199                       ',line_definition_owner_code = '||p_line_definition_owner_code||
2200                       ',line_definition_code = '||p_line_definition_code
2201          ,p_module => l_log_module
2202          ,p_level  => C_LEVEL_STATEMENT);
2203   END IF;
2204 
2205   l_return := TRUE;
2206 
2207   --
2208   -- Check if any JLT does not have all required line accounting sources
2209   --
2210   FOR l_err IN c_invalid_sources LOOP
2211     l_return := FALSE;
2212 
2213     xla_amb_setup_err_pkg.stack_error
2214               (p_message_name               => 'XLA_AB_SR_UNASSN_SOURCE'
2215               ,p_message_type               => 'E'
2216               ,p_message_category           => 'SEG_RULE'
2217               ,p_category_sequence          => 13
2218               ,p_application_id             => p_application_id
2219               ,p_amb_context_code           => p_amb_context_code
2220               ,p_event_class_code           => p_event_class_code
2221               ,p_event_type_code            => p_event_type_code
2222               ,p_line_definition_owner_code => p_line_definition_owner_code
2223               ,p_line_definition_code       => p_line_definition_code
2224               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
2225               ,p_segment_rule_code          => l_err.segment_rule_code
2226               ,p_source_type_code           => l_err.source_type_code
2227               ,p_source_code                => l_err.source_code);
2228   END LOOP;
2229 
2230   FOR l_err IN c_der_sources LOOP
2231     IF xla_sources_pkg.derived_source_is_invalid
2232               (p_application_id           => p_application_id
2233               ,p_derived_source_code      => l_err.source_code
2234               ,p_derived_source_type_code => 'D'
2235               ,p_event_class_code         => p_event_class_code
2236               ,p_level                    => 'L') = 'TRUE' THEN
2237 
2238       l_return := FALSE;
2239       xla_amb_setup_err_pkg.stack_error
2240               (p_message_name               => 'XLA_AB_SR_UNASSN_SOURCE'
2241               ,p_message_type               => 'E'
2242               ,p_message_category           => 'SEG_RULE'
2243               ,p_category_sequence          => 13
2244               ,p_application_id             => p_application_id
2245               ,p_amb_context_code           => p_amb_context_code
2246               ,p_event_class_code           => p_event_class_code
2247               ,p_event_type_code            => p_event_type_code
2248               ,p_line_definition_owner_code => p_line_definition_owner_code
2249               ,p_line_definition_code       => p_line_definition_code
2250               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
2251               ,p_segment_rule_code          => l_err.segment_rule_code
2252               ,p_source_type_code           => l_err.source_type_code
2253               ,p_source_code                => l_err.source_code);
2254     END IF;
2255   END LOOP;
2256 
2257 
2258   OPEN c_child_adr;
2259   LOOP
2260      FETCH c_child_adr
2261       INTO l_child_adr;
2262      EXIT WHEN c_child_adr%notfound;
2263 
2264      FOR l_err IN c_invalid_child_sources LOOP
2265          l_return := FALSE;
2266 
2267          xla_amb_setup_err_pkg.stack_error
2268               (p_message_name               => 'XLA_AB_SR_REF_RULE_DET'
2269               ,p_message_type               => 'E'
2270               ,p_message_category           => 'SEG_RULE'
2271               ,p_category_sequence          => 13
2272               ,p_application_id             => p_application_id
2273               ,p_amb_context_code           => p_amb_context_code
2274               ,p_event_class_code           => p_event_class_code
2275               ,p_event_type_code            => p_event_type_code
2276               ,p_line_definition_owner_code => p_line_definition_owner_code
2277               ,p_line_definition_code       => p_line_definition_code
2278               ,p_segment_rule_type_code     => l_child_adr.segment_rule_type_code
2279               ,p_segment_rule_code          => l_child_adr.segment_rule_code);
2280      END LOOP;
2281 
2282      FOR l_err IN c_child_der_sources LOOP
2283        IF xla_sources_pkg.derived_source_is_invalid
2284               (p_application_id           => p_application_id
2285               ,p_derived_source_code      => l_err.source_code
2286               ,p_derived_source_type_code => 'D'
2287               ,p_event_class_code         => p_event_class_code
2288               ,p_level                    => 'L') = 'TRUE' THEN
2289 
2290          l_return := FALSE;
2291          xla_amb_setup_err_pkg.stack_error
2292               (p_message_name               => 'XLA_AB_SR_REF_RULE_DET'
2293               ,p_message_type               => 'E'
2294               ,p_message_category           => 'SEG_RULE'
2295               ,p_category_sequence          => 13
2296               ,p_application_id             => p_application_id
2297               ,p_amb_context_code           => p_amb_context_code
2298               ,p_event_class_code           => p_event_class_code
2299               ,p_event_type_code            => p_event_type_code
2300               ,p_line_definition_owner_code => p_line_definition_owner_code
2301               ,p_line_definition_code       => p_line_definition_code
2302               ,p_segment_rule_type_code     => l_child_adr.segment_rule_type_code
2303               ,p_segment_rule_code          => l_child_adr.segment_rule_code);
2304        END IF;
2305      END LOOP;
2306   END LOOP;
2307   CLOSE c_child_adr;
2308 
2309   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2310     trace(p_msg    => 'END of procedure chk_adr_source_event_class'
2311          ,p_module => l_log_module
2312          ,p_level  => C_LEVEL_PROCEDURE);
2313   END IF;
2314 
2315   RETURN l_return;
2316 
2317 EXCEPTION
2318   WHEN xla_exceptions_pkg.application_exception THEN
2319     IF c_invalid_sources%ISOPEN THEN
2320       CLOSE c_invalid_sources;
2321     END IF;
2322     IF c_der_sources%ISOPEN THEN
2323       CLOSE c_der_sources;
2324     END IF;
2325     RAISE;
2326 
2327   WHEN OTHERS                                   THEN
2328     IF c_invalid_sources%ISOPEN THEN
2329       CLOSE c_invalid_sources;
2330     END IF;
2331     IF c_der_sources%ISOPEN THEN
2332       CLOSE c_der_sources;
2333     END IF;
2334     xla_exceptions_pkg.raise_message
2335       (p_location   => 'xla_line_definitions_pvt.chk_adr_source_event_class');
2336 
2337 END chk_adr_source_event_class;
2338 
2339 
2340 --=============================================================================
2341 --
2342 -- Name: validate_adr_assgns
2343 -- Description: Validate all ADR assigned to the JLT of the line definition
2344 --              is valid
2345 -- Return Value:
2346 --   TRUE - if all ADR assignments are valid
2347 --   FALSE - if any ADR assignment is invalid
2348 --
2349 --=============================================================================
2350 FUNCTION validate_adr_assgns
2351   (p_application_id                   IN NUMBER
2352   ,p_amb_context_code                 IN VARCHAR2
2353   ,p_event_class_code                 IN VARCHAR2
2354   ,p_event_type_code                  IN VARCHAR2
2355   ,p_line_definition_owner_code       IN VARCHAR2
2356   ,p_line_definition_code             IN VARCHAR2)
2357 RETURN BOOLEAN
2358 IS
2359   l_return      BOOLEAN;
2360   l_log_module  VARCHAR2(240);
2361 BEGIN
2362   IF g_log_enabled THEN
2363     l_log_module := C_DEFAULT_MODULE||'.validate_adr_assgns';
2364   END IF;
2365 
2366   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2367     trace(p_msg    => 'BEGIN of procedure validate_adr_assgns'
2368          ,p_module => l_log_module
2369          ,p_level  => C_LEVEL_PROCEDURE);
2370   END IF;
2371 
2372   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2373     trace(p_msg    => 'application_id = '||p_application_id||
2374                       ',amb_context_code = '||p_amb_context_code||
2375                       ',event_class_code = '||p_event_class_code||
2376                       ',event_type_code = '||p_event_type_code||
2377                       ',line_definition_owner_code = '||p_line_definition_owner_code||
2378                       ',line_definition_code = '||p_line_definition_code
2379          ,p_module => l_log_module
2380          ,p_level  => C_LEVEL_STATEMENT);
2381   END IF;
2382 
2383   l_return := TRUE;
2384 
2385   l_return :=chk_adr_side_is_valid
2386                      (p_application_id             => p_application_id
2387                      ,p_amb_context_code           => p_amb_context_code
2388                      ,p_event_class_code           => p_event_class_code
2389                      ,p_event_type_code            => p_event_type_code
2390                      ,p_line_definition_owner_code => p_line_definition_owner_code
2391                      ,p_line_definition_code       => p_line_definition_code)
2392               AND l_return;
2393 
2394   l_return := chk_adr_assgns_is_complete
2395                      (p_application_id             => p_application_id
2396                      ,p_amb_context_code           => p_amb_context_code
2397                      ,p_event_class_code           => p_event_class_code
2398                      ,p_event_type_code            => p_event_type_code
2399                      ,p_line_definition_owner_code => p_line_definition_owner_code
2400                      ,p_line_definition_code       => p_line_definition_code)
2401               AND l_return;
2402 
2403   l_return := chk_adr_is_enabled
2404                      (p_application_id             => p_application_id
2405                      ,p_amb_context_code           => p_amb_context_code
2406                      ,p_event_class_code           => p_event_class_code
2407                      ,p_event_type_code            => p_event_type_code
2408                      ,p_line_definition_owner_code => p_line_definition_owner_code
2409                      ,p_line_definition_code       => p_line_definition_code)
2410               AND l_return;
2411 
2412   l_return := chk_adr_has_details
2413                      (p_application_id             => p_application_id
2414                      ,p_amb_context_code           => p_amb_context_code
2415                      ,p_event_class_code           => p_event_class_code
2416                      ,p_event_type_code            => p_event_type_code
2417                      ,p_line_definition_owner_code => p_line_definition_owner_code
2418                      ,p_line_definition_code       => p_line_definition_code)
2419               AND l_return;
2420 
2421   l_return := chk_adr_invalid_source_in_cond
2422                      (p_application_id             => p_application_id
2423                      ,p_amb_context_code           => p_amb_context_code
2424                      ,p_event_class_code           => p_event_class_code
2425                      ,p_event_type_code            => p_event_type_code
2426                      ,p_line_definition_owner_code => p_line_definition_owner_code
2427                      ,p_line_definition_code       => p_line_definition_code)
2428               AND l_return;
2429 
2430   l_return := chk_adr_source_event_class
2431                      (p_application_id             => p_application_id
2432                      ,p_amb_context_code           => p_amb_context_code
2433                      ,p_event_class_code           => p_event_class_code
2434                      ,p_event_type_code            => p_event_type_code
2435                      ,p_line_definition_owner_code => p_line_definition_owner_code
2436                      ,p_line_definition_code       => p_line_definition_code)
2437               AND l_return;
2438 
2439   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2440     trace(p_msg    => 'END of procedure validate_adr_assgns'
2441          ,p_module => l_log_module
2442          ,p_level  => C_LEVEL_PROCEDURE);
2443   END IF;
2444 
2445   RETURN l_return;
2446 
2447 EXCEPTION
2448   WHEN xla_exceptions_pkg.application_exception THEN
2449     RAISE;
2450   WHEN OTHERS                                   THEN
2451     xla_exceptions_pkg.raise_message
2452       (p_location   => 'xla_line_definitions_pvt.validate_adr_assgns');
2453 END validate_adr_assgns;
2454 
2455 
2456 --=============================================================================
2457 --
2458 -- Name: chk_jlt_exists
2459 -- Description: Check if at least one active JLT is assigned to the line definition
2460 --
2461 --=============================================================================
2462 FUNCTION chk_jlt_exists
2463   (p_application_id                   IN NUMBER
2464   ,p_amb_context_code                 IN VARCHAR2
2465   ,p_event_class_code                 IN VARCHAR2
2466   ,p_event_type_code                  IN VARCHAR2
2467   ,p_line_definition_owner_code       IN VARCHAR2
2468   ,p_line_definition_code             IN VARCHAR2)
2469 RETURN BOOLEAN
2470 IS
2471   --
2472   -- Get any JLT assignment that has a disabled JLT
2473   --
2474   CURSOR c_active_line_assgns IS
2475   SELECT  'X'
2476      FROM xla_line_defn_jlt_assgns    xld
2477     WHERE xld.application_id             = p_application_id
2478       AND xld.amb_context_code           = p_amb_context_code
2479       AND xld.event_class_code           = p_event_class_code
2480       AND xld.event_type_code            = p_event_type_code
2481       AND xld.line_definition_owner_code = p_line_definition_owner_code
2482       AND xld.line_definition_code       = p_line_definition_code
2483       AND xld.active_flag                = 'Y';
2484 
2485   l_return      BOOLEAN;
2486   l_exists      VARCHAR2(1);
2487   l_log_module  VARCHAR2(240);
2488 BEGIN
2489   IF g_log_enabled THEN
2490     l_log_module := C_DEFAULT_MODULE||'.chk_jlt_exists';
2491   END IF;
2492 
2493   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2494     trace(p_msg    => 'BEGIN of procedure chk_jlt_exists'
2495          ,p_module => l_log_module
2496          ,p_level  => C_LEVEL_PROCEDURE);
2497   END IF;
2498 
2499   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2500     trace(p_msg    => 'application_id = '||p_application_id||
2501                       ',amb_context_code = '||p_amb_context_code||
2502                       ',event_class_code = '||p_event_class_code||
2503                       ',event_type_code = '||p_event_type_code||
2504                       ',line_definition_owner_code = '||p_line_definition_owner_code||
2505                       ',line_definition_code = '||p_line_definition_code
2506          ,p_module => l_log_module
2507          ,p_level  => C_LEVEL_STATEMENT);
2508   END IF;
2509 
2510   l_return := TRUE;
2511 
2512   --
2513   -- Check if at least one active JLT is assigned to the line definition
2514   --
2515   OPEN c_active_line_assgns;
2516   FETCH c_active_line_assgns INTO l_exists;
2517   IF (c_active_line_assgns%NOTFOUND) THEN
2518     l_return := FALSE;
2519 
2520     xla_amb_setup_err_pkg.stack_error
2521             (p_message_name               => 'XLA_AB_LESS_LINE_TYPES_JLD'
2522             ,p_message_type               => 'E'
2523             ,p_message_category           => 'LINE_ASSIGNMENT'
2524             ,p_category_sequence          => 9
2525             ,p_application_id             => p_application_id
2526             ,p_amb_context_code           => p_amb_context_code
2527             ,p_event_class_code           => p_event_class_code
2528             ,p_event_type_code            => p_event_type_code
2529             ,p_line_definition_owner_code => p_line_definition_owner_code
2530             ,p_line_definition_code       => p_line_definition_code);
2531   END IF;
2532   CLOSE c_active_line_assgns;
2533 
2534   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2535     trace(p_msg    => 'END of procedure chk_jlt_exists'
2536          ,p_module => l_log_module
2537          ,p_level  => C_LEVEL_PROCEDURE);
2538   END IF;
2539 
2540   RETURN l_return;
2541 
2542 EXCEPTION
2543   WHEN xla_exceptions_pkg.application_exception THEN
2544     IF (c_active_line_assgns%ISOPEN) THEN
2545       CLOSE c_active_line_assgns;
2546     END IF;
2547     RAISE;
2548 
2549   WHEN OTHERS                                   THEN
2550     IF (c_active_line_assgns%ISOPEN) THEN
2551       CLOSE c_active_line_assgns;
2552     END IF;
2553     xla_exceptions_pkg.raise_message
2554       (p_location   => 'xla_line_definitions_pvt.chk_jlt_exists');
2555 END chk_jlt_exists;
2556 
2557 --=============================================================================
2558 --
2559 -- Name: chk_jlt_is_enabled
2560 -- Description: Check if all JLT assigned to the line definition is enabled
2561 --
2562 --=============================================================================
2563 FUNCTION chk_jlt_is_enabled
2564   (p_application_id                   IN NUMBER
2565   ,p_amb_context_code                 IN VARCHAR2
2566   ,p_event_class_code                 IN VARCHAR2
2567   ,p_event_type_code                  IN VARCHAR2
2568   ,p_line_definition_owner_code       IN VARCHAR2
2569   ,p_line_definition_code             IN VARCHAR2)
2570 RETURN BOOLEAN
2571 IS
2572   --
2573   -- Get any JLT assignment that has a disabled JLT
2574   --
2575   CURSOR c_invalid_jlt IS
2576   SELECT  distinct event_class_code, event_type_code,
2577           accounting_line_type_code, accounting_line_code
2578      FROM xla_line_defn_jlt_assgns    xld
2579     WHERE xld.application_id             = p_application_id
2580       AND xld.amb_context_code           = p_amb_context_code
2581       AND xld.event_class_code           = p_event_class_code
2582       AND xld.event_type_code            = p_event_type_code
2583       AND xld.line_definition_owner_code = p_line_definition_owner_code
2584       AND xld.line_definition_code       = p_line_definition_code
2585       AND xld.active_flag                = 'Y'
2586       AND NOT EXISTS
2587           (SELECT 'y'
2588              FROM xla_acct_line_types_b xal
2589             WHERE xal.application_id             = xld.application_id
2590               AND xal.amb_context_code           = xld.amb_context_code
2591               AND xal.event_class_code           = xld.event_class_code
2592               AND xal.accounting_line_type_code  = xld.accounting_line_type_code
2593               AND xal.accounting_line_code       = xld.accounting_line_code
2594               AND xal.enabled_flag               = 'Y');
2595 
2596   l_return      BOOLEAN;
2597   l_log_module  VARCHAR2(240);
2598 BEGIN
2599   IF g_log_enabled THEN
2600     l_log_module := C_DEFAULT_MODULE||'.chk_jlt_is_enabled';
2601   END IF;
2602 
2603   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2604     trace(p_msg    => 'BEGIN of procedure chk_jlt_is_enabled'
2605          ,p_module => l_log_module
2606          ,p_level  => C_LEVEL_PROCEDURE);
2607   END IF;
2608 
2609   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2610     trace(p_msg    => 'application_id = '||p_application_id||
2611                       ',amb_context_code = '||p_amb_context_code||
2612                       ',event_class_code = '||p_event_class_code||
2613                       ',event_type_code = '||p_event_type_code||
2614                       ',line_definition_owner_code = '||p_line_definition_owner_code||
2615                       ',line_definition_code = '||p_line_definition_code
2616          ,p_module => l_log_module
2617          ,p_level  => C_LEVEL_STATEMENT);
2618   END IF;
2619 
2620   l_return := TRUE;
2621 
2622   --
2623   -- Check if any disabled JLT is assigned to the line definition
2624   --
2625   FOR l_err IN c_invalid_jlt LOOP
2626     l_return := FALSE;
2627 
2628     xla_amb_setup_err_pkg.stack_error
2629             (p_message_name               => 'XLA_AB_DISABLD_LINE_TYPE'
2630             ,p_message_type               => 'E'
2631             ,p_message_category           => 'LINE_TYPE'
2632             ,p_category_sequence          => 10
2633             ,p_application_id             => p_application_id
2634             ,p_amb_context_code           => p_amb_context_code
2635             ,p_event_class_code           => p_event_class_code
2636             ,p_event_type_code            => p_event_type_code
2637             ,p_line_definition_owner_code => p_line_definition_owner_code
2638             ,p_line_definition_code       => p_line_definition_code
2639             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
2640             ,p_accounting_line_code       => l_err.accounting_line_code);
2641   END LOOP;
2642 
2643   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2644     trace(p_msg    => 'END of procedure chk_jlt_is_enabled'
2645          ,p_module => l_log_module
2646          ,p_level  => C_LEVEL_PROCEDURE);
2647   END IF;
2648 
2649   RETURN l_return;
2650 
2651 EXCEPTION
2652   WHEN xla_exceptions_pkg.application_exception THEN
2653     IF (c_invalid_jlt%ISOPEN) THEN
2654       CLOSE c_invalid_jlt;
2655     END IF;
2656     RAISE;
2657 
2658   WHEN OTHERS                                   THEN
2659     IF (c_invalid_jlt%ISOPEN) THEN
2660       CLOSE c_invalid_jlt;
2661     END IF;
2662     xla_exceptions_pkg.raise_message
2663       (p_location   => 'xla_line_definitions_pvt.chk_jlt_is_enabled');
2664 END chk_jlt_is_enabled;
2665 
2666 --=============================================================================
2667 --
2668 -- Name: chk_jlt_encum_type_exists
2669 -- Description: Check if all encumbrance type of the JLTs assigned to the
2670 --              line definition contain encumrbance type id
2671 --
2672 --=============================================================================
2673 FUNCTION chk_jlt_encum_type_exists
2674   (p_application_id                   IN NUMBER
2675   ,p_amb_context_code                 IN VARCHAR2
2676   ,p_event_class_code                 IN VARCHAR2
2677   ,p_event_type_code                  IN VARCHAR2
2678   ,p_line_definition_owner_code       IN VARCHAR2
2679   ,p_line_definition_code             IN VARCHAR2)
2680 RETURN BOOLEAN
2681 IS
2682   --
2683   -- Get any encumbrance JLT that doesn't have an encumbrance
2684   --
2685   CURSOR c_invalid_jlt IS
2686   SELECT  distinct xld.event_class_code, xld.event_type_code,
2687           xld.accounting_line_type_code, xld.accounting_line_code
2688      FROM xla_line_defn_jlt_assgns    xld
2689         , xla_acct_line_types_b       xal
2690     WHERE xal.application_id             = xld.application_id
2691       AND xal.amb_context_code           = xld.amb_context_code
2692       AND xal.event_class_code           = xld.event_class_code
2693       AND xal.accounting_line_type_code  = xld.accounting_line_type_code
2694       AND xal.accounting_line_code       = xld.accounting_line_code
2695       AND xal.enabled_flag               = 'Y'
2696       AND xal.accounting_entry_type_code = 'E'
2697       AND NVL(xal.business_method_code,'NONE') <> 'PRIOR_ENTRY'
2698       AND xal.encumbrance_type_id        IS NULL
2699       AND xld.application_id             = p_application_id
2700       AND xld.amb_context_code           = p_amb_context_code
2701       AND xld.event_class_code           = p_event_class_code
2702       AND xld.event_type_code            = p_event_type_code
2703       AND xld.line_definition_owner_code = p_line_definition_owner_code
2704       AND xld.line_definition_code       = p_line_definition_code
2705       AND xld.active_flag                = 'Y';
2706 
2707   l_return      BOOLEAN;
2708   l_log_module  VARCHAR2(240);
2709 BEGIN
2710   IF g_log_enabled THEN
2711     l_log_module := C_DEFAULT_MODULE||'.chk_jlt_encum_type_exists';
2712   END IF;
2713 
2714   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2715     trace(p_msg    => 'BEGIN of procedure chk_jlt_encum_type_exists'
2716          ,p_module => l_log_module
2717          ,p_level  => C_LEVEL_PROCEDURE);
2718   END IF;
2719 
2720   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2721     trace(p_msg    => 'application_id = '||p_application_id||
2722                       ',amb_context_code = '||p_amb_context_code||
2723                       ',event_class_code = '||p_event_class_code||
2724                       ',event_type_code = '||p_event_type_code||
2725                       ',line_definition_owner_code = '||p_line_definition_owner_code||
2726                       ',line_definition_code = '||p_line_definition_code
2727          ,p_module => l_log_module
2728          ,p_level  => C_LEVEL_STATEMENT);
2729   END IF;
2730 
2731   l_return := TRUE;
2732 
2733   --
2734   -- Check if any disabled JLT is assigned to the line definition
2735   --
2736   FOR l_err IN c_invalid_jlt LOOP
2737     l_return := FALSE;
2738 
2739     xla_amb_setup_err_pkg.stack_error
2740             (p_message_name               => 'XLA_AB_INVALID_NO_ENCUM_TYPE'
2741             ,p_message_type               => 'E'
2742             ,p_message_category           => 'LINE_TYPE'
2743             ,p_category_sequence          => 10
2744             ,p_application_id             => p_application_id
2745             ,p_amb_context_code           => p_amb_context_code
2746             ,p_event_class_code           => p_event_class_code
2747             ,p_event_type_code            => p_event_type_code
2748             ,p_line_definition_owner_code => p_line_definition_owner_code
2749             ,p_line_definition_code       => p_line_definition_code
2750             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
2751             ,p_accounting_line_code       => l_err.accounting_line_code);
2752   END LOOP;
2753 
2754   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2755     trace(p_msg    => 'END of procedure chk_jlt_encum_type_exists'
2756          ,p_module => l_log_module
2757          ,p_level  => C_LEVEL_PROCEDURE);
2758   END IF;
2759 
2760   RETURN l_return;
2761 
2762 EXCEPTION
2763   WHEN xla_exceptions_pkg.application_exception THEN
2764     IF (c_invalid_jlt%ISOPEN) THEN
2765       CLOSE c_invalid_jlt;
2766     END IF;
2767     RAISE;
2768 
2769   WHEN OTHERS                                   THEN
2770     IF (c_invalid_jlt%ISOPEN) THEN
2771       CLOSE c_invalid_jlt;
2772     END IF;
2773     xla_exceptions_pkg.raise_message
2774       (p_location   => 'xla_line_definitions_pvt.chk_jlt_encum_type_exists');
2775 END chk_jlt_encum_type_exists;
2776 
2777 --=============================================================================
2778 --
2779 -- Name: chk_jlt_acct_class_exists
2780 -- Description: Check if all accounting class of the JLTs assigned to the
2781 --              line definition are enabled
2782 --
2783 --=============================================================================
2784 FUNCTION chk_jlt_acct_class_exists
2785   (p_application_id                   IN NUMBER
2786   ,p_amb_context_code                 IN VARCHAR2
2787   ,p_event_class_code                 IN VARCHAR2
2788   ,p_event_type_code                  IN VARCHAR2
2789   ,p_line_definition_owner_code       IN VARCHAR2
2790   ,p_line_definition_code             IN VARCHAR2)
2791 RETURN BOOLEAN
2792 IS
2793   --
2794   -- Get any JLT that the accounting class does not exist in the lookup
2795   --
2796   CURSOR c_invalid_jlt IS
2797   SELECT  distinct xld.event_class_code, xld.event_type_code,
2798           xld.accounting_line_type_code, xld.accounting_line_code
2799      FROM xla_line_defn_jlt_assgns    xld
2800         , xla_acct_line_types_b       xal
2801     WHERE xal.application_id             = xld.application_id
2802       AND xal.amb_context_code           = xld.amb_context_code
2803       AND xal.event_class_code           = xld.event_class_code
2804       AND xal.accounting_line_type_code  = xld.accounting_line_type_code
2805       AND xal.accounting_line_code       = xld.accounting_line_code
2806       AND xal.enabled_flag               = 'Y'
2807       AND xld.application_id             = p_application_id
2808       AND xld.amb_context_code           = p_amb_context_code
2809       AND xld.event_class_code           = p_event_class_code
2810       AND xld.event_type_code            = p_event_type_code
2811       AND xld.line_definition_owner_code = p_line_definition_owner_code
2812       AND xld.line_definition_code       = p_line_definition_code
2813       AND xld.active_flag                = 'Y'
2814       AND NOT EXISTS
2815           (SELECT 'y'
2816              FROM xla_lookups xlk
2817             WHERE xlk.lookup_type             = 'XLA_ACCOUNTING_CLASS'
2818               AND xlk.lookup_code             = xal.accounting_class_code);
2819 
2820   l_return      BOOLEAN;
2821   l_log_module  VARCHAR2(240);
2822 BEGIN
2823   IF g_log_enabled THEN
2824     l_log_module := C_DEFAULT_MODULE||'.chk_jlt_acct_class_exists';
2825   END IF;
2826 
2827   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2828     trace(p_msg    => 'BEGIN of procedure chk_jlt_acct_class_exists'
2829          ,p_module => l_log_module
2830          ,p_level  => C_LEVEL_PROCEDURE);
2831   END IF;
2832 
2833   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2834     trace(p_msg    => 'application_id = '||p_application_id||
2835                       ',amb_context_code = '||p_amb_context_code||
2836                       ',event_class_code = '||p_event_class_code||
2837                       ',event_type_code = '||p_event_type_code||
2838                       ',line_definition_owner_code = '||p_line_definition_owner_code||
2839                       ',line_definition_code = '||p_line_definition_code
2840          ,p_module => l_log_module
2841          ,p_level  => C_LEVEL_STATEMENT);
2842   END IF;
2843 
2844   l_return := TRUE;
2845 
2846   --
2847   -- Check if any disabled JLT is assigned to the line definition
2848   --
2849   FOR l_err IN c_invalid_jlt LOOP
2850     l_return := FALSE;
2851 
2852     xla_amb_setup_err_pkg.stack_error
2853             (p_message_name               => 'XLA_AB_INVALID_ACCT_CLASS'
2854             ,p_message_type               => 'E'
2855             ,p_message_category           => 'LINE_TYPE'
2856             ,p_category_sequence          => 10
2857             ,p_application_id             => p_application_id
2858             ,p_amb_context_code           => p_amb_context_code
2859             ,p_event_class_code           => p_event_class_code
2860             ,p_event_type_code            => p_event_type_code
2861             ,p_line_definition_owner_code => p_line_definition_owner_code
2862             ,p_line_definition_code       => p_line_definition_code
2863             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
2864             ,p_accounting_line_code       => l_err.accounting_line_code);
2865   END LOOP;
2866 
2867   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2868     trace(p_msg    => 'END of procedure chk_jlt_acct_class_exists'
2869          ,p_module => l_log_module
2870          ,p_level  => C_LEVEL_PROCEDURE);
2871   END IF;
2872 
2873   RETURN l_return;
2874 
2875 EXCEPTION
2876   WHEN xla_exceptions_pkg.application_exception THEN
2877     IF (c_invalid_jlt%ISOPEN) THEN
2878       CLOSE c_invalid_jlt;
2879     END IF;
2880     RAISE;
2881 
2882   WHEN OTHERS                                   THEN
2883     IF (c_invalid_jlt%ISOPEN) THEN
2884       CLOSE c_invalid_jlt;
2885     END IF;
2886     xla_exceptions_pkg.raise_message
2887       (p_location   => 'xla_line_definitions_pvt.chk_jlt_acct_class_exists');
2888 END chk_jlt_acct_class_exists;
2889 
2890 --=============================================================================
2891 --
2892 -- Name: chk_jlt_rounding_class_exists
2893 -- Description: Check if all rounding class of the JLTs assigned to the
2894 --              line definition are enabled
2895 --
2896 --=============================================================================
2897 FUNCTION chk_jlt_rounding_class_exists
2898   (p_application_id                   IN NUMBER
2899   ,p_amb_context_code                 IN VARCHAR2
2900   ,p_event_class_code                 IN VARCHAR2
2901   ,p_event_type_code                  IN VARCHAR2
2902   ,p_line_definition_owner_code       IN VARCHAR2
2903   ,p_line_definition_code             IN VARCHAR2)
2904 RETURN BOOLEAN
2905 IS
2906   --
2907   -- Get any JLT where its rounding class does not exist in the lookup
2908   --
2909   CURSOR c_invalid_jlt IS
2910   SELECT  distinct xld.event_class_code, xld.event_type_code,
2911           xld.accounting_line_type_code, xld.accounting_line_code
2912      FROM xla_line_defn_jlt_assgns    xld
2913         , xla_acct_line_types_b       xal
2914     WHERE xal.application_id             = xld.application_id
2915       AND xal.amb_context_code           = xld.amb_context_code
2916       AND xal.event_class_code           = xld.event_class_code
2917       AND xal.accounting_line_type_code  = xld.accounting_line_type_code
2918       AND xal.accounting_line_code       = xld.accounting_line_code
2919       AND xal.enabled_flag               = 'Y'
2920       AND xld.application_id             = p_application_id
2921       AND xld.amb_context_code           = p_amb_context_code
2922       AND xld.event_class_code           = p_event_class_code
2923       AND xld.event_type_code            = p_event_type_code
2924       AND xld.line_definition_owner_code = p_line_definition_owner_code
2925       AND xld.line_definition_code       = p_line_definition_code
2926       AND xld.active_flag                = 'Y'
2927       AND NOT EXISTS
2928           (SELECT 'y'
2929              FROM xla_lookups xlk
2930             WHERE xlk.lookup_type             = 'XLA_ACCOUNTING_CLASS'
2931               AND xlk.lookup_code             = xal.rounding_class_code);
2932 
2933   l_return      BOOLEAN;
2934   l_log_module  VARCHAR2(240);
2935 BEGIN
2936   IF g_log_enabled THEN
2937     l_log_module := C_DEFAULT_MODULE||'.chk_jlt_rounding_class_exists';
2938   END IF;
2939 
2940   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2941     trace(p_msg    => 'BEGIN of procedure chk_jlt_rounding_class_exists'
2942          ,p_module => l_log_module
2943          ,p_level  => C_LEVEL_PROCEDURE);
2944   END IF;
2945 
2946   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2947     trace(p_msg    => 'application_id = '||p_application_id||
2948                       ',amb_context_code = '||p_amb_context_code||
2949                       ',event_class_code = '||p_event_class_code||
2950                       ',event_type_code = '||p_event_type_code||
2951                       ',line_definition_owner_code = '||p_line_definition_owner_code||
2952                       ',line_definition_code = '||p_line_definition_code
2953          ,p_module => l_log_module
2954          ,p_level  => C_LEVEL_STATEMENT);
2955   END IF;
2956 
2957   l_return := TRUE;
2958 
2959   --
2960   -- Check if any disabled JLT is assigned to the line definition
2961   --
2962   FOR l_err IN c_invalid_jlt LOOP
2963     l_return := FALSE;
2964 
2965     xla_amb_setup_err_pkg.stack_error
2966             (p_message_name               => 'XLA_AB_INVALID_ROUNDING_CLASS'
2967             ,p_message_type               => 'E'
2968             ,p_message_category           => 'LINE_TYPE'
2969             ,p_category_sequence          => 10
2970             ,p_application_id             => p_application_id
2971             ,p_amb_context_code           => p_amb_context_code
2972             ,p_event_class_code           => p_event_class_code
2973             ,p_event_type_code            => p_event_type_code
2974             ,p_line_definition_owner_code => p_line_definition_owner_code
2975             ,p_line_definition_code       => p_line_definition_code
2976             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
2977             ,p_accounting_line_code       => l_err.accounting_line_code);
2978   END LOOP;
2979 
2980   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2981     trace(p_msg    => 'END of procedure chk_jlt_rounding_class_exists'
2982          ,p_module => l_log_module
2983          ,p_level  => C_LEVEL_PROCEDURE);
2984   END IF;
2985 
2986   RETURN l_return;
2987 
2988 EXCEPTION
2989   WHEN xla_exceptions_pkg.application_exception THEN
2990     IF (c_invalid_jlt%ISOPEN) THEN
2991       CLOSE c_invalid_jlt;
2992     END IF;
2993     RAISE;
2994 
2995   WHEN OTHERS                                   THEN
2996     IF (c_invalid_jlt%ISOPEN) THEN
2997       CLOSE c_invalid_jlt;
2998     END IF;
2999     xla_exceptions_pkg.raise_message
3000       (p_location   => 'xla_line_definitions_pvt.chk_jlt_rounding_class_exists');
3001 END chk_jlt_rounding_class_exists;
3002 
3003 --=============================================================================
3004 --
3005 -- Name: chk_jlt_bflow_class_exists
3006 -- Description: Check if all business flow class of the JLTs assigned to the
3007 --              line definition are enabled
3008 --
3009 --=============================================================================
3010 FUNCTION chk_jlt_bflow_class_exists
3011   (p_application_id                   IN NUMBER
3012   ,p_amb_context_code                 IN VARCHAR2
3013   ,p_event_class_code                 IN VARCHAR2
3014   ,p_event_type_code                  IN VARCHAR2
3015   ,p_line_definition_owner_code       IN VARCHAR2
3016   ,p_line_definition_code             IN VARCHAR2)
3017 RETURN BOOLEAN
3018 IS
3019   --
3020   -- Get any JLT that's business flow class does not exists in the lookup
3021   --
3022   CURSOR c_invalid_jlt IS
3023   SELECT  distinct xld.event_class_code, xld.event_type_code,
3024           xld.accounting_line_type_code, xld.accounting_line_code
3025      FROM xla_line_defn_jlt_assgns    xld
3026         , xla_acct_line_types_b       xal
3027     WHERE xal.application_id             = xld.application_id
3028       AND xal.amb_context_code           = xld.amb_context_code
3029       AND xal.event_class_code           = xld.event_class_code
3030       AND xal.accounting_line_type_code  = xld.accounting_line_type_code
3031       AND xal.accounting_line_code       = xld.accounting_line_code
3032       AND xal.enabled_flag               = 'Y'
3033       AND xal.business_class_code        IS NOT NULL
3034       AND xld.application_id             = p_application_id
3035       AND xld.amb_context_code           = p_amb_context_code
3036       AND xld.event_class_code           = p_event_class_code
3037       AND xld.event_type_code            = p_event_type_code
3038       AND xld.line_definition_owner_code = p_line_definition_owner_code
3039       AND xld.line_definition_code       = p_line_definition_code
3040       AND xld.active_flag                = 'Y'
3041       AND NOT EXISTS
3042           (SELECT 'y'
3043              FROM xla_lookups xlk
3044             WHERE xlk.lookup_type             = 'XLA_BUSINESS_FLOW_CLASS'
3045               AND xlk.lookup_code             = xal.business_class_code);
3046 
3047   l_return      BOOLEAN;
3048   l_log_module  VARCHAR2(240);
3049 BEGIN
3050   IF g_log_enabled THEN
3051     l_log_module := C_DEFAULT_MODULE||'.chk_jlt_bflow_class_exists';
3052   END IF;
3053 
3054   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3055     trace(p_msg    => 'BEGIN of procedure chk_jlt_bflow_class_exists'
3056          ,p_module => l_log_module
3057          ,p_level  => C_LEVEL_PROCEDURE);
3058   END IF;
3059 
3060   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3061     trace(p_msg    => 'application_id = '||p_application_id||
3062                       ',amb_context_code = '||p_amb_context_code||
3063                       ',event_class_code = '||p_event_class_code||
3064                       ',event_type_code = '||p_event_type_code||
3065                       ',line_definition_owner_code = '||p_line_definition_owner_code||
3066                       ',line_definition_code = '||p_line_definition_code
3067          ,p_module => l_log_module
3068          ,p_level  => C_LEVEL_STATEMENT);
3069   END IF;
3070 
3071   l_return := TRUE;
3072 
3073   --
3074   -- Check if any disabled JLT is assigned to the line definition
3075   --
3076   FOR l_err IN c_invalid_jlt LOOP
3077     l_return := FALSE;
3078 
3079     xla_amb_setup_err_pkg.stack_error
3080             (p_message_name               => 'XLA_AB_INVALID_BFLOW_CLASS'
3081             ,p_message_type               => 'E'
3082             ,p_message_category           => 'LINE_TYPE'
3083             ,p_category_sequence          => 10
3084             ,p_application_id             => p_application_id
3085             ,p_amb_context_code           => p_amb_context_code
3086             ,p_event_class_code           => p_event_class_code
3087             ,p_event_type_code            => p_event_type_code
3088             ,p_line_definition_owner_code => p_line_definition_owner_code
3089             ,p_line_definition_code       => p_line_definition_code
3090             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
3091             ,p_accounting_line_code       => l_err.accounting_line_code);
3092   END LOOP;
3093 
3094   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3095     trace(p_msg    => 'END of procedure chk_jlt_bflow_class_exists'
3096          ,p_module => l_log_module
3097          ,p_level  => C_LEVEL_PROCEDURE);
3098   END IF;
3099 
3100   RETURN l_return;
3101 
3102 EXCEPTION
3103   WHEN xla_exceptions_pkg.application_exception THEN
3104     IF (c_invalid_jlt%ISOPEN) THEN
3105       CLOSE c_invalid_jlt;
3106     END IF;
3107     RAISE;
3108 
3109   WHEN OTHERS                                   THEN
3110     IF (c_invalid_jlt%ISOPEN) THEN
3111       CLOSE c_invalid_jlt;
3112     END IF;
3113     xla_exceptions_pkg.raise_message
3114       (p_location   => 'xla_line_definitions_pvt.chk_jlt_bflow_class_exists');
3115 END chk_jlt_bflow_class_exists;
3116 
3117 --=============================================================================
3118 --
3119 -- Name: chk_jlt_business_class
3120 -- Description: Check if all JLT assignments has correct business class
3121 --
3122 --=============================================================================
3123 FUNCTION chk_jlt_business_class
3124   (p_application_id                   IN NUMBER
3125   ,p_amb_context_code                 IN VARCHAR2
3126   ,p_event_class_code                 IN VARCHAR2
3127   ,p_event_type_code                  IN VARCHAR2
3128   ,p_line_definition_owner_code       IN VARCHAR2
3129   ,p_line_definition_code             IN VARCHAR2)
3130 RETURN BOOLEAN
3131 IS
3132   --
3133   -- Get any JLT assignment that has a business flow method of 'NONE'
3134   -- and have inherit_desc_flag set to 'Y'
3135   --
3136   CURSOR c_invalid_jlt IS
3137   SELECT  distinct event_class_code, event_type_code,
3138           accounting_line_type_code, accounting_line_code
3139      FROM xla_line_defn_jlt_assgns    xld
3140     WHERE xld.application_id             = p_application_id
3141       AND xld.amb_context_code           = p_amb_context_code
3142       AND xld.event_class_code           = p_event_class_code
3143       AND xld.event_type_code            = p_event_type_code
3144       AND xld.line_definition_owner_code = p_line_definition_owner_code
3145       AND xld.line_definition_code       = p_line_definition_code
3146       AND xld.inherit_desc_flag          = 'Y'
3147       AND EXISTS
3148           (SELECT 'y'
3149              FROM xla_acct_line_types_b xal
3150             WHERE xal.application_id             = xld.application_id
3151               AND xal.amb_context_code           = xld.amb_context_code
3152               AND xal.event_class_code           = xld.event_class_code
3153               AND xal.accounting_line_type_code  = xld.accounting_line_type_code
3154               AND xal.accounting_line_code       = xld.accounting_line_code
3155               AND xal.business_method_code       = 'NONE');
3156 
3157   --
3158   -- Bug 4922099
3159   -- NOTE: ADR's can be attached to Business Flow JLTs, hence following validation needs to be removed.
3160   --
3161 
3162 /*
3163   --
3164   -- Get any JLT assignment that has a business flow method of 'PRIOR_ENTRY'
3165   -- and has ADRs assigned to it.
3166   --
3167   CURSOR c_pe_adr_jlt IS
3168   SELECT  distinct xld.event_class_code, xld.event_type_code,
3169           xld.accounting_line_type_code, xld.accounting_line_code
3170      FROM xla_line_defn_jlt_assgns    xld, xla_acct_line_types_b xal
3171     WHERE xld.application_id             = p_application_id
3172       AND xld.amb_context_code           = p_amb_context_code
3173       AND xld.event_class_code           = p_event_class_code
3174       AND xld.event_type_code            = p_event_type_code
3175       AND xld.line_definition_owner_code = p_line_definition_owner_code
3176       AND xld.line_definition_code       = p_line_definition_code
3177       AND xal.application_id             = xld.application_id
3178       AND xal.amb_context_code           = xld.amb_context_code
3179       AND xal.event_class_code           = xld.event_class_code
3180       AND xal.accounting_line_type_code  = xld.accounting_line_type_code
3181       AND xal.accounting_line_code       = xld.accounting_line_code
3182       AND xal.business_method_code       = 'PRIOR_ENTRY'
3183       AND EXISTS
3184           (SELECT 'y'
3185              FROM xla_line_defn_adr_assgns adr
3186             WHERE adr.application_id             = xld.application_id
3187               AND adr.amb_context_code           = xld.amb_context_code
3188               AND adr.event_class_code           = xld.event_class_code
3189               AND adr.event_type_code            = xld.event_type_code
3190               AND adr.line_definition_owner_code = xld.line_definition_owner_code
3191               AND adr.line_definition_code       = xld.line_definition_code
3192               AND adr.accounting_line_type_code  = xld.accounting_line_type_code
3193               AND adr.accounting_line_code       = xld.accounting_line_code);
3194 */
3195 
3196   --
3197   -- Get any JLT assignment that has a business flow method of 'PRIOR_ENTRY'
3198   -- and has analytical criteria assigned to it.
3199   --
3200   CURSOR c_pe_ac_jlt IS
3201   SELECT  distinct xld.event_class_code, xld.event_type_code,
3202           xld.accounting_line_type_code, xld.accounting_line_code
3203      FROM xla_line_defn_jlt_assgns    xld, xla_acct_line_types_b xal
3204     WHERE xld.application_id             = p_application_id
3205       AND xld.amb_context_code           = p_amb_context_code
3206       AND xld.event_class_code           = p_event_class_code
3207       AND xld.event_type_code            = p_event_type_code
3208       AND xld.line_definition_owner_code = p_line_definition_owner_code
3209       AND xld.line_definition_code       = p_line_definition_code
3210       AND xal.application_id             = xld.application_id
3211       AND xal.amb_context_code           = xld.amb_context_code
3212       AND xal.event_class_code           = xld.event_class_code
3213       AND xal.accounting_line_type_code  = xld.accounting_line_type_code
3214       AND xal.accounting_line_code       = xld.accounting_line_code
3215       AND xal.business_method_code       = 'PRIOR_ENTRY'
3216       AND EXISTS
3217           (SELECT 'y'
3218              FROM xla_line_defn_ac_assgns adr
3219             WHERE adr.application_id             = xld.application_id
3220               AND adr.amb_context_code           = xld.amb_context_code
3221               AND adr.event_class_code           = xld.event_class_code
3222               AND adr.event_type_code            = xld.event_type_code
3223               AND adr.line_definition_owner_code = xld.line_definition_owner_code
3224               AND adr.line_definition_code       = xld.line_definition_code
3225               AND adr.accounting_line_type_code  = xld.accounting_line_type_code
3226               AND adr.accounting_line_code       = xld.accounting_line_code);
3227 
3228   --
3229   -- Get any JLT assignment that has a business flow method of 'NONE'
3230   -- and has inherit_adr_flag set to 'Y'
3231   --
3232   CURSOR c_se_adr_jlt IS
3233   SELECT  distinct xld.event_class_code, xld.event_type_code,
3234           xld.accounting_line_type_code, xld.accounting_line_code
3235      FROM xla_line_defn_jlt_assgns    xld, xla_acct_line_types_b xal
3236     WHERE xld.application_id             = p_application_id
3237       AND xld.amb_context_code           = p_amb_context_code
3238       AND xld.event_class_code           = p_event_class_code
3239       AND xld.event_type_code            = p_event_type_code
3240       AND xld.line_definition_owner_code = p_line_definition_owner_code
3241       AND xld.line_definition_code       = p_line_definition_code
3242       AND xal.application_id             = xld.application_id
3243       AND xal.amb_context_code           = xld.amb_context_code
3244       AND xal.event_class_code           = xld.event_class_code
3245       AND xal.accounting_line_type_code  = xld.accounting_line_type_code
3246       AND xal.accounting_line_code       = xld.accounting_line_code
3247       AND xal.business_method_code       = 'NONE'
3248       AND EXISTS
3249           (SELECT 'y'
3250              FROM xla_line_defn_adr_assgns adr
3251             WHERE adr.application_id             = xld.application_id
3252               AND adr.amb_context_code           = xld.amb_context_code
3253               AND adr.event_class_code           = xld.event_class_code
3254               AND adr.event_type_code            = xld.event_type_code
3255               AND adr.line_definition_owner_code = xld.line_definition_owner_code
3256               AND adr.line_definition_code       = xld.line_definition_code
3257               AND adr.accounting_line_type_code  = xld.accounting_line_type_code
3258               AND adr.accounting_line_code       = xld.accounting_line_code
3259               AND adr.inherit_adr_flag           = 'Y');
3260 
3261   --
3262   -- Get any JLT assignment that has an invalid business flow class
3263   --
3264   CURSOR c_invalid_class IS
3265   SELECT  distinct xld.event_class_code, xld.event_type_code,
3266           xld.accounting_line_type_code, xld.accounting_line_code
3267      FROM xla_line_defn_jlt_assgns    xld, xla_acct_line_types_b xal
3268     WHERE xld.application_id             = p_application_id
3269       AND xld.amb_context_code           = p_amb_context_code
3270       AND xld.event_class_code           = p_event_class_code
3271       AND xld.event_type_code            = p_event_type_code
3272       AND xld.line_definition_owner_code = p_line_definition_owner_code
3273       AND xld.line_definition_code       = p_line_definition_code
3274       AND xal.application_id             = xld.application_id
3275       AND xal.amb_context_code           = xld.amb_context_code
3276       AND xal.event_class_code           = xld.event_class_code
3277       AND xal.accounting_line_type_code  = xld.accounting_line_type_code
3278       AND xal.accounting_line_code       = xld.accounting_line_code
3279       AND xal.business_class_code        IS NOT NULL
3280       AND NOT EXISTS
3281           (SELECT 'y'
3282              FROM xla_lookups lkp
3283             WHERE lkp.lookup_code                = xal.business_class_code
3284               AND lkp.lookup_type                = 'XLA_BUSINESS_FLOW_CLASS'
3285               AND lkp.enabled_flag               = 'Y'
3286               AND lkp.end_date_active            IS NULL);
3287 
3288 
3289   l_return      BOOLEAN;
3290   l_log_module  VARCHAR2(240);
3291 BEGIN
3292   IF g_log_enabled THEN
3293     l_log_module := C_DEFAULT_MODULE||'.chk_jlt_business_class';
3294   END IF;
3295 
3296   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3297     trace(p_msg    => 'BEGIN of procedure chk_jlt_is_enabled'
3298          ,p_module => l_log_module
3299          ,p_level  => C_LEVEL_PROCEDURE);
3300   END IF;
3301 
3302   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3303     trace(p_msg    => 'application_id = '||p_application_id||
3304                       ',amb_context_code = '||p_amb_context_code||
3305                       ',event_class_code = '||p_event_class_code||
3306                       ',event_type_code = '||p_event_type_code||
3307                       ',line_definition_owner_code = '||p_line_definition_owner_code||
3308                       ',line_definition_code = '||p_line_definition_code
3309          ,p_module => l_log_module
3310          ,p_level  => C_LEVEL_STATEMENT);
3311   END IF;
3312 
3313   l_return := TRUE;
3314 
3315   --
3316   -- Check if any JLT that has business flow method of 'NONE'
3317   -- is assigned to the line definition with inherit_desc_flag = 'Y'
3318   --
3319   FOR l_err IN c_invalid_jlt LOOP
3320     l_return := FALSE;
3321 
3322     xla_amb_setup_err_pkg.stack_error
3323             (p_message_name               => 'XLA_AB_NO_SAME_PRIOR_LINE_TYPE'
3324             ,p_message_type               => 'E'
3325             ,p_message_category           => 'LINE_TYPE'
3326             ,p_category_sequence          => 10
3327             ,p_application_id             => p_application_id
3328             ,p_amb_context_code           => p_amb_context_code
3329             ,p_event_class_code           => p_event_class_code
3330             ,p_event_type_code            => p_event_type_code
3331             ,p_line_definition_owner_code => p_line_definition_owner_code
3332             ,p_line_definition_code       => p_line_definition_code
3333             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
3334             ,p_accounting_line_code       => l_err.accounting_line_code);
3335   END LOOP;
3336 
3337   --
3338   -- Bug 4922099
3339   -- ADRs can be attached to Business flow JLTs, hence following validation needs to be removed .
3340   --
3341 /*
3342   FOR l_err IN c_pe_adr_jlt LOOP
3343     l_return := FALSE;
3344 
3345     xla_amb_setup_err_pkg.stack_error
3346             (p_message_name               => 'XLA_AB_PRIOR_LINE_TYPE_ADR'
3347             ,p_message_type               => 'E'
3348             ,p_message_category           => 'LINE_TYPE'
3349             ,p_category_sequence          => 10
3350             ,p_application_id             => p_application_id
3351             ,p_amb_context_code           => p_amb_context_code
3352             ,p_event_class_code           => p_event_class_code
3353             ,p_event_type_code            => p_event_type_code
3354             ,p_line_definition_owner_code => p_line_definition_owner_code
3355             ,p_line_definition_code       => p_line_definition_code
3356             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
3357             ,p_accounting_line_code       => l_err.accounting_line_code);
3358   END LOOP;
3359 */
3360 
3361   FOR l_err IN c_pe_ac_jlt LOOP
3362     l_return := FALSE;
3363 
3364     xla_amb_setup_err_pkg.stack_error
3365             (p_message_name               => 'XLA_AB_PRIOR_LINE_TYPE_AC'
3366             ,p_message_type               => 'E'
3367             ,p_message_category           => 'LINE_TYPE'
3368             ,p_category_sequence          => 10
3369             ,p_application_id             => p_application_id
3370             ,p_amb_context_code           => p_amb_context_code
3371             ,p_event_class_code           => p_event_class_code
3372             ,p_event_type_code            => p_event_type_code
3373             ,p_line_definition_owner_code => p_line_definition_owner_code
3374             ,p_line_definition_code       => p_line_definition_code
3375             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
3376             ,p_accounting_line_code       => l_err.accounting_line_code);
3377   END LOOP;
3378 
3379   FOR l_err IN c_se_adr_jlt LOOP
3380     l_return := FALSE;
3381 
3382     xla_amb_setup_err_pkg.stack_error
3383             (p_message_name               => 'XLA_AB_NO_SAME_LINE_TYPE_ADR'
3384             ,p_message_type               => 'E'
3385             ,p_message_category           => 'LINE_TYPE'
3386             ,p_category_sequence          => 10
3387             ,p_application_id             => p_application_id
3388             ,p_amb_context_code           => p_amb_context_code
3389             ,p_event_class_code           => p_event_class_code
3390             ,p_event_type_code            => p_event_type_code
3391             ,p_line_definition_owner_code => p_line_definition_owner_code
3392             ,p_line_definition_code       => p_line_definition_code
3393             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
3394             ,p_accounting_line_code       => l_err.accounting_line_code);
3395   END LOOP;
3396 
3397   FOR l_err IN c_invalid_class LOOP
3398     l_return := FALSE;
3399 
3400     xla_amb_setup_err_pkg.stack_error
3401             (p_message_name               => 'XLA_AB_INVALID_BUS_FLOW_CLASS'
3402             ,p_message_type               => 'E'
3403             ,p_message_category           => 'LINE_TYPE'
3404             ,p_category_sequence          => 10
3405             ,p_application_id             => p_application_id
3406             ,p_amb_context_code           => p_amb_context_code
3407             ,p_event_class_code           => p_event_class_code
3408             ,p_event_type_code            => p_event_type_code
3409             ,p_line_definition_owner_code => p_line_definition_owner_code
3410             ,p_line_definition_code       => p_line_definition_code
3411             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
3412             ,p_accounting_line_code       => l_err.accounting_line_code);
3413   END LOOP;
3414 
3415   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3416     trace(p_msg    => 'END of procedure chk_jlt_business_class'
3417          ,p_module => l_log_module
3418          ,p_level  => C_LEVEL_PROCEDURE);
3419   END IF;
3420 
3421   RETURN l_return;
3422 
3423 EXCEPTION
3424   WHEN xla_exceptions_pkg.application_exception THEN
3425     IF c_invalid_class%ISOPEN THEN
3426       CLOSE c_invalid_class;
3427     END IF;
3428     IF c_se_adr_jlt%ISOPEN THEN
3429       CLOSE c_se_adr_jlt;
3430     END IF;
3431 -- Bug 4922099
3432 /*
3433     IF c_pe_adr_jlt%ISOPEN THEN
3434       CLOSE c_pe_adr_jlt;
3435     END IF;
3436 */
3437     IF c_pe_ac_jlt%ISOPEN THEN
3438       CLOSE c_pe_ac_jlt;
3439     END IF;
3440     IF c_invalid_jlt%ISOPEN THEN
3441       CLOSE c_invalid_jlt;
3442     END IF;
3443     RAISE;
3444 
3445   WHEN OTHERS   THEN
3446     IF c_invalid_class%ISOPEN THEN
3447       CLOSE c_invalid_class;
3448     END IF;
3449     IF c_se_adr_jlt%ISOPEN THEN
3450       CLOSE c_se_adr_jlt;
3451     END IF;
3452 -- Bug 4922099
3453 /*
3454     IF c_pe_adr_jlt%ISOPEN THEN
3455       CLOSE c_pe_adr_jlt;
3456     END IF;
3457 */
3458     IF c_pe_ac_jlt%ISOPEN THEN
3459       CLOSE c_pe_ac_jlt;
3460     END IF;
3461     IF c_invalid_jlt%ISOPEN THEN
3462       CLOSE c_invalid_jlt;
3463     END IF;
3464     xla_exceptions_pkg.raise_message
3465       (p_location   => 'xla_line_definitions_pvt.chk_jlt_business_class');
3466 END chk_jlt_business_class;
3467 
3468 
3469 --=============================================================================
3470 --
3471 -- Name: chk_jld_same_entry
3472 -- Description: Check if all JLT assignments has correct business class
3473 --
3474 --=============================================================================
3475 FUNCTION chk_jld_same_entry
3476   (p_application_id                   IN NUMBER
3477   ,p_amb_context_code                 IN VARCHAR2
3478   ,p_event_class_code                 IN VARCHAR2
3479   ,p_event_type_code                  IN VARCHAR2
3480   ,p_line_definition_owner_code       IN VARCHAR2
3481   ,p_line_definition_code             IN VARCHAR2)
3482 RETURN BOOLEAN
3483 IS
3484   --
3485   -- Get any JLT assignment that has a business flow method of 'NONE'
3486   -- and have inherit_desc_flag set to 'Y'
3487   --
3488   CURSOR c_same_entry_jlt_debit IS
3489   SELECT  'x'
3490      FROM xla_line_defn_jlt_assgns    xld, xla_acct_line_types_b xal
3491     WHERE xld.application_id             = p_application_id
3492       AND xld.amb_context_code           = p_amb_context_code
3493       AND xld.event_class_code           = p_event_class_code
3494       AND xld.event_type_code            = p_event_type_code
3495       AND xld.line_definition_owner_code = p_line_definition_owner_code
3496       AND xld.line_definition_code       = p_line_definition_code
3497       AND xal.application_id             = xld.application_id
3498       AND xal.amb_context_code           = xld.amb_context_code
3499       AND xal.event_class_code           = xld.event_class_code
3500       AND xal.accounting_line_type_code  = xld.accounting_line_type_code
3501       AND xal.accounting_line_code       = xld.accounting_line_code
3502       AND xal.business_method_code       = 'SAME_ENTRY'
3503       AND xal.natural_side_code          = 'D';
3504 
3505   CURSOR c_same_entry_jlt_credit IS
3506   SELECT  'x'
3507      FROM xla_line_defn_jlt_assgns    xld, xla_acct_line_types_b xal
3508     WHERE xld.application_id             = p_application_id
3509       AND xld.amb_context_code           = p_amb_context_code
3510       AND xld.event_class_code           = p_event_class_code
3511       AND xld.event_type_code            = p_event_type_code
3512       AND xld.line_definition_owner_code = p_line_definition_owner_code
3513       AND xld.line_definition_code       = p_line_definition_code
3514       AND xal.application_id             = xld.application_id
3515       AND xal.amb_context_code           = xld.amb_context_code
3516       AND xal.event_class_code           = xld.event_class_code
3517       AND xal.accounting_line_type_code  = xld.accounting_line_type_code
3518       AND xal.accounting_line_code       = xld.accounting_line_code
3519       AND xal.business_method_code       = 'SAME_ENTRY'
3520       AND xal.natural_side_code          = 'C';
3521 
3522 
3523   l_return      BOOLEAN;
3524   l_log_module  VARCHAR2(240);
3525   l_exist       VARCHAR2(1);
3526 BEGIN
3527   IF g_log_enabled THEN
3528     l_log_module := C_DEFAULT_MODULE||'.chk_jld_same_entry';
3529   END IF;
3530 
3531   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3532     trace(p_msg    => 'BEGIN of procedure chk_jld_same_entry'
3533          ,p_module => l_log_module
3534          ,p_level  => C_LEVEL_PROCEDURE);
3535   END IF;
3536 
3537   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3538     trace(p_msg    => 'application_id = '||p_application_id||
3539                       ',amb_context_code = '||p_amb_context_code||
3540                       ',event_class_code = '||p_event_class_code||
3541                       ',event_type_code = '||p_event_type_code||
3542                       ',line_definition_owner_code = '||p_line_definition_owner_code||
3543                       ',line_definition_code = '||p_line_definition_code
3544          ,p_module => l_log_module
3545          ,p_level  => C_LEVEL_STATEMENT);
3546   END IF;
3547 
3548   l_return := TRUE;
3549 
3550   OPEN c_same_entry_jlt_debit;
3551   FETCH c_same_entry_jlt_debit
3552    INTO l_exist;
3553   IF c_same_entry_jlt_debit%found then
3554      OPEN c_same_entry_jlt_credit;
3555      FETCH c_same_entry_jlt_credit
3556       INTO l_exist;
3557      IF c_same_entry_jlt_credit%found then
3558         l_return := FALSE;
3559 
3560         xla_amb_setup_err_pkg.stack_error
3561             (p_message_name               => 'XLA_AB_SE_DEBIT_CREDIT'
3562             ,p_message_type               => 'W'
3563             ,p_message_category           => 'LINE_ASSIGNMENT'
3564             ,p_category_sequence          => 9
3565             ,p_application_id             => p_application_id
3566             ,p_amb_context_code           => p_amb_context_code
3567             ,p_event_class_code           => p_event_class_code
3568             ,p_event_type_code            => p_event_type_code
3569             ,p_line_definition_owner_code => p_line_definition_owner_code
3570             ,p_line_definition_code       => p_line_definition_code);
3571 
3572      END IF;
3573      CLOSE c_same_entry_jlt_credit;
3574   END IF;
3575   CLOSE c_same_entry_jlt_debit;
3576 
3577   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3578     trace(p_msg    => 'END of procedure chk_jlt_business_class'
3579          ,p_module => l_log_module
3580          ,p_level  => C_LEVEL_PROCEDURE);
3581   END IF;
3582 
3583   RETURN l_return;
3584 
3585 EXCEPTION
3586   WHEN xla_exceptions_pkg.application_exception THEN
3587     IF c_same_entry_jlt_debit%ISOPEN THEN
3588       CLOSE c_same_entry_jlt_debit;
3589     END IF;
3590     IF c_same_entry_jlt_credit%ISOPEN THEN
3591       CLOSE c_same_entry_jlt_credit;
3592     END IF;
3593     RAISE;
3594 
3595   WHEN OTHERS   THEN
3596     IF c_same_entry_jlt_debit%ISOPEN THEN
3597       CLOSE c_same_entry_jlt_debit;
3598     END IF;
3599     IF c_same_entry_jlt_credit%ISOPEN THEN
3600       CLOSE c_same_entry_jlt_credit;
3601     END IF;
3602 
3603     xla_exceptions_pkg.raise_message
3604       (p_location   => 'xla_line_definitions_pvt.chk_jld_same_entry');
3605 END chk_jld_same_entry;
3606 
3607 
3608 
3609 --=============================================================================
3610 --
3611 -- Name: chk_jlt_invalid_source_in_cond
3612 -- Description: Check if all sources used in the JLT condition is valid
3613 --
3614 --=============================================================================
3615 FUNCTION chk_jlt_invalid_source_in_cond
3616   (p_application_id                   IN NUMBER
3617   ,p_amb_context_code                 IN VARCHAR2
3618   ,p_event_class_code                 IN VARCHAR2
3619   ,p_event_type_code                  IN VARCHAR2
3620   ,p_line_definition_owner_code       IN VARCHAR2
3621   ,p_line_definition_code             IN VARCHAR2)
3622 RETURN BOOLEAN
3623 IS
3624   --
3625   -- Get all JLT that have sources that do not belong to the event class of the
3626   -- line definition
3627   --
3628   CURSOR c_invalid_sources IS
3629     SELECT distinct xld.event_class_code, xld.event_type_code,
3630            xld.accounting_line_type_code, xld.accounting_line_code,
3631            xco.source_type_code, xco.source_code
3632       FROM xla_conditions xco, xla_line_defn_jlt_assgns xld
3633      WHERE xld.application_id             = p_application_id
3634        AND xld.amb_context_code           = p_amb_context_code
3635        AND xld.event_class_code           = p_event_class_code
3636        AND xld.event_type_code            = p_event_type_code
3637        AND xld.line_definition_owner_code = p_line_definition_owner_code
3638        AND xld.line_definition_code       = p_line_definition_code
3639        AND xld.active_flag                = 'Y'
3640        AND xco.application_id             = xld.application_id
3641        AND xco.amb_context_code           = xld.amb_context_code
3642        AND xco.event_class_code           = xld.event_class_code
3643        AND xco.accounting_line_type_code  = xld.accounting_line_type_code
3644        AND xco.accounting_line_code       = xld.accounting_line_code
3645        AND xco.source_type_code           = 'S'
3646        AND NOT EXISTS
3647            (SELECT 'y'
3648               FROM xla_event_sources xes
3649              WHERE xes.source_application_id = xco.source_application_id
3650                AND xes.source_type_code      = xco.source_type_code
3651                AND xes.source_code           = xco.source_code
3652                AND xes.application_id        = p_application_id
3653                AND xes.event_class_code      = p_event_class_code
3654                AND xes.active_flag           = 'Y')
3655     UNION
3656     SELECT distinct xld.event_class_code, xld.event_type_code,
3657            xld.accounting_line_type_code, xld.accounting_line_code,
3658            xco.value_source_type_code source_type_code, xco.value_source_code source_code
3659       FROM xla_conditions xco, xla_line_defn_jlt_assgns xld
3660      WHERE xld.application_id             = p_application_id
3661        AND xld.amb_context_code           = p_amb_context_code
3662        AND xld.event_class_code           = p_event_class_code
3663        AND xld.event_type_code            = p_event_type_code
3664        AND xld.line_definition_owner_code = p_line_definition_owner_code
3665        AND xld.line_definition_code       = p_line_definition_code
3666        AND xld.active_flag                = 'Y'
3667        AND xco.application_id             = xld.application_id
3668        AND xco.amb_context_code           = xld.amb_context_code
3669        AND xco.event_class_code           = xld.event_class_code
3670        AND xco.accounting_line_type_code  = xld.accounting_line_type_code
3671        AND xco.accounting_line_code       = xld.accounting_line_code
3672        AND xco.value_source_type_code     = 'S'
3673        AND NOT EXISTS
3674            (SELECT 'y'
3675               FROM xla_event_sources xes
3676              WHERE xes.source_application_id = xco.value_source_application_id
3677                AND xes.source_type_code      = xco.value_source_type_code
3678                AND xes.source_code           = xco.value_source_code
3679                AND xes.application_id        = p_application_id
3680                AND xes.event_class_code      = p_event_class_code
3681                AND xes.active_flag           = 'Y');
3682 
3683   --
3684   -- Get all dervied sources used by the condition of the JLT
3685   --
3686   CURSOR c_jlt_cond_der_sources IS
3687     SELECT distinct xld.event_class_code, xld.event_type_code,
3688            xld.accounting_line_type_code, xld.accounting_line_code,
3689            xco.source_type_code, xco.source_code
3690       FROM xla_conditions xco, xla_line_defn_jlt_assgns xld
3691      WHERE xld.application_id             = p_application_id
3692        AND xld.amb_context_code           = p_amb_context_code
3693        AND xld.event_class_code           = p_event_class_code
3694        AND xld.event_type_code            = p_event_type_code
3695        AND xld.line_definition_owner_code = p_line_definition_owner_code
3696        AND xld.line_definition_code       = p_line_definition_code
3697        AND xld.active_flag               = 'Y'
3698        AND xco.application_id            = xld.application_id
3699        AND xco.amb_context_code          = xld.amb_context_code
3700        AND xco.event_class_code          = xld.event_class_code
3701        AND xco.accounting_line_type_code = xld.accounting_line_type_code
3702        AND xco.accounting_line_code      = xld.accounting_line_code
3703        AND xco.source_type_code          = 'D'
3704    UNION
3705     SELECT distinct xld.event_class_code, xld.event_type_code,
3706            xld.accounting_line_type_code, xld.accounting_line_code,
3707            xco.value_source_type_code source_type_code, xco.value_source_code source_code
3708       FROM xla_conditions xco, xla_line_defn_jlt_assgns xld
3709      WHERE xld.application_id             = p_application_id
3710        AND xld.amb_context_code           = p_amb_context_code
3711        AND xld.event_class_code           = p_event_class_code
3712        AND xld.event_type_code            = p_event_type_code
3713        AND xld.line_definition_owner_code = p_line_definition_owner_code
3714        AND xld.line_definition_code       = p_line_definition_code
3715        AND xld.active_flag                = 'Y'
3716        AND xco.application_id             = xld.application_id
3717        AND xco.amb_context_code           = xld.amb_context_code
3718        AND xco.event_class_code           = xld.event_class_code
3719        AND xco.accounting_line_type_code  = xld.accounting_line_type_code
3720        AND xco.accounting_line_code       = xld.accounting_line_code
3721        AND xco.value_source_type_code     = 'D';
3722 
3723   l_return      BOOLEAN;
3724   l_log_module  VARCHAR2(240);
3725 BEGIN
3726   IF g_log_enabled THEN
3727     l_log_module := C_DEFAULT_MODULE||'.chk_jlt_invalid_source_in_cond';
3728   END IF;
3729 
3730   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3731     trace(p_msg    => 'BEGIN of procedure chk_jlt_invalid_source_in_cond'
3732          ,p_module => l_log_module
3733          ,p_level  => C_LEVEL_PROCEDURE);
3734   END IF;
3735 
3736   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3737     trace(p_msg    => 'application_id = '||p_application_id||
3738                       ',amb_context_code = '||p_amb_context_code||
3739                       ',event_class_code = '||p_event_class_code||
3740                       ',event_type_code = '||p_event_type_code||
3741                       ',line_definition_owner_code = '||p_line_definition_owner_code||
3742                       ',line_definition_code = '||p_line_definition_code
3743          ,p_module => l_log_module
3744          ,p_level  => C_LEVEL_STATEMENT);
3745   END IF;
3746 
3747   l_return := TRUE;
3748 
3749   --
3750   -- Check if the condition of any JLT have seeded sources that are not assigned
3751   -- to the event class of the line definition
3752   --
3753   FOR l_err IN c_invalid_sources LOOP
3754     l_return := FALSE;
3755 
3756     xla_amb_setup_err_pkg.stack_error
3757             (p_message_name               => 'XLA_AB_LT_CON_UNASN_SRCE'
3758             ,p_message_type               => 'E'
3759             ,p_message_category           => 'LINE_TYPE'
3760             ,p_category_sequence          => 10
3761             ,p_application_id             => p_application_id
3762             ,p_amb_context_code           => p_amb_context_code
3763             ,p_event_class_code           => p_event_class_code
3764             ,p_event_type_code            => p_event_type_code
3765             ,p_line_definition_owner_code => p_line_definition_owner_code
3766             ,p_line_definition_code       => p_line_definition_code
3767             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
3768             ,p_accounting_line_code       => l_err.accounting_line_code
3769             ,p_source_type_code           => l_err.source_type_code
3770             ,p_source_code                => l_err.source_code);
3771   END LOOP;
3772 
3773   --
3774   -- Check if any derveried source used by the condition of the JLT is invalid
3775   --
3776   FOR l_err IN c_jlt_cond_der_sources LOOP
3777     IF xla_sources_pkg.derived_source_is_invalid
3778             (p_application_id             => p_application_id
3779             ,p_derived_source_code        => l_err.source_code
3780             ,p_derived_source_type_code   => 'D'
3781             ,p_event_class_code           => p_event_class_code
3782             ,p_level                      => 'L') = 'TRUE' THEN
3783       l_return := FALSE;
3784 
3785       xla_amb_setup_err_pkg.stack_error
3786             (p_message_name               => 'XLA_AB_LT_CON_UNASN_SRCE'
3787             ,p_message_type               => 'E'
3788             ,p_message_category           => 'LINE_TYPE'
3789             ,p_category_sequence          => 10
3790             ,p_application_id             => p_application_id
3791             ,p_amb_context_code           => p_amb_context_code
3792             ,p_event_class_code           => p_event_class_code
3793             ,p_event_type_code            => p_event_type_code
3794             ,p_line_definition_owner_code => p_line_definition_owner_code
3795             ,p_line_definition_code       => p_line_definition_code
3796             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
3797             ,p_accounting_line_code       => l_err.accounting_line_code
3798             ,p_source_type_code           => l_err.source_type_code
3799             ,p_source_code                => l_err.source_code);
3800 
3801     END IF;
3802   END LOOP;
3803 
3804   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3805     trace(p_msg    => 'END of procedure chk_jlt_invalid_source_in_cond'
3806          ,p_module => l_log_module
3807          ,p_level  => C_LEVEL_PROCEDURE);
3808   END IF;
3809 
3810   RETURN l_return;
3811 
3812 EXCEPTION
3813   WHEN xla_exceptions_pkg.application_exception THEN
3814     IF (c_invalid_sources%ISOPEN) THEN
3815       CLOSE c_invalid_sources;
3816     END IF;
3817     IF (c_jlt_cond_der_sources%ISOPEN) THEN
3818       CLOSE c_jlt_cond_der_sources;
3819     END IF;
3820     RAISE;
3821 
3822   WHEN OTHERS                                   THEN
3823     IF (c_invalid_sources%ISOPEN) THEN
3824       CLOSE c_invalid_sources;
3825     END IF;
3826     IF (c_jlt_cond_der_sources%ISOPEN) THEN
3827       CLOSE c_jlt_cond_der_sources;
3828     END IF;
3829     xla_exceptions_pkg.raise_message
3830       (p_location   => 'xla_line_definitions_pvt.chk_jlt_invalid_source_in_cond');
3831 
3832 END chk_jlt_invalid_source_in_cond;
3833 
3834 
3835 --=============================================================================
3836 -- 5642205
3837 -- Name: chk_jlt_invalid_source_in_jlt
3838 -- Description: Check if all sources used in the JLT attribute is valid
3839 --
3840 --=============================================================================
3841 FUNCTION chk_jlt_invalid_source_in_jlt
3842   (p_application_id                   IN NUMBER
3843   ,p_amb_context_code                 IN VARCHAR2
3844   ,p_event_class_code                 IN VARCHAR2
3845   ,p_event_type_code                  IN VARCHAR2
3846   ,p_line_definition_owner_code       IN VARCHAR2
3847   ,p_line_definition_code             IN VARCHAR2)
3848 RETURN BOOLEAN
3849 IS
3850   --
3851   -- Get all JLT that have sources that do not belong to the event class of the
3852   -- line definition. Modified for bug 6124149
3853   --
3854   CURSOR c_invalid_sources IS
3855     SELECT distinct xld.event_class_code, xld.event_type_code,
3856            xld.accounting_line_type_code, xld.accounting_line_code,
3857            xco.source_type_code, xco.source_code
3858            ,xco.accounting_attribute_code
3859       FROM xla_jlt_acct_attrs xco, xla_line_defn_jlt_assgns xld,
3860            xla_acct_attributes_b xaab
3861      WHERE xld.application_id             = p_application_id
3862        AND xld.amb_context_code           = p_amb_context_code
3863        AND xld.event_class_code           = p_event_class_code
3864        AND xld.event_type_code            = p_event_type_code
3865        AND xld.line_definition_owner_code = p_line_definition_owner_code
3866        AND xld.line_definition_code       = p_line_definition_code
3867        AND xld.active_flag                = 'Y'
3868        AND xco.application_id             = xld.application_id
3869        AND xco.amb_context_code           = xld.amb_context_code
3870        AND xco.event_class_code           = xld.event_class_code
3871        AND xco.accounting_line_type_code  = xld.accounting_line_type_code
3872        AND xco.accounting_line_code       = xld.accounting_line_code
3873        AND xco.source_type_code           in ('S','D')
3874        AND xaab.accounting_attribute_code  = xco.accounting_attribute_code
3875        AND xaab.assignment_level_code <> 'JLT_ONLY'
3876        AND NOT EXISTS
3877            (SELECT 'y'
3878               FROM xla_evt_class_acct_attrs xes
3879              WHERE xes.source_application_id = xco.source_application_id
3880                AND xes.source_type_code      = xco.source_type_code
3881                AND xes.source_code           = xco.source_code
3882                AND xes.application_id        = p_application_id
3883                AND xes.event_class_code      = p_event_class_code);
3884 
3885 
3886   --
3887   -- Get all dervied sources used by the attributes of the JLT
3888   --
3889   CURSOR c_jlt_attr_der_sources IS
3890     SELECT distinct xld.event_class_code, xld.event_type_code,
3891            xld.accounting_line_type_code, xld.accounting_line_code,
3892            xco.source_type_code, xco.source_code
3893            ,xco.accounting_attribute_code
3894       FROM xla_jlt_acct_attrs xco, xla_line_defn_jlt_assgns xld
3895      WHERE xld.application_id             = p_application_id
3896        AND xld.amb_context_code           = p_amb_context_code
3897        AND xld.event_class_code           = p_event_class_code
3898        AND xld.event_type_code            = p_event_type_code
3899        AND xld.line_definition_owner_code = p_line_definition_owner_code
3900        AND xld.line_definition_code       = p_line_definition_code
3901        AND xld.active_flag               = 'Y'
3902        AND xco.application_id            = xld.application_id
3903        AND xco.amb_context_code          = xld.amb_context_code
3904        AND xco.event_class_code          = xld.event_class_code
3905        AND xco.accounting_line_type_code = xld.accounting_line_type_code
3906        AND xco.accounting_line_code      = xld.accounting_line_code
3907        AND xco.source_type_code          = 'D';
3908 
3909   l_return      BOOLEAN;
3910   l_log_module  VARCHAR2(240);
3911 BEGIN
3912   IF g_log_enabled THEN
3913     l_log_module := C_DEFAULT_MODULE||'.chk_jlt_invalid_source_in_jlt';
3914   END IF;
3915 
3916   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3917     trace(p_msg    => 'BEGIN of procedure chk_jlt_invalid_source_in_jlt'
3918          ,p_module => l_log_module
3919          ,p_level  => C_LEVEL_PROCEDURE);
3920   END IF;
3921 
3922   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3923     trace(p_msg    => 'application_id = '||p_application_id||
3924                       ',amb_context_code = '||p_amb_context_code||
3925                       ',event_class_code = '||p_event_class_code||
3926                       ',event_type_code = '||p_event_type_code||
3927                       ',line_definition_owner_code = '||p_line_definition_owner_code||
3928                       ',line_definition_code = '||p_line_definition_code
3929          ,p_module => l_log_module
3930          ,p_level  => C_LEVEL_STATEMENT);
3931   END IF;
3932 
3933   l_return := TRUE;
3934 
3935   --
3936   -- Check if the attribute of any JLT have seeded sources that are not assigned
3937   -- to the event class of the line definition
3938   --
3939   FOR l_err IN c_invalid_sources LOOP
3940     l_return := FALSE;
3941 
3942     xla_amb_setup_err_pkg.stack_error
3943             (p_message_name               => 'XLA_AB_LT_ATTR_UNASN_SRCE'
3944             ,p_message_type               => 'E'
3945             ,p_message_category           => 'LINE_TYPE'
3946             ,p_category_sequence          => 10
3947             ,p_application_id             => p_application_id
3948             ,p_amb_context_code           => p_amb_context_code
3949             ,p_event_class_code           => p_event_class_code
3950             ,p_event_type_code            => p_event_type_code
3951             ,p_line_definition_owner_code => p_line_definition_owner_code
3952             ,p_line_definition_code       => p_line_definition_code
3953             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
3954             ,p_accounting_line_code       => l_err.accounting_line_code
3955             ,p_source_type_code           => l_err.source_type_code
3956             ,p_source_code                => l_err.source_code
3957             ,p_accounting_source_code     => l_err.accounting_attribute_code);
3958   END LOOP;
3959 
3960   --
3961   -- Check if any derveried source used by the attribute of the JLT is invalid
3962   --
3963   FOR l_err IN c_jlt_attr_der_sources LOOP
3964     IF xla_sources_pkg.derived_source_is_invalid
3965             (p_application_id             => p_application_id
3966             ,p_derived_source_code        => l_err.source_code
3967             ,p_derived_source_type_code   => 'D'
3968             ,p_event_class_code           => p_event_class_code
3969             ,p_level                      => 'L') = 'TRUE' THEN
3970       l_return := FALSE;
3971 
3972       xla_amb_setup_err_pkg.stack_error
3973             (p_message_name               => 'XLA_AB_CS_UNASN_SRCE'
3974             ,p_message_type               => 'E'
3975             ,p_message_category           => 'LINE_TYPE'
3976             ,p_category_sequence          => 10
3977             ,p_application_id             => p_application_id
3978             ,p_amb_context_code           => p_amb_context_code
3979             ,p_event_class_code           => p_event_class_code
3980             ,p_event_type_code            => p_event_type_code
3981             ,p_line_definition_owner_code => p_line_definition_owner_code
3982             ,p_line_definition_code       => p_line_definition_code
3983             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
3984             ,p_accounting_line_code       => l_err.accounting_line_code
3985             ,p_source_type_code           => l_err.source_type_code
3986             ,p_source_code                => l_err.source_code
3987             ,p_accounting_source_code     => l_err.accounting_attribute_code);
3988 
3989     END IF;
3990   END LOOP;
3991 
3992   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3993     trace(p_msg    => 'END of procedure chk_jlt_invalid_source_in_jlt'
3994          ,p_module => l_log_module
3995          ,p_level  => C_LEVEL_PROCEDURE);
3996   END IF;
3997 
3998   RETURN l_return;
3999 
4000 EXCEPTION
4001   WHEN xla_exceptions_pkg.application_exception THEN
4002     IF (c_invalid_sources%ISOPEN) THEN
4003       CLOSE c_invalid_sources;
4004     END IF;
4005     IF (c_jlt_attr_der_sources%ISOPEN) THEN
4006       CLOSE c_jlt_attr_der_sources;
4007     END IF;
4008     RAISE;
4009 
4010   WHEN OTHERS                                   THEN
4011     IF (c_invalid_sources%ISOPEN) THEN
4012       CLOSE c_invalid_sources;
4013     END IF;
4014     IF (c_jlt_attr_der_sources%ISOPEN) THEN
4015       CLOSE c_jlt_attr_der_sources;
4016     END IF;
4017     xla_exceptions_pkg.raise_message
4018       (p_location   => 'xla_line_definitions_pvt.chk_jlt_invalid_source_in_jlt');
4019 
4020 END chk_jlt_invalid_source_in_jlt;
4021 
4022 --=============================================================================
4023 --
4024 -- Name: chk_jlt_acct_source_assigned
4025 -- Description: Check if all JLT of the line definition has all required
4026 --              accounting sources assigned
4027 --
4028 --=============================================================================
4029 FUNCTION chk_jlt_acct_source_assigned
4030   (p_application_id                   IN NUMBER
4031   ,p_amb_context_code                 IN VARCHAR2
4032   ,p_event_class_code                 IN VARCHAR2
4033   ,p_event_type_code                  IN VARCHAR2
4034   ,p_line_definition_owner_code       IN VARCHAR2
4035   ,p_line_definition_code             IN VARCHAR2)
4036 RETURN BOOLEAN
4037 IS
4038   --
4039   -- Get all JLT for which not all required line accounting sources are assigned
4040   --
4041   CURSOR c_non_pe_jlt IS
4042     SELECT xld.accounting_line_type_code
4043           ,xld.accounting_line_code
4044           ,xja.accounting_attribute_code
4045       FROM xla_line_defn_jlt_assgns xld, xla_acct_line_types_b jlt, xla_jlt_acct_attrs xja
4046      WHERE xld.application_id            = xja.application_id
4047        AND xld.amb_context_code          = xja.amb_context_code
4048        AND xld.event_class_code          = xja.event_class_code
4049        AND xld.accounting_line_type_code = xja.accounting_line_type_code
4050        AND xld.accounting_line_code      = xja.accounting_line_code
4051        AND xld.application_id            = jlt.application_id
4052        AND xld.amb_context_code          = jlt.amb_context_code
4053        AND xld.event_class_code          = jlt.event_class_code
4054        AND xld.accounting_line_type_code = jlt.accounting_line_type_code
4055        AND xld.accounting_line_code      = jlt.accounting_line_code
4056        AND jlt.business_method_code      <> 'PRIOR_ENTRY'
4057        AND xld.application_id            = p_application_id
4058        AND xld.amb_context_code          = p_amb_context_code
4059        AND xld.event_class_code          = p_event_class_code
4060        AND xld.event_type_code           = p_event_type_code
4061        AND xld.line_definition_owner_code= p_line_definition_owner_code
4062        AND xld.line_definition_code      = p_line_definition_code
4063        AND xja.source_code               is null
4064        AND EXISTS (SELECT 'x'
4065                      FROM xla_acct_attributes_b xaa
4066                     WHERE xaa.accounting_attribute_code = xja.accounting_attribute_code
4067                       AND xaa.assignment_required_code      = 'Y'
4068                       AND xaa.assignment_level_code         IN ('EVT_CLASS_JLT','JLT_ONLY'));
4069 
4070   CURSOR c_pe_jlt IS
4071     SELECT xld.accounting_line_type_code
4072           ,xld.accounting_line_code
4073           ,xja.accounting_attribute_code
4074       FROM xla_line_defn_jlt_assgns xld, xla_acct_line_types_b jlt, xla_jlt_acct_attrs xja
4075      WHERE xld.application_id            = xja.application_id
4076        AND xld.amb_context_code          = xja.amb_context_code
4077        AND xld.event_class_code          = xja.event_class_code
4078        AND xld.accounting_line_type_code = xja.accounting_line_type_code
4079        AND xld.accounting_line_code      = xja.accounting_line_code
4080        AND xld.application_id            = jlt.application_id
4081        AND xld.amb_context_code          = jlt.amb_context_code
4082        AND xld.event_class_code          = jlt.event_class_code
4083        AND xld.accounting_line_type_code = jlt.accounting_line_type_code
4084        AND xld.accounting_line_code      = jlt.accounting_line_code
4085        AND jlt.business_method_code      = 'PRIOR_ENTRY'
4086        AND xld.application_id            = p_application_id
4087        AND xld.amb_context_code          = p_amb_context_code
4088        AND xld.event_class_code          = p_event_class_code
4089        AND xld.event_type_code           = p_event_type_code
4090        AND xld.line_definition_owner_code= p_line_definition_owner_code
4091        AND xld.line_definition_code      = p_line_definition_code
4092        AND xja.source_code               is null
4093        AND EXISTS (SELECT 'x'
4094                      FROM xla_acct_attributes_b xaa
4095                     WHERE xaa.accounting_attribute_code     = xja.accounting_attribute_code
4096                       AND xaa.assignment_required_code      = 'Y'
4097                       AND xaa.assignment_level_code         IN ('EVT_CLASS_JLT','JLT_ONLY')
4098                       AND xaa.inherited_flag                = 'N');
4099 
4100 
4101   l_return      BOOLEAN;
4102   l_log_module  VARCHAR2(240);
4103 BEGIN
4104   IF g_log_enabled THEN
4105     l_log_module := C_DEFAULT_MODULE||'.chk_jlt_acct_source_assigned';
4106   END IF;
4107 
4108   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4109     trace(p_msg    => 'BEGIN of procedure chk_jlt_acct_source_assigned'
4110          ,p_module => l_log_module
4111          ,p_level  => C_LEVEL_PROCEDURE);
4112   END IF;
4113 
4114   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
4115     trace(p_msg    => 'application_id = '||p_application_id||
4116                       ',amb_context_code = '||p_amb_context_code||
4117                       ',event_class_code = '||p_event_class_code||
4118                       ',event_type_code = '||p_event_type_code||
4119                       ',line_definition_owner_code = '||p_line_definition_owner_code||
4120                       ',line_definition_code = '||p_line_definition_code
4121          ,p_module => l_log_module
4122          ,p_level  => C_LEVEL_STATEMENT);
4123   END IF;
4124 
4125   l_return := TRUE;
4126 
4127   --
4128   -- Check if any JLT does not have all required line accounting sources
4129   --
4130   FOR l_err IN c_non_pe_jlt LOOP
4131     l_return := FALSE;
4132 
4133     xla_amb_setup_err_pkg.stack_error
4134             (p_message_name               => 'XLA_AB_LT_ACCTING_SOURCE'
4135             ,p_message_type               => 'E'
4136             ,p_message_category           => 'LINE_TYPE'
4137             ,p_category_sequence          => 10
4138             ,p_application_id             => p_application_id
4139             ,p_amb_context_code           => p_amb_context_code
4140             ,p_event_class_code           => p_event_class_code
4141             ,p_event_type_code            => p_event_type_code
4142             ,p_line_definition_owner_code => p_line_definition_owner_code
4143             ,p_line_definition_code       => p_line_definition_code
4144             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
4145             ,p_accounting_line_code       => l_err.accounting_line_code
4146             ,p_accounting_source_code     => l_err.accounting_attribute_code);
4147   END LOOP;
4148 
4149   FOR l_err IN c_pe_jlt LOOP
4150     l_return := FALSE;
4151 
4152     xla_amb_setup_err_pkg.stack_error
4153             (p_message_name               => 'XLA_AB_LT_ACCTING_SOURCE'
4154             ,p_message_type               => 'E'
4155             ,p_message_category           => 'LINE_TYPE'
4156             ,p_category_sequence          => 10
4157             ,p_application_id             => p_application_id
4158             ,p_amb_context_code           => p_amb_context_code
4159             ,p_event_class_code           => p_event_class_code
4160             ,p_event_type_code            => p_event_type_code
4161             ,p_line_definition_owner_code => p_line_definition_owner_code
4162             ,p_line_definition_code       => p_line_definition_code
4163             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
4164             ,p_accounting_line_code       => l_err.accounting_line_code
4165             ,p_accounting_source_code     => l_err.accounting_attribute_code);
4166   END LOOP;
4167 
4168   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4169     trace(p_msg    => 'END of procedure chk_jlt_acct_source_assigned'
4170          ,p_module => l_log_module
4171          ,p_level  => C_LEVEL_PROCEDURE);
4172   END IF;
4173 
4174   RETURN l_return;
4175 
4176 EXCEPTION
4177   WHEN xla_exceptions_pkg.application_exception THEN
4178     IF (c_non_pe_jlt%ISOPEN) THEN
4179       CLOSE c_non_pe_jlt;
4180     END IF;
4181     IF (c_pe_jlt%ISOPEN) THEN
4182       CLOSE c_pe_jlt;
4183     END IF;
4184     RAISE;
4185 
4186   WHEN OTHERS                                   THEN
4187     IF (c_non_pe_jlt%ISOPEN) THEN
4188       CLOSE c_non_pe_jlt;
4189     END IF;
4190     IF (c_pe_jlt%ISOPEN) THEN
4191       CLOSE c_pe_jlt;
4192     END IF;
4193     xla_exceptions_pkg.raise_message
4194       (p_location   => 'xla_line_definitions_pvt.chk_jlt_acct_source_assigned');
4195 
4196 END chk_jlt_acct_source_assigned;
4197 
4198 
4199 --=============================================================================
4200 --
4201 -- Name: chk_jlt_inv_acct_group_src
4202 -- Description: Check if all JLT of the line definition has all required
4203 --              accounting sources assigned
4204 --
4205 --=============================================================================
4206 FUNCTION chk_jlt_inv_acct_group_src
4207   (p_application_id                   IN NUMBER
4208   ,p_amb_context_code                 IN VARCHAR2
4209   ,p_event_class_code                 IN VARCHAR2
4210   ,p_event_type_code                  IN VARCHAR2
4211   ,p_line_definition_owner_code       IN VARCHAR2
4212   ,p_line_definition_code             IN VARCHAR2)
4213 RETURN BOOLEAN
4214 IS
4215   CURSOR c_jlt_assgns IS
4216    SELECT accounting_line_type_code, accounting_line_code
4217      FROM xla_line_defn_jlt_assgns
4218     WHERE application_id             = p_application_id
4219       AND amb_context_code           = p_amb_context_code
4220       AND event_class_code           = p_event_class_code
4221       AND event_type_code            = p_event_type_code
4222       AND line_definition_owner_code = p_line_definition_owner_code
4223       AND line_definition_code       = p_line_definition_code;
4224 
4225   CURSOR c_business_method(l_accounting_line_type_code VARCHAR2
4226                           ,l_accounting_line_code      VARCHAR2)
4227   IS
4228   SELECT business_method_code, mpa_option_code
4229     FROM xla_acct_line_types_b
4230    WHERE application_id             = p_application_id
4231      AND amb_context_code           = p_amb_context_code
4232      AND event_class_code           = p_event_class_code
4233      AND accounting_line_type_code = l_accounting_line_type_code
4234      AND accounting_line_code      = l_accounting_line_code;
4235 
4236   CURSOR c_mapping_groups(l_accounting_line_type_code VARCHAR2
4237                          ,l_accounting_line_code      VARCHAR2) IS
4238    SELECT distinct xaa.assignment_group_code
4239      FROM xla_jlt_acct_attrs xja, xla_acct_attributes_b xaa
4240     WHERE xja.application_id            = p_application_id
4241       AND xja.amb_context_code          = p_amb_context_code
4242       AND xja.event_class_code          = p_event_class_code
4243       AND xja.accounting_line_type_code = l_accounting_line_type_code
4244       AND xja.accounting_line_code      = l_accounting_line_code
4245       AND xja.accounting_attribute_code = xaa.accounting_attribute_code
4246       AND xja.source_code               IS NOT NULL
4247    UNION
4248    SELECT distinct xaa.assignment_group_code
4249      FROM xla_evt_class_acct_attrs xec, xla_acct_attributes_b xaa
4250     WHERE xec.application_id            = p_application_id
4251       AND xec.event_class_code          = p_event_class_code
4252       AND xec.accounting_attribute_code = xaa.accounting_attribute_code
4253       AND xaa.assignment_level_code    = 'EVT_CLASS_ONLY'
4254       AND xec.default_flag              = 'Y';
4255 
4256   CURSOR c_group_acct_sources(l_accounting_line_type_code VARCHAR2
4257                              ,l_accounting_line_code      VARCHAR2
4258                              ,l_assignment_group_code     VARCHAR2) IS
4259    SELECT distinct xaa.accounting_attribute_code
4260      FROM xla_acct_attributes_b xaa
4261          ,xla_jlt_acct_attrs    xja
4262     WHERE xaa.assignment_level_code     = 'EVT_CLASS_JLT'
4263       AND xaa.assignment_required_code  = 'G'
4264       AND xaa.accounting_attribute_code = xja.accounting_attribute_code
4265       AND xaa.assignment_group_code     = l_assignment_group_code
4266       AND xja.application_id            = p_application_id
4267       AND xja.amb_context_code          = p_amb_context_code
4268       AND xja.event_class_code          = p_event_class_code
4269       AND xja.accounting_line_type_code = l_accounting_line_type_code
4270       AND xja.accounting_line_code      = l_accounting_line_code
4271       AND xja.source_code               IS NULL;
4272 
4273   CURSOR c_pe_mapping_groups(l_accounting_line_type_code VARCHAR2
4274                          ,l_accounting_line_code      VARCHAR2) IS
4275    SELECT distinct xaa.assignment_group_code
4276      FROM xla_jlt_acct_attrs xja, xla_acct_attributes_b xaa
4277     WHERE xja.application_id            = p_application_id
4278       AND xja.amb_context_code          = p_amb_context_code
4279       AND xja.event_class_code          = p_event_class_code
4280       AND xja.accounting_line_type_code = l_accounting_line_type_code
4281       AND xja.accounting_line_code      = l_accounting_line_code
4282       AND xja.accounting_attribute_code = xaa.accounting_attribute_code
4283       AND (xja.source_code               IS NOT NULL
4284        OR xaa.inherited_flag            = 'Y')
4285    UNION
4286    SELECT distinct xaa.assignment_group_code
4287      FROM xla_evt_class_acct_attrs xec, xla_acct_attributes_b xaa
4288     WHERE xec.application_id            = p_application_id
4289       AND xec.event_class_code          = p_event_class_code
4290       AND xec.accounting_attribute_code = xaa.accounting_attribute_code
4291       AND xaa.assignment_level_code    = 'EVT_CLASS_ONLY'
4292       AND xec.default_flag              = 'Y';
4293 
4294   CURSOR c_pe_group_acct_sources(l_accounting_line_type_code VARCHAR2
4295                              ,l_accounting_line_code      VARCHAR2
4296                              ,l_assignment_group_code     VARCHAR2) IS
4297    SELECT distinct xaa.accounting_attribute_code
4298      FROM xla_acct_attributes_b xaa
4299          ,xla_jlt_acct_attrs    xja
4300     WHERE xaa.assignment_level_code     = 'EVT_CLASS_JLT'
4301       AND xaa.assignment_required_code  = 'G'
4302       AND xaa.accounting_attribute_code = xja.accounting_attribute_code
4303       AND xaa.assignment_group_code     = l_assignment_group_code
4304       AND xja.application_id            = p_application_id
4305       AND xja.amb_context_code          = p_amb_context_code
4306       AND xja.event_class_code          = p_event_class_code
4307       AND xja.accounting_line_type_code = l_accounting_line_type_code
4308       AND xja.accounting_line_code      = l_accounting_line_code
4309       AND xja.source_code               IS NULL
4310       AND xaa.inherited_flag            = 'N';
4311 
4312   CURSOR c_bus_flow_acct_sources(l_accounting_line_type_code VARCHAR2
4313                              ,l_accounting_line_code      VARCHAR2) IS
4314    SELECT distinct xaa.accounting_attribute_code
4315      FROM xla_acct_attributes_b xaa
4316          ,xla_jlt_acct_attrs    xja
4317     WHERE xaa.assignment_level_code     = 'EVT_CLASS_JLT'
4318       AND xaa.assignment_required_code  = 'G'
4319       AND xaa.accounting_attribute_code = xja.accounting_attribute_code
4320       AND xaa.assignment_group_code     = 'BUSINESS_FLOW'
4321       AND xja.application_id            = p_application_id
4322       AND xja.amb_context_code          = p_amb_context_code
4323       AND xja.event_class_code          = p_event_class_code
4324       AND xja.accounting_line_type_code = l_accounting_line_type_code
4325       AND xja.accounting_line_code      = l_accounting_line_code
4326       and xja.source_code is null;
4327 
4328   CURSOR c_mpa_acct_sources(l_accounting_line_type_code VARCHAR2
4329                              ,l_accounting_line_code      VARCHAR2) IS
4330    SELECT distinct xaa.accounting_attribute_code
4331      FROM xla_acct_attributes_b xaa
4332          ,xla_jlt_acct_attrs    xja
4333     WHERE xaa.assignment_level_code     = 'EVT_CLASS_JLT'
4334       AND xaa.assignment_required_code  = 'G'
4335       AND xaa.accounting_attribute_code = xja.accounting_attribute_code
4336       AND xaa.assignment_group_code     = 'MULTIPERIOD_CODE'
4337       AND xja.application_id            = p_application_id
4338       AND xja.amb_context_code          = p_amb_context_code
4339       AND xja.event_class_code          = p_event_class_code
4340       AND xja.accounting_line_type_code = l_accounting_line_type_code
4341       AND xja.accounting_line_code      = l_accounting_line_code
4342       and xja.source_code is null;
4343   l_return               BOOLEAN;
4344   l_log_module           VARCHAR2(240);
4345   l_business_method_code VARCHAR2(30);
4346   l_mpa_option_code      VARCHAR2(30);
4347 
4348 BEGIN
4349   IF g_log_enabled THEN
4350     l_log_module := C_DEFAULT_MODULE||'.chk_jlt_inv_acct_group_src';
4351   END IF;
4352 
4353   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4354     trace(p_msg    => 'BEGIN of procedure chk_jlt_inv_acct_group_src'
4355          ,p_module => l_log_module
4356          ,p_level  => C_LEVEL_PROCEDURE);
4357   END IF;
4358 
4359   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
4360     trace(p_msg    => 'application_id = '||p_application_id||
4361                       ',amb_context_code = '||p_amb_context_code||
4362                       ',event_class_code = '||p_event_class_code||
4363                       ',event_type_code = '||p_event_type_code||
4364                       ',line_definition_owner_code = '||p_line_definition_owner_code||
4365                       ',line_definition_code = '||p_line_definition_code
4366          ,p_module => l_log_module
4367          ,p_level  => C_LEVEL_STATEMENT);
4368   END IF;
4369 
4370   l_return := TRUE;
4371 
4372   FOR l_jlt IN c_jlt_assgns LOOP
4373 
4374     OPEN c_business_method(l_jlt.accounting_line_type_code
4375                           ,l_jlt.accounting_line_code);
4376     FETCH c_business_method
4377      INTO l_business_method_code, l_mpa_option_code;
4378     CLOSE c_business_method;
4379 
4380     IF l_business_method_code = 'PRIOR_ENTRY' THEN
4381          FOR l_err IN c_bus_flow_acct_sources(l_jlt.accounting_line_type_code
4382                                        ,l_jlt.accounting_line_code) LOOP
4383            l_return := FALSE;
4384            xla_amb_setup_err_pkg.stack_error
4385               (p_message_name               => 'XLA_AB_BUS_FLOW_ACCT_SRC'
4386               ,p_message_type               => 'E'
4387               ,p_message_category           => 'LINE_TYPE'
4388               ,p_category_sequence          => 10
4389               ,p_application_id             => p_application_id
4390               ,p_amb_context_code           => p_amb_context_code
4391               ,p_event_class_code           => p_event_class_code
4392               ,p_event_type_code            => p_event_type_code
4393               ,p_line_definition_owner_code => p_line_definition_owner_code
4394               ,p_line_definition_code       => p_line_definition_code
4395               ,p_accounting_line_type_code  => l_jlt.accounting_line_type_code
4396               ,p_accounting_line_code       => l_jlt.accounting_line_code
4397               ,p_accounting_source_code     => l_err.accounting_attribute_code
4398               ,p_accounting_group_code      => 'BUSINESS_FLOW');
4399          END LOOP;
4400     END IF;
4401 
4402     IF l_mpa_option_code <> 'NONE' THEN
4403          FOR l_err IN c_mpa_acct_sources(l_jlt.accounting_line_type_code
4404                                        ,l_jlt.accounting_line_code) LOOP
4405            l_return := FALSE;
4406            xla_amb_setup_err_pkg.stack_error
4407               (p_message_name               => 'XLA_AB_MPA_ACCT_SRC'
4408               ,p_message_type               => 'E'
4409               ,p_message_category           => 'LINE_TYPE'
4410               ,p_category_sequence          => 10
4411               ,p_application_id             => p_application_id
4412               ,p_amb_context_code           => p_amb_context_code
4413               ,p_event_class_code           => p_event_class_code
4414               ,p_event_type_code            => p_event_type_code
4415               ,p_line_definition_owner_code => p_line_definition_owner_code
4416               ,p_line_definition_code       => p_line_definition_code
4417               ,p_accounting_line_type_code  => l_jlt.accounting_line_type_code
4418               ,p_accounting_line_code       => l_jlt.accounting_line_code
4419               ,p_accounting_source_code     => l_err.accounting_attribute_code
4420               ,p_accounting_group_code      => 'MULTIPERIOD_CODE');
4421          END LOOP;
4422     END IF;
4423 
4424 
4425     IF l_business_method_code <> 'PRIOR_ENTRY' THEN
4426 
4427        FOR l_mapping_group IN c_mapping_groups(l_jlt.accounting_line_type_code
4428                                            ,l_jlt.accounting_line_code) LOOP
4429          FOR l_err IN c_group_acct_sources(l_jlt.accounting_line_type_code
4430                                        ,l_jlt.accounting_line_code
4431                                        ,l_mapping_group.assignment_group_code) LOOP
4432            l_return := FALSE;
4433            xla_amb_setup_err_pkg.stack_error
4434               (p_message_name               => 'XLA_AB_LT_ACCT_GROUP_SRC'
4435               ,p_message_type               => 'E'
4436               ,p_message_category           => 'LINE_TYPE'
4437               ,p_category_sequence          => 10
4438               ,p_application_id             => p_application_id
4439               ,p_amb_context_code           => p_amb_context_code
4440               ,p_event_class_code           => p_event_class_code
4441               ,p_event_type_code            => p_event_type_code
4442               ,p_line_definition_owner_code => p_line_definition_owner_code
4443               ,p_line_definition_code       => p_line_definition_code
4444               ,p_accounting_line_type_code  => l_jlt.accounting_line_type_code
4445               ,p_accounting_line_code       => l_jlt.accounting_line_code
4446               ,p_accounting_source_code     => l_err.accounting_attribute_code
4447               ,p_accounting_group_code      => l_mapping_group.assignment_group_code);
4448          END LOOP;
4449        END LOOP;
4450     ELSE
4451        FOR l_pe_mapping_group IN c_pe_mapping_groups(l_jlt.accounting_line_type_code
4452                                            ,l_jlt.accounting_line_code) LOOP
4453          FOR l_err IN c_pe_group_acct_sources(l_jlt.accounting_line_type_code
4454                                        ,l_jlt.accounting_line_code
4455                                        ,l_pe_mapping_group.assignment_group_code) LOOP
4456            l_return := FALSE;
4457            xla_amb_setup_err_pkg.stack_error
4458               (p_message_name               => 'XLA_AB_LT_ACCT_GROUP_SRC'
4459               ,p_message_type               => 'E'
4460               ,p_message_category           => 'LINE_TYPE'
4461               ,p_category_sequence          => 10
4462               ,p_application_id             => p_application_id
4463               ,p_amb_context_code           => p_amb_context_code
4464               ,p_event_class_code           => p_event_class_code
4465               ,p_event_type_code            => p_event_type_code
4466               ,p_line_definition_owner_code => p_line_definition_owner_code
4467               ,p_line_definition_code       => p_line_definition_code
4468               ,p_accounting_line_type_code  => l_jlt.accounting_line_type_code
4469               ,p_accounting_line_code       => l_jlt.accounting_line_code
4470               ,p_accounting_source_code     => l_err.accounting_attribute_code
4471               ,p_accounting_group_code      => l_pe_mapping_group.assignment_group_code);
4472          END LOOP;
4473        END LOOP;
4474     END IF;
4475   END LOOP;
4476 
4477   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4478     trace(p_msg    => 'END of procedure chk_jlt_inv_acct_group_src'
4479          ,p_module => l_log_module
4480          ,p_level  => C_LEVEL_PROCEDURE);
4481   END IF;
4482 
4483   RETURN l_return;
4484 
4485 EXCEPTION
4486   WHEN xla_exceptions_pkg.application_exception THEN
4487     IF (c_jlt_assgns%ISOPEN) THEN
4488       CLOSE c_jlt_assgns;
4489     END IF;
4490     IF (c_mapping_groups%ISOPEN) THEN
4491       CLOSE c_mapping_groups;
4492     END IF;
4493     IF (c_group_acct_sources%ISOPEN) THEN
4494       CLOSE c_group_acct_sources;
4495     END IF;
4496     IF (c_pe_mapping_groups%ISOPEN) THEN
4497       CLOSE c_mapping_groups;
4498     END IF;
4499     IF (c_pe_group_acct_sources%ISOPEN) THEN
4500       CLOSE c_group_acct_sources;
4501     END IF;
4502     RAISE;
4503 
4504   WHEN OTHERS                                   THEN
4505     IF (c_jlt_assgns%ISOPEN) THEN
4506       CLOSE c_jlt_assgns;
4507     END IF;
4508     IF (c_mapping_groups%ISOPEN) THEN
4509       CLOSE c_mapping_groups;
4510     END IF;
4511     IF (c_group_acct_sources%ISOPEN) THEN
4512       CLOSE c_group_acct_sources;
4513     END IF;
4514     IF (c_pe_mapping_groups%ISOPEN) THEN
4515       CLOSE c_mapping_groups;
4516     END IF;
4517     IF (c_pe_group_acct_sources%ISOPEN) THEN
4518       CLOSE c_group_acct_sources;
4519     END IF;
4520     xla_exceptions_pkg.raise_message
4521       (p_location   => 'xla_line_definitions_pvt.chk_jlt_inv_acct_group_src');
4522 
4523 END chk_jlt_inv_acct_group_src;
4524 
4525 --=============================================================================
4526 --
4527 -- Name: validate_jlt_assgns
4528 -- Description: Validate JLT assignment of the line definition
4529 --
4530 --=============================================================================
4531 FUNCTION validate_jlt_assgns
4532   (p_application_id                   IN NUMBER
4533   ,p_amb_context_code                 IN VARCHAR2
4534   ,p_event_class_code                 IN VARCHAR2
4535   ,p_event_type_code                  IN VARCHAR2
4536   ,p_line_definition_owner_code       IN VARCHAR2
4537   ,p_line_definition_code             IN VARCHAR2)
4538 RETURN BOOLEAN
4539 IS
4540   l_return      BOOLEAN;
4541   l_log_module  VARCHAR2(240);
4542 BEGIN
4543   IF g_log_enabled THEN
4544     l_log_module := C_DEFAULT_MODULE||'.validate_jlt_assgns';
4545   END IF;
4546 
4547   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4548     trace(p_msg    => 'BEGIN of procedure validate_jlt_assgns'
4549          ,p_module => l_log_module
4550          ,p_level  => C_LEVEL_PROCEDURE);
4551   END IF;
4552 
4553   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
4554     trace(p_msg    => 'application_id = '||p_application_id||
4555                       ',amb_context_code = '||p_amb_context_code||
4556                       ',event_class_code = '||p_event_class_code||
4557                       ',event_type_code = '||p_event_type_code||
4558                       ',line_definition_owner_code = '||p_line_definition_owner_code||
4559                       ',line_definition_code = '||p_line_definition_code
4560          ,p_module => l_log_module
4561          ,p_level  => C_LEVEL_STATEMENT);
4562   END IF;
4563 
4564   l_return := TRUE;
4565 
4566   l_return := chk_jlt_exists
4567                      (p_application_id             => p_application_id
4568                      ,p_amb_context_code           => p_amb_context_code
4569                      ,p_event_class_code           => p_event_class_code
4570                      ,p_event_type_code            => p_event_type_code
4571                      ,p_line_definition_owner_code => p_line_definition_owner_code
4572                      ,p_line_definition_code       => p_line_definition_code)
4573               AND l_return;
4574 
4575   l_return := chk_jlt_is_enabled
4576                      (p_application_id             => p_application_id
4577                      ,p_amb_context_code           => p_amb_context_code
4578                      ,p_event_class_code           => p_event_class_code
4579                      ,p_event_type_code            => p_event_type_code
4580                      ,p_line_definition_owner_code => p_line_definition_owner_code
4581                      ,p_line_definition_code       => p_line_definition_code)
4582               AND l_return;
4583 
4584   l_return := chk_jlt_encum_type_exists
4585                      (p_application_id             => p_application_id
4586                      ,p_amb_context_code           => p_amb_context_code
4587                      ,p_event_class_code           => p_event_class_code
4588                      ,p_event_type_code            => p_event_type_code
4589                      ,p_line_definition_owner_code => p_line_definition_owner_code
4590                      ,p_line_definition_code       => p_line_definition_code)
4591               AND l_return;
4592 
4593   l_return := chk_jlt_acct_class_exists
4594                      (p_application_id             => p_application_id
4595                      ,p_amb_context_code           => p_amb_context_code
4596                      ,p_event_class_code           => p_event_class_code
4597                      ,p_event_type_code            => p_event_type_code
4598                      ,p_line_definition_owner_code => p_line_definition_owner_code
4599                      ,p_line_definition_code       => p_line_definition_code)
4600               AND l_return;
4601 
4602   l_return := chk_jlt_rounding_class_exists
4603                      (p_application_id             => p_application_id
4604                      ,p_amb_context_code           => p_amb_context_code
4605                      ,p_event_class_code           => p_event_class_code
4606                      ,p_event_type_code            => p_event_type_code
4607                      ,p_line_definition_owner_code => p_line_definition_owner_code
4608                      ,p_line_definition_code       => p_line_definition_code)
4609               AND l_return;
4610 
4611   l_return := chk_jlt_bflow_class_exists
4612                      (p_application_id             => p_application_id
4613                      ,p_amb_context_code           => p_amb_context_code
4614                      ,p_event_class_code           => p_event_class_code
4615                      ,p_event_type_code            => p_event_type_code
4616                      ,p_line_definition_owner_code => p_line_definition_owner_code
4617                      ,p_line_definition_code       => p_line_definition_code)
4618               AND l_return;
4619 
4620   l_return := chk_jlt_invalid_source_in_cond
4621                      (p_application_id             => p_application_id
4622                      ,p_amb_context_code           => p_amb_context_code
4623                      ,p_event_class_code           => p_event_class_code
4624                      ,p_event_type_code            => p_event_type_code
4625                      ,p_line_definition_owner_code => p_line_definition_owner_code
4626                      ,p_line_definition_code       => p_line_definition_code)
4627               AND l_return;
4628 
4629   l_return := chk_jlt_invalid_source_in_jlt     -- 5642205
4630                      (p_application_id             => p_application_id
4631                      ,p_amb_context_code           => p_amb_context_code
4632                      ,p_event_class_code           => p_event_class_code
4633                      ,p_event_type_code            => p_event_type_code
4634                      ,p_line_definition_owner_code => p_line_definition_owner_code
4635                      ,p_line_definition_code       => p_line_definition_code)
4636               AND l_return;
4637 
4638   l_return := chk_jlt_acct_source_assigned
4639                      (p_application_id             => p_application_id
4640                      ,p_amb_context_code           => p_amb_context_code
4641                      ,p_event_class_code           => p_event_class_code
4642                      ,p_event_type_code            => p_event_type_code
4643                      ,p_line_definition_owner_code => p_line_definition_owner_code
4644                      ,p_line_definition_code       => p_line_definition_code)
4645               AND l_return;
4646 
4647   l_return := chk_jlt_inv_acct_group_src
4648                      (p_application_id             => p_application_id
4649                      ,p_amb_context_code           => p_amb_context_code
4650                      ,p_event_class_code           => p_event_class_code
4651                      ,p_event_type_code            => p_event_type_code
4652                      ,p_line_definition_owner_code => p_line_definition_owner_code
4653                      ,p_line_definition_code       => p_line_definition_code)
4654               AND l_return;
4655 
4656   l_return := chk_jlt_business_class
4657                      (p_application_id             => p_application_id
4658                      ,p_amb_context_code           => p_amb_context_code
4659                      ,p_event_class_code           => p_event_class_code
4660                      ,p_event_type_code            => p_event_type_code
4661                      ,p_line_definition_owner_code => p_line_definition_owner_code
4662                      ,p_line_definition_code       => p_line_definition_code)
4663               AND l_return;
4664 
4665 
4666   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4667     trace(p_msg    => 'END of procedure validate_jlt_assgns'
4668          ,p_module => l_log_module
4669          ,p_level  => C_LEVEL_PROCEDURE);
4670   END IF;
4671 
4672   RETURN l_return;
4673 
4674 EXCEPTION
4675   WHEN xla_exceptions_pkg.application_exception THEN
4676     RAISE;
4677   WHEN OTHERS                                   THEN
4678     xla_exceptions_pkg.raise_message
4679       (p_location   => 'xla_line_definitions_pvt.validate_jlt_assgns');
4680 END validate_jlt_assgns;
4681 
4682 --=============================================================================
4683 --
4684 -- Name: chk_line_desc_is_enabled
4685 -- Description: Check if all line description of the line definition are enabled
4686 --
4687 --=============================================================================
4688 FUNCTION chk_line_desc_is_enabled
4689   (p_application_id                   IN NUMBER
4690   ,p_amb_context_code                 IN VARCHAR2
4691   ,p_event_class_code                 IN VARCHAR2
4692   ,p_event_type_code                  IN VARCHAR2
4693   ,p_line_definition_owner_code       IN VARCHAR2
4694   ,p_line_definition_code             IN VARCHAR2)
4695 RETURN BOOLEAN
4696 IS
4697   CURSOR c_invalid_line_desc IS
4698    SELECT distinct xdb.description_type_code, xdb.description_code
4699      FROM xla_line_defn_jlt_assgns xjl
4700          ,xla_descriptions_b       xdb
4701     WHERE xjl.application_id             = p_application_id
4702       AND xjl.amb_context_code           = p_amb_context_code
4703       AND xjl.event_class_code           = p_event_class_code
4704       AND xjl.event_type_code            = p_event_type_code
4705       AND xjl.line_definition_owner_code = p_line_definition_owner_code
4706       AND xjl.line_definition_code       = p_line_definition_code
4707       AND xjl.active_flag                = 'Y'
4708       AND xjl.description_type_code      IS NOT NULL
4709       AND xdb.application_id             = xjl.application_id
4710       AND xdb.amb_context_code           = xjl.amb_context_code
4711       AND xdb.description_type_code      = xjl.description_type_code
4712       AND xdb.description_code           = xjl.description_code
4713       AND xdb.enabled_flag               <> 'Y';
4714 
4715   l_return      BOOLEAN;
4716   l_log_module  VARCHAR2(240);
4717 BEGIN
4718   IF g_log_enabled THEN
4719     l_log_module := C_DEFAULT_MODULE||'.chk_line_desc_is_enabled';
4720   END IF;
4721 
4722   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4723     trace(p_msg    => 'BEGIN of procedure chk_line_desc_is_enabled'
4724          ,p_module => l_log_module
4725          ,p_level  => C_LEVEL_PROCEDURE);
4726   END IF;
4727 
4728   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
4729     trace(p_msg    => 'application_id = '||p_application_id||
4730                       ',amb_context_code = '||p_amb_context_code||
4731                       ',event_class_code = '||p_event_class_code||
4732                       ',event_type_code = '||p_event_type_code||
4733                       ',line_definition_owner_code = '||p_line_definition_owner_code||
4734                       ',line_definition_code = '||p_line_definition_code
4735          ,p_module => l_log_module
4736          ,p_level  => C_LEVEL_STATEMENT);
4737   END IF;
4738 
4739   l_return := TRUE;
4740 
4741   FOR l_err IN c_invalid_line_desc LOOP
4742     l_return := FALSE;
4743 
4744     xla_amb_setup_err_pkg.stack_error
4745               (p_message_name               => 'XLA_AB_DISABLD_LINE_DESC'
4746               ,p_message_type               => 'E'
4747               ,p_message_category           => 'LINE_DESCRIPTION'
4748               ,p_category_sequence          => 11
4749               ,p_application_id             => p_application_id
4750               ,p_amb_context_code           => p_amb_context_code
4751               ,p_event_class_code           => p_event_class_code
4752               ,p_event_type_code            => p_event_type_code
4753               ,p_line_definition_owner_code => p_line_definition_owner_code
4754               ,p_line_definition_code       => p_line_definition_code
4755               ,p_description_type_code      => l_err.description_type_code
4756               ,p_description_code           => l_err.description_code);
4757   END LOOP;
4758 
4759   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4760     trace(p_msg    => 'END of procedure chk_line_desc_is_enabled'
4761          ,p_module => l_log_module
4762          ,p_level  => C_LEVEL_PROCEDURE);
4763   END IF;
4764 
4765   RETURN l_return;
4766 
4767 EXCEPTION
4768   WHEN xla_exceptions_pkg.application_exception THEN
4769     IF (c_invalid_line_desc%ISOPEN) THEN
4770       CLOSE c_invalid_line_desc;
4771     END IF;
4772     RAISE;
4773 
4774   WHEN OTHERS                                   THEN
4775     IF (c_invalid_line_desc%ISOPEN) THEN
4776       CLOSE c_invalid_line_desc;
4777     END IF;
4778     xla_exceptions_pkg.raise_message
4779       (p_location   => 'xla_line_definitions_pvt.chk_line_desc_is_enabled');
4780 
4781 END chk_line_desc_is_enabled;
4782 
4783 --=============================================================================
4784 --
4785 -- Name: chk_line_desc_inv_src_in_cond
4786 -- Description: Check if all sources used in the JLT condition is valid
4787 --
4788 --=============================================================================
4789 FUNCTION chk_line_desc_inv_src_in_cond
4790   (p_application_id                   IN NUMBER
4791   ,p_amb_context_code                 IN VARCHAR2
4792   ,p_event_class_code                 IN VARCHAR2
4793   ,p_event_type_code                  IN VARCHAR2
4794   ,p_line_definition_owner_code       IN VARCHAR2
4795   ,p_line_definition_code             IN VARCHAR2)
4796 RETURN BOOLEAN
4797 IS
4798   --
4799   -- Get all JLT that have sources that do not belong to the event class of the
4800   -- line definition
4801   --
4802   CURSOR c_invalid_sources IS
4803    SELECT distinct xjl.description_type_code, xjl.description_code,
4804           xco.source_type_code source_type_code, xco.source_code source_code
4805      FROM xla_conditions           xco
4806          ,xla_desc_priorities      xdp
4807          ,xla_line_defn_jlt_assgns xjl
4808     WHERE xco.description_prio_id        = xdp.description_prio_id
4809       AND xdp.application_id             = xjl.application_id
4810       AND xdp.amb_context_code           = xjl.amb_context_code
4811       AND xdp.description_type_code      = xjl.description_type_code
4812       AND xdp.description_code           = xjl.description_code
4813       AND xjl.application_id             = p_application_id
4814       AND xjl.amb_context_code           = p_amb_context_code
4815       AND xjl.event_class_code           = p_event_class_code
4816       AND xjl.event_type_code            = p_event_type_code
4817       AND xjl.line_definition_owner_code = p_line_definition_owner_code
4818       AND xjl.line_definition_code       = p_line_definition_code
4819       AND xjl.active_flag                = 'Y'
4820       AND xco.source_type_code           = 'S'
4821       AND NOT EXISTS
4822           (SELECT 'y'
4823              FROM xla_event_sources xes
4824             WHERE xes.source_application_id = xco.source_application_id
4825               AND xes.source_type_code      = xco.source_type_code
4826               AND xes.source_code           = xco.source_code
4827               AND xes.application_id        = xjl.application_id
4828               AND xes.event_class_code      = xjl.event_class_code
4829               AND xes.active_flag           = 'Y')
4830    UNION
4831    SELECT distinct xjl.description_type_code, xjl.description_code,
4832           xco.value_source_type_code source_type_code, xco.value_source_code source_code
4833      FROM xla_conditions           xco
4834          ,xla_desc_priorities      xdp
4835          ,xla_line_defn_jlt_assgns xjl
4836     WHERE xco.description_prio_id        = xdp.description_prio_id
4837       AND xdp.application_id             = xjl.application_id
4838       AND xdp.amb_context_code           = xjl.amb_context_code
4839       AND xdp.description_type_code      = xjl.description_type_code
4840       AND xdp.description_code           = xjl.description_code
4841       AND xjl.application_id             = p_application_id
4842       AND xjl.amb_context_code           = p_amb_context_code
4843       AND xjl.event_class_code           = p_event_class_code
4844       AND xjl.event_type_code            = p_event_type_code
4845       AND xjl.line_definition_owner_code = p_line_definition_owner_code
4846       AND xjl.line_definition_code       = p_line_definition_code
4847       AND xjl.active_flag                = 'Y'
4848       AND xco.value_source_type_code     = 'S'
4849       AND NOT EXISTS
4850           (SELECT 'y'
4851              FROM xla_event_sources xes
4852             WHERE xes.source_application_id = xco.value_source_application_id
4853               AND xes.source_type_code      = xco.value_source_type_code
4854               AND xes.source_code           = xco.value_source_code
4855               AND xes.application_id        = xjl.application_id
4856               AND xes.event_class_code      = xjl.event_class_code
4857               AND xes.active_flag           = 'Y');
4858 
4859   CURSOR c_der_sources IS
4860    SELECT distinct xjl.description_type_code, xjl.description_code,
4861           xco.source_type_code source_type_code, xco.source_code source_code
4862      FROM xla_conditions           xco
4863          ,xla_desc_priorities      xdp
4864          ,xla_line_defn_jlt_assgns xjl
4865     WHERE xco.description_prio_id        = xdp.description_prio_id
4866       AND xdp.application_id             = xjl.application_id
4867       AND xdp.amb_context_code           = xjl.amb_context_code
4868       AND xdp.description_type_code      = xjl.description_type_code
4869       AND xdp.description_code           = xjl.description_code
4870       AND xjl.application_id             = p_application_id
4871       AND xjl.amb_context_code           = p_amb_context_code
4872       AND xjl.event_class_code           = p_event_class_code
4873       AND xjl.event_type_code            = p_event_type_code
4874       AND xjl.line_definition_owner_code = p_line_definition_owner_code
4875       AND xjl.line_definition_code       = p_line_definition_code
4876       AND xjl.active_flag                = 'Y'
4877       AND xco.source_type_code           = 'D'
4878    UNION
4879    SELECT distinct xjl.description_type_code, xjl.description_code,
4880           xco.value_source_type_code source_type_code, xco.value_source_code source_code
4881      FROM xla_conditions           xco
4882          ,xla_desc_priorities      xdp
4883          ,xla_line_defn_jlt_assgns xjl
4884     WHERE xco.description_prio_id        = xdp.description_prio_id
4885       AND xdp.application_id             = xjl.application_id
4886       AND xdp.amb_context_code           = xjl.amb_context_code
4887       AND xdp.description_type_code      = xjl.description_type_code
4888       AND xdp.description_code           = xjl.description_code
4889       AND xjl.application_id             = p_application_id
4890       AND xjl.amb_context_code           = p_amb_context_code
4891       AND xjl.event_class_code           = p_event_class_code
4892       AND xjl.event_type_code            = p_event_type_code
4893       AND xjl.line_definition_owner_code = p_line_definition_owner_code
4894       AND xjl.line_definition_code       = p_line_definition_code
4895       AND xjl.active_flag                = 'Y'
4896       AND xco.value_source_type_code     = 'D';
4897 
4898   l_return      BOOLEAN;
4899   l_log_module  VARCHAR2(240);
4900 BEGIN
4901   IF g_log_enabled THEN
4902     l_log_module := C_DEFAULT_MODULE||'.chk_line_desc_inv_src_in_cond';
4903   END IF;
4904 
4905   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4906     trace(p_msg    => 'BEGIN of procedure chk_line_desc_inv_src_in_cond'
4907          ,p_module => l_log_module
4908          ,p_level  => C_LEVEL_PROCEDURE);
4909   END IF;
4910 
4911   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
4912     trace(p_msg    => 'application_id = '||p_application_id||
4913                       ',amb_context_code = '||p_amb_context_code||
4914                       ',event_class_code = '||p_event_class_code||
4915                       ',event_type_code = '||p_event_type_code||
4916                       ',line_definition_owner_code = '||p_line_definition_owner_code||
4917                       ',line_definition_code = '||p_line_definition_code
4918          ,p_module => l_log_module
4919          ,p_level  => C_LEVEL_STATEMENT);
4920   END IF;
4921 
4922   l_return := TRUE;
4923 
4924   --
4925   -- Check if the condition of any JLT have seeded sources that are not assigned
4926   -- to the event class of the line definition
4927   --
4928   FOR l_err IN c_invalid_sources LOOP
4929     l_return := FALSE;
4930 
4931     xla_amb_setup_err_pkg.stack_error
4932               (p_message_name               => 'XLA_AB_LINE_DES_CON_SRC'
4933               ,p_message_type               => 'E'
4934               ,p_message_category           => 'LINE_DESCRIPTION'
4935               ,p_category_sequence          => 11
4936               ,p_application_id             => p_application_id
4937               ,p_amb_context_code           => p_amb_context_code
4938               ,p_line_definition_owner_code => p_line_definition_owner_code
4939               ,p_line_definition_code       => p_line_definition_code
4940               ,p_event_class_code           => p_event_class_code
4941               ,p_event_type_code            => p_event_type_code
4942               ,p_description_type_code      => l_err.description_type_code
4943               ,p_description_code           => l_err.description_code
4944               ,p_source_type_code           => l_err.source_type_code
4945               ,p_source_code                => l_err.source_code);
4946   END LOOP;
4947 
4948   FOR l_err IN c_der_sources LOOP
4949     IF xla_sources_pkg.derived_source_is_invalid
4950               (p_application_id           => p_application_id
4951               ,p_derived_source_code      => l_err.source_code
4952               ,p_derived_source_type_code => 'D'
4953               ,p_event_class_code         => p_event_class_code
4954               ,p_level                    => 'L') = 'TRUE' THEN
4955 
4956       l_return := FALSE;
4957 
4958       xla_amb_setup_err_pkg.stack_error
4959               (p_message_name               => 'XLA_AB_LINE_DES_CON_SRC'
4960               ,p_message_type               => 'E'
4961               ,p_message_category           => 'LINE_DESCRIPTION'
4962               ,p_category_sequence          => 11
4963               ,p_application_id             => p_application_id
4964               ,p_amb_context_code           => p_amb_context_code
4965               ,p_line_definition_owner_code => p_line_definition_owner_code
4966               ,p_line_definition_code       => p_line_definition_code
4967               ,p_event_class_code           => p_event_class_code
4968               ,p_event_type_code            => p_event_type_code
4969               ,p_description_type_code      => l_err.description_type_code
4970               ,p_description_code           => l_err.description_code
4971               ,p_source_type_code           => l_err.source_type_code
4972               ,p_source_code                => l_err.source_code);
4973 
4974     END IF;
4975   END LOOP;
4976 
4977   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4978     trace(p_msg    => 'END of procedure chk_line_desc_inv_src_in_cond'
4979          ,p_module => l_log_module
4980          ,p_level  => C_LEVEL_PROCEDURE);
4981   END IF;
4982 
4983   RETURN l_return;
4984 
4985 EXCEPTION
4986   WHEN xla_exceptions_pkg.application_exception THEN
4987     IF (c_invalid_sources%ISOPEN) THEN
4988       CLOSE c_invalid_sources;
4989     END IF;
4990     IF (c_der_sources%ISOPEN) THEN
4991       CLOSE c_der_sources;
4992     END IF;
4993     RAISE;
4994 
4995   WHEN OTHERS                                   THEN
4996     IF (c_invalid_sources%ISOPEN) THEN
4997       CLOSE c_invalid_sources;
4998     END IF;
4999     IF (c_der_sources%ISOPEN) THEN
5000       CLOSE c_der_sources;
5001     END IF;
5002     xla_exceptions_pkg.raise_message
5003       (p_location   => 'xla_line_definitions_pvt.chk_line_desc_inv_src_in_cond');
5004 
5005 END chk_line_desc_inv_src_in_cond;
5006 
5007 --=============================================================================
5008 --
5009 -- Name: chk_line_desc_inv_src_in_dtl
5010 -- Description: Check if all sources used in the JLT condition is valid
5011 --
5012 --=============================================================================
5013 FUNCTION chk_line_desc_inv_src_in_dtl
5014   (p_application_id                   IN NUMBER
5015   ,p_amb_context_code                 IN VARCHAR2
5016   ,p_event_class_code                 IN VARCHAR2
5017   ,p_event_type_code                  IN VARCHAR2
5018   ,p_line_definition_owner_code       IN VARCHAR2
5019   ,p_line_definition_code             IN VARCHAR2)
5020 RETURN BOOLEAN
5021 IS
5022   --
5023   -- Get all JLT that have sources that do not belong to the event class of the
5024   -- line definition
5025   --
5026   CURSOR c_invalid_sources IS
5027    SELECT distinct xjl.description_type_code, xjl.description_code,
5028           xdd.source_type_code, xdd.source_code
5029      FROM xla_descript_details_b   xdd
5030          ,xla_desc_priorities      xdp
5031          ,xla_line_defn_jlt_assgns xjl
5032     WHERE xdd.description_prio_id        = xdp.description_prio_id
5033       AND xdp.application_id             = xjl.application_id
5034       AND xdp.amb_context_code           = xjl.amb_context_code
5035       AND xdp.description_type_code      = xjl.description_type_code
5036       AND xdp.description_code           = xjl.description_code
5037       AND xjl.application_id             = p_application_id
5038       AND xjl.amb_context_code           = p_amb_context_code
5039       AND xjl.event_class_code           = p_event_class_code
5040       AND xjl.event_type_code            = p_event_type_code
5041       AND xjl.line_definition_owner_code = p_line_definition_owner_code
5042       AND xjl.line_definition_code       = p_line_definition_code
5043       AND xjl.active_flag                = 'Y'
5044       AND xdd.source_type_code           = 'S'
5045       AND NOT EXISTS
5046           (SELECT 'y'
5047              FROM xla_event_sources xes
5048             WHERE xes.source_application_id = xdd.source_application_id
5049               AND xes.source_type_code      = xdd.source_type_code
5050               AND xes.source_code           = xdd.source_code
5051               AND xes.application_id        = xjl.application_id
5052               AND xes.event_class_code      = xjl.event_class_code
5053               AND xes.active_flag           = 'Y');
5054 
5055   CURSOR c_der_sources IS
5056    SELECT distinct xjl.description_type_code, xjl.description_code,
5057           xdd.source_type_code, xdd.source_code
5058      FROM xla_descript_details_b   xdd
5059          ,xla_desc_priorities      xdp
5060          ,xla_line_defn_jlt_assgns xjl
5061     WHERE xdd.description_prio_id        = xdp.description_prio_id
5062       AND xdp.application_id             = xjl.application_id
5063       AND xdp.amb_context_code           = xjl.amb_context_code
5064       AND xdp.description_type_code      = xjl.description_type_code
5065       AND xdp.description_code           = xjl.description_code
5066       AND xjl.application_id             = p_application_id
5067       AND xjl.amb_context_code           = p_amb_context_code
5068       AND xjl.event_class_code           = p_event_class_code
5069       AND xjl.event_type_code            = p_event_type_code
5070       AND xjl.line_definition_owner_code = p_line_definition_owner_code
5071       AND xjl.line_definition_code       = p_line_definition_code
5072       AND xjl.active_flag                = 'Y'
5073       AND xdd.source_type_code           = 'D';
5074 
5075   l_return      BOOLEAN;
5076   l_log_module  VARCHAR2(240);
5077 BEGIN
5078   IF g_log_enabled THEN
5079     l_log_module := C_DEFAULT_MODULE||'.chk_line_desc_inv_src_in_dtl';
5080   END IF;
5081 
5082   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5083     trace(p_msg    => 'BEGIN of procedure chk_line_desc_inv_src_in_dtl'
5084          ,p_module => l_log_module
5085          ,p_level  => C_LEVEL_PROCEDURE);
5086   END IF;
5087 
5088   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5089     trace(p_msg    => 'application_id = '||p_application_id||
5090                       ',amb_context_code = '||p_amb_context_code||
5091                       ',event_class_code = '||p_event_class_code||
5092                       ',event_type_code = '||p_event_type_code||
5093                       ',line_definition_owner_code = '||p_line_definition_owner_code||
5094                       ',line_definition_code = '||p_line_definition_code
5095          ,p_module => l_log_module
5096          ,p_level  => C_LEVEL_STATEMENT);
5097   END IF;
5098 
5099   l_return := TRUE;
5100 
5101   --
5102   -- Check if the condition of any JLT have seeded sources that are not assigned
5103   -- to the event class of the line definition
5104   --
5105   FOR l_err IN c_invalid_sources LOOP
5106     l_return := FALSE;
5107 
5108     xla_amb_setup_err_pkg.stack_error
5109               (p_message_name               => 'XLA_AB_LINE_DES_DET_SRC'
5110               ,p_message_type               => 'E'
5111               ,p_message_category           => 'LINE_DESCRIPTION'
5112               ,p_category_sequence          => 11
5113               ,p_application_id             => p_application_id
5114               ,p_amb_context_code           => p_amb_context_code
5115               ,p_line_definition_owner_code => p_line_definition_owner_code
5116               ,p_line_definition_code       => p_line_definition_code
5117               ,p_event_class_code           => p_event_class_code
5118               ,p_event_type_code            => p_event_type_code
5119               ,p_description_type_code      => l_err.description_type_code
5120               ,p_description_code           => l_err.description_code
5121               ,p_source_type_code           => l_err.source_type_code
5122               ,p_source_code                => l_err.source_code);
5123   END LOOP;
5124 
5125   FOR l_err IN c_der_sources LOOP
5126     IF xla_sources_pkg.derived_source_is_invalid
5127               (p_application_id           => p_application_id
5128               ,p_derived_source_code      => l_err.source_code
5129               ,p_derived_source_type_code => 'D'
5130               ,p_event_class_code         => p_event_class_code
5131               ,p_level                    => 'L')  = 'TRUE' THEN
5132 
5133       l_return := FALSE;
5134 
5135       xla_amb_setup_err_pkg.stack_error
5136               (p_message_name               => 'XLA_AB_LINE_DES_DET_SRC'
5137               ,p_message_type               => 'E'
5138               ,p_message_category           => 'LINE_DESCRIPTION'
5139               ,p_category_sequence          => 11
5140               ,p_application_id             => p_application_id
5141               ,p_amb_context_code           => p_amb_context_code
5142               ,p_line_definition_owner_code => p_line_definition_owner_code
5143               ,p_line_definition_code       => p_line_definition_code
5144               ,p_event_class_code           => p_event_class_code
5145               ,p_event_type_code            => p_event_type_code
5146               ,p_description_type_code      => l_err.description_type_code
5147               ,p_description_code           => l_err.description_code
5148               ,p_source_type_code           => l_err.source_type_code
5149               ,p_source_code                => l_err.source_code);
5150     END IF;
5151   END LOOP;
5152 
5153   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5154     trace(p_msg    => 'END of procedure chk_line_desc_inv_src_in_dtl'
5155          ,p_module => l_log_module
5156          ,p_level  => C_LEVEL_PROCEDURE);
5157   END IF;
5158 
5159   RETURN l_return;
5160 
5161 EXCEPTION
5162   WHEN xla_exceptions_pkg.application_exception THEN
5163     IF (c_invalid_sources%ISOPEN) THEN
5164       CLOSE c_invalid_sources;
5165     END IF;
5166     IF (c_der_sources%ISOPEN) THEN
5167       CLOSE c_der_sources;
5168     END IF;
5169     RAISE;
5170 
5171   WHEN OTHERS                                   THEN
5172     IF (c_invalid_sources%ISOPEN) THEN
5173       CLOSE c_invalid_sources;
5174     END IF;
5175     IF (c_der_sources%ISOPEN) THEN
5176       CLOSE c_der_sources;
5177     END IF;
5178     xla_exceptions_pkg.raise_message
5179       (p_location   => 'xla_line_definitions_pvt.chk_line_desc_inv_src_in_dtl');
5180 
5181 END chk_line_desc_inv_src_in_dtl;
5182 
5183 
5184 
5185 --=============================================================================
5186 --
5187 -- Name: validate_line_descriptions
5188 -- Description: Validate JLT assignment of the line definition
5189 --
5190 --=============================================================================
5191 FUNCTION validate_line_descriptions
5192   (p_application_id                   IN NUMBER
5193   ,p_amb_context_code                 IN VARCHAR2
5194   ,p_event_class_code                 IN VARCHAR2
5195   ,p_event_type_code                  IN VARCHAR2
5196   ,p_line_definition_owner_code       IN VARCHAR2
5197   ,p_line_definition_code             IN VARCHAR2)
5198 RETURN BOOLEAN
5199 IS
5200   l_return      BOOLEAN;
5201   l_log_module  VARCHAR2(240);
5202 BEGIN
5203   IF g_log_enabled THEN
5204     l_log_module := C_DEFAULT_MODULE||'.validate_line_descriptions';
5205   END IF;
5206 
5207   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5208     trace(p_msg    => 'BEGIN of procedure validate_line_descriptions'
5209          ,p_module => l_log_module
5210          ,p_level  => C_LEVEL_PROCEDURE);
5211   END IF;
5212 
5213   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5214     trace(p_msg    => 'application_id = '||p_application_id||
5215                       ',amb_context_code = '||p_amb_context_code||
5216                       ',event_class_code = '||p_event_class_code||
5217                       ',event_type_code = '||p_event_type_code||
5218                       ',line_definition_owner_code = '||p_line_definition_owner_code||
5219                       ',line_definition_code = '||p_line_definition_code
5220          ,p_module => l_log_module
5221          ,p_level  => C_LEVEL_STATEMENT);
5222   END IF;
5223 
5224   l_return := TRUE;
5225 
5226   l_return := chk_line_desc_is_enabled
5227                      (p_application_id             => p_application_id
5228                      ,p_amb_context_code           => p_amb_context_code
5229                      ,p_event_class_code           => p_event_class_code
5230                      ,p_event_type_code            => p_event_type_code
5231                      ,p_line_definition_owner_code => p_line_definition_owner_code
5232                      ,p_line_definition_code       => p_line_definition_code)
5233               AND l_return;
5234 
5235   l_return := chk_line_desc_inv_src_in_cond
5236                      (p_application_id             => p_application_id
5237                      ,p_amb_context_code           => p_amb_context_code
5238                      ,p_event_class_code           => p_event_class_code
5239                      ,p_event_type_code            => p_event_type_code
5240                      ,p_line_definition_owner_code => p_line_definition_owner_code
5241                      ,p_line_definition_code       => p_line_definition_code)
5242               AND l_return;
5243 
5244   l_return := chk_line_desc_inv_src_in_dtl
5245                      (p_application_id             => p_application_id
5246                      ,p_amb_context_code           => p_amb_context_code
5247                      ,p_event_class_code           => p_event_class_code
5248                      ,p_event_type_code            => p_event_type_code
5249                      ,p_line_definition_owner_code => p_line_definition_owner_code
5250                      ,p_line_definition_code       => p_line_definition_code)
5251               AND l_return;
5252 
5253   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5254     trace(p_msg    => 'END of procedure validate_line_descriptions'
5255          ,p_module => l_log_module
5256          ,p_level  => C_LEVEL_PROCEDURE);
5257   END IF;
5258 
5259   RETURN l_return;
5260 
5261 EXCEPTION
5262   WHEN xla_exceptions_pkg.application_exception THEN
5263     RAISE;
5264   WHEN OTHERS                                   THEN
5265     xla_exceptions_pkg.raise_message
5266       (p_location   => 'xla_line_definitions_pvt.validate_line_descriptions');
5267 END validate_line_descriptions;
5268 
5269 --=============================================================================
5270 --
5271 -- Name: chk_line_ac_is_enabled
5272 -- Description: Check if all line analytical criteria of the line definition
5273 --              are enabled
5274 --
5275 --=============================================================================
5276 FUNCTION chk_line_ac_is_enabled
5277   (p_application_id                   IN NUMBER
5278   ,p_amb_context_code                 IN VARCHAR2
5279   ,p_event_class_code                 IN VARCHAR2
5280   ,p_event_type_code                  IN VARCHAR2
5281   ,p_line_definition_owner_code       IN VARCHAR2
5282   ,p_line_definition_code             IN VARCHAR2)
5283 RETURN BOOLEAN
5284 IS
5285   CURSOR c_invalid_line_ac IS
5286    SELECT distinct xah.analytical_criterion_type_code, xah.analytical_criterion_code
5287      FROM xla_line_defn_ac_assgns  xac
5288          ,xla_line_defn_jlt_assgns xjl
5289          ,xla_analytical_hdrs_b    xah
5290     WHERE xah.amb_context_code               = xac.amb_context_code
5291       AND xah.analytical_criterion_code      = xac.analytical_criterion_code
5292       AND xah.analytical_criterion_type_code = xac.analytical_criterion_type_code
5293       AND xah.enabled_flag                   <> 'Y'
5294       AND xac.application_id                 = xjl.application_id
5295       AND xac.amb_context_code               = xjl.amb_context_code
5296       AND xac.event_class_code               = xjl.event_class_code
5297       AND xac.event_type_code                = xjl.event_type_code
5298       AND xac.line_definition_code           = xjl.line_definition_code
5299       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
5300       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
5301       AND xac.accounting_line_code           = xjl.accounting_line_code
5302       AND xjl.application_id                 = p_application_id
5303       AND xjl.amb_context_code               = p_amb_context_code
5304       AND xjl.event_class_code               = p_event_class_code
5305       AND xjl.event_type_code                = p_event_type_code
5306       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
5307       AND xjl.line_definition_code           = p_line_definition_code
5308       AND xjl.active_flag                    = 'Y';
5309 
5310   l_return      BOOLEAN;
5311   l_log_module  VARCHAR2(240);
5312 BEGIN
5313   IF g_log_enabled THEN
5314     l_log_module := C_DEFAULT_MODULE||'.chk_line_ac_is_enabled';
5315   END IF;
5316 
5317   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5318     trace(p_msg    => 'BEGIN of procedure chk_line_ac_is_enabled'
5319          ,p_module => l_log_module
5320          ,p_level  => C_LEVEL_PROCEDURE);
5321   END IF;
5322 
5323   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5324     trace(p_msg    => 'application_id = '||p_application_id||
5325                       ',amb_context_code = '||p_amb_context_code||
5326                       ',event_class_code = '||p_event_class_code||
5327                       ',event_type_code = '||p_event_type_code||
5328                       ',line_definition_owner_code = '||p_line_definition_owner_code||
5329                       ',line_definition_code = '||p_line_definition_code
5330          ,p_module => l_log_module
5331          ,p_level  => C_LEVEL_STATEMENT);
5332   END IF;
5333 
5334   l_return := TRUE;
5335 
5336   FOR l_err IN c_invalid_line_ac LOOP
5337     l_return := FALSE;
5338 
5339     xla_amb_setup_err_pkg.stack_error
5340               (p_message_name               => 'XLA_AB_DISABLD_LINE_AC'
5341               ,p_message_type               => 'E'
5342               ,p_message_category           => 'LINE_AC'
5343               ,p_category_sequence          => 12
5344               ,p_application_id             => p_application_id
5345               ,p_amb_context_code           => p_amb_context_code
5346               ,p_event_class_code           => p_event_class_code
5347               ,p_event_type_code            => p_event_type_code
5348               ,p_line_definition_owner_code => p_line_definition_owner_code
5349               ,p_line_definition_code       => p_line_definition_code
5350               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
5351               ,p_anal_criterion_code        => l_err.analytical_criterion_code);
5352   END LOOP;
5353 
5354   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5355     trace(p_msg    => 'END of procedure chk_line_ac_is_enabled'
5356          ,p_module => l_log_module
5357          ,p_level  => C_LEVEL_PROCEDURE);
5358   END IF;
5359 
5360   RETURN l_return;
5361 
5362 EXCEPTION
5363   WHEN xla_exceptions_pkg.application_exception THEN
5364     IF (c_invalid_line_ac%ISOPEN) THEN
5365       CLOSE c_invalid_line_ac;
5366     END IF;
5367     RAISE;
5368 
5369   WHEN OTHERS                                   THEN
5370     IF (c_invalid_line_ac%ISOPEN) THEN
5371       CLOSE c_invalid_line_ac;
5372     END IF;
5373     xla_exceptions_pkg.raise_message
5374       (p_location   => 'xla_line_definitions_pvt.chk_line_ac_is_enabled');
5375 
5376 END chk_line_ac_is_enabled;
5377 
5378 --=============================================================================
5379 --
5380 -- Name: chk_ac_has_details
5381 -- Description:
5382 --
5383 --=============================================================================
5384 FUNCTION chk_ac_has_details
5385   (p_application_id                   IN NUMBER
5386   ,p_amb_context_code                 IN VARCHAR2
5387   ,p_event_class_code                 IN VARCHAR2
5388   ,p_event_type_code                  IN VARCHAR2
5389   ,p_line_definition_owner_code       IN VARCHAR2
5390   ,p_line_definition_code             IN VARCHAR2)
5391 RETURN BOOLEAN
5392 IS
5393   CURSOR c_invalid_ac IS
5394    SELECT distinct xac.analytical_criterion_type_code, xac.analytical_criterion_code
5395      FROM xla_line_defn_ac_assgns  xac
5396          ,xla_line_defn_jlt_assgns xjl
5397     WHERE xac.application_id                 = xjl.application_id
5398       AND xac.amb_context_code               = xjl.amb_context_code
5399       AND xac.event_class_code               = xjl.event_class_code
5400       AND xac.event_type_code                = xjl.event_type_code
5401       AND xac.line_definition_code           = xjl.line_definition_code
5402       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
5403       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
5404       AND xac.accounting_line_code           = xjl.accounting_line_code
5405       AND xjl.application_id                 = p_application_id
5406       AND xjl.amb_context_code               = p_amb_context_code
5407       AND xjl.event_class_code               = p_event_class_code
5408       AND xjl.event_type_code                = p_event_type_code
5409       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
5410       AND xjl.line_definition_code           = p_line_definition_code
5411       AND xjl.active_flag                    = 'Y'
5412       AND NOT EXISTS
5413           (SELECT 'x'
5414              FROM xla_analytical_sources  xas
5415             WHERE xas.application_id                 = xac.application_id
5416               AND xas.amb_context_code               = xac.amb_context_code
5417               AND xas.event_class_code               = xac.event_class_code
5418               AND xas.analytical_criterion_code      = xac.analytical_criterion_code
5419               AND xas.analytical_criterion_type_code = xac.analytical_criterion_type_code);
5420 
5421   l_return      BOOLEAN;
5422   l_log_module  VARCHAR2(240);
5423 BEGIN
5424   IF g_log_enabled THEN
5425     l_log_module := C_DEFAULT_MODULE||'.chk_ac_has_details';
5426   END IF;
5427 
5428   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5429     trace(p_msg    => 'BEGIN of procedure chk_ac_has_details'
5430          ,p_module => l_log_module
5431          ,p_level  => C_LEVEL_PROCEDURE);
5432   END IF;
5433 
5434   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5435     trace(p_msg    => 'application_id = '||p_application_id||
5436                       ',amb_context_code = '||p_amb_context_code||
5437                       ',event_class_code = '||p_event_class_code||
5438                       ',event_type_code = '||p_event_type_code||
5439                       ',line_definition_owner_code = '||p_line_definition_owner_code||
5440                       ',line_definition_code = '||p_line_definition_code
5441          ,p_module => l_log_module
5442          ,p_level  => C_LEVEL_STATEMENT);
5443   END IF;
5444 
5445   l_return := TRUE;
5446 
5447   FOR l_err IN c_invalid_ac LOOP
5448     l_return := FALSE;
5449 
5450     xla_amb_setup_err_pkg.stack_error
5451               (p_message_name               => 'XLA_AB_LINE_ANC_NO_DETAIL'
5452               ,p_message_type               => 'E'
5453               ,p_message_category           => 'LINE_AC'
5454               ,p_category_sequence          => 12
5455               ,p_application_id             => p_application_id
5456               ,p_amb_context_code           => p_amb_context_code
5457               ,p_event_class_code           => p_event_class_code
5458               ,p_event_type_code            => p_event_type_code
5459               ,p_line_definition_owner_code => p_line_definition_owner_code
5460               ,p_line_definition_code       => p_line_definition_code
5461               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
5462               ,p_anal_criterion_code        => l_err.analytical_criterion_code);
5463   END LOOP;
5464 
5465   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5466     trace(p_msg    => 'END of procedure chk_ac_has_details'
5467          ,p_module => l_log_module
5468          ,p_level  => C_LEVEL_PROCEDURE);
5469   END IF;
5470 
5471   RETURN l_return;
5472 
5473 EXCEPTION
5474   WHEN xla_exceptions_pkg.application_exception THEN
5475     IF (c_invalid_ac%ISOPEN) THEN
5476       CLOSE c_invalid_ac;
5477     END IF;
5478     RAISE;
5479 
5480   WHEN OTHERS                                   THEN
5481     IF (c_invalid_ac%ISOPEN) THEN
5482       CLOSE c_invalid_ac;
5483     END IF;
5484     xla_exceptions_pkg.raise_message
5485       (p_location   => 'xla_line_definitions_pvt.chk_ac_has_details');
5486 
5487 END chk_ac_has_details;
5488 
5489 --=============================================================================
5490 --
5491 -- Name: chk_ac_invalid_sources
5492 -- Description:
5493 --
5494 --=============================================================================
5495 FUNCTION chk_ac_invalid_sources
5496   (p_application_id                   IN NUMBER
5497   ,p_amb_context_code                 IN VARCHAR2
5498   ,p_event_class_code                 IN VARCHAR2
5499   ,p_event_type_code                  IN VARCHAR2
5500   ,p_line_definition_owner_code       IN VARCHAR2
5501   ,p_line_definition_code             IN VARCHAR2)
5502 RETURN BOOLEAN
5503 IS
5504   CURSOR c_invalid_sources IS
5505    SELECT distinct  xas.analytical_criterion_type_code, xas.analytical_criterion_code,
5506           xas.source_code, xas.source_type_code
5507      FROM xla_analytical_sources   xas
5508          ,xla_line_defn_ac_assgns  xac
5509          ,xla_line_defn_jlt_assgns xjl
5510          ,xla_event_sources        xes
5511     WHERE xas.application_id                 = xac.application_id
5512       AND xas.amb_context_code               = xac.amb_context_code
5513       AND xas.event_class_code               = xac.event_class_code
5514       AND xas.analytical_criterion_code      = xac.analytical_criterion_code
5515       AND xas.analytical_criterion_type_code = xac.analytical_criterion_type_code
5516       AND xas.source_type_code               = 'S'
5517       AND xac.application_id                 = xjl.application_id
5518       AND xac.amb_context_code               = xjl.amb_context_code
5519       AND xac.event_class_code               = xjl.event_class_code
5520       AND xac.event_type_code                = xjl.event_type_code
5521       AND xac.line_definition_code           = xjl.line_definition_code
5522       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
5523       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
5524       AND xac.accounting_line_code           = xjl.accounting_line_code
5525       AND xjl.application_id                 = p_application_id
5526       AND xjl.amb_context_code               = p_amb_context_code
5527       AND xjl.event_class_code               = p_event_class_code
5528       AND xjl.event_type_code                = p_event_type_code
5529       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
5530       AND xjl.line_definition_code           = p_line_definition_code
5531       AND xjl.active_flag                    = 'Y'
5532       AND not exists (SELECT 'y'
5533                         FROM xla_event_sources xes
5534                        WHERE xes.source_application_id = xas.source_application_id
5535                          AND xes.source_type_code      = xas.source_type_code
5536                          AND xes.source_code           = xas.source_code
5537                          AND xes.application_id        = xas.application_id
5538                          AND xes.event_class_code      = xas.event_class_code
5539                          AND xes.active_flag           = 'Y');
5540 
5541   CURSOR c_der_sources IS
5542    SELECT distinct xas.analytical_criterion_type_code, xas.analytical_criterion_code,
5543           xas.source_code, xas.source_type_code
5544      FROM xla_analytical_sources   xas
5545          ,xla_line_defn_ac_assgns  xac
5546          ,xla_line_defn_jlt_assgns xjl
5547     WHERE xas.application_id                 = xac.application_id
5548       AND xas.amb_context_code               = xac.amb_context_code
5549       AND xas.event_class_code               = xac.event_class_code
5550       AND xas.analytical_criterion_code      = xac.analytical_criterion_code
5551       AND xas.analytical_criterion_type_code = xac.analytical_criterion_type_code
5552       AND xas.source_type_code               = 'D'
5553       AND xac.application_id                 = xjl.application_id
5554       AND xac.amb_context_code               = xjl.amb_context_code
5555       AND xac.event_class_code               = xjl.event_class_code
5556       AND xac.event_type_code                = xjl.event_type_code
5557       AND xac.line_definition_code           = xjl.line_definition_code
5558       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
5559       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
5560       AND xac.accounting_line_code           = xjl.accounting_line_code
5561       AND xjl.application_id                 = p_application_id
5562       AND xjl.amb_context_code               = p_amb_context_code
5563       AND xjl.event_class_code               = p_event_class_code
5564       AND xjl.event_type_code                = p_event_type_code
5565       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
5566       AND xjl.line_definition_code           = p_line_definition_code
5567       AND xjl.active_flag                    = 'Y';
5568 
5569   l_return      BOOLEAN;
5570   l_log_module  VARCHAR2(240);
5571 BEGIN
5572   IF g_log_enabled THEN
5573     l_log_module := C_DEFAULT_MODULE||'.chk_ac_invalid_sources';
5574   END IF;
5575 
5576   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5577     trace(p_msg    => 'BEGIN of procedure chk_ac_invalid_sources'
5578          ,p_module => l_log_module
5579          ,p_level  => C_LEVEL_PROCEDURE);
5580   END IF;
5581 
5582   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5583     trace(p_msg    => 'application_id = '||p_application_id||
5584                       ',amb_context_code = '||p_amb_context_code||
5585                       ',event_class_code = '||p_event_class_code||
5586                       ',event_type_code = '||p_event_type_code||
5587                       ',line_definition_owner_code = '||p_line_definition_owner_code||
5588                       ',line_definition_code = '||p_line_definition_code
5589          ,p_module => l_log_module
5590          ,p_level  => C_LEVEL_STATEMENT);
5591   END IF;
5592 
5593   l_return := TRUE;
5594 
5595   FOR l_err IN c_invalid_sources LOOP
5596 
5597     l_return := FALSE;
5598     xla_amb_setup_err_pkg.stack_error
5599               (p_message_name               => 'XLA_AB_LINE_ANC_UNASN_SRCE'
5600               ,p_message_type               => 'E'
5601               ,p_message_category           => 'LINE_AC'
5602               ,p_category_sequence          => 12
5603               ,p_application_id             => p_application_id
5604               ,p_amb_context_code           => p_amb_context_code
5605               ,p_event_class_code           => p_event_class_code
5606               ,p_event_type_code            => p_event_type_code
5607               ,p_line_definition_owner_code => p_line_definition_owner_code
5608               ,p_line_definition_code       => p_line_definition_code
5609               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
5610               ,p_anal_criterion_code        => l_err.analytical_criterion_code
5611               ,p_source_code                => l_err.source_code
5612               ,p_source_type_code           => l_err.source_type_code);
5613   END LOOP;
5614 
5615   FOR l_err IN c_der_sources LOOP
5616     IF xla_sources_pkg.derived_source_is_invalid
5617               (p_application_id           => p_application_id
5618               ,p_derived_source_code      => l_err.source_code
5619               ,p_derived_source_type_code => 'D'
5620               ,p_event_class_code         => p_event_class_code
5621               ,p_level                    => 'L')  = 'TRUE' THEN
5622 
5623       l_return := FALSE;
5624       xla_amb_setup_err_pkg.stack_error
5625               (p_message_name               => 'XLA_AB_LINE_ANC_UNASN_SRCE'
5626               ,p_message_type               => 'E'
5627               ,p_message_category           => 'LINE_AC'
5628               ,p_category_sequence          => 12
5629               ,p_application_id             => p_application_id
5630               ,p_amb_context_code           => p_amb_context_code
5631               ,p_event_class_code           => p_event_class_code
5632               ,p_event_type_code            => p_event_type_code
5633               ,p_line_definition_owner_code => p_line_definition_owner_code
5634               ,p_line_definition_code       => p_line_definition_code
5635               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
5636               ,p_anal_criterion_code        => l_err.analytical_criterion_code
5637               ,p_source_code                => l_err.source_code
5638               ,p_source_type_code           => l_err.source_type_code);
5639     END IF;
5640   END LOOP;
5641 
5642   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5643     trace(p_msg    => 'END of procedure chk_ac_invalid_sources'
5644          ,p_module => l_log_module
5645          ,p_level  => C_LEVEL_PROCEDURE);
5646   END IF;
5647 
5648   RETURN l_return;
5649 
5650 EXCEPTION
5651   WHEN xla_exceptions_pkg.application_exception THEN
5652     IF (c_invalid_sources%ISOPEN) THEN
5653       CLOSE c_invalid_sources;
5654     END IF;
5655     IF (c_der_sources%ISOPEN) THEN
5656       CLOSE c_der_sources;
5657     END IF;
5658     RAISE;
5659 
5660   WHEN OTHERS                                   THEN
5661     IF (c_invalid_sources%ISOPEN) THEN
5662       CLOSE c_invalid_sources;
5663     END IF;
5664     IF (c_der_sources%ISOPEN) THEN
5665       CLOSE c_der_sources;
5666     END IF;
5667     xla_exceptions_pkg.raise_message
5668       (p_location   => 'xla_line_definitions_pvt.chk_ac_invalid_sources');
5669 END chk_ac_invalid_sources;
5670 
5671 
5672 --=============================================================================
5673 --
5674 -- Name: validate_line_ac
5675 -- Description: Validate AC assignment of the line definition
5676 --
5677 --=============================================================================
5678 FUNCTION validate_line_ac
5679   (p_application_id                   IN NUMBER
5680   ,p_amb_context_code                 IN VARCHAR2
5681   ,p_event_class_code                 IN VARCHAR2
5682   ,p_event_type_code                  IN VARCHAR2
5683   ,p_line_definition_owner_code       IN VARCHAR2
5684   ,p_line_definition_code             IN VARCHAR2)
5685 RETURN BOOLEAN
5686 IS
5687   l_return      BOOLEAN;
5688   l_log_module  VARCHAR2(240);
5689 BEGIN
5690   IF g_log_enabled THEN
5691     l_log_module := C_DEFAULT_MODULE||'.validate_line_ac';
5692   END IF;
5693 
5694   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5695     trace(p_msg    => 'BEGIN of procedure validate_line_ac'
5696          ,p_module => l_log_module
5697          ,p_level  => C_LEVEL_PROCEDURE);
5698   END IF;
5699 
5700   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5701     trace(p_msg    => 'application_id = '||p_application_id||
5702                       ',amb_context_code = '||p_amb_context_code||
5703                       ',event_class_code = '||p_event_class_code||
5704                       ',event_type_code = '||p_event_type_code||
5705                       ',line_definition_owner_code = '||p_line_definition_owner_code||
5706                       ',line_definition_code = '||p_line_definition_code
5707          ,p_module => l_log_module
5708          ,p_level  => C_LEVEL_STATEMENT);
5709   END IF;
5710 
5711   l_return := TRUE;
5712 
5713   l_return := chk_line_ac_is_enabled
5714                      (p_application_id             => p_application_id
5715                      ,p_amb_context_code           => p_amb_context_code
5716                      ,p_event_class_code           => p_event_class_code
5717                      ,p_event_type_code            => p_event_type_code
5718                      ,p_line_definition_owner_code => p_line_definition_owner_code
5719                      ,p_line_definition_code       => p_line_definition_code)
5720               AND l_return;
5721 
5722   l_return := chk_ac_has_details
5723                      (p_application_id             => p_application_id
5724                      ,p_amb_context_code           => p_amb_context_code
5725                      ,p_event_class_code           => p_event_class_code
5726                      ,p_event_type_code            => p_event_type_code
5727                      ,p_line_definition_owner_code => p_line_definition_owner_code
5728                      ,p_line_definition_code       => p_line_definition_code)
5729               AND l_return;
5730 
5731   l_return := chk_ac_invalid_sources
5732                      (p_application_id             => p_application_id
5733                      ,p_amb_context_code           => p_amb_context_code
5734                      ,p_event_class_code           => p_event_class_code
5735                      ,p_event_type_code            => p_event_type_code
5736                      ,p_line_definition_owner_code => p_line_definition_owner_code
5737                      ,p_line_definition_code       => p_line_definition_code)
5738               AND l_return;
5739 
5740   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5741     trace(p_msg    => 'END of procedure validate_line_ac'
5742          ,p_module => l_log_module
5743          ,p_level  => C_LEVEL_PROCEDURE);
5744   END IF;
5745 
5746   RETURN l_return;
5747 
5748 EXCEPTION
5749   WHEN xla_exceptions_pkg.application_exception THEN
5750     RAISE;
5751   WHEN OTHERS                                   THEN
5752     xla_exceptions_pkg.raise_message
5753       (p_location   => 'xla_line_definitions_pvt.validate_line_ac');
5754 END validate_line_ac;
5755 
5756 
5757 --=============================================================================
5758 --
5759 -- Name: chk_ms_is_enabled
5760 -- Description: Check if all mapping sets assigned to the line definition
5761 --              are enabled
5762 --
5763 --=============================================================================
5764 FUNCTION chk_ms_is_enabled
5765   (p_application_id                   IN NUMBER
5766   ,p_amb_context_code                 IN VARCHAR2
5767   ,p_event_class_code                 IN VARCHAR2
5768   ,p_event_type_code                  IN VARCHAR2
5769   ,p_line_definition_owner_code       IN VARCHAR2
5770   ,p_line_definition_code             IN VARCHAR2)
5771 RETURN BOOLEAN
5772 IS
5773   CURSOR c_invalid_ms IS
5774    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
5775           xsr.value_mapping_set_code
5776      FROM xla_seg_rule_details     xsr
5777          ,xla_line_defn_adr_assgns xad
5778          ,xla_line_defn_jlt_assgns xjl
5779          ,xla_mapping_sets_b       xms
5780     WHERE xms.mapping_set_code               = xsr.value_mapping_set_code
5781       AND xms.amb_context_code               = xsr.amb_context_code
5782       AND xms.enabled_flag                   <> 'Y'
5783       AND xsr.application_id                 = xad.application_id
5784       AND xsr.amb_context_code               = xad.amb_context_code
5785       AND xsr.segment_rule_type_code         = xad.segment_rule_type_code
5786       AND xsr.segment_rule_code              = xad.segment_rule_code
5787       AND xsr.value_mapping_set_code         IS NOT NULL
5788       AND xad.application_id                 = xjl.application_id
5789       AND xad.amb_context_code               = xjl.amb_context_code
5790       AND xad.line_definition_owner_code     = xjl.line_definition_owner_code
5791       AND xad.line_definition_code           = xjl.line_definition_code
5792       AND xad.event_class_code               = xjl.event_class_code
5793       AND xad.event_type_code                = xjl.event_type_code
5794       AND xad.accounting_line_type_code      = xjl.accounting_line_type_code
5795       AND xad.accounting_line_code           = xjl.accounting_line_code
5796       AND xjl.application_id                 = p_application_id
5797       AND xjl.amb_context_code               = p_amb_context_code
5798       AND xjl.event_class_code               = p_event_class_code
5799       AND xjl.event_type_code                = p_event_type_code
5800       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
5801       AND xjl.line_definition_code           = p_line_definition_code
5802       AND xjl.active_flag                    = 'Y';
5803 
5804   l_return      BOOLEAN;
5805   l_log_module  VARCHAR2(240);
5806 BEGIN
5807   IF g_log_enabled THEN
5808     l_log_module := C_DEFAULT_MODULE||'.chk_ms_is_enabled';
5809   END IF;
5810 
5811   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5812     trace(p_msg    => 'BEGIN of procedure chk_ms_is_enabled'
5813          ,p_module => l_log_module
5814          ,p_level  => C_LEVEL_PROCEDURE);
5815   END IF;
5816 
5817   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5818     trace(p_msg    => 'application_id = '||p_application_id||
5819                       ',amb_context_code = '||p_amb_context_code||
5820                       ',event_class_code = '||p_event_class_code||
5821                       ',event_type_code = '||p_event_type_code||
5822                       ',line_definition_owner_code = '||p_line_definition_owner_code||
5823                       ',line_definition_code = '||p_line_definition_code
5824          ,p_module => l_log_module
5825          ,p_level  => C_LEVEL_STATEMENT);
5826   END IF;
5827 
5828   l_return := TRUE;
5829 
5830   FOR l_err IN c_invalid_ms LOOP
5831     l_return := FALSE;
5832 
5833     xla_amb_setup_err_pkg.stack_error
5834               (p_message_name               => 'XLA_AB_DISABLED_MAPPING_SET'
5835               ,p_message_type               => 'E'
5836               ,p_message_category           => 'MAPPING_SET'
5837               ,p_category_sequence          => 14
5838               ,p_application_id             => p_application_id
5839               ,p_amb_context_code           => p_amb_context_code
5840               ,p_event_class_code           => p_event_class_code
5841               ,p_event_type_code            => p_event_type_code
5842               ,p_line_definition_owner_code => p_line_definition_owner_code
5843               ,p_line_definition_code       => p_line_definition_code
5844               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
5845               ,p_segment_rule_code          => l_err.segment_rule_code
5846               ,p_mapping_set_code           => l_err.value_mapping_set_code);
5847   END LOOP;
5848 
5849   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5850     trace(p_msg    => 'END of procedure chk_ms_is_enabled'
5851          ,p_module => l_log_module
5852          ,p_level  => C_LEVEL_PROCEDURE);
5853   END IF;
5854 
5855   RETURN l_return;
5856 
5857 EXCEPTION
5858   WHEN xla_exceptions_pkg.application_exception THEN
5859     IF (c_invalid_ms%ISOPEN) THEN
5860       CLOSE c_invalid_ms;
5861     END IF;
5862     RAISE;
5863 
5864   WHEN OTHERS                                   THEN
5865     IF (c_invalid_ms%ISOPEN) THEN
5866       CLOSE c_invalid_ms;
5867     END IF;
5868     xla_exceptions_pkg.raise_message
5869       (p_location   => 'xla_line_definitions_pvt.chk_ms_is_enabled');
5870 END chk_ms_is_enabled;
5871 
5872 --=============================================================================
5873 --
5874 -- Name: validate_mapping_sets
5875 -- Description: Validate AC assignment of the line definition
5876 --
5877 --=============================================================================
5878 FUNCTION validate_mapping_sets
5879   (p_application_id                   IN NUMBER
5880   ,p_amb_context_code                 IN VARCHAR2
5881   ,p_event_class_code                 IN VARCHAR2
5882   ,p_event_type_code                  IN VARCHAR2
5883   ,p_line_definition_owner_code       IN VARCHAR2
5884   ,p_line_definition_code             IN VARCHAR2)
5885 RETURN BOOLEAN
5886 IS
5887   l_return      BOOLEAN;
5888   l_log_module  VARCHAR2(240);
5889 BEGIN
5890   IF g_log_enabled THEN
5891     l_log_module := C_DEFAULT_MODULE||'.validate_mapping_sets';
5892   END IF;
5893 
5894   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5895     trace(p_msg    => 'BEGIN of procedure validate_mapping_sets'
5896          ,p_module => l_log_module
5897          ,p_level  => C_LEVEL_PROCEDURE);
5898   END IF;
5899 
5900   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5901     trace(p_msg    => 'application_id = '||p_application_id||
5902                       ',amb_context_code = '||p_amb_context_code||
5903                       ',event_class_code = '||p_event_class_code||
5904                       ',event_type_code = '||p_event_type_code||
5905                       ',line_definition_owner_code = '||p_line_definition_owner_code||
5906                       ',line_definition_code = '||p_line_definition_code
5907          ,p_module => l_log_module
5908          ,p_level  => C_LEVEL_STATEMENT);
5909   END IF;
5910 
5911   l_return := TRUE;
5912 
5913   l_return := chk_ms_is_enabled
5914                      (p_application_id             => p_application_id
5915                      ,p_amb_context_code           => p_amb_context_code
5916                      ,p_event_class_code           => p_event_class_code
5917                      ,p_event_type_code            => p_event_type_code
5918                      ,p_line_definition_owner_code => p_line_definition_owner_code
5919                      ,p_line_definition_code       => p_line_definition_code)
5920               AND l_return;
5921 
5922   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5923     trace(p_msg    => 'END of procedure validate_mapping_sets'
5924          ,p_module => l_log_module
5925          ,p_level  => C_LEVEL_PROCEDURE);
5926   END IF;
5927 
5928   RETURN l_return;
5929 
5930 EXCEPTION
5931   WHEN xla_exceptions_pkg.application_exception THEN
5932     RAISE;
5933   WHEN OTHERS                                   THEN
5934     xla_exceptions_pkg.raise_message
5935       (p_location   => 'xla_line_definitions_pvt.validate_mapping_sets');
5936 END validate_mapping_sets;
5937 
5938 --=============================================================================
5939 --
5940 -- Name: chk_mpa_jlt_lines
5941 -- Description: Check if all JLT assigned to the line definition is enabled
5942 --
5943 --=============================================================================
5944 FUNCTION chk_mpa_jlt_lines
5945   (p_application_id                   IN NUMBER
5946   ,p_amb_context_code                 IN VARCHAR2
5947   ,p_event_class_code                 IN VARCHAR2
5948   ,p_event_type_code                  IN VARCHAR2
5949   ,p_line_definition_owner_code       IN VARCHAR2
5950   ,p_line_definition_code             IN VARCHAR2)
5951 RETURN BOOLEAN
5952 IS
5953   --
5954   -- Get all JLT assignment that have less than 2 MPA JLT assignments
5955   --
5956   CURSOR c_invalid_jlt IS
5957   SELECT  distinct xld.accounting_line_type_code, xld.accounting_line_code
5958      FROM xla_line_defn_jlt_assgns    xld, xla_acct_line_types_b jlt
5959     WHERE xld.application_id             = p_application_id
5960       AND xld.amb_context_code           = p_amb_context_code
5961       AND xld.event_class_code           = p_event_class_code
5962       AND xld.event_type_code            = p_event_type_code
5963       AND xld.line_definition_owner_code = p_line_definition_owner_code
5964       AND xld.line_definition_code       = p_line_definition_code
5965       AND xld.active_flag                = 'Y'
5966       AND xld.application_id             = jlt.application_id
5967       AND xld.amb_context_code           = jlt.amb_context_code
5968       AND xld.event_class_code           = jlt.event_class_code
5969       AND xld.accounting_line_type_code  = jlt.accounting_line_type_code
5970       AND xld.accounting_line_code       = jlt.accounting_line_code
5971       AND jlt.mpa_option_code            = 'ACCRUAL';
5972 
5973   CURSOR c_mpa_jlt(l_accounting_line_type_code IN VARCHAR2
5974                   ,l_accounting_line_code      IN VARCHAR2) IS
5975   SELECT  count(*)
5976      FROM xla_mpa_jlt_assgns    mpa
5977     WHERE mpa.application_id             = p_application_id
5978       AND mpa.amb_context_code           = p_amb_context_code
5979       AND mpa.event_class_code           = p_event_class_code
5980       AND mpa.event_type_code            = p_event_type_code
5981       AND mpa.line_definition_owner_code = p_line_definition_owner_code
5982       AND mpa.line_definition_code       = p_line_definition_code
5983       AND mpa.accounting_line_type_code  = l_accounting_line_type_code
5984       AND mpa.accounting_line_code       = l_accounting_line_code;
5985 
5986 
5987   l_return      BOOLEAN;
5988   l_log_module  VARCHAR2(240);
5989   l_count       NUMBER(15);
5990 
5991 BEGIN
5992   IF g_log_enabled THEN
5993     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_jlt_lines';
5994   END IF;
5995 
5996   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5997     trace(p_msg    => 'BEGIN of procedure chk_mpa_jlt_lines'
5998          ,p_module => l_log_module
5999          ,p_level  => C_LEVEL_PROCEDURE);
6000   END IF;
6001 
6002   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6003     trace(p_msg    => 'application_id = '||p_application_id||
6004                       ',amb_context_code = '||p_amb_context_code||
6005                       ',event_class_code = '||p_event_class_code||
6006                       ',event_type_code = '||p_event_type_code||
6007                       ',line_definition_owner_code = '||p_line_definition_owner_code||
6008                       ',line_definition_code = '||p_line_definition_code
6009          ,p_module => l_log_module
6010          ,p_level  => C_LEVEL_STATEMENT);
6011   END IF;
6012 
6013   l_return := TRUE;
6014 
6015   --
6016   -- Check if any JLT has less than 2 mpa line assignments
6017   --
6018 
6019   FOR l_err IN c_invalid_jlt LOOP
6020 
6021     OPEN c_mpa_jlt(l_err.accounting_line_type_code
6022                   ,l_err.accounting_line_code);
6023     FETCH c_mpa_jlt
6024      INTO l_count;
6025     CLOSE c_mpa_jlt;
6026 
6027     IF l_count < 2 THEN
6028        l_return := FALSE;
6029 
6030        xla_amb_setup_err_pkg.stack_error
6031             (p_message_name               => 'XLA_AB_MPA_LESS_LINE_TYPES'
6032             ,p_message_type               => 'E'
6033             ,p_message_category           => 'MPA_LINE_ASSIGNMENT'
6034             ,p_category_sequence          => 17
6035             ,p_application_id             => p_application_id
6036             ,p_amb_context_code           => p_amb_context_code
6037             ,p_event_class_code           => p_event_class_code
6038             ,p_event_type_code            => p_event_type_code
6039             ,p_line_definition_owner_code => p_line_definition_owner_code
6040             ,p_line_definition_code       => p_line_definition_code
6041             ,p_accounting_line_type_code  => l_err.accounting_line_type_code
6042             ,p_accounting_line_code       => l_err.accounting_line_code);
6043     END IF;
6044 
6045   END LOOP;
6046 
6047   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6048     trace(p_msg    => 'END of procedure chk_mpa_jlt_lines'
6049          ,p_module => l_log_module
6050          ,p_level  => C_LEVEL_PROCEDURE);
6051   END IF;
6052 
6053   RETURN l_return;
6054 
6055 EXCEPTION
6056   WHEN xla_exceptions_pkg.application_exception THEN
6057     IF (c_invalid_jlt%ISOPEN) THEN
6058       CLOSE c_invalid_jlt;
6059     END IF;
6060     RAISE;
6061 
6062   WHEN OTHERS                                   THEN
6063     IF (c_invalid_jlt%ISOPEN) THEN
6064       CLOSE c_invalid_jlt;
6065     END IF;
6066     xla_exceptions_pkg.raise_message
6067       (p_location   => 'xla_line_definitions_pvt.chk_mpa_jlt_lines');
6068 END chk_mpa_jlt_lines;
6069 
6070 
6071 --=============================================================================
6072 --
6073 -- Name: chk_mpa_jlt_is_enabled
6074 -- Description: Check if all JLT assigned to the line definition is enabled
6075 --
6076 --=============================================================================
6077 FUNCTION chk_mpa_jlt_is_enabled
6078   (p_application_id                   IN NUMBER
6079   ,p_amb_context_code                 IN VARCHAR2
6080   ,p_event_class_code                 IN VARCHAR2
6081   ,p_event_type_code                  IN VARCHAR2
6082   ,p_line_definition_owner_code       IN VARCHAR2
6083   ,p_line_definition_code             IN VARCHAR2)
6084 RETURN BOOLEAN
6085 IS
6086   --
6087   -- Get any JLT assignment that has a disabled JLT
6088   --
6089   CURSOR c_invalid_jlt IS
6090   SELECT  distinct mpa.event_class_code, mpa.event_type_code,
6091           mpa.mpa_accounting_line_type_code, mpa.mpa_accounting_line_code
6092      FROM xla_line_defn_jlt_assgns    xld
6093          ,xla_mpa_jlt_assgns          mpa
6094     WHERE xld.application_id             = p_application_id
6095       AND xld.amb_context_code           = p_amb_context_code
6096       AND xld.event_class_code           = p_event_class_code
6097       AND xld.event_type_code            = p_event_type_code
6098       AND xld.line_definition_owner_code = p_line_definition_owner_code
6099       AND xld.line_definition_code       = p_line_definition_code
6100       AND xld.active_flag                = 'Y'
6101       AND xld.application_id             = mpa.application_id
6102       AND xld.amb_context_code           = mpa.amb_context_code
6103       AND xld.event_class_code           = mpa.event_class_code
6104       AND xld.event_type_code            = mpa.event_type_code
6105       AND xld.line_definition_owner_code = mpa.line_definition_owner_code
6106       AND xld.line_definition_code       = mpa.line_definition_code
6107       AND xld.accounting_line_type_code  = mpa.accounting_line_type_code
6108       AND xld.accounting_line_code       = mpa.accounting_line_code
6109       AND NOT EXISTS (SELECT 'x'
6110                         FROM xla_line_defn_jlt_assgns    xld1
6111                        WHERE xld1.application_id             = mpa.application_id
6112                          AND xld1.amb_context_code           = mpa.amb_context_code
6113                          AND xld1.event_class_code           = mpa.event_class_code
6114                          AND xld1.event_type_code            = mpa.event_type_code
6115                          AND xld1.line_definition_owner_code = mpa.line_definition_owner_code
6116                          AND xld1.line_definition_code       = mpa.line_definition_code
6117                          AND xld1.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6118                          AND xld1.accounting_line_code       = mpa.mpa_accounting_line_code)
6119       AND NOT EXISTS
6120           (SELECT 'y'
6121              FROM xla_acct_line_types_b xal
6122             WHERE xal.application_id             = mpa.application_id
6123               AND xal.amb_context_code           = mpa.amb_context_code
6124               AND xal.event_class_code           = mpa.event_class_code
6125               AND xal.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6126               AND xal.accounting_line_code       = mpa.mpa_accounting_line_code
6127               AND xal.enabled_flag               = 'Y');
6128 
6129   l_return      BOOLEAN;
6130   l_log_module  VARCHAR2(240);
6131 BEGIN
6132   IF g_log_enabled THEN
6133     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_jlt_is_enabled';
6134   END IF;
6135 
6136   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6137     trace(p_msg    => 'BEGIN of procedure chk_mpa_jlt_is_enabled'
6138          ,p_module => l_log_module
6139          ,p_level  => C_LEVEL_PROCEDURE);
6140   END IF;
6141 
6142   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6143     trace(p_msg    => 'application_id = '||p_application_id||
6144                       ',amb_context_code = '||p_amb_context_code||
6145                       ',event_class_code = '||p_event_class_code||
6146                       ',event_type_code = '||p_event_type_code||
6147                       ',line_definition_owner_code = '||p_line_definition_owner_code||
6148                       ',line_definition_code = '||p_line_definition_code
6149          ,p_module => l_log_module
6150          ,p_level  => C_LEVEL_STATEMENT);
6151   END IF;
6152 
6153   l_return := TRUE;
6154 
6155   --
6156   -- Check if any disabled JLT is assigned to the line definition
6157   --
6158   FOR l_err IN c_invalid_jlt LOOP
6159     l_return := FALSE;
6160 
6161     xla_amb_setup_err_pkg.stack_error
6162             (p_message_name               => 'XLA_AB_MPA_DISABLD_LINE_TYPE'
6163             ,p_message_type               => 'E'
6164             ,p_message_category           => 'MPA_LINE_TYPE'
6165             ,p_category_sequence          => 18
6166             ,p_application_id             => p_application_id
6167             ,p_amb_context_code           => p_amb_context_code
6168             ,p_event_class_code           => p_event_class_code
6169             ,p_event_type_code            => p_event_type_code
6170             ,p_line_definition_owner_code => p_line_definition_owner_code
6171             ,p_line_definition_code       => p_line_definition_code
6172             ,p_mpa_acct_line_type_code    => l_err.mpa_accounting_line_type_code
6173             ,p_mpa_acct_line_code         => l_err.mpa_accounting_line_code);
6174   END LOOP;
6175 
6176   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6177     trace(p_msg    => 'END of procedure chk_mpa_jlt_is_enabled'
6178          ,p_module => l_log_module
6179          ,p_level  => C_LEVEL_PROCEDURE);
6180   END IF;
6181 
6182   RETURN l_return;
6183 
6184 EXCEPTION
6185   WHEN xla_exceptions_pkg.application_exception THEN
6186     IF (c_invalid_jlt%ISOPEN) THEN
6187       CLOSE c_invalid_jlt;
6188     END IF;
6189     RAISE;
6190 
6191   WHEN OTHERS                                   THEN
6192     IF (c_invalid_jlt%ISOPEN) THEN
6193       CLOSE c_invalid_jlt;
6194     END IF;
6195     xla_exceptions_pkg.raise_message
6196       (p_location   => 'xla_line_definitions_pvt.chk_mpa_jlt_is_enabled');
6197 END chk_mpa_jlt_is_enabled;
6198 
6199 --=============================================================================
6200 --
6201 -- Name: chk_mpa_jlt_acct_class_exist
6202 -- Description: Check if all accounting class of the JLTs assigned to the
6203 --              line definition are enabled
6204 --
6205 --=============================================================================
6206 FUNCTION chk_mpa_jlt_acct_class_exist
6207   (p_application_id                   IN NUMBER
6208   ,p_amb_context_code                 IN VARCHAR2
6209   ,p_event_class_code                 IN VARCHAR2
6210   ,p_event_type_code                  IN VARCHAR2
6211   ,p_line_definition_owner_code       IN VARCHAR2
6212   ,p_line_definition_code             IN VARCHAR2)
6213 RETURN BOOLEAN
6214 IS
6215   --
6216   -- Get any JLT assignment that has a disabled JLT
6217   --
6218   CURSOR c_invalid_jlt IS
6219   SELECT  distinct mpa.event_class_code, mpa.event_type_code,
6220           mpa.mpa_accounting_line_type_code, mpa.mpa_accounting_line_code
6221      FROM xla_line_defn_jlt_assgns    xld
6222         , xla_acct_line_types_b       xal
6223         ,xla_mpa_jlt_assgns           mpa
6224     WHERE xal.application_id             = mpa.application_id
6225       AND xal.amb_context_code           = mpa.amb_context_code
6226       AND xal.event_class_code           = mpa.event_class_code
6227       AND xal.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6228       AND xal.accounting_line_code       = mpa.mpa_accounting_line_code
6229       AND xal.enabled_flag               = 'Y'
6230       AND xld.application_id             = p_application_id
6231       AND xld.amb_context_code           = p_amb_context_code
6232       AND xld.event_class_code           = p_event_class_code
6233       AND xld.event_type_code            = p_event_type_code
6234       AND xld.line_definition_owner_code = p_line_definition_owner_code
6235       AND xld.line_definition_code       = p_line_definition_code
6236       AND xld.active_flag                = 'Y'
6237       AND xld.application_id             = mpa.application_id
6238       AND xld.amb_context_code           = mpa.amb_context_code
6239       AND xld.event_class_code           = mpa.event_class_code
6240       AND xld.event_type_code            = mpa.event_type_code
6241       AND xld.line_definition_owner_code = mpa.line_definition_owner_code
6242       AND xld.line_definition_code       = mpa.line_definition_code
6243       AND xld.accounting_line_type_code  = mpa.accounting_line_type_code
6244       AND xld.accounting_line_code       = mpa.accounting_line_code
6245       AND NOT EXISTS (SELECT 'x'
6246                         FROM xla_line_defn_jlt_assgns    xld1
6247                        WHERE xld1.application_id             = mpa.application_id
6248                          AND xld1.amb_context_code           = mpa.amb_context_code
6249                          AND xld1.event_class_code           = mpa.event_class_code
6250                          AND xld1.event_type_code            = mpa.event_type_code
6251                          AND xld1.line_definition_owner_code = mpa.line_definition_owner_code
6252                          AND xld1.line_definition_code       = mpa.line_definition_code
6253                          AND xld1.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6254                          AND xld1.accounting_line_code       = mpa.mpa_accounting_line_code)
6255       AND NOT EXISTS
6256           (SELECT 'y'
6257              FROM xla_lookups xlk
6258             WHERE xlk.lookup_type             = 'XLA_ACCOUNTING_CLASS'
6259               AND xlk.lookup_code             = xal.accounting_class_code);
6260 
6261   l_return      BOOLEAN;
6262   l_log_module  VARCHAR2(240);
6263 BEGIN
6264   IF g_log_enabled THEN
6265     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_jlt_acct_class_exist';
6266   END IF;
6267 
6268   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6269     trace(p_msg    => 'BEGIN of procedure chk_mpa_jlt_acct_class_exist'
6270          ,p_module => l_log_module
6271          ,p_level  => C_LEVEL_PROCEDURE);
6272   END IF;
6273 
6274   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6275     trace(p_msg    => 'application_id = '||p_application_id||
6276                       ',amb_context_code = '||p_amb_context_code||
6277                       ',event_class_code = '||p_event_class_code||
6278                       ',event_type_code = '||p_event_type_code||
6279                       ',line_definition_owner_code = '||p_line_definition_owner_code||
6280                       ',line_definition_code = '||p_line_definition_code
6281          ,p_module => l_log_module
6282          ,p_level  => C_LEVEL_STATEMENT);
6283   END IF;
6284 
6285   l_return := TRUE;
6286 
6287   --
6288   -- Check if any disabled JLT is assigned to the line definition
6289   --
6290   FOR l_err IN c_invalid_jlt LOOP
6291     l_return := FALSE;
6292 
6293     xla_amb_setup_err_pkg.stack_error
6294             (p_message_name               => 'XLA_AB_MPA_INVALID_ACCT_CLASS'
6295             ,p_message_type               => 'E'
6296             ,p_message_category           => 'MPA_LINE_TYPE'
6297             ,p_category_sequence          => 18
6298             ,p_application_id             => p_application_id
6299             ,p_amb_context_code           => p_amb_context_code
6300             ,p_event_class_code           => p_event_class_code
6301             ,p_event_type_code            => p_event_type_code
6302             ,p_line_definition_owner_code => p_line_definition_owner_code
6303             ,p_line_definition_code       => p_line_definition_code
6304             ,p_mpa_acct_line_type_code    => l_err.mpa_accounting_line_type_code
6305             ,p_mpa_acct_line_code         => l_err.mpa_accounting_line_code);
6306   END LOOP;
6307 
6308   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6309     trace(p_msg    => 'END of procedure chk_mpa_jlt_acct_class_exist'
6310          ,p_module => l_log_module
6311          ,p_level  => C_LEVEL_PROCEDURE);
6312   END IF;
6313 
6314   RETURN l_return;
6315 
6316 EXCEPTION
6317   WHEN xla_exceptions_pkg.application_exception THEN
6318     IF (c_invalid_jlt%ISOPEN) THEN
6319       CLOSE c_invalid_jlt;
6320     END IF;
6321     RAISE;
6322 
6323   WHEN OTHERS                                   THEN
6324     IF (c_invalid_jlt%ISOPEN) THEN
6325       CLOSE c_invalid_jlt;
6326     END IF;
6327     xla_exceptions_pkg.raise_message
6328       (p_location   => 'xla_line_definitions_pvt.chk_mpa_jlt_acct_class_exist');
6329 END chk_mpa_jlt_acct_class_exist;
6330 
6331 --=============================================================================
6332 --
6333 -- Name: chk_mpa_jlt_inv_source_in_cond
6334 -- Description: Check if all sources used in the JLT condition is valid
6335 --
6336 --=============================================================================
6337 FUNCTION chk_mpa_jlt_inv_source_in_cond
6338   (p_application_id                   IN NUMBER
6339   ,p_amb_context_code                 IN VARCHAR2
6340   ,p_event_class_code                 IN VARCHAR2
6341   ,p_event_type_code                  IN VARCHAR2
6342   ,p_line_definition_owner_code       IN VARCHAR2
6343   ,p_line_definition_code             IN VARCHAR2)
6344 RETURN BOOLEAN
6345 IS
6346   --
6347   -- Get all JLT that have sources that do not belong to the event class of the
6348   -- line definition
6349   --
6350   CURSOR c_invalid_sources IS
6351     SELECT distinct mpa.event_class_code, mpa.event_type_code,
6352           mpa.mpa_accounting_line_type_code, mpa.mpa_accounting_line_code,
6353            xco.source_type_code, xco.source_code
6354       FROM xla_conditions           xco
6355           ,xla_line_defn_jlt_assgns xld
6356           ,xla_mpa_jlt_assgns       mpa
6357      WHERE xld.application_id             = p_application_id
6358        AND xld.amb_context_code           = p_amb_context_code
6359        AND xld.event_class_code           = p_event_class_code
6360        AND xld.event_type_code            = p_event_type_code
6361        AND xld.line_definition_owner_code = p_line_definition_owner_code
6362        AND xld.line_definition_code       = p_line_definition_code
6363        AND xld.active_flag                = 'Y'
6364        AND xco.application_id             = mpa.application_id
6365        AND xco.amb_context_code           = mpa.amb_context_code
6366        AND xco.event_class_code           = mpa.event_class_code
6367        AND xco.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6368        AND xco.accounting_line_code       = mpa.mpa_accounting_line_code
6369        AND xco.source_type_code           = 'S'
6370        AND xld.application_id             = mpa.application_id
6371        AND xld.amb_context_code           = mpa.amb_context_code
6372        AND xld.event_class_code           = mpa.event_class_code
6373        AND xld.event_type_code            = mpa.event_type_code
6374        AND xld.line_definition_owner_code = mpa.line_definition_owner_code
6375        AND xld.line_definition_code       = mpa.line_definition_code
6376        AND xld.accounting_line_type_code  = mpa.accounting_line_type_code
6377        AND xld.accounting_line_code       = mpa.accounting_line_code
6378        AND NOT EXISTS (SELECT 'x'
6379                         FROM xla_line_defn_jlt_assgns    xld1
6380                        WHERE xld1.application_id             = mpa.application_id
6381                          AND xld1.amb_context_code           = mpa.amb_context_code
6382                          AND xld1.event_class_code           = mpa.event_class_code
6383                          AND xld1.event_type_code            = mpa.event_type_code
6384                          AND xld1.line_definition_owner_code = mpa.line_definition_owner_code
6385                          AND xld1.line_definition_code       = mpa.line_definition_code
6386                          AND xld1.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6387                          AND xld1.accounting_line_code       = mpa.mpa_accounting_line_code)
6388        AND NOT EXISTS
6389            (SELECT 'y'
6390               FROM xla_event_sources xes
6391              WHERE xes.source_application_id = xco.source_application_id
6392                AND xes.source_type_code      = xco.source_type_code
6393                AND xes.source_code           = xco.source_code
6394                AND xes.application_id        = p_application_id
6395                AND xes.event_class_code      = p_event_class_code
6396                AND xes.active_flag           = 'Y')
6397     UNION
6398     SELECT distinct mpa.event_class_code, mpa.event_type_code,
6399           mpa.mpa_accounting_line_type_code, mpa.mpa_accounting_line_code,
6400            xco.value_source_type_code source_type_code, xco.value_source_code source_code
6401       FROM xla_conditions           xco
6402           ,xla_line_defn_jlt_assgns xld
6403           ,xla_mpa_jlt_assgns       mpa
6404      WHERE xld.application_id             = p_application_id
6405        AND xld.amb_context_code           = p_amb_context_code
6406        AND xld.event_class_code           = p_event_class_code
6407        AND xld.event_type_code            = p_event_type_code
6408        AND xld.line_definition_owner_code = p_line_definition_owner_code
6409        AND xld.line_definition_code       = p_line_definition_code
6410        AND xld.active_flag                = 'Y'
6411        AND xco.application_id             = mpa.application_id
6412        AND xco.amb_context_code           = mpa.amb_context_code
6413        AND xco.event_class_code           = mpa.event_class_code
6414        AND xco.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6415        AND xco.accounting_line_code       = mpa.mpa_accounting_line_code
6416        AND xco.value_source_type_code     = 'S'
6417        AND xld.application_id             = mpa.application_id
6418        AND xld.amb_context_code           = mpa.amb_context_code
6419        AND xld.event_class_code           = mpa.event_class_code
6420        AND xld.event_type_code            = mpa.event_type_code
6421        AND xld.line_definition_owner_code = mpa.line_definition_owner_code
6422        AND xld.line_definition_code       = mpa.line_definition_code
6423        AND xld.accounting_line_type_code  = mpa.accounting_line_type_code
6424        AND xld.accounting_line_code       = mpa.accounting_line_code
6425        AND NOT EXISTS (SELECT 'x'
6426                         FROM xla_line_defn_jlt_assgns    xld1
6427                        WHERE xld1.application_id             = mpa.application_id
6428                          AND xld1.amb_context_code           = mpa.amb_context_code
6429                          AND xld1.event_class_code           = mpa.event_class_code
6430                          AND xld1.event_type_code            = mpa.event_type_code
6431                          AND xld1.line_definition_owner_code = mpa.line_definition_owner_code
6432                          AND xld1.line_definition_code       = mpa.line_definition_code
6433                          AND xld1.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6434                          AND xld1.accounting_line_code       = mpa.mpa_accounting_line_code)
6435        AND NOT EXISTS
6436            (SELECT 'y'
6437               FROM xla_event_sources xes
6438              WHERE xes.source_application_id = xco.value_source_application_id
6439                AND xes.source_type_code      = xco.value_source_type_code
6440                AND xes.source_code           = xco.value_source_code
6441                AND xes.application_id        = p_application_id
6442                AND xes.event_class_code      = p_event_class_code
6443                AND xes.active_flag           = 'Y');
6444 
6445   --
6446   -- Get all dervied sources used by the condition of the JLT
6447   --
6448   CURSOR c_jlt_cond_der_sources IS
6449     SELECT distinct mpa.event_class_code, mpa.event_type_code,
6450           mpa.mpa_accounting_line_type_code, mpa.mpa_accounting_line_code,
6451            xco.source_type_code, xco.source_code
6452       FROM xla_conditions           xco
6453           ,xla_line_defn_jlt_assgns xld
6454           ,xla_mpa_jlt_assgns       mpa
6455      WHERE xld.application_id             = p_application_id
6456        AND xld.amb_context_code           = p_amb_context_code
6457        AND xld.event_class_code           = p_event_class_code
6458        AND xld.event_type_code            = p_event_type_code
6459        AND xld.line_definition_owner_code = p_line_definition_owner_code
6460        AND xld.line_definition_code       = p_line_definition_code
6461        AND xld.active_flag               = 'Y'
6462        AND xco.application_id             = mpa.application_id
6463        AND xco.amb_context_code           = mpa.amb_context_code
6464        AND xco.event_class_code           = mpa.event_class_code
6465        AND xco.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6466        AND xco.accounting_line_code       = mpa.mpa_accounting_line_code
6467        AND xco.source_type_code          = 'D'
6468        AND xld.application_id             = mpa.application_id
6469        AND xld.amb_context_code           = mpa.amb_context_code
6470        AND xld.event_class_code           = mpa.event_class_code
6471        AND xld.event_type_code            = mpa.event_type_code
6472        AND xld.line_definition_owner_code = mpa.line_definition_owner_code
6473        AND xld.line_definition_code       = mpa.line_definition_code
6474        AND xld.accounting_line_type_code  = mpa.accounting_line_type_code
6475        AND xld.accounting_line_code       = mpa.accounting_line_code
6476        AND NOT EXISTS (SELECT 'x'
6477                         FROM xla_line_defn_jlt_assgns    xld1
6478                        WHERE xld1.application_id             = mpa.application_id
6479                          AND xld1.amb_context_code           = mpa.amb_context_code
6480                          AND xld1.event_class_code           = mpa.event_class_code
6481                          AND xld1.event_type_code            = mpa.event_type_code
6482                          AND xld1.line_definition_owner_code = mpa.line_definition_owner_code
6483                          AND xld1.line_definition_code       = mpa.line_definition_code
6484                          AND xld1.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6485                          AND xld1.accounting_line_code       = mpa.mpa_accounting_line_code)
6486    UNION
6487     SELECT distinct mpa.event_class_code, mpa.event_type_code,
6488           mpa.mpa_accounting_line_type_code, mpa.mpa_accounting_line_code,
6489            xco.value_source_type_code source_type_code, xco.value_source_code source_code
6490       FROM xla_conditions           xco
6491           ,xla_line_defn_jlt_assgns xld
6492           ,xla_mpa_jlt_assgns       mpa
6493      WHERE xld.application_id             = p_application_id
6494        AND xld.amb_context_code           = p_amb_context_code
6495        AND xld.event_class_code           = p_event_class_code
6496        AND xld.event_type_code            = p_event_type_code
6497        AND xld.line_definition_owner_code = p_line_definition_owner_code
6498        AND xld.line_definition_code       = p_line_definition_code
6499        AND xld.active_flag                = 'Y'
6500        AND xco.application_id             = mpa.application_id
6501        AND xco.amb_context_code           = mpa.amb_context_code
6502        AND xco.event_class_code           = mpa.event_class_code
6503        AND xco.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6504        AND xco.accounting_line_code       = mpa.mpa_accounting_line_code
6505        AND xco.value_source_type_code     = 'D'
6506        AND xld.application_id             = mpa.application_id
6507        AND xld.amb_context_code           = mpa.amb_context_code
6508        AND xld.event_class_code           = mpa.event_class_code
6509        AND xld.event_type_code            = mpa.event_type_code
6510        AND xld.line_definition_owner_code = mpa.line_definition_owner_code
6511        AND xld.line_definition_code       = mpa.line_definition_code
6512        AND xld.accounting_line_type_code  = mpa.accounting_line_type_code
6513        AND xld.accounting_line_code       = mpa.accounting_line_code
6514        AND NOT EXISTS (SELECT 'x'
6515                         FROM xla_line_defn_jlt_assgns    xld1
6516                        WHERE xld1.application_id             = mpa.application_id
6517                          AND xld1.amb_context_code           = mpa.amb_context_code
6518                          AND xld1.event_class_code           = mpa.event_class_code
6519                          AND xld1.event_type_code            = mpa.event_type_code
6520                          AND xld1.line_definition_owner_code = mpa.line_definition_owner_code
6521                          AND xld1.line_definition_code       = mpa.line_definition_code
6522                          AND xld1.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6523                          AND xld1.accounting_line_code       = mpa.mpa_accounting_line_code)  ;
6524 
6525   l_return      BOOLEAN;
6526   l_log_module  VARCHAR2(240);
6527 BEGIN
6528   IF g_log_enabled THEN
6529     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_jlt_inv_source_in_cond';
6530   END IF;
6531 
6532   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6533     trace(p_msg    => 'BEGIN of procedure chk_mpa_jlt_inv_source_in_cond'
6534          ,p_module => l_log_module
6535          ,p_level  => C_LEVEL_PROCEDURE);
6536   END IF;
6537 
6538   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6539     trace(p_msg    => 'application_id = '||p_application_id||
6540                       ',amb_context_code = '||p_amb_context_code||
6541                       ',event_class_code = '||p_event_class_code||
6542                       ',event_type_code = '||p_event_type_code||
6543                       ',line_definition_owner_code = '||p_line_definition_owner_code||
6544                       ',line_definition_code = '||p_line_definition_code
6545          ,p_module => l_log_module
6546          ,p_level  => C_LEVEL_STATEMENT);
6547   END IF;
6548 
6549   l_return := TRUE;
6550 
6551   --
6552   -- Check if the condition of any JLT have seeded sources that are not assigned
6553   -- to the event class of the line definition
6554   --
6555   FOR l_err IN c_invalid_sources LOOP
6556     l_return := FALSE;
6557 
6558     xla_amb_setup_err_pkg.stack_error
6559             (p_message_name               => 'XLA_AB_MPA_LT_CON_UNASN_SRCE'
6560             ,p_message_type               => 'E'
6561             ,p_message_category           => 'MPA_LINE_TYPE'
6562             ,p_category_sequence          => 18
6563             ,p_application_id             => p_application_id
6564             ,p_amb_context_code           => p_amb_context_code
6565             ,p_event_class_code           => p_event_class_code
6566             ,p_event_type_code            => p_event_type_code
6567             ,p_line_definition_owner_code => p_line_definition_owner_code
6568             ,p_line_definition_code       => p_line_definition_code
6569             ,p_mpa_acct_line_type_code    => l_err.mpa_accounting_line_type_code
6570             ,p_mpa_acct_line_code         => l_err.mpa_accounting_line_code
6571             ,p_source_type_code           => l_err.source_type_code
6572             ,p_source_code                => l_err.source_code);
6573   END LOOP;
6574 
6575   --
6576   -- Check if any derveried source used by the condition of the JLT is invalid
6577   --
6578   FOR l_err IN c_jlt_cond_der_sources LOOP
6579     IF xla_sources_pkg.derived_source_is_invalid
6580             (p_application_id             => p_application_id
6581             ,p_derived_source_code        => l_err.source_code
6582             ,p_derived_source_type_code   => 'D'
6583             ,p_event_class_code           => p_event_class_code
6584             ,p_level                      => 'L') = 'TRUE' THEN
6585       l_return := FALSE;
6586 
6587       xla_amb_setup_err_pkg.stack_error
6588             (p_message_name               => 'XLA_AB_MPA_LT_CON_UNASN_SRCE'
6589             ,p_message_type               => 'E'
6590             ,p_message_category           => 'MPA_LINE_TYPE'
6591             ,p_category_sequence          => 18
6592             ,p_application_id             => p_application_id
6593             ,p_amb_context_code           => p_amb_context_code
6594             ,p_event_class_code           => p_event_class_code
6595             ,p_event_type_code            => p_event_type_code
6596             ,p_line_definition_owner_code => p_line_definition_owner_code
6597             ,p_line_definition_code       => p_line_definition_code
6598             ,p_mpa_acct_line_type_code    => l_err.mpa_accounting_line_type_code
6599             ,p_mpa_acct_line_code         => l_err.mpa_accounting_line_code
6600             ,p_source_type_code           => l_err.source_type_code
6601             ,p_source_code                => l_err.source_code);
6602 
6603     END IF;
6604   END LOOP;
6605 
6606   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6607     trace(p_msg    => 'END of procedure chk_mpa_jlt_inv_source_in_cond'
6608          ,p_module => l_log_module
6609          ,p_level  => C_LEVEL_PROCEDURE);
6610   END IF;
6611 
6612   RETURN l_return;
6613 
6614 EXCEPTION
6615   WHEN xla_exceptions_pkg.application_exception THEN
6616     IF (c_invalid_sources%ISOPEN) THEN
6617       CLOSE c_invalid_sources;
6618     END IF;
6619     IF (c_jlt_cond_der_sources%ISOPEN) THEN
6620       CLOSE c_jlt_cond_der_sources;
6621     END IF;
6622     RAISE;
6623 
6624   WHEN OTHERS                                   THEN
6625     IF (c_invalid_sources%ISOPEN) THEN
6626       CLOSE c_invalid_sources;
6627     END IF;
6628     IF (c_jlt_cond_der_sources%ISOPEN) THEN
6629       CLOSE c_jlt_cond_der_sources;
6630     END IF;
6631     xla_exceptions_pkg.raise_message
6632       (p_location   => 'xla_line_definitions_pvt.chk_mpa_jlt_inv_source_in_cond');
6633 
6634 END chk_mpa_jlt_inv_source_in_cond;
6635 
6636 --=============================================================================
6637 --
6638 -- Name: chk_mpa_jlt_acct_src_assigned
6639 -- Description: Check if all JLT of the line definition has all required
6640 --              accounting sources assigned
6641 --
6642 --=============================================================================
6643 FUNCTION chk_mpa_jlt_acct_src_assigned
6644   (p_application_id                   IN NUMBER
6645   ,p_amb_context_code                 IN VARCHAR2
6646   ,p_event_class_code                 IN VARCHAR2
6647   ,p_event_type_code                  IN VARCHAR2
6648   ,p_line_definition_owner_code       IN VARCHAR2
6649   ,p_line_definition_code             IN VARCHAR2)
6650 RETURN BOOLEAN
6651 IS
6652   --
6653   -- Get all JLT for which not all required line accounting sources are assigned
6654   --
6655   CURSOR c_non_pe_jlt IS
6656     SELECT mpa.mpa_accounting_line_type_code
6657           ,mpa.mpa_accounting_line_code
6658           ,xja.accounting_attribute_code
6659       FROM xla_line_defn_jlt_assgns xld
6660           ,xla_acct_line_types_b    jlt
6661           ,xla_jlt_acct_attrs       xja
6662           ,xla_mpa_jlt_assgns       mpa
6663      WHERE jlt.application_id            = xja.application_id
6664        AND jlt.amb_context_code          = xja.amb_context_code
6665        AND jlt.event_class_code          = xja.event_class_code
6666        AND jlt.accounting_line_type_code = xja.accounting_line_type_code
6667        AND jlt.accounting_line_code      = xja.accounting_line_code
6668        AND mpa.application_id            = jlt.application_id
6669        AND mpa.amb_context_code          = jlt.amb_context_code
6670        AND mpa.event_class_code          = jlt.event_class_code
6671        AND mpa.mpa_accounting_line_type_code = jlt.accounting_line_type_code
6672        AND mpa.mpa_accounting_line_code      = jlt.accounting_line_code
6673        AND jlt.business_method_code      <> 'PRIOR_ENTRY'
6674        AND xld.application_id            = p_application_id
6675        AND xld.amb_context_code          = p_amb_context_code
6676        AND xld.event_class_code          = p_event_class_code
6677        AND xld.event_type_code           = p_event_type_code
6678        AND xld.line_definition_owner_code= p_line_definition_owner_code
6679        AND xld.line_definition_code      = p_line_definition_code
6680        AND xld.active_flag                = 'Y'
6681        AND xld.application_id             = mpa.application_id
6682        AND xld.amb_context_code           = mpa.amb_context_code
6683        AND xld.event_class_code           = mpa.event_class_code
6684        AND xld.event_type_code            = mpa.event_type_code
6685        AND xld.line_definition_owner_code = mpa.line_definition_owner_code
6686        AND xld.line_definition_code       = mpa.line_definition_code
6687        AND xld.accounting_line_type_code  = mpa.accounting_line_type_code
6688        AND xld.accounting_line_code       = mpa.accounting_line_code
6689        AND xja.source_code               is null
6690        AND NOT EXISTS (SELECT 'x'
6691                         FROM xla_line_defn_jlt_assgns    xld1
6692                        WHERE xld1.application_id             = mpa.application_id
6693                          AND xld1.amb_context_code           = mpa.amb_context_code
6694                          AND xld1.event_class_code           = mpa.event_class_code
6695                          AND xld1.event_type_code            = mpa.event_type_code
6696                          AND xld1.line_definition_owner_code = mpa.line_definition_owner_code
6697                          AND xld1.line_definition_code       = mpa.line_definition_code
6698                          AND xld1.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6699                          AND xld1.accounting_line_code       = mpa.mpa_accounting_line_code)
6700        AND EXISTS (SELECT 'x'
6701                      FROM xla_acct_attributes_b xaa
6702                     WHERE xaa.accounting_attribute_code = xja.accounting_attribute_code
6703                       AND xaa.assignment_required_code      = 'Y'
6704                       AND xaa.assignment_level_code         IN ('EVT_CLASS_JLT','JLT_ONLY'));
6705 
6706   CURSOR c_pe_jlt IS
6707     SELECT mpa.mpa_accounting_line_type_code
6708           ,mpa.mpa_accounting_line_code
6709           ,xja.accounting_attribute_code
6710       FROM xla_line_defn_jlt_assgns xld
6711           ,xla_acct_line_types_b    jlt
6712           ,xla_jlt_acct_attrs       xja
6713           ,xla_mpa_jlt_assgns       mpa
6714      WHERE jlt.application_id            = xja.application_id
6715        AND jlt.amb_context_code          = xja.amb_context_code
6716        AND jlt.event_class_code          = xja.event_class_code
6717        AND jlt.accounting_line_type_code = xja.accounting_line_type_code
6718        AND jlt.accounting_line_code      = xja.accounting_line_code
6719        AND mpa.application_id            = jlt.application_id
6720        AND mpa.amb_context_code          = jlt.amb_context_code
6721        AND mpa.event_class_code          = jlt.event_class_code
6722        AND mpa.mpa_accounting_line_type_code = jlt.accounting_line_type_code
6723        AND mpa.mpa_accounting_line_code      = jlt.accounting_line_code
6724        AND jlt.business_method_code      = 'PRIOR_ENTRY'
6725        AND xld.application_id            = p_application_id
6726        AND xld.amb_context_code          = p_amb_context_code
6727        AND xld.event_class_code          = p_event_class_code
6728        AND xld.event_type_code           = p_event_type_code
6729        AND xld.line_definition_owner_code= p_line_definition_owner_code
6730        AND xld.line_definition_code      = p_line_definition_code
6731        AND xld.active_flag                = 'Y'
6732        AND xld.application_id             = mpa.application_id
6733        AND xld.amb_context_code           = mpa.amb_context_code
6734        AND xld.event_class_code           = mpa.event_class_code
6735        AND xld.event_type_code            = mpa.event_type_code
6736        AND xld.line_definition_owner_code = mpa.line_definition_owner_code
6737        AND xld.line_definition_code       = mpa.line_definition_code
6738        AND xld.accounting_line_type_code  = mpa.accounting_line_type_code
6739        AND xld.accounting_line_code       = mpa.accounting_line_code
6740        AND xja.source_code               is null
6741        AND NOT EXISTS (SELECT 'x'
6742                         FROM xla_line_defn_jlt_assgns    xld1
6743                        WHERE xld1.application_id             = mpa.application_id
6744                          AND xld1.amb_context_code           = mpa.amb_context_code
6745                          AND xld1.event_class_code           = mpa.event_class_code
6746                          AND xld1.event_type_code            = mpa.event_type_code
6747                          AND xld1.line_definition_owner_code = mpa.line_definition_owner_code
6748                          AND xld1.line_definition_code       = mpa.line_definition_code
6749                          AND xld1.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6750                          AND xld1.accounting_line_code       = mpa.mpa_accounting_line_code)
6751        AND EXISTS (SELECT 'x'
6752                      FROM xla_acct_attributes_b xaa
6753                     WHERE xaa.accounting_attribute_code     = xja.accounting_attribute_code
6754                       AND xaa.assignment_required_code      = 'Y'
6755                       AND xaa.assignment_level_code         IN ('EVT_CLASS_JLT','JLT_ONLY')
6756                       AND xaa.inherited_flag                = 'N');
6757 
6758 
6759   l_return      BOOLEAN;
6760   l_log_module  VARCHAR2(240);
6761 BEGIN
6762   IF g_log_enabled THEN
6763     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_jlt_acct_src_assigned';
6764   END IF;
6765 
6766   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6767     trace(p_msg    => 'BEGIN of procedure chk_mpa_jlt_acct_src_assigned'
6768          ,p_module => l_log_module
6769          ,p_level  => C_LEVEL_PROCEDURE);
6770   END IF;
6771 
6772   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6773     trace(p_msg    => 'application_id = '||p_application_id||
6774                       ',amb_context_code = '||p_amb_context_code||
6775                       ',event_class_code = '||p_event_class_code||
6776                       ',event_type_code = '||p_event_type_code||
6777                       ',line_definition_owner_code = '||p_line_definition_owner_code||
6778                       ',line_definition_code = '||p_line_definition_code
6779          ,p_module => l_log_module
6780          ,p_level  => C_LEVEL_STATEMENT);
6781   END IF;
6782 
6783   l_return := TRUE;
6784 
6785   --
6786   -- Check if any JLT does not have all required line accounting sources
6787   --
6788   FOR l_err IN c_non_pe_jlt LOOP
6789     l_return := FALSE;
6790 
6791     xla_amb_setup_err_pkg.stack_error
6792             (p_message_name               => 'XLA_AB_MPA_LT_ACCTING_SOURCE'
6793             ,p_message_type               => 'E'
6794             ,p_message_category           => 'MPA_LINE_TYPE'
6795             ,p_category_sequence          => 18
6796             ,p_application_id             => p_application_id
6797             ,p_amb_context_code           => p_amb_context_code
6798             ,p_event_class_code           => p_event_class_code
6799             ,p_event_type_code            => p_event_type_code
6800             ,p_line_definition_owner_code => p_line_definition_owner_code
6801             ,p_line_definition_code       => p_line_definition_code
6802             ,p_mpa_acct_line_type_code    => l_err.mpa_accounting_line_type_code
6803             ,p_mpa_acct_line_code         => l_err.mpa_accounting_line_code
6804             ,p_accounting_source_code     => l_err.accounting_attribute_code);
6805   END LOOP;
6806 
6807   FOR l_err IN c_pe_jlt LOOP
6808     l_return := FALSE;
6809 
6810     xla_amb_setup_err_pkg.stack_error
6811             (p_message_name               => 'XLA_AB_MPA_LT_ACCTING_SOURCE'
6812             ,p_message_type               => 'E'
6813             ,p_message_category           => 'MPA_LINE_TYPE'
6814             ,p_category_sequence          => 18
6815             ,p_application_id             => p_application_id
6816             ,p_amb_context_code           => p_amb_context_code
6817             ,p_event_class_code           => p_event_class_code
6818             ,p_event_type_code            => p_event_type_code
6819             ,p_line_definition_owner_code => p_line_definition_owner_code
6820             ,p_line_definition_code       => p_line_definition_code
6821             ,p_mpa_acct_line_type_code    => l_err.mpa_accounting_line_type_code
6822             ,p_mpa_acct_line_code         => l_err.mpa_accounting_line_code
6823             ,p_accounting_source_code     => l_err.accounting_attribute_code);
6824   END LOOP;
6825 
6826   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6827     trace(p_msg    => 'END of procedure chk_mpa_jlt_acct_src_assigned'
6828          ,p_module => l_log_module
6829          ,p_level  => C_LEVEL_PROCEDURE);
6830   END IF;
6831 
6832   RETURN l_return;
6833 
6834 EXCEPTION
6835   WHEN xla_exceptions_pkg.application_exception THEN
6836     IF (c_non_pe_jlt%ISOPEN) THEN
6837       CLOSE c_non_pe_jlt;
6838     END IF;
6839     IF (c_pe_jlt%ISOPEN) THEN
6840       CLOSE c_pe_jlt;
6841     END IF;
6842     RAISE;
6843 
6844   WHEN OTHERS                                   THEN
6845     IF (c_non_pe_jlt%ISOPEN) THEN
6846       CLOSE c_non_pe_jlt;
6847     END IF;
6848     IF (c_pe_jlt%ISOPEN) THEN
6849       CLOSE c_pe_jlt;
6850     END IF;
6851     xla_exceptions_pkg.raise_message
6852       (p_location   => 'xla_line_definitions_pvt.chk_mpa_jlt_acct_src_assigned');
6853 
6854 END chk_mpa_jlt_acct_src_assigned;
6855 
6856 
6857 --=============================================================================
6858 --
6859 -- Name: chk_mpa_jlt_inv_acct_group_src
6860 -- Description: Check if all JLT of the line definition has all required
6861 --              accounting sources assigned
6862 --
6863 --=============================================================================
6864 FUNCTION chk_mpa_jlt_inv_acct_group_src
6865   (p_application_id                   IN NUMBER
6866   ,p_amb_context_code                 IN VARCHAR2
6867   ,p_event_class_code                 IN VARCHAR2
6868   ,p_event_type_code                  IN VARCHAR2
6869   ,p_line_definition_owner_code       IN VARCHAR2
6870   ,p_line_definition_code             IN VARCHAR2)
6871 RETURN BOOLEAN
6872 IS
6873   CURSOR c_jlt_assgns IS
6874    SELECT distinct mpa.mpa_accounting_line_type_code, mpa.mpa_accounting_line_code
6875      FROM xla_line_defn_jlt_assgns  xld
6876          ,xla_mpa_jlt_assgns        mpa
6877     WHERE xld.application_id             = p_application_id
6878       AND xld.amb_context_code           = p_amb_context_code
6879       AND xld.event_class_code           = p_event_class_code
6880       AND xld.event_type_code            = p_event_type_code
6881       AND xld.line_definition_owner_code = p_line_definition_owner_code
6882       AND xld.line_definition_code       = p_line_definition_code
6883        AND xld.active_flag                = 'Y'
6884        AND xld.application_id             = mpa.application_id
6885        AND xld.amb_context_code           = mpa.amb_context_code
6886        AND xld.event_class_code           = mpa.event_class_code
6887        AND xld.event_type_code            = mpa.event_type_code
6888        AND xld.line_definition_owner_code = mpa.line_definition_owner_code
6889        AND xld.line_definition_code       = mpa.line_definition_code
6890        AND xld.accounting_line_type_code  = mpa.accounting_line_type_code
6891        AND xld.accounting_line_code       = mpa.accounting_line_code
6892        AND NOT EXISTS (SELECT 'x'
6893                         FROM xla_line_defn_jlt_assgns    xld1
6894                        WHERE xld1.application_id             = mpa.application_id
6895                          AND xld1.amb_context_code           = mpa.amb_context_code
6896                          AND xld1.event_class_code           = mpa.event_class_code
6897                          AND xld1.event_type_code            = mpa.event_type_code
6898                          AND xld1.line_definition_owner_code = mpa.line_definition_owner_code
6899                          AND xld1.line_definition_code       = mpa.line_definition_code
6900                          AND xld1.accounting_line_type_code  = mpa.mpa_accounting_line_type_code
6901                          AND xld1.accounting_line_code       = mpa.mpa_accounting_line_code)  ;
6902 
6903   CURSOR c_business_method(l_accounting_line_type_code VARCHAR2
6904                           ,l_accounting_line_code      VARCHAR2)
6905   IS
6906   SELECT business_method_code
6907     FROM xla_acct_line_types_b
6908    WHERE application_id             = p_application_id
6909      AND amb_context_code           = p_amb_context_code
6910      AND event_class_code           = p_event_class_code
6911      AND accounting_line_type_code = l_accounting_line_type_code
6912      AND accounting_line_code      = l_accounting_line_code;
6913 
6914   CURSOR c_mapping_groups(l_accounting_line_type_code VARCHAR2
6915                          ,l_accounting_line_code      VARCHAR2) IS
6916    SELECT distinct xaa.assignment_group_code
6917      FROM xla_jlt_acct_attrs xja, xla_acct_attributes_b xaa
6918     WHERE xja.application_id            = p_application_id
6919       AND xja.amb_context_code          = p_amb_context_code
6920       AND xja.event_class_code          = p_event_class_code
6921       AND xja.accounting_line_type_code = l_accounting_line_type_code
6922       AND xja.accounting_line_code      = l_accounting_line_code
6923       AND xja.accounting_attribute_code = xaa.accounting_attribute_code
6924       AND xja.source_code               IS NOT NULL
6925    UNION
6926    SELECT distinct xaa.assignment_group_code
6927      FROM xla_evt_class_acct_attrs xec, xla_acct_attributes_b xaa
6928     WHERE xec.application_id            = p_application_id
6929       AND xec.event_class_code          = p_event_class_code
6930       AND xec.accounting_attribute_code = xaa.accounting_attribute_code
6931       AND xaa.assignment_level_code    = 'EVT_CLASS_ONLY'
6932       AND xec.default_flag              = 'Y';
6933 
6934   CURSOR c_group_acct_sources(l_accounting_line_type_code VARCHAR2
6935                              ,l_accounting_line_code      VARCHAR2
6936                              ,l_assignment_group_code     VARCHAR2) IS
6937    SELECT distinct xaa.accounting_attribute_code
6938      FROM xla_acct_attributes_b xaa
6939          ,xla_jlt_acct_attrs    xja
6940     WHERE xaa.assignment_level_code     = 'EVT_CLASS_JLT'
6941       AND xaa.assignment_required_code  = 'G'
6942       AND xaa.accounting_attribute_code = xja.accounting_attribute_code
6943       AND xaa.assignment_group_code     = l_assignment_group_code
6944       AND xja.application_id            = p_application_id
6945       AND xja.amb_context_code          = p_amb_context_code
6946       AND xja.event_class_code          = p_event_class_code
6947       AND xja.accounting_line_type_code = l_accounting_line_type_code
6948       AND xja.accounting_line_code      = l_accounting_line_code
6949       AND xja.source_code               IS NULL;
6950 
6951   CURSOR c_pe_mapping_groups(l_accounting_line_type_code VARCHAR2
6952                          ,l_accounting_line_code      VARCHAR2) IS
6953    SELECT distinct xaa.assignment_group_code
6954      FROM xla_jlt_acct_attrs xja, xla_acct_attributes_b xaa
6955     WHERE xja.application_id            = p_application_id
6956       AND xja.amb_context_code          = p_amb_context_code
6957       AND xja.event_class_code          = p_event_class_code
6958       AND xja.accounting_line_type_code = l_accounting_line_type_code
6959       AND xja.accounting_line_code      = l_accounting_line_code
6960       AND xja.accounting_attribute_code = xaa.accounting_attribute_code
6961       AND (xja.source_code               IS NOT NULL
6962        OR xaa.inherited_flag            = 'Y')
6963    UNION
6964    SELECT distinct xaa.assignment_group_code
6965      FROM xla_evt_class_acct_attrs xec, xla_acct_attributes_b xaa
6966     WHERE xec.application_id            = p_application_id
6967       AND xec.event_class_code          = p_event_class_code
6968       AND xec.accounting_attribute_code = xaa.accounting_attribute_code
6969       AND xaa.assignment_level_code    = 'EVT_CLASS_ONLY'
6970       AND xec.default_flag              = 'Y';
6971 
6972   CURSOR c_pe_group_acct_sources(l_accounting_line_type_code VARCHAR2
6973                              ,l_accounting_line_code      VARCHAR2
6974                              ,l_assignment_group_code     VARCHAR2) IS
6975    SELECT distinct xaa.accounting_attribute_code
6976      FROM xla_acct_attributes_b xaa
6977          ,xla_jlt_acct_attrs    xja
6978     WHERE xaa.assignment_level_code     = 'EVT_CLASS_JLT'
6979       AND xaa.assignment_required_code  = 'G'
6980       AND xaa.accounting_attribute_code = xja.accounting_attribute_code
6981       AND xaa.assignment_group_code     = l_assignment_group_code
6982       AND xja.application_id            = p_application_id
6983       AND xja.amb_context_code          = p_amb_context_code
6984       AND xja.event_class_code          = p_event_class_code
6985       AND xja.accounting_line_type_code = l_accounting_line_type_code
6986       AND xja.accounting_line_code      = l_accounting_line_code
6987       AND xja.source_code               IS NULL
6988       AND xaa.inherited_flag            = 'N';
6989 
6990   l_return               BOOLEAN;
6991   l_log_module           VARCHAR2(240);
6992   l_business_method_code VARCHAR2(30);
6993 
6994 BEGIN
6995   IF g_log_enabled THEN
6996     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_jlt_inv_acct_group_src';
6997   END IF;
6998 
6999   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7000     trace(p_msg    => 'BEGIN of procedure chk_mpa_jlt_inv_acct_group_src'
7001          ,p_module => l_log_module
7002          ,p_level  => C_LEVEL_PROCEDURE);
7003   END IF;
7004 
7005   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7006     trace(p_msg    => 'application_id = '||p_application_id||
7007                       ',amb_context_code = '||p_amb_context_code||
7008                       ',event_class_code = '||p_event_class_code||
7009                       ',event_type_code = '||p_event_type_code||
7010                       ',line_definition_owner_code = '||p_line_definition_owner_code||
7011                       ',line_definition_code = '||p_line_definition_code
7012          ,p_module => l_log_module
7013          ,p_level  => C_LEVEL_STATEMENT);
7014   END IF;
7015 
7016   l_return := TRUE;
7017 
7018   FOR l_jlt IN c_jlt_assgns LOOP
7019 
7020     OPEN c_business_method(l_jlt.mpa_accounting_line_type_code
7021                           ,l_jlt.mpa_accounting_line_code);
7022     FETCH c_business_method
7023      INTO l_business_method_code;
7024     CLOSE c_business_method;
7025 
7026     IF l_business_method_code <> 'PRIOR_ENTRY' THEN
7027 
7028        FOR l_mapping_group IN c_mapping_groups(l_jlt.mpa_accounting_line_type_code
7029                                            ,l_jlt.mpa_accounting_line_code) LOOP
7030          FOR l_err IN c_group_acct_sources(l_jlt.mpa_accounting_line_type_code
7031                                        ,l_jlt.mpa_accounting_line_code
7032                                        ,l_mapping_group.assignment_group_code) LOOP
7033            l_return := FALSE;
7034            xla_amb_setup_err_pkg.stack_error
7035               (p_message_name               => 'XLA_AB_MPA_LT_ACCT_GROUP_SRC'
7036               ,p_message_type               => 'E'
7037               ,p_message_category           => 'MPA_LINE_TYPE'
7038               ,p_category_sequence          => 18
7039               ,p_application_id             => p_application_id
7040               ,p_amb_context_code           => p_amb_context_code
7041               ,p_event_class_code           => p_event_class_code
7042               ,p_event_type_code            => p_event_type_code
7043               ,p_line_definition_owner_code => p_line_definition_owner_code
7044               ,p_line_definition_code       => p_line_definition_code
7045               ,p_mpa_acct_line_type_code    => l_jlt.mpa_accounting_line_type_code
7046               ,p_mpa_acct_line_code         => l_jlt.mpa_accounting_line_code
7047               ,p_accounting_source_code     => l_err.accounting_attribute_code
7048               ,p_accounting_group_code      => l_mapping_group.assignment_group_code);
7049          END LOOP;
7050        END LOOP;
7051     ELSE
7052        FOR l_pe_mapping_group IN c_pe_mapping_groups(l_jlt.mpa_accounting_line_type_code
7053                                            ,l_jlt.mpa_accounting_line_code) LOOP
7054          FOR l_err IN c_pe_group_acct_sources(l_jlt.mpa_accounting_line_type_code
7055                                        ,l_jlt.mpa_accounting_line_code
7056                                        ,l_pe_mapping_group.assignment_group_code) LOOP
7057            l_return := FALSE;
7058            xla_amb_setup_err_pkg.stack_error
7059               (p_message_name               => 'XLA_AB_MPA_LT_ACCT_GROUP_SRC'
7060               ,p_message_type               => 'E'
7061               ,p_message_category           => 'MPA_LINE_TYPE'
7062               ,p_category_sequence          => 18
7063               ,p_application_id             => p_application_id
7064               ,p_amb_context_code           => p_amb_context_code
7065               ,p_event_class_code           => p_event_class_code
7066               ,p_event_type_code            => p_event_type_code
7067               ,p_line_definition_owner_code => p_line_definition_owner_code
7068               ,p_line_definition_code       => p_line_definition_code
7069               ,p_mpa_acct_line_type_code    => l_jlt.mpa_accounting_line_type_code
7070               ,p_mpa_acct_line_code         => l_jlt.mpa_accounting_line_code
7071               ,p_accounting_source_code     => l_err.accounting_attribute_code
7072               ,p_accounting_group_code      => l_pe_mapping_group.assignment_group_code);
7073          END LOOP;
7074        END LOOP;
7075     END IF;
7076   END LOOP;
7077 
7078   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7079     trace(p_msg    => 'END of procedure chk_mpa_jlt_inv_acct_group_src'
7080          ,p_module => l_log_module
7081          ,p_level  => C_LEVEL_PROCEDURE);
7082   END IF;
7083 
7084   RETURN l_return;
7085 
7086 EXCEPTION
7087   WHEN xla_exceptions_pkg.application_exception THEN
7088     IF (c_jlt_assgns%ISOPEN) THEN
7089       CLOSE c_jlt_assgns;
7090     END IF;
7091     IF (c_mapping_groups%ISOPEN) THEN
7092       CLOSE c_mapping_groups;
7093     END IF;
7094     IF (c_group_acct_sources%ISOPEN) THEN
7095       CLOSE c_group_acct_sources;
7096     END IF;
7097     IF (c_pe_mapping_groups%ISOPEN) THEN
7098       CLOSE c_mapping_groups;
7099     END IF;
7100     IF (c_pe_group_acct_sources%ISOPEN) THEN
7101       CLOSE c_group_acct_sources;
7102     END IF;
7103     RAISE;
7104 
7105   WHEN OTHERS                                   THEN
7106     IF (c_jlt_assgns%ISOPEN) THEN
7107       CLOSE c_jlt_assgns;
7108     END IF;
7109     IF (c_mapping_groups%ISOPEN) THEN
7110       CLOSE c_mapping_groups;
7111     END IF;
7112     IF (c_group_acct_sources%ISOPEN) THEN
7113       CLOSE c_group_acct_sources;
7114     END IF;
7115     IF (c_pe_mapping_groups%ISOPEN) THEN
7116       CLOSE c_mapping_groups;
7117     END IF;
7118     IF (c_pe_group_acct_sources%ISOPEN) THEN
7119       CLOSE c_group_acct_sources;
7120     END IF;
7121     xla_exceptions_pkg.raise_message
7122       (p_location   => 'xla_line_definitions_pvt.chk_mpa_jlt_inv_acct_group_src');
7123 
7124 END chk_mpa_jlt_inv_acct_group_src;
7125 
7126 
7127 --=============================================================================
7128 --
7129 -- Name: validate_mpa_jlt_assgns
7130 -- Description: Validate MPA JLT assignment of the line definition
7131 --
7132 --=============================================================================
7133 FUNCTION validate_mpa_jlt_assgns
7134   (p_application_id                   IN NUMBER
7135   ,p_amb_context_code                 IN VARCHAR2
7136   ,p_event_class_code                 IN VARCHAR2
7137   ,p_event_type_code                  IN VARCHAR2
7138   ,p_line_definition_owner_code       IN VARCHAR2
7139   ,p_line_definition_code             IN VARCHAR2)
7140 RETURN BOOLEAN
7141 IS
7142   l_return      BOOLEAN;
7143   l_log_module  VARCHAR2(240);
7144 BEGIN
7145   IF g_log_enabled THEN
7146     l_log_module := C_DEFAULT_MODULE||'.validate_mpa_jlt_assgns';
7147   END IF;
7148 
7149   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7150     trace(p_msg    => 'BEGIN of procedure validate_mpa_jlt_assgns'
7151          ,p_module => l_log_module
7152          ,p_level  => C_LEVEL_PROCEDURE);
7153   END IF;
7154 
7155   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7156     trace(p_msg    => 'application_id = '||p_application_id||
7157                       ',amb_context_code = '||p_amb_context_code||
7158                       ',event_class_code = '||p_event_class_code||
7159                       ',event_type_code = '||p_event_type_code||
7160                       ',line_definition_owner_code = '||p_line_definition_owner_code||
7161                       ',line_definition_code = '||p_line_definition_code
7162          ,p_module => l_log_module
7163          ,p_level  => C_LEVEL_STATEMENT);
7164   END IF;
7165 
7166   l_return := TRUE;
7167 
7168   l_return := chk_mpa_jlt_lines
7169                      (p_application_id             => p_application_id
7170                      ,p_amb_context_code           => p_amb_context_code
7171                      ,p_event_class_code           => p_event_class_code
7172                      ,p_event_type_code            => p_event_type_code
7173                      ,p_line_definition_owner_code => p_line_definition_owner_code
7174                      ,p_line_definition_code       => p_line_definition_code)
7175               AND l_return;
7176 
7177   l_return := chk_mpa_jlt_is_enabled
7178                      (p_application_id             => p_application_id
7179                      ,p_amb_context_code           => p_amb_context_code
7180                      ,p_event_class_code           => p_event_class_code
7181                      ,p_event_type_code            => p_event_type_code
7182                      ,p_line_definition_owner_code => p_line_definition_owner_code
7183                      ,p_line_definition_code       => p_line_definition_code)
7184               AND l_return;
7185 
7186   l_return := chk_mpa_jlt_acct_class_exist
7187                      (p_application_id             => p_application_id
7188                      ,p_amb_context_code           => p_amb_context_code
7189                      ,p_event_class_code           => p_event_class_code
7190                      ,p_event_type_code            => p_event_type_code
7191                      ,p_line_definition_owner_code => p_line_definition_owner_code
7192                      ,p_line_definition_code       => p_line_definition_code)
7193               AND l_return;
7194 
7195   l_return := chk_mpa_jlt_inv_source_in_cond
7196                      (p_application_id             => p_application_id
7197                      ,p_amb_context_code           => p_amb_context_code
7198                      ,p_event_class_code           => p_event_class_code
7199                      ,p_event_type_code            => p_event_type_code
7200                      ,p_line_definition_owner_code => p_line_definition_owner_code
7201                      ,p_line_definition_code       => p_line_definition_code)
7202               AND l_return;
7203 
7204   l_return := chk_mpa_jlt_acct_src_assigned
7205                      (p_application_id             => p_application_id
7206                      ,p_amb_context_code           => p_amb_context_code
7207                      ,p_event_class_code           => p_event_class_code
7208                      ,p_event_type_code            => p_event_type_code
7209                      ,p_line_definition_owner_code => p_line_definition_owner_code
7210                      ,p_line_definition_code       => p_line_definition_code)
7211               AND l_return;
7212 
7213   l_return := chk_mpa_jlt_inv_acct_group_src
7214                      (p_application_id             => p_application_id
7215                      ,p_amb_context_code           => p_amb_context_code
7216                      ,p_event_class_code           => p_event_class_code
7217                      ,p_event_type_code            => p_event_type_code
7218                      ,p_line_definition_owner_code => p_line_definition_owner_code
7219                      ,p_line_definition_code       => p_line_definition_code)
7220               AND l_return;
7221 
7222   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7223     trace(p_msg    => 'END of procedure validate_mpa_jlt_assgns'
7224          ,p_module => l_log_module
7225          ,p_level  => C_LEVEL_PROCEDURE);
7226   END IF;
7227 
7228   RETURN l_return;
7229 
7230 EXCEPTION
7231   WHEN xla_exceptions_pkg.application_exception THEN
7232     RAISE;
7233   WHEN OTHERS                                   THEN
7234     xla_exceptions_pkg.raise_message
7235       (p_location   => 'xla_line_definitions_pvt.validate_mpa_jlt_assgns');
7236 END validate_mpa_jlt_assgns;
7237 
7238 --=============================================================================
7239 --
7240 -- Name: chk_mpa_line_desc_is_enabled
7241 -- Description: Check if all line description of the line definition are enabled
7242 --
7243 --=============================================================================
7244 FUNCTION chk_mpa_line_desc_is_enabled
7245   (p_application_id                   IN NUMBER
7246   ,p_amb_context_code                 IN VARCHAR2
7247   ,p_event_class_code                 IN VARCHAR2
7248   ,p_event_type_code                  IN VARCHAR2
7249   ,p_line_definition_owner_code       IN VARCHAR2
7250   ,p_line_definition_code             IN VARCHAR2)
7251 RETURN BOOLEAN
7252 IS
7253   CURSOR c_invalid_line_desc IS
7254    SELECT distinct xdb.description_type_code, xdb.description_code
7255      FROM xla_mpa_jlt_assgns       mjl
7256          ,xla_line_defn_jlt_assgns xjl
7257          ,xla_descriptions_b       xdb
7258     WHERE xjl.application_id             = p_application_id
7259       AND xjl.amb_context_code           = p_amb_context_code
7260       AND xjl.event_class_code           = p_event_class_code
7261       AND xjl.event_type_code            = p_event_type_code
7262       AND xjl.line_definition_owner_code = p_line_definition_owner_code
7263       AND xjl.line_definition_code       = p_line_definition_code
7264       AND xjl.active_flag                = 'Y'
7265       AND xjl.application_id             = mjl.application_id
7266       AND xjl.amb_context_code           = mjl.amb_context_code
7267       AND xjl.event_class_code           = mjl.event_class_code
7268       AND xjl.event_type_code            = mjl.event_type_code
7269       AND xjl.line_definition_owner_code = mjl.line_definition_owner_code
7270       AND xjl.line_definition_code       = mjl.line_definition_code
7271       AND xjl.accounting_line_type_code  = mjl.accounting_line_type_code
7272       AND xjl.accounting_line_code       = mjl.accounting_line_code
7273       AND mjl.description_type_code      IS NOT NULL
7274       AND xdb.application_id             = mjl.application_id
7275       AND xdb.amb_context_code           = mjl.amb_context_code
7276       AND xdb.description_type_code      = mjl.description_type_code
7277       AND xdb.description_code           = mjl.description_code
7278       AND xdb.enabled_flag               <> 'Y';
7279 
7280   l_return      BOOLEAN;
7281   l_log_module  VARCHAR2(240);
7282 BEGIN
7283   IF g_log_enabled THEN
7284     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_line_desc_is_enabled';
7285   END IF;
7286 
7287   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7288     trace(p_msg    => 'BEGIN of procedure chk_mpa_line_desc_is_enabled'
7289          ,p_module => l_log_module
7290          ,p_level  => C_LEVEL_PROCEDURE);
7291   END IF;
7292 
7293   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7294     trace(p_msg    => 'application_id = '||p_application_id||
7295                       ',amb_context_code = '||p_amb_context_code||
7296                       ',event_class_code = '||p_event_class_code||
7297                       ',event_type_code = '||p_event_type_code||
7298                       ',line_definition_owner_code = '||p_line_definition_owner_code||
7299                       ',line_definition_code = '||p_line_definition_code
7300          ,p_module => l_log_module
7301          ,p_level  => C_LEVEL_STATEMENT);
7302   END IF;
7303 
7304   l_return := TRUE;
7305 
7306   FOR l_err IN c_invalid_line_desc LOOP
7307     l_return := FALSE;
7308 
7309     xla_amb_setup_err_pkg.stack_error
7310               (p_message_name               => 'XLA_AB_MPA_DISABLD_LN_DESC'
7311               ,p_message_type               => 'E'
7312               ,p_message_category           => 'MPA_LINE_DESC'
7313               ,p_category_sequence          => 19
7314               ,p_application_id             => p_application_id
7315               ,p_amb_context_code           => p_amb_context_code
7316               ,p_event_class_code           => p_event_class_code
7317               ,p_event_type_code            => p_event_type_code
7318               ,p_line_definition_owner_code => p_line_definition_owner_code
7319               ,p_line_definition_code       => p_line_definition_code
7320               ,p_description_type_code      => l_err.description_type_code
7321               ,p_description_code           => l_err.description_code);
7322   END LOOP;
7323 
7324   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7325     trace(p_msg    => 'END of procedure chk_mpa_line_desc_is_enabled'
7326          ,p_module => l_log_module
7327          ,p_level  => C_LEVEL_PROCEDURE);
7328   END IF;
7329 
7330   RETURN l_return;
7331 
7332 EXCEPTION
7333   WHEN xla_exceptions_pkg.application_exception THEN
7334     IF (c_invalid_line_desc%ISOPEN) THEN
7335       CLOSE c_invalid_line_desc;
7336     END IF;
7337     RAISE;
7338 
7339   WHEN OTHERS                                   THEN
7340     IF (c_invalid_line_desc%ISOPEN) THEN
7341       CLOSE c_invalid_line_desc;
7342     END IF;
7343     xla_exceptions_pkg.raise_message
7344       (p_location   => 'xla_line_definitions_pvt.chk_mpa_line_desc_is_enabled');
7345 
7346 END chk_mpa_line_desc_is_enabled;
7347 
7348 --=============================================================================
7349 --
7350 -- Name: chk_mpa_line_desc_inv_src_cond
7351 -- Description: Check if all sources used in the JLT condition is valid
7352 --
7353 --=============================================================================
7354 FUNCTION chk_mpa_line_desc_inv_src_cond
7355   (p_application_id                   IN NUMBER
7356   ,p_amb_context_code                 IN VARCHAR2
7357   ,p_event_class_code                 IN VARCHAR2
7358   ,p_event_type_code                  IN VARCHAR2
7359   ,p_line_definition_owner_code       IN VARCHAR2
7360   ,p_line_definition_code             IN VARCHAR2)
7361 RETURN BOOLEAN
7362 IS
7363   --
7364   -- Get all JLT that have sources that do not belong to the event class of the
7365   -- line definition
7366   --
7367   CURSOR c_invalid_sources IS
7368    SELECT distinct xjl.description_type_code, xjl.description_code,
7369           xco.source_type_code source_type_code, xco.source_code source_code
7370      FROM xla_conditions           xco
7371          ,xla_desc_priorities      xdp
7372          ,xla_mpa_jlt_assgns       mjl
7373          ,xla_line_defn_jlt_assgns xjl
7374     WHERE xco.description_prio_id        = xdp.description_prio_id
7375       AND xdp.application_id             = mjl.application_id
7376       AND xdp.amb_context_code           = mjl.amb_context_code
7377       AND xdp.description_type_code      = mjl.description_type_code
7378       AND xdp.description_code           = mjl.description_code
7379       AND xjl.application_id             = p_application_id
7380       AND xjl.amb_context_code           = p_amb_context_code
7381       AND xjl.event_class_code           = p_event_class_code
7382       AND xjl.event_type_code            = p_event_type_code
7383       AND xjl.line_definition_owner_code = p_line_definition_owner_code
7384       AND xjl.line_definition_code       = p_line_definition_code
7385       AND xjl.active_flag                = 'Y'
7386       AND xjl.application_id             = mjl.application_id
7387       AND xjl.amb_context_code           = mjl.amb_context_code
7388       AND xjl.event_class_code           = mjl.event_class_code
7389       AND xjl.event_type_code            = mjl.event_type_code
7390       AND xjl.line_definition_owner_code = mjl.line_definition_owner_code
7391       AND xjl.line_definition_code       = mjl.line_definition_code
7392       AND xjl.accounting_line_type_code  = mjl.accounting_line_type_code
7393       AND xjl.accounting_line_code       = mjl.accounting_line_code
7394       AND mjl.description_code           IS NOT NULL
7395       AND xco.source_type_code           = 'S'
7396       AND NOT EXISTS
7397           (SELECT 'y'
7398              FROM xla_event_sources xes
7399             WHERE xes.source_application_id = xco.source_application_id
7400               AND xes.source_type_code      = xco.source_type_code
7401               AND xes.source_code           = xco.source_code
7402               AND xes.application_id        = mjl.application_id
7403               AND xes.event_class_code      = mjl.event_class_code
7404               AND xes.active_flag           = 'Y')
7405    UNION
7406    SELECT distinct xjl.description_type_code, xjl.description_code,
7407           xco.value_source_type_code source_type_code, xco.value_source_code source_code
7408      FROM xla_conditions           xco
7409          ,xla_desc_priorities      xdp
7410          ,xla_line_defn_jlt_assgns xjl
7411          ,xla_mpa_jlt_assgns       mjl
7412     WHERE xco.description_prio_id        = xdp.description_prio_id
7413       AND xdp.application_id             = mjl.application_id
7414       AND xdp.amb_context_code           = mjl.amb_context_code
7415       AND xdp.description_type_code      = mjl.description_type_code
7416       AND xdp.description_code           = mjl.description_code
7417       AND xjl.application_id             = p_application_id
7418       AND xjl.amb_context_code           = p_amb_context_code
7419       AND xjl.event_class_code           = p_event_class_code
7420       AND xjl.event_type_code            = p_event_type_code
7421       AND xjl.line_definition_owner_code = p_line_definition_owner_code
7422       AND xjl.line_definition_code       = p_line_definition_code
7423       AND xjl.active_flag                = 'Y'
7424       AND xco.value_source_type_code     = 'S'
7425       AND xjl.application_id             = mjl.application_id
7426       AND xjl.amb_context_code           = mjl.amb_context_code
7427       AND xjl.event_class_code           = mjl.event_class_code
7428       AND xjl.event_type_code            = mjl.event_type_code
7429       AND xjl.line_definition_owner_code = mjl.line_definition_owner_code
7430       AND xjl.line_definition_code       = mjl.line_definition_code
7431       AND xjl.accounting_line_type_code  = mjl.accounting_line_type_code
7432       AND xjl.accounting_line_code       = mjl.accounting_line_code
7433       AND mjl.description_code           IS NOT NULL
7434       AND NOT EXISTS
7435           (SELECT 'y'
7436              FROM xla_event_sources xes
7437             WHERE xes.source_application_id = xco.value_source_application_id
7438               AND xes.source_type_code      = xco.value_source_type_code
7439               AND xes.source_code           = xco.value_source_code
7440               AND xes.application_id        = mjl.application_id
7441               AND xes.event_class_code      = mjl.event_class_code
7442               AND xes.active_flag           = 'Y');
7443 
7444   CURSOR c_der_sources IS
7445    SELECT distinct xjl.description_type_code, xjl.description_code,
7446           xco.source_type_code source_type_code, xco.source_code source_code
7447      FROM xla_conditions           xco
7448          ,xla_desc_priorities      xdp
7449          ,xla_line_defn_jlt_assgns xjl
7450          ,xla_mpa_jlt_assgns       mjl
7451     WHERE xco.description_prio_id        = xdp.description_prio_id
7452       AND xdp.application_id             = mjl.application_id
7453       AND xdp.amb_context_code           = mjl.amb_context_code
7454       AND xdp.description_type_code      = mjl.description_type_code
7455       AND xdp.description_code           = mjl.description_code
7456       AND xjl.application_id             = p_application_id
7457       AND xjl.amb_context_code           = p_amb_context_code
7458       AND xjl.event_class_code           = p_event_class_code
7459       AND xjl.event_type_code            = p_event_type_code
7460       AND xjl.line_definition_owner_code = p_line_definition_owner_code
7461       AND xjl.line_definition_code       = p_line_definition_code
7462       AND xjl.active_flag                = 'Y'
7463       AND xco.source_type_code           = 'D'
7464       AND xjl.application_id             = mjl.application_id
7465       AND xjl.amb_context_code           = mjl.amb_context_code
7466       AND xjl.event_class_code           = mjl.event_class_code
7467       AND xjl.event_type_code            = mjl.event_type_code
7468       AND xjl.line_definition_owner_code = mjl.line_definition_owner_code
7469       AND xjl.line_definition_code       = mjl.line_definition_code
7470       AND xjl.accounting_line_type_code  = mjl.accounting_line_type_code
7471       AND xjl.accounting_line_code       = mjl.accounting_line_code
7472       AND mjl.description_code           IS NOT NULL
7473    UNION
7474    SELECT distinct xjl.description_type_code, xjl.description_code,
7475           xco.value_source_type_code source_type_code, xco.value_source_code source_code
7476      FROM xla_conditions           xco
7477          ,xla_desc_priorities      xdp
7478          ,xla_line_defn_jlt_assgns xjl
7479          ,xla_mpa_jlt_assgns       mjl
7480     WHERE xco.description_prio_id        = xdp.description_prio_id
7481       AND xdp.application_id             = mjl.application_id
7482       AND xdp.amb_context_code           = mjl.amb_context_code
7483       AND xdp.description_type_code      = mjl.description_type_code
7484       AND xdp.description_code           = mjl.description_code
7485       AND xjl.application_id             = p_application_id
7486       AND xjl.amb_context_code           = p_amb_context_code
7487       AND xjl.event_class_code           = p_event_class_code
7488       AND xjl.event_type_code            = p_event_type_code
7489       AND xjl.line_definition_owner_code = p_line_definition_owner_code
7490       AND xjl.line_definition_code       = p_line_definition_code
7491       AND xjl.active_flag                = 'Y'
7492       AND xco.value_source_type_code     = 'D'
7493       AND xjl.application_id             = mjl.application_id
7494       AND xjl.amb_context_code           = mjl.amb_context_code
7495       AND xjl.event_class_code           = mjl.event_class_code
7496       AND xjl.event_type_code            = mjl.event_type_code
7497       AND xjl.line_definition_owner_code = mjl.line_definition_owner_code
7498       AND xjl.line_definition_code       = mjl.line_definition_code
7499       AND xjl.accounting_line_type_code  = mjl.accounting_line_type_code
7500       AND xjl.accounting_line_code       = mjl.accounting_line_code
7501       AND mjl.description_code           IS NOT NULL;
7502 
7503   l_return      BOOLEAN;
7504   l_log_module  VARCHAR2(240);
7505 BEGIN
7506   IF g_log_enabled THEN
7507     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_line_desc_inv_src_cond';
7508   END IF;
7509 
7510   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7511     trace(p_msg    => 'BEGIN of procedure chk_mpa_line_desc_inv_src_cond'
7512          ,p_module => l_log_module
7513          ,p_level  => C_LEVEL_PROCEDURE);
7514   END IF;
7515 
7516   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7517     trace(p_msg    => 'application_id = '||p_application_id||
7518                       ',amb_context_code = '||p_amb_context_code||
7519                       ',event_class_code = '||p_event_class_code||
7520                       ',event_type_code = '||p_event_type_code||
7521                       ',line_definition_owner_code = '||p_line_definition_owner_code||
7522                       ',line_definition_code = '||p_line_definition_code
7523          ,p_module => l_log_module
7524          ,p_level  => C_LEVEL_STATEMENT);
7525   END IF;
7526 
7527   l_return := TRUE;
7528 
7529   --
7530   -- Check if the condition of any JLT have seeded sources that are not assigned
7531   -- to the event class of the line definition
7532   --
7533   FOR l_err IN c_invalid_sources LOOP
7534     l_return := FALSE;
7535 
7536     xla_amb_setup_err_pkg.stack_error
7537               (p_message_name               => 'XLA_AB_MPA_LN_DES_CON_SRC'
7538               ,p_message_type               => 'E'
7539               ,p_message_category           => 'MPA_LINE_DESC'
7540               ,p_category_sequence          => 19
7541               ,p_application_id             => p_application_id
7542               ,p_amb_context_code           => p_amb_context_code
7543               ,p_line_definition_owner_code => p_line_definition_owner_code
7544               ,p_line_definition_code       => p_line_definition_code
7545               ,p_event_class_code           => p_event_class_code
7546               ,p_event_type_code            => p_event_type_code
7547               ,p_description_type_code      => l_err.description_type_code
7548               ,p_description_code           => l_err.description_code
7549               ,p_source_type_code           => l_err.source_type_code
7550               ,p_source_code                => l_err.source_code);
7551   END LOOP;
7552 
7553   FOR l_err IN c_der_sources LOOP
7554     IF xla_sources_pkg.derived_source_is_invalid
7555               (p_application_id           => p_application_id
7556               ,p_derived_source_code      => l_err.source_code
7557               ,p_derived_source_type_code => 'D'
7558               ,p_event_class_code         => p_event_class_code
7559               ,p_level                    => 'L') = 'TRUE' THEN
7560 
7561       l_return := FALSE;
7562 
7563       xla_amb_setup_err_pkg.stack_error
7564               (p_message_name               => 'XLA_AB_MPA_LN_DES_CON_SRC'
7565               ,p_message_type               => 'E'
7566               ,p_message_category           => 'MPA_LINE_DESC'
7567               ,p_category_sequence          => 19
7568               ,p_application_id             => p_application_id
7569               ,p_amb_context_code           => p_amb_context_code
7570               ,p_line_definition_owner_code => p_line_definition_owner_code
7571               ,p_line_definition_code       => p_line_definition_code
7572               ,p_event_class_code           => p_event_class_code
7573               ,p_event_type_code            => p_event_type_code
7574               ,p_description_type_code      => l_err.description_type_code
7575               ,p_description_code           => l_err.description_code
7576               ,p_source_type_code           => l_err.source_type_code
7577               ,p_source_code                => l_err.source_code);
7578 
7579     END IF;
7580   END LOOP;
7581 
7582   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7583     trace(p_msg    => 'END of procedure chk_mpa_line_desc_inv_src_cond'
7584          ,p_module => l_log_module
7585          ,p_level  => C_LEVEL_PROCEDURE);
7586   END IF;
7587 
7588   RETURN l_return;
7589 
7590 EXCEPTION
7591   WHEN xla_exceptions_pkg.application_exception THEN
7592     IF (c_invalid_sources%ISOPEN) THEN
7593       CLOSE c_invalid_sources;
7594     END IF;
7595     IF (c_der_sources%ISOPEN) THEN
7596       CLOSE c_der_sources;
7597     END IF;
7598     RAISE;
7599 
7600   WHEN OTHERS                                   THEN
7601     IF (c_invalid_sources%ISOPEN) THEN
7602       CLOSE c_invalid_sources;
7603     END IF;
7604     IF (c_der_sources%ISOPEN) THEN
7605       CLOSE c_der_sources;
7606     END IF;
7607     xla_exceptions_pkg.raise_message
7608       (p_location   => 'xla_line_definitions_pvt.chk_mpa_line_desc_inv_src_cond');
7609 
7610 END chk_mpa_line_desc_inv_src_cond;
7611 
7612 --=============================================================================
7613 --
7614 -- Name: chk_mpa_line_desc_inv_src_dtl
7615 -- Description: Check if all sources used in the JLT condition is valid
7616 --
7617 --=============================================================================
7618 FUNCTION chk_mpa_line_desc_inv_src_dtl
7619   (p_application_id                   IN NUMBER
7620   ,p_amb_context_code                 IN VARCHAR2
7621   ,p_event_class_code                 IN VARCHAR2
7622   ,p_event_type_code                  IN VARCHAR2
7623   ,p_line_definition_owner_code       IN VARCHAR2
7624   ,p_line_definition_code             IN VARCHAR2)
7625 RETURN BOOLEAN
7626 IS
7627   --
7628   -- Get all JLT that have sources that do not belong to the event class of the
7629   -- line definition
7630   --
7631   CURSOR c_invalid_sources IS
7632    SELECT distinct xjl.description_type_code, xjl.description_code,
7633           xdd.source_type_code, xdd.source_code
7634      FROM xla_descript_details_b   xdd
7635          ,xla_desc_priorities      xdp
7636          ,xla_line_defn_jlt_assgns xjl
7637          ,xla_mpa_jlt_assgns       mjl
7638     WHERE xdd.description_prio_id        = xdp.description_prio_id
7639       AND xdp.application_id             = mjl.application_id
7640       AND xdp.amb_context_code           = mjl.amb_context_code
7641       AND xdp.description_type_code      = mjl.description_type_code
7642       AND xdp.description_code           = mjl.description_code
7643       AND xjl.application_id             = p_application_id
7644       AND xjl.amb_context_code           = p_amb_context_code
7645       AND xjl.event_class_code           = p_event_class_code
7646       AND xjl.event_type_code            = p_event_type_code
7647       AND xjl.line_definition_owner_code = p_line_definition_owner_code
7648       AND xjl.line_definition_code       = p_line_definition_code
7649       AND xjl.active_flag                = 'Y'
7650       AND xdd.source_type_code           = 'S'
7651       AND xjl.application_id             = mjl.application_id
7652       AND xjl.amb_context_code           = mjl.amb_context_code
7653       AND xjl.event_class_code           = mjl.event_class_code
7654       AND xjl.event_type_code            = mjl.event_type_code
7655       AND xjl.line_definition_owner_code = mjl.line_definition_owner_code
7656       AND xjl.line_definition_code       = mjl.line_definition_code
7657       AND xjl.accounting_line_type_code  = mjl.accounting_line_type_code
7658       AND xjl.accounting_line_code       = mjl.accounting_line_code
7659       AND mjl.description_code           IS NOT NULL
7660       AND NOT EXISTS
7661           (SELECT 'y'
7662              FROM xla_event_sources xes
7663             WHERE xes.source_application_id = xdd.source_application_id
7664               AND xes.source_type_code      = xdd.source_type_code
7665               AND xes.source_code           = xdd.source_code
7666               AND xes.application_id        = mjl.application_id
7667               AND xes.event_class_code      = mjl.event_class_code
7668               AND xes.active_flag           = 'Y');
7669 
7670   CURSOR c_der_sources IS
7671    SELECT distinct xjl.description_type_code, xjl.description_code,
7672           xdd.source_type_code, xdd.source_code
7673      FROM xla_descript_details_b   xdd
7674          ,xla_desc_priorities      xdp
7675          ,xla_line_defn_jlt_assgns xjl
7676          ,xla_mpa_jlt_assgns       mjl
7677     WHERE xdd.description_prio_id        = xdp.description_prio_id
7678       AND xdp.application_id             = mjl.application_id
7679       AND xdp.amb_context_code           = mjl.amb_context_code
7680       AND xdp.description_type_code      = mjl.description_type_code
7681       AND xdp.description_code           = mjl.description_code
7682       AND xjl.application_id             = p_application_id
7683       AND xjl.amb_context_code           = p_amb_context_code
7684       AND xjl.event_class_code           = p_event_class_code
7685       AND xjl.event_type_code            = p_event_type_code
7686       AND xjl.line_definition_owner_code = p_line_definition_owner_code
7687       AND xjl.line_definition_code       = p_line_definition_code
7688       AND xjl.active_flag                = 'Y'
7689       AND xdd.source_type_code           = 'D'
7690       AND xjl.application_id             = mjl.application_id
7691       AND xjl.amb_context_code           = mjl.amb_context_code
7692       AND xjl.event_class_code           = mjl.event_class_code
7693       AND xjl.event_type_code            = mjl.event_type_code
7694       AND xjl.line_definition_owner_code = mjl.line_definition_owner_code
7695       AND xjl.line_definition_code       = mjl.line_definition_code
7696       AND xjl.accounting_line_type_code  = mjl.accounting_line_type_code
7697       AND xjl.accounting_line_code       = mjl.accounting_line_code
7698       AND mjl.description_code           IS NOT NULL;
7699 
7700   l_return      BOOLEAN;
7701   l_log_module  VARCHAR2(240);
7702 BEGIN
7703   IF g_log_enabled THEN
7704     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_line_desc_inv_src_dtl';
7705   END IF;
7706 
7707   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7708     trace(p_msg    => 'BEGIN of procedure chk_mpa_line_desc_inv_src_dtl'
7709          ,p_module => l_log_module
7710          ,p_level  => C_LEVEL_PROCEDURE);
7711   END IF;
7712 
7713   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7714     trace(p_msg    => 'application_id = '||p_application_id||
7715                       ',amb_context_code = '||p_amb_context_code||
7716                       ',event_class_code = '||p_event_class_code||
7717                       ',event_type_code = '||p_event_type_code||
7718                       ',line_definition_owner_code = '||p_line_definition_owner_code||
7719                       ',line_definition_code = '||p_line_definition_code
7720          ,p_module => l_log_module
7721          ,p_level  => C_LEVEL_STATEMENT);
7722   END IF;
7723 
7724   l_return := TRUE;
7725 
7726   --
7727   -- Check if the condition of any JLT have seeded sources that are not assigned
7728   -- to the event class of the line definition
7729   --
7730   FOR l_err IN c_invalid_sources LOOP
7731     l_return := FALSE;
7732 
7733     xla_amb_setup_err_pkg.stack_error
7734               (p_message_name               => 'XLA_AB_MPA_LN_DES_DET_SRC'
7735               ,p_message_type               => 'E'
7736               ,p_message_category           => 'MPA_LINE_DESC'
7737               ,p_category_sequence          => 19
7738               ,p_application_id             => p_application_id
7739               ,p_amb_context_code           => p_amb_context_code
7740               ,p_line_definition_owner_code => p_line_definition_owner_code
7741               ,p_line_definition_code       => p_line_definition_code
7742               ,p_event_class_code           => p_event_class_code
7743               ,p_event_type_code            => p_event_type_code
7744               ,p_description_type_code      => l_err.description_type_code
7745               ,p_description_code           => l_err.description_code
7746               ,p_source_type_code           => l_err.source_type_code
7747               ,p_source_code                => l_err.source_code);
7748   END LOOP;
7749 
7750   FOR l_err IN c_der_sources LOOP
7751     IF xla_sources_pkg.derived_source_is_invalid
7752               (p_application_id           => p_application_id
7753               ,p_derived_source_code      => l_err.source_code
7754               ,p_derived_source_type_code => 'D'
7755               ,p_event_class_code         => p_event_class_code
7756               ,p_level                    => 'L')  = 'TRUE' THEN
7757 
7758       l_return := FALSE;
7759 
7760       xla_amb_setup_err_pkg.stack_error
7761               (p_message_name               => 'XLA_AB_MPA_LN_DES_DET_SRC'
7762               ,p_message_type               => 'E'
7763               ,p_message_category           => 'MPA_LINE_DESC'
7764               ,p_category_sequence          => 19
7765               ,p_application_id             => p_application_id
7766               ,p_amb_context_code           => p_amb_context_code
7767               ,p_line_definition_owner_code => p_line_definition_owner_code
7768               ,p_line_definition_code       => p_line_definition_code
7769               ,p_event_class_code           => p_event_class_code
7770               ,p_event_type_code            => p_event_type_code
7771               ,p_description_type_code      => l_err.description_type_code
7772               ,p_description_code           => l_err.description_code
7773               ,p_source_type_code           => l_err.source_type_code
7774               ,p_source_code                => l_err.source_code);
7775     END IF;
7776   END LOOP;
7777 
7778   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7779     trace(p_msg    => 'END of procedure chk_mpa_line_desc_inv_src_dtl'
7780          ,p_module => l_log_module
7781          ,p_level  => C_LEVEL_PROCEDURE);
7782   END IF;
7783 
7784   RETURN l_return;
7785 
7786 EXCEPTION
7787   WHEN xla_exceptions_pkg.application_exception THEN
7788     IF (c_invalid_sources%ISOPEN) THEN
7789       CLOSE c_invalid_sources;
7790     END IF;
7791     IF (c_der_sources%ISOPEN) THEN
7792       CLOSE c_der_sources;
7793     END IF;
7794     RAISE;
7795 
7796   WHEN OTHERS                                   THEN
7797     IF (c_invalid_sources%ISOPEN) THEN
7798       CLOSE c_invalid_sources;
7799     END IF;
7800     IF (c_der_sources%ISOPEN) THEN
7801       CLOSE c_der_sources;
7802     END IF;
7803     xla_exceptions_pkg.raise_message
7804       (p_location   => 'xla_line_definitions_pvt.chk_mpa_line_desc_inv_src_dtl');
7805 
7806 END chk_mpa_line_desc_inv_src_dtl;
7807 
7808 --=============================================================================
7809 --
7810 -- Name: validate_mpa_line_desc
7811 -- Description: Validate MPA line desc assignment of the line definition
7812 --
7813 --=============================================================================
7814 FUNCTION validate_mpa_line_desc
7815   (p_application_id                   IN NUMBER
7816   ,p_amb_context_code                 IN VARCHAR2
7817   ,p_event_class_code                 IN VARCHAR2
7818   ,p_event_type_code                  IN VARCHAR2
7819   ,p_line_definition_owner_code       IN VARCHAR2
7820   ,p_line_definition_code             IN VARCHAR2)
7821 RETURN BOOLEAN
7822 IS
7823   l_return      BOOLEAN;
7824   l_log_module  VARCHAR2(240);
7825 BEGIN
7826   IF g_log_enabled THEN
7827     l_log_module := C_DEFAULT_MODULE||'.validate_mpa_line_desc';
7828   END IF;
7829 
7830   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7831     trace(p_msg    => 'BEGIN of procedure validate_mpa_line_desc'
7832          ,p_module => l_log_module
7833          ,p_level  => C_LEVEL_PROCEDURE);
7834   END IF;
7835 
7836   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7837     trace(p_msg    => 'application_id = '||p_application_id||
7838                       ',amb_context_code = '||p_amb_context_code||
7839                       ',event_class_code = '||p_event_class_code||
7840                       ',event_type_code = '||p_event_type_code||
7841                       ',line_definition_owner_code = '||p_line_definition_owner_code||
7842                       ',line_definition_code = '||p_line_definition_code
7843          ,p_module => l_log_module
7844          ,p_level  => C_LEVEL_STATEMENT);
7845   END IF;
7846 
7847   l_return := TRUE;
7848 
7849   l_return := chk_mpa_line_desc_is_enabled
7850                      (p_application_id             => p_application_id
7851                      ,p_amb_context_code           => p_amb_context_code
7852                      ,p_event_class_code           => p_event_class_code
7853                      ,p_event_type_code            => p_event_type_code
7854                      ,p_line_definition_owner_code => p_line_definition_owner_code
7855                      ,p_line_definition_code       => p_line_definition_code)
7856               AND l_return;
7857 
7858   l_return := chk_mpa_line_desc_inv_src_cond
7859                      (p_application_id             => p_application_id
7860                      ,p_amb_context_code           => p_amb_context_code
7861                      ,p_event_class_code           => p_event_class_code
7862                      ,p_event_type_code            => p_event_type_code
7863                      ,p_line_definition_owner_code => p_line_definition_owner_code
7864                      ,p_line_definition_code       => p_line_definition_code)
7865               AND l_return;
7866 
7867   l_return := chk_mpa_line_desc_inv_src_dtl
7868                      (p_application_id             => p_application_id
7869                      ,p_amb_context_code           => p_amb_context_code
7870                      ,p_event_class_code           => p_event_class_code
7871                      ,p_event_type_code            => p_event_type_code
7872                      ,p_line_definition_owner_code => p_line_definition_owner_code
7873                      ,p_line_definition_code       => p_line_definition_code)
7874               AND l_return;
7875 
7876   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7877     trace(p_msg    => 'END of procedure validate_mpa_line_desc'
7878          ,p_module => l_log_module
7879          ,p_level  => C_LEVEL_PROCEDURE);
7880   END IF;
7881 
7882   RETURN l_return;
7883 
7884 EXCEPTION
7885   WHEN xla_exceptions_pkg.application_exception THEN
7886     RAISE;
7887   WHEN OTHERS                                   THEN
7888     xla_exceptions_pkg.raise_message
7889       (p_location   => 'xla_line_definitions_pvt.validate_mpa_line_desc');
7890 END validate_mpa_line_desc;
7891 
7892 
7893 --=============================================================================
7894 --
7895 -- Name: chk_mpa_line_ac_is_enabled
7896 -- Description: Check if all line analytical criteria of the line definition
7897 --              are enabled
7898 --
7899 --=============================================================================
7900 FUNCTION chk_mpa_line_ac_is_enabled
7901   (p_application_id                   IN NUMBER
7902   ,p_amb_context_code                 IN VARCHAR2
7903   ,p_event_class_code                 IN VARCHAR2
7904   ,p_event_type_code                  IN VARCHAR2
7905   ,p_line_definition_owner_code       IN VARCHAR2
7906   ,p_line_definition_code             IN VARCHAR2)
7907 RETURN BOOLEAN
7908 IS
7909   CURSOR c_invalid_line_ac IS
7910    SELECT distinct xah.analytical_criterion_type_code, xah.analytical_criterion_code
7911      FROM xla_mpa_jlt_ac_assgns  xac
7912          ,xla_line_defn_jlt_assgns xjl
7913          ,xla_analytical_hdrs_b    xah
7914     WHERE xah.amb_context_code               = xac.amb_context_code
7915       AND xah.analytical_criterion_code      = xac.analytical_criterion_code
7916       AND xah.analytical_criterion_type_code = xac.analytical_criterion_type_code
7917       AND xah.enabled_flag                   <> 'Y'
7918       AND xac.application_id                 = xjl.application_id
7919       AND xac.amb_context_code               = xjl.amb_context_code
7920       AND xac.event_class_code               = xjl.event_class_code
7921       AND xac.event_type_code                = xjl.event_type_code
7922       AND xac.line_definition_code           = xjl.line_definition_code
7923       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
7924       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
7925       AND xac.accounting_line_code           = xjl.accounting_line_code
7926       AND xjl.application_id                 = p_application_id
7927       AND xjl.amb_context_code               = p_amb_context_code
7928       AND xjl.event_class_code               = p_event_class_code
7929       AND xjl.event_type_code                = p_event_type_code
7930       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
7931       AND xjl.line_definition_code           = p_line_definition_code
7932       AND xjl.active_flag                    = 'Y';
7933 
7934   l_return      BOOLEAN;
7935   l_log_module  VARCHAR2(240);
7936 BEGIN
7937   IF g_log_enabled THEN
7938     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_line_ac_is_enabled';
7939   END IF;
7940 
7941   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7942     trace(p_msg    => 'BEGIN of procedure chk_mpa_line_ac_is_enabled'
7943          ,p_module => l_log_module
7944          ,p_level  => C_LEVEL_PROCEDURE);
7945   END IF;
7946 
7947   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7948     trace(p_msg    => 'application_id = '||p_application_id||
7949                       ',amb_context_code = '||p_amb_context_code||
7950                       ',event_class_code = '||p_event_class_code||
7951                       ',event_type_code = '||p_event_type_code||
7952                       ',line_definition_owner_code = '||p_line_definition_owner_code||
7953                       ',line_definition_code = '||p_line_definition_code
7954          ,p_module => l_log_module
7955          ,p_level  => C_LEVEL_STATEMENT);
7956   END IF;
7957 
7958   l_return := TRUE;
7959 
7960   FOR l_err IN c_invalid_line_ac LOOP
7961     l_return := FALSE;
7962 
7963     xla_amb_setup_err_pkg.stack_error
7964               (p_message_name               => 'XLA_AB_MPA_DISABLD_LN_AC'
7965               ,p_message_type               => 'E'
7966               ,p_message_category           => 'MPA_LINE_AC'
7967               ,p_category_sequence          => 20
7968               ,p_application_id             => p_application_id
7969               ,p_amb_context_code           => p_amb_context_code
7970               ,p_event_class_code           => p_event_class_code
7971               ,p_event_type_code            => p_event_type_code
7972               ,p_line_definition_owner_code => p_line_definition_owner_code
7973               ,p_line_definition_code       => p_line_definition_code
7974               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
7975               ,p_anal_criterion_code        => l_err.analytical_criterion_code);
7976   END LOOP;
7977 
7978   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7979     trace(p_msg    => 'END of procedure chk_mpa_line_ac_is_enabled'
7980          ,p_module => l_log_module
7981          ,p_level  => C_LEVEL_PROCEDURE);
7982   END IF;
7983 
7984   RETURN l_return;
7985 
7986 EXCEPTION
7987   WHEN xla_exceptions_pkg.application_exception THEN
7988     IF (c_invalid_line_ac%ISOPEN) THEN
7989       CLOSE c_invalid_line_ac;
7990     END IF;
7991     RAISE;
7992 
7993   WHEN OTHERS                                   THEN
7994     IF (c_invalid_line_ac%ISOPEN) THEN
7995       CLOSE c_invalid_line_ac;
7996     END IF;
7997     xla_exceptions_pkg.raise_message
7998       (p_location   => 'xla_line_definitions_pvt.chk_mpa_line_ac_is_enabled');
7999 
8000 END chk_mpa_line_ac_is_enabled;
8001 
8002 --=============================================================================
8003 --
8004 -- Name: chk_mpa_ac_has_details
8005 -- Description:
8006 --
8007 --=============================================================================
8008 FUNCTION chk_mpa_ac_has_details
8009   (p_application_id                   IN NUMBER
8010   ,p_amb_context_code                 IN VARCHAR2
8011   ,p_event_class_code                 IN VARCHAR2
8012   ,p_event_type_code                  IN VARCHAR2
8013   ,p_line_definition_owner_code       IN VARCHAR2
8014   ,p_line_definition_code             IN VARCHAR2)
8015 RETURN BOOLEAN
8016 IS
8017   CURSOR c_invalid_ac IS
8018    SELECT distinct xac.analytical_criterion_type_code, xac.analytical_criterion_code
8019      FROM xla_mpa_jlt_ac_assgns  xac
8020          ,xla_line_defn_jlt_assgns xjl
8021     WHERE xac.application_id                 = xjl.application_id
8022       AND xac.amb_context_code               = xjl.amb_context_code
8023       AND xac.event_class_code               = xjl.event_class_code
8024       AND xac.event_type_code                = xjl.event_type_code
8025       AND xac.line_definition_code           = xjl.line_definition_code
8026       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
8027       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
8028       AND xac.accounting_line_code           = xjl.accounting_line_code
8029       AND xjl.application_id                 = p_application_id
8030       AND xjl.amb_context_code               = p_amb_context_code
8031       AND xjl.event_class_code               = p_event_class_code
8032       AND xjl.event_type_code                = p_event_type_code
8033       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
8034       AND xjl.line_definition_code           = p_line_definition_code
8035       AND xjl.active_flag                    = 'Y'
8036       AND NOT EXISTS
8037           (SELECT 'x'
8038              FROM xla_analytical_sources  xas
8039             WHERE xas.application_id                 = xac.application_id
8040               AND xas.amb_context_code               = xac.amb_context_code
8041               AND xas.event_class_code               = xac.event_class_code
8042               AND xas.analytical_criterion_code      = xac.analytical_criterion_code
8043               AND xas.analytical_criterion_type_code = xac.analytical_criterion_type_code);
8044 
8045   l_return      BOOLEAN;
8046   l_log_module  VARCHAR2(240);
8047 BEGIN
8048   IF g_log_enabled THEN
8049     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_ac_has_details';
8050   END IF;
8051 
8052   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8053     trace(p_msg    => 'BEGIN of procedure chk_mpa_ac_has_details'
8054          ,p_module => l_log_module
8055          ,p_level  => C_LEVEL_PROCEDURE);
8056   END IF;
8057 
8058   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8059     trace(p_msg    => 'application_id = '||p_application_id||
8060                       ',amb_context_code = '||p_amb_context_code||
8061                       ',event_class_code = '||p_event_class_code||
8062                       ',event_type_code = '||p_event_type_code||
8063                       ',line_definition_owner_code = '||p_line_definition_owner_code||
8064                       ',line_definition_code = '||p_line_definition_code
8065          ,p_module => l_log_module
8066          ,p_level  => C_LEVEL_STATEMENT);
8067   END IF;
8068 
8069   l_return := TRUE;
8070 
8071   FOR l_err IN c_invalid_ac LOOP
8072     l_return := FALSE;
8073 
8074     xla_amb_setup_err_pkg.stack_error
8075               (p_message_name               => 'XLA_AB_MPA_LN_ANC_NO_DETAIL'
8076               ,p_message_type               => 'E'
8077               ,p_message_category           => 'MPA_LINE_AC'
8078               ,p_category_sequence          => 20
8079               ,p_application_id             => p_application_id
8080               ,p_amb_context_code           => p_amb_context_code
8081               ,p_event_class_code           => p_event_class_code
8082               ,p_event_type_code            => p_event_type_code
8083               ,p_line_definition_owner_code => p_line_definition_owner_code
8084               ,p_line_definition_code       => p_line_definition_code
8085               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
8086               ,p_anal_criterion_code        => l_err.analytical_criterion_code);
8087   END LOOP;
8088 
8089   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8090     trace(p_msg    => 'END of procedure chk_mpa_ac_has_details'
8091          ,p_module => l_log_module
8092          ,p_level  => C_LEVEL_PROCEDURE);
8093   END IF;
8094 
8095   RETURN l_return;
8096 
8097 EXCEPTION
8098   WHEN xla_exceptions_pkg.application_exception THEN
8099     IF (c_invalid_ac%ISOPEN) THEN
8100       CLOSE c_invalid_ac;
8101     END IF;
8102     RAISE;
8103 
8104   WHEN OTHERS                                   THEN
8105     IF (c_invalid_ac%ISOPEN) THEN
8106       CLOSE c_invalid_ac;
8107     END IF;
8108     xla_exceptions_pkg.raise_message
8109       (p_location   => 'xla_line_definitions_pvt.chk_mpa_ac_has_details');
8110 
8111 END chk_mpa_ac_has_details;
8112 
8113 --=============================================================================
8114 --
8115 -- Name: chk_mpa_ac_invalid_sources
8116 -- Description:
8117 --
8118 --=============================================================================
8119 FUNCTION chk_mpa_ac_invalid_sources
8120   (p_application_id                   IN NUMBER
8121   ,p_amb_context_code                 IN VARCHAR2
8122   ,p_event_class_code                 IN VARCHAR2
8123   ,p_event_type_code                  IN VARCHAR2
8124   ,p_line_definition_owner_code       IN VARCHAR2
8125   ,p_line_definition_code             IN VARCHAR2)
8126 RETURN BOOLEAN
8127 IS
8128   CURSOR c_invalid_sources IS
8129    SELECT distinct  xas.analytical_criterion_type_code, xas.analytical_criterion_code,
8130           xas.source_code, xas.source_type_code
8131      FROM xla_analytical_sources   xas
8132          ,xla_mpa_jlt_ac_assgns    xac
8133          ,xla_line_defn_jlt_assgns xjl
8134          ,xla_event_sources        xes
8135     WHERE xas.application_id                 = xac.application_id
8136       AND xas.amb_context_code               = xac.amb_context_code
8137       AND xas.event_class_code               = xac.event_class_code
8138       AND xas.analytical_criterion_code      = xac.analytical_criterion_code
8139       AND xas.analytical_criterion_type_code = xac.analytical_criterion_type_code
8140       AND xas.source_type_code               = 'S'
8141       AND xac.application_id                 = xjl.application_id
8142       AND xac.amb_context_code               = xjl.amb_context_code
8143       AND xac.event_class_code               = xjl.event_class_code
8144       AND xac.event_type_code                = xjl.event_type_code
8145       AND xac.line_definition_code           = xjl.line_definition_code
8146       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
8147       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
8148       AND xac.accounting_line_code           = xjl.accounting_line_code
8149       AND xjl.application_id                 = p_application_id
8150       AND xjl.amb_context_code               = p_amb_context_code
8151       AND xjl.event_class_code               = p_event_class_code
8152       AND xjl.event_type_code                = p_event_type_code
8153       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
8154       AND xjl.line_definition_code           = p_line_definition_code
8155       AND xjl.active_flag                    = 'Y'
8156       AND not exists (SELECT 'y'
8157                         FROM xla_event_sources xes
8158                        WHERE xes.source_application_id = xas.source_application_id
8159                          AND xes.source_type_code      = xas.source_type_code
8160                          AND xes.source_code           = xas.source_code
8161                          AND xes.application_id        = xas.application_id
8162                          AND xes.event_class_code      = xas.event_class_code
8163                          AND xes.active_flag           = 'Y');
8164 
8165   CURSOR c_der_sources IS
8166    SELECT distinct xas.analytical_criterion_type_code, xas.analytical_criterion_code,
8167           xas.source_code, xas.source_type_code
8168      FROM xla_analytical_sources   xas
8169          ,xla_mpa_jlt_ac_assgns    xac
8170          ,xla_line_defn_jlt_assgns xjl
8171     WHERE xas.application_id                 = xac.application_id
8172       AND xas.amb_context_code               = xac.amb_context_code
8173       AND xas.event_class_code               = xac.event_class_code
8174       AND xas.analytical_criterion_code      = xac.analytical_criterion_code
8175       AND xas.analytical_criterion_type_code = xac.analytical_criterion_type_code
8176       AND xas.source_type_code               = 'D'
8177       AND xac.application_id                 = xjl.application_id
8178       AND xac.amb_context_code               = xjl.amb_context_code
8179       AND xac.event_class_code               = xjl.event_class_code
8180       AND xac.event_type_code                = xjl.event_type_code
8181       AND xac.line_definition_code           = xjl.line_definition_code
8182       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
8183       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
8184       AND xac.accounting_line_code           = xjl.accounting_line_code
8185       AND xjl.application_id                 = p_application_id
8186       AND xjl.amb_context_code               = p_amb_context_code
8187       AND xjl.event_class_code               = p_event_class_code
8188       AND xjl.event_type_code                = p_event_type_code
8189       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
8190       AND xjl.line_definition_code           = p_line_definition_code
8191       AND xjl.active_flag                    = 'Y';
8192 
8193   l_return      BOOLEAN;
8194   l_log_module  VARCHAR2(240);
8195 BEGIN
8196   IF g_log_enabled THEN
8197     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_ac_invalid_sources';
8198   END IF;
8199 
8200   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8201     trace(p_msg    => 'BEGIN of procedure chk_mpa_ac_invalid_sources'
8202          ,p_module => l_log_module
8203          ,p_level  => C_LEVEL_PROCEDURE);
8204   END IF;
8205 
8206   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8207     trace(p_msg    => 'application_id = '||p_application_id||
8208                       ',amb_context_code = '||p_amb_context_code||
8209                       ',event_class_code = '||p_event_class_code||
8210                       ',event_type_code = '||p_event_type_code||
8211                       ',line_definition_owner_code = '||p_line_definition_owner_code||
8212                       ',line_definition_code = '||p_line_definition_code
8213          ,p_module => l_log_module
8214          ,p_level  => C_LEVEL_STATEMENT);
8215   END IF;
8216 
8217   l_return := TRUE;
8218 
8219   FOR l_err IN c_invalid_sources LOOP
8220 
8221     l_return := FALSE;
8222     xla_amb_setup_err_pkg.stack_error
8223               (p_message_name               => 'XLA_AB_MPA_LINE_ANC_UNASN_SRCE'
8224               ,p_message_type               => 'E'
8225               ,p_message_category           => 'MPA_LINE_AC'
8226               ,p_category_sequence          => 20
8227               ,p_application_id             => p_application_id
8228               ,p_amb_context_code           => p_amb_context_code
8229               ,p_event_class_code           => p_event_class_code
8230               ,p_event_type_code            => p_event_type_code
8231               ,p_line_definition_owner_code => p_line_definition_owner_code
8232               ,p_line_definition_code       => p_line_definition_code
8233               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
8234               ,p_anal_criterion_code        => l_err.analytical_criterion_code
8235               ,p_source_code                => l_err.source_code
8236               ,p_source_type_code           => l_err.source_type_code);
8237   END LOOP;
8238 
8239   FOR l_err IN c_der_sources LOOP
8240     IF xla_sources_pkg.derived_source_is_invalid
8241               (p_application_id           => p_application_id
8242               ,p_derived_source_code      => l_err.source_code
8243               ,p_derived_source_type_code => 'D'
8244               ,p_event_class_code         => p_event_class_code
8245               ,p_level                    => 'L')  = 'TRUE' THEN
8246 
8247       l_return := FALSE;
8248       xla_amb_setup_err_pkg.stack_error
8249               (p_message_name               => 'XLA_AB_MPA_LINE_ANC_UNASN_SRCE'
8250               ,p_message_type               => 'E'
8251               ,p_message_category           => 'MPA_LINE_AC'
8252               ,p_category_sequence          => 20
8253               ,p_application_id             => p_application_id
8254               ,p_amb_context_code           => p_amb_context_code
8255               ,p_event_class_code           => p_event_class_code
8256               ,p_event_type_code            => p_event_type_code
8257               ,p_line_definition_owner_code => p_line_definition_owner_code
8258               ,p_line_definition_code       => p_line_definition_code
8259               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
8260               ,p_anal_criterion_code        => l_err.analytical_criterion_code
8261               ,p_source_code                => l_err.source_code
8262               ,p_source_type_code           => l_err.source_type_code);
8263     END IF;
8264   END LOOP;
8265 
8266   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8267     trace(p_msg    => 'END of procedure chk_mpa_ac_invalid_sources'
8268          ,p_module => l_log_module
8269          ,p_level  => C_LEVEL_PROCEDURE);
8270   END IF;
8271 
8272   RETURN l_return;
8273 
8274 EXCEPTION
8275   WHEN xla_exceptions_pkg.application_exception THEN
8276     IF (c_invalid_sources%ISOPEN) THEN
8277       CLOSE c_invalid_sources;
8278     END IF;
8279     IF (c_der_sources%ISOPEN) THEN
8280       CLOSE c_der_sources;
8281     END IF;
8282     RAISE;
8283 
8284   WHEN OTHERS                                   THEN
8285     IF (c_invalid_sources%ISOPEN) THEN
8286       CLOSE c_invalid_sources;
8287     END IF;
8288     IF (c_der_sources%ISOPEN) THEN
8289       CLOSE c_der_sources;
8290     END IF;
8291     xla_exceptions_pkg.raise_message
8292       (p_location   => 'xla_line_definitions_pvt.chk_mpa_ac_invalid_sources');
8293 END chk_mpa_ac_invalid_sources;
8294 
8295 
8296 
8297 --=============================================================================
8298 --
8299 -- Name: validate_mpa_line_ac
8300 -- Description: Validate MPA line AC assignment of the line definition
8301 --
8302 --=============================================================================
8303 FUNCTION validate_mpa_line_ac
8304   (p_application_id                   IN NUMBER
8305   ,p_amb_context_code                 IN VARCHAR2
8306   ,p_event_class_code                 IN VARCHAR2
8307   ,p_event_type_code                  IN VARCHAR2
8308   ,p_line_definition_owner_code       IN VARCHAR2
8309   ,p_line_definition_code             IN VARCHAR2)
8310 RETURN BOOLEAN
8311 IS
8312   l_return      BOOLEAN;
8313   l_log_module  VARCHAR2(240);
8314 BEGIN
8315   IF g_log_enabled THEN
8316     l_log_module := C_DEFAULT_MODULE||'.validate_mpa_line_ac';
8317   END IF;
8318 
8319   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8320     trace(p_msg    => 'BEGIN of procedure validate_mpa_line_ac'
8321          ,p_module => l_log_module
8322          ,p_level  => C_LEVEL_PROCEDURE);
8323   END IF;
8324 
8325   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8326     trace(p_msg    => 'application_id = '||p_application_id||
8327                       ',amb_context_code = '||p_amb_context_code||
8328                       ',event_class_code = '||p_event_class_code||
8329                       ',event_type_code = '||p_event_type_code||
8330                       ',line_definition_owner_code = '||p_line_definition_owner_code||
8331                       ',line_definition_code = '||p_line_definition_code
8332          ,p_module => l_log_module
8333          ,p_level  => C_LEVEL_STATEMENT);
8334   END IF;
8335 
8336   l_return := TRUE;
8337 
8338   l_return := chk_mpa_line_ac_is_enabled
8339                      (p_application_id             => p_application_id
8340                      ,p_amb_context_code           => p_amb_context_code
8341                      ,p_event_class_code           => p_event_class_code
8342                      ,p_event_type_code            => p_event_type_code
8343                      ,p_line_definition_owner_code => p_line_definition_owner_code
8344                      ,p_line_definition_code       => p_line_definition_code)
8345               AND l_return;
8346 
8347   l_return := chk_mpa_ac_has_details
8348                      (p_application_id             => p_application_id
8349                      ,p_amb_context_code           => p_amb_context_code
8350                      ,p_event_class_code           => p_event_class_code
8351                      ,p_event_type_code            => p_event_type_code
8352                      ,p_line_definition_owner_code => p_line_definition_owner_code
8353                      ,p_line_definition_code       => p_line_definition_code)
8354               AND l_return;
8355 
8356   l_return := chk_mpa_ac_invalid_sources
8357                      (p_application_id             => p_application_id
8358                      ,p_amb_context_code           => p_amb_context_code
8359                      ,p_event_class_code           => p_event_class_code
8360                      ,p_event_type_code            => p_event_type_code
8361                      ,p_line_definition_owner_code => p_line_definition_owner_code
8362                      ,p_line_definition_code       => p_line_definition_code)
8363               AND l_return;
8364 
8365   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8366     trace(p_msg    => 'END of procedure validate_mpa_line_ac'
8367          ,p_module => l_log_module
8368          ,p_level  => C_LEVEL_PROCEDURE);
8369   END IF;
8370 
8371   RETURN l_return;
8372 
8373 EXCEPTION
8374   WHEN xla_exceptions_pkg.application_exception THEN
8375     RAISE;
8376   WHEN OTHERS                                   THEN
8377     xla_exceptions_pkg.raise_message
8378       (p_location   => 'xla_line_definitions_pvt.validate_mpa_line_ac');
8379 END validate_mpa_line_ac;
8380 
8381 
8382 --=============================================================================
8383 --=============================================================================
8384 --
8385 -- Name: chk_mpa_adr_assgn_complete
8386 -- Description: Validate if any JLT assignment that does not contain flexfield
8387 --              assignment and does not have complete segment assignments
8388 -- Return Value:
8389 --   TRUE - if all ADR assignments are valid
8390 --   FALSE - if any ADR assignment is invalid
8391 --
8392 --=============================================================================
8393 FUNCTION chk_mpa_adr_assgn_complete
8394   (p_application_id                   IN NUMBER
8395   ,p_amb_context_code                 IN VARCHAR2
8396   ,p_event_class_code                 IN VARCHAR2
8397   ,p_event_type_code                  IN VARCHAR2
8398   ,p_line_definition_owner_code       IN VARCHAR2
8399   ,p_line_definition_code             IN VARCHAR2)
8400 RETURN BOOLEAN
8401 IS
8402   CURSOR c_coa_id IS
8403     SELECT xld.accounting_coa_id
8404       FROM xla_line_definitions_b xld
8405      WHERE xld.application_id             = p_application_id
8406        AND xld.amb_context_code           = p_amb_context_code
8407        AND xld.event_class_code           = p_event_class_code
8408        AND xld.event_type_code            = p_event_type_code
8409        AND xld.line_definition_owner_code = p_line_definition_owner_code
8410        AND xld.line_definition_code       = p_line_definition_code;
8411 
8412   --
8413   -- Get line assignments that does not contain flexfield assignment
8414   --
8415   CURSOR c_invalid_adrs_no_coa IS
8416     SELECT distinct mpa.mpa_accounting_line_type_code, mpa.mpa_accounting_line_code
8417       FROM xla_line_defn_jlt_assgns xlj
8418           ,xla_acct_line_types_b    jlt
8419           ,xla_acct_line_types_b    jlt1
8420           ,xla_mpa_jlt_assgns       mpa
8421      WHERE xlj.application_id             = p_application_id
8422        AND xlj.amb_context_code           = p_amb_context_code
8423        AND xlj.event_class_code           = p_event_class_code
8424        AND xlj.event_type_code            = p_event_type_code
8425        AND xlj.line_definition_owner_code = p_line_definition_owner_code
8426        AND xlj.line_definition_code       = p_line_definition_code
8427        AND xlj.active_flag                = 'Y'
8428        AND xlj.application_id             = mpa.application_id
8429        AND xlj.amb_context_code           = mpa.amb_context_code
8430        AND xlj.event_class_code           = mpa.event_class_code
8431        AND xlj.event_type_code            = mpa.event_type_code
8432        AND xlj.line_definition_owner_code = mpa.line_definition_owner_code
8433        AND xlj.line_definition_code       = mpa.line_definition_code
8434        AND xlj.accounting_line_type_code  = mpa.accounting_line_type_code
8435        AND xlj.accounting_line_code       = mpa.accounting_line_code
8436        AND xlj.application_id             = jlt1.application_id
8437        AND xlj.amb_context_code           = jlt1.amb_context_code
8438        AND xlj.event_class_code           = jlt1.event_class_code
8439        AND xlj.accounting_line_type_code  = jlt1.accounting_line_type_code
8440        AND xlj.accounting_line_code       = jlt1.accounting_line_code
8441        AND jlt1.mpa_option_code           = 'ACCRUAL'
8442        AND mpa.application_id             = jlt.application_id
8443        AND mpa.amb_context_code           = jlt.amb_context_code
8444        AND mpa.event_class_code           = jlt.event_class_code
8445        AND mpa.mpa_accounting_line_type_code  = jlt.accounting_line_type_code
8446        AND mpa.mpa_accounting_line_code       = jlt.accounting_line_code
8447        AND jlt.business_method_code      <> 'PRIOR_ENTRY'
8448        AND NOT EXISTS
8449            (SELECT 'x'
8450               FROM xla_mpa_jlt_adr_assgns xad
8451              WHERE mpa.application_id             = xad.application_id
8452                AND mpa.amb_context_code           = xad.amb_context_code
8453                AND mpa.event_class_code           = xad.event_class_code
8454                AND mpa.event_type_code            = xad.event_type_code
8455                AND mpa.line_definition_owner_code = xad.line_definition_owner_code
8456                AND mpa.line_definition_code       = xad.line_definition_code
8457                AND mpa.accounting_line_type_code  = xad.accounting_line_type_code
8458                AND mpa.accounting_line_code       = xad.accounting_line_code
8459                AND mpa.mpa_accounting_line_type_code = xad.mpa_accounting_line_type_code
8460                AND mpa.mpa_accounting_line_code      = xad.mpa_accounting_line_code
8461                AND xad.flexfield_segment_code     = 'ALL');
8462 
8463   l_coa_id      INTEGER;
8464 
8465   --
8466   -- Get any line assignments that does not contain flexfield
8467   -- assignment or does not have complete segment assignments
8468   --
8469   CURSOR c_invalid_adrs IS
8470     SELECT distinct mpa.mpa_accounting_line_type_code, mpa.mpa_accounting_line_code
8471       FROM xla_line_defn_jlt_assgns xlj
8472           ,fnd_id_flex_segments_vl  fif
8473           , xla_acct_line_types_b   jlt
8474           ,xla_acct_line_types_b    jlt1
8475           ,xla_mpa_jlt_assgns       mpa
8476      WHERE fif.application_id             = 101
8477        AND fif.id_flex_code               = 'GL#'
8478        AND fif.id_flex_num                = l_coa_id
8479        AND fif.enabled_flag               = 'Y'
8480        AND xlj.application_id             = p_application_id
8481        AND xlj.amb_context_code           = p_amb_context_code
8482        AND xlj.event_class_code           = p_event_class_code
8483        AND xlj.event_type_code            = p_event_type_code
8484        AND xlj.line_definition_owner_code = p_line_definition_owner_code
8485        AND xlj.line_definition_code       = p_line_definition_code
8486        AND xlj.active_flag                = 'Y'
8487        AND xlj.application_id             = jlt1.application_id
8488        AND xlj.amb_context_code           = jlt1.amb_context_code
8489        AND xlj.event_class_code           = jlt1.event_class_code
8490        AND xlj.accounting_line_type_code  = jlt1.accounting_line_type_code
8491        AND xlj.accounting_line_code       = jlt1.accounting_line_code
8492        AND jlt1.mpa_option_code           = 'ACCRUAL'
8493        AND xlj.application_id             = mpa.application_id
8494        AND xlj.amb_context_code           = mpa.amb_context_code
8495        AND xlj.event_class_code           = mpa.event_class_code
8496        AND xlj.event_type_code            = mpa.event_type_code
8497        AND xlj.line_definition_owner_code = mpa.line_definition_owner_code
8498        AND xlj.line_definition_code       = mpa.line_definition_code
8499        AND xlj.accounting_line_type_code  = mpa.accounting_line_type_code
8500        AND xlj.accounting_line_code       = mpa.accounting_line_code
8501        AND mpa.application_id             = jlt.application_id
8502        AND mpa.amb_context_code           = jlt.amb_context_code
8503        AND mpa.event_class_code           = jlt.event_class_code
8504        AND mpa.mpa_accounting_line_type_code  = jlt.accounting_line_type_code
8505        AND mpa.mpa_accounting_line_code       = jlt.accounting_line_code
8506        AND jlt.business_method_code      <> 'PRIOR_ENTRY'
8507        AND NOT EXISTS
8508            (SELECT 'Y'
8509               FROM xla_mpa_jlt_adr_assgns xad
8510              WHERE mpa.application_id             = xad.application_id
8511                AND mpa.amb_context_code           = xad.amb_context_code
8512                AND mpa.event_class_code           = xad.event_class_code
8513                AND mpa.event_type_code            = xad.event_type_code
8514                AND mpa.line_definition_owner_code = xad.line_definition_owner_code
8515                AND mpa.line_definition_code       = xad.line_definition_code
8516                AND mpa.accounting_line_type_code  = xad.accounting_line_type_code
8517                AND mpa.accounting_line_code       = xad.accounting_line_code
8518                AND mpa.mpa_accounting_line_type_code = xad.mpa_accounting_line_type_code
8519                AND mpa.mpa_accounting_line_code      = xad.mpa_accounting_line_code
8520                AND xad.flexfield_segment_code     = fif.application_column_name
8521             )
8522           AND NOT EXISTS
8523            (SELECT 'Y'
8524               FROM xla_mpa_jlt_adr_assgns xad
8525              WHERE mpa.application_id             = xad.application_id
8526                AND mpa.amb_context_code           = xad.amb_context_code
8527                AND mpa.event_class_code           = xad.event_class_code
8528                AND mpa.event_type_code            = xad.event_type_code
8529                AND mpa.line_definition_owner_code = xad.line_definition_owner_code
8530                AND mpa.line_definition_code       = xad.line_definition_code
8531                AND mpa.accounting_line_type_code  = xad.accounting_line_type_code
8532                AND mpa.accounting_line_code       = xad.accounting_line_code
8533                AND mpa.mpa_accounting_line_type_code = xad.mpa_accounting_line_type_code
8534                AND mpa.mpa_accounting_line_code      = xad.mpa_accounting_line_code
8535                AND xad.flexfield_segment_code     = 'ALL');
8536 
8537   l_return      BOOLEAN;
8538   l_log_module  VARCHAR2(240);
8539 BEGIN
8540   IF g_log_enabled THEN
8541     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_adr_assgn_complete';
8542   END IF;
8543 
8544   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8545     trace(p_msg    => 'BEGIN of procedure chk_mpa_adr_assgn_complete'
8546          ,p_module => l_log_module
8547          ,p_level  => C_LEVEL_PROCEDURE);
8548   END IF;
8549 
8550   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8551     trace(p_msg    => 'application_id = '||p_application_id||
8552                       ',amb_context_code = '||p_amb_context_code||
8553                       ',event_class_code = '||p_event_class_code||
8554                       ',event_type_code = '||p_event_type_code||
8555                       ',line_definition_owner_code = '||p_line_definition_owner_code||
8556                       ',line_definition_code = '||p_line_definition_code
8557          ,p_module => l_log_module
8558          ,p_level  => C_LEVEL_STATEMENT);
8559   END IF;
8560 
8561   l_return := TRUE;
8562 
8563   OPEN c_coa_id;
8564   FETCH c_coa_id INTO l_coa_id;
8565   CLOSE c_coa_id;
8566 
8567   IF (l_coa_id IS NULL) THEN
8568     --
8569     -- Check if all JLT assignments contain ADR assignments
8570     --
8571     FOR l_adr_assgns IN c_invalid_adrs_no_coa LOOP
8572       l_return := FALSE;
8573 
8574       xla_amb_setup_err_pkg.stack_error
8575               (p_message_name               => 'XLA_AB_MPA_INCOMPLETE_ACCT'
8576               ,p_message_type               => 'E'
8577               ,p_message_category           => 'MPA_LINE_TYPE'
8578               ,p_category_sequence          => 18
8579               ,p_application_id             => p_application_id
8580               ,p_amb_context_code           => p_amb_context_code
8581               ,p_event_class_code           => p_event_class_code
8582               ,p_event_type_code            => p_event_type_code
8583               ,p_line_definition_owner_code => p_line_definition_owner_code
8584               ,p_line_definition_code       => p_line_definition_code
8585               ,p_mpa_acct_line_type_code    => l_adr_assgns.mpa_accounting_line_type_code
8586               ,p_mpa_acct_line_code         => l_adr_assgns.mpa_accounting_line_code);
8587     END LOOP;
8588   ELSE
8589     FOR l_adr_assgns IN c_invalid_adrs LOOP
8590       l_return := FALSE;
8591 
8592       xla_amb_setup_err_pkg.stack_error
8593               (p_message_name               => 'XLA_AB_MPA_INCOMPLETE_ACCT'
8594               ,p_message_type               => 'E'
8595               ,p_message_category           => 'MPA_LINE_TYPE'
8596               ,p_category_sequence          => 18
8597               ,p_application_id             => p_application_id
8598               ,p_amb_context_code           => p_amb_context_code
8599               ,p_event_class_code           => p_event_class_code
8600               ,p_event_type_code            => p_event_type_code
8601               ,p_line_definition_owner_code => p_line_definition_owner_code
8602               ,p_line_definition_code       => p_line_definition_code
8603               ,p_mpa_acct_line_type_code    => l_adr_assgns.mpa_accounting_line_type_code
8604               ,p_mpa_acct_line_code         => l_adr_assgns.mpa_accounting_line_code);
8605     END LOOP;
8606   END IF;
8607 
8608   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8609     trace(p_msg    => 'END of procedure chk_mpa_adr_assgn_complete'
8610          ,p_module => l_log_module
8611          ,p_level  => C_LEVEL_PROCEDURE);
8612   END IF;
8613 
8614   RETURN l_return;
8615 
8616 EXCEPTION
8617   WHEN xla_exceptions_pkg.application_exception THEN
8618     IF c_invalid_adrs%ISOPEN THEN
8619       CLOSE c_invalid_adrs;
8620     END IF;
8621     RAISE;
8622   WHEN OTHERS                                   THEN
8623     xla_exceptions_pkg.raise_message
8624       (p_location   => 'xla_line_definitions_pvt.chk_mpa_adr_assgn_complete');
8625 END chk_mpa_adr_assgn_complete;
8626 
8627 --=============================================================================
8628 --
8629 -- Name: chk_mpa_adr_is_enabled
8630 -- Description:
8631 --
8632 --=============================================================================
8633 FUNCTION chk_mpa_adr_is_enabled
8634   (p_application_id                   IN NUMBER
8635   ,p_amb_context_code                 IN VARCHAR2
8636   ,p_event_class_code                 IN VARCHAR2
8637   ,p_event_type_code                  IN VARCHAR2
8638   ,p_line_definition_owner_code       IN VARCHAR2
8639   ,p_line_definition_code             IN VARCHAR2)
8640 RETURN BOOLEAN
8641 IS
8642   CURSOR c_invalid_adrs IS
8643     SELECT distinct xsr.segment_rule_type_code, xsr.segment_rule_code
8644       FROM xla_line_defn_jlt_assgns xjl
8645           ,xla_mpa_jlt_adr_assgns   xad
8646           ,xla_seg_rules_b          xsr
8647      WHERE xsr.application_id             = xad.application_id
8648        AND xsr.amb_context_code           = xad.amb_context_code
8649        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
8650        AND xsr.segment_rule_code          = xad.segment_rule_code
8651        AND xsr.enabled_flag               <> 'Y'
8652        AND xad.application_id             = xjl.application_id
8653        AND xad.amb_context_code           = xjl.amb_context_code
8654        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
8655        AND xad.line_definition_code       = xjl.line_definition_code
8656        AND xad.event_class_code           = xjl.event_class_code
8657        AND xad.event_type_code            = xjl.event_type_code
8658        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
8659        AND xad.accounting_line_code       = xjl.accounting_line_code
8660        AND xad.segment_rule_code           is not null
8661        AND xjl.application_id             = p_application_id
8662        AND xjl.amb_context_code           = p_amb_context_code
8663        AND xjl.event_class_code           = p_event_class_code
8664        AND xjl.event_type_code            = p_event_type_code
8665        AND xjl.line_definition_owner_code = p_line_definition_owner_code
8666        AND xjl.line_definition_code       = p_line_definition_code
8667        AND xjl.active_flag                = 'Y'
8668        AND NOT EXISTS (SELECT 'x'
8669                         FROM xla_line_defn_jlt_assgns    xld1
8670                        WHERE xld1.application_id             = xad.application_id
8671                          AND xld1.amb_context_code           = xad.amb_context_code
8672                          AND xld1.event_class_code           = xad.event_class_code
8673                          AND xld1.event_type_code            = xad.event_type_code
8674                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
8675                          AND xld1.line_definition_code       = xad.line_definition_code
8676                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
8677                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code)  ;
8678 
8679 
8680   CURSOR c_adr IS
8681     SELECT distinct xsr.application_id, xsr.amb_context_code,
8682                     xsr.segment_rule_type_code, xsr.segment_rule_code
8683       FROM xla_line_defn_jlt_assgns xjl
8684           ,xla_mpa_jlt_adr_assgns   xad
8685           ,xla_seg_rules_b          xsr
8686      WHERE xsr.application_id             = xad.application_id
8687        AND xsr.amb_context_code           = xad.amb_context_code
8688        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
8689        AND xsr.segment_rule_code          = xad.segment_rule_code
8690        AND xad.application_id             = xjl.application_id
8691        AND xad.amb_context_code           = xjl.amb_context_code
8692        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
8693        AND xad.line_definition_code       = xjl.line_definition_code
8694        AND xad.event_class_code           = xjl.event_class_code
8695        AND xad.event_type_code            = xjl.event_type_code
8696        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
8697        AND xad.accounting_line_code       = xjl.accounting_line_code
8698        AND xad.segment_rule_code           is not null
8699        AND xjl.application_id             = p_application_id
8700        AND xjl.amb_context_code           = p_amb_context_code
8701        AND xjl.event_class_code           = p_event_class_code
8702        AND xjl.event_type_code            = p_event_type_code
8703        AND xjl.line_definition_owner_code = p_line_definition_owner_code
8704        AND xjl.line_definition_code       = p_line_definition_code
8705        AND xjl.active_flag                = 'Y'
8706        AND NOT EXISTS (SELECT 'x'
8707                         FROM xla_line_defn_jlt_assgns    xld1
8708                        WHERE xld1.application_id             = xad.application_id
8709                          AND xld1.amb_context_code           = xad.amb_context_code
8710                          AND xld1.event_class_code           = xad.event_class_code
8711                          AND xld1.event_type_code            = xad.event_type_code
8712                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
8713                          AND xld1.line_definition_code       = xad.line_definition_code
8714                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
8715                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code)  ;
8716 
8717     l_adr     c_adr%rowtype;
8718 
8719     CURSOR c_invalid_child_adr IS
8720     SELECT xsd.value_segment_rule_type_code, xsd.value_segment_rule_code
8721       FROM xla_seg_rule_details xsd
8722           ,xla_seg_rules_b      xsr
8723      WHERE xsd.application_id                   = l_adr.application_id
8724        AND xsd.amb_context_code                 = l_adr.amb_context_code
8725        AND xsd.segment_rule_type_code           = l_adr.segment_rule_type_code
8726        AND xsd.segment_rule_code                = l_adr.segment_rule_code
8727        AND xsd.value_type_code                  = 'A'
8728        AND xsd.value_segment_rule_appl_id   = xsr.application_id
8729        AND xsd.value_segment_rule_type_code = xsr.segment_rule_type_code
8730        AND xsd.value_segment_rule_code      = xsr.segment_rule_code
8731        AND xsd.amb_context_code             = xsr.amb_context_code
8732        AND xsr.enabled_flag                <> 'Y';
8733 
8734   l_return      BOOLEAN;
8735   l_log_module  VARCHAR2(240);
8736 BEGIN
8737   IF g_log_enabled THEN
8738     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_adr_is_enabled';
8739   END IF;
8740 
8741   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8742     trace(p_msg    => 'BEGIN of procedure chk_mpa_adr_is_enabled'
8743          ,p_module => l_log_module
8744          ,p_level  => C_LEVEL_PROCEDURE);
8745   END IF;
8746 
8747   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8748     trace(p_msg    => 'application_id = '||p_application_id||
8749                       ',amb_context_code = '||p_amb_context_code||
8750                       ',event_class_code = '||p_event_class_code||
8751                       ',event_type_code = '||p_event_type_code||
8752                       ',line_definition_owner_code = '||p_line_definition_owner_code||
8753                       ',line_definition_code = '||p_line_definition_code
8754          ,p_module => l_log_module
8755          ,p_level  => C_LEVEL_STATEMENT);
8756   END IF;
8757 
8758   l_return := TRUE;
8759 
8760   FOR l_err IN c_invalid_adrs LOOP
8761     l_return := FALSE;
8762 
8763     xla_amb_setup_err_pkg.stack_error
8764               (p_message_name               => 'XLA_AB_MPA_DISABLD_SEG_RULE'
8765               ,p_message_type               => 'E'
8766               ,p_message_category           => 'MPA_SEG_RULE'
8767               ,p_category_sequence          => 21
8768               ,p_application_id             => p_application_id
8769               ,p_amb_context_code           => p_amb_context_code
8770               ,p_event_class_code           => p_event_class_code
8771               ,p_event_type_code            => p_event_type_code
8772               ,p_line_definition_owner_code => p_line_definition_owner_code
8773               ,p_line_definition_code       => p_line_definition_code
8774               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
8775               ,p_segment_rule_code          => l_err.segment_rule_code);
8776 
8777   END LOOP;
8778 
8779   OPEN c_adr;
8780   LOOP
8781      FETCH c_adr
8782       INTO l_adr;
8783      EXIT WHEN c_adr%notfound;
8784 
8785      FOR l_child_adr IN c_invalid_child_adr LOOP
8786          l_return := FALSE;
8787 
8788          xla_amb_setup_err_pkg.stack_error
8789               (p_message_name               => 'XLA_AB_MPA_DISABLD_SEG_RULE'
8790               ,p_message_type               => 'E'
8791               ,p_message_category           => 'MPA_SEG_RULE'
8792               ,p_category_sequence          => 21
8793               ,p_application_id             => p_application_id
8794               ,p_amb_context_code           => p_amb_context_code
8795               ,p_event_class_code           => p_event_class_code
8796               ,p_event_type_code            => p_event_type_code
8797               ,p_line_definition_owner_code => p_line_definition_owner_code
8798               ,p_line_definition_code       => p_line_definition_code
8799               ,p_segment_rule_type_code     => l_child_adr.value_segment_rule_type_code
8800               ,p_segment_rule_code          => l_child_adr.value_segment_rule_code);
8801 
8802      END LOOP;
8803   END LOOP;
8804   CLOSE c_adr;
8805 
8806 
8807   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8808     trace(p_msg    => 'END of procedure chk_mpa_adr_is_enabled'
8809          ,p_module => l_log_module
8810          ,p_level  => C_LEVEL_PROCEDURE);
8811   END IF;
8812 
8813   RETURN l_return;
8814 
8815 EXCEPTION
8816   WHEN xla_exceptions_pkg.application_exception THEN
8817     IF c_invalid_adrs%ISOPEN THEN
8818       CLOSE c_invalid_adrs;
8819     END IF;
8820     RAISE;
8821 
8822   WHEN OTHERS                                   THEN
8823     IF c_invalid_adrs%ISOPEN THEN
8824       CLOSE c_invalid_adrs;
8825     END IF;
8826     xla_exceptions_pkg.raise_message
8827       (p_location   => 'xla_line_definitions_pvt.chk_mpa_adr_is_enabled');
8828 END chk_mpa_adr_is_enabled;
8829 
8830 --=============================================================================
8831 --
8832 -- Name: chk_mpa_adr_has_details
8833 -- Description:
8834 --
8835 --=============================================================================
8836 FUNCTION chk_mpa_adr_has_details
8837   (p_application_id                   IN NUMBER
8838   ,p_amb_context_code                 IN VARCHAR2
8839   ,p_event_class_code                 IN VARCHAR2
8840   ,p_event_type_code                  IN VARCHAR2
8841   ,p_line_definition_owner_code       IN VARCHAR2
8842   ,p_line_definition_code             IN VARCHAR2)
8843 RETURN BOOLEAN
8844 IS
8845   CURSOR c_invalid_adrs IS
8846    SELECT distinct xad.segment_rule_code, xad.segment_rule_type_code
8847      FROM xla_mpa_jlt_adr_assgns xad, xla_line_defn_jlt_assgns xjl
8848     WHERE xad.application_id             = xjl.application_id
8849       AND xad.amb_context_code           = xjl.amb_context_code
8850       AND xad.event_class_code           = xjl.event_class_code
8851       AND xad.event_type_code            = xjl.event_type_code
8852       AND xad.line_definition_code       = xjl.line_definition_code
8853       AND xad.line_definition_owner_code = xjl.line_definition_owner_code
8854       AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
8855       AND xad.accounting_line_code       = xjl.accounting_line_code
8856       AND xjl.application_id             = p_application_id
8857       AND xjl.amb_context_code           = p_amb_context_code
8858       AND xjl.event_class_code           = p_event_class_code
8859       AND xjl.event_type_code            = p_event_type_code
8860       AND xjl.line_definition_owner_code = p_line_definition_owner_code
8861       AND xjl.line_definition_code       = p_line_definition_code
8862       AND xjl.active_flag                = 'Y'
8863       AND xad.segment_rule_code          is not null
8864       AND NOT EXISTS (SELECT 'x'
8865                         FROM xla_line_defn_jlt_assgns    xld1
8866                        WHERE xld1.application_id             = xad.application_id
8867                          AND xld1.amb_context_code           = xad.amb_context_code
8868                          AND xld1.event_class_code           = xad.event_class_code
8869                          AND xld1.event_type_code            = xad.event_type_code
8870                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
8871                          AND xld1.line_definition_code       = xad.line_definition_code
8872                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
8873                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code)
8874       AND NOT EXISTS
8875           (SELECT 'x'
8876              FROM xla_seg_rule_details xsr
8877             WHERE xsr.application_id         = NVL(xad.segment_rule_appl_id,xad.application_id)
8878               AND xsr.amb_context_code       = xad.amb_context_code
8879               AND xsr.segment_rule_type_code = xad.segment_rule_type_code
8880               AND xsr.segment_rule_code      = xad.segment_rule_code);
8881 
8882   CURSOR c_adr IS
8883     SELECT distinct xsr.application_id, xsr.amb_context_code,
8884                     xsr.segment_rule_type_code, xsr.segment_rule_code
8885       FROM xla_line_defn_jlt_assgns xjl
8886           ,xla_mpa_jlt_adr_assgns   xad
8887           ,xla_seg_rules_b          xsr
8888      WHERE xsr.application_id             = xad.application_id
8889        AND xsr.amb_context_code           = xad.amb_context_code
8890        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
8891        AND xsr.segment_rule_code          = xad.segment_rule_code
8892        AND xad.application_id             = xjl.application_id
8893        AND xad.amb_context_code           = xjl.amb_context_code
8894        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
8895        AND xad.line_definition_code       = xjl.line_definition_code
8896        AND xad.event_class_code           = xjl.event_class_code
8897        AND xad.event_type_code            = xjl.event_type_code
8898        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
8899        AND xad.accounting_line_code       = xjl.accounting_line_code
8900        AND xad.segment_rule_code           is not null
8901        AND xjl.application_id             = p_application_id
8902        AND xjl.amb_context_code           = p_amb_context_code
8903        AND xjl.event_class_code           = p_event_class_code
8904        AND xjl.event_type_code            = p_event_type_code
8905        AND xjl.line_definition_owner_code = p_line_definition_owner_code
8906        AND xjl.line_definition_code       = p_line_definition_code
8907        AND xjl.active_flag                = 'Y'
8908        AND NOT EXISTS (SELECT 'x'
8909                         FROM xla_line_defn_jlt_assgns    xld1
8910                        WHERE xld1.application_id             = xad.application_id
8911                          AND xld1.amb_context_code           = xad.amb_context_code
8912                          AND xld1.event_class_code           = xad.event_class_code
8913                          AND xld1.event_type_code            = xad.event_type_code
8914                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
8915                          AND xld1.line_definition_code       = xad.line_definition_code
8916                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
8917                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code)  ;
8918 
8919     l_adr     c_adr%rowtype;
8920 
8921     CURSOR c_invalid_child_adr IS
8922     SELECT xsd.value_segment_rule_type_code, xsd.value_segment_rule_code
8923       FROM xla_seg_rule_details xsd
8924      WHERE xsd.application_id                   = l_adr.application_id
8925        AND xsd.amb_context_code                 = l_adr.amb_context_code
8926        AND xsd.segment_rule_type_code           = l_adr.segment_rule_type_code
8927        AND xsd.segment_rule_code                = l_adr.segment_rule_code
8928        AND xsd.value_type_code                  = 'A'
8929        AND not exists (SELECT 'x'
8930                          FROM xla_seg_rule_details xcd
8931                         WHERE xcd.application_id                   = xsd.value_segment_rule_appl_id
8932                           AND xcd.amb_context_code                 = xsd.amb_context_code
8933                           AND xcd.segment_rule_type_code           = xsd.value_segment_rule_type_code
8934                           AND xcd.segment_rule_code                = xsd.value_segment_rule_code);
8935 
8936   l_return      BOOLEAN;
8937   l_log_module  VARCHAR2(240);
8938 BEGIN
8939   IF g_log_enabled THEN
8940     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_adr_has_details';
8941   END IF;
8942 
8943   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8944     trace(p_msg    => 'BEGIN of procedure chk_mpa_adr_has_details'
8945          ,p_module => l_log_module
8946          ,p_level  => C_LEVEL_PROCEDURE);
8947   END IF;
8948 
8949   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8950     trace(p_msg    => 'application_id = '||p_application_id||
8951                       ',amb_context_code = '||p_amb_context_code||
8952                       ',event_class_code = '||p_event_class_code||
8953                       ',event_type_code = '||p_event_type_code||
8954                       ',line_definition_owner_code = '||p_line_definition_owner_code||
8955                       ',line_definition_code = '||p_line_definition_code
8956          ,p_module => l_log_module
8957          ,p_level  => C_LEVEL_STATEMENT);
8958   END IF;
8959 
8960   l_return := TRUE;
8961 
8962   FOR l_err IN c_invalid_adrs LOOP
8963     l_return := FALSE;
8964 
8965     xla_amb_setup_err_pkg.stack_error
8966               (p_message_name               => 'XLA_AB_MPA_SR_NO_DETAIL'
8967               ,p_message_type               => 'E'
8968               ,p_message_category           => 'MPA_SEG_RULE'
8969               ,p_category_sequence          => 21
8970               ,p_application_id             => p_application_id
8971               ,p_amb_context_code           => p_amb_context_code
8972               ,p_event_class_code           => p_event_class_code
8973               ,p_event_type_code            => p_event_type_code
8974               ,p_line_definition_owner_code => p_line_definition_owner_code
8975               ,p_line_definition_code       => p_line_definition_code
8976               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
8977               ,p_segment_rule_code          => l_err.segment_rule_code);
8978   END LOOP;
8979 
8980   OPEN c_adr;
8981   LOOP
8982      FETCH c_adr
8983       INTO l_adr;
8984      EXIT WHEN c_adr%notfound;
8985 
8986      FOR l_child_adr IN c_invalid_child_adr LOOP
8987          l_return := FALSE;
8988 
8989          xla_amb_setup_err_pkg.stack_error
8990               (p_message_name               => 'XLA_AB_MPA_SR_NO_DETAIL'
8991               ,p_message_type               => 'E'
8992               ,p_message_category           => 'MPA_SEG_RULE'
8993               ,p_category_sequence          => 21
8994               ,p_application_id             => p_application_id
8995               ,p_amb_context_code           => p_amb_context_code
8996               ,p_event_class_code           => p_event_class_code
8997               ,p_event_type_code            => p_event_type_code
8998               ,p_line_definition_owner_code => p_line_definition_owner_code
8999               ,p_line_definition_code       => p_line_definition_code
9000               ,p_segment_rule_type_code     => l_child_adr.value_segment_rule_type_code
9001               ,p_segment_rule_code          => l_child_adr.value_segment_rule_code);
9002      END LOOP;
9003   END LOOP;
9004   CLOSE c_adr;
9005 
9006   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9007     trace(p_msg    => 'END of procedure chk_mpa_adr_has_details'
9008          ,p_module => l_log_module
9009          ,p_level  => C_LEVEL_PROCEDURE);
9010   END IF;
9011 
9012   RETURN l_return;
9013 
9014 EXCEPTION
9015   WHEN xla_exceptions_pkg.application_exception THEN
9016     IF c_invalid_adrs%ISOPEN THEN
9017       CLOSE c_invalid_adrs;
9018     END IF;
9019     RAISE;
9020 
9021   WHEN OTHERS                                   THEN
9022     IF c_invalid_adrs%ISOPEN THEN
9023       CLOSE c_invalid_adrs;
9024     END IF;
9025     xla_exceptions_pkg.raise_message
9026       (p_location   => 'xla_line_definitions_pvt.chk_mpa_adr_has_details');
9027 END chk_mpa_adr_has_details;
9028 
9029 
9030 --=============================================================================
9031 --
9032 -- Name: chk_mpa_adr_inv_source_cond
9033 -- Description: Check if all sources used in the ADR condition is valid
9034 --
9035 --=============================================================================
9036 FUNCTION chk_mpa_adr_inv_source_cond
9037   (p_application_id                   IN NUMBER
9038   ,p_amb_context_code                 IN VARCHAR2
9039   ,p_event_class_code                 IN VARCHAR2
9040   ,p_event_type_code                  IN VARCHAR2
9041   ,p_line_definition_owner_code       IN VARCHAR2
9042   ,p_line_definition_code             IN VARCHAR2)
9043 RETURN BOOLEAN
9044 IS
9045   --
9046   -- Get all JLT that have sources that do not belong to the event class of the
9047   -- line definition
9048   --
9049   CURSOR c_invalid_sources IS
9050    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9051           xco.source_type_code, xco.source_code
9052      FROM xla_conditions           xco
9053          ,xla_seg_rule_details     xsr
9054          ,xla_mpa_jlt_adr_assgns   xad
9055          ,xla_line_defn_jlt_assgns xjl
9056     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
9057       AND xsr.application_id              = xad.application_id
9058       AND xsr.amb_context_code            = xad.amb_context_code
9059       AND xsr.segment_rule_type_code      = xad.segment_rule_type_code
9060       AND xsr.segment_rule_code           = xad.segment_rule_code
9061       AND xco.source_type_code            = 'S'
9062       AND xad.application_id              = xjl.application_id
9063       AND xad.amb_context_code            = xjl.amb_context_code
9064       AND xad.event_class_code            = xjl.event_class_code
9065       AND xad.event_type_code             = xjl.event_type_code
9066       AND xad.line_definition_code        = xjl.line_definition_code
9067       AND xad.line_definition_owner_code  = xjl.line_definition_owner_code
9068       AND xad.accounting_line_type_code   = xjl.accounting_line_type_code
9069       AND xad.accounting_line_code        = xjl.accounting_line_code
9070       AND xad.segment_rule_code           is not null
9071       AND xjl.application_id              = p_application_id
9072       AND xjl.amb_context_code            = p_amb_context_code
9073       AND xjl.event_class_code            = p_event_class_code
9074       AND xjl.event_type_code             = p_event_type_code
9075       AND xjl.line_definition_owner_code  = p_line_definition_owner_code
9076       AND xjl.line_definition_code        = p_line_definition_code
9077       AND xjl.active_flag                 = 'Y'
9078       AND NOT EXISTS (SELECT 'x'
9079                         FROM xla_line_defn_jlt_assgns    xld1
9080                        WHERE xld1.application_id             = xad.application_id
9081                          AND xld1.amb_context_code           = xad.amb_context_code
9082                          AND xld1.event_class_code           = xad.event_class_code
9083                          AND xld1.event_type_code            = xad.event_type_code
9084                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
9085                          AND xld1.line_definition_code       = xad.line_definition_code
9086                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
9087                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code)
9088       AND NOT EXISTS
9089           (SELECT 'y'
9090              FROM xla_event_sources xes
9091             WHERE xes.source_application_id = xco.source_application_id
9092               AND xes.source_type_code      = xco.source_type_code
9093               AND xes.source_code           = xco.source_code
9094               AND xes.application_id        = p_application_id
9095               AND xes.event_class_code      = p_event_class_code
9096               AND xes.active_flag           = 'Y')
9097    UNION
9098    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9099           xco.value_source_type_code source_type_code, xco.value_source_code source_code
9100      FROM xla_conditions           xco
9101          ,xla_seg_rule_details     xsr
9102          ,xla_mpa_jlt_adr_assgns   xad
9103          ,xla_line_defn_jlt_assgns xjl
9104     WHERE xco.segment_rule_detail_id        = xsr.segment_rule_detail_id
9105       AND xsr.application_id              = xad.application_id
9106       AND xsr.amb_context_code            = xad.amb_context_code
9107       AND xsr.segment_rule_type_code      = xad.segment_rule_type_code
9108       AND xsr.segment_rule_code           = xad.segment_rule_code
9109       AND xco.value_source_type_code      = 'S'
9110       AND xad.application_id              = xjl.application_id
9111       AND xad.amb_context_code            = xjl.amb_context_code
9112       AND xad.event_class_code            = xjl.event_class_code
9113       AND xad.event_type_code             = xjl.event_type_code
9114       AND xad.line_definition_code        = xjl.line_definition_code
9115       AND xad.line_definition_owner_code  = xjl.line_definition_owner_code
9116       AND xad.accounting_line_type_code   = xjl.accounting_line_type_code
9117       AND xad.accounting_line_code        = xjl.accounting_line_code
9118       AND xad.segment_rule_code           is not null
9119       AND xjl.application_id              = p_application_id
9120       AND xjl.amb_context_code            = p_amb_context_code
9121       AND xjl.event_class_code            = p_event_class_code
9122       AND xjl.event_type_code             = p_event_type_code
9123       AND xjl.line_definition_owner_code  = p_line_definition_owner_code
9124       AND xjl.line_definition_code        = p_line_definition_code
9125       AND xjl.active_flag                 = 'Y'
9126       AND NOT EXISTS (SELECT 'x'
9127                         FROM xla_line_defn_jlt_assgns    xld1
9128                        WHERE xld1.application_id             = xad.application_id
9129                          AND xld1.amb_context_code           = xad.amb_context_code
9130                          AND xld1.event_class_code           = xad.event_class_code
9131                          AND xld1.event_type_code            = xad.event_type_code
9132                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
9133                          AND xld1.line_definition_code       = xad.line_definition_code
9134                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
9135                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code)
9136       AND NOT EXISTS
9137           (SELECT 'y'
9138              FROM xla_event_sources xes
9139             WHERE xes.source_application_id = xco.value_source_application_id
9140               AND xes.source_type_code      = xco.value_source_type_code
9141               AND xes.source_code           = xco.value_source_code
9142               AND xes.application_id        = p_application_id
9143               AND xes.event_class_code      = p_event_class_code
9144               AND xes.active_flag           = 'Y');
9145 
9146   CURSOR c_cond_der_sources IS
9147    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9148           xco.source_type_code source_type_code, xco.source_code source_code
9149      FROM xla_conditions           xco
9150          ,xla_seg_rule_details     xsr
9151          ,xla_mpa_jlt_adr_assgns   xad
9152          ,xla_line_defn_jlt_assgns xjl
9153     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
9154       AND xsr.application_id              = xad.application_id
9155       AND xsr.amb_context_code            = xad.amb_context_code
9156       AND xsr.segment_rule_type_code      = xad.segment_rule_type_code
9157       AND xsr.segment_rule_code           = xad.segment_rule_code
9158       AND xco.source_type_code            = 'D'
9159       AND xad.application_id              = xjl.application_id
9160       AND xad.amb_context_code            = xjl.amb_context_code
9161       AND xad.event_class_code            = xjl.event_class_code
9162       AND xad.event_type_code             = xjl.event_type_code
9163       AND xad.line_definition_code        = xjl.line_definition_code
9164       AND xad.line_definition_owner_code  = xjl.line_definition_owner_code
9165       AND xad.accounting_line_type_code   = xjl.accounting_line_type_code
9166       AND xad.accounting_line_code        = xjl.accounting_line_code
9167       AND xad.segment_rule_code           is not null
9168       AND xjl.application_id              = p_application_id
9169       AND xjl.amb_context_code            = p_amb_context_code
9170       AND xjl.event_class_code            = p_event_class_code
9171       AND xjl.event_type_code             = p_event_type_code
9172       AND xjl.line_definition_owner_code  = p_line_definition_owner_code
9173       AND xjl.line_definition_code        = p_line_definition_code
9174       AND xjl.active_flag                   = 'Y'
9175       AND NOT EXISTS (SELECT 'x'
9176                         FROM xla_line_defn_jlt_assgns    xld1
9177                        WHERE xld1.application_id             = xad.application_id
9178                          AND xld1.amb_context_code           = xad.amb_context_code
9179                          AND xld1.event_class_code           = xad.event_class_code
9180                          AND xld1.event_type_code            = xad.event_type_code
9181                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
9182                          AND xld1.line_definition_code       = xad.line_definition_code
9183                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
9184                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code)
9185    UNION
9186    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9187           xco.value_source_type_code source_type_code, xco.value_source_code source_code
9188      FROM xla_conditions           xco
9189          ,xla_seg_rule_details     xsr
9190          ,xla_mpa_jlt_adr_assgns   xad
9191          ,xla_line_defn_jlt_assgns xjl
9192     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
9193       AND xsr.application_id              = xad.application_id
9194       AND xsr.amb_context_code            = xad.amb_context_code
9195       AND xsr.segment_rule_type_code      = xad.segment_rule_type_code
9196       AND xsr.segment_rule_code           = xad.segment_rule_code
9197       AND xco.value_source_type_code      = 'D'
9198       AND xad.application_id              = xjl.application_id
9199       AND xad.amb_context_code            = xjl.amb_context_code
9200       AND xad.event_class_code            = xjl.event_class_code
9201       AND xad.event_type_code             = xjl.event_type_code
9202       AND xad.line_definition_code        = xjl.line_definition_code
9203       AND xad.line_definition_owner_code  = xjl.line_definition_owner_code
9204       AND xad.accounting_line_type_code   = xjl.accounting_line_type_code
9205       AND xad.accounting_line_code        = xjl.accounting_line_code
9206       AND xad.segment_rule_code           is not null
9207       AND xjl.application_id              = p_application_id
9208       AND xjl.amb_context_code            = p_amb_context_code
9209       AND xjl.event_class_code            = p_event_class_code
9210       AND xjl.event_type_code             = p_event_type_code
9211       AND xjl.line_definition_owner_code  = p_line_definition_owner_code
9212       AND xjl.line_definition_code        = p_line_definition_code
9213       AND xjl.active_flag                   = 'Y'
9214       AND NOT EXISTS (SELECT 'x'
9215                         FROM xla_line_defn_jlt_assgns    xld1
9216                        WHERE xld1.application_id             = xad.application_id
9217                          AND xld1.amb_context_code           = xad.amb_context_code
9218                          AND xld1.event_class_code           = xad.event_class_code
9219                          AND xld1.event_type_code            = xad.event_type_code
9220                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
9221                          AND xld1.line_definition_code       = xad.line_definition_code
9222                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
9223                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code);
9224 
9225   CURSOR c_child_adr IS
9226     SELECT distinct xsr.value_segment_rule_appl_id,
9227                     xsr.value_segment_rule_type_code, xsr.value_segment_rule_code
9228       FROM xla_line_defn_jlt_assgns xjl
9229           ,xla_mpa_jlt_adr_assgns   xad
9230           ,xla_seg_rule_details    xsr
9231      WHERE xsr.application_id             = xad.application_id
9232        AND xsr.amb_context_code           = xad.amb_context_code
9233        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
9234        AND xsr.segment_rule_code          = xad.segment_rule_code
9235        AND xsr.value_type_code            = 'A'
9236        AND xad.application_id             = xjl.application_id
9237        AND xad.amb_context_code           = xjl.amb_context_code
9238        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
9239        AND xad.line_definition_code       = xjl.line_definition_code
9240        AND xad.event_class_code           = xjl.event_class_code
9241        AND xad.event_type_code            = xjl.event_type_code
9242        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
9243        AND xad.accounting_line_code       = xjl.accounting_line_code
9244        AND xad.segment_rule_code           is not null
9245        AND xjl.application_id             = p_application_id
9246        AND xjl.amb_context_code           = p_amb_context_code
9247        AND xjl.event_class_code           = p_event_class_code
9248        AND xjl.event_type_code            = p_event_type_code
9249        AND xjl.line_definition_owner_code = p_line_definition_owner_code
9250        AND xjl.line_definition_code       = p_line_definition_code
9251        AND xjl.active_flag                = 'Y'
9252        AND NOT EXISTS (SELECT 'x'
9253                         FROM xla_line_defn_jlt_assgns    xld1
9254                        WHERE xld1.application_id             = xad.application_id
9255                          AND xld1.amb_context_code           = xad.amb_context_code
9256                          AND xld1.event_class_code           = xad.event_class_code
9257                          AND xld1.event_type_code            = xad.event_type_code
9258                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
9259                          AND xld1.line_definition_code       = xad.line_definition_code
9260                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
9261                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code);
9262 
9263   l_child_adr     c_child_adr%rowtype;
9264 
9265   CURSOR c_invalid_child_sources IS
9266    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9267           xco.source_type_code, xco.source_code
9268      FROM xla_conditions           xco
9269          ,xla_seg_rule_details     xsr
9270     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
9271       AND xsr.application_id             = l_child_adr.value_segment_rule_appl_id
9272       AND xsr.amb_context_code           = p_amb_context_code
9273       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
9274       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
9275       AND xco.source_type_code            = 'S'
9276       AND NOT EXISTS
9277           (SELECT 'y'
9278              FROM xla_event_sources xes
9279             WHERE xes.source_application_id = xco.source_application_id
9280               AND xes.source_type_code      = xco.source_type_code
9281               AND xes.source_code           = xco.source_code
9282               AND xes.application_id        = p_application_id
9283               AND xes.event_class_code      = p_event_class_code
9284               AND xes.active_flag           = 'Y')
9285    UNION
9286    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9287           xco.value_source_type_code source_type_code, xco.value_source_code source_code
9288      FROM xla_conditions           xco
9289          ,xla_seg_rule_details     xsr
9290     WHERE xco.segment_rule_detail_id        = xsr.segment_rule_detail_id
9291       AND xsr.application_id             = l_child_adr.value_segment_rule_appl_id
9292       AND xsr.amb_context_code           = p_amb_context_code
9293       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
9294       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
9295       AND xco.value_source_type_code      = 'S'
9296       AND NOT EXISTS
9297           (SELECT 'y'
9298              FROM xla_event_sources xes
9299             WHERE xes.source_application_id = xco.value_source_application_id
9300               AND xes.source_type_code      = xco.value_source_type_code
9301               AND xes.source_code           = xco.value_source_code
9302               AND xes.application_id        = p_application_id
9303               AND xes.event_class_code      = p_event_class_code
9304               AND xes.active_flag           = 'Y');
9305 
9306   CURSOR c_child_der_sources IS
9307    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9308           xco.source_type_code source_type_code, xco.source_code source_code
9309      FROM xla_conditions           xco
9310          ,xla_seg_rule_details     xsr
9311     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
9312       AND xsr.application_id             = l_child_adr.value_segment_rule_appl_id
9313       AND xsr.amb_context_code           = p_amb_context_code
9314       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
9315       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
9316       AND xco.source_type_code            = 'D'
9317    UNION
9318    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9319           xco.value_source_type_code source_type_code, xco.value_source_code source_code
9320      FROM xla_conditions           xco
9321          ,xla_seg_rule_details     xsr
9322     WHERE xco.segment_rule_detail_id      = xsr.segment_rule_detail_id
9323       AND xsr.application_id             = l_child_adr.value_segment_rule_appl_id
9324       AND xsr.amb_context_code           = p_amb_context_code
9325       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
9326       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
9327       AND xco.value_source_type_code      = 'D';
9328 
9329   l_return      BOOLEAN;
9330   l_log_module  VARCHAR2(240);
9331 BEGIN
9332   IF g_log_enabled THEN
9333     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_adr_inv_source_cond';
9334   END IF;
9335 
9336   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9337     trace(p_msg    => 'BEGIN of procedure chk_mpa_adr_inv_source_cond'
9338          ,p_module => l_log_module
9339          ,p_level  => C_LEVEL_PROCEDURE);
9340   END IF;
9341 
9342   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9343     trace(p_msg    => 'application_id = '||p_application_id||
9344                       ',amb_context_code = '||p_amb_context_code||
9345                       ',event_class_code = '||p_event_class_code||
9346                       ',event_type_code = '||p_event_type_code||
9347                       ',line_definition_owner_code = '||p_line_definition_owner_code||
9348                       ',line_definition_code = '||p_line_definition_code
9349          ,p_module => l_log_module
9350          ,p_level  => C_LEVEL_STATEMENT);
9351   END IF;
9352 
9353   l_return := TRUE;
9354 
9355   --
9356   -- Check if the condition of any JLT have seeded sources that are not assigned
9357   -- to the event class of the line definition
9358   --
9359   FOR l_err IN c_invalid_sources LOOP
9360     l_return := FALSE;
9361 
9362     xla_amb_setup_err_pkg.stack_error
9363               (p_message_name               => 'XLA_AB_MPA_SR_CON_UNASN_SRCE'
9364               ,p_message_type               => 'E'
9365               ,p_message_category           => 'MPA_SEG_RULE'
9366               ,p_category_sequence          => 21
9367               ,p_application_id             => p_application_id
9368               ,p_amb_context_code           => p_amb_context_code
9369               ,p_event_class_code           => p_event_class_code
9370               ,p_event_type_code            => p_event_type_code
9371               ,p_line_definition_owner_code => p_line_definition_owner_code
9372               ,p_line_definition_code       => p_line_definition_code
9373               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
9374               ,p_segment_rule_code          => l_err.segment_rule_code
9375               ,p_source_type_code           => l_err.source_type_code
9376               ,p_source_code                => l_err.source_code);
9377   END LOOP;
9378 
9379   FOR l_err IN c_cond_der_sources LOOP
9380     IF xla_sources_pkg.derived_source_is_invalid
9381               (p_application_id           => p_application_id
9382               ,p_derived_source_code      => l_err.source_code
9383               ,p_derived_source_type_code => 'D'
9384               ,p_event_class_code         => p_event_class_code
9385               ,p_level                    => 'L') = 'TRUE' THEN
9386 
9387       l_return := FALSE;
9388 
9389       xla_amb_setup_err_pkg.stack_error
9390               (p_message_name               => 'XLA_AB_MPA_SR_CON_UNASN_SRCE'
9391               ,p_message_type               => 'E'
9392               ,p_message_category           => 'MPA_SEG_RULE'
9393               ,p_category_sequence          => 21
9394               ,p_application_id             => p_application_id
9395               ,p_amb_context_code           => p_amb_context_code
9396               ,p_event_class_code           => p_event_class_code
9397               ,p_event_type_code            => p_event_type_code
9398               ,p_line_definition_owner_code => p_line_definition_owner_code
9399               ,p_line_definition_code       => p_line_definition_code
9400               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
9401               ,p_segment_rule_code          => l_err.segment_rule_code
9402               ,p_source_type_code           => l_err.source_type_code
9403               ,p_source_code                => l_err.source_code);
9404      END IF;
9405    END LOOP;
9406 
9407   OPEN c_child_adr;
9408   LOOP
9409      FETCH c_child_adr
9410       INTO l_child_adr;
9411      EXIT WHEN c_child_adr%notfound;
9412 
9413      FOR l_err IN c_invalid_child_sources LOOP
9414          l_return := FALSE;
9415 
9416          xla_amb_setup_err_pkg.stack_error
9417               (p_message_name               => 'XLA_AB_MPA_SR_CON_UNASN_SRCE'
9418               ,p_message_type               => 'E'
9419               ,p_message_category           => 'MPA_SEG_RULE'
9420               ,p_category_sequence          => 21
9421               ,p_application_id             => p_application_id
9422               ,p_amb_context_code           => p_amb_context_code
9423               ,p_event_class_code           => p_event_class_code
9424               ,p_event_type_code            => p_event_type_code
9425               ,p_line_definition_owner_code => p_line_definition_owner_code
9426               ,p_line_definition_code       => p_line_definition_code
9427               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
9428               ,p_segment_rule_code          => l_err.segment_rule_code
9429               ,p_source_type_code           => l_err.source_type_code
9430               ,p_source_code                => l_err.source_code);
9431      END LOOP;
9432 
9433      FOR l_err IN c_child_der_sources LOOP
9434        IF xla_sources_pkg.derived_source_is_invalid
9435               (p_application_id           => p_application_id
9436               ,p_derived_source_code      => l_err.source_code
9437               ,p_derived_source_type_code => 'D'
9438               ,p_event_class_code         => p_event_class_code
9439               ,p_level                    => 'L') = 'TRUE' THEN
9440 
9441          l_return := FALSE;
9442          xla_amb_setup_err_pkg.stack_error
9443               (p_message_name               => 'XLA_AB_MPA_SR_CON_UNASN_SRCE'
9444               ,p_message_type               => 'E'
9445               ,p_message_category           => 'MPA_SEG_RULE'
9446               ,p_category_sequence          => 21
9447               ,p_application_id             => p_application_id
9448               ,p_amb_context_code           => p_amb_context_code
9449               ,p_event_class_code           => p_event_class_code
9450               ,p_event_type_code            => p_event_type_code
9451               ,p_line_definition_owner_code => p_line_definition_owner_code
9452               ,p_line_definition_code       => p_line_definition_code
9453               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
9454               ,p_segment_rule_code          => l_err.segment_rule_code
9455               ,p_source_type_code           => l_err.source_type_code
9456               ,p_source_code                => l_err.source_code);
9457        END IF;
9458      END LOOP;
9459   END LOOP;
9460   CLOSE c_child_adr;
9461 
9462   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9463     trace(p_msg    => 'END of procedure chk_mpa_adr_inv_source_cond'
9464          ,p_module => l_log_module
9465          ,p_level  => C_LEVEL_PROCEDURE);
9466   END IF;
9467 
9468   RETURN l_return;
9469 
9470 EXCEPTION
9471   WHEN xla_exceptions_pkg.application_exception THEN
9472     IF c_invalid_sources%ISOPEN THEN
9473       CLOSE c_invalid_sources;
9474     END IF;
9475     IF c_cond_der_sources%ISOPEN THEN
9476       CLOSE c_cond_der_sources;
9477     END IF;
9478     RAISE;
9479 
9480   WHEN OTHERS                                   THEN
9481     IF c_invalid_sources%ISOPEN THEN
9482       CLOSE c_invalid_sources;
9483     END IF;
9484     IF c_cond_der_sources%ISOPEN THEN
9485       CLOSE c_cond_der_sources;
9486     END IF;
9487     xla_exceptions_pkg.raise_message
9488       (p_location   => 'xla_line_definitions_pvt.chk_mpa_adr_inv_source_cond');
9489 END chk_mpa_adr_inv_source_cond;
9490 
9491 
9492 --=============================================================================
9493 --
9494 -- Name: chk_mpa_adr_source_event_class
9495 -- Description: Check if all JLT of the line definition has all required
9496 --              accounting sources assigned
9497 --
9498 --=============================================================================
9499 FUNCTION chk_mpa_adr_source_event_class
9500   (p_application_id                   IN NUMBER
9501   ,p_amb_context_code                 IN VARCHAR2
9502   ,p_event_class_code                 IN VARCHAR2
9503   ,p_event_type_code                  IN VARCHAR2
9504   ,p_line_definition_owner_code       IN VARCHAR2
9505   ,p_line_definition_code             IN VARCHAR2)
9506 RETURN BOOLEAN
9507 IS
9508   --
9509   -- Get all JLT for which not all required line accounting sources are assigned
9510   --
9511   CURSOR c_invalid_sources IS
9512    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9513           xsr.value_source_type_code source_type_code, xsr.value_source_code source_code
9514      FROM xla_seg_rule_details     xsr
9515          ,xla_mpa_jlt_adr_assgns   xad
9516          ,xla_line_defn_jlt_assgns xjl
9517     WHERE xsr.application_id             = xad.application_id
9518       AND xsr.amb_context_code           = xad.amb_context_code
9519       AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
9520       AND xsr.segment_rule_code          = xad.segment_rule_code
9521       AND xsr.value_source_type_code     = 'S'
9522       AND xad.application_id             = xjl.application_id
9523       AND xad.amb_context_code           = xjl.amb_context_code
9524       AND xad.line_definition_code       = xjl.line_definition_code
9525       AND xad.event_class_code           = xjl.event_class_code
9526       AND xad.event_type_code            = xjl.event_type_code
9527       AND xad.line_definition_owner_code = xjl.line_definition_owner_code
9528       AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
9529       AND xad.accounting_line_code       = xjl.accounting_line_code
9530       AND xad.segment_rule_code           is not null
9531       AND xjl.application_id             = p_application_id
9532       AND xjl.amb_context_code           = p_amb_context_code
9533       AND xjl.event_class_code           = p_event_class_code
9534       AND xjl.event_type_code            = p_event_type_code
9535       AND xjl.line_definition_owner_code = p_line_definition_owner_code
9536       AND xjl.line_definition_code       = p_line_definition_code
9537       AND xjl.active_flag                = 'Y'
9538       AND NOT EXISTS (SELECT 'x'
9539                         FROM xla_line_defn_jlt_assgns    xld1
9540                        WHERE xld1.application_id             = xad.application_id
9541                          AND xld1.amb_context_code           = xad.amb_context_code
9542                          AND xld1.event_class_code           = xad.event_class_code
9543                          AND xld1.event_type_code            = xad.event_type_code
9544                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
9545                          AND xld1.line_definition_code       = xad.line_definition_code
9546                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
9547                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code)
9548       AND NOT EXISTS
9549           (SELECT 'y'
9550              FROM xla_event_sources xes
9551             WHERE xes.source_application_id = xsr.value_source_application_id
9552               AND xes.source_type_code      = xsr.value_source_type_code
9553               AND xes.source_code           = xsr.value_source_code
9554               AND xes.application_id        = xsr.application_id
9555               AND xes.event_class_code      = p_event_class_code
9556               AND xes.active_flag          = 'Y')
9557    UNION
9558    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9559           xsr.input_source_type_code source_type_code, xsr.input_source_code source_code
9560      FROM xla_seg_rule_details     xsr
9561          ,xla_mpa_jlt_adr_assgns   xad
9562          ,xla_line_defn_jlt_assgns xjl
9563     WHERE xsr.application_id             = xad.application_id
9564       AND xsr.amb_context_code           = xad.amb_context_code
9565       AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
9566       AND xsr.segment_rule_code          = xad.segment_rule_code
9567       AND xsr.input_source_type_code     = 'S'
9568       AND xad.application_id             = xjl.application_id
9569       AND xad.amb_context_code           = xjl.amb_context_code
9570       AND xad.line_definition_code       = xjl.line_definition_code
9571       AND xad.event_class_code           = xjl.event_class_code
9572       AND xad.event_type_code            = xjl.event_type_code
9573       AND xad.line_definition_owner_code = xjl.line_definition_owner_code
9574       AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
9575       AND xad.accounting_line_code       = xjl.accounting_line_code
9576       AND xad.segment_rule_code           is not null
9577       AND xjl.application_id             = p_application_id
9578       AND xjl.amb_context_code           = p_amb_context_code
9579       AND xjl.event_class_code           = p_event_class_code
9580       AND xjl.event_type_code            = p_event_type_code
9581       AND xjl.line_definition_owner_code = p_line_definition_owner_code
9582       AND xjl.line_definition_code       = p_line_definition_code
9583       AND xjl.active_flag                = 'Y'
9584       AND NOT EXISTS (SELECT 'x'
9585                         FROM xla_line_defn_jlt_assgns    xld1
9586                        WHERE xld1.application_id             = xad.application_id
9587                          AND xld1.amb_context_code           = xad.amb_context_code
9588                          AND xld1.event_class_code           = xad.event_class_code
9589                          AND xld1.event_type_code            = xad.event_type_code
9590                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
9591                          AND xld1.line_definition_code       = xad.line_definition_code
9592                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
9593                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code)
9594       AND NOT EXISTS
9595           (SELECT 'y'
9596              FROM xla_event_sources xes
9597             WHERE xes.source_application_id = xsr.input_source_application_id
9598               AND xes.source_type_code      = xsr.input_source_type_code
9599               AND xes.source_code           = xsr.input_source_code
9600               AND xes.application_id        = xsr.application_id
9601               AND xes.event_class_code      = p_event_class_code
9602               AND xes.active_flag          = 'Y');
9603 
9604   CURSOR c_der_sources IS
9605    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9606           xsr.value_source_type_code source_type_code, xsr.value_source_code source_code
9607      FROM xla_seg_rule_details     xsr
9608          ,xla_mpa_jlt_adr_assgns   xad
9609          ,xla_line_defn_jlt_assgns xjl
9610     WHERE xsr.application_id                = xad.application_id
9611       AND xsr.amb_context_code              = xad.amb_context_code
9612       AND xsr.segment_rule_type_code        = xad.segment_rule_type_code
9613       AND xsr.segment_rule_code             = xad.segment_rule_code
9614       AND xsr.value_source_type_code        = 'D'
9615       AND xad.application_id                = xjl.application_id
9616       AND xad.amb_context_code              = xjl.amb_context_code
9617       AND xad.event_class_code              = xjl.event_class_code
9618       AND xad.event_type_code               = xjl.event_type_code
9619       AND xad.line_definition_code          = xjl.line_definition_code
9620       AND xad.line_definition_owner_code    = xjl.line_definition_owner_code
9621       AND xad.accounting_line_type_code     = xjl.accounting_line_type_code
9622       AND xad.accounting_line_code          = xjl.accounting_line_code
9623       AND xad.segment_rule_code           is not null
9624       AND xjl.application_id                = p_application_id
9625       AND xjl.amb_context_code              = p_amb_context_code
9626       AND xjl.line_definition_owner_code    = p_line_definition_owner_code
9627       AND xjl.line_definition_code          = p_line_definition_code
9628       AND xjl.active_flag                   = 'Y'
9629       AND NOT EXISTS (SELECT 'x'
9630                         FROM xla_line_defn_jlt_assgns    xld1
9631                        WHERE xld1.application_id             = xad.application_id
9632                          AND xld1.amb_context_code           = xad.amb_context_code
9633                          AND xld1.event_class_code           = xad.event_class_code
9634                          AND xld1.event_type_code            = xad.event_type_code
9635                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
9636                          AND xld1.line_definition_code       = xad.line_definition_code
9637                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
9638                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code)
9639    UNION
9640    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9641           xsr.input_source_type_code source_type_code, xsr.input_source_code source_code
9642      FROM xla_seg_rule_details     xsr
9643          ,xla_mpa_jlt_adr_assgns   xad
9644          ,xla_line_defn_jlt_assgns xjl
9645     WHERE xsr.application_id                = xad.application_id
9646       AND xsr.amb_context_code              = xad.amb_context_code
9647       AND xsr.segment_rule_type_code        = xad.segment_rule_type_code
9648       AND xsr.segment_rule_code             = xad.segment_rule_code
9649       AND xsr.input_source_type_code        = 'D'
9650       AND xad.application_id                = xjl.application_id
9651       AND xad.amb_context_code              = xjl.amb_context_code
9652       AND xad.event_class_code              = xjl.event_class_code
9653       AND xad.event_type_code               = xjl.event_type_code
9654       AND xad.line_definition_code          = xjl.line_definition_code
9655       AND xad.line_definition_owner_code    = xjl.line_definition_owner_code
9656       AND xad.accounting_line_type_code     = xjl.accounting_line_type_code
9657       AND xad.accounting_line_code          = xjl.accounting_line_code
9658       AND xad.segment_rule_code           is not null
9659       AND xjl.application_id                = p_application_id
9660       AND xjl.amb_context_code              = p_amb_context_code
9661       AND xjl.line_definition_owner_code    = p_line_definition_owner_code
9662       AND xjl.line_definition_code          = p_line_definition_code
9663       AND xjl.active_flag                   = 'Y'
9664       AND NOT EXISTS (SELECT 'x'
9665                         FROM xla_line_defn_jlt_assgns    xld1
9666                        WHERE xld1.application_id             = xad.application_id
9667                          AND xld1.amb_context_code           = xad.amb_context_code
9668                          AND xld1.event_class_code           = xad.event_class_code
9669                          AND xld1.event_type_code            = xad.event_type_code
9670                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
9671                          AND xld1.line_definition_code       = xad.line_definition_code
9672                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
9673                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code);
9674 
9675 
9676   CURSOR c_child_adr IS
9677     SELECT distinct xsr.value_segment_rule_appl_id,
9678                     xsr.value_segment_rule_type_code, xsr.value_segment_rule_code
9679       FROM xla_line_defn_jlt_assgns xjl
9680           ,xla_mpa_jlt_adr_assgns   xad
9681           ,xla_seg_rule_details    xsr
9682      WHERE xsr.application_id             = xad.application_id
9683        AND xsr.amb_context_code           = xad.amb_context_code
9684        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
9685        AND xsr.segment_rule_code          = xad.segment_rule_code
9686        AND xsr.value_type_code            = 'A'
9687        AND xad.application_id             = xjl.application_id
9688        AND xad.amb_context_code           = xjl.amb_context_code
9689        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
9690        AND xad.line_definition_code       = xjl.line_definition_code
9691        AND xad.event_class_code           = xjl.event_class_code
9692        AND xad.event_type_code            = xjl.event_type_code
9693        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
9694        AND xad.accounting_line_code       = xjl.accounting_line_code
9695        AND xad.segment_rule_code           is not null
9696        AND xjl.application_id             = p_application_id
9697        AND xjl.amb_context_code           = p_amb_context_code
9698        AND xjl.event_class_code           = p_event_class_code
9699        AND xjl.event_type_code            = p_event_type_code
9700        AND xjl.line_definition_owner_code = p_line_definition_owner_code
9701        AND xjl.line_definition_code       = p_line_definition_code
9702        AND xjl.active_flag                = 'Y'
9703        AND NOT EXISTS (SELECT 'x'
9704                         FROM xla_line_defn_jlt_assgns    xld1
9705                        WHERE xld1.application_id             = xad.application_id
9706                          AND xld1.amb_context_code           = xad.amb_context_code
9707                          AND xld1.event_class_code           = xad.event_class_code
9708                          AND xld1.event_type_code            = xad.event_type_code
9709                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
9710                          AND xld1.line_definition_code       = xad.line_definition_code
9711                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
9712                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code);
9713 
9714   l_child_adr     c_child_adr%rowtype;
9715 
9716   CURSOR c_invalid_child_sources IS
9717    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9718           xsr.value_source_type_code source_type_code, xsr.value_source_code source_code
9719      FROM xla_seg_rule_details     xsr
9720     WHERE xsr.application_id             = l_child_adr.value_segment_rule_appl_id
9721       AND xsr.amb_context_code           = p_amb_context_code
9722       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
9723       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
9724       AND xsr.value_source_type_code     = 'S'
9725       AND NOT EXISTS
9726           (SELECT 'y'
9727              FROM xla_event_sources xes
9728             WHERE xes.source_application_id = xsr.value_source_application_id
9729               AND xes.source_type_code      = xsr.value_source_type_code
9730               AND xes.source_code           = xsr.value_source_code
9731               AND xes.application_id        = xsr.application_id
9732               AND xes.event_class_code      = p_event_class_code
9733               AND xes.active_flag          = 'Y')
9734    UNION
9735    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9736           xsr.input_source_type_code source_type_code, xsr.input_source_code source_code
9737      FROM xla_seg_rule_details     xsr
9738     WHERE xsr.application_id             = l_child_adr.value_segment_rule_appl_id
9739       AND xsr.amb_context_code           = p_amb_context_code
9740       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
9741       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
9742       AND xsr.input_source_type_code     = 'S'
9743       AND NOT EXISTS
9744           (SELECT 'y'
9745              FROM xla_event_sources xes
9746             WHERE xes.source_application_id = xsr.input_source_application_id
9747               AND xes.source_type_code      = xsr.input_source_type_code
9748               AND xes.source_code           = xsr.input_source_code
9749               AND xes.application_id        = xsr.application_id
9750               AND xes.event_class_code      = p_event_class_code
9751               AND xes.active_flag          = 'Y');
9752 
9753   CURSOR c_child_der_sources IS
9754    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9755           xsr.value_source_type_code source_type_code, xsr.value_source_code source_code
9756      FROM xla_seg_rule_details     xsr
9757     WHERE xsr.application_id             = l_child_adr.value_segment_rule_appl_id
9758       AND xsr.amb_context_code           = p_amb_context_code
9759       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
9760       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
9761       AND xsr.value_source_type_code        = 'D'
9762    UNION
9763    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
9764           xsr.input_source_type_code source_type_code, xsr.input_source_code source_code
9765      FROM xla_seg_rule_details     xsr
9766     WHERE xsr.application_id             = l_child_adr.value_segment_rule_appl_id
9767       AND xsr.amb_context_code           = p_amb_context_code
9768       AND xsr.segment_rule_type_code     = l_child_adr.value_segment_rule_type_code
9769       AND xsr.segment_rule_code          = l_child_adr.value_segment_rule_code
9770       AND xsr.input_source_type_code        = 'D';
9771 
9772   l_return      BOOLEAN;
9773   l_log_module  VARCHAR2(240);
9774 BEGIN
9775   IF g_log_enabled THEN
9776     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_adr_source_event_class';
9777   END IF;
9778 
9779   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9780     trace(p_msg    => 'BEGIN of procedure chk_mpa_adr_source_event_class'
9781          ,p_module => l_log_module
9782          ,p_level  => C_LEVEL_PROCEDURE);
9783   END IF;
9784 
9785   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9786     trace(p_msg    => 'application_id = '||p_application_id||
9787                       ',amb_context_code = '||p_amb_context_code||
9788                       ',event_class_code = '||p_event_class_code||
9789                       ',event_type_code = '||p_event_type_code||
9790                       ',line_definition_owner_code = '||p_line_definition_owner_code||
9791                       ',line_definition_code = '||p_line_definition_code
9792          ,p_module => l_log_module
9793          ,p_level  => C_LEVEL_STATEMENT);
9794   END IF;
9795 
9796   l_return := TRUE;
9797 
9798   --
9799   -- Check if any JLT does not have all required line accounting sources
9800   --
9801   FOR l_err IN c_invalid_sources LOOP
9802     l_return := FALSE;
9803 
9804     xla_amb_setup_err_pkg.stack_error
9805               (p_message_name               => 'XLA_AB_MPA_SR_UNASSN_SOURCE'
9806               ,p_message_type               => 'E'
9807               ,p_message_category           => 'MPA_SEG_RULE'
9808               ,p_category_sequence          => 21
9809               ,p_application_id             => p_application_id
9810               ,p_amb_context_code           => p_amb_context_code
9811               ,p_event_class_code           => p_event_class_code
9812               ,p_event_type_code            => p_event_type_code
9813               ,p_line_definition_owner_code => p_line_definition_owner_code
9814               ,p_line_definition_code       => p_line_definition_code
9815               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
9816               ,p_segment_rule_code          => l_err.segment_rule_code
9817               ,p_source_type_code           => l_err.source_type_code
9818               ,p_source_code                => l_err.source_code);
9819   END LOOP;
9820 
9821   FOR l_err IN c_der_sources LOOP
9822     IF xla_sources_pkg.derived_source_is_invalid
9823               (p_application_id           => p_application_id
9824               ,p_derived_source_code      => l_err.source_code
9825               ,p_derived_source_type_code => 'D'
9826               ,p_event_class_code         => p_event_class_code
9827               ,p_level                    => 'L') = 'TRUE' THEN
9828 
9829       l_return := FALSE;
9830       xla_amb_setup_err_pkg.stack_error
9831               (p_message_name               => 'XLA_AB_MPA_SR_UNASSN_SOURCE'
9832               ,p_message_type               => 'E'
9833               ,p_message_category           => 'MPA_SEG_RULE'
9834               ,p_category_sequence          => 21
9835               ,p_application_id             => p_application_id
9836               ,p_amb_context_code           => p_amb_context_code
9837               ,p_event_class_code           => p_event_class_code
9838               ,p_event_type_code            => p_event_type_code
9839               ,p_line_definition_owner_code => p_line_definition_owner_code
9840               ,p_line_definition_code       => p_line_definition_code
9841               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
9842               ,p_segment_rule_code          => l_err.segment_rule_code
9843               ,p_source_type_code           => l_err.source_type_code
9844               ,p_source_code                => l_err.source_code);
9845     END IF;
9846   END LOOP;
9847 
9848 
9849   OPEN c_child_adr;
9850   LOOP
9851      FETCH c_child_adr
9852       INTO l_child_adr;
9853      EXIT WHEN c_child_adr%notfound;
9854 
9855      FOR l_err IN c_invalid_child_sources LOOP
9856          l_return := FALSE;
9857 
9858          xla_amb_setup_err_pkg.stack_error
9859               (p_message_name               => 'XLA_AB_MPA_SR_UNASSN_SOURCE'
9860               ,p_message_type               => 'E'
9861               ,p_message_category           => 'MPA_SEG_RULE'
9862               ,p_category_sequence          => 21
9863               ,p_application_id             => p_application_id
9864               ,p_amb_context_code           => p_amb_context_code
9865               ,p_event_class_code           => p_event_class_code
9866               ,p_event_type_code            => p_event_type_code
9867               ,p_line_definition_owner_code => p_line_definition_owner_code
9868               ,p_line_definition_code       => p_line_definition_code
9869               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
9870               ,p_segment_rule_code          => l_err.segment_rule_code
9871               ,p_source_type_code           => l_err.source_type_code
9872               ,p_source_code                => l_err.source_code);
9873      END LOOP;
9874 
9875      FOR l_err IN c_child_der_sources LOOP
9876        IF xla_sources_pkg.derived_source_is_invalid
9877               (p_application_id           => p_application_id
9878               ,p_derived_source_code      => l_err.source_code
9879               ,p_derived_source_type_code => 'D'
9880               ,p_event_class_code         => p_event_class_code
9881               ,p_level                    => 'L') = 'TRUE' THEN
9882 
9883          l_return := FALSE;
9884          xla_amb_setup_err_pkg.stack_error
9885               (p_message_name               => 'XLA_AB_MPA_SR_UNASSN_SOURCE'
9886               ,p_message_type               => 'E'
9887               ,p_message_category           => 'MPA_SEG_RULE'
9888               ,p_category_sequence          => 21
9889               ,p_application_id             => p_application_id
9890               ,p_amb_context_code           => p_amb_context_code
9891               ,p_event_class_code           => p_event_class_code
9892               ,p_event_type_code            => p_event_type_code
9893               ,p_line_definition_owner_code => p_line_definition_owner_code
9894               ,p_line_definition_code       => p_line_definition_code
9895               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
9896               ,p_segment_rule_code          => l_err.segment_rule_code
9897               ,p_source_type_code           => l_err.source_type_code
9898               ,p_source_code                => l_err.source_code);
9899        END IF;
9900      END LOOP;
9901   END LOOP;
9902   CLOSE c_child_adr;
9903 
9904   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9905     trace(p_msg    => 'END of procedure chk_mpa_adr_source_event_class'
9906          ,p_module => l_log_module
9907          ,p_level  => C_LEVEL_PROCEDURE);
9908   END IF;
9909 
9910   RETURN l_return;
9911 
9912 EXCEPTION
9913   WHEN xla_exceptions_pkg.application_exception THEN
9914     IF c_invalid_sources%ISOPEN THEN
9915       CLOSE c_invalid_sources;
9916     END IF;
9917     IF c_der_sources%ISOPEN THEN
9918       CLOSE c_der_sources;
9919     END IF;
9920     RAISE;
9921 
9922   WHEN OTHERS                                   THEN
9923     IF c_invalid_sources%ISOPEN THEN
9924       CLOSE c_invalid_sources;
9925     END IF;
9926     IF c_der_sources%ISOPEN THEN
9927       CLOSE c_der_sources;
9928     END IF;
9929     xla_exceptions_pkg.raise_message
9930       (p_location   => 'xla_line_definitions_pvt.chk_mpa_adr_source_event_class');
9931 
9932 END chk_mpa_adr_source_event_class;
9933 
9934 
9935 --======================================================================
9936 --
9937 -- Name: check_mpa_adr_has_loop
9938 -- Description: Returns true if the ADR has an attached ADR which in
9939 -- turn has another ADR attached
9940 --
9941 --======================================================================
9942 FUNCTION check_mpa_adr_has_loop
9943   (p_application_id                   IN NUMBER
9944   ,p_amb_context_code                 IN VARCHAR2
9945   ,p_event_class_code                 IN VARCHAR2
9946   ,p_event_type_code                  IN VARCHAR2
9947   ,p_line_definition_owner_code       IN VARCHAR2
9948   ,p_line_definition_code             IN VARCHAR2)
9949 RETURN BOOLEAN
9950 IS
9951   l_log_module               VARCHAR2(240);
9952 
9953   l_return                   BOOLEAN := TRUE;
9954   l_exist                    VARCHAR2(1);
9955 
9956   CURSOR c_child_adr IS
9957     SELECT distinct xad.segment_rule_appl_id, xad.segment_rule_type_code,
9958                     xad.segment_rule_code,
9959                     xsr.value_segment_rule_appl_id,
9960                     xsr.value_segment_rule_type_code, xsr.value_segment_rule_code
9961       FROM xla_line_defn_jlt_assgns xjl
9962           ,xla_mpa_jlt_adr_assgns   xad
9963           ,xla_seg_rule_details    xsr
9964      WHERE xsr.application_id             = xad.application_id
9965        AND xsr.amb_context_code           = xad.amb_context_code
9966        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
9967        AND xsr.segment_rule_code          = xad.segment_rule_code
9968        AND xsr.value_type_code            = 'A'
9969        AND xad.application_id             = xjl.application_id
9970        AND xad.amb_context_code           = xjl.amb_context_code
9971        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
9972        AND xad.line_definition_code       = xjl.line_definition_code
9973        AND xad.event_class_code           = xjl.event_class_code
9974        AND xad.event_type_code            = xjl.event_type_code
9975        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
9976        AND xad.accounting_line_code       = xjl.accounting_line_code
9977        AND xad.segment_rule_code           is not null
9978        AND xjl.application_id             = p_application_id
9979        AND xjl.amb_context_code           = p_amb_context_code
9980        AND xjl.event_class_code           = p_event_class_code
9981        AND xjl.event_type_code            = p_event_type_code
9982        AND xjl.line_definition_owner_code = p_line_definition_owner_code
9983        AND xjl.line_definition_code       = p_line_definition_code
9984        AND xjl.active_flag                = 'Y'
9985        AND NOT EXISTS (SELECT 'x'
9986                         FROM xla_line_defn_jlt_assgns    xld1
9987                        WHERE xld1.application_id             = xad.application_id
9988                          AND xld1.amb_context_code           = xad.amb_context_code
9989                          AND xld1.event_class_code           = xad.event_class_code
9990                          AND xld1.event_type_code            = xad.event_type_code
9991                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
9992                          AND xld1.line_definition_code       = xad.line_definition_code
9993                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
9994                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code);
9995 
9996   l_child_adr     c_child_adr%rowtype;
9997 
9998   CURSOR c_adr_loop IS
9999   SELECT 'x'
10000     FROM xla_seg_rule_details xsd
10001    WHERE application_id         = l_child_adr.value_segment_rule_appl_id
10002      AND amb_context_code       = p_amb_context_code
10003      AND segment_rule_type_code = l_child_adr.value_segment_rule_type_code
10004      AND segment_rule_code      = l_child_adr.value_segment_rule_code
10005      AND value_type_code        = 'A';
10006 
10007 BEGIN
10008   IF g_log_enabled THEN
10009     l_log_module := C_DEFAULT_MODULE||'.check_mpa_adr_has_loop';
10010   END IF;
10011 
10012   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10013     trace(p_msg    => 'BEGIN of procedure check_mpa_adr_has_loop'
10014          ,p_module => l_log_module
10015          ,p_level  => C_LEVEL_PROCEDURE);
10016   END IF;
10017 
10018   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10019     trace(p_msg    => 'application_id = '||p_application_id||
10020                       ',amb_context_code = '||p_amb_context_code||
10021                       ',event_class_code = '||p_event_class_code||
10022                       ',event_type_code = '||p_event_type_code||
10023                       ',line_definition_owner_code = '||p_line_definition_owner_code||
10024                       ',line_definition_code = '||p_line_definition_code
10025          ,p_module => l_log_module
10026          ,p_level  => C_LEVEL_STATEMENT);
10027   END IF;
10028 
10029   OPEN c_child_adr;
10030   LOOP
10031      FETCH c_child_adr
10032       INTO l_child_adr;
10033      EXIT WHEN c_child_adr%notfound;
10034 
10035      OPEN c_adr_loop;
10036      FETCH c_adr_loop
10037       INTO l_exist;
10038      IF c_adr_loop%found THEN
10039 
10040          l_return := FALSE;
10041 
10042          xla_amb_setup_err_pkg.stack_error
10043               (p_message_name               => 'XLA_AB_MPA_ADR_HAS_LOOP'
10044               ,p_message_type               => 'E'
10045               ,p_message_category           => 'MPA_SEG_RULE'
10046               ,p_category_sequence          => 21
10047               ,p_application_id             => p_application_id
10048               ,p_amb_context_code           => p_amb_context_code
10049               ,p_event_class_code           => p_event_class_code
10050               ,p_event_type_code            => p_event_type_code
10051               ,p_line_definition_owner_code => p_line_definition_owner_code
10052               ,p_line_definition_code       => p_line_definition_code
10053               ,p_segment_rule_type_code     => l_child_adr.segment_rule_type_code
10054               ,p_segment_rule_code          => l_child_adr.segment_rule_code);
10055 
10056      END IF;
10057      CLOSE c_adr_loop;
10058   END LOOP;
10059   CLOSE c_child_adr;
10060 
10061 
10062   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10063     trace(p_msg    => 'END of procedure check_mpa_adr_has_loop'
10064          ,p_module => l_log_module
10065          ,p_level  => C_LEVEL_PROCEDURE);
10066   END IF;
10067 
10068   RETURN l_return;
10069 
10070 EXCEPTION
10071   WHEN xla_exceptions_pkg.application_exception THEN
10072     RAISE;
10073   WHEN OTHERS                                   THEN
10074     xla_exceptions_pkg.raise_message
10075       (p_location   => 'xla_line_definitions_pvt.check_mpa_adr_has_loop');
10076 END check_mpa_adr_has_loop;
10077 
10078 
10079 
10080 --=============================================================================
10081 --
10082 -- Name: validate_mpa_line_adr
10083 -- Description: Validate all ADR assigned to the MPA JLT of the line definition
10084 --              is valid
10085 -- Return Value:
10086 --   TRUE - if all ADR assignments are valid
10087 --   FALSE - if any ADR assignment is invalid
10088 --
10089 --=============================================================================
10090 FUNCTION validate_mpa_line_adr
10091   (p_application_id                   IN NUMBER
10092   ,p_amb_context_code                 IN VARCHAR2
10093   ,p_event_class_code                 IN VARCHAR2
10094   ,p_event_type_code                  IN VARCHAR2
10095   ,p_line_definition_owner_code       IN VARCHAR2
10096   ,p_line_definition_code             IN VARCHAR2)
10097 RETURN BOOLEAN
10098 IS
10099   l_return      BOOLEAN;
10100   l_log_module  VARCHAR2(240);
10101 BEGIN
10102   IF g_log_enabled THEN
10103     l_log_module := C_DEFAULT_MODULE||'.validate_mpa_line_adr';
10104   END IF;
10105 
10106   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10107     trace(p_msg    => 'BEGIN of procedure validate_mpa_line_adr'
10108          ,p_module => l_log_module
10109          ,p_level  => C_LEVEL_PROCEDURE);
10110   END IF;
10111 
10112   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10113     trace(p_msg    => 'application_id = '||p_application_id||
10114                       ',amb_context_code = '||p_amb_context_code||
10115                       ',event_class_code = '||p_event_class_code||
10116                       ',event_type_code = '||p_event_type_code||
10117                       ',line_definition_owner_code = '||p_line_definition_owner_code||
10118                       ',line_definition_code = '||p_line_definition_code
10119          ,p_module => l_log_module
10120          ,p_level  => C_LEVEL_STATEMENT);
10121   END IF;
10122 
10123   l_return := TRUE;
10124 
10125   l_return := chk_mpa_adr_assgn_complete
10126                      (p_application_id             => p_application_id
10127                      ,p_amb_context_code           => p_amb_context_code
10128                      ,p_event_class_code           => p_event_class_code
10129                      ,p_event_type_code            => p_event_type_code
10130                      ,p_line_definition_owner_code => p_line_definition_owner_code
10131                      ,p_line_definition_code       => p_line_definition_code)
10132               AND l_return;
10133 
10134   l_return := chk_mpa_adr_is_enabled
10135                      (p_application_id             => p_application_id
10136                      ,p_amb_context_code           => p_amb_context_code
10137                      ,p_event_class_code           => p_event_class_code
10138                      ,p_event_type_code            => p_event_type_code
10139                      ,p_line_definition_owner_code => p_line_definition_owner_code
10140                      ,p_line_definition_code       => p_line_definition_code)
10141               AND l_return;
10142 
10143   l_return := chk_mpa_adr_has_details
10144                      (p_application_id             => p_application_id
10145                      ,p_amb_context_code           => p_amb_context_code
10146                      ,p_event_class_code           => p_event_class_code
10147                      ,p_event_type_code            => p_event_type_code
10148                      ,p_line_definition_owner_code => p_line_definition_owner_code
10149                      ,p_line_definition_code       => p_line_definition_code)
10150               AND l_return;
10151 
10152   l_return := chk_mpa_adr_inv_source_cond
10153                      (p_application_id             => p_application_id
10154                      ,p_amb_context_code           => p_amb_context_code
10155                      ,p_event_class_code           => p_event_class_code
10156                      ,p_event_type_code            => p_event_type_code
10157                      ,p_line_definition_owner_code => p_line_definition_owner_code
10158                      ,p_line_definition_code       => p_line_definition_code)
10159               AND l_return;
10160 
10161   l_return := chk_mpa_adr_source_event_class
10162                      (p_application_id             => p_application_id
10163                      ,p_amb_context_code           => p_amb_context_code
10164                      ,p_event_class_code           => p_event_class_code
10165                      ,p_event_type_code            => p_event_type_code
10166                      ,p_line_definition_owner_code => p_line_definition_owner_code
10167                      ,p_line_definition_code       => p_line_definition_code)
10168               AND l_return;
10169 
10170   l_return := check_mpa_adr_has_loop
10171                      (p_application_id             => p_application_id
10172                      ,p_amb_context_code           => p_amb_context_code
10173                      ,p_event_class_code           => p_event_class_code
10174                      ,p_event_type_code            => p_event_type_code
10175                      ,p_line_definition_owner_code => p_line_definition_owner_code
10176                      ,p_line_definition_code       => p_line_definition_code)
10177               AND l_return;
10178 
10179   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10180     trace(p_msg    => 'END of procedure validate_mpa_line_adr'
10181          ,p_module => l_log_module
10182          ,p_level  => C_LEVEL_PROCEDURE);
10183   END IF;
10184 
10185   RETURN l_return;
10186 
10187 EXCEPTION
10188   WHEN xla_exceptions_pkg.application_exception THEN
10189     RAISE;
10190   WHEN OTHERS                                   THEN
10191     xla_exceptions_pkg.raise_message
10192       (p_location   => 'xla_line_definitions_pvt.validate_mpa_line_adr');
10193 END validate_mpa_line_adr;
10194 
10195 
10196 --=============================================================================
10197 --
10198 -- Name: chk_mpa_ms_is_enabled
10199 -- Description: Check if all mapping sets assigned to the line definition
10200 --              are enabled
10201 --
10202 --=============================================================================
10203 FUNCTION chk_mpa_ms_is_enabled
10204   (p_application_id                   IN NUMBER
10205   ,p_amb_context_code                 IN VARCHAR2
10206   ,p_event_class_code                 IN VARCHAR2
10207   ,p_event_type_code                  IN VARCHAR2
10208   ,p_line_definition_owner_code       IN VARCHAR2
10209   ,p_line_definition_code             IN VARCHAR2)
10210 RETURN BOOLEAN
10211 IS
10212   CURSOR c_invalid_ms IS
10213    SELECT distinct xsr.segment_rule_code, xsr.segment_rule_type_code,
10214           xsr.value_mapping_set_code
10215      FROM xla_seg_rule_details     xsr
10216          ,xla_mpa_jlt_adr_assgns   xad
10217          ,xla_line_defn_jlt_assgns xjl
10218          ,xla_mapping_sets_b       xms
10219     WHERE xms.mapping_set_code               = xsr.value_mapping_set_code
10220       AND xms.amb_context_code               = xsr.amb_context_code
10221       AND xms.enabled_flag                   <> 'Y'
10222       AND xsr.application_id                 = xad.application_id
10223       AND xsr.amb_context_code               = xad.amb_context_code
10224       AND xsr.segment_rule_type_code         = xad.segment_rule_type_code
10225       AND xsr.segment_rule_code              = xad.segment_rule_code
10226       AND xsr.value_mapping_set_code         IS NOT NULL
10227       AND xad.application_id                 = xjl.application_id
10228       AND xad.amb_context_code               = xjl.amb_context_code
10229       AND xad.line_definition_owner_code     = xjl.line_definition_owner_code
10230       AND xad.line_definition_code           = xjl.line_definition_code
10231       AND xad.event_class_code               = xjl.event_class_code
10232       AND xad.event_type_code                = xjl.event_type_code
10233       AND xad.accounting_line_type_code      = xjl.accounting_line_type_code
10234       AND xad.accounting_line_code           = xjl.accounting_line_code
10235       AND xjl.application_id                 = p_application_id
10236       AND xjl.amb_context_code               = p_amb_context_code
10237       AND xjl.event_class_code               = p_event_class_code
10238       AND xjl.event_type_code                = p_event_type_code
10239       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
10240       AND xjl.line_definition_code           = p_line_definition_code
10241       AND xjl.active_flag                    = 'Y'
10242       AND NOT EXISTS (SELECT 'x'
10243                         FROM xla_line_defn_jlt_assgns    xld1
10244                        WHERE xld1.application_id             = xad.application_id
10245                          AND xld1.amb_context_code           = xad.amb_context_code
10246                          AND xld1.event_class_code           = xad.event_class_code
10247                          AND xld1.event_type_code            = xad.event_type_code
10248                          AND xld1.line_definition_owner_code = xad.line_definition_owner_code
10249                          AND xld1.line_definition_code       = xad.line_definition_code
10250                          AND xld1.accounting_line_type_code  = xad.mpa_accounting_line_type_code
10251                          AND xld1.accounting_line_code       = xad.mpa_accounting_line_code);
10252 
10253   l_return      BOOLEAN;
10254   l_log_module  VARCHAR2(240);
10255 BEGIN
10256   IF g_log_enabled THEN
10257     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_ms_is_enabled';
10258   END IF;
10259 
10260   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10261     trace(p_msg    => 'BEGIN of procedure chk_mpa_ms_is_enabled'
10262          ,p_module => l_log_module
10263          ,p_level  => C_LEVEL_PROCEDURE);
10264   END IF;
10265 
10266   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10267     trace(p_msg    => 'application_id = '||p_application_id||
10268                       ',amb_context_code = '||p_amb_context_code||
10269                       ',event_class_code = '||p_event_class_code||
10270                       ',event_type_code = '||p_event_type_code||
10271                       ',line_definition_owner_code = '||p_line_definition_owner_code||
10272                       ',line_definition_code = '||p_line_definition_code
10273          ,p_module => l_log_module
10274          ,p_level  => C_LEVEL_STATEMENT);
10275   END IF;
10276 
10277   l_return := TRUE;
10278 
10279   FOR l_err IN c_invalid_ms LOOP
10280     l_return := FALSE;
10281 
10282     xla_amb_setup_err_pkg.stack_error
10283               (p_message_name               => 'XLA_AB_MPA_DISABLD_MAPPING_SET'
10284               ,p_message_type               => 'E'
10285               ,p_message_category           => 'MPA_MAPPING_SET'
10286               ,p_category_sequence          => 22
10287               ,p_application_id             => p_application_id
10288               ,p_amb_context_code           => p_amb_context_code
10289               ,p_event_class_code           => p_event_class_code
10290               ,p_event_type_code            => p_event_type_code
10291               ,p_line_definition_owner_code => p_line_definition_owner_code
10292               ,p_line_definition_code       => p_line_definition_code
10293               ,p_segment_rule_type_code     => l_err.segment_rule_type_code
10294               ,p_segment_rule_code          => l_err.segment_rule_code
10295               ,p_mapping_set_code           => l_err.value_mapping_set_code);
10296   END LOOP;
10297 
10298   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10299     trace(p_msg    => 'END of procedure chk_mpa_ms_is_enabled'
10300          ,p_module => l_log_module
10301          ,p_level  => C_LEVEL_PROCEDURE);
10302   END IF;
10303 
10304   RETURN l_return;
10305 
10306 EXCEPTION
10307   WHEN xla_exceptions_pkg.application_exception THEN
10308     IF (c_invalid_ms%ISOPEN) THEN
10309       CLOSE c_invalid_ms;
10310     END IF;
10311     RAISE;
10312 
10313   WHEN OTHERS                                   THEN
10314     IF (c_invalid_ms%ISOPEN) THEN
10315       CLOSE c_invalid_ms;
10316     END IF;
10317     xla_exceptions_pkg.raise_message
10318       (p_location   => 'xla_line_definitions_pvt.chk_mpa_ms_is_enabled');
10319 END chk_mpa_ms_is_enabled;
10320 
10321 --=============================================================================
10322 --
10323 -- Name: validate_mpa_line_ms
10324 -- Description: Validate MPA Mapping Set assignment of the line definition
10325 --
10326 --=============================================================================
10327 FUNCTION validate_mpa_line_ms
10328   (p_application_id                   IN NUMBER
10329   ,p_amb_context_code                 IN VARCHAR2
10330   ,p_event_class_code                 IN VARCHAR2
10331   ,p_event_type_code                  IN VARCHAR2
10332   ,p_line_definition_owner_code       IN VARCHAR2
10333   ,p_line_definition_code             IN VARCHAR2)
10334 RETURN BOOLEAN
10335 IS
10336   l_return      BOOLEAN;
10337   l_log_module  VARCHAR2(240);
10338 BEGIN
10339   IF g_log_enabled THEN
10340     l_log_module := C_DEFAULT_MODULE||'.validate_mpa_line_ms';
10341   END IF;
10342 
10343   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10344     trace(p_msg    => 'BEGIN of procedure validate_mpa_line_ms'
10345          ,p_module => l_log_module
10346          ,p_level  => C_LEVEL_PROCEDURE);
10347   END IF;
10348 
10349   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10350     trace(p_msg    => 'application_id = '||p_application_id||
10351                       ',amb_context_code = '||p_amb_context_code||
10352                       ',event_class_code = '||p_event_class_code||
10353                       ',event_type_code = '||p_event_type_code||
10354                       ',line_definition_owner_code = '||p_line_definition_owner_code||
10355                       ',line_definition_code = '||p_line_definition_code
10356          ,p_module => l_log_module
10357          ,p_level  => C_LEVEL_STATEMENT);
10358   END IF;
10359 
10360   l_return := TRUE;
10361 
10362   l_return := chk_mpa_ms_is_enabled
10363                      (p_application_id             => p_application_id
10364                      ,p_amb_context_code           => p_amb_context_code
10365                      ,p_event_class_code           => p_event_class_code
10366                      ,p_event_type_code            => p_event_type_code
10367                      ,p_line_definition_owner_code => p_line_definition_owner_code
10368                      ,p_line_definition_code       => p_line_definition_code)
10369               AND l_return;
10370 
10371   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10372     trace(p_msg    => 'END of procedure validate_mpa_line_ms'
10373          ,p_module => l_log_module
10374          ,p_level  => C_LEVEL_PROCEDURE);
10375   END IF;
10376 
10377   RETURN l_return;
10378 
10379 EXCEPTION
10380   WHEN xla_exceptions_pkg.application_exception THEN
10381     RAISE;
10382   WHEN OTHERS                                   THEN
10383     xla_exceptions_pkg.raise_message
10384       (p_location   => 'xla_line_definitions_pvt.validate_mpa_line_ms');
10385 END validate_mpa_line_ms;
10386 
10387 
10388 --=============================================================================
10389 --
10390 -- Name: validate_mpa_line_assgns
10391 -- Description: Validate MPA Line assignment of the line definition
10392 --
10393 --=============================================================================
10394 FUNCTION validate_mpa_line_assgns
10395   (p_application_id                   IN NUMBER
10396   ,p_amb_context_code                 IN VARCHAR2
10397   ,p_event_class_code                 IN VARCHAR2
10398   ,p_event_type_code                  IN VARCHAR2
10399   ,p_line_definition_owner_code       IN VARCHAR2
10400   ,p_line_definition_code             IN VARCHAR2)
10401 RETURN BOOLEAN
10402 IS
10403   l_return      BOOLEAN;
10404   l_log_module  VARCHAR2(240);
10405 BEGIN
10406   IF g_log_enabled THEN
10407     l_log_module := C_DEFAULT_MODULE||'.validate_mpa_line_assgns';
10408   END IF;
10409 
10410   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10411     trace(p_msg    => 'BEGIN of procedure validate_mpa_line_assgns'
10412          ,p_module => l_log_module
10413          ,p_level  => C_LEVEL_PROCEDURE);
10414   END IF;
10415 
10416   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10417     trace(p_msg    => 'application_id = '||p_application_id||
10418                       ',amb_context_code = '||p_amb_context_code||
10419                       ',event_class_code = '||p_event_class_code||
10420                       ',event_type_code = '||p_event_type_code||
10421                       ',line_definition_owner_code = '||p_line_definition_owner_code||
10422                       ',line_definition_code = '||p_line_definition_code
10423          ,p_module => l_log_module
10424          ,p_level  => C_LEVEL_STATEMENT);
10425   END IF;
10426 
10427   l_return := TRUE;
10428 
10429   l_return := validate_mpa_jlt_assgns
10430                (p_application_id             => p_application_id
10431                ,p_amb_context_code           => p_amb_context_code
10432                ,p_event_class_code           => p_event_class_code
10433                ,p_event_type_code            => p_event_type_code
10434                ,p_line_definition_owner_code => p_line_definition_owner_code
10435                ,p_line_definition_code       => p_line_definition_code)
10436             AND l_return;
10437 
10438   l_return := validate_mpa_line_desc
10439                (p_application_id             => p_application_id
10440                ,p_amb_context_code           => p_amb_context_code
10441                ,p_event_class_code           => p_event_class_code
10442                ,p_event_type_code            => p_event_type_code
10443                ,p_line_definition_owner_code => p_line_definition_owner_code
10444                ,p_line_definition_code       => p_line_definition_code)
10445             AND l_return;
10446 
10447   l_return := validate_mpa_line_ac
10448                (p_application_id             => p_application_id
10449                ,p_amb_context_code           => p_amb_context_code
10450                ,p_event_class_code           => p_event_class_code
10451                ,p_event_type_code            => p_event_type_code
10452                ,p_line_definition_owner_code => p_line_definition_owner_code
10453                ,p_line_definition_code       => p_line_definition_code)
10454             AND l_return;
10455 
10456   l_return := validate_mpa_line_adr
10457                (p_application_id             => p_application_id
10458                ,p_amb_context_code           => p_amb_context_code
10459                ,p_event_class_code           => p_event_class_code
10460                ,p_event_type_code            => p_event_type_code
10461                ,p_line_definition_owner_code => p_line_definition_owner_code
10462                ,p_line_definition_code       => p_line_definition_code)
10463             AND l_return;
10464 
10465   l_return := validate_mpa_line_ms
10466                (p_application_id             => p_application_id
10467                ,p_amb_context_code           => p_amb_context_code
10468                ,p_event_class_code           => p_event_class_code
10469                ,p_event_type_code            => p_event_type_code
10470                ,p_line_definition_owner_code => p_line_definition_owner_code
10471                ,p_line_definition_code       => p_line_definition_code)
10472             AND l_return;
10473 
10474 RETURN l_return;
10475 
10476   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10477     trace(p_msg    => 'END of procedure validate_mpa_line_assgns'
10478          ,p_module => l_log_module
10479          ,p_level  => C_LEVEL_PROCEDURE);
10480   END IF;
10481 
10482   RETURN l_return;
10483 
10484 EXCEPTION
10485   WHEN xla_exceptions_pkg.application_exception THEN
10486     RAISE;
10487   WHEN OTHERS                                   THEN
10488     xla_exceptions_pkg.raise_message
10489       (p_location   => 'xla_line_definitions_pvt.validate_mpa_line_assgns');
10490 END validate_mpa_line_assgns;
10491 
10492 --=============================================================================
10493 --
10494 -- Name: chk_mpa_hdr_desc_is_enabled
10495 -- Description: Check if all mapping sets assigned to the line definition
10496 --              are enabled
10497 --
10498 --=============================================================================
10499 FUNCTION chk_mpa_hdr_desc_is_enabled
10500   (p_application_id                   IN NUMBER
10501   ,p_amb_context_code                 IN VARCHAR2
10502   ,p_event_class_code                 IN VARCHAR2
10503   ,p_event_type_code                  IN VARCHAR2
10504   ,p_line_definition_owner_code       IN VARCHAR2
10505   ,p_line_definition_code             IN VARCHAR2)
10506 RETURN BOOLEAN
10507 IS
10508   CURSOR c_invalid_hdr_desc IS
10509    SELECT distinct xdb.description_type_code, xdb.description_code
10510      FROM xla_line_defn_jlt_assgns xjl
10511          ,xla_descriptions_b       xdb
10512     WHERE xjl.application_id             = p_application_id
10513       AND xjl.amb_context_code           = p_amb_context_code
10514       AND xjl.event_class_code           = p_event_class_code
10515       AND xjl.event_type_code            = p_event_type_code
10516       AND xjl.line_definition_owner_code = p_line_definition_owner_code
10517       AND xjl.line_definition_code       = p_line_definition_code
10518       AND xjl.active_flag                = 'Y'
10519       AND xjl.mpa_header_desc_type_code  IS NOT NULL
10520       AND xdb.application_id             = xjl.application_id
10521       AND xdb.amb_context_code           = xjl.amb_context_code
10522       AND xdb.description_type_code      = xjl.mpa_header_desc_type_code
10523       AND xdb.description_code           = xjl.mpa_header_desc_code
10524       AND xdb.enabled_flag               <> 'Y';
10525 
10526   l_return      BOOLEAN;
10527   l_log_module  VARCHAR2(240);
10528 BEGIN
10529   IF g_log_enabled THEN
10530     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_hdr_desc_is_enabled';
10531   END IF;
10532 
10533   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10534     trace(p_msg    => 'BEGIN of procedure chk_mpa_hdr_desc_is_enabled'
10535          ,p_module => l_log_module
10536          ,p_level  => C_LEVEL_PROCEDURE);
10537   END IF;
10538 
10539   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10540     trace(p_msg    => 'application_id = '||p_application_id||
10541                       ',amb_context_code = '||p_amb_context_code||
10542                       ',event_class_code = '||p_event_class_code||
10543                       ',event_type_code = '||p_event_type_code||
10544                       ',line_definition_owner_code = '||p_line_definition_owner_code||
10545                       ',line_definition_code = '||p_line_definition_code
10546          ,p_module => l_log_module
10547          ,p_level  => C_LEVEL_STATEMENT);
10548   END IF;
10549 
10550   l_return := TRUE;
10551 
10552   FOR l_err IN c_invalid_hdr_desc LOOP
10553     l_return := FALSE;
10554 
10555     xla_amb_setup_err_pkg.stack_error
10556               (p_message_name               => 'XLA_AB_MPA_DISABLD_HDR_DESC'
10557               ,p_message_type               => 'E'
10558               ,p_message_category           => 'MPA_HDR_DESC'
10559               ,p_category_sequence          => 15
10560               ,p_application_id             => p_application_id
10561               ,p_amb_context_code           => p_amb_context_code
10562               ,p_event_class_code           => p_event_class_code
10563               ,p_event_type_code            => p_event_type_code
10564               ,p_line_definition_owner_code => p_line_definition_owner_code
10565               ,p_line_definition_code       => p_line_definition_code
10566               ,p_description_type_code     => l_err.description_type_code
10567               ,p_description_code          => l_err.description_code);
10568   END LOOP;
10569 
10570   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10571     trace(p_msg    => 'END of procedure chk_mpa_hdr_desc_is_enabled'
10572          ,p_module => l_log_module
10573          ,p_level  => C_LEVEL_PROCEDURE);
10574   END IF;
10575 
10576   RETURN l_return;
10577 
10578 EXCEPTION
10579   WHEN xla_exceptions_pkg.application_exception THEN
10580     RAISE;
10581 
10582   WHEN OTHERS                                   THEN
10583     xla_exceptions_pkg.raise_message
10584       (p_location   => 'xla_line_definitions_pvt.chk_mpa_hdr_desc_is_enabled');
10585 END chk_mpa_hdr_desc_is_enabled;
10586 
10587 --=============================================================================
10588 --
10589 -- Name: chk_mpa_hdr_desc_inv_src_dtl
10590 -- Description: Check if all mapping sets assigned to the line definition
10591 --              are enabled
10592 --
10593 --=============================================================================
10594 FUNCTION chk_mpa_hdr_desc_inv_src_dtl
10595   (p_application_id                   IN NUMBER
10596   ,p_amb_context_code                 IN VARCHAR2
10597   ,p_event_class_code                 IN VARCHAR2
10598   ,p_event_type_code                  IN VARCHAR2
10599   ,p_line_definition_owner_code       IN VARCHAR2
10600   ,p_line_definition_code             IN VARCHAR2)
10601 RETURN BOOLEAN
10602 IS
10603   CURSOR c_invalid_sources IS
10604    SELECT distinct xjl.mpa_header_desc_type_code, xjl.mpa_header_desc_code,
10605           xdd.source_type_code, xdd.source_code
10606      FROM xla_descript_details_b   xdd
10607          ,xla_desc_priorities      xdp
10608          ,xla_line_defn_jlt_assgns xjl
10609     WHERE xdd.description_prio_id        = xdp.description_prio_id
10610       AND xdp.application_id             = xjl.application_id
10611       AND xdp.amb_context_code           = xjl.amb_context_code
10612       AND xdp.description_type_code      = xjl.mpa_header_desc_type_code
10613       AND xdp.description_code           = xjl.mpa_header_desc_code
10614       AND xjl.application_id             = p_application_id
10615       AND xjl.amb_context_code           = p_amb_context_code
10616       AND xjl.event_class_code           = p_event_class_code
10617       AND xjl.event_type_code            = p_event_type_code
10618       AND xjl.line_definition_owner_code = p_line_definition_owner_code
10619       AND xjl.line_definition_code       = p_line_definition_code
10620       AND xjl.active_flag                = 'Y'
10621       AND xdd.source_type_code           = 'S'
10622       AND NOT EXISTS
10623           (SELECT 'y'
10624              FROM xla_event_sources xes
10625             WHERE xes.source_application_id = xdd.source_application_id
10626               AND xes.source_type_code      = xdd.source_type_code
10627               AND xes.source_code           = xdd.source_code
10628               AND xes.application_id        = xjl.application_id
10629               AND xes.event_class_code      = xjl.event_class_code
10630               AND xes.active_flag           = 'Y');
10631 
10632   CURSOR c_der_sources IS
10633    SELECT distinct xjl.mpa_header_desc_type_code, xjl.mpa_header_desc_code,
10634           xdd.source_type_code, xdd.source_code
10635      FROM xla_descript_details_b   xdd
10636          ,xla_desc_priorities      xdp
10637          ,xla_line_defn_jlt_assgns xjl
10638     WHERE xdd.description_prio_id        = xdp.description_prio_id
10639       AND xdp.application_id             = xjl.application_id
10640       AND xdp.amb_context_code           = xjl.amb_context_code
10641       AND xdp.description_type_code      = xjl.mpa_header_desc_type_code
10642       AND xdp.description_code           = xjl.mpa_header_desc_code
10643       AND xjl.application_id             = p_application_id
10644       AND xjl.amb_context_code           = p_amb_context_code
10645       AND xjl.event_class_code           = p_event_class_code
10646       AND xjl.event_type_code            = p_event_type_code
10647       AND xjl.line_definition_owner_code = p_line_definition_owner_code
10648       AND xjl.line_definition_code       = p_line_definition_code
10649       AND xjl.active_flag                = 'Y'
10650       AND xdd.source_type_code           = 'D';
10651 
10652   l_return      BOOLEAN;
10653   l_log_module  VARCHAR2(240);
10654 BEGIN
10655   IF g_log_enabled THEN
10656     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_hdr_desc_inv_src_dtl';
10657   END IF;
10658 
10659   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10660     trace(p_msg    => 'BEGIN of procedure chk_mpa_hdr_desc_inv_src_dtl'
10661          ,p_module => l_log_module
10662          ,p_level  => C_LEVEL_PROCEDURE);
10663   END IF;
10664 
10665   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10666     trace(p_msg    => 'application_id = '||p_application_id||
10667                       ',amb_context_code = '||p_amb_context_code||
10668                       ',event_class_code = '||p_event_class_code||
10669                       ',event_type_code = '||p_event_type_code||
10670                       ',line_definition_owner_code = '||p_line_definition_owner_code||
10671                       ',line_definition_code = '||p_line_definition_code
10672          ,p_module => l_log_module
10673          ,p_level  => C_LEVEL_STATEMENT);
10674   END IF;
10675 
10676   l_return := TRUE;
10677 
10678   FOR l_err IN c_invalid_sources LOOP
10679     l_return := FALSE;
10680 
10681     xla_amb_setup_err_pkg.stack_error
10682               (p_message_name               => 'XLA_AB_MPA_HDR_DES_DET_SRC'
10683               ,p_message_type               => 'E'
10684               ,p_message_category           => 'MPA_HDR_DESC'
10685               ,p_category_sequence          => 15
10686               ,p_application_id             => p_application_id
10687               ,p_amb_context_code           => p_amb_context_code
10688               ,p_line_definition_owner_code => p_line_definition_owner_code
10689               ,p_line_definition_code       => p_line_definition_code
10690               ,p_event_class_code           => p_event_class_code
10691               ,p_event_type_code            => p_event_type_code
10692               ,p_description_type_code      => l_err.mpa_header_desc_type_code
10693               ,p_description_code           => l_err.mpa_header_desc_code
10694               ,p_source_type_code           => l_err.source_type_code
10695               ,p_source_code                => l_err.source_code);
10696   END LOOP;
10697 
10698   FOR l_err IN c_der_sources LOOP
10699     IF xla_sources_pkg.derived_source_is_invalid
10700               (p_application_id           => p_application_id
10701               ,p_derived_source_code      => l_err.source_code
10702               ,p_derived_source_type_code => 'D'
10703               ,p_event_class_code         => p_event_class_code
10704               ,p_level                    => 'L') = 'TRUE' THEN
10705 
10706       l_return := FALSE;
10707 
10708       xla_amb_setup_err_pkg.stack_error
10709               (p_message_name               => 'XLA_AB_MPA_HDR_DES_DET_SRC'
10710               ,p_message_type               => 'E'
10711               ,p_message_category           => 'MPA_HDR_DESC'
10712               ,p_category_sequence          => 15
10713               ,p_application_id             => p_application_id
10714               ,p_amb_context_code           => p_amb_context_code
10715               ,p_line_definition_owner_code => p_line_definition_owner_code
10716               ,p_line_definition_code       => p_line_definition_code
10717               ,p_event_class_code           => p_event_class_code
10718               ,p_event_type_code            => p_event_type_code
10719               ,p_description_type_code      => l_err.mpa_header_desc_type_code
10720               ,p_description_code           => l_err.mpa_header_desc_code
10721               ,p_source_type_code           => l_err.source_type_code
10722               ,p_source_code                => l_err.source_code);
10723 
10724     END IF;
10725   END LOOP;
10726 
10727 
10728   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10729     trace(p_msg    => 'END of procedure chk_mpa_hdr_desc_inv_src_dtl'
10730          ,p_module => l_log_module
10731          ,p_level  => C_LEVEL_PROCEDURE);
10732   END IF;
10733 
10734   RETURN l_return;
10735 
10736 EXCEPTION
10737   WHEN xla_exceptions_pkg.application_exception THEN
10738     RAISE;
10739 
10740   WHEN OTHERS                                   THEN
10741     xla_exceptions_pkg.raise_message
10742       (p_location   => 'xla_line_definitions_pvt.chk_mpa_hdr_desc_inv_src_dtl');
10743 END chk_mpa_hdr_desc_inv_src_dtl;
10744 
10745 --=============================================================================
10746 --
10747 -- Name: chk_mpa_hdr_desc_inv_src_cond
10748 -- Description: Check if all mapping sets assigned to the line definition
10749 --              are enabled
10750 --
10751 --=============================================================================
10752 FUNCTION chk_mpa_hdr_desc_inv_src_cond
10753   (p_application_id                   IN NUMBER
10754   ,p_amb_context_code                 IN VARCHAR2
10755   ,p_event_class_code                 IN VARCHAR2
10756   ,p_event_type_code                  IN VARCHAR2
10757   ,p_line_definition_owner_code       IN VARCHAR2
10758   ,p_line_definition_code             IN VARCHAR2)
10759 RETURN BOOLEAN
10760 IS
10761   CURSOR c_invalid_sources IS
10762    SELECT distinct xjl.mpa_header_desc_type_code, xjl.mpa_header_desc_code,
10763           xco.source_type_code source_type_code, xco.source_code source_code
10764      FROM xla_conditions           xco
10765          ,xla_desc_priorities      xdp
10766          ,xla_line_defn_jlt_assgns xjl
10767     WHERE xco.description_prio_id        = xdp.description_prio_id
10768       AND xdp.application_id             = xjl.application_id
10769       AND xdp.amb_context_code           = xjl.amb_context_code
10770       AND xdp.description_type_code      = xjl.mpa_header_desc_type_code
10771       AND xdp.description_code           = xjl.mpa_header_desc_code
10772       AND xjl.application_id             = p_application_id
10773       AND xjl.amb_context_code           = p_amb_context_code
10774       AND xjl.event_class_code           = p_event_class_code
10775       AND xjl.event_type_code            = p_event_type_code
10776       AND xjl.line_definition_owner_code = p_line_definition_owner_code
10777       AND xjl.line_definition_code       = p_line_definition_code
10778       AND xjl.active_flag                = 'Y'
10779       AND xco.source_type_code           = 'S'
10780       AND NOT EXISTS
10781           (SELECT 'y'
10782              FROM xla_event_sources xes
10783             WHERE xes.source_application_id = xco.source_application_id
10784               AND xes.source_type_code      = xco.source_type_code
10785               AND xes.source_code           = xco.source_code
10786               AND xes.application_id        = xjl.application_id
10787               AND xes.event_class_code      = xjl.event_class_code
10788               AND xes.active_flag           = 'Y')
10789    UNION
10790    SELECT distinct xjl.mpa_header_desc_type_code, xjl.mpa_header_desc_code,
10791           xco.value_source_type_code source_type_code, xco.value_source_code source_code
10792      FROM xla_conditions           xco
10793          ,xla_desc_priorities      xdp
10794          ,xla_line_defn_jlt_assgns xjl
10795     WHERE xco.description_prio_id        = xdp.description_prio_id
10796       AND xdp.application_id             = xjl.application_id
10797       AND xdp.amb_context_code           = xjl.amb_context_code
10798       AND xdp.description_type_code      = xjl.mpa_header_desc_type_code
10799       AND xdp.description_code           = xjl.mpa_header_desc_code
10800       AND xjl.application_id             = p_application_id
10801       AND xjl.amb_context_code           = p_amb_context_code
10802       AND xjl.event_class_code           = p_event_class_code
10803       AND xjl.event_type_code            = p_event_type_code
10804       AND xjl.line_definition_owner_code = p_line_definition_owner_code
10805       AND xjl.line_definition_code       = p_line_definition_code
10806       AND xjl.active_flag                = 'Y'
10807       AND xco.value_source_type_code     = 'S'
10808       AND NOT EXISTS
10809           (SELECT 'y'
10810              FROM xla_event_sources xes
10811             WHERE xes.source_application_id = xco.value_source_application_id
10812               AND xes.source_type_code      = xco.value_source_type_code
10813               AND xes.source_code           = xco.value_source_code
10814               AND xes.application_id        = xjl.application_id
10815               AND xes.event_class_code      = xjl.event_class_code
10816               AND xes.active_flag           = 'Y');
10817 
10818   CURSOR c_der_sources IS
10819    SELECT distinct xjl.mpa_header_desc_type_code, xjl.mpa_header_desc_code,
10820           xco.source_type_code source_type_code, xco.source_code source_code
10821      FROM xla_conditions           xco
10822          ,xla_desc_priorities      xdp
10823          ,xla_line_defn_jlt_assgns xjl
10824     WHERE xco.description_prio_id        = xdp.description_prio_id
10825       AND xdp.application_id             = xjl.application_id
10826       AND xdp.amb_context_code           = xjl.amb_context_code
10827       AND xdp.description_type_code      = xjl.mpa_header_desc_type_code
10828       AND xdp.description_code           = xjl.mpa_header_desc_code
10829       AND xjl.application_id             = p_application_id
10830       AND xjl.amb_context_code           = p_amb_context_code
10831       AND xjl.event_class_code           = p_event_class_code
10832       AND xjl.event_type_code            = p_event_type_code
10833       AND xjl.line_definition_owner_code = p_line_definition_owner_code
10834       AND xjl.line_definition_code       = p_line_definition_code
10835       AND xjl.active_flag                = 'Y'
10836       AND xco.source_type_code           = 'D'
10837    UNION
10838    SELECT distinct xjl.mpa_header_desc_type_code, xjl.mpa_header_desc_code,
10839           xco.value_source_type_code source_type_code, xco.value_source_code source_code
10840      FROM xla_conditions           xco
10841          ,xla_desc_priorities      xdp
10842          ,xla_line_defn_jlt_assgns xjl
10843     WHERE xco.description_prio_id        = xdp.description_prio_id
10844       AND xdp.application_id             = xjl.application_id
10845       AND xdp.amb_context_code           = xjl.amb_context_code
10846       AND xdp.description_type_code      = xjl.mpa_header_desc_type_code
10847       AND xdp.description_code           = xjl.mpa_header_desc_code
10848       AND xjl.application_id             = p_application_id
10849       AND xjl.amb_context_code           = p_amb_context_code
10850       AND xjl.event_class_code           = p_event_class_code
10851       AND xjl.event_type_code            = p_event_type_code
10852       AND xjl.line_definition_owner_code = p_line_definition_owner_code
10853       AND xjl.line_definition_code       = p_line_definition_code
10854       AND xjl.active_flag                = 'Y'
10855       AND xco.value_source_type_code     = 'D';
10856 
10857   l_return      BOOLEAN;
10858   l_log_module  VARCHAR2(240);
10859 BEGIN
10860   IF g_log_enabled THEN
10861     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_hdr_desc_inv_src_cond';
10862   END IF;
10863 
10864   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10865     trace(p_msg    => 'BEGIN of procedure chk_mpa_hdr_desc_inv_src_cond'
10866          ,p_module => l_log_module
10867          ,p_level  => C_LEVEL_PROCEDURE);
10868   END IF;
10869 
10870   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10871     trace(p_msg    => 'application_id = '||p_application_id||
10872                       ',amb_context_code = '||p_amb_context_code||
10873                       ',event_class_code = '||p_event_class_code||
10874                       ',event_type_code = '||p_event_type_code||
10875                       ',line_definition_owner_code = '||p_line_definition_owner_code||
10876                       ',line_definition_code = '||p_line_definition_code
10877          ,p_module => l_log_module
10878          ,p_level  => C_LEVEL_STATEMENT);
10879   END IF;
10880 
10881   l_return := TRUE;
10882 
10883   FOR l_err IN c_invalid_sources LOOP
10884     l_return := FALSE;
10885 
10886     xla_amb_setup_err_pkg.stack_error
10887               (p_message_name               => 'XLA_AB_MPA_HDR_DES_CON_SRC'
10888               ,p_message_type               => 'E'
10889               ,p_message_category           => 'MPA_HDR_DESC'
10890               ,p_category_sequence          => 15
10891               ,p_application_id             => p_application_id
10892               ,p_amb_context_code           => p_amb_context_code
10893               ,p_line_definition_owner_code => p_line_definition_owner_code
10894               ,p_line_definition_code       => p_line_definition_code
10895               ,p_event_class_code           => p_event_class_code
10896               ,p_event_type_code            => p_event_type_code
10897               ,p_description_type_code      => l_err.mpa_header_desc_type_code
10898               ,p_description_code           => l_err.mpa_header_desc_code
10899               ,p_source_type_code           => l_err.source_type_code
10900               ,p_source_code                => l_err.source_code);
10901   END LOOP;
10902 
10903   FOR l_err IN c_der_sources LOOP
10904     IF xla_sources_pkg.derived_source_is_invalid
10905               (p_application_id           => p_application_id
10906               ,p_derived_source_code      => l_err.source_code
10907               ,p_derived_source_type_code => 'D'
10908               ,p_event_class_code         => p_event_class_code
10909               ,p_level                    => 'L') = 'TRUE' THEN
10910 
10911       l_return := FALSE;
10912 
10913       xla_amb_setup_err_pkg.stack_error
10914               (p_message_name               => 'XLA_AB_MPA_HDR_DES_CON_SRC'
10915               ,p_message_type               => 'E'
10916               ,p_message_category           => 'MPA_HDR_DESC'
10917               ,p_category_sequence          => 15
10918               ,p_application_id             => p_application_id
10919               ,p_amb_context_code           => p_amb_context_code
10920               ,p_line_definition_owner_code => p_line_definition_owner_code
10921               ,p_line_definition_code       => p_line_definition_code
10922               ,p_event_class_code           => p_event_class_code
10923               ,p_event_type_code            => p_event_type_code
10924               ,p_description_type_code      => l_err.mpa_header_desc_type_code
10925               ,p_description_code           => l_err.mpa_header_desc_code
10926               ,p_source_type_code           => l_err.source_type_code
10927               ,p_source_code                => l_err.source_code);
10928 
10929     END IF;
10930   END LOOP;
10931 
10932   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10933     trace(p_msg    => 'END of procedure chk_mpa_hdr_desc_inv_src_cond'
10934          ,p_module => l_log_module
10935          ,p_level  => C_LEVEL_PROCEDURE);
10936   END IF;
10937 
10938   RETURN l_return;
10939 
10940 EXCEPTION
10941   WHEN xla_exceptions_pkg.application_exception THEN
10942     RAISE;
10943 
10944   WHEN OTHERS                                   THEN
10945     xla_exceptions_pkg.raise_message
10946       (p_location   => 'xla_line_definitions_pvt.chk_mpa_hdr_desc_inv_src_cond');
10947 END chk_mpa_hdr_desc_inv_src_cond;
10948 
10949 --=============================================================================
10950 --
10951 -- Name: chk_mpa_hdr_ac_is_enabled
10952 -- Description: Check if all mapping sets assigned to the line definition
10953 --              are enabled
10954 --
10955 --=============================================================================
10956 FUNCTION chk_mpa_hdr_ac_is_enabled
10957   (p_application_id                   IN NUMBER
10958   ,p_amb_context_code                 IN VARCHAR2
10959   ,p_event_class_code                 IN VARCHAR2
10960   ,p_event_type_code                  IN VARCHAR2
10961   ,p_line_definition_owner_code       IN VARCHAR2
10962   ,p_line_definition_code             IN VARCHAR2)
10963 RETURN BOOLEAN
10964 IS
10965   CURSOR c_invalid_line_ac IS
10966    SELECT distinct xah.analytical_criterion_type_code, xah.analytical_criterion_code
10967      FROM xla_mpa_header_ac_assgns  xac
10968          ,xla_line_defn_jlt_assgns xjl
10969          ,xla_analytical_hdrs_b    xah
10970     WHERE xah.amb_context_code               = xac.amb_context_code
10971       AND xah.analytical_criterion_code      = xac.analytical_criterion_code
10972       AND xah.analytical_criterion_type_code = xac.analytical_criterion_type_code
10973       AND xah.enabled_flag                   <> 'Y'
10974       AND xac.application_id                 = xjl.application_id
10975       AND xac.amb_context_code               = xjl.amb_context_code
10976       AND xac.event_class_code               = xjl.event_class_code
10977       AND xac.event_type_code                = xjl.event_type_code
10978       AND xac.line_definition_code           = xjl.line_definition_code
10979       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
10980       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
10981       AND xac.accounting_line_code           = xjl.accounting_line_code
10982       AND xjl.application_id                 = p_application_id
10983       AND xjl.amb_context_code               = p_amb_context_code
10984       AND xjl.event_class_code               = p_event_class_code
10985       AND xjl.event_type_code                = p_event_type_code
10986       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
10987       AND xjl.line_definition_code           = p_line_definition_code
10988       AND xjl.active_flag                    = 'Y';
10989 
10990   l_return      BOOLEAN;
10991   l_log_module  VARCHAR2(240);
10992 BEGIN
10993   IF g_log_enabled THEN
10994     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_hdr_ac_is_enabled';
10995   END IF;
10996 
10997   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10998     trace(p_msg    => 'BEGIN of procedure chk_mpa_hdr_ac_is_enabled'
10999          ,p_module => l_log_module
11000          ,p_level  => C_LEVEL_PROCEDURE);
11001   END IF;
11002 
11003   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
11004     trace(p_msg    => 'application_id = '||p_application_id||
11005                       ',amb_context_code = '||p_amb_context_code||
11006                       ',event_class_code = '||p_event_class_code||
11007                       ',event_type_code = '||p_event_type_code||
11008                       ',line_definition_owner_code = '||p_line_definition_owner_code||
11009                       ',line_definition_code = '||p_line_definition_code
11010          ,p_module => l_log_module
11011          ,p_level  => C_LEVEL_STATEMENT);
11012   END IF;
11013 
11014   l_return := TRUE;
11015 
11016   FOR l_err IN c_invalid_line_ac LOOP
11017     l_return := FALSE;
11018 
11019     xla_amb_setup_err_pkg.stack_error
11020               (p_message_name               => 'XLA_AB_MPA_DISABLD_HDR_AC'
11021               ,p_message_type               => 'E'
11022               ,p_message_category           => 'MPA_HDR_AC'
11023               ,p_category_sequence          => 16
11024               ,p_application_id             => p_application_id
11025               ,p_amb_context_code           => p_amb_context_code
11026               ,p_event_class_code           => p_event_class_code
11027               ,p_event_type_code            => p_event_type_code
11028               ,p_line_definition_owner_code => p_line_definition_owner_code
11029               ,p_line_definition_code       => p_line_definition_code
11030               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
11031               ,p_anal_criterion_code        => l_err.analytical_criterion_code);
11032   END LOOP;
11033 
11034   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11035     trace(p_msg    => 'END of procedure chk_mpa_hdr_ac_is_enabled'
11036          ,p_module => l_log_module
11037          ,p_level  => C_LEVEL_PROCEDURE);
11038   END IF;
11039 
11040   RETURN l_return;
11041 
11042 EXCEPTION
11043   WHEN xla_exceptions_pkg.application_exception THEN
11044     RAISE;
11045 
11046   WHEN OTHERS                                   THEN
11047     xla_exceptions_pkg.raise_message
11048       (p_location   => 'xla_line_definitions_pvt.chk_mpa_hdr_ac_is_enabled');
11049 END chk_mpa_hdr_ac_is_enabled;
11050 
11051 --=============================================================================
11052 --
11053 -- Name: chk_mpa_hdr_ac_bal
11054 -- Description: Check if all mapping sets assigned to the line definition
11055 --              are enabled
11056 --
11057 --=============================================================================
11058 FUNCTION chk_mpa_hdr_ac_bal
11059   (p_application_id                   IN NUMBER
11060   ,p_amb_context_code                 IN VARCHAR2
11061   ,p_event_class_code                 IN VARCHAR2
11062   ,p_event_type_code                  IN VARCHAR2
11063   ,p_line_definition_owner_code       IN VARCHAR2
11064   ,p_line_definition_code             IN VARCHAR2)
11065 RETURN BOOLEAN
11066 IS
11067   CURSOR c_invalid_line_ac IS
11068    SELECT distinct xah.analytical_criterion_type_code, xah.analytical_criterion_code
11069      FROM xla_mpa_header_ac_assgns  xac
11070          ,xla_line_defn_jlt_assgns xjl
11071          ,xla_analytical_hdrs_b    xah
11072     WHERE xah.amb_context_code               = xac.amb_context_code
11073       AND xah.analytical_criterion_code      = xac.analytical_criterion_code
11074       AND xah.analytical_criterion_type_code = xac.analytical_criterion_type_code
11075       AND xah.balancing_flag                 = 'Y'
11076       AND xac.application_id                 = xjl.application_id
11077       AND xac.amb_context_code               = xjl.amb_context_code
11078       AND xac.event_class_code               = xjl.event_class_code
11079       AND xac.event_type_code                = xjl.event_type_code
11080       AND xac.line_definition_code           = xjl.line_definition_code
11081       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
11082       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
11083       AND xac.accounting_line_code           = xjl.accounting_line_code
11084       AND xjl.application_id                 = p_application_id
11085       AND xjl.amb_context_code               = p_amb_context_code
11086       AND xjl.event_class_code               = p_event_class_code
11087       AND xjl.event_type_code                = p_event_type_code
11088       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
11089       AND xjl.line_definition_code           = p_line_definition_code
11090       AND xjl.active_flag                    = 'Y';
11091 
11092   l_return      BOOLEAN;
11093   l_log_module  VARCHAR2(240);
11094 BEGIN
11095   IF g_log_enabled THEN
11096     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_hdr_ac_bal';
11097   END IF;
11098 
11099   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11100     trace(p_msg    => 'BEGIN of procedure chk_mpa_hdr_ac_bal'
11101          ,p_module => l_log_module
11102          ,p_level  => C_LEVEL_PROCEDURE);
11103   END IF;
11104 
11105   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
11106     trace(p_msg    => 'application_id = '||p_application_id||
11107                       ',amb_context_code = '||p_amb_context_code||
11108                       ',event_class_code = '||p_event_class_code||
11109                       ',event_type_code = '||p_event_type_code||
11110                       ',line_definition_owner_code = '||p_line_definition_owner_code||
11111                       ',line_definition_code = '||p_line_definition_code
11112          ,p_module => l_log_module
11113          ,p_level  => C_LEVEL_STATEMENT);
11114   END IF;
11115 
11116   l_return := TRUE;
11117 
11118   FOR l_err IN c_invalid_line_ac LOOP
11119     l_return := FALSE;
11120 
11121     xla_amb_setup_err_pkg.stack_error
11122               (p_message_name               => 'XLA_AB_MPA_ANC_MAINTAIN_BAL'
11123               ,p_message_type               => 'E'
11124               ,p_message_category           => 'MPA_HDR_AC'
11125               ,p_category_sequence          => 16
11126               ,p_application_id             => p_application_id
11127               ,p_amb_context_code           => p_amb_context_code
11128               ,p_event_class_code           => p_event_class_code
11129               ,p_event_type_code            => p_event_type_code
11130               ,p_line_definition_owner_code => p_line_definition_owner_code
11131               ,p_line_definition_code       => p_line_definition_code
11132               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
11133               ,p_anal_criterion_code        => l_err.analytical_criterion_code);
11134   END LOOP;
11135 
11136   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11137     trace(p_msg    => 'END of procedure chk_mpa_hdr_ac_bal'
11138          ,p_module => l_log_module
11139          ,p_level  => C_LEVEL_PROCEDURE);
11140   END IF;
11141 
11142   RETURN l_return;
11143 
11144 EXCEPTION
11145   WHEN xla_exceptions_pkg.application_exception THEN
11146     RAISE;
11147 
11148   WHEN OTHERS                                   THEN
11149     xla_exceptions_pkg.raise_message
11150       (p_location   => 'xla_line_definitions_pvt.chk_mpa_hdr_ac_bal');
11151 END chk_mpa_hdr_ac_bal;
11152 
11153 --=============================================================================
11154 --
11155 -- Name: chk_mpa_hdr_ac_has_details
11156 -- Description: Check if all mapping sets assigned to the line definition
11157 --              are enabled
11158 --
11159 --=============================================================================
11160 FUNCTION chk_mpa_hdr_ac_has_details
11161   (p_application_id                   IN NUMBER
11162   ,p_amb_context_code                 IN VARCHAR2
11163   ,p_event_class_code                 IN VARCHAR2
11164   ,p_event_type_code                  IN VARCHAR2
11165   ,p_line_definition_owner_code       IN VARCHAR2
11166   ,p_line_definition_code             IN VARCHAR2)
11167 RETURN BOOLEAN
11168 IS
11169   CURSOR c_invalid_ac IS
11170    SELECT distinct xac.analytical_criterion_type_code, xac.analytical_criterion_code
11171      FROM xla_mpa_header_ac_assgns  xac
11172          ,xla_line_defn_jlt_assgns xjl
11173     WHERE xac.application_id                 = xjl.application_id
11174       AND xac.amb_context_code               = xjl.amb_context_code
11175       AND xac.event_class_code               = xjl.event_class_code
11176       AND xac.event_type_code                = xjl.event_type_code
11177       AND xac.line_definition_code           = xjl.line_definition_code
11178       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
11179       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
11180       AND xac.accounting_line_code           = xjl.accounting_line_code
11181       AND xjl.application_id                 = p_application_id
11182       AND xjl.amb_context_code               = p_amb_context_code
11183       AND xjl.event_class_code               = p_event_class_code
11184       AND xjl.event_type_code                = p_event_type_code
11185       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
11186       AND xjl.line_definition_code           = p_line_definition_code
11187       AND xjl.active_flag                    = 'Y'
11188       AND NOT EXISTS
11189           (SELECT 'x'
11190              FROM xla_analytical_sources  xas
11191             WHERE xas.application_id                 = xac.application_id
11192               AND xas.amb_context_code               = xac.amb_context_code
11193               AND xas.event_class_code               = xac.event_class_code
11194               AND xas.analytical_criterion_code      = xac.analytical_criterion_code
11195               AND xas.analytical_criterion_type_code = xac.analytical_criterion_type_code);
11196 
11197   l_return      BOOLEAN;
11198   l_log_module  VARCHAR2(240);
11199 BEGIN
11200   IF g_log_enabled THEN
11201     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_hdr_ac_has_details';
11202   END IF;
11203 
11204   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11205     trace(p_msg    => 'BEGIN of procedure chk_mpa_hdr_ac_has_details'
11206          ,p_module => l_log_module
11207          ,p_level  => C_LEVEL_PROCEDURE);
11208   END IF;
11209 
11210   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
11211     trace(p_msg    => 'application_id = '||p_application_id||
11212                       ',amb_context_code = '||p_amb_context_code||
11213                       ',event_class_code = '||p_event_class_code||
11214                       ',event_type_code = '||p_event_type_code||
11215                       ',line_definition_owner_code = '||p_line_definition_owner_code||
11216                       ',line_definition_code = '||p_line_definition_code
11217          ,p_module => l_log_module
11218          ,p_level  => C_LEVEL_STATEMENT);
11219   END IF;
11220 
11221   l_return := TRUE;
11222 
11223   FOR l_err IN c_invalid_ac LOOP
11224     l_return := FALSE;
11225 
11226     xla_amb_setup_err_pkg.stack_error
11227               (p_message_name               => 'XLA_AB_MPA_HDR_ANC_NO_DETAIL'
11228               ,p_message_type               => 'E'
11229               ,p_message_category           => 'MPA_HDR_AC'
11230               ,p_category_sequence          => 16
11231               ,p_application_id             => p_application_id
11232               ,p_amb_context_code           => p_amb_context_code
11233               ,p_event_class_code           => p_event_class_code
11234               ,p_event_type_code            => p_event_type_code
11235               ,p_line_definition_owner_code => p_line_definition_owner_code
11236               ,p_line_definition_code       => p_line_definition_code
11237               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
11238               ,p_anal_criterion_code        => l_err.analytical_criterion_code);
11239   END LOOP;
11240 
11241   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11242     trace(p_msg    => 'END of procedure chk_mpa_hdr_ac_has_details'
11243          ,p_module => l_log_module
11244          ,p_level  => C_LEVEL_PROCEDURE);
11245   END IF;
11246 
11247   RETURN l_return;
11248 
11249 EXCEPTION
11250   WHEN xla_exceptions_pkg.application_exception THEN
11251     RAISE;
11252 
11253   WHEN OTHERS                                   THEN
11254     xla_exceptions_pkg.raise_message
11255       (p_location   => 'xla_line_definitions_pvt.chk_mpa_hdr_ac_has_details');
11256 END chk_mpa_hdr_ac_has_details;
11257 
11258 --=============================================================================
11259 --
11260 -- Name: chk_mpa_hdr_ac_inv_sources
11261 -- Description: Check if all mapping sets assigned to the line definition
11262 --              are enabled
11263 --
11264 --=============================================================================
11265 FUNCTION chk_mpa_hdr_ac_inv_sources
11266   (p_application_id                   IN NUMBER
11267   ,p_amb_context_code                 IN VARCHAR2
11268   ,p_event_class_code                 IN VARCHAR2
11269   ,p_event_type_code                  IN VARCHAR2
11270   ,p_line_definition_owner_code       IN VARCHAR2
11271   ,p_line_definition_code             IN VARCHAR2)
11272 RETURN BOOLEAN
11273 IS
11274   CURSOR c_invalid_sources IS
11275    SELECT distinct  xas.analytical_criterion_type_code, xas.analytical_criterion_code,
11276           xas.source_code, xas.source_type_code
11277      FROM xla_analytical_sources   xas
11278          ,xla_mpa_header_ac_assgns  xac
11279          ,xla_line_defn_jlt_assgns xjl
11280          ,xla_event_sources        xes
11281     WHERE xas.application_id                 = xac.application_id
11282       AND xas.amb_context_code               = xac.amb_context_code
11283       AND xas.event_class_code               = xac.event_class_code
11284       AND xas.analytical_criterion_code      = xac.analytical_criterion_code
11285       AND xas.analytical_criterion_type_code = xac.analytical_criterion_type_code
11286       AND xas.source_type_code               = 'S'
11287       AND xac.application_id                 = xjl.application_id
11288       AND xac.amb_context_code               = xjl.amb_context_code
11289       AND xac.event_class_code               = xjl.event_class_code
11290       AND xac.event_type_code                = xjl.event_type_code
11291       AND xac.line_definition_code           = xjl.line_definition_code
11292       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
11293       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
11294       AND xac.accounting_line_code           = xjl.accounting_line_code
11295       AND xjl.application_id                 = p_application_id
11296       AND xjl.amb_context_code               = p_amb_context_code
11297       AND xjl.event_class_code               = p_event_class_code
11298       AND xjl.event_type_code                = p_event_type_code
11299       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
11300       AND xjl.line_definition_code           = p_line_definition_code
11301       AND xjl.active_flag                    = 'Y'
11302       AND not exists (SELECT 'y'
11303                         FROM xla_event_sources xes
11304                        WHERE xes.source_application_id = xas.source_application_id
11305                          AND xes.source_type_code      = xas.source_type_code
11306                          AND xes.source_code           = xas.source_code
11307                          AND xes.application_id        = xas.application_id
11308                          AND xes.event_class_code      = xas.event_class_code
11309                          AND xes.active_flag           = 'Y');
11310 
11311   CURSOR c_der_sources IS
11312    SELECT distinct xas.analytical_criterion_type_code, xas.analytical_criterion_code,
11313           xas.source_code, xas.source_type_code
11314      FROM xla_analytical_sources   xas
11315          ,xla_mpa_header_ac_assgns  xac
11316          ,xla_line_defn_jlt_assgns xjl
11317     WHERE xas.application_id                 = xac.application_id
11318       AND xas.amb_context_code               = xac.amb_context_code
11319       AND xas.event_class_code               = xac.event_class_code
11320       AND xas.analytical_criterion_code      = xac.analytical_criterion_code
11321       AND xas.analytical_criterion_type_code = xac.analytical_criterion_type_code
11322       AND xas.source_type_code               = 'D'
11323       AND xac.application_id                 = xjl.application_id
11324       AND xac.amb_context_code               = xjl.amb_context_code
11325       AND xac.event_class_code               = xjl.event_class_code
11326       AND xac.event_type_code                = xjl.event_type_code
11327       AND xac.line_definition_code           = xjl.line_definition_code
11328       AND xac.line_definition_owner_code     = xjl.line_definition_owner_code
11329       AND xac.accounting_line_type_code      = xjl.accounting_line_type_code
11330       AND xac.accounting_line_code           = xjl.accounting_line_code
11331       AND xjl.application_id                 = p_application_id
11332       AND xjl.amb_context_code               = p_amb_context_code
11333       AND xjl.event_class_code               = p_event_class_code
11334       AND xjl.event_type_code                = p_event_type_code
11335       AND xjl.line_definition_owner_code     = p_line_definition_owner_code
11336       AND xjl.line_definition_code           = p_line_definition_code
11337       AND xjl.active_flag                    = 'Y';
11338 
11339   l_return      BOOLEAN;
11340   l_log_module  VARCHAR2(240);
11341 BEGIN
11342   IF g_log_enabled THEN
11343     l_log_module := C_DEFAULT_MODULE||'.chk_mpa_hdr_ac_inv_sources';
11344   END IF;
11345 
11346   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11347     trace(p_msg    => 'BEGIN of procedure chk_mpa_hdr_ac_inv_sources'
11348          ,p_module => l_log_module
11349          ,p_level  => C_LEVEL_PROCEDURE);
11350   END IF;
11351 
11352   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
11353     trace(p_msg    => 'application_id = '||p_application_id||
11354                       ',amb_context_code = '||p_amb_context_code||
11355                       ',event_class_code = '||p_event_class_code||
11356                       ',event_type_code = '||p_event_type_code||
11357                       ',line_definition_owner_code = '||p_line_definition_owner_code||
11358                       ',line_definition_code = '||p_line_definition_code
11359          ,p_module => l_log_module
11360          ,p_level  => C_LEVEL_STATEMENT);
11361   END IF;
11362 
11363   l_return := TRUE;
11364 
11365   FOR l_err IN c_invalid_sources LOOP
11366 
11367     l_return := FALSE;
11368     xla_amb_setup_err_pkg.stack_error
11369               (p_message_name               => 'XLA_AB_MPA_HDR_ANC_SOURCE'
11370               ,p_message_type               => 'E'
11371               ,p_message_category           => 'MPA_HDR_AC'
11372               ,p_category_sequence          => 16
11373               ,p_application_id             => p_application_id
11374               ,p_amb_context_code           => p_amb_context_code
11375               ,p_event_class_code           => p_event_class_code
11376               ,p_event_type_code            => p_event_type_code
11377               ,p_line_definition_owner_code => p_line_definition_owner_code
11378               ,p_line_definition_code       => p_line_definition_code
11379               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
11380               ,p_anal_criterion_code        => l_err.analytical_criterion_code
11381               ,p_source_code                => l_err.source_code
11382               ,p_source_type_code           => l_err.source_type_code);
11383   END LOOP;
11384 
11385   FOR l_err IN c_der_sources LOOP
11386     IF xla_sources_pkg.derived_source_is_invalid
11387               (p_application_id           => p_application_id
11388               ,p_derived_source_code      => l_err.source_code
11389               ,p_derived_source_type_code => 'D'
11390               ,p_event_class_code         => p_event_class_code
11391               ,p_level                    => 'L')  = 'TRUE' THEN
11392 
11393       l_return := FALSE;
11394       xla_amb_setup_err_pkg.stack_error
11395               (p_message_name               => 'XLA_AB_MPA_HDR_ANC_SOURCE'
11396               ,p_message_type               => 'E'
11397               ,p_message_category           => 'MPA_HDR_AC'
11398               ,p_category_sequence          => 16
11399               ,p_application_id             => p_application_id
11400               ,p_amb_context_code           => p_amb_context_code
11401               ,p_event_class_code           => p_event_class_code
11402               ,p_event_type_code            => p_event_type_code
11403               ,p_line_definition_owner_code => p_line_definition_owner_code
11404               ,p_line_definition_code       => p_line_definition_code
11405               ,p_anal_criterion_type_code   => l_err.analytical_criterion_type_code
11406               ,p_anal_criterion_code        => l_err.analytical_criterion_code
11407               ,p_source_code                => l_err.source_code
11408               ,p_source_type_code           => l_err.source_type_code);
11409     END IF;
11410   END LOOP;
11411   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11412     trace(p_msg    => 'END of procedure chk_mpa_hdr_ac_inv_sources'
11413          ,p_module => l_log_module
11414          ,p_level  => C_LEVEL_PROCEDURE);
11415   END IF;
11416 
11417   RETURN l_return;
11418 
11419 EXCEPTION
11420   WHEN xla_exceptions_pkg.application_exception THEN
11421     RAISE;
11422 
11423   WHEN OTHERS                                   THEN
11424     xla_exceptions_pkg.raise_message
11425       (p_location   => 'xla_line_definitions_pvt.chk_mpa_hdr_ac_inv_sources');
11426 END chk_mpa_hdr_ac_inv_sources;
11427 
11428 
11429 --=============================================================================
11430 --
11431 -- Name: validate_mpa_header_assgns
11432 -- Description: Validate MPA Header assignment of the line definition
11433 --
11434 --=============================================================================
11435 FUNCTION validate_mpa_header_assgns
11436   (p_application_id                   IN NUMBER
11437   ,p_amb_context_code                 IN VARCHAR2
11438   ,p_event_class_code                 IN VARCHAR2
11439   ,p_event_type_code                  IN VARCHAR2
11440   ,p_line_definition_owner_code       IN VARCHAR2
11441   ,p_line_definition_code             IN VARCHAR2)
11442 RETURN BOOLEAN
11443 IS
11444   l_return      BOOLEAN;
11445   l_log_module  VARCHAR2(240);
11446 BEGIN
11447   IF g_log_enabled THEN
11448     l_log_module := C_DEFAULT_MODULE||'.validate_mpa_header_assgns';
11449   END IF;
11450 
11451   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11452     trace(p_msg    => 'BEGIN of procedure validate_mpa_header_assgns'
11453          ,p_module => l_log_module
11454          ,p_level  => C_LEVEL_PROCEDURE);
11455   END IF;
11456 
11457   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
11458     trace(p_msg    => 'application_id = '||p_application_id||
11459                       ',amb_context_code = '||p_amb_context_code||
11460                       ',event_class_code = '||p_event_class_code||
11461                       ',event_type_code = '||p_event_type_code||
11462                       ',line_definition_owner_code = '||p_line_definition_owner_code||
11463                       ',line_definition_code = '||p_line_definition_code
11464          ,p_module => l_log_module
11465          ,p_level  => C_LEVEL_STATEMENT);
11466   END IF;
11467 
11468   l_return := TRUE;
11469 
11470   l_return := chk_mpa_hdr_desc_is_enabled
11471                (p_application_id             => p_application_id
11472                ,p_amb_context_code           => p_amb_context_code
11473                ,p_event_class_code           => p_event_class_code
11474                ,p_event_type_code            => p_event_type_code
11475                ,p_line_definition_owner_code => p_line_definition_owner_code
11476                ,p_line_definition_code       => p_line_definition_code)
11477             AND l_return;
11478 
11479   l_return := chk_mpa_hdr_desc_inv_src_cond
11480                (p_application_id             => p_application_id
11481                ,p_amb_context_code           => p_amb_context_code
11482                ,p_event_class_code           => p_event_class_code
11483                ,p_event_type_code            => p_event_type_code
11484                ,p_line_definition_owner_code => p_line_definition_owner_code
11485                ,p_line_definition_code       => p_line_definition_code)
11486             AND l_return;
11487 
11488   l_return := chk_mpa_hdr_desc_inv_src_dtl
11489                (p_application_id             => p_application_id
11490                ,p_amb_context_code           => p_amb_context_code
11491                ,p_event_class_code           => p_event_class_code
11492                ,p_event_type_code            => p_event_type_code
11493                ,p_line_definition_owner_code => p_line_definition_owner_code
11494                ,p_line_definition_code       => p_line_definition_code)
11495             AND l_return;
11496 
11497   l_return := chk_mpa_hdr_ac_is_enabled
11498                (p_application_id             => p_application_id
11499                ,p_amb_context_code           => p_amb_context_code
11500                ,p_event_class_code           => p_event_class_code
11501                ,p_event_type_code            => p_event_type_code
11502                ,p_line_definition_owner_code => p_line_definition_owner_code
11503                ,p_line_definition_code       => p_line_definition_code)
11504             AND l_return;
11505 
11506   l_return := chk_mpa_hdr_ac_bal
11507                (p_application_id             => p_application_id
11508                ,p_amb_context_code           => p_amb_context_code
11509                ,p_event_class_code           => p_event_class_code
11510                ,p_event_type_code            => p_event_type_code
11511                ,p_line_definition_owner_code => p_line_definition_owner_code
11512                ,p_line_definition_code       => p_line_definition_code)
11513             AND l_return;
11514 
11515   l_return := chk_mpa_hdr_ac_has_details
11516                (p_application_id             => p_application_id
11517                ,p_amb_context_code           => p_amb_context_code
11518                ,p_event_class_code           => p_event_class_code
11519                ,p_event_type_code            => p_event_type_code
11520                ,p_line_definition_owner_code => p_line_definition_owner_code
11521                ,p_line_definition_code       => p_line_definition_code)
11522             AND l_return;
11523 
11524   l_return := chk_mpa_hdr_ac_inv_sources
11525                (p_application_id             => p_application_id
11526                ,p_amb_context_code           => p_amb_context_code
11527                ,p_event_class_code           => p_event_class_code
11528                ,p_event_type_code            => p_event_type_code
11529                ,p_line_definition_owner_code => p_line_definition_owner_code
11530                ,p_line_definition_code       => p_line_definition_code)
11531             AND l_return;
11532 
11533 RETURN l_return;
11534 
11535   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11536     trace(p_msg    => 'END of procedure validate_mpa_header_assgns'
11537          ,p_module => l_log_module
11538          ,p_level  => C_LEVEL_PROCEDURE);
11539   END IF;
11540 
11541   RETURN l_return;
11542 
11543 EXCEPTION
11544   WHEN xla_exceptions_pkg.application_exception THEN
11545     RAISE;
11546   WHEN OTHERS                                   THEN
11547     xla_exceptions_pkg.raise_message
11548       (p_location   => 'xla_line_definitions_pvt.validate_mpa_header_assgns');
11549 END validate_mpa_header_assgns;
11550 
11551 
11552 
11553 --=============================================================================
11554 --
11555 --
11556 --
11557 --
11558 --
11559 --          *********** public procedures and functions **********
11560 --
11561 --
11562 --
11563 --
11564 --
11565 --=============================================================================
11566 
11567 
11568 --=============================================================================
11569 --
11570 -- Name: delete_line_defn_details
11571 -- Description: Deletes all details of the line definition
11572 --
11573 --=============================================================================
11574 PROCEDURE delete_line_defn_details
11575   (p_application_id                   IN NUMBER
11576   ,p_amb_context_code                 IN VARCHAR2
11577   ,p_event_class_code                 IN VARCHAR2
11578   ,p_event_type_code                  IN VARCHAR2
11579   ,p_line_definition_owner_code       IN VARCHAR2
11580   ,p_line_definition_code             IN VARCHAR2)
11581 IS
11582   l_log_module  VARCHAR2(240);
11583 BEGIN
11584   IF g_log_enabled THEN
11585     l_log_module := C_DEFAULT_MODULE||'.delete_line_defn_details';
11586   END IF;
11587 
11588   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11589     trace(p_msg    => 'BEGIN of procedure delete_line_defn_details'
11590          ,p_module => l_log_module
11591          ,p_level  => C_LEVEL_PROCEDURE);
11592   END IF;
11593 
11594   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
11595     trace(p_msg    => 'application_id = '||p_application_id||
11596                       ',amb_context_code = '||p_amb_context_code||
11597                       ',event_class_code = '||p_event_class_code||
11598                       ',event_type_code = '||p_event_type_code||
11599                       ',line_definition_owner_code = '||p_line_definition_owner_code||
11600                       ',line_definition_code = '||p_line_definition_code
11601          ,p_module => l_log_module
11602          ,p_level  => C_LEVEL_STATEMENT);
11603   END IF;
11604 
11605   DELETE
11606     FROM xla_line_defn_adr_assgns
11607    WHERE application_id             = p_application_id
11608      AND amb_context_code           = p_amb_context_code
11609      AND event_class_code           = p_event_class_code
11610      AND event_type_code            = p_event_type_code
11611      AND line_definition_owner_code = p_line_definition_owner_code
11612      AND line_definition_code       = p_line_definition_code;
11613 
11614   DELETE
11615     FROM xla_line_defn_ac_assgns
11616    WHERE application_id            = p_application_id
11617      AND amb_context_code          = p_amb_context_code
11618      AND event_class_code          = p_event_class_code
11619      AND event_type_code           = p_event_type_code
11620      AND line_definition_owner_code = p_line_definition_owner_code
11621      AND line_definition_code      = p_line_definition_code;
11622 
11623   DELETE
11624     FROM xla_line_defn_jlt_assgns
11625    WHERE application_id            = p_application_id
11626      AND amb_context_code          = p_amb_context_code
11627      AND event_class_code          = p_event_class_code
11628      AND event_type_code           = p_event_type_code
11629      AND line_definition_owner_code = p_line_definition_owner_code
11630      AND line_definition_code      = p_line_definition_code;
11631 
11632   DELETE
11633     FROM xla_mpa_header_ac_assgns
11634    WHERE application_id            = p_application_id
11635      AND amb_context_code          = p_amb_context_code
11636      AND event_class_code          = p_event_class_code
11637      AND event_type_code           = p_event_type_code
11638      AND line_definition_owner_code = p_line_definition_owner_code
11639      AND line_definition_code      = p_line_definition_code;
11640 
11641   DELETE
11642     FROM xla_mpa_jlt_assgns
11643    WHERE application_id            = p_application_id
11644      AND amb_context_code          = p_amb_context_code
11645      AND event_class_code          = p_event_class_code
11646      AND event_type_code           = p_event_type_code
11647      AND line_definition_owner_code = p_line_definition_owner_code
11648      AND line_definition_code      = p_line_definition_code;
11649 
11650   DELETE
11651     FROM xla_mpa_jlt_adr_assgns
11652    WHERE application_id            = p_application_id
11653      AND amb_context_code          = p_amb_context_code
11654      AND event_class_code          = p_event_class_code
11655      AND event_type_code           = p_event_type_code
11656      AND line_definition_owner_code = p_line_definition_owner_code
11657      AND line_definition_code      = p_line_definition_code;
11658 
11659   DELETE
11660     FROM xla_mpa_jlt_ac_assgns
11661    WHERE application_id            = p_application_id
11662      AND amb_context_code          = p_amb_context_code
11663      AND event_class_code          = p_event_class_code
11664      AND event_type_code           = p_event_type_code
11665      AND line_definition_owner_code = p_line_definition_owner_code
11666      AND line_definition_code      = p_line_definition_code;
11667 
11668 
11669   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11670     trace(p_msg    => 'END of procedure delete_line_defn_details'
11671          ,p_module => l_log_module
11672          ,p_level  => C_LEVEL_PROCEDURE);
11673   END IF;
11674 
11675 EXCEPTION
11676   WHEN xla_exceptions_pkg.application_exception THEN
11677     RAISE;
11678   WHEN OTHERS                                   THEN
11679     xla_exceptions_pkg.raise_message
11680       (p_location   => 'xla_line_definitions_pvt.delete_line_defn_details');
11681 END delete_line_defn_details;
11682 
11683 --=============================================================================
11684 --
11685 -- Name: delete_line_defn_jlt_details
11686 -- Description: Deletes all details of the line assignment
11687 --
11688 --=============================================================================
11689 PROCEDURE delete_line_defn_jlt_details
11690   (p_application_id                   IN NUMBER
11691   ,p_amb_context_code                 IN VARCHAR2
11692   ,p_event_class_code                 IN VARCHAR2
11693   ,p_event_type_code                  IN VARCHAR2
11694   ,p_line_definition_owner_code        IN VARCHAR2
11695   ,p_line_definition_code             IN VARCHAR2
11696   ,p_accounting_line_type_code        IN VARCHAR2
11697   ,p_accounting_line_code             IN VARCHAR2)
11698 IS
11699   l_log_module  VARCHAR2(240);
11700 BEGIN
11701   IF g_log_enabled THEN
11702     l_log_module := C_DEFAULT_MODULE||'.delete_line_defn_jlt_details';
11703   END IF;
11704 
11705   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11706     trace(p_msg    => 'BEGIN of procedure delete_line_defn_jlt_details'
11707          ,p_module => l_log_module
11708          ,p_level  => C_LEVEL_PROCEDURE);
11709   END IF;
11710 
11711   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
11712     trace(p_msg    => 'application_id = '||p_application_id||
11713                       ',amb_context_code = '||p_amb_context_code||
11714                       ',event_class_code = '||p_event_class_code||
11715                       ',event_type_code = '||p_event_type_code||
11716                       ',line_definition_owner_code = '||p_line_definition_owner_code||
11717                       ',line_definition_code = '||p_line_definition_code||
11718                       ',accounting_line_type_code = '||p_accounting_line_type_code||
11719                       ',accounting_line_code = '||p_accounting_line_code
11720          ,p_module => l_log_module
11721          ,p_level  => C_LEVEL_STATEMENT);
11722   END IF;
11723 
11724   DELETE
11725     FROM xla_line_defn_adr_assgns
11726    WHERE application_id            = p_application_id
11727      AND amb_context_code          = p_amb_context_code
11728      AND event_class_code          = p_event_class_code
11729      AND event_type_code           = p_event_type_code
11730      AND line_definition_owner_code = p_line_definition_owner_code
11731      AND line_definition_code      = p_line_definition_code
11732      AND accounting_line_type_code = p_accounting_line_type_code
11733      AND accounting_line_code      = p_accounting_line_code;
11734 
11735   DELETE
11736     FROM xla_line_defn_ac_assgns
11737    WHERE application_id            = p_application_id
11738      AND amb_context_code          = p_amb_context_code
11739      AND event_class_code          = p_event_class_code
11740      AND event_type_code           = p_event_type_code
11741      AND line_definition_owner_code = p_line_definition_owner_code
11742      AND line_definition_code      = p_line_definition_code
11743      AND accounting_line_type_code = p_accounting_line_type_code
11744      AND accounting_line_code      = p_accounting_line_code;
11745 
11746   -- Added for MPA project.  4262811.
11747   DELETE
11748     FROM xla_mpa_header_ac_assgns
11749    WHERE application_id            = p_application_id
11750      AND amb_context_code          = p_amb_context_code
11751      AND event_class_code          = p_event_class_code
11752      AND event_type_code           = p_event_type_code
11753      AND line_definition_owner_code = p_line_definition_owner_code
11754      AND line_definition_code      = p_line_definition_code
11755      AND accounting_line_type_code = p_accounting_line_type_code
11756      AND accounting_line_code      = p_accounting_line_code;
11757 
11758   DELETE
11759     FROM xla_mpa_jlt_assgns
11760    WHERE application_id            = p_application_id
11761      AND amb_context_code          = p_amb_context_code
11762      AND event_class_code          = p_event_class_code
11763      AND event_type_code           = p_event_type_code
11764      AND line_definition_owner_code = p_line_definition_owner_code
11765      AND line_definition_code      = p_line_definition_code
11766      AND accounting_line_type_code = p_accounting_line_type_code
11767      AND accounting_line_code      = p_accounting_line_code;
11768 
11769   DELETE
11770     FROM xla_mpa_jlt_adr_assgns
11771    WHERE application_id            = p_application_id
11772      AND amb_context_code          = p_amb_context_code
11773      AND event_class_code          = p_event_class_code
11774      AND event_type_code           = p_event_type_code
11775      AND line_definition_owner_code = p_line_definition_owner_code
11776      AND line_definition_code      = p_line_definition_code
11777      AND accounting_line_type_code = p_accounting_line_type_code
11778      AND accounting_line_code      = p_accounting_line_code;
11779 
11780   DELETE
11781     FROM xla_mpa_jlt_ac_assgns
11782    WHERE application_id            = p_application_id
11783      AND amb_context_code          = p_amb_context_code
11784      AND event_class_code          = p_event_class_code
11785      AND event_type_code           = p_event_type_code
11786      AND line_definition_owner_code = p_line_definition_owner_code
11787      AND line_definition_code      = p_line_definition_code
11788      AND accounting_line_type_code = p_accounting_line_type_code
11789      AND accounting_line_code      = p_accounting_line_code;
11790 
11791   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11792     trace(p_msg    => 'END of procedure delete_line_defn_jlt_details'
11793          ,p_module => l_log_module
11794          ,p_level  => C_LEVEL_PROCEDURE);
11795   END IF;
11796 
11797 EXCEPTION
11798   WHEN xla_exceptions_pkg.application_exception THEN
11799     RAISE;
11800   WHEN OTHERS                                   THEN
11801     xla_exceptions_pkg.raise_message
11802       (p_location   => 'xla_line_definitions_pvt.delete_line_defn_jlt_details');
11803 END delete_line_defn_jlt_details;
11804 
11805 --=============================================================================
11806 --
11807 -- Name: copy_line_definition_details
11808 -- Description: Copies the details of an existing line definition into the new
11809 --              one
11810 --
11811 --=============================================================================
11812 PROCEDURE copy_line_definition_details
11813   (p_application_id                   IN NUMBER
11814   ,p_amb_context_code                 IN VARCHAR2
11815   ,p_event_class_code                 IN VARCHAR2
11816   ,p_event_type_code                  IN VARCHAR2
11817   ,p_old_line_defn_owner_code         IN VARCHAR2
11818   ,p_old_line_defn_code               IN VARCHAR2
11819   ,p_new_line_defn_owner_code         IN VARCHAR2
11820   ,p_new_line_defn_code               IN VARCHAR2
11821   ,p_old_accounting_coa_id            IN NUMBER
11822   ,p_new_accounting_coa_id            IN NUMBER)
11823 IS
11824   l_creation_date                   DATE := sysdate;
11825   l_last_update_date                DATE := sysdate;
11826   l_created_by                      INTEGER := xla_environment_pkg.g_usr_id;
11827   l_last_update_login               INTEGER := xla_environment_pkg.g_login_id;
11828   l_last_updated_by                 INTEGER := xla_environment_pkg.g_usr_id;
11829 
11830   l_log_module  VARCHAR2(240);
11831 BEGIN
11832   IF g_log_enabled THEN
11833     l_log_module := C_DEFAULT_MODULE||'.copy_line_definition_details';
11834   END IF;
11835 
11836   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
11837     trace(p_msg    => 'BEGIN of procedure copy_line_definition_details'
11838          ,p_module => l_log_module
11839          ,p_level  => C_LEVEL_PROCEDURE);
11840   END IF;
11841 
11842   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
11843     trace(p_msg    => 'application_id = '||p_application_id||
11844                       ',amb_context_code = '||p_amb_context_code||
11845                       ',event_class_code = '||p_event_class_code||
11846                       ',event_type_code = '||p_event_type_code||
11847                       ',old_line_definition_owner_code = '||p_old_line_defn_owner_code||
11848                       ',old_line_definition_owner_code = '||p_old_line_defn_owner_code||
11849                       ',old_line_defn_code = '||p_old_line_defn_code||
11850                       ',new_line_defn_owner_code = '||p_new_line_defn_owner_code||
11851                       ',new_line_defn_code = '||p_new_line_defn_code
11852          ,p_module => l_log_module
11853          ,p_level  => C_LEVEL_PROCEDURE);
11854   END IF;
11855 
11856   INSERT INTO xla_line_defn_jlt_assgns
11857             (application_id
11858             ,amb_context_code
11859             ,event_class_code
11860             ,event_type_code
11861             ,line_definition_owner_code
11862             ,line_definition_code
11863             ,accounting_line_type_code
11864             ,accounting_line_code
11865             ,description_type_code
11866             ,description_code
11867             ,active_flag
11868             ,object_version_number
11869             ,inherit_desc_flag
11870 	    ,mpa_header_desc_code
11871 	    ,mpa_header_desc_type_code
11872 	    ,mpa_num_je_code
11873 	    ,mpa_gl_dates_code
11874 	    ,mpa_proration_code
11875             ,creation_date
11876             ,created_by
11877             ,last_update_date
11878             ,last_updated_by
11879             ,last_update_login)
11880     SELECT
11881              application_id
11882             ,amb_context_code
11883             ,event_class_code
11884             ,event_type_code
11885             ,p_new_line_defn_owner_code
11886             ,p_new_line_defn_code
11887             ,accounting_line_type_code
11888             ,accounting_line_code
11889             ,description_type_code
11890             ,description_code
11891             ,active_flag
11892             ,1
11893             ,inherit_desc_flag
11894 	    ,mpa_header_desc_code
11895 	    ,mpa_header_desc_type_code
11896 	    ,mpa_num_je_code
11897 	    ,mpa_gl_dates_code
11898 	    ,mpa_proration_code
11899             ,l_creation_date
11900             ,l_created_by
11901             ,l_last_update_date
11902             ,l_last_updated_by
11903             ,l_last_update_login
11904       FROM xla_line_defn_jlt_assgns
11905      WHERE application_id             = p_application_id
11906        AND amb_context_code           = p_amb_context_code
11907        AND event_class_code           = p_event_class_code
11908        AND event_type_code            = p_event_type_code
11909        AND line_definition_owner_code = p_old_line_defn_owner_code
11910        AND line_definition_code       = p_old_line_defn_code;
11911 
11912   INSERT INTO xla_mpa_header_ac_assgns
11913             (application_id
11914             ,amb_context_code
11915             ,event_class_code
11916             ,event_type_code
11917             ,line_definition_owner_code
11918             ,line_definition_code
11919             ,accounting_line_type_code
11920             ,accounting_line_code
11921             ,analytical_criterion_type_code
11922             ,analytical_criterion_code
11923             ,object_version_number
11924             ,creation_date
11925             ,created_by
11926             ,last_update_date
11927             ,last_updated_by
11928             ,last_update_login)
11929     SELECT
11930              application_id
11931             ,amb_context_code
11932             ,event_class_code
11933             ,event_type_code
11934             ,p_new_line_defn_owner_code
11935             ,p_new_line_defn_code
11936             ,accounting_line_type_code
11937             ,accounting_line_code
11938             ,analytical_criterion_type_code
11939             ,analytical_criterion_code
11940             ,1
11941             ,l_creation_date
11942             ,l_created_by
11943             ,l_last_update_date
11944             ,l_last_updated_by
11945             ,l_last_update_login
11946       FROM xla_mpa_header_ac_assgns
11947      WHERE application_id             = p_application_id
11948        AND amb_context_code           = p_amb_context_code
11949        AND event_class_code           = p_event_class_code
11950        AND event_type_code            = p_event_type_code
11951        AND line_definition_owner_code = p_old_line_defn_owner_code
11952        AND line_definition_code       = p_old_line_defn_code;
11953 
11954   INSERT INTO xla_mpa_jlt_assgns
11955             (application_id
11956             ,amb_context_code
11957             ,event_class_code
11958             ,event_type_code
11959             ,line_definition_owner_code
11960             ,line_definition_code
11961             ,accounting_line_type_code
11962             ,accounting_line_code
11963 	    ,mpa_accounting_line_type_code
11964 	    ,mpa_accounting_line_code
11965             ,description_type_code
11966             ,description_code
11967             ,object_version_number
11968             ,inherit_desc_flag
11969             ,creation_date
11970             ,created_by
11971             ,last_update_date
11972             ,last_updated_by
11973             ,last_update_login)
11974     SELECT
11975              application_id
11976             ,amb_context_code
11977             ,event_class_code
11978             ,event_type_code
11979             ,p_new_line_defn_owner_code
11980             ,p_new_line_defn_code
11981             ,accounting_line_type_code
11982             ,accounting_line_code
11983 	    ,mpa_accounting_line_type_code
11984 	    ,mpa_accounting_line_code
11985 	    ,description_type_code
11986             ,description_code
11987             ,1
11988             ,inherit_desc_flag
11989             ,l_creation_date
11990             ,l_created_by
11991             ,l_last_update_date
11992             ,l_last_updated_by
11993             ,l_last_update_login
11994       FROM xla_mpa_jlt_assgns
11995      WHERE application_id             = p_application_id
11996        AND amb_context_code           = p_amb_context_code
11997        AND event_class_code           = p_event_class_code
11998        AND event_type_code            = p_event_type_code
11999        AND line_definition_owner_code = p_old_line_defn_owner_code
12000        AND line_definition_code       = p_old_line_defn_code;
12001 
12002 
12003   IF p_new_accounting_coa_id is not null and p_old_accounting_coa_id is null THEN
12004 
12005      INSERT INTO xla_line_defn_adr_assgns
12006             (application_id
12007             ,amb_context_code
12008             ,event_class_code
12009             ,event_type_code
12010             ,line_definition_owner_code
12011             ,line_definition_code
12012             ,accounting_line_type_code
12013             ,accounting_line_code
12014             ,flexfield_segment_code
12015             ,adr_version_num
12016             ,segment_rule_appl_id
12017             ,segment_rule_type_code
12018             ,segment_rule_code
12019             ,side_code
12020             ,object_version_number
12021             ,inherit_adr_flag
12022             ,creation_date
12023             ,created_by
12024             ,last_update_date
12025             ,last_updated_by
12026             ,last_update_login)
12027        SELECT
12028              application_id
12029             ,amb_context_code
12030             ,event_class_code
12031             ,event_type_code
12032             ,p_new_line_defn_owner_code
12033             ,p_new_line_defn_code
12034             ,accounting_line_type_code
12035             ,accounting_line_code
12036             ,flexfield_segment_code
12037             ,adr_version_num
12038             ,segment_rule_appl_id
12039             ,segment_rule_type_code
12040             ,segment_rule_code
12041             ,side_code
12042             ,1
12043             ,inherit_adr_flag
12044             ,l_creation_date
12045             ,l_created_by
12046             ,l_last_update_date
12047             ,l_last_updated_by
12048             ,l_last_update_login
12049          FROM xla_line_defn_adr_assgns
12050         WHERE application_id             = p_application_id
12051           AND amb_context_code           = p_amb_context_code
12052           AND event_class_code           = p_event_class_code
12053           AND event_type_code            = p_event_type_code
12054           AND line_definition_owner_code = p_old_line_defn_owner_code
12055           AND line_definition_code       = p_old_line_defn_code
12056           AND flexfield_segment_code     = 'ALL'
12057        UNION
12058        SELECT
12059              application_id
12060             ,amb_context_code
12061             ,event_class_code
12062             ,event_type_code
12063             ,p_new_line_defn_owner_code
12064             ,p_new_line_defn_code
12065             ,accounting_line_type_code
12066             ,accounting_line_code
12067             ,xla_flex_pkg.get_qualifier_segment
12068                (101
12069                ,'GL#'
12070                ,p_new_accounting_coa_id
12071                ,flexfield_segment_code)
12072             ,adr_version_num
12073             ,segment_rule_appl_id
12074             ,segment_rule_type_code
12075             ,segment_rule_code
12076             ,side_code
12077             ,1
12078             ,inherit_adr_flag
12079             ,l_creation_date
12080             ,l_created_by
12081             ,l_last_update_date
12082             ,l_last_updated_by
12083             ,l_last_update_login
12084          FROM xla_line_defn_adr_assgns
12085         WHERE application_id             = p_application_id
12086           AND amb_context_code           = p_amb_context_code
12087           AND event_class_code           = p_event_class_code
12088           AND event_type_code            = p_event_type_code
12089           AND line_definition_owner_code = p_old_line_defn_owner_code
12090           AND line_definition_code       = p_old_line_defn_code
12091           AND flexfield_segment_code     <> 'ALL';
12092 
12093      INSERT INTO xla_mpa_jlt_adr_assgns
12094             (application_id
12095             ,amb_context_code
12096             ,event_class_code
12097             ,event_type_code
12098             ,line_definition_owner_code
12099             ,line_definition_code
12100             ,accounting_line_type_code
12101             ,accounting_line_code
12102 	    ,mpa_accounting_line_type_code
12103 	    ,mpa_accounting_line_code
12104             ,flexfield_segment_code
12105             ,segment_rule_type_code
12106             ,segment_rule_code
12107 	    ,segment_rule_appl_id
12108             ,object_version_number
12109             ,inherit_adr_flag
12110             ,creation_date
12111             ,created_by
12112             ,last_update_date
12113             ,last_updated_by
12114             ,last_update_login)
12115        SELECT
12116              application_id
12117             ,amb_context_code
12118             ,event_class_code
12119             ,event_type_code
12120             ,p_new_line_defn_owner_code
12121             ,p_new_line_defn_code
12122             ,accounting_line_type_code
12123             ,accounting_line_code
12124 	    ,mpa_accounting_line_type_code
12125 	    ,mpa_accounting_line_code
12126 	    ,flexfield_segment_code
12127             ,segment_rule_type_code
12128             ,segment_rule_code
12129 	    ,segment_rule_appl_id
12130             ,1
12131             ,inherit_adr_flag
12132             ,l_creation_date
12133             ,l_created_by
12134             ,l_last_update_date
12135             ,l_last_updated_by
12136             ,l_last_update_login
12137          FROM xla_mpa_jlt_adr_assgns
12138         WHERE application_id             = p_application_id
12139           AND amb_context_code           = p_amb_context_code
12140           AND event_class_code           = p_event_class_code
12141           AND event_type_code            = p_event_type_code
12142           AND line_definition_owner_code = p_old_line_defn_owner_code
12143           AND line_definition_code       = p_old_line_defn_code
12144           AND flexfield_segment_code     = 'ALL'
12145        UNION
12146        SELECT
12147              application_id
12148             ,amb_context_code
12149             ,event_class_code
12150             ,event_type_code
12151             ,p_new_line_defn_owner_code
12152             ,p_new_line_defn_code
12153             ,accounting_line_type_code
12154             ,accounting_line_code
12155 	    ,mpa_accounting_line_type_code
12156 	    ,mpa_accounting_line_code
12157             ,xla_flex_pkg.get_qualifier_segment
12158                (101
12159                ,'GL#'
12160                ,p_new_accounting_coa_id
12161                ,flexfield_segment_code)
12162             ,segment_rule_type_code
12163             ,segment_rule_code
12164 	    ,segment_rule_appl_id
12165             ,1
12166             ,inherit_adr_flag
12167             ,l_creation_date
12168             ,l_created_by
12169             ,l_last_update_date
12170             ,l_last_updated_by
12171             ,l_last_update_login
12172          FROM xla_mpa_jlt_adr_assgns
12173         WHERE application_id             = p_application_id
12174           AND amb_context_code           = p_amb_context_code
12175           AND event_class_code           = p_event_class_code
12176           AND event_type_code            = p_event_type_code
12177           AND line_definition_owner_code = p_old_line_defn_owner_code
12178           AND line_definition_code       = p_old_line_defn_code
12179           AND flexfield_segment_code     <> 'ALL';
12180 
12181   ELSE
12182 
12183      INSERT INTO xla_line_defn_adr_assgns
12184             (application_id
12185             ,amb_context_code
12186             ,event_class_code
12187             ,event_type_code
12188             ,line_definition_owner_code
12189             ,line_definition_code
12190             ,accounting_line_type_code
12191             ,accounting_line_code
12192             ,flexfield_segment_code
12193             ,adr_version_num
12194             ,segment_rule_type_code
12195             ,segment_rule_code
12196             ,segment_rule_appl_id
12197             ,side_code
12198             ,object_version_number
12199             ,inherit_adr_flag
12200             ,creation_date
12201             ,created_by
12202             ,last_update_date
12203             ,last_updated_by
12204             ,last_update_login)
12205        SELECT
12206              application_id
12207             ,amb_context_code
12208             ,event_class_code
12209             ,event_type_code
12210             ,p_new_line_defn_owner_code
12211             ,p_new_line_defn_code
12212             ,accounting_line_type_code
12213             ,accounting_line_code
12214             ,flexfield_segment_code
12215             ,adr_version_num
12216             ,segment_rule_type_code
12217             ,segment_rule_code
12218             ,segment_rule_appl_id
12219             ,side_code
12220             ,1
12221             ,inherit_adr_flag
12222             ,l_creation_date
12223             ,l_created_by
12224             ,l_last_update_date
12225             ,l_last_updated_by
12226             ,l_last_update_login
12227          FROM xla_line_defn_adr_assgns
12228         WHERE application_id             = p_application_id
12229           AND amb_context_code           = p_amb_context_code
12230           AND event_class_code           = p_event_class_code
12231           AND event_type_code            = p_event_type_code
12232           AND line_definition_owner_code = p_old_line_defn_owner_code
12233           AND line_definition_code       = p_old_line_defn_code;
12234 
12235      INSERT INTO xla_mpa_jlt_adr_assgns
12236             (application_id
12237             ,amb_context_code
12238             ,event_class_code
12239             ,event_type_code
12240             ,line_definition_owner_code
12241             ,line_definition_code
12242             ,accounting_line_type_code
12243             ,accounting_line_code
12244 	    ,mpa_accounting_line_type_code
12245 	    ,mpa_accounting_line_code
12246             ,flexfield_segment_code
12247             ,segment_rule_type_code
12248             ,segment_rule_code
12249 	    ,segment_rule_appl_id
12250             ,object_version_number
12251             ,inherit_adr_flag
12252             ,creation_date
12253             ,created_by
12254             ,last_update_date
12255             ,last_updated_by
12256             ,last_update_login)
12257        SELECT
12258              application_id
12259             ,amb_context_code
12260             ,event_class_code
12261             ,event_type_code
12262             ,p_new_line_defn_owner_code
12263             ,p_new_line_defn_code
12264             ,accounting_line_type_code
12265             ,accounting_line_code
12266 	    ,mpa_accounting_line_type_code
12267 	    ,mpa_accounting_line_code
12268             ,flexfield_segment_code
12269             ,segment_rule_type_code
12270             ,segment_rule_code
12271             ,segment_rule_appl_id
12272             ,1
12273             ,inherit_adr_flag
12274             ,l_creation_date
12275             ,l_created_by
12276             ,l_last_update_date
12277             ,l_last_updated_by
12278             ,l_last_update_login
12279          FROM xla_mpa_jlt_adr_assgns
12280         WHERE application_id             = p_application_id
12281           AND amb_context_code           = p_amb_context_code
12282           AND event_class_code           = p_event_class_code
12283           AND event_type_code            = p_event_type_code
12284           AND line_definition_owner_code = p_old_line_defn_owner_code
12285           AND line_definition_code       = p_old_line_defn_code;
12286 
12287   END IF;
12288 
12289   INSERT INTO xla_line_defn_ac_assgns
12290             (application_id
12291             ,amb_context_code
12292             ,event_class_code
12293             ,event_type_code
12294             ,line_definition_owner_code
12295             ,line_definition_code
12296             ,accounting_line_type_code
12297             ,accounting_line_code
12298             ,analytical_criterion_type_code
12299             ,analytical_criterion_code
12300             ,object_version_number
12301             ,creation_date
12302             ,created_by
12303             ,last_update_date
12304             ,last_updated_by
12305             ,last_update_login)
12306     SELECT
12307              application_id
12308             ,amb_context_code
12309             ,event_class_code
12310             ,event_type_code
12311             ,p_new_line_defn_owner_code
12312             ,p_new_line_defn_code
12313             ,accounting_line_type_code
12314             ,accounting_line_code
12315             ,analytical_criterion_type_code
12316             ,analytical_criterion_code
12317             ,1
12318             ,l_creation_date
12319             ,l_created_by
12320             ,l_last_update_date
12321             ,l_last_updated_by
12322             ,l_last_update_login
12323       FROM xla_line_defn_ac_assgns
12324      WHERE application_id             = p_application_id
12325        AND amb_context_code           = p_amb_context_code
12326        AND event_class_code           = p_event_class_code
12327        AND event_type_code            = p_event_type_code
12328        AND line_definition_owner_code = p_old_line_defn_owner_code
12329        AND line_definition_code       = p_old_line_defn_code;
12330 
12331   INSERT INTO xla_mpa_jlt_ac_assgns
12332             (application_id
12333             ,amb_context_code
12334             ,event_class_code
12335             ,event_type_code
12336             ,line_definition_owner_code
12337             ,line_definition_code
12338             ,accounting_line_type_code
12339             ,accounting_line_code
12340 	    ,mpa_accounting_line_type_code
12341 	    ,mpa_accounting_line_code
12342             ,analytical_criterion_type_code
12343             ,analytical_criterion_code
12344 	    ,mpa_inherit_ac_flag
12345             ,object_version_number
12346             ,creation_date
12347             ,created_by
12348             ,last_update_date
12349             ,last_updated_by
12350             ,last_update_login)
12351     SELECT
12352              application_id
12353             ,amb_context_code
12354             ,event_class_code
12355             ,event_type_code
12356             ,p_new_line_defn_owner_code
12357             ,p_new_line_defn_code
12358             ,accounting_line_type_code
12359             ,accounting_line_code
12360 	    ,mpa_accounting_line_type_code
12361 	    ,mpa_accounting_line_code
12362             ,analytical_criterion_type_code
12363             ,analytical_criterion_code
12364 	    ,mpa_inherit_ac_flag
12365             ,1
12366             ,l_creation_date
12367             ,l_created_by
12368             ,l_last_update_date
12369             ,l_last_updated_by
12370             ,l_last_update_login
12371       FROM xla_mpa_jlt_ac_assgns
12372      WHERE application_id             = p_application_id
12373        AND amb_context_code           = p_amb_context_code
12374        AND event_class_code           = p_event_class_code
12375        AND event_type_code            = p_event_type_code
12376        AND line_definition_owner_code = p_old_line_defn_owner_code
12377        AND line_definition_code       = p_old_line_defn_code;
12378 
12379   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
12380     trace(p_msg    => 'END of procedure copy_line_definition_details'
12381          ,p_module => l_log_module
12382          ,p_level  => C_LEVEL_PROCEDURE);
12383   END IF;
12384 
12385 
12386 EXCEPTION
12387   WHEN xla_exceptions_pkg.application_exception THEN
12388     RAISE;
12389   WHEN OTHERS                                   THEN
12390     xla_exceptions_pkg.raise_message
12391       (p_location   => 'xla_line_definitions_pvt.copy_line_definition_details');
12392 END copy_line_definition_details;
12393 
12394 --=============================================================================
12395 --
12396 -- Name: line_definition_in_use
12397 -- Description: Returns true if the line definition is assigned to an
12398 --              accounting method
12399 --
12400 --=============================================================================
12401 FUNCTION line_definition_in_use
12402   (p_application_id                   IN NUMBER
12403   ,p_amb_context_code                 IN VARCHAR2
12404   ,p_event_class_code                 IN VARCHAR2
12405   ,p_event_type_code                  IN VARCHAR2
12406   ,p_line_definition_owner_code       IN VARCHAR2
12407   ,p_line_definition_code             IN VARCHAR2
12408   ,x_product_rule_name                IN OUT NOCOPY VARCHAR2
12409   ,x_product_rule_owner               IN OUT NOCOPY VARCHAR2)
12410 RETURN BOOLEAN
12411 IS
12412   CURSOR c_aads
12413   IS
12414   SELECT xpr.name product_rule_name
12415         ,xlk.meaning product_rule_owner
12416     FROM xla_aad_line_defn_assgns  xal
12417         ,xla_product_rules_tl      xpr
12418         ,xla_lookups               xlk
12419    WHERE xpr.application_id             = xal.application_id
12420      AND xpr.amb_context_code           = xal.amb_context_code
12421      AND xpr.product_rule_type_code     = xal.product_rule_type_code
12422      AND xpr.product_rule_code          = xal.product_rule_code
12423      AND xpr.language                   = USERENV('LANG')
12424      AND xlk.lookup_type                = 'XLA_OWNER_TYPE'
12425      AND xlk.lookup_code                = xal.product_rule_type_code
12426      AND xal.application_id             = p_application_id
12427      AND xal.amb_context_code           = p_amb_context_code
12428      AND xal.event_class_code           = p_event_class_code
12429      AND xal.event_type_code            = p_event_type_code
12430      AND xal.line_definition_owner_code = p_line_definition_owner_code
12431      AND xal.line_definition_code       = p_line_definition_code;
12432 
12433   l_aad         c_aads%ROWTYPE;
12434   l_return      BOOLEAN;
12435 
12436   l_log_module  VARCHAR2(240);
12437 BEGIN
12438   IF g_log_enabled THEN
12439     l_log_module := C_DEFAULT_MODULE||'.line_definition_in_use';
12440   END IF;
12441 
12442   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
12443     trace(p_msg    => 'BEGIN of procedure line_definition_in_use'
12444          ,p_module => l_log_module
12445          ,p_level  => C_LEVEL_PROCEDURE);
12446   END IF;
12447 
12448   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
12449     trace(p_msg    => 'application_id = '             ||p_application_id
12450                     ||',amb_context_code = '          ||p_amb_context_code
12451                     ||',event_class_code = '          ||p_event_class_code
12452                     ||',event_type_code = '           ||p_event_type_code
12453                     ||',line_definition_owner_code = '||p_line_definition_owner_code
12454                     ||',line_definition_code = '      ||p_line_definition_code
12455          ,p_module => l_log_module
12456          ,p_level  => C_LEVEL_STATEMENT);
12457   END IF;
12458 
12459    OPEN c_aads;
12460    FETCH c_aads INTO l_aad;
12461    IF c_aads%FOUND THEn
12462      x_product_rule_name  := l_aad.product_rule_name;
12463      x_product_rule_owner := l_aad.product_rule_owner;
12464 
12465     IF (C_LEVEL_STATEMENT >= g_log_level) THEN
12466       trace(p_msg    => 'found aad: product_rule_name = '||x_product_rule_name
12467                       ||',product_rule_owner = '         ||x_product_rule_owner
12468            ,p_module => l_log_module
12469            ,p_level  => C_LEVEL_STATEMENT);
12470     END IF;
12471 
12472      l_return := TRUE;
12473    ELSE
12474      l_return := FALSE;
12475    END IF;
12476    CLOSE c_aads;
12477 
12478   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
12479     trace(p_msg    => 'END of procedure line_definition_in_use'
12480          ,p_module => l_log_module
12481          ,p_level  => C_LEVEL_PROCEDURE);
12482   END IF;
12483 
12484   RETURN l_return;
12485 
12486 EXCEPTION
12487   WHEN xla_exceptions_pkg.application_exception THEN
12488     IF c_aads%ISOPEN THEN
12489       CLOSE c_aads;
12490     END IF;
12491     RAISE;
12492 
12493   WHEN OTHERS THEN
12494     IF c_aads%ISOPEN THEN
12495       CLOSE c_aads;
12496     END IF;
12497     xla_exceptions_pkg.raise_message
12498         (p_location   => 'xla_line_definitions_pvt.line_definition_in_use');
12499 
12500 END line_definition_in_use;
12501 
12502 --=============================================================================
12503 --
12504 -- Name: line_definition_is_locked
12505 -- Description: Returns true if the line definition is assigned to an
12506 --              accounting method
12507 --
12508 --=============================================================================
12509 FUNCTION line_definition_is_locked
12510   (p_application_id                   IN NUMBER
12511   ,p_amb_context_code                 IN VARCHAR2
12512   ,p_event_class_code                 IN VARCHAR2
12513   ,p_event_type_code                  IN VARCHAR2
12514   ,p_line_definition_owner_code       IN VARCHAR2
12515   ,p_line_definition_code             IN VARCHAR2
12516   ,x_product_rule_name                IN OUT NOCOPY VARCHAR2
12517   ,x_product_rule_owner               IN OUT NOCOPY VARCHAR2
12518   ,x_event_class_name                 IN OUT NOCOPY VARCHAR2
12519   ,x_event_type_name                  IN OUT NOCOPY VARCHAR2
12520   ,x_locking_status_flag              IN OUT NOCOPY VARCHAR2)
12521 RETURN BOOLEAN
12522 IS
12523   CURSOR c_aads
12524   IS
12525   SELECT xpa.entity_code, xpa.product_rule_type_code, xpa.product_rule_code
12526         ,xpa.locking_status_flag
12527     FROM xla_aad_line_defn_assgns  xal
12528         ,xla_prod_acct_headers     xpa
12529    WHERE xpa.application_id             = xal.application_id
12530      AND xpa.amb_context_code           = xal.amb_context_code
12531      AND xpa.product_rule_type_code     = xal.product_rule_type_code
12532      AND xpa.product_rule_code          = xal.product_rule_code
12533      AND xpa.event_class_code           = xal.event_class_code
12534      AND xpa.event_type_code            = xal.event_type_code
12535      AND xpa.locking_status_flag        = 'Y'
12536      AND xal.application_id             = p_application_id
12537      AND xal.amb_context_code           = p_amb_context_code
12538      AND xal.event_class_code           = p_event_class_code
12539      AND xal.event_type_code            = p_event_type_code
12540      AND xal.line_definition_owner_code = p_line_definition_owner_code
12541      AND xal.line_definition_code       = p_line_definition_code;
12542 
12543   l_aad              c_aads%ROWTYPE;
12544   l_application_name varchar2(80);
12545   l_return           BOOLEAN;
12546 
12547   l_log_module  VARCHAR2(240);
12548 BEGIN
12549   IF g_log_enabled THEN
12550     l_log_module := C_DEFAULT_MODULE||'.line_definition_is_locked';
12551   END IF;
12552 
12553   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
12554     trace(p_msg    => 'BEGIN of procedure line_definition_is_locked'
12555          ,p_module => l_log_module
12556          ,p_level  => C_LEVEL_PROCEDURE);
12557   END IF;
12558 
12559   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
12560     trace(p_msg    => 'application_id = '             ||p_application_id
12561                     ||',amb_context_code = '          ||p_amb_context_code
12562                     ||',event_class_code = '          ||p_event_class_code
12563                     ||',event_type_code = '           ||p_event_type_code
12564                     ||',line_definition_owner_code = '||p_line_definition_owner_code
12565                     ||',line_definition_code = '      ||p_line_definition_code
12566          ,p_module => l_log_module
12567          ,p_level  => C_LEVEL_STATEMENT);
12568   END IF;
12569 
12570    OPEN c_aads;
12571    FETCH c_aads INTO l_aad;
12572    IF c_aads%FOUND THEN
12573 
12574      xla_validations_pkg.get_product_rule_info
12575            (p_application_id          => p_application_id
12576            ,p_amb_context_code        => p_amb_context_code
12577            ,p_product_rule_type_code  => l_aad.product_rule_type_code
12578            ,p_product_rule_code       => l_aad.product_rule_code
12579            ,p_application_name        => l_application_name
12580            ,p_product_rule_name       => x_product_rule_name
12581            ,p_product_rule_type       => x_product_rule_owner);
12582 
12583     xla_validations_pkg.get_event_class_info
12584            (p_application_id          => p_application_id
12585            ,p_entity_code             => l_aad.entity_code
12586            ,p_event_class_code        => p_event_class_code
12587            ,p_event_class_name        => x_event_class_name);
12588 
12589     xla_validations_pkg.get_event_type_info
12590            (p_application_id          => p_application_id
12591            ,p_entity_code             => l_aad.entity_code
12592            ,p_event_class_code        => p_event_class_code
12593            ,p_event_type_code         => p_event_type_code
12594            ,p_event_type_name         => x_event_type_name);
12595 
12596     x_locking_status_flag := l_aad.locking_status_flag;
12597 
12598     IF (C_LEVEL_STATEMENT >= g_log_level) THEN
12599       trace(p_msg    => 'found aad: product_rule_name = '||x_product_rule_name
12600                       ||',product_rule_owner = '         ||x_product_rule_owner
12601            ,p_module => l_log_module
12602            ,p_level  => C_LEVEL_STATEMENT);
12603     END IF;
12604 
12605      l_return := TRUE;
12606    ELSE
12607      l_return := FALSE;
12608    END IF;
12609    CLOSE c_aads;
12610 
12611   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
12612     trace(p_msg    => 'END of procedure line_definition_is_locked'
12613          ,p_module => l_log_module
12614          ,p_level  => C_LEVEL_PROCEDURE);
12615   END IF;
12616 
12617   RETURN l_return;
12618 
12619 EXCEPTION
12620   WHEN xla_exceptions_pkg.application_exception THEN
12621     IF c_aads%ISOPEN THEN
12622       CLOSE c_aads;
12623     END IF;
12624     RAISE;
12625 
12626   WHEN OTHERS THEN
12627     IF c_aads%ISOPEN THEN
12628       CLOSE c_aads;
12629     END IF;
12630     xla_exceptions_pkg.raise_message
12631         (p_location   => 'xla_line_definitions_pvt.line_definition_is_locked');
12632 
12633 END line_definition_is_locked;
12634 
12635 --=============================================================================
12636 --
12637 -- Name: line_definition_is_locked
12638 -- Description: Returns true if the line definition is assigned to an
12639 --              accounting method
12640 --
12641 --=============================================================================
12642 FUNCTION line_definition_is_locked
12643   (p_application_id                   IN NUMBER
12644   ,p_amb_context_code                 IN VARCHAR2
12645   ,p_event_class_code                 IN VARCHAR2
12646   ,p_event_type_code                  IN VARCHAR2
12647   ,p_line_definition_owner_code       IN VARCHAR2
12648   ,p_line_definition_code             IN VARCHAR2)
12649 RETURN BOOLEAN
12650 IS
12651   CURSOR c_aads
12652   IS
12653   SELECT xpa.entity_code, xpa.product_rule_type_code, xpa.product_rule_code
12654         ,xpa.locking_status_flag
12655     FROM xla_aad_line_defn_assgns  xal
12656         ,xla_prod_acct_headers     xpa
12657    WHERE xpa.application_id             = xal.application_id
12658      AND xpa.amb_context_code           = xal.amb_context_code
12659      AND xpa.product_rule_type_code     = xal.product_rule_type_code
12660      AND xpa.product_rule_code          = xal.product_rule_code
12661      AND xpa.event_class_code           = xal.event_class_code
12662      AND xpa.event_type_code            = xal.event_type_code
12663      AND xpa.locking_status_flag        = 'Y'
12664      AND xal.application_id             = p_application_id
12665      AND xal.amb_context_code           = p_amb_context_code
12666      AND xal.event_class_code           = p_event_class_code
12667      AND xal.event_type_code            = p_event_type_code
12668      AND xal.line_definition_owner_code = p_line_definition_owner_code
12669      AND xal.line_definition_code       = p_line_definition_code;
12670 
12671   l_aad              c_aads%ROWTYPE;
12672   l_return           BOOLEAN;
12673 
12674   l_log_module  VARCHAR2(240);
12675 BEGIN
12676   IF g_log_enabled THEN
12677     l_log_module := C_DEFAULT_MODULE||'.line_definition_is_locked';
12678   END IF;
12679 
12680   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
12681     trace(p_msg    => 'BEGIN of procedure line_definition_is_locked'
12682          ,p_module => l_log_module
12683          ,p_level  => C_LEVEL_PROCEDURE);
12684   END IF;
12685 
12686   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
12687     trace(p_msg    => 'application_id = '             ||p_application_id
12688                     ||',amb_context_code = '          ||p_amb_context_code
12689                     ||',event_class_code = '          ||p_event_class_code
12690                     ||',event_type_code = '           ||p_event_type_code
12691                     ||',line_definition_owner_code = '||p_line_definition_owner_code
12692                     ||',line_definition_code = '      ||p_line_definition_code
12693          ,p_module => l_log_module
12694          ,p_level  => C_LEVEL_STATEMENT);
12695   END IF;
12696 
12697    OPEN c_aads;
12698    FETCH c_aads INTO l_aad;
12699    IF c_aads%FOUND THEN
12700 
12701     IF (C_LEVEL_STATEMENT >= g_log_level) THEN
12702       trace(p_msg    => 'found aad: '||l_aad.product_rule_code||','
12703                       ||l_aad.product_rule_code
12704            ,p_module => l_log_module
12705            ,p_level  => C_LEVEL_STATEMENT);
12706     END IF;
12707 
12708      l_return := TRUE;
12709    ELSE
12710      l_return := FALSE;
12711    END IF;
12712    CLOSE c_aads;
12713 
12714   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
12715     trace(p_msg    => 'END of procedure line_definition_is_locked'
12716          ,p_module => l_log_module
12717          ,p_level  => C_LEVEL_PROCEDURE);
12718   END IF;
12719 
12720   RETURN l_return;
12721 
12722 EXCEPTION
12723   WHEN xla_exceptions_pkg.application_exception THEN
12724     IF c_aads%ISOPEN THEN
12725       CLOSE c_aads;
12726     END IF;
12727     RAISE;
12728 
12729   WHEN OTHERS THEN
12730     IF c_aads%ISOPEN THEN
12731       CLOSE c_aads;
12732     END IF;
12733     xla_exceptions_pkg.raise_message
12734         (p_location   => 'xla_line_definitions_pvt.line_definition_is_locked');
12735 
12736 END line_definition_is_locked;
12737 
12738 --=============================================================================
12739 --
12740 -- Name: invalid_line_description
12741 -- Description: Returns true if sources for the line description are invalid
12742 --
12743 --=============================================================================
12744 FUNCTION invalid_line_description
12745   (p_application_id                   IN NUMBER
12746   ,p_amb_context_code                 IN VARCHAR2
12747   ,p_entity_code                      IN VARCHAR2
12748   ,p_event_class_code                 IN VARCHAR2
12749   ,p_description_type_code            IN VARCHAR2
12750   ,p_description_code                 IN VARCHAR2)
12751 RETURN VARCHAR2
12752 IS
12753   l_return      VARCHAR2(30);
12754   l_log_module  VARCHAR2(240);
12755 BEGIN
12756   IF g_log_enabled THEN
12757     l_log_module := C_DEFAULT_MODULE||'.line_definition_in_use';
12758   END IF;
12759 
12760   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
12761     trace(p_msg    => 'BEGIN of procedure line_definition_in_use'
12762          ,p_module => l_log_module
12763          ,p_level  => C_LEVEL_PROCEDURE);
12764   END IF;
12765 
12766   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
12767     trace(p_msg    => 'application_id = '||p_application_id||
12768                       ',amb_context_code = '||p_amb_context_code||
12769                       ',entity_code = '||p_entity_code||
12770                       ',event_class_code = '||p_event_class_code||
12771                       ',description_type_code = '||p_description_type_code||
12772                       ',description_code = '||p_description_code
12773          ,p_module => l_log_module
12774          ,p_level  => C_LEVEL_STATEMENT);
12775   END IF;
12776 
12777   --
12778   -- call invalid_line_desc to see if description is invalid
12779   --
12780   IF xla_line_definitions_pvt.invalid_line_desc
12781            (p_application_id           => p_application_id
12782            ,p_amb_context_code         => p_amb_context_code
12783            ,p_entity_code              => p_entity_code
12784            ,p_event_class_code         => p_event_class_code
12785            ,p_description_type_code    => p_description_type_code
12786            ,p_description_code         => p_description_code) THEN
12787 
12788     l_return := 'TRUE';
12789   ELSE
12790     l_return := 'FALSE';
12791   END IF;
12792 
12793   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
12794     trace(p_msg    => 'END of procedure line_definition_in_use'
12795          ,p_module => l_log_module
12796          ,p_level  => C_LEVEL_PROCEDURE);
12797   END IF;
12798 
12799   RETURN l_return;
12800 
12801 EXCEPTION
12802   WHEN xla_exceptions_pkg.application_exception THEN
12803     RAISE;
12804   WHEN OTHERS                                   THEN
12805     xla_exceptions_pkg.raise_message
12806       (p_location   => 'xla_line_definitions_pvt.invalid_line_description');
12807 END invalid_line_description;
12808 
12809 --=============================================================================
12810 --
12811 -- Name: invalid_segment_rule
12812 -- Description: Returns true if sources for the seg rule are invalid
12813 --
12814 --=============================================================================
12815 FUNCTION invalid_segment_rule
12816   (p_application_id                   IN NUMBER
12817   ,p_amb_context_code                 IN VARCHAR2
12818   ,p_entity_code                      IN VARCHAR2
12819   ,p_event_class_code                 IN VARCHAR2
12820   ,p_segment_rule_appl_id             IN NUMBER   DEFAULT NULL
12821   ,p_segment_rule_type_code           IN VARCHAR2
12822   ,p_segment_rule_code                IN VARCHAR2)
12823 RETURN VARCHAR2
12824 IS
12825   l_return                  VARCHAR2(30);
12826 
12827   CURSOR c_adr
12828   IS
12829   SELECT value_segment_rule_appl_id
12830         ,value_segment_rule_type_code
12831         ,value_segment_rule_code
12832     FROM xla_seg_rule_details
12833    WHERE application_id         = p_application_id
12834      AND amb_context_code       = p_amb_context_code
12835      AND segment_rule_type_code = p_segment_rule_type_code
12836      AND segment_rule_code      = p_segment_rule_code
12837      AND value_type_code        = 'A';
12838 
12839   l_adr   c_adr%rowtype;
12840 
12841   l_log_module  VARCHAR2(240);
12842 BEGIN
12843   IF g_log_enabled THEN
12844     l_log_module := C_DEFAULT_MODULE||'.invalid_segment_rule';
12845   END IF;
12846 
12847   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
12848     trace(p_msg    => 'BEGIN of procedure invalid_segment_rule'
12849          ,p_module => l_log_module
12850          ,p_level  => C_LEVEL_PROCEDURE);
12851   END IF;
12852 
12853   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
12854     trace(p_msg    => 'application_id = '||p_application_id||
12855                       ',amb_context_code = '||p_amb_context_code||
12856                       ',entity_code = '||p_entity_code||
12857                       ',event_class_code = '||p_event_class_code||
12858                       ',segment_rule_type_code = '||p_segment_rule_type_code||
12859                       ',segment_rule_code = '||p_segment_rule_code
12860          ,p_module => l_log_module
12861          ,p_level  => C_LEVEL_STATEMENT);
12862   END IF;
12863 
12864   --
12865   -- call invalid_seg_rule to see if segment rule is invalid
12866   --
12867   IF xla_line_definitions_pvt.invalid_seg_rule
12868            (p_application_id           => p_application_id
12869            ,p_amb_context_code         => p_amb_context_code
12870            ,p_entity_code              => p_entity_code
12871            ,p_event_class_code         => p_event_class_code
12872            ,p_segment_rule_appl_id     => p_segment_rule_appl_id
12873            ,p_segment_rule_type_code   => p_segment_rule_type_code
12874            ,p_segment_rule_code        => p_segment_rule_code) THEN
12875 
12876     l_return := 'TRUE';
12877   ELSE
12878     l_return := 'FALSE';
12879   END IF;
12880 
12881   IF l_return = 'FALSE' THEN
12882      OPEN c_adr;
12883      LOOP
12884         FETCH c_adr
12885          INTO l_adr;
12886         EXIT WHEN c_adr%notfound or l_return = 'TRUE';
12887 
12888         IF xla_line_definitions_pvt.invalid_seg_rule
12889                 (p_application_id           => p_application_id
12890                 ,p_amb_context_code         => p_amb_context_code
12891                 ,p_entity_code              => p_entity_code
12892                 ,p_event_class_code         => p_event_class_code
12893                 ,p_segment_rule_appl_id     => l_adr.value_segment_rule_appl_id
12894                 ,p_segment_rule_type_code   => l_adr.value_segment_rule_type_code
12895                 ,p_segment_rule_code        => l_adr.value_segment_rule_code) THEN
12896 
12897            l_return := 'TRUE';
12898         ELSE
12899            l_return := 'FALSE';
12900         END IF;
12901      END LOOP;
12902      CLOSE c_adr;
12903 
12904   END IF;
12905 
12906   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
12907     trace(p_msg    => 'END of procedure invalid_segment_rule'
12908          ,p_module => l_log_module
12909          ,p_level  => C_LEVEL_PROCEDURE);
12910   END IF;
12911 
12912   RETURN l_return;
12913 
12914 EXCEPTION
12915    WHEN xla_exceptions_pkg.application_exception THEN
12916       RAISE;
12917 
12918    WHEN OTHERS                                   THEN
12919       xla_exceptions_pkg.raise_message
12920         (p_location   => 'xla_line_definitions_pvt.invalid_segment_rule');
12921 
12922 END invalid_segment_rule;
12923 
12924 --=============================================================================
12925 --
12926 -- Name: uncompile_aads
12927 -- Description: Returns true if the application accounting definition gets
12928 --              uncompiled
12929 --
12930 --=============================================================================
12931 FUNCTION uncompile_aads
12932   (p_amb_context_code                 IN VARCHAR2
12933   ,p_application_id                   IN NUMBER
12934   ,p_event_class_code                 IN VARCHAR2
12935   ,p_event_type_code                  IN VARCHAR2
12936   ,p_line_definition_owner_code       IN VARCHAR2
12937   ,p_line_definition_code             IN VARCHAR2
12938   ,x_product_rule_name                IN OUT NOCOPY VARCHAR2
12939   ,x_product_rule_type                IN OUT NOCOPY VARCHAR2
12940   ,x_event_class_name                 IN OUT NOCOPY VARCHAR2
12941   ,x_event_type_name                  IN OUT NOCOPY VARCHAR2
12942   ,x_locking_status_flag              IN OUT NOCOPY VARCHAR2)
12943 RETURN BOOLEAN
12944 IS
12945   l_application_name        VARCHAR2(80);
12946 
12947   CURSOR c_lock_aads IS
12948     SELECT xpa.entity_code
12949           ,xpa.event_class_code
12950           ,xpa.event_type_code
12951           ,xpa.product_rule_type_code
12952           ,xpa.product_rule_code
12953           ,xpa.locking_status_flag
12954           ,xpa.validation_status_code
12955       FROM xla_aad_line_defn_assgns   xal
12956           ,xla_prod_acct_headers      xpa
12957      WHERE xpa.application_id             = xal.application_id
12958        AND xpa.amb_context_code           = xal.amb_context_code
12959        AND xpa.product_rule_type_code     = xal.product_rule_type_code
12960        AND xpa.product_rule_code          = xal.product_rule_code
12961        AND xpa.event_class_code           = xal.event_class_code
12962        AND xpa.event_type_code            = xal.event_type_code
12963        AND xal.application_id             = p_application_id
12964        AND xal.amb_context_code           = p_amb_context_code
12965        AND xal.event_class_code           = p_event_class_code
12966        AND xal.event_type_code            = p_event_type_code
12967        AND xal.line_definition_owner_code = p_line_definition_owner_code
12968        AND xal.line_definition_code       = p_line_definition_code
12969     FOR UPDATE NOWAIT;
12970 
12971   CURSOR c_update_aads IS
12972     SELECT xal.event_class_code
12973          , xal.product_rule_type_code
12974          , xal.product_rule_code
12975       FROM xla_aad_line_defn_assgns xal
12976           ,xla_prod_acct_headers    xpa
12977      WHERE xpa.application_id             = xal.application_id
12978        AND xpa.amb_context_code           = xal.amb_context_code
12979        AND xpa.product_rule_type_code     = xal.product_rule_type_code
12980        AND xpa.product_rule_code          = xal.product_rule_code
12981        AND xpa.event_class_code           = xal.event_class_code
12982        AND xpa.event_type_code            = xal.event_type_code
12983        AND xal.application_id             = p_application_id
12984        AND xal.amb_context_code           = p_amb_context_code
12985        AND xal.event_class_code           = p_event_class_code
12986        AND xal.event_type_code            = p_event_type_code
12987        AND xal.line_definition_owner_code = p_line_definition_owner_code
12988        AND xal.line_definition_code       = p_line_definition_code
12989     FOR UPDATE NOWAIT;
12990 
12991   l_event_class_codes       t_array_codes;
12992   l_product_rule_type_codes t_array_type_codes;
12993   l_product_rule_codes      t_array_codes;
12994 
12995   l_return                  BOOLEAN;
12996 
12997   l_log_module  VARCHAR2(240);
12998 BEGIN
12999   IF g_log_enabled THEN
13000     l_log_module := C_DEFAULT_MODULE||'.uncompile_aads';
13001   END IF;
13002 
13003   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13004     trace(p_msg    => 'BEGIN of procedure uncompile_aads'
13005          ,p_module => l_log_module
13006          ,p_level  => C_LEVEL_PROCEDURE);
13007   END IF;
13008 
13009   IF (C_LEVEL_EVENT >= g_log_level) THEN
13010     trace(p_msg    => 'BEGIN LOOP - uncompile aads',
13011           p_module => l_log_module,
13012           p_level  => C_LEVEL_EVENT);
13013   END IF;
13014 
13015   l_return := TRUE;
13016 
13017   FOR l_aad IN c_lock_aads LOOP
13018     IF (l_aad.validation_status_code NOT IN ('E', 'Y', 'N') OR
13019         l_aad.locking_status_flag    = 'Y') THEN
13020 
13021       IF (C_LEVEL_ERROR >= g_log_level) THEN
13022         trace(p_msg    => 'Found locked aad: '||
13023                            l_aad.event_class_code||','||
13024                            l_aad.event_type_code||','||
13025                            l_aad.product_rule_code||','||
13026                            l_aad.product_rule_type_code,
13027               p_module => l_log_module,
13028               p_level  => C_LEVEL_ERROR);
13029       END IF;
13030 
13031       xla_validations_pkg.get_product_rule_info
13032            (p_application_id          => p_application_id
13033            ,p_amb_context_code        => p_amb_context_code
13034            ,p_product_rule_type_code  => l_aad.product_rule_type_code
13035            ,p_product_rule_code       => l_aad.product_rule_code
13036            ,p_application_name        => l_application_name
13037            ,p_product_rule_name       => x_product_rule_name
13038            ,p_product_rule_type       => x_product_rule_type);
13039 
13040       xla_validations_pkg.get_event_class_info
13041            (p_application_id          => p_application_id
13042            ,p_entity_code             => l_aad.entity_code
13043            ,p_event_class_code        => l_aad.event_class_code
13044            ,p_event_class_name        => x_event_class_name);
13045 
13046       xla_validations_pkg.get_event_type_info
13047            (p_application_id          => p_application_id
13048            ,p_entity_code             => l_aad.entity_code
13049            ,p_event_class_code        => l_aad.event_class_code
13050            ,p_event_type_code         => l_aad.event_type_code
13051            ,p_event_type_name         => x_event_type_name);
13052 
13053       x_locking_status_flag := l_aad.locking_status_flag;
13054 
13055       l_return := FALSE;
13056       EXIT;
13057 
13058     END IF;
13059   END LOOP;
13060 
13061   IF (l_return) THEN
13062 
13063     OPEN c_update_aads;
13064     FETCH c_update_aads BULK COLLECT INTO l_event_class_codes
13065                                          ,l_product_rule_type_codes
13066                                          ,l_product_rule_codes;
13067     CLOSE c_update_aads;
13068 
13069     IF (C_LEVEL_EVENT >= g_log_level) THEN
13070       trace(p_msg    => 'l_event_class_codes.count = '||l_event_class_codes.count,
13071             p_module => l_log_module,
13072             p_level  => C_LEVEL_EVENT);
13073     END IF;
13074 
13075     IF (l_event_class_codes.count > 0) THEN
13076 
13077       FORALL i IN 1..l_event_class_codes.LAST
13078         UPDATE xla_product_rules_b xpr
13079            SET compile_status_code = 'N'
13080              , updated_flag        = 'Y'
13081              , last_update_date    = sysdate
13082              , last_updated_by     = xla_environment_pkg.g_usr_id
13083              , last_update_login   = xla_environment_pkg.g_login_id
13084          WHERE application_id          = p_application_id
13085            AND amb_context_code        = p_amb_context_code
13086            AND product_rule_type_code  = l_product_rule_type_codes(i)
13087            AND product_rule_code       = l_product_rule_codes(i)
13088            AND (compile_status_code    <> 'N' OR
13089                 updated_flag           <> 'Y');
13090 
13091       IF (C_LEVEL_EVENT >= g_log_level) THEN
13092         trace(p_msg    => '# row updated in xla_product_rules_b = '||SQL%ROWCOUNT,
13093               p_module => l_log_module,
13094               p_level  => C_LEVEL_EVENT);
13095       END IF;
13096 
13097       FORALL i IN 1..l_event_class_codes.LAST
13098         UPDATE xla_prod_acct_headers xpa
13099            SET validation_status_code = 'N'
13100              , last_update_date       = sysdate
13101              , last_updated_by        = xla_environment_pkg.g_usr_id
13102              , last_update_login      = xla_environment_pkg.g_login_id
13103          WHERE xpa.application_id          = p_application_id
13104            AND xpa.amb_context_code        = p_amb_context_code
13105            AND xpa.event_class_code        = l_event_class_codes(i)
13106            AND xpa.product_rule_type_code  = l_product_rule_type_codes(i)
13107            AND xpa.product_rule_code       = l_product_rule_codes(i)
13108            AND xpa.validation_status_code  <> 'N';
13109 
13110       IF (C_LEVEL_EVENT >= g_log_level) THEN
13111         trace(p_msg    => '# row updated in xla_prod_acct_headers = '||SQL%ROWCOUNT,
13112               p_module => l_log_module,
13113               p_level  => C_LEVEL_EVENT);
13114       END IF;
13115 
13116       UPDATE xla_appli_amb_contexts
13117          SET updated_flag      = 'Y'
13118            , last_update_date  = sysdate
13119            , last_updated_by   = xla_environment_pkg.g_usr_id
13120            , last_update_login = xla_environment_pkg.g_login_id
13121        WHERE application_id    = p_application_id
13122          AND amb_context_code  = p_amb_context_code
13123          AND updated_flag      <> 'Y';
13124 
13125     END IF;
13126   END IF;
13127 
13128   IF (C_LEVEL_EVENT >= g_log_level) THEN
13129     trace(p_msg    => 'END LOOP - uncompile aads',
13130           p_module => l_log_module,
13131           p_level  => C_LEVEL_EVENT);
13132   END IF;
13133 
13134   UPDATE xla_line_definitions_b
13135      SET validation_status_code     = 'N'
13136         ,last_update_date           = sysdate
13137         ,last_updated_by            = xla_environment_pkg.g_usr_id
13138         ,last_update_login          = xla_environment_pkg.g_login_id
13139    WHERE application_id             = p_application_id
13140      AND amb_context_code           = p_amb_context_code
13141      AND event_class_code           = p_event_class_code
13142      AND event_type_code            = p_event_type_code
13143      AND line_definition_owner_code = p_line_definition_owner_code
13144      AND line_definition_code       = p_line_definition_code;
13145 
13146   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13147     trace(p_msg    => 'END of procedure uncompile_aads'
13148          ,p_module => l_log_module
13149          ,p_level  => C_LEVEL_PROCEDURE);
13150   END IF;
13151 
13152   RETURN l_return;
13153 
13154 EXCEPTION
13155   WHEN xla_exceptions_pkg.application_exception THEN
13156     IF c_update_aads%ISOPEN THEN
13157       CLOSE c_update_aads;
13158     END IF;
13159     IF (c_lock_aads%ISOPEN) THEN
13160       CLOSE c_lock_aads;
13161     END IF;
13162     RAISE;
13163 
13164   WHEN OTHERS                                   THEN
13165     IF c_update_aads%ISOPEN THEN
13166       CLOSE c_update_aads;
13167     END IF;
13168     IF (c_lock_aads%ISOPEN) THEN
13169       CLOSE c_lock_aads;
13170     END IF;
13171     xla_exceptions_pkg.raise_message
13172       (p_location   => 'xla_line_definitions_pvt.uncompile_aads');
13173 
13174 END uncompile_aads;
13175 
13176 
13177 --=============================================================================
13178 --
13179 -- Name: invalid_line_analytical
13180 -- Description: Returns true if sources for the analytical criteria are invalid
13181 --
13182 --=============================================================================
13183 FUNCTION invalid_line_analytical
13184   (p_application_id                   IN NUMBER
13185   ,p_amb_context_code                 IN VARCHAR2
13186   ,p_entity_code                      IN VARCHAR2
13187   ,p_event_class_code                 IN VARCHAR2
13188   ,p_ac_type_code                     IN VARCHAR2
13189   ,p_ac_code                          IN VARCHAR2)
13190 RETURN VARCHAR2
13191 IS
13192   l_return                   VARCHAR2(30);
13193   l_exist                    VARCHAR2(1);
13194 
13195   l_log_module  VARCHAR2(240);
13196 BEGIN
13197   IF g_log_enabled THEN
13198     l_log_module := C_DEFAULT_MODULE||'.invalid_line_analytical';
13199   END IF;
13200 
13201   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13202     trace(p_msg    => 'BEGIN of procedure invalid_line_analytical'
13203          ,p_module => l_log_module
13204          ,p_level  => C_LEVEL_PROCEDURE);
13205   END IF;
13206 
13207   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
13208     trace(p_msg    => 'application_id = '||p_application_id||
13209                       ',amb_context_code = '||p_amb_context_code||
13210                       ',entity_code = '||p_entity_code||
13211                       ',event_class_code = '||p_event_class_code||
13212                       ',analytical_criterion_type_code = '||p_ac_type_code||
13213                       ',analytical_criterion_code = '||p_ac_code
13214          ,p_module => l_log_module
13215          ,p_level  => C_LEVEL_STATEMENT);
13216   END IF;
13217 
13218   --
13219   -- call invalid_line_analytical to see if header analytical criteria is invalid
13220   --
13221   IF xla_line_definitions_pvt.invalid_line_ac
13222            (p_application_id             => p_application_id
13223            ,p_amb_context_code           => p_amb_context_code
13224            ,p_entity_code                => p_entity_code
13225            ,p_event_class_code           => p_event_class_code
13226            ,p_ac_type_code               => p_ac_type_code
13227            ,p_ac_code                    => p_ac_code) THEN
13228 
13229     l_return := 'TRUE';
13230   ELSE
13231     l_return := 'FALSE';
13232   END IF;
13233 
13234   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13235     trace(p_msg    => 'END of procedure invalid_line_analytical'
13236          ,p_module => l_log_module
13237          ,p_level  => C_LEVEL_PROCEDURE);
13238   END IF;
13239 
13240   RETURN l_return;
13241 
13242 EXCEPTION
13243   WHEN xla_exceptions_pkg.application_exception THEN
13244     RAISE;
13245 
13246   WHEN OTHERS  THEN
13247     xla_exceptions_pkg.raise_message
13248       (p_location   => 'xla_line_definitions_pvt.invalid_line_analytical');
13249 END invalid_line_analytical;
13250 
13251 --=============================================================================
13252 --
13253 -- Name: copy_line_assignment_details
13254 -- Description: Copies the details of an existing line assignment to a new one
13255 --
13256 --=============================================================================
13257 PROCEDURE copy_line_assignment_details
13258   (p_application_id                   IN NUMBER
13259   ,p_amb_context_code                 IN VARCHAR2
13260   ,p_event_class_code                 IN VARCHAR2
13261   ,p_event_type_code                  IN VARCHAR2
13262   ,p_line_definition_owner_code       IN VARCHAR2
13263   ,p_line_definition_code             IN VARCHAR2
13264   ,p_old_accting_line_type_code       IN VARCHAR2
13265   ,p_old_accounting_line_code         IN VARCHAR2
13266   ,p_new_accting_line_type_code       IN VARCHAR2
13267   ,p_new_accounting_line_code         IN VARCHAR2
13268   ,p_include_ac_assignments           IN VARCHAR2
13269   ,p_include_adr_assignments          IN VARCHAR2
13270   ,p_mpa_option_code                  IN VARCHAR2)
13271 
13272 IS
13273 
13274   l_creation_date                   DATE := sysdate;
13275   l_last_update_date                DATE := sysdate;
13276   l_created_by                      INTEGER := xla_environment_pkg.g_usr_id;
13277   l_last_update_login               INTEGER := xla_environment_pkg.g_login_id;
13278   l_last_updated_by                 INTEGER := xla_environment_pkg.g_usr_id;
13279 
13280   l_log_module  VARCHAR2(240);
13281 BEGIN
13282    IF g_log_enabled THEN
13283      l_log_module := C_DEFAULT_MODULE||'.invalid_line_analytical';
13284    END IF;
13285 
13286    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13287      trace(p_msg    => 'BEGIN of procedure invalid_line_analytical'
13288           ,p_module => l_log_module
13289           ,p_level  => C_LEVEL_PROCEDURE);
13290    END IF;
13291 
13292    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
13293      trace(p_msg    => 'application_id = '||p_application_id||
13294                        ',amb_context_code = '||p_amb_context_code||
13295                        ',event_class_code = '||p_event_class_code||
13296                        ',event_type_code = '||p_event_type_code||
13297                        ',line_definition_owner_code = '||p_line_definition_owner_code||
13298                        ',line_definition_code = '||p_line_definition_code||
13299                        ',old_accting_line_type_code = '||p_old_accting_line_type_code||
13300                        ',old_accounting_line_code = '||p_old_accounting_line_code||
13301                        ',new_accting_line_type_code = '||p_new_accting_line_type_code||
13302                        ',new_accounting_line_code = '||p_new_accounting_line_code||
13303                        ',include_ac_assignments = '||p_include_ac_assignments||
13304                        ',include_adr_assignments = '||p_include_adr_assignments||
13305 		       ',p_mpa_option_code = '||p_mpa_option_code
13306           ,p_module => l_log_module
13307           ,p_level  => C_LEVEL_STATEMENT);
13308    END IF;
13309 
13310    IF ( p_include_adr_assignments = 'Y') THEN
13311       INSERT INTO xla_line_defn_adr_assgns
13312             (application_id
13313             ,amb_context_code
13314             ,event_class_code
13315             ,event_type_code
13316             ,line_definition_owner_code
13317             ,line_definition_code
13318             ,accounting_line_type_code
13319             ,accounting_line_code
13320             ,flexfield_segment_code
13321             ,adr_version_num
13322             ,segment_rule_type_code
13323             ,segment_rule_code
13324 	    ,segment_rule_appl_id
13325             ,side_code
13326             ,object_version_number
13327             ,inherit_adr_flag
13328             ,creation_date
13329             ,created_by
13330             ,last_update_date
13331             ,last_updated_by
13332             ,last_update_login)
13333       SELECT
13334              application_id
13335             ,amb_context_code
13336             ,event_class_code
13337             ,event_type_code
13338             ,line_definition_owner_code
13339             ,line_definition_code
13340             ,p_new_accting_line_type_code
13341             ,p_new_accounting_line_code
13342             ,flexfield_segment_code
13343             ,adr_version_num
13344             ,segment_rule_type_code
13345             ,segment_rule_code
13346 	    ,segment_rule_appl_id
13347             ,side_code
13348             ,1
13349             ,inherit_adr_flag
13350             ,l_creation_date
13351             ,l_created_by
13352             ,l_last_update_date
13353             ,l_last_updated_by
13354             ,l_last_update_login
13355         FROM xla_line_defn_adr_assgns
13356        WHERE application_id             = p_application_id
13357          AND amb_context_code           = p_amb_context_code
13358          AND event_class_code           = p_event_class_code
13359          AND event_type_code            = p_event_type_code
13360          AND line_definition_owner_code = p_line_definition_owner_code
13361          AND line_definition_code       = p_line_definition_code
13362          AND accounting_line_type_code  = p_old_accting_line_type_code
13363          AND accounting_line_code       = p_old_accounting_line_code;
13364 
13365       If (p_mpa_option_code = 'ACCRUAL') then
13366 
13367          INSERT INTO xla_mpa_jlt_adr_assgns
13368                (application_id
13369                ,amb_context_code
13370                ,event_class_code
13371                ,event_type_code
13372                ,line_definition_owner_code
13373                ,line_definition_code
13374                ,accounting_line_type_code
13375                ,accounting_line_code
13376                ,mpa_accounting_line_type_code
13377                ,mpa_accounting_line_code
13378                ,flexfield_segment_code
13379                ,segment_rule_type_code
13380                ,segment_rule_code
13381 	       ,segment_rule_appl_id
13382                ,object_version_number
13383                ,inherit_adr_flag
13384                ,creation_date
13385                ,created_by
13386                ,last_update_date
13387                ,last_updated_by
13388                ,last_update_login)
13389          SELECT
13390                application_id
13391               ,amb_context_code
13392               ,event_class_code
13393               ,event_type_code
13394               ,line_definition_owner_code
13395               ,line_definition_code
13396               ,p_new_accting_line_type_code
13397               ,p_new_accounting_line_code
13398               ,p_new_accting_line_type_code
13399               ,p_new_accounting_line_code
13400               ,flexfield_segment_code
13401               ,segment_rule_type_code
13402               ,segment_rule_code
13403               ,segment_rule_appl_id
13404               ,1
13405               ,inherit_adr_flag
13406               ,l_creation_date
13407               ,l_created_by
13408               ,l_last_update_date
13409               ,l_last_updated_by
13410               ,l_last_update_login
13411          FROM xla_mpa_jlt_adr_assgns
13412         WHERE application_id             = p_application_id
13413           AND amb_context_code           = p_amb_context_code
13414           AND event_class_code           = p_event_class_code
13415           AND event_type_code            = p_event_type_code
13416           AND line_definition_owner_code = p_line_definition_owner_code
13417           AND line_definition_code       = p_line_definition_code
13418           AND accounting_line_type_code  = p_old_accting_line_type_code
13419           AND accounting_line_code       = p_old_accounting_line_code
13420 	  AND mpa_accounting_line_type_code = p_old_accting_line_type_code
13421 	  AND mpa_accounting_line_code   = p_old_accounting_line_code;
13422 
13423       End If;   -- mpa_option_code = 'ACCRUAL'
13424    END IF;      -- p_include_adr_assignments = 'Y'
13425 
13426    IF (p_include_ac_assignments = 'Y') THEN
13427       INSERT INTO xla_line_defn_ac_assgns
13428              (application_id
13429              ,amb_context_code
13430              ,event_class_code
13431              ,event_type_code
13432              ,line_definition_owner_code
13433              ,line_definition_code
13434              ,accounting_line_type_code
13435              ,accounting_line_code
13436              ,analytical_criterion_type_code
13437              ,analytical_criterion_code
13438              ,object_version_number
13439              ,creation_date
13440              ,created_by
13441              ,last_update_date
13442              ,last_updated_by
13443              ,last_update_login)
13444         SELECT
13445               application_id
13446              ,amb_context_code
13447              ,event_class_code
13448              ,event_type_code
13449              ,line_definition_owner_code
13450              ,line_definition_code
13451              ,p_new_accting_line_type_code
13452              ,p_new_accounting_line_code
13453              ,analytical_criterion_type_code
13454              ,analytical_criterion_code
13455              ,1
13456              ,l_creation_date
13457              ,l_created_by
13458              ,l_last_update_date
13459              ,l_last_updated_by
13460              ,l_last_update_login
13461          FROM xla_line_defn_ac_assgns
13462         WHERE application_id             = p_application_id
13463           AND amb_context_code           = p_amb_context_code
13464           AND event_class_code           = p_event_class_code
13465           AND event_type_code            = p_event_type_code
13466           AND line_definition_owner_code = p_line_definition_owner_code
13467           AND line_definition_code       = p_line_definition_code
13468           AND accounting_line_type_code  = p_old_accting_line_type_code
13469           AND accounting_line_code       = p_old_accounting_line_code;
13470 
13471       If (p_mpa_option_code = 'ACCRUAL') then
13472 
13473          INSERT INTO xla_mpa_header_ac_assgns
13474                 (application_id
13475                 ,amb_context_code
13476                 ,event_class_code
13477                 ,event_type_code
13478                 ,line_definition_owner_code
13479                 ,line_definition_code
13480                 ,accounting_line_type_code
13481                 ,accounting_line_code
13482                 ,analytical_criterion_type_code
13483                 ,analytical_criterion_code
13484                 ,object_version_number
13485                 ,creation_date
13486                 ,created_by
13487                 ,last_update_date
13488                 ,last_updated_by
13489                 ,last_update_login)
13490           SELECT
13491                 application_id
13492                ,amb_context_code
13493                ,event_class_code
13494                ,event_type_code
13495                ,line_definition_owner_code
13496                ,line_definition_code
13497                ,p_new_accting_line_type_code
13498                ,p_new_accounting_line_code
13499                ,analytical_criterion_type_code
13500                ,analytical_criterion_code
13501                ,1
13502                ,l_creation_date
13503                ,l_created_by
13504                ,l_last_update_date
13505                ,l_last_updated_by
13506                ,l_last_update_login
13507            FROM xla_mpa_header_ac_assgns
13508           WHERE application_id             = p_application_id
13509             AND amb_context_code           = p_amb_context_code
13510             AND event_class_code           = p_event_class_code
13511             AND event_type_code            = p_event_type_code
13512             AND line_definition_owner_code = p_line_definition_owner_code
13513             AND line_definition_code       = p_line_definition_code
13514             AND accounting_line_type_code  = p_old_accting_line_type_code
13515             AND accounting_line_code       = p_old_accounting_line_code;
13516 
13517 
13518 	 INSERT INTO xla_mpa_jlt_ac_assgns
13519                 (application_id
13520                 ,amb_context_code
13521                 ,event_class_code
13522                 ,event_type_code
13523                 ,line_definition_owner_code
13524                 ,line_definition_code
13525                 ,accounting_line_type_code
13526                 ,accounting_line_code
13527 		,mpa_accounting_line_type_code
13528 	        ,mpa_accounting_line_code
13529                 ,analytical_criterion_type_code
13530                 ,analytical_criterion_code
13531     	        ,mpa_inherit_ac_flag
13532                 ,object_version_number
13533                 ,creation_date
13534                 ,created_by
13535                 ,last_update_date
13536                 ,last_updated_by
13537                 ,last_update_login)
13538           SELECT
13539                 application_id
13540                ,amb_context_code
13541                ,event_class_code
13542                ,event_type_code
13543                ,line_definition_owner_code
13544                ,line_definition_code
13545                ,p_new_accting_line_type_code
13546                ,p_new_accounting_line_code
13547                ,p_new_accting_line_type_code
13548                ,p_new_accounting_line_code
13549                ,analytical_criterion_type_code
13550                ,analytical_criterion_code
13551                ,mpa_inherit_ac_flag
13552                ,1
13553                ,l_creation_date
13554                ,l_created_by
13555                ,l_last_update_date
13556                ,l_last_updated_by
13557                ,l_last_update_login
13558            FROM xla_mpa_jlt_ac_assgns
13559           WHERE application_id             = p_application_id
13560             AND amb_context_code           = p_amb_context_code
13561             AND event_class_code           = p_event_class_code
13562             AND event_type_code            = p_event_type_code
13563             AND line_definition_owner_code = p_line_definition_owner_code
13564             AND line_definition_code       = p_line_definition_code
13565             AND accounting_line_type_code  = p_old_accting_line_type_code
13566             AND accounting_line_code       = p_old_accounting_line_code
13567             AND mpa_accounting_line_type_code = p_old_accting_line_type_code
13568             AND mpa_accounting_line_code   = p_old_accounting_line_code;
13569 
13570       End If;	-- p_mpa_option_code = 'ACCRUAL'
13571    END IF;	-- p_include_ac_assignments = 'Y'
13572 
13573    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13574       trace(p_msg    => 'END of procedure copy_line_assignment_details'
13575            ,p_module => l_log_module
13576            ,p_level  => C_LEVEL_PROCEDURE);
13577    END IF;
13578 
13579 EXCEPTION
13580   WHEN xla_exceptions_pkg.application_exception THEN
13581     RAISE;
13582 
13583   WHEN OTHERS THEN
13584     xla_exceptions_pkg.raise_message
13585       (p_location   => 'xla_line_definitions_pvt.copy_line_assignment_details');
13586 
13587 END copy_line_assignment_details;
13588 
13589 
13590 --=============================================================================
13591 --
13592 -- Name: get_line_definition_info
13593 -- Description: Validate the line definition
13594 --
13595 --=============================================================================
13596 PROCEDURE get_line_definition_info
13597   (p_application_id                   IN NUMBER
13598   ,p_amb_context_code                 IN VARCHAR2
13599   ,p_event_class_code                 IN VARCHAR2
13600   ,p_event_type_code                  IN VARCHAR2
13601   ,p_line_definition_owner_code       IN VARCHAR2
13602   ,p_line_definition_code             IN VARCHAR2
13603   ,x_line_definition_owner            IN OUT NOCOPY VARCHAR2
13604   ,x_line_definition_name             IN OUT NOCOPY VARCHAR2)
13605 IS
13606   CURSOR c_line_defn IS
13607    SELECT xld.name, xlk.meaning owner
13608      FROM xla_line_definitions_tl xld
13609          ,xla_lookups             xlk
13610     WHERE xld.application_id             = p_application_id
13611       AND xld.amb_context_code           = p_amb_context_code
13612       AND xld.event_class_code           = p_event_class_code
13613       AND xld.event_type_code            = p_event_type_code
13614       AND xld.line_definition_owner_code = p_line_definition_owner_code
13615       AND xld.line_definition_code       = p_line_definition_code
13616       AND xld.language                   = USERENV('LANG')
13617       AND xlk.lookup_type                = 'XLA_OWNER_TYPE'
13618       AND xlk.lookup_code                = xld.line_definition_owner_code;
13619 
13620   l_log_module  VARCHAR2(240);
13621 BEGIN
13622   IF g_log_enabled THEN
13623     l_log_module := C_DEFAULT_MODULE||'.get_line_definition_info';
13624   END IF;
13625 
13626   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13627     trace(p_msg    => 'BEGIN of procedure get_line_definition_info'
13628          ,p_module => l_log_module
13629          ,p_level  => C_LEVEL_PROCEDURE);
13630   END IF;
13631 
13632   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
13633     trace(p_msg    => 'application_id = '||p_application_id||
13634                       ',amb_context_code = '||p_amb_context_code||
13635                       ',event_class_code = '||p_event_class_code||
13636                       ',event_type_code = '||p_event_type_code||
13637                       ',line_definition_owner_code = '||p_line_definition_owner_code||
13638                       ',line_definition_code = '||p_line_definition_code
13639          ,p_module => l_log_module
13640          ,p_level  => C_LEVEL_STATEMENT);
13641   END IF;
13642 
13643   OPEN c_line_defn;
13644   FETCH c_line_defn INTO x_line_definition_name, x_line_definition_owner;
13645   CLOSE c_line_defn;
13646 
13647   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13648     trace(p_msg    => 'END of procedure get_line_definition_info'
13649          ,p_module => l_log_module
13650          ,p_level  => C_LEVEL_PROCEDURE);
13651   END IF;
13652 
13653 EXCEPTION
13654   WHEN xla_exceptions_pkg.application_exception THEN
13655     RAISE;
13656 
13657   WHEN OTHERS THEN
13658     xla_exceptions_pkg.raise_message
13659       (p_location   => 'xla_line_definitions_pvt.get_line_definition_info');
13660 
13661 END get_line_definition_info;
13662 
13663 
13664 
13665 --=============================================================================
13666 --
13667 -- Name: validate_line_definition
13668 -- Description: Validate the line definition
13669 --
13670 --=============================================================================
13671 FUNCTION validate_line_definition
13672   (p_application_id                   IN NUMBER
13673   ,p_amb_context_code                 IN VARCHAR2
13674   ,p_event_class_code                 IN VARCHAR2
13675   ,p_event_type_code                  IN VARCHAR2
13676   ,p_line_definition_owner_code       IN VARCHAR2
13677   ,p_line_definition_code             IN VARCHAR2)
13678 RETURN BOOLEAN
13679 IS
13680   l_return      BOOLEAN;
13681   l_log_module  VARCHAR2(240);
13682 BEGIN
13683   IF g_log_enabled THEN
13684     l_log_module := C_DEFAULT_MODULE||'.validate_line_definition';
13685   END IF;
13686 
13687   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13688     trace(p_msg    => 'BEGIN of procedure validate_line_definition'
13689          ,p_module => l_log_module
13690          ,p_level  => C_LEVEL_PROCEDURE);
13691   END IF;
13692 
13693   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
13694     trace(p_msg    => 'application_id = '||p_application_id||
13695                       ',amb_context_code = '||p_amb_context_code||
13696                       ',event_class_code = '||p_event_class_code||
13697                       ',event_type_code = '||p_event_type_code||
13698                       ',line_definition_owner_code = '||p_line_definition_owner_code||
13699                       ',line_definition_code = '||p_line_definition_code
13700          ,p_module => l_log_module
13701          ,p_level  => C_LEVEL_STATEMENT);
13702   END IF;
13703 
13704   l_return := TRUE;
13705 
13706   -- Delete the error table for the event class
13707   DELETE FROM xla_amb_setup_errors
13708    WHERE application_id              = p_application_id
13709      AND amb_context_code            = p_amb_context_code
13710      AND event_class_code            = p_event_class_code
13711      AND event_type_code             = p_event_type_code
13712      AND line_definition_owner_code  = p_line_definition_owner_code
13713      AND line_definition_code        = p_line_definition_code;
13714 
13715   l_return := chk_jld_same_entry
13716                      (p_application_id             => p_application_id
13717                      ,p_amb_context_code           => p_amb_context_code
13718                      ,p_event_class_code           => p_event_class_code
13719                      ,p_event_type_code            => p_event_type_code
13720                      ,p_line_definition_owner_code => p_line_definition_owner_code
13721                      ,p_line_definition_code       => p_line_definition_code)
13722               AND l_return;
13723 
13724   l_return := validate_line_descriptions
13725                      (p_application_id             => p_application_id
13726                      ,p_amb_context_code           => p_amb_context_code
13727                      ,p_event_class_code           => p_event_class_code
13728                      ,p_event_type_code            => p_event_type_code
13729                      ,p_line_definition_owner_code => p_line_definition_owner_code
13730                      ,p_line_definition_code       => p_line_definition_code)
13731               AND l_return;
13732 
13733   l_return := validate_jlt_assgns
13734                      (p_application_id             => p_application_id
13735                      ,p_amb_context_code           => p_amb_context_code
13736                      ,p_event_class_code           => p_event_class_code
13737                      ,p_event_type_code            => p_event_type_code
13738                      ,p_line_definition_owner_code => p_line_definition_owner_code
13739                      ,p_line_definition_code       => p_line_definition_code)
13740               AND l_return;
13741 
13742   l_return := validate_adr_assgns
13743                      (p_application_id             => p_application_id
13744                      ,p_amb_context_code           => p_amb_context_code
13745                      ,p_event_class_code           => p_event_class_code
13746                      ,p_event_type_code            => p_event_type_code
13747                      ,p_line_definition_owner_code => p_line_definition_owner_code
13748                      ,p_line_definition_code       => p_line_definition_code)
13749               AND l_return;
13750 
13751   l_return := validate_line_ac
13752                      (p_application_id             => p_application_id
13753                      ,p_amb_context_code           => p_amb_context_code
13754                      ,p_event_class_code           => p_event_class_code
13755                      ,p_event_type_code            => p_event_type_code
13756                      ,p_line_definition_owner_code => p_line_definition_owner_code
13757                      ,p_line_definition_code       => p_line_definition_code)
13758               AND l_return;
13759 
13760   l_return := validate_mapping_sets
13761                      (p_application_id             => p_application_id
13762                      ,p_amb_context_code           => p_amb_context_code
13763                      ,p_event_class_code           => p_event_class_code
13764                      ,p_event_type_code            => p_event_type_code
13765                      ,p_line_definition_owner_code => p_line_definition_owner_code
13766                      ,p_line_definition_code       => p_line_definition_code)
13767               AND l_return;
13768 
13769   l_return := validate_mpa_header_assgns
13770                (p_application_id             => p_application_id
13771                ,p_amb_context_code           => p_amb_context_code
13772                ,p_event_class_code           => p_event_class_code
13773                ,p_event_type_code            => p_event_type_code
13774                ,p_line_definition_owner_code => p_line_definition_owner_code
13775                ,p_line_definition_code       => p_line_definition_code)
13776             AND l_return;
13777 
13778    l_return := validate_mpa_line_assgns
13779                (p_application_id             => p_application_id
13780                ,p_amb_context_code           => p_amb_context_code
13781                ,p_event_class_code           => p_event_class_code
13782                ,p_event_type_code            => p_event_type_code
13783                ,p_line_definition_owner_code => p_line_definition_owner_code
13784                ,p_line_definition_code       => p_line_definition_code)
13785             AND l_return;
13786 
13787 
13788   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13789     trace(p_msg    => 'END of procedure validate_line_definition'
13790          ,p_module => l_log_module
13791          ,p_level  => C_LEVEL_PROCEDURE);
13792   END IF;
13793 
13794   RETURN l_return;
13795 EXCEPTION
13796   WHEN xla_exceptions_pkg.application_exception THEN
13797     RAISE;
13798 
13799   WHEN OTHERS THEN
13800     xla_exceptions_pkg.raise_message
13801       (p_location   => 'xla_line_definitions_pvt.validate_line_definition');
13802 
13803 END validate_line_definition;
13804 
13805 --=============================================================================
13806 --
13807 -- Name: validate_jld
13808 -- Description: Validate the line definition
13809 --
13810 --=============================================================================
13811 FUNCTION validate_jld
13812   (p_application_id                   IN NUMBER
13813   ,p_amb_context_code                 IN VARCHAR2
13814   ,p_event_class_code                 IN VARCHAR2
13815   ,p_event_type_code                  IN VARCHAR2
13816   ,p_line_definition_owner_code       IN VARCHAR2
13817   ,p_line_definition_code             IN VARCHAR2)
13818 RETURN BOOLEAN
13819 IS
13820   l_return      BOOLEAN;
13821   l_log_module  VARCHAR2(240);
13822 BEGIN
13823   IF g_log_enabled THEN
13824     l_log_module := C_DEFAULT_MODULE||'.validate_jld';
13825   END IF;
13826 
13827   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13828     trace(p_msg    => 'BEGIN of procedure validate_jld'
13829          ,p_module => l_log_module
13830          ,p_level  => C_LEVEL_PROCEDURE);
13831   END IF;
13832 
13833   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
13834     trace(p_msg    => 'application_id = '||p_application_id||
13835                       ',amb_context_code = '||p_amb_context_code||
13836                       ',event_class_code = '||p_event_class_code||
13837                       ',event_type_code = '||p_event_type_code||
13838                       ',line_definition_owner_code = '||p_line_definition_owner_code||
13839                       ',line_definition_code = '||p_line_definition_code
13840          ,p_module => l_log_module
13841          ,p_level  => C_LEVEL_STATEMENT);
13842   END IF;
13843 
13844   -- Set environment settings
13845   xla_environment_pkg.refresh;
13846 
13847   -- Initialize the error package
13848   xla_amb_setup_err_pkg.initialize;
13849 
13850   l_return := validate_line_definition
13851             (p_application_id             => p_application_id
13852             ,p_amb_context_code           => p_amb_context_code
13853             ,p_event_class_code           => p_event_class_code
13854             ,p_event_type_code            => p_event_type_code
13855             ,p_line_definition_owner_code => p_line_definition_owner_code
13856             ,p_line_definition_code       => p_line_definition_code);
13857 
13858   IF (NOT l_return) THEN
13859     xla_amb_setup_err_pkg.insert_errors;
13860   END IF;
13861 
13862   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13863     trace(p_msg    => 'END of procedure validate_jld'
13864          ,p_module => l_log_module
13865          ,p_level  => C_LEVEL_PROCEDURE);
13866   END IF;
13867 
13868   RETURN l_return;
13869 EXCEPTION
13870   WHEN xla_exceptions_pkg.application_exception THEN
13871     RAISE;
13872 
13873   WHEN OTHERS THEN
13874     xla_exceptions_pkg.raise_message
13875       (p_location   => 'xla_line_definitions_pvt.validate_jld');
13876 
13877 END validate_jld;
13878 
13879 --======================================================================
13880 --
13881 -- Name: check_copy_line_definition
13882 -- Description: Checks if the line definition can be copied into a new one
13883 --
13884 --======================================================================
13885 FUNCTION check_copy_line_definition
13886   (p_application_id                   IN NUMBER
13887   ,p_amb_context_code                 IN VARCHAR2
13888   ,p_event_class_code                 IN VARCHAR2
13889   ,p_event_type_code                  IN VARCHAR2
13890   ,p_old_line_defn_owner_code         IN VARCHAR2
13891   ,p_old_line_defn_code               IN VARCHAR2
13892   ,p_old_accounting_coa_id            IN NUMBER
13893   ,p_new_accounting_coa_id            IN NUMBER
13894   ,p_message                          IN OUT NOCOPY VARCHAR2
13895   ,p_token_1                          IN OUT NOCOPY VARCHAR2
13896   ,p_value_1                          IN OUT NOCOPY VARCHAR2)
13897 RETURN BOOLEAN
13898 IS
13899   l_log_module               VARCHAR2(240);
13900 
13901   l_flexfield_segment_code   VARCHAR2(30);
13902   l_flexfield_segment_name   VARCHAR2(80);
13903   l_return                   BOOLEAN := TRUE;
13904 
13905   CURSOR c_adr
13906   IS
13907   SELECT laa.flexfield_segment_code, seg.flex_value_set_id
13908    FROM xla_line_defn_adr_assgns laa, xla_seg_rules_b seg
13909   WHERE laa.application_id             = p_application_id
13910     AND laa.amb_context_code           = p_amb_context_code
13911     AND laa.event_class_code           = p_event_class_code
13912     AND laa.event_type_code            = p_event_type_code
13913     AND laa.line_definition_owner_code = p_old_line_defn_owner_code
13914     AND laa.line_definition_code       = p_old_line_defn_code
13915     AND laa.flexfield_segment_code     <> 'ALL'
13916 	AND laa.segment_rule_appl_id       = seg.application_id
13917     AND laa.amb_context_code           = seg.amb_context_code
13918 	AND laa.segment_rule_code          = seg.segment_rule_code
13919 	AND laa.segment_rule_type_code     = seg.segment_rule_type_code;
13920 
13921   l_adr  c_adr%rowtype;
13922 
13923 CURSOR c_valueset
13924 IS
13925 SELECT 'x'
13926 FROM   fnd_id_flex_segments
13927 WHERE  application_id          = 101
13928   AND  id_flex_code            = 'GL#'
13929   AND  id_flex_num             = p_new_accounting_coa_id
13930   AND  application_column_name = l_flexfield_segment_code
13931   AND  flex_value_set_id       = l_adr.flex_value_set_id
13932 ;
13933 
13934   l_valueset  c_valueset%rowtype;
13935 
13936 BEGIN
13937   IF g_log_enabled THEN
13938     l_log_module := C_DEFAULT_MODULE||'.check_copy_line_definition';
13939   END IF;
13940 
13941   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
13942     trace(p_msg    => 'BEGIN of procedure check_copy_line_definition'
13943          ,p_module => l_log_module
13944          ,p_level  => C_LEVEL_PROCEDURE);
13945   END IF;
13946 
13947   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
13948     trace(p_msg    => 'application_id = '||p_application_id||
13949                       ',amb_context_code = '||p_amb_context_code||
13950                       ',event_class_code = '||p_event_class_code||
13951                       ',event_type_code = '||p_event_type_code||
13952                       ',old_line_definition_owner_code = '||p_old_line_defn_owner_code||
13953                       ',old_line_definition_owner_code = '||p_old_line_defn_owner_code||
13954                       ',old_line_defn_code = '||p_old_line_defn_code
13955          ,p_module => l_log_module
13956          ,p_level  => C_LEVEL_PROCEDURE);
13957   END IF;
13958 
13959   IF p_new_accounting_coa_id is not null and p_old_accounting_coa_id is null THEN
13960 
13961      OPEN c_adr;
13962      LOOP
13963      FETCH c_adr
13964       INTO l_adr;
13965      EXIT WHEN c_adr%notfound or l_return = FALSE;
13966 
13967           l_flexfield_segment_code := xla_flex_pkg.get_qualifier_segment
13968                                                 (p_application_id    => 101
13969                                                 ,p_id_flex_code      => 'GL#'
13970                                                 ,p_id_flex_num       => p_new_accounting_coa_id
13971                                                 ,p_qualifier_segment => l_adr.flexfield_segment_code);
13972 
13973           IF l_flexfield_segment_code is null THEN
13974              l_flexfield_segment_name := xla_flex_pkg.get_qualifier_name
13975                                                (p_application_id    => 101
13976                                                ,p_id_flex_code      => 'GL#'
13977                                                ,p_qualifier_segment => l_adr.flexfield_segment_code);
13978 
13979              p_message := 'XLA_AB_ACCT_COA_NO_QUAL';
13980              p_token_1 := 'QUALIFIER_NAME';
13981              p_value_1 := l_flexfield_segment_name;
13982              l_return := FALSE;
13983 
13984          ELSIF l_adr.flex_value_set_id is not null THEN
13985             OPEN c_valueset;
13986             FETCH c_valueset
13987              INTO l_valueset;
13988             IF c_valueset%notfound THEN
13989 
13990                l_flexfield_segment_name := xla_flex_pkg.get_qualifier_name
13991                                                (p_application_id    => 101
13992                                                ,p_id_flex_code      => 'GL#'
13993                                                ,p_qualifier_segment => l_adr.flexfield_segment_code);
13994 
13995                p_message := 'XLA_AB_VALUESET_NOT_MATCH';
13996                p_token_1 := 'QUALIFIER_NAME';
13997                p_value_1 := l_flexfield_segment_name;
13998                l_return := FALSE;
13999             END IF;
14000          END IF;
14001      END LOOP;
14002      CLOSE c_adr;
14003   END IF;
14004 
14005   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
14006     trace(p_msg    => 'END of procedure check_copy_line_definition'
14007          ,p_module => l_log_module
14008          ,p_level  => C_LEVEL_PROCEDURE);
14009   END IF;
14010 
14011   RETURN l_return;
14012 
14013 EXCEPTION
14014   WHEN xla_exceptions_pkg.application_exception THEN
14015     RAISE;
14016   WHEN OTHERS                                   THEN
14017     xla_exceptions_pkg.raise_message
14018       (p_location   => 'xla_line_definitions_pvt.check_copy_line_definition');
14019 END check_copy_line_definition;
14020 
14021 --======================================================================
14022 --
14023 -- Name: check_adr_has_loop
14024 -- Description: Returns true if the ADR has an attached ADR which in
14025 -- turn has another ADR attached
14026 --
14027 --======================================================================
14028 FUNCTION check_adr_has_loop
14029   (p_application_id                   IN NUMBER
14030   ,p_amb_context_code                 IN VARCHAR2
14031   ,p_event_class_code                 IN VARCHAR2
14032   ,p_event_type_code                  IN VARCHAR2
14033   ,p_line_definition_owner_code       IN VARCHAR2
14034   ,p_line_definition_code             IN VARCHAR2)
14035 RETURN BOOLEAN
14036 IS
14037   l_log_module               VARCHAR2(240);
14038 
14039   l_return                   BOOLEAN := TRUE;
14040   l_exist                    VARCHAR2(1);
14041 
14042   CURSOR c_child_adr IS
14043     SELECT distinct xsr.value_segment_rule_appl_id,
14044                     xsr.value_segment_rule_type_code, xsr.value_segment_rule_code
14045       FROM xla_line_defn_jlt_assgns xjl
14046           ,xla_line_defn_adr_assgns xad
14047           ,xla_seg_rule_details    xsr
14048      WHERE xsr.application_id             = xad.application_id
14049        AND xsr.amb_context_code           = xad.amb_context_code
14050        AND xsr.segment_rule_type_code     = xad.segment_rule_type_code
14051        AND xsr.segment_rule_code          = xad.segment_rule_code
14052        AND xsr.value_type_code            = 'A'
14053        AND xad.application_id             = xjl.application_id
14054        AND xad.amb_context_code           = xjl.amb_context_code
14055        AND xad.line_definition_owner_code = xjl.line_definition_owner_code
14056        AND xad.line_definition_code       = xjl.line_definition_code
14057        AND xad.event_class_code           = xjl.event_class_code
14058        AND xad.event_type_code            = xjl.event_type_code
14059        AND xad.accounting_line_type_code  = xjl.accounting_line_type_code
14060        AND xad.accounting_line_code       = xjl.accounting_line_code
14061        AND xad.segment_rule_code           is not null
14062        AND xjl.application_id             = p_application_id
14063        AND xjl.amb_context_code           = p_amb_context_code
14064        AND xjl.event_class_code           = p_event_class_code
14065        AND xjl.event_type_code            = p_event_type_code
14066        AND xjl.line_definition_owner_code = p_line_definition_owner_code
14067        AND xjl.line_definition_code       = p_line_definition_code
14068        AND xjl.active_flag                = 'Y';
14069 
14070   l_child_adr     c_child_adr%rowtype;
14071 
14072   CURSOR c_adr_loop IS
14073   SELECT 'x'
14074     FROM xla_seg_rule_details xsd
14075    WHERE application_id         = l_child_adr.value_segment_rule_appl_id
14076      AND amb_context_code       = p_amb_context_code
14077      AND segment_rule_type_code = l_child_adr.value_segment_rule_type_code
14078      AND segment_rule_code      = l_child_adr.value_segment_rule_code
14079      AND value_type_code        = 'A';
14080 
14081 BEGIN
14082   IF g_log_enabled THEN
14083     l_log_module := C_DEFAULT_MODULE||'.check_adr_has_loop';
14084   END IF;
14085 
14086   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
14087     trace(p_msg    => 'BEGIN of procedure check_adr_has_loop'
14088          ,p_module => l_log_module
14089          ,p_level  => C_LEVEL_PROCEDURE);
14090   END IF;
14091 
14092   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
14093     trace(p_msg    => 'application_id = '||p_application_id||
14094                       ',amb_context_code = '||p_amb_context_code||
14095                       ',event_class_code = '||p_event_class_code||
14096                       ',event_type_code = '||p_event_type_code||
14097                       ',line_definition_owner_code = '||p_line_definition_owner_code||
14098                       ',line_definition_code = '||p_line_definition_code
14099          ,p_module => l_log_module
14100          ,p_level  => C_LEVEL_STATEMENT);
14101   END IF;
14102 
14103   OPEN c_child_adr;
14104   LOOP
14105      FETCH c_child_adr
14106       INTO l_child_adr;
14107      EXIT WHEN c_child_adr%notfound;
14108 
14109      OPEN c_adr_loop;
14110      FETCH c_adr_loop
14111       INTO l_exist;
14112      IF c_adr_loop%found THEN
14113 
14114          l_return := FALSE;
14115 
14116          xla_amb_setup_err_pkg.stack_error
14117               (p_message_name               => 'XLA_AB_ADR_HAS_LOOP'
14118               ,p_message_type               => 'E'
14119               ,p_message_category           => 'SEG_RULE'
14120               ,p_category_sequence          => 13
14121               ,p_application_id             => p_application_id
14122               ,p_amb_context_code           => p_amb_context_code
14123               ,p_event_class_code           => p_event_class_code
14124               ,p_event_type_code            => p_event_type_code
14125               ,p_line_definition_owner_code => p_line_definition_owner_code
14126               ,p_line_definition_code       => p_line_definition_code
14127               ,p_segment_rule_type_code     => l_child_adr.value_segment_rule_type_code
14128               ,p_segment_rule_code          => l_child_adr.value_segment_rule_code);
14129 
14130      END IF;
14131      CLOSE c_adr_loop;
14132   END LOOP;
14133   CLOSE c_child_adr;
14134 
14135 
14136   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
14137     trace(p_msg    => 'END of procedure check_adr_has_loop'
14138          ,p_module => l_log_module
14139          ,p_level  => C_LEVEL_PROCEDURE);
14140   END IF;
14141 
14142   RETURN l_return;
14143 
14144 EXCEPTION
14145   WHEN xla_exceptions_pkg.application_exception THEN
14146     RAISE;
14147   WHEN OTHERS                                   THEN
14148     xla_exceptions_pkg.raise_message
14149       (p_location   => 'xla_line_definitions_pvt.check_adr_has_loop');
14150 END check_adr_has_loop;
14151 
14152 
14153 --=============================================================================
14154 --
14155 -- Name: delete_mpa_jlt_details
14156 -- Description: Deletes all details of the mpa line assignment
14157 --
14158 --=============================================================================
14159 PROCEDURE delete_mpa_jlt_details
14160   (p_application_id                   IN NUMBER
14161   ,p_amb_context_code                 IN VARCHAR2
14162   ,p_event_class_code                 IN VARCHAR2
14163   ,p_event_type_code                  IN VARCHAR2
14164   ,p_line_definition_owner_code        IN VARCHAR2
14165   ,p_line_definition_code             IN VARCHAR2
14166   ,p_accounting_line_type_code        IN VARCHAR2
14167   ,p_accounting_line_code             IN VARCHAR2
14168   ,p_mpa_accounting_line_type_co      IN VARCHAR2
14169   ,p_mpa_accounting_line_code         IN VARCHAR2)
14170 IS
14171   l_log_module  VARCHAR2(240);
14172 BEGIN
14173   IF g_log_enabled THEN
14174     l_log_module := C_DEFAULT_MODULE||'.delete_mpa_jlt_details';
14175   END IF;
14176 
14177   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
14178     trace(p_msg    => 'BEGIN of procedure delete_mpa_jlt_details'
14179          ,p_module => l_log_module
14180          ,p_level  => C_LEVEL_PROCEDURE);
14181   END IF;
14182 
14183   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
14184     trace(p_msg    => 'application_id = '||p_application_id||
14185                       ',amb_context_code = '||p_amb_context_code||
14186                       ',event_class_code = '||p_event_class_code||
14187                       ',event_type_code = '||p_event_type_code||
14188                       ',line_definition_owner_code = '||p_line_definition_owner_code||
14189                       ',line_definition_code = '||p_line_definition_code||
14190                       ',accounting_line_type_code = '||p_accounting_line_type_code||
14191                       ',accounting_line_code = '||p_accounting_line_code||
14192 		      ',mpa_accounting_line_type_co = '||p_mpa_accounting_line_type_co||
14193 		      ',mpa_accounting_line_code = ' ||p_mpa_accounting_line_code
14194          ,p_module => l_log_module
14195          ,p_level  => C_LEVEL_STATEMENT);
14196   END IF;
14197 
14198   DELETE
14199     FROM xla_mpa_jlt_adr_assgns
14200    WHERE application_id            = p_application_id
14201      AND amb_context_code          = p_amb_context_code
14202      AND event_class_code          = p_event_class_code
14203      AND event_type_code           = p_event_type_code
14204      AND line_definition_owner_code = p_line_definition_owner_code
14205      AND line_definition_code      = p_line_definition_code
14206      AND accounting_line_type_code = p_accounting_line_type_code
14207      AND accounting_line_code      = p_accounting_line_code
14208      AND mpa_accounting_line_type_code = p_mpa_accounting_line_type_co
14209      AND mpa_accounting_line_code    = p_mpa_accounting_line_code;
14210 
14211   DELETE
14212     FROM xla_mpa_jlt_ac_assgns
14213    WHERE application_id            = p_application_id
14214      AND amb_context_code          = p_amb_context_code
14215      AND event_class_code          = p_event_class_code
14216      AND event_type_code           = p_event_type_code
14217      AND line_definition_owner_code = p_line_definition_owner_code
14218      AND line_definition_code      = p_line_definition_code
14219      AND accounting_line_type_code = p_accounting_line_type_code
14220      AND accounting_line_code      = p_accounting_line_code
14221      AND mpa_accounting_line_type_code = p_mpa_accounting_line_type_co
14222      AND mpa_accounting_line_code    = p_mpa_accounting_line_code;
14223 
14224   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
14225     trace(p_msg    => 'END of procedure delete_mpa_jlt_details'
14226          ,p_module => l_log_module
14227          ,p_level  => C_LEVEL_PROCEDURE);
14228   END IF;
14229 
14230 EXCEPTION
14231   WHEN xla_exceptions_pkg.application_exception THEN
14232     RAISE;
14233   WHEN OTHERS                                   THEN
14234     xla_exceptions_pkg.raise_message
14235       (p_location   => 'xla_line_definitions_pvt.delete_mpa_jlt_details');
14236 END delete_mpa_jlt_details;
14237 
14238 
14239 --=============================================================================
14240 --
14241 -- Following code is executed when the package body is referenced for the first
14242 -- time
14243 --
14244 --=============================================================================
14245 BEGIN
14246    g_log_level          := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
14247    g_log_enabled        := fnd_log.test
14248                           (log_level  => g_log_level
14249                           ,module     => C_DEFAULT_MODULE);
14250 
14251    IF NOT g_log_enabled THEN
14252       g_log_level := C_LEVEL_LOG_DISABLED;
14253    END IF;
14254 
14255 END xla_line_definitions_pvt;