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