DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_61

Source


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