DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_38

Source


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