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