DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_38

Source


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