DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_58

Source


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