DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_32

Source


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