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