DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_58

Source


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