DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKC_TERMS_QA_GRP

Source


1 PACKAGE BODY OKC_TERMS_QA_GRP AS
2 /* $Header: OKCGDQAB.pls 120.5 2008/01/23 12:19:36 harchand ship $ */
3 
4 
5     ---------------------------------------------------------------------------
6     -- GLOBAL MESSAGE CONSTANTS
7     ---------------------------------------------------------------------------
8     G_FND_APP                    CONSTANT VARCHAR2(200) := OKC_API.G_FND_APP;
9     G_UNABLE_TO_RESERVE_REC      CONSTANT VARCHAR2(200) := OKC_API.G_UNABLE_TO_RESERVE_REC;
10     G_RECORD_DELETED             CONSTANT VARCHAR2(200) := OKC_API.G_RECORD_DELETED;
11     G_RECORD_CHANGED             CONSTANT VARCHAR2(200) := OKC_API.G_RECORD_CHANGED;
12     G_RECORD_LOGICALLY_DELETED   CONSTANT VARCHAR2(200) := OKC_API.G_RECORD_LOGICALLY_DELETED;
13     G_REQUIRED_VALUE             CONSTANT VARCHAR2(200) := OKC_API.G_REQUIRED_VALUE;
14     G_INVALID_VALUE              CONSTANT VARCHAR2(200) := OKC_API.G_INVALID_VALUE;
15     G_COL_NAME_TOKEN             CONSTANT VARCHAR2(200) := OKC_API.G_COL_NAME_TOKEN;
16     G_PARENT_TABLE_TOKEN         CONSTANT VARCHAR2(200) := OKC_API.G_PARENT_TABLE_TOKEN;
17     G_CHILD_TABLE_TOKEN          CONSTANT VARCHAR2(200) := OKC_API.G_CHILD_TABLE_TOKEN;
18     ---------------------------------------------------------------------------
19     -- GLOBAL CONSTANTS
20     ---------------------------------------------------------------------------
21     G_PKG_NAME                   CONSTANT   VARCHAR2(200) := 'OKC_TERMS_QA_GRP';
22     G_MODULE                     CONSTANT   VARCHAR2(200) := 'okc.plsql.'||G_PKG_NAME||'.';
23     G_APP_NAME                   CONSTANT   VARCHAR2(3)   := OKC_API.G_APP_NAME;
24     ------------------------------------------------------------------------------
25     -- GLOBAL CONSTANTS
26     ------------------------------------------------------------------------------
27     G_FALSE                      CONSTANT   VARCHAR2(1) := FND_API.G_FALSE;
28     G_TRUE                       CONSTANT   VARCHAR2(1) := FND_API.G_TRUE;
29 
30     G_RET_STS_SUCCESS            CONSTANT   varchar2(1) := FND_API.G_RET_STS_SUCCESS;
31     G_RET_STS_ERROR              CONSTANT   varchar2(1) := FND_API.G_RET_STS_ERROR;
32     G_RET_STS_UNEXP_ERROR        CONSTANT   varchar2(1) := FND_API.G_RET_STS_UNEXP_ERROR;
33 
34     G_QA_SUCCESS                 CONSTANT   VARCHAR2(200) := 'OKC_CONTRACTS_QA_SUCCESS';
35     G_UNEXPECTED_ERROR           CONSTANT   varchar2(200) := 'OKC_UNEXPECTED_ERROR';
36     G_SQLERRM_TOKEN              CONSTANT   varchar2(200) := 'ERROR_MESSAGE';
37     G_SQLCODE_TOKEN              CONSTANT   varchar2(200) := 'ERROR_CODE';
38 
39     G_QA_LOOKUP                  CONSTANT   VARCHAR2(30)  := 'OKC_TERM_QA_LIST';
40     G_TMPL_QA_TYPE               CONSTANT   VARCHAR2(30)  := 'TEMPLATE';
41     G_TMPL_DOC_TYPE              CONSTANT   VARCHAR2(30)  := OKC_TERMS_UTIL_GRP.G_TMPL_DOC_TYPE;
42 
43     ---------------------------------------------------------------------------
44     -- Procedure QA_Doc version 1
45     ---------------------------------------------------------------------------
46     /* version 1, logs valiation messages in OKC_QA_ERRORS_T table
47     returns x_sequence_id as out parameter
48     11.5.10+ : Modified to accept addtional in parameter p_validation_level
49     */
50     PROCEDURE qa_doc     (
51         p_api_version       IN  NUMBER ,
52         p_init_msg_list     IN  VARCHAR2 ,
53         x_return_status     OUT NOCOPY VARCHAR2 ,
54         x_msg_data          OUT NOCOPY VARCHAR2 ,
55         x_msg_count         OUT NOCOPY NUMBER ,
56 
57         p_qa_mode           IN  VARCHAR2 ,
58         p_doc_type          IN  VARCHAR2 ,
59         p_doc_id            IN  NUMBER ,
60 
61         x_sequence_id       OUT NOCOPY NUMBER ,
62         x_qa_return_status  OUT NOCOPY VARCHAR2 ,
63         p_qa_terms_only     IN VARCHAR2 ,
64         p_validation_level  IN VARCHAR2,
65         p_commit            IN	VARCHAR2,
66         p_run_expert_flag   IN VARCHAR2 DEFAULT 'Y')
67     IS
68 
69         l_api_version       CONSTANT NUMBER := 1;
70         l_api_name          CONSTANT VARCHAR2(30) := 'QA_Doc';
71         l_qa_result_tbl     qa_result_tbl_type;
72         l_bus_doc_date_events_tbl BUSDOCDATES_TBL_TYPE;
73         l_error_found      Boolean := FALSE;
74         l_warning_found    Boolean := FALSE;
75         l_contract_source  OKC_TEMPLATE_USAGES.CONTRACT_SOURCE_CODE%TYPE;
76         l_now              DATE;
77 
78         l_qa_code           OKC_QA_ERRORS_T.QA_CODE%TYPE;
79         l_severity          OKC_QA_ERRORS_T.ERROR_SEVERITY%TYPE;
80         l_desc              OKC_QA_ERRORS_T.PROBLEM_SHORT_DESC%TYPE;
81         l_perform_layout_tmpl_qa VARCHAR2(1);
82         l_template_id       OKC_TEMPLATE_USAGES.TEMPLATE_ID%TYPE;
83 
84       CURSOR l_get_qa_detail_csr IS
85        SELECT fnd.lookup_code qa_code,
86              fnd.meaning qa_name,
87              nvl(qa.severity_flag,G_QA_STS_WARNING) severity_flag ,
88              decode(fnd.enabled_flag,'N','N','Y',decode(qa.enable_qa_yn,'N','N','Y'),'Y') perform_qa
89         FROM FND_LOOKUPS FND, OKC_DOC_QA_LISTS QA
90         WHERE QA.DOCUMENT_TYPE(+)=p_doc_type
91         AND   QA.QA_CODE(+) = FND.LOOKUP_CODE
92         AND   FND.LOOKUP_CODE = 'CHECK_TERMS_EXIST'
93         AND   Fnd.LOOKUP_TYPE=G_QA_LOOKUP;
94 
95       CURSOR l_get_template_id IS
96        SELECT template_id
97         FROM  OKC_TEMPLATE_USAGES
98         WHERE document_type = p_doc_type
99         AND   document_id = p_doc_id;
100 
101     BEGIN
102         l_contract_source := 'NONE';
103         l_now := SYSDATE;
104         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
105             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: Entered QA_Doc');
106         END IF;
107 
108         -- Standard Start of API savepoint
109         SAVEPOINT g_QA_Doc;
110 
111         -- Standard call to check for call compatibility.
112         IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
113             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
114         END IF;
115 
116         -- Initialize message list if p_init_msg_list is set to TRUE.
117         IF FND_API.to_Boolean( p_init_msg_list ) THEN
118             FND_MSG_PUB.initialize;
119         END IF;
120         --  Initialize API return status to success
121         x_return_status := G_RET_STS_SUCCESS;
122 
123       IF p_doc_type <> G_TMPL_QA_TYPE THEN
124 
125         l_contract_source := OKC_TERMS_UTIL_GRP.Get_Contract_Source_Code(
126                                     p_document_type    => p_doc_type,
127                                     p_document_id      => p_doc_id
128                                     );
129           IF (l_contract_source = 'E') THEN
130             RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
131           END IF;
132 	 END IF;
133 
134       --Added for 10+ word integration
135       IF l_contract_source = 'ATTACHED' THEN
136        --------------------------------------------
137        -- Contract is in attached document from
138        --------------------------------------------
139       --Added for 10+ word integration
140         OKC_CONTRACT_DOCS_GRP.qa_doc(
141             p_api_version      => l_api_version,
142             x_return_status    => x_return_status,
143             x_msg_count        => x_msg_count,
144             x_msg_data         => x_msg_data,
145 
146             p_doc_type         => p_doc_type,
147             p_doc_id           => p_doc_id,
148 
149             x_qa_result_tbl    => l_qa_result_tbl,
150             x_qa_return_status => x_qa_return_status
151             );
152 
153         --------------------------------------------
154         IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
155           RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
156         ELSIF (x_return_status = G_RET_STS_ERROR) THEN
157           RAISE FND_API.G_EXC_ERROR ;
158         END IF;
159         --------------------------------------------
160 
161       ELSIF  (l_contract_source = 'STRUCTURED' OR p_doc_type = G_TMPL_QA_TYPE) THEN
162        --------------------------------------------
163        -- Contract is in structured terms format OR Document is Template
164        --------------------------------------------
165        IF p_qa_mode='AMEND' THEN
166             --------------------------------------------
167             -- Calling API to mark any article amended if system variable used in that API has been changed
168             --------------------------------------------
169             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
170                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: Call API OKC_TERMS_UTIL_GRP.Mark_Variable_Based_Amendment ');
171             END IF;
172 
173             OKC_TERMS_UTIL_GRP.Mark_Variable_Based_Amendment(
174                                p_api_version      =>1,
175                                p_init_msg_list    => FND_API.G_FALSE,
176                                p_commit           => FND_API.G_TRUE,
177                                p_doc_type         => p_doc_type,
178                                p_doc_id           => p_doc_id,
179                                x_return_status    => x_return_status,
180                                x_msg_count        => x_msg_count,
181                                x_msg_data         => x_msg_data
182                              );
183            --------------------------------------------
184            IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
185                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
186            ELSIF (x_return_status = G_RET_STS_ERROR) THEN
187                   RAISE FND_API.G_EXC_ERROR ;
188            END IF;
189            --------------------------------------------
190        END IF;
191 
192       --------------------------------------------
193       -- Call internal QA_Doc and put result into PLSQL table and save it in DB
194       --------------------------------------------
195        IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
196         FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: Call Private QA_Doc and put result into PLSQL table and save it in DB');
197        END IF;
198 
199        OKC_TERMS_QA_PVT.QA_Doc(
200         x_return_status    => x_return_status,
201 
202 ----      p_save             => 'Y',
203         p_qa_mode          => p_qa_mode,
204         p_doc_type         => p_doc_type,
205         p_doc_id           => p_doc_id,
206         x_msg_count        => x_msg_count,
207         x_msg_data         => x_msg_data,
208 
209         x_sequence_id      => x_sequence_id,
210         x_qa_result_tbl    => l_qa_result_tbl,
211         x_qa_return_status => x_qa_return_status,
212 	   p_run_expert_flag  => p_run_expert_flag
213        );
214       --------------------------------------------
215        IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
216          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
217        ELSIF (x_return_status = G_RET_STS_ERROR) THEN
218          RAISE FND_API.G_EXC_ERROR ;
219        END IF;
220       --------------------------------------------
221 
222     ELSE --l_contract_source = NULL
223       --Template has not been applied on the document, no qa needs to be done.
224       x_qa_return_status := G_QA_STS_SUCCESS;
225       RETURN;
226     END IF;
227 
228 
229     ----------------------------------------------------------------------
230     -- QA Check for Lock Contract - to be run for p_doc_type <> 'TEMPLATE'
231     ----------------------------------------------------------------------
232     IF p_doc_type<>G_TMPL_DOC_TYPE THEN
233       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
234 	    FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'2210: calling check_lock_contract');
235 	 END IF;
236 	 OKC_TERMS_QA_PVT.Check_lock_contract(
237 	 p_qa_mode          => p_qa_mode,
238 	 p_doc_type         => p_doc_type,
239 	 p_doc_id           => p_doc_id,
240 	 x_qa_result_tbl   => l_qa_result_tbl,
241 	 x_qa_return_status => x_qa_return_status,
242 	 x_return_status    => x_return_status);
243 
244 	 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
245 	    RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
246 	 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
247 	    RAISE FND_API.G_EXC_ERROR ;
248 	 END IF;
249     END IF;
250 
251     ----------------------------------------------------------------------
252     -- QA Check for Contract Admin - to be run for p_doc_type <> 'TEMPLATE'
253     ----------------------------------------------------------------------
254     IF p_doc_type<>G_TMPL_DOC_TYPE THEN
255       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
256 	 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'2210: calling check_contract_admin');
257       END IF;
258       OKC_TERMS_QA_PVT.check_contract_admin(
259        p_qa_mode          => p_qa_mode,
260 	  p_doc_type         => p_doc_type,
261 	  p_doc_id           => p_doc_id,
262 	  x_qa_result_tbl   => l_qa_result_tbl,
263 	  x_qa_return_status => x_qa_return_status,
264 	  x_return_status    => x_return_status
265 	  );
266 	 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
267 	   RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
268 	 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
269 	   RAISE FND_API.G_EXC_ERROR ;
270 	 END IF;
271     END IF;
272 
273 
274     OPEN l_get_template_id;
275     FETCH l_get_template_id INTO l_template_id;
276     CLOSE l_get_template_id;
277     ------------------------------------------------------------
278     -- QA Check for deliverables, if p_qa_terms_only is 'N' and a template is instantiated
279     ------------------------------------------------------------
280 
281     IF p_qa_terms_only = 'N' AND l_template_id IS NOT NULL THEN
282 
283 
284             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
285                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'201: Call Private QA_Doc for deilverables and add result into PLSQL table and save it in DB');
286             END IF;
287 
288             OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa (
289                 p_api_version     => 1,
290                 p_init_msg_list   => FND_API.G_FALSE,
291                 p_doc_type        => p_doc_type,
292                 p_doc_id          => p_doc_id,
293                 p_mode            => p_qa_mode,
294                 p_bus_doc_date_events_tbl => l_bus_doc_date_events_tbl,
295                 p_qa_result_tbl   => l_qa_result_tbl,
296                 x_msg_data        => x_msg_data,
297                 x_msg_count       => x_msg_count,
298                 x_return_status   => x_return_status,
299                 x_qa_return_status => x_qa_return_status);
300             IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
301                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
302             ELSIF (x_return_status = G_RET_STS_ERROR) THEN
303                 RAISE FND_API.G_EXC_ERROR ;
304             END IF;
305 
306         END IF;
307 
308         --------------------------------------------
309         -- VALIDATIONS are done for Terms and Deliverables.
313         --------------------------------------------
310         -- Now insert into Temp table.
311         --------------------------------------------
312         -- Save result from PLSQL table into DB table
314         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
315             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'2200: Save result from PLSQL table into DB table');
316         END IF;
317 
318         x_qa_return_status := G_QA_STS_SUCCESS;
319 
320         --Bug fix for bug#3290738
321         --After calling the validation APIs we need to find out about the x_qa_return_status
322         IF l_qa_result_tbl.COUNT > 0 THEN
323             FOR i IN l_qa_result_tbl.FIRST..l_qa_result_tbl.LAST LOOP
324                 --Bug 3302652 takintoy
325                 --Populate columns to be updated in okc_qa_errors_t
326                 l_qa_result_tbl(i).error_record_type_name := okc_util.decode_lookup('OKC_ERROR_RECORD_TYPE',l_qa_result_tbl(i).error_record_type);
327                 l_qa_result_tbl(i).error_severity_name    := okc_util.decode_lookup('OKC_QA_SEVERITY',l_qa_result_tbl(i).error_severity);
328 
329                 IF l_qa_result_tbl(i).Error_severity = G_QA_STS_ERROR THEN
330                     l_error_found := true;
331                 END IF;
332                 IF l_qa_result_tbl(i).Error_severity = G_QA_STS_WARNING THEN
333                     l_warning_found := true;
334                 END IF;
335 
336             END LOOP;
337             IF l_error_found THEN
338                 x_qa_return_status := G_QA_STS_ERROR;
339             ELSIF l_warning_found THEN
340                 x_qa_return_status := G_QA_STS_WARNING;
341             END IF;
342         END IF;
343 
344 
345 
346         OKC_TERMS_QA_PVT.log_qa_messages(
347             x_return_status    => x_return_status,
348 
349             p_qa_result_tbl    => l_qa_result_tbl,
350             x_sequence_id      => x_sequence_id
351             );
352         IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
353             RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
354         ELSIF (x_return_status = G_RET_STS_ERROR) THEN
355             RAISE FND_API.G_EXC_ERROR ;
356         END IF;
357 
358         -- do a commit only if p_commit = 'T' (default value)
359         IF FND_API.To_Boolean( p_commit ) THEN
360 			COMMIT WORK;
361 		END IF;
362 
363         -- Standard call to get message count and if count is 1, get message info.
364         FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
365         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
366             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: Leaving QA_Doc');
367         END IF;
368 
369     EXCEPTION
370         WHEN FND_API.G_EXC_ERROR THEN
371             ROLLBACK TO g_QA_Doc;
372             IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
373                 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'400: Leaving QA_Doc : OKC_API.G_EXCEPTION_ERROR Exception');
374             END IF;
375             x_return_status := G_RET_STS_ERROR ;
376             FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
377 
378         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
379             ROLLBACK TO g_QA_Doc;
380             IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
381                 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'500: Leaving QA_Doc : OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
382             END IF;
383             x_return_status := G_RET_STS_UNEXP_ERROR ;
384             FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
385 
386         WHEN OTHERS THEN
387             ROLLBACK TO g_QA_Doc;
388             IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
389                 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'600: Leaving QA_Doc because of EXCEPTION: '||sqlerrm);
390             END IF;
391 
392             x_return_status := G_RET_STS_UNEXP_ERROR ;
393             IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
394                 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
395             END IF;
396             FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
397     END qa_doc;
398 
399     ---------------------------------------------------------------------------
400     -- Procedure QA_Doc version 2
401     ---------------------------------------------------------------------------
402     /* version 2, does not log valiation messages in OKC_QA_ERRORS_T table
403     returns x_qa_result_tbl as out parameter
404     11.5.10+: No modification
405     */
406     PROCEDURE QA_Doc     (
407         p_api_version       IN  NUMBER ,
408         p_init_msg_list     IN  VARCHAR2 ,
409         x_return_status     OUT NOCOPY VARCHAR2 ,
410         x_msg_data          OUT NOCOPY VARCHAR2 ,
411         x_msg_count         OUT NOCOPY NUMBER ,
412 
413         p_qa_mode           IN  VARCHAR2 ,
414         p_doc_type          IN  VARCHAR2 ,
415         p_doc_id            IN  NUMBER ,
416 
417         x_qa_result_tbl    OUT NOCOPY qa_result_tbl_type,
418         x_qa_return_status OUT NOCOPY VARCHAR2,
419 
420         p_qa_terms_only    IN VARCHAR2 ,
424         l_api_version       CONSTANT NUMBER := 1;
421 	   p_run_expert_flag  IN VARCHAR2 DEFAULT 'Y') -- Bug 5186245
422     IS
423 
425         l_api_name          CONSTANT VARCHAR2(30) := 'QA_Doc';
426         l_sequence_id      NUMBER;
427         l_bus_doc_date_events_tbl BUSDOCDATES_TBL_TYPE;
428         l_error_found      Boolean := FALSE;
429         l_warning_found    Boolean := FALSE;
430         l_contract_source  OKC_TEMPLATE_USAGES.CONTRACT_SOURCE_CODE%TYPE;
431         l_template_id       OKC_TEMPLATE_USAGES.TEMPLATE_ID%TYPE;
432 
433       CURSOR l_get_template_id IS
434        SELECT template_id
435         FROM  OKC_TEMPLATE_USAGES
436         WHERE document_type = p_doc_type
437         AND   document_id = p_doc_id;
438 
439     BEGIN
440         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
441             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'700: Entered QA_Doc');
442         END IF;
443 
444         -- Standard Start of API savepoint
445         SAVEPOINT g_QA_Doc;
446 
447         -- Standard call to check for call compatibility.
448         IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
449             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
450         END IF;
451 
452         -- Initialize message list if p_init_msg_list is set to TRUE.
453         IF FND_API.to_Boolean( p_init_msg_list ) THEN
454             FND_MSG_PUB.initialize;
455         END IF;
456         --  Initialize API return status to success
457         x_return_status := G_RET_STS_SUCCESS;
458 
459 
460     --Added for 10+ word integration
461     IF p_doc_type <> G_TMPL_QA_TYPE THEN
462       l_contract_source := OKC_TERMS_UTIL_GRP.Get_Contract_Source_Code(
463                                     p_document_type    => p_doc_type,
464                                     p_document_id      => p_doc_id
465                                     );
466       IF (l_contract_source = 'E') THEN
467         RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
468       END IF;
469     END IF;
470 
471     IF l_contract_source = 'ATTACHED' THEN
472        --------------------------------------------
473        -- Contract is in attached document from
474        --------------------------------------------
475        --Added for 10+ word integration
476        OKC_CONTRACT_DOCS_GRP.qa_doc(
477             p_api_version      => l_api_version,
478             x_return_status    => x_return_status,
479             x_msg_count        => x_msg_count,
480             x_msg_data         => x_msg_data,
481 
482             p_doc_type         => p_doc_type,
483             p_doc_id           => p_doc_id,
484 
485             x_qa_result_tbl    => x_qa_result_tbl,
486             x_qa_return_status => x_qa_return_status
487             );
488 
489 
490       --------------------------------------------
491        IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
492          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
493        ELSIF (x_return_status = G_RET_STS_ERROR) THEN
494          RAISE FND_API.G_EXC_ERROR ;
495        END IF;
496       --------------------------------------------
497 
498     ELSIF (l_contract_source = 'STRUCTURED' OR p_doc_type = G_TMPL_QA_TYPE) THEN
499        --------------------------------------------
500        -- Contract is in structured terms format OR Document is Template
501        --------------------------------------------
502 
503       IF p_qa_mode='AMEND' THEN
504             --------------------------------------------
505             -- Calling API to mark any article amended if system variable used in that API has been changed
506             --------------------------------------------
507             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
508                   FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'200: Call API OKC_TERMS_UTIL_GRP.Mark_Variable_Based_Amendment ');
509             END IF;
510 
511             OKC_TERMS_UTIL_GRP.Mark_Variable_Based_Amendment(
512                                p_api_version      =>1,
513                                p_init_msg_list    => FND_API.G_FALSE,
514                                p_commit           => FND_API.G_TRUE,
515                                p_doc_type         => p_doc_type,
516                                p_doc_id           => p_doc_id,
517                                x_return_status    => x_return_status,
518                                x_msg_count        => x_msg_count,
519                                x_msg_data         => x_msg_data
520                              );
521            --------------------------------------------
522            IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
523                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
524            ELSIF (x_return_status = G_RET_STS_ERROR) THEN
525                   RAISE FND_API.G_EXC_ERROR ;
526            END IF;
527            --------------------------------------------
528       END IF;
529       --------------------------------------------
530       -- Call internal QA_Doc and put result into PLSQL table
531       --------------------------------------------
532       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
533        FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'800: Call Private QA_Doc and put result into PLSQL table');
534       END IF;
535       OKC_TERMS_QA_PVT.QA_Doc(
539         p_qa_mode          => p_qa_mode,
536         x_return_status    => x_return_status,
537 
538 ----      p_save             => 'N',
540         p_doc_type         => p_doc_type,
541         p_doc_id           => p_doc_id,
542 
543         x_msg_count        => x_msg_count,
544         x_msg_data         => x_msg_data,
545         x_sequence_id      => l_sequence_id,
546         x_qa_result_tbl    => x_qa_result_tbl,
547         x_qa_return_status => x_qa_return_status,
548 	   p_run_expert_flag  => p_run_expert_flag
549       );
550       --------------------------------------------
551       IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
552         RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
553       ELSIF (x_return_status = G_RET_STS_ERROR) THEN
554         RAISE FND_API.G_EXC_ERROR ;
555       END IF;
556       --------------------------------------------
557 
558     ELSE --l_contract_source = NULL
559       --Template has not been applied on the document, no qa needs to be done.
560       x_qa_return_status := G_QA_STS_SUCCESS;
561       RETURN;
562     END IF;
563 
564 
565 -- Repository Enhancement (For Validate Action)
566  IF SubStr(p_doc_type,1,3) <> 'REP' THEN   -- If the Document Type is not Repository Contract'
567 
568 
569     ----------------------------------------------------------------------
570     -- QA Check for Lock Contract - to be run for p_doc_type <> 'TEMPLATE'
571     ----------------------------------------------------------------------
572     IF p_doc_type<>G_TMPL_DOC_TYPE THEN
573       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
574 	    FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'2210: calling check_lock_contract');
575 	 END IF;
576 	 OKC_TERMS_QA_PVT.Check_lock_contract(
577 	 p_qa_mode          => p_qa_mode,
578 	 p_doc_type         => p_doc_type,
579 	 p_doc_id           => p_doc_id,
580 	 x_qa_result_tbl   =>  x_qa_result_tbl,
581 	 x_qa_return_status => x_qa_return_status,
582 	 x_return_status    => x_return_status);
583 
584 	 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
585 	    RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
586 	 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
587 	    RAISE FND_API.G_EXC_ERROR ;
588 	 END IF;
589     END IF;
590 
591     ----------------------------------------------------------------------
592     -- QA Check for Contract Admin - to be run for p_doc_type <> 'TEMPLATE'
593     ----------------------------------------------------------------------
594     IF p_doc_type<>G_TMPL_DOC_TYPE THEN
595       IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
596 	 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'2210: calling check_contract_admin');
597       END IF;
598       OKC_TERMS_QA_PVT.check_contract_admin(
599        p_qa_mode          => p_qa_mode,
600 	  p_doc_type         => p_doc_type,
601 	  p_doc_id           => p_doc_id,
602 	  x_qa_result_tbl   => x_qa_result_tbl,
603 	  x_qa_return_status => x_qa_return_status,
604 	  x_return_status    => x_return_status
605 	  );
606 	 IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
607 	   RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
608 	 ELSIF (x_return_status = G_RET_STS_ERROR) THEN
609 	   RAISE FND_API.G_EXC_ERROR ;
610 	 END IF;
611     END IF;
612     OPEN l_get_template_id;
613     FETCH l_get_template_id INTO l_template_id;
614     CLOSE l_get_template_id;
615     ------------------------------------------------------------
616     -- QA Check for deliverables, if p_qa_terms_only is 'N' and a template is instantiated
617     ------------------------------------------------------------
618 
619     IF p_qa_terms_only = 'N' AND l_template_id IS NOT NULL THEN
620 
621 
622             IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
623                 FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'201: Call Private QA_Doc for deilverables and add result into PLSQL table and save it in DB');
624             END IF;
625 
626             OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa (
627                 p_api_version     => 1,
628                 p_init_msg_list   => FND_API.G_FALSE,
629                 p_doc_type        => p_doc_type,
630                 p_doc_id          => p_doc_id,
631                 p_mode            => p_qa_mode,
632                 p_bus_doc_date_events_tbl => l_bus_doc_date_events_tbl,
633                 p_qa_result_tbl   => x_qa_result_tbl,
634                 x_msg_data        => x_msg_data,
635                 x_msg_count       => x_msg_count,
636                 x_return_status   => x_return_status,
637                 x_qa_return_status => x_qa_return_status);
638             IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
639                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
640             ELSIF (x_return_status = G_RET_STS_ERROR) THEN
641                 RAISE FND_API.G_EXC_ERROR ;
642             END IF;
643 
644         END IF;
645 
646         x_qa_return_status := G_QA_STS_SUCCESS;
647         IF x_qa_result_tbl.COUNT > 0 THEN
648             FOR i in x_qa_result_tbl.FIRST..x_qa_result_tbl.LAST LOOP
649 
650                 x_qa_result_tbl(i).error_record_type_name := okc_util.decode_lookup('OKC_ERROR_RECORD_TYPE',x_qa_result_tbl(i).error_record_type);
651                 x_qa_result_tbl(i).error_severity_name := okc_util.decode_lookup('OKC_QA_SEVERITY',x_qa_result_tbl(i).error_severity);
652 
656                 IF x_qa_result_tbl(i).Error_severity = G_QA_STS_WARNING THEN
653                 IF x_qa_result_tbl(i).Error_severity = G_QA_STS_ERROR THEN
654                     l_error_found := true;
655                 END IF;
657                     l_warning_found := true;
658                 END IF;
659 
660             END LOOP;
661             --fix for bug 3290738
662             IF l_error_found THEN
663                 x_qa_return_status := G_QA_STS_ERROR;
664             ELSIF l_warning_found THEN
665                 x_qa_return_status := G_QA_STS_WARNING;
666             END IF;
667 
668         END IF;
669 
670         -- Standard call to get message count and if count is 1, get message info.
671         FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
672         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
673             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'900: Leaving QA_Doc');
674         END IF;
675        END IF; -- Repository Enhancement (For Validate Action)
676 
677 
678     EXCEPTION
679         WHEN FND_API.G_EXC_ERROR THEN
680             ROLLBACK TO g_QA_Doc;
681             IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
682                 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'1000: Leaving QA_Doc : OKC_API.G_EXCEPTION_ERROR Exception');
683             END IF;
684             x_return_status := G_RET_STS_ERROR ;
685             FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
686 
687         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
688             ROLLBACK TO g_QA_Doc;
689             IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
690                 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'1100: Leaving QA_Doc : OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
691             END IF;
692             x_return_status := G_RET_STS_UNEXP_ERROR ;
693             FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
694 
695         WHEN OTHERS THEN
696             ROLLBACK TO g_QA_Doc;
697             IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
698                 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'1200: Leaving QA_Doc because of EXCEPTION: '||sqlerrm);
699             END IF;
700 
701             x_return_status := G_RET_STS_UNEXP_ERROR ;
702             IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
703                 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
704             END IF;
705             FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
706     END qa_doc;
707 
708     ---------------------------------------------------------------------------
709     -- Procedure Check_Terms calls QA_doc version 2
710     ---------------------------------------------------------------------------
711     PROCEDURE Check_Terms(
712         x_return_status            OUT NOCOPY VARCHAR2,
713         p_chr_id                   IN  NUMBER)
714     IS
715 
716         l_msg_data            FND_NEW_MESSAGES.MESSAGE_TEXT%TYPE;   --Fix for bug# 4019909
717         l_msg_count           NUMBER;
718         l_api_version       CONSTANT NUMBER := 1;
719         l_api_name          CONSTANT VARCHAR2(30) := 'Check_Terms';
720         l_qa_result_tbl     qa_result_tbl_type;
721         l_doc_type          OKC_BUS_DOC_TYPES_B.DOCUMENT_TYPE%TYPE;
722         l_doc_id            NUMBER;
723         l_qa_return_status  VARCHAR2(50);
724 
725     BEGIN
726 
727         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
728             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'700: Entered '||l_api_name);
729         END IF;
730         x_return_status := G_RET_STS_SUCCESS;
731 
732         OKC_TERMS_UTIL_GRP.Get_Contract_Document_Type_ID(
733             p_api_version   => l_api_version,
734             x_return_status => x_return_status,
735             x_msg_data      => l_msg_data,
736             x_msg_count     => l_msg_count,
737             p_chr_id        => p_chr_id,
738             x_doc_type      => l_doc_type,
739             x_doc_id        => l_doc_id
740             );
741         IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
742         RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
743         END IF;
744 
745         QA_Doc(
746             p_api_version      => l_api_version,
747             x_return_status    => x_return_status,
748             x_msg_count        => l_msg_count,
749             x_msg_data         => l_msg_data,
750 
751             p_qa_mode          => G_NORMAL_QA,
752             p_doc_type         => l_doc_type,
753             p_doc_id           => l_doc_id,
754 
755             x_qa_result_tbl    => l_qa_result_tbl,
756             x_qa_return_status => l_qa_return_status
757             );
758         IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
759             RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
760         END IF;
761 
762 
763         IF l_qa_return_status = G_QA_STS_SUCCESS THEN
764             OKC_API.set_message(
765                 p_app_name      => G_APP_NAME,
766                 p_msg_name      => G_QA_SUCCESS);
767         ELSE
771                 Okc_Qa_Check_Pvt.pub_qa_msg_tbl(i).data := l_qa_result_tbl(i).Problem_details||Fnd_Global.Newline||l_qa_result_tbl(i).Suggestion;
768 --Bug 4019909 Added following IF condition to prevent PL/SQL numeric error is l_qa_result_tbl is null.
769           IF l_qa_result_tbl.COUNT > 0 THEN
770             FOR i IN l_qa_result_tbl.first..l_qa_result_tbl.last LOOP
772                 Okc_Qa_Check_Pvt.pub_qa_msg_tbl(i).error_status := l_qa_result_tbl(i).Error_severity;
773             END LOOP;
774           END IF;
775         END IF;
776         x_return_status := l_qa_return_status;
777 
778         -- Standard call to get message count and if count is 1, get message info.
779         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
780             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'500: Leaving '||l_api_name);
781         END IF;
782 
783     EXCEPTION
784         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
785             ROLLBACK TO g_QA_Doc;
786             IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
787                 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'1100: Leaving '||l_api_name||' : G_EXCEPTION_UNEXPECTED_ERROR Exception');
788             END IF;
789             x_return_status := G_QA_STS_ERROR ;
790 
791         WHEN OTHERS THEN
792             ROLLBACK TO g_QA_Doc;
793             IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
794                 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'1200: Leaving '||l_api_name||' because of EXCEPTION: '||sqlerrm);
795             END IF;
796 
797             x_return_status := G_QA_STS_ERROR ;
798             IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
799                 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
800             END IF;
801     END Check_Terms;
802 
803     ---------------------------------------------------------------------------
804     -- Procedure QA_Doc version 3 - calls qa_doc version 2
805     ---------------------------------------------------------------------------
806     /* version 3, does not log valiation messages in OKC_QA_ERRORS_T table
807     returns x_qa_result_tbl as out parameter, takes in additional parameter
808     p_bus_doc_date_events_tbl
809     11.5.10+: No modification
810     */
811     Procedure QA_Doc     (
812         p_api_version       IN  NUMBER ,
813         p_init_msg_list     IN  VARCHAR2 ,
814         x_return_status     OUT NOCOPY VARCHAR2 ,
815         x_msg_data          OUT NOCOPY VARCHAR2 ,
816         x_msg_count         OUT NOCOPY NUMBER ,
817 
818         p_qa_mode           IN  VARCHAR2 ,
819         p_doc_type          IN  VARCHAR2 ,
820         p_doc_id            IN  NUMBER ,
821 
822         x_qa_result_tbl     OUT NOCOPY qa_result_tbl_type,
823         x_qa_return_status  OUT NOCOPY VARCHAR2,
824 
825         p_bus_doc_date_events_tbl   IN BUSDOCDATES_TBL_TYPE,
826 	   p_run_expert_flag   IN VARCHAR2 DEFAULT 'Y')
827     IS
828 
829         l_api_version       CONSTANT NUMBER := 1;
830         l_api_name          CONSTANT VARCHAR2(30) := 'QA_Doc';
831         l_qa_result_tbl     qa_result_tbl_type;
832         l_error_found      Boolean := FALSE;
833         l_warning_found    Boolean := FALSE;
834 
835     BEGIN
836 
837         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
838             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'100: Entered QA_Doc - OVERLOADED ONE');
839         END IF;
840 
841         -- Standard Start of API savepoint
842         SAVEPOINT g_QA_Doc;
843 
844         -- Standard call to check for call compatibility.
845         IF NOT FND_API.Compatible_API_Call( l_api_version, p_api_version, l_api_name, G_PKG_NAME) THEN
846             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
847         END IF;
848 
849         -- Initialize message list if p_init_msg_list is set to TRUE.
850         IF FND_API.to_Boolean( p_init_msg_list ) THEN
851             FND_MSG_PUB.initialize;
852         END IF;
853 
854         --  Initialize API return status to success
855         x_return_status := G_RET_STS_SUCCESS;
856 
857 
858         --------------------------------------------
859         -- Call internal QA_Doc and put result into PLSQL table
860         --------------------------------------------
861         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
862             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'800: Call Private QA_Doc and put result into PLSQL table');
863         END IF;
864 
865         QA_Doc(
866             p_api_version      => l_api_version,
867             x_return_status    => x_return_status,
868             x_msg_count        => x_msg_count,
869             x_msg_data         => x_msg_data,
870 
871             p_qa_mode          => p_qa_mode,
872             p_doc_type         => p_doc_type,
873             p_doc_id           => p_doc_id,
874 
875             x_qa_result_tbl    => x_qa_result_tbl,
876             x_qa_return_status => x_qa_return_status,
877 
878             p_qa_terms_only    => 'Y',
879 		  p_run_expert_flag  => p_run_expert_flag
880             );
881         IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
882             RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
883         ELSIF (x_return_status = G_RET_STS_ERROR) THEN
884             RAISE FND_API.G_EXC_ERROR ;
885         END IF;
886 
887         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
888             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'201: Call Private QA_Doc for deilverables and add result into PLSQL table and save it in DB');
889         END IF;
890 
891         OKC_DELIVERABLE_PROCESS_PVT.validate_deliverable_for_qa (
892             p_api_version     => 1,
893             p_init_msg_list   => FND_API.G_FALSE,
894             p_doc_type        => p_doc_type,
895             p_doc_id          => p_doc_id,
896             p_mode            => p_qa_mode,
897             p_bus_doc_date_events_tbl => p_bus_doc_date_events_tbl,
898             p_qa_result_tbl   => x_qa_result_tbl,
899             x_msg_data        => x_msg_data,
900             x_msg_count       => x_msg_count,
901             x_return_status   => x_return_status,
902             x_qa_return_status => x_qa_return_status);
903         IF (x_return_status = G_RET_STS_UNEXP_ERROR) THEN
904             RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
905         ELSIF (x_return_status = G_RET_STS_ERROR) THEN
906             RAISE FND_API.G_EXC_ERROR ;
907         END IF;
908 
909         IF x_qa_result_tbl.COUNT > 0 THEN
910             FOR i in x_qa_result_tbl.FIRST..x_qa_result_tbl.LAST LOOP
911 
912                 x_qa_result_tbl(i).error_record_type_name := okc_util.decode_lookup('OKC_ERROR_RECORD_TYPE',x_qa_result_tbl(i).error_record_type);
913                 x_qa_result_tbl(i).error_severity_name := okc_util.decode_lookup('OKC_QA_SEVERITY',x_qa_result_tbl(i).error_severity);
914 
915                 IF x_qa_result_tbl(i).Error_severity = G_QA_STS_ERROR THEN
916                     l_error_found := true;
917                 END IF;
918                 IF x_qa_result_tbl(i).Error_severity = G_QA_STS_WARNING THEN
919                     l_warning_found := true;
920                 END IF;
921 
922             END LOOP;
923 
924             --fix for bug 3290738
925             IF l_error_found THEN
926                 x_qa_return_status := G_QA_STS_ERROR;
927             ELSIF l_warning_found THEN
928                 x_qa_return_status := G_QA_STS_WARNING;
929             END IF;
930         END IF;
931 
932         -- Standard call to get message count and if count is 1, get message info.
933         FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
934         IF ( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
935             FND_LOG.STRING( FND_LOG.LEVEL_PROCEDURE, G_MODULE||l_api_name,'300: Leaving QA_Doc - OVERLOADED ONE ');
936         END IF;
937 
938     EXCEPTION
939         WHEN FND_API.G_EXC_ERROR THEN
940             ROLLBACK TO g_QA_Doc;
941             IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
942                 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'400: Leaving QA_Doc : OKC_API.G_EXCEPTION_ERROR Exception');
943             END IF;
944             x_return_status := G_RET_STS_ERROR ;
945             FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
946 
947         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
948             ROLLBACK TO g_QA_Doc;
949             IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
950                 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'500: Leaving QA_Doc : OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception');
951             END IF;
952             x_return_status := G_RET_STS_UNEXP_ERROR ;
953             FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
954 
955         WHEN OTHERS THEN
956             ROLLBACK TO g_QA_Doc;
957             IF ( FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
958                 FND_LOG.STRING( FND_LOG.LEVEL_EXCEPTION, G_MODULE||l_api_name,'600: Leaving QA_Doc because of EXCEPTION: '||sqlerrm);
959             END IF;
960 
961             x_return_status := G_RET_STS_UNEXP_ERROR ;
962             IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
963                 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
964             END IF;
965             FND_MSG_PUB.Count_And_Get(p_encoded=>'F', p_count => x_msg_count, p_data => x_msg_data );
966     END QA_Doc;
967 
968 
969 END OKC_TERMS_QA_GRP;