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