DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_53

Source


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