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