DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_33

Source


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