DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_6

Source


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