DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_238

Source


1 PACKAGE BODY HZ_MATCH_RULE_238 AS
2 /*=======================================================================+
3  |  Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|
4  |                          All rights reserved.                         |
5  +=======================================================================+
6  | NAME
7  |      HZ_MATCH_RULE_238
8  |
9  | DESCRIPTION
10  |
11  | Compiled by the HZ Match Rule Compiler
12  | -- Do Not Modify --
13  |
14  | PUBLIC PROCEDURES
15  |    find_parties
16  |    get_matching_party_sites
17  |    get_matching_contacts
18  |    get_matching_contact_points
19  |    get_score_details
20  |    
21  | HISTORY
22  |      28-NOV-2012 Generated by HZ Match Rule Compiler
23  |
24  *=======================================================================*/
25 
26 -- ==========================================================================================
27 -- ============MATCH RULE COMPILER GENERATED CODE FOR WEB SERVICE  MATCH RULES ========
28 -- ==========================================================================================
29 
30   TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;
31   call_order vlisttype;
32   call_max_score HZ_PARTY_SEARCH.IDList;
33   call_type vlisttype;
34   g_party_stage_rec  HZ_PARTY_STAGE.party_stage_rec_type;
35   g_party_site_stage_list  HZ_PARTY_STAGE.party_site_stage_list;
36   g_contact_stage_list  HZ_PARTY_STAGE.contact_stage_list;
37   g_contact_pt_stage_list  HZ_PARTY_STAGE.contact_pt_stage_list;
38   g_mappings  HZ_PARTY_SEARCH.IDList;
39   g_max_id NUMBER:=2000000000;
40   g_other_party_level_attribs BOOLEAN;
41 
42   g_debug_count                        NUMBER := 0;
43   g_score_until_thresh BOOLEAN:=false;
44  
45   g_thres_score NUMBER:=1000;
46   g_ps_den_only BOOLEAN;
47   g_index_owner VARCHAR2(255);
48   distinct_search_cpt_types NUMBER ; 
49 
50 PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)
51 IS
52      remainder_str VARCHAR2(4000);
53      current_pos NUMBER ;
54      temp VARCHAR2(300) ;
55 BEGIN
56      remainder_str := input_str ;
57      current_pos := 1 ;
58    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
59      WHILE remainder_str IS NOT NULL
60      LOOP
61      temp := substr(remainder_str, 1 , 255 );
62       hz_utility_v2pub.debug(p_message=>'  '||temp,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
63      current_pos := current_pos + 255 ;
64      remainder_str := substr(input_str,current_pos );
65      END LOOP ;
66     END IF;
67 END ;
68 FUNCTION check_estimate_hits (
69   p_entity VARCHAR2,
70   p_contains_str VARCHAR2) RETURN NUMBER IS
71   
72   ustatus VARCHAR2(255);
73   dstatus VARCHAR2(255);
74   l_bool BOOLEAN;
75   l_hits NUMBER := 0;
76 BEGIN
77   IF g_index_owner IS NULL THEN
78     l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,g_index_owner);
79   END IF;
80   IF p_entity='PARTY' THEN
81 
82     l_hits :=  CTX_QUERY.count_hits(
83         g_index_owner||'.'||'HZ_STAGE_PARTIES_T1',p_contains_str, false);
84   ELSIF p_entity='PARTY_SITES' THEN
85     l_hits :=  CTX_QUERY.count_hits(
86         g_index_owner||'.'||'HZ_STAGE_PARTY_SITES_T1',p_contains_str, false);
87   ELSIF p_entity='CONTACTS' THEN
88     l_hits :=  CTX_QUERY.count_hits(
89         g_index_owner||'.'||'HZ_STAGE_CONTACT_T1',p_contains_str, false);
90   ELSIF p_entity='CONTACT_POINTS' THEN
91     l_hits :=  CTX_QUERY.count_hits(
92         g_index_owner||'.'||'HZ_STAGE_CPT_T1',p_contains_str, false);
93   END IF;
94   RETURN floor(l_hits/2) ;
95   
96 
97   exception
98     when others then
99       if (instrb(SQLERRM,'DRG-51030')>0) then 
100         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
101         FND_MSG_PUB.ADD;
102         RAISE FND_API.G_EXC_ERROR;
103       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
104         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
105         FND_MSG_PUB.ADD;
106         RAISE FND_API.G_EXC_ERROR;
107       else 
108         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
109       end if;
110 END;
111 
112 
113 FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)
114 RETURN VARCHAR2
115 IS
116 p_person_restrict_sql VARCHAR2(32767);
117 p_restrict1_sql VARCHAR2(32767);
118 p_final_restrict_sql VARCHAR2(32767);
119 BEGIN
120    p_final_restrict_sql := p_restrict_sql ; 
121    IF p_restrict_sql IS NOT NULL
122    THEN
123      IF instrb(p_restrict_sql, 'STAGE.') > 0
124      THEN
125         p_restrict1_sql := replace( p_restrict_sql, 'STAGE.', 'stage1.');
126      ELSIF instrb(p_restrict_sql, 'stage.') > 0
127      THEN
128            p_restrict1_sql := replace( p_restrict_sql, 'stage.', 'stage1.');
129      END IF;
130     p_person_restrict_sql := 'exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r' 
131                                || ' where oc.org_contact_id = stage.org_contact_id and' 
132                                || ' r.relationship_id = oc.party_relationship_id' 
133                                || ' and r.subject_type = ''PERSON'' AND r.object_type = ''ORGANIZATION'' ' 
134                                || ' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id' 
135                                || ' and ' || p_restrict1_sql || ' ) )' ; 
136 p_final_restrict_sql := '((stage.org_contact_id is null and ' || p_restrict_sql || ') or (stage.org_contact_id is not null and ' 
137                            || p_person_restrict_sql ||  ' ))'; 
138  END IF;
139  return p_final_restrict_sql ;
140 END;
141   FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS
142     l_newidx NUMBER;
143   BEGIN 
144    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
145       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
146       hz_utility_v2pub.debug(p_message=>'calling the function map_id',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
147     END IF;
148    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
149       hz_utility_v2pub.debug(p_message=>'argument in_id =  '||in_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
150     END IF;
151     IF in_id<g_max_id THEN 
152       RETURN in_id;
153     ELSE
154       FOR I in 1..g_mappings.COUNT LOOP
155         IF in_id = g_mappings(I) THEN
156           RETURN (g_max_id+I);
157         END IF;
158       END LOOP;
159       l_newidx := g_mappings.COUNT+1;
160       g_mappings(l_newidx) := in_id;
161       RETURN (g_max_id+l_newidx);
162     END IF;
163   END;
164   FUNCTION GET_PARTY_SCORE 
165        (
166        p_table_TX4 VARCHAR2
167       ,p_table_TX45 VARCHAR2
168       ,p_table_TX46 VARCHAR2
169   ) RETURN NUMBER IS
170     total NUMBER := 0;
171   BEGIN
172    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
173       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
174       hz_utility_v2pub.debug(p_message=>'calling the function get_party_score',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
175     END IF;
176     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
177       hz_utility_v2pub.debug(p_message=>'GET_PARTY_SCORE   ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
178     END IF;
179     IF g_score_until_thresh AND (total)>=g_thres_score THEN
180    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
181       hz_utility_v2pub.debug(p_message=>'get_party_score returned total =  '||total,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
182     END IF;
183       RETURN total;
184     END IF;
185     IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.TX4, p_table_TX4,8) THEN
186       total := total+200;
187       IF g_score_until_thresh AND (total)>=g_thres_score THEN 
188    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
189       hz_utility_v2pub.debug(p_message=>'get_party_score returned total =  '||total,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
190     END IF;
191         RETURN total;
192       END IF;
193     END IF;
194     IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.TX45, p_table_TX45,50) THEN
195       total := total+300;
196       IF g_score_until_thresh AND (total)>=g_thres_score THEN 
197    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
198       hz_utility_v2pub.debug(p_message=>'get_party_score returned total =  '||total,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
199     END IF;
200         RETURN total;
201       END IF;
202     END IF;
203     IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.TX46, p_table_TX46,51) THEN
204       total := total+60;
205       IF g_score_until_thresh AND (total)>=g_thres_score THEN 
206    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
207       hz_utility_v2pub.debug(p_message=>'get_party_score returned total =  '||total,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
208     END IF;
209         RETURN total;
210       END IF;
211     END IF;
212     RETURN total;
213   END;
214   FUNCTION GET_PARTY_SITES_SCORE (
215        x_matchidx OUT NUMBER
216       ,p_table_TX4 VARCHAR2
217       ,p_table_TX11 VARCHAR2
218   ) RETURN NUMBER IS
219     maxscore NUMBER := 0;
220     l_current_score NUMBER := 0;
221   BEGIN
222     x_matchidx := 0;
223     IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
224        RETURN l_current_score;
225     END IF;
226     FOR J IN 1..g_party_site_stage_list.COUNT LOOP
227       l_current_score := 0;
228       IF HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX4, p_table_TX4,(50000*(J-1)+67)) THEN
229         l_current_score:=l_current_score+ 80;
230         IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
231           x_matchidx:=J;
232           RETURN l_current_score;
233         END IF;
234       END IF;
235       IF HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX11, p_table_TX11,(50000*(J-1)+74)) THEN
236         l_current_score:=l_current_score+ 80;
237         IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
238           x_matchidx:=J;
239           RETURN l_current_score;
240         END IF;
241       END IF;
242       IF maxscore<l_current_score THEN
243         maxscore:=l_current_score;
244         x_matchidx:=J;
245       END IF;
246     END LOOP;
247     RETURN maxscore;
248   END;
249   FUNCTION GET_CONTACTS_SCORE (
250        x_matchidx OUT NUMBER
251   ) RETURN NUMBER IS
252     maxscore NUMBER := 0;
253     l_current_score NUMBER := 0;
254   BEGIN
255     x_matchidx := 0;
256     IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
257        RETURN l_current_score;
258     END IF;
259     FOR J IN 1..g_contact_stage_list.COUNT LOOP
260       l_current_score := 0;
261       IF maxscore<l_current_score THEN
262         maxscore:=l_current_score;
263         x_matchidx:=J;
264       END IF;
265     END LOOP;
266     RETURN maxscore;
267   END;
268   FUNCTION GET_CONTACT_POINTS_SCORE (
269        x_matchidx OUT NUMBER
270       ,p_table_TX2 VARCHAR2
271   ) RETURN NUMBER IS
272     maxscore NUMBER := 0;
273     l_current_score NUMBER := 0;
274   BEGIN
275     x_matchidx := 0;
276     IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
277        RETURN l_current_score;
278     END IF;
279     FOR J IN 1..g_contact_pt_stage_list.COUNT LOOP
280       l_current_score := 0;
281       IF HZ_DQM_SEARCH_UTIL.is_match(g_contact_pt_stage_list(J).TX2, p_table_TX2,(50000*(J-1)+111)) THEN
282         l_current_score:=l_current_score+ 70;
283         IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
284           x_matchidx:=J;
285           RETURN l_current_score;
286         END IF;
287       END IF;
288       IF maxscore<l_current_score THEN
289         maxscore:=l_current_score;
290         x_matchidx:=J;
291       END IF;
292     END LOOP;
293     RETURN maxscore;
294   END;
295   FUNCTION get_attrib_val(
296       p_record_id 	NUMBER
297      ,p_entity 	VARCHAR2
298      ,p_attribute 	VARCHAR2
299   ) RETURN VARCHAR2 IS
300   l_matched_value VARCHAR2(2000);
301   l_party_type VARCHAR2(255);
302   BEGIN
303   IF p_entity = 'PARTY' THEN
304   IF p_attribute = 'PARTY_NAME' THEN
305 
306       SELECT party_type INTO l_party_type 
307       FROM HZ_PARTIES
308       WHERE party_id = p_record_id;
309       IF l_party_type = 'ORGANIZATION' THEN
310         SELECT PARTY_NAME INTO l_matched_value 
311         FROM HZ_PARTIES
312         WHERE party_id = p_record_id 
313         and rownum = 1;
314       ELSIF l_party_type = 'PERSON' THEN
315         SELECT PARTY_NAME INTO l_matched_value 
316         FROM HZ_PARTIES
317         WHERE party_id = p_record_id 
318         and rownum = 1;
319       END IF;
320       RETURN l_matched_value;
321     END IF;
322   IF p_attribute = 'JGZZ_FISCAL_CODE' THEN
323 
324       SELECT party_type INTO l_party_type 
325       FROM HZ_PARTIES
326       WHERE party_id = p_record_id;
327       IF l_party_type = 'ORGANIZATION' THEN
328         SELECT JGZZ_FISCAL_CODE INTO l_matched_value 
329         FROM HZ_ORGANIZATION_PROFILES
330         WHERE party_id = p_record_id 
331         and effective_end_date is null
332         and rownum = 1;
333       ELSIF l_party_type = 'PERSON' THEN
334         SELECT JGZZ_FISCAL_CODE INTO l_matched_value 
335         FROM HZ_PERSON_PROFILES
336         WHERE party_id = p_record_id 
337         and effective_end_date is null 
338         and rownum = 1;
339       END IF;
340       RETURN l_matched_value;
341     END IF;
342   IF p_attribute = 'SIC_CODE' THEN
343 
344       SELECT party_type INTO l_party_type 
345       FROM HZ_PARTIES
346       WHERE party_id = p_record_id;
347       IF l_party_type = 'ORGANIZATION' THEN
348         SELECT SIC_CODE INTO l_matched_value 
349         FROM HZ_ORGANIZATION_PROFILES
350         WHERE party_id = p_record_id 
351         and effective_end_date is null
352         and rownum = 1;
353       ELSIF l_party_type = 'PERSON' THEN
354         SELECT SIC_CODE INTO l_matched_value 
355         FROM HZ_ORGANIZATION_PROFILES
356         WHERE party_id = p_record_id 
357         and rownum = 1;
358       END IF;
359       RETURN l_matched_value;
360     END IF;
361     NULL;
362   END IF;
363   IF p_entity = 'PARTY_SITES' THEN
364   IF p_attribute = 'ADDRESS' THEN
365      l_matched_value := HZ_PARTY_ACQUIRE.get_address (p_record_id, p_entity,'ADDRESS','Y');
366       RETURN l_matched_value;
367     END IF;
368   IF p_attribute = 'POSTAL_CODE' THEN
369      BEGIN
370        SELECT HZ_LOCATIONS.POSTAL_CODE
371        INTO l_matched_value 
372        FROM HZ_PARTY_SITES, HZ_LOCATIONS
373        WHERE HZ_PARTY_SITES.party_site_id = p_record_id
374        AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id and rownum=1;
375      EXCEPTION
376        WHEN NO_DATA_FOUND THEN
377          l_matched_value := 'Err';
378      END;
379       RETURN l_matched_value;
380     END IF;
381     NULL;
382   END IF;
383   IF p_entity = 'CONTACTS' THEN
384     NULL;
385   END IF;
386   IF p_entity = 'CONTACT_POINTS' THEN
387   IF p_attribute = 'PHONE_NUMBER' THEN
388      BEGIN
389        SELECT PHONE_NUMBER INTO l_matched_value 
390        FROM HZ_CONTACT_POINTS 
391        WHERE contact_point_id = p_record_id and rownum=1;
392      EXCEPTION
393        WHEN NO_DATA_FOUND THEN
394          l_matched_value := 'Err';
395      END;
396       RETURN l_matched_value;
397     END IF;
398     NULL;
399   END IF;
400 END;
401   PROCEDURE INSERT_PARTY_SCORE (
402        p_party_id IN  NUMBER
403        ,p_record_id IN  NUMBER
404        ,p_search_ctx_id IN  NUMBER
405        ,p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type
406        ,p_stage_rec IN HZ_PARTY_STAGE.party_stage_rec_type
407       ,p_table_TX4 VARCHAR2
408       ,p_table_TX45 VARCHAR2
409       ,p_table_TX46 VARCHAR2
410         ,p_idx IN NUMBER) IS
411     l_current_score NUMBER:=0;
412     l_score NUMBER;
413     l_attrib_value VARCHAR2(2000);
414   BEGIN
415    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
416       hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_PARTY_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
417     END IF;
418      l_score :=0;
419       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX4, p_table_TX4,(50000*(p_idx-1)+8)) THEN
420       l_score :=200;
421    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
422       hz_utility_v2pub.debug(p_message=>'l_score is -  '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
423     END IF;
424       END IF;
425       IF l_score>0 THEN
426    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
427       hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
428     END IF;
429       l_attrib_value := get_attrib_val(p_record_id,'PARTY','PARTY_NAME');
430    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
431       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
432     END IF;
433       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
434                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
435       VALUES (
436            p_party_id,p_record_id,p_search_ctx_id,'PARTY_NAME',
437            'PARTY', p_search_rec.PARTY_NAME,
438            l_attrib_value,l_score);
439    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
440       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
441     END IF;
442       END IF;
443      l_score :=0;
444       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX45, p_table_TX45,(50000*(p_idx-1)+50)) THEN
445       l_score :=300;
446    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
447       hz_utility_v2pub.debug(p_message=>'l_score is -  '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
448     END IF;
449       END IF;
450       IF l_score>0 THEN
451    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
452       hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
453     END IF;
454       l_attrib_value := get_attrib_val(p_record_id,'PARTY','JGZZ_FISCAL_CODE');
455    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
456       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
457     END IF;
458       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
459                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
460       VALUES (
461            p_party_id,p_record_id,p_search_ctx_id,'JGZZ_FISCAL_CODE',
462            'PARTY', p_search_rec.JGZZ_FISCAL_CODE,
463            l_attrib_value,l_score);
464    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
465       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
466     END IF;
467       END IF;
468      l_score :=0;
469       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX46, p_table_TX46,(50000*(p_idx-1)+51)) THEN
470       l_score :=60;
471    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
472       hz_utility_v2pub.debug(p_message=>'l_score is -  '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
473     END IF;
474       END IF;
475       IF l_score>0 THEN
476    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
477       hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
478     END IF;
479       l_attrib_value := get_attrib_val(p_record_id,'PARTY','SIC_CODE');
480    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
481       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
482     END IF;
483       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
484                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
485       VALUES (
486            p_party_id,p_record_id,p_search_ctx_id,'SIC_CODE',
487            'PARTY', p_search_rec.SIC_CODE,
488            l_attrib_value,l_score);
489    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
490       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
491     END IF;
492       END IF;
493     NULL;
494   END;
495   PROCEDURE INSERT_PARTY_SITES_SCORE (
496        p_party_id IN  NUMBER
497        ,p_record_id IN  NUMBER
498        ,p_search_ctx_id IN  NUMBER
499        ,p_search_rec IN HZ_PARTY_SEARCH.party_site_search_rec_type
500        ,p_stage_rec IN HZ_PARTY_STAGE.party_site_stage_rec_type
501       ,p_table_TX4 VARCHAR2
502       ,p_table_TX11 VARCHAR2
503         ,p_idx IN NUMBER) IS
504     l_current_score NUMBER:=0;
505     l_score NUMBER;
506     l_attrib_value VARCHAR2(2000);
507   BEGIN
508    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
509       hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_PARTY_SITES_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
510     END IF;
511      l_score :=0;
512       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX4, p_table_TX4,(50000*(p_idx-1)+67)) THEN
513       l_score :=80;
514    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
515       hz_utility_v2pub.debug(p_message=>'l_score is -  '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
516     END IF;
517       END IF;
518       IF l_score>0 THEN
519    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
520       hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
521     END IF;
522       l_attrib_value := get_attrib_val(p_record_id,'PARTY_SITES','ADDRESS');
523    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
524       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
525     END IF;
526       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
527                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
528       VALUES (
529            p_party_id,p_record_id,p_search_ctx_id,'ADDRESS',
530            'PARTY_SITES', p_search_rec.ADDRESS,
531            l_attrib_value,l_score);
532    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
533       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
534     END IF;
535       END IF;
536      l_score :=0;
537       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX11, p_table_TX11,(50000*(p_idx-1)+74)) THEN
538       l_score :=80;
539    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
540       hz_utility_v2pub.debug(p_message=>'l_score is -  '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
541     END IF;
542       END IF;
543       IF l_score>0 THEN
544    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
545       hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
546     END IF;
547       l_attrib_value := get_attrib_val(p_record_id,'PARTY_SITES','POSTAL_CODE');
548    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
549       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
550     END IF;
551       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
552                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
553       VALUES (
554            p_party_id,p_record_id,p_search_ctx_id,'POSTAL_CODE',
555            'PARTY_SITES', p_search_rec.POSTAL_CODE,
556            l_attrib_value,l_score);
557    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
558       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
559     END IF;
560       END IF;
561     NULL;
562   END;
563   PROCEDURE INSERT_CONTACTS_SCORE (
564        p_party_id IN  NUMBER
565        ,p_record_id IN  NUMBER
566        ,p_search_ctx_id IN  NUMBER
567        ,p_search_rec IN HZ_PARTY_SEARCH.contact_search_rec_type
568        ,p_stage_rec IN HZ_PARTY_STAGE.contact_stage_rec_type
569         ,p_idx IN NUMBER) IS
570     l_current_score NUMBER:=0;
571     l_score NUMBER;
572     l_attrib_value VARCHAR2(2000);
573   BEGIN
574    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
575       hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_CONTACTS_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
576     END IF;
577     NULL;
578   END;
579   PROCEDURE INSERT_CONTACT_POINTS_SCORE (
580        p_party_id IN  NUMBER
581        ,p_record_id IN  NUMBER
582        ,p_search_ctx_id IN  NUMBER
583        ,p_search_rec IN HZ_PARTY_SEARCH.contact_point_search_rec_type
584        ,p_stage_rec IN HZ_PARTY_STAGE.contact_pt_stage_rec_type
585       ,p_table_TX2 VARCHAR2
586         ,p_idx IN NUMBER) IS
587     l_current_score NUMBER:=0;
588     l_score NUMBER;
589     l_attrib_value VARCHAR2(2000);
590   BEGIN
591    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
592       hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_CONTACT_POINTS_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
593     END IF;
594      l_score :=0;
595       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX2, p_table_TX2,(50000*(p_idx-1)+111)) THEN
596       l_score :=70;
597    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
598       hz_utility_v2pub.debug(p_message=>'l_score is -  '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
599     END IF;
600       END IF;
601       IF l_score>0 THEN
602    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
603       hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
604     END IF;
605       l_attrib_value := get_attrib_val(p_record_id,'CONTACT_POINTS','PHONE_NUMBER');
606    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
607       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
608     END IF;
609       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
610                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
611       VALUES (
612            p_party_id,p_record_id,p_search_ctx_id,'PHONE_NUMBER',
613            'CONTACT_POINTS', p_search_rec.PHONE_NUMBER,
614            l_attrib_value,l_score);
615    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
616       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
617     END IF;
618       END IF;
619     NULL;
620   END;
621 
622 /************************************************
623   This procedure populates global cond record
624   for the PARTY Entity 
625 ************************************************/
626 
627 PROCEDURE POP_PARTY_COND_REC(
628     p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type 
629   ) IS 
630 BEGIN
631 NULL ;
632 EXCEPTION
633   WHEN OTHERS THEN
634     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
635     FND_MESSAGE.SET_TOKEN('PROC' , 'POP_PARTY_COND_REC');
636     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
637     FND_MSG_PUB.ADD;
638     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
639 END;
640 
641 
642 /************************************************
643   This procedure populates global cond record
644   for the PARTY_SITES Entity 
645 ************************************************/
646 
647 PROCEDURE POP_PARTY_SITES_COND_REC(
648     p_search_list IN HZ_PARTY_SEARCH.party_site_list 
649   ) IS 
650 BEGIN
651 NULL ;
652 EXCEPTION
653   WHEN OTHERS THEN
654     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
655     FND_MESSAGE.SET_TOKEN('PROC' , 'POP_PARTY_SITES_COND_REC');
656     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
657     FND_MSG_PUB.ADD;
658     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
659 END;
660 
661 
662 /************************************************
663   This procedure populates global cond record
664   for the CONTACTS Entity 
665 ************************************************/
666 
667 PROCEDURE POP_CONTACTS_COND_REC(
668     p_search_list IN HZ_PARTY_SEARCH.contact_list 
669   ) IS 
670 BEGIN
671 NULL ;
672 EXCEPTION
673   WHEN OTHERS THEN
674     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
675     FND_MESSAGE.SET_TOKEN('PROC' , 'POP_CONTACTS_COND_REC');
676     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
677     FND_MSG_PUB.ADD;
678     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
679 END;
680 
681 
682 /************************************************
683   This procedure populates global cond record
684   for the CONTACT_POINTS Entity 
685 ************************************************/
686 
687 PROCEDURE POP_CONTACT_POINTS_COND_REC(
688     p_search_list IN HZ_PARTY_SEARCH.contact_point_list 
689   ) IS 
690 BEGIN
691 NULL ;
692 EXCEPTION
693   WHEN OTHERS THEN
694     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
695     FND_MESSAGE.SET_TOKEN('PROC' , 'POP_CONTACT_POINTS_COND_REC');
696     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
697     FND_MSG_PUB.ADD;
698     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
699 END;
700 
701   PROCEDURE init_score_context (
702       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type:=
703                                   HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,
704       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list:=
705                                   HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,
706       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list:= 
707                                   HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
708       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list:=
709                                   HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST
710   ) IS
711    l_dummy NUMBER;
712   BEGIN
713    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
714       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
715       hz_utility_v2pub.debug(p_message=>'calling the procedure init_score_context',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
716     END IF;
717    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
718       hz_utility_v2pub.debug(p_message=>'In init_score_context calling the Map procedures',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
719     END IF;
720     -- Transform search criteria
721     HZ_TRANS_PKG.clear_globals;
722     MAP_PARTY_REC(FALSE,p_party_search_rec, l_dummy, g_party_stage_rec);
723     MAP_PARTY_SITE_REC(FALSE,p_party_site_list, l_dummy, g_party_site_stage_list);
724     MAP_CONTACT_REC(FALSE,p_contact_list, l_dummy, g_contact_stage_list);
725     MAP_CONTACT_POINT_REC(FALSE,p_contact_point_list, l_dummy, g_contact_pt_stage_list);
726 
727   END;
728   FUNCTION init_search(
729       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type:=
730                                   HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,
731       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list:=
732                                   HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,
733       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list:= 
734                                   HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
735       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list:=
736                                   HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,
737       p_match_type            IN  VARCHAR2,
738       x_party_max_score       OUT NUMBER,
739       x_ps_max_score       OUT NUMBER,
740       x_contact_max_score       OUT NUMBER,
741       x_cpt_max_score       OUT NUMBER
742   ) RETURN NUMBER IS 
743   l_entered_max_score NUMBER:=0;
744   l_ps_entered_max_score NUMBER:=0;
745   l_ct_entered_max_score NUMBER:=0;
746   l_cpt_entered_max_score NUMBER:=0;
747   vlist vlisttype;
748   maxscore HZ_PARTY_SEARCH.IDList;
749   l_name VARCHAR2(200);
750   l_idx NUMBER; 
751   l_num NUMBER; 
752   total NUMBER; 
753   threshold NUMBER; 
754   BEGIN
755    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
756       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
757       hz_utility_v2pub.debug(p_message=>'calling the function init_search',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
758     END IF;
759     IF NOT check_prim_cond (p_party_search_rec,
760                             p_party_site_list,
761                             p_contact_list,
762                             p_contact_point_list) THEN
763       FND_MESSAGE.SET_NAME('AR', 'HZ_NO_PRIMARY_COND');
764       FND_MSG_PUB.ADD;
765       RAISE FND_API.G_EXC_ERROR;
766     END IF;
767    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
768       hz_utility_v2pub.debug(p_message=>'In init_search calling util package set_score',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
769     END IF;
770     HZ_DQM_SEARCH_UTIL.set_score;
771     g_mappings.DELETE;
772     g_party_site_stage_list.DELETE;
773     g_contact_stage_list.DELETE;
774     g_contact_pt_stage_list.DELETE;
775     call_order.DELETE;
776     call_max_score.DELETE;
777     HZ_DQM_SEARCH_UTIL.new_search;
778     HZ_TRANS_PKG.set_party_type(p_party_search_rec.PARTY_TYPE);
779     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
780 
781    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
782       hz_utility_v2pub.debug(p_message=>'In init_search calling the Map procedures',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
783     END IF;
784     -- Transform search criteria
785 POP_PARTY_COND_REC(p_party_search_rec);
786 
787 POP_PARTY_SITES_COND_REC(p_party_site_list);
788 
789 POP_CONTACTS_COND_REC(p_contact_list);
790 
791 POP_CONTACT_POINTS_COND_REC(p_contact_point_list);
792 
793     MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);
794     MAP_PARTY_SITE_REC(TRUE,p_party_site_list, l_ps_entered_max_score, g_party_site_stage_list);
795     MAP_CONTACT_REC(TRUE,p_contact_list, l_ct_entered_max_score, g_contact_stage_list);
796     MAP_CONTACT_POINT_REC(TRUE,p_contact_point_list, l_cpt_entered_max_score, g_contact_pt_stage_list);
797 
798       
799    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
800       hz_utility_v2pub.debug(p_message=>'In init_search determining call order of entities',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
801     END IF;
802     l_idx := l_entered_max_score+1;
803     vlist (l_idx) := 'PARTY';
804     maxscore (l_idx) := l_entered_max_score;
805     l_idx := l_ps_entered_max_score+1;
806     WHILE vlist.EXISTS(l_idx) LOOP
807       l_idx := l_idx+1;
808     END LOOP;
809     vlist (l_idx) := 'PARTY_SITE';
810     maxscore (l_idx) := l_ps_entered_max_score;
811 
812     l_idx := l_ct_entered_max_score+1;
813     WHILE vlist.EXISTS(l_idx) LOOP
814       l_idx := l_idx+1;
815     END LOOP;
816     vlist (l_idx) := 'CONTACT';
817     maxscore (l_idx) := l_ct_entered_max_score;
818 
819     l_idx := l_cpt_entered_max_score+1;
820     WHILE vlist.EXISTS(l_idx) LOOP
821       l_idx := l_idx+1;
822     END LOOP;
823     vlist (l_idx) := 'CONTACT_POINT';
824     maxscore (l_idx) := l_cpt_entered_max_score;
825 
826     l_num := 1;
827     l_idx := vlist.LAST;
828    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
829       hz_utility_v2pub.debug(p_message=>'Call order is the following',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
830     END IF;
831     WHILE l_idx IS NOT NULL LOOP
832       call_order(l_num) := vlist(l_idx);
833       call_max_score(l_num) := maxscore(l_idx);
834    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
835       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
836     END IF;
837    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
838       hz_utility_v2pub.debug(p_message=>'l_num =  '||l_num,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
839       hz_utility_v2pub.debug(p_message=>'entity =  '||vlist(l_idx),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
840       hz_utility_v2pub.debug(p_message=>'call_max_score for entity =  '||maxscore(l_idx),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
841     END IF;
842       l_idx := vlist.PRIOR(l_idx);
843       l_num := l_num+1;
844     END LOOP;  
845    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
846       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
847     END IF;
848     call_order(5):='NONE';
849    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
850       hz_utility_v2pub.debug(p_message=>'In init_search determining call type of entities',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
851     END IF;
852     IF p_match_type = ' OR ' THEN
853    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
854       hz_utility_v2pub.debug(p_message=>'This is an OR Match Rule',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
855     END IF;
856       threshold := 474;
857    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
858       hz_utility_v2pub.debug(p_message=>'This is a Duplicate Identification Match Rule',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
859     END IF;
860    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
861       hz_utility_v2pub.debug(p_message=>'Threshold defined in Match Rule is  '||threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
862     END IF;
863       l_idx := vlist.FIRST;
864       total := 0;
865       l_num := 4;
866       WHILE l_idx IS NOT NULL LOOP
867         total := total+maxscore(l_idx);
868         IF total<threshold THEN
869           call_type(l_num) := 'AND';
870         ELSE
871           call_type(l_num) := 'OR';
872         END IF;
873         l_idx := vlist.NEXT(l_idx);
874         l_num := l_num-1;
875       END LOOP;
876     ELSE
877       call_type(1) := 'OR';
878       call_type(2) := 'AND';
879       call_type(3) := 'AND';
880       call_type(4) := 'AND';
881     END IF;
882    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
883       hz_utility_v2pub.debug(p_message=>'Call types are the following',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
884     END IF;
885    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
886       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
887     END IF;
888    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
889       hz_utility_v2pub.debug(p_message=>'call type 1 =  '||call_type(1),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
890       hz_utility_v2pub.debug(p_message=>'call type 2 =  '||call_type(2),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
891       hz_utility_v2pub.debug(p_message=>'call type 3 =  '||call_type(3),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
892       hz_utility_v2pub.debug(p_message=>'call type 4 =  '||call_type(4),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
893     END IF;
894    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
895       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
896     END IF;
897     x_party_max_score := l_entered_max_score;
898     x_ps_max_score := l_ps_entered_max_score;
899     x_contact_max_score := l_ct_entered_max_score;
900     x_cpt_max_score := l_cpt_entered_max_score;
901    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
902       hz_utility_v2pub.debug(p_message=>'init_search returned with the following max scores at each level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
903     END IF;
904    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
905       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
906     END IF;
907    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
908       hz_utility_v2pub.debug(p_message=>'entered party max score =  '||l_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
909       hz_utility_v2pub.debug(p_message=>'entered paty site max score =  '||l_ps_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
910       hz_utility_v2pub.debug(p_message=>'entered contact max score =  '||l_ct_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
911       hz_utility_v2pub.debug(p_message=>'entered contact point max score =  '||l_cpt_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
912     END IF;
913    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
914       hz_utility_v2pub.debug(p_message=>'entered total score =  '||(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
915     END IF;
916    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
917       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
918     END IF;
919     RETURN (l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score);
920   END;
921   FUNCTION INIT_PARTY_QUERY(p_match_str VARCHAR2, 
922               p_denorm_str VARCHAR2,
923               p_party_max_score NUMBER,
924               p_denorm_max_score NUMBER,
925               p_non_denorm_max_score NUMBER,
926               p_threshold NUMBER) RETURN VARCHAR2 IS
927     l_party_contains_str VARCHAR2(32000); 
928     l_party_filter VARCHAR2(1) := null;
929     l_prim_temp VARCHAR2(4000);
930     l_denorm_str VARCHAR2(4000);
931   BEGIN
932    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
933       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
934       hz_utility_v2pub.debug(p_message=>'calling the function init_party_query',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
935     END IF;
936    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
937       hz_utility_v2pub.debug(p_message=>'passed in p_match_str is  '||p_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
938     END IF;
939    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
940       hz_utility_v2pub.debug(p_message=>'passed in p_denorm_str is  '||p_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
941     END IF;
942    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
943       hz_utility_v2pub.debug(p_message=>'passed in p_denorm_max_score is  '||p_denorm_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
944     END IF;
945    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
946       hz_utility_v2pub.debug(p_message=>'passed in p_non_denorm_max_score is  '||p_non_denorm_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
947     END IF;
948    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
949       hz_utility_v2pub.debug(p_message=>'passed in p_threshold is  '||p_threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
950     END IF;
951     IF p_party_max_score<=p_threshold OR p_match_str=' AND ' THEN
952       l_denorm_str := NULL;
953    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
954       hz_utility_v2pub.debug(p_message=>'calculated denorm string l_denorm_str is  '||l_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
955     END IF;
956     ELSE
957       l_denorm_str := p_denorm_str;
958    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
959       hz_utility_v2pub.debug(p_message=>'calculated denorm string l_denorm_str is  '||l_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
960     END IF;
961     END IF;
962 
963     -- Setup query string for SIC_CODE
964     l_prim_temp := null;
965     HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT
966           g_party_stage_rec.TX46,'A20',l_prim_temp);
967 
968   IF l_denorm_str IS NOT NULL THEN
969     IF (p_non_denorm_max_score+60)>=p_threshold THEN
970       l_denorm_str := NULL;
971       HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
972     ELSIF (p_non_denorm_max_score+p_denorm_max_score+60)>=p_threshold THEN
973       HZ_DQM_SEARCH_UTIL.add_attribute_with_denorm(l_prim_temp, p_match_str, l_denorm_str, l_party_contains_str);
974       l_denorm_str := NULL;
975     END IF;
976   ELSE
977     HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
978   END IF;
979 
980     -- Setup query string for PARTY_NAME
981     l_prim_temp := null;
982     HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE SPECIAL + WRNAMES
983           g_party_stage_rec.TX4,'A8',l_prim_temp);
984 
985   IF l_denorm_str IS NOT NULL THEN
986     IF (p_non_denorm_max_score+200)>=p_threshold THEN
987       l_denorm_str := NULL;
988       HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
989     ELSIF (p_non_denorm_max_score+p_denorm_max_score+200)>=p_threshold THEN
990       HZ_DQM_SEARCH_UTIL.add_attribute_with_denorm(l_prim_temp, p_match_str, l_denorm_str, l_party_contains_str);
991       l_denorm_str := NULL;
992     END IF;
993   ELSE
994     HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
995   END IF;
996 
997     -- Setup query string for JGZZ_FISCAL_CODE
998     l_prim_temp := null;
999     HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT SPECIAL
1000           g_party_stage_rec.TX45,'A19',l_prim_temp);
1001 
1002   IF l_denorm_str IS NOT NULL THEN
1003     IF (p_non_denorm_max_score+300)>=p_threshold THEN
1004       l_denorm_str := NULL;
1005       HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
1006     ELSIF (p_non_denorm_max_score+p_denorm_max_score+300)>=p_threshold THEN
1007       HZ_DQM_SEARCH_UTIL.add_attribute_with_denorm(l_prim_temp, p_match_str, l_denorm_str, l_party_contains_str);
1008       l_denorm_str := NULL;
1009     END IF;
1010   ELSE
1011     HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
1012   END IF;
1013     IF lengthb(l_party_contains_str) > 4000 THEN
1014       FND_MESSAGE.SET_NAME('AR', 'HZ_SEARCH_CRIT_LARGE_ERROR');
1015       FND_MESSAGE.SET_TOKEN('ENTITY','PARTY');
1016       FND_MSG_PUB.ADD;
1017       RAISE FND_API.G_EXC_ERROR;
1018     END IF;
1019     IF (p_match_str = ' AND ' OR p_party_max_score<p_threshold) AND l_party_contains_str IS NOT NULL AND p_denorm_str IS NOT NULL THEN
1020    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1021       hz_utility_v2pub.debug(p_message=>'party contains string returned by init_search is an AND between these strings ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1022     END IF;
1023    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1024       hz_utility_v2pub.debug(p_message=>'l_party_contains_str =  '||l_party_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1025     END IF;
1026    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1027       hz_utility_v2pub.debug(p_message=>'p_denorm_str =  '||p_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1028     END IF;
1029       RETURN '('||l_party_contains_str||') AND ('||p_denorm_str||')';
1030     ELSE
1031    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1032       hz_utility_v2pub.debug(p_message=>'party contains string returned by init_search is ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1033       hz_utility_v2pub.debug(p_message=>'l_party_contains_str',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1034     END IF;
1035       RETURN l_party_contains_str;
1036     END IF;
1037   END;
1038   FUNCTION INIT_PARTY_SITES_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS
1039     l_contains_str VARCHAR2(32000); 
1040     l_contains_str_temp VARCHAR2(32000); 
1041     l_den_contains_str VARCHAR2(32000); 
1042     l_den_contains_str_temp VARCHAR2(32000); 
1043     l_filter_str VARCHAR2(4000) := null;
1044     l_prim_temp VARCHAR2(4000) := null;
1045     l_prim_temp_den VARCHAR2(4000) := null;
1046   BEGIN
1047     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1048       hz_utility_v2pub.debug(p_message=>'INIT_PARTY_SITES_QUERY  ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
1049     END IF;
1050     x_denorm_str := NULL;
1051 
1052     -- Dynamic setup of party site contains str
1053     --
1054     -- For each primary transformation add to intermedia query if it 
1055     -- is not null
1056     FOR I IN 1..g_party_site_stage_list.COUNT LOOP
1057       l_contains_str_temp := null;
1058       l_den_contains_str_temp := null;
1059       l_filter_str := null;
1060 
1061       -- Setup query string for ADDRESS
1062       l_prim_temp := null;
1063       l_prim_temp_den := null;
1064       HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE SPECIAL + WRADDRESS
1065             g_party_site_stage_list(I).TX4,'A27',l_prim_temp);
1066       HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1067 
1068       -- Setup query string for POSTAL_CODE
1069       l_prim_temp := null;
1070       l_prim_temp_den := null;
1071       HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT SPECIAL NOSPC
1072             g_party_site_stage_list(I).TX11,'A30',l_prim_temp);
1073       HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT SPECIAL NOSPC
1074             g_party_site_stage_list(I).TX11,'D_PS',l_prim_temp_den);
1075       HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp_den, ' AND ', l_den_contains_str_temp);
1076       HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1077 
1078       HZ_DQM_SEARCH_UTIL.add_search_record(l_contains_str_temp,  	 l_filter_str, l_contains_str);
1079       HZ_DQM_SEARCH_UTIL.add_search_record(l_den_contains_str_temp,  	 null, l_den_contains_str);
1080     END LOOP;
1081     -- Add the search criteria to query string
1082     IF lengthb(l_contains_str) > 4000 THEN
1083         FND_MESSAGE.SET_NAME('AR', 'HZ_SEARCH_CRIT_LARGE_ERROR');
1084         FND_MESSAGE.SET_TOKEN('ENTITY','PARTY_SITES');
1085         FND_MSG_PUB.ADD;
1086         RAISE FND_API.G_EXC_ERROR;
1087     END IF;
1088     x_denorm_str := l_den_contains_str;
1089     RETURN l_contains_str;
1090   END;
1091 
1092   FUNCTION INIT_CONTACTS_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS
1093     l_contains_str VARCHAR2(32000); 
1094     l_contains_str_temp VARCHAR2(32000); 
1095     l_den_contains_str VARCHAR2(32000); 
1096     l_den_contains_str_temp VARCHAR2(32000); 
1097     l_filter_str VARCHAR2(4000) := null;
1098     l_prim_temp VARCHAR2(4000) := null;
1099     l_prim_temp_den VARCHAR2(4000) := null;
1100   BEGIN
1101     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1102       hz_utility_v2pub.debug(p_message=>'INIT_CONTACTS_QUERY  ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
1103     END IF;
1104     x_denorm_str := NULL;
1105     RETURN NULL;
1106   END;
1107 
1108   FUNCTION INIT_CONTACT_POINTS_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS
1109     l_contains_str VARCHAR2(32000); 
1110     l_contains_str_temp VARCHAR2(32000); 
1111     l_den_contains_str VARCHAR2(32000); 
1112     l_den_contains_str_temp VARCHAR2(32000); 
1113     l_filter_str VARCHAR2(4000) := null;
1114     l_prim_temp VARCHAR2(4000) := null;
1115     l_prim_temp_den VARCHAR2(4000) := null;
1116     TYPE CONTACT_PT_REC_TYPE IS RECORD (
1117     contact_pt_type		VARCHAR2(100)) ;
1118     TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;
1119     l_cnt_pt_type contact_pt_list;
1120     N NUMBER:=1;
1121     x_modify VARCHAR2(1);
1122   BEGIN
1123     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1124       hz_utility_v2pub.debug(p_message=>'INIT_CONTACT_POINTS_QUERY  ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
1125     END IF;
1126     x_denorm_str := NULL;
1127 
1128     -- Dynamic setup of party site contains str
1129     --
1130     -- For each primary transformation add to intermedia query if it 
1131     -- is not null
1132     FOR I IN 1..g_contact_pt_stage_list.COUNT LOOP
1133       l_contains_str_temp := null;
1134       l_den_contains_str_temp := null;
1135       l_filter_str := null;
1136       l_filter_str := '('||g_contact_pt_stage_list(I).CONTACT_POINT_TYPE||') ';
1137       if(l_cnt_pt_type.count>0) then
1138       x_modify := 'Y';
1139       FOR J IN 1..l_cnt_pt_type.COUNT LOOP
1140       IF (l_cnt_pt_type(J).contact_pt_type=g_contact_pt_stage_list(I).CONTACT_POINT_TYPE) THEN
1141       x_modify := 'N';
1142       END IF;
1143       END LOOP;
1144       if x_modify = 'Y' then
1145       l_cnt_pt_type(N).contact_pt_type := g_contact_pt_stage_list(I).CONTACT_POINT_TYPE;
1146       N := N+1;
1147       end if;
1148       else
1149       l_cnt_pt_type(N).contact_pt_type := g_contact_pt_stage_list(I).CONTACT_POINT_TYPE;
1150       N := N+1;
1151       end if;
1152 
1153       -- Setup query string for PHONE_NUMBER
1154       l_prim_temp := null;
1155       l_prim_temp_den := null;
1156       HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT SPECIAL
1157             g_contact_pt_stage_list(I).TX2,'A45',l_prim_temp);
1158       HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1159 
1160       HZ_DQM_SEARCH_UTIL.add_search_record(l_contains_str_temp,  	 l_filter_str, l_contains_str);
1161       HZ_DQM_SEARCH_UTIL.add_search_record(l_den_contains_str_temp,  	 null, l_den_contains_str);
1162 IF N>1 THEN 
1163  distinct_search_cpt_types := N-1;
1164 ELSE
1165  distinct_search_cpt_types := N;
1166 END IF;
1167    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1168       hz_utility_v2pub.debug(p_message=>'distinct_search_cpt_types is -  '||distinct_search_cpt_types,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1169     END IF;
1170     END LOOP;
1171     -- Add the search criteria to query string
1172     IF lengthb(l_contains_str) > 4000 THEN
1173         FND_MESSAGE.SET_NAME('AR', 'HZ_SEARCH_CRIT_LARGE_ERROR');
1174         FND_MESSAGE.SET_TOKEN('ENTITY','CONTACT_POINTS');
1175         FND_MSG_PUB.ADD;
1176         RAISE FND_API.G_EXC_ERROR;
1177     END IF;
1178     x_denorm_str := l_den_contains_str;
1179     RETURN l_contains_str;
1180   END;
1181 
1182   PROCEDURE open_party_cursor_direct (
1183             p_dup_party_id NUMBER, 
1184             p_restrict_sql VARCHAR2, 
1185             p_match_str VARCHAR2,
1186             p_search_merged VARCHAR2,
1187             p_party_contains_str VARCHAR2,
1188             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1189     l_sqlstr VARCHAR2(4000);
1190     l_search_merged VARCHAR2(1);
1191   BEGIN
1192    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1193       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1194       hz_utility_v2pub.debug(p_message=>'calling procedure open party cursor direct',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1195     END IF;
1196     IF (p_search_merged is null) then 
1197        l_search_merged := 'N';  
1198     ELSE 
1199        l_search_merged := p_search_merged; 
1200     END IF; 
1201    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1202       hz_utility_v2pub.debug(p_message=>'Search Merged Flag -  '||l_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1203     END IF;
1204     IF p_restrict_sql IS NULL AND NOT g_other_party_level_attribs AND NOT (p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,'D_PS')>0 AND g_party_site_stage_list.COUNT=1) THEN
1205    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1206       hz_utility_v2pub.debug(p_message=>'Restrict SQL is NULL and other conditions met to OPEN x_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1207     END IF;
1208      OPEN x_cursor FOR 
1209       SELECT PARTY_ID , TX4, TX45, TX46
1210       FROM hz_staged_parties 
1211       WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
1212       AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  TX36))
1213       AND( (l_search_merged ='Y' ) 
1214            OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))  
1215            OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))  
1216       AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id);
1217     ELSE
1218    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1219       hz_utility_v2pub.debug(p_message=>'Restrict SQL is NOT NULL OR other conditions not met, Else Part',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1220     END IF;
1221       l_sqlstr := 'SELECT PARTY_ID , TX4, TX45, TX46 FROM hz_staged_parties stage ';
1222       l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
1223       l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' =  TX36) ';
1224       IF l_search_merged = 'N' THEN
1225         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
1226       ELSIF l_search_merged = 'I' THEN
1227         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
1228       END IF;
1229       l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
1230       IF g_other_party_level_attribs THEN
1231       l_sqlstr := l_sqlstr || ' AND ((:attr IS NULL OR ';
1232       l_sqlstr := l_sqlstr || '     (TX45 like :TX45||'' %'' ';
1233      l_sqlstr := l_sqlstr || ' )) ';
1234       l_sqlstr := l_sqlstr || '     '||p_match_str||' (:attr IS NULL OR ';
1235       l_sqlstr := l_sqlstr || '     (TX46 like :TX46||'' %'' ';
1236      l_sqlstr := l_sqlstr || ' )) ';
1237      l_sqlstr := l_sqlstr || ' ) ';
1238      END IF;
1239      IF p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,'D_PS')>0 AND g_party_site_stage_list.COUNT=1 THEN
1240    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1241       hz_utility_v2pub.debug(p_message=>'p_party_contains_str string is NOT NULL and other conditions met',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1242     END IF;
1243       l_sqlstr := l_sqlstr || ' AND (:attr IS NULL OR ';
1244       l_sqlstr := l_sqlstr || '     (D_PS like ''% ''||:TX11||'' %'' ';
1245      l_sqlstr := l_sqlstr || ' )) ';
1246      END IF;
1247    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1248       hz_utility_v2pub.debug(p_message=>'l_sqlstr before appending restrict_sql',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1249     END IF;
1250    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1251       hz_utility_v2pub.debug(p_message=>'l_sqlstr is -  '||l_sqlstr,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1252     END IF;
1253      IF p_restrict_sql IS NOT NULL THEN
1254        l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
1255      END IF;
1256    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1257       hz_utility_v2pub.debug(p_message=>'l_sqlstr after appending restrict_sql',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1258     END IF;
1259    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1260       hz_utility_v2pub.debug(p_message=>'l_sqlstr is -  '||l_sqlstr,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1261     END IF;
1262      IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,'D_PS')>0 AND g_party_site_stage_list.COUNT=1 THEN
1263    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1264       hz_utility_v2pub.debug(p_message=>'IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1265     END IF;
1266        OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id
1267      ,g_party_stage_rec.TX45
1268      ,g_party_stage_rec.TX45
1269      ,g_party_stage_rec.TX46
1270      ,g_party_stage_rec.TX46
1271      ,g_party_site_stage_list(1).TX11
1272      ,g_party_site_stage_list(1).TX11
1273      ;
1274      ELSIF g_other_party_level_attribs THEN
1275    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1276       hz_utility_v2pub.debug(p_message=>'ELSIF g_other_party_level_attribs THEN',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1277     END IF;
1278        OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id
1279      ,g_party_stage_rec.TX45
1280      ,g_party_stage_rec.TX45
1281      ,g_party_stage_rec.TX46
1282      ,g_party_stage_rec.TX46
1283      ;
1284      ELSIF p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,'D_PS')>0 AND g_party_site_stage_list.COUNT=1 THEN
1285    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1286       hz_utility_v2pub.debug(p_message=>'ELSIF p_party_contains_str IS NOT NULL AND ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1287     END IF;
1288        OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id
1289      ,g_party_site_stage_list(1).TX11
1290      ,g_party_site_stage_list(1).TX11
1291      ;
1292      ELSE
1293    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1294       hz_utility_v2pub.debug(p_message=>'ELSE code fork',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1295     END IF;
1296        OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id;
1297      END IF;
1298     END IF;
1299   END;
1300   PROCEDURE open_party_cursor(
1301             p_dup_party_id NUMBER, 
1302             p_restrict_sql VARCHAR2, 
1303             p_contains_str  VARCHAR2, 
1304             p_search_ctx_id NUMBER,
1305             p_match_str VARCHAR2,
1306             p_search_merged VARCHAR2,
1307             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1308   l_sqlstr VARCHAR2(4000);
1309   l_hint VARCHAR2(100); 
1310   l_check NUMBER; 
1311   l_search_merged VARCHAR2(1); 
1312   BEGIN
1313    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1314       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1315       hz_utility_v2pub.debug(p_message=>'calling procedure open party cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1316     END IF;
1317     IF (p_search_merged is null) then 
1318        l_search_merged := 'N';  
1319     ELSE 
1320        l_search_merged := p_search_merged; 
1321     END IF; 
1322     IF p_contains_str IS NULL THEN
1323    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1324       hz_utility_v2pub.debug(p_message=>'part contains string is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1325     END IF;
1326       OPEN x_cursor FOR 
1327         SELECT PARTY_ID , TX4, TX45, TX46
1328         FROM HZ_STAGED_PARTIES stage
1329         WHERE PARTY_ID = p_dup_party_id;
1330     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1331    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1332       hz_utility_v2pub.debug(p_message=>'Either restrict sql is null or search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1333     END IF;
1334       IF p_search_ctx_id IS NULL THEN
1335    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1336       hz_utility_v2pub.debug(p_message=>'Search context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1337     END IF;
1338         OPEN x_cursor FOR 
1339           SELECT /*+ INDEX(stage HZ_STAGE_PARTIES_T1) */ PARTY_ID , TX4, TX45, TX46
1340           FROM HZ_STAGED_PARTIES stage
1341           WHERE contains( concat_col, p_contains_str)>0
1342           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  stage.TX36))
1343           AND( (l_search_merged ='Y' ) 
1344           OR (l_search_merged = 'I' AND nvl(stage.status, 'A') in ('A', 'I'))  
1345           OR (l_search_merged = 'N' AND nvl(stage.status, 'A') in ('A'))       ) 
1346           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1347       ELSE
1348    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1349       hz_utility_v2pub.debug(p_message=>'Search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1350     END IF;
1351         OPEN x_cursor FOR 
1352             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTIES_U1) */ stage.PARTY_ID , TX4, TX45, TX46
1353             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTIES stage
1354             WHERE contains( concat_col, p_contains_str)>0
1355             AND d.SEARCH_CONTEXT_ID=p_search_ctx_id
1356             AND d.party_id = stage.party_id
1357             AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  stage.TX36))
1358             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
1359             AND( (l_search_merged ='Y' ) 
1360             OR (l_search_merged = 'I' AND nvl(stage.status, 'A') in ('A', 'I'))  
1361             OR (l_search_merged = 'N' AND nvl(stage.status, 'A') in ('A'))       ); 
1362       END IF;
1363     ELSE
1364    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1365       hz_utility_v2pub.debug(p_message=>'Restrict sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1366     END IF;
1367        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
1368        IF (l_check > 0 ) THEN 
1369    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1370       hz_utility_v2pub.debug(p_message=>'Restrict sql has a Selective Hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1371     END IF;
1372            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTIES_U1) */'; 
1373        ELSE 
1374            l_hint := '/*+ INDEX(stage HZ_STAGE_PARTIES_T1) */'; 
1375        END IF; 
1376      IF p_search_ctx_id IS NULL THEN
1377        l_sqlstr := 'SELECT   ' || l_hint || ' PARTY_ID , TX4, TX45, TX46'||
1378                    ' FROM HZ_STAGED_PARTIES stage'||
1379                    ' WHERE contains( concat_col, :cont)>0'||
1380                    ' AND ((:TX36 IS NULL OR :TX36||'' '' =  stage.TX36))'||
1381                    ' AND ('||p_restrict_sql||')' ||
1382                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
1383           IF l_search_merged = 'Y' THEN  
1384                   l_sqlstr := l_sqlstr ;  
1385           ELSIF l_search_merged = 'I' THEN  
1386                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'', ''I'')';  
1387           ELSE  
1388                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'')';  
1389           END IF;  
1390  	   output_long_strings('----------------------------------------------------------');
1391       output_long_strings('Party Contains String = '||p_contains_str);
1392 		output_long_strings('Restrict Sql = '||p_restrict_sql);
1393        OPEN x_cursor FOR l_sqlstr USING p_contains_str
1394                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1395                     ,p_dup_party_id, p_dup_party_id;
1396      END IF;
1397    END IF;
1398   exception
1399     when others then
1400       if (instrb(SQLERRM,'DRG-51030')>0) then 
1401         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1402         FND_MSG_PUB.ADD;
1403         RAISE FND_API.G_EXC_ERROR;
1404       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
1405         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1406         FND_MSG_PUB.ADD;
1407         RAISE FND_API.G_EXC_ERROR;
1408       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
1409         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1410         FND_MSG_PUB.ADD;
1411         RAISE FND_API.G_EXC_ERROR;
1412       else 
1413         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1414     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1415     	 FND_MSG_PUB.ADD;
1416         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1417       end if;
1418   END;
1419 
1420   PROCEDURE open_party_site_cursor(
1421             p_dup_party_id NUMBER, 
1422             p_party_id NUMBER, 
1423             p_restrict_sql VARCHAR2, 
1424             p_contains_str  VARCHAR2, 
1425             p_search_ctx_id  NUMBER, 
1426             p_search_merged  VARCHAR2, 
1427             p_search_rel_sites  VARCHAR2, 
1428             p_person_api  VARCHAR2, 
1429             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1430   l_sqlstr VARCHAR2(4000);
1431   l_hint VARCHAR2(100); 
1432   l_check NUMBER; 
1433   l_check_dt NUMBER; 
1434   l_search_merged VARCHAR2(1); 
1435   l_status_sql VARCHAR2(100); 
1436   p_restrict_sql1 VARCHAR2(4000); 
1437  
1438   BEGIN
1439    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1440       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1441       hz_utility_v2pub.debug(p_message=>'calling the procedure open_party_site_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1442     END IF;
1443      IF (p_search_merged is null) then 
1444         l_search_merged := 'N';  
1445      ELSE 
1446         l_search_merged := p_search_merged; 
1447      END IF; 
1448      IF p_party_id IS NOT NULL THEN
1449    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1450       hz_utility_v2pub.debug(p_message=>'Single Party Scenario',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1451     END IF;
1452        IF p_search_rel_sites = 'N' THEN
1453          OPEN x_cursor FOR 
1454           SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX4, TX11
1455           FROM HZ_STAGED_PARTY_SITES stage
1456           WHERE contains( concat_col, p_contains_str)>0
1457           AND( (l_search_merged ='Y' )  
1458              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1459              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1460           AND stage.party_id = p_party_id; 
1461        ELSE
1462          OPEN x_cursor FOR 
1463           SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX4, TX11
1464           FROM HZ_STAGED_PARTY_SITES stage
1465           WHERE contains( concat_col, p_contains_str)>0
1466           AND( (l_search_merged ='Y' )  
1467             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1468             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1469           AND stage.party_id = p_party_id 
1470           UNION
1471           SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID, TX4, TX11
1472           FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc
1473           WHERE contains( concat_col, p_contains_str)>0
1474           AND( (l_search_merged ='Y' )  
1475             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1476             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1477           AND r.object_id = p_party_id 
1478           AND r.subject_id = stage.party_id 
1479           AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
1480           AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
1481           AND r.relationship_id = oc.party_relationship_id
1482           AND oc.org_contact_id = stage.org_contact_id; 
1483       END IF;
1484     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1485    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1486       hz_utility_v2pub.debug(p_message=>'Either restrict sql is null or search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1487     END IF;
1488       IF p_search_ctx_id IS NULL THEN
1489    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1490       hz_utility_v2pub.debug(p_message=>'Search context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1491     END IF;
1492         OPEN x_cursor FOR 
1493           SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX4, TX11
1494           FROM HZ_STAGED_PARTY_SITES stage
1495         WHERE contains( concat_col, p_contains_str)>0
1496         AND EXISTS (
1497           SELECT 1 FROM HZ_STAGED_PARTIES p
1498           WHERE p.PARTY_ID = stage.PARTY_ID
1499           AND( (l_search_merged ='Y' )  
1500           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
1501           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
1502           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
1503           AND( (l_search_merged ='Y' )  
1504            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1505            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1506           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1507       ELSE
1508    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1509       hz_utility_v2pub.debug(p_message=>'Search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1510     END IF;
1511         IF p_person_api = 'Y' THEN
1512           OPEN x_cursor FOR 
1513             SELECT  PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX4, TX11
1514             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1515             WHERE contains( concat_col, p_contains_str)>0
1516           AND( (l_search_merged ='Y' )  
1517           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1518           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1519             AND d.search_context_id = p_search_ctx_id
1520             AND d.party_id = stage.party_id
1521             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
1522             UNION 
1523             SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, r.subject_id, stage.ORG_CONTACT_ID, TX4, TX11
1524             FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage
1525             WHERE contains( concat_col, p_contains_str)>0
1526           AND( (l_search_merged ='Y' )  
1527           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1528           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1529             AND d.search_context_id = p_search_ctx_id
1530             AND d.party_id = r.subject_id
1531             AND r.relationship_id = oc.party_relationship_id
1532             AND oc.org_contact_id = stage.org_contact_id
1533             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
1534         ELSE
1535           OPEN x_cursor FOR 
1536             SELECT  PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX4, TX11
1537             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1538             WHERE contains( concat_col, p_contains_str)>0
1539             AND( (l_search_merged ='Y' )  
1540              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1541              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1542             AND d.search_context_id = p_search_ctx_id
1543             AND d.party_id = stage.party_id
1544             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1545         END IF;
1546       END IF;
1547     ELSE
1548    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1549       hz_utility_v2pub.debug(p_message=>'Restrict sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1550     END IF;
1551        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
1552        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_PS'); 
1553        IF (l_check_dt > 0 ) THEN 
1554    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1555       hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective_ps  hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1556     END IF;
1557            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */'; 
1558        ELSIF (l_check > 0 ) THEN 
1559    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1560       hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1561     END IF;
1562            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */'; 
1563        END IF; 
1564        IF l_search_merged = 'Y' THEN 
1565                l_status_sql := ' ' ;  
1566        ELSIF l_search_merged = 'I' THEN  
1567                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
1568        ELSE 
1569                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
1570        END IF; 
1571  		/*Performance fix for Bug:4589953*/ 
1572  		IF(p_person_api='Y') THEN 
1573        IF (l_check > 0 ) THEN 
1574        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
1575        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
1576        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
1577        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
1578        ELSE
1579 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
1580        END IF; 
1581        l_sqlstr := 'SELECT  /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX11'||
1582                    ' FROM HZ_STAGED_PARTY_SITES stage'||
1583                    ' WHERE contains( concat_col, :cont)>0'||
1584                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
1585                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
1586                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
1587          ' AND (ORG_CONTACT_ID IS NULL ' ||
1588        	' AND ('||p_restrict_sql||'))' ||
1589        	' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
1590          ' UNION ' ||
1591        			 'SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX11'||
1592                    ' FROM HZ_STAGED_PARTY_SITES stage'||
1593                    ' WHERE contains( concat_col, :cont)>0'||
1594                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
1595                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
1596                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
1597          ' AND ORG_CONTACT_ID IN ' ||
1598          ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships ' ||
1599          ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
1600          ' where stage1.relationship_id = oc.party_relationship_id ' || 
1601          ' and ('||p_restrict_sql1|| ') )' ||
1602          ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
1603        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
1604                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
1605        ELSE 
1606        l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX11'||
1607                    ' FROM HZ_STAGED_PARTY_SITES stage'||
1608                    ' WHERE contains( concat_col, :cont)>0'||
1609                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
1610                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
1611                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
1612                  ' AND EXISTS ('||
1613                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
1614                  ' WHERE p.party_id = stage.party_id ' || 
1615                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
1616                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
1617                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
1618        OPEN x_cursor FOR l_sqlstr USING p_contains_str
1619                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1620                     ,p_dup_party_id, p_dup_party_id;
1621        END IF; 
1622 		ELSE 
1623        l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX11'||
1624                    ' FROM HZ_STAGED_PARTY_SITES stage'||
1625                    ' WHERE contains( concat_col, :cont)>0'||
1626                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
1627                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
1628                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
1629                  ' AND EXISTS ('||
1630                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
1631                  ' WHERE p.party_id = stage.party_id ' || 
1632                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
1633                    ' AND ('||p_restrict_sql||')' ||
1634                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
1635        OPEN x_cursor FOR l_sqlstr USING p_contains_str
1636                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1637                     ,p_dup_party_id, p_dup_party_id;
1638 		  END IF; 
1639     END IF;
1640  	    output_long_strings('----------------------------------------------------------');
1641        output_long_strings('Party Site Contains String = '||p_contains_str);
1642 		output_long_strings('Restrict Sql = '||p_restrict_sql);
1643   exception
1644     when others then
1645       if (instrb(SQLERRM,'DRG-51030')>0) then 
1646         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1647         FND_MSG_PUB.ADD;
1648         RAISE FND_API.G_EXC_ERROR;
1649       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
1650         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1651         FND_MSG_PUB.ADD;
1652         RAISE FND_API.G_EXC_ERROR;
1653       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
1654         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1655         FND_MSG_PUB.ADD;
1656         RAISE FND_API.G_EXC_ERROR;
1657       else 
1658         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1659     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1660     	 FND_MSG_PUB.ADD;
1661         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1662       end if;
1663   END;
1664 
1665   PROCEDURE open_contact_cursor(
1666             p_dup_party_id NUMBER, 
1667             p_party_id NUMBER, 
1668             p_restrict_sql VARCHAR2, 
1669             p_contains_str  VARCHAR2, 
1670             p_search_ctx_id  NUMBER, 
1671             p_search_merged  VARCHAR2, 
1672             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1673   l_sqlstr VARCHAR2(4000);
1674   l_hint VARCHAR2(100); 
1675   l_check NUMBER; 
1676   l_check_dt NUMBER; 
1677   l_search_merged VARCHAR2(1); 
1678   l_status_sql VARCHAR2(100); 
1679  
1680   BEGIN
1681    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1682       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1683       hz_utility_v2pub.debug(p_message=>'calling the procedure open_contact_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1684     END IF;
1685      IF (p_search_merged is null) then 
1686         l_search_merged := 'N';  
1687      ELSE 
1688         l_search_merged := p_search_merged; 
1689      END IF; 
1690      IF p_party_id IS NOT NULL THEN
1691    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1692       hz_utility_v2pub.debug(p_message=>'Single party scenario',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1693     END IF;
1694        OPEN x_cursor FOR 
1695           SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID
1696           FROM HZ_STAGED_CONTACTS stage
1697         WHERE contains( concat_col, p_contains_str)>0
1698         AND EXISTS (
1699           SELECT 1 FROM HZ_STAGED_PARTIES p
1700           WHERE p.PARTY_ID = stage.PARTY_ID
1701           AND( (l_search_merged ='Y' )  
1702           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
1703           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
1704           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
1705           AND( (l_search_merged ='Y' )  
1706            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1707            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1708           AND stage.party_id = p_party_id;
1709     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1710    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1711       hz_utility_v2pub.debug(p_message=>'Either Restrict sql is null or Search Context Id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1712     END IF;
1713       IF p_search_ctx_id IS NULL THEN
1714    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1715       hz_utility_v2pub.debug(p_message=>'Search Context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1716     END IF;
1717         OPEN x_cursor FOR 
1718           SELECT ORG_CONTACT_ID, PARTY_ID
1719           FROM HZ_STAGED_CONTACTS stage
1720         WHERE contains( concat_col, p_contains_str)>0
1721         AND EXISTS (
1722           SELECT 1 FROM HZ_STAGED_PARTIES p
1723           WHERE p.PARTY_ID = stage.PARTY_ID
1724           AND( (l_search_merged ='Y' )  
1725           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
1726           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
1727           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
1728           AND( (l_search_merged ='Y' )  
1729            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1730            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1731           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1732       ELSE
1733    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1734       hz_utility_v2pub.debug(p_message=>'Search Context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1735     END IF;
1736           OPEN x_cursor FOR 
1737             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID
1738             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage
1739             WHERE contains( concat_col, p_contains_str)>0
1740             AND d.search_context_id = p_search_ctx_id
1741             AND d.party_id = stage.party_id
1742             AND( (l_search_merged ='Y' )  
1743              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1744              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1745             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1746       END IF;
1747     ELSE
1748    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1749       hz_utility_v2pub.debug(p_message=>'Restrict Sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1750     END IF;
1751        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
1752        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CT'); 
1753        IF (l_check_dt > 0 ) THEN 
1754    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1755       hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective_ct hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1756     END IF;
1757            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */'; 
1758        ELSIF (l_check > 0 ) THEN 
1759    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1760       hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1761     END IF;
1762            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */'; 
1763        END IF; 
1764        IF l_search_merged = 'Y' THEN 
1765                l_status_sql := ' ' ;  
1766        ELSIF l_search_merged = 'I' THEN  
1767                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
1768        ELSE 
1769                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
1770        END IF; 
1771        l_sqlstr := 'SELECT   ' || l_hint || ' ORG_CONTACT_ID, PARTY_ID '||
1772                    ' FROM HZ_STAGED_CONTACTS stage'||
1773                    ' WHERE contains( concat_col, :cont)>0'||
1774                  ' AND EXISTS ('||
1775                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
1776                  ' WHERE p.party_id = stage.party_id ' || 
1777                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36)) '|| l_status_sql ||' ) ' || 
1778                   ' AND( ('''||l_search_merged||''' =''Y'' )  '||
1779                   ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
1780                   ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
1781                    ' AND ('||p_restrict_sql||')' ||
1782                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
1783        OPEN x_cursor FOR l_sqlstr USING p_contains_str
1784                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1785                     ,p_dup_party_id, p_dup_party_id;
1786     END IF;
1787  	    output_long_strings('----------------------------------------------------------');
1788        output_long_strings('Contacts Contains String = '||p_contains_str);
1789 		output_long_strings('Restrict Sql = '||p_restrict_sql);
1790   exception
1791     when others then
1792       if (instrb(SQLERRM,'DRG-51030')>0) then 
1793         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1794         FND_MSG_PUB.ADD;
1795         RAISE FND_API.G_EXC_ERROR;
1796       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
1797         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1798         FND_MSG_PUB.ADD;
1799         RAISE FND_API.G_EXC_ERROR;
1800       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
1801         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1802         FND_MSG_PUB.ADD;
1803         RAISE FND_API.G_EXC_ERROR;
1804       else 
1805         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1806     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1807     	 FND_MSG_PUB.ADD;
1808         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1809       end if;
1810   END;
1811 
1812   PROCEDURE open_contact_pt_cursor(
1813             p_dup_party_id NUMBER, 
1814             p_party_id NUMBER, 
1815             p_restrict_sql VARCHAR2, 
1816             p_contains_str  VARCHAR2, 
1817             p_search_ctx_id  NUMBER, 
1818             p_search_merged  VARCHAR2, 
1819             p_search_rel_cpts  VARCHAR2, 
1820             p_person_api  VARCHAR2, 
1821             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,
1822             p_restrict_entity VARCHAR2 DEFAULT NULL) IS
1823   l_sqlstr VARCHAR2(4000);
1824   l_hint VARCHAR2(100); 
1825   l_check NUMBER; 
1826   l_check_dt NUMBER; 
1827   l_search_merged VARCHAR2(1); 
1828   l_status_sql VARCHAR2(100); 
1829   p_restrict_sql1 VARCHAR2(4000); 
1830  
1831   BEGIN
1832    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1833       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1834       hz_utility_v2pub.debug(p_message=>'calling the procedure open_contact_pt_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1835     END IF;
1836      IF (p_search_merged is null) then 
1837         l_search_merged := 'N';  
1838      ELSE 
1839         l_search_merged := p_search_merged; 
1840      END IF; 
1841   IF p_restrict_entity = 'CONTACTS'    
1842   THEN
1843           OPEN x_cursor FOR 
1844           SELECT /*+ USE_NL(d stage) ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1845           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
1846           WHERE contains( concat_col, p_contains_str)>0 
1847           AND d.search_context_id = p_search_ctx_id 
1848           AND( (l_search_merged ='Y' )  
1849            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1850            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1851           AND d.party_id = stage.org_contact_id ; 
1852    END IF; 
1853   IF p_restrict_entity = 'PARTY_SITES'    
1854   THEN
1855           OPEN x_cursor FOR 
1856           SELECT /*+ USE_NL(d stage) ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N3) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1857           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
1858           WHERE contains( concat_col, p_contains_str)>0 
1859           AND d.search_context_id = p_search_ctx_id 
1860           AND( (l_search_merged ='Y' )  
1861            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1862            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1863           AND d.party_id = stage.party_site_id ; 
1864    END IF; 
1865  IF p_restrict_entity IS NULL
1866  THEN
1867      IF p_party_id IS NOT NULL THEN
1868    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1869       hz_utility_v2pub.debug(p_message=>'Single Party Scenario',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1870     END IF;
1871        IF p_search_rel_cpts = 'N' THEN
1872          OPEN x_cursor FOR 
1873           SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1874           FROM HZ_STAGED_CONTACT_POINTS stage
1875           WHERE contains( concat_col, p_contains_str)>0
1876           AND( (l_search_merged ='Y' )  
1877            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1878            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1879           AND stage.party_id = p_party_id; 
1880        ELSE
1881          OPEN x_cursor FOR 
1882           SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1883           FROM HZ_STAGED_CONTACT_POINTS stage
1884           WHERE contains( concat_col, p_contains_str)>0
1885           AND( (l_search_merged ='Y' )  
1886            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1887            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1888           AND stage.party_id = p_party_id 
1889           UNION
1890           SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ stage.CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID , TX2
1891           FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc
1892           WHERE contains( concat_col, p_contains_str)>0
1893           AND r.object_id = p_party_id 
1894           AND( (l_search_merged ='Y' )  
1895            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1896            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1897                     AND r.subject_id = stage.party_id 
1898                     AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
1899                     AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
1900                     AND r.relationship_id = oc.party_relationship_id
1901                     AND oc.org_contact_id = stage.org_contact_id; 
1902       END IF;
1903     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1904    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1905       hz_utility_v2pub.debug(p_message=>'Either Restrict sql is null or search_context_id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1906     END IF;
1907       IF p_search_ctx_id IS NULL THEN
1908    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1909       hz_utility_v2pub.debug(p_message=>'Either Search context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1910     END IF;
1911         OPEN x_cursor FOR 
1912           SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1913           FROM HZ_STAGED_CONTACT_POINTS stage
1914         WHERE contains( concat_col, p_contains_str)>0
1915         AND EXISTS (
1916           SELECT 1 FROM HZ_STAGED_PARTIES p
1917           WHERE p.PARTY_ID = stage.PARTY_ID
1918           AND( (l_search_merged ='Y' )  
1919           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
1920           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
1921           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
1922           AND( (l_search_merged ='Y' )  
1923            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1924            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1925           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1926       ELSE
1927    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1928       hz_utility_v2pub.debug(p_message=>'Search_context_id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1929     END IF;
1930         IF p_person_api = 'Y' THEN
1931           OPEN x_cursor FOR 
1932             SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1933             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
1934             WHERE contains( concat_col, p_contains_str)>0
1935             AND d.search_context_id = p_search_ctx_id
1936             AND d.party_id = stage.party_id
1937             AND( (l_search_merged ='Y' )  
1938              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1939              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1940             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
1941             UNION 
1942             SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, r.subject_id, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID , TX2
1943             FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage
1944             WHERE contains( concat_col, p_contains_str)>0
1945             AND d.search_context_id = p_search_ctx_id
1946             AND d.party_id = r.subject_id
1947             AND r.relationship_id = oc.party_relationship_id
1948             AND oc.org_contact_id = stage.org_contact_id
1949             AND( (l_search_merged ='Y' )  
1950              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1951              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1952             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
1953         ELSE
1954           OPEN x_cursor FOR 
1955             SELECT  CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1956             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
1957             WHERE contains( concat_col, p_contains_str)>0
1958             AND d.search_context_id = p_search_ctx_id
1959             AND d.party_id = stage.party_id
1960             AND( (l_search_merged ='Y' )  
1961              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1962              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1963             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1964         END IF;
1965       END IF;
1966     ELSE
1967    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1968       hz_utility_v2pub.debug(p_message=>'Restrict sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1969     END IF;
1970        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
1971        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CPT'); 
1972        IF (l_check_dt > 0 ) THEN 
1973    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1974       hz_utility_v2pub.debug(p_message=>'Restrict Sql has the selective_cpt hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1975     END IF;
1976            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */'; 
1977        ELSIF (l_check > 0 ) THEN 
1978    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1979       hz_utility_v2pub.debug(p_message=>'Restrict Sql has the selective hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1980     END IF;
1981            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */'; 
1982        END IF; 
1983        IF l_search_merged = 'Y' THEN 
1984                l_status_sql := ' ' ;  
1985        ELSIF l_search_merged = 'I' THEN  
1986                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
1987        ELSE 
1988                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
1989        END IF; 
1990        IF p_person_api = 'Y' THEN
1991  		/*Performance fix for Bug:4589953*/ 
1992        IF (l_check > 0 ) THEN 
1993        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
1994        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
1995        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
1996        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
1997        ELSE
1998 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
1999        END IF; 
2000        	l_sqlstr := ' SELECT   /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX2'||
2001                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2002                    ' WHERE contains( concat_col, :cont)>0  '||
2003                    ' AND (stage.org_contact_id is null '||
2004                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2005                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2006                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2007                    ' AND ('||p_restrict_sql||'))' ||
2008                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2009                    ' UNION ' ||
2010                    ' SELECT   /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX2'||
2011                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2012                    ' WHERE contains( concat_col, :cont)>0  '||
2013                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2014                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2015                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2016                  ' AND (stage.org_contact_id in ' || 
2017                  ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r ' ||
2018                  ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' || 
2019                  ' where stage1.relationship_id = oc.party_relationship_id ' || 
2020                  ' and ('||p_restrict_sql1 || ') ) )' ||
2021                  ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2022        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2023                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2024        ELSE 
2025        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX2'||
2026                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2027                    ' WHERE contains( concat_col, :cont)>0'||
2028                  ' AND EXISTS ('||
2029                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2030                  ' WHERE p.party_id = stage.party_id ' || 
2031                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2032                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2033                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2034                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2035                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2036                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2037        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2038                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2039                     ,p_dup_party_id, p_dup_party_id;
2040        END IF; 
2041        ELSE 
2042        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX2'||
2043                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2044                    ' WHERE contains( concat_col, :cont)>0'||
2045                  ' AND EXISTS ('||
2046                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2047                  ' WHERE p.party_id = stage.party_id ' || 
2048                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2049                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2050                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2051                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2052                    ' AND ('||p_restrict_sql||')' ||
2053                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2054        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2055                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2056                     ,p_dup_party_id, p_dup_party_id;
2057        END IF; 
2058     END IF;
2059   END IF; 
2060  	    output_long_strings('----------------------------------------------------------');
2061        output_long_strings('Contact Points Contains String = '||p_contains_str);
2062 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2063   exception
2064     when others then
2065       if (instrb(SQLERRM,'DRG-51030')>0) then 
2066         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2067         FND_MSG_PUB.ADD;
2068         RAISE FND_API.G_EXC_ERROR;
2069       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2070         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2071         FND_MSG_PUB.ADD;
2072         RAISE FND_API.G_EXC_ERROR;
2073       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2074         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2075         FND_MSG_PUB.ADD;
2076         RAISE FND_API.G_EXC_ERROR;
2077       else 
2078         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2079     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2080     	 FND_MSG_PUB.ADD;
2081         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2082       end if;
2083   END;
2084 
2085 
2086   PROCEDURE return_direct_matches(p_restrict_sql VARCHAR2, p_match_str VARCHAR2, p_thresh NUMBER, p_search_ctx_id NUMBER, p_search_merged VARCHAR2, p_dup_party_id NUMBER, x_num_matches OUT NUMBER) IS
2087     l_sqlstr VARCHAR2(4000);
2088     l_search_merged VARCHAR2(1);
2089   BEGIN
2090     IF (p_search_merged is null) then 
2091        l_search_merged := 'N';  
2092     ELSE 
2093        l_search_merged := p_search_merged; 
2094     END IF; 
2095     IF p_restrict_sql IS NULL THEN
2096       INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
2097       SELECT p_search_ctx_id, PARTY_ID, decode(TX8,g_party_stage_rec.TX8||' ',100,90)
2098       FROM hz_staged_parties 
2099       WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
2100       AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  TX36))
2101       AND( (l_search_merged ='Y' ) 
2102            OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))  
2103            OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))  
2104       AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)
2105       AND rownum <= p_thresh;
2106     ELSE
2107       l_sqlstr := 'INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) SELECT :ctx_id, PARTY_ID, decode(TX8,:TX8||'' '',100,90) FROM hz_staged_parties stage ';
2108       l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
2109       l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' =  TX36) ';
2110       IF l_search_merged = 'N' THEN
2111         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
2112       ELSIF l_search_merged = 'Y' THEN
2113         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
2114       END IF;
2115       l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
2116      l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
2117      l_sqlstr := l_sqlstr || ' AND ROWNUM <= :thresh ';
2118      EXECUTE IMMEDIATE l_sqlstr USING p_search_ctx_id, g_party_stage_rec.TX8,g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id,p_thresh;
2119     END IF;
2120     x_num_matches := SQL%ROWCOUNT;
2121   END;
2122 
2123   FUNCTION get_new_score_rec (
2124     	 p_init_total_score NUMBER,
2125     	 p_init_party_score NUMBER,
2126     	 p_init_party_site_score NUMBER,
2127     	 p_init_contact_score NUMBER,
2128     	 p_init_contact_point_score NUMBER, 
2129     	 p_party_id NUMBER, 
2130     	 p_party_site_id NUMBER, 
2131     	 p_org_contact_id NUMBER, 
2132     	 p_contact_point_id NUMBER) 
2133      RETURN HZ_PARTY_SEARCH.score_rec IS
2134     l_score_rec HZ_PARTY_SEARCH.score_rec;
2135   BEGIN
2136    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2137       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2138       hz_utility_v2pub.debug(p_message=>'calling the function get_new_score_rec to set the l_score_rec structure',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2139     END IF;
2140     l_score_rec.TOTAL_SCORE := p_init_total_score;
2141     l_score_rec.PARTY_SCORE := p_init_party_score;
2142     l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;
2143     l_score_rec.CONTACT_SCORE := p_init_contact_score;
2144     l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;
2145     l_score_rec.PARTY_ID := p_party_id;
2146     l_score_rec.PARTY_SITE_ID := p_party_site_id;
2147     l_score_rec.ORG_CONTACT_ID := p_org_contact_id;
2148     l_score_rec.CONTACT_POINT_ID := p_contact_point_id;
2149     RETURN l_score_rec;
2150   END;
2151 
2152    /**********************************************************
2153    This procedure finds the set of parties that match the search
2154    criteria and returns a scored set of parties
2155 
2156    The steps in executing the search are as follows
2157     1. Initialization and error checks
2158     2. Setup of intermedia query strings for Acquisition query
2159     3. Execution of Acquisition query
2160     4. Execution of Secondary queries to score results
2161     5. Setup of data temporary table to return search results
2162    **********************************************************/
2163 
2164 PROCEDURE find_parties (
2165       p_rule_id               IN      NUMBER,
2166       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
2167       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
2168       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
2169       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
2170       p_restrict_sql          IN      VARCHAR2,
2171       p_match_type            IN      VARCHAR2,
2172       p_search_merged         IN      VARCHAR2,
2173       p_dup_party_id          IN      NUMBER,
2174       p_dup_set_id            IN      NUMBER,
2175       p_dup_batch_id          IN      NUMBER,
2176       p_ins_details           IN      VARCHAR2,
2177       x_search_ctx_id         OUT     NUMBER,
2178       x_num_matches           OUT     NUMBER
2179 ) IS
2180 
2181   -- Strings to hold the generated Intermedia query strings
2182   l_party_contains_str VARCHAR2(32000); 
2183   l_party_site_contains_str VARCHAR2(32000);
2184   l_contact_contains_str VARCHAR2(32000);
2185   l_contact_pt_contains_str VARCHAR2(32000);
2186   l_denorm_str VARCHAR2(32000);
2187   l_ps_denorm_str VARCHAR2(32000);
2188   l_ct_denorm_str VARCHAR2(32000);
2189   l_cpt_denorm_str VARCHAR2(32000);
2190 
2191   -- Other local variables
2192   l_match_str VARCHAR2(30); -- Match type (AND or OR)
2193   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
2194   -- For Score calculation
2195   l_max_score NUMBER;
2196   l_match_idx NUMBER;
2197   l_entered_max_score NUMBER;
2198   FIRST BOOLEAN;
2199   l_search_ctx_id NUMBER; -- Generated Search Context ID
2200 
2201   l_TX2 VARCHAR2(2000);
2202   l_TX46 VARCHAR2(2000);
2203   l_TX4 VARCHAR2(2000);
2204   l_TX11 VARCHAR2(2000);
2205   l_TX45 VARCHAR2(2000);
2206   H_SCORES HZ_PARTY_SEARCH.score_list;
2207   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
2208   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
2209 
2210   l_score NUMBER;
2211   l_idx NUMBER;
2212   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
2213   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
2214   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
2215   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
2216   l_party_id NUMBER;
2217   l_ps_party_id NUMBER;
2218   l_ct_party_id NUMBER;
2219   l_cpt_party_id NUMBER;
2220   l_cpt_ps_id NUMBER;
2221   l_cpt_contact_id NUMBER;
2222   l_cpt_type VARCHAR2(100);
2223   l_party_site_id NUMBER;
2224   l_org_contact_id NUMBER;
2225   l_contact_pt_id NUMBER;
2226   l_ps_contact_id NUMBER;
2227   l_party_max_score NUMBER;
2228   l_ps_max_score NUMBER;
2229   l_contact_max_score NUMBER;
2230   l_cpt_max_score NUMBER;
2231   l_denorm_max_score NUMBER;
2232   l_non_denorm_max_score NUMBER;
2233 
2234   defpt NUMBER :=0;
2235   defps NUMBER :=0;
2236   defct NUMBER :=0;
2237   defcpt NUMBER :=0;
2238   l_index NUMBER;
2239   l_max_thresh NUMBER;
2240   l_tmp NUMBER;
2241   l_merge_flag VARCHAR2(1);
2242   l_num_eval NUMBER:=0;
2243 
2244   --Fix for bug 4417124 
2245   l_use_contact_addr_info BOOLEAN := TRUE;
2246   l_use_contact_cpt_info BOOLEAN  := TRUE;
2247   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
2248   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
2249 
2250   L_RETURN_IMM_EXC EXCEPTION;
2251 
2252   
2253   /********************* Find Parties private procedures *******/
2254   PROCEDURE push_eval IS
2255   BEGIN
2256    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2257       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2258       hz_utility_v2pub.debug(p_message=>'calling the procedure push_eval',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2259     END IF;
2260    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2261       hz_utility_v2pub.debug(p_message=>'Emptying the lists H_PARTY_ID, H_PARTY_ID_LIST and H_SCORES',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2262     END IF;
2263     H_PARTY_ID.DELETE;
2264     H_PARTY_ID_LIST.DELETE;
2265     H_SCORES.DELETE;        
2266     g_mappings.DELETE;
2267     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
2268     call_order(5) := call_order(1);
2269     call_type(5) := 'AND';
2270     call_max_score(5) := call_max_score(1);
2271     call_type(2) := 'OR';
2272   END;
2273 
2274   /**  Private procedure to acquire and score at party level  ***/
2275   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
2276     l_party_id_idx NUMBER:=1;
2277     l_ctx_id NUMBER;
2278     l_precalc_score BOOLEAN := FALSE;
2279     l_TX35_new varchar2(4000);
2280   BEGIN
2281    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2282       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2283       hz_utility_v2pub.debug(p_message=>'calling the procedure eval_party_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2284     END IF;
2285     SAVEPOINT eval_start;
2286     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2287       l_ctx_id := l_search_ctx_id;
2288    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2289       hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2290     END IF;
2291       FORALL I in 1..H_PARTY_ID.COUNT 
2292          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2293              l_search_ctx_id,H_PARTY_ID(I));
2294       H_PARTY_ID.DELETE;
2295       H_PARTY_ID_LIST.DELETE;
2296     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2297    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2298       hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2299     END IF;
2300       l_ctx_id := l_search_ctx_id;
2301       FORALL I in 1..H_PARTY_ID.COUNT 
2302          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2303              l_search_ctx_id,H_PARTY_ID(I));
2304       l_party_id_idx := H_PARTY_ID.COUNT+1;
2305     ELSE
2306       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2307          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
2308    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2309       hz_utility_v2pub.debug(p_message=>'In eval party level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2310     END IF;
2311         IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' AND p_dup_batch_id IS NULL THEN
2312    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2313       hz_utility_v2pub.debug(p_message=>'In eval party level resolution options is set to SQL search.',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2314     END IF;
2315           IF (l_party_site_contains_str IS NULL AND
2316              l_contact_contains_str IS NULL AND
2317              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN
2318             return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,p_search_merged,p_dup_party_id, x_num_matches);
2319             RAISE L_RETURN_IMM_EXC;
2320           ELSE
2321             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);
2322           END IF;
2323         ELSE
2324           IF p_index>1 THEN
2325    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2326       hz_utility_v2pub.debug(p_message=>'In eval party level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2327     END IF;
2328             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2329             FND_MSG_PUB.ADD;
2330             RAISE FND_API.G_EXC_ERROR;
2331           ELSE
2332             push_eval;
2333             RETURN;
2334           END IF;
2335         END IF;
2336       END IF;
2337       l_ctx_id := NULL;
2338       l_party_id_idx := H_PARTY_ID.COUNT+1;
2339     END IF;
2340    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2341       hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2342     END IF;
2343     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
2344       open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);
2345     END IF;
2346     LOOP 
2347       FETCH l_party_cur INTO
2348          l_party_id , l_TX4, l_TX45, l_TX46;
2349       EXIT WHEN l_party_cur%NOTFOUND;
2350       l_index := map_id(l_party_id);
2351       l_score := GET_PARTY_SCORE(l_TX4,l_TX45,l_TX46);
2352       IF NOT H_SCORES.EXISTS(l_index) THEN
2353         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
2354       ELSE
2355         H_SCORES(l_index).TOTAL_SCORE := 
2356                 H_SCORES(l_index).TOTAL_SCORE+l_score;
2357         H_SCORES(l_index).PARTY_SCORE := l_score;
2358       END IF;
2359       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2360         H_PARTY_ID_LIST(l_index) := 1;
2361         H_PARTY_ID(l_party_id_idx) := l_party_id;
2362         l_party_id_idx:= l_party_id_idx+1;
2363       END IF;
2364       IF (l_party_id_idx-1)>l_max_thresh THEN
2365         IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
2366           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
2367           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
2368           AND l_contact_pt_contains_str IS NULL THEN
2369             EXIT;
2370         END IF;
2371 	      CLOSE l_party_cur;
2372         IF p_index>1 THEN
2373    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2374       hz_utility_v2pub.debug(p_message=>'In eval party level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2375     END IF;
2376           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2377           FND_MSG_PUB.ADD;
2378           RAISE FND_API.G_EXC_ERROR;
2379         ELSE
2380           push_eval;
2381           RETURN;
2382         END IF;
2383       END IF;
2384     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2385       hz_utility_v2pub.debug(p_message=>'In eval_party_level l_party_id =  '||l_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2386       hz_utility_v2pub.debug(p_message=>'In eval_party_level l_score =  '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2387     END IF;
2388     END LOOP;
2389    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2390       hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2391     END IF;
2392     CLOSE l_party_cur;
2393     ROLLBACK to eval_start;
2394   END;
2395 
2396   /**  Private procedure to acquire and score at party site level  ***/
2397   PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
2398     l_party_id_idx NUMBER:=1;
2399     l_ctx_id NUMBER;
2400     h_ps_id HZ_PARTY_SEARCH.IDList;
2401     h_ps_party_id HZ_PARTY_SEARCH.IDList;
2402     h_ps_score HZ_PARTY_SEARCH.IDList;
2403     detcnt NUMBER := 1;
2404   BEGIN
2405    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2406       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2407       hz_utility_v2pub.debug(p_message=>'calling the procedure eval_party_site_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2408     END IF;
2409   IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,'D_PS')>0
2410       AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and
2411       l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> 'Y' THEN
2412     l_party_id := H_SCORES.FIRST;
2413     WHILE l_party_id IS NOT NULL LOOP
2414       H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;
2415       l_party_id:=H_SCORES.NEXT(l_party_id);
2416     END LOOP;
2417     RETURN;
2418   END IF;
2419     SAVEPOINT eval_start;
2420     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2421    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2422       hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2423     END IF;
2424       l_ctx_id := l_search_ctx_id;
2425       FORALL I in 1..H_PARTY_ID.COUNT 
2426          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2427              l_search_ctx_id,H_PARTY_ID(I));
2428       H_PARTY_ID.DELETE;
2429       H_PARTY_ID_LIST.DELETE;
2430     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2431    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2432       hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2433     END IF;
2434       l_ctx_id := l_search_ctx_id;
2435       FORALL I in 1..H_PARTY_ID.COUNT 
2436          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2437              l_search_ctx_id,H_PARTY_ID(I));
2438       l_party_id_idx := H_PARTY_ID.COUNT+1;
2439     ELSE
2440       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2441          and check_estimate_hits('PARTY_SITES',p_party_site_contains_str)>l_max_thresh THEN
2442    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2443       hz_utility_v2pub.debug(p_message=>'In eval party site level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2444     END IF;
2445         IF p_index>1 THEN
2446    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2447       hz_utility_v2pub.debug(p_message=>'In eval party site level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2448     END IF;
2449           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2450           FND_MSG_PUB.ADD;
2451           RAISE FND_API.G_EXC_ERROR;
2452         ELSE
2453           push_eval;
2454           RETURN;
2455         END IF;
2456       END IF;
2457       l_party_id_idx := H_PARTY_ID.COUNT+1;
2458       l_ctx_id := NULL;
2459     END IF;
2460    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2461       hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_SITE_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2462     END IF;
2463     open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id,  p_search_merged, 'N','N',l_party_site_cur);
2464     LOOP 
2465       FETCH l_party_site_cur INTO
2466          l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX4, l_TX11;
2467       EXIT WHEN l_party_site_cur%NOTFOUND;
2468       --Fix for bug 4417124 
2469       IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN
2470         l_index := map_id(l_ps_party_id);
2471         l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX11);
2472         IF NOT H_SCORES.EXISTS(l_index) THEN
2473           H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);
2474         ELSE
2475           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
2476             H_SCORES(l_index).TOTAL_SCORE := 
2477                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
2478             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
2479           END IF;
2480         END IF;
2481         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2482           H_PARTY_ID_LIST(l_index) := 1;
2483           H_PARTY_ID(l_party_id_idx) := l_ps_party_id;
2484           l_party_id_idx:= l_party_id_idx+1;
2485         END IF;
2486         IF p_ins_details = 'Y' THEN
2487           h_ps_id(detcnt) := l_party_site_id;
2488           h_ps_party_id(detcnt) := l_ps_party_id;
2489           IF (p_emax_score > 0) THEN 
2490               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
2491           ELSE 
2492               h_ps_score(detcnt) := 0; 
2493           END IF; 
2494           detcnt := detcnt +1;
2495         END IF;
2496     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2497       hz_utility_v2pub.debug(p_message=>'In eval_party_site_level l_party_site_id =  '||l_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2498       hz_utility_v2pub.debug(p_message=>'In eval_paty_site_level l_ps_party_id =  '||l_ps_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2499       hz_utility_v2pub.debug(p_message=>'In eval_party_site_level l_score =  '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2500     END IF;
2501       END IF;
2502     END LOOP;
2503    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2504       hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2505     END IF;
2506     CLOSE l_party_site_cur;
2507     ROLLBACK to eval_start;
2508     IF p_ins_details = 'Y' THEN
2509    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2510       hz_utility_v2pub.debug(p_message=>'In eval_party_site_level inserting into HZ_MATCHED_PARTY_SITES_GT from the H_PS_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2511     END IF;
2512       FORALL I in 1..h_ps_id.COUNT 
2513         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
2514           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
2515     END IF;
2516   END;
2517 
2518   /**  Private procedure to acquire and score at contact point level  ***/
2519   PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
2520     l_party_id_idx NUMBER:=1;
2521     l_ctx_id NUMBER;
2522     h_ct_id HZ_PARTY_SEARCH.IDList;
2523     h_ct_party_id HZ_PARTY_SEARCH.IDList;
2524     h_ct_score HZ_PARTY_SEARCH.IDList;
2525     detcnt NUMBER := 1;
2526   BEGIN
2527    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2528       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2529       hz_utility_v2pub.debug(p_message=>'calling the procedure eval_contact_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2530     END IF;
2531     SAVEPOINT eval_start;
2532     IF l_match_str = ' AND ' AND p_call_type='AND' THEN
2533    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2534       hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2535     END IF;
2536       l_ctx_id := l_search_ctx_id;
2537       FORALL I in 1..H_PARTY_ID.COUNT 
2538          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2539              l_search_ctx_id,H_PARTY_ID(I));
2540       H_PARTY_ID.DELETE;
2541       H_PARTY_ID_LIST.DELETE;
2542     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2543    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2544       hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2545     END IF;
2546       l_ctx_id := l_search_ctx_id;
2547       FORALL I in 1..H_PARTY_ID.COUNT 
2548          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2549              l_search_ctx_id,H_PARTY_ID(I));
2550       l_party_id_idx := H_PARTY_ID.COUNT+1;
2551     ELSE
2552       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2553          and check_estimate_hits('CONTACTS',p_contact_contains_str)>l_max_thresh THEN
2554    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2555       hz_utility_v2pub.debug(p_message=>'In eval contact level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2556     END IF;
2557         IF p_index>1 THEN
2558    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2559       hz_utility_v2pub.debug(p_message=>'In eval contact level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2560     END IF;
2561           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2562           FND_MSG_PUB.ADD;
2563           RAISE FND_API.G_EXC_ERROR;
2564         ELSE
2565           push_eval;
2566           RETURN;
2567         END IF;
2568       END IF;
2569       l_ctx_id := NULL;
2570       l_party_id_idx := H_PARTY_ID.COUNT+1;
2571     END IF;
2572    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2573       hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2574     END IF;
2575     open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id,  p_search_merged, l_contact_cur);
2576     LOOP 
2577       FETCH l_contact_cur INTO
2578          l_org_contact_id, l_ct_party_id ;
2579       EXIT WHEN l_contact_cur%NOTFOUND;
2580       l_index := map_id(l_ct_party_id);
2581       l_score := GET_CONTACTS_SCORE(l_match_idx);
2582       IF NOT H_SCORES.EXISTS(l_index) THEN
2583         H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id,null);
2584       ELSE
2585         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
2586           H_SCORES(l_index).TOTAL_SCORE := 
2587                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
2588           H_SCORES(l_index).CONTACT_SCORE := l_score;
2589         END IF;
2590       END IF;
2591       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2592         H_PARTY_ID_LIST(l_index) := 1;
2593         H_PARTY_ID(l_party_id_idx) := l_ct_party_id;
2594         l_party_id_idx:= l_party_id_idx+1;
2595       END IF;
2596       IF p_ins_details = 'Y' THEN
2597         h_ct_id(detcnt) := l_org_contact_id;
2598         h_ct_party_id(detcnt) := l_ct_party_id;
2599         IF (p_emax_score > 0) THEN 
2600             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
2601         ELSE 
2602             h_ct_score(detcnt) := 0; 
2603         END IF; 
2604         detcnt := detcnt +1;
2605       END IF;
2606     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2607       hz_utility_v2pub.debug(p_message=>'In eval_contact_level l_org_contact_id =  '||l_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2608       hz_utility_v2pub.debug(p_message=>'In eval_contact_level l_ct_party_id =  '||l_ct_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2609       hz_utility_v2pub.debug(p_message=>'In eval_contact_level l_score =  '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2610     END IF;
2611     END LOOP;
2612    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2613       hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2614     END IF;
2615     CLOSE l_contact_cur;
2616     ROLLBACK to eval_start;
2617     IF p_ins_details = 'Y' THEN
2618    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2619       hz_utility_v2pub.debug(p_message=>'In eval_contact_level inserting into HZ_MATCHED_CONTACTS_GT from the H_CT_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2620     END IF;
2621       FORALL I in 1..h_ct_id.COUNT 
2622         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
2623           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
2624     END IF;
2625   END;
2626 
2627   /**  Private procedure to acquire and score at contact point level  ***/
2628   PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS
2629     l_party_id_idx NUMBER:=1;
2630     l_ctx_id NUMBER;
2631     h_cpt_id HZ_PARTY_SEARCH.IDList;
2632     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
2633     h_cpt_score HZ_PARTY_SEARCH.IDList;
2634     detcnt NUMBER := 1;
2635     l_cpt_flag VARCHAR2(1) := 'N';
2636     is_a_match VARCHAR2(1) := 'Y';
2637   BEGIN
2638    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2639       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2640       hz_utility_v2pub.debug(p_message=>'calling the procedure eval_cpt_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2641     END IF;
2642     SAVEPOINT eval_start;
2643     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2644    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2645       hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2646     END IF;
2647       l_ctx_id := l_search_ctx_id;
2648       FORALL I in 1..H_PARTY_ID.COUNT 
2649          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2650              l_search_ctx_id,H_PARTY_ID(I));
2651       H_PARTY_ID.DELETE;
2652       H_PARTY_ID_LIST.DELETE;
2653     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2654    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2655       hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2656     END IF;
2657       l_ctx_id := l_search_ctx_id;
2658       FORALL I in 1..H_PARTY_ID.COUNT 
2659          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2660              l_search_ctx_id,H_PARTY_ID(I));
2661       l_party_id_idx := H_PARTY_ID.COUNT+1;
2662     ELSE
2663       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2664          and check_estimate_hits('CONTACT_POINTS',p_contact_pt_contains_str)>l_max_thresh THEN
2665    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2666       hz_utility_v2pub.debug(p_message=>'In eval contact point level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2667     END IF;
2668         IF p_index>1 THEN
2669    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2670       hz_utility_v2pub.debug(p_message=>'In eval contact point level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2671     END IF;
2672           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2673           FND_MSG_PUB.ADD;
2674           RAISE FND_API.G_EXC_ERROR;
2675         ELSE
2676           push_eval;
2677           RETURN;
2678         END IF;
2679       END IF;
2680       l_ctx_id := NULL;
2681       l_party_id_idx := H_PARTY_ID.COUNT+1;
2682     END IF;
2683    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2684       hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2685     END IF;
2686     open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id,  p_search_merged, 'N', 'N',l_contact_pt_cur);
2687     LOOP 
2688       FETCH l_contact_pt_cur INTO
2689          l_contact_pt_id,  l_cpt_type, l_cpt_party_id,  l_cpt_ps_id, l_cpt_contact_id , l_TX2;
2690       EXIT WHEN l_contact_pt_cur%NOTFOUND;
2691    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2692       hz_utility_v2pub.debug(p_message=>'----------------------------------------------------------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2693     END IF;
2694    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2695       hz_utility_v2pub.debug(p_message=>'Processing party_id -  '||l_cpt_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2696     END IF;
2697    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2698       hz_utility_v2pub.debug(p_message=>'Contact Point Type -  '||l_cpt_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2699     END IF;
2700       --Fix for bug 4417124 
2701       IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN
2702         l_index := map_id(l_cpt_party_id);
2703         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
2704         IF NOT H_SCORES.EXISTS(l_index) THEN
2705           H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);
2706           H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
2707    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2708       hz_utility_v2pub.debug(p_message=>'Processing second Time for this party',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2709     END IF;
2710    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2711       hz_utility_v2pub.debug(p_message=>'l_index is -  '||l_index,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2712     END IF;
2713         ELSE
2714           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
2715             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
2716               H_SCORES(l_index).TOTAL_SCORE :=
2717               H_SCORES(l_index).TOTAL_SCORE-(H_SCORES(l_index).CONTACT_POINT_SCORE-H_SCORES(l_index).cpt_type_match(l_cpt_type))+l_score;
2718               H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE-H_SCORES(l_index).cpt_type_match(l_cpt_type) + l_score;
2719               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
2720    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2721       hz_utility_v2pub.debug(p_message=>'Passed in score greater than existing score',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2722     END IF;
2723    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2724       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).TOTAL_SCORE is -  '||H_SCORES(l_index).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2725     END IF;
2726    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2727       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).CONTACT_POINT_SCORE is -  '||H_SCORES(l_index).CONTACT_POINT_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2728     END IF;
2729    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2730       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).cpt_type_match(l_cpt_type) is -  '||H_SCORES(l_index).cpt_type_match(l_cpt_type),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2731     END IF;
2732             END IF;
2733           ELSE
2734    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2735       hz_utility_v2pub.debug(p_message=>'Passed in score less than or equal to the existing score ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2736     END IF;
2737             H_SCORES(l_index).TOTAL_SCORE :=
2738             		H_SCORES(l_index).TOTAL_SCORE+l_score;
2739             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
2740             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
2741    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2742       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).TOTAL_SCORE is -  '||H_SCORES(l_index).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2743     END IF;
2744    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2745       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).CONTACT_POINT_SCORE is -  '||H_SCORES(l_index).CONTACT_POINT_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2746     END IF;
2747    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2748       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).cpt_type_match(l_cpt_type) is -  '||H_SCORES(l_index).cpt_type_match(l_cpt_type),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2749     END IF;
2750           END IF;
2751         END IF;
2752    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2753       hz_utility_v2pub.debug(p_message=>'call type is -  '||p_call_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2754     END IF;
2755    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2756       hz_utility_v2pub.debug(p_message=>'match string is -  '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2757     END IF;
2758         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2759           -- If rule is match all 
2760           IF l_match_str = ' AND ' THEN
2761    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2762       hz_utility_v2pub.debug(p_message=>'Match string is AND ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2763     END IF;
2764             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
2765               is_a_match := 'Y';
2766    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2767       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2768     END IF;
2769             ELSE
2770               is_a_match := 'N';
2771    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2772       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2773     END IF;
2774             END IF;
2775           -- Else it is construed to be a match anyway
2776           ELSE
2777             is_a_match := 'Y';
2778    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2779       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2780     END IF;
2781           END IF;
2782         IF (is_a_match='Y') then
2783           H_PARTY_ID_LIST(l_index) := 1;
2784           H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;
2785           l_party_id_idx:= l_party_id_idx+1;
2786       end if;
2787         END IF;
2788         IF p_ins_details = 'Y' THEN
2789           IF l_match_str = ' AND ' THEN
2790    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2791       hz_utility_v2pub.debug(p_message=>'Match string is AND ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2792     END IF;
2793             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
2794               is_a_match := 'Y';
2795    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2796       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2797     END IF;
2798             ELSE
2799               is_a_match := 'N';
2800    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2801       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2802     END IF;
2803             END IF;
2804           ELSE
2805             is_a_match := 'Y';
2806    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2807       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2808     END IF;
2809           END IF;
2810           IF (is_a_match='Y') THEN
2811           FOR I IN 1..h_cpt_id.COUNT LOOP
2812           IF h_cpt_id(I)=l_contact_pt_id THEN
2813           	 l_cpt_flag := 'Y';
2814           END IF;
2815           END LOOP;
2816           IF l_cpt_flag = 'Y' THEN
2817           	 NULL;
2818           ELSE
2819          	 h_cpt_id(detcnt) := l_contact_pt_id;
2820           	 h_cpt_party_id(detcnt) := l_cpt_party_id;
2821           	 IF (p_emax_score > 0) THEN 
2822               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
2823             ELSE 
2824               h_cpt_score(detcnt) := 0; 
2825           	 END IF; 
2826             detcnt := detcnt +1;
2827           END IF;
2828       end if;
2829         END IF;
2830     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2831       hz_utility_v2pub.debug(p_message=>'In eval_cpt_level l_contact_pt_id =  '||l_contact_pt_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2832       hz_utility_v2pub.debug(p_message=>'In eval_cpt_level l_cpt_party_id =  '||l_cpt_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2833       hz_utility_v2pub.debug(p_message=>'In eval_cpt_level l_score =  '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2834     END IF;
2835       END IF;
2836     END LOOP;
2837    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2838       hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2839     END IF;
2840     CLOSE l_contact_pt_cur;
2841     ROLLBACK to eval_start;
2842     IF p_ins_details = 'Y' THEN
2843    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2844       hz_utility_v2pub.debug(p_message=>'In eval_contact_point_level inserting into HZ_MATCHED_CPTS_GT from the H_CPT_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2845     END IF;
2846       FORALL I in 1..h_cpt_id.COUNT 
2847         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
2848           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
2849     END IF;
2850   END eval_cpt_level;
2851 
2852   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
2853   PROCEDURE do_eval (p_index NUMBER) IS
2854     l_ctx_id NUMBER;
2855     l_threshold NUMBER;
2856     other_acq_criteria_exists BOOLEAN; 
2857     acq_cnt NUMBER; 
2858   BEGIN
2859    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2860       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2861       hz_utility_v2pub.debug(p_message=>'calling the procedure do_eval',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2862     END IF;
2863     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
2864      l_threshold := 474;  
2865     other_acq_criteria_exists := TRUE ;
2866     --check if acquisition criteria exists for any other entity
2867     IF l_party_contains_str IS NOT NULL THEN 
2868     	acq_cnt := 1; 
2869     END IF; 
2870     IF l_party_site_contains_str IS NOT NULL THEN 
2871     	acq_cnt := acq_cnt+1; 
2872     END IF; 
2873     IF l_contact_contains_str IS NOT NULL THEN 
2874     	acq_cnt := acq_cnt+1; 
2875     END IF;
2876     IF l_contact_pt_contains_str IS NOT NULL THEN 
2877     	acq_cnt := acq_cnt+1; 
2878     END IF;  
2879     IF acq_cnt>1 THEN 
2880     	other_acq_criteria_exists := TRUE; 
2881     ELSE
2882     	other_acq_criteria_exists := FALSE; 
2883     END IF;  
2884       hz_utility_v2pub.debug(p_message=>'count of entities having acquisition attributes =  '||acq_cnt,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2885       hz_utility_v2pub.debug(p_message=>'call_max_score(p_index) =  '||call_max_score(p_index),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2886       hz_utility_v2pub.debug(p_message=>'l_threshold =  '||l_threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2887     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
2888     	IF ( call_max_score(p_index) < l_threshold) THEN 
2889    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2890       hz_utility_v2pub.debug(p_message=>'When max score of entity level<l_threshold, do not evaluate ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2891     END IF;
2892 	     	RETURN;	
2893     	ELSE 
2894    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2895       hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2896     END IF;
2897 	     	FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED'); 
2898 	     	FND_MSG_PUB.ADD; 
2899 	     	RAISE FND_API.G_EXC_ERROR; 
2900     	END IF; 
2901     ELSE
2902    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2903       hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2904     END IF;
2905       FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2906       FND_MSG_PUB.ADD;
2907       RAISE FND_API.G_EXC_ERROR;
2908      END IF; 
2909     END IF;
2910     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
2911       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
2912     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
2913       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2914     ELSIF call_order(p_index) = 'CONTACT' AND l_contact_contains_str IS NOT NULL THEN
2915       eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2916     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
2917       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2918     END IF;
2919   END;
2920   /************ End of find_parties private procedures **********/ 
2921 
2922   BEGIN
2923 
2924    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2925       hz_utility_v2pub.debug(p_message=>'--------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2926     END IF;
2927    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2928       hz_utility_v2pub.debug(p_message=>'Entering Procedure find_parties',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2929     END IF;
2930     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2931       hz_utility_v2pub.debug(p_message=>'Input Parameters are :',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2932       hz_utility_v2pub.debug(p_message=>'p_match_type =  '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2933       hz_utility_v2pub.debug(p_message=>'p_restrict_sql =  '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2934       hz_utility_v2pub.debug(p_message=>'p_dup_set_id =  '||p_dup_set_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2935       hz_utility_v2pub.debug(p_message=>'p_search_merged =  '||p_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2936       hz_utility_v2pub.debug(p_message=>'p_dup_party_id =  '||p_dup_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2937     END IF;
2938     -- ************************************
2939     -- STEP 1. Initialization and error checks
2940 
2941     l_match_str := ' AND ';
2942     IF p_match_type = 'AND' THEN
2943       l_match_str := ' AND ';
2944     ELSIF p_match_type = 'OR' THEN
2945       l_match_str := ' OR ';
2946     END IF;
2947     l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
2948     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
2949 
2950 
2951     --Fix for bug 4417124 
2952 
2953     SELECT use_contact_addr_flag, use_contact_cpt_flag 
2954     INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
2955     FROM hz_match_rules_b 
2956     WHERE match_rule_id = 238; 
2957 
2958     IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
2959       l_use_contact_addr_info := FALSE; 
2960     END IF; 
2961 
2962     IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
2963       l_use_contact_cpt_info := FALSE; 
2964     END IF; 
2965 
2966    --End fix for bug 4417124
2967 
2968     IF p_dup_batch_id IS NOT NULL THEN
2969       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH_BATCH'),10000);
2970     ELSE
2971       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
2972     END IF;
2973     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
2974       g_score_until_thresh := true;
2975    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2976       hz_utility_v2pub.debug(p_message=>'g_score_until_thresh is true',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2977     END IF;
2978     ELSE
2979       g_score_until_thresh := false;
2980    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2981       hz_utility_v2pub.debug(p_message=>'g_score_until_thresh is false',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2982     END IF;
2983     END IF;
2984    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2985       hz_utility_v2pub.debug(p_message=>'Maximum records that will be evaluated is  '||l_max_thresh,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2986     END IF;
2987     -- ************************************************************
2988     -- STEP 2. Setup of intermedia query strings for Acquisition query
2989     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
2990     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
2991     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
2992    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2993       hz_utility_v2pub.debug(p_message=>'Commencing the DENORM LOGIC in find_parties',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2994     END IF;
2995     l_denorm_max_score:=0;
2996     l_non_denorm_max_score:=0;
2997     IF l_ps_denorm_str IS NOT NULL THEN
2998       l_denorm_max_score := l_denorm_max_score+l_ps_max_score;
2999       l_denorm_str := l_ps_denorm_str;
3000     ELSE
3001       l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;
3002     END IF;
3003     IF l_ct_denorm_str IS NOT NULL THEN
3004       l_denorm_max_score := l_denorm_max_score+l_contact_max_score;
3005       IF l_denorm_str IS NOT NULL THEN
3006         l_denorm_str := l_denorm_str || ' OR ' ||l_ct_denorm_str;
3007       ELSE
3008         l_denorm_str := l_ct_denorm_str;
3009       END IF;
3010     ELSE
3011       l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;
3012     END IF;
3013     IF l_cpt_denorm_str IS NOT NULL THEN
3014       l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;
3015       IF l_denorm_str IS NOT NULL THEN
3016         l_denorm_str := l_denorm_str || ' OR ' ||l_cpt_denorm_str;
3017       ELSE
3018         l_denorm_str := l_cpt_denorm_str;
3019       END IF;
3020     ELSE
3021       l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;
3022     END IF;
3023     l_party_contains_str := INIT_PARTY_QUERY(l_match_str, l_denorm_str, l_party_max_score, l_denorm_max_score, l_non_denorm_max_score, round((474/790)*l_entered_max_score));
3024     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3025 
3026     -- Setup Search Context ID
3027     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3028     x_search_ctx_id := l_search_ctx_id;
3029 
3030    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3031       hz_utility_v2pub.debug(p_message=>'Search context id in find_parties is  '||x_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3032     END IF;
3033     IF l_party_contains_str IS NULL THEN
3034       defpt := 1;
3035     END IF;
3036     IF l_party_site_contains_str IS NULL THEN
3037       defps := 1;
3038     END IF;
3039     IF l_contact_contains_str IS NULL THEN
3040       defct := 1;
3041     END IF;
3042     IF l_contact_pt_contains_str IS NULL THEN
3043       defcpt := 1;
3044     END IF;
3045 
3046     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3047    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3048       hz_utility_v2pub.debug(p_message=>'------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3049     END IF;
3050       hz_utility_v2pub.debug(p_message=>'In find_parties l_match_str =   '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3051       hz_utility_v2pub.debug(p_message=>'In find_parties l_party_contains_str =  '||l_party_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3052       hz_utility_v2pub.debug(p_message=>'In find_parties l_party_site_contains_str =  '||l_party_site_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3053       hz_utility_v2pub.debug(p_message=>'In find_parties l_contact_contains_str =  '||l_contact_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3054       hz_utility_v2pub.debug(p_message=>'In find_parties l_contact_pt_contains_str =  '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3055       hz_utility_v2pub.debug(p_message=>'In find_parties l_search_ctx_id =  '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3056     END IF;
3057     FOR I in 1..5 LOOP
3058       do_eval(I);
3059     END LOOP;
3060     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3061       hz_utility_v2pub.debug(p_message=>'In find_parties. This is a Search Rule. Evaluating Matches. Threshold : 60 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3062     END IF;
3063     x_num_matches := 0;
3064     l_num_eval := 0;
3065     IF l_match_str = ' OR ' THEN
3066       l_party_id := H_SCORES.FIRST;
3067     ELSE
3068       l_party_id := H_PARTY_ID_LIST.FIRST;
3069     END IF;
3070     WHILE l_party_id IS NOT NULL LOOP
3071       l_num_eval:= l_num_eval+1;
3072     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3073    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3074       hz_utility_v2pub.debug(p_message=>'----------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3075     END IF;
3076       hz_utility_v2pub.debug(p_message=>'In find_parties Match Party ID =  '||H_SCORES(l_party_id).PARTY_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3077       hz_utility_v2pub.debug(p_message=>'In find_parties Score =  '||H_SCORES(l_party_id).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3078     END IF;
3079    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3080       hz_utility_v2pub.debug(p_message=>'In find_parties inserting Webservice  Rule results into HZ_MATCHED_PARTIES_GT',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3081     END IF;
3082       IF H_SCORES(l_party_id).TOTAL_SCORE>=474 THEN
3083             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
3084             VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/790)*100));
3085             x_num_matches := x_num_matches+1;
3086    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3087       hz_utility_v2pub.debug(p_message=>'----------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3088     END IF;
3089       END IF;
3090       IF l_match_str = ' OR ' THEN
3091         l_party_id:=H_SCORES.NEXT(l_party_id);
3092       ELSE
3093         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3094       END IF;
3095     END LOOP;
3096     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3097    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3098       hz_utility_v2pub.debug(p_message=>'Exiting Procedure find_parties',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3099     END IF;
3100    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3101       hz_utility_v2pub.debug(p_message=>'--------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3102     END IF;
3103 EXCEPTION
3104   WHEN L_RETURN_IMM_EXC THEN
3105     RETURN;
3106   WHEN FND_API.G_EXC_ERROR THEN
3107     RAISE FND_API.G_EXC_ERROR;
3108   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3109     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3110   WHEN OTHERS THEN
3111     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3112     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_parties');
3113     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3114     FND_MSG_PUB.ADD;
3115     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3116 END find_parties;
3117 
3118 PROCEDURE find_persons (
3119       p_rule_id               IN      NUMBER,
3120       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
3121       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
3122       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
3123       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
3124       p_restrict_sql          IN      VARCHAR2,
3125       p_match_type            IN      VARCHAR2,
3126       p_search_merged         IN      VARCHAR2,
3127       p_dup_party_id          IN      NUMBER,
3128       p_dup_set_id            IN      NUMBER,
3129       p_dup_batch_id          IN      NUMBER,
3130       p_ins_details           IN      VARCHAR2,
3131       x_search_ctx_id         OUT     NUMBER,
3132       x_num_matches           OUT     NUMBER
3133 ) IS
3134 
3135   -- Strings to hold the generated Intermedia query strings
3136   l_party_contains_str VARCHAR2(32000); 
3137   l_party_site_contains_str VARCHAR2(32000);
3138   l_contact_contains_str VARCHAR2(32000);
3139   l_contact_pt_contains_str VARCHAR2(32000);
3140   l_denorm_str VARCHAR2(32000);
3141   l_ps_denorm_str VARCHAR2(32000);
3142   l_ct_denorm_str VARCHAR2(32000);
3143   l_cpt_denorm_str VARCHAR2(32000);
3144 
3145   -- Other local variables
3146   l_match_str VARCHAR2(30); -- Match type (AND or OR)
3147   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
3148   -- For Score calculation
3149   l_max_score NUMBER;
3150   l_match_idx NUMBER;
3151   l_entered_max_score NUMBER;
3152   FIRST BOOLEAN;
3153   l_search_ctx_id NUMBER; -- Generated Search Context ID
3154 
3155   l_TX2 VARCHAR2(2000);
3156   l_TX46 VARCHAR2(2000);
3157   l_TX4 VARCHAR2(2000);
3158   l_TX11 VARCHAR2(2000);
3159   l_TX45 VARCHAR2(2000);
3160   H_SCORES HZ_PARTY_SEARCH.score_list;
3161   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
3162   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
3163 
3164   l_score NUMBER;
3165   l_idx NUMBER;
3166   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
3167   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
3168   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
3169   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
3170   l_party_id NUMBER;
3171   l_ps_party_id NUMBER;
3172   l_ct_party_id NUMBER;
3173   l_cpt_party_id NUMBER;
3174   l_cpt_ps_id NUMBER;
3175   l_cpt_contact_id NUMBER;
3176   l_cpt_type VARCHAR2(100);
3177   l_party_site_id NUMBER;
3178   l_org_contact_id NUMBER;
3179   l_contact_pt_id NUMBER;
3180   l_cpt_level VARCHAR2(100);
3181   l_ps_contact_id NUMBER;
3182   l_party_max_score NUMBER;
3183   l_ps_max_score NUMBER;
3184   l_contact_max_score NUMBER;
3185   l_cpt_max_score NUMBER;
3186   l_denorm_max_score NUMBER;
3187   l_non_denorm_max_score NUMBER;
3188 
3189   defpt NUMBER :=0;
3190   defps NUMBER :=0;
3191   defct NUMBER :=0;
3192   defcpt NUMBER :=0;
3193   l_index NUMBER;
3194   l_max_thresh NUMBER;
3195   l_tmp NUMBER;
3196   l_merge_flag VARCHAR2(1);
3197   l_num_eval NUMBER:=0;
3198 
3199   L_RETURN_IMM_EXC Exception;
3200 
3201   
3202   /********************* Find Parties private procedures *******/
3203   PROCEDURE set_person_party_type IS
3204   BEGIN
3205     g_party_stage_rec.TX36:= 
3206         HZ_TRANS_PKG.EXACT(
3207              'PERSON'
3208              ,null,'PARTY_TYPE'
3209              ,'PARTY');
3210   END;
3211     
3212   PROCEDURE unset_person_party_type IS
3213   BEGIN
3214     g_party_stage_rec.TX36 := '';
3215   END;
3216   
3217   FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) 
3218   RETURN NUMBER IS
3219     l_party_type VARCHAR2(255);
3220     l_person_id NUMBER(15);
3221   BEGIN
3222     SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;
3223     IF l_party_type = 'PERSON' THEN
3224       RETURN p_party_id;
3225     ELSIF p_contact_id IS NULL THEN
3226       RETURN NULL;
3227     ELSE
3228       BEGIN 
3229         SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p
3230         WHERE oc.org_contact_id = p_contact_id
3231         AND r.relationship_id = oc.party_relationship_id 
3232         AND r.object_id = p_party_id
3233         AND p.party_id = r.subject_id 
3234         AND p.party_type = 'PERSON'
3235         AND ROWNUM=1;
3236         
3237         RETURN l_person_id;
3238       EXCEPTION
3239         WHEN NO_DATA_FOUND THEN
3240           RETURN NULL;
3241       END;      
3242     END IF;
3243   END;  
3244 
3245   PROCEDURE push_eval IS
3246   BEGIN
3247     H_PARTY_ID.DELETE;
3248     H_PARTY_ID_LIST.DELETE;
3249     H_SCORES.DELETE;        
3250     g_mappings.DELETE;
3251     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
3252     call_order(5) := call_order(1);
3253     call_type(5) := 'AND';
3254     call_max_score(5) := call_max_score(1);
3255     call_type(2) := 'OR';
3256   END;
3257 
3258   /**  Private procedure to acquire and score at party level  ***/
3259   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
3260     l_party_id_idx NUMBER:=1;
3261     l_ctx_id NUMBER;
3262     l_TX35_new varchar2(4000);
3263   BEGIN
3264     SAVEPOINT eval_start;
3265     set_person_party_type;
3266     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3267       l_ctx_id := l_search_ctx_id;
3268       FORALL I in 1..H_PARTY_ID.COUNT 
3269          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3270              l_search_ctx_id,H_PARTY_ID(I));
3271       H_PARTY_ID.DELETE;
3272       H_PARTY_ID_LIST.DELETE;
3273     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3274       l_ctx_id := l_search_ctx_id;
3275       FORALL I in 1..H_PARTY_ID.COUNT 
3276          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3277              l_search_ctx_id,H_PARTY_ID(I));
3278       l_party_id_idx := H_PARTY_ID.COUNT+1;
3279     ELSE
3280       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3281          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
3282    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3283       hz_utility_v2pub.debug(p_message=>'In eval party level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3284     END IF;
3285         IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' THEN
3286    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3287       hz_utility_v2pub.debug(p_message=>'In eval party level resolution option is set to SQL search.',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3288     END IF;
3289           IF (l_party_site_contains_str IS NULL AND
3290              l_contact_contains_str IS NULL AND
3291              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN
3292             return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);
3293             RAISE L_RETURN_IMM_EXC;
3294           ELSE
3295             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);
3296           END IF;
3297         ELSE
3298           IF p_index>1 THEN
3299    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3300       hz_utility_v2pub.debug(p_message=>'In eval party level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3301     END IF;
3302             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3303             FND_MSG_PUB.ADD;
3304             RAISE FND_API.G_EXC_ERROR;
3305           ELSE
3306             push_eval;
3307             RETURN;
3308           END IF;
3309         END IF;
3310       END IF;
3311       l_ctx_id := NULL;
3312       l_party_id_idx := H_PARTY_ID.COUNT+1;
3313     END IF;
3314     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
3315       open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);
3316     END IF;
3317     LOOP 
3318       FETCH l_party_cur INTO
3319          l_party_id , l_TX4, l_TX45, l_TX46;
3320       EXIT WHEN l_party_cur%NOTFOUND;
3321       l_index := map_id(l_party_id);
3322       l_score := GET_PARTY_SCORE(l_TX4,l_TX45,l_TX46);
3323       IF NOT H_SCORES.EXISTS(l_index) THEN
3324         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
3325       ELSE
3326         H_SCORES(l_index).TOTAL_SCORE := 
3327                 H_SCORES(l_index).TOTAL_SCORE+l_score;
3328         H_SCORES(l_index).PARTY_SCORE := l_score;
3329       END IF;
3330       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3331         H_PARTY_ID_LIST(l_index) := 1;
3332         H_PARTY_ID(l_party_id_idx) := l_party_id;
3333         l_party_id_idx:= l_party_id_idx+1;
3334       END IF;
3335       IF (l_party_id_idx-1)>l_max_thresh THEN
3336          IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
3337           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
3338           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
3339           AND l_contact_pt_contains_str IS NULL THEN
3340           H_PARTY_ID.DELETE(l_party_id_idx-1);
3341           H_PARTY_ID_LIST.DELETE(l_index);
3342           H_SCORES.DELETE(l_index);
3343           EXIT;
3344         END IF;
3345         CLOSE l_party_cur;
3346         IF p_index>1 THEN
3347    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3348       hz_utility_v2pub.debug(p_message=>'In eval party level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3349     END IF;
3350           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3351           FND_MSG_PUB.ADD;
3352           RAISE FND_API.G_EXC_ERROR;
3353         ELSE
3354           push_eval;
3355           RETURN;
3356         END IF;
3357       END IF;
3358     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3359       hz_utility_v2pub.debug(p_message=>'Party Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3360       hz_utility_v2pub.debug(p_message=>'l_party_id '||l_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3361       hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3362     END IF;
3363     END LOOP;
3364     CLOSE l_party_cur;
3365     ROLLBACK to eval_start;
3366   END;
3367   PROCEDURE open_person_contact_cursor(
3368             p_contains_str  VARCHAR2, 
3369             p_search_ctx_id  NUMBER, 
3370             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
3371   BEGIN
3372     OPEN x_cursor FOR 
3373       SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID
3374       FROM HZ_STAGED_CONTACTS stage
3375       WHERE contains( concat_col, p_contains_str)>0
3376       AND ORG_CONTACT_ID in (
3377             SELECT  /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ 
3378             org_contact_id
3379             from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc
3380             where d.party_id = r.subject_id
3381             and oc.party_relationship_id = r.relationship_id
3382             and d.search_context_id = p_search_ctx_id);   
3383   exception
3384     when others then
3385       if (instrb(SQLERRM,'DRG-51030')>0) then 
3386         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
3387         FND_MSG_PUB.ADD;
3388         RAISE FND_API.G_EXC_ERROR;
3389       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
3390         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
3391         FND_MSG_PUB.ADD;
3392         RAISE FND_API.G_EXC_ERROR;
3393       else 
3394         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3395       end if;
3396   END;
3397 
3398   /**  Private procedure to acquire and score at party site level  ***/
3399   PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
3400     l_party_id_idx NUMBER:=1;
3401     l_ctx_id NUMBER;
3402     h_ps_id HZ_PARTY_SEARCH.IDList;
3403     h_ps_party_id HZ_PARTY_SEARCH.IDList;
3404     h_ps_score HZ_PARTY_SEARCH.IDList;
3405     detcnt NUMBER := 1;
3406     l_person_id NUMBER;
3407   BEGIN
3408     SAVEPOINT eval_start;
3409     unset_person_party_type;
3410     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3411       l_ctx_id := l_search_ctx_id;
3412       FORALL I in 1..H_PARTY_ID.COUNT 
3413          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3414              l_search_ctx_id,H_PARTY_ID(I));
3415       H_PARTY_ID.DELETE;
3416       H_PARTY_ID_LIST.DELETE;
3417     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3418       l_ctx_id := l_search_ctx_id;
3419       FORALL I in 1..H_PARTY_ID.COUNT 
3420          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3421              l_search_ctx_id,H_PARTY_ID(I));
3422       l_party_id_idx := H_PARTY_ID.COUNT+1;
3423     ELSE
3424       l_party_id_idx := H_PARTY_ID.COUNT+1;
3425       l_ctx_id := NULL;
3426     END IF;
3427     open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, p_search_merged,'N', 'Y',l_party_site_cur);
3428     LOOP 
3429       FETCH l_party_site_cur INTO
3430          l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX4, l_TX11;
3431       EXIT WHEN l_party_site_cur%NOTFOUND;
3432       IF l_ctx_id IS NULL THEN
3433         l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);
3434       ELSE
3435         l_person_id := l_ps_party_id;
3436       END IF;
3437       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3438         l_index := map_id(l_person_id);
3439         l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX11);
3440         IF NOT H_SCORES.EXISTS(l_index) THEN
3441           IF l_ctx_id IS NULL THEN
3442             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);
3443           END IF;
3444         ELSE
3445           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3446             H_SCORES(l_index).TOTAL_SCORE := 
3447                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3448             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3449           END IF;
3450         END IF;
3451         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3452           H_PARTY_ID_LIST(l_index) := 1;
3453           H_PARTY_ID(l_party_id_idx) := l_person_id;
3454           l_party_id_idx:= l_party_id_idx+1;
3455         END IF;
3456         IF (l_party_id_idx-1)>l_max_thresh THEN
3457           CLOSE l_party_site_cur;
3458           IF p_index>1 THEN
3459    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3460       hz_utility_v2pub.debug(p_message=>'In eval party site level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3461     END IF;
3462             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3463             FND_MSG_PUB.ADD;
3464             RAISE FND_API.G_EXC_ERROR;
3465           ELSE
3466             push_eval;
3467             RETURN;
3468           END IF;
3469         END IF;
3470         IF p_ins_details = 'Y' THEN
3471           h_ps_id(detcnt) := l_party_site_id;
3472           h_ps_party_id(detcnt) := l_person_id;
3473           IF (p_emax_score > 0) THEN 
3474               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
3475           ELSE 
3476               h_ps_score(detcnt) := 0; 
3477           END IF; 
3478           detcnt := detcnt +1;
3479         END IF;
3480     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3481       hz_utility_v2pub.debug(p_message=>'Party Site Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3482       hz_utility_v2pub.debug(p_message=>'l_party_site_id '||l_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3483       hz_utility_v2pub.debug(p_message=>'l_ps_party_id '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3484       hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3485     END IF;
3486       END IF;
3487     END LOOP;
3488     CLOSE l_party_site_cur;
3489     ROLLBACK to eval_start;
3490     IF p_ins_details = 'Y' THEN
3491       FORALL I in 1..h_ps_id.COUNT 
3492         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
3493           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
3494     END IF;
3495   END;
3496 
3497   /**  Private procedure to acquire and score at party site level  ***/
3498   PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
3499     l_party_id_idx NUMBER:=1;
3500     l_ctx_id NUMBER;
3501     h_ct_id HZ_PARTY_SEARCH.IDList;
3502     h_ct_party_id HZ_PARTY_SEARCH.IDList;
3503     h_ct_score HZ_PARTY_SEARCH.IDList;
3504     detcnt NUMBER := 1;
3505     l_person_id NUMBER;
3506   BEGIN
3507     SAVEPOINT eval_start;
3508     l_ctx_id := l_search_ctx_id;
3509     unset_person_party_type;
3510     FORALL I in 1..H_PARTY_ID.COUNT 
3511          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3512              l_search_ctx_id,H_PARTY_ID(I));
3513       l_party_id_idx := H_PARTY_ID.COUNT+1;
3514     open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);
3515     LOOP 
3516       FETCH l_contact_cur INTO
3517          l_org_contact_id, l_ct_party_id ;
3518       EXIT WHEN l_contact_cur%NOTFOUND;
3519       l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);
3520       l_index := map_id(l_person_id);
3521       IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3522         l_score := GET_CONTACTS_SCORE(l_match_idx);
3523         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
3524           H_SCORES(l_index).TOTAL_SCORE := 
3525                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
3526           H_SCORES(l_index).CONTACT_SCORE := l_score;
3527         END IF;
3528       END IF;
3529       IF p_ins_details = 'Y' THEN
3530         h_ct_id(detcnt) := l_org_contact_id;
3531         h_ct_party_id(detcnt) := l_person_id;
3532         IF (p_emax_score > 0) THEN 
3533             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
3534         ELSE 
3535             h_ct_score(detcnt) := 0; 
3536         END IF; 
3537         detcnt := detcnt +1;
3538       END IF;
3539     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3540       hz_utility_v2pub.debug(p_message=>'Contact Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3541       hz_utility_v2pub.debug(p_message=>'l_org_contact_id '||l_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3542       hz_utility_v2pub.debug(p_message=>'l_ct_party_id '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3543       hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3544     END IF;
3545     END LOOP;
3546     CLOSE l_contact_cur;
3547     ROLLBACK to eval_start;
3548     IF p_ins_details = 'Y' THEN
3549       FORALL I in 1..h_ct_id.COUNT 
3550         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
3551           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
3552     END IF;
3553   END;
3554 
3555   /**  Private procedure to acquire and score at contact point level  ***/
3556   PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS
3557     l_party_id_idx NUMBER:=1;
3558     l_ctx_id NUMBER;
3559     h_cpt_id HZ_PARTY_SEARCH.IDList;
3560     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
3561     h_cpt_score HZ_PARTY_SEARCH.IDList;
3562     detcnt NUMBER := 1;
3563     l_person_id NUMBER;
3564     is_a_match VARCHAR2(1) := 'Y';
3565     l_cpt_flag VARCHAR2(1) := 'N';
3566   BEGIN
3567    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3568       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3569     END IF;
3570    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3571       hz_utility_v2pub.debug(p_message=>'calling the procedure eval_cpt_level - from find_persons',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3572     END IF;
3573     SAVEPOINT eval_start;
3574     unset_person_party_type;
3575     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3576       l_ctx_id := l_search_ctx_id;
3577       FORALL I in 1..H_PARTY_ID.COUNT 
3578          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3579              l_search_ctx_id,H_PARTY_ID(I));
3580       H_PARTY_ID.DELETE;
3581       H_PARTY_ID_LIST.DELETE;
3582     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3583    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3584       hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3585     END IF;
3586       l_ctx_id := l_search_ctx_id;
3587       FORALL I in 1..H_PARTY_ID.COUNT 
3588          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3589              l_search_ctx_id,H_PARTY_ID(I));
3590       l_party_id_idx := H_PARTY_ID.COUNT+1;
3591     ELSE
3592    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3593       hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3594     END IF;
3595       l_ctx_id := NULL;
3596       l_party_id_idx := H_PARTY_ID.COUNT+1;
3597     END IF;
3598    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3599       hz_utility_v2pub.debug(p_message=>'====== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR =======',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3600     END IF;
3601     open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, p_search_merged,'N', 'Y',l_contact_pt_cur);
3602     LOOP 
3603       FETCH l_contact_pt_cur INTO
3604          l_contact_pt_id, l_cpt_type, l_cpt_party_id,  l_cpt_ps_id, l_cpt_contact_id , l_TX2;
3605       EXIT WHEN l_contact_pt_cur%NOTFOUND;
3606    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3607       hz_utility_v2pub.debug(p_message=>' ------------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3608     END IF;
3609    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3610       hz_utility_v2pub.debug(p_message=>'Processing party_id -  '||l_cpt_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3611     END IF;
3612    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3613       hz_utility_v2pub.debug(p_message=>'contact point type -  '||l_cpt_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3614     END IF;
3615       IF l_ctx_id IS NULL THEN
3616         l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);
3617       ELSE
3618         l_person_id := l_cpt_party_id;
3619       END IF;
3620       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3621         l_index := map_id(l_person_id);
3622         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
3623         IF NOT H_SCORES.EXISTS(l_index) THEN
3624           IF l_ctx_id IS NULL THEN
3625             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_person_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);
3626            H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3627    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3628       hz_utility_v2pub.debug(p_message=>'Processing first time for this party',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3629     END IF;
3630    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3631       hz_utility_v2pub.debug(p_message=>'l_index is -  '||l_index,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3632     END IF;
3633    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3634       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).cpt_type_match(l_cpt_type) is -  '||H_SCORES(l_index).cpt_type_match(l_cpt_type),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3635     END IF;
3636           END IF;
3637         ELSE
3638    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3639       hz_utility_v2pub.debug(p_message=>'Processing Second time for this party',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3640     END IF;
3641           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
3642             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
3643               H_SCORES(l_index).TOTAL_SCORE :=
3644               H_SCORES(l_index).TOTAL_SCORE-(H_SCORES(l_index).CONTACT_POINT_SCORE - H_SCORES(l_index).cpt_type_match(l_cpt_type) )+l_score;
3645               H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE - H_SCORES(l_index).cpt_type_match(l_cpt_type) + l_score;
3646               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3647    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3648       hz_utility_v2pub.debug(p_message=>'Passed in score greater than existing score',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3649     END IF;
3650    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3651       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).TOTAL_SCORE is -  '||H_SCORES(l_index).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3652     END IF;
3653    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3654       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).CONTACT_POINT_SCORE is -  '||H_SCORES(l_index).CONTACT_POINT_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3655     END IF;
3656    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3657       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).cpt_type_match(l_cpt_type) is -  '||H_SCORES(l_index).cpt_type_match(l_cpt_type),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3658     END IF;
3659             END IF;
3660           ELSE
3661    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3662       hz_utility_v2pub.debug(p_message=>'Passed in score less than or equal to the existing score ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3663     END IF;
3664             H_SCORES(l_index).TOTAL_SCORE :=
3665             H_SCORES(l_index).TOTAL_SCORE+l_score;
3666             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3667             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3668    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3669       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).TOTAL_SCORE is -  '||H_SCORES(l_index).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3670     END IF;
3671    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3672       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).CONTACT_POINT_SCORE is -  '||H_SCORES(l_index).CONTACT_POINT_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3673     END IF;
3674    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3675       hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).cpt_type_match(l_cpt_type) is -  '||H_SCORES(l_index).cpt_type_match(l_cpt_type),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3676     END IF;
3677           END IF;
3678         END IF;
3679    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3680       hz_utility_v2pub.debug(p_message=>'call type is -  '||p_call_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3681     END IF;
3682    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3683       hz_utility_v2pub.debug(p_message=>'match string is -  '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3684     END IF;
3685         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3686           -- If rule is match all 
3687           IF l_match_str = ' AND ' THEN
3688    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3689       hz_utility_v2pub.debug(p_message=>'Match String is - AND ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3690     END IF;
3691             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3692               is_a_match := 'Y';
3693    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3694       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3695     END IF;
3696             ELSE
3697               is_a_match := 'N';
3698    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3699       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3700     END IF;
3701             END IF;
3702           -- Else it is construed as a match anyway 
3703           ELSE
3704             is_a_match := 'Y';
3705    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3706       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3707     END IF;
3708           END IF;
3709           IF (is_a_match='Y') THEN
3710           H_PARTY_ID_LIST(l_index) := 1;
3711           H_PARTY_ID(l_party_id_idx) := l_person_id;
3712           l_party_id_idx:= l_party_id_idx+1;
3713       end if;
3714         END IF;
3715         IF (l_party_id_idx-1)>l_max_thresh THEN
3716           CLOSE l_contact_pt_cur;
3717           IF p_index>1 THEN
3718    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3719       hz_utility_v2pub.debug(p_message=>'In eval contact point level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3720     END IF;
3721             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3722             FND_MSG_PUB.ADD;
3723             RAISE FND_API.G_EXC_ERROR;
3724           ELSE
3725             push_eval;
3726             RETURN;
3727           END IF;
3728         END IF;
3729         IF p_ins_details = 'Y' THEN
3730           -- If rule is match all 
3731           IF l_match_str = ' AND ' THEN
3732    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3733       hz_utility_v2pub.debug(p_message=>'Match String is - AND ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3734     END IF;
3735             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3736               is_a_match := 'Y';
3737    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3738       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3739     END IF;
3740             ELSE
3741               is_a_match := 'N';
3742    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3743       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3744     END IF;
3745             END IF;
3746           -- Else it is construed as a match anyway 
3747           ELSE
3748             is_a_match := 'Y';
3749    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3750       hz_utility_v2pub.debug(p_message=>'is_a_match is  '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3751     END IF;
3752           END IF;
3753           IF (is_a_match='Y') THEN
3754    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3755       hz_utility_v2pub.debug(p_message=>'Inserting into the final array, the person_id -  '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3756     END IF;
3757           FOR I IN 1..h_cpt_id.COUNT LOOP
3758           IF h_cpt_id(I)=l_contact_pt_id THEN
3759           	 l_cpt_flag := 'Y';
3760           END IF;
3761           END LOOP;
3762           IF l_cpt_flag = 'Y' THEN
3763           	 NULL;
3764           ELSE 
3765          	 h_cpt_id(detcnt) := l_contact_pt_id;
3766           h_cpt_party_id(detcnt) := l_person_id;
3767           	 IF (p_emax_score > 0) THEN 
3768               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
3769             ELSE 
3770               h_cpt_score(detcnt) := 0; 
3771           	 END IF; 
3772             detcnt := detcnt +1;
3773           END IF;
3774       end if;
3775         END IF;
3776     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3777       hz_utility_v2pub.debug(p_message=>'Contact pt Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3778       hz_utility_v2pub.debug(p_message=>'l_contact_pt_id '||l_contact_pt_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3779       hz_utility_v2pub.debug(p_message=>'l_cpt_party_id '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3780       hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3781     END IF;
3782       END IF;
3783     END LOOP;
3784     CLOSE l_contact_pt_cur;
3785     ROLLBACK to eval_start;
3786     IF p_ins_details = 'Y' THEN
3787       FORALL I in 1..h_cpt_id.COUNT 
3788         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
3789           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
3790     END IF;
3791   END;
3792 
3793   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
3794   PROCEDURE do_eval (p_index NUMBER) IS
3795     l_ctx_id NUMBER;
3796     l_threshold NUMBER;
3797     other_acq_criteria_exists BOOLEAN; 
3798     acq_cnt NUMBER; 
3799   BEGIN
3800     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
3801      l_threshold := 474;  
3802     other_acq_criteria_exists := TRUE ;
3803     --check if acquisition criteria exists for any other entity
3804     IF l_party_contains_str IS NOT NULL THEN 
3805     	acq_cnt := 1; 
3806     END IF; 
3807     IF l_party_site_contains_str IS NOT NULL THEN 
3808     	acq_cnt := acq_cnt+1; 
3809     END IF; 
3810     IF l_contact_contains_str IS NOT NULL THEN 
3811     	acq_cnt := acq_cnt+1; 
3812     END IF;
3813     IF l_contact_pt_contains_str IS NOT NULL THEN 
3814     	acq_cnt := acq_cnt+1; 
3815     END IF;  
3816     IF acq_cnt>1 THEN 
3817     	other_acq_criteria_exists := TRUE; 
3818     ELSE
3819     	other_acq_criteria_exists := FALSE; 
3820     END IF;  
3821       hz_utility_v2pub.debug(p_message=>'count of entities having acquisition attributes =  '||acq_cnt,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3822       hz_utility_v2pub.debug(p_message=>'call_max_score(p_index) =  '||call_max_score(p_index),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3823       hz_utility_v2pub.debug(p_message=>'l_threshold =  '||l_threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3824     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
3825     	IF ( call_max_score(p_index) < l_threshold) THEN 
3826    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3827       hz_utility_v2pub.debug(p_message=>'When max score of entity level<l_threshold, do not evaluate ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3828     END IF;
3829 	     	RETURN;	
3830     	ELSE 
3831    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3832       hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3833     END IF;
3834 	     	FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED'); 
3835 	     	FND_MSG_PUB.ADD; 
3836 	     	RAISE FND_API.G_EXC_ERROR; 
3837     	END IF; 
3838 	  ELSE
3839    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3840       hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3841     END IF;
3842       FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3843       FND_MSG_PUB.ADD;
3844       RAISE FND_API.G_EXC_ERROR;
3845      END IF; 
3846     END IF;
3847     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
3848       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
3849     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
3850       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3851     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
3852       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3853     END IF;
3854   END;
3855   /************ End of find_persons private procedures **********/ 
3856 
3857   BEGIN
3858 
3859     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3860       hz_utility_v2pub.debug(p_message=>'find_persons(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
3861     END IF;
3862     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3863       hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3864       hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3865       hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3866     END IF;
3867     -- ************************************
3868     -- STEP 1. Initialization and error checks
3869 
3870     l_match_str := ' AND ';
3871     IF p_match_type = 'AND' THEN
3872       l_match_str := ' AND ';
3873     ELSIF p_match_type = 'OR' THEN
3874       l_match_str := ' OR ';
3875     END IF;
3876     l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
3877     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
3878 
3879     l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
3880     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
3881       g_score_until_thresh := true;
3882     ELSE
3883       g_score_until_thresh := false;
3884     END IF;
3885     -- ************************************************************
3886     -- STEP 2. Setup of intermedia query strings for Acquisition query
3887     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
3888     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
3889     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
3890     l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);
3891     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3892 
3893     -- Setup Search Context ID
3894     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3895     x_search_ctx_id := l_search_ctx_id;
3896 
3897     IF l_party_contains_str IS NULL THEN
3898       defpt := 1;
3899     END IF;
3900     IF l_party_site_contains_str IS NULL THEN
3901       defps := 1;
3902     END IF;
3903     IF l_contact_contains_str IS NULL THEN
3904       defct := 1;
3905     END IF;
3906     IF l_contact_pt_contains_str IS NULL THEN
3907       defcpt := 1;
3908     END IF;
3909 
3910     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3911       hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3912       hz_utility_v2pub.debug(p_message=>'l_party_contains_str '||l_party_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3913       hz_utility_v2pub.debug(p_message=>'l_party_site_contains_str '||l_party_site_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3914       hz_utility_v2pub.debug(p_message=>'l_contact_contains_str '||l_contact_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3915       hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3916       hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3917     END IF;
3918     FOR I in 1..5 LOOP
3919       do_eval(I);
3920     END LOOP;
3921     IF l_contact_contains_str IS NOT NULL THEN
3922       eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);
3923     END IF;
3924     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3925       hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 60 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3926     END IF;
3927     x_num_matches := 0;
3928     l_num_eval := 0;
3929     IF l_match_str = ' OR ' THEN
3930       l_party_id := H_SCORES.FIRST;
3931     ELSE
3932       l_party_id := H_PARTY_ID_LIST.FIRST;
3933     END IF;
3934     WHILE l_party_id IS NOT NULL LOOP
3935       l_num_eval:= l_num_eval+1;
3936     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3937       hz_utility_v2pub.debug(p_message=>'Match Party ID '||H_SCORES(l_party_id).PARTY_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3938       hz_utility_v2pub.debug(p_message=>'Score '||H_SCORES(l_party_id).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3939     END IF;
3940       IF H_SCORES(l_party_id).TOTAL_SCORE>=474 THEN
3941             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
3942             VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/790)*100));
3943             x_num_matches := x_num_matches+1;
3944       END IF;
3945       IF l_match_str = ' OR ' THEN
3946         l_party_id:=H_SCORES.NEXT(l_party_id);
3947       ELSE
3948         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3949       END IF;
3950     END LOOP;
3951     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3952     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3953       hz_utility_v2pub.debug(p_message=>'find_persons(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
3954     END IF;
3955 EXCEPTION
3956   WHEN L_RETURN_IMM_EXC THEN
3957     RETURN;
3958   WHEN FND_API.G_EXC_ERROR THEN
3959     RAISE FND_API.G_EXC_ERROR;
3960   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3961     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3962   WHEN OTHERS THEN
3963     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3964     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_persons');
3965     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3966     FND_MSG_PUB.ADD;
3967     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3968 END find_persons;
3969 
3970 PROCEDURE find_persons (
3971       p_rule_id               IN      NUMBER,
3972       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
3973       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
3974       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
3975       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
3976       p_restrict_sql          IN      VARCHAR2,
3977       p_match_type            IN      VARCHAR2,
3978       p_search_merged         IN      VARCHAR2,
3979       p_ins_details           IN      VARCHAR2,
3980       x_search_ctx_id         OUT     NUMBER,
3981       x_num_matches           OUT     NUMBER
3982 ) IS
3983 
3984   BEGIN
3985      find_persons(p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,null,null,null,p_ins_details,x_search_ctx_id,x_num_matches);
3986   END;
3987 PROCEDURE find_party_details (
3988       p_rule_id               IN      NUMBER,
3989       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
3990       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
3991       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
3992       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
3993       p_restrict_sql          IN      VARCHAR2,
3994       p_match_type            IN      VARCHAR2,
3995       p_search_merged         IN      VARCHAR2,
3996       x_search_ctx_id         OUT     NUMBER,
3997       x_num_matches           OUT     NUMBER
3998 ) IS
3999 
4000   BEGIN
4001     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4002       hz_utility_v2pub.debug(p_message=>'find_party_details(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4003     END IF;
4004     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4005       hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4006       hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4007       hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4008       hz_utility_v2pub.debug(p_message=>'p_search_merged '||p_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4009     END IF;
4010   find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,
4011                p_restrict_sql,p_match_type,p_search_merged,null,null, null,'Y',
4012                x_search_ctx_id,x_num_matches);
4013   DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4014   AND NOT EXISTS 
4015        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);
4016   DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4017   AND NOT EXISTS 
4018        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);
4019   DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4020   AND NOT EXISTS 
4021        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);
4022     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4023       hz_utility_v2pub.debug(p_message=>'find_party_details(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4024     END IF;
4025 EXCEPTION
4026   WHEN FND_API.G_EXC_ERROR THEN
4027     RAISE FND_API.G_EXC_ERROR;
4028   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4029     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4030   WHEN OTHERS THEN
4031     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4032     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_party_details');
4033     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4034     FND_MSG_PUB.ADD;
4035     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4036 END find_party_details;
4037 
4038 PROCEDURE find_duplicate_parties (
4039       p_rule_id               IN      NUMBER,
4040       p_party_id              IN      NUMBER,
4041       p_restrict_sql          IN      VARCHAR2,
4042       p_match_type            IN      VARCHAR2,
4043       p_dup_batch_id          IN      NUMBER,
4044       p_search_merged         IN      VARCHAR2,
4045       x_dup_set_id            OUT     NUMBER,
4046       x_search_ctx_id         OUT     NUMBER,
4047       x_num_matches           OUT     NUMBER
4048 ) IS
4049   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4050   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4051   l_contact_list HZ_PARTY_SEARCH.contact_list;
4052   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4053   l_match_idx NUMBER;
4054 
4055   --Fix for bug 4417124
4056   l_use_contact_addr_info BOOLEAN := TRUE;
4057   l_use_contact_cpt_info BOOLEAN  := TRUE;
4058   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
4059   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
4060 
4061 BEGIN
4062 
4063     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4064       hz_utility_v2pub.debug(p_message=>'find_duplicate_parties(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4065     END IF;
4066     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4067       hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4068       hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4069       hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4070       hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4071       hz_utility_v2pub.debug(p_message=>'p_dup_batch_id '||p_dup_batch_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4072       hz_utility_v2pub.debug(p_message=>'p_search_merged '||p_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4073     END IF;
4074 
4075   --Fix for bug 4417124 
4076 
4077   SELECT use_contact_addr_flag, use_contact_cpt_flag 
4078   INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
4079   FROM hz_match_rules_b 
4080   WHERE match_rule_id = 238; 
4081 
4082   IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
4083     l_use_contact_addr_info := FALSE; 
4084   END IF; 
4085 
4086   IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
4087     l_use_contact_cpt_info := FALSE; 
4088   END IF; 
4089 
4090  --End fix for bug 4417124
4091 
4092   get_party_for_search(
4093               p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);
4094 
4095     IF NOT check_prim_cond (l_party_rec,
4096                             l_party_site_list,
4097                             l_contact_list,
4098                             l_cpt_list) THEN
4099       x_dup_set_id:=NULL;
4100       x_search_ctx_id:=NULL;
4101       x_num_matches:=0;
4102       RETURN;
4103     END IF;
4104   x_dup_set_id := NULL;
4105   IF p_dup_batch_id IS NOT NULL THEN
4106     SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;
4107   END IF;
4108 
4109   --Fix for bug 4417124 
4110   IF l_party_rec.PARTY_TYPE = 'PERSON' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN
4111     find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4112                p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4113                x_search_ctx_id,x_num_matches);
4114   ELSE
4115     find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4116                p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4117                x_search_ctx_id,x_num_matches);
4118   END IF;
4119 
4120   IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN
4121     INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,
4122       STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,
4123       LAST_UPDATE_DATE, LAST_UPDATED_BY) 
4124     VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, 'SYSBATCH',
4125       'PARTY_MERGE', hz_utility_pub.created_by, hz_utility_pub.creation_date,
4126       hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,
4127       hz_utility_pub.user_id);
4128 
4129     INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
4130       MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
4131       LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) 
4132     VALUES (p_party_id,x_dup_set_id,0,0,
4133       'Y',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,
4134       hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,
4135       hz_utility_pub.user_id,p_dup_batch_id);
4136   ELSE
4137     x_dup_set_id := NULL;
4138   END IF;
4139     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4140       hz_utility_v2pub.debug(p_message=>'find_duplicate_parties(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4141     END IF;
4142 EXCEPTION
4143   WHEN FND_API.G_EXC_ERROR THEN
4144     RAISE FND_API.G_EXC_ERROR;
4145   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4146     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4147   WHEN OTHERS THEN
4148     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4149     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_duplicate_parties');
4150     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4151     FND_MSG_PUB.ADD;
4152     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4153 END find_duplicate_parties;
4154 
4155 PROCEDURE find_duplicate_party_sites (
4156       p_rule_id               IN      NUMBER,
4157       p_party_site_id         IN      NUMBER,
4158       p_party_id              IN      NUMBER,
4159       p_restrict_sql          IN      VARCHAR2,
4160       p_match_type            IN      VARCHAR2,
4161       x_search_ctx_id         OUT     NUMBER,
4162       x_num_matches           OUT     NUMBER
4163 ) IS
4164 
4165    l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
4166    l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4167    l_contact_list HZ_PARTY_SEARCH.contact_list; 
4168    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
4169    contact_point_ids HZ_PARTY_SEARCH.IDList; 
4170    p_party_site_list HZ_PARTY_SEARCH.IDList;  
4171    p_contact_ids HZ_PARTY_SEARCH.IDList; 
4172   l_match_idx NUMBER;
4173    cursor get_cpts_for_party_sites is select contact_point_id  
4174                          from hz_contact_points 
4175                          where owner_table_name = 'HZ_PARTY_SITES' 
4176                          and primary_flag='Y'
4177                          and owner_table_id = p_party_site_id; 
4178    BEGIN 
4179     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4180       hz_utility_v2pub.debug(p_message=>'find_duplicate_party_sites(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4181     END IF;
4182     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4183       hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4184       hz_utility_v2pub.debug(p_message=>'p_party_site_id '||p_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4185       hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4186       hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4187       hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4188     END IF;
4189      p_party_site_list(1) := p_party_site_id; 
4190      OPEN get_cpts_for_party_sites;
4191      LOOP       
4192      FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; 
4193          EXIT WHEN get_cpts_for_party_sites%NOTFOUND; 
4194      END LOOP;  
4195      CLOSE get_cpts_for_party_sites; 
4196   
4197      get_search_criteria (
4198          null,
4199          p_party_site_list,
4200          HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4201          contact_point_ids, 
4202          l_party_search_rec,
4203          l_party_site_list,
4204          l_contact_list,
4205          l_contact_point_list) ;
4206     IF NOT check_prim_cond (l_party_search_rec,
4207                             l_party_site_list,
4208                             l_contact_list,
4209                             l_contact_point_list) THEN
4210       x_search_ctx_id:=NULL;
4211       x_num_matches:=0;
4212       RETURN;
4213     END IF;
4214  
4215      get_matching_party_sites (p_rule_id, 
4216          p_party_id, 
4217          l_party_site_list, 
4218          l_contact_point_list,
4219          p_restrict_sql, 
4220          p_match_type, 
4221          p_party_site_id, 
4222          x_search_ctx_id,
4223          x_num_matches);
4224     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4225       hz_utility_v2pub.debug(p_message=>'find_duplicate_party_sites(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4226     END IF;
4227 EXCEPTION
4228   WHEN FND_API.G_EXC_ERROR THEN
4229     RAISE FND_API.G_EXC_ERROR;
4230   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4231     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4232   WHEN OTHERS THEN
4233     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4234     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_duplicate_party_sites');
4235     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4236     FND_MSG_PUB.ADD;
4237     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4238 END find_duplicate_party_sites; 
4239  
4240 PROCEDURE find_duplicate_contacts (
4241       p_rule_id               IN      NUMBER,
4242       p_org_contact_id        IN      NUMBER,
4243       p_party_id              IN      NUMBER,
4244       p_restrict_sql          IN      VARCHAR2,
4245       p_match_type            IN      VARCHAR2,
4246       x_search_ctx_id         OUT     NUMBER,
4247       x_num_matches           OUT     NUMBER
4248 ) IS
4249 
4250  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4251  l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4252  l_contact_list HZ_PARTY_SEARCH.contact_list; 
4253  l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
4254  contact_point_ids HZ_PARTY_SEARCH.IDList; 
4255  p_party_site_list HZ_PARTY_SEARCH.IDList;   
4256  p_contact_ids HZ_PARTY_SEARCH.IDList; 
4257   l_match_idx NUMBER;
4258  cursor get_cpt_for_contact_id is select  contact_point_id 
4259    from hz_org_contacts a, hz_relationships b, hz_contact_points c 
4260    where a.party_relationship_id = b.relationship_id 
4261      and c.owner_table_name = 'HZ_PARTIES' 
4262      and c.primary_flag='Y'
4263      and c.owner_table_id = b.party_id 
4264      and b.directional_flag = 'F'  
4265      and a.org_contact_id = p_org_contact_id; 
4266 BEGIN 
4267     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4268       hz_utility_v2pub.debug(p_message=>'find_duplicate_contacts(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4269     END IF;
4270     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4271       hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4272       hz_utility_v2pub.debug(p_message=>'p_org_contact_id '||p_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4273       hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4274       hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4275       hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4276     END IF;
4277     p_contact_ids(1) := p_org_contact_id; 
4278     OPEN get_cpt_for_contact_id; 
4279     LOOP 
4280     FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; 
4281         EXIT WHEN get_cpt_for_contact_id%NOTFOUND; 
4282     END LOOP;  
4283     CLOSE get_cpt_for_contact_id; 
4284  
4285     get_search_criteria (
4286         null,
4287         HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4288         p_contact_ids,
4289         contact_point_ids, 
4290         l_party_search_rec,
4291         l_party_site_list, 
4292         l_contact_list,
4293         l_contact_point_list) ;
4294     IF NOT check_prim_cond (l_party_search_rec,
4295                             l_party_site_list,
4296                             l_contact_list,
4297                             l_contact_point_list) THEN
4298       x_search_ctx_id:=NULL;
4299       x_num_matches:=0;
4300       RETURN;
4301     END IF;
4302  
4303     get_matching_contacts (p_rule_id, 
4304         p_party_id, 
4305         l_contact_list, 
4306         l_contact_point_list, 
4307         p_restrict_sql, 
4308         p_match_type, 
4309         p_org_contact_id, 
4310         x_search_ctx_id, 
4311         x_num_matches);
4312  
4313     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4314       hz_utility_v2pub.debug(p_message=>'find_duplicate_contacts(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4315     END IF;
4316 EXCEPTION
4317   WHEN FND_API.G_EXC_ERROR THEN
4318     RAISE FND_API.G_EXC_ERROR;
4319   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4320     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4321   WHEN OTHERS THEN
4322     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4323     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_duplicate_contacts');
4324     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4325     FND_MSG_PUB.ADD;
4326     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4327 END find_duplicate_contacts; 
4328 
4329 PROCEDURE find_duplicate_contact_points (
4330       p_rule_id               IN      NUMBER,
4331       p_contact_point_id      IN      NUMBER,
4332       p_party_id              IN      NUMBER,
4333       p_restrict_sql          IN      VARCHAR2,
4334       p_match_type            IN      VARCHAR2,
4335       x_search_ctx_id         OUT     NUMBER,
4336       x_num_matches           OUT     NUMBER
4337 ) IS
4338  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
4339   l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4340    l_contact_list HZ_PARTY_SEARCH.contact_list;  
4341    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;  
4342    contact_point_ids HZ_PARTY_SEARCH.IDList;  
4343   p_party_site_list HZ_PARTY_SEARCH.IDList;   
4344   p_contact_ids HZ_PARTY_SEARCH.IDList;  
4345   l_match_idx NUMBER;
4346 
4347 BEGIN
4348     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4349       hz_utility_v2pub.debug(p_message=>'find_duplicate_contact_points(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4350     END IF;
4351     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4352       hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4353       hz_utility_v2pub.debug(p_message=>'p_contact_point_id '||p_contact_point_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4354       hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4355       hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4356       hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4357     END IF;
4358   contact_point_ids(1) := p_contact_point_id;   
4359   get_search_criteria (   
4360       null, 
4361       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
4362       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
4363       contact_point_ids,   
4364       l_party_search_rec, 
4365       l_party_site_list, 
4366       l_contact_list, 
4367       l_contact_point_list ); 
4368     
4369     IF NOT check_prim_cond (l_party_search_rec,
4370                             l_party_site_list,
4371                             l_contact_list,
4372                             l_contact_point_list) THEN
4373       x_search_ctx_id:=NULL;
4374       x_num_matches:=0;
4375       RETURN;
4376     END IF;
4377    get_matching_contact_points ( 
4378       p_rule_id, 
4379       p_party_id, 
4380      l_contact_point_list, 
4381       p_restrict_sql, 
4382       p_match_type, 
4383       p_contact_point_id, 
4384       x_search_ctx_id, 
4385       x_num_matches );  
4386     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4387       hz_utility_v2pub.debug(p_message=>'find_duplicate_contact_points(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4388     END IF;
4389 EXCEPTION
4390   WHEN FND_API.G_EXC_ERROR THEN
4391     RAISE FND_API.G_EXC_ERROR;
4392   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4393     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4394   WHEN OTHERS THEN
4395     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4396     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_duplicate_contact_points');
4397     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4398     FND_MSG_PUB.ADD;
4399     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4400 END find_duplicate_contact_points;
4401 
4402 PROCEDURE find_parties_dynamic (
4403         p_rule_id               IN      NUMBER,
4404         p_attrib_id1            IN      NUMBER,
4405         p_attrib_id2            IN      NUMBER,
4406         p_attrib_id3            IN      NUMBER,
4407         p_attrib_id4            IN      NUMBER,
4408         p_attrib_id5            IN      NUMBER,
4409         p_attrib_id6            IN      NUMBER,
4410         p_attrib_id7            IN      NUMBER,
4411         p_attrib_id8            IN      NUMBER,
4412         p_attrib_id9            IN      NUMBER,
4413         p_attrib_id10           IN      NUMBER,
4414         p_attrib_id11           IN      NUMBER,
4415         p_attrib_id12           IN      NUMBER,
4416         p_attrib_id13           IN      NUMBER,
4417         p_attrib_id14           IN      NUMBER,
4418         p_attrib_id15           IN      NUMBER,
4419         p_attrib_id16           IN      NUMBER,
4420         p_attrib_id17           IN      NUMBER,
4421         p_attrib_id18           IN      NUMBER,
4422         p_attrib_id19           IN      NUMBER,
4423         p_attrib_id20           IN      NUMBER,
4424         p_attrib_val1           IN      VARCHAR2,
4425         p_attrib_val2           IN      VARCHAR2,
4426         p_attrib_val3           IN      VARCHAR2,
4427         p_attrib_val4           IN      VARCHAR2,
4428         p_attrib_val5           IN      VARCHAR2,
4429         p_attrib_val6           IN      VARCHAR2,
4430         p_attrib_val7           IN      VARCHAR2,
4431         p_attrib_val8           IN      VARCHAR2,
4432         p_attrib_val9           IN      VARCHAR2,
4433         p_attrib_val10          IN      VARCHAR2,
4434         p_attrib_val11          IN      VARCHAR2,
4435         p_attrib_val12          IN      VARCHAR2,
4436         p_attrib_val13          IN      VARCHAR2,
4437         p_attrib_val14          IN      VARCHAR2,
4438         p_attrib_val15          IN      VARCHAR2,
4439         p_attrib_val16          IN      VARCHAR2,
4440         p_attrib_val17          IN      VARCHAR2,
4441         p_attrib_val18          IN      VARCHAR2,
4442         p_attrib_val19          IN      VARCHAR2,
4443         p_attrib_val20          IN      VARCHAR2,
4444         p_restrict_sql          IN      VARCHAR2,
4445         p_match_type            IN      VARCHAR2,
4446         p_search_merged         IN      VARCHAR2,
4447         x_search_ctx_id         OUT     NUMBER,
4448         x_num_matches           OUT     NUMBER
4449 ) IS
4450   BEGIN
4451     call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,
4452                      p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,
4453                      p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,
4454                      p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,
4455                      p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,
4456                      p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,
4457                      p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,
4458                      p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,
4459                      p_restrict_sql,'FIND_PARTIES',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);
4460  END;
4461 
4462 PROCEDURE call_api_dynamic (
4463         p_rule_id               IN      NUMBER,
4464         p_attrib_id1            IN      NUMBER,
4465         p_attrib_id2            IN      NUMBER,
4466         p_attrib_id3            IN      NUMBER,
4467         p_attrib_id4            IN      NUMBER,
4468         p_attrib_id5            IN      NUMBER,
4469         p_attrib_id6            IN      NUMBER,
4470         p_attrib_id7            IN      NUMBER,
4471         p_attrib_id8            IN      NUMBER,
4472         p_attrib_id9            IN      NUMBER,
4473         p_attrib_id10           IN      NUMBER,
4474         p_attrib_id11           IN      NUMBER,
4475         p_attrib_id12           IN      NUMBER,
4476         p_attrib_id13           IN      NUMBER,
4477         p_attrib_id14           IN      NUMBER,
4478         p_attrib_id15           IN      NUMBER,
4479         p_attrib_id16           IN      NUMBER,
4480         p_attrib_id17           IN      NUMBER,
4481         p_attrib_id18           IN      NUMBER,
4482         p_attrib_id19           IN      NUMBER,
4483         p_attrib_id20           IN      NUMBER,
4484         p_attrib_val1           IN      VARCHAR2,
4485         p_attrib_val2           IN      VARCHAR2,
4486         p_attrib_val3           IN      VARCHAR2,
4487         p_attrib_val4           IN      VARCHAR2,
4488         p_attrib_val5           IN      VARCHAR2,
4489         p_attrib_val6           IN      VARCHAR2,
4490         p_attrib_val7           IN      VARCHAR2,
4491         p_attrib_val8           IN      VARCHAR2,
4492         p_attrib_val9           IN      VARCHAR2,
4493         p_attrib_val10          IN      VARCHAR2,
4494         p_attrib_val11          IN      VARCHAR2,
4495         p_attrib_val12          IN      VARCHAR2,
4496         p_attrib_val13          IN      VARCHAR2,
4497         p_attrib_val14          IN      VARCHAR2,
4498         p_attrib_val15          IN      VARCHAR2,
4499         p_attrib_val16          IN      VARCHAR2,
4500         p_attrib_val17          IN      VARCHAR2,
4501         p_attrib_val18          IN      VARCHAR2,
4502         p_attrib_val19          IN      VARCHAR2,
4503         p_attrib_val20          IN      VARCHAR2,
4504         p_restrict_sql          IN      VARCHAR2,
4505         p_api_name              IN      VARCHAR2,
4506         p_match_type            IN      VARCHAR2,
4507         p_party_id              IN      NUMBER,
4508         p_search_merged         IN      VARCHAR2,
4509         x_search_ctx_id         OUT     NUMBER,
4510         x_num_matches           OUT     NUMBER
4511 ) IS
4512   TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
4513   l_match_idx NUMBER;
4514   AttrVals AttrList;
4515   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4516   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4517   l_contact_list HZ_PARTY_SEARCH.contact_list;
4518   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4519   l_dup_set_id NUMBER;
4520   l_idx NUMBER;
4521   l_cpt_type VARCHAR2(255);
4522   FIRST BOOLEAN := TRUE; 
4523 
4524 BEGIN
4525     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4526       hz_utility_v2pub.debug(p_message=>'call_api_dynamic(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4527     END IF;
4528 
4529   IF p_attrib_id1 IS NOT NULL THEN
4530     AttrVals(p_attrib_id1):=p_attrib_val1;
4531   END IF;
4532   IF p_attrib_id2 IS NOT NULL THEN
4533     AttrVals(p_attrib_id2):=p_attrib_val2;
4534   END IF;
4535   IF p_attrib_id3 IS NOT NULL THEN
4536     AttrVals(p_attrib_id3):=p_attrib_val3;
4537   END IF;
4538   IF p_attrib_id4 IS NOT NULL THEN
4539     AttrVals(p_attrib_id4):=p_attrib_val4;
4540   END IF;
4541   IF p_attrib_id5 IS NOT NULL THEN
4542     AttrVals(p_attrib_id5):=p_attrib_val5;
4543   END IF;
4544   IF p_attrib_id6 IS NOT NULL THEN
4545     AttrVals(p_attrib_id6):=p_attrib_val6;
4546   END IF;
4547   IF p_attrib_id7 IS NOT NULL THEN
4548     AttrVals(p_attrib_id7):=p_attrib_val7;
4549   END IF;
4550   IF p_attrib_id8 IS NOT NULL THEN
4551     AttrVals(p_attrib_id8):=p_attrib_val8;
4552   END IF;
4553   IF p_attrib_id9 IS NOT NULL THEN
4554     AttrVals(p_attrib_id9):=p_attrib_val9;
4555   END IF;
4556   IF p_attrib_id10 IS NOT NULL THEN
4557     AttrVals(p_attrib_id10):=p_attrib_val10;
4558   END IF;
4559   IF p_attrib_id11 IS NOT NULL THEN
4560     AttrVals(p_attrib_id11):=p_attrib_val11;
4561   END IF;
4562   IF p_attrib_id12 IS NOT NULL THEN
4563     AttrVals(p_attrib_id12):=p_attrib_val12;
4564   END IF;
4565   IF p_attrib_id13 IS NOT NULL THEN
4566     AttrVals(p_attrib_id13):=p_attrib_val13;
4567   END IF;
4568   IF p_attrib_id14 IS NOT NULL THEN
4569     AttrVals(p_attrib_id14):=p_attrib_val14;
4570   END IF;
4571   IF p_attrib_id15 IS NOT NULL THEN
4572     AttrVals(p_attrib_id15):=p_attrib_val15;
4573   END IF;
4574   IF p_attrib_id16 IS NOT NULL THEN
4575     AttrVals(p_attrib_id16):=p_attrib_val16;
4576   END IF;
4577   IF p_attrib_id17 IS NOT NULL THEN
4578     AttrVals(p_attrib_id17):=p_attrib_val17;
4579   END IF;
4580   IF p_attrib_id18 IS NOT NULL THEN
4581     AttrVals(p_attrib_id18):=p_attrib_val18;
4582   END IF;
4583   IF p_attrib_id19 IS NOT NULL THEN
4584     AttrVals(p_attrib_id19):=p_attrib_val19;
4585   END IF;
4586   IF p_attrib_id20 IS NOT NULL THEN
4587     AttrVals(p_attrib_id20):=p_attrib_val20;
4588   END IF;
4589   IF AttrVals.EXISTS(8) THEN
4590     l_party_rec.PARTY_NAME:= AttrVals(8);
4591     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4592       hz_utility_v2pub.debug(p_message=>'l_party_rec.PARTY_NAME '||AttrVals(8),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4593     END IF;
4594   END IF;
4595 
4596   IF AttrVals.EXISTS(19) THEN
4597     l_party_rec.JGZZ_FISCAL_CODE:= AttrVals(19);
4598     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4599       hz_utility_v2pub.debug(p_message=>'l_party_rec.JGZZ_FISCAL_CODE '||AttrVals(19),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4600     END IF;
4601   END IF;
4602 
4603   IF AttrVals.EXISTS(20) THEN
4604     l_party_rec.SIC_CODE:= AttrVals(20);
4605     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4606       hz_utility_v2pub.debug(p_message=>'l_party_rec.SIC_CODE '||AttrVals(20),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4607     END IF;
4608   END IF;
4609 
4610   IF AttrVals.EXISTS(27) THEN
4611     l_party_site_list(1).ADDRESS:= AttrVals(27);
4612     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4613       hz_utility_v2pub.debug(p_message=>'l_party_site_list(1).ADDRESS '||AttrVals(27),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4614     END IF;
4615   END IF;
4616 
4617   IF AttrVals.EXISTS(30) THEN
4618     l_party_site_list(1).POSTAL_CODE:= AttrVals(30);
4619     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4620       hz_utility_v2pub.debug(p_message=>'l_party_site_list(1).POSTAL_CODE '||AttrVals(30),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4621     END IF;
4622   END IF;
4623 
4624   IF AttrVals.EXISTS(45) THEN
4625     l_cpt_type := 'PHONE';
4626     FIRST := FALSE;
4627     FOR I in 1..l_cpt_list.COUNT LOOP
4628       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
4629         l_cpt_list(I).PHONE_NUMBER:= AttrVals(45);
4630         FIRST := TRUE;
4631     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4632       hz_utility_v2pub.debug(p_message=>'l_cpt_list('||I||').CONTACT_POINT_TYPE '||l_cpt_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4633       hz_utility_v2pub.debug(p_message=>'l_cpt_list('||I||').PHONE_NUMBER '||AttrVals(45),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4634     END IF;
4635       END IF;
4636     END LOOP;
4637     IF not FIRST THEN
4638       l_idx := l_cpt_list.COUNT+1;
4639       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
4640       l_cpt_list(l_idx).PHONE_NUMBER:= AttrVals(45);
4641     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4642       hz_utility_v2pub.debug(p_message=>'l_cpt_list('||l_idx||').CONTACT_POINT_TYPE '||l_cpt_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4643       hz_utility_v2pub.debug(p_message=>'l_cpt_list('||l_idx||').PHONE_NUMBER '||AttrVals(45),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4644     END IF;
4645     END IF;
4646   END IF;
4647 
4648 
4649   IF AttrVals.EXISTS(14) THEN
4650      l_party_rec.PARTY_TYPE:= AttrVals(14); 
4651   END IF; 
4652   IF upper(p_api_name) = 'FIND_PARTIES' THEN
4653     find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4654                p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,'N',
4655                x_search_ctx_id,x_num_matches);
4656   ELSIF upper(p_api_name) = 'FIND_PARTY_DETAILS' THEN
4657     find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4658                p_restrict_sql,p_match_type,p_search_merged,
4659                x_search_ctx_id,x_num_matches);
4660   ELSIF upper(p_api_name) = 'FIND_PERSONS' THEN
4661     find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4662                p_restrict_sql,p_match_type,p_search_merged,'N',
4663                x_search_ctx_id,x_num_matches);
4664   ELSIF upper(p_api_name) = 'GET_MATCHING_PARTY_SITES' THEN
4665     get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,
4666                p_restrict_sql,p_match_type,NULL,
4667                x_search_ctx_id,x_num_matches);
4668   ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACTS' THEN
4669     get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,
4670                p_restrict_sql,p_match_type,NULL,
4671                x_search_ctx_id,x_num_matches);
4672   ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACT_POINTS' THEN
4673     get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,
4674                p_restrict_sql,p_match_type,NULL,
4675                x_search_ctx_id,x_num_matches);
4676   END IF;
4677     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4678       hz_utility_v2pub.debug(p_message=>'call_api_dynamic(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4679     END IF;
4680 EXCEPTION
4681   WHEN FND_API.G_EXC_ERROR THEN
4682     RAISE FND_API.G_EXC_ERROR;
4683   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4684     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4685   WHEN OTHERS THEN
4686     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4687     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.call_api_dynamic');
4688     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4689     FND_MSG_PUB.ADD;
4690     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4691 END call_api_dynamic; 
4692 
4693 
4694 PROCEDURE get_matching_party_sites (
4695         p_rule_id               IN      NUMBER,
4696         p_party_id              IN      NUMBER,
4697         p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,
4698         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
4699         p_restrict_sql          IN      VARCHAR2,
4700         p_match_type            IN      VARCHAR2,
4701         p_dup_party_site_id     IN      NUMBER, 
4702         x_search_ctx_id         OUT     NUMBER,
4703         x_num_matches           OUT     NUMBER
4704 ) IS
4705   
4706   -- Strings to hold the generated Intermedia query strings
4707   l_party_contains_str VARCHAR2(32000); 
4708   l_match_idx NUMBER;
4709   l_party_site_contains_str VARCHAR2(32000);
4710   l_contact_contains_str VARCHAR2(32000);
4711   l_contact_pt_contains_str VARCHAR2(32000);
4712   l_tmp VARCHAR2(32000);
4713 
4714   -- Other local variables
4715   l_match_str VARCHAR2(30); -- Match type (AND or OR)
4716   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
4717   -- For Score calculation
4718   l_max_score NUMBER;
4719   l_entered_max_score NUMBER;
4720   FIRST BOOLEAN;
4721   l_search_ctx_id NUMBER; -- Generated Search Context ID
4722 
4723   l_TX2 VARCHAR2(2000);
4724   l_TX4 VARCHAR2(2000);
4725   l_TX11 VARCHAR2(2000);
4726   H_SCORES HZ_PARTY_SEARCH.score_list;
4727 
4728   l_score NUMBER;
4729   l_idx NUMBER;
4730   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
4731   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
4732   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
4733   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
4734   l_party_id NUMBER;
4735   l_ps_party_id NUMBER;
4736   l_ct_party_id NUMBER;
4737   l_cpt_party_id NUMBER;
4738   l_cpt_ps_id NUMBER;
4739   l_cpt_contact_id NUMBER;
4740   l_cpt_type VARCHAR2(100);
4741   l_cpt_level VARCHAR2(100);
4742   l_party_site_id NUMBER;
4743   l_org_contact_id NUMBER;
4744   l_contact_pt_id NUMBER;
4745   l_cpt_level VARCHAR2(100);
4746   l_ps_contact_id NUMBER;
4747   l_party_max_score NUMBER;
4748   l_ps_max_score NUMBER;
4749   l_contact_max_score NUMBER;
4750   l_cpt_max_score NUMBER;
4751 
4752   defpt NUMBER :=0;
4753   defps NUMBER :=0;
4754   defct NUMBER :=0;
4755   defcpt NUMBER :=0;
4756   l_index NUMBER;
4757   l_match_ps_list HZ_PARTY_SEARCH.IDList;
4758   l_cnt NUMBER:=1;
4759 
4760   
4761   BEGIN
4762     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4763       hz_utility_v2pub.debug(p_message=>'get_matching_party_sites(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4764     END IF;
4765     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4766       hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4767       hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4768       hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4769       hz_utility_v2pub.debug(p_message=>'p_dup_party_site_id '||p_dup_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4770     END IF;
4771 
4772     -- ************************************
4773     -- STEP 1. Initialization and error checks
4774 
4775     l_match_str := ' AND ';
4776     IF p_match_type = 'AND' THEN
4777       l_match_str := ' AND ';
4778     ELSIF p_match_type = 'OR' THEN
4779       l_match_str := ' OR ';
4780     END IF;
4781     l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, p_party_site_list, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
4782     g_score_until_thresh := false;
4783     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4784 
4785     -- ************************************************************
4786     -- STEP 2. Setup of intermedia query strings for Acquisition query
4787     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
4788     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
4789     init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,p_party_site_list,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);
4790 
4791     -- Setup Search Context ID
4792     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4793     x_search_ctx_id := l_search_ctx_id;
4794 
4795     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4796       hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4797       hz_utility_v2pub.debug(p_message=>'l_party_site_contains_str '||l_party_site_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4798       hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4799       hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4800     END IF;
4801     IF l_party_site_contains_str IS NULL THEN
4802       defps := 1;
4803     END IF;
4804     IF l_contact_pt_contains_str IS NULL THEN
4805       defcpt := 1;
4806     END IF;
4807 
4808     IF l_party_site_contains_str IS NOT NULL THEN
4809       open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,'N', 'N',l_party_site_cur);
4810       LOOP
4811         FETCH l_party_site_cur INTO 
4812             l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX4, l_TX11;
4813         EXIT WHEN l_party_site_cur%NOTFOUND;
4814       IF (p_dup_party_site_id IS NULL OR (
4815                 p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND 
4816                 l_party_site_id <> p_dup_party_site_id)) THEN  
4817             l_index := map_id(l_party_site_id);
4818             l_match_ps_list(l_cnt):= l_party_site_id ;
4819             l_cnt:=l_cnt+1;
4820             l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX11);
4821             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);
4822     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4823       hz_utility_v2pub.debug(p_message=>'Party Site Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4824       hz_utility_v2pub.debug(p_message=>'l_party_site_id '||l_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4825       hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4826     END IF;
4827       END IF; 
4828       END LOOP;
4829       CLOSE l_party_site_cur;
4830     END IF;
4831 
4832     IF l_contact_pt_contains_str IS NOT NULL THEN
4833     SAVEPOINT eval_start;
4834     IF l_match_str = ' AND ' OR (
4835         ((l_cpt_max_score/l_entered_max_score)<(474/790))
4836         ) THEN
4837       FORALL I in 1..l_match_ps_list.COUNT
4838            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
4839            values (l_search_ctx_id,l_match_ps_list(I));
4840         open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur,'PARTY_SITES');
4841     ELSE
4842       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
4843     END IF;
4844       LOOP
4845         FETCH l_contact_pt_cur INTO 
4846             l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id , l_TX2;
4847         EXIT WHEN l_contact_pt_cur%NOTFOUND;
4848       IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (
4849          p_dup_party_site_id IS NOT NULL AND l_cpt_contact_id IS NULL AND p_dup_party_site_id <> l_cpt_ps_id))) THEN   
4850         l_index := map_id(l_cpt_ps_id);
4851         IF l_match_str = ' OR ' THEN
4852           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
4853           IF NOT H_SCORES.EXISTS(l_index) THEN
4854             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);
4855           ELSE
4856             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
4857                H_SCORES(l_index).TOTAL_SCORE := 
4858                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4859                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
4860             END IF;
4861           END IF;
4862         ELSE
4863           IF H_SCORES.EXISTS(l_index) THEN
4864             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
4865             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
4866                H_SCORES(l_index).TOTAL_SCORE := 
4867                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4868                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
4869             END IF;
4870           ELSIF defps=1 THEN
4871             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
4872             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);
4873           END IF;
4874         END IF;
4875       END IF; 
4876     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4877       hz_utility_v2pub.debug(p_message=>'Contact_point Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4878       hz_utility_v2pub.debug(p_message=>'l_party_site_id '||l_cpt_ps_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4879       hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4880     END IF;
4881       END LOOP;
4882       CLOSE l_contact_pt_cur;
4883     ROLLBACK TO eval_start;
4884     END IF;
4885     x_num_matches := 0;
4886     l_party_site_id := H_SCORES.FIRST;
4887     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4888       hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 60 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4889     END IF;
4890     WHILE l_party_site_id IS NOT NULL LOOP
4891     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4892       hz_utility_v2pub.debug(p_message=>'Match Party Site ID '||H_SCORES(l_party_site_id).PARTY_SITE_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4893       hz_utility_v2pub.debug(p_message=>'Score '||round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4894     END IF;
4895  IF l_match_str = ' OR ' THEN
4896 IF (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=( 474/790 ) THEN
4897     INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) 
4898     VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100);
4899       x_num_matches := x_num_matches+1;
4900  END IF;
4901  ELSE
4902     IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND
4903        H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND
4904        (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=(474/790) THEN
4905       INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) 
4906       VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100));
4907        x_num_matches := x_num_matches+1;
4908       END IF;
4909  END IF;
4910       l_party_site_id:=H_SCORES.NEXT(l_party_site_id);
4911     END LOOP;
4912     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4913       hz_utility_v2pub.debug(p_message=>'get_matching_party_sites(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4914     END IF;
4915 EXCEPTION
4916   WHEN FND_API.G_EXC_ERROR THEN
4917     RAISE FND_API.G_EXC_ERROR;
4918   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4919     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4920   WHEN OTHERS THEN
4921     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4922     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.get_matching_party_sites');
4923     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4924     FND_MSG_PUB.ADD;
4925     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4926 END get_matching_party_sites;
4927 
4928 
4929 PROCEDURE get_matching_contacts (
4930         p_rule_id               IN      NUMBER,
4931         p_party_id              IN      NUMBER,
4932         p_contact_list          IN      HZ_PARTY_SEARCH.CONTACT_LIST,
4933         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
4934         p_restrict_sql          IN      VARCHAR2,
4935         p_match_type            IN      VARCHAR2,
4936         p_dup_contact_id        IN      NUMBER, 
4937         x_search_ctx_id         OUT     NUMBER,
4938         x_num_matches           OUT     NUMBER
4939 ) IS
4940   
4941   -- Strings to hold the generated Intermedia query strings
4942   l_party_contains_str VARCHAR2(32000); 
4943   l_party_site_contains_str VARCHAR2(32000);
4944   l_contact_contains_str VARCHAR2(32000);
4945   l_contact_pt_contains_str VARCHAR2(32000);
4946   l_tmp VARCHAR2(32000);
4947 
4948   -- Other local variables
4949   l_match_str VARCHAR2(30); -- Match type (AND or OR)
4950   l_match_idx NUMBER;
4951   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
4952   -- For Score calculation
4953   l_max_score NUMBER;
4954   l_entered_max_score NUMBER;
4955   FIRST BOOLEAN;
4956   l_search_ctx_id NUMBER; -- Generated Search Context ID
4957 
4958   l_TX2 VARCHAR2(2000);
4959   H_SCORES HZ_PARTY_SEARCH.score_list;
4960 
4961   l_score NUMBER;
4962   l_idx NUMBER;
4963   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
4964   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
4965   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
4966   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
4967   l_party_id NUMBER;
4968   l_ps_party_id NUMBER;
4969   l_ct_party_id NUMBER;
4970   l_cpt_party_id NUMBER;
4971   l_cpt_ps_id NUMBER;
4972   l_cpt_contact_id NUMBER;
4973   l_cpt_type VARCHAR2(100);
4974   l_party_site_id NUMBER;
4975   l_org_contact_id NUMBER;
4976   l_contact_pt_id NUMBER;
4977 
4978   defpt NUMBER :=0;
4979   defps NUMBER :=0;
4980   defct NUMBER :=0;
4981   defcpt NUMBER :=0;
4982   l_index NUMBER;
4983   l_party_max_score NUMBER;
4984   l_ps_max_score NUMBER;
4985   l_contact_max_score NUMBER;
4986   l_cpt_max_score NUMBER;
4987   l_match_contact_list HZ_PARTY_SEARCH.IDList;
4988   l_cnt NUMBER:=1;
4989 
4990   
4991   BEGIN
4992     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4993       hz_utility_v2pub.debug(p_message=>'get_matching_contacts(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4994     END IF;
4995     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4996       hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4997       hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4998       hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4999       hz_utility_v2pub.debug(p_message=>'p_dup_contact_id '||p_dup_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5000     END IF;
5001 
5002     -- ************************************
5003     -- STEP 1. Initialization and error checks
5004 
5005     l_match_str := ' AND ';
5006     IF p_match_type = 'AND' THEN
5007       l_match_str := ' AND ';
5008     ELSIF p_match_type = 'OR' THEN
5009       l_match_str := ' OR ';
5010     END IF;
5011     l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, p_contact_list, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5012     g_score_until_thresh := false;
5013     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5014 
5015     -- ************************************************************
5016     -- STEP 2. Setup of intermedia query strings for Acquisition query
5017     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5018     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5019     init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,p_contact_list,p_contact_point_list);
5020 
5021     -- Setup Search Context ID
5022     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5023     x_search_ctx_id := l_search_ctx_id;
5024 
5025     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5026       hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5027       hz_utility_v2pub.debug(p_message=>'l_contact_contains_str '||l_contact_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5028       hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5029       hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5030     END IF;
5031     IF l_contact_contains_str IS NULL THEN
5032       defct := 1;
5033     END IF;
5034     IF l_contact_pt_contains_str IS NULL THEN
5035       defcpt := 1;
5036     END IF;
5037 
5038     IF l_contact_contains_str IS NOT NULL THEN
5039       open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);
5040       LOOP
5041         FETCH l_contact_cur INTO 
5042             l_org_contact_id, l_ct_party_id ;
5043         EXIT WHEN l_contact_cur%NOTFOUND;
5044       IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN 
5045         l_index := map_id(l_org_contact_id);
5046         l_match_contact_list(l_cnt):=l_org_contact_id;
5047         l_cnt:=l_cnt+1;
5048           l_score := GET_CONTACTS_SCORE(l_match_idx);
5049             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id, null);
5050     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5051       hz_utility_v2pub.debug(p_message=>'Contact Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5052       hz_utility_v2pub.debug(p_message=>'l_org_contact_id '||l_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5053       hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5054     END IF;
5055       END IF; 
5056       END LOOP;
5057       CLOSE l_contact_cur;
5058     END IF;
5059 
5060     IF l_contact_pt_contains_str IS NOT NULL THEN
5061     SAVEPOINT eval_start;
5062     IF l_match_str = ' AND ' OR (
5063         ((l_cpt_max_score/l_entered_max_score)<(474/790))
5064         ) THEN
5065       FORALL I in 1..l_match_contact_list.COUNT
5066            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5067            values (l_search_ctx_id,l_match_contact_list(I));
5068       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur,'CONTACTS');
5069     ELSE
5070       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5071     END IF;
5072       LOOP
5073         FETCH l_contact_pt_cur INTO 
5074             l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id , l_TX2;
5075         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5076       IF (l_cpt_contact_id IS NOT NULL AND (p_dup_contact_id IS NULL OR l_cpt_contact_id <>  p_dup_contact_id)) THEN 
5077         l_index := map_id(l_cpt_contact_id);
5078         IF l_match_str = ' OR ' THEN
5079           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
5080           IF NOT H_SCORES.EXISTS(l_index) THEN
5081             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);
5082           ELSE
5083             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5084                H_SCORES(l_index).TOTAL_SCORE := 
5085                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5086                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5087             END IF;
5088           END IF;
5089         ELSE
5090           IF H_SCORES.EXISTS(l_index) THEN
5091             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
5092             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5093                H_SCORES(l_index).TOTAL_SCORE := 
5094                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5095                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5096             END IF;
5097           ELSIF defps=1 THEN
5098             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
5099             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);
5100           END IF;
5101         END IF;
5102         END IF; 
5103       END LOOP;
5104     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5105       hz_utility_v2pub.debug(p_message=>'Contact_point Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5106       hz_utility_v2pub.debug(p_message=>'l_org_contact_id '||l_cpt_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5107       hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5108     END IF;
5109       CLOSE l_contact_pt_cur;
5110     END IF;
5111     x_num_matches := 0;
5112     l_org_contact_id := H_SCORES.FIRST;
5113     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5114       hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 60 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5115     END IF;
5116     WHILE l_org_contact_id IS NOT NULL LOOP
5117       IF l_match_str = ' OR ' THEN
5118     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5119       hz_utility_v2pub.debug(p_message=>'Match Contact ID '||H_SCORES(l_org_contact_id).ORG_CONTACT_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5120       hz_utility_v2pub.debug(p_message=>'Score '||round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5121     END IF;
5122         IF (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(474/790) THEN
5123             INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) 
5124             VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100);
5125           x_num_matches := x_num_matches+1;
5126         END IF;
5127       ELSE
5128            IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND
5129            H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND
5130            (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(474/790) THEN
5131           INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) 
5132           VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100));
5133           x_num_matches := x_num_matches+1;
5134         END IF;
5135       END IF;
5136       l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);
5137     END LOOP;
5138     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5139       hz_utility_v2pub.debug(p_message=>'get_matching_contacts(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5140     END IF;
5141 EXCEPTION
5142   WHEN FND_API.G_EXC_ERROR THEN
5143     RAISE FND_API.G_EXC_ERROR;
5144   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5145     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5146   WHEN OTHERS THEN
5147     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5148     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.get_matching_contacts');
5149     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5150     FND_MSG_PUB.ADD;
5151     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5152 END get_matching_contacts;
5153 
5154 
5155 PROCEDURE get_matching_contact_points (
5156         p_rule_id               IN      NUMBER,
5157         p_party_id              IN      NUMBER,
5158         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5159         p_restrict_sql          IN      VARCHAR2,
5160         p_match_type            IN      VARCHAR2,
5161         p_dup_contact_point_id  IN      NUMBER, 
5162         x_search_ctx_id         OUT     NUMBER,
5163         x_num_matches           OUT     NUMBER
5164 ) IS
5165 
5166 
5167   -- Strings to hold the generated Intermedia query strings
5168   l_contact_pt_contains_str VARCHAR2(32000);
5169   l_tmp VARCHAR2(32000);
5170 
5171   -- Other local variables
5172   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5173   l_match_idx NUMBER;
5174   -- For Score calculation
5175   l_entered_max_score NUMBER;
5176   l_search_ctx_id NUMBER; -- Generated Search Context ID
5177 
5178   l_TX2 VARCHAR2(2000);
5179 
5180   l_score NUMBER;
5181   l_idx NUMBER;
5182   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5183   l_cpt_party_id NUMBER;
5184   l_cpt_ps_id NUMBER;
5185   l_cpt_contact_id NUMBER;
5186   l_contact_pt_id NUMBER;
5187   l_cpt_type VARCHAR2(100);
5188   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
5189   H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;
5190   H_SCORE  HZ_PARTY_SEARCH.IDList;
5191 
5192   cnt NUMBER :=0;
5193   l_party_max_score NUMBER;
5194   l_ps_max_score NUMBER;
5195   l_contact_max_score NUMBER;
5196   l_cpt_max_score NUMBER;
5197 
5198   
5199   BEGIN
5200     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5201       hz_utility_v2pub.debug(p_message=>'get_matching_contact_points(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5202     END IF;
5203     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5204       hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5205       hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5206       hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5207       hz_utility_v2pub.debug(p_message=>'p_dup_contact_point_id '||p_dup_contact_point_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5208     END IF;
5209 
5210     -- ************************************
5211     -- STEP 1. Initialization and error checks
5212 
5213     l_match_str := ' AND ';
5214     IF p_match_type = 'AND' THEN
5215       l_match_str := ' AND ';
5216     ELSIF p_match_type = 'OR' THEN
5217       l_match_str := ' OR ';
5218     END IF;
5219     l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, 
5220        HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
5221        p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5222     g_score_until_thresh := false;
5223     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5224 
5225     -- ************************************************************
5226     -- STEP 2. Setup of intermedia query strings for Acquisition query
5227     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5228     init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);
5229 
5230     -- Setup Search Context ID
5231     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5232     x_search_ctx_id := l_search_ctx_id;
5233     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5234       hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5235       hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5236       hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5237     END IF;
5238 
5239     IF l_contact_pt_contains_str IS NOT NULL THEN
5240       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5241       cnt := 1;
5242       LOOP
5243         FETCH l_contact_pt_cur INTO 
5244             l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id , l_TX2;
5245         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5246         IF (p_dup_contact_point_id IS NULL OR (
5247                p_dup_contact_point_id IS NOT NULL AND 
5248                l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND 
5249                p_dup_contact_point_id <>  l_contact_pt_id)) THEN   
5250             H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;
5251             H_PARTY_ID(cnt) := l_cpt_party_id;
5252             H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
5253             cnt := cnt+1;
5254     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5255       hz_utility_v2pub.debug(p_message=>'Contact Point Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5256       hz_utility_v2pub.debug(p_message=>'l_contact_pt_id '||l_contact_pt_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5257       hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5258     END IF;
5259         END IF; 
5260       END LOOP;
5261       CLOSE l_contact_pt_cur;
5262     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5263       hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 60 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5264     END IF;
5265       x_num_matches := 0; 
5266       FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP
5267     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5268       hz_utility_v2pub.debug(p_message=>'Match Contact Point ID '||H_CONTACT_POINT_ID(I),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5269       hz_utility_v2pub.debug(p_message=>'Score '||round((H_SCORE(I)/l_entered_max_score)*100),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5270     END IF;
5271         IF (H_SCORE(I)/l_entered_max_score) >= (474/790) THEN
5272         INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
5273             l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);
5274             x_num_matches := x_num_matches + 1; 
5275         END IF;
5276       END LOOP; 
5277     END IF;
5278     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5279       hz_utility_v2pub.debug(p_message=>'get_matching_contact_points(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5280     END IF;
5281 EXCEPTION
5282   WHEN FND_API.G_EXC_ERROR THEN
5283     RAISE FND_API.G_EXC_ERROR;
5284   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5285     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5286   WHEN OTHERS THEN
5287     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5288     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.get_matching_contact_points');
5289     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5290     FND_MSG_PUB.ADD;
5291     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5292 END get_matching_contact_points;
5293 
5294    /**********************************************************
5295    This procedure finds the score details for a specific party that 
5296    matched 
5297 
5298    **********************************************************/
5299 
5300 PROCEDURE get_score_details (
5301         p_rule_id               IN      NUMBER,
5302         p_party_id              IN      NUMBER,
5303         p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
5304         p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
5305         p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
5306         p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
5307         x_search_ctx_id         IN OUT  NUMBER
5308 ) IS
5309 
5310   -- Strings to hold the generated Intermedia query strings
5311   l_party_contains_str VARCHAR2(32000); 
5312   l_party_site_contains_str VARCHAR2(32000);
5313   l_contact_contains_str VARCHAR2(32000);
5314   l_contact_pt_contains_str VARCHAR2(32000);
5315   l_tmp VARCHAR2(32000);
5316 
5317   -- Other local variables
5318   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5319   -- For Score calculation
5320   l_max_score NUMBER;
5321   l_entered_max_score NUMBER;
5322   FIRST BOOLEAN;
5323   l_search_ctx_id NUMBER; -- Generated Search Context ID
5324 
5325   l_TX2 VARCHAR2(2000);
5326   l_max_TX2 VARCHAR2(2000);
5327   l_TX46 VARCHAR2(2000);
5328   l_max_TX46 VARCHAR2(2000);
5329   l_TX4 VARCHAR2(2000);
5330   l_max_TX4 VARCHAR2(2000);
5331   l_TX11 VARCHAR2(2000);
5332   l_max_TX11 VARCHAR2(2000);
5333   l_TX45 VARCHAR2(2000);
5334   l_max_TX45 VARCHAR2(2000);
5335   H_SCORES HZ_PARTY_SEARCH.score_list;
5336 
5337   l_score NUMBER;
5338   l_match_idx NUMBER;
5339   l_idx NUMBER;
5340   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5341   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5342   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5343   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5344   l_party_id NUMBER;
5345   l_ps_party_id NUMBER;
5346   l_ct_party_id NUMBER;
5347   l_cpt_party_id NUMBER;
5348   l_cpt_ps_id NUMBER;
5349   l_cpt_contact_id NUMBER;
5350   l_cpt_type VARCHAR2(100);
5351   l_party_site_id NUMBER;
5352   l_org_contact_id NUMBER;
5353   l_contact_pt_id NUMBER;
5354   l_ps_contact_id NUMBER;
5355   l_max_id NUMBER;
5356   l_max_idx NUMBER;
5357 
5358   l_index NUMBER;
5359   l_party_max_score NUMBER;
5360   l_ps_max_score NUMBER;
5361   l_contact_max_score NUMBER;
5362   l_cpt_max_score NUMBER;
5363 
5364   --Fix for bug 4417124 
5365   l_use_contact_addr_info BOOLEAN:=TRUE;
5366   l_use_contact_cpt_info  BOOLEAN:=TRUE;
5367   l_TX35_new VARCHAR2(4000);
5368 
5369   BEGIN
5370 
5371     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5372       hz_utility_v2pub.debug(p_message=>'get_score_details(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5373     END IF;
5374     -- ************************************
5375     -- STEP 1. Initialization and error checks
5376 
5377     l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,' OR ', l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5378     g_score_until_thresh := false;
5379     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5380     -- ************************************************************
5381     -- STEP 2. Setup of intermedia query strings for Acquisition query
5382     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5383     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5384     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5385     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
5386 
5387     -- Setup Search Context ID
5388     IF x_search_ctx_id IS NULL THEN
5389       SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5390       x_search_ctx_id := l_search_ctx_id;
5391     ELSE
5392       l_search_ctx_id := x_search_ctx_id;
5393     END IF;
5394 
5395     open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);
5396     LOOP 
5397         FETCH l_party_cur INTO
5398            l_party_id , l_TX4, l_TX45, l_TX46;
5399         EXIT WHEN l_party_cur%NOTFOUND;
5400           INSERT_PARTY_SCORE(p_party_id, p_party_id, l_search_ctx_id, p_party_search_rec, g_party_stage_rec, l_TX4,l_TX45,l_TX46,1);
5401     END LOOP;
5402     CLOSE l_party_cur;
5403 
5404     IF l_party_site_contains_str IS NOT NULL THEN
5405       l_max_score := 0;
5406       l_max_id := 0;
5407       l_max_idx := 0;
5408       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_addr_info THEN
5409         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'Y','N',l_party_site_cur);
5410       ELSE
5411         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'N','N',l_party_site_cur);
5412       END IF;
5413       LOOP
5414         FETCH l_party_site_cur INTO 
5415             l_party_site_id, l_ps_party_id,l_ps_contact_id , l_TX4, l_TX11;
5416         EXIT WHEN l_party_site_cur%NOTFOUND;
5417         l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX11);
5418         IF l_score > l_max_score THEN
5419           l_max_score := l_score;
5420           l_max_id := l_party_site_id;
5421           l_max_idx := l_match_idx;
5422           l_max_TX4 := l_TX4;
5423           l_max_TX11 := l_TX11;
5424         END IF;
5425       END LOOP;
5426       CLOSE l_party_site_cur;
5427       IF l_max_score>0 THEN
5428         INSERT_PARTY_SITES_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_party_site_list(l_max_idx), g_party_site_stage_list(l_max_idx) ,l_max_TX4,l_max_TX11,l_max_idx);
5429       END IF;
5430     END IF;
5431 
5432     IF l_contact_contains_str IS NOT NULL THEN
5433       l_max_score := 0;
5434       l_max_id := 0;
5435       l_max_idx := 0;
5436       open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);
5437       LOOP
5438         FETCH l_contact_cur INTO 
5439             l_org_contact_id, l_ct_party_id ;
5440         EXIT WHEN l_contact_cur%NOTFOUND;
5441         l_score := GET_CONTACTS_SCORE(l_match_idx);
5442         IF l_score > l_max_score THEN
5443           l_max_score := l_score;
5444           l_max_id := l_org_contact_id;
5445           l_max_idx := l_match_idx;
5446         END IF;
5447       END LOOP;
5448       CLOSE l_contact_cur;
5449       IF l_max_score>0 THEN
5450         INSERT_CONTACTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_list(l_max_idx), g_contact_stage_list(l_max_idx) ,l_max_idx);
5451       END IF;
5452     END IF;
5453 
5454     IF l_contact_pt_contains_str IS NOT NULL THEN
5455       l_max_score := 0;
5456       l_max_id := 0;
5457       l_max_idx := 0;
5458       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_cpt_info THEN
5459         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'Y','N',l_contact_pt_cur);
5460       ELSE
5461         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'N','N',l_contact_pt_cur);
5462       END IF;
5463       LOOP
5464         FETCH l_contact_pt_cur INTO 
5465             l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id , l_TX2;
5466         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5467         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
5468         IF l_score > l_max_score THEN
5469           l_max_score := l_score;
5470           l_max_id := l_contact_pt_id;
5471           l_max_idx := l_match_idx;
5472           l_max_TX2 := l_TX2;
5473         END IF;
5474       END LOOP;
5475       IF l_max_score>0 THEN
5476         INSERT_CONTACT_POINTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_point_list(l_max_idx), g_contact_pt_stage_list(l_max_idx) ,l_max_TX2,l_max_idx);
5477       END IF;
5478       CLOSE l_contact_pt_cur;
5479     END IF;
5480     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5481       hz_utility_v2pub.debug(p_message=>'get_score_details(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5482     END IF;
5483 EXCEPTION
5484   WHEN FND_API.G_EXC_ERROR THEN
5485     RAISE FND_API.G_EXC_ERROR;
5486   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5487     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5488   WHEN OTHERS THEN
5489     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5490     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.get_score_details');
5491     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5492     FND_MSG_PUB.ADD;
5493     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5494 END get_score_details;
5495 
5496 
5497 /************************************************
5498   This procedure retrieves the match rule attributes into 
5499   the search record structures
5500 ************************************************/
5501 
5502 PROCEDURE get_party_for_search (
5503         p_party_id              IN      NUMBER,
5504         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
5505         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
5506         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
5507         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5508 ) IS
5509   l_party_id NUMBER;
5510   l_party_site_ids HZ_PARTY_SEARCH.IDList;
5511   l_contact_ids HZ_PARTY_SEARCH.IDList;
5512   l_contact_pt_ids HZ_PARTY_SEARCH.IDList;
5513   ps NUMBER :=1;
5514   cpt NUMBER :=1;
5515   ct NUMBER :=1;
5516   l_use_contact_info varchar2(1);
5517 BEGIN
5518 
5519     l_use_contact_info := 'Y';
5520   IF nvl(FND_PROFILE.VALUE('HZ_DQM_REL_PARTY_MATCH'),'N')='Y' THEN
5521     l_use_contact_info := 'N';
5522   END IF;
5523   l_party_id := p_party_id;
5524   FOR PARTY_SITES IN (
5525  SELECT party_site_id FROM (
5526      SELECT party_site_id,identifying_address_flag
5527       FROM HZ_PARTY_SITES
5528       WHERE party_id = p_party_id
5529       AND (status is null OR status = 'A') 
5530       AND identifying_address_flag='Y'
5531       UNION
5532 
5533      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5534       FROM HZ_PARTY_SITES
5535       WHERE party_id = p_party_id
5536       AND (status is null OR status = 'A') 
5537       AND (identifying_address_flag IS NULL OR identifying_address_flag = 'N')
5538       AND ROWNUM<6
5539       UNION
5540 
5541      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5542       FROM HZ_PARTY_SITES
5543       WHERE (status is null OR status = 'A') 
5544       AND party_id in (
5545         SELECT party_id
5546         FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
5547         WHERE HZ_RELATIONSHIPS.object_id = p_party_id
5548         AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5549         AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5550         AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5551         and l_use_contact_info = 'Y'
5552      ) 
5553      AND ROWNUM<6
5554 ) order by identifying_address_flag desc
5555     ) LOOP
5556       l_party_site_ids(ps) := PARTY_SITES.party_site_id;
5557       ps:=ps+1;
5558   END LOOP;
5559     FOR CONTACT_POINTS IN (
5560       SELECT CONTACT_POINT_ID
5561       FROM HZ_CONTACT_POINTS 
5562       WHERE PRIMARY_FLAG = 'Y'
5563       AND owner_table_name = 'HZ_PARTIES'
5564       AND owner_table_id = p_party_id
5565 
5566       UNION
5567 
5568       SELECT CONTACT_POINT_ID
5569       FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS 
5570       WHERE PRIMARY_FLAG = 'Y'
5571       AND owner_table_name = 'HZ_PARTIES'
5572       AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id
5573       AND HZ_RELATIONSHIPS.object_id = p_party_id
5574       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5575       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5576       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5577         and l_use_contact_info = 'Y'
5578       AND ROWNUM<6
5579       UNION
5580 
5581       SELECT CONTACT_POINT_ID
5582       FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES  
5583       WHERE PRIMARY_FLAG = 'Y'
5584       AND owner_table_name = 'HZ_PARTY_SITES'
5585       AND owner_table_id = party_site_id 
5586       AND PARTY_ID = p_party_id 
5587       AND IDENTIFYING_ADDRESS_FLAG = 'Y') LOOP
5588       l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;
5589       cpt := cpt+1;
5590     END LOOP;
5591     get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,
5592           x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);
5593 EXCEPTION
5594   WHEN FND_API.G_EXC_ERROR THEN
5595     RAISE FND_API.G_EXC_ERROR;
5596   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5597     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5598   WHEN OTHERS THEN
5599     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5600     FND_MESSAGE.SET_TOKEN('PROC','get_party_for_search');
5601     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5602     FND_MSG_PUB.ADD;
5603     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5604 END get_party_for_search;
5605 
5606 PROCEDURE get_search_criteria (
5607         p_party_id              IN      NUMBER,
5608         p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,
5609         p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,
5610         p_contact_pt_ids        IN      HZ_PARTY_SEARCH.IDList,
5611         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
5612         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
5613         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
5614         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5615 ) IS
5616 BEGIN
5617 
5618    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5619       hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - get_search_criteria',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5620     END IF;
5621     IF p_party_id IS NOT NULL THEN
5622    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5623       hz_utility_v2pub.debug(p_message=>'Before Calling Procedure - get_party_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5624     END IF;
5625       get_party_rec(p_party_id, x_party_search_rec);
5626     END IF;
5627     IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN
5628    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5629       hz_utility_v2pub.debug(p_message=>'Before Calling Procedure - get_party_site_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5630     END IF;
5631       get_party_site_rec(p_party_site_ids, x_party_site_list);
5632     END IF;
5633     IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN
5634    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5635       hz_utility_v2pub.debug(p_message=>'Before Calling Procedure - get_contact_point_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5636     END IF;
5637       get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);
5638     END IF;
5639 EXCEPTION
5640   WHEN FND_API.G_EXC_ERROR THEN
5641     RAISE FND_API.G_EXC_ERROR;
5642   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5643     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5644   WHEN OTHERS THEN
5645     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5646     FND_MESSAGE.SET_TOKEN('PROC','get_search_criteria');
5647     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5648     FND_MSG_PUB.ADD;
5649     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5650 END get_search_criteria;
5651 
5652 
5653 /************************************************
5654   This procedure retrieves the match rule party attributes into 
5655   the party search record structure 
5656 ************************************************/
5657 
5658 PROCEDURE get_party_rec (
5659         p_party_id              IN      NUMBER,
5660         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type
5661 ) IS
5662     l_party_type VARCHAR2(255);
5663 BEGIN
5664 
5665    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5666       hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_party_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5667     END IF;
5668     SELECT PARTY_TYPE INTO l_party_type
5669     FROM HZ_PARTIES
5670     WHERE PARTY_ID = p_party_id;
5671 
5672    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5673       hz_utility_v2pub.debug(p_message=>'l_party_type is -  '||l_party_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5674     END IF;
5675     IF l_party_type = 'ORGANIZATION' THEN
5676       SELECT 
5677         translate(HZ_ORGANIZATION_PROFILES.JGZZ_FISCAL_CODE, '%',' ')
5678        ,translate(HZ_PARTIES.PARTY_NAME, '%',' ')
5679        ,translate(HZ_ORGANIZATION_PROFILES.SIC_CODE, '%',' ')
5680       INTO 
5681         x_party_search_rec.JGZZ_FISCAL_CODE
5682        ,x_party_search_rec.PARTY_NAME
5683        ,x_party_search_rec.SIC_CODE
5684       FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES
5685       WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id
5686       AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL
5687       AND HZ_PARTIES.party_id = p_party_id;
5688     ELSIF l_party_type = 'PERSON' THEN
5689       SELECT 
5690         translate(HZ_PERSON_PROFILES.JGZZ_FISCAL_CODE, '%',' ')
5691        ,translate(HZ_PARTIES.PARTY_NAME, '%',' ')
5692       INTO 
5693         x_party_search_rec.JGZZ_FISCAL_CODE
5694        ,x_party_search_rec.PARTY_NAME
5695       FROM HZ_PARTIES, HZ_PERSON_PROFILES
5696       WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id
5697       AND HZ_PERSON_PROFILES.effective_end_date is NULL
5698       AND HZ_PARTIES.party_id = p_party_id;
5699     END IF;
5700     x_party_search_rec.PARTY_TYPE := l_party_type;
5701    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5702       hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5703     END IF;
5704 
5705 EXCEPTION
5706   WHEN OTHERS THEN
5707     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5708     FND_MESSAGE.SET_TOKEN('PROC','get_party_rec');
5709     FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_id);
5710     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5711     FND_MSG_PUB.ADD;
5712     RAISE FND_API.G_EXC_ERROR;
5713 END get_party_rec;
5714 
5715 /************************************************
5716   This procedure retrieves the match rule party site attributes into 
5717   the party site search record structure 
5718 ************************************************/
5719 
5720 PROCEDURE get_party_site_rec (
5721         p_party_site_ids       IN      HZ_PARTY_SEARCH.IDList,
5722         x_party_site_list      OUT NOCOPY HZ_PARTY_SEARCH.party_site_list
5723 ) IS
5724   CURSOR c_party_sites(cp_party_site_id NUMBER) IS
5725     SELECT party_site_id
5726       ,translate(HZ_LOCATIONS.POSTAL_CODE, '%',' ')
5727     FROM HZ_PARTY_SITES, HZ_LOCATIONS
5728     WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id
5729     AND   HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;
5730 
5731   I NUMBER;
5732   J NUMBER:=1;
5733   l_party_site_id NUMBER;
5734 
5735 BEGIN
5736 
5737    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5738       hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_party_site_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5739     END IF;
5740     FOR I IN 1..p_party_site_ids.COUNT LOOP
5741       l_party_site_id := p_party_site_ids(I);
5742       OPEN c_party_sites(p_party_site_ids(I));
5743       LOOP
5744         FETCH c_party_sites INTO
5745              l_party_site_id
5746            ,x_party_site_list(J).POSTAL_CODE
5747         ;
5748         EXIT WHEN c_party_sites%NOTFOUND;
5749 
5750    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5751       hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5752     END IF;
5753         x_party_site_list(J).ADDRESS:=
5754        HZ_PARTY_ACQUIRE.get_address(l_party_site_id , 'PARTY_SITES','ADDRESS');
5755         J:=J+1;
5756 
5757       END LOOP;
5758       CLOSE c_party_sites;
5759     END LOOP;
5760 
5761 EXCEPTION
5762   WHEN OTHERS THEN
5763     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5764     FND_MESSAGE.SET_TOKEN('PROC','get_party_site_rec');
5765     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_party_site_id);
5766     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5767     FND_MSG_PUB.ADD;
5768     RAISE FND_API.G_EXC_ERROR;
5769 END get_party_site_rec;
5770 
5771 /************************************************
5772   This procedure retrieves the match rule contact attributes into 
5773   the contact search record structure 
5774 ************************************************/
5775 
5776 PROCEDURE get_contact_rec (
5777         p_contact_ids       IN      HZ_PARTY_SEARCH.IDList,
5778         x_contact_list      OUT NOCOPY HZ_PARTY_SEARCH.contact_list
5779 ) IS
5780   CURSOR c_contacts(cp_org_contact_id NUMBER) IS
5781     SELECT org_contact_id
5782     FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES
5783     WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id
5784     AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5785     AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5786     AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
5787     AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5788     AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id
5789     AND HZ_PERSON_PROFILES.effective_end_date IS NULL;
5790 
5791   I NUMBER;
5792   l_org_contact_id NUMBER;
5793   J NUMBER:=1;
5794   BEGIN
5795 
5796    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5797       hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_contact_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5798     END IF;
5799     FOR I IN 1..p_contact_ids.COUNT LOOP
5800       l_org_contact_id := p_contact_ids(I);
5801       OPEN c_contacts(p_contact_ids(I));
5802       LOOP
5803         FETCH c_contacts INTO
5804              l_org_contact_id
5805         ;
5806         EXIT WHEN c_contacts%NOTFOUND;
5807 
5808    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5809       hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5810     END IF;
5811 
5812         J:=J+1;
5813       END LOOP;
5814       CLOSE c_contacts;
5815     END LOOP;
5816 
5817 EXCEPTION
5818   WHEN OTHERS THEN
5819     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5820     FND_MESSAGE.SET_TOKEN('PROC','get_contact_rec');
5821     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_org_contact_id);
5822     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5823     FND_MSG_PUB.ADD;
5824     RAISE FND_API.G_EXC_ERROR;
5825 END get_contact_rec;
5826 
5827 /************************************************
5828   This procedure retrieves the match rule contact point attributes into 
5829   the contact point search record structure 
5830 ************************************************/
5831 
5832 PROCEDURE get_contact_point_rec (
5833         p_contact_point_ids     IN  HZ_PARTY_SEARCH.IDList,
5834         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5835 ) IS
5836 
5837   -- Cursor to fetch primary contact points for party
5838   CURSOR c_cpts(cp_contact_point_id NUMBER) IS
5839     SELECT contact_point_id, contact_point_type
5840       ,translate(HZ_CONTACT_POINTS.PHONE_NUMBER, '%',' ')
5841     FROM HZ_CONTACT_POINTS
5842     WHERE contact_point_id = cp_contact_point_id;
5843 
5844   I NUMBER;
5845   l_contact_point_id NUMBER;
5846   J NUMBER:=1;
5847   BEGIN
5848 
5849    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5850       hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_contact_point_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5851     END IF;
5852     FOR I in 1..p_contact_point_ids.COUNT LOOP
5853       l_contact_point_id := p_contact_point_ids(I);
5854       OPEN c_cpts(p_contact_point_ids(I));
5855       LOOP
5856         FETCH c_cpts INTO
5857              l_contact_point_id, x_contact_point_list(J).contact_point_type
5858              ,x_contact_point_list(J).PHONE_NUMBER
5859         ;
5860         EXIT WHEN c_cpts%NOTFOUND;
5861 
5862    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5863       hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5864     END IF;
5865         J:=J+1;
5866 
5867       END LOOP;
5868       CLOSE c_cpts;
5869     END LOOP;
5870 
5871 EXCEPTION
5872   WHEN OTHERS THEN
5873     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5874     FND_MESSAGE.SET_TOKEN('PROC','get_contact_point_rec');
5875     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_contact_point_id);
5876     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5877     FND_MSG_PUB.ADD;
5878     RAISE FND_API.G_EXC_ERROR;
5879 END get_contact_point_rec;
5880 
5881 /************************************************
5882   This procedure maps a search record from the logical
5883   record structure to the stage schema structure 
5884   for the PARTY Entity after applying 
5885   the defined transformations
5886 ************************************************/
5887 
5888 PROCEDURE MAP_PARTY_REC( 
5889     p_search_ctx IN BOOLEAN,
5890     p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, 
5891     x_entered_max_score OUT NUMBER,
5892     x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type
5893   ) IS 
5894   tmp VARCHAR2(4000);
5895   l_party_name VARCHAR2(4000);
5896 BEGIN
5897    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5898       hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_PARTY_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5899     END IF;
5900    IF p_search_ctx THEN
5901      x_stage_rec.TX8 := NULL;
5902      g_other_party_level_attribs:=FALSE;
5903     IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL 
5904     OR p_search_rec.SIC_CODE IS NOT NULL 
5905     THEN
5906       g_other_party_level_attribs:=TRUE;
5907     END IF;
5908      x_entered_max_score:=0;
5909     IF p_search_rec.PARTY_NAME IS NOT NULL THEN 
5910       x_entered_max_score := x_entered_max_score+200;
5911     END IF;
5912     IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
5913       x_entered_max_score := x_entered_max_score+300;
5914     END IF;
5915     IF p_search_rec.SIC_CODE IS NOT NULL THEN 
5916       x_entered_max_score := x_entered_max_score+60;
5917     END IF;
5918     END IF;
5919   IF p_search_ctx THEN
5920     IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
5921       x_stage_rec.TX45 := 
5922         HZ_TRANS_PKG.RM_SPLCHAR(
5923              p_search_rec.JGZZ_FISCAL_CODE
5924              ,null,'JGZZ_FISCAL_CODE'
5925              ,'PARTY','SEARCH');
5926     ELSE
5927       x_stage_rec.TX45 := '';
5928     END IF;
5929   ELSE
5930     IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
5931       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
5932              x_stage_rec.TX45
5933              ,null,'JGZZ_FISCAL_CODE'
5934              ,'PARTY','SCORE');
5935       IF tmp IS NOT NULL THEN
5936         x_stage_rec.TX45 := tmp;
5937       END IF;
5938     END IF;
5939   END IF;
5940   IF p_search_ctx THEN
5941     IF p_search_rec.PARTY_NAME IS NOT NULL THEN 
5942       x_stage_rec.TX4 := 
5943         HZ_TRANS_PKG.WRNAMES_CLEANSE(
5944              p_search_rec.PARTY_NAME
5945              ,null,'PARTY_NAME'
5946              ,'PARTY','SEARCH');
5947     ELSE
5948       x_stage_rec.TX4 := '';
5949     END IF;
5950   ELSE
5951     IF p_search_rec.PARTY_NAME IS NOT NULL THEN 
5952       tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
5953              x_stage_rec.TX4
5954              ,null,'PARTY_NAME'
5955              ,'PARTY','SCORE');
5956       IF tmp IS NOT NULL THEN
5957         x_stage_rec.TX4 := tmp;
5958       END IF;
5959     END IF;
5960   END IF;
5961   IF p_search_ctx THEN
5962     IF p_search_rec.PARTY_TYPE IS NOT NULL THEN 
5963       x_stage_rec.TX36 := 
5964         HZ_TRANS_PKG.EXACT(
5965              p_search_rec.PARTY_TYPE
5966              ,null,'PARTY_TYPE'
5967              ,'PARTY');
5968     ELSE
5969       x_stage_rec.TX36 := '';
5970     END IF;
5971   END IF;
5972   IF p_search_ctx THEN
5973     IF p_search_rec.SIC_CODE IS NOT NULL THEN 
5974       x_stage_rec.TX46 := 
5975         HZ_TRANS_PKG.EXACT(
5976              p_search_rec.SIC_CODE
5977              ,null,'SIC_CODE'
5978              ,'PARTY');
5979     ELSE
5980       x_stage_rec.TX46 := '';
5981     END IF;
5982   END IF;
5983     l_party_name := p_search_rec.PARTY_NAME;
5984     IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
5985       l_party_name := p_search_rec.PARTY_ALL_NAMES;
5986     END IF;
5987     IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN
5988       x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,'PARTY_NAME','PARTY','SEARCH');
5989     END IF;
5990 EXCEPTION
5991   WHEN OTHERS THEN
5992     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
5993     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_REC');
5994     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
5995     FND_MSG_PUB.ADD;
5996     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5997 END;
5998 
5999 
6000 /************************************************
6001   This procedure maps a search record from the logical
6002   record structure to the stage schema structure 
6003   for the PARTY_SITES Entity after applying 
6004   the defined transformations
6005 ************************************************/
6006 
6007 PROCEDURE MAP_PARTY_SITE_REC( 
6008     p_search_ctx IN BOOLEAN,
6009     p_search_list IN HZ_PARTY_SEARCH.party_site_list, 
6010     x_entered_max_score OUT NUMBER,
6011     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list
6012   ) IS 
6013   l_current_max_score NUMBER;
6014   tmp VARCHAR2(4000);
6015 BEGIN
6016    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6017       hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_PARTY_SITE_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6018     END IF;
6019    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6020       hz_utility_v2pub.debug(p_message=>'p_entity - PARTY_SITES',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6021     END IF;
6022   IF p_search_ctx THEN
6023    g_ps_den_only:=TRUE;
6024     x_entered_max_score:=0;
6025     FOR I IN 1..p_search_list.COUNT LOOP
6026       l_current_max_score:=0;
6027       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6028         l_current_max_score := l_current_max_score+80;
6029         g_ps_den_only:=FALSE;
6030       END IF;
6031       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6032         l_current_max_score := l_current_max_score+80;
6033       END IF;
6034       IF l_current_max_score>x_entered_max_score THEN
6035         x_entered_max_score:=l_current_max_score;
6036       END IF;
6037     END LOOP;
6038   END IF;
6039   FOR I IN 1..p_search_list.COUNT LOOP
6040     IF p_search_ctx THEN
6041       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6042         x_stage_list(I).TX4 := 
6043           HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6044              p_search_list(I).ADDRESS
6045              ,null,'ADDRESS'
6046              ,'PARTY_SITES','SEARCH');
6047       ELSE
6048         x_stage_list(I).TX4 := '';
6049       END IF;
6050     ELSE
6051       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6052         tmp := HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6053              x_stage_list(I).TX4
6054              ,null,'ADDRESS'
6055              ,'PARTY_SITES','SCORE');
6056         IF tmp IS NOT NULL THEN
6057           x_stage_list(I).TX4 := tmp;
6058         END IF;
6059       END IF;
6060     END IF;
6061   END LOOP;
6062   FOR I IN 1..p_search_list.COUNT LOOP
6063     IF p_search_ctx THEN
6064       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6065         x_stage_list(I).TX11 := 
6066           HZ_TRANS_PKG.RM_SPLCHAR(
6067              p_search_list(I).POSTAL_CODE
6068              ,null,'POSTAL_CODE'
6069              ,'PARTY_SITES','SEARCH');
6070       ELSE
6071         x_stage_list(I).TX11 := '';
6072       END IF;
6073     ELSE
6074       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6075         tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6076              x_stage_list(I).TX11
6077              ,null,'POSTAL_CODE'
6078              ,'PARTY_SITES','SCORE');
6079         IF tmp IS NOT NULL THEN
6080           x_stage_list(I).TX11 := tmp;
6081         END IF;
6082       END IF;
6083     END IF;
6084   END LOOP;
6085 EXCEPTION
6086   WHEN OTHERS THEN
6087     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6088     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_SITE_REC');
6089     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6090     FND_MSG_PUB.ADD;
6091     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6092 END;
6093 
6094 
6095 /************************************************
6096   This procedure maps a search record from the logical
6097   record structure to the stage schema structure 
6098   for the CONTACTS Entity after applying 
6099   the defined transformations
6100 ************************************************/
6101 
6102 PROCEDURE MAP_CONTACT_REC( 
6103     p_search_ctx IN BOOLEAN,
6104     p_search_list IN HZ_PARTY_SEARCH.contact_list, 
6105     x_entered_max_score OUT NUMBER,
6106     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list
6107   ) IS 
6108   l_current_max_score NUMBER;
6109   tmp VARCHAR2(4000);
6110 BEGIN
6111    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6112       hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_CONTACT_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6113     END IF;
6114    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6115       hz_utility_v2pub.debug(p_message=>'p_entity - CONTACTS',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6116     END IF;
6117   IF p_search_ctx THEN
6118     x_entered_max_score:=0;
6119     FOR I IN 1..p_search_list.COUNT LOOP
6120       l_current_max_score:=0;
6121       IF l_current_max_score>x_entered_max_score THEN
6122         x_entered_max_score:=l_current_max_score;
6123       END IF;
6124     END LOOP;
6125   END IF;
6126   NULL;
6127 EXCEPTION
6128   WHEN OTHERS THEN
6129     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6130     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_REC');
6131     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6132     FND_MSG_PUB.ADD;
6133     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6134 END;
6135 
6136 
6137 /************************************************
6138   This procedure maps a search record from the logical
6139   record structure to the stage schema structure 
6140   for the CONTACT_POINTS Entity after applying 
6141   the defined transformations
6142 ************************************************/
6143 
6144 PROCEDURE MAP_CONTACT_POINT_REC( 
6145     p_search_ctx IN BOOLEAN,
6146     p_search_list IN HZ_PARTY_SEARCH.contact_point_list, 
6147     x_entered_max_score OUT NUMBER,
6148     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list
6149   ) IS 
6150   l_current_max_score NUMBER;
6151   tmp VARCHAR2(4000);
6152   TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);
6153   l_cnt_pt_type_index INDEX_VARCHAR100_TBL;
6154   TYPE CONTACT_PT_REC_TYPE IS RECORD (
6155   contact_pt_type		VARCHAR2(100),
6156   max_score    		NUMBER) ;
6157   TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;
6158   l_cnt_pt_type contact_pt_list;
6159   N NUMBER := 1;
6160   x_modify VARCHAR2(1);
6161 BEGIN
6162    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6163       hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_CONTACT_POINT_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6164     END IF;
6165    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6166       hz_utility_v2pub.debug(p_message=>'p_entity - CONTACT_POINTS',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6167     END IF;
6168   IF p_search_ctx THEN
6169     x_entered_max_score:=0;
6170     FOR I IN 1..p_search_list.COUNT LOOP
6171       l_current_max_score:=0;
6172       x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;
6173       IF p_search_list(I).PHONE_NUMBER IS NOT NULL THEN 
6174         l_current_max_score := l_current_max_score+70;
6175       END IF;
6176       x_modify := 'N';
6177       FOR J IN 1..l_cnt_pt_type.count LOOP
6178       if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then
6179          x_modify := 'Y';
6180       IF l_cnt_pt_type(J).max_score<l_current_max_score THEN
6181       l_cnt_pt_type(J).max_score :=l_current_max_score;
6182       EXIT;
6183       END IF;
6184       end if;
6185       END LOOP;
6186       if x_modify='N' then
6187       l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;
6188       l_cnt_pt_type(N).max_score := l_current_max_score;
6189       N:= N+1;
6190       end if;
6191     END LOOP;
6192    FOR M IN 1..l_cnt_pt_type.count LOOP
6193    x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;
6194    END LOOP;
6195   END IF;
6196   FOR I IN 1..p_search_list.COUNT LOOP
6197     IF p_search_ctx THEN
6198       IF p_search_list(I).PHONE_NUMBER IS NOT NULL THEN 
6199         x_stage_list(I).TX2 := 
6200           HZ_TRANS_PKG.RM_SPLCHAR(
6201              p_search_list(I).PHONE_NUMBER
6202              ,null,'PHONE_NUMBER'
6203              ,'CONTACT_POINTS','SEARCH');
6204       ELSE
6205         x_stage_list(I).TX2 := '';
6206       END IF;
6207     ELSE
6208       IF p_search_list(I).PHONE_NUMBER IS NOT NULL THEN 
6209         tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6210              x_stage_list(I).TX2
6211              ,null,'PHONE_NUMBER'
6212              ,'CONTACT_POINTS','SCORE');
6213         IF tmp IS NOT NULL THEN
6214           x_stage_list(I).TX2 := tmp;
6215         END IF;
6216       END IF;
6217     END IF;
6218   END LOOP;
6219 EXCEPTION
6220   WHEN OTHERS THEN
6221     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6222     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_POINT_REC');
6223     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6224     FND_MSG_PUB.ADD;
6225     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6226 END;
6227 
6228 
6229 /************************************************
6230   This procedure checks if the input search criteria 
6231   is valid. It checks if : 
6232    1. At least one primary condition is passed
6233    2. Contact Point Type is not null for each condition
6234 ************************************************/
6235 
6236 FUNCTION check_prim_cond(
6237       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
6238       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
6239       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
6240       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list)
6241       RETURN BOOLEAN IS
6242   BEGIN
6243     FOR I IN 1..p_contact_point_list.COUNT LOOP
6244       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (
6245 p_contact_point_list(I).PHONE_NUMBER IS NOT NULL 
6246  ) THEN
6247         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
6248         FND_MSG_PUB.ADD;
6249         RAISE FND_API.G_EXC_ERROR;
6250       END IF;
6251     END LOOP;
6252 
6253     IF p_party_search_rec.PARTY_NAME IS NOT NULL THEN 
6254       RETURN TRUE;
6255     END IF;
6256     IF p_party_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
6257       RETURN TRUE;
6258     END IF;
6259     IF p_party_search_rec.SIC_CODE IS NOT NULL THEN 
6260       RETURN TRUE;
6261     END IF;
6262     FOR I IN 1..p_party_site_list.COUNT LOOP
6263       IF p_party_site_list(I).ADDRESS IS NOT NULL THEN 
6264         RETURN TRUE;
6265       END IF;
6266     END LOOP;
6267     FOR I IN 1..p_party_site_list.COUNT LOOP
6268       IF p_party_site_list(I).POSTAL_CODE IS NOT NULL THEN 
6269         RETURN TRUE;
6270       END IF;
6271     END LOOP;
6272     FOR I IN 1..p_contact_point_list.COUNT LOOP
6273       IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL THEN 
6274         RETURN TRUE;
6275       END IF;
6276     END LOOP;
6277     RETURN FALSE;
6278 EXCEPTION
6279   WHEN FND_API.G_EXC_ERROR THEN
6280     RAISE FND_API.G_EXC_ERROR;
6281   WHEN OTHERS THEN
6282     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6283     FND_MESSAGE.SET_TOKEN('PROC','check_prim_cond');
6284     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6285     FND_MSG_PUB.ADD;
6286     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6287   END check_prim_cond;
6288 
6289 /************************************************
6290   This procedure checks if the input search condition 
6291   has party site criteria. 
6292 ************************************************/
6293 
6294 PROCEDURE check_party_site_cond(
6295       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
6296       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
6297 	   x_secondary		   OUT     BOOLEAN,
6298 	   x_primary		   OUT     BOOLEAN
6299 ) IS
6300   BEGIN
6301     x_primary:= FALSE;
6302     x_secondary:= FALSE;
6303     FOR I IN 1..p_party_site_list.COUNT LOOP
6304       IF p_party_site_list(I).ADDRESS IS NOT NULL 
6305          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
6306       THEN
6307         x_primary := TRUE;
6308       END IF;
6309       EXIT WHEN x_primary;
6310     END LOOP;
6311     FOR I IN 1..p_contact_point_list.COUNT LOOP
6312       IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL 
6313       THEN
6314         x_primary := TRUE;
6315       END IF;
6316       EXIT WHEN x_primary;
6317     END LOOP;
6318 
6319     FOR I IN 1..p_party_site_list.COUNT LOOP
6320       IF p_party_site_list(I).ADDRESS IS NOT NULL 
6321          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
6322       THEN
6323         x_secondary := TRUE;
6324       END IF;
6325       EXIT WHEN x_secondary;
6326     END LOOP;
6327     FOR I IN 1..p_contact_point_list.COUNT LOOP
6328       IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL 
6329       THEN
6330         x_secondary := TRUE;
6331       END IF;
6332       EXIT WHEN x_secondary;
6333     END LOOP;
6334 EXCEPTION
6335   WHEN OTHERS THEN
6336     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6337     FND_MESSAGE.SET_TOKEN('PROC','check_party_site_cond');
6338     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6339     FND_MSG_PUB.ADD;
6340     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6341   END check_party_site_cond;
6342 
6343 /************************************************
6344   This procedure checks if the input search condition 
6345   has contact criteria. 
6346 ************************************************/
6347 
6348 PROCEDURE check_contact_cond(
6349       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
6350       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
6351       x_secondary             OUT     BOOLEAN,
6352       x_primary               OUT     BOOLEAN
6353 ) IS
6354   BEGIN
6355     x_primary:= FALSE;
6356     x_secondary:= FALSE;
6357     FOR I IN 1..p_contact_list.COUNT LOOP
6358       NULL;
6359     END LOOP;
6360 
6361     FOR I IN 1..p_contact_point_list.COUNT LOOP
6362       IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL 
6363       THEN
6364         x_primary := TRUE;
6365       END IF;
6366       EXIT WHEN x_primary;
6367     END LOOP;
6368 
6369     FOR I IN 1..p_contact_list.COUNT LOOP
6370       NULL;
6371     END LOOP;
6372 
6373     FOR I IN 1..p_contact_point_list.COUNT LOOP
6374       IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL 
6375       THEN
6376         x_secondary := TRUE;
6377       END IF;
6378       EXIT WHEN x_secondary;
6379     END LOOP;
6380 EXCEPTION
6381   WHEN OTHERS THEN
6382     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6383     FND_MESSAGE.SET_TOKEN('PROC','check_contact_cond');
6384     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6385     FND_MSG_PUB.ADD;
6386     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6387   END check_contact_cond;
6388 
6389 /************************************************
6390   This procedure checks if the input search condition 
6391   has valid contact point criteria. 
6392 ************************************************/
6393 
6394 PROCEDURE check_contact_point_cond(
6395       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
6396       x_secondary             OUT     BOOLEAN,
6397       x_primary               OUT     BOOLEAN
6398 ) IS
6399   BEGIN
6400     x_primary:= FALSE;
6401     x_secondary:= FALSE;
6402 
6403     FOR I IN 1..p_contact_point_list.COUNT LOOP
6404       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN 
6405         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
6406         FND_MSG_PUB.ADD;
6407         RAISE FND_API.G_EXC_ERROR;
6408       END IF;
6409     END LOOP;
6410 
6411     FOR I IN 1..p_contact_point_list.COUNT LOOP
6412       IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL 
6413       THEN
6414         x_primary := TRUE;
6415       END IF;
6416       EXIT WHEN x_primary;
6417     END LOOP;
6418     FOR I IN 1..p_contact_point_list.COUNT LOOP
6419       IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL  
6420       THEN
6421         x_secondary := TRUE;
6422       END IF;
6423       EXIT WHEN x_secondary;
6424     END LOOP;
6425 EXCEPTION
6426   WHEN OTHERS THEN
6427     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6428     FND_MESSAGE.SET_TOKEN('PROC','check_contact_point_cond');
6429     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6430     FND_MSG_PUB.ADD;
6431     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6432   END check_contact_point_cond;
6433 
6434 FUNCTION check_staged RETURN BOOLEAN IS
6435 
6436   CURSOR c_check_staged IS 
6437     SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL 
6438     WHERE nvl(STAGED_FLAG,'N') = 'N' 
6439     AND FUNCTION_ID in (
6440                 8
6441                 ,50
6442                 ,51
6443                 ,67
6444                 ,74
6445                 ,111
6446     );
6447   l_tmp NUMBER;
6448 BEGIN
6449   IF g_staged =  1 THEN
6450     RETURN TRUE;
6451   ELSIF g_staged = 0 THEN
6452     RETURN FALSE;
6453   END IF;
6454 
6455   OPEN c_check_staged;
6456   FETCH c_check_staged INTO l_tmp;
6457   IF c_check_staged%FOUND THEN
6458     CLOSE c_check_staged;
6459     g_staged := 0;
6460     RETURN FALSE;
6461   ELSE
6462     CLOSE c_check_staged;
6463     g_staged := 1;
6464     RETURN TRUE;
6465   END IF;
6466 END check_staged;
6467 
6468 -- Fix for Bug 4736139
6469 FUNCTION check_staged_var RETURN VARCHAR2 IS
6470   l_staged       VARCHAR2(1);
6471   l_staged_bool  BOOLEAN;
6472 BEGIN
6473   l_staged_bool := check_staged;
6474   IF l_staged_bool THEN
6475     l_staged := 'Y';
6476   ELSE
6477     l_staged := 'N';
6478   END IF;
6479   RETURN l_staged;
6480 END check_staged_var;
6481 -- End fix for Bug 4736139
6482 
6483 END;
6484