DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_48

Source


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