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