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