DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_61

Source


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