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  |      30-MAR-2009 Generated by HZ Match Rule Compiler
23  |
24  *=======================================================================*/
25 
26 -- ==========================================================================================
27 -- ============MATCH RULE COMPILER GENERATED CODE FOR SEARCH MATCH RULES ====================
28 -- ==========================================================================================
29 
30   TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;
31   call_order vlisttype;
32   call_max_score HZ_PARTY_SEARCH.IDList;
33   call_type vlisttype;
34   g_party_stage_rec  HZ_PARTY_STAGE.party_stage_rec_type;
35   g_party_site_stage_list  HZ_PARTY_STAGE.party_site_stage_list;
36   g_contact_stage_list  HZ_PARTY_STAGE.contact_stage_list;
37   g_contact_pt_stage_list  HZ_PARTY_STAGE.contact_pt_stage_list;
38   g_mappings  HZ_PARTY_SEARCH.IDList;
39   g_max_id NUMBER:=2000000000;
40   g_other_party_level_attribs BOOLEAN;
41 
42   g_debug_count                        NUMBER := 0;
43   g_score_until_thresh BOOLEAN:=false;
44  
45   g_thres_score NUMBER:=1000;
46   g_ps_den_only BOOLEAN;
47   g_index_owner VARCHAR2(255);
48   distinct_search_cpt_types NUMBER ; 
49 
50 PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)
51 IS
52      remainder_str VARCHAR2(4000);
53      current_pos NUMBER ;
54      temp VARCHAR2(300) ;
55 BEGIN
56      remainder_str := input_str ;
57      current_pos := 1 ;
58    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
59      WHILE remainder_str IS NOT NULL
60      LOOP
61      temp := substr(remainder_str, 1 , 255 );
62       hz_utility_v2pub.debug(p_message=>'  '||temp,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
63      current_pos := current_pos + 255 ;
64      remainder_str := substr(input_str,current_pos );
65      END LOOP ;
66     END IF;
67 END ;
68 FUNCTION check_estimate_hits (
69   p_entity VARCHAR2,
70   p_contains_str VARCHAR2) RETURN NUMBER IS
71   
72   ustatus VARCHAR2(255);
73   dstatus VARCHAR2(255);
74   l_bool BOOLEAN;
75   l_hits NUMBER := 0;
76 BEGIN
77   IF g_index_owner IS NULL THEN
78     l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,g_index_owner);
79   END IF;
80   IF p_entity='PARTY' THEN
81 
82     l_hits :=  CTX_QUERY.count_hits(
83         g_index_owner||'.'||'HZ_STAGE_PARTIES_T1',p_contains_str, false);
84   ELSIF p_entity='PARTY_SITES' THEN
85     l_hits :=  CTX_QUERY.count_hits(
86         g_index_owner||'.'||'HZ_STAGE_PARTY_SITES_T1',p_contains_str, false);
87   ELSIF p_entity='CONTACTS' THEN
88     l_hits :=  CTX_QUERY.count_hits(
89         g_index_owner||'.'||'HZ_STAGE_CONTACT_T1',p_contains_str, false);
90   ELSIF p_entity='CONTACT_POINTS' THEN
91     l_hits :=  CTX_QUERY.count_hits(
92         g_index_owner||'.'||'HZ_STAGE_CPT_T1',p_contains_str, false);
93   END IF;
94   RETURN floor(l_hits/2) ;
95   
96 
97   exception
98     when others then
99       if (instrb(SQLERRM,'DRG-51030')>0) then 
100         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
101         FND_MSG_PUB.ADD;
102         RAISE FND_API.G_EXC_ERROR;
103       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
104         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
105         FND_MSG_PUB.ADD;
106         RAISE FND_API.G_EXC_ERROR;
107       else 
108         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
109       end if;
110 END;
111 
112 
113 FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)
114 RETURN VARCHAR2
115 IS
116 p_person_restrict_sql VARCHAR2(32767);
117 p_restrict1_sql VARCHAR2(32767);
118 p_final_restrict_sql VARCHAR2(32767);
119 BEGIN
120    p_final_restrict_sql := p_restrict_sql ; 
121    IF p_restrict_sql IS NOT NULL
122    THEN
123      IF instrb(p_restrict_sql, 'STAGE.') > 0
124      THEN
125         p_restrict1_sql := replace( p_restrict_sql, 'STAGE.', 'stage1.');
126      ELSIF instrb(p_restrict_sql, 'stage.') > 0
127      THEN
128            p_restrict1_sql := replace( p_restrict_sql, 'stage.', 'stage1.');
129      END IF;
130     p_person_restrict_sql := 'exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r' 
131                                || ' where oc.org_contact_id = stage.org_contact_id and' 
132                                || ' r.relationship_id = oc.party_relationship_id' 
133                                || ' and r.subject_type = ''PERSON'' AND r.object_type = ''ORGANIZATION'' ' 
134                                || ' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id' 
135                                || ' and ' || p_restrict1_sql || ' ) )' ; 
136 p_final_restrict_sql := '((stage.org_contact_id is null and ' || p_restrict_sql || ') or (stage.org_contact_id is not null and ' 
137                            || p_person_restrict_sql ||  ' ))'; 
138  END IF;
139  return p_final_restrict_sql ;
140 END;
141   FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS
142     l_newidx NUMBER;
143   BEGIN 
144    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
145       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
146       hz_utility_v2pub.debug(p_message=>'calling the function map_id',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
147     END IF;
148    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
149       hz_utility_v2pub.debug(p_message=>'argument in_id =  '||in_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
150     END IF;
151     IF in_id<g_max_id THEN 
152       RETURN in_id;
153     ELSE
154       FOR I in 1..g_mappings.COUNT LOOP
155         IF in_id = g_mappings(I) THEN
156           RETURN (g_max_id+I);
157         END IF;
158       END LOOP;
159       l_newidx := g_mappings.COUNT+1;
160       g_mappings(l_newidx) := in_id;
161       RETURN (g_max_id+l_newidx);
162     END IF;
163   END;
164   FUNCTION GET_PARTY_SCORE 
165        (
166        p_table_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;
350           x_matchidx:=J;
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
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 = 'PARTY_ALL_NAMES' THEN
421 
422      l_matched_value := HZ_PARTY_ACQUIRE.get_known_as (p_record_id, p_entity,'PARTY_ALL_NAMES','Y');
423       RETURN l_matched_value;
424     END IF;
425   IF p_attribute = 'ALL_ACCOUNT_NAMES' THEN
426 
427      l_matched_value := HZ_PARTY_ACQUIRE.get_account_info (p_record_id, p_entity,'ALL_ACCOUNT_NAMES','Y');
428       RETURN l_matched_value;
429     END IF;
430   IF p_attribute = 'PARTY_NUMBER' THEN
431 
432       SELECT party_type INTO l_party_type 
433       FROM HZ_PARTIES
434       WHERE party_id = p_record_id;
435       IF l_party_type = 'ORGANIZATION' 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       ELSIF l_party_type = 'PERSON' THEN
441         SELECT PARTY_NUMBER INTO l_matched_value 
442         FROM HZ_PARTIES
443         WHERE party_id = p_record_id 
444         and rownum = 1;
445       END IF;
446       RETURN l_matched_value;
447     END IF;
448   IF p_attribute = 'ALL_ACCOUNT_NUMBERS' THEN
449 
450      l_matched_value := HZ_PARTY_ACQUIRE.get_account_info (p_record_id, p_entity,'ALL_ACCOUNT_NUMBERS','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
484       RETURN l_matched_value;
481        WHEN NO_DATA_FOUND THEN
482          l_matched_value := 'Err';
483      END;
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.TX39, p_table_TX39,(50000*(p_idx-1)+43)) 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.TX40, p_table_TX40,(50000*(p_idx-1)+44)) 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','PARTY_ALL_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,'PARTY_ALL_NAMES',
598            'PARTY', p_search_rec.PARTY_ALL_NAMES,
599            l_attrib_value,l_score);
603       END IF;
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;
604      l_score :=0;
605       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX32, p_table_TX32,(50000*(p_idx-1)+36)) THEN
606       l_score :=60;
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       ELSIF l_current_score<48 AND 
611           HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX33, p_table_TX33,(50000*(p_idx-1)+37)) THEN
612       l_score :=48;
613    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
614       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);
615     END IF;
616       END IF;
617       IF l_score>0 THEN
618    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
619       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);
620     END IF;
621       l_attrib_value := get_attrib_val(p_record_id,'PARTY','ALL_ACCOUNT_NAMES');
622    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
623       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);
624     END IF;
625       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
626                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
627       VALUES (
628            p_party_id,p_record_id,p_search_ctx_id,'ALL_ACCOUNT_NAMES',
629            'PARTY', p_search_rec.ALL_ACCOUNT_NAMES,
630            l_attrib_value,l_score);
631    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
632       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);
633     END IF;
634       END IF;
635      l_score :=0;
636       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX34, p_table_TX34,(50000*(p_idx-1)+38)) THEN
637       l_score :=100;
638    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
639       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);
640     END IF;
641       END IF;
642       IF l_score>0 THEN
643    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
644       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);
645     END IF;
646       l_attrib_value := get_attrib_val(p_record_id,'PARTY','PARTY_NUMBER');
647    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
648       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
649     END IF;
650       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
651                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
652       VALUES (
653            p_party_id,p_record_id,p_search_ctx_id,'PARTY_NUMBER',
654            'PARTY', p_search_rec.PARTY_NUMBER,
655            l_attrib_value,l_score);
656    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
657       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);
658     END IF;
659       END IF;
660      l_score :=0;
661       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX35, p_table_TX35,(50000*(p_idx-1)+39)) THEN
662       l_score :=100;
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','ALL_ACCOUNT_NUMBERS');
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,'ALL_ACCOUNT_NUMBERS',
679            'PARTY', p_search_rec.ALL_ACCOUNT_NUMBERS,
680            l_attrib_value,l_score);
681    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
685     NULL;
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;
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
777     END IF;
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);
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
860       IF l_score>0 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;
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
957       l_attrib_value := get_attrib_val(p_record_id,'CONTACT_POINTS','FLEX_FORMAT_PHONE_NUMBER');
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;
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');
1067 END;
1064     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1065     FND_MSG_PUB.ADD;
1066     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
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
1173 POP_PARTY_COND_REC(p_party_search_rec);
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
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);
1265       call_type(1) := 'OR';
1262         l_num := l_num-1;
1263       END LOOP;
1264     ELSE
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,
1315     l_party_contains_str VARCHAR2(32000); 
1312               p_denorm_max_score NUMBER,
1313               p_non_denorm_max_score NUMBER,
1314               p_threshold NUMBER) RETURN VARCHAR2 IS
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;
1413       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);
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 
1513       HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT
1510       -- Setup query string for COUNTRY
1511       l_prim_temp := null;
1512       l_prim_temp_den := null;
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); 
1588     TYPE CONTACT_PT_REC_TYPE IS RECORD (
1585     l_filter_str VARCHAR2(4000) := null;
1586     l_prim_temp VARCHAR2(4000) := null;
1587     l_prim_temp_den VARCHAR2(4000) := null;
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
1687      OPEN x_cursor FOR 
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;
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
1774      ,g_party_site_stage_list(1).TX15
1771      ,g_party_site_stage_list(1).TX11
1772      ,g_party_site_stage_list(1).TX11
1773      ,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 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
1871             AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  stage.TX36))
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
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        END IF; 
1888      IF p_search_ctx_id IS NULL THEN
1889        l_sqlstr := 'SELECT   ' || l_hint || ' PARTY_ID , TX32, TX33, TX34, TX35, TX40, TX39'||
1890                    ' FROM HZ_STAGED_PARTIES stage'||
1891                    ' WHERE contains( concat_col, :cont)>0'||
1892                    ' AND ((:TX36 IS NULL OR :TX36||'' '' =  stage.TX36))'||
1893                    ' AND ('||p_restrict_sql||')' ||
1894                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
1895           IF l_search_merged = 'Y' THEN  
1896                   l_sqlstr := l_sqlstr ;  
1897           ELSIF l_search_merged = 'I' THEN  
1898                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'', ''I'')';  
1899           ELSE  
1900                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'')';  
1901           END IF;  
1902  	   output_long_strings('----------------------------------------------------------');
1903       output_long_strings('Party Contains String = '||p_contains_str);
1904 		output_long_strings('Restrict Sql = '||p_restrict_sql);
1905        OPEN x_cursor FOR l_sqlstr USING p_contains_str
1906                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1907                     ,p_dup_party_id, p_dup_party_id;
1908      END IF;
1909    END IF;
1910   exception
1911     when others then
1912       if (instrb(SQLERRM,'DRG-51030')>0) then 
1913         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1914         FND_MSG_PUB.ADD;
1915         RAISE FND_API.G_EXC_ERROR;
1916       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
1917         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1918         FND_MSG_PUB.ADD;
1919         RAISE FND_API.G_EXC_ERROR;
1920       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
1921         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1922         FND_MSG_PUB.ADD;
1923         RAISE FND_API.G_EXC_ERROR;
1924       else 
1925         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1926     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1927     	 FND_MSG_PUB.ADD;
1928         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1929       end if;
1930   END;
1931 
1932   PROCEDURE open_party_site_cursor(
1933             p_dup_party_id NUMBER, 
1934             p_party_id NUMBER, 
1935             p_restrict_sql VARCHAR2, 
1936             p_contains_str  VARCHAR2, 
1937             p_search_ctx_id  NUMBER, 
1938             p_search_merged  VARCHAR2, 
1942   l_sqlstr VARCHAR2(4000);
1939             p_search_rel_sites  VARCHAR2, 
1940             p_person_api  VARCHAR2, 
1941             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1943   l_hint VARCHAR2(100); 
1944   l_check NUMBER; 
1945   l_check_dt NUMBER; 
1946   l_search_merged VARCHAR2(1); 
1947   l_status_sql VARCHAR2(100); 
1948   p_restrict_sql1 VARCHAR2(4000); 
1949  
1950   BEGIN
1951    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1952       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);
1953       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);
1954     END IF;
1955      IF (p_search_merged is null) then 
1956         l_search_merged := 'N';  
1957      ELSE 
1958         l_search_merged := p_search_merged; 
1959      END IF; 
1960      IF p_party_id IS NOT NULL THEN
1961    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1962       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);
1963     END IF;
1964        IF p_search_rel_sites = 'N' THEN
1965          OPEN x_cursor FOR 
1966           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
1967           FROM HZ_STAGED_PARTY_SITES stage
1968           WHERE contains( concat_col, p_contains_str)>0
1969           AND( (l_search_merged ='Y' )  
1970              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1971              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1972           AND stage.party_id = p_party_id; 
1973        ELSE
1974          OPEN x_cursor FOR 
1975           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
1976           FROM HZ_STAGED_PARTY_SITES stage
1977           WHERE contains( concat_col, p_contains_str)>0
1978           AND( (l_search_merged ='Y' )  
1979             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1980             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1981           AND stage.party_id = p_party_id 
1982           UNION
1983           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
1984           FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc
1985           WHERE contains( concat_col, p_contains_str)>0
1986           AND( (l_search_merged ='Y' )  
1987             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1988             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1989           AND r.object_id = p_party_id 
1990           AND r.subject_id = stage.party_id 
1991           AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
1992           AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
1993           AND r.relationship_id = oc.party_relationship_id
1994           AND oc.org_contact_id = stage.org_contact_id; 
1995       END IF;
1996     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1997    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1998       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);
1999     END IF;
2000       IF p_search_ctx_id IS NULL THEN
2001    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2002       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);
2003     END IF;
2004         OPEN x_cursor FOR 
2005           SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX17, TX22
2006           FROM HZ_STAGED_PARTY_SITES stage
2007         WHERE contains( concat_col, p_contains_str)>0
2008         AND EXISTS (
2009           SELECT 1 FROM HZ_STAGED_PARTIES p
2010           WHERE p.PARTY_ID = stage.PARTY_ID
2011           AND( (l_search_merged ='Y' )  
2012           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2013           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2014           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2015           AND( (l_search_merged ='Y' )  
2016            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2017            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2018           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2019       ELSE
2020    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2021       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);
2022     END IF;
2023         IF p_person_api = 'Y' THEN
2024           OPEN x_cursor FOR 
2025             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX17, TX22
2026             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
2027             WHERE contains( concat_col, p_contains_str)>0
2028           AND( (l_search_merged ='Y' )  
2029           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2033             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2030           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2031             AND d.search_context_id = p_search_ctx_id
2032             AND d.party_id = stage.party_id
2034             UNION 
2035             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
2036             FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage
2037             WHERE contains( concat_col, p_contains_str)>0
2038           AND( (l_search_merged ='Y' )  
2039           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2040           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2041             AND d.search_context_id = p_search_ctx_id
2042             AND d.party_id = r.subject_id
2043             AND r.relationship_id = oc.party_relationship_id
2044             AND oc.org_contact_id = stage.org_contact_id
2045             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2046         ELSE
2047           OPEN x_cursor FOR 
2048             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX17, TX22
2049             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
2050             WHERE contains( concat_col, p_contains_str)>0
2051             AND( (l_search_merged ='Y' )  
2052              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2053              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2054             AND d.search_context_id = p_search_ctx_id
2055             AND d.party_id = stage.party_id
2056             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2057         END IF;
2058       END IF;
2059     ELSE
2060    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2061       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);
2062     END IF;
2063        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2064        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_PS'); 
2065        IF (l_check_dt > 0 ) THEN 
2066    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2067       hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective_ps  hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2068     END IF;
2069            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */'; 
2070        ELSIF (l_check > 0 ) THEN 
2071    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2072       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);
2073     END IF;
2074            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */'; 
2075        END IF; 
2076        IF l_search_merged = 'Y' THEN 
2077                l_status_sql := ' ' ;  
2078        ELSIF l_search_merged = 'I' THEN  
2079                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2080        ELSE 
2081                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2082        END IF; 
2083  		/*Performance fix for Bug:4589953*/ 
2084  		IF(p_person_api='Y') THEN 
2085        IF (l_check > 0 ) THEN 
2086        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
2087        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2088        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
2089        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2090        ELSE
2091 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2092        END IF; 
2093        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'||
2094                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2095                    ' WHERE contains( concat_col, :cont)>0'||
2096                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2097                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2098                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2099          ' AND (ORG_CONTACT_ID IS NULL ' ||
2100        	' AND ('||p_restrict_sql||'))' ||
2101        	' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2102          ' UNION ' ||
2103        			 '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'||
2104                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2105                    ' WHERE contains( concat_col, :cont)>0'||
2106                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2107                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2108                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2109          ' AND ORG_CONTACT_ID IN ' ||
2110          ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships ' ||
2111          ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
2112          ' where stage1.relationship_id = oc.party_relationship_id ' || 
2113          ' and ('||p_restrict_sql1|| ') )' ||
2117        ELSE 
2114          ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2115        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2116                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2118        l_sqlstr := 'SELECT ' || l_hint ||' PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX17, TX22'||
2119                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2120                    ' WHERE contains( concat_col, :cont)>0'||
2121                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2122                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2123                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2124                  ' AND EXISTS ('||
2125                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2126                  ' WHERE p.party_id = stage.party_id ' || 
2127                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2128                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2129                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2130        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2131                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2132                     ,p_dup_party_id, p_dup_party_id;
2133        END IF; 
2134 		ELSE 
2135        l_sqlstr := 'SELECT ' || l_hint ||' PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX17, TX22'||
2136                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2137                    ' WHERE contains( concat_col, :cont)>0'||
2138                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2139                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2140                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2141                  ' AND EXISTS ('||
2142                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2143                  ' WHERE p.party_id = stage.party_id ' || 
2144                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2145                    ' AND ('||p_restrict_sql||')' ||
2146                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2147        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2148                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2149                     ,p_dup_party_id, p_dup_party_id;
2150 		  END IF; 
2151     END IF;
2152  	    output_long_strings('----------------------------------------------------------');
2153        output_long_strings('Party Site Contains String = '||p_contains_str);
2154 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2155   exception
2156     when others then
2157       if (instrb(SQLERRM,'DRG-51030')>0) then 
2158         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2159         FND_MSG_PUB.ADD;
2160         RAISE FND_API.G_EXC_ERROR;
2161       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2162         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2163         FND_MSG_PUB.ADD;
2164         RAISE FND_API.G_EXC_ERROR;
2165       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2166         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2167         FND_MSG_PUB.ADD;
2168         RAISE FND_API.G_EXC_ERROR;
2169       else 
2170         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2171     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2172     	 FND_MSG_PUB.ADD;
2173         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2174       end if;
2175   END;
2176 
2177   PROCEDURE open_contact_cursor(
2178             p_dup_party_id NUMBER, 
2179             p_party_id NUMBER, 
2180             p_restrict_sql VARCHAR2, 
2181             p_contains_str  VARCHAR2, 
2182             p_search_ctx_id  NUMBER, 
2183             p_search_merged  VARCHAR2, 
2184             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
2185   l_sqlstr VARCHAR2(4000);
2186   l_hint VARCHAR2(100); 
2187   l_check NUMBER; 
2188   l_check_dt NUMBER; 
2189   l_search_merged VARCHAR2(1); 
2190   l_status_sql VARCHAR2(100); 
2191  
2192   BEGIN
2193    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2194       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);
2195       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);
2196     END IF;
2197      IF (p_search_merged is null) then 
2198         l_search_merged := 'N';  
2199      ELSE 
2200         l_search_merged := p_search_merged; 
2201      END IF; 
2202      IF p_party_id IS NOT NULL THEN
2203    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2204       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);
2205     END IF;
2206        OPEN x_cursor FOR 
2207           SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID, TX6, TX5
2208           FROM HZ_STAGED_CONTACTS stage
2209         WHERE contains( concat_col, p_contains_str)>0
2210         AND EXISTS (
2211           SELECT 1 FROM HZ_STAGED_PARTIES p
2212           WHERE p.PARTY_ID = stage.PARTY_ID
2213           AND( (l_search_merged ='Y' )  
2214           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2218            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2215           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2216           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2217           AND( (l_search_merged ='Y' )  
2219            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2220           AND stage.party_id = p_party_id;
2221     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2222    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2223       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);
2224     END IF;
2225       IF p_search_ctx_id IS NULL THEN
2226    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2227       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);
2228     END IF;
2229         OPEN x_cursor FOR 
2230           SELECT ORG_CONTACT_ID, PARTY_ID, TX6, TX5
2231           FROM HZ_STAGED_CONTACTS stage
2232         WHERE contains( concat_col, p_contains_str)>0
2233         AND EXISTS (
2234           SELECT 1 FROM HZ_STAGED_PARTIES p
2235           WHERE p.PARTY_ID = stage.PARTY_ID
2236           AND( (l_search_merged ='Y' )  
2237           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2238           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2239           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2240           AND( (l_search_merged ='Y' )  
2241            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2242            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2243           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2244       ELSE
2245    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2246       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);
2247     END IF;
2248           OPEN x_cursor FOR 
2249             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID, TX6, TX5
2250             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage
2251             WHERE contains( concat_col, p_contains_str)>0
2252             AND d.search_context_id = p_search_ctx_id
2253             AND d.party_id = stage.party_id
2254             AND( (l_search_merged ='Y' )  
2255              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2256              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2257             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2258       END IF;
2259     ELSE
2260    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2261       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);
2262     END IF;
2263        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2264        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CT'); 
2265        IF (l_check_dt > 0 ) THEN 
2266    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2267       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);
2268     END IF;
2269            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */'; 
2270        ELSIF (l_check > 0 ) THEN 
2271    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2272       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);
2273     END IF;
2274            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */'; 
2275        END IF; 
2276        IF l_search_merged = 'Y' THEN 
2277                l_status_sql := ' ' ;  
2281                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2278        ELSIF l_search_merged = 'I' THEN  
2279                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2280        ELSE 
2282        END IF; 
2283        l_sqlstr := 'SELECT   ' || l_hint || ' ORG_CONTACT_ID, PARTY_ID , TX6, TX5'||
2284                    ' FROM HZ_STAGED_CONTACTS stage'||
2285                    ' WHERE contains( concat_col, :cont)>0'||
2286                  ' AND EXISTS ('||
2287                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2288                  ' WHERE p.party_id = stage.party_id ' || 
2289                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36)) '|| l_status_sql ||' ) ' || 
2290                   ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2291                   ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2292                   ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2293                    ' AND ('||p_restrict_sql||')' ||
2294                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2295        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2296                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2297                     ,p_dup_party_id, p_dup_party_id;
2298     END IF;
2299  	    output_long_strings('----------------------------------------------------------');
2300        output_long_strings('Contacts Contains String = '||p_contains_str);
2301 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2302   exception
2303     when others then
2304       if (instrb(SQLERRM,'DRG-51030')>0) then 
2305         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2306         FND_MSG_PUB.ADD;
2307         RAISE FND_API.G_EXC_ERROR;
2308       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2309         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2310         FND_MSG_PUB.ADD;
2311         RAISE FND_API.G_EXC_ERROR;
2312       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2313         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2314         FND_MSG_PUB.ADD;
2315         RAISE FND_API.G_EXC_ERROR;
2316       else 
2317         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2318     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2319     	 FND_MSG_PUB.ADD;
2320         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2321       end if;
2322   END;
2323 
2324   PROCEDURE open_contact_pt_cursor(
2325             p_dup_party_id NUMBER, 
2326             p_party_id NUMBER, 
2327             p_restrict_sql VARCHAR2, 
2328             p_contains_str  VARCHAR2, 
2329             p_search_ctx_id  NUMBER, 
2330             p_search_merged  VARCHAR2, 
2331             p_search_rel_cpts  VARCHAR2, 
2332             p_person_api  VARCHAR2, 
2333             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,
2334             p_restrict_entity VARCHAR2 DEFAULT NULL) IS
2335   l_sqlstr VARCHAR2(4000);
2336   l_hint VARCHAR2(100); 
2337   l_check NUMBER; 
2338   l_check_dt NUMBER; 
2339   l_search_merged VARCHAR2(1); 
2340   l_status_sql VARCHAR2(100); 
2341   p_restrict_sql1 VARCHAR2(4000); 
2342  
2343   BEGIN
2344    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2348      IF (p_search_merged is null) then 
2345       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);
2346       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);
2347     END IF;
2349         l_search_merged := 'N';  
2350      ELSE 
2351         l_search_merged := p_search_merged; 
2352      END IF; 
2353   IF p_restrict_entity = 'CONTACTS'    
2354   THEN
2355           OPEN x_cursor FOR 
2356           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
2357           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
2358           WHERE contains( concat_col, p_contains_str)>0 
2359           AND d.search_context_id = p_search_ctx_id 
2360           AND( (l_search_merged ='Y' )  
2361            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2362            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2363           AND d.party_id = stage.org_contact_id ; 
2364    END IF; 
2365   IF p_restrict_entity = 'PARTY_SITES'    
2366   THEN
2367           OPEN x_cursor FOR 
2368           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
2369           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
2370           WHERE contains( concat_col, p_contains_str)>0 
2371           AND d.search_context_id = p_search_ctx_id 
2372           AND( (l_search_merged ='Y' )  
2373            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2374            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2375           AND d.party_id = stage.party_site_id ; 
2376    END IF; 
2377  IF p_restrict_entity IS NULL
2378  THEN
2379      IF p_party_id IS NOT NULL THEN
2380    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2381       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);
2382     END IF;
2383        IF p_search_rel_cpts = 'N' THEN
2384          OPEN x_cursor FOR 
2385           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
2386           FROM HZ_STAGED_CONTACT_POINTS stage
2387           WHERE contains( concat_col, p_contains_str)>0
2388           AND( (l_search_merged ='Y' )  
2389            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2390            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2391           AND stage.party_id = p_party_id; 
2392        ELSE
2393          OPEN x_cursor FOR 
2394           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
2395           FROM HZ_STAGED_CONTACT_POINTS stage
2396           WHERE contains( concat_col, p_contains_str)>0
2397           AND( (l_search_merged ='Y' )  
2398            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2399            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2400           AND stage.party_id = p_party_id 
2401           UNION
2402           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
2403           FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc
2404           WHERE contains( concat_col, p_contains_str)>0
2405           AND r.object_id = p_party_id 
2406           AND( (l_search_merged ='Y' )  
2407            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2408            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2409                     AND r.subject_id = stage.party_id 
2410                     AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
2411                     AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
2412                     AND r.relationship_id = oc.party_relationship_id
2413                     AND oc.org_contact_id = stage.org_contact_id; 
2414       END IF;
2415     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2416    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2417       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);
2418     END IF;
2419       IF p_search_ctx_id IS NULL THEN
2420    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2421       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);
2422     END IF;
2423         OPEN x_cursor FOR 
2424           SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2425           FROM HZ_STAGED_CONTACT_POINTS stage
2426         WHERE contains( concat_col, p_contains_str)>0
2427         AND EXISTS (
2428           SELECT 1 FROM HZ_STAGED_PARTIES p
2429           WHERE p.PARTY_ID = stage.PARTY_ID
2430           AND( (l_search_merged ='Y' )  
2431           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2435            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2432           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2433           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2434           AND( (l_search_merged ='Y' )  
2436            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2437           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2438       ELSE
2439    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2440       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);
2441     END IF;
2442         IF p_person_api = 'Y' THEN
2443           OPEN x_cursor FOR 
2444             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2445             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2446             WHERE contains( concat_col, p_contains_str)>0
2447             AND d.search_context_id = p_search_ctx_id
2448             AND d.party_id = stage.party_id
2449             AND( (l_search_merged ='Y' )  
2450              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2451              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2452             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2453             UNION 
2454             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
2455             FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage
2456             WHERE contains( concat_col, p_contains_str)>0
2457             AND d.search_context_id = p_search_ctx_id
2458             AND d.party_id = r.subject_id
2459             AND r.relationship_id = oc.party_relationship_id
2460             AND oc.org_contact_id = stage.org_contact_id
2461             AND( (l_search_merged ='Y' )  
2462              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2463              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2464             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2465         ELSE
2466           OPEN x_cursor FOR 
2467             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2468             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2469             WHERE contains( concat_col, p_contains_str)>0
2470             AND d.search_context_id = p_search_ctx_id
2471             AND d.party_id = stage.party_id
2472             AND( (l_search_merged ='Y' )  
2473              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2474              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2475             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2476         END IF;
2477       END IF;
2478     ELSE
2479    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2480       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);
2481     END IF;
2482        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2483        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CPT'); 
2484        IF (l_check_dt > 0 ) THEN 
2485    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2486       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);
2487     END IF;
2488            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */'; 
2489        ELSIF (l_check > 0 ) THEN 
2490    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2491       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);
2492     END IF;
2493            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */'; 
2494        END IF; 
2495        IF l_search_merged = 'Y' THEN 
2496                l_status_sql := ' ' ;  
2497        ELSIF l_search_merged = 'I' THEN  
2498                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2499        ELSE 
2500                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2501        END IF; 
2502        IF p_person_api = 'Y' THEN
2503  		/*Performance fix for Bug:4589953*/ 
2504        IF (l_check > 0 ) THEN 
2505        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
2506        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2507        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
2508        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2509        ELSE
2510 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2511        END IF; 
2512        	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'||
2513                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2514                    ' WHERE contains( concat_col, :cont)>0  '||
2515                    ' AND (stage.org_contact_id is null '||
2516                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2517                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2521                    ' UNION ' ||
2518                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2519                    ' AND ('||p_restrict_sql||'))' ||
2520                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2522                    ' 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'||
2523                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2524                    ' WHERE contains( concat_col, :cont)>0  '||
2525                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2526                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2527                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2528                  ' AND (stage.org_contact_id in ' || 
2529                  ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r ' ||
2530                  ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' || 
2531                  ' where stage1.relationship_id = oc.party_relationship_id ' || 
2532                  ' and ('||p_restrict_sql1 || ') ) )' ||
2533                  ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2534        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2535                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2536        ELSE 
2537        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX1, TX6, TX5'||
2538                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2539                    ' WHERE contains( concat_col, :cont)>0'||
2540                  ' AND EXISTS ('||
2541                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2542                  ' WHERE p.party_id = stage.party_id ' || 
2543                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2544                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2545                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2546                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2547                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2548                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2549        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2550                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2551                     ,p_dup_party_id, p_dup_party_id;
2552        END IF; 
2553        ELSE 
2554        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX1, TX6, TX5'||
2555                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2556                    ' WHERE contains( concat_col, :cont)>0'||
2557                  ' AND EXISTS ('||
2558                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2559                  ' WHERE p.party_id = stage.party_id ' || 
2560                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2561                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2562                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2563                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2564                    ' AND ('||p_restrict_sql||')' ||
2565                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2566        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2567                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2568                     ,p_dup_party_id, p_dup_party_id;
2569        END IF; 
2570     END IF;
2571   END IF; 
2572  	    output_long_strings('----------------------------------------------------------');
2573        output_long_strings('Contact Points Contains String = '||p_contains_str);
2574 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2575   exception
2576     when others then
2577       if (instrb(SQLERRM,'DRG-51030')>0) then 
2578         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2579         FND_MSG_PUB.ADD;
2580         RAISE FND_API.G_EXC_ERROR;
2581       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2582         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2583         FND_MSG_PUB.ADD;
2584         RAISE FND_API.G_EXC_ERROR;
2585       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2586         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2587         FND_MSG_PUB.ADD;
2588         RAISE FND_API.G_EXC_ERROR;
2589       else 
2590         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2591     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2592     	 FND_MSG_PUB.ADD;
2593         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2594       end if;
2595   END;
2596 
2597 
2598   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
2599     l_sqlstr VARCHAR2(4000);
2600     l_search_merged VARCHAR2(1);
2601   BEGIN
2602     IF (p_search_merged is null) then 
2606     END IF; 
2603        l_search_merged := 'N';  
2604     ELSE 
2605        l_search_merged := p_search_merged; 
2607     IF p_restrict_sql IS NULL THEN
2608       INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
2609       SELECT p_search_ctx_id, PARTY_ID, decode(TX8,g_party_stage_rec.TX8||' ',100,90)
2610       FROM hz_staged_parties 
2611       WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
2612       AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  TX36))
2613       AND( (l_search_merged ='Y' ) 
2614            OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))  
2615            OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))  
2616       AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)
2617       AND rownum <= p_thresh;
2618     ELSE
2619       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 ';
2620       l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
2621       l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' =  TX36) ';
2622       IF l_search_merged = 'N' THEN
2623         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
2624       ELSIF l_search_merged = 'Y' THEN
2625         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
2626       END IF;
2627       l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
2628      l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
2629      l_sqlstr := l_sqlstr || ' AND ROWNUM <= :thresh ';
2630      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;
2631     END IF;
2632     x_num_matches := SQL%ROWCOUNT;
2633   END;
2634 
2635   FUNCTION get_new_score_rec (
2636     	 p_init_total_score NUMBER,
2637     	 p_init_party_score NUMBER,
2638     	 p_init_party_site_score NUMBER,
2639     	 p_init_contact_score NUMBER,
2640     	 p_init_contact_point_score NUMBER, 
2641     	 p_party_id NUMBER, 
2642     	 p_party_site_id NUMBER, 
2643     	 p_org_contact_id NUMBER, 
2644     	 p_contact_point_id NUMBER) 
2645      RETURN HZ_PARTY_SEARCH.score_rec IS
2646     l_score_rec HZ_PARTY_SEARCH.score_rec;
2647   BEGIN
2648    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2649       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);
2650       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);
2651     END IF;
2652     l_score_rec.TOTAL_SCORE := p_init_total_score;
2653     l_score_rec.PARTY_SCORE := p_init_party_score;
2654     l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;
2655     l_score_rec.CONTACT_SCORE := p_init_contact_score;
2656     l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;
2657     l_score_rec.PARTY_ID := p_party_id;
2658     l_score_rec.PARTY_SITE_ID := p_party_site_id;
2659     l_score_rec.ORG_CONTACT_ID := p_org_contact_id;
2660     l_score_rec.CONTACT_POINT_ID := p_contact_point_id;
2661     RETURN l_score_rec;
2662   END;
2663 
2664    /**********************************************************
2665    This procedure finds the set of parties that match the search
2666    criteria and returns a scored set of parties
2667 
2668    The steps in executing the search are as follows
2669     1. Initialization and error checks
2670     2. Setup of intermedia query strings for Acquisition query
2671     3. Execution of Acquisition query
2672     4. Execution of Secondary queries to score results
2673     5. Setup of data temporary table to return search results
2674    **********************************************************/
2675 
2676 PROCEDURE find_parties (
2677       p_rule_id               IN      NUMBER,
2678       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
2679       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
2680       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
2681       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
2682       p_restrict_sql          IN      VARCHAR2,
2683       p_match_type            IN      VARCHAR2,
2684       p_search_merged         IN      VARCHAR2,
2685       p_dup_party_id          IN      NUMBER,
2686       p_dup_set_id            IN      NUMBER,
2687       p_dup_batch_id          IN      NUMBER,
2688       p_ins_details           IN      VARCHAR2,
2689       x_search_ctx_id         OUT     NUMBER,
2690       x_num_matches           OUT     NUMBER
2691 ) IS
2692 
2693   -- Strings to hold the generated Intermedia query strings
2694   l_party_contains_str VARCHAR2(32000); 
2695   l_party_site_contains_str VARCHAR2(32000);
2696   l_contact_contains_str VARCHAR2(32000);
2697   l_contact_pt_contains_str VARCHAR2(32000);
2698   l_denorm_str VARCHAR2(32000);
2699   l_ps_denorm_str VARCHAR2(32000);
2700   l_ct_denorm_str VARCHAR2(32000);
2701   l_cpt_denorm_str VARCHAR2(32000);
2702 
2703   -- Other local variables
2704   l_match_str VARCHAR2(30); -- Match type (AND or OR)
2705   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
2706   -- For Score calculation
2707   l_max_score NUMBER;
2708   l_match_idx NUMBER;
2709   l_entered_max_score NUMBER;
2710   FIRST BOOLEAN;
2711   l_search_ctx_id NUMBER; -- Generated Search Context ID
2712 
2713   l_TX39 VARCHAR2(2000);
2714   l_TX32 VARCHAR2(2000);
2718   l_TX35 VARCHAR2(2000);
2715   l_TX33 VARCHAR2(2000);
2716   l_TX9 VARCHAR2(2000);
2717   l_TX22 VARCHAR2(2000);
2719   l_TX1 VARCHAR2(2000);
2720   l_TX3 VARCHAR2(2000);
2721   l_TX15 VARCHAR2(2000);
2722   l_TX4 VARCHAR2(2000);
2723   l_TX10 VARCHAR2(2000);
2724   l_TX11 VARCHAR2(2000);
2725   l_TX5 VARCHAR2(2000);
2726   l_TX40 VARCHAR2(2000);
2727   l_TX34 VARCHAR2(2000);
2728   l_TX14 VARCHAR2(2000);
2729   l_TX17 VARCHAR2(2000);
2730   l_TX6 VARCHAR2(2000);
2731   H_SCORES HZ_PARTY_SEARCH.score_list;
2732   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
2733   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
2734 
2735   l_score NUMBER;
2736   l_idx NUMBER;
2737   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
2738   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
2739   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
2740   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
2741   l_party_id NUMBER;
2742   l_ps_party_id NUMBER;
2743   l_ct_party_id NUMBER;
2744   l_cpt_party_id NUMBER;
2745   l_cpt_ps_id NUMBER;
2746   l_cpt_contact_id NUMBER;
2747   l_cpt_type VARCHAR2(100);
2748   l_party_site_id NUMBER;
2749   l_org_contact_id NUMBER;
2750   l_contact_pt_id NUMBER;
2751   l_ps_contact_id NUMBER;
2752   l_party_max_score NUMBER;
2753   l_ps_max_score NUMBER;
2754   l_contact_max_score NUMBER;
2755   l_cpt_max_score NUMBER;
2756   l_denorm_max_score NUMBER;
2757   l_non_denorm_max_score NUMBER;
2758 
2759   defpt NUMBER :=0;
2760   defps NUMBER :=0;
2761   defct NUMBER :=0;
2762   defcpt NUMBER :=0;
2763   l_index NUMBER;
2764   l_max_thresh NUMBER;
2765   l_tmp NUMBER;
2766   l_merge_flag VARCHAR2(1);
2767   l_num_eval NUMBER:=0;
2768 
2769   --Fix for bug 4417124 
2770   l_use_contact_addr_info BOOLEAN := TRUE;
2771   l_use_contact_cpt_info BOOLEAN  := TRUE;
2772   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
2773   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
2774 
2775   L_RETURN_IMM_EXC EXCEPTION;
2776 
2777   
2778   /********************* Find Parties private procedures *******/
2779   PROCEDURE push_eval IS
2780   BEGIN
2781    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2782       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);
2783       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);
2784     END IF;
2785    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2786       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);
2787     END IF;
2788     H_PARTY_ID.DELETE;
2789     H_PARTY_ID_LIST.DELETE;
2790     H_SCORES.DELETE;        
2791     g_mappings.DELETE;
2792     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
2793     call_order(5) := call_order(1);
2794     call_type(5) := 'AND';
2795     call_max_score(5) := call_max_score(1);
2796     call_type(2) := 'OR';
2797   END;
2798 
2799   /**  Private procedure to acquire and score at party level  ***/
2800   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
2801     l_party_id_idx NUMBER:=1;
2802     l_ctx_id NUMBER;
2803     l_precalc_score BOOLEAN := FALSE;
2804   BEGIN
2805    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2806       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);
2807       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);
2808     END IF;
2809     SAVEPOINT eval_start;
2810     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2811       l_ctx_id := l_search_ctx_id;
2812    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2813       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);
2814     END IF;
2815       FORALL I in 1..H_PARTY_ID.COUNT 
2816          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2817              l_search_ctx_id,H_PARTY_ID(I));
2818       H_PARTY_ID.DELETE;
2819       H_PARTY_ID_LIST.DELETE;
2820     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2821    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2822       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);
2823     END IF;
2824       l_ctx_id := l_search_ctx_id;
2825       FORALL I in 1..H_PARTY_ID.COUNT 
2826          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2827              l_search_ctx_id,H_PARTY_ID(I));
2828       l_party_id_idx := H_PARTY_ID.COUNT+1;
2829     ELSE
2830       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2831          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
2832    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2836    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2833       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);
2834     END IF;
2835         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
2837       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);
2838     END IF;
2839           IF (l_party_site_contains_str IS NULL AND
2840              l_contact_contains_str IS NULL AND
2841              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN
2842             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);
2843             RAISE L_RETURN_IMM_EXC;
2844           ELSE
2845             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);
2846           END IF;
2847         ELSE
2848           IF p_index>1 THEN
2849    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2850       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);
2851     END IF;
2852             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2853             FND_MSG_PUB.ADD;
2854             RAISE FND_API.G_EXC_ERROR;
2855           ELSE
2856             push_eval;
2857             RETURN;
2858           END IF;
2859         END IF;
2860       END IF;
2861       l_ctx_id := NULL;
2862       l_party_id_idx := H_PARTY_ID.COUNT+1;
2863     END IF;
2864    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2865       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);
2866     END IF;
2867     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
2868       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);
2869     END IF;
2870     LOOP 
2871       FETCH l_party_cur INTO
2872          l_party_id , l_TX32, l_TX33, l_TX34, l_TX35, l_TX40, l_TX39;
2873       EXIT WHEN l_party_cur%NOTFOUND;
2874       l_index := map_id(l_party_id);
2875       l_score := GET_PARTY_SCORE(l_TX32,l_TX33,l_TX34,l_TX35,l_TX40,l_TX39);
2876       IF NOT H_SCORES.EXISTS(l_index) THEN
2877         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
2878       ELSE
2879         H_SCORES(l_index).TOTAL_SCORE := 
2880                 H_SCORES(l_index).TOTAL_SCORE+l_score;
2881         H_SCORES(l_index).PARTY_SCORE := l_score;
2882       END IF;
2883       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2884         H_PARTY_ID_LIST(l_index) := 1;
2885         H_PARTY_ID(l_party_id_idx) := l_party_id;
2886         l_party_id_idx:= l_party_id_idx+1;
2887       END IF;
2888       IF (l_party_id_idx-1)>l_max_thresh THEN
2889         IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
2890           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
2891           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
2892           AND l_contact_pt_contains_str IS NULL THEN
2893             EXIT;
2894         END IF;
2895 	      CLOSE l_party_cur;
2896         IF p_index>1 THEN
2897    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2898       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);
2899     END IF;
2900           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2901           FND_MSG_PUB.ADD;
2902           RAISE FND_API.G_EXC_ERROR;
2903         ELSE
2904           push_eval;
2905           RETURN;
2906         END IF;
2907       END IF;
2908     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2909       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);
2910       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);
2911     END IF;
2912     END LOOP;
2913    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2914       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);
2915     END IF;
2916     CLOSE l_party_cur;
2917     ROLLBACK to eval_start;
2918   END;
2919 
2920   /**  Private procedure to acquire and score at party site level  ***/
2921   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
2922     l_party_id_idx NUMBER:=1;
2923     l_ctx_id NUMBER;
2924     h_ps_id HZ_PARTY_SEARCH.IDList;
2925     h_ps_party_id HZ_PARTY_SEARCH.IDList;
2926     h_ps_score HZ_PARTY_SEARCH.IDList;
2927     detcnt NUMBER := 1;
2928   BEGIN
2929    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2930       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);
2934       AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and
2931       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);
2932     END IF;
2933   IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,'D_PS')>0
2935       l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> 'Y' THEN
2936     l_party_id := H_SCORES.FIRST;
2937     WHILE l_party_id IS NOT NULL LOOP
2938       H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;
2939       l_party_id:=H_SCORES.NEXT(l_party_id);
2940     END LOOP;
2941     RETURN;
2942   END IF;
2943     SAVEPOINT eval_start;
2944     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2945    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2946       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);
2947     END IF;
2948       l_ctx_id := l_search_ctx_id;
2949       FORALL I in 1..H_PARTY_ID.COUNT 
2950          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2951              l_search_ctx_id,H_PARTY_ID(I));
2952       H_PARTY_ID.DELETE;
2953       H_PARTY_ID_LIST.DELETE;
2954     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2955    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2956       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);
2957     END IF;
2958       l_ctx_id := l_search_ctx_id;
2959       FORALL I in 1..H_PARTY_ID.COUNT 
2960          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2961              l_search_ctx_id,H_PARTY_ID(I));
2962       l_party_id_idx := H_PARTY_ID.COUNT+1;
2963     ELSE
2964       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2965          and check_estimate_hits('PARTY_SITES',p_party_site_contains_str)>l_max_thresh THEN
2966    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2967       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);
2968     END IF;
2969         IF p_index>1 THEN
2970    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2971       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);
2972     END IF;
2973           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2974           FND_MSG_PUB.ADD;
2975           RAISE FND_API.G_EXC_ERROR;
2976         ELSE
2977           push_eval;
2978           RETURN;
2979         END IF;
2980       END IF;
2981       l_party_id_idx := H_PARTY_ID.COUNT+1;
2982       l_ctx_id := NULL;
2983     END IF;
2984    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2985       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);
2986     END IF;
2987     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);
2988     LOOP 
2989       FETCH l_party_site_cur INTO
2990          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;
2991       EXIT WHEN l_party_site_cur%NOTFOUND;
2992       --Fix for bug 4417124 
2993       IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN
2994         l_index := map_id(l_ps_party_id);
2995         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);
2996         IF NOT H_SCORES.EXISTS(l_index) THEN
2997           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);
2998         ELSE
2999           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3000             H_SCORES(l_index).TOTAL_SCORE := 
3001                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3002             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3003           END IF;
3004         END IF;
3005         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3006           H_PARTY_ID_LIST(l_index) := 1;
3007           H_PARTY_ID(l_party_id_idx) := l_ps_party_id;
3008           l_party_id_idx:= l_party_id_idx+1;
3009         END IF;
3010         IF p_ins_details = 'Y' THEN
3011           h_ps_id(detcnt) := l_party_site_id;
3012           h_ps_party_id(detcnt) := l_ps_party_id;
3013           IF (p_emax_score > 0) THEN 
3014               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
3015           ELSE 
3016               h_ps_score(detcnt) := 0; 
3017           END IF; 
3018           detcnt := detcnt +1;
3019         END IF;
3020     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3021       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);
3022       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);
3026     END LOOP;
3023       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);
3024     END IF;
3025       END IF;
3027    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3028       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);
3029     END IF;
3030     CLOSE l_party_site_cur;
3031     ROLLBACK to eval_start;
3032     IF p_ins_details = 'Y' THEN
3033    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3034       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);
3035     END IF;
3036       FORALL I in 1..h_ps_id.COUNT 
3037         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
3038           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
3039     END IF;
3040   END;
3041 
3042   /**  Private procedure to acquire and score at contact point level  ***/
3043   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
3044     l_party_id_idx NUMBER:=1;
3045     l_ctx_id NUMBER;
3046     h_ct_id HZ_PARTY_SEARCH.IDList;
3047     h_ct_party_id HZ_PARTY_SEARCH.IDList;
3048     h_ct_score HZ_PARTY_SEARCH.IDList;
3049     detcnt NUMBER := 1;
3050   BEGIN
3051    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3052       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);
3053       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);
3054     END IF;
3055     SAVEPOINT eval_start;
3056     IF l_match_str = ' AND ' AND p_call_type='AND' THEN
3057    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3058       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);
3059     END IF;
3060       l_ctx_id := l_search_ctx_id;
3061       FORALL I in 1..H_PARTY_ID.COUNT 
3062          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3063              l_search_ctx_id,H_PARTY_ID(I));
3064       H_PARTY_ID.DELETE;
3065       H_PARTY_ID_LIST.DELETE;
3066     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3067    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3068       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);
3069     END IF;
3070       l_ctx_id := l_search_ctx_id;
3071       FORALL I in 1..H_PARTY_ID.COUNT 
3072          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3073              l_search_ctx_id,H_PARTY_ID(I));
3074       l_party_id_idx := H_PARTY_ID.COUNT+1;
3075     ELSE
3076       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3077          and check_estimate_hits('CONTACTS',p_contact_contains_str)>l_max_thresh THEN
3078    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3079       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);
3080     END IF;
3081         IF p_index>1 THEN
3082    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3083       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);
3084     END IF;
3085           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3086           FND_MSG_PUB.ADD;
3087           RAISE FND_API.G_EXC_ERROR;
3088         ELSE
3089           push_eval;
3090           RETURN;
3091         END IF;
3092       END IF;
3093       l_ctx_id := NULL;
3094       l_party_id_idx := H_PARTY_ID.COUNT+1;
3095     END IF;
3096    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3097       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);
3098     END IF;
3099     open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id,  p_search_merged, l_contact_cur);
3100     LOOP 
3101       FETCH l_contact_cur INTO
3102          l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
3103       EXIT WHEN l_contact_cur%NOTFOUND;
3104       l_index := map_id(l_ct_party_id);
3105       l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
3106       IF NOT H_SCORES.EXISTS(l_index) THEN
3107         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);
3108       ELSE
3109         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
3110           H_SCORES(l_index).TOTAL_SCORE := 
3111                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
3112           H_SCORES(l_index).CONTACT_SCORE := l_score;
3113         END IF;
3117         H_PARTY_ID(l_party_id_idx) := l_ct_party_id;
3114       END IF;
3115       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3116         H_PARTY_ID_LIST(l_index) := 1;
3118         l_party_id_idx:= l_party_id_idx+1;
3119       END IF;
3120       IF p_ins_details = 'Y' THEN
3121         h_ct_id(detcnt) := l_org_contact_id;
3122         h_ct_party_id(detcnt) := l_ct_party_id;
3123         IF (p_emax_score > 0) THEN 
3124             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
3125         ELSE 
3126             h_ct_score(detcnt) := 0; 
3127         END IF; 
3128         detcnt := detcnt +1;
3129       END IF;
3130     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3131       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);
3132       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);
3133       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);
3134     END IF;
3135     END LOOP;
3136    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3137       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);
3138     END IF;
3139     CLOSE l_contact_cur;
3140     ROLLBACK to eval_start;
3141     IF p_ins_details = 'Y' THEN
3142    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3143       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);
3144     END IF;
3145       FORALL I in 1..h_ct_id.COUNT 
3146         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
3147           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
3148     END IF;
3149   END;
3150 
3151   /**  Private procedure to acquire and score at contact point level  ***/
3152   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
3153     l_party_id_idx NUMBER:=1;
3154     l_ctx_id NUMBER;
3155     h_cpt_id HZ_PARTY_SEARCH.IDList;
3156     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
3157     h_cpt_score HZ_PARTY_SEARCH.IDList;
3158     detcnt NUMBER := 1;
3159     l_cpt_flag VARCHAR2(1) := 'N';
3160     is_a_match VARCHAR2(1) := 'Y';
3161   BEGIN
3162    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3163       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3164       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);
3165     END IF;
3166     SAVEPOINT eval_start;
3167     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3168    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3169       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);
3170     END IF;
3171       l_ctx_id := l_search_ctx_id;
3172       FORALL I in 1..H_PARTY_ID.COUNT 
3173          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3174              l_search_ctx_id,H_PARTY_ID(I));
3175       H_PARTY_ID.DELETE;
3176       H_PARTY_ID_LIST.DELETE;
3177     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3178    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3179       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);
3180     END IF;
3181       l_ctx_id := l_search_ctx_id;
3182       FORALL I in 1..H_PARTY_ID.COUNT 
3183          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3184              l_search_ctx_id,H_PARTY_ID(I));
3185       l_party_id_idx := H_PARTY_ID.COUNT+1;
3186     ELSE
3187       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3188          and check_estimate_hits('CONTACT_POINTS',p_contact_pt_contains_str)>l_max_thresh THEN
3189    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3190       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);
3191     END IF;
3192         IF p_index>1 THEN
3193    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3194       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);
3195     END IF;
3196           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3197           FND_MSG_PUB.ADD;
3198           RAISE FND_API.G_EXC_ERROR;
3199         ELSE
3200           push_eval;
3201           RETURN;
3202         END IF;
3203       END IF;
3204       l_ctx_id := NULL;
3205       l_party_id_idx := H_PARTY_ID.COUNT+1;
3209     END IF;
3206     END IF;
3207    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3208       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);
3210     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);
3211     LOOP 
3212       FETCH l_contact_pt_cur INTO
3213          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;
3214       EXIT WHEN l_contact_pt_cur%NOTFOUND;
3215    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3216       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);
3217     END IF;
3218    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3219       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);
3220     END IF;
3221    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3222       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);
3223     END IF;
3224       --Fix for bug 4417124 
3225       IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN
3226         l_index := map_id(l_cpt_party_id);
3227         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
3228         IF NOT H_SCORES.EXISTS(l_index) THEN
3229           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);
3230           H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3231    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3232       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);
3233     END IF;
3234    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3235       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);
3236     END IF;
3237         ELSE
3238           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
3239             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
3240               H_SCORES(l_index).TOTAL_SCORE :=
3241               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;
3242               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;
3243               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3244    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3245       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);
3246     END IF;
3247    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3248       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);
3249     END IF;
3250    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3251       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);
3252     END IF;
3253    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3254       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);
3255     END IF;
3256             END IF;
3257           ELSE
3258    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3259       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);
3260     END IF;
3261             H_SCORES(l_index).TOTAL_SCORE :=
3262             		H_SCORES(l_index).TOTAL_SCORE+l_score;
3263             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3264             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3265    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3266       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);
3267     END IF;
3268    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3269       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);
3270     END IF;
3271    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3272       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);
3276    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3273     END IF;
3274           END IF;
3275         END IF;
3277       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);
3278     END IF;
3279    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3280       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);
3281     END IF;
3282         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3283           -- If rule is match all 
3284           IF l_match_str = ' AND ' THEN
3285    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3286       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);
3287     END IF;
3288             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3289               is_a_match := 'Y';
3290    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3291       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);
3292     END IF;
3293             ELSE
3294               is_a_match := 'N';
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             END IF;
3299           -- Else it is construed to be a match anyway
3300           ELSE
3301             is_a_match := 'Y';
3302    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3303       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);
3304     END IF;
3305           END IF;
3306         IF (is_a_match='Y') then
3307           H_PARTY_ID_LIST(l_index) := 1;
3308           H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;
3309           l_party_id_idx:= l_party_id_idx+1;
3310       end if;
3311         END IF;
3312         IF p_ins_details = 'Y' THEN
3313           IF l_match_str = ' AND ' THEN
3314    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3315       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);
3316     END IF;
3317             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3318               is_a_match := 'Y';
3319    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3320       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);
3321     END IF;
3322             ELSE
3323               is_a_match := 'N';
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             END IF;
3328           ELSE
3329             is_a_match := 'Y';
3330    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3331       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);
3332     END IF;
3333           END IF;
3334           IF (is_a_match='Y') THEN
3335           FOR I IN 1..h_cpt_id.COUNT LOOP
3336           IF h_cpt_id(I)=l_contact_pt_id THEN
3337           	 l_cpt_flag := 'Y';
3338           END IF;
3339           END LOOP;
3340           IF l_cpt_flag = 'Y' THEN
3341           	 NULL;
3342           ELSE
3343          	 h_cpt_id(detcnt) := l_contact_pt_id;
3344           	 h_cpt_party_id(detcnt) := l_cpt_party_id;
3345           	 IF (p_emax_score > 0) THEN 
3346               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
3347             ELSE 
3348               h_cpt_score(detcnt) := 0; 
3349           	 END IF; 
3350             detcnt := detcnt +1;
3351           END IF;
3352       end if;
3353         END IF;
3354     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3355       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);
3356       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);
3357       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);
3358     END IF;
3359       END IF;
3360     END LOOP;
3361    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3362       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);
3363     END IF;
3364     CLOSE l_contact_pt_cur;
3365     ROLLBACK to eval_start;
3366     IF p_ins_details = 'Y' THEN
3370       FORALL I in 1..h_cpt_id.COUNT 
3367    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3368       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);
3369     END IF;
3371         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
3372           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
3373     END IF;
3374   END eval_cpt_level;
3375 
3376   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
3377   PROCEDURE do_eval (p_index NUMBER) IS
3378     l_ctx_id NUMBER;
3379     l_threshold NUMBER;
3380     other_acq_criteria_exists BOOLEAN; 
3381     acq_cnt NUMBER; 
3382   BEGIN
3383    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3384       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);
3385       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);
3386     END IF;
3387     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
3388      l_threshold :=  round(( l_entered_max_score / 700) * 77); 
3389     other_acq_criteria_exists := TRUE ;
3390     --check if acquisition criteria exists for any other entity
3391     IF l_party_contains_str IS NOT NULL THEN 
3392     	acq_cnt := 1; 
3393     END IF; 
3394     IF l_party_site_contains_str IS NOT NULL THEN 
3395     	acq_cnt := acq_cnt+1; 
3396     END IF; 
3397     IF l_contact_contains_str IS NOT NULL THEN 
3398     	acq_cnt := acq_cnt+1; 
3399     END IF;
3400     IF l_contact_pt_contains_str IS NOT NULL THEN 
3401     	acq_cnt := acq_cnt+1; 
3402     END IF;  
3403     IF acq_cnt>1 THEN 
3404     	other_acq_criteria_exists := TRUE; 
3405     ELSE
3406     	other_acq_criteria_exists := FALSE; 
3407     END IF;  
3408       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);
3409       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);
3410       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);
3411     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
3412     	IF ( call_max_score(p_index) < l_threshold) THEN 
3413    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3414       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);
3415     END IF;
3416 	     	RETURN;	
3417     	ELSE 
3418    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3419       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);
3420     END IF;
3421 	     	FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED'); 
3422 	     	FND_MSG_PUB.ADD; 
3423 	     	RAISE FND_API.G_EXC_ERROR; 
3424     	END IF; 
3425     ELSE
3426    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3427       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);
3428     END IF;
3429       FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3430       FND_MSG_PUB.ADD;
3431       RAISE FND_API.G_EXC_ERROR;
3432      END IF; 
3433     END IF;
3434     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
3435       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
3436     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
3437       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3438     ELSIF call_order(p_index) = 'CONTACT' AND l_contact_contains_str IS NOT NULL THEN
3439       eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3440     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
3441       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3442     END IF;
3443   END;
3444   /************ End of find_parties private procedures **********/ 
3445 
3446   BEGIN
3447 
3448    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3449       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);
3450     END IF;
3451    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3452       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);
3453     END IF;
3454     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3455       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);
3459       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);
3456       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);
3457       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);
3458       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);
3460       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);
3461     END IF;
3462     -- ************************************
3463     -- STEP 1. Initialization and error checks
3464 
3465     l_match_str := ' AND ';
3466     IF p_match_type = 'AND' THEN
3467       l_match_str := ' AND ';
3468     ELSIF p_match_type = 'OR' THEN
3469       l_match_str := ' OR ';
3470     END IF;
3471     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);
3472     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
3473 
3474 
3475     --Fix for bug 4417124 
3476 
3477     SELECT use_contact_addr_flag, use_contact_cpt_flag 
3478     INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
3479     FROM hz_match_rules_b 
3480     WHERE match_rule_id = 33; 
3481 
3482     IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
3483       l_use_contact_addr_info := FALSE; 
3484     END IF; 
3485 
3486     IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
3487       l_use_contact_cpt_info := FALSE; 
3488     END IF; 
3489 
3490    --End fix for bug 4417124
3491 
3492     IF p_dup_batch_id IS NOT NULL THEN
3493       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH_BATCH'),10000);
3494     ELSE
3495       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
3496     END IF;
3497     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
3498       g_score_until_thresh := true;
3499    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3500       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);
3501     END IF;
3502     ELSE
3503       g_score_until_thresh := false;
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 false',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3506     END IF;
3507     END IF;
3508    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3509       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);
3510     END IF;
3511     -- ************************************************************
3512     -- STEP 2. Setup of intermedia query strings for Acquisition query
3513     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
3514     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
3515     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
3516    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3517       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);
3518     END IF;
3519     l_denorm_max_score:=0;
3520     l_non_denorm_max_score:=0;
3521     IF l_ps_denorm_str IS NOT NULL THEN
3522       l_denorm_max_score := l_denorm_max_score+l_ps_max_score;
3523       l_denorm_str := l_ps_denorm_str;
3524     ELSE
3525       l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;
3526     END IF;
3527     IF l_ct_denorm_str IS NOT NULL THEN
3528       l_denorm_max_score := l_denorm_max_score+l_contact_max_score;
3529       IF l_denorm_str IS NOT NULL THEN
3530         l_denorm_str := l_denorm_str || ' OR ' ||l_ct_denorm_str;
3531       ELSE
3532         l_denorm_str := l_ct_denorm_str;
3533       END IF;
3534     ELSE
3535       l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;
3536     END IF;
3537     IF l_cpt_denorm_str IS NOT NULL THEN
3538       l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;
3539       IF l_denorm_str IS NOT NULL THEN
3540         l_denorm_str := l_denorm_str || ' OR ' ||l_cpt_denorm_str;
3541       ELSE
3542         l_denorm_str := l_cpt_denorm_str;
3543       END IF;
3544     ELSE
3545       l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;
3546     END IF;
3547     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));
3548     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3549 
3550     -- Setup Search Context ID
3551     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3552     x_search_ctx_id := l_search_ctx_id;
3553 
3554    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3558       defpt := 1;
3555       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);
3556     END IF;
3557     IF l_party_contains_str IS NULL THEN
3559     END IF;
3560     IF l_party_site_contains_str IS NULL THEN
3561       defps := 1;
3562     END IF;
3563     IF l_contact_contains_str IS NULL THEN
3564       defct := 1;
3565     END IF;
3566     IF l_contact_pt_contains_str IS NULL THEN
3567       defcpt := 1;
3568     END IF;
3569 
3570     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3571    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3572       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);
3573     END IF;
3574       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);
3575       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);
3576       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);
3577       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);
3578       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);
3579       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);
3580     END IF;
3581     FOR I in 1..5 LOOP
3582       do_eval(I);
3583     END LOOP;
3584     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3585       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);
3586     END IF;
3587     x_num_matches := 0;
3588     l_num_eval := 0;
3589     IF l_match_str = ' OR ' THEN
3590       l_party_id := H_SCORES.FIRST;
3591     ELSE
3592       l_party_id := H_PARTY_ID_LIST.FIRST;
3593     END IF;
3594     WHILE l_party_id IS NOT NULL LOOP
3595       l_num_eval:= l_num_eval+1;
3596     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3597    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3598       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);
3599     END IF;
3600       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);
3601       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);
3602     END IF;
3603    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3604       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);
3605     END IF;
3606       IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(77/700) THEN
3607             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
3608             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));
3609             x_num_matches := x_num_matches+1;
3610    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3611       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);
3612     END IF;
3613       END IF;
3614       IF l_match_str = ' OR ' THEN
3615         l_party_id:=H_SCORES.NEXT(l_party_id);
3616       ELSE
3617         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3618       END IF;
3619     END LOOP;
3620     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3621    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3622       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);
3623     END IF;
3624    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3625       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);
3626     END IF;
3627 EXCEPTION
3628   WHEN L_RETURN_IMM_EXC THEN
3629     RETURN;
3630   WHEN FND_API.G_EXC_ERROR THEN
3631     RAISE FND_API.G_EXC_ERROR;
3632   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3633     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3634   WHEN OTHERS THEN
3635     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3636     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_parties');
3637     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3638     FND_MSG_PUB.ADD;
3639     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3640 END find_parties;
3644       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
3641 
3642 PROCEDURE find_persons (
3643       p_rule_id               IN      NUMBER,
3645       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
3646       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
3647       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
3648       p_restrict_sql          IN      VARCHAR2,
3649       p_match_type            IN      VARCHAR2,
3650       p_search_merged         IN      VARCHAR2,
3651       p_dup_party_id          IN      NUMBER,
3652       p_dup_set_id            IN      NUMBER,
3653       p_dup_batch_id          IN      NUMBER,
3654       p_ins_details           IN      VARCHAR2,
3655       x_search_ctx_id         OUT     NUMBER,
3656       x_num_matches           OUT     NUMBER
3657 ) IS
3658 
3659   -- Strings to hold the generated Intermedia query strings
3660   l_party_contains_str VARCHAR2(32000); 
3661   l_party_site_contains_str VARCHAR2(32000);
3662   l_contact_contains_str VARCHAR2(32000);
3663   l_contact_pt_contains_str VARCHAR2(32000);
3664   l_denorm_str VARCHAR2(32000);
3665   l_ps_denorm_str VARCHAR2(32000);
3666   l_ct_denorm_str VARCHAR2(32000);
3667   l_cpt_denorm_str VARCHAR2(32000);
3668 
3669   -- Other local variables
3670   l_match_str VARCHAR2(30); -- Match type (AND or OR)
3671   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
3672   -- For Score calculation
3673   l_max_score NUMBER;
3674   l_match_idx NUMBER;
3675   l_entered_max_score NUMBER;
3676   FIRST BOOLEAN;
3677   l_search_ctx_id NUMBER; -- Generated Search Context ID
3678 
3679   l_TX39 VARCHAR2(2000);
3680   l_TX32 VARCHAR2(2000);
3681   l_TX33 VARCHAR2(2000);
3682   l_TX9 VARCHAR2(2000);
3683   l_TX22 VARCHAR2(2000);
3684   l_TX35 VARCHAR2(2000);
3685   l_TX1 VARCHAR2(2000);
3686   l_TX3 VARCHAR2(2000);
3687   l_TX15 VARCHAR2(2000);
3688   l_TX4 VARCHAR2(2000);
3689   l_TX10 VARCHAR2(2000);
3690   l_TX11 VARCHAR2(2000);
3691   l_TX5 VARCHAR2(2000);
3692   l_TX40 VARCHAR2(2000);
3693   l_TX34 VARCHAR2(2000);
3694   l_TX14 VARCHAR2(2000);
3695   l_TX17 VARCHAR2(2000);
3696   l_TX6 VARCHAR2(2000);
3697   H_SCORES HZ_PARTY_SEARCH.score_list;
3698   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
3699   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
3700 
3701   l_score NUMBER;
3702   l_idx NUMBER;
3703   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
3704   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
3705   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
3706   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
3707   l_party_id NUMBER;
3708   l_ps_party_id NUMBER;
3709   l_ct_party_id NUMBER;
3710   l_cpt_party_id NUMBER;
3711   l_cpt_ps_id NUMBER;
3712   l_cpt_contact_id NUMBER;
3713   l_cpt_type VARCHAR2(100);
3714   l_party_site_id NUMBER;
3715   l_org_contact_id NUMBER;
3716   l_contact_pt_id NUMBER;
3717   l_cpt_level VARCHAR2(100);
3718   l_ps_contact_id NUMBER;
3719   l_party_max_score NUMBER;
3720   l_ps_max_score NUMBER;
3721   l_contact_max_score NUMBER;
3722   l_cpt_max_score NUMBER;
3723   l_denorm_max_score NUMBER;
3724   l_non_denorm_max_score NUMBER;
3725 
3726   defpt NUMBER :=0;
3727   defps NUMBER :=0;
3728   defct NUMBER :=0;
3729   defcpt NUMBER :=0;
3730   l_index NUMBER;
3731   l_max_thresh NUMBER;
3732   l_tmp NUMBER;
3733   l_merge_flag VARCHAR2(1);
3734   l_num_eval NUMBER:=0;
3735 
3736   L_RETURN_IMM_EXC Exception;
3737 
3738   
3739   /********************* Find Parties private procedures *******/
3740   PROCEDURE set_person_party_type IS
3741   BEGIN
3742     g_party_stage_rec.TX36:= 
3743         HZ_TRANS_PKG.EXACT(
3744              'PERSON'
3745              ,null,'PARTY_TYPE'
3746              ,'PARTY');
3747   END;
3748     
3749   PROCEDURE unset_person_party_type IS
3750   BEGIN
3751     g_party_stage_rec.TX36 := '';
3752   END;
3753   
3754   FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) 
3755   RETURN NUMBER IS
3756     l_party_type VARCHAR2(255);
3757     l_person_id NUMBER(15);
3758   BEGIN
3759     SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;
3760     IF l_party_type = 'PERSON' THEN
3761       RETURN p_party_id;
3762     ELSIF p_contact_id IS NULL THEN
3763       RETURN NULL;
3764     ELSE
3765       BEGIN 
3766         SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p
3767         WHERE oc.org_contact_id = p_contact_id
3768         AND r.relationship_id = oc.party_relationship_id 
3769         AND r.object_id = p_party_id
3770         AND p.party_id = r.subject_id 
3771         AND p.party_type = 'PERSON'
3772         AND ROWNUM=1;
3773         
3774         RETURN l_person_id;
3775       EXCEPTION
3776         WHEN NO_DATA_FOUND THEN
3777           RETURN NULL;
3778       END;      
3779     END IF;
3780   END;  
3781 
3782   PROCEDURE push_eval IS
3783   BEGIN
3784     H_PARTY_ID.DELETE;
3785     H_PARTY_ID_LIST.DELETE;
3786     H_SCORES.DELETE;        
3787     g_mappings.DELETE;
3788     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
3789     call_order(5) := call_order(1);
3790     call_type(5) := 'AND';
3791     call_max_score(5) := call_max_score(1);
3792     call_type(2) := 'OR';
3793   END;
3794 
3795   /**  Private procedure to acquire and score at party level  ***/
3799   BEGIN
3796   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
3797     l_party_id_idx NUMBER:=1;
3798     l_ctx_id NUMBER;
3800     SAVEPOINT eval_start;
3801     set_person_party_type;
3802     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3803       l_ctx_id := l_search_ctx_id;
3804       FORALL I in 1..H_PARTY_ID.COUNT 
3805          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3806              l_search_ctx_id,H_PARTY_ID(I));
3807       H_PARTY_ID.DELETE;
3808       H_PARTY_ID_LIST.DELETE;
3809     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3810       l_ctx_id := l_search_ctx_id;
3811       FORALL I in 1..H_PARTY_ID.COUNT 
3812          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3813              l_search_ctx_id,H_PARTY_ID(I));
3814       l_party_id_idx := H_PARTY_ID.COUNT+1;
3815     ELSE
3816       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3817          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
3818    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3819       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);
3820     END IF;
3821         IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' THEN
3822    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3823       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);
3824     END IF;
3825           IF (l_party_site_contains_str IS NULL AND
3826              l_contact_contains_str IS NULL AND
3827              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN
3828             return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);
3829             RAISE L_RETURN_IMM_EXC;
3830           ELSE
3831             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);
3832           END IF;
3833         ELSE
3834           IF p_index>1 THEN
3835    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3836       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);
3837     END IF;
3838             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3839             FND_MSG_PUB.ADD;
3840             RAISE FND_API.G_EXC_ERROR;
3841           ELSE
3842             push_eval;
3843             RETURN;
3844           END IF;
3845         END IF;
3846       END IF;
3847       l_ctx_id := NULL;
3848       l_party_id_idx := H_PARTY_ID.COUNT+1;
3849     END IF;
3850     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
3851       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);
3852     END IF;
3853     LOOP 
3854       FETCH l_party_cur INTO
3855          l_party_id , l_TX32, l_TX33, l_TX34, l_TX35, l_TX40, l_TX39;
3856       EXIT WHEN l_party_cur%NOTFOUND;
3857       l_index := map_id(l_party_id);
3858       l_score := GET_PARTY_SCORE(l_TX32,l_TX33,l_TX34,l_TX35,l_TX40,l_TX39);
3859       IF NOT H_SCORES.EXISTS(l_index) THEN
3860         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
3861       ELSE
3862         H_SCORES(l_index).TOTAL_SCORE := 
3863                 H_SCORES(l_index).TOTAL_SCORE+l_score;
3864         H_SCORES(l_index).PARTY_SCORE := l_score;
3865       END IF;
3866       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3867         H_PARTY_ID_LIST(l_index) := 1;
3868         H_PARTY_ID(l_party_id_idx) := l_party_id;
3869         l_party_id_idx:= l_party_id_idx+1;
3870       END IF;
3871       IF (l_party_id_idx-1)>l_max_thresh THEN
3872          IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
3873           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
3874           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
3875           AND l_contact_pt_contains_str IS NULL THEN
3876           H_PARTY_ID.DELETE(l_party_id_idx-1);
3877           H_PARTY_ID_LIST.DELETE(l_index);
3878           H_SCORES.DELETE(l_index);
3879           EXIT;
3880         END IF;
3881         CLOSE l_party_cur;
3882         IF p_index>1 THEN
3883    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3884       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);
3885     END IF;
3886           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3887           FND_MSG_PUB.ADD;
3888           RAISE FND_API.G_EXC_ERROR;
3889         ELSE
3890           push_eval;
3891           RETURN;
3892         END IF;
3893       END IF;
3894     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3895       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);
3896       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);
3897       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);
3901     ROLLBACK to eval_start;
3898     END IF;
3899     END LOOP;
3900     CLOSE l_party_cur;
3902   END;
3903   PROCEDURE open_person_contact_cursor(
3904             p_contains_str  VARCHAR2, 
3905             p_search_ctx_id  NUMBER, 
3906             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
3907   BEGIN
3908     OPEN x_cursor FOR 
3909       SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID, TX6, TX5
3910       FROM HZ_STAGED_CONTACTS stage
3911       WHERE contains( concat_col, p_contains_str)>0
3912       AND ORG_CONTACT_ID in (
3913             SELECT  /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ 
3914             org_contact_id
3915             from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc
3916             where d.party_id = r.subject_id
3917             and oc.party_relationship_id = r.relationship_id
3918             and d.search_context_id = p_search_ctx_id);   
3919   exception
3920     when others then
3921       if (instrb(SQLERRM,'DRG-51030')>0) then 
3922         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
3923         FND_MSG_PUB.ADD;
3924         RAISE FND_API.G_EXC_ERROR;
3925       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
3926         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
3927         FND_MSG_PUB.ADD;
3928         RAISE FND_API.G_EXC_ERROR;
3929       else 
3930         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3931       end if;
3932   END;
3933 
3934   /**  Private procedure to acquire and score at party site level  ***/
3935   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
3936     l_party_id_idx NUMBER:=1;
3937     l_ctx_id NUMBER;
3938     h_ps_id HZ_PARTY_SEARCH.IDList;
3939     h_ps_party_id HZ_PARTY_SEARCH.IDList;
3940     h_ps_score HZ_PARTY_SEARCH.IDList;
3941     detcnt NUMBER := 1;
3942     l_person_id NUMBER;
3943   BEGIN
3944     SAVEPOINT eval_start;
3945     unset_person_party_type;
3946     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3947       l_ctx_id := l_search_ctx_id;
3948       FORALL I in 1..H_PARTY_ID.COUNT 
3949          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3950              l_search_ctx_id,H_PARTY_ID(I));
3951       H_PARTY_ID.DELETE;
3952       H_PARTY_ID_LIST.DELETE;
3953     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3954       l_ctx_id := l_search_ctx_id;
3955       FORALL I in 1..H_PARTY_ID.COUNT 
3956          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3957              l_search_ctx_id,H_PARTY_ID(I));
3958       l_party_id_idx := H_PARTY_ID.COUNT+1;
3959     ELSE
3960       l_party_id_idx := H_PARTY_ID.COUNT+1;
3961       l_ctx_id := NULL;
3962     END IF;
3963     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);
3964     LOOP 
3965       FETCH l_party_site_cur INTO
3966          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;
3967       EXIT WHEN l_party_site_cur%NOTFOUND;
3968       IF l_ctx_id IS NULL THEN
3969         l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);
3970       ELSE
3971         l_person_id := l_ps_party_id;
3972       END IF;
3973       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3974         l_index := map_id(l_person_id);
3975         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);
3976         IF NOT H_SCORES.EXISTS(l_index) THEN
3977           IF l_ctx_id IS NULL THEN
3978             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);
3979           END IF;
3980         ELSE
3981           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3982             H_SCORES(l_index).TOTAL_SCORE := 
3983                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3984             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3985           END IF;
3986         END IF;
3987         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3988           H_PARTY_ID_LIST(l_index) := 1;
3989           H_PARTY_ID(l_party_id_idx) := l_person_id;
3990           l_party_id_idx:= l_party_id_idx+1;
3991         END IF;
3992         IF (l_party_id_idx-1)>l_max_thresh THEN
3993           CLOSE l_party_site_cur;
3994           IF p_index>1 THEN
3995    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3996       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);
3997     END IF;
3998             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3999             FND_MSG_PUB.ADD;
4000             RAISE FND_API.G_EXC_ERROR;
4001           ELSE
4002             push_eval;
4003             RETURN;
4004           END IF;
4005         END IF;
4006         IF p_ins_details = 'Y' THEN
4007           h_ps_id(detcnt) := l_party_site_id;
4008           h_ps_party_id(detcnt) := l_person_id;
4009           IF (p_emax_score > 0) THEN 
4010               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
4011           ELSE 
4012               h_ps_score(detcnt) := 0; 
4013           END IF; 
4014           detcnt := detcnt +1;
4015         END IF;
4016     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4020       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);
4017       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);
4018       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);
4019       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);
4021     END IF;
4022       END IF;
4023     END LOOP;
4024     CLOSE l_party_site_cur;
4025     ROLLBACK to eval_start;
4026     IF p_ins_details = 'Y' THEN
4027       FORALL I in 1..h_ps_id.COUNT 
4028         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
4029           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
4030     END IF;
4031   END;
4032 
4033   /**  Private procedure to acquire and score at party site level  ***/
4034   PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
4035     l_party_id_idx NUMBER:=1;
4036     l_ctx_id NUMBER;
4037     h_ct_id HZ_PARTY_SEARCH.IDList;
4038     h_ct_party_id HZ_PARTY_SEARCH.IDList;
4039     h_ct_score HZ_PARTY_SEARCH.IDList;
4040     detcnt NUMBER := 1;
4041     l_person_id NUMBER;
4042   BEGIN
4043     SAVEPOINT eval_start;
4044     l_ctx_id := l_search_ctx_id;
4045     unset_person_party_type;
4046     FORALL I in 1..H_PARTY_ID.COUNT 
4047          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4048              l_search_ctx_id,H_PARTY_ID(I));
4049       l_party_id_idx := H_PARTY_ID.COUNT+1;
4050     open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);
4051     LOOP 
4052       FETCH l_contact_cur INTO
4053          l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
4054       EXIT WHEN l_contact_cur%NOTFOUND;
4055       l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);
4056       l_index := map_id(l_person_id);
4057       IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4058         l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
4059         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
4060           H_SCORES(l_index).TOTAL_SCORE := 
4061                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
4062           H_SCORES(l_index).CONTACT_SCORE := l_score;
4063         END IF;
4064       END IF;
4065       IF p_ins_details = 'Y' THEN
4066         h_ct_id(detcnt) := l_org_contact_id;
4067         h_ct_party_id(detcnt) := l_person_id;
4068         IF (p_emax_score > 0) THEN 
4069             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
4070         ELSE 
4071             h_ct_score(detcnt) := 0; 
4072         END IF; 
4073         detcnt := detcnt +1;
4074       END IF;
4075     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4076       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);
4077       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);
4078       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);
4079       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);
4080     END IF;
4081     END LOOP;
4082     CLOSE l_contact_cur;
4083     ROLLBACK to eval_start;
4084     IF p_ins_details = 'Y' THEN
4085       FORALL I in 1..h_ct_id.COUNT 
4086         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
4087           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
4088     END IF;
4089   END;
4090 
4091   /**  Private procedure to acquire and score at contact point level  ***/
4092   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
4093     l_party_id_idx NUMBER:=1;
4094     l_ctx_id NUMBER;
4095     h_cpt_id HZ_PARTY_SEARCH.IDList;
4096     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
4097     h_cpt_score HZ_PARTY_SEARCH.IDList;
4098     detcnt NUMBER := 1;
4099     l_person_id NUMBER;
4100     is_a_match VARCHAR2(1) := 'Y';
4101     l_cpt_flag VARCHAR2(1) := 'N';
4102   BEGIN
4103    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4104       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);
4105     END IF;
4106    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4107       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);
4108     END IF;
4109     SAVEPOINT eval_start;
4110     unset_person_party_type;
4111     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
4112       l_ctx_id := l_search_ctx_id;
4113       FORALL I in 1..H_PARTY_ID.COUNT 
4114          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4115              l_search_ctx_id,H_PARTY_ID(I));
4116       H_PARTY_ID.DELETE;
4117       H_PARTY_ID_LIST.DELETE;
4121     END IF;
4118     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
4119    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4120       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);
4122       l_ctx_id := l_search_ctx_id;
4123       FORALL I in 1..H_PARTY_ID.COUNT 
4124          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4125              l_search_ctx_id,H_PARTY_ID(I));
4126       l_party_id_idx := H_PARTY_ID.COUNT+1;
4127     ELSE
4128    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4129       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);
4130     END IF;
4131       l_ctx_id := NULL;
4132       l_party_id_idx := H_PARTY_ID.COUNT+1;
4133     END IF;
4134    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4135       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);
4136     END IF;
4137     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);
4138     LOOP 
4139       FETCH l_contact_pt_cur INTO
4140          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;
4141       EXIT WHEN l_contact_pt_cur%NOTFOUND;
4142    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4143       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);
4144     END IF;
4145    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4146       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);
4147     END IF;
4148    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4149       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);
4150     END IF;
4151       IF l_ctx_id IS NULL THEN
4152         l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);
4153       ELSE
4154         l_person_id := l_cpt_party_id;
4155       END IF;
4156       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4157         l_index := map_id(l_person_id);
4158         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
4159         IF NOT H_SCORES.EXISTS(l_index) THEN
4160           IF l_ctx_id IS NULL THEN
4161             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);
4162            H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4163    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4164       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);
4165     END IF;
4166    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4167       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);
4168     END IF;
4169    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4170       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);
4171     END IF;
4172           END IF;
4173         ELSE
4174    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4175       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);
4176     END IF;
4177           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
4178             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
4179               H_SCORES(l_index).TOTAL_SCORE :=
4180               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;
4181               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;
4182               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4183    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4184       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);
4185     END IF;
4186    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4187       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);
4188     END IF;
4189    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4190       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);
4191     END IF;
4195             END IF;
4192    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4193       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);
4194     END IF;
4196           ELSE
4197    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4198       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);
4199     END IF;
4200             H_SCORES(l_index).TOTAL_SCORE :=
4201             H_SCORES(l_index).TOTAL_SCORE+l_score;
4202             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4203             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4204    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4205       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);
4206     END IF;
4207    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4208       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);
4209     END IF;
4210    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4211       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);
4212     END IF;
4213           END IF;
4214         END IF;
4215    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4216       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);
4217     END IF;
4218    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4219       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);
4220     END IF;
4221         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4222           -- If rule is match all 
4223           IF l_match_str = ' AND ' THEN
4224    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4225       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);
4226     END IF;
4227             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4228               is_a_match := 'Y';
4229    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4230       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);
4231     END IF;
4232             ELSE
4233               is_a_match := 'N';
4234    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4235       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);
4236     END IF;
4237             END IF;
4238           -- Else it is construed as a match anyway 
4239           ELSE
4240             is_a_match := 'Y';
4241    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4242       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);
4243     END IF;
4244           END IF;
4245           IF (is_a_match='Y') THEN
4246           H_PARTY_ID_LIST(l_index) := 1;
4247           H_PARTY_ID(l_party_id_idx) := l_person_id;
4248           l_party_id_idx:= l_party_id_idx+1;
4249       end if;
4250         END IF;
4251         IF (l_party_id_idx-1)>l_max_thresh THEN
4252           CLOSE l_contact_pt_cur;
4253           IF p_index>1 THEN
4254    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4255       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);
4256     END IF;
4257             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4258             FND_MSG_PUB.ADD;
4259             RAISE FND_API.G_EXC_ERROR;
4260           ELSE
4261             push_eval;
4262             RETURN;
4263           END IF;
4264         END IF;
4265         IF p_ins_details = 'Y' THEN
4266           -- If rule is match all 
4267           IF l_match_str = ' AND ' THEN
4268    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4269       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);
4270     END IF;
4271             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4272               is_a_match := 'Y';
4273    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4274       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);
4275     END IF;
4276             ELSE
4277               is_a_match := 'N';
4278    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4282           -- Else it is construed as a match anyway 
4279       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);
4280     END IF;
4281             END IF;
4283           ELSE
4284             is_a_match := 'Y';
4285    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4286       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);
4287     END IF;
4288           END IF;
4289           IF (is_a_match='Y') THEN
4290    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4291       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);
4292     END IF;
4293           FOR I IN 1..h_cpt_id.COUNT LOOP
4294           IF h_cpt_id(I)=l_contact_pt_id THEN
4295           	 l_cpt_flag := 'Y';
4296           END IF;
4297           END LOOP;
4298           IF l_cpt_flag = 'Y' THEN
4299           	 NULL;
4300           ELSE 
4301          	 h_cpt_id(detcnt) := l_contact_pt_id;
4302           h_cpt_party_id(detcnt) := l_person_id;
4303           	 IF (p_emax_score > 0) THEN 
4304               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
4305             ELSE 
4306               h_cpt_score(detcnt) := 0; 
4307           	 END IF; 
4308             detcnt := detcnt +1;
4309           END IF;
4310       end if;
4311         END IF;
4312     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4313       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);
4314       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);
4315       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);
4316       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);
4317     END IF;
4318       END IF;
4319     END LOOP;
4320     CLOSE l_contact_pt_cur;
4321     ROLLBACK to eval_start;
4322     IF p_ins_details = 'Y' THEN
4323       FORALL I in 1..h_cpt_id.COUNT 
4324         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
4325           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
4326     END IF;
4327   END;
4328 
4329   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
4330   PROCEDURE do_eval (p_index NUMBER) IS
4331     l_ctx_id NUMBER;
4332     l_threshold NUMBER;
4333     other_acq_criteria_exists BOOLEAN; 
4334     acq_cnt NUMBER; 
4335   BEGIN
4336     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
4337      l_threshold :=  round(( l_entered_max_score / 700) * 77); 
4338     other_acq_criteria_exists := TRUE ;
4339     --check if acquisition criteria exists for any other entity
4340     IF l_party_contains_str IS NOT NULL THEN 
4341     	acq_cnt := 1; 
4342     END IF; 
4343     IF l_party_site_contains_str IS NOT NULL THEN 
4344     	acq_cnt := acq_cnt+1; 
4345     END IF; 
4346     IF l_contact_contains_str IS NOT NULL THEN 
4347     	acq_cnt := acq_cnt+1; 
4348     END IF;
4349     IF l_contact_pt_contains_str IS NOT NULL THEN 
4350     	acq_cnt := acq_cnt+1; 
4351     END IF;  
4352     IF acq_cnt>1 THEN 
4353     	other_acq_criteria_exists := TRUE; 
4354     ELSE
4355     	other_acq_criteria_exists := FALSE; 
4356     END IF;  
4357       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);
4358       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);
4359       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);
4360     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
4361     	IF ( call_max_score(p_index) < l_threshold) THEN 
4362    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4363       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);
4364     END IF;
4365 	     	RETURN;	
4366     	ELSE 
4367    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4368       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);
4369     END IF;
4370 	     	FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED'); 
4371 	     	FND_MSG_PUB.ADD; 
4372 	     	RAISE FND_API.G_EXC_ERROR; 
4373     	END IF; 
4374 	  ELSE
4375    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4379       FND_MSG_PUB.ADD;
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');
4380       RAISE FND_API.G_EXC_ERROR;
4381      END IF; 
4382     END IF;
4383     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
4384       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
4385     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
4386       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4387     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
4388       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4389     END IF;
4390   END;
4391   /************ End of find_persons private procedures **********/ 
4392 
4393   BEGIN
4394 
4395     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4396       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);
4397     END IF;
4398     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4399       hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4400       hz_utility_v2pub.debug(p_message=>'p_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);
4401       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);
4402     END IF;
4403     -- ************************************
4404     -- STEP 1. Initialization and error checks
4405 
4406     l_match_str := ' AND ';
4407     IF p_match_type = 'AND' THEN
4408       l_match_str := ' AND ';
4409     ELSIF p_match_type = 'OR' THEN
4410       l_match_str := ' OR ';
4411     END IF;
4412     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);
4413     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4414 
4415     l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
4416     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
4417       g_score_until_thresh := true;
4418     ELSE
4419       g_score_until_thresh := false;
4420     END IF;
4421     -- ************************************************************
4422     -- STEP 2. Setup of intermedia query strings for Acquisition query
4423     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
4424     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
4425     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
4426     l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);
4427     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
4428 
4429     -- Setup Search Context ID
4430     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4431     x_search_ctx_id := l_search_ctx_id;
4432 
4433     IF l_party_contains_str IS NULL THEN
4434       defpt := 1;
4435     END IF;
4436     IF l_party_site_contains_str IS NULL THEN
4437       defps := 1;
4438     END IF;
4439     IF l_contact_contains_str IS NULL THEN
4440       defct := 1;
4441     END IF;
4442     IF l_contact_pt_contains_str IS NULL THEN
4443       defcpt := 1;
4444     END IF;
4445 
4446     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4447       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);
4448       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);
4449       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);
4450       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);
4451       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);
4452       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);
4453     END IF;
4454     FOR I in 1..5 LOOP
4455       do_eval(I);
4456     END LOOP;
4457     IF l_contact_contains_str IS NOT NULL THEN
4458       eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);
4459     END IF;
4460     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4461       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);
4462     END IF;
4463     x_num_matches := 0;
4464     l_num_eval := 0;
4465     IF l_match_str = ' OR ' THEN
4466       l_party_id := H_SCORES.FIRST;
4470     WHILE l_party_id IS NOT NULL LOOP
4467     ELSE
4468       l_party_id := H_PARTY_ID_LIST.FIRST;
4469     END IF;
4471       l_num_eval:= l_num_eval+1;
4472     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4473       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);
4474       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);
4475     END IF;
4476       IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(77/700) THEN
4477             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
4478             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));
4479             x_num_matches := x_num_matches+1;
4480       END IF;
4481       IF l_match_str = ' OR ' THEN
4482         l_party_id:=H_SCORES.NEXT(l_party_id);
4483       ELSE
4484         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
4485       END IF;
4486     END LOOP;
4487     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
4488     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4489       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);
4490     END IF;
4491 EXCEPTION
4492   WHEN L_RETURN_IMM_EXC THEN
4493     RETURN;
4494   WHEN FND_API.G_EXC_ERROR THEN
4495     RAISE FND_API.G_EXC_ERROR;
4496   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4497     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4498   WHEN OTHERS THEN
4499     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4500     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_persons');
4501     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4502     FND_MSG_PUB.ADD;
4503     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4504 END find_persons;
4505 
4506 PROCEDURE find_persons (
4507       p_rule_id               IN      NUMBER,
4508       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
4509       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
4510       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
4511       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
4512       p_restrict_sql          IN      VARCHAR2,
4513       p_match_type            IN      VARCHAR2,
4514       p_search_merged         IN      VARCHAR2,
4515       p_ins_details           IN      VARCHAR2,
4516       x_search_ctx_id         OUT     NUMBER,
4517       x_num_matches           OUT     NUMBER
4518 ) IS
4519 
4520   BEGIN
4521      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);
4522   END;
4523 PROCEDURE find_party_details (
4524       p_rule_id               IN      NUMBER,
4525       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
4526       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
4527       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
4528       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
4529       p_restrict_sql          IN      VARCHAR2,
4530       p_match_type            IN      VARCHAR2,
4531       p_search_merged         IN      VARCHAR2,
4532       x_search_ctx_id         OUT     NUMBER,
4533       x_num_matches           OUT     NUMBER
4534 ) IS
4535 
4536   BEGIN
4537     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4538       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);
4539     END IF;
4540     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4541       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);
4542       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);
4543       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);
4544       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);
4545     END IF;
4546   find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,
4547                p_restrict_sql,p_match_type,p_search_merged,null,null, null,'Y',
4548                x_search_ctx_id,x_num_matches);
4549   DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4550   AND NOT EXISTS 
4551        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);
4552   DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4553   AND NOT EXISTS 
4554        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);
4555   DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4556   AND NOT EXISTS 
4557        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);
4558     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4562   WHEN FND_API.G_EXC_ERROR THEN
4559       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);
4560     END IF;
4561 EXCEPTION
4563     RAISE FND_API.G_EXC_ERROR;
4564   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4565     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4566   WHEN OTHERS THEN
4567     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4568     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_party_details');
4569     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4570     FND_MSG_PUB.ADD;
4571     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4572 END find_party_details;
4573 
4574 PROCEDURE find_duplicate_parties (
4575       p_rule_id               IN      NUMBER,
4576       p_party_id              IN      NUMBER,
4577       p_restrict_sql          IN      VARCHAR2,
4578       p_match_type            IN      VARCHAR2,
4579       p_dup_batch_id          IN      NUMBER,
4580       p_search_merged         IN      VARCHAR2,
4581       x_dup_set_id            OUT     NUMBER,
4582       x_search_ctx_id         OUT     NUMBER,
4583       x_num_matches           OUT     NUMBER
4584 ) IS
4585   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4586   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4587   l_contact_list HZ_PARTY_SEARCH.contact_list;
4588   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4589   l_match_idx NUMBER;
4590 
4591   --Fix for bug 4417124
4592   l_use_contact_addr_info BOOLEAN := TRUE;
4593   l_use_contact_cpt_info BOOLEAN  := TRUE;
4594   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
4595   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
4596 
4597 BEGIN
4598 
4599     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4600       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);
4601     END IF;
4602     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4603       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);
4604       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);
4605       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);
4606       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);
4607       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);
4608       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);
4609     END IF;
4610 
4611   --Fix for bug 4417124 
4612 
4613   SELECT use_contact_addr_flag, use_contact_cpt_flag 
4614   INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
4615   FROM hz_match_rules_b 
4616   WHERE match_rule_id = 33; 
4617 
4618   IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
4619     l_use_contact_addr_info := FALSE; 
4620   END IF; 
4621 
4622   IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
4623     l_use_contact_cpt_info := FALSE; 
4624   END IF; 
4625 
4626  --End fix for bug 4417124
4627 
4628   get_party_for_search(
4629               p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);
4630 
4631     IF NOT check_prim_cond (l_party_rec,
4632                             l_party_site_list,
4633                             l_contact_list,
4634                             l_cpt_list) THEN
4635       x_dup_set_id:=NULL;
4636       x_search_ctx_id:=NULL;
4637       x_num_matches:=0;
4638       RETURN;
4639     END IF;
4640   x_dup_set_id := NULL;
4641   IF p_dup_batch_id IS NOT NULL THEN
4642     SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;
4643   END IF;
4644 
4645   --Fix for bug 4417124 
4646   IF l_party_rec.PARTY_TYPE = 'PERSON' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN
4647     find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4648                p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4649                x_search_ctx_id,x_num_matches);
4650   ELSE
4651     find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4652                p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4653                x_search_ctx_id,x_num_matches);
4654   END IF;
4655 
4656   IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN
4657     INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,
4658       STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,
4659       LAST_UPDATE_DATE, LAST_UPDATED_BY) 
4660     VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, 'SYSBATCH',
4661       'PARTY_MERGE', hz_utility_pub.created_by, hz_utility_pub.creation_date,
4662       hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,
4663       hz_utility_pub.user_id);
4664 
4665     INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
4666       MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
4667       LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) 
4668     VALUES (p_party_id,x_dup_set_id,0,0,
4672   ELSE
4669       'Y',100,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,p_dup_batch_id);
4673     x_dup_set_id := NULL;
4674   END IF;
4675     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4676       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);
4677     END IF;
4678 EXCEPTION
4679   WHEN FND_API.G_EXC_ERROR THEN
4680     RAISE FND_API.G_EXC_ERROR;
4681   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4682     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4683   WHEN OTHERS THEN
4684     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4685     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_duplicate_parties');
4686     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4687     FND_MSG_PUB.ADD;
4688     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4689 END find_duplicate_parties;
4690 
4691 PROCEDURE find_duplicate_party_sites (
4692       p_rule_id               IN      NUMBER,
4693       p_party_site_id         IN      NUMBER,
4694       p_party_id              IN      NUMBER,
4695       p_restrict_sql          IN      VARCHAR2,
4696       p_match_type            IN      VARCHAR2,
4697       x_search_ctx_id         OUT     NUMBER,
4698       x_num_matches           OUT     NUMBER
4699 ) IS
4700 
4701    l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
4702    l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4703    l_contact_list HZ_PARTY_SEARCH.contact_list; 
4704    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
4705    contact_point_ids HZ_PARTY_SEARCH.IDList; 
4706    p_party_site_list HZ_PARTY_SEARCH.IDList;  
4707    p_contact_ids HZ_PARTY_SEARCH.IDList; 
4708   l_match_idx NUMBER;
4709    cursor get_cpts_for_party_sites is select contact_point_id  
4710                          from hz_contact_points 
4711                          where owner_table_name = 'HZ_PARTY_SITES' 
4712                          and primary_flag='Y'
4713                          and owner_table_id = p_party_site_id; 
4714    BEGIN 
4715     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4716       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);
4717     END IF;
4718     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4719       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);
4720       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);
4721       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);
4722       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);
4723       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);
4724     END IF;
4725      p_party_site_list(1) := p_party_site_id; 
4726      OPEN get_cpts_for_party_sites;
4727      LOOP       
4728      FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; 
4729          EXIT WHEN get_cpts_for_party_sites%NOTFOUND; 
4730      END LOOP;  
4731      CLOSE get_cpts_for_party_sites; 
4732   
4733      get_search_criteria (
4734          null,
4735          p_party_site_list,
4736          HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4737          contact_point_ids, 
4738          l_party_search_rec,
4739          l_party_site_list,
4740          l_contact_list,
4741          l_contact_point_list) ;
4742     IF NOT check_prim_cond (l_party_search_rec,
4743                             l_party_site_list,
4744                             l_contact_list,
4745                             l_contact_point_list) THEN
4746       x_search_ctx_id:=NULL;
4747       x_num_matches:=0;
4748       RETURN;
4749     END IF;
4750  
4751      get_matching_party_sites (p_rule_id, 
4752          p_party_id, 
4753          l_party_site_list, 
4754          l_contact_point_list,
4755          p_restrict_sql, 
4756          p_match_type, 
4757          p_party_site_id, 
4758          x_search_ctx_id,
4759          x_num_matches);
4760     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4761       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);
4762     END IF;
4763 EXCEPTION
4764   WHEN FND_API.G_EXC_ERROR THEN
4765     RAISE FND_API.G_EXC_ERROR;
4766   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4767     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4768   WHEN OTHERS THEN
4769     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4770     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_duplicate_party_sites');
4771     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4772     FND_MSG_PUB.ADD;
4773     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4774 END find_duplicate_party_sites; 
4775  
4776 PROCEDURE find_duplicate_contacts (
4777       p_rule_id               IN      NUMBER,
4778       p_org_contact_id        IN      NUMBER,
4779       p_party_id              IN      NUMBER,
4780       p_restrict_sql          IN      VARCHAR2,
4784 ) IS
4781       p_match_type            IN      VARCHAR2,
4782       x_search_ctx_id         OUT     NUMBER,
4783       x_num_matches           OUT     NUMBER
4785 
4786  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4787  l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4788  l_contact_list HZ_PARTY_SEARCH.contact_list; 
4789  l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
4790  contact_point_ids HZ_PARTY_SEARCH.IDList; 
4791  p_party_site_list HZ_PARTY_SEARCH.IDList;   
4792  p_contact_ids HZ_PARTY_SEARCH.IDList; 
4793   l_match_idx NUMBER;
4794  cursor get_cpt_for_contact_id is select  contact_point_id 
4795    from hz_org_contacts a, hz_relationships b, hz_contact_points c 
4796    where a.party_relationship_id = b.relationship_id 
4797      and c.owner_table_name = 'HZ_PARTIES' 
4798      and c.primary_flag='Y'
4799      and c.owner_table_id = b.party_id 
4800      and b.directional_flag = 'F'  
4801      and a.org_contact_id = p_org_contact_id; 
4802 BEGIN 
4803     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4804       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);
4805     END IF;
4806     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4807       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);
4808       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);
4809       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);
4810       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);
4811       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);
4812     END IF;
4813     p_contact_ids(1) := p_org_contact_id; 
4814     OPEN get_cpt_for_contact_id; 
4815     LOOP 
4816     FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; 
4817         EXIT WHEN get_cpt_for_contact_id%NOTFOUND; 
4818     END LOOP;  
4819     CLOSE get_cpt_for_contact_id; 
4820  
4821     get_search_criteria (
4822         null,
4823         HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4824         p_contact_ids,
4825         contact_point_ids, 
4826         l_party_search_rec,
4827         l_party_site_list, 
4828         l_contact_list,
4829         l_contact_point_list) ;
4830     IF NOT check_prim_cond (l_party_search_rec,
4831                             l_party_site_list,
4832                             l_contact_list,
4833                             l_contact_point_list) THEN
4834       x_search_ctx_id:=NULL;
4835       x_num_matches:=0;
4836       RETURN;
4837     END IF;
4838  
4839     get_matching_contacts (p_rule_id, 
4840         p_party_id, 
4841         l_contact_list, 
4842         l_contact_point_list, 
4843         p_restrict_sql, 
4844         p_match_type, 
4845         p_org_contact_id, 
4846         x_search_ctx_id, 
4847         x_num_matches);
4848  
4849     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4850       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);
4851     END IF;
4852 EXCEPTION
4853   WHEN FND_API.G_EXC_ERROR THEN
4854     RAISE FND_API.G_EXC_ERROR;
4855   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4856     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4857   WHEN OTHERS THEN
4858     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4859     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_duplicate_contacts');
4860     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4861     FND_MSG_PUB.ADD;
4862     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4863 END find_duplicate_contacts; 
4864 
4865 PROCEDURE find_duplicate_contact_points (
4866       p_rule_id               IN      NUMBER,
4867       p_contact_point_id      IN      NUMBER,
4868       p_party_id              IN      NUMBER,
4869       p_restrict_sql          IN      VARCHAR2,
4870       p_match_type            IN      VARCHAR2,
4871       x_search_ctx_id         OUT     NUMBER,
4872       x_num_matches           OUT     NUMBER
4873 ) IS
4874  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
4875   l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4876    l_contact_list HZ_PARTY_SEARCH.contact_list;  
4877    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;  
4878    contact_point_ids HZ_PARTY_SEARCH.IDList;  
4879   p_party_site_list HZ_PARTY_SEARCH.IDList;   
4880   p_contact_ids HZ_PARTY_SEARCH.IDList;  
4881   l_match_idx NUMBER;
4882 
4883 BEGIN
4884     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4885       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);
4886     END IF;
4887     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4888       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);
4892       hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4889       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);
4890       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);
4891       hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4893     END IF;
4894   contact_point_ids(1) := p_contact_point_id;   
4895   get_search_criteria (   
4896       null, 
4897       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
4898       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
4899       contact_point_ids,   
4900       l_party_search_rec, 
4901       l_party_site_list, 
4902       l_contact_list, 
4903       l_contact_point_list ); 
4904     
4905     IF NOT check_prim_cond (l_party_search_rec,
4906                             l_party_site_list,
4907                             l_contact_list,
4908                             l_contact_point_list) THEN
4909       x_search_ctx_id:=NULL;
4910       x_num_matches:=0;
4911       RETURN;
4912     END IF;
4913    get_matching_contact_points ( 
4914       p_rule_id, 
4915       p_party_id, 
4916      l_contact_point_list, 
4917       p_restrict_sql, 
4918       p_match_type, 
4919       p_contact_point_id, 
4920       x_search_ctx_id, 
4921       x_num_matches );  
4922     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4923       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);
4924     END IF;
4925 EXCEPTION
4926   WHEN FND_API.G_EXC_ERROR THEN
4927     RAISE FND_API.G_EXC_ERROR;
4928   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4929     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4930   WHEN OTHERS THEN
4931     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4932     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_duplicate_contact_points');
4933     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4934     FND_MSG_PUB.ADD;
4935     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4936 END find_duplicate_contact_points;
4937 
4938 PROCEDURE find_parties_dynamic (
4939         p_rule_id               IN      NUMBER,
4940         p_attrib_id1            IN      NUMBER,
4941         p_attrib_id2            IN      NUMBER,
4942         p_attrib_id3            IN      NUMBER,
4943         p_attrib_id4            IN      NUMBER,
4944         p_attrib_id5            IN      NUMBER,
4945         p_attrib_id6            IN      NUMBER,
4946         p_attrib_id7            IN      NUMBER,
4947         p_attrib_id8            IN      NUMBER,
4948         p_attrib_id9            IN      NUMBER,
4949         p_attrib_id10           IN      NUMBER,
4950         p_attrib_id11           IN      NUMBER,
4951         p_attrib_id12           IN      NUMBER,
4952         p_attrib_id13           IN      NUMBER,
4953         p_attrib_id14           IN      NUMBER,
4954         p_attrib_id15           IN      NUMBER,
4955         p_attrib_id16           IN      NUMBER,
4956         p_attrib_id17           IN      NUMBER,
4957         p_attrib_id18           IN      NUMBER,
4958         p_attrib_id19           IN      NUMBER,
4959         p_attrib_id20           IN      NUMBER,
4960         p_attrib_val1           IN      VARCHAR2,
4961         p_attrib_val2           IN      VARCHAR2,
4962         p_attrib_val3           IN      VARCHAR2,
4963         p_attrib_val4           IN      VARCHAR2,
4964         p_attrib_val5           IN      VARCHAR2,
4965         p_attrib_val6           IN      VARCHAR2,
4966         p_attrib_val7           IN      VARCHAR2,
4967         p_attrib_val8           IN      VARCHAR2,
4968         p_attrib_val9           IN      VARCHAR2,
4969         p_attrib_val10          IN      VARCHAR2,
4970         p_attrib_val11          IN      VARCHAR2,
4971         p_attrib_val12          IN      VARCHAR2,
4972         p_attrib_val13          IN      VARCHAR2,
4973         p_attrib_val14          IN      VARCHAR2,
4974         p_attrib_val15          IN      VARCHAR2,
4975         p_attrib_val16          IN      VARCHAR2,
4976         p_attrib_val17          IN      VARCHAR2,
4977         p_attrib_val18          IN      VARCHAR2,
4978         p_attrib_val19          IN      VARCHAR2,
4979         p_attrib_val20          IN      VARCHAR2,
4980         p_restrict_sql          IN      VARCHAR2,
4981         p_match_type            IN      VARCHAR2,
4982         p_search_merged         IN      VARCHAR2,
4983         x_search_ctx_id         OUT     NUMBER,
4984         x_num_matches           OUT     NUMBER
4985 ) IS
4986   BEGIN
4987     call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,
4988                      p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,
4989                      p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,
4990                      p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,
4991                      p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,
4992                      p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,
4993                      p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,
4997 
4994                      p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,
4995                      p_restrict_sql,'FIND_PARTIES',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);
4996  END;
4998 PROCEDURE call_api_dynamic (
4999         p_rule_id               IN      NUMBER,
5000         p_attrib_id1            IN      NUMBER,
5001         p_attrib_id2            IN      NUMBER,
5002         p_attrib_id3            IN      NUMBER,
5003         p_attrib_id4            IN      NUMBER,
5004         p_attrib_id5            IN      NUMBER,
5005         p_attrib_id6            IN      NUMBER,
5006         p_attrib_id7            IN      NUMBER,
5007         p_attrib_id8            IN      NUMBER,
5008         p_attrib_id9            IN      NUMBER,
5009         p_attrib_id10           IN      NUMBER,
5010         p_attrib_id11           IN      NUMBER,
5011         p_attrib_id12           IN      NUMBER,
5012         p_attrib_id13           IN      NUMBER,
5013         p_attrib_id14           IN      NUMBER,
5014         p_attrib_id15           IN      NUMBER,
5015         p_attrib_id16           IN      NUMBER,
5016         p_attrib_id17           IN      NUMBER,
5017         p_attrib_id18           IN      NUMBER,
5018         p_attrib_id19           IN      NUMBER,
5019         p_attrib_id20           IN      NUMBER,
5020         p_attrib_val1           IN      VARCHAR2,
5021         p_attrib_val2           IN      VARCHAR2,
5022         p_attrib_val3           IN      VARCHAR2,
5023         p_attrib_val4           IN      VARCHAR2,
5024         p_attrib_val5           IN      VARCHAR2,
5025         p_attrib_val6           IN      VARCHAR2,
5026         p_attrib_val7           IN      VARCHAR2,
5027         p_attrib_val8           IN      VARCHAR2,
5028         p_attrib_val9           IN      VARCHAR2,
5029         p_attrib_val10          IN      VARCHAR2,
5030         p_attrib_val11          IN      VARCHAR2,
5031         p_attrib_val12          IN      VARCHAR2,
5032         p_attrib_val13          IN      VARCHAR2,
5033         p_attrib_val14          IN      VARCHAR2,
5034         p_attrib_val15          IN      VARCHAR2,
5035         p_attrib_val16          IN      VARCHAR2,
5036         p_attrib_val17          IN      VARCHAR2,
5037         p_attrib_val18          IN      VARCHAR2,
5038         p_attrib_val19          IN      VARCHAR2,
5039         p_attrib_val20          IN      VARCHAR2,
5040         p_restrict_sql          IN      VARCHAR2,
5041         p_api_name              IN      VARCHAR2,
5042         p_match_type            IN      VARCHAR2,
5043         p_party_id              IN      NUMBER,
5044         p_search_merged         IN      VARCHAR2,
5045         x_search_ctx_id         OUT     NUMBER,
5046         x_num_matches           OUT     NUMBER
5047 ) IS
5048   TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
5049   l_match_idx NUMBER;
5050   AttrVals AttrList;
5051   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
5052   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
5053   l_contact_list HZ_PARTY_SEARCH.contact_list;
5054   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
5055   l_dup_set_id NUMBER;
5056   l_idx NUMBER;
5057   l_cpt_type VARCHAR2(255);
5058   FIRST BOOLEAN := TRUE; 
5059 
5060 BEGIN
5061     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5062       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);
5063     END IF;
5064 
5065   IF p_attrib_id1 IS NOT NULL THEN
5066     AttrVals(p_attrib_id1):=p_attrib_val1;
5067   END IF;
5068   IF p_attrib_id2 IS NOT NULL THEN
5069     AttrVals(p_attrib_id2):=p_attrib_val2;
5070   END IF;
5071   IF p_attrib_id3 IS NOT NULL THEN
5072     AttrVals(p_attrib_id3):=p_attrib_val3;
5073   END IF;
5074   IF p_attrib_id4 IS NOT NULL THEN
5075     AttrVals(p_attrib_id4):=p_attrib_val4;
5076   END IF;
5077   IF p_attrib_id5 IS NOT NULL THEN
5078     AttrVals(p_attrib_id5):=p_attrib_val5;
5079   END IF;
5080   IF p_attrib_id6 IS NOT NULL THEN
5081     AttrVals(p_attrib_id6):=p_attrib_val6;
5082   END IF;
5083   IF p_attrib_id7 IS NOT NULL THEN
5084     AttrVals(p_attrib_id7):=p_attrib_val7;
5085   END IF;
5086   IF p_attrib_id8 IS NOT NULL THEN
5087     AttrVals(p_attrib_id8):=p_attrib_val8;
5088   END IF;
5089   IF p_attrib_id9 IS NOT NULL THEN
5090     AttrVals(p_attrib_id9):=p_attrib_val9;
5091   END IF;
5092   IF p_attrib_id10 IS NOT NULL THEN
5093     AttrVals(p_attrib_id10):=p_attrib_val10;
5094   END IF;
5095   IF p_attrib_id11 IS NOT NULL THEN
5096     AttrVals(p_attrib_id11):=p_attrib_val11;
5097   END IF;
5098   IF p_attrib_id12 IS NOT NULL THEN
5099     AttrVals(p_attrib_id12):=p_attrib_val12;
5100   END IF;
5101   IF p_attrib_id13 IS NOT NULL THEN
5102     AttrVals(p_attrib_id13):=p_attrib_val13;
5103   END IF;
5104   IF p_attrib_id14 IS NOT NULL THEN
5105     AttrVals(p_attrib_id14):=p_attrib_val14;
5106   END IF;
5107   IF p_attrib_id15 IS NOT NULL THEN
5108     AttrVals(p_attrib_id15):=p_attrib_val15;
5109   END IF;
5110   IF p_attrib_id16 IS NOT NULL THEN
5111     AttrVals(p_attrib_id16):=p_attrib_val16;
5112   END IF;
5113   IF p_attrib_id17 IS NOT NULL THEN
5114     AttrVals(p_attrib_id17):=p_attrib_val17;
5115   END IF;
5116   IF p_attrib_id18 IS NOT NULL THEN
5117     AttrVals(p_attrib_id18):=p_attrib_val18;
5118   END IF;
5119   IF p_attrib_id19 IS NOT NULL THEN
5120     AttrVals(p_attrib_id19):=p_attrib_val19;
5121   END IF;
5122   IF p_attrib_id20 IS NOT NULL THEN
5126     l_party_rec.ALL_ACCOUNT_NAMES:= AttrVals(11);
5123     AttrVals(p_attrib_id20):=p_attrib_val20;
5124   END IF;
5125   IF AttrVals.EXISTS(11) THEN
5127     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5128       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);
5129     END IF;
5130   END IF;
5131 
5132   IF AttrVals.EXISTS(12) THEN
5133     l_party_rec.PARTY_NUMBER:= AttrVals(12);
5134     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5135       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);
5136     END IF;
5137   END IF;
5138 
5139   IF AttrVals.EXISTS(13) THEN
5140     l_party_rec.ALL_ACCOUNT_NUMBERS:= AttrVals(13);
5141     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5142       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);
5143     END IF;
5144   END IF;
5145 
5146   IF AttrVals.EXISTS(15) THEN
5147     l_party_rec.PARTY_ALL_NAMES:= AttrVals(15);
5148     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5149       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);
5150     END IF;
5151   END IF;
5152 
5153   IF AttrVals.EXISTS(27) THEN
5154     l_party_site_list(1).ADDRESS:= AttrVals(27);
5155     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5156       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);
5157     END IF;
5158   END IF;
5159 
5160   IF AttrVals.EXISTS(29) THEN
5161     l_party_site_list(1).CITY:= AttrVals(29);
5162     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5163       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);
5164     END IF;
5165   END IF;
5166 
5167   IF AttrVals.EXISTS(30) THEN
5168     l_party_site_list(1).POSTAL_CODE:= AttrVals(30);
5169     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5170       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);
5171     END IF;
5172   END IF;
5173 
5174   IF AttrVals.EXISTS(32) THEN
5175     l_party_site_list(1).STATE:= AttrVals(32);
5176     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5177       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);
5178     END IF;
5179   END IF;
5180 
5181   IF AttrVals.EXISTS(33) THEN
5182     l_party_site_list(1).PARTY_SITE_NUMBER:= AttrVals(33);
5183     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5184       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);
5185     END IF;
5186   END IF;
5187 
5188   IF AttrVals.EXISTS(36) THEN
5189     l_party_site_list(1).COUNTRY:= AttrVals(36);
5190     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5191       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);
5192     END IF;
5193   END IF;
5194 
5195   IF AttrVals.EXISTS(39) THEN
5196     l_contact_list(1).CONTACT_NAME:= AttrVals(39);
5197     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5198       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);
5199     END IF;
5200   END IF;
5201 
5202   IF AttrVals.EXISTS(44) THEN
5203     l_cpt_type := 'PHONE';
5204     FIRST := FALSE;
5205     FOR I in 1..l_cpt_list.COUNT LOOP
5206       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5207         l_cpt_list(I).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
5208         FIRST := TRUE;
5209     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5210       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);
5211       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);
5212     END IF;
5213       END IF;
5214     END LOOP;
5215     IF not FIRST THEN
5216       l_idx := l_cpt_list.COUNT+1;
5217       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5218       l_cpt_list(l_idx).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
5219     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5220       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);
5224   END IF;
5221       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);
5222     END IF;
5223     END IF;
5225 
5226   IF AttrVals.EXISTS(48) THEN
5227     l_cpt_type := 'EMAIL';
5228     FIRST := FALSE;
5229     FOR I in 1..l_cpt_list.COUNT LOOP
5230       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5231         l_cpt_list(I).EMAIL_ADDRESS:= AttrVals(48);
5232         FIRST := TRUE;
5233     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5234       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);
5235       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);
5236     END IF;
5237       END IF;
5238     END LOOP;
5239     IF not FIRST THEN
5240       l_idx := l_cpt_list.COUNT+1;
5241       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5242       l_cpt_list(l_idx).EMAIL_ADDRESS:= AttrVals(48);
5243     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5244       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);
5245       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);
5246     END IF;
5247     END IF;
5248   END IF;
5249 
5250 
5251   IF AttrVals.EXISTS(14) THEN
5252      l_party_rec.PARTY_TYPE:= AttrVals(14); 
5253   END IF; 
5254   IF upper(p_api_name) = 'FIND_PARTIES' THEN
5255     find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5256                p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,'N',
5257                x_search_ctx_id,x_num_matches);
5258   ELSIF upper(p_api_name) = 'FIND_PARTY_DETAILS' THEN
5259     find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5260                p_restrict_sql,p_match_type,p_search_merged,
5261                x_search_ctx_id,x_num_matches);
5262   ELSIF upper(p_api_name) = 'FIND_PERSONS' THEN
5263     find_persons(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,'N',
5265                x_search_ctx_id,x_num_matches);
5266   ELSIF upper(p_api_name) = 'GET_MATCHING_PARTY_SITES' THEN
5267     get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,
5268                p_restrict_sql,p_match_type,NULL,
5269                x_search_ctx_id,x_num_matches);
5270   ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACTS' THEN
5271     get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,
5272                p_restrict_sql,p_match_type,NULL,
5273                x_search_ctx_id,x_num_matches);
5274   ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACT_POINTS' THEN
5275     get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,
5276                p_restrict_sql,p_match_type,NULL,
5277                x_search_ctx_id,x_num_matches);
5278   END IF;
5279     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5280       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);
5281     END IF;
5282 EXCEPTION
5283   WHEN FND_API.G_EXC_ERROR THEN
5284     RAISE FND_API.G_EXC_ERROR;
5285   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5286     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5287   WHEN OTHERS THEN
5288     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5289     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.call_api_dynamic');
5290     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5291     FND_MSG_PUB.ADD;
5292     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5293 END call_api_dynamic; 
5294 
5295 
5296 PROCEDURE get_matching_party_sites (
5297         p_rule_id               IN      NUMBER,
5298         p_party_id              IN      NUMBER,
5299         p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,
5300         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5301         p_restrict_sql          IN      VARCHAR2,
5302         p_match_type            IN      VARCHAR2,
5303         p_dup_party_site_id     IN      NUMBER, 
5304         x_search_ctx_id         OUT     NUMBER,
5305         x_num_matches           OUT     NUMBER
5306 ) IS
5307   
5308   -- Strings to hold the generated Intermedia query strings
5309   l_party_contains_str VARCHAR2(32000); 
5310   l_match_idx NUMBER;
5311   l_party_site_contains_str VARCHAR2(32000);
5312   l_contact_contains_str VARCHAR2(32000);
5313   l_contact_pt_contains_str VARCHAR2(32000);
5314   l_tmp VARCHAR2(32000);
5315 
5316   -- Other local variables
5317   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5318   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5319   -- For Score calculation
5320   l_max_score NUMBER;
5321   l_entered_max_score NUMBER;
5322   FIRST BOOLEAN;
5323   l_search_ctx_id NUMBER; -- Generated Search Context ID
5324 
5325   l_TX9 VARCHAR2(2000);
5326   l_TX22 VARCHAR2(2000);
5327   l_TX1 VARCHAR2(2000);
5328   l_TX3 VARCHAR2(2000);
5329   l_TX15 VARCHAR2(2000);
5330   l_TX4 VARCHAR2(2000);
5331   l_TX10 VARCHAR2(2000);
5335   l_TX17 VARCHAR2(2000);
5332   l_TX11 VARCHAR2(2000);
5333   l_TX5 VARCHAR2(2000);
5334   l_TX14 VARCHAR2(2000);
5336   l_TX6 VARCHAR2(2000);
5337   H_SCORES HZ_PARTY_SEARCH.score_list;
5338 
5339   l_score NUMBER;
5340   l_idx NUMBER;
5341   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5342   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5343   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5344   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5345   l_party_id NUMBER;
5346   l_ps_party_id NUMBER;
5347   l_ct_party_id NUMBER;
5348   l_cpt_party_id NUMBER;
5349   l_cpt_ps_id NUMBER;
5350   l_cpt_contact_id NUMBER;
5351   l_cpt_type VARCHAR2(100);
5352   l_cpt_level VARCHAR2(100);
5353   l_party_site_id NUMBER;
5354   l_org_contact_id NUMBER;
5355   l_contact_pt_id NUMBER;
5356   l_cpt_level VARCHAR2(100);
5357   l_ps_contact_id NUMBER;
5358   l_party_max_score NUMBER;
5359   l_ps_max_score NUMBER;
5360   l_contact_max_score NUMBER;
5361   l_cpt_max_score NUMBER;
5362 
5363   defpt NUMBER :=0;
5364   defps NUMBER :=0;
5365   defct NUMBER :=0;
5366   defcpt NUMBER :=0;
5367   l_index NUMBER;
5368   l_match_ps_list HZ_PARTY_SEARCH.IDList;
5369   l_cnt NUMBER:=1;
5370 
5371   
5372   BEGIN
5373     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5374       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);
5375     END IF;
5376     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5377       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);
5378       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);
5379       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);
5380       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);
5381     END IF;
5382 
5383     -- ************************************
5384     -- STEP 1. Initialization and error checks
5385 
5386     l_match_str := ' AND ';
5387     IF p_match_type = 'AND' THEN
5388       l_match_str := ' AND ';
5389     ELSIF p_match_type = 'OR' THEN
5390       l_match_str := ' OR ';
5391     END IF;
5392     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);
5393     g_score_until_thresh := false;
5394     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5395 
5396     -- ************************************************************
5397     -- STEP 2. Setup of intermedia query strings for Acquisition query
5398     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5399     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5400     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);
5401 
5402     -- Setup Search Context ID
5403     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5404     x_search_ctx_id := l_search_ctx_id;
5405 
5406     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5407       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);
5408       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);
5409       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);
5410       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);
5411     END IF;
5412     IF l_party_site_contains_str IS NULL THEN
5413       defps := 1;
5414     END IF;
5415     IF l_contact_pt_contains_str IS NULL THEN
5416       defcpt := 1;
5417     END IF;
5418 
5419     IF l_party_site_contains_str IS NOT NULL THEN
5420       open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,'N', 'N',l_party_site_cur);
5421       LOOP
5422         FETCH l_party_site_cur INTO 
5423             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;
5424         EXIT WHEN l_party_site_cur%NOTFOUND;
5425       IF (p_dup_party_site_id IS NULL OR (
5426                 p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND 
5427                 l_party_site_id <> p_dup_party_site_id)) THEN  
5428             l_index := map_id(l_party_site_id);
5429             l_match_ps_list(l_cnt):= l_party_site_id ;
5430             l_cnt:=l_cnt+1;
5431             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);
5432             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);
5433     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5437     END IF;
5434       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);
5435       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);
5436       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);
5438       END IF; 
5439       END LOOP;
5440       CLOSE l_party_site_cur;
5441     END IF;
5442 
5443     IF l_contact_pt_contains_str IS NOT NULL THEN
5444     SAVEPOINT eval_start;
5445     IF l_match_str = ' AND ' OR (
5446         ((l_cpt_max_score/l_entered_max_score)<(77/700))
5447         ) THEN
5448       FORALL I in 1..l_match_ps_list.COUNT
5449            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5450            values (l_search_ctx_id,l_match_ps_list(I));
5451         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');
5452     ELSE
5453       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5454     END IF;
5455       LOOP
5456         FETCH l_contact_pt_cur INTO 
5457             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;
5458         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5459       IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (
5460          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   
5461         l_index := map_id(l_cpt_ps_id);
5462         IF l_match_str = ' OR ' THEN
5463           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5464           IF NOT H_SCORES.EXISTS(l_index) THEN
5465             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);
5466           ELSE
5467             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5468                H_SCORES(l_index).TOTAL_SCORE := 
5469                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5470                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5471             END IF;
5472           END IF;
5473         ELSE
5474           IF H_SCORES.EXISTS(l_index) THEN
5475             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5476             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5477                H_SCORES(l_index).TOTAL_SCORE := 
5478                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5479                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5480             END IF;
5481           ELSIF defps=1 THEN
5482             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5483             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);
5484           END IF;
5485         END IF;
5486       END IF; 
5487     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5488       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);
5489       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);
5490       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);
5491     END IF;
5492       END LOOP;
5493       CLOSE l_contact_pt_cur;
5494     ROLLBACK TO eval_start;
5495     END IF;
5496     x_num_matches := 0;
5497     l_party_site_id := H_SCORES.FIRST;
5498     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5499       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);
5500     END IF;
5501     WHILE l_party_site_id IS NOT NULL LOOP
5502     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5503       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);
5504       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);
5505     END IF;
5506  IF l_match_str = ' OR ' THEN
5507 IF (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=( 77/700 ) THEN
5508     INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) 
5509     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);
5510       x_num_matches := x_num_matches+1;
5511  END IF;
5512  ELSE
5513     IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND
5514        H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND
5515        (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, round((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  END IF;
5524       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);
5521       l_party_site_id:=H_SCORES.NEXT(l_party_site_id);
5522     END LOOP;
5523     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5525     END IF;
5526 EXCEPTION
5527   WHEN FND_API.G_EXC_ERROR THEN
5528     RAISE FND_API.G_EXC_ERROR;
5529   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5530     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5531   WHEN OTHERS THEN
5532     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5533     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.get_matching_party_sites');
5534     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5535     FND_MSG_PUB.ADD;
5536     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5537 END get_matching_party_sites;
5538 
5539 
5540 PROCEDURE get_matching_contacts (
5541         p_rule_id               IN      NUMBER,
5542         p_party_id              IN      NUMBER,
5543         p_contact_list          IN      HZ_PARTY_SEARCH.CONTACT_LIST,
5544         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5545         p_restrict_sql          IN      VARCHAR2,
5546         p_match_type            IN      VARCHAR2,
5547         p_dup_contact_id        IN      NUMBER, 
5548         x_search_ctx_id         OUT     NUMBER,
5549         x_num_matches           OUT     NUMBER
5550 ) IS
5551   
5552   -- Strings to hold the generated Intermedia query strings
5553   l_party_contains_str VARCHAR2(32000); 
5554   l_party_site_contains_str VARCHAR2(32000);
5555   l_contact_contains_str VARCHAR2(32000);
5556   l_contact_pt_contains_str VARCHAR2(32000);
5557   l_tmp VARCHAR2(32000);
5558 
5559   -- Other local variables
5560   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5561   l_match_idx NUMBER;
5562   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5563   -- For Score calculation
5564   l_max_score NUMBER;
5565   l_entered_max_score NUMBER;
5566   FIRST BOOLEAN;
5567   l_search_ctx_id NUMBER; -- Generated Search Context ID
5568 
5569   l_TX1 VARCHAR2(2000);
5570   l_TX5 VARCHAR2(2000);
5571   l_TX6 VARCHAR2(2000);
5572   H_SCORES HZ_PARTY_SEARCH.score_list;
5573 
5574   l_score NUMBER;
5575   l_idx NUMBER;
5576   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5577   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5578   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5579   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5580   l_party_id NUMBER;
5581   l_ps_party_id NUMBER;
5582   l_ct_party_id NUMBER;
5583   l_cpt_party_id NUMBER;
5584   l_cpt_ps_id NUMBER;
5585   l_cpt_contact_id NUMBER;
5586   l_cpt_type VARCHAR2(100);
5587   l_party_site_id NUMBER;
5588   l_org_contact_id NUMBER;
5589   l_contact_pt_id NUMBER;
5590 
5591   defpt NUMBER :=0;
5592   defps NUMBER :=0;
5593   defct NUMBER :=0;
5594   defcpt NUMBER :=0;
5595   l_index NUMBER;
5596   l_party_max_score NUMBER;
5597   l_ps_max_score NUMBER;
5598   l_contact_max_score NUMBER;
5599   l_cpt_max_score NUMBER;
5600   l_match_contact_list HZ_PARTY_SEARCH.IDList;
5601   l_cnt NUMBER:=1;
5602 
5603   
5604   BEGIN
5605     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5606       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);
5607     END IF;
5608     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5609       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);
5610       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);
5611       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);
5612       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);
5613     END IF;
5614 
5615     -- ************************************
5616     -- STEP 1. Initialization and error checks
5617 
5618     l_match_str := ' AND ';
5619     IF p_match_type = 'AND' THEN
5620       l_match_str := ' AND ';
5621     ELSIF p_match_type = 'OR' THEN
5622       l_match_str := ' OR ';
5623     END IF;
5624     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);
5625     g_score_until_thresh := false;
5626     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5627 
5628     -- ************************************************************
5629     -- STEP 2. Setup of intermedia query strings for Acquisition query
5630     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5631     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5632     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);
5633 
5634     -- Setup Search Context ID
5635     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5636     x_search_ctx_id := l_search_ctx_id;
5637 
5638     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5642       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);
5639       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);
5640       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);
5641       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);
5643     END IF;
5644     IF l_contact_contains_str IS NULL THEN
5645       defct := 1;
5646     END IF;
5647     IF l_contact_pt_contains_str IS NULL THEN
5648       defcpt := 1;
5649     END IF;
5650 
5651     IF l_contact_contains_str IS NOT NULL THEN
5652       open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);
5653       LOOP
5654         FETCH l_contact_cur INTO 
5655             l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
5656         EXIT WHEN l_contact_cur%NOTFOUND;
5657       IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN 
5658         l_index := map_id(l_org_contact_id);
5659         l_match_contact_list(l_cnt):=l_org_contact_id;
5660         l_cnt:=l_cnt+1;
5661           l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
5662             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);
5663     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5664       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);
5665       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);
5666       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);
5667     END IF;
5668       END IF; 
5669       END LOOP;
5670       CLOSE l_contact_cur;
5671     END IF;
5672 
5673     IF l_contact_pt_contains_str IS NOT NULL THEN
5674     SAVEPOINT eval_start;
5675     IF l_match_str = ' AND ' OR (
5676         ((l_cpt_max_score/l_entered_max_score)<(77/700))
5677         ) THEN
5678       FORALL I in 1..l_match_contact_list.COUNT
5679            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5680            values (l_search_ctx_id,l_match_contact_list(I));
5681       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');
5682     ELSE
5683       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5684     END IF;
5685       LOOP
5686         FETCH l_contact_pt_cur INTO 
5687             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;
5688         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5689       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 
5690         l_index := map_id(l_cpt_contact_id);
5691         IF l_match_str = ' OR ' THEN
5692           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5693           IF NOT H_SCORES.EXISTS(l_index) THEN
5694             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);
5695           ELSE
5696             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5697                H_SCORES(l_index).TOTAL_SCORE := 
5698                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5699                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5700             END IF;
5701           END IF;
5702         ELSE
5703           IF H_SCORES.EXISTS(l_index) THEN
5704             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5705             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5706                H_SCORES(l_index).TOTAL_SCORE := 
5707                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5708                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5709             END IF;
5710           ELSIF defps=1 THEN
5711             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5712             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);
5713           END IF;
5714         END IF;
5715         END IF; 
5716       END LOOP;
5717     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5718       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);
5719       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);
5720       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);
5721     END IF;
5722       CLOSE l_contact_pt_cur;
5723     END IF;
5724     x_num_matches := 0;
5725     l_org_contact_id := H_SCORES.FIRST;
5726     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5730       IF l_match_str = ' OR ' THEN
5727       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);
5728     END IF;
5729     WHILE l_org_contact_id IS NOT NULL LOOP
5731     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5732       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);
5733       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);
5734     END IF;
5735         IF (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(77/700) THEN
5736             INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) 
5737             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);
5738           x_num_matches := x_num_matches+1;
5739         END IF;
5740       ELSE
5741            IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND
5742            H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND
5743            (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, round((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       END IF;
5749       l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);
5750     END LOOP;
5751     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5752       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);
5753     END IF;
5754 EXCEPTION
5755   WHEN FND_API.G_EXC_ERROR THEN
5756     RAISE FND_API.G_EXC_ERROR;
5757   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5758     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5759   WHEN OTHERS THEN
5760     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5761     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.get_matching_contacts');
5762     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5763     FND_MSG_PUB.ADD;
5764     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5765 END get_matching_contacts;
5766 
5767 
5768 PROCEDURE get_matching_contact_points (
5769         p_rule_id               IN      NUMBER,
5770         p_party_id              IN      NUMBER,
5771         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5772         p_restrict_sql          IN      VARCHAR2,
5773         p_match_type            IN      VARCHAR2,
5774         p_dup_contact_point_id  IN      NUMBER, 
5775         x_search_ctx_id         OUT     NUMBER,
5776         x_num_matches           OUT     NUMBER
5777 ) IS
5778 
5779 
5780   -- Strings to hold the generated Intermedia query strings
5781   l_contact_pt_contains_str VARCHAR2(32000);
5782   l_tmp VARCHAR2(32000);
5783 
5784   -- Other local variables
5785   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5786   l_match_idx NUMBER;
5787   -- For Score calculation
5788   l_entered_max_score NUMBER;
5789   l_search_ctx_id NUMBER; -- Generated Search Context ID
5790 
5791   l_TX1 VARCHAR2(2000);
5792   l_TX5 VARCHAR2(2000);
5793   l_TX6 VARCHAR2(2000);
5794 
5795   l_score NUMBER;
5796   l_idx NUMBER;
5797   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5798   l_cpt_party_id NUMBER;
5799   l_cpt_ps_id NUMBER;
5800   l_cpt_contact_id NUMBER;
5801   l_contact_pt_id NUMBER;
5802   l_cpt_type VARCHAR2(100);
5803   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
5804   H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;
5805   H_SCORE  HZ_PARTY_SEARCH.IDList;
5806 
5807   cnt NUMBER :=0;
5808   l_party_max_score NUMBER;
5809   l_ps_max_score NUMBER;
5810   l_contact_max_score NUMBER;
5811   l_cpt_max_score NUMBER;
5812 
5813   
5814   BEGIN
5815     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5816       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);
5817     END IF;
5818     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5819       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);
5820       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);
5821       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);
5822       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);
5823     END IF;
5824 
5825     -- ************************************
5826     -- STEP 1. Initialization and error checks
5827 
5828     l_match_str := ' AND ';
5829     IF p_match_type = 'AND' THEN
5830       l_match_str := ' AND ';
5831     ELSIF p_match_type = 'OR' THEN
5832       l_match_str := ' OR ';
5833     END IF;
5837     g_score_until_thresh := false;
5834     l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, 
5835        HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
5836        p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5838     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5839 
5840     -- ************************************************************
5841     -- STEP 2. Setup of intermedia query strings for Acquisition query
5842     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5843     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);
5844 
5845     -- Setup Search Context ID
5846     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5847     x_search_ctx_id := l_search_ctx_id;
5848     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5849       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);
5850       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);
5851       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);
5852     END IF;
5853 
5854     IF l_contact_pt_contains_str IS NOT NULL THEN
5855       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5856       cnt := 1;
5857       LOOP
5858         FETCH l_contact_pt_cur INTO 
5859             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;
5860         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5861         IF (p_dup_contact_point_id IS NULL OR (
5862                p_dup_contact_point_id IS NOT NULL AND 
5863                l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND 
5864                p_dup_contact_point_id <>  l_contact_pt_id)) THEN   
5865             H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;
5866             H_PARTY_ID(cnt) := l_cpt_party_id;
5867             H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5868             cnt := cnt+1;
5869     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5870       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);
5871       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);
5872       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);
5873     END IF;
5874         END IF; 
5875       END LOOP;
5876       CLOSE l_contact_pt_cur;
5877     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5878       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);
5879     END IF;
5880       x_num_matches := 0; 
5881       FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP
5882     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5883       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);
5884       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);
5885     END IF;
5886         IF (H_SCORE(I)/l_entered_max_score) >= (77/700) THEN
5887         INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
5888             l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);
5889             x_num_matches := x_num_matches + 1; 
5890         END IF;
5891       END LOOP; 
5892     END IF;
5893     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5894       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);
5895     END IF;
5896 EXCEPTION
5897   WHEN FND_API.G_EXC_ERROR THEN
5898     RAISE FND_API.G_EXC_ERROR;
5899   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5900     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5901   WHEN OTHERS THEN
5902     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5903     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.get_matching_contact_points');
5904     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5905     FND_MSG_PUB.ADD;
5906     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5907 END get_matching_contact_points;
5908 
5909    /**********************************************************
5910    This procedure finds the score details for a specific party that 
5911    matched 
5912 
5913    **********************************************************/
5914 
5915 PROCEDURE get_score_details (
5916         p_rule_id               IN      NUMBER,
5917         p_party_id              IN      NUMBER,
5918         p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
5919         p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
5920         p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
5921         p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
5922         x_search_ctx_id         IN OUT  NUMBER
5923 ) IS
5924 
5928   l_contact_contains_str VARCHAR2(32000);
5925   -- Strings to hold the generated Intermedia query strings
5926   l_party_contains_str VARCHAR2(32000); 
5927   l_party_site_contains_str VARCHAR2(32000);
5929   l_contact_pt_contains_str VARCHAR2(32000);
5930   l_tmp VARCHAR2(32000);
5931 
5932   -- Other local variables
5933   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5934   -- For Score calculation
5935   l_max_score NUMBER;
5936   l_entered_max_score NUMBER;
5937   FIRST BOOLEAN;
5938   l_search_ctx_id NUMBER; -- Generated Search Context ID
5939 
5940   l_TX39 VARCHAR2(2000);
5941   l_max_TX39 VARCHAR2(2000);
5942   l_TX32 VARCHAR2(2000);
5943   l_max_TX32 VARCHAR2(2000);
5944   l_TX33 VARCHAR2(2000);
5945   l_max_TX33 VARCHAR2(2000);
5946   l_TX9 VARCHAR2(2000);
5947   l_max_TX9 VARCHAR2(2000);
5948   l_TX22 VARCHAR2(2000);
5949   l_max_TX22 VARCHAR2(2000);
5950   l_TX35 VARCHAR2(2000);
5951   l_max_TX35 VARCHAR2(2000);
5952   l_TX1 VARCHAR2(2000);
5953   l_max_TX1 VARCHAR2(2000);
5954   l_TX3 VARCHAR2(2000);
5955   l_max_TX3 VARCHAR2(2000);
5956   l_TX15 VARCHAR2(2000);
5957   l_max_TX15 VARCHAR2(2000);
5958   l_TX4 VARCHAR2(2000);
5959   l_max_TX4 VARCHAR2(2000);
5960   l_TX10 VARCHAR2(2000);
5961   l_max_TX10 VARCHAR2(2000);
5962   l_TX11 VARCHAR2(2000);
5963   l_max_TX11 VARCHAR2(2000);
5964   l_TX5 VARCHAR2(2000);
5965   l_max_TX5 VARCHAR2(2000);
5966   l_TX40 VARCHAR2(2000);
5967   l_max_TX40 VARCHAR2(2000);
5968   l_TX34 VARCHAR2(2000);
5969   l_max_TX34 VARCHAR2(2000);
5970   l_TX14 VARCHAR2(2000);
5971   l_max_TX14 VARCHAR2(2000);
5972   l_TX17 VARCHAR2(2000);
5973   l_max_TX17 VARCHAR2(2000);
5974   l_TX6 VARCHAR2(2000);
5975   l_max_TX6 VARCHAR2(2000);
5976   H_SCORES HZ_PARTY_SEARCH.score_list;
5977 
5978   l_score NUMBER;
5979   l_match_idx NUMBER;
5980   l_idx NUMBER;
5981   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5982   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5983   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5984   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5985   l_party_id NUMBER;
5986   l_ps_party_id NUMBER;
5987   l_ct_party_id NUMBER;
5988   l_cpt_party_id NUMBER;
5989   l_cpt_ps_id NUMBER;
5990   l_cpt_contact_id NUMBER;
5991   l_cpt_type VARCHAR2(100);
5992   l_party_site_id NUMBER;
5993   l_org_contact_id NUMBER;
5994   l_contact_pt_id NUMBER;
5995   l_ps_contact_id NUMBER;
5996   l_max_id NUMBER;
5997   l_max_idx NUMBER;
5998 
5999   l_index NUMBER;
6000   l_party_max_score NUMBER;
6001   l_ps_max_score NUMBER;
6002   l_contact_max_score NUMBER;
6003   l_cpt_max_score NUMBER;
6004 
6005   --Fix for bug 4417124 
6006   l_use_contact_addr_info BOOLEAN:=TRUE;
6007   l_use_contact_cpt_info  BOOLEAN:=TRUE;
6008 
6009   BEGIN
6010 
6011     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6012       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);
6013     END IF;
6014     -- ************************************
6015     -- STEP 1. Initialization and error checks
6016 
6017     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);
6018     g_score_until_thresh := false;
6019     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
6020     -- ************************************************************
6021     -- STEP 2. Setup of intermedia query strings for Acquisition query
6022     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
6023     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
6024     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
6025     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
6026 
6027     -- Setup Search Context ID
6028     IF x_search_ctx_id IS NULL THEN
6029       SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
6030       x_search_ctx_id := l_search_ctx_id;
6031     ELSE
6032       l_search_ctx_id := x_search_ctx_id;
6033     END IF;
6034 
6035     open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);
6036     LOOP 
6037         FETCH l_party_cur INTO
6038            l_party_id , l_TX32, l_TX33, l_TX34, l_TX35, l_TX40, l_TX39;
6039         EXIT WHEN l_party_cur%NOTFOUND;
6040           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,l_TX40,l_TX39,1);
6041     END LOOP;
6042     CLOSE l_party_cur;
6043 
6044     IF l_party_site_contains_str IS NOT NULL THEN
6045       l_max_score := 0;
6046       l_max_id := 0;
6047       l_max_idx := 0;
6048       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_addr_info THEN
6049         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'Y','N',l_party_site_cur);
6050       ELSE
6051         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'N','N',l_party_site_cur);
6052       END IF;
6053       LOOP
6054         FETCH l_party_site_cur INTO 
6055             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;
6056         EXIT WHEN l_party_site_cur%NOTFOUND;
6057         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);
6058         IF l_score > l_max_score THEN
6062           l_max_TX9 := l_TX9;
6059           l_max_score := l_score;
6060           l_max_id := l_party_site_id;
6061           l_max_idx := l_match_idx;
6063           l_max_TX22 := l_TX22;
6064           l_max_TX3 := l_TX3;
6065           l_max_TX15 := l_TX15;
6066           l_max_TX4 := l_TX4;
6067           l_max_TX10 := l_TX10;
6068           l_max_TX11 := l_TX11;
6069           l_max_TX14 := l_TX14;
6070           l_max_TX17 := l_TX17;
6071         END IF;
6072       END LOOP;
6073       CLOSE l_party_site_cur;
6074       IF l_max_score>0 THEN
6075         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);
6076       END IF;
6077     END IF;
6078 
6079     IF l_contact_contains_str IS NOT NULL THEN
6080       l_max_score := 0;
6081       l_max_id := 0;
6082       l_max_idx := 0;
6083       open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);
6084       LOOP
6085         FETCH l_contact_cur INTO 
6086             l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
6087         EXIT WHEN l_contact_cur%NOTFOUND;
6088         l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
6089         IF l_score > l_max_score THEN
6090           l_max_score := l_score;
6091           l_max_id := l_org_contact_id;
6092           l_max_idx := l_match_idx;
6093           l_max_TX5 := l_TX5;
6094           l_max_TX6 := l_TX6;
6095         END IF;
6096       END LOOP;
6097       CLOSE l_contact_cur;
6098       IF l_max_score>0 THEN
6099         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);
6100       END IF;
6101     END IF;
6102 
6103     IF l_contact_pt_contains_str IS NOT NULL THEN
6104       l_max_score := 0;
6105       l_max_id := 0;
6106       l_max_idx := 0;
6107       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_cpt_info THEN
6108         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'Y','N',l_contact_pt_cur);
6109       ELSE
6110         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'N','N',l_contact_pt_cur);
6111       END IF;
6112       LOOP
6113         FETCH l_contact_pt_cur INTO 
6114             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;
6115         EXIT WHEN l_contact_pt_cur%NOTFOUND;
6116         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
6117         IF l_score > l_max_score THEN
6118           l_max_score := l_score;
6119           l_max_id := l_contact_pt_id;
6120           l_max_idx := l_match_idx;
6121           l_max_TX1 := l_TX1;
6122           l_max_TX5 := l_TX5;
6123           l_max_TX6 := l_TX6;
6124         END IF;
6125       END LOOP;
6126       IF l_max_score>0 THEN
6127         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);
6128       END IF;
6129       CLOSE l_contact_pt_cur;
6130     END IF;
6131     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6132       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);
6133     END IF;
6134 EXCEPTION
6135   WHEN FND_API.G_EXC_ERROR THEN
6136     RAISE FND_API.G_EXC_ERROR;
6137   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6138     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6139   WHEN OTHERS THEN
6140     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6141     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.get_score_details');
6142     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6143     FND_MSG_PUB.ADD;
6144     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6145 END get_score_details;
6146 
6147 
6148 /************************************************
6149   This procedure retrieves the match rule attributes into 
6150   the search record structures
6151 ************************************************/
6152 
6153 PROCEDURE get_party_for_search (
6154         p_party_id              IN      NUMBER,
6155         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6156         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6157         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6158         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6159 ) IS
6160   l_party_id NUMBER;
6161   l_party_site_ids HZ_PARTY_SEARCH.IDList;
6162   l_contact_ids HZ_PARTY_SEARCH.IDList;
6163   l_contact_pt_ids HZ_PARTY_SEARCH.IDList;
6164   ps NUMBER :=1;
6165   cpt NUMBER :=1;
6166   ct NUMBER :=1;
6167   l_use_contact_info varchar2(1);
6168 BEGIN
6169 
6170     l_use_contact_info := 'Y';
6171   IF nvl(FND_PROFILE.VALUE('HZ_DQM_REL_PARTY_MATCH'),'N')='Y' THEN
6172     l_use_contact_info := 'N';
6173   END IF;
6174   l_party_id := p_party_id;
6175   FOR PARTY_SITES IN (
6176  SELECT party_site_id FROM (
6177      SELECT party_site_id,identifying_address_flag
6178       FROM HZ_PARTY_SITES
6179       WHERE party_id = p_party_id
6180       AND (status is null OR status = 'A') 
6181       AND identifying_address_flag='Y'
6182       UNION
6183 
6184      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
6188       AND (identifying_address_flag IS NULL OR identifying_address_flag = 'N')
6185       FROM HZ_PARTY_SITES
6186       WHERE party_id = p_party_id
6187       AND (status is null OR status = 'A') 
6189       AND ROWNUM<6
6190       UNION
6191 
6192      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
6193       FROM HZ_PARTY_SITES
6194       WHERE (status is null OR status = 'A') 
6195       AND party_id in (
6196         SELECT party_id
6197         FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
6198         WHERE HZ_RELATIONSHIPS.object_id = p_party_id
6199         AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6200         AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6201         AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6202         and l_use_contact_info = 'Y'
6203      ) 
6204      AND ROWNUM<6
6205 ) order by identifying_address_flag desc
6206     ) LOOP
6207       l_party_site_ids(ps) := PARTY_SITES.party_site_id;
6208       ps:=ps+1;
6209   END LOOP;
6210     FOR CONTACTS IN (
6211       SELECT org_contact_id
6212       FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
6213       WHERE HZ_RELATIONSHIPS.object_id = p_party_id
6214       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6215       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6216       AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
6217       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6218       AND ROWNUM<6 
6219     ) LOOP
6220       l_contact_ids(ct) := CONTACTS.org_contact_id;
6221       ct := ct+1;
6222     END LOOP;
6223     FOR CONTACT_POINTS IN (
6224       SELECT CONTACT_POINT_ID
6225       FROM HZ_CONTACT_POINTS 
6226       WHERE PRIMARY_FLAG = 'Y'
6227       AND owner_table_name = 'HZ_PARTIES'
6228       AND owner_table_id = p_party_id
6229 
6230       UNION
6231 
6232       SELECT CONTACT_POINT_ID
6233       FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS 
6234       WHERE PRIMARY_FLAG = 'Y'
6235       AND owner_table_name = 'HZ_PARTIES'
6236       AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id
6237       AND HZ_RELATIONSHIPS.object_id = p_party_id
6238       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6239       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6240       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6241         and l_use_contact_info = 'Y'
6242       AND ROWNUM<6
6243       UNION
6244 
6245       SELECT CONTACT_POINT_ID
6246       FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES  
6247       WHERE PRIMARY_FLAG = 'Y'
6248       AND owner_table_name = 'HZ_PARTY_SITES'
6249       AND owner_table_id = party_site_id 
6250       AND PARTY_ID = p_party_id 
6251       AND IDENTIFYING_ADDRESS_FLAG = 'Y') LOOP
6252       l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;
6253       cpt := cpt+1;
6254     END LOOP;
6255     get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,
6256           x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);
6257 EXCEPTION
6258   WHEN FND_API.G_EXC_ERROR THEN
6259     RAISE FND_API.G_EXC_ERROR;
6260   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6261     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6262   WHEN OTHERS THEN
6263     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6264     FND_MESSAGE.SET_TOKEN('PROC','get_party_for_search');
6265     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6266     FND_MSG_PUB.ADD;
6267     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6268 END get_party_for_search;
6269 
6270 PROCEDURE get_search_criteria (
6271         p_party_id              IN      NUMBER,
6272         p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,
6273         p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,
6274         p_contact_pt_ids        IN      HZ_PARTY_SEARCH.IDList,
6275         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6276         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6277         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6278         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6279 ) IS
6280 BEGIN
6281 
6282    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6283       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);
6284     END IF;
6285     IF p_party_id IS NOT NULL THEN
6286    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6287       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);
6288     END IF;
6289       get_party_rec(p_party_id, x_party_search_rec);
6290     END IF;
6291     IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN
6292    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6293       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);
6294     END IF;
6295       get_party_site_rec(p_party_site_ids, x_party_site_list);
6296     END IF;
6297     IF p_contact_ids IS NOT NULL AND p_contact_ids.COUNT>0 THEN
6298    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6302     END IF;
6299       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);
6300     END IF;
6301       get_contact_rec(p_contact_ids, x_contact_list);
6303     IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN
6304    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6305       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);
6306     END IF;
6307       get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);
6308     END IF;
6309 EXCEPTION
6310   WHEN FND_API.G_EXC_ERROR THEN
6311     RAISE FND_API.G_EXC_ERROR;
6312   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6313     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6314   WHEN OTHERS THEN
6315     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6316     FND_MESSAGE.SET_TOKEN('PROC','get_search_criteria');
6317     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6318     FND_MSG_PUB.ADD;
6319     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6320 END get_search_criteria;
6321 
6322 
6323 /************************************************
6324   This procedure retrieves the match rule party attributes into 
6325   the party search record structure 
6326 ************************************************/
6327 
6328 PROCEDURE get_party_rec (
6329         p_party_id              IN      NUMBER,
6330         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type
6331 ) IS
6332     l_party_type VARCHAR2(255);
6333 BEGIN
6334 
6335    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6336       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);
6337     END IF;
6338     SELECT PARTY_TYPE INTO l_party_type
6339     FROM HZ_PARTIES
6340     WHERE PARTY_ID = p_party_id;
6341 
6342    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6343       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);
6344     END IF;
6345     IF l_party_type = 'ORGANIZATION' THEN
6346       SELECT 
6347         translate(HZ_PARTIES.PARTY_NUMBER, '%',' ')
6348       INTO 
6349         x_party_search_rec.PARTY_NUMBER
6350       FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES
6351       WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id
6352       AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL
6353       AND HZ_PARTIES.party_id = p_party_id;
6354     ELSIF l_party_type = 'PERSON' THEN
6355       SELECT 
6356         translate(HZ_PARTIES.PARTY_NUMBER, '%',' ')
6357       INTO 
6358         x_party_search_rec.PARTY_NUMBER
6359       FROM HZ_PARTIES, HZ_PERSON_PROFILES
6360       WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id
6361       AND HZ_PERSON_PROFILES.effective_end_date is NULL
6362       AND HZ_PARTIES.party_id = p_party_id;
6363     END IF;
6364     x_party_search_rec.PARTY_TYPE := l_party_type;
6365    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6366       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);
6367     END IF;
6368     x_party_search_rec.ALL_ACCOUNT_NAMES:=
6369        HZ_PARTY_ACQUIRE.get_account_info(p_party_id , 'PARTY','ALL_ACCOUNT_NAMES');
6370     x_party_search_rec.ALL_ACCOUNT_NUMBERS:=
6371        HZ_PARTY_ACQUIRE.get_account_info(p_party_id , 'PARTY','ALL_ACCOUNT_NUMBERS');
6372     x_party_search_rec.PARTY_ALL_NAMES:=
6373        HZ_PARTY_ACQUIRE.get_known_as(p_party_id , 'PARTY','PARTY_ALL_NAMES');
6374 
6375 EXCEPTION
6376   WHEN OTHERS THEN
6377     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6378     FND_MESSAGE.SET_TOKEN('PROC','get_party_rec');
6379     FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_id);
6380     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6381     FND_MSG_PUB.ADD;
6382     RAISE FND_API.G_EXC_ERROR;
6383 END get_party_rec;
6384 
6385 /************************************************
6386   This procedure retrieves the match rule party site attributes into 
6387   the party site search record structure 
6388 ************************************************/
6389 
6390 PROCEDURE get_party_site_rec (
6391         p_party_site_ids       IN      HZ_PARTY_SEARCH.IDList,
6392         x_party_site_list      OUT NOCOPY HZ_PARTY_SEARCH.party_site_list
6393 ) IS
6394   CURSOR c_party_sites(cp_party_site_id NUMBER) IS
6395     SELECT party_site_id
6396       ,translate(HZ_LOCATIONS.CITY, '%',' ')
6397       ,translate(HZ_LOCATIONS.COUNTRY, '%',' ')
6398       ,translate(HZ_PARTY_SITES.PARTY_SITE_NUMBER, '%',' ')
6399       ,translate(HZ_LOCATIONS.POSTAL_CODE, '%',' ')
6400       ,translate(HZ_LOCATIONS.STATE, '%',' ')
6401     FROM HZ_PARTY_SITES, HZ_LOCATIONS
6402     WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id
6403     AND   HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;
6404 
6405   I NUMBER;
6406   J NUMBER:=1;
6407   l_party_site_id NUMBER;
6408 
6409 BEGIN
6410 
6411    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6412       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);
6413     END IF;
6414     FOR I IN 1..p_party_site_ids.COUNT LOOP
6418         FETCH c_party_sites INTO
6415       l_party_site_id := p_party_site_ids(I);
6416       OPEN c_party_sites(p_party_site_ids(I));
6417       LOOP
6419              l_party_site_id
6420            ,x_party_site_list(J).CITY
6421            ,x_party_site_list(J).COUNTRY
6422            ,x_party_site_list(J).PARTY_SITE_NUMBER
6423            ,x_party_site_list(J).POSTAL_CODE
6424            ,x_party_site_list(J).STATE
6425         ;
6426         EXIT WHEN c_party_sites%NOTFOUND;
6427 
6428    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6429       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);
6430     END IF;
6431         x_party_site_list(J).ADDRESS:=
6432        HZ_PARTY_ACQUIRE.get_address(l_party_site_id , 'PARTY_SITES','ADDRESS');
6433         J:=J+1;
6434 
6435       END LOOP;
6436       CLOSE c_party_sites;
6437     END LOOP;
6438 
6439 EXCEPTION
6440   WHEN OTHERS THEN
6441     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6442     FND_MESSAGE.SET_TOKEN('PROC','get_party_site_rec');
6443     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_party_site_id);
6444     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6445     FND_MSG_PUB.ADD;
6446     RAISE FND_API.G_EXC_ERROR;
6447 END get_party_site_rec;
6448 
6449 /************************************************
6450   This procedure retrieves the match rule contact attributes into 
6451   the contact search record structure 
6452 ************************************************/
6453 
6454 PROCEDURE get_contact_rec (
6455         p_contact_ids       IN      HZ_PARTY_SEARCH.IDList,
6456         x_contact_list      OUT NOCOPY HZ_PARTY_SEARCH.contact_list
6457 ) IS
6458   CURSOR c_contacts(cp_org_contact_id NUMBER) IS
6459     SELECT org_contact_id
6460     FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES
6461     WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id
6462     AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6463     AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6464     AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
6465     AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6466     AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id
6467     AND HZ_PERSON_PROFILES.effective_end_date IS NULL;
6468 
6469   I NUMBER;
6470   l_org_contact_id NUMBER;
6471   J NUMBER:=1;
6472   BEGIN
6473 
6474    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6475       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);
6476     END IF;
6477     FOR I IN 1..p_contact_ids.COUNT LOOP
6478       l_org_contact_id := p_contact_ids(I);
6479       OPEN c_contacts(p_contact_ids(I));
6480       LOOP
6481         FETCH c_contacts INTO
6482              l_org_contact_id
6483         ;
6484         EXIT WHEN c_contacts%NOTFOUND;
6485 
6486    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6487       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);
6488     END IF;
6489         x_contact_list(J).CONTACT_NAME:=
6490        HZ_PARTY_ACQUIRE.get_contact_name(l_org_contact_id , 'CONTACTS','CONTACT_NAME');
6491 
6492         J:=J+1;
6493       END LOOP;
6494       CLOSE c_contacts;
6495     END LOOP;
6496 
6497 EXCEPTION
6498   WHEN OTHERS THEN
6499     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6500     FND_MESSAGE.SET_TOKEN('PROC','get_contact_rec');
6501     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_org_contact_id);
6502     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6503     FND_MSG_PUB.ADD;
6504     RAISE FND_API.G_EXC_ERROR;
6505 END get_contact_rec;
6506 
6507 /************************************************
6508   This procedure retrieves the match rule contact point attributes into 
6509   the contact point search record structure 
6510 ************************************************/
6511 
6512 PROCEDURE get_contact_point_rec (
6513         p_contact_point_ids     IN  HZ_PARTY_SEARCH.IDList,
6514         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6515 ) IS
6516 
6517   -- Cursor to fetch primary contact points for party
6518   CURSOR c_cpts(cp_contact_point_id NUMBER) IS
6519     SELECT contact_point_id, contact_point_type
6520       ,translate(HZ_CONTACT_POINTS.EMAIL_ADDRESS, '%',' ')
6521     FROM HZ_CONTACT_POINTS
6522     WHERE contact_point_id = cp_contact_point_id;
6523 
6524   I NUMBER;
6525   l_contact_point_id NUMBER;
6526   J NUMBER:=1;
6527   BEGIN
6528 
6529    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6530       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);
6531     END IF;
6532     FOR I in 1..p_contact_point_ids.COUNT LOOP
6533       l_contact_point_id := p_contact_point_ids(I);
6534       OPEN c_cpts(p_contact_point_ids(I));
6535       LOOP
6536         FETCH c_cpts INTO
6537              l_contact_point_id, x_contact_point_list(J).contact_point_type
6538              ,x_contact_point_list(J).EMAIL_ADDRESS
6539         ;
6540         EXIT WHEN c_cpts%NOTFOUND;
6541 
6542    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6546        HZ_PARTY_ACQUIRE.get_phone_number(l_contact_point_id , 'CONTACT_POINTS','FLEX_FORMAT_PHONE_NUMBER');
6543       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);
6544     END IF;
6545         x_contact_point_list(J).FLEX_FORMAT_PHONE_NUMBER:=
6547         J:=J+1;
6548 
6549       END LOOP;
6550       CLOSE c_cpts;
6551     END LOOP;
6552 
6553 EXCEPTION
6554   WHEN OTHERS THEN
6555     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6556     FND_MESSAGE.SET_TOKEN('PROC','get_contact_point_rec');
6557     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_contact_point_id);
6558     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6559     FND_MSG_PUB.ADD;
6560     RAISE FND_API.G_EXC_ERROR;
6561 END get_contact_point_rec;
6562 
6563 /************************************************
6564   This procedure maps a search record from the logical
6565   record structure to the stage schema structure 
6566   for the PARTY Entity after applying 
6567   the defined transformations
6568 ************************************************/
6569 
6570 PROCEDURE MAP_PARTY_REC( 
6571     p_search_ctx IN BOOLEAN,
6572     p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, 
6573     x_entered_max_score OUT NUMBER,
6574     x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type
6575   ) IS 
6576   tmp VARCHAR2(4000);
6577   l_party_name VARCHAR2(4000);
6578 BEGIN
6579    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6580       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);
6581     END IF;
6582    IF p_search_ctx THEN
6583      x_stage_rec.TX8 := NULL;
6584      g_other_party_level_attribs:=FALSE;
6585     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL 
6586     OR p_search_rec.PARTY_NUMBER IS NOT NULL 
6587     OR p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL 
6588     THEN
6589       g_other_party_level_attribs:=TRUE;
6590     END IF;
6591      x_entered_max_score:=0;
6592     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
6593       x_entered_max_score := x_entered_max_score+60;
6594     END IF;
6595     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
6596       x_entered_max_score := x_entered_max_score+100;
6597     END IF;
6598     IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
6599       x_entered_max_score := x_entered_max_score+100;
6600     END IF;
6601     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6602       x_entered_max_score := x_entered_max_score+60;
6603     END IF;
6604     END IF;
6605   IF p_search_ctx THEN
6606     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
6607       x_stage_rec.TX33 := 
6608         HZ_TRANS_PKG.WRNAMES_CLEANSE(
6609              p_search_rec.ALL_ACCOUNT_NAMES
6610              ,null,'ALL_ACCOUNT_NAMES'
6611              ,'PARTY','SEARCH');
6612     ELSE
6613       x_stage_rec.TX33 := '';
6614     END IF;
6615   ELSE
6616     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
6617       tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
6618              x_stage_rec.TX33
6619              ,null,'ALL_ACCOUNT_NAMES'
6620              ,'PARTY','SCORE');
6621       IF tmp IS NOT NULL THEN
6622         x_stage_rec.TX33 := tmp;
6623       END IF;
6624     END IF;
6625   END IF;
6626   IF p_search_ctx THEN
6627     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
6628       x_stage_rec.TX32 := 
6629         HZ_TRANS_PKG.WRNAMES_EXACT(
6630              p_search_rec.ALL_ACCOUNT_NAMES
6631              ,null,'ALL_ACCOUNT_NAMES'
6632              ,'PARTY','SEARCH');
6633     ELSE
6634       x_stage_rec.TX32 := '';
6635     END IF;
6636   ELSE
6637     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
6638       tmp :=HZ_TRANS_PKG.WRNAMES_EXACT(
6639              x_stage_rec.TX32
6640              ,null,'ALL_ACCOUNT_NAMES'
6641              ,'PARTY','SCORE');
6642       IF tmp IS NOT NULL THEN
6643         x_stage_rec.TX32 := tmp;
6644       END IF;
6645     END IF;
6646   END IF;
6647   IF p_search_ctx THEN
6648     IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
6649       x_stage_rec.TX35 := 
6650         HZ_TRANS_PKG.RM_SPLCHAR(
6651              p_search_rec.ALL_ACCOUNT_NUMBERS
6652              ,null,'ALL_ACCOUNT_NUMBERS'
6653              ,'PARTY','SEARCH');
6654     ELSE
6655       x_stage_rec.TX35 := '';
6656     END IF;
6657   ELSE
6658     IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
6659       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
6660              x_stage_rec.TX35
6661              ,null,'ALL_ACCOUNT_NUMBERS'
6662              ,'PARTY','SCORE');
6663       IF tmp IS NOT NULL THEN
6664         x_stage_rec.TX35 := tmp;
6665       END IF;
6666     END IF;
6667   END IF;
6668   IF p_search_ctx THEN
6669     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6670       x_stage_rec.TX40 := 
6671         HZ_TRANS_PKG.WRNAMES_CLEANSE(
6672              p_search_rec.PARTY_ALL_NAMES
6673              ,null,'PARTY_ALL_NAMES'
6674              ,'PARTY','SEARCH');
6675     ELSE
6676       x_stage_rec.TX40 := '';
6677     END IF;
6678   ELSE
6679     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6680       tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
6681              x_stage_rec.TX40
6682              ,null,'PARTY_ALL_NAMES'
6683              ,'PARTY','SCORE');
6687     END IF;
6684       IF tmp IS NOT NULL THEN
6685         x_stage_rec.TX40 := tmp;
6686       END IF;
6688   END IF;
6689   IF p_search_ctx THEN
6690     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6691       x_stage_rec.TX39 := 
6692         HZ_TRANS_PKG.WRNAMES_EXACT(
6693              p_search_rec.PARTY_ALL_NAMES
6694              ,null,'PARTY_ALL_NAMES'
6695              ,'PARTY','SEARCH');
6696     ELSE
6697       x_stage_rec.TX39 := '';
6698     END IF;
6699   ELSE
6700     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6701       tmp :=HZ_TRANS_PKG.WRNAMES_EXACT(
6702              x_stage_rec.TX39
6703              ,null,'PARTY_ALL_NAMES'
6704              ,'PARTY','SCORE');
6705       IF tmp IS NOT NULL THEN
6706         x_stage_rec.TX39 := tmp;
6707       END IF;
6708     END IF;
6709   END IF;
6710   IF p_search_ctx THEN
6711     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
6712       x_stage_rec.TX34 := 
6713         HZ_TRANS_PKG.RM_SPLCHAR(
6714              p_search_rec.PARTY_NUMBER
6715              ,null,'PARTY_NUMBER'
6716              ,'PARTY','SEARCH');
6717     ELSE
6718       x_stage_rec.TX34 := '';
6719     END IF;
6720   ELSE
6721     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
6722       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
6723              x_stage_rec.TX34
6724              ,null,'PARTY_NUMBER'
6725              ,'PARTY','SCORE');
6726       IF tmp IS NOT NULL THEN
6727         x_stage_rec.TX34 := tmp;
6728       END IF;
6729     END IF;
6730   END IF;
6731   IF p_search_ctx THEN
6732     IF p_search_rec.PARTY_TYPE IS NOT NULL THEN 
6733       x_stage_rec.TX36 := 
6734         HZ_TRANS_PKG.EXACT(
6735              p_search_rec.PARTY_TYPE
6736              ,null,'PARTY_TYPE'
6737              ,'PARTY');
6738     ELSE
6739       x_stage_rec.TX36 := '';
6740     END IF;
6741   END IF;
6742     l_party_name := p_search_rec.PARTY_NAME;
6743     IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6744       l_party_name := p_search_rec.PARTY_ALL_NAMES;
6745     END IF;
6746     IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN
6747       x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,'PARTY_NAME','PARTY','SEARCH');
6748     END IF;
6749 EXCEPTION
6750   WHEN OTHERS THEN
6751     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6752     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_REC');
6753     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6754     FND_MSG_PUB.ADD;
6755     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6756 END;
6757 
6758 
6759 /************************************************
6760   This procedure maps a search record from the logical
6761   record structure to the stage schema structure 
6762   for the PARTY_SITES Entity after applying 
6763   the defined transformations
6764 ************************************************/
6765 
6766 PROCEDURE MAP_PARTY_SITE_REC( 
6767     p_search_ctx IN BOOLEAN,
6768     p_search_list IN HZ_PARTY_SEARCH.party_site_list, 
6769     x_entered_max_score OUT NUMBER,
6770     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list
6771   ) IS 
6772   l_current_max_score NUMBER;
6773   tmp VARCHAR2(4000);
6774 BEGIN
6775    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6776       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);
6777     END IF;
6778    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6779       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);
6780     END IF;
6781   IF p_search_ctx THEN
6782    g_ps_den_only:=TRUE;
6783     x_entered_max_score:=0;
6784     FOR I IN 1..p_search_list.COUNT LOOP
6785       l_current_max_score:=0;
6786       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6787         l_current_max_score := l_current_max_score+40;
6788         g_ps_den_only:=FALSE;
6789       END IF;
6790       IF p_search_list(I).CITY IS NOT NULL THEN 
6791         l_current_max_score := l_current_max_score+30;
6792       END IF;
6793       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6794         l_current_max_score := l_current_max_score+20;
6795       END IF;
6796       IF p_search_list(I).STATE IS NOT NULL THEN 
6797         l_current_max_score := l_current_max_score+20;
6798       END IF;
6799       IF p_search_list(I).PARTY_SITE_NUMBER IS NOT NULL THEN 
6800         l_current_max_score := l_current_max_score+50;
6801         g_ps_den_only:=FALSE;
6802       END IF;
6803       IF p_search_list(I).COUNTRY IS NOT NULL THEN 
6804         l_current_max_score := l_current_max_score+10;
6805       END IF;
6806       IF l_current_max_score>x_entered_max_score THEN
6807         x_entered_max_score:=l_current_max_score;
6808       END IF;
6809     END LOOP;
6810   END IF;
6811   FOR I IN 1..p_search_list.COUNT LOOP
6812     IF p_search_ctx THEN
6813       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6814         x_stage_list(I).TX4 := 
6815           HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6816              p_search_list(I).ADDRESS
6817              ,null,'ADDRESS'
6818              ,'PARTY_SITES','SEARCH');
6819       ELSE
6820         x_stage_list(I).TX4 := '';
6821       END IF;
6822     ELSE
6823       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6824         tmp := HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6828         IF tmp IS NOT NULL THEN
6825              x_stage_list(I).TX4
6826              ,null,'ADDRESS'
6827              ,'PARTY_SITES','SCORE');
6829           x_stage_list(I).TX4 := tmp;
6830         END IF;
6831       END IF;
6832     END IF;
6833   END LOOP;
6834   FOR I IN 1..p_search_list.COUNT LOOP
6835     IF p_search_ctx THEN
6836       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6837         x_stage_list(I).TX3 := 
6838           HZ_TRANS_PKG.WRADDRESS_EXACT(
6839              p_search_list(I).ADDRESS
6840              ,null,'ADDRESS'
6841              ,'PARTY_SITES','SEARCH');
6842       ELSE
6843         x_stage_list(I).TX3 := '';
6844       END IF;
6845     ELSE
6846       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6847         tmp := HZ_TRANS_PKG.WRADDRESS_EXACT(
6848              x_stage_list(I).TX3
6849              ,null,'ADDRESS'
6850              ,'PARTY_SITES','SCORE');
6851         IF tmp IS NOT NULL THEN
6852           x_stage_list(I).TX3 := tmp;
6853         END IF;
6854       END IF;
6855     END IF;
6856   END LOOP;
6857   FOR I IN 1..p_search_list.COUNT LOOP
6858     IF p_search_ctx THEN
6859       IF p_search_list(I).CITY IS NOT NULL THEN 
6860         x_stage_list(I).TX10 := 
6861           HZ_TRANS_PKG.CLEANSE(
6862              p_search_list(I).CITY
6863              ,null,'CITY'
6864              ,'PARTY_SITES');
6865       ELSE
6866         x_stage_list(I).TX10 := '';
6867       END IF;
6868     END IF;
6869   END LOOP;
6870   FOR I IN 1..p_search_list.COUNT LOOP
6871     IF p_search_ctx THEN
6872       IF p_search_list(I).CITY IS NOT NULL THEN 
6873         x_stage_list(I).TX9 := 
6874           HZ_TRANS_PKG.EXACT(
6875              p_search_list(I).CITY
6876              ,null,'CITY'
6877              ,'PARTY_SITES');
6878       ELSE
6879         x_stage_list(I).TX9 := '';
6880       END IF;
6881     END IF;
6882   END LOOP;
6883   FOR I IN 1..p_search_list.COUNT LOOP
6884     IF p_search_ctx THEN
6885       IF p_search_list(I).COUNTRY IS NOT NULL THEN 
6886         x_stage_list(I).TX22 := 
6887           HZ_TRANS_PKG.EXACT(
6888              p_search_list(I).COUNTRY
6889              ,null,'COUNTRY'
6890              ,'PARTY_SITES');
6891       ELSE
6892         x_stage_list(I).TX22 := '';
6893       END IF;
6894     END IF;
6895   END LOOP;
6896   FOR I IN 1..p_search_list.COUNT LOOP
6897     IF p_search_ctx THEN
6898       IF p_search_list(I).PARTY_SITE_NUMBER IS NOT NULL THEN 
6899         x_stage_list(I).TX17 := 
6900           HZ_TRANS_PKG.RM_SPLCHAR(
6901              p_search_list(I).PARTY_SITE_NUMBER
6902              ,null,'PARTY_SITE_NUMBER'
6903              ,'PARTY_SITES','SEARCH');
6904       ELSE
6905         x_stage_list(I).TX17 := '';
6906       END IF;
6907     ELSE
6908       IF p_search_list(I).PARTY_SITE_NUMBER IS NOT NULL THEN 
6909         tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6910              x_stage_list(I).TX17
6911              ,null,'PARTY_SITE_NUMBER'
6912              ,'PARTY_SITES','SCORE');
6913         IF tmp IS NOT NULL THEN
6914           x_stage_list(I).TX17 := tmp;
6915         END IF;
6916       END IF;
6917     END IF;
6918   END LOOP;
6919   FOR I IN 1..p_search_list.COUNT LOOP
6920     IF p_search_ctx THEN
6921       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6922         x_stage_list(I).TX11 := 
6923           HZ_TRANS_PKG.RM_SPLCHAR(
6924              p_search_list(I).POSTAL_CODE
6925              ,null,'POSTAL_CODE'
6926              ,'PARTY_SITES','SEARCH');
6927       ELSE
6928         x_stage_list(I).TX11 := '';
6929       END IF;
6930     ELSE
6931       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6932         tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6933              x_stage_list(I).TX11
6934              ,null,'POSTAL_CODE'
6935              ,'PARTY_SITES','SCORE');
6936         IF tmp IS NOT NULL THEN
6937           x_stage_list(I).TX11 := tmp;
6938         END IF;
6939       END IF;
6940     END IF;
6941   END LOOP;
6942   FOR I IN 1..p_search_list.COUNT LOOP
6943     IF p_search_ctx THEN
6944       IF p_search_list(I).STATE IS NOT NULL THEN 
6945         x_stage_list(I).TX15 := 
6946           HZ_TRANS_PKG.WRSTATE_CLEANSE(
6947              p_search_list(I).STATE
6948              ,null,'STATE'
6949              ,'PARTY_SITES','SEARCH');
6950       ELSE
6951         x_stage_list(I).TX15 := '';
6952       END IF;
6953     ELSE
6954       IF p_search_list(I).STATE IS NOT NULL THEN 
6955         tmp := HZ_TRANS_PKG.WRSTATE_CLEANSE(
6956              x_stage_list(I).TX15
6957              ,null,'STATE'
6958              ,'PARTY_SITES','SCORE');
6959         IF tmp IS NOT NULL THEN
6960           x_stage_list(I).TX15 := tmp;
6961         END IF;
6962       END IF;
6963     END IF;
6964   END LOOP;
6965   FOR I IN 1..p_search_list.COUNT LOOP
6966     IF p_search_ctx THEN
6967       IF p_search_list(I).STATE IS NOT NULL THEN 
6968         x_stage_list(I).TX14 := 
6969           HZ_TRANS_PKG.WRSTATE_EXACT(
6970              p_search_list(I).STATE
6971              ,null,'STATE'
6972              ,'PARTY_SITES','SEARCH');
6973       ELSE
6974         x_stage_list(I).TX14 := '';
6975       END IF;
6976     ELSE
6977       IF p_search_list(I).STATE IS NOT NULL THEN 
6981              ,'PARTY_SITES','SCORE');
6978         tmp := HZ_TRANS_PKG.WRSTATE_EXACT(
6979              x_stage_list(I).TX14
6980              ,null,'STATE'
6982         IF tmp IS NOT NULL THEN
6983           x_stage_list(I).TX14 := tmp;
6984         END IF;
6985       END IF;
6986     END IF;
6987   END LOOP;
6988 EXCEPTION
6989   WHEN OTHERS THEN
6990     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6991     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_SITE_REC');
6992     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6993     FND_MSG_PUB.ADD;
6994     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6995 END;
6996 
6997 
6998 /************************************************
6999   This procedure maps a search record from the logical
7000   record structure to the stage schema structure 
7001   for the CONTACTS Entity after applying 
7002   the defined transformations
7003 ************************************************/
7004 
7005 PROCEDURE MAP_CONTACT_REC( 
7006     p_search_ctx IN BOOLEAN,
7007     p_search_list IN HZ_PARTY_SEARCH.contact_list, 
7008     x_entered_max_score OUT NUMBER,
7009     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list
7010   ) IS 
7011   l_current_max_score NUMBER;
7012   tmp VARCHAR2(4000);
7013 BEGIN
7014    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7015       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);
7016     END IF;
7017    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7018       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);
7019     END IF;
7020   IF p_search_ctx THEN
7021     x_entered_max_score:=0;
7022     FOR I IN 1..p_search_list.COUNT LOOP
7023       l_current_max_score:=0;
7024       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7025         l_current_max_score := l_current_max_score+50;
7026       END IF;
7027       IF l_current_max_score>x_entered_max_score THEN
7028         x_entered_max_score:=l_current_max_score;
7029       END IF;
7030     END LOOP;
7031   END IF;
7032   FOR I IN 1..p_search_list.COUNT LOOP
7033     IF p_search_ctx THEN
7034       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7035         x_stage_list(I).TX156 := 
7036           HZ_TRANS_PKG.SOUNDX(
7037              p_search_list(I).CONTACT_NAME
7038              ,null,'CONTACT_NAME'
7039              ,'CONTACTS');
7040       ELSE
7041         x_stage_list(I).TX156 := '';
7042       END IF;
7043     END IF;
7044   END LOOP;
7045   FOR I IN 1..p_search_list.COUNT LOOP
7046     IF p_search_ctx THEN
7047       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7048         x_stage_list(I).TX6 := 
7049           HZ_TRANS_PKG.WRPERSON_CLEANSE(
7050              p_search_list(I).CONTACT_NAME
7051              ,null,'CONTACT_NAME'
7052              ,'CONTACTS','SEARCH');
7053       ELSE
7054         x_stage_list(I).TX6 := '';
7055       END IF;
7056     ELSE
7057       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7058         tmp := HZ_TRANS_PKG.WRPERSON_CLEANSE(
7059              x_stage_list(I).TX6
7060              ,null,'CONTACT_NAME'
7061              ,'CONTACTS','SCORE');
7062         IF tmp IS NOT NULL THEN
7063           x_stage_list(I).TX6 := tmp;
7064         END IF;
7065       END IF;
7066     END IF;
7067   END LOOP;
7068   FOR I IN 1..p_search_list.COUNT LOOP
7069     IF p_search_ctx THEN
7070       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7071         x_stage_list(I).TX5 := 
7072           HZ_TRANS_PKG.WRPERSON_EXACT(
7073              p_search_list(I).CONTACT_NAME
7074              ,null,'CONTACT_NAME'
7075              ,'CONTACTS','SEARCH');
7076       ELSE
7077         x_stage_list(I).TX5 := '';
7078       END IF;
7079     ELSE
7080       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
7081         tmp := HZ_TRANS_PKG.WRPERSON_EXACT(
7082              x_stage_list(I).TX5
7083              ,null,'CONTACT_NAME'
7084              ,'CONTACTS','SCORE');
7085         IF tmp IS NOT NULL THEN
7086           x_stage_list(I).TX5 := tmp;
7087         END IF;
7088       END IF;
7089     END IF;
7090   END LOOP;
7091 EXCEPTION
7092   WHEN OTHERS THEN
7093     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7094     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_REC');
7095     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7096     FND_MSG_PUB.ADD;
7097     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7098 END;
7099 
7100 
7101 /************************************************
7102   This procedure maps a search record from the logical
7103   record structure to the stage schema structure 
7104   for the CONTACT_POINTS Entity after applying 
7105   the defined transformations
7106 ************************************************/
7107 
7108 PROCEDURE MAP_CONTACT_POINT_REC( 
7109     p_search_ctx IN BOOLEAN,
7110     p_search_list IN HZ_PARTY_SEARCH.contact_point_list, 
7111     x_entered_max_score OUT NUMBER,
7112     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list
7113   ) IS 
7114   l_current_max_score NUMBER;
7115   tmp VARCHAR2(4000);
7119   contact_pt_type		VARCHAR2(100),
7116   TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);
7117   l_cnt_pt_type_index INDEX_VARCHAR100_TBL;
7118   TYPE CONTACT_PT_REC_TYPE IS RECORD (
7120   max_score    		NUMBER) ;
7121   TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;
7122   l_cnt_pt_type contact_pt_list;
7123   N NUMBER := 1;
7124   x_modify VARCHAR2(1);
7125 BEGIN
7126    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7127       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);
7128     END IF;
7129    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7130       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);
7131     END IF;
7132   IF p_search_ctx THEN
7133     x_entered_max_score:=0;
7134     FOR I IN 1..p_search_list.COUNT LOOP
7135       l_current_max_score:=0;
7136       x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;
7137       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7138         l_current_max_score := l_current_max_score+80;
7139       END IF;
7140       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7141         l_current_max_score := l_current_max_score+80;
7142       END IF;
7143       x_modify := 'N';
7144       FOR J IN 1..l_cnt_pt_type.count LOOP
7145       if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then
7146          x_modify := 'Y';
7147       IF l_cnt_pt_type(J).max_score<l_current_max_score THEN
7148       l_cnt_pt_type(J).max_score :=l_current_max_score;
7149       EXIT;
7150       END IF;
7151       end if;
7152       END LOOP;
7153       if x_modify='N' then
7154       l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;
7155       l_cnt_pt_type(N).max_score := l_current_max_score;
7156       N:= N+1;
7157       end if;
7158     END LOOP;
7159    FOR M IN 1..l_cnt_pt_type.count LOOP
7160    x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;
7161    END LOOP;
7162   END IF;
7163   FOR I IN 1..p_search_list.COUNT LOOP
7164     IF p_search_ctx THEN
7165       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7166         x_stage_list(I).TX6 := 
7167           HZ_TRANS_PKG.CLEANSED_EMAIL(
7168              p_search_list(I).EMAIL_ADDRESS
7169              ,null,'EMAIL_ADDRESS'
7170              ,'CONTACT_POINTS','SEARCH');
7171       ELSE
7172         x_stage_list(I).TX6 := '';
7173       END IF;
7174     ELSE
7175       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7176         tmp := HZ_TRANS_PKG.CLEANSED_EMAIL(
7177              x_stage_list(I).TX6
7178              ,null,'EMAIL_ADDRESS'
7179              ,'CONTACT_POINTS','SCORE');
7180         IF tmp IS NOT NULL THEN
7181           x_stage_list(I).TX6 := tmp;
7182         END IF;
7183       END IF;
7184     END IF;
7185   END LOOP;
7186   FOR I IN 1..p_search_list.COUNT LOOP
7187     IF p_search_ctx THEN
7188       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7189         x_stage_list(I).TX5 := 
7190           HZ_TRANS_PKG.EXACT_EMAIL(
7191              p_search_list(I).EMAIL_ADDRESS
7192              ,null,'EMAIL_ADDRESS'
7193              ,'CONTACT_POINTS');
7194       ELSE
7195         x_stage_list(I).TX5 := '';
7196       END IF;
7197     END IF;
7198   END LOOP;
7199   FOR I IN 1..p_search_list.COUNT LOOP
7200     IF p_search_ctx THEN
7201       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7202         x_stage_list(I).TX1 := 
7203           HZ_TRANS_PKG.RM_SPLCHAR_CTX(
7204              p_search_list(I).FLEX_FORMAT_PHONE_NUMBER
7205              ,null,'FLEX_FORMAT_PHONE_NUMBER'
7206              ,'CONTACT_POINTS','SEARCH');
7207       ELSE
7208         x_stage_list(I).TX1 := '';
7209       END IF;
7210     ELSE
7211       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7212         tmp := HZ_TRANS_PKG.RM_SPLCHAR_CTX(
7213              x_stage_list(I).TX1
7214              ,null,'FLEX_FORMAT_PHONE_NUMBER'
7215              ,'CONTACT_POINTS','SCORE');
7216         IF tmp IS NOT NULL THEN
7217           x_stage_list(I).TX1 := tmp;
7218         END IF;
7219       END IF;
7220     END IF;
7221   END LOOP;
7222 EXCEPTION
7223   WHEN OTHERS THEN
7224     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7225     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_POINT_REC');
7226     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7227     FND_MSG_PUB.ADD;
7228     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7229 END;
7230 
7231 
7232 /************************************************
7233   This procedure checks if the input search criteria 
7234   is valid. It checks if : 
7235    1. At least one primary condition is passed
7236    2. Contact Point Type is not null for each condition
7237 ************************************************/
7238 
7239 FUNCTION check_prim_cond(
7240       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
7241       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
7242       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
7243       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list)
7244       RETURN BOOLEAN IS
7245   BEGIN
7249 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
7246     FOR I IN 1..p_contact_point_list.COUNT LOOP
7247       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (
7248 p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7250  ) THEN
7251         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
7252         FND_MSG_PUB.ADD;
7253         RAISE FND_API.G_EXC_ERROR;
7254       END IF;
7255     END LOOP;
7256 
7257     IF p_party_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
7258       RETURN TRUE;
7259     END IF;
7260     IF p_party_search_rec.PARTY_NUMBER IS NOT NULL THEN 
7261       RETURN TRUE;
7262     END IF;
7263     IF p_party_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
7264       RETURN TRUE;
7265     END IF;
7266     IF p_party_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
7267       RETURN TRUE;
7268     END IF;
7269     FOR I IN 1..p_party_site_list.COUNT LOOP
7270       IF p_party_site_list(I).ADDRESS IS NOT NULL THEN 
7271         RETURN TRUE;
7272       END IF;
7273     END LOOP;
7274     FOR I IN 1..p_party_site_list.COUNT LOOP
7275       IF p_party_site_list(I).CITY IS NOT NULL THEN 
7276         RETURN TRUE;
7277       END IF;
7278     END LOOP;
7279     FOR I IN 1..p_party_site_list.COUNT LOOP
7280       IF p_party_site_list(I).POSTAL_CODE IS NOT NULL THEN 
7281         RETURN TRUE;
7282       END IF;
7283     END LOOP;
7284     FOR I IN 1..p_party_site_list.COUNT LOOP
7285       IF p_party_site_list(I).STATE IS NOT NULL THEN 
7286         RETURN TRUE;
7287       END IF;
7288     END LOOP;
7289     FOR I IN 1..p_party_site_list.COUNT LOOP
7290       IF p_party_site_list(I).PARTY_SITE_NUMBER IS NOT NULL THEN 
7291         RETURN TRUE;
7292       END IF;
7293     END LOOP;
7294     FOR I IN 1..p_party_site_list.COUNT LOOP
7295       IF p_party_site_list(I).COUNTRY IS NOT NULL THEN 
7296         RETURN TRUE;
7297       END IF;
7298     END LOOP;
7299     FOR I IN 1..p_contact_list.COUNT LOOP
7300       IF p_contact_list(I).CONTACT_NAME IS NOT NULL THEN 
7301         RETURN TRUE;
7302       END IF;
7303     END LOOP;
7304     FOR I IN 1..p_contact_point_list.COUNT LOOP
7305       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7306         RETURN TRUE;
7307       END IF;
7308     END LOOP;
7309     FOR I IN 1..p_contact_point_list.COUNT LOOP
7310       IF p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7311         RETURN TRUE;
7312       END IF;
7313     END LOOP;
7314     RETURN FALSE;
7315 EXCEPTION
7316   WHEN FND_API.G_EXC_ERROR THEN
7317     RAISE FND_API.G_EXC_ERROR;
7318   WHEN OTHERS THEN
7319     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7320     FND_MESSAGE.SET_TOKEN('PROC','check_prim_cond');
7321     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7322     FND_MSG_PUB.ADD;
7323     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7324   END check_prim_cond;
7325 
7326 /************************************************
7327   This procedure checks if the input search condition 
7328   has party site criteria. 
7329 ************************************************/
7330 
7331 PROCEDURE check_party_site_cond(
7332       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
7333       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
7334 	   x_secondary		   OUT     BOOLEAN,
7335 	   x_primary		   OUT     BOOLEAN
7336 ) IS
7337   BEGIN
7338     x_primary:= FALSE;
7339     x_secondary:= FALSE;
7340     FOR I IN 1..p_party_site_list.COUNT LOOP
7341       IF p_party_site_list(I).ADDRESS IS NOT NULL 
7342          OR p_party_site_list(I).CITY IS NOT NULL
7343          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
7344          OR p_party_site_list(I).STATE IS NOT NULL
7345          OR p_party_site_list(I).PARTY_SITE_NUMBER IS NOT NULL
7346          OR p_party_site_list(I).COUNTRY IS NOT NULL
7347       THEN
7348         x_primary := TRUE;
7349       END IF;
7350       EXIT WHEN x_primary;
7351     END LOOP;
7352     FOR I IN 1..p_contact_point_list.COUNT LOOP
7353       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7354          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7355       THEN
7356         x_primary := TRUE;
7357       END IF;
7358       EXIT WHEN x_primary;
7359     END LOOP;
7360 
7361     FOR I IN 1..p_party_site_list.COUNT LOOP
7362       IF p_party_site_list(I).ADDRESS IS NOT NULL 
7363          OR p_party_site_list(I).CITY IS NOT NULL
7364          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
7365          OR p_party_site_list(I).STATE IS NOT NULL
7366          OR p_party_site_list(I).PARTY_SITE_NUMBER IS NOT NULL
7367          OR p_party_site_list(I).COUNTRY IS NOT NULL
7368       THEN
7369         x_secondary := TRUE;
7370       END IF;
7371       EXIT WHEN x_secondary;
7372     END LOOP;
7373     FOR I IN 1..p_contact_point_list.COUNT LOOP
7374       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7375          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7376       THEN
7377         x_secondary := TRUE;
7378       END IF;
7379       EXIT WHEN x_secondary;
7380     END LOOP;
7381 EXCEPTION
7382   WHEN OTHERS THEN
7383     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7384     FND_MESSAGE.SET_TOKEN('PROC','check_party_site_cond');
7385     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7386     FND_MSG_PUB.ADD;
7387     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7388   END check_party_site_cond;
7392   has contact criteria. 
7389 
7390 /************************************************
7391   This procedure checks if the input search condition 
7393 ************************************************/
7394 
7395 PROCEDURE check_contact_cond(
7396       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
7397       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
7398       x_secondary             OUT     BOOLEAN,
7399       x_primary               OUT     BOOLEAN
7400 ) IS
7401   BEGIN
7402     x_primary:= FALSE;
7403     x_secondary:= FALSE;
7404     FOR I IN 1..p_contact_list.COUNT LOOP
7405       IF p_contact_list(I).CONTACT_NAME IS NOT NULL 
7406       THEN
7407         x_primary := TRUE;
7408       END IF;
7409       EXIT WHEN x_primary;
7410     END LOOP;
7411 
7412     FOR I IN 1..p_contact_point_list.COUNT LOOP
7413       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7414          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7415       THEN
7416         x_primary := TRUE;
7417       END IF;
7418       EXIT WHEN x_primary;
7419     END LOOP;
7420 
7421     FOR I IN 1..p_contact_list.COUNT LOOP
7422       IF p_contact_list(I).CONTACT_NAME IS NOT NULL 
7423       THEN
7424         x_secondary := TRUE;
7425       END IF;
7426       EXIT WHEN x_secondary;
7427     END LOOP;
7428 
7429     FOR I IN 1..p_contact_point_list.COUNT LOOP
7430       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7431          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7432       THEN
7433         x_secondary := TRUE;
7434       END IF;
7435       EXIT WHEN x_secondary;
7436     END LOOP;
7437 EXCEPTION
7438   WHEN OTHERS THEN
7439     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7440     FND_MESSAGE.SET_TOKEN('PROC','check_contact_cond');
7441     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7442     FND_MSG_PUB.ADD;
7443     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7444   END check_contact_cond;
7445 
7446 /************************************************
7447   This procedure checks if the input search condition 
7448   has valid contact point criteria. 
7449 ************************************************/
7450 
7451 PROCEDURE check_contact_point_cond(
7452       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
7453       x_secondary             OUT     BOOLEAN,
7454       x_primary               OUT     BOOLEAN
7455 ) IS
7456   BEGIN
7457     x_primary:= FALSE;
7458     x_secondary:= FALSE;
7459 
7460     FOR I IN 1..p_contact_point_list.COUNT LOOP
7461       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN 
7462         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
7463         FND_MSG_PUB.ADD;
7464         RAISE FND_API.G_EXC_ERROR;
7465       END IF;
7466     END LOOP;
7467 
7468     FOR I IN 1..p_contact_point_list.COUNT LOOP
7469       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7470          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
7471       THEN
7472         x_primary := TRUE;
7473       END IF;
7474       EXIT WHEN x_primary;
7475     END LOOP;
7476     FOR I IN 1..p_contact_point_list.COUNT LOOP
7477       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL  
7478          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
7479       THEN
7480         x_secondary := TRUE;
7481       END IF;
7482       EXIT WHEN x_secondary;
7483     END LOOP;
7484 EXCEPTION
7485   WHEN OTHERS THEN
7486     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7487     FND_MESSAGE.SET_TOKEN('PROC','check_contact_point_cond');
7488     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7489     FND_MSG_PUB.ADD;
7490     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7491   END check_contact_point_cond;
7492 
7493 FUNCTION check_staged RETURN BOOLEAN IS
7494 
7495   CURSOR c_check_staged IS 
7496     SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL 
7497     WHERE nvl(STAGED_FLAG,'N') = 'N' 
7498     AND FUNCTION_ID in (
7499                 36
7500                 ,37
7501                 ,38
7502                 ,39
7503                 ,43
7504                 ,44
7505                 ,66
7506                 ,67
7507                 ,72
7508                 ,73
7509                 ,74
7510                 ,77
7511                 ,78
7512                 ,80
7513                 ,85
7514                 ,92
7515                 ,93
7516                 ,110
7517                 ,114
7518                 ,115
7519                 ,124
7520     );
7521   l_tmp NUMBER;
7522 BEGIN
7523   IF g_staged =  1 THEN
7524     RETURN TRUE;
7525   ELSIF g_staged = 0 THEN
7526     RETURN FALSE;
7527   END IF;
7528 
7529   OPEN c_check_staged;
7530   FETCH c_check_staged INTO l_tmp;
7531   IF c_check_staged%FOUND THEN
7532     CLOSE c_check_staged;
7533     g_staged := 0;
7534     RETURN FALSE;
7535   ELSE
7536     CLOSE c_check_staged;
7537     g_staged := 1;
7538     RETURN TRUE;
7539   END IF;
7540 END check_staged;
7541 
7542 -- Fix for Bug 4736139
7543 FUNCTION check_staged_var RETURN VARCHAR2 IS
7544   l_staged       VARCHAR2(1);
7545   l_staged_bool  BOOLEAN;
7546 BEGIN
7547   l_staged_bool := check_staged;
7548   IF l_staged_bool THEN
7549     l_staged := 'Y';
7550   ELSE
7551     l_staged := 'N';
7552   END IF;
7553   RETURN l_staged;
7554 END check_staged_var;
7555 -- End fix for Bug 4736139
7556 
7557 END;
7558