DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_8

Source


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