DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_99

Source


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