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