DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_35

Source


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