DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_98

Source


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