DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_5

Source


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