DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_7

Source


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