DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_3

Source


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