DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_99

Source


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