DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_4

Source


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