DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_40

Source


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