DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_2

Source


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