DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_39

Source


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