DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_41

Source


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