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  |      30-MAR-2009 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_ALL_NAMES' THEN
449 
450      l_matched_value := HZ_PARTY_ACQUIRE.get_known_as (p_record_id, p_entity,'PARTY_ALL_NAMES','Y');
451       RETURN l_matched_value;
452     END IF;
453   IF p_attribute = 'TAX_REFERENCE' THEN
454 
455       SELECT party_type INTO l_party_type 
456       FROM HZ_PARTIES
457       WHERE party_id = p_record_id;
458       IF l_party_type = 'ORGANIZATION' THEN
459         SELECT TAX_REFERENCE INTO l_matched_value 
460         FROM HZ_ORGANIZATION_PROFILES
461         WHERE party_id = p_record_id 
462         and effective_end_date is null
463         and rownum = 1;
464       ELSIF l_party_type = 'PERSON' THEN
465         SELECT TAX_REFERENCE INTO l_matched_value 
466         FROM HZ_PERSON_PROFILES
467         WHERE party_id = p_record_id 
468         and effective_end_date is null 
469         and rownum = 1;
470       END IF;
471       RETURN l_matched_value;
472     END IF;
473   IF p_attribute = 'PARTY_NUMBER' THEN
474 
475       SELECT party_type INTO l_party_type 
476       FROM HZ_PARTIES
477       WHERE party_id = p_record_id;
478       IF l_party_type = 'ORGANIZATION' THEN
479         SELECT PARTY_NUMBER INTO l_matched_value 
480         FROM HZ_PARTIES
481         WHERE party_id = p_record_id 
482         and rownum = 1;
483       ELSIF l_party_type = 'PERSON' THEN
484         SELECT PARTY_NUMBER INTO l_matched_value 
485         FROM HZ_PARTIES
486         WHERE party_id = p_record_id 
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.TX39, p_table_TX39,(50000*(p_idx-1)+43)) THEN
660       l_score :=60;
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       ELSIF l_current_score<48 AND 
665           HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX40, p_table_TX40,(50000*(p_idx-1)+44)) THEN
666       l_score :=48;
667    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
668       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);
669     END IF;
670       ELSIF l_current_score<36 AND 
671           HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX158, p_table_TX158,(50000*(p_idx-1)+123)) THEN
672       l_score :=36;
673    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
674       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);
675     END IF;
676       END IF;
677       IF l_score>0 THEN
678    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
679       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);
680     END IF;
681       l_attrib_value := get_attrib_val(p_record_id,'PARTY','PARTY_ALL_NAMES');
682    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
683       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);
684     END IF;
685       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
686                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
687       VALUES (
688            p_party_id,p_record_id,p_search_ctx_id,'PARTY_ALL_NAMES',
689            'PARTY', p_search_rec.PARTY_ALL_NAMES,
690            l_attrib_value,l_score);
691    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
692       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);
693     END IF;
694       END IF;
695      l_score :=0;
696       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX44, p_table_TX44,(50000*(p_idx-1)+49)) THEN
697       l_score :=100;
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','TAX_REFERENCE');
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,'TAX_REFERENCE',
714            'PARTY', p_search_rec.TAX_REFERENCE,
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.TX34, p_table_TX34,(50000*(p_idx-1)+38)) 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','PARTY_NUMBER');
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,'PARTY_NUMBER',
739            'PARTY', p_search_rec.PARTY_NUMBER,
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 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        END IF; 
2064      IF p_search_ctx_id IS NULL THEN
2065        l_sqlstr := 'SELECT   ' || l_hint || ' PARTY_ID , TX34, TX40, TX158, TX39, TX44, TX45, TX46, TX47'||
2066                    ' FROM HZ_STAGED_PARTIES stage'||
2067                    ' WHERE contains( concat_col, :cont)>0'||
2068                    ' AND ((:TX36 IS NULL OR :TX36||'' '' =  stage.TX36))'||
2069                    ' AND ('||p_restrict_sql||')' ||
2070                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2071           IF l_search_merged = 'Y' THEN  
2072                   l_sqlstr := l_sqlstr ;  
2073           ELSIF l_search_merged = 'I' THEN  
2074                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'', ''I'')';  
2075           ELSE  
2076                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'')';  
2077           END IF;  
2078  	   output_long_strings('----------------------------------------------------------');
2079       output_long_strings('Party Contains String = '||p_contains_str);
2080 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2081        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2082                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2083                     ,p_dup_party_id, p_dup_party_id;
2084      END IF;
2085    END IF;
2086   exception
2087     when others then
2088       if (instrb(SQLERRM,'DRG-51030')>0) then 
2089         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2090         FND_MSG_PUB.ADD;
2091         RAISE FND_API.G_EXC_ERROR;
2092       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2093         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2094         FND_MSG_PUB.ADD;
2095         RAISE FND_API.G_EXC_ERROR;
2096       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2097         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2098         FND_MSG_PUB.ADD;
2099         RAISE FND_API.G_EXC_ERROR;
2100       else 
2101         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2102     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2103     	 FND_MSG_PUB.ADD;
2104         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2105       end if;
2106   END;
2107 
2108   PROCEDURE open_party_site_cursor(
2109             p_dup_party_id NUMBER, 
2110             p_party_id NUMBER, 
2111             p_restrict_sql VARCHAR2, 
2112             p_contains_str  VARCHAR2, 
2113             p_search_ctx_id  NUMBER, 
2114             p_search_merged  VARCHAR2, 
2115             p_search_rel_sites  VARCHAR2, 
2116             p_person_api  VARCHAR2, 
2117             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
2118   l_sqlstr VARCHAR2(4000);
2119   l_hint VARCHAR2(100); 
2120   l_check NUMBER; 
2121   l_check_dt NUMBER; 
2122   l_search_merged VARCHAR2(1); 
2123   l_status_sql VARCHAR2(100); 
2124   p_restrict_sql1 VARCHAR2(4000); 
2125  
2126   BEGIN
2127    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2128       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);
2129       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);
2130     END IF;
2131      IF (p_search_merged is null) then 
2132         l_search_merged := 'N';  
2133      ELSE 
2134         l_search_merged := p_search_merged; 
2135      END IF; 
2136      IF p_party_id IS NOT NULL THEN
2137    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2138       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);
2139     END IF;
2140        IF p_search_rel_sites = 'N' THEN
2141          OPEN x_cursor FOR 
2142           SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX22
2143           FROM HZ_STAGED_PARTY_SITES stage
2144           WHERE contains( concat_col, p_contains_str)>0
2145           AND( (l_search_merged ='Y' )  
2146              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2147              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2148           AND stage.party_id = p_party_id; 
2149        ELSE
2150          OPEN x_cursor FOR 
2151           SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX22
2152           FROM HZ_STAGED_PARTY_SITES stage
2153           WHERE contains( concat_col, p_contains_str)>0
2154           AND( (l_search_merged ='Y' )  
2155             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2156             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2157           AND stage.party_id = p_party_id 
2158           UNION
2159           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
2160           FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc
2161           WHERE contains( concat_col, p_contains_str)>0
2162           AND( (l_search_merged ='Y' )  
2163             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2164             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2165           AND r.object_id = p_party_id 
2166           AND r.subject_id = stage.party_id 
2167           AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
2168           AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
2169           AND r.relationship_id = oc.party_relationship_id
2170           AND oc.org_contact_id = stage.org_contact_id; 
2171       END IF;
2172     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2173    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2174       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);
2175     END IF;
2176       IF p_search_ctx_id IS NULL THEN
2177    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2178       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);
2179     END IF;
2180         OPEN x_cursor FOR 
2181           SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX22
2182           FROM HZ_STAGED_PARTY_SITES stage
2183         WHERE contains( concat_col, p_contains_str)>0
2184         AND EXISTS (
2185           SELECT 1 FROM HZ_STAGED_PARTIES p
2186           WHERE p.PARTY_ID = stage.PARTY_ID
2187           AND( (l_search_merged ='Y' )  
2188           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2189           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2190           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2191           AND( (l_search_merged ='Y' )  
2192            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2193            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2194           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2195       ELSE
2196    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2197       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);
2198     END IF;
2199         IF p_person_api = 'Y' THEN
2200           OPEN x_cursor FOR 
2201             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX22
2202             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
2203             WHERE contains( concat_col, p_contains_str)>0
2204           AND( (l_search_merged ='Y' )  
2205           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2206           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2207             AND d.search_context_id = p_search_ctx_id
2208             AND d.party_id = stage.party_id
2209             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2210             UNION 
2211             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
2212             FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage
2213             WHERE contains( concat_col, p_contains_str)>0
2214           AND( (l_search_merged ='Y' )  
2215           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2216           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2217             AND d.search_context_id = p_search_ctx_id
2218             AND d.party_id = r.subject_id
2219             AND r.relationship_id = oc.party_relationship_id
2220             AND oc.org_contact_id = stage.org_contact_id
2221             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2222         ELSE
2223           OPEN x_cursor FOR 
2224             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX22
2225             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
2226             WHERE contains( concat_col, p_contains_str)>0
2227             AND( (l_search_merged ='Y' )  
2228              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2229              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2230             AND d.search_context_id = p_search_ctx_id
2231             AND d.party_id = stage.party_id
2232             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2233         END IF;
2234       END IF;
2235     ELSE
2236    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2237       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);
2238     END IF;
2239        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2240        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_PS'); 
2241        IF (l_check_dt > 0 ) THEN 
2242    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2243       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);
2244     END IF;
2245            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */'; 
2246        ELSIF (l_check > 0 ) THEN 
2247    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2248       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);
2249     END IF;
2250            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */'; 
2251        END IF; 
2252        IF l_search_merged = 'Y' THEN 
2253                l_status_sql := ' ' ;  
2254        ELSIF l_search_merged = 'I' THEN  
2255                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2256        ELSE 
2257                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2258        END IF; 
2259  		/*Performance fix for Bug:4589953*/ 
2260  		IF(p_person_api='Y') THEN 
2261        IF (l_check > 0 ) THEN 
2262        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
2263        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2264        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
2265        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2266        ELSE
2267 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2268        END IF; 
2269        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'||
2270                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2271                    ' WHERE contains( concat_col, :cont)>0'||
2272                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2273                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2274                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2275          ' AND (ORG_CONTACT_ID IS NULL ' ||
2276        	' AND ('||p_restrict_sql||'))' ||
2277        	' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2278          ' UNION ' ||
2279        			 'SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX22'||
2280                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2281                    ' WHERE contains( concat_col, :cont)>0'||
2282                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2283                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2284                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2285          ' AND ORG_CONTACT_ID IN ' ||
2286          ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships ' ||
2287          ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
2288          ' where stage1.relationship_id = oc.party_relationship_id ' || 
2289          ' and ('||p_restrict_sql1|| ') )' ||
2290          ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2291        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2292                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2293        ELSE 
2294        l_sqlstr := 'SELECT ' || l_hint ||' PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX22'||
2295                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2296                    ' WHERE contains( concat_col, :cont)>0'||
2297                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2298                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2299                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2300                  ' AND EXISTS ('||
2301                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2302                  ' WHERE p.party_id = stage.party_id ' || 
2303                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2304                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2305                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2306        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2307                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2308                     ,p_dup_party_id, p_dup_party_id;
2309        END IF; 
2310 		ELSE 
2311        l_sqlstr := 'SELECT ' || l_hint ||' PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX22'||
2312                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2313                    ' WHERE contains( concat_col, :cont)>0'||
2314                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2315                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2316                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2317                  ' AND EXISTS ('||
2318                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2319                  ' WHERE p.party_id = stage.party_id ' || 
2320                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2321                    ' AND ('||p_restrict_sql||')' ||
2322                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2323        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2324                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2325                     ,p_dup_party_id, p_dup_party_id;
2326 		  END IF; 
2327     END IF;
2328  	    output_long_strings('----------------------------------------------------------');
2329        output_long_strings('Party Site Contains String = '||p_contains_str);
2330 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2331   exception
2332     when others then
2333       if (instrb(SQLERRM,'DRG-51030')>0) then 
2334         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2335         FND_MSG_PUB.ADD;
2336         RAISE FND_API.G_EXC_ERROR;
2337       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2338         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2339         FND_MSG_PUB.ADD;
2340         RAISE FND_API.G_EXC_ERROR;
2341       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2342         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2343         FND_MSG_PUB.ADD;
2344         RAISE FND_API.G_EXC_ERROR;
2345       else 
2346         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2347     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2348     	 FND_MSG_PUB.ADD;
2349         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2350       end if;
2351   END;
2352 
2353   PROCEDURE open_contact_cursor(
2354             p_dup_party_id NUMBER, 
2355             p_party_id NUMBER, 
2356             p_restrict_sql VARCHAR2, 
2357             p_contains_str  VARCHAR2, 
2358             p_search_ctx_id  NUMBER, 
2359             p_search_merged  VARCHAR2, 
2360             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
2361   l_sqlstr VARCHAR2(4000);
2362   l_hint VARCHAR2(100); 
2363   l_check NUMBER; 
2364   l_check_dt NUMBER; 
2365   l_search_merged VARCHAR2(1); 
2366   l_status_sql VARCHAR2(100); 
2367  
2368   BEGIN
2369    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2370       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);
2371       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);
2372     END IF;
2373      IF (p_search_merged is null) then 
2374         l_search_merged := 'N';  
2375      ELSE 
2376         l_search_merged := p_search_merged; 
2377      END IF; 
2378      IF p_party_id IS NOT NULL THEN
2379    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2380       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);
2381     END IF;
2382        OPEN x_cursor FOR 
2383           SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID, TX2, TX156, TX6, TX5
2384           FROM HZ_STAGED_CONTACTS stage
2385         WHERE contains( concat_col, p_contains_str)>0
2386         AND EXISTS (
2387           SELECT 1 FROM HZ_STAGED_PARTIES p
2388           WHERE p.PARTY_ID = stage.PARTY_ID
2389           AND( (l_search_merged ='Y' )  
2390           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2391           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2392           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2393           AND( (l_search_merged ='Y' )  
2394            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2395            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2396           AND stage.party_id = p_party_id;
2397     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2398    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2399       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);
2400     END IF;
2401       IF p_search_ctx_id IS NULL THEN
2402    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2403       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);
2404     END IF;
2405         OPEN x_cursor FOR 
2406           SELECT ORG_CONTACT_ID, PARTY_ID, TX2, TX156, TX6, TX5
2407           FROM HZ_STAGED_CONTACTS stage
2408         WHERE contains( concat_col, p_contains_str)>0
2409         AND EXISTS (
2410           SELECT 1 FROM HZ_STAGED_PARTIES p
2411           WHERE p.PARTY_ID = stage.PARTY_ID
2412           AND( (l_search_merged ='Y' )  
2413           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2414           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2415           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2416           AND( (l_search_merged ='Y' )  
2417            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2418            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2419           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2420       ELSE
2421    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2422       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);
2423     END IF;
2424           OPEN x_cursor FOR 
2425             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID, TX2, TX156, TX6, TX5
2426             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage
2427             WHERE contains( concat_col, p_contains_str)>0
2428             AND d.search_context_id = p_search_ctx_id
2429             AND d.party_id = stage.party_id
2430             AND( (l_search_merged ='Y' )  
2431              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2432              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2433             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2434       END IF;
2435     ELSE
2436    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2437       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);
2438     END IF;
2439        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2440        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CT'); 
2441        IF (l_check_dt > 0 ) THEN 
2442    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2443       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);
2444     END IF;
2445            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */'; 
2446        ELSIF (l_check > 0 ) THEN 
2447    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2448       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);
2449     END IF;
2450            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */'; 
2451        END IF; 
2452        IF l_search_merged = 'Y' THEN 
2453                l_status_sql := ' ' ;  
2454        ELSIF l_search_merged = 'I' THEN  
2455                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2456        ELSE 
2457                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2458        END IF; 
2459        l_sqlstr := 'SELECT   ' || l_hint || ' ORG_CONTACT_ID, PARTY_ID , TX2, TX156, TX6, TX5'||
2460                    ' FROM HZ_STAGED_CONTACTS stage'||
2461                    ' WHERE contains( concat_col, :cont)>0'||
2462                  ' AND EXISTS ('||
2463                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2464                  ' WHERE p.party_id = stage.party_id ' || 
2465                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36)) '|| l_status_sql ||' ) ' || 
2466                   ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2467                   ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2468                   ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2469                    ' AND ('||p_restrict_sql||')' ||
2470                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2471        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2472                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2473                     ,p_dup_party_id, p_dup_party_id;
2474     END IF;
2475  	    output_long_strings('----------------------------------------------------------');
2476        output_long_strings('Contacts Contains String = '||p_contains_str);
2477 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2478   exception
2479     when others then
2480       if (instrb(SQLERRM,'DRG-51030')>0) then 
2481         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2482         FND_MSG_PUB.ADD;
2483         RAISE FND_API.G_EXC_ERROR;
2484       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2485         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2486         FND_MSG_PUB.ADD;
2487         RAISE FND_API.G_EXC_ERROR;
2488       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2489         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2490         FND_MSG_PUB.ADD;
2491         RAISE FND_API.G_EXC_ERROR;
2492       else 
2493         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2494     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2495     	 FND_MSG_PUB.ADD;
2496         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2497       end if;
2498   END;
2499 
2500   PROCEDURE open_contact_pt_cursor(
2501             p_dup_party_id NUMBER, 
2502             p_party_id NUMBER, 
2503             p_restrict_sql VARCHAR2, 
2504             p_contains_str  VARCHAR2, 
2505             p_search_ctx_id  NUMBER, 
2506             p_search_merged  VARCHAR2, 
2507             p_search_rel_cpts  VARCHAR2, 
2508             p_person_api  VARCHAR2, 
2509             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,
2510             p_restrict_entity VARCHAR2 DEFAULT NULL) IS
2511   l_sqlstr VARCHAR2(4000);
2512   l_hint VARCHAR2(100); 
2513   l_check NUMBER; 
2514   l_check_dt NUMBER; 
2515   l_search_merged VARCHAR2(1); 
2516   l_status_sql VARCHAR2(100); 
2517   p_restrict_sql1 VARCHAR2(4000); 
2518  
2519   BEGIN
2520    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2521       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);
2522       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);
2523     END IF;
2524      IF (p_search_merged is null) then 
2525         l_search_merged := 'N';  
2526      ELSE 
2527         l_search_merged := p_search_merged; 
2528      END IF; 
2529   IF p_restrict_entity = 'CONTACTS'    
2530   THEN
2531           OPEN x_cursor FOR 
2532           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
2533           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
2534           WHERE contains( concat_col, p_contains_str)>0 
2535           AND d.search_context_id = p_search_ctx_id 
2536           AND( (l_search_merged ='Y' )  
2537            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2538            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2539           AND d.party_id = stage.org_contact_id ; 
2540    END IF; 
2541   IF p_restrict_entity = 'PARTY_SITES'    
2542   THEN
2543           OPEN x_cursor FOR 
2544           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
2545           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
2546           WHERE contains( concat_col, p_contains_str)>0 
2547           AND d.search_context_id = p_search_ctx_id 
2548           AND( (l_search_merged ='Y' )  
2549            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2550            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2551           AND d.party_id = stage.party_site_id ; 
2552    END IF; 
2553  IF p_restrict_entity IS NULL
2554  THEN
2555      IF p_party_id IS NOT NULL THEN
2556    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2557       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);
2558     END IF;
2559        IF p_search_rel_cpts = 'N' THEN
2560          OPEN x_cursor FOR 
2561           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
2562           FROM HZ_STAGED_CONTACT_POINTS stage
2563           WHERE contains( concat_col, p_contains_str)>0
2564           AND( (l_search_merged ='Y' )  
2565            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2566            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2567           AND stage.party_id = p_party_id; 
2568        ELSE
2569          OPEN x_cursor FOR 
2570           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
2571           FROM HZ_STAGED_CONTACT_POINTS stage
2572           WHERE contains( concat_col, p_contains_str)>0
2573           AND( (l_search_merged ='Y' )  
2574            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2575            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2576           AND stage.party_id = p_party_id 
2577           UNION
2578           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
2579           FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc
2580           WHERE contains( concat_col, p_contains_str)>0
2581           AND r.object_id = p_party_id 
2582           AND( (l_search_merged ='Y' )  
2583            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2584            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2585                     AND r.subject_id = stage.party_id 
2586                     AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
2587                     AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
2588                     AND r.relationship_id = oc.party_relationship_id
2589                     AND oc.org_contact_id = stage.org_contact_id; 
2590       END IF;
2591     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2592    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2593       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);
2594     END IF;
2595       IF p_search_ctx_id IS NULL THEN
2596    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2597       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);
2598     END IF;
2599         OPEN x_cursor FOR 
2600           SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2601           FROM HZ_STAGED_CONTACT_POINTS stage
2602         WHERE contains( concat_col, p_contains_str)>0
2603         AND EXISTS (
2604           SELECT 1 FROM HZ_STAGED_PARTIES p
2605           WHERE p.PARTY_ID = stage.PARTY_ID
2606           AND( (l_search_merged ='Y' )  
2607           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2608           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2609           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2610           AND( (l_search_merged ='Y' )  
2611            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2612            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2613           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2614       ELSE
2615    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2616       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);
2617     END IF;
2618         IF p_person_api = 'Y' THEN
2619           OPEN x_cursor FOR 
2620             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2621             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2622             WHERE contains( concat_col, p_contains_str)>0
2623             AND d.search_context_id = p_search_ctx_id
2624             AND d.party_id = stage.party_id
2625             AND( (l_search_merged ='Y' )  
2626              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2627              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2628             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2629             UNION 
2630             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
2631             FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage
2632             WHERE contains( concat_col, p_contains_str)>0
2633             AND d.search_context_id = p_search_ctx_id
2634             AND d.party_id = r.subject_id
2635             AND r.relationship_id = oc.party_relationship_id
2636             AND oc.org_contact_id = stage.org_contact_id
2637             AND( (l_search_merged ='Y' )  
2638              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2639              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2640             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2641         ELSE
2642           OPEN x_cursor FOR 
2643             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2644             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2645             WHERE contains( concat_col, p_contains_str)>0
2646             AND d.search_context_id = p_search_ctx_id
2647             AND d.party_id = stage.party_id
2648             AND( (l_search_merged ='Y' )  
2649              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2650              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2651             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2652         END IF;
2653       END IF;
2654     ELSE
2655    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2656       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);
2657     END IF;
2658        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2659        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CPT'); 
2660        IF (l_check_dt > 0 ) THEN 
2661    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2662       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);
2663     END IF;
2664            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */'; 
2665        ELSIF (l_check > 0 ) THEN 
2666    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2667       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);
2668     END IF;
2669            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */'; 
2670        END IF; 
2671        IF l_search_merged = 'Y' THEN 
2672                l_status_sql := ' ' ;  
2673        ELSIF l_search_merged = 'I' THEN  
2674                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2675        ELSE 
2676                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2677        END IF; 
2678        IF p_person_api = 'Y' THEN
2679  		/*Performance fix for Bug:4589953*/ 
2680        IF (l_check > 0 ) THEN 
2681        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
2682        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2683        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
2684        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2685        ELSE
2686 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2687        END IF; 
2688        	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'||
2689                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2690                    ' WHERE contains( concat_col, :cont)>0  '||
2691                    ' AND (stage.org_contact_id is null '||
2692                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2693                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2694                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2695                    ' AND ('||p_restrict_sql||'))' ||
2696                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2697                    ' UNION ' ||
2698                    ' 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'||
2699                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2700                    ' WHERE contains( concat_col, :cont)>0  '||
2701                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2702                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2703                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2704                  ' AND (stage.org_contact_id in ' || 
2705                  ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r ' ||
2706                  ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' || 
2707                  ' where stage1.relationship_id = oc.party_relationship_id ' || 
2708                  ' and ('||p_restrict_sql1 || ') ) )' ||
2709                  ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2710        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2711                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2712        ELSE 
2713        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX1, TX6, TX5'||
2714                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2715                    ' WHERE contains( concat_col, :cont)>0'||
2716                  ' AND EXISTS ('||
2717                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2718                  ' WHERE p.party_id = stage.party_id ' || 
2719                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2720                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2721                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2722                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2723                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2724                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2725        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2726                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2727                     ,p_dup_party_id, p_dup_party_id;
2728        END IF; 
2729        ELSE 
2730        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX1, TX6, TX5'||
2731                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2732                    ' WHERE contains( concat_col, :cont)>0'||
2733                  ' AND EXISTS ('||
2734                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2735                  ' WHERE p.party_id = stage.party_id ' || 
2736                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2737                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2738                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2739                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2740                    ' AND ('||p_restrict_sql||')' ||
2741                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2742        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2743                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2744                     ,p_dup_party_id, p_dup_party_id;
2745        END IF; 
2746     END IF;
2747   END IF; 
2748  	    output_long_strings('----------------------------------------------------------');
2749        output_long_strings('Contact Points Contains String = '||p_contains_str);
2750 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2751   exception
2752     when others then
2753       if (instrb(SQLERRM,'DRG-51030')>0) then 
2754         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2755         FND_MSG_PUB.ADD;
2756         RAISE FND_API.G_EXC_ERROR;
2757       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2758         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2759         FND_MSG_PUB.ADD;
2760         RAISE FND_API.G_EXC_ERROR;
2761       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2762         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2763         FND_MSG_PUB.ADD;
2764         RAISE FND_API.G_EXC_ERROR;
2765       else 
2766         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2767     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2768     	 FND_MSG_PUB.ADD;
2769         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2770       end if;
2771   END;
2772 
2773 
2774   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
2775     l_sqlstr VARCHAR2(4000);
2776     l_search_merged VARCHAR2(1);
2777   BEGIN
2778     IF (p_search_merged is null) then 
2779        l_search_merged := 'N';  
2780     ELSE 
2781        l_search_merged := p_search_merged; 
2782     END IF; 
2783     IF p_restrict_sql IS NULL THEN
2784       INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
2785       SELECT p_search_ctx_id, PARTY_ID, decode(TX8,g_party_stage_rec.TX8||' ',100,90)
2786       FROM hz_staged_parties 
2787       WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
2788       AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  TX36))
2789       AND( (l_search_merged ='Y' ) 
2790            OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))  
2791            OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))  
2792       AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)
2793       AND rownum <= p_thresh;
2794     ELSE
2795       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 ';
2796       l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
2797       l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' =  TX36) ';
2798       IF l_search_merged = 'N' THEN
2799         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
2800       ELSIF l_search_merged = 'Y' THEN
2801         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
2802       END IF;
2803       l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
2804      l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
2805      l_sqlstr := l_sqlstr || ' AND ROWNUM <= :thresh ';
2806      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;
2807     END IF;
2808     x_num_matches := SQL%ROWCOUNT;
2809   END;
2810 
2811   FUNCTION get_new_score_rec (
2812     	 p_init_total_score NUMBER,
2813     	 p_init_party_score NUMBER,
2814     	 p_init_party_site_score NUMBER,
2815     	 p_init_contact_score NUMBER,
2816     	 p_init_contact_point_score NUMBER, 
2817     	 p_party_id NUMBER, 
2818     	 p_party_site_id NUMBER, 
2819     	 p_org_contact_id NUMBER, 
2820     	 p_contact_point_id NUMBER) 
2821      RETURN HZ_PARTY_SEARCH.score_rec IS
2822     l_score_rec HZ_PARTY_SEARCH.score_rec;
2823   BEGIN
2824    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2825       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);
2826       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);
2827     END IF;
2828     l_score_rec.TOTAL_SCORE := p_init_total_score;
2829     l_score_rec.PARTY_SCORE := p_init_party_score;
2830     l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;
2831     l_score_rec.CONTACT_SCORE := p_init_contact_score;
2832     l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;
2833     l_score_rec.PARTY_ID := p_party_id;
2834     l_score_rec.PARTY_SITE_ID := p_party_site_id;
2835     l_score_rec.ORG_CONTACT_ID := p_org_contact_id;
2836     l_score_rec.CONTACT_POINT_ID := p_contact_point_id;
2837     RETURN l_score_rec;
2838   END;
2839 
2840    /**********************************************************
2841    This procedure finds the set of parties that match the search
2842    criteria and returns a scored set of parties
2843 
2844    The steps in executing the search are as follows
2845     1. Initialization and error checks
2846     2. Setup of intermedia query strings for Acquisition query
2847     3. Execution of Acquisition query
2848     4. Execution of Secondary queries to score results
2849     5. Setup of data temporary table to return search results
2850    **********************************************************/
2851 
2852 PROCEDURE find_parties (
2853       p_rule_id               IN      NUMBER,
2854       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
2855       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
2856       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
2857       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
2858       p_restrict_sql          IN      VARCHAR2,
2859       p_match_type            IN      VARCHAR2,
2860       p_search_merged         IN      VARCHAR2,
2861       p_dup_party_id          IN      NUMBER,
2862       p_dup_set_id            IN      NUMBER,
2863       p_dup_batch_id          IN      NUMBER,
2864       p_ins_details           IN      VARCHAR2,
2865       x_search_ctx_id         OUT     NUMBER,
2866       x_num_matches           OUT     NUMBER
2867 ) IS
2868 
2869   -- Strings to hold the generated Intermedia query strings
2870   l_party_contains_str VARCHAR2(32000); 
2871   l_party_site_contains_str VARCHAR2(32000);
2872   l_contact_contains_str VARCHAR2(32000);
2873   l_contact_pt_contains_str VARCHAR2(32000);
2874   l_denorm_str VARCHAR2(32000);
2875   l_ps_denorm_str VARCHAR2(32000);
2876   l_ct_denorm_str VARCHAR2(32000);
2877   l_cpt_denorm_str VARCHAR2(32000);
2878 
2879   -- Other local variables
2880   l_match_str VARCHAR2(30); -- Match type (AND or OR)
2881   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
2882   -- For Score calculation
2883   l_max_score NUMBER;
2884   l_match_idx NUMBER;
2885   l_entered_max_score NUMBER;
2886   FIRST BOOLEAN;
2887   l_search_ctx_id NUMBER; -- Generated Search Context ID
2888 
2889   l_TX39 VARCHAR2(2000);
2890   l_TX2 VARCHAR2(2000);
2891   l_TX46 VARCHAR2(2000);
2892   l_TX9 VARCHAR2(2000);
2893   l_TX22 VARCHAR2(2000);
2894   l_TX44 VARCHAR2(2000);
2895   l_TX1 VARCHAR2(2000);
2896   l_TX158 VARCHAR2(2000);
2897   l_TX47 VARCHAR2(2000);
2898   l_TX3 VARCHAR2(2000);
2899   l_TX15 VARCHAR2(2000);
2900   l_TX4 VARCHAR2(2000);
2901   l_TX10 VARCHAR2(2000);
2902   l_TX11 VARCHAR2(2000);
2903   l_TX5 VARCHAR2(2000);
2904   l_TX40 VARCHAR2(2000);
2905   l_TX34 VARCHAR2(2000);
2906   l_TX45 VARCHAR2(2000);
2907   l_TX156 VARCHAR2(2000);
2908   l_TX14 VARCHAR2(2000);
2909   l_TX6 VARCHAR2(2000);
2910   H_SCORES HZ_PARTY_SEARCH.score_list;
2911   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
2912   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
2913 
2914   l_score NUMBER;
2915   l_idx NUMBER;
2916   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
2917   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
2918   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
2919   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
2920   l_party_id NUMBER;
2921   l_ps_party_id NUMBER;
2922   l_ct_party_id NUMBER;
2923   l_cpt_party_id NUMBER;
2924   l_cpt_ps_id NUMBER;
2925   l_cpt_contact_id NUMBER;
2926   l_cpt_type VARCHAR2(100);
2927   l_party_site_id NUMBER;
2928   l_org_contact_id NUMBER;
2929   l_contact_pt_id NUMBER;
2930   l_ps_contact_id NUMBER;
2931   l_party_max_score NUMBER;
2932   l_ps_max_score NUMBER;
2933   l_contact_max_score NUMBER;
2934   l_cpt_max_score NUMBER;
2935   l_denorm_max_score NUMBER;
2936   l_non_denorm_max_score NUMBER;
2937 
2938   defpt NUMBER :=0;
2939   defps NUMBER :=0;
2940   defct NUMBER :=0;
2941   defcpt NUMBER :=0;
2942   l_index NUMBER;
2943   l_max_thresh NUMBER;
2944   l_tmp NUMBER;
2945   l_merge_flag VARCHAR2(1);
2946   l_num_eval NUMBER:=0;
2947 
2948   --Fix for bug 4417124 
2949   l_use_contact_addr_info BOOLEAN := TRUE;
2950   l_use_contact_cpt_info BOOLEAN  := TRUE;
2951   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
2952   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
2953 
2954   L_RETURN_IMM_EXC EXCEPTION;
2955 
2956   
2957   /********************* Find Parties private procedures *******/
2958   PROCEDURE push_eval IS
2959   BEGIN
2960    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2961       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);
2962       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);
2963     END IF;
2964    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2965       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);
2966     END IF;
2967     H_PARTY_ID.DELETE;
2968     H_PARTY_ID_LIST.DELETE;
2969     H_SCORES.DELETE;        
2970     g_mappings.DELETE;
2971     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
2972     call_order(5) := call_order(1);
2973     call_type(5) := 'AND';
2974     call_max_score(5) := call_max_score(1);
2975     call_type(2) := 'OR';
2976   END;
2977 
2978   /**  Private procedure to acquire and score at party level  ***/
2979   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
2980     l_party_id_idx NUMBER:=1;
2981     l_ctx_id NUMBER;
2982     l_precalc_score BOOLEAN := FALSE;
2983   BEGIN
2984    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2985       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);
2986       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);
2987     END IF;
2988     SAVEPOINT eval_start;
2989     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2990       l_ctx_id := l_search_ctx_id;
2991    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2992       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);
2993     END IF;
2994       FORALL I in 1..H_PARTY_ID.COUNT 
2995          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2996              l_search_ctx_id,H_PARTY_ID(I));
2997       H_PARTY_ID.DELETE;
2998       H_PARTY_ID_LIST.DELETE;
2999     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3000    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3001       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);
3002     END IF;
3003       l_ctx_id := l_search_ctx_id;
3004       FORALL I in 1..H_PARTY_ID.COUNT 
3005          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3006              l_search_ctx_id,H_PARTY_ID(I));
3007       l_party_id_idx := H_PARTY_ID.COUNT+1;
3008     ELSE
3009       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3010          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
3011    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3012       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);
3013     END IF;
3014         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
3015    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3016       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);
3017     END IF;
3018           IF (l_party_site_contains_str IS NULL AND
3019              l_contact_contains_str IS NULL AND
3020              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN
3021             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);
3022             RAISE L_RETURN_IMM_EXC;
3023           ELSE
3024             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);
3025           END IF;
3026         ELSE
3027           IF p_index>1 THEN
3028    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3029       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);
3030     END IF;
3031             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3032             FND_MSG_PUB.ADD;
3033             RAISE FND_API.G_EXC_ERROR;
3034           ELSE
3035             push_eval;
3036             RETURN;
3037           END IF;
3038         END IF;
3039       END IF;
3040       l_ctx_id := NULL;
3041       l_party_id_idx := H_PARTY_ID.COUNT+1;
3042     END IF;
3043    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3044       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);
3045     END IF;
3046     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
3047       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);
3048     END IF;
3049     LOOP 
3050       FETCH l_party_cur INTO
3051          l_party_id , l_TX34, l_TX40, l_TX158, l_TX39, l_TX44, l_TX45, l_TX46, l_TX47;
3052       EXIT WHEN l_party_cur%NOTFOUND;
3053       l_index := map_id(l_party_id);
3054       l_score := GET_PARTY_SCORE(l_TX34,l_TX40,l_TX158,l_TX39,l_TX44,l_TX45,l_TX46,l_TX47);
3055       IF NOT H_SCORES.EXISTS(l_index) THEN
3056         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
3057       ELSE
3058         H_SCORES(l_index).TOTAL_SCORE := 
3059                 H_SCORES(l_index).TOTAL_SCORE+l_score;
3060         H_SCORES(l_index).PARTY_SCORE := l_score;
3061       END IF;
3062       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3063         H_PARTY_ID_LIST(l_index) := 1;
3064         H_PARTY_ID(l_party_id_idx) := l_party_id;
3065         l_party_id_idx:= l_party_id_idx+1;
3066       END IF;
3067       IF (l_party_id_idx-1)>l_max_thresh THEN
3068         IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
3069           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
3070           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
3071           AND l_contact_pt_contains_str IS NULL THEN
3072             EXIT;
3073         END IF;
3074 	      CLOSE l_party_cur;
3075         IF p_index>1 THEN
3076    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3077       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);
3078     END IF;
3079           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3080           FND_MSG_PUB.ADD;
3081           RAISE FND_API.G_EXC_ERROR;
3082         ELSE
3083           push_eval;
3084           RETURN;
3085         END IF;
3086       END IF;
3087     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3088       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);
3089       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);
3090     END IF;
3091     END LOOP;
3092    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3093       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);
3094     END IF;
3095     CLOSE l_party_cur;
3096     ROLLBACK to eval_start;
3097   END;
3098 
3099   /**  Private procedure to acquire and score at party site level  ***/
3100   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
3101     l_party_id_idx NUMBER:=1;
3102     l_ctx_id NUMBER;
3103     h_ps_id HZ_PARTY_SEARCH.IDList;
3104     h_ps_party_id HZ_PARTY_SEARCH.IDList;
3105     h_ps_score HZ_PARTY_SEARCH.IDList;
3106     detcnt NUMBER := 1;
3107   BEGIN
3108    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3109       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);
3110       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);
3111     END IF;
3112   IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,'D_PS')>0
3113       AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and
3114       l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> 'Y' THEN
3115     l_party_id := H_SCORES.FIRST;
3116     WHILE l_party_id IS NOT NULL LOOP
3117       H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;
3118       l_party_id:=H_SCORES.NEXT(l_party_id);
3119     END LOOP;
3120     RETURN;
3121   END IF;
3122     SAVEPOINT eval_start;
3123     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3124    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3125       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);
3126     END IF;
3127       l_ctx_id := l_search_ctx_id;
3128       FORALL I in 1..H_PARTY_ID.COUNT 
3129          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3130              l_search_ctx_id,H_PARTY_ID(I));
3131       H_PARTY_ID.DELETE;
3132       H_PARTY_ID_LIST.DELETE;
3133     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3134    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3135       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);
3136     END IF;
3137       l_ctx_id := l_search_ctx_id;
3138       FORALL I in 1..H_PARTY_ID.COUNT 
3139          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3140              l_search_ctx_id,H_PARTY_ID(I));
3141       l_party_id_idx := H_PARTY_ID.COUNT+1;
3142     ELSE
3143       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3144          and check_estimate_hits('PARTY_SITES',p_party_site_contains_str)>l_max_thresh THEN
3145    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3146       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);
3147     END IF;
3148         IF p_index>1 THEN
3149    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3150       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);
3151     END IF;
3152           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3153           FND_MSG_PUB.ADD;
3154           RAISE FND_API.G_EXC_ERROR;
3155         ELSE
3156           push_eval;
3157           RETURN;
3158         END IF;
3159       END IF;
3160       l_party_id_idx := H_PARTY_ID.COUNT+1;
3161       l_ctx_id := NULL;
3162     END IF;
3163    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3164       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);
3165     END IF;
3166     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);
3167     LOOP 
3168       FETCH l_party_site_cur INTO
3169          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;
3170       EXIT WHEN l_party_site_cur%NOTFOUND;
3171       --Fix for bug 4417124 
3172       IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN
3173         l_index := map_id(l_ps_party_id);
3174         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);
3175         IF NOT H_SCORES.EXISTS(l_index) THEN
3176           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);
3177         ELSE
3178           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3179             H_SCORES(l_index).TOTAL_SCORE := 
3180                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3181             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3182           END IF;
3183         END IF;
3184         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3185           H_PARTY_ID_LIST(l_index) := 1;
3186           H_PARTY_ID(l_party_id_idx) := l_ps_party_id;
3187           l_party_id_idx:= l_party_id_idx+1;
3188         END IF;
3189         IF p_ins_details = 'Y' THEN
3190           h_ps_id(detcnt) := l_party_site_id;
3191           h_ps_party_id(detcnt) := l_ps_party_id;
3192           IF (p_emax_score > 0) THEN 
3193               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
3194           ELSE 
3195               h_ps_score(detcnt) := 0; 
3196           END IF; 
3197           detcnt := detcnt +1;
3198         END IF;
3199     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3200       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);
3201       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);
3202       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);
3203     END IF;
3204       END IF;
3205     END LOOP;
3206    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3207       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);
3208     END IF;
3209     CLOSE l_party_site_cur;
3210     ROLLBACK to eval_start;
3211     IF p_ins_details = 'Y' THEN
3212    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3213       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);
3214     END IF;
3215       FORALL I in 1..h_ps_id.COUNT 
3216         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
3217           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
3218     END IF;
3219   END;
3220 
3221   /**  Private procedure to acquire and score at contact point level  ***/
3222   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
3223     l_party_id_idx NUMBER:=1;
3224     l_ctx_id NUMBER;
3225     h_ct_id HZ_PARTY_SEARCH.IDList;
3226     h_ct_party_id HZ_PARTY_SEARCH.IDList;
3227     h_ct_score HZ_PARTY_SEARCH.IDList;
3228     detcnt NUMBER := 1;
3229   BEGIN
3230    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3231       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);
3232       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);
3233     END IF;
3234     SAVEPOINT eval_start;
3235     IF l_match_str = ' AND ' AND p_call_type='AND' THEN
3236    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3237       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);
3238     END IF;
3239       l_ctx_id := l_search_ctx_id;
3240       FORALL I in 1..H_PARTY_ID.COUNT 
3241          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3242              l_search_ctx_id,H_PARTY_ID(I));
3243       H_PARTY_ID.DELETE;
3244       H_PARTY_ID_LIST.DELETE;
3245     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3246    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3247       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);
3248     END IF;
3249       l_ctx_id := l_search_ctx_id;
3250       FORALL I in 1..H_PARTY_ID.COUNT 
3251          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3252              l_search_ctx_id,H_PARTY_ID(I));
3253       l_party_id_idx := H_PARTY_ID.COUNT+1;
3254     ELSE
3255       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3256          and check_estimate_hits('CONTACTS',p_contact_contains_str)>l_max_thresh THEN
3257    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3258       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);
3259     END IF;
3260         IF p_index>1 THEN
3261    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3262       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);
3263     END IF;
3264           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3265           FND_MSG_PUB.ADD;
3266           RAISE FND_API.G_EXC_ERROR;
3267         ELSE
3268           push_eval;
3269           RETURN;
3270         END IF;
3271       END IF;
3272       l_ctx_id := NULL;
3273       l_party_id_idx := H_PARTY_ID.COUNT+1;
3274     END IF;
3275    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3276       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);
3277     END IF;
3278     open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id,  p_search_merged, l_contact_cur);
3279     LOOP 
3280       FETCH l_contact_cur INTO
3281          l_org_contact_id, l_ct_party_id , l_TX2, l_TX156, l_TX6, l_TX5;
3282       EXIT WHEN l_contact_cur%NOTFOUND;
3283       l_index := map_id(l_ct_party_id);
3284       l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX2,l_TX156,l_TX6,l_TX5);
3285       IF NOT H_SCORES.EXISTS(l_index) THEN
3286         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);
3287       ELSE
3288         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
3289           H_SCORES(l_index).TOTAL_SCORE := 
3290                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
3291           H_SCORES(l_index).CONTACT_SCORE := l_score;
3292         END IF;
3293       END IF;
3294       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3295         H_PARTY_ID_LIST(l_index) := 1;
3296         H_PARTY_ID(l_party_id_idx) := l_ct_party_id;
3297         l_party_id_idx:= l_party_id_idx+1;
3298       END IF;
3299       IF p_ins_details = 'Y' THEN
3300         h_ct_id(detcnt) := l_org_contact_id;
3301         h_ct_party_id(detcnt) := l_ct_party_id;
3302         IF (p_emax_score > 0) THEN 
3303             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
3304         ELSE 
3305             h_ct_score(detcnt) := 0; 
3306         END IF; 
3307         detcnt := detcnt +1;
3308       END IF;
3309     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3310       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);
3311       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);
3312       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);
3313     END IF;
3314     END LOOP;
3315    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3316       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);
3317     END IF;
3318     CLOSE l_contact_cur;
3319     ROLLBACK to eval_start;
3320     IF p_ins_details = 'Y' THEN
3321    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3322       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);
3323     END IF;
3324       FORALL I in 1..h_ct_id.COUNT 
3325         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
3326           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
3327     END IF;
3328   END;
3329 
3330   /**  Private procedure to acquire and score at contact point level  ***/
3331   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
3332     l_party_id_idx NUMBER:=1;
3333     l_ctx_id NUMBER;
3334     h_cpt_id HZ_PARTY_SEARCH.IDList;
3335     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
3336     h_cpt_score HZ_PARTY_SEARCH.IDList;
3337     detcnt NUMBER := 1;
3338     l_cpt_flag VARCHAR2(1) := 'N';
3339     is_a_match VARCHAR2(1) := 'Y';
3340   BEGIN
3341    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3342       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);
3343       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);
3344     END IF;
3345     SAVEPOINT eval_start;
3346     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3347    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3348       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);
3349     END IF;
3350       l_ctx_id := l_search_ctx_id;
3351       FORALL I in 1..H_PARTY_ID.COUNT 
3352          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3353              l_search_ctx_id,H_PARTY_ID(I));
3354       H_PARTY_ID.DELETE;
3355       H_PARTY_ID_LIST.DELETE;
3356     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3357    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3358       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);
3359     END IF;
3360       l_ctx_id := l_search_ctx_id;
3361       FORALL I in 1..H_PARTY_ID.COUNT 
3362          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3363              l_search_ctx_id,H_PARTY_ID(I));
3364       l_party_id_idx := H_PARTY_ID.COUNT+1;
3365     ELSE
3366       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3367          and check_estimate_hits('CONTACT_POINTS',p_contact_pt_contains_str)>l_max_thresh THEN
3368    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3369       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);
3370     END IF;
3371         IF p_index>1 THEN
3372    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3373       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);
3374     END IF;
3375           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3376           FND_MSG_PUB.ADD;
3377           RAISE FND_API.G_EXC_ERROR;
3378         ELSE
3379           push_eval;
3380           RETURN;
3381         END IF;
3382       END IF;
3383       l_ctx_id := NULL;
3384       l_party_id_idx := H_PARTY_ID.COUNT+1;
3385     END IF;
3386    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3387       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);
3388     END IF;
3389     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);
3390     LOOP 
3391       FETCH l_contact_pt_cur INTO
3392          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;
3393       EXIT WHEN l_contact_pt_cur%NOTFOUND;
3394    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3395       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);
3396     END IF;
3397    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3398       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);
3399     END IF;
3400    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3401       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);
3402     END IF;
3403       --Fix for bug 4417124 
3404       IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN
3405         l_index := map_id(l_cpt_party_id);
3406         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
3407         IF NOT H_SCORES.EXISTS(l_index) THEN
3408           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);
3409           H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3410    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3411       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);
3412     END IF;
3413    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3414       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);
3415     END IF;
3416         ELSE
3417           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
3418             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
3419               H_SCORES(l_index).TOTAL_SCORE :=
3420               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;
3421               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;
3422               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3423    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3424       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);
3425     END IF;
3426    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3427       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);
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).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);
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).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);
3434     END IF;
3435             END IF;
3436           ELSE
3437    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3438       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);
3439     END IF;
3440             H_SCORES(l_index).TOTAL_SCORE :=
3441             		H_SCORES(l_index).TOTAL_SCORE+l_score;
3442             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3443             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3444    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3445       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);
3446     END IF;
3447    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3448       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);
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).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);
3452     END IF;
3453           END IF;
3454         END IF;
3455    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3456       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);
3457     END IF;
3458    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3459       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);
3460     END IF;
3461         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3462           -- If rule is match all 
3463           IF l_match_str = ' AND ' THEN
3464    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3465       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);
3466     END IF;
3467             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3468               is_a_match := 'Y';
3469    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3470       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);
3471     END IF;
3472             ELSE
3473               is_a_match := 'N';
3474    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3475       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);
3476     END IF;
3477             END IF;
3478           -- Else it is construed to be a match anyway
3479           ELSE
3480             is_a_match := 'Y';
3481    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3482       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);
3483     END IF;
3484           END IF;
3485         IF (is_a_match='Y') then
3486           H_PARTY_ID_LIST(l_index) := 1;
3487           H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;
3488           l_party_id_idx:= l_party_id_idx+1;
3489       end if;
3490         END IF;
3491         IF p_ins_details = 'Y' THEN
3492           IF l_match_str = ' AND ' THEN
3493    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3494       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);
3495     END IF;
3496             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3497               is_a_match := 'Y';
3498    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3499       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);
3500     END IF;
3501             ELSE
3502               is_a_match := 'N';
3503    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3504       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);
3505     END IF;
3506             END IF;
3507           ELSE
3508             is_a_match := 'Y';
3509    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3510       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);
3511     END IF;
3512           END IF;
3513           IF (is_a_match='Y') THEN
3514           FOR I IN 1..h_cpt_id.COUNT LOOP
3515           IF h_cpt_id(I)=l_contact_pt_id THEN
3516           	 l_cpt_flag := 'Y';
3517           END IF;
3518           END LOOP;
3519           IF l_cpt_flag = 'Y' THEN
3520           	 NULL;
3521           ELSE
3522          	 h_cpt_id(detcnt) := l_contact_pt_id;
3523           	 h_cpt_party_id(detcnt) := l_cpt_party_id;
3524           	 IF (p_emax_score > 0) THEN 
3525               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
3526             ELSE 
3527               h_cpt_score(detcnt) := 0; 
3528           	 END IF; 
3529             detcnt := detcnt +1;
3530           END IF;
3531       end if;
3532         END IF;
3533     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3534       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);
3535       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);
3536       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);
3537     END IF;
3538       END IF;
3539     END LOOP;
3540    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3541       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);
3542     END IF;
3543     CLOSE l_contact_pt_cur;
3544     ROLLBACK to eval_start;
3545     IF p_ins_details = 'Y' THEN
3546    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3547       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);
3548     END IF;
3549       FORALL I in 1..h_cpt_id.COUNT 
3550         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
3551           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
3552     END IF;
3553   END eval_cpt_level;
3554 
3555   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
3556   PROCEDURE do_eval (p_index NUMBER) IS
3557     l_ctx_id NUMBER;
3558     l_threshold NUMBER;
3559     other_acq_criteria_exists BOOLEAN; 
3560     acq_cnt NUMBER; 
3561   BEGIN
3562    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3563       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);
3564       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);
3565     END IF;
3566     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
3567      l_threshold :=  round(( l_entered_max_score / 685) * 75); 
3568     other_acq_criteria_exists := TRUE ;
3569     --check if acquisition criteria exists for any other entity
3570     IF l_party_contains_str IS NOT NULL THEN 
3571     	acq_cnt := 1; 
3572     END IF; 
3573     IF l_party_site_contains_str IS NOT NULL THEN 
3574     	acq_cnt := acq_cnt+1; 
3575     END IF; 
3576     IF l_contact_contains_str IS NOT NULL THEN 
3577     	acq_cnt := acq_cnt+1; 
3578     END IF;
3579     IF l_contact_pt_contains_str IS NOT NULL THEN 
3580     	acq_cnt := acq_cnt+1; 
3581     END IF;  
3582     IF acq_cnt>1 THEN 
3583     	other_acq_criteria_exists := TRUE; 
3584     ELSE
3585     	other_acq_criteria_exists := FALSE; 
3586     END IF;  
3587       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);
3588       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);
3589       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);
3590     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
3591     	IF ( call_max_score(p_index) < l_threshold) THEN 
3592    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3593       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);
3594     END IF;
3595 	     	RETURN;	
3596     	ELSE 
3597    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3598       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);
3599     END IF;
3600 	     	FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED'); 
3601 	     	FND_MSG_PUB.ADD; 
3602 	     	RAISE FND_API.G_EXC_ERROR; 
3603     	END IF; 
3604     ELSE
3605    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3606       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);
3607     END IF;
3608       FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3609       FND_MSG_PUB.ADD;
3610       RAISE FND_API.G_EXC_ERROR;
3611      END IF; 
3612     END IF;
3613     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
3614       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
3615     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
3616       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3617     ELSIF call_order(p_index) = 'CONTACT' AND l_contact_contains_str IS NOT NULL THEN
3618       eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3619     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
3620       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3621     END IF;
3622   END;
3623   /************ End of find_parties private procedures **********/ 
3624 
3625   BEGIN
3626 
3627    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3628       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);
3629     END IF;
3630    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3631       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);
3632     END IF;
3633     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3634       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);
3635       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);
3636       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);
3637       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);
3638       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);
3639       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);
3640     END IF;
3641     -- ************************************
3642     -- STEP 1. Initialization and error checks
3643 
3644     l_match_str := ' AND ';
3645     IF p_match_type = 'AND' THEN
3646       l_match_str := ' AND ';
3647     ELSIF p_match_type = 'OR' THEN
3648       l_match_str := ' OR ';
3649     END IF;
3650     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);
3651     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
3652 
3653 
3654     --Fix for bug 4417124 
3655 
3656     SELECT use_contact_addr_flag, use_contact_cpt_flag 
3657     INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
3658     FROM hz_match_rules_b 
3659     WHERE match_rule_id = 32; 
3660 
3661     IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
3662       l_use_contact_addr_info := FALSE; 
3663     END IF; 
3664 
3665     IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
3666       l_use_contact_cpt_info := FALSE; 
3667     END IF; 
3668 
3669    --End fix for bug 4417124
3670 
3671     IF p_dup_batch_id IS NOT NULL THEN
3672       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH_BATCH'),10000);
3673     ELSE
3674       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
3675     END IF;
3676     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
3677       g_score_until_thresh := true;
3678    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3679       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);
3680     END IF;
3681     ELSE
3682       g_score_until_thresh := false;
3683    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3684       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);
3685     END IF;
3686     END IF;
3687    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3688       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);
3689     END IF;
3690     -- ************************************************************
3691     -- STEP 2. Setup of intermedia query strings for Acquisition query
3692     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
3693     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
3694     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
3695    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3696       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);
3697     END IF;
3698     l_denorm_max_score:=0;
3699     l_non_denorm_max_score:=0;
3700     IF l_ps_denorm_str IS NOT NULL THEN
3701       l_denorm_max_score := l_denorm_max_score+l_ps_max_score;
3702       l_denorm_str := l_ps_denorm_str;
3703     ELSE
3704       l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;
3705     END IF;
3706     IF l_ct_denorm_str IS NOT NULL THEN
3707       l_denorm_max_score := l_denorm_max_score+l_contact_max_score;
3708       IF l_denorm_str IS NOT NULL THEN
3709         l_denorm_str := l_denorm_str || ' OR ' ||l_ct_denorm_str;
3710       ELSE
3711         l_denorm_str := l_ct_denorm_str;
3712       END IF;
3713     ELSE
3714       l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;
3715     END IF;
3716     IF l_cpt_denorm_str IS NOT NULL THEN
3717       l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;
3718       IF l_denorm_str IS NOT NULL THEN
3719         l_denorm_str := l_denorm_str || ' OR ' ||l_cpt_denorm_str;
3720       ELSE
3721         l_denorm_str := l_cpt_denorm_str;
3722       END IF;
3723     ELSE
3724       l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;
3725     END IF;
3726     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));
3727     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3728 
3729     -- Setup Search Context ID
3730     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3731     x_search_ctx_id := l_search_ctx_id;
3732 
3733    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3734       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);
3735     END IF;
3736     IF l_party_contains_str IS NULL THEN
3737       defpt := 1;
3738     END IF;
3739     IF l_party_site_contains_str IS NULL THEN
3740       defps := 1;
3741     END IF;
3742     IF l_contact_contains_str IS NULL THEN
3743       defct := 1;
3744     END IF;
3745     IF l_contact_pt_contains_str IS NULL THEN
3746       defcpt := 1;
3747     END IF;
3748 
3749     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3750    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3751       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);
3752     END IF;
3753       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);
3754       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);
3755       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);
3756       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);
3757       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);
3758       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);
3759     END IF;
3760     FOR I in 1..5 LOOP
3761       do_eval(I);
3762     END LOOP;
3763     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3764       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);
3765     END IF;
3766     x_num_matches := 0;
3767     l_num_eval := 0;
3768     IF l_match_str = ' OR ' THEN
3769       l_party_id := H_SCORES.FIRST;
3770     ELSE
3771       l_party_id := H_PARTY_ID_LIST.FIRST;
3772     END IF;
3773     WHILE l_party_id IS NOT NULL LOOP
3774       l_num_eval:= l_num_eval+1;
3775     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3776    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3777       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);
3778     END IF;
3779       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);
3780       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);
3781     END IF;
3782    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3783       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);
3784     END IF;
3785       IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(75/685) THEN
3786             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
3787             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));
3788             x_num_matches := x_num_matches+1;
3789    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3790       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);
3791     END IF;
3792       END IF;
3793       IF l_match_str = ' OR ' THEN
3794         l_party_id:=H_SCORES.NEXT(l_party_id);
3795       ELSE
3796         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3797       END IF;
3798     END LOOP;
3799     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3800    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3801       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);
3802     END IF;
3803    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3804       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);
3805     END IF;
3806 EXCEPTION
3807   WHEN L_RETURN_IMM_EXC THEN
3808     RETURN;
3809   WHEN FND_API.G_EXC_ERROR THEN
3810     RAISE FND_API.G_EXC_ERROR;
3811   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3812     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3813   WHEN OTHERS THEN
3814     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3815     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.find_parties');
3816     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3817     FND_MSG_PUB.ADD;
3818     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3819 END find_parties;
3820 
3821 PROCEDURE find_persons (
3822       p_rule_id               IN      NUMBER,
3823       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
3824       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
3825       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
3826       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
3827       p_restrict_sql          IN      VARCHAR2,
3828       p_match_type            IN      VARCHAR2,
3829       p_search_merged         IN      VARCHAR2,
3830       p_dup_party_id          IN      NUMBER,
3831       p_dup_set_id            IN      NUMBER,
3832       p_dup_batch_id          IN      NUMBER,
3833       p_ins_details           IN      VARCHAR2,
3834       x_search_ctx_id         OUT     NUMBER,
3835       x_num_matches           OUT     NUMBER
3836 ) IS
3837 
3838   -- Strings to hold the generated Intermedia query strings
3839   l_party_contains_str VARCHAR2(32000); 
3840   l_party_site_contains_str VARCHAR2(32000);
3841   l_contact_contains_str VARCHAR2(32000);
3842   l_contact_pt_contains_str VARCHAR2(32000);
3843   l_denorm_str VARCHAR2(32000);
3844   l_ps_denorm_str VARCHAR2(32000);
3845   l_ct_denorm_str VARCHAR2(32000);
3846   l_cpt_denorm_str VARCHAR2(32000);
3847 
3848   -- Other local variables
3849   l_match_str VARCHAR2(30); -- Match type (AND or OR)
3850   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
3851   -- For Score calculation
3852   l_max_score NUMBER;
3853   l_match_idx NUMBER;
3854   l_entered_max_score NUMBER;
3855   FIRST BOOLEAN;
3856   l_search_ctx_id NUMBER; -- Generated Search Context ID
3857 
3858   l_TX39 VARCHAR2(2000);
3859   l_TX2 VARCHAR2(2000);
3860   l_TX46 VARCHAR2(2000);
3861   l_TX9 VARCHAR2(2000);
3862   l_TX22 VARCHAR2(2000);
3863   l_TX44 VARCHAR2(2000);
3864   l_TX1 VARCHAR2(2000);
3865   l_TX158 VARCHAR2(2000);
3866   l_TX47 VARCHAR2(2000);
3867   l_TX3 VARCHAR2(2000);
3868   l_TX15 VARCHAR2(2000);
3869   l_TX4 VARCHAR2(2000);
3870   l_TX10 VARCHAR2(2000);
3871   l_TX11 VARCHAR2(2000);
3872   l_TX5 VARCHAR2(2000);
3873   l_TX40 VARCHAR2(2000);
3874   l_TX34 VARCHAR2(2000);
3875   l_TX45 VARCHAR2(2000);
3876   l_TX156 VARCHAR2(2000);
3877   l_TX14 VARCHAR2(2000);
3878   l_TX6 VARCHAR2(2000);
3879   H_SCORES HZ_PARTY_SEARCH.score_list;
3880   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
3881   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
3882 
3883   l_score NUMBER;
3884   l_idx NUMBER;
3885   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
3886   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
3887   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
3888   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
3889   l_party_id NUMBER;
3890   l_ps_party_id NUMBER;
3891   l_ct_party_id NUMBER;
3892   l_cpt_party_id NUMBER;
3893   l_cpt_ps_id NUMBER;
3894   l_cpt_contact_id NUMBER;
3895   l_cpt_type VARCHAR2(100);
3896   l_party_site_id NUMBER;
3897   l_org_contact_id NUMBER;
3898   l_contact_pt_id NUMBER;
3899   l_cpt_level VARCHAR2(100);
3900   l_ps_contact_id NUMBER;
3901   l_party_max_score NUMBER;
3902   l_ps_max_score NUMBER;
3903   l_contact_max_score NUMBER;
3904   l_cpt_max_score NUMBER;
3905   l_denorm_max_score NUMBER;
3906   l_non_denorm_max_score NUMBER;
3907 
3908   defpt NUMBER :=0;
3909   defps NUMBER :=0;
3910   defct NUMBER :=0;
3911   defcpt NUMBER :=0;
3912   l_index NUMBER;
3913   l_max_thresh NUMBER;
3914   l_tmp NUMBER;
3915   l_merge_flag VARCHAR2(1);
3916   l_num_eval NUMBER:=0;
3917 
3918   L_RETURN_IMM_EXC Exception;
3919 
3920   
3921   /********************* Find Parties private procedures *******/
3922   PROCEDURE set_person_party_type IS
3923   BEGIN
3924     g_party_stage_rec.TX36:= 
3925         HZ_TRANS_PKG.EXACT(
3926              'PERSON'
3927              ,null,'PARTY_TYPE'
3928              ,'PARTY');
3929   END;
3930     
3931   PROCEDURE unset_person_party_type IS
3932   BEGIN
3933     g_party_stage_rec.TX36 := '';
3934   END;
3935   
3936   FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) 
3937   RETURN NUMBER IS
3938     l_party_type VARCHAR2(255);
3939     l_person_id NUMBER(15);
3940   BEGIN
3941     SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;
3942     IF l_party_type = 'PERSON' THEN
3943       RETURN p_party_id;
3944     ELSIF p_contact_id IS NULL THEN
3945       RETURN NULL;
3946     ELSE
3947       BEGIN 
3948         SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p
3949         WHERE oc.org_contact_id = p_contact_id
3950         AND r.relationship_id = oc.party_relationship_id 
3951         AND r.object_id = p_party_id
3952         AND p.party_id = r.subject_id 
3953         AND p.party_type = 'PERSON'
3954         AND ROWNUM=1;
3955         
3956         RETURN l_person_id;
3957       EXCEPTION
3958         WHEN NO_DATA_FOUND THEN
3959           RETURN NULL;
3960       END;      
3961     END IF;
3962   END;  
3963 
3964   PROCEDURE push_eval IS
3965   BEGIN
3966     H_PARTY_ID.DELETE;
3967     H_PARTY_ID_LIST.DELETE;
3968     H_SCORES.DELETE;        
3969     g_mappings.DELETE;
3970     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
3971     call_order(5) := call_order(1);
3972     call_type(5) := 'AND';
3973     call_max_score(5) := call_max_score(1);
3974     call_type(2) := 'OR';
3975   END;
3976 
3977   /**  Private procedure to acquire and score at party level  ***/
3978   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
3979     l_party_id_idx NUMBER:=1;
3980     l_ctx_id NUMBER;
3981   BEGIN
3982     SAVEPOINT eval_start;
3983     set_person_party_type;
3984     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3985       l_ctx_id := l_search_ctx_id;
3986       FORALL I in 1..H_PARTY_ID.COUNT 
3987          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3988              l_search_ctx_id,H_PARTY_ID(I));
3989       H_PARTY_ID.DELETE;
3990       H_PARTY_ID_LIST.DELETE;
3991     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3992       l_ctx_id := l_search_ctx_id;
3993       FORALL I in 1..H_PARTY_ID.COUNT 
3994          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3995              l_search_ctx_id,H_PARTY_ID(I));
3996       l_party_id_idx := H_PARTY_ID.COUNT+1;
3997     ELSE
3998       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3999          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
4000    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4001       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);
4002     END IF;
4003         IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 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 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);
4006     END IF;
4007           IF (l_party_site_contains_str IS NULL AND
4008              l_contact_contains_str IS NULL AND
4009              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN
4010             return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);
4011             RAISE L_RETURN_IMM_EXC;
4012           ELSE
4013             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);
4014           END IF;
4015         ELSE
4016           IF p_index>1 THEN
4017    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4018       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);
4019     END IF;
4020             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4021             FND_MSG_PUB.ADD;
4022             RAISE FND_API.G_EXC_ERROR;
4023           ELSE
4024             push_eval;
4025             RETURN;
4026           END IF;
4027         END IF;
4028       END IF;
4029       l_ctx_id := NULL;
4030       l_party_id_idx := H_PARTY_ID.COUNT+1;
4031     END IF;
4032     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
4033       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);
4034     END IF;
4035     LOOP 
4036       FETCH l_party_cur INTO
4037          l_party_id , l_TX34, l_TX40, l_TX158, l_TX39, l_TX44, l_TX45, l_TX46, l_TX47;
4038       EXIT WHEN l_party_cur%NOTFOUND;
4039       l_index := map_id(l_party_id);
4040       l_score := GET_PARTY_SCORE(l_TX34,l_TX40,l_TX158,l_TX39,l_TX44,l_TX45,l_TX46,l_TX47);
4041       IF NOT H_SCORES.EXISTS(l_index) THEN
4042         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
4043       ELSE
4044         H_SCORES(l_index).TOTAL_SCORE := 
4045                 H_SCORES(l_index).TOTAL_SCORE+l_score;
4046         H_SCORES(l_index).PARTY_SCORE := l_score;
4047       END IF;
4048       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4049         H_PARTY_ID_LIST(l_index) := 1;
4050         H_PARTY_ID(l_party_id_idx) := l_party_id;
4051         l_party_id_idx:= l_party_id_idx+1;
4052       END IF;
4053       IF (l_party_id_idx-1)>l_max_thresh THEN
4054          IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
4055           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
4056           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
4057           AND l_contact_pt_contains_str IS NULL THEN
4058           H_PARTY_ID.DELETE(l_party_id_idx-1);
4059           H_PARTY_ID_LIST.DELETE(l_index);
4060           H_SCORES.DELETE(l_index);
4061           EXIT;
4062         END IF;
4063         CLOSE l_party_cur;
4064         IF p_index>1 THEN
4065    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4066       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);
4067     END IF;
4068           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4069           FND_MSG_PUB.ADD;
4070           RAISE FND_API.G_EXC_ERROR;
4071         ELSE
4072           push_eval;
4073           RETURN;
4074         END IF;
4075       END IF;
4076     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4077       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);
4078       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);
4079       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);
4080     END IF;
4081     END LOOP;
4082     CLOSE l_party_cur;
4083     ROLLBACK to eval_start;
4084   END;
4085   PROCEDURE open_person_contact_cursor(
4086             p_contains_str  VARCHAR2, 
4087             p_search_ctx_id  NUMBER, 
4088             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
4089   BEGIN
4090     OPEN x_cursor FOR 
4091       SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID, TX2, TX156, TX6, TX5
4092       FROM HZ_STAGED_CONTACTS stage
4093       WHERE contains( concat_col, p_contains_str)>0
4094       AND ORG_CONTACT_ID in (
4095             SELECT  /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ 
4096             org_contact_id
4097             from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc
4098             where d.party_id = r.subject_id
4099             and oc.party_relationship_id = r.relationship_id
4100             and d.search_context_id = p_search_ctx_id);   
4101   exception
4102     when others then
4103       if (instrb(SQLERRM,'DRG-51030')>0) then 
4104         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
4105         FND_MSG_PUB.ADD;
4106         RAISE FND_API.G_EXC_ERROR;
4107       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
4108         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
4109         FND_MSG_PUB.ADD;
4110         RAISE FND_API.G_EXC_ERROR;
4111       else 
4112         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4113       end if;
4114   END;
4115 
4116   /**  Private procedure to acquire and score at party site level  ***/
4117   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
4118     l_party_id_idx NUMBER:=1;
4119     l_ctx_id NUMBER;
4120     h_ps_id HZ_PARTY_SEARCH.IDList;
4121     h_ps_party_id HZ_PARTY_SEARCH.IDList;
4122     h_ps_score HZ_PARTY_SEARCH.IDList;
4123     detcnt NUMBER := 1;
4124     l_person_id NUMBER;
4125   BEGIN
4126     SAVEPOINT eval_start;
4127     unset_person_party_type;
4128     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
4129       l_ctx_id := l_search_ctx_id;
4130       FORALL I in 1..H_PARTY_ID.COUNT 
4131          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4132              l_search_ctx_id,H_PARTY_ID(I));
4133       H_PARTY_ID.DELETE;
4134       H_PARTY_ID_LIST.DELETE;
4135     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
4136       l_ctx_id := l_search_ctx_id;
4137       FORALL I in 1..H_PARTY_ID.COUNT 
4138          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4139              l_search_ctx_id,H_PARTY_ID(I));
4140       l_party_id_idx := H_PARTY_ID.COUNT+1;
4141     ELSE
4142       l_party_id_idx := H_PARTY_ID.COUNT+1;
4143       l_ctx_id := NULL;
4144     END IF;
4145     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);
4146     LOOP 
4147       FETCH l_party_site_cur INTO
4148          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;
4149       EXIT WHEN l_party_site_cur%NOTFOUND;
4150       IF l_ctx_id IS NULL THEN
4151         l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);
4152       ELSE
4153         l_person_id := l_ps_party_id;
4154       END IF;
4155       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4156         l_index := map_id(l_person_id);
4157         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);
4158         IF NOT H_SCORES.EXISTS(l_index) THEN
4159           IF l_ctx_id IS NULL THEN
4160             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);
4161           END IF;
4162         ELSE
4163           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
4164             H_SCORES(l_index).TOTAL_SCORE := 
4165                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
4166             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
4167           END IF;
4168         END IF;
4169         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4170           H_PARTY_ID_LIST(l_index) := 1;
4171           H_PARTY_ID(l_party_id_idx) := l_person_id;
4172           l_party_id_idx:= l_party_id_idx+1;
4173         END IF;
4174         IF (l_party_id_idx-1)>l_max_thresh THEN
4175           CLOSE l_party_site_cur;
4176           IF p_index>1 THEN
4177    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4178       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);
4179     END IF;
4180             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4181             FND_MSG_PUB.ADD;
4182             RAISE FND_API.G_EXC_ERROR;
4183           ELSE
4184             push_eval;
4185             RETURN;
4186           END IF;
4187         END IF;
4188         IF p_ins_details = 'Y' THEN
4189           h_ps_id(detcnt) := l_party_site_id;
4190           h_ps_party_id(detcnt) := l_person_id;
4191           IF (p_emax_score > 0) THEN 
4192               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
4193           ELSE 
4194               h_ps_score(detcnt) := 0; 
4195           END IF; 
4196           detcnt := detcnt +1;
4197         END IF;
4198     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4199       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);
4200       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);
4201       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);
4202       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);
4203     END IF;
4204       END IF;
4205     END LOOP;
4206     CLOSE l_party_site_cur;
4207     ROLLBACK to eval_start;
4208     IF p_ins_details = 'Y' THEN
4209       FORALL I in 1..h_ps_id.COUNT 
4210         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
4211           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
4212     END IF;
4213   END;
4214 
4215   /**  Private procedure to acquire and score at party site level  ***/
4216   PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
4217     l_party_id_idx NUMBER:=1;
4218     l_ctx_id NUMBER;
4219     h_ct_id HZ_PARTY_SEARCH.IDList;
4220     h_ct_party_id HZ_PARTY_SEARCH.IDList;
4221     h_ct_score HZ_PARTY_SEARCH.IDList;
4222     detcnt NUMBER := 1;
4223     l_person_id NUMBER;
4224   BEGIN
4225     SAVEPOINT eval_start;
4226     l_ctx_id := l_search_ctx_id;
4227     unset_person_party_type;
4228     FORALL I in 1..H_PARTY_ID.COUNT 
4229          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4230              l_search_ctx_id,H_PARTY_ID(I));
4231       l_party_id_idx := H_PARTY_ID.COUNT+1;
4232     open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);
4233     LOOP 
4234       FETCH l_contact_cur INTO
4235          l_org_contact_id, l_ct_party_id , l_TX2, l_TX156, l_TX6, l_TX5;
4236       EXIT WHEN l_contact_cur%NOTFOUND;
4237       l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);
4238       l_index := map_id(l_person_id);
4239       IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4240         l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX2,l_TX156,l_TX6,l_TX5);
4241         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
4242           H_SCORES(l_index).TOTAL_SCORE := 
4243                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
4244           H_SCORES(l_index).CONTACT_SCORE := l_score;
4245         END IF;
4246       END IF;
4247       IF p_ins_details = 'Y' THEN
4248         h_ct_id(detcnt) := l_org_contact_id;
4249         h_ct_party_id(detcnt) := l_person_id;
4250         IF (p_emax_score > 0) THEN 
4251             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
4252         ELSE 
4253             h_ct_score(detcnt) := 0; 
4254         END IF; 
4255         detcnt := detcnt +1;
4256       END IF;
4257     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4258       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);
4259       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);
4260       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);
4261       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);
4262     END IF;
4263     END LOOP;
4264     CLOSE l_contact_cur;
4265     ROLLBACK to eval_start;
4266     IF p_ins_details = 'Y' THEN
4267       FORALL I in 1..h_ct_id.COUNT 
4268         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
4269           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
4270     END IF;
4271   END;
4272 
4273   /**  Private procedure to acquire and score at contact point level  ***/
4274   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
4275     l_party_id_idx NUMBER:=1;
4276     l_ctx_id NUMBER;
4277     h_cpt_id HZ_PARTY_SEARCH.IDList;
4278     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
4279     h_cpt_score HZ_PARTY_SEARCH.IDList;
4280     detcnt NUMBER := 1;
4281     l_person_id NUMBER;
4282     is_a_match VARCHAR2(1) := 'Y';
4283     l_cpt_flag VARCHAR2(1) := 'N';
4284   BEGIN
4285    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4286       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);
4287     END IF;
4288    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4289       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);
4290     END IF;
4291     SAVEPOINT eval_start;
4292     unset_person_party_type;
4293     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
4294       l_ctx_id := l_search_ctx_id;
4295       FORALL I in 1..H_PARTY_ID.COUNT 
4296          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4297              l_search_ctx_id,H_PARTY_ID(I));
4298       H_PARTY_ID.DELETE;
4299       H_PARTY_ID_LIST.DELETE;
4300     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
4301    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4302       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);
4303     END IF;
4304       l_ctx_id := l_search_ctx_id;
4305       FORALL I in 1..H_PARTY_ID.COUNT 
4306          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4307              l_search_ctx_id,H_PARTY_ID(I));
4308       l_party_id_idx := H_PARTY_ID.COUNT+1;
4309     ELSE
4310    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4311       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);
4312     END IF;
4313       l_ctx_id := NULL;
4314       l_party_id_idx := H_PARTY_ID.COUNT+1;
4315     END IF;
4316    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4317       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);
4318     END IF;
4319     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);
4320     LOOP 
4321       FETCH l_contact_pt_cur INTO
4322          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;
4323       EXIT WHEN l_contact_pt_cur%NOTFOUND;
4324    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4325       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);
4326     END IF;
4327    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4328       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);
4329     END IF;
4330    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4331       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);
4332     END IF;
4333       IF l_ctx_id IS NULL THEN
4334         l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);
4335       ELSE
4336         l_person_id := l_cpt_party_id;
4337       END IF;
4338       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4339         l_index := map_id(l_person_id);
4340         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
4341         IF NOT H_SCORES.EXISTS(l_index) THEN
4342           IF l_ctx_id IS NULL THEN
4343             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);
4344            H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4345    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4346       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);
4347     END IF;
4348    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4349       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);
4350     END IF;
4351    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4352       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);
4353     END IF;
4354           END IF;
4355         ELSE
4356    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4357       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);
4358     END IF;
4359           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
4360             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
4361               H_SCORES(l_index).TOTAL_SCORE :=
4362               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;
4363               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;
4364               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4365    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4366       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);
4367     END IF;
4368    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4369       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);
4370     END IF;
4371    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4372       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);
4373     END IF;
4374    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4375       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);
4376     END IF;
4377             END IF;
4378           ELSE
4379    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4380       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);
4381     END IF;
4382             H_SCORES(l_index).TOTAL_SCORE :=
4383             H_SCORES(l_index).TOTAL_SCORE+l_score;
4384             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4385             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4386    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4387       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);
4388     END IF;
4389    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4390       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);
4391     END IF;
4392    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4393       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);
4394     END IF;
4395           END IF;
4396         END IF;
4397    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4398       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);
4399     END IF;
4400    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4401       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);
4402     END IF;
4403         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4404           -- If rule is match all 
4405           IF l_match_str = ' AND ' THEN
4406    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4407       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);
4408     END IF;
4409             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4410               is_a_match := 'Y';
4411    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4412       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);
4413     END IF;
4414             ELSE
4415               is_a_match := 'N';
4416    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4417       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);
4418     END IF;
4419             END IF;
4420           -- Else it is construed as a match anyway 
4421           ELSE
4422             is_a_match := 'Y';
4423    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4424       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);
4425     END IF;
4426           END IF;
4427           IF (is_a_match='Y') THEN
4428           H_PARTY_ID_LIST(l_index) := 1;
4429           H_PARTY_ID(l_party_id_idx) := l_person_id;
4430           l_party_id_idx:= l_party_id_idx+1;
4431       end if;
4432         END IF;
4433         IF (l_party_id_idx-1)>l_max_thresh THEN
4434           CLOSE l_contact_pt_cur;
4435           IF p_index>1 THEN
4436    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4437       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);
4438     END IF;
4439             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4440             FND_MSG_PUB.ADD;
4441             RAISE FND_API.G_EXC_ERROR;
4442           ELSE
4443             push_eval;
4444             RETURN;
4445           END IF;
4446         END IF;
4447         IF p_ins_details = 'Y' THEN
4448           -- If rule is match all 
4449           IF l_match_str = ' AND ' THEN
4450    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4451       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);
4452     END IF;
4453             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4454               is_a_match := 'Y';
4455    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4456       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);
4457     END IF;
4458             ELSE
4459               is_a_match := 'N';
4460    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4461       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);
4462     END IF;
4463             END IF;
4464           -- Else it is construed as a match anyway 
4465           ELSE
4466             is_a_match := 'Y';
4467    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4468       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);
4469     END IF;
4470           END IF;
4471           IF (is_a_match='Y') THEN
4472    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4473       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);
4474     END IF;
4475           FOR I IN 1..h_cpt_id.COUNT LOOP
4476           IF h_cpt_id(I)=l_contact_pt_id THEN
4477           	 l_cpt_flag := 'Y';
4478           END IF;
4479           END LOOP;
4480           IF l_cpt_flag = 'Y' THEN
4481           	 NULL;
4482           ELSE 
4483          	 h_cpt_id(detcnt) := l_contact_pt_id;
4484           h_cpt_party_id(detcnt) := l_person_id;
4485           	 IF (p_emax_score > 0) THEN 
4486               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
4487             ELSE 
4488               h_cpt_score(detcnt) := 0; 
4489           	 END IF; 
4490             detcnt := detcnt +1;
4491           END IF;
4492       end if;
4493         END IF;
4494     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4495       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);
4496       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);
4497       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);
4498       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);
4499     END IF;
4500       END IF;
4501     END LOOP;
4502     CLOSE l_contact_pt_cur;
4503     ROLLBACK to eval_start;
4504     IF p_ins_details = 'Y' THEN
4505       FORALL I in 1..h_cpt_id.COUNT 
4506         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
4507           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
4508     END IF;
4509   END;
4510 
4511   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
4512   PROCEDURE do_eval (p_index NUMBER) IS
4513     l_ctx_id NUMBER;
4514     l_threshold NUMBER;
4515     other_acq_criteria_exists BOOLEAN; 
4516     acq_cnt NUMBER; 
4517   BEGIN
4518     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
4519      l_threshold :=  round(( l_entered_max_score / 685) * 75); 
4520     other_acq_criteria_exists := TRUE ;
4521     --check if acquisition criteria exists for any other entity
4522     IF l_party_contains_str IS NOT NULL THEN 
4523     	acq_cnt := 1; 
4524     END IF; 
4525     IF l_party_site_contains_str IS NOT NULL THEN 
4526     	acq_cnt := acq_cnt+1; 
4527     END IF; 
4528     IF l_contact_contains_str IS NOT NULL THEN 
4529     	acq_cnt := acq_cnt+1; 
4530     END IF;
4531     IF l_contact_pt_contains_str IS NOT NULL THEN 
4532     	acq_cnt := acq_cnt+1; 
4533     END IF;  
4534     IF acq_cnt>1 THEN 
4535     	other_acq_criteria_exists := TRUE; 
4536     ELSE
4537     	other_acq_criteria_exists := FALSE; 
4538     END IF;  
4539       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);
4540       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);
4541       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);
4542     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
4543     	IF ( call_max_score(p_index) < l_threshold) THEN 
4544    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4545       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);
4546     END IF;
4547 	     	RETURN;	
4548     	ELSE 
4549    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4550       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);
4551     END IF;
4552 	     	FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED'); 
4553 	     	FND_MSG_PUB.ADD; 
4554 	     	RAISE FND_API.G_EXC_ERROR; 
4555     	END IF; 
4556 	  ELSE
4557    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4558       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);
4559     END IF;
4560       FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4561       FND_MSG_PUB.ADD;
4562       RAISE FND_API.G_EXC_ERROR;
4563      END IF; 
4564     END IF;
4565     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
4566       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
4567     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
4568       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4569     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
4570       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4571     END IF;
4572   END;
4573   /************ End of find_persons private procedures **********/ 
4574 
4575   BEGIN
4576 
4577     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4578       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);
4579     END IF;
4580     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4581       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);
4582       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);
4583       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);
4584     END IF;
4585     -- ************************************
4586     -- STEP 1. Initialization and error checks
4587 
4588     l_match_str := ' AND ';
4589     IF p_match_type = 'AND' THEN
4590       l_match_str := ' AND ';
4591     ELSIF p_match_type = 'OR' THEN
4592       l_match_str := ' OR ';
4593     END IF;
4594     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);
4595     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4596 
4597     l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
4598     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
4599       g_score_until_thresh := true;
4600     ELSE
4601       g_score_until_thresh := false;
4602     END IF;
4603     -- ************************************************************
4604     -- STEP 2. Setup of intermedia query strings for Acquisition query
4605     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
4606     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
4607     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
4608     l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);
4609     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
4610 
4611     -- Setup Search Context ID
4612     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4613     x_search_ctx_id := l_search_ctx_id;
4614 
4615     IF l_party_contains_str IS NULL THEN
4616       defpt := 1;
4617     END IF;
4618     IF l_party_site_contains_str IS NULL THEN
4619       defps := 1;
4620     END IF;
4621     IF l_contact_contains_str IS NULL THEN
4622       defct := 1;
4623     END IF;
4624     IF l_contact_pt_contains_str IS NULL THEN
4625       defcpt := 1;
4626     END IF;
4627 
4628     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4629       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);
4630       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);
4631       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);
4632       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);
4633       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);
4634       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);
4635     END IF;
4636     FOR I in 1..5 LOOP
4637       do_eval(I);
4638     END LOOP;
4639     IF l_contact_contains_str IS NOT NULL THEN
4640       eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);
4641     END IF;
4642     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4643       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);
4644     END IF;
4645     x_num_matches := 0;
4646     l_num_eval := 0;
4647     IF l_match_str = ' OR ' THEN
4648       l_party_id := H_SCORES.FIRST;
4649     ELSE
4650       l_party_id := H_PARTY_ID_LIST.FIRST;
4651     END IF;
4652     WHILE l_party_id IS NOT NULL LOOP
4653       l_num_eval:= l_num_eval+1;
4654     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4655       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);
4656       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);
4657     END IF;
4658       IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(75/685) THEN
4659             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
4660             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));
4661             x_num_matches := x_num_matches+1;
4662       END IF;
4663       IF l_match_str = ' OR ' THEN
4664         l_party_id:=H_SCORES.NEXT(l_party_id);
4665       ELSE
4666         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
4667       END IF;
4668     END LOOP;
4669     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
4670     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4671       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);
4672     END IF;
4673 EXCEPTION
4674   WHEN L_RETURN_IMM_EXC THEN
4675     RETURN;
4676   WHEN FND_API.G_EXC_ERROR THEN
4677     RAISE FND_API.G_EXC_ERROR;
4678   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4679     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4680   WHEN OTHERS THEN
4681     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4682     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.find_persons');
4683     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4684     FND_MSG_PUB.ADD;
4685     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4686 END find_persons;
4687 
4688 PROCEDURE find_persons (
4689       p_rule_id               IN      NUMBER,
4690       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
4691       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
4692       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
4693       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
4694       p_restrict_sql          IN      VARCHAR2,
4695       p_match_type            IN      VARCHAR2,
4696       p_search_merged         IN      VARCHAR2,
4697       p_ins_details           IN      VARCHAR2,
4698       x_search_ctx_id         OUT     NUMBER,
4699       x_num_matches           OUT     NUMBER
4700 ) IS
4701 
4702   BEGIN
4703      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);
4704   END;
4705 PROCEDURE find_party_details (
4706       p_rule_id               IN      NUMBER,
4707       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
4708       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
4709       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
4710       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
4711       p_restrict_sql          IN      VARCHAR2,
4712       p_match_type            IN      VARCHAR2,
4713       p_search_merged         IN      VARCHAR2,
4714       x_search_ctx_id         OUT     NUMBER,
4715       x_num_matches           OUT     NUMBER
4716 ) IS
4717 
4718   BEGIN
4719     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4720       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);
4721     END IF;
4722     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4723       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);
4724       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);
4725       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);
4726       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);
4727     END IF;
4728   find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,
4729                p_restrict_sql,p_match_type,p_search_merged,null,null, null,'Y',
4730                x_search_ctx_id,x_num_matches);
4731   DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4732   AND NOT EXISTS 
4733        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);
4734   DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4735   AND NOT EXISTS 
4736        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);
4737   DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4738   AND NOT EXISTS 
4739        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);
4740     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4741       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);
4742     END IF;
4743 EXCEPTION
4744   WHEN FND_API.G_EXC_ERROR THEN
4745     RAISE FND_API.G_EXC_ERROR;
4746   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4747     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4748   WHEN OTHERS THEN
4749     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4750     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.find_party_details');
4751     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4752     FND_MSG_PUB.ADD;
4753     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4754 END find_party_details;
4755 
4756 PROCEDURE find_duplicate_parties (
4757       p_rule_id               IN      NUMBER,
4758       p_party_id              IN      NUMBER,
4759       p_restrict_sql          IN      VARCHAR2,
4760       p_match_type            IN      VARCHAR2,
4761       p_dup_batch_id          IN      NUMBER,
4762       p_search_merged         IN      VARCHAR2,
4763       x_dup_set_id            OUT     NUMBER,
4764       x_search_ctx_id         OUT     NUMBER,
4765       x_num_matches           OUT     NUMBER
4766 ) IS
4767   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4768   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4769   l_contact_list HZ_PARTY_SEARCH.contact_list;
4770   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4771   l_match_idx NUMBER;
4772 
4773   --Fix for bug 4417124
4774   l_use_contact_addr_info BOOLEAN := TRUE;
4775   l_use_contact_cpt_info BOOLEAN  := TRUE;
4776   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
4777   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
4778 
4779 BEGIN
4780 
4781     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4782       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);
4783     END IF;
4784     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4785       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);
4786       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);
4787       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);
4788       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);
4789       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);
4790       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);
4791     END IF;
4792 
4793   --Fix for bug 4417124 
4794 
4795   SELECT use_contact_addr_flag, use_contact_cpt_flag 
4796   INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
4797   FROM hz_match_rules_b 
4798   WHERE match_rule_id = 32; 
4799 
4800   IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
4801     l_use_contact_addr_info := FALSE; 
4802   END IF; 
4803 
4804   IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
4805     l_use_contact_cpt_info := FALSE; 
4806   END IF; 
4807 
4808  --End fix for bug 4417124
4809 
4810   get_party_for_search(
4811               p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);
4812 
4813     IF NOT check_prim_cond (l_party_rec,
4814                             l_party_site_list,
4815                             l_contact_list,
4816                             l_cpt_list) THEN
4817       x_dup_set_id:=NULL;
4818       x_search_ctx_id:=NULL;
4819       x_num_matches:=0;
4820       RETURN;
4821     END IF;
4822   x_dup_set_id := NULL;
4823   IF p_dup_batch_id IS NOT NULL THEN
4824     SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;
4825   END IF;
4826 
4827   --Fix for bug 4417124 
4828   IF l_party_rec.PARTY_TYPE = 'PERSON' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN
4829     find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4830                p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4831                x_search_ctx_id,x_num_matches);
4832   ELSE
4833     find_parties(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   END IF;
4837 
4838   IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN
4839     INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,
4840       STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,
4841       LAST_UPDATE_DATE, LAST_UPDATED_BY) 
4842     VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, 'SYSBATCH',
4843       'PARTY_MERGE', hz_utility_pub.created_by, hz_utility_pub.creation_date,
4844       hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,
4845       hz_utility_pub.user_id);
4846 
4847     INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
4848       MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
4849       LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) 
4850     VALUES (p_party_id,x_dup_set_id,0,0,
4851       'Y',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,
4852       hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,
4853       hz_utility_pub.user_id,p_dup_batch_id);
4854   ELSE
4855     x_dup_set_id := NULL;
4856   END IF;
4857     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4858       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);
4859     END IF;
4860 EXCEPTION
4861   WHEN FND_API.G_EXC_ERROR THEN
4862     RAISE FND_API.G_EXC_ERROR;
4863   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4864     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4865   WHEN OTHERS THEN
4866     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4867     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.find_duplicate_parties');
4868     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4869     FND_MSG_PUB.ADD;
4870     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4871 END find_duplicate_parties;
4872 
4873 PROCEDURE find_duplicate_party_sites (
4874       p_rule_id               IN      NUMBER,
4875       p_party_site_id         IN      NUMBER,
4876       p_party_id              IN      NUMBER,
4877       p_restrict_sql          IN      VARCHAR2,
4878       p_match_type            IN      VARCHAR2,
4879       x_search_ctx_id         OUT     NUMBER,
4880       x_num_matches           OUT     NUMBER
4881 ) IS
4882 
4883    l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
4884    l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4885    l_contact_list HZ_PARTY_SEARCH.contact_list; 
4886    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
4887    contact_point_ids HZ_PARTY_SEARCH.IDList; 
4888    p_party_site_list HZ_PARTY_SEARCH.IDList;  
4889    p_contact_ids HZ_PARTY_SEARCH.IDList; 
4890   l_match_idx NUMBER;
4891    cursor get_cpts_for_party_sites is select contact_point_id  
4892                          from hz_contact_points 
4893                          where owner_table_name = 'HZ_PARTY_SITES' 
4894                          and primary_flag='Y'
4895                          and owner_table_id = p_party_site_id; 
4896    BEGIN 
4897     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4898       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);
4899     END IF;
4900     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4901       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);
4902       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);
4903       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);
4904       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);
4905       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);
4906     END IF;
4907      p_party_site_list(1) := p_party_site_id; 
4908      OPEN get_cpts_for_party_sites;
4909      LOOP       
4910      FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; 
4911          EXIT WHEN get_cpts_for_party_sites%NOTFOUND; 
4912      END LOOP;  
4913      CLOSE get_cpts_for_party_sites; 
4914   
4915      get_search_criteria (
4916          null,
4917          p_party_site_list,
4918          HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4919          contact_point_ids, 
4920          l_party_search_rec,
4921          l_party_site_list,
4922          l_contact_list,
4923          l_contact_point_list) ;
4924     IF NOT check_prim_cond (l_party_search_rec,
4925                             l_party_site_list,
4926                             l_contact_list,
4927                             l_contact_point_list) THEN
4928       x_search_ctx_id:=NULL;
4929       x_num_matches:=0;
4930       RETURN;
4931     END IF;
4932  
4933      get_matching_party_sites (p_rule_id, 
4934          p_party_id, 
4935          l_party_site_list, 
4936          l_contact_point_list,
4937          p_restrict_sql, 
4938          p_match_type, 
4939          p_party_site_id, 
4940          x_search_ctx_id,
4941          x_num_matches);
4942     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4943       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);
4944     END IF;
4945 EXCEPTION
4946   WHEN FND_API.G_EXC_ERROR THEN
4947     RAISE FND_API.G_EXC_ERROR;
4948   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4949     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4950   WHEN OTHERS THEN
4951     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4952     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.find_duplicate_party_sites');
4953     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4954     FND_MSG_PUB.ADD;
4955     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4956 END find_duplicate_party_sites; 
4957  
4958 PROCEDURE find_duplicate_contacts (
4959       p_rule_id               IN      NUMBER,
4960       p_org_contact_id        IN      NUMBER,
4961       p_party_id              IN      NUMBER,
4962       p_restrict_sql          IN      VARCHAR2,
4963       p_match_type            IN      VARCHAR2,
4964       x_search_ctx_id         OUT     NUMBER,
4965       x_num_matches           OUT     NUMBER
4966 ) IS
4967 
4968  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4969  l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4970  l_contact_list HZ_PARTY_SEARCH.contact_list; 
4971  l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
4972  contact_point_ids HZ_PARTY_SEARCH.IDList; 
4973  p_party_site_list HZ_PARTY_SEARCH.IDList;   
4974  p_contact_ids HZ_PARTY_SEARCH.IDList; 
4975   l_match_idx NUMBER;
4976  cursor get_cpt_for_contact_id is select  contact_point_id 
4977    from hz_org_contacts a, hz_relationships b, hz_contact_points c 
4978    where a.party_relationship_id = b.relationship_id 
4979      and c.owner_table_name = 'HZ_PARTIES' 
4980      and c.primary_flag='Y'
4981      and c.owner_table_id = b.party_id 
4982      and b.directional_flag = 'F'  
4983      and a.org_contact_id = p_org_contact_id; 
4984 BEGIN 
4985     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4986       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);
4987     END IF;
4988     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4989       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);
4990       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);
4991       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);
4992       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);
4993       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);
4994     END IF;
4995     p_contact_ids(1) := p_org_contact_id; 
4996     OPEN get_cpt_for_contact_id; 
4997     LOOP 
4998     FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; 
4999         EXIT WHEN get_cpt_for_contact_id%NOTFOUND; 
5000     END LOOP;  
5001     CLOSE get_cpt_for_contact_id; 
5002  
5003     get_search_criteria (
5004         null,
5005         HZ_PARTY_SEARCH.G_MISS_ID_LIST,
5006         p_contact_ids,
5007         contact_point_ids, 
5008         l_party_search_rec,
5009         l_party_site_list, 
5010         l_contact_list,
5011         l_contact_point_list) ;
5012     IF NOT check_prim_cond (l_party_search_rec,
5013                             l_party_site_list,
5014                             l_contact_list,
5015                             l_contact_point_list) THEN
5016       x_search_ctx_id:=NULL;
5017       x_num_matches:=0;
5018       RETURN;
5019     END IF;
5020  
5021     get_matching_contacts (p_rule_id, 
5022         p_party_id, 
5023         l_contact_list, 
5024         l_contact_point_list, 
5025         p_restrict_sql, 
5026         p_match_type, 
5027         p_org_contact_id, 
5028         x_search_ctx_id, 
5029         x_num_matches);
5030  
5031     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5032       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);
5033     END IF;
5034 EXCEPTION
5035   WHEN FND_API.G_EXC_ERROR THEN
5036     RAISE FND_API.G_EXC_ERROR;
5037   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5038     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5039   WHEN OTHERS THEN
5040     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5041     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.find_duplicate_contacts');
5042     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5043     FND_MSG_PUB.ADD;
5044     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5045 END find_duplicate_contacts; 
5046 
5047 PROCEDURE find_duplicate_contact_points (
5048       p_rule_id               IN      NUMBER,
5049       p_contact_point_id      IN      NUMBER,
5050       p_party_id              IN      NUMBER,
5051       p_restrict_sql          IN      VARCHAR2,
5052       p_match_type            IN      VARCHAR2,
5053       x_search_ctx_id         OUT     NUMBER,
5054       x_num_matches           OUT     NUMBER
5055 ) IS
5056  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
5057   l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
5058    l_contact_list HZ_PARTY_SEARCH.contact_list;  
5059    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;  
5060    contact_point_ids HZ_PARTY_SEARCH.IDList;  
5061   p_party_site_list HZ_PARTY_SEARCH.IDList;   
5062   p_contact_ids HZ_PARTY_SEARCH.IDList;  
5063   l_match_idx NUMBER;
5064 
5065 BEGIN
5066     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5067       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);
5068     END IF;
5069     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5070       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);
5071       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);
5072       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);
5073       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);
5074       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);
5075     END IF;
5076   contact_point_ids(1) := p_contact_point_id;   
5077   get_search_criteria (   
5078       null, 
5079       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
5080       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
5081       contact_point_ids,   
5082       l_party_search_rec, 
5083       l_party_site_list, 
5084       l_contact_list, 
5085       l_contact_point_list ); 
5086     
5087     IF NOT check_prim_cond (l_party_search_rec,
5088                             l_party_site_list,
5089                             l_contact_list,
5090                             l_contact_point_list) THEN
5091       x_search_ctx_id:=NULL;
5092       x_num_matches:=0;
5093       RETURN;
5094     END IF;
5095    get_matching_contact_points ( 
5096       p_rule_id, 
5097       p_party_id, 
5098      l_contact_point_list, 
5099       p_restrict_sql, 
5100       p_match_type, 
5101       p_contact_point_id, 
5102       x_search_ctx_id, 
5103       x_num_matches );  
5104     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5105       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);
5106     END IF;
5107 EXCEPTION
5108   WHEN FND_API.G_EXC_ERROR THEN
5109     RAISE FND_API.G_EXC_ERROR;
5110   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5111     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5112   WHEN OTHERS THEN
5113     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5114     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.find_duplicate_contact_points');
5115     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5116     FND_MSG_PUB.ADD;
5117     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5118 END find_duplicate_contact_points;
5119 
5120 PROCEDURE find_parties_dynamic (
5121         p_rule_id               IN      NUMBER,
5122         p_attrib_id1            IN      NUMBER,
5123         p_attrib_id2            IN      NUMBER,
5124         p_attrib_id3            IN      NUMBER,
5125         p_attrib_id4            IN      NUMBER,
5126         p_attrib_id5            IN      NUMBER,
5127         p_attrib_id6            IN      NUMBER,
5128         p_attrib_id7            IN      NUMBER,
5129         p_attrib_id8            IN      NUMBER,
5130         p_attrib_id9            IN      NUMBER,
5131         p_attrib_id10           IN      NUMBER,
5132         p_attrib_id11           IN      NUMBER,
5133         p_attrib_id12           IN      NUMBER,
5134         p_attrib_id13           IN      NUMBER,
5135         p_attrib_id14           IN      NUMBER,
5136         p_attrib_id15           IN      NUMBER,
5137         p_attrib_id16           IN      NUMBER,
5138         p_attrib_id17           IN      NUMBER,
5139         p_attrib_id18           IN      NUMBER,
5140         p_attrib_id19           IN      NUMBER,
5141         p_attrib_id20           IN      NUMBER,
5142         p_attrib_val1           IN      VARCHAR2,
5143         p_attrib_val2           IN      VARCHAR2,
5144         p_attrib_val3           IN      VARCHAR2,
5145         p_attrib_val4           IN      VARCHAR2,
5146         p_attrib_val5           IN      VARCHAR2,
5147         p_attrib_val6           IN      VARCHAR2,
5148         p_attrib_val7           IN      VARCHAR2,
5149         p_attrib_val8           IN      VARCHAR2,
5150         p_attrib_val9           IN      VARCHAR2,
5151         p_attrib_val10          IN      VARCHAR2,
5152         p_attrib_val11          IN      VARCHAR2,
5153         p_attrib_val12          IN      VARCHAR2,
5154         p_attrib_val13          IN      VARCHAR2,
5155         p_attrib_val14          IN      VARCHAR2,
5156         p_attrib_val15          IN      VARCHAR2,
5157         p_attrib_val16          IN      VARCHAR2,
5158         p_attrib_val17          IN      VARCHAR2,
5159         p_attrib_val18          IN      VARCHAR2,
5160         p_attrib_val19          IN      VARCHAR2,
5161         p_attrib_val20          IN      VARCHAR2,
5162         p_restrict_sql          IN      VARCHAR2,
5163         p_match_type            IN      VARCHAR2,
5164         p_search_merged         IN      VARCHAR2,
5165         x_search_ctx_id         OUT     NUMBER,
5166         x_num_matches           OUT     NUMBER
5167 ) IS
5168   BEGIN
5169     call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,
5170                      p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,
5171                      p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,
5172                      p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,
5173                      p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,
5174                      p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,
5175                      p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,
5176                      p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,
5177                      p_restrict_sql,'FIND_PARTIES',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);
5178  END;
5179 
5180 PROCEDURE call_api_dynamic (
5181         p_rule_id               IN      NUMBER,
5182         p_attrib_id1            IN      NUMBER,
5183         p_attrib_id2            IN      NUMBER,
5184         p_attrib_id3            IN      NUMBER,
5185         p_attrib_id4            IN      NUMBER,
5186         p_attrib_id5            IN      NUMBER,
5187         p_attrib_id6            IN      NUMBER,
5188         p_attrib_id7            IN      NUMBER,
5189         p_attrib_id8            IN      NUMBER,
5190         p_attrib_id9            IN      NUMBER,
5191         p_attrib_id10           IN      NUMBER,
5192         p_attrib_id11           IN      NUMBER,
5193         p_attrib_id12           IN      NUMBER,
5194         p_attrib_id13           IN      NUMBER,
5195         p_attrib_id14           IN      NUMBER,
5196         p_attrib_id15           IN      NUMBER,
5197         p_attrib_id16           IN      NUMBER,
5198         p_attrib_id17           IN      NUMBER,
5199         p_attrib_id18           IN      NUMBER,
5200         p_attrib_id19           IN      NUMBER,
5201         p_attrib_id20           IN      NUMBER,
5202         p_attrib_val1           IN      VARCHAR2,
5203         p_attrib_val2           IN      VARCHAR2,
5204         p_attrib_val3           IN      VARCHAR2,
5205         p_attrib_val4           IN      VARCHAR2,
5206         p_attrib_val5           IN      VARCHAR2,
5207         p_attrib_val6           IN      VARCHAR2,
5208         p_attrib_val7           IN      VARCHAR2,
5209         p_attrib_val8           IN      VARCHAR2,
5210         p_attrib_val9           IN      VARCHAR2,
5211         p_attrib_val10          IN      VARCHAR2,
5212         p_attrib_val11          IN      VARCHAR2,
5213         p_attrib_val12          IN      VARCHAR2,
5214         p_attrib_val13          IN      VARCHAR2,
5215         p_attrib_val14          IN      VARCHAR2,
5216         p_attrib_val15          IN      VARCHAR2,
5217         p_attrib_val16          IN      VARCHAR2,
5218         p_attrib_val17          IN      VARCHAR2,
5219         p_attrib_val18          IN      VARCHAR2,
5220         p_attrib_val19          IN      VARCHAR2,
5221         p_attrib_val20          IN      VARCHAR2,
5222         p_restrict_sql          IN      VARCHAR2,
5223         p_api_name              IN      VARCHAR2,
5224         p_match_type            IN      VARCHAR2,
5225         p_party_id              IN      NUMBER,
5226         p_search_merged         IN      VARCHAR2,
5227         x_search_ctx_id         OUT     NUMBER,
5228         x_num_matches           OUT     NUMBER
5229 ) IS
5230   TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
5231   l_match_idx NUMBER;
5232   AttrVals AttrList;
5233   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
5234   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
5235   l_contact_list HZ_PARTY_SEARCH.contact_list;
5236   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
5237   l_dup_set_id NUMBER;
5238   l_idx NUMBER;
5239   l_cpt_type VARCHAR2(255);
5240   FIRST BOOLEAN := TRUE; 
5241 
5242 BEGIN
5243     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5244       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);
5245     END IF;
5246 
5247   IF p_attrib_id1 IS NOT NULL THEN
5248     AttrVals(p_attrib_id1):=p_attrib_val1;
5249   END IF;
5250   IF p_attrib_id2 IS NOT NULL THEN
5251     AttrVals(p_attrib_id2):=p_attrib_val2;
5252   END IF;
5253   IF p_attrib_id3 IS NOT NULL THEN
5254     AttrVals(p_attrib_id3):=p_attrib_val3;
5255   END IF;
5256   IF p_attrib_id4 IS NOT NULL THEN
5257     AttrVals(p_attrib_id4):=p_attrib_val4;
5258   END IF;
5259   IF p_attrib_id5 IS NOT NULL THEN
5260     AttrVals(p_attrib_id5):=p_attrib_val5;
5261   END IF;
5262   IF p_attrib_id6 IS NOT NULL THEN
5263     AttrVals(p_attrib_id6):=p_attrib_val6;
5264   END IF;
5265   IF p_attrib_id7 IS NOT NULL THEN
5266     AttrVals(p_attrib_id7):=p_attrib_val7;
5267   END IF;
5268   IF p_attrib_id8 IS NOT NULL THEN
5269     AttrVals(p_attrib_id8):=p_attrib_val8;
5270   END IF;
5271   IF p_attrib_id9 IS NOT NULL THEN
5272     AttrVals(p_attrib_id9):=p_attrib_val9;
5273   END IF;
5274   IF p_attrib_id10 IS NOT NULL THEN
5275     AttrVals(p_attrib_id10):=p_attrib_val10;
5276   END IF;
5277   IF p_attrib_id11 IS NOT NULL THEN
5278     AttrVals(p_attrib_id11):=p_attrib_val11;
5279   END IF;
5280   IF p_attrib_id12 IS NOT NULL THEN
5281     AttrVals(p_attrib_id12):=p_attrib_val12;
5282   END IF;
5283   IF p_attrib_id13 IS NOT NULL THEN
5284     AttrVals(p_attrib_id13):=p_attrib_val13;
5285   END IF;
5286   IF p_attrib_id14 IS NOT NULL THEN
5287     AttrVals(p_attrib_id14):=p_attrib_val14;
5288   END IF;
5289   IF p_attrib_id15 IS NOT NULL THEN
5290     AttrVals(p_attrib_id15):=p_attrib_val15;
5291   END IF;
5292   IF p_attrib_id16 IS NOT NULL THEN
5293     AttrVals(p_attrib_id16):=p_attrib_val16;
5294   END IF;
5295   IF p_attrib_id17 IS NOT NULL THEN
5296     AttrVals(p_attrib_id17):=p_attrib_val17;
5297   END IF;
5298   IF p_attrib_id18 IS NOT NULL THEN
5299     AttrVals(p_attrib_id18):=p_attrib_val18;
5300   END IF;
5301   IF p_attrib_id19 IS NOT NULL THEN
5302     AttrVals(p_attrib_id19):=p_attrib_val19;
5303   END IF;
5304   IF p_attrib_id20 IS NOT NULL THEN
5305     AttrVals(p_attrib_id20):=p_attrib_val20;
5306   END IF;
5307   IF AttrVals.EXISTS(12) THEN
5308     l_party_rec.PARTY_NUMBER:= AttrVals(12);
5309     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5310       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);
5311     END IF;
5312   END IF;
5313 
5314   IF AttrVals.EXISTS(14) THEN
5315     l_party_rec.PARTY_TYPE:= AttrVals(14);
5316     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5317       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);
5318     END IF;
5319   END IF;
5320 
5321   IF AttrVals.EXISTS(15) THEN
5322     l_party_rec.PARTY_ALL_NAMES:= AttrVals(15);
5323     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5324       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);
5325     END IF;
5326   END IF;
5327 
5328   IF AttrVals.EXISTS(18) THEN
5329     l_party_rec.TAX_REFERENCE:= AttrVals(18);
5330     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5331       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);
5332     END IF;
5333   END IF;
5334 
5335   IF AttrVals.EXISTS(19) THEN
5336     l_party_rec.JGZZ_FISCAL_CODE:= AttrVals(19);
5337     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5338       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);
5339     END IF;
5340   END IF;
5341 
5342   IF AttrVals.EXISTS(20) THEN
5343     l_party_rec.SIC_CODE:= AttrVals(20);
5344     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5345       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);
5346     END IF;
5347   END IF;
5348 
5349   IF AttrVals.EXISTS(21) THEN
5350     l_party_rec.SIC_CODE_TYPE:= AttrVals(21);
5351     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5352       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);
5353     END IF;
5354   END IF;
5355 
5356   IF AttrVals.EXISTS(27) THEN
5357     l_party_site_list(1).ADDRESS:= AttrVals(27);
5358     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5359       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);
5360     END IF;
5361   END IF;
5362 
5363   IF AttrVals.EXISTS(29) THEN
5364     l_party_site_list(1).CITY:= AttrVals(29);
5365     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5366       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);
5367     END IF;
5368   END IF;
5369 
5370   IF AttrVals.EXISTS(30) THEN
5371     l_party_site_list(1).POSTAL_CODE:= AttrVals(30);
5372     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5373       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);
5374     END IF;
5375   END IF;
5376 
5377   IF AttrVals.EXISTS(32) THEN
5378     l_party_site_list(1).STATE:= AttrVals(32);
5379     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5380       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);
5381     END IF;
5382   END IF;
5383 
5384   IF AttrVals.EXISTS(36) THEN
5385     l_party_site_list(1).COUNTRY:= AttrVals(36);
5386     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5387       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);
5388     END IF;
5389   END IF;
5390 
5391   IF AttrVals.EXISTS(39) THEN
5392     l_contact_list(1).CONTACT_NAME:= AttrVals(39);
5393     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5394       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);
5395     END IF;
5396   END IF;
5397 
5398   IF AttrVals.EXISTS(44) THEN
5399     l_cpt_type := 'PHONE';
5400     FIRST := FALSE;
5401     FOR I in 1..l_cpt_list.COUNT LOOP
5402       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5403         l_cpt_list(I).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
5404         FIRST := TRUE;
5405     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5406       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);
5407       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);
5408     END IF;
5409       END IF;
5410     END LOOP;
5411     IF not FIRST THEN
5412       l_idx := l_cpt_list.COUNT+1;
5413       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5414       l_cpt_list(l_idx).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
5415     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5416       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);
5417       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);
5418     END IF;
5419     END IF;
5420   END IF;
5421 
5422   IF AttrVals.EXISTS(48) THEN
5423     l_cpt_type := 'EMAIL';
5424     FIRST := FALSE;
5425     FOR I in 1..l_cpt_list.COUNT LOOP
5426       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5427         l_cpt_list(I).EMAIL_ADDRESS:= AttrVals(48);
5428         FIRST := TRUE;
5429     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5430       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);
5431       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);
5432     END IF;
5433       END IF;
5434     END LOOP;
5435     IF not FIRST THEN
5436       l_idx := l_cpt_list.COUNT+1;
5437       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5438       l_cpt_list(l_idx).EMAIL_ADDRESS:= AttrVals(48);
5439     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5440       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);
5441       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);
5442     END IF;
5443     END IF;
5444   END IF;
5445 
5446 
5447   IF AttrVals.EXISTS(14) THEN
5448      l_party_rec.PARTY_TYPE:= AttrVals(14); 
5449   END IF; 
5450   IF upper(p_api_name) = 'FIND_PARTIES' THEN
5451     find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5452                p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,'N',
5453                x_search_ctx_id,x_num_matches);
5454   ELSIF upper(p_api_name) = 'FIND_PARTY_DETAILS' THEN
5455     find_party_details(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,
5457                x_search_ctx_id,x_num_matches);
5458   ELSIF upper(p_api_name) = 'FIND_PERSONS' THEN
5459     find_persons(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,'N',
5461                x_search_ctx_id,x_num_matches);
5462   ELSIF upper(p_api_name) = 'GET_MATCHING_PARTY_SITES' THEN
5463     get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,
5464                p_restrict_sql,p_match_type,NULL,
5465                x_search_ctx_id,x_num_matches);
5466   ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACTS' THEN
5467     get_matching_contacts(p_rule_id,p_party_id,l_contact_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_CONTACT_POINTS' THEN
5471     get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,
5472                p_restrict_sql,p_match_type,NULL,
5473                x_search_ctx_id,x_num_matches);
5474   END IF;
5475     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5476       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);
5477     END IF;
5478 EXCEPTION
5479   WHEN FND_API.G_EXC_ERROR THEN
5480     RAISE FND_API.G_EXC_ERROR;
5481   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5482     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5483   WHEN OTHERS THEN
5484     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5485     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.call_api_dynamic');
5486     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5487     FND_MSG_PUB.ADD;
5488     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5489 END call_api_dynamic; 
5490 
5491 
5492 PROCEDURE get_matching_party_sites (
5493         p_rule_id               IN      NUMBER,
5494         p_party_id              IN      NUMBER,
5495         p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,
5496         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5497         p_restrict_sql          IN      VARCHAR2,
5498         p_match_type            IN      VARCHAR2,
5499         p_dup_party_site_id     IN      NUMBER, 
5500         x_search_ctx_id         OUT     NUMBER,
5501         x_num_matches           OUT     NUMBER
5502 ) IS
5503   
5504   -- Strings to hold the generated Intermedia query strings
5505   l_party_contains_str VARCHAR2(32000); 
5506   l_match_idx NUMBER;
5507   l_party_site_contains_str VARCHAR2(32000);
5508   l_contact_contains_str VARCHAR2(32000);
5509   l_contact_pt_contains_str VARCHAR2(32000);
5510   l_tmp VARCHAR2(32000);
5511 
5512   -- Other local variables
5513   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5514   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5515   -- For Score calculation
5516   l_max_score NUMBER;
5517   l_entered_max_score NUMBER;
5518   FIRST BOOLEAN;
5519   l_search_ctx_id NUMBER; -- Generated Search Context ID
5520 
5521   l_TX9 VARCHAR2(2000);
5522   l_TX22 VARCHAR2(2000);
5523   l_TX1 VARCHAR2(2000);
5524   l_TX3 VARCHAR2(2000);
5525   l_TX15 VARCHAR2(2000);
5526   l_TX4 VARCHAR2(2000);
5527   l_TX10 VARCHAR2(2000);
5528   l_TX11 VARCHAR2(2000);
5529   l_TX5 VARCHAR2(2000);
5530   l_TX14 VARCHAR2(2000);
5531   l_TX6 VARCHAR2(2000);
5532   H_SCORES HZ_PARTY_SEARCH.score_list;
5533 
5534   l_score NUMBER;
5535   l_idx NUMBER;
5536   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5537   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5538   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5539   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5540   l_party_id NUMBER;
5541   l_ps_party_id NUMBER;
5542   l_ct_party_id NUMBER;
5543   l_cpt_party_id NUMBER;
5544   l_cpt_ps_id NUMBER;
5545   l_cpt_contact_id NUMBER;
5546   l_cpt_type VARCHAR2(100);
5547   l_cpt_level VARCHAR2(100);
5548   l_party_site_id NUMBER;
5549   l_org_contact_id NUMBER;
5550   l_contact_pt_id NUMBER;
5551   l_cpt_level VARCHAR2(100);
5552   l_ps_contact_id NUMBER;
5553   l_party_max_score NUMBER;
5554   l_ps_max_score NUMBER;
5555   l_contact_max_score NUMBER;
5556   l_cpt_max_score NUMBER;
5557 
5558   defpt NUMBER :=0;
5559   defps NUMBER :=0;
5560   defct NUMBER :=0;
5561   defcpt NUMBER :=0;
5562   l_index NUMBER;
5563   l_match_ps_list HZ_PARTY_SEARCH.IDList;
5564   l_cnt NUMBER:=1;
5565 
5566   
5567   BEGIN
5568     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5569       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);
5570     END IF;
5571     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5572       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);
5573       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);
5574       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);
5575       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);
5576     END IF;
5577 
5578     -- ************************************
5579     -- STEP 1. Initialization and error checks
5580 
5581     l_match_str := ' AND ';
5582     IF p_match_type = 'AND' THEN
5583       l_match_str := ' AND ';
5584     ELSIF p_match_type = 'OR' THEN
5585       l_match_str := ' OR ';
5586     END IF;
5587     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);
5588     g_score_until_thresh := false;
5589     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5590 
5591     -- ************************************************************
5592     -- STEP 2. Setup of intermedia query strings for Acquisition query
5593     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5594     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5595     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);
5596 
5597     -- Setup Search Context ID
5598     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5599     x_search_ctx_id := l_search_ctx_id;
5600 
5601     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5602       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);
5603       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);
5604       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);
5605       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);
5606     END IF;
5607     IF l_party_site_contains_str IS NULL THEN
5608       defps := 1;
5609     END IF;
5610     IF l_contact_pt_contains_str IS NULL THEN
5611       defcpt := 1;
5612     END IF;
5613 
5614     IF l_party_site_contains_str IS NOT NULL THEN
5615       open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,'N', 'N',l_party_site_cur);
5616       LOOP
5617         FETCH l_party_site_cur INTO 
5618             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;
5619         EXIT WHEN l_party_site_cur%NOTFOUND;
5620       IF (p_dup_party_site_id IS NULL OR (
5621                 p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND 
5622                 l_party_site_id <> p_dup_party_site_id)) THEN  
5623             l_index := map_id(l_party_site_id);
5624             l_match_ps_list(l_cnt):= l_party_site_id ;
5625             l_cnt:=l_cnt+1;
5626             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);
5627             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);
5628     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5629       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);
5630       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);
5631       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);
5632     END IF;
5633       END IF; 
5634       END LOOP;
5635       CLOSE l_party_site_cur;
5636     END IF;
5637 
5638     IF l_contact_pt_contains_str IS NOT NULL THEN
5639     SAVEPOINT eval_start;
5640     IF l_match_str = ' AND ' OR (
5641         ((l_cpt_max_score/l_entered_max_score)<(75/685))
5642         ) THEN
5643       FORALL I in 1..l_match_ps_list.COUNT
5644            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5645            values (l_search_ctx_id,l_match_ps_list(I));
5646         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');
5647     ELSE
5648       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5649     END IF;
5650       LOOP
5651         FETCH l_contact_pt_cur INTO 
5652             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;
5653         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5654       IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (
5655          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   
5656         l_index := map_id(l_cpt_ps_id);
5657         IF l_match_str = ' OR ' THEN
5658           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5659           IF NOT H_SCORES.EXISTS(l_index) THEN
5660             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);
5661           ELSE
5662             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5663                H_SCORES(l_index).TOTAL_SCORE := 
5664                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5665                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5666             END IF;
5667           END IF;
5668         ELSE
5669           IF H_SCORES.EXISTS(l_index) THEN
5670             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5671             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5672                H_SCORES(l_index).TOTAL_SCORE := 
5673                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5674                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5675             END IF;
5676           ELSIF defps=1 THEN
5677             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5678             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);
5679           END IF;
5680         END IF;
5681       END IF; 
5682     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5683       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);
5684       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);
5685       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);
5686     END IF;
5687       END LOOP;
5688       CLOSE l_contact_pt_cur;
5689     ROLLBACK TO eval_start;
5690     END IF;
5691     x_num_matches := 0;
5692     l_party_site_id := H_SCORES.FIRST;
5693     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5694       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);
5695     END IF;
5696     WHILE l_party_site_id IS NOT NULL LOOP
5697     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5698       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);
5699       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);
5700     END IF;
5701  IF l_match_str = ' OR ' THEN
5702 IF (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=( 75/685 ) THEN
5703     INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) 
5704     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);
5705       x_num_matches := x_num_matches+1;
5706  END IF;
5707  ELSE
5708     IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND
5709        H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND
5710        (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=(75/685) THEN
5711       INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) 
5712       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));
5713        x_num_matches := x_num_matches+1;
5714       END IF;
5715  END IF;
5716       l_party_site_id:=H_SCORES.NEXT(l_party_site_id);
5717     END LOOP;
5718     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5719       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);
5720     END IF;
5721 EXCEPTION
5722   WHEN FND_API.G_EXC_ERROR THEN
5723     RAISE FND_API.G_EXC_ERROR;
5724   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5725     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5726   WHEN OTHERS THEN
5727     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5728     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.get_matching_party_sites');
5729     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5730     FND_MSG_PUB.ADD;
5731     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5732 END get_matching_party_sites;
5733 
5734 
5735 PROCEDURE get_matching_contacts (
5736         p_rule_id               IN      NUMBER,
5737         p_party_id              IN      NUMBER,
5738         p_contact_list          IN      HZ_PARTY_SEARCH.CONTACT_LIST,
5739         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5740         p_restrict_sql          IN      VARCHAR2,
5741         p_match_type            IN      VARCHAR2,
5742         p_dup_contact_id        IN      NUMBER, 
5743         x_search_ctx_id         OUT     NUMBER,
5744         x_num_matches           OUT     NUMBER
5745 ) IS
5746   
5747   -- Strings to hold the generated Intermedia query strings
5748   l_party_contains_str VARCHAR2(32000); 
5749   l_party_site_contains_str VARCHAR2(32000);
5750   l_contact_contains_str VARCHAR2(32000);
5751   l_contact_pt_contains_str VARCHAR2(32000);
5752   l_tmp VARCHAR2(32000);
5753 
5754   -- Other local variables
5755   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5756   l_match_idx NUMBER;
5757   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5758   -- For Score calculation
5759   l_max_score NUMBER;
5760   l_entered_max_score NUMBER;
5761   FIRST BOOLEAN;
5762   l_search_ctx_id NUMBER; -- Generated Search Context ID
5763 
5764   l_TX2 VARCHAR2(2000);
5765   l_TX1 VARCHAR2(2000);
5766   l_TX5 VARCHAR2(2000);
5767   l_TX156 VARCHAR2(2000);
5768   l_TX6 VARCHAR2(2000);
5769   H_SCORES HZ_PARTY_SEARCH.score_list;
5770 
5771   l_score NUMBER;
5772   l_idx NUMBER;
5773   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5774   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5775   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5776   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5777   l_party_id NUMBER;
5778   l_ps_party_id NUMBER;
5779   l_ct_party_id NUMBER;
5780   l_cpt_party_id NUMBER;
5781   l_cpt_ps_id NUMBER;
5782   l_cpt_contact_id NUMBER;
5783   l_cpt_type VARCHAR2(100);
5784   l_party_site_id NUMBER;
5785   l_org_contact_id NUMBER;
5786   l_contact_pt_id NUMBER;
5787 
5788   defpt NUMBER :=0;
5789   defps NUMBER :=0;
5790   defct NUMBER :=0;
5791   defcpt NUMBER :=0;
5792   l_index NUMBER;
5793   l_party_max_score NUMBER;
5794   l_ps_max_score NUMBER;
5795   l_contact_max_score NUMBER;
5796   l_cpt_max_score NUMBER;
5797   l_match_contact_list HZ_PARTY_SEARCH.IDList;
5798   l_cnt NUMBER:=1;
5799 
5800   
5801   BEGIN
5802     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5803       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);
5804     END IF;
5805     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5806       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);
5807       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);
5808       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);
5809       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);
5810     END IF;
5811 
5812     -- ************************************
5813     -- STEP 1. Initialization and error checks
5814 
5815     l_match_str := ' AND ';
5816     IF p_match_type = 'AND' THEN
5817       l_match_str := ' AND ';
5818     ELSIF p_match_type = 'OR' THEN
5819       l_match_str := ' OR ';
5820     END IF;
5821     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);
5822     g_score_until_thresh := false;
5823     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5824 
5825     -- ************************************************************
5826     -- STEP 2. Setup of intermedia query strings for Acquisition query
5827     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5828     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5829     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);
5830 
5831     -- Setup Search Context ID
5832     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5833     x_search_ctx_id := l_search_ctx_id;
5834 
5835     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5836       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);
5837       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);
5838       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);
5839       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);
5840     END IF;
5841     IF l_contact_contains_str IS NULL THEN
5842       defct := 1;
5843     END IF;
5844     IF l_contact_pt_contains_str IS NULL THEN
5845       defcpt := 1;
5846     END IF;
5847 
5848     IF l_contact_contains_str IS NOT NULL THEN
5849       open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);
5850       LOOP
5851         FETCH l_contact_cur INTO 
5852             l_org_contact_id, l_ct_party_id , l_TX2, l_TX156, l_TX6, l_TX5;
5853         EXIT WHEN l_contact_cur%NOTFOUND;
5854       IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN 
5855         l_index := map_id(l_org_contact_id);
5856         l_match_contact_list(l_cnt):=l_org_contact_id;
5857         l_cnt:=l_cnt+1;
5858           l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX2,l_TX156,l_TX6,l_TX5);
5859             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);
5860     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5861       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);
5862       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);
5863       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);
5864     END IF;
5865       END IF; 
5866       END LOOP;
5867       CLOSE l_contact_cur;
5868     END IF;
5869 
5870     IF l_contact_pt_contains_str IS NOT NULL THEN
5871     SAVEPOINT eval_start;
5872     IF l_match_str = ' AND ' OR (
5873         ((l_cpt_max_score/l_entered_max_score)<(75/685))
5874         ) THEN
5875       FORALL I in 1..l_match_contact_list.COUNT
5876            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5877            values (l_search_ctx_id,l_match_contact_list(I));
5878       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');
5879     ELSE
5880       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5881     END IF;
5882       LOOP
5883         FETCH l_contact_pt_cur INTO 
5884             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;
5885         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5886       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 
5887         l_index := map_id(l_cpt_contact_id);
5888         IF l_match_str = ' OR ' THEN
5889           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5890           IF NOT H_SCORES.EXISTS(l_index) THEN
5891             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);
5892           ELSE
5893             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5894                H_SCORES(l_index).TOTAL_SCORE := 
5895                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5896                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5897             END IF;
5898           END IF;
5899         ELSE
5900           IF H_SCORES.EXISTS(l_index) THEN
5901             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5902             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5903                H_SCORES(l_index).TOTAL_SCORE := 
5904                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5905                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5906             END IF;
5907           ELSIF defps=1 THEN
5908             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5909             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);
5910           END IF;
5911         END IF;
5912         END IF; 
5913       END LOOP;
5914     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5915       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);
5916       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);
5917       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);
5918     END IF;
5919       CLOSE l_contact_pt_cur;
5920     END IF;
5921     x_num_matches := 0;
5922     l_org_contact_id := H_SCORES.FIRST;
5923     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5924       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);
5925     END IF;
5926     WHILE l_org_contact_id IS NOT NULL LOOP
5927       IF l_match_str = ' OR ' THEN
5928     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5929       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);
5930       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);
5931     END IF;
5932         IF (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(75/685) THEN
5933             INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) 
5934             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);
5935           x_num_matches := x_num_matches+1;
5936         END IF;
5937       ELSE
5938            IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND
5939            H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND
5940            (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(75/685) THEN
5941           INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) 
5942           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));
5943           x_num_matches := x_num_matches+1;
5944         END IF;
5945       END IF;
5946       l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);
5947     END LOOP;
5948     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5949       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);
5950     END IF;
5951 EXCEPTION
5952   WHEN FND_API.G_EXC_ERROR THEN
5953     RAISE FND_API.G_EXC_ERROR;
5954   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5955     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5956   WHEN OTHERS THEN
5957     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5958     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.get_matching_contacts');
5959     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5960     FND_MSG_PUB.ADD;
5961     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5962 END get_matching_contacts;
5963 
5964 
5965 PROCEDURE get_matching_contact_points (
5966         p_rule_id               IN      NUMBER,
5967         p_party_id              IN      NUMBER,
5968         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5969         p_restrict_sql          IN      VARCHAR2,
5970         p_match_type            IN      VARCHAR2,
5971         p_dup_contact_point_id  IN      NUMBER, 
5972         x_search_ctx_id         OUT     NUMBER,
5973         x_num_matches           OUT     NUMBER
5974 ) IS
5975 
5976 
5977   -- Strings to hold the generated Intermedia query strings
5978   l_contact_pt_contains_str VARCHAR2(32000);
5979   l_tmp VARCHAR2(32000);
5980 
5981   -- Other local variables
5982   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5983   l_match_idx NUMBER;
5984   -- For Score calculation
5985   l_entered_max_score NUMBER;
5986   l_search_ctx_id NUMBER; -- Generated Search Context ID
5987 
5988   l_TX1 VARCHAR2(2000);
5989   l_TX5 VARCHAR2(2000);
5990   l_TX6 VARCHAR2(2000);
5991 
5992   l_score NUMBER;
5993   l_idx NUMBER;
5994   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5995   l_cpt_party_id NUMBER;
5996   l_cpt_ps_id NUMBER;
5997   l_cpt_contact_id NUMBER;
5998   l_contact_pt_id NUMBER;
5999   l_cpt_type VARCHAR2(100);
6000   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
6001   H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;
6002   H_SCORE  HZ_PARTY_SEARCH.IDList;
6003 
6004   cnt NUMBER :=0;
6005   l_party_max_score NUMBER;
6006   l_ps_max_score NUMBER;
6007   l_contact_max_score NUMBER;
6008   l_cpt_max_score NUMBER;
6009 
6010   
6011   BEGIN
6012     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6013       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);
6014     END IF;
6015     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6016       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);
6017       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);
6018       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);
6019       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);
6020     END IF;
6021 
6022     -- ************************************
6023     -- STEP 1. Initialization and error checks
6024 
6025     l_match_str := ' AND ';
6026     IF p_match_type = 'AND' THEN
6027       l_match_str := ' AND ';
6028     ELSIF p_match_type = 'OR' THEN
6029       l_match_str := ' OR ';
6030     END IF;
6031     l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, 
6032        HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
6033        p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
6034     g_score_until_thresh := false;
6035     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
6036 
6037     -- ************************************************************
6038     -- STEP 2. Setup of intermedia query strings for Acquisition query
6039     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
6040     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);
6041 
6042     -- Setup Search Context ID
6043     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
6044     x_search_ctx_id := l_search_ctx_id;
6045     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6046       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);
6047       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);
6048       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);
6049     END IF;
6050 
6051     IF l_contact_pt_contains_str IS NOT NULL THEN
6052       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
6053       cnt := 1;
6054       LOOP
6055         FETCH l_contact_pt_cur INTO 
6056             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;
6057         EXIT WHEN l_contact_pt_cur%NOTFOUND;
6058         IF (p_dup_contact_point_id IS NULL OR (
6059                p_dup_contact_point_id IS NOT NULL AND 
6060                l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND 
6061                p_dup_contact_point_id <>  l_contact_pt_id)) THEN   
6062             H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;
6063             H_PARTY_ID(cnt) := l_cpt_party_id;
6064             H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
6065             cnt := cnt+1;
6066     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6067       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);
6068       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);
6069       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);
6070     END IF;
6071         END IF; 
6072       END LOOP;
6073       CLOSE l_contact_pt_cur;
6074     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6075       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);
6076     END IF;
6077       x_num_matches := 0; 
6078       FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP
6079     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6080       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);
6081       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);
6082     END IF;
6083         IF (H_SCORE(I)/l_entered_max_score) >= (75/685) THEN
6084         INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
6085             l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);
6086             x_num_matches := x_num_matches + 1; 
6087         END IF;
6088       END LOOP; 
6089     END IF;
6090     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6091       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);
6092     END IF;
6093 EXCEPTION
6094   WHEN FND_API.G_EXC_ERROR THEN
6095     RAISE FND_API.G_EXC_ERROR;
6096   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6097     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6098   WHEN OTHERS THEN
6099     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6100     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.get_matching_contact_points');
6101     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6102     FND_MSG_PUB.ADD;
6103     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6104 END get_matching_contact_points;
6105 
6106    /**********************************************************
6107    This procedure finds the score details for a specific party that 
6108    matched 
6109 
6110    **********************************************************/
6111 
6112 PROCEDURE get_score_details (
6113         p_rule_id               IN      NUMBER,
6114         p_party_id              IN      NUMBER,
6115         p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
6116         p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
6117         p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
6118         p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
6119         x_search_ctx_id         IN OUT  NUMBER
6120 ) IS
6121 
6122   -- Strings to hold the generated Intermedia query strings
6123   l_party_contains_str VARCHAR2(32000); 
6124   l_party_site_contains_str VARCHAR2(32000);
6125   l_contact_contains_str VARCHAR2(32000);
6126   l_contact_pt_contains_str VARCHAR2(32000);
6127   l_tmp VARCHAR2(32000);
6128 
6129   -- Other local variables
6130   l_match_str VARCHAR2(30); -- Match type (AND or OR)
6131   -- For Score calculation
6132   l_max_score NUMBER;
6133   l_entered_max_score NUMBER;
6134   FIRST BOOLEAN;
6135   l_search_ctx_id NUMBER; -- Generated Search Context ID
6136 
6137   l_TX39 VARCHAR2(2000);
6138   l_max_TX39 VARCHAR2(2000);
6139   l_TX2 VARCHAR2(2000);
6140   l_max_TX2 VARCHAR2(2000);
6141   l_TX46 VARCHAR2(2000);
6142   l_max_TX46 VARCHAR2(2000);
6143   l_TX9 VARCHAR2(2000);
6144   l_max_TX9 VARCHAR2(2000);
6145   l_TX22 VARCHAR2(2000);
6146   l_max_TX22 VARCHAR2(2000);
6147   l_TX44 VARCHAR2(2000);
6148   l_max_TX44 VARCHAR2(2000);
6149   l_TX1 VARCHAR2(2000);
6150   l_max_TX1 VARCHAR2(2000);
6151   l_TX158 VARCHAR2(2000);
6152   l_max_TX158 VARCHAR2(2000);
6153   l_TX47 VARCHAR2(2000);
6154   l_max_TX47 VARCHAR2(2000);
6155   l_TX3 VARCHAR2(2000);
6156   l_max_TX3 VARCHAR2(2000);
6157   l_TX15 VARCHAR2(2000);
6158   l_max_TX15 VARCHAR2(2000);
6159   l_TX4 VARCHAR2(2000);
6160   l_max_TX4 VARCHAR2(2000);
6161   l_TX10 VARCHAR2(2000);
6162   l_max_TX10 VARCHAR2(2000);
6163   l_TX11 VARCHAR2(2000);
6164   l_max_TX11 VARCHAR2(2000);
6165   l_TX5 VARCHAR2(2000);
6166   l_max_TX5 VARCHAR2(2000);
6167   l_TX40 VARCHAR2(2000);
6168   l_max_TX40 VARCHAR2(2000);
6169   l_TX34 VARCHAR2(2000);
6170   l_max_TX34 VARCHAR2(2000);
6171   l_TX45 VARCHAR2(2000);
6172   l_max_TX45 VARCHAR2(2000);
6173   l_TX156 VARCHAR2(2000);
6174   l_max_TX156 VARCHAR2(2000);
6175   l_TX14 VARCHAR2(2000);
6176   l_max_TX14 VARCHAR2(2000);
6177   l_TX6 VARCHAR2(2000);
6178   l_max_TX6 VARCHAR2(2000);
6179   H_SCORES HZ_PARTY_SEARCH.score_list;
6180 
6181   l_score NUMBER;
6182   l_match_idx NUMBER;
6183   l_idx NUMBER;
6184   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
6185   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
6186   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
6187   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
6188   l_party_id NUMBER;
6189   l_ps_party_id NUMBER;
6190   l_ct_party_id NUMBER;
6191   l_cpt_party_id NUMBER;
6192   l_cpt_ps_id NUMBER;
6193   l_cpt_contact_id NUMBER;
6194   l_cpt_type VARCHAR2(100);
6195   l_party_site_id NUMBER;
6196   l_org_contact_id NUMBER;
6197   l_contact_pt_id NUMBER;
6198   l_ps_contact_id NUMBER;
6199   l_max_id NUMBER;
6200   l_max_idx NUMBER;
6201 
6202   l_index NUMBER;
6203   l_party_max_score NUMBER;
6204   l_ps_max_score NUMBER;
6205   l_contact_max_score NUMBER;
6206   l_cpt_max_score NUMBER;
6207 
6208   --Fix for bug 4417124 
6209   l_use_contact_addr_info BOOLEAN:=TRUE;
6210   l_use_contact_cpt_info  BOOLEAN:=TRUE;
6211 
6212   BEGIN
6213 
6214     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6215       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);
6216     END IF;
6217     -- ************************************
6218     -- STEP 1. Initialization and error checks
6219 
6220     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);
6221     g_score_until_thresh := false;
6222     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
6223     -- ************************************************************
6224     -- STEP 2. Setup of intermedia query strings for Acquisition query
6225     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
6226     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
6227     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
6228     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
6229 
6230     -- Setup Search Context ID
6231     IF x_search_ctx_id IS NULL THEN
6232       SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
6233       x_search_ctx_id := l_search_ctx_id;
6234     ELSE
6235       l_search_ctx_id := x_search_ctx_id;
6236     END IF;
6237 
6238     open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);
6239     LOOP 
6240         FETCH l_party_cur INTO
6241            l_party_id , l_TX34, l_TX40, l_TX158, l_TX39, l_TX44, l_TX45, l_TX46, l_TX47;
6242         EXIT WHEN l_party_cur%NOTFOUND;
6243           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);
6244     END LOOP;
6245     CLOSE l_party_cur;
6246 
6247     IF l_party_site_contains_str IS NOT NULL THEN
6248       l_max_score := 0;
6249       l_max_id := 0;
6250       l_max_idx := 0;
6251       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_addr_info THEN
6252         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'Y','N',l_party_site_cur);
6253       ELSE
6254         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'N','N',l_party_site_cur);
6255       END IF;
6256       LOOP
6257         FETCH l_party_site_cur INTO 
6258             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;
6259         EXIT WHEN l_party_site_cur%NOTFOUND;
6260         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);
6261         IF l_score > l_max_score THEN
6262           l_max_score := l_score;
6263           l_max_id := l_party_site_id;
6264           l_max_idx := l_match_idx;
6265           l_max_TX9 := l_TX9;
6266           l_max_TX22 := l_TX22;
6267           l_max_TX3 := l_TX3;
6268           l_max_TX15 := l_TX15;
6269           l_max_TX4 := l_TX4;
6270           l_max_TX10 := l_TX10;
6271           l_max_TX11 := l_TX11;
6272           l_max_TX14 := l_TX14;
6273         END IF;
6274       END LOOP;
6275       CLOSE l_party_site_cur;
6276       IF l_max_score>0 THEN
6277         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);
6278       END IF;
6279     END IF;
6280 
6281     IF l_contact_contains_str IS NOT NULL THEN
6282       l_max_score := 0;
6283       l_max_id := 0;
6284       l_max_idx := 0;
6285       open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);
6286       LOOP
6287         FETCH l_contact_cur INTO 
6288             l_org_contact_id, l_ct_party_id , l_TX2, l_TX156, l_TX6, l_TX5;
6289         EXIT WHEN l_contact_cur%NOTFOUND;
6290         l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX2,l_TX156,l_TX6,l_TX5);
6291         IF l_score > l_max_score THEN
6292           l_max_score := l_score;
6293           l_max_id := l_org_contact_id;
6294           l_max_idx := l_match_idx;
6295           l_max_TX2 := l_TX2;
6296           l_max_TX5 := l_TX5;
6297           l_max_TX156 := l_TX156;
6298           l_max_TX6 := l_TX6;
6299         END IF;
6300       END LOOP;
6301       CLOSE l_contact_cur;
6302       IF l_max_score>0 THEN
6303         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);
6304       END IF;
6305     END IF;
6306 
6307     IF l_contact_pt_contains_str IS NOT NULL THEN
6308       l_max_score := 0;
6309       l_max_id := 0;
6310       l_max_idx := 0;
6311       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_cpt_info THEN
6312         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'Y','N',l_contact_pt_cur);
6313       ELSE
6314         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'N','N',l_contact_pt_cur);
6315       END IF;
6316       LOOP
6317         FETCH l_contact_pt_cur INTO 
6318             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;
6319         EXIT WHEN l_contact_pt_cur%NOTFOUND;
6320         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
6321         IF l_score > l_max_score THEN
6322           l_max_score := l_score;
6323           l_max_id := l_contact_pt_id;
6324           l_max_idx := l_match_idx;
6325           l_max_TX1 := l_TX1;
6326           l_max_TX5 := l_TX5;
6327           l_max_TX6 := l_TX6;
6328         END IF;
6329       END LOOP;
6330       IF l_max_score>0 THEN
6331         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);
6332       END IF;
6333       CLOSE l_contact_pt_cur;
6334     END IF;
6335     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6336       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);
6337     END IF;
6338 EXCEPTION
6339   WHEN FND_API.G_EXC_ERROR THEN
6340     RAISE FND_API.G_EXC_ERROR;
6341   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6342     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6343   WHEN OTHERS THEN
6344     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6345     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_32.get_score_details');
6346     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6347     FND_MSG_PUB.ADD;
6348     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6349 END get_score_details;
6350 
6351 
6352 /************************************************
6353   This procedure retrieves the match rule attributes into 
6354   the search record structures
6355 ************************************************/
6356 
6357 PROCEDURE get_party_for_search (
6358         p_party_id              IN      NUMBER,
6359         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6360         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6361         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6362         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6363 ) IS
6364   l_party_id NUMBER;
6365   l_party_site_ids HZ_PARTY_SEARCH.IDList;
6366   l_contact_ids HZ_PARTY_SEARCH.IDList;
6367   l_contact_pt_ids HZ_PARTY_SEARCH.IDList;
6368   ps NUMBER :=1;
6369   cpt NUMBER :=1;
6370   ct NUMBER :=1;
6371   l_use_contact_info varchar2(1);
6372 BEGIN
6373 
6374     l_use_contact_info := 'Y';
6375   IF nvl(FND_PROFILE.VALUE('HZ_DQM_REL_PARTY_MATCH'),'N')='Y' THEN
6376     l_use_contact_info := 'N';
6377   END IF;
6378   l_party_id := p_party_id;
6379   FOR PARTY_SITES IN (
6380  SELECT party_site_id FROM (
6381      SELECT party_site_id,identifying_address_flag
6382       FROM HZ_PARTY_SITES
6383       WHERE party_id = p_party_id
6384       AND (status is null OR status = 'A') 
6385       AND identifying_address_flag='Y'
6386       UNION
6387 
6388      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
6389       FROM HZ_PARTY_SITES
6390       WHERE party_id = p_party_id
6391       AND (status is null OR status = 'A') 
6392       AND (identifying_address_flag IS NULL OR identifying_address_flag = 'N')
6393       AND ROWNUM<6
6394       UNION
6395 
6396      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
6397       FROM HZ_PARTY_SITES
6398       WHERE (status is null OR status = 'A') 
6399       AND party_id in (
6400         SELECT party_id
6401         FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
6402         WHERE HZ_RELATIONSHIPS.object_id = p_party_id
6403         AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6404         AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6405         AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6406         and l_use_contact_info = 'Y'
6407      ) 
6408      AND ROWNUM<6
6409 ) order by identifying_address_flag desc
6410     ) LOOP
6411       l_party_site_ids(ps) := PARTY_SITES.party_site_id;
6412       ps:=ps+1;
6413   END LOOP;
6414     FOR CONTACTS IN (
6415       SELECT org_contact_id
6416       FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
6417       WHERE HZ_RELATIONSHIPS.object_id = p_party_id
6418       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6419       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6420       AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
6421       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6422       AND ROWNUM<6 
6423     ) LOOP
6424       l_contact_ids(ct) := CONTACTS.org_contact_id;
6425       ct := ct+1;
6426     END LOOP;
6427     FOR CONTACT_POINTS IN (
6428       SELECT CONTACT_POINT_ID
6429       FROM HZ_CONTACT_POINTS 
6430       WHERE PRIMARY_FLAG = 'Y'
6431       AND owner_table_name = 'HZ_PARTIES'
6432       AND owner_table_id = p_party_id
6433 
6434       UNION
6435 
6436       SELECT CONTACT_POINT_ID
6437       FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS 
6438       WHERE PRIMARY_FLAG = 'Y'
6439       AND owner_table_name = 'HZ_PARTIES'
6440       AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id
6441       AND HZ_RELATIONSHIPS.object_id = p_party_id
6442       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6443       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6444       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6445         and l_use_contact_info = 'Y'
6446       AND ROWNUM<6
6447       UNION
6448 
6449       SELECT CONTACT_POINT_ID
6450       FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES  
6451       WHERE PRIMARY_FLAG = 'Y'
6452       AND owner_table_name = 'HZ_PARTY_SITES'
6453       AND owner_table_id = party_site_id 
6454       AND PARTY_ID = p_party_id 
6455       AND IDENTIFYING_ADDRESS_FLAG = 'Y') LOOP
6456       l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;
6457       cpt := cpt+1;
6458     END LOOP;
6459     get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,
6460           x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);
6461 EXCEPTION
6462   WHEN FND_API.G_EXC_ERROR THEN
6463     RAISE FND_API.G_EXC_ERROR;
6464   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6465     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6466   WHEN OTHERS THEN
6467     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6468     FND_MESSAGE.SET_TOKEN('PROC','get_party_for_search');
6469     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6470     FND_MSG_PUB.ADD;
6471     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6472 END get_party_for_search;
6473 
6474 PROCEDURE get_search_criteria (
6475         p_party_id              IN      NUMBER,
6476         p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,
6477         p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,
6478         p_contact_pt_ids        IN      HZ_PARTY_SEARCH.IDList,
6479         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6480         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6481         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6482         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6483 ) IS
6484 BEGIN
6485 
6486    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6487       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);
6488     END IF;
6489     IF p_party_id IS NOT NULL THEN
6490    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6491       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);
6492     END IF;
6493       get_party_rec(p_party_id, x_party_search_rec);
6494     END IF;
6495     IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN
6496    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6497       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);
6498     END IF;
6499       get_party_site_rec(p_party_site_ids, x_party_site_list);
6500     END IF;
6501     IF p_contact_ids IS NOT NULL AND p_contact_ids.COUNT>0 THEN
6502    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6503       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);
6504     END IF;
6505       get_contact_rec(p_contact_ids, x_contact_list);
6506     END IF;
6507     IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN
6508    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6509       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);
6510     END IF;
6511       get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);
6512     END IF;
6513 EXCEPTION
6514   WHEN FND_API.G_EXC_ERROR THEN
6515     RAISE FND_API.G_EXC_ERROR;
6516   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6517     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6518   WHEN OTHERS THEN
6519     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6520     FND_MESSAGE.SET_TOKEN('PROC','get_search_criteria');
6521     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6522     FND_MSG_PUB.ADD;
6523     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6524 END get_search_criteria;
6525 
6526 
6527 /************************************************
6528   This procedure retrieves the match rule party attributes into 
6529   the party search record structure 
6530 ************************************************/
6531 
6532 PROCEDURE get_party_rec (
6533         p_party_id              IN      NUMBER,
6534         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type
6535 ) IS
6536     l_party_type VARCHAR2(255);
6537 BEGIN
6538 
6539    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6540       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);
6541     END IF;
6542     SELECT PARTY_TYPE INTO l_party_type
6543     FROM HZ_PARTIES
6544     WHERE PARTY_ID = p_party_id;
6545 
6546    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6547       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);
6548     END IF;
6549     IF l_party_type = 'ORGANIZATION' THEN
6550       SELECT 
6551         translate(HZ_ORGANIZATION_PROFILES.JGZZ_FISCAL_CODE, '%',' ')
6552        ,translate(HZ_PARTIES.PARTY_NUMBER, '%',' ')
6553        ,translate(HZ_PARTIES.PARTY_TYPE, '%',' ')
6554        ,translate(HZ_ORGANIZATION_PROFILES.SIC_CODE, '%',' ')
6555        ,translate(HZ_ORGANIZATION_PROFILES.SIC_CODE_TYPE, '%',' ')
6556        ,translate(HZ_ORGANIZATION_PROFILES.TAX_REFERENCE, '%',' ')
6557       INTO 
6558         x_party_search_rec.JGZZ_FISCAL_CODE
6559        ,x_party_search_rec.PARTY_NUMBER
6560        ,x_party_search_rec.PARTY_TYPE
6561        ,x_party_search_rec.SIC_CODE
6562        ,x_party_search_rec.SIC_CODE_TYPE
6563        ,x_party_search_rec.TAX_REFERENCE
6564       FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES
6565       WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id
6566       AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL
6567       AND HZ_PARTIES.party_id = p_party_id;
6568     ELSIF l_party_type = 'PERSON' THEN
6569       SELECT 
6570         translate(HZ_PERSON_PROFILES.JGZZ_FISCAL_CODE, '%',' ')
6571        ,translate(HZ_PARTIES.PARTY_NUMBER, '%',' ')
6572        ,translate(HZ_PARTIES.PARTY_TYPE, '%',' ')
6573        ,translate(HZ_PERSON_PROFILES.TAX_REFERENCE, '%',' ')
6574       INTO 
6575         x_party_search_rec.JGZZ_FISCAL_CODE
6576        ,x_party_search_rec.PARTY_NUMBER
6577        ,x_party_search_rec.PARTY_TYPE
6578        ,x_party_search_rec.TAX_REFERENCE
6579       FROM HZ_PARTIES, HZ_PERSON_PROFILES
6580       WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id
6581       AND HZ_PERSON_PROFILES.effective_end_date is NULL
6582       AND HZ_PARTIES.party_id = p_party_id;
6583     END IF;
6584     x_party_search_rec.PARTY_TYPE := l_party_type;
6585    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6586       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);
6587     END IF;
6588     x_party_search_rec.PARTY_ALL_NAMES:=
6589        HZ_PARTY_ACQUIRE.get_known_as(p_party_id , 'PARTY','PARTY_ALL_NAMES');
6590 
6591 EXCEPTION
6592   WHEN OTHERS THEN
6593     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6594     FND_MESSAGE.SET_TOKEN('PROC','get_party_rec');
6595     FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_id);
6596     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6597     FND_MSG_PUB.ADD;
6598     RAISE FND_API.G_EXC_ERROR;
6599 END get_party_rec;
6600 
6601 /************************************************
6602   This procedure retrieves the match rule party site attributes into 
6603   the party site search record structure 
6604 ************************************************/
6605 
6606 PROCEDURE get_party_site_rec (
6607         p_party_site_ids       IN      HZ_PARTY_SEARCH.IDList,
6608         x_party_site_list      OUT NOCOPY HZ_PARTY_SEARCH.party_site_list
6609 ) IS
6610   CURSOR c_party_sites(cp_party_site_id NUMBER) IS
6611     SELECT party_site_id
6612       ,translate(HZ_LOCATIONS.CITY, '%',' ')
6613       ,translate(HZ_LOCATIONS.COUNTRY, '%',' ')
6614       ,translate(HZ_LOCATIONS.POSTAL_CODE, '%',' ')
6615       ,translate(HZ_LOCATIONS.STATE, '%',' ')
6616     FROM HZ_PARTY_SITES, HZ_LOCATIONS
6617     WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id
6618     AND   HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;
6619 
6620   I NUMBER;
6621   J NUMBER:=1;
6622   l_party_site_id NUMBER;
6623 
6624 BEGIN
6625 
6626    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6627       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);
6628     END IF;
6629     FOR I IN 1..p_party_site_ids.COUNT LOOP
6630       l_party_site_id := p_party_site_ids(I);
6631       OPEN c_party_sites(p_party_site_ids(I));
6632       LOOP
6633         FETCH c_party_sites INTO
6634              l_party_site_id
6635            ,x_party_site_list(J).CITY
6636            ,x_party_site_list(J).COUNTRY
6637            ,x_party_site_list(J).POSTAL_CODE
6638            ,x_party_site_list(J).STATE
6639         ;
6640         EXIT WHEN c_party_sites%NOTFOUND;
6641 
6642    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6643       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);
6644     END IF;
6645         x_party_site_list(J).ADDRESS:=
6646        HZ_PARTY_ACQUIRE.get_address(l_party_site_id , 'PARTY_SITES','ADDRESS');
6647         J:=J+1;
6648 
6649       END LOOP;
6650       CLOSE c_party_sites;
6651     END LOOP;
6652 
6653 EXCEPTION
6654   WHEN OTHERS THEN
6655     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6656     FND_MESSAGE.SET_TOKEN('PROC','get_party_site_rec');
6657     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_party_site_id);
6658     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6659     FND_MSG_PUB.ADD;
6660     RAISE FND_API.G_EXC_ERROR;
6661 END get_party_site_rec;
6662 
6663 /************************************************
6664   This procedure retrieves the match rule contact attributes into 
6665   the contact search record structure 
6666 ************************************************/
6667 
6668 PROCEDURE get_contact_rec (
6669         p_contact_ids       IN      HZ_PARTY_SEARCH.IDList,
6670         x_contact_list      OUT NOCOPY HZ_PARTY_SEARCH.contact_list
6671 ) IS
6672   CURSOR c_contacts(cp_org_contact_id NUMBER) IS
6673     SELECT org_contact_id
6674     FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES
6675     WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id
6676     AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6677     AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6678     AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
6679     AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6680     AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id
6681     AND HZ_PERSON_PROFILES.effective_end_date IS NULL;
6682 
6683   I NUMBER;
6684   l_org_contact_id NUMBER;
6685   J NUMBER:=1;
6686   BEGIN
6687 
6688    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6689       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);
6690     END IF;
6691     FOR I IN 1..p_contact_ids.COUNT LOOP
6692       l_org_contact_id := p_contact_ids(I);
6693       OPEN c_contacts(p_contact_ids(I));
6694       LOOP
6695         FETCH c_contacts INTO
6696              l_org_contact_id
6697         ;
6698         EXIT WHEN c_contacts%NOTFOUND;
6699 
6700    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6701       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);
6702     END IF;
6703         x_contact_list(J).CONTACT_NAME:=
6704        HZ_PARTY_ACQUIRE.get_contact_name(l_org_contact_id , 'CONTACTS','CONTACT_NAME');
6705 
6706         J:=J+1;
6707       END LOOP;
6708       CLOSE c_contacts;
6709     END LOOP;
6710 
6711 EXCEPTION
6712   WHEN OTHERS THEN
6713     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6714     FND_MESSAGE.SET_TOKEN('PROC','get_contact_rec');
6715     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_org_contact_id);
6716     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6717     FND_MSG_PUB.ADD;
6718     RAISE FND_API.G_EXC_ERROR;
6719 END get_contact_rec;
6720 
6721 /************************************************
6722   This procedure retrieves the match rule contact point attributes into 
6723   the contact point search record structure 
6724 ************************************************/
6725 
6726 PROCEDURE get_contact_point_rec (
6727         p_contact_point_ids     IN  HZ_PARTY_SEARCH.IDList,
6728         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6729 ) IS
6730 
6731   -- Cursor to fetch primary contact points for party
6732   CURSOR c_cpts(cp_contact_point_id NUMBER) IS
6733     SELECT contact_point_id, contact_point_type
6734       ,translate(HZ_CONTACT_POINTS.EMAIL_ADDRESS, '%',' ')
6735     FROM HZ_CONTACT_POINTS
6736     WHERE contact_point_id = cp_contact_point_id;
6737 
6738   I NUMBER;
6739   l_contact_point_id NUMBER;
6740   J NUMBER:=1;
6741   BEGIN
6742 
6743    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6744       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);
6745     END IF;
6746     FOR I in 1..p_contact_point_ids.COUNT LOOP
6747       l_contact_point_id := p_contact_point_ids(I);
6748       OPEN c_cpts(p_contact_point_ids(I));
6749       LOOP
6750         FETCH c_cpts INTO
6751              l_contact_point_id, x_contact_point_list(J).contact_point_type
6752              ,x_contact_point_list(J).EMAIL_ADDRESS
6753         ;
6754         EXIT WHEN c_cpts%NOTFOUND;
6755 
6756    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6757       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);
6758     END IF;
6759         x_contact_point_list(J).FLEX_FORMAT_PHONE_NUMBER:=
6760        HZ_PARTY_ACQUIRE.get_phone_number(l_contact_point_id , 'CONTACT_POINTS','FLEX_FORMAT_PHONE_NUMBER');
6761         J:=J+1;
6762 
6763       END LOOP;
6764       CLOSE c_cpts;
6765     END LOOP;
6766 
6767 EXCEPTION
6768   WHEN OTHERS THEN
6769     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6770     FND_MESSAGE.SET_TOKEN('PROC','get_contact_point_rec');
6771     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_contact_point_id);
6772     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6773     FND_MSG_PUB.ADD;
6774     RAISE FND_API.G_EXC_ERROR;
6775 END get_contact_point_rec;
6776 
6777 /************************************************
6778   This procedure maps a search record from the logical
6779   record structure to the stage schema structure 
6780   for the PARTY Entity after applying 
6781   the defined transformations
6782 ************************************************/
6783 
6784 PROCEDURE MAP_PARTY_REC( 
6785     p_search_ctx IN BOOLEAN,
6786     p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, 
6787     x_entered_max_score OUT NUMBER,
6788     x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type
6789   ) IS 
6790   tmp VARCHAR2(4000);
6791   l_party_name VARCHAR2(4000);
6792 BEGIN
6793    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6794       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);
6795     END IF;
6796    IF p_search_ctx THEN
6797      x_stage_rec.TX8 := NULL;
6798      g_other_party_level_attribs:=FALSE;
6799     IF p_search_rec.PARTY_NUMBER IS NOT NULL 
6800     OR p_search_rec.TAX_REFERENCE IS NOT NULL 
6801     OR p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL 
6802     OR p_search_rec.SIC_CODE IS NOT NULL 
6803     OR p_search_rec.SIC_CODE_TYPE IS NOT NULL 
6804     THEN
6805       g_other_party_level_attribs:=TRUE;
6806     END IF;
6807      x_entered_max_score:=0;
6808     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
6809       x_entered_max_score := x_entered_max_score+100;
6810     END IF;
6811     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6812       x_entered_max_score := x_entered_max_score+60;
6813     END IF;
6814     IF p_search_rec.TAX_REFERENCE IS NOT NULL THEN 
6815       x_entered_max_score := x_entered_max_score+100;
6816     END IF;
6817     IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
6818       x_entered_max_score := x_entered_max_score+60;
6819     END IF;
6820     IF p_search_rec.SIC_CODE IS NOT NULL THEN 
6821       x_entered_max_score := x_entered_max_score+25;
6822     END IF;
6823     IF p_search_rec.SIC_CODE_TYPE IS NOT NULL THEN 
6824       x_entered_max_score := x_entered_max_score+25;
6825     END IF;
6826     END IF;
6827   IF p_search_ctx THEN
6828     IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
6829       x_stage_rec.TX45 := 
6830         HZ_TRANS_PKG.RM_SPLCHAR(
6831              p_search_rec.JGZZ_FISCAL_CODE
6832              ,null,'JGZZ_FISCAL_CODE'
6833              ,'PARTY','SEARCH');
6834     ELSE
6835       x_stage_rec.TX45 := '';
6836     END IF;
6837   ELSE
6838     IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
6839       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
6840              x_stage_rec.TX45
6841              ,null,'JGZZ_FISCAL_CODE'
6842              ,'PARTY','SCORE');
6843       IF tmp IS NOT NULL THEN
6844         x_stage_rec.TX45 := tmp;
6845       END IF;
6846     END IF;
6847   END IF;
6848   IF p_search_ctx THEN
6849     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6850       x_stage_rec.TX158 := 
6851         HZ_TRANS_PKG.SOUNDX(
6852              p_search_rec.PARTY_ALL_NAMES
6853              ,null,'PARTY_ALL_NAMES'
6854              ,'PARTY');
6855     ELSE
6856       x_stage_rec.TX158 := '';
6857     END IF;
6858   END IF;
6859   IF p_search_ctx THEN
6860     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6861       x_stage_rec.TX40 := 
6862         HZ_TRANS_PKG.WRNAMES_CLEANSE(
6863              p_search_rec.PARTY_ALL_NAMES
6864              ,null,'PARTY_ALL_NAMES'
6865              ,'PARTY','SEARCH');
6866     ELSE
6867       x_stage_rec.TX40 := '';
6868     END IF;
6869   ELSE
6870     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6871       tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
6872              x_stage_rec.TX40
6873              ,null,'PARTY_ALL_NAMES'
6874              ,'PARTY','SCORE');
6875       IF tmp IS NOT NULL THEN
6876         x_stage_rec.TX40 := tmp;
6877       END IF;
6878     END IF;
6879   END IF;
6880   IF p_search_ctx THEN
6881     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6882       x_stage_rec.TX39 := 
6883         HZ_TRANS_PKG.WRNAMES_EXACT(
6884              p_search_rec.PARTY_ALL_NAMES
6885              ,null,'PARTY_ALL_NAMES'
6886              ,'PARTY','SEARCH');
6887     ELSE
6888       x_stage_rec.TX39 := '';
6889     END IF;
6890   ELSE
6891     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6892       tmp :=HZ_TRANS_PKG.WRNAMES_EXACT(
6893              x_stage_rec.TX39
6894              ,null,'PARTY_ALL_NAMES'
6895              ,'PARTY','SCORE');
6896       IF tmp IS NOT NULL THEN
6897         x_stage_rec.TX39 := tmp;
6898       END IF;
6899     END IF;
6900   END IF;
6901   IF p_search_ctx THEN
6902     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
6903       x_stage_rec.TX34 := 
6904         HZ_TRANS_PKG.RM_SPLCHAR(
6905              p_search_rec.PARTY_NUMBER
6906              ,null,'PARTY_NUMBER'
6907              ,'PARTY','SEARCH');
6908     ELSE
6909       x_stage_rec.TX34 := '';
6910     END IF;
6911   ELSE
6912     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
6913       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
6914              x_stage_rec.TX34
6915              ,null,'PARTY_NUMBER'
6916              ,'PARTY','SCORE');
6917       IF tmp IS NOT NULL THEN
6918         x_stage_rec.TX34 := tmp;
6919       END IF;
6920     END IF;
6921   END IF;
6922     IF p_search_rec.PARTY_TYPE IS NOT NULL THEN 
6923       x_stage_rec.TX36 := 
6924         HZ_TRANS_PKG.EXACT(
6925              p_search_rec.PARTY_TYPE
6926              ,null,'PARTY_TYPE'
6927              ,'PARTY');
6928     ELSE
6929       x_stage_rec.TX36 := '';
6930     END IF;
6931   IF p_search_ctx THEN
6932     IF p_search_rec.SIC_CODE IS NOT NULL THEN 
6933       x_stage_rec.TX46 := 
6934         HZ_TRANS_PKG.EXACT(
6935              p_search_rec.SIC_CODE
6936              ,null,'SIC_CODE'
6937              ,'PARTY');
6938     ELSE
6939       x_stage_rec.TX46 := '';
6940     END IF;
6941   END IF;
6942   IF p_search_ctx THEN
6943     IF p_search_rec.SIC_CODE_TYPE IS NOT NULL THEN 
6944       x_stage_rec.TX47 := 
6945         HZ_TRANS_PKG.EXACT(
6946              p_search_rec.SIC_CODE_TYPE
6947              ,null,'SIC_CODE_TYPE'
6948              ,'PARTY');
6949     ELSE
6950       x_stage_rec.TX47 := '';
6951     END IF;
6952   END IF;
6953   IF p_search_ctx THEN
6954     IF p_search_rec.TAX_REFERENCE IS NOT NULL THEN 
6955       x_stage_rec.TX44 := 
6956         HZ_TRANS_PKG.RM_SPLCHAR(
6957              p_search_rec.TAX_REFERENCE
6958              ,null,'TAX_REFERENCE'
6959              ,'PARTY','SEARCH');
6960     ELSE
6961       x_stage_rec.TX44 := '';
6962     END IF;
6963   ELSE
6964     IF p_search_rec.TAX_REFERENCE IS NOT NULL THEN 
6965       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
6966              x_stage_rec.TX44
6967              ,null,'TAX_REFERENCE'
6968              ,'PARTY','SCORE');
6969       IF tmp IS NOT NULL THEN
6970         x_stage_rec.TX44 := tmp;
6971       END IF;
6972     END IF;
6973   END IF;
6974     l_party_name := p_search_rec.PARTY_NAME;
6975     IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6976       l_party_name := p_search_rec.PARTY_ALL_NAMES;
6977     END IF;
6978     IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN
6979       x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,'PARTY_NAME','PARTY','SEARCH');
6980     END IF;
6981 EXCEPTION
6982   WHEN OTHERS THEN
6983     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6984     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_REC');
6985     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6986     FND_MSG_PUB.ADD;
6987     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6988 END;
6989 
6990 
6991 /************************************************
6992   This procedure maps a search record from the logical
6993   record structure to the stage schema structure 
6994   for the PARTY_SITES Entity after applying 
6995   the defined transformations
6996 ************************************************/
6997 
6998 PROCEDURE MAP_PARTY_SITE_REC( 
6999     p_search_ctx IN BOOLEAN,
7000     p_search_list IN HZ_PARTY_SEARCH.party_site_list, 
7001     x_entered_max_score OUT NUMBER,
7002     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list
7003   ) IS 
7004   l_current_max_score NUMBER;
7005   tmp VARCHAR2(4000);
7006 BEGIN
7007    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7008       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);
7009     END IF;
7010    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7011       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);
7012     END IF;
7013   IF p_search_ctx THEN
7014    g_ps_den_only:=TRUE;
7015     x_entered_max_score:=0;
7016     FOR I IN 1..p_search_list.COUNT LOOP
7017       l_current_max_score:=0;
7018       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
7019         l_current_max_score := l_current_max_score+40;
7020         g_ps_den_only:=FALSE;
7021       END IF;
7022       IF p_search_list(I).CITY IS NOT NULL THEN 
7023         l_current_max_score := l_current_max_score+10;
7024       END IF;
7025       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
7026         l_current_max_score := l_current_max_score+15;
7027       END IF;
7028       IF p_search_list(I).STATE IS NOT NULL THEN 
7029         l_current_max_score := l_current_max_score+20;
7030       END IF;
7031       IF p_search_list(I).COUNTRY IS NOT NULL THEN 
7032         l_current_max_score := l_current_max_score+10;
7033       END IF;
7034       IF l_current_max_score>x_entered_max_score THEN
7035         x_entered_max_score:=l_current_max_score;
7036       END IF;
7037     END LOOP;
7038   END IF;
7039   FOR I IN 1..p_search_list.COUNT LOOP
7040     IF p_search_ctx THEN
7041       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
7042         x_stage_list(I).TX4 := 
7043           HZ_TRANS_PKG.WRADDRESS_CLEANSE(
7044              p_search_list(I).ADDRESS
7045              ,null,'ADDRESS'
7046              ,'PARTY_SITES','SEARCH');
7047       ELSE
7048         x_stage_list(I).TX4 := '';
7049       END IF;
7050     ELSE
7051       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
7052         tmp := HZ_TRANS_PKG.WRADDRESS_CLEANSE(
7053              x_stage_list(I).TX4
7054              ,null,'ADDRESS'
7055              ,'PARTY_SITES','SCORE');
7056         IF tmp IS NOT NULL THEN
7057           x_stage_list(I).TX4 := tmp;
7058         END IF;
7059       END IF;
7060     END IF;
7061   END LOOP;
7062   FOR I IN 1..p_search_list.COUNT LOOP
7063     IF p_search_ctx THEN
7064       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
7065         x_stage_list(I).TX3 := 
7066           HZ_TRANS_PKG.WRADDRESS_EXACT(
7067              p_search_list(I).ADDRESS
7068              ,null,'ADDRESS'
7069              ,'PARTY_SITES','SEARCH');
7070       ELSE
7071         x_stage_list(I).TX3 := '';
7072       END IF;
7073     ELSE
7074       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
7075         tmp := HZ_TRANS_PKG.WRADDRESS_EXACT(
7076              x_stage_list(I).TX3
7077              ,null,'ADDRESS'
7078              ,'PARTY_SITES','SCORE');
7079         IF tmp IS NOT NULL THEN
7080           x_stage_list(I).TX3 := tmp;
7081         END IF;
7082       END IF;
7083     END IF;
7084   END LOOP;
7085   FOR I IN 1..p_search_list.COUNT LOOP
7086     IF p_search_ctx THEN
7087       IF p_search_list(I).CITY IS NOT NULL THEN 
7088         x_stage_list(I).TX10 := 
7089           HZ_TRANS_PKG.CLEANSE(
7090              p_search_list(I).CITY
7091              ,null,'CITY'
7092              ,'PARTY_SITES');
7093       ELSE
7094         x_stage_list(I).TX10 := '';
7095       END IF;
7096     END IF;
7097   END LOOP;
7098   FOR I IN 1..p_search_list.COUNT LOOP
7099     IF p_search_ctx THEN
7100       IF p_search_list(I).CITY IS NOT NULL THEN 
7101         x_stage_list(I).TX9 := 
7102           HZ_TRANS_PKG.EXACT(
7103              p_search_list(I).CITY
7104              ,null,'CITY'
7105              ,'PARTY_SITES');
7106       ELSE
7107         x_stage_list(I).TX9 := '';
7108       END IF;
7109     END IF;
7110   END LOOP;
7111   FOR I IN 1..p_search_list.COUNT LOOP
7112     IF p_search_ctx THEN
7113       IF p_search_list(I).COUNTRY IS NOT NULL THEN 
7114         x_stage_list(I).TX22 := 
7115           HZ_TRANS_PKG.EXACT(
7116              p_search_list(I).COUNTRY
7117              ,null,'COUNTRY'
7118              ,'PARTY_SITES');
7119       ELSE
7120         x_stage_list(I).TX22 := '';
7121       END IF;
7122     END IF;
7123   END LOOP;
7124   FOR I IN 1..p_search_list.COUNT LOOP
7125     IF p_search_ctx THEN
7126       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
7127         x_stage_list(I).TX11 := 
7128           HZ_TRANS_PKG.RM_SPLCHAR(
7129              p_search_list(I).POSTAL_CODE
7130              ,null,'POSTAL_CODE'
7131              ,'PARTY_SITES','SEARCH');
7132       ELSE
7133         x_stage_list(I).TX11 := '';
7134       END IF;
7135     ELSE
7136       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
7137         tmp := HZ_TRANS_PKG.RM_SPLCHAR(
7138              x_stage_list(I).TX11
7139              ,null,'POSTAL_CODE'
7140              ,'PARTY_SITES','SCORE');
7141         IF tmp IS NOT NULL THEN
7142           x_stage_list(I).TX11 := tmp;
7143         END IF;
7144       END IF;
7145     END IF;
7146   END LOOP;
7147   FOR I IN 1..p_search_list.COUNT LOOP
7148     IF p_search_ctx THEN
7149       IF p_search_list(I).STATE IS NOT NULL THEN 
7150         x_stage_list(I).TX15 := 
7151           HZ_TRANS_PKG.WRSTATE_CLEANSE(
7152              p_search_list(I).STATE
7153              ,null,'STATE'
7154              ,'PARTY_SITES','SEARCH');
7155       ELSE
7156         x_stage_list(I).TX15 := '';
7157       END IF;
7158     ELSE
7159       IF p_search_list(I).STATE IS NOT NULL THEN 
7160         tmp := HZ_TRANS_PKG.WRSTATE_CLEANSE(
7161              x_stage_list(I).TX15
7162              ,null,'STATE'
7163              ,'PARTY_SITES','SCORE');
7164         IF tmp IS NOT NULL THEN
7165           x_stage_list(I).TX15 := tmp;
7166         END IF;
7167       END IF;
7168     END IF;
7169   END LOOP;
7170   FOR I IN 1..p_search_list.COUNT LOOP
7171     IF p_search_ctx THEN
7172       IF p_search_list(I).STATE IS NOT NULL THEN 
7173         x_stage_list(I).TX14 := 
7174           HZ_TRANS_PKG.WRSTATE_EXACT(
7175              p_search_list(I).STATE
7176              ,null,'STATE'
7177              ,'PARTY_SITES','SEARCH');
7178       ELSE
7179         x_stage_list(I).TX14 := '';
7180       END IF;
7181     ELSE
7182       IF p_search_list(I).STATE IS NOT NULL THEN 
7183         tmp := HZ_TRANS_PKG.WRSTATE_EXACT(
7184              x_stage_list(I).TX14
7185              ,null,'STATE'
7186              ,'PARTY_SITES','SCORE');
7187         IF tmp IS NOT NULL THEN
7188           x_stage_list(I).TX14 := tmp;
7189         END IF;
7190       END IF;
7191     END IF;
7192   END LOOP;
7193 EXCEPTION
7194   WHEN OTHERS THEN
7195     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7196     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_SITE_REC');
7197     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7198     FND_MSG_PUB.ADD;
7199     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7200 END;
7201 
7202 
7203 /************************************************
7204   This procedure maps a search record from the logical
7205   record structure to the stage schema structure 
7206   for the CONTACTS Entity after applying 
7207   the defined transformations
7208 ************************************************/
7209 
7210 PROCEDURE MAP_CONTACT_REC( 
7211     p_search_ctx IN BOOLEAN,
7212     p_search_list IN HZ_PARTY_SEARCH.contact_list, 
7213     x_entered_max_score OUT NUMBER,
7214     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list
7215   ) IS 
7216   l_current_max_score NUMBER;
7217   tmp VARCHAR2(4000);
7218 BEGIN
7219    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7220       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);
7221     END IF;
7222    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7223       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);
7224     END IF;
7225   IF p_search_ctx THEN
7226     x_entered_max_score:=0;
7227     FOR I IN 1..p_search_list.COUNT LOOP
7228       l_current_max_score:=0;
7229       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7230         l_current_max_score := l_current_max_score+60;
7231       END IF;
7232       IF l_current_max_score>x_entered_max_score THEN
7233         x_entered_max_score:=l_current_max_score;
7234       END IF;
7235     END LOOP;
7236   END IF;
7237   FOR I IN 1..p_search_list.COUNT LOOP
7238     IF p_search_ctx THEN
7239       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7240         x_stage_list(I).TX2 := 
7241           HZ_TRANS_PKG.EXACT_PADDED(
7242              p_search_list(I).CONTACT_NAME
7243              ,null,'CONTACT_NAME'
7244              ,'CONTACTS');
7245       ELSE
7246         x_stage_list(I).TX2 := '';
7247       END IF;
7248     END IF;
7249   END LOOP;
7250   FOR I IN 1..p_search_list.COUNT LOOP
7251     IF p_search_ctx THEN
7252       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7253         x_stage_list(I).TX156 := 
7254           HZ_TRANS_PKG.SOUNDX(
7255              p_search_list(I).CONTACT_NAME
7256              ,null,'CONTACT_NAME'
7257              ,'CONTACTS');
7258       ELSE
7259         x_stage_list(I).TX156 := '';
7260       END IF;
7261     END IF;
7262   END LOOP;
7263   FOR I IN 1..p_search_list.COUNT LOOP
7264     IF p_search_ctx THEN
7265       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7266         x_stage_list(I).TX6 := 
7267           HZ_TRANS_PKG.WRPERSON_CLEANSE(
7268              p_search_list(I).CONTACT_NAME
7269              ,null,'CONTACT_NAME'
7270              ,'CONTACTS','SEARCH');
7271       ELSE
7272         x_stage_list(I).TX6 := '';
7273       END IF;
7274     ELSE
7275       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7276         tmp := HZ_TRANS_PKG.WRPERSON_CLEANSE(
7277              x_stage_list(I).TX6
7278              ,null,'CONTACT_NAME'
7279              ,'CONTACTS','SCORE');
7280         IF tmp IS NOT NULL THEN
7281           x_stage_list(I).TX6 := tmp;
7282         END IF;
7283       END IF;
7284     END IF;
7285   END LOOP;
7286   FOR I IN 1..p_search_list.COUNT LOOP
7287     IF p_search_ctx THEN
7288       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7289         x_stage_list(I).TX5 := 
7290           HZ_TRANS_PKG.WRPERSON_EXACT(
7291              p_search_list(I).CONTACT_NAME
7292              ,null,'CONTACT_NAME'
7293              ,'CONTACTS','SEARCH');
7294       ELSE
7295         x_stage_list(I).TX5 := '';
7296       END IF;
7297     ELSE
7298       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7299         tmp := HZ_TRANS_PKG.WRPERSON_EXACT(
7300              x_stage_list(I).TX5
7301              ,null,'CONTACT_NAME'
7302              ,'CONTACTS','SCORE');
7303         IF tmp IS NOT NULL THEN
7304           x_stage_list(I).TX5 := tmp;
7305         END IF;
7306       END IF;
7307     END IF;
7308   END LOOP;
7309 EXCEPTION
7310   WHEN OTHERS THEN
7311     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7312     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_REC');
7313     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7314     FND_MSG_PUB.ADD;
7315     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7316 END;
7317 
7318 
7319 /************************************************
7320   This procedure maps a search record from the logical
7321   record structure to the stage schema structure 
7322   for the CONTACT_POINTS Entity after applying 
7323   the defined transformations
7324 ************************************************/
7325 
7326 PROCEDURE MAP_CONTACT_POINT_REC( 
7327     p_search_ctx IN BOOLEAN,
7328     p_search_list IN HZ_PARTY_SEARCH.contact_point_list, 
7329     x_entered_max_score OUT NUMBER,
7330     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list
7331   ) IS 
7332   l_current_max_score NUMBER;
7333   tmp VARCHAR2(4000);
7334   TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);
7335   l_cnt_pt_type_index INDEX_VARCHAR100_TBL;
7336   TYPE CONTACT_PT_REC_TYPE IS RECORD (
7337   contact_pt_type		VARCHAR2(100),
7338   max_score    		NUMBER) ;
7339   TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;
7340   l_cnt_pt_type contact_pt_list;
7341   N NUMBER := 1;
7342   x_modify VARCHAR2(1);
7343 BEGIN
7344    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7345       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);
7346     END IF;
7347    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7348       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);
7349     END IF;
7350   IF p_search_ctx THEN
7351     x_entered_max_score:=0;
7352     FOR I IN 1..p_search_list.COUNT LOOP
7353       l_current_max_score:=0;
7354       x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;
7355       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7356         l_current_max_score := l_current_max_score+80;
7357       END IF;
7358       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7359         l_current_max_score := l_current_max_score+80;
7360       END IF;
7361       x_modify := 'N';
7362       FOR J IN 1..l_cnt_pt_type.count LOOP
7363       if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then
7364          x_modify := 'Y';
7365       IF l_cnt_pt_type(J).max_score<l_current_max_score THEN
7366       l_cnt_pt_type(J).max_score :=l_current_max_score;
7367       EXIT;
7368       END IF;
7369       end if;
7370       END LOOP;
7371       if x_modify='N' then
7372       l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;
7373       l_cnt_pt_type(N).max_score := l_current_max_score;
7374       N:= N+1;
7375       end if;
7376     END LOOP;
7377    FOR M IN 1..l_cnt_pt_type.count LOOP
7378    x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;
7379    END LOOP;
7380   END IF;
7381   FOR I IN 1..p_search_list.COUNT LOOP
7382     IF p_search_ctx THEN
7383       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7384         x_stage_list(I).TX6 := 
7385           HZ_TRANS_PKG.CLEANSED_EMAIL(
7386              p_search_list(I).EMAIL_ADDRESS
7387              ,null,'EMAIL_ADDRESS'
7388              ,'CONTACT_POINTS','SEARCH');
7389       ELSE
7390         x_stage_list(I).TX6 := '';
7391       END IF;
7392     ELSE
7393       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7394         tmp := HZ_TRANS_PKG.CLEANSED_EMAIL(
7395              x_stage_list(I).TX6
7396              ,null,'EMAIL_ADDRESS'
7397              ,'CONTACT_POINTS','SCORE');
7398         IF tmp IS NOT NULL THEN
7399           x_stage_list(I).TX6 := tmp;
7400         END IF;
7401       END IF;
7402     END IF;
7403   END LOOP;
7404   FOR I IN 1..p_search_list.COUNT LOOP
7405     IF p_search_ctx THEN
7406       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7407         x_stage_list(I).TX5 := 
7408           HZ_TRANS_PKG.EXACT_EMAIL(
7409              p_search_list(I).EMAIL_ADDRESS
7410              ,null,'EMAIL_ADDRESS'
7411              ,'CONTACT_POINTS');
7412       ELSE
7413         x_stage_list(I).TX5 := '';
7414       END IF;
7415     END IF;
7416   END LOOP;
7417   FOR I IN 1..p_search_list.COUNT LOOP
7418     IF p_search_ctx THEN
7419       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7420         x_stage_list(I).TX1 := 
7421           HZ_TRANS_PKG.RM_SPLCHAR_CTX(
7422              p_search_list(I).FLEX_FORMAT_PHONE_NUMBER
7423              ,null,'FLEX_FORMAT_PHONE_NUMBER'
7424              ,'CONTACT_POINTS','SEARCH');
7425       ELSE
7426         x_stage_list(I).TX1 := '';
7427       END IF;
7428     ELSE
7429       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7430         tmp := HZ_TRANS_PKG.RM_SPLCHAR_CTX(
7431              x_stage_list(I).TX1
7432              ,null,'FLEX_FORMAT_PHONE_NUMBER'
7433              ,'CONTACT_POINTS','SCORE');
7434         IF tmp IS NOT NULL THEN
7435           x_stage_list(I).TX1 := tmp;
7436         END IF;
7437       END IF;
7438     END IF;
7439   END LOOP;
7440 EXCEPTION
7441   WHEN OTHERS THEN
7442     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7443     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_POINT_REC');
7444     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7445     FND_MSG_PUB.ADD;
7446     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7447 END;
7448 
7449 
7450 /************************************************
7451   This procedure checks if the input search criteria 
7452   is valid. It checks if : 
7453    1. At least one primary condition is passed
7454    2. Contact Point Type is not null for each condition
7455 ************************************************/
7456 
7457 FUNCTION check_prim_cond(
7458       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
7459       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
7460       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
7461       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list)
7462       RETURN BOOLEAN IS
7463   BEGIN
7464     FOR I IN 1..p_contact_point_list.COUNT LOOP
7465       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (
7466 p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7467 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
7468  ) THEN
7469         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
7470         FND_MSG_PUB.ADD;
7471         RAISE FND_API.G_EXC_ERROR;
7472       END IF;
7473     END LOOP;
7474 
7475     IF p_party_search_rec.PARTY_NUMBER IS NOT NULL THEN 
7476       RETURN TRUE;
7477     END IF;
7478     IF p_party_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
7479       RETURN TRUE;
7480     END IF;
7481     IF p_party_search_rec.TAX_REFERENCE IS NOT NULL THEN 
7482       RETURN TRUE;
7483     END IF;
7484     IF p_party_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
7485       RETURN TRUE;
7486     END IF;
7487     IF p_party_search_rec.SIC_CODE IS NOT NULL THEN 
7488       RETURN TRUE;
7489     END IF;
7490     IF p_party_search_rec.SIC_CODE_TYPE IS NOT NULL THEN 
7491       RETURN TRUE;
7492     END IF;
7493     FOR I IN 1..p_party_site_list.COUNT LOOP
7494       IF p_party_site_list(I).ADDRESS IS NOT NULL THEN 
7495         RETURN TRUE;
7496       END IF;
7497     END LOOP;
7498     FOR I IN 1..p_party_site_list.COUNT LOOP
7499       IF p_party_site_list(I).CITY 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).POSTAL_CODE 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).STATE 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).COUNTRY IS NOT NULL THEN 
7515         RETURN TRUE;
7516       END IF;
7517     END LOOP;
7518     FOR I IN 1..p_contact_list.COUNT LOOP
7519       IF p_contact_list(I).CONTACT_NAME IS NOT NULL THEN 
7520         RETURN TRUE;
7521       END IF;
7522     END LOOP;
7523     FOR I IN 1..p_contact_point_list.COUNT LOOP
7524       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER 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).EMAIL_ADDRESS IS NOT NULL THEN 
7530         RETURN TRUE;
7531       END IF;
7532     END LOOP;
7533     RETURN FALSE;
7534 EXCEPTION
7535   WHEN FND_API.G_EXC_ERROR THEN
7536     RAISE FND_API.G_EXC_ERROR;
7537   WHEN OTHERS THEN
7538     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7539     FND_MESSAGE.SET_TOKEN('PROC','check_prim_cond');
7540     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7541     FND_MSG_PUB.ADD;
7542     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7543   END check_prim_cond;
7544 
7545 /************************************************
7546   This procedure checks if the input search condition 
7547   has party site criteria. 
7548 ************************************************/
7549 
7550 PROCEDURE check_party_site_cond(
7551       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
7552       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
7553 	   x_secondary		   OUT     BOOLEAN,
7554 	   x_primary		   OUT     BOOLEAN
7555 ) IS
7556   BEGIN
7557     x_primary:= FALSE;
7558     x_secondary:= FALSE;
7559     FOR I IN 1..p_party_site_list.COUNT LOOP
7560       IF p_party_site_list(I).ADDRESS IS NOT NULL 
7561          OR p_party_site_list(I).CITY IS NOT NULL
7562          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
7563          OR p_party_site_list(I).STATE IS NOT NULL
7564          OR p_party_site_list(I).COUNTRY IS NOT NULL
7565       THEN
7566         x_primary := TRUE;
7567       END IF;
7568       EXIT WHEN x_primary;
7569     END LOOP;
7570     FOR I IN 1..p_contact_point_list.COUNT LOOP
7571       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7572          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7573       THEN
7574         x_primary := TRUE;
7575       END IF;
7576       EXIT WHEN x_primary;
7577     END LOOP;
7578 
7579     FOR I IN 1..p_party_site_list.COUNT LOOP
7580       IF p_party_site_list(I).ADDRESS IS NOT NULL 
7581          OR p_party_site_list(I).CITY IS NOT NULL
7582          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
7583          OR p_party_site_list(I).STATE IS NOT NULL
7584          OR p_party_site_list(I).COUNTRY IS NOT NULL
7585       THEN
7586         x_secondary := TRUE;
7587       END IF;
7588       EXIT WHEN x_secondary;
7589     END LOOP;
7590     FOR I IN 1..p_contact_point_list.COUNT LOOP
7591       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7592          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7593       THEN
7594         x_secondary := TRUE;
7595       END IF;
7596       EXIT WHEN x_secondary;
7597     END LOOP;
7598 EXCEPTION
7599   WHEN OTHERS THEN
7600     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7601     FND_MESSAGE.SET_TOKEN('PROC','check_party_site_cond');
7602     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7603     FND_MSG_PUB.ADD;
7604     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7605   END check_party_site_cond;
7606 
7607 /************************************************
7608   This procedure checks if the input search condition 
7609   has contact criteria. 
7610 ************************************************/
7611 
7612 PROCEDURE check_contact_cond(
7613       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
7614       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
7615       x_secondary             OUT     BOOLEAN,
7616       x_primary               OUT     BOOLEAN
7617 ) IS
7618   BEGIN
7619     x_primary:= FALSE;
7620     x_secondary:= FALSE;
7621     FOR I IN 1..p_contact_list.COUNT LOOP
7622       IF p_contact_list(I).CONTACT_NAME IS NOT NULL 
7623       THEN
7624         x_primary := TRUE;
7625       END IF;
7626       EXIT WHEN x_primary;
7627     END LOOP;
7628 
7629     FOR I IN 1..p_contact_point_list.COUNT LOOP
7630       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7631          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7632       THEN
7633         x_primary := TRUE;
7634       END IF;
7635       EXIT WHEN x_primary;
7636     END LOOP;
7637 
7638     FOR I IN 1..p_contact_list.COUNT LOOP
7639       IF p_contact_list(I).CONTACT_NAME IS NOT NULL 
7640       THEN
7641         x_secondary := TRUE;
7642       END IF;
7643       EXIT WHEN x_secondary;
7644     END LOOP;
7645 
7646     FOR I IN 1..p_contact_point_list.COUNT LOOP
7647       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7648          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7649       THEN
7650         x_secondary := TRUE;
7651       END IF;
7652       EXIT WHEN x_secondary;
7653     END LOOP;
7654 EXCEPTION
7655   WHEN OTHERS THEN
7656     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7657     FND_MESSAGE.SET_TOKEN('PROC','check_contact_cond');
7658     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7659     FND_MSG_PUB.ADD;
7660     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7661   END check_contact_cond;
7662 
7663 /************************************************
7664   This procedure checks if the input search condition 
7665   has valid contact point criteria. 
7666 ************************************************/
7667 
7668 PROCEDURE check_contact_point_cond(
7669       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
7670       x_secondary             OUT     BOOLEAN,
7671       x_primary               OUT     BOOLEAN
7672 ) IS
7673   BEGIN
7674     x_primary:= FALSE;
7675     x_secondary:= FALSE;
7676 
7677     FOR I IN 1..p_contact_point_list.COUNT LOOP
7678       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN 
7679         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
7680         FND_MSG_PUB.ADD;
7681         RAISE FND_API.G_EXC_ERROR;
7682       END IF;
7683     END LOOP;
7684 
7685     FOR I IN 1..p_contact_point_list.COUNT LOOP
7686       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7687          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
7688       THEN
7689         x_primary := TRUE;
7690       END IF;
7691       EXIT WHEN x_primary;
7692     END LOOP;
7693     FOR I IN 1..p_contact_point_list.COUNT LOOP
7694       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL  
7695          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
7696       THEN
7697         x_secondary := TRUE;
7698       END IF;
7699       EXIT WHEN x_secondary;
7700     END LOOP;
7701 EXCEPTION
7702   WHEN OTHERS THEN
7703     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7704     FND_MESSAGE.SET_TOKEN('PROC','check_contact_point_cond');
7705     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7706     FND_MSG_PUB.ADD;
7707     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7708   END check_contact_point_cond;
7709 
7710 FUNCTION check_staged RETURN BOOLEAN IS
7711 
7712   CURSOR c_check_staged IS 
7713     SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL 
7714     WHERE nvl(STAGED_FLAG,'N') = 'N' 
7715     AND FUNCTION_ID in (
7716                 38
7717                 ,40
7718                 ,43
7719                 ,44
7720                 ,49
7721                 ,50
7722                 ,51
7723                 ,52
7724                 ,66
7725                 ,67
7726                 ,72
7727                 ,73
7728                 ,74
7729                 ,77
7730                 ,78
7731                 ,85
7732                 ,89
7733                 ,92
7734                 ,93
7735                 ,110
7736                 ,114
7737                 ,115
7738                 ,123
7739                 ,124
7740     );
7741   l_tmp NUMBER;
7742 BEGIN
7743   IF g_staged =  1 THEN
7744     RETURN TRUE;
7745   ELSIF g_staged = 0 THEN
7746     RETURN FALSE;
7747   END IF;
7748 
7749   OPEN c_check_staged;
7750   FETCH c_check_staged INTO l_tmp;
7751   IF c_check_staged%FOUND THEN
7752     CLOSE c_check_staged;
7753     g_staged := 0;
7754     RETURN FALSE;
7755   ELSE
7756     CLOSE c_check_staged;
7757     g_staged := 1;
7758     RETURN TRUE;
7759   END IF;
7760 END check_staged;
7761 
7762 -- Fix for Bug 4736139
7763 FUNCTION check_staged_var RETURN VARCHAR2 IS
7764   l_staged       VARCHAR2(1);
7765   l_staged_bool  BOOLEAN;
7766 BEGIN
7767   l_staged_bool := check_staged;
7768   IF l_staged_bool THEN
7769     l_staged := 'Y';
7770   ELSE
7771     l_staged := 'N';
7772   END IF;
7773   RETURN l_staged;
7774 END check_staged_var;
7775 -- End fix for Bug 4736139
7776 
7777 END;
7778