DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_39

Source


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