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