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  |      28-NOV-2012 Generated by HZ Match Rule Compiler
23  |
24  *=======================================================================*/
25 
26 -- ==========================================================================================
27 -- ============MATCH RULE COMPILER GENERATED CODE FOR SEARCH MATCH RULES ====================
28 -- ==========================================================================================
29 
30   TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;
31   call_order vlisttype;
32   call_max_score HZ_PARTY_SEARCH.IDList;
33   call_type vlisttype;
34   g_party_stage_rec  HZ_PARTY_STAGE.party_stage_rec_type;
35   g_party_site_stage_list  HZ_PARTY_STAGE.party_site_stage_list;
36   g_contact_stage_list  HZ_PARTY_STAGE.contact_stage_list;
37   g_contact_pt_stage_list  HZ_PARTY_STAGE.contact_pt_stage_list;
38   g_mappings  HZ_PARTY_SEARCH.IDList;
39   g_max_id NUMBER:=2000000000;
40   g_other_party_level_attribs BOOLEAN;
41 
42   g_debug_count                        NUMBER := 0;
43   g_score_until_thresh BOOLEAN:=false;
44  
45   g_thres_score NUMBER:=1000;
46   g_ps_den_only BOOLEAN;
47   g_index_owner VARCHAR2(255);
48   distinct_search_cpt_types NUMBER ; 
49 
50 PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)
51 IS
52      remainder_str VARCHAR2(4000);
53      current_pos NUMBER ;
54      temp VARCHAR2(300) ;
55 BEGIN
56      remainder_str := input_str ;
57      current_pos := 1 ;
58    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
59      WHILE remainder_str IS NOT NULL
60      LOOP
61      temp := substr(remainder_str, 1 , 255 );
62       hz_utility_v2pub.debug(p_message=>'  '||temp,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
63      current_pos := current_pos + 255 ;
64      remainder_str := substr(input_str,current_pos );
65      END LOOP ;
66     END IF;
67 END ;
68 FUNCTION check_estimate_hits (
69   p_entity VARCHAR2,
70   p_contains_str VARCHAR2) RETURN NUMBER IS
71   
72   ustatus VARCHAR2(255);
73   dstatus VARCHAR2(255);
74   l_bool BOOLEAN;
75   l_hits NUMBER := 0;
76 BEGIN
77   IF g_index_owner IS NULL THEN
78     l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,g_index_owner);
79   END IF;
80   IF p_entity='PARTY' THEN
81 
82     l_hits :=  CTX_QUERY.count_hits(
83         g_index_owner||'.'||'HZ_STAGE_PARTIES_T1',p_contains_str, false);
84   ELSIF p_entity='PARTY_SITES' THEN
85     l_hits :=  CTX_QUERY.count_hits(
86         g_index_owner||'.'||'HZ_STAGE_PARTY_SITES_T1',p_contains_str, false);
87   ELSIF p_entity='CONTACTS' THEN
88     l_hits :=  CTX_QUERY.count_hits(
89         g_index_owner||'.'||'HZ_STAGE_CONTACT_T1',p_contains_str, false);
90   ELSIF p_entity='CONTACT_POINTS' THEN
91     l_hits :=  CTX_QUERY.count_hits(
92         g_index_owner||'.'||'HZ_STAGE_CPT_T1',p_contains_str, false);
93   END IF;
94   RETURN floor(l_hits/2) ;
95   
96 
97   exception
98     when others then
99       if (instrb(SQLERRM,'DRG-51030')>0) then 
100         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
101         FND_MSG_PUB.ADD;
102         RAISE FND_API.G_EXC_ERROR;
103       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
104         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
105         FND_MSG_PUB.ADD;
106         RAISE FND_API.G_EXC_ERROR;
107       else 
108         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
109       end if;
110 END;
111 
112 
113 FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)
114 RETURN VARCHAR2
115 IS
116 p_person_restrict_sql VARCHAR2(32767);
117 p_restrict1_sql VARCHAR2(32767);
118 p_final_restrict_sql VARCHAR2(32767);
119 BEGIN
120    p_final_restrict_sql := p_restrict_sql ; 
121    IF p_restrict_sql IS NOT NULL
122    THEN
123      IF instrb(p_restrict_sql, 'STAGE.') > 0
124      THEN
125         p_restrict1_sql := replace( p_restrict_sql, 'STAGE.', 'stage1.');
126      ELSIF instrb(p_restrict_sql, 'stage.') > 0
127      THEN
128            p_restrict1_sql := replace( p_restrict_sql, 'stage.', 'stage1.');
129      END IF;
130     p_person_restrict_sql := 'exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r' 
131                                || ' where oc.org_contact_id = stage.org_contact_id and' 
132                                || ' r.relationship_id = oc.party_relationship_id' 
133                                || ' and r.subject_type = ''PERSON'' AND r.object_type = ''ORGANIZATION'' ' 
134                                || ' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id' 
135                                || ' and ' || p_restrict1_sql || ' ) )' ; 
136 p_final_restrict_sql := '((stage.org_contact_id is null and ' || p_restrict_sql || ') or (stage.org_contact_id is not null and ' 
137                            || p_person_restrict_sql ||  ' ))'; 
138  END IF;
139  return p_final_restrict_sql ;
140 END;
141   FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS
142     l_newidx NUMBER;
143   BEGIN 
144    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
145       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
146       hz_utility_v2pub.debug(p_message=>'calling the function map_id',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
147     END IF;
148    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
149       hz_utility_v2pub.debug(p_message=>'argument in_id =  '||in_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
150     END IF;
151     IF in_id<g_max_id THEN 
152       RETURN in_id;
153     ELSE
154       FOR I in 1..g_mappings.COUNT LOOP
155         IF in_id = g_mappings(I) THEN
156           RETURN (g_max_id+I);
157         END IF;
158       END LOOP;
159       l_newidx := g_mappings.COUNT+1;
160       g_mappings(l_newidx) := in_id;
161       RETURN (g_max_id+l_newidx);
162     END IF;
163   END;
164   FUNCTION GET_PARTY_SCORE 
165        (
166        p_table_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 /*+ INDEX(stage HZ_STAGE_PARTIES_T1) */ 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        ELSE 
1676            l_hint := '/*+ INDEX(stage HZ_STAGE_PARTIES_T1) */'; 
1677        END IF; 
1678      IF p_search_ctx_id IS NULL THEN
1679        l_sqlstr := 'SELECT   ' || l_hint || ' PARTY_ID , TX39, TX40, lpad(rtrim(TX41),9,chr(48))'||
1680                    ' FROM HZ_STAGED_PARTIES stage'||
1681                    ' WHERE contains( concat_col, :cont)>0'||
1682                    ' AND ((:TX36 IS NULL OR :TX36||'' '' =  stage.TX36))'||
1683                    ' AND ('||p_restrict_sql||')' ||
1684                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
1685           IF l_search_merged = 'Y' THEN  
1686                   l_sqlstr := l_sqlstr ;  
1687           ELSIF l_search_merged = 'I' THEN  
1688                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'', ''I'')';  
1689           ELSE  
1690                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'')';  
1691           END IF;  
1692  	   output_long_strings('----------------------------------------------------------');
1693       output_long_strings('Party Contains String = '||p_contains_str);
1694 		output_long_strings('Restrict Sql = '||p_restrict_sql);
1695        OPEN x_cursor FOR l_sqlstr USING p_contains_str
1696                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1697                     ,p_dup_party_id, p_dup_party_id;
1698      END IF;
1699    END IF;
1700   exception
1701     when others then
1702       if (instrb(SQLERRM,'DRG-51030')>0) then 
1703         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1704         FND_MSG_PUB.ADD;
1705         RAISE FND_API.G_EXC_ERROR;
1706       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
1707         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1708         FND_MSG_PUB.ADD;
1709         RAISE FND_API.G_EXC_ERROR;
1710       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
1711         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1712         FND_MSG_PUB.ADD;
1713         RAISE FND_API.G_EXC_ERROR;
1714       else 
1715         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1716     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1717     	 FND_MSG_PUB.ADD;
1718         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1719       end if;
1720   END;
1721 
1722   PROCEDURE open_party_site_cursor(
1723             p_dup_party_id NUMBER, 
1724             p_party_id NUMBER, 
1725             p_restrict_sql VARCHAR2, 
1726             p_contains_str  VARCHAR2, 
1727             p_search_ctx_id  NUMBER, 
1728             p_search_merged  VARCHAR2, 
1729             p_search_rel_sites  VARCHAR2, 
1730             p_person_api  VARCHAR2, 
1731             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1732   l_sqlstr VARCHAR2(4000);
1733   l_hint VARCHAR2(100); 
1734   l_check NUMBER; 
1735   l_check_dt NUMBER; 
1736   l_search_merged VARCHAR2(1); 
1737   l_status_sql VARCHAR2(100); 
1738   p_restrict_sql1 VARCHAR2(4000); 
1739  
1740   BEGIN
1741    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1742       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);
1743       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);
1744     END IF;
1745      IF (p_search_merged is null) then 
1746         l_search_merged := 'N';  
1747      ELSE 
1748         l_search_merged := p_search_merged; 
1749      END IF; 
1750      IF p_party_id IS NOT NULL THEN
1751    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1752       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);
1753     END IF;
1754        IF p_search_rel_sites = 'N' THEN
1755          OPEN x_cursor FOR 
1756           SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15
1757           FROM HZ_STAGED_PARTY_SITES stage
1758           WHERE contains( concat_col, p_contains_str)>0
1759           AND( (l_search_merged ='Y' )  
1760              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1761              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1762           AND stage.party_id = p_party_id; 
1763        ELSE
1764          OPEN x_cursor FOR 
1765           SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15
1766           FROM HZ_STAGED_PARTY_SITES stage
1767           WHERE contains( concat_col, p_contains_str)>0
1768           AND( (l_search_merged ='Y' )  
1769             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1770             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1771           AND stage.party_id = p_party_id 
1772           UNION
1773           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
1774           FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc
1775           WHERE contains( concat_col, p_contains_str)>0
1776           AND( (l_search_merged ='Y' )  
1777             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1778             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1779           AND r.object_id = p_party_id 
1780           AND r.subject_id = stage.party_id 
1781           AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
1782           AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
1783           AND r.relationship_id = oc.party_relationship_id
1784           AND oc.org_contact_id = stage.org_contact_id; 
1785       END IF;
1786     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1787    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1788       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);
1789     END IF;
1790       IF p_search_ctx_id IS NULL THEN
1791    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1792       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);
1793     END IF;
1794         OPEN x_cursor FOR 
1795           SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15
1796           FROM HZ_STAGED_PARTY_SITES stage
1797         WHERE contains( concat_col, p_contains_str)>0
1798         AND EXISTS (
1799           SELECT 1 FROM HZ_STAGED_PARTIES p
1800           WHERE p.PARTY_ID = stage.PARTY_ID
1801           AND( (l_search_merged ='Y' )  
1802           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
1803           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
1804           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
1805           AND( (l_search_merged ='Y' )  
1806            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1807            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1808           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1809       ELSE
1810    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1811       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);
1812     END IF;
1813         IF p_person_api = 'Y' THEN
1814           OPEN x_cursor FOR 
1815             SELECT  PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15
1816             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1817             WHERE contains( concat_col, p_contains_str)>0
1818           AND( (l_search_merged ='Y' )  
1819           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1820           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1821             AND d.search_context_id = p_search_ctx_id
1822             AND d.party_id = stage.party_id
1823             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
1824             UNION 
1825             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
1826             FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage
1827             WHERE contains( concat_col, p_contains_str)>0
1828           AND( (l_search_merged ='Y' )  
1829           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1830           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1831             AND d.search_context_id = p_search_ctx_id
1832             AND d.party_id = r.subject_id
1833             AND r.relationship_id = oc.party_relationship_id
1834             AND oc.org_contact_id = stage.org_contact_id
1835             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
1836         ELSE
1837           OPEN x_cursor FOR 
1838             SELECT  PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15
1839             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1840             WHERE contains( concat_col, p_contains_str)>0
1841             AND( (l_search_merged ='Y' )  
1842              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
1843              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
1844             AND d.search_context_id = p_search_ctx_id
1845             AND d.party_id = stage.party_id
1846             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1847         END IF;
1848       END IF;
1849     ELSE
1850    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1851       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);
1852     END IF;
1853        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
1854        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_PS'); 
1855        IF (l_check_dt > 0 ) THEN 
1856    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1857       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);
1858     END IF;
1859            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */'; 
1860        ELSIF (l_check > 0 ) THEN 
1861    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1862       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);
1863     END IF;
1864            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */'; 
1865        END IF; 
1866        IF l_search_merged = 'Y' THEN 
1867                l_status_sql := ' ' ;  
1868        ELSIF l_search_merged = 'I' THEN  
1869                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
1870        ELSE 
1871                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
1872        END IF; 
1873  		/*Performance fix for Bug:4589953*/ 
1874  		IF(p_person_api='Y') THEN 
1875        IF (l_check > 0 ) THEN 
1876        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
1877        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
1878        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
1879        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
1880        ELSE
1881 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
1882        END IF; 
1883        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'||
1884                    ' FROM HZ_STAGED_PARTY_SITES stage'||
1885                    ' WHERE contains( concat_col, :cont)>0'||
1886                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
1887                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
1888                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
1889          ' AND (ORG_CONTACT_ID IS NULL ' ||
1890        	' AND ('||p_restrict_sql||'))' ||
1891        	' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
1892          ' UNION ' ||
1893        			 'SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15'||
1894                    ' FROM HZ_STAGED_PARTY_SITES stage'||
1895                    ' WHERE contains( concat_col, :cont)>0'||
1896                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
1897                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
1898                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
1899          ' AND ORG_CONTACT_ID IN ' ||
1900          ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships ' ||
1901          ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
1902          ' where stage1.relationship_id = oc.party_relationship_id ' || 
1903          ' and ('||p_restrict_sql1|| ') )' ||
1904          ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
1905        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
1906                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
1907        ELSE 
1908        l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15'||
1909                    ' FROM HZ_STAGED_PARTY_SITES stage'||
1910                    ' WHERE contains( concat_col, :cont)>0'||
1911                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
1912                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
1913                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
1914                  ' AND EXISTS ('||
1915                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
1916                  ' WHERE p.party_id = stage.party_id ' || 
1917                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
1918                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
1919                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
1920        OPEN x_cursor FOR l_sqlstr USING p_contains_str
1921                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1922                     ,p_dup_party_id, p_dup_party_id;
1923        END IF; 
1924 		ELSE 
1925        l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15'||
1926                    ' FROM HZ_STAGED_PARTY_SITES stage'||
1927                    ' WHERE contains( concat_col, :cont)>0'||
1928                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
1929                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
1930                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
1931                  ' AND EXISTS ('||
1932                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
1933                  ' WHERE p.party_id = stage.party_id ' || 
1934                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
1935                    ' AND ('||p_restrict_sql||')' ||
1936                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
1937        OPEN x_cursor FOR l_sqlstr USING p_contains_str
1938                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1939                     ,p_dup_party_id, p_dup_party_id;
1940 		  END IF; 
1941     END IF;
1942  	    output_long_strings('----------------------------------------------------------');
1943        output_long_strings('Party Site Contains String = '||p_contains_str);
1944 		output_long_strings('Restrict Sql = '||p_restrict_sql);
1945   exception
1946     when others then
1947       if (instrb(SQLERRM,'DRG-51030')>0) then 
1948         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1949         FND_MSG_PUB.ADD;
1950         RAISE FND_API.G_EXC_ERROR;
1951       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
1952         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1953         FND_MSG_PUB.ADD;
1954         RAISE FND_API.G_EXC_ERROR;
1955       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
1956         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1957         FND_MSG_PUB.ADD;
1958         RAISE FND_API.G_EXC_ERROR;
1959       else 
1960         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1961     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1962     	 FND_MSG_PUB.ADD;
1963         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1964       end if;
1965   END;
1966 
1967   PROCEDURE open_contact_cursor(
1968             p_dup_party_id NUMBER, 
1969             p_party_id NUMBER, 
1970             p_restrict_sql VARCHAR2, 
1971             p_contains_str  VARCHAR2, 
1972             p_search_ctx_id  NUMBER, 
1973             p_search_merged  VARCHAR2, 
1974             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1975   l_sqlstr VARCHAR2(4000);
1976   l_hint VARCHAR2(100); 
1977   l_check NUMBER; 
1978   l_check_dt NUMBER; 
1979   l_search_merged VARCHAR2(1); 
1980   l_status_sql VARCHAR2(100); 
1981  
1982   BEGIN
1983    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1984       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);
1985       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);
1986     END IF;
1987      IF (p_search_merged is null) then 
1988         l_search_merged := 'N';  
1989      ELSE 
1990         l_search_merged := p_search_merged; 
1991      END IF; 
1992      IF p_party_id IS NOT NULL THEN
1993    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1994       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);
1995     END IF;
1996        OPEN x_cursor FOR 
1997           SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID, TX6, TX5
1998           FROM HZ_STAGED_CONTACTS stage
1999         WHERE contains( concat_col, p_contains_str)>0
2000         AND EXISTS (
2001           SELECT 1 FROM HZ_STAGED_PARTIES p
2002           WHERE p.PARTY_ID = stage.PARTY_ID
2003           AND( (l_search_merged ='Y' )  
2004           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2005           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2006           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2007           AND( (l_search_merged ='Y' )  
2008            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2009            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2010           AND stage.party_id = p_party_id;
2011     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2012    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2013       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);
2014     END IF;
2015       IF p_search_ctx_id IS NULL THEN
2016    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2017       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);
2018     END IF;
2019         OPEN x_cursor FOR 
2020           SELECT ORG_CONTACT_ID, PARTY_ID, TX6, TX5
2021           FROM HZ_STAGED_CONTACTS stage
2022         WHERE contains( concat_col, p_contains_str)>0
2023         AND EXISTS (
2024           SELECT 1 FROM HZ_STAGED_PARTIES p
2025           WHERE p.PARTY_ID = stage.PARTY_ID
2026           AND( (l_search_merged ='Y' )  
2027           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2028           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2029           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2030           AND( (l_search_merged ='Y' )  
2031            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2032            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2033           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2034       ELSE
2035    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2036       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);
2037     END IF;
2038           OPEN x_cursor FOR 
2039             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID, TX6, TX5
2040             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage
2041             WHERE contains( concat_col, p_contains_str)>0
2042             AND d.search_context_id = p_search_ctx_id
2043             AND d.party_id = stage.party_id
2044             AND( (l_search_merged ='Y' )  
2045              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2046              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2047             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2048       END IF;
2049     ELSE
2050    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2051       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);
2052     END IF;
2053        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2054        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CT'); 
2055        IF (l_check_dt > 0 ) THEN 
2056    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2057       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);
2058     END IF;
2059            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */'; 
2060        ELSIF (l_check > 0 ) THEN 
2061    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2062       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);
2063     END IF;
2064            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */'; 
2065        END IF; 
2066        IF l_search_merged = 'Y' THEN 
2067                l_status_sql := ' ' ;  
2068        ELSIF l_search_merged = 'I' THEN  
2069                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2070        ELSE 
2071                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2072        END IF; 
2073        l_sqlstr := 'SELECT   ' || l_hint || ' ORG_CONTACT_ID, PARTY_ID , TX6, TX5'||
2074                    ' FROM HZ_STAGED_CONTACTS stage'||
2075                    ' WHERE contains( concat_col, :cont)>0'||
2076                  ' AND EXISTS ('||
2077                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2078                  ' WHERE p.party_id = stage.party_id ' || 
2079                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36)) '|| l_status_sql ||' ) ' || 
2080                   ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2081                   ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2082                   ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2083                    ' AND ('||p_restrict_sql||')' ||
2084                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2085        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2086                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2087                     ,p_dup_party_id, p_dup_party_id;
2088     END IF;
2089  	    output_long_strings('----------------------------------------------------------');
2090        output_long_strings('Contacts Contains String = '||p_contains_str);
2091 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2092   exception
2093     when others then
2094       if (instrb(SQLERRM,'DRG-51030')>0) then 
2095         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2096         FND_MSG_PUB.ADD;
2097         RAISE FND_API.G_EXC_ERROR;
2098       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2099         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2100         FND_MSG_PUB.ADD;
2101         RAISE FND_API.G_EXC_ERROR;
2102       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2103         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2104         FND_MSG_PUB.ADD;
2105         RAISE FND_API.G_EXC_ERROR;
2106       else 
2107         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2108     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2109     	 FND_MSG_PUB.ADD;
2110         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2111       end if;
2112   END;
2113 
2114   PROCEDURE open_contact_pt_cursor(
2115             p_dup_party_id NUMBER, 
2116             p_party_id NUMBER, 
2117             p_restrict_sql VARCHAR2, 
2118             p_contains_str  VARCHAR2, 
2119             p_search_ctx_id  NUMBER, 
2120             p_search_merged  VARCHAR2, 
2121             p_search_rel_cpts  VARCHAR2, 
2122             p_person_api  VARCHAR2, 
2123             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,
2124             p_restrict_entity VARCHAR2 DEFAULT NULL) IS
2125   l_sqlstr VARCHAR2(4000);
2126   l_hint VARCHAR2(100); 
2127   l_check NUMBER; 
2128   l_check_dt NUMBER; 
2129   l_search_merged VARCHAR2(1); 
2130   l_status_sql VARCHAR2(100); 
2131   p_restrict_sql1 VARCHAR2(4000); 
2132  
2133   BEGIN
2134    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2135       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);
2136       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);
2137     END IF;
2138      IF (p_search_merged is null) then 
2139         l_search_merged := 'N';  
2140      ELSE 
2141         l_search_merged := p_search_merged; 
2142      END IF; 
2143   IF p_restrict_entity = 'CONTACTS'    
2144   THEN
2145           OPEN x_cursor FOR 
2146           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
2147           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
2148           WHERE contains( concat_col, p_contains_str)>0 
2149           AND d.search_context_id = p_search_ctx_id 
2150           AND( (l_search_merged ='Y' )  
2151            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2152            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2153           AND d.party_id = stage.org_contact_id ; 
2154    END IF; 
2155   IF p_restrict_entity = 'PARTY_SITES'    
2156   THEN
2157           OPEN x_cursor FOR 
2158           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
2159           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
2160           WHERE contains( concat_col, p_contains_str)>0 
2161           AND d.search_context_id = p_search_ctx_id 
2162           AND( (l_search_merged ='Y' )  
2163            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2164            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2165           AND d.party_id = stage.party_site_id ; 
2166    END IF; 
2167  IF p_restrict_entity IS NULL
2168  THEN
2169      IF p_party_id IS NOT NULL THEN
2170    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2171       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);
2172     END IF;
2173        IF p_search_rel_cpts = 'N' THEN
2174          OPEN x_cursor FOR 
2175           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
2176           FROM HZ_STAGED_CONTACT_POINTS stage
2177           WHERE contains( concat_col, p_contains_str)>0
2178           AND( (l_search_merged ='Y' )  
2179            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2180            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2181           AND stage.party_id = p_party_id; 
2182        ELSE
2183          OPEN x_cursor FOR 
2184           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
2185           FROM HZ_STAGED_CONTACT_POINTS stage
2186           WHERE contains( concat_col, p_contains_str)>0
2187           AND( (l_search_merged ='Y' )  
2188            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2189            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2190           AND stage.party_id = p_party_id 
2191           UNION
2192           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
2193           FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc
2194           WHERE contains( concat_col, p_contains_str)>0
2195           AND r.object_id = p_party_id 
2196           AND( (l_search_merged ='Y' )  
2197            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2198            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2199                     AND r.subject_id = stage.party_id 
2200                     AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
2201                     AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
2202                     AND r.relationship_id = oc.party_relationship_id
2203                     AND oc.org_contact_id = stage.org_contact_id; 
2204       END IF;
2205     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2206    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2207       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);
2208     END IF;
2209       IF p_search_ctx_id IS NULL THEN
2210    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2211       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);
2212     END IF;
2213         OPEN x_cursor FOR 
2214           SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX5, TX6, TX8
2215           FROM HZ_STAGED_CONTACT_POINTS stage
2216         WHERE contains( concat_col, p_contains_str)>0
2217         AND EXISTS (
2218           SELECT 1 FROM HZ_STAGED_PARTIES p
2219           WHERE p.PARTY_ID = stage.PARTY_ID
2220           AND( (l_search_merged ='Y' )  
2221           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2222           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2223           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2224           AND( (l_search_merged ='Y' )  
2225            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2226            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2227           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2228       ELSE
2229    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2230       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);
2231     END IF;
2232         IF p_person_api = 'Y' THEN
2233           OPEN x_cursor FOR 
2234             SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX5, TX6, TX8
2235             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2236             WHERE contains( concat_col, p_contains_str)>0
2237             AND d.search_context_id = p_search_ctx_id
2238             AND d.party_id = stage.party_id
2239             AND( (l_search_merged ='Y' )  
2240              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2241              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2242             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2243             UNION 
2244             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
2245             FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage
2246             WHERE contains( concat_col, p_contains_str)>0
2247             AND d.search_context_id = p_search_ctx_id
2248             AND d.party_id = r.subject_id
2249             AND r.relationship_id = oc.party_relationship_id
2250             AND oc.org_contact_id = stage.org_contact_id
2251             AND( (l_search_merged ='Y' )  
2252              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2253              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2254             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2255         ELSE
2256           OPEN x_cursor FOR 
2257             SELECT  CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX5, TX6, TX8
2258             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2259             WHERE contains( concat_col, p_contains_str)>0
2260             AND d.search_context_id = p_search_ctx_id
2261             AND d.party_id = stage.party_id
2262             AND( (l_search_merged ='Y' )  
2263              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2264              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2265             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2266         END IF;
2267       END IF;
2268     ELSE
2269    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2270       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);
2271     END IF;
2272        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2273        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CPT'); 
2274        IF (l_check_dt > 0 ) THEN 
2275    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2276       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);
2277     END IF;
2278            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */'; 
2279        ELSIF (l_check > 0 ) THEN 
2280    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2281       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);
2282     END IF;
2283            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */'; 
2284        END IF; 
2285        IF l_search_merged = 'Y' THEN 
2286                l_status_sql := ' ' ;  
2287        ELSIF l_search_merged = 'I' THEN  
2288                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2289        ELSE 
2290                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2291        END IF; 
2292        IF p_person_api = 'Y' THEN
2293  		/*Performance fix for Bug:4589953*/ 
2294        IF (l_check > 0 ) THEN 
2295        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
2296        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2297        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
2298        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2299        ELSE
2300 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2301        END IF; 
2302        	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'||
2303                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2304                    ' WHERE contains( concat_col, :cont)>0  '||
2305                    ' AND (stage.org_contact_id is null '||
2306                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2307                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2308                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2309                    ' AND ('||p_restrict_sql||'))' ||
2310                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2311                    ' UNION ' ||
2312                    ' 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'||
2313                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2314                    ' WHERE contains( concat_col, :cont)>0  '||
2315                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2316                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2317                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2318                  ' AND (stage.org_contact_id in ' || 
2319                  ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r ' ||
2320                  ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' || 
2321                  ' where stage1.relationship_id = oc.party_relationship_id ' || 
2322                  ' and ('||p_restrict_sql1 || ') ) )' ||
2323                  ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2324        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2325                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2326        ELSE 
2327        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX1, TX5, TX6, TX8'||
2328                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2329                    ' WHERE contains( concat_col, :cont)>0'||
2330                  ' AND EXISTS ('||
2331                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2332                  ' WHERE p.party_id = stage.party_id ' || 
2333                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2334                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2335                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2336                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2337                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2338                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2339        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2340                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2341                     ,p_dup_party_id, p_dup_party_id;
2342        END IF; 
2343        ELSE 
2344        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX1, TX5, TX6, TX8'||
2345                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2346                    ' WHERE contains( concat_col, :cont)>0'||
2347                  ' AND EXISTS ('||
2348                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2349                  ' WHERE p.party_id = stage.party_id ' || 
2350                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2351                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2352                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2353                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2354                    ' AND ('||p_restrict_sql||')' ||
2355                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2356        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2357                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2358                     ,p_dup_party_id, p_dup_party_id;
2359        END IF; 
2360     END IF;
2361   END IF; 
2362  	    output_long_strings('----------------------------------------------------------');
2363        output_long_strings('Contact Points Contains String = '||p_contains_str);
2364 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2365   exception
2366     when others then
2367       if (instrb(SQLERRM,'DRG-51030')>0) then 
2368         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2369         FND_MSG_PUB.ADD;
2370         RAISE FND_API.G_EXC_ERROR;
2371       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2372         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2373         FND_MSG_PUB.ADD;
2374         RAISE FND_API.G_EXC_ERROR;
2375       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2376         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2377         FND_MSG_PUB.ADD;
2378         RAISE FND_API.G_EXC_ERROR;
2379       else 
2380         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2381     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2382     	 FND_MSG_PUB.ADD;
2383         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2384       end if;
2385   END;
2386 
2387 
2388   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
2389     l_sqlstr VARCHAR2(4000);
2390     l_search_merged VARCHAR2(1);
2391   BEGIN
2392     IF (p_search_merged is null) then 
2393        l_search_merged := 'N';  
2394     ELSE 
2395        l_search_merged := p_search_merged; 
2396     END IF; 
2397     IF p_restrict_sql IS NULL THEN
2398       INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
2399       SELECT p_search_ctx_id, PARTY_ID, decode(TX8,g_party_stage_rec.TX8||' ',100,90)
2400       FROM hz_staged_parties 
2401       WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
2402       AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  TX36))
2403       AND( (l_search_merged ='Y' ) 
2404            OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))  
2405            OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))  
2406       AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)
2407       AND rownum <= p_thresh;
2408     ELSE
2409       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 ';
2410       l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
2411       l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' =  TX36) ';
2412       IF l_search_merged = 'N' THEN
2413         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
2414       ELSIF l_search_merged = 'Y' THEN
2415         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
2416       END IF;
2417       l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
2418      l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
2419      l_sqlstr := l_sqlstr || ' AND ROWNUM <= :thresh ';
2420      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;
2421     END IF;
2422     x_num_matches := SQL%ROWCOUNT;
2423   END;
2424 
2425   FUNCTION get_new_score_rec (
2426     	 p_init_total_score NUMBER,
2427     	 p_init_party_score NUMBER,
2428     	 p_init_party_site_score NUMBER,
2429     	 p_init_contact_score NUMBER,
2430     	 p_init_contact_point_score NUMBER, 
2431     	 p_party_id NUMBER, 
2432     	 p_party_site_id NUMBER, 
2433     	 p_org_contact_id NUMBER, 
2434     	 p_contact_point_id NUMBER) 
2435      RETURN HZ_PARTY_SEARCH.score_rec IS
2436     l_score_rec HZ_PARTY_SEARCH.score_rec;
2437   BEGIN
2438    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2439       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);
2440       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);
2441     END IF;
2442     l_score_rec.TOTAL_SCORE := p_init_total_score;
2443     l_score_rec.PARTY_SCORE := p_init_party_score;
2444     l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;
2445     l_score_rec.CONTACT_SCORE := p_init_contact_score;
2446     l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;
2447     l_score_rec.PARTY_ID := p_party_id;
2448     l_score_rec.PARTY_SITE_ID := p_party_site_id;
2449     l_score_rec.ORG_CONTACT_ID := p_org_contact_id;
2450     l_score_rec.CONTACT_POINT_ID := p_contact_point_id;
2451     RETURN l_score_rec;
2452   END;
2453 
2454    /**********************************************************
2455    This procedure finds the set of parties that match the search
2456    criteria and returns a scored set of parties
2457 
2458    The steps in executing the search are as follows
2459     1. Initialization and error checks
2460     2. Setup of intermedia query strings for Acquisition query
2461     3. Execution of Acquisition query
2462     4. Execution of Secondary queries to score results
2463     5. Setup of data temporary table to return search results
2464    **********************************************************/
2465 
2466 PROCEDURE find_parties (
2467       p_rule_id               IN      NUMBER,
2468       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
2469       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
2470       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
2471       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
2472       p_restrict_sql          IN      VARCHAR2,
2473       p_match_type            IN      VARCHAR2,
2474       p_search_merged         IN      VARCHAR2,
2475       p_dup_party_id          IN      NUMBER,
2476       p_dup_set_id            IN      NUMBER,
2477       p_dup_batch_id          IN      NUMBER,
2478       p_ins_details           IN      VARCHAR2,
2479       x_search_ctx_id         OUT     NUMBER,
2480       x_num_matches           OUT     NUMBER
2481 ) IS
2482 
2483   -- Strings to hold the generated Intermedia query strings
2484   l_party_contains_str VARCHAR2(32000); 
2485   l_party_site_contains_str VARCHAR2(32000);
2486   l_contact_contains_str VARCHAR2(32000);
2487   l_contact_pt_contains_str VARCHAR2(32000);
2488   l_denorm_str VARCHAR2(32000);
2489   l_ps_denorm_str VARCHAR2(32000);
2490   l_ct_denorm_str VARCHAR2(32000);
2491   l_cpt_denorm_str VARCHAR2(32000);
2492 
2493   -- Other local variables
2494   l_match_str VARCHAR2(30); -- Match type (AND or OR)
2495   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
2496   -- For Score calculation
2497   l_max_score NUMBER;
2498   l_match_idx NUMBER;
2499   l_entered_max_score NUMBER;
2500   FIRST BOOLEAN;
2501   l_search_ctx_id NUMBER; -- Generated Search Context ID
2502 
2503   l_TX39 VARCHAR2(2000);
2504   l_TX41 VARCHAR2(2000);
2505   l_TX9 VARCHAR2(2000);
2506   l_TX1 VARCHAR2(2000);
2507   l_TX3 VARCHAR2(2000);
2508   l_TX15 VARCHAR2(2000);
2509   l_TX4 VARCHAR2(2000);
2510   l_TX10 VARCHAR2(2000);
2511   l_TX11 VARCHAR2(2000);
2512   l_TX5 VARCHAR2(2000);
2513   l_TX40 VARCHAR2(2000);
2514   l_TX8 VARCHAR2(2000);
2515   l_TX14 VARCHAR2(2000);
2516   l_TX6 VARCHAR2(2000);
2517   H_SCORES HZ_PARTY_SEARCH.score_list;
2518   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
2519   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
2520 
2521   l_score NUMBER;
2522   l_idx NUMBER;
2523   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
2524   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
2525   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
2526   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
2527   l_party_id NUMBER;
2528   l_ps_party_id NUMBER;
2529   l_ct_party_id NUMBER;
2530   l_cpt_party_id NUMBER;
2531   l_cpt_ps_id NUMBER;
2532   l_cpt_contact_id NUMBER;
2533   l_cpt_type VARCHAR2(100);
2534   l_party_site_id NUMBER;
2535   l_org_contact_id NUMBER;
2536   l_contact_pt_id NUMBER;
2537   l_ps_contact_id NUMBER;
2538   l_party_max_score NUMBER;
2539   l_ps_max_score NUMBER;
2540   l_contact_max_score NUMBER;
2541   l_cpt_max_score NUMBER;
2542   l_denorm_max_score NUMBER;
2543   l_non_denorm_max_score NUMBER;
2544 
2545   defpt NUMBER :=0;
2546   defps NUMBER :=0;
2547   defct NUMBER :=0;
2548   defcpt NUMBER :=0;
2549   l_index NUMBER;
2550   l_max_thresh NUMBER;
2551   l_tmp NUMBER;
2552   l_merge_flag VARCHAR2(1);
2553   l_num_eval NUMBER:=0;
2554 
2555   --Fix for bug 4417124 
2556   l_use_contact_addr_info BOOLEAN := TRUE;
2557   l_use_contact_cpt_info BOOLEAN  := TRUE;
2558   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
2559   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
2560 
2561   L_RETURN_IMM_EXC EXCEPTION;
2562 
2563   
2564   /********************* Find Parties private procedures *******/
2565   PROCEDURE push_eval IS
2566   BEGIN
2567    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2568       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);
2569       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);
2570     END IF;
2571    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2572       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);
2573     END IF;
2574     H_PARTY_ID.DELETE;
2575     H_PARTY_ID_LIST.DELETE;
2576     H_SCORES.DELETE;        
2577     g_mappings.DELETE;
2578     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
2579     call_order(5) := call_order(1);
2580     call_type(5) := 'AND';
2581     call_max_score(5) := call_max_score(1);
2582     call_type(2) := 'OR';
2583   END;
2584 
2585   /**  Private procedure to acquire and score at party level  ***/
2586   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
2587     l_party_id_idx NUMBER:=1;
2588     l_ctx_id NUMBER;
2589     l_precalc_score BOOLEAN := FALSE;
2590     l_TX35_new varchar2(4000);
2591   BEGIN
2592    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2593       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);
2594       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);
2595     END IF;
2596     SAVEPOINT eval_start;
2597     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2598       l_ctx_id := l_search_ctx_id;
2599    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2600       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);
2601     END IF;
2602       FORALL I in 1..H_PARTY_ID.COUNT 
2603          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2604              l_search_ctx_id,H_PARTY_ID(I));
2605       H_PARTY_ID.DELETE;
2606       H_PARTY_ID_LIST.DELETE;
2607     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2608    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2609       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);
2610     END IF;
2611       l_ctx_id := l_search_ctx_id;
2612       FORALL I in 1..H_PARTY_ID.COUNT 
2613          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2614              l_search_ctx_id,H_PARTY_ID(I));
2615       l_party_id_idx := H_PARTY_ID.COUNT+1;
2616     ELSE
2617       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2618          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
2619    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2620       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);
2621     END IF;
2622         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
2623    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2624       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);
2625     END IF;
2626           IF (l_party_site_contains_str IS NULL AND
2627              l_contact_contains_str IS NULL AND
2628              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN
2629             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);
2630             RAISE L_RETURN_IMM_EXC;
2631           ELSE
2632             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);
2633           END IF;
2634         ELSE
2635           IF p_index>1 THEN
2636    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2637       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);
2638     END IF;
2639             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2640             FND_MSG_PUB.ADD;
2641             RAISE FND_API.G_EXC_ERROR;
2642           ELSE
2643             push_eval;
2644             RETURN;
2645           END IF;
2646         END IF;
2647       END IF;
2648       l_ctx_id := NULL;
2649       l_party_id_idx := H_PARTY_ID.COUNT+1;
2650     END IF;
2651    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2652       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);
2653     END IF;
2654     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
2655       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);
2656     END IF;
2657     LOOP 
2658       FETCH l_party_cur INTO
2659          l_party_id , l_TX39, l_TX40, l_TX41;
2660       EXIT WHEN l_party_cur%NOTFOUND;
2661       l_index := map_id(l_party_id);
2662       l_score := GET_PARTY_SCORE(l_TX39,l_TX40,l_TX41);
2663       IF NOT H_SCORES.EXISTS(l_index) THEN
2664         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
2665       ELSE
2666         H_SCORES(l_index).TOTAL_SCORE := 
2667                 H_SCORES(l_index).TOTAL_SCORE+l_score;
2668         H_SCORES(l_index).PARTY_SCORE := l_score;
2669       END IF;
2670       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2671         H_PARTY_ID_LIST(l_index) := 1;
2672         H_PARTY_ID(l_party_id_idx) := l_party_id;
2673         l_party_id_idx:= l_party_id_idx+1;
2674       END IF;
2675       IF (l_party_id_idx-1)>l_max_thresh THEN
2676         IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
2677           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
2678           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
2679           AND l_contact_pt_contains_str IS NULL THEN
2680             EXIT;
2681         END IF;
2682 	      CLOSE l_party_cur;
2683         IF p_index>1 THEN
2684    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2685       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);
2686     END IF;
2687           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2688           FND_MSG_PUB.ADD;
2689           RAISE FND_API.G_EXC_ERROR;
2690         ELSE
2691           push_eval;
2692           RETURN;
2693         END IF;
2694       END IF;
2695     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2696       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);
2697       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);
2698     END IF;
2699     END LOOP;
2700    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2701       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);
2702     END IF;
2703     CLOSE l_party_cur;
2704     ROLLBACK to eval_start;
2705   END;
2706 
2707   /**  Private procedure to acquire and score at party site level  ***/
2708   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
2709     l_party_id_idx NUMBER:=1;
2710     l_ctx_id NUMBER;
2711     h_ps_id HZ_PARTY_SEARCH.IDList;
2712     h_ps_party_id HZ_PARTY_SEARCH.IDList;
2713     h_ps_score HZ_PARTY_SEARCH.IDList;
2714     detcnt NUMBER := 1;
2715   BEGIN
2716    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2717       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);
2718       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);
2719     END IF;
2720   IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,'D_PS')>0
2721       AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and
2722       l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> 'Y' THEN
2723     l_party_id := H_SCORES.FIRST;
2724     WHILE l_party_id IS NOT NULL LOOP
2725       H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;
2726       l_party_id:=H_SCORES.NEXT(l_party_id);
2727     END LOOP;
2728     RETURN;
2729   END IF;
2730     SAVEPOINT eval_start;
2731     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2732    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2733       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);
2734     END IF;
2735       l_ctx_id := l_search_ctx_id;
2736       FORALL I in 1..H_PARTY_ID.COUNT 
2737          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2738              l_search_ctx_id,H_PARTY_ID(I));
2739       H_PARTY_ID.DELETE;
2740       H_PARTY_ID_LIST.DELETE;
2741     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2742    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2743       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);
2744     END IF;
2745       l_ctx_id := l_search_ctx_id;
2746       FORALL I in 1..H_PARTY_ID.COUNT 
2747          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2748              l_search_ctx_id,H_PARTY_ID(I));
2749       l_party_id_idx := H_PARTY_ID.COUNT+1;
2750     ELSE
2751       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2752          and check_estimate_hits('PARTY_SITES',p_party_site_contains_str)>l_max_thresh THEN
2753    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2754       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);
2755     END IF;
2756         IF p_index>1 THEN
2757    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2758       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);
2759     END IF;
2760           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2761           FND_MSG_PUB.ADD;
2762           RAISE FND_API.G_EXC_ERROR;
2763         ELSE
2764           push_eval;
2765           RETURN;
2766         END IF;
2767       END IF;
2768       l_party_id_idx := H_PARTY_ID.COUNT+1;
2769       l_ctx_id := NULL;
2770     END IF;
2771    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2772       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);
2773     END IF;
2774     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);
2775     LOOP 
2776       FETCH l_party_site_cur INTO
2777          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;
2778       EXIT WHEN l_party_site_cur%NOTFOUND;
2779       --Fix for bug 4417124 
2780       IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN
2781         l_index := map_id(l_ps_party_id);
2782         l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX14,l_TX15);
2783         IF NOT H_SCORES.EXISTS(l_index) THEN
2784           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);
2785         ELSE
2786           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
2787             H_SCORES(l_index).TOTAL_SCORE := 
2788                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
2789             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
2790           END IF;
2791         END IF;
2792         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2793           H_PARTY_ID_LIST(l_index) := 1;
2794           H_PARTY_ID(l_party_id_idx) := l_ps_party_id;
2795           l_party_id_idx:= l_party_id_idx+1;
2796         END IF;
2797         IF p_ins_details = 'Y' THEN
2798           h_ps_id(detcnt) := l_party_site_id;
2799           h_ps_party_id(detcnt) := l_ps_party_id;
2800           IF (p_emax_score > 0) THEN 
2801               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
2802           ELSE 
2803               h_ps_score(detcnt) := 0; 
2804           END IF; 
2805           detcnt := detcnt +1;
2806         END IF;
2807     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2808       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);
2809       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);
2810       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);
2811     END IF;
2812       END IF;
2813     END LOOP;
2814    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2815       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);
2816     END IF;
2817     CLOSE l_party_site_cur;
2818     ROLLBACK to eval_start;
2819     IF p_ins_details = 'Y' THEN
2820    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2821       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);
2822     END IF;
2823       FORALL I in 1..h_ps_id.COUNT 
2824         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
2825           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
2826     END IF;
2827   END;
2828 
2829   /**  Private procedure to acquire and score at contact point level  ***/
2830   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
2831     l_party_id_idx NUMBER:=1;
2832     l_ctx_id NUMBER;
2833     h_ct_id HZ_PARTY_SEARCH.IDList;
2834     h_ct_party_id HZ_PARTY_SEARCH.IDList;
2835     h_ct_score HZ_PARTY_SEARCH.IDList;
2836     detcnt NUMBER := 1;
2837   BEGIN
2838    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2839       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);
2840       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);
2841     END IF;
2842     SAVEPOINT eval_start;
2843     IF l_match_str = ' AND ' AND p_call_type='AND' THEN
2844    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2845       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);
2846     END IF;
2847       l_ctx_id := l_search_ctx_id;
2848       FORALL I in 1..H_PARTY_ID.COUNT 
2849          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2850              l_search_ctx_id,H_PARTY_ID(I));
2851       H_PARTY_ID.DELETE;
2852       H_PARTY_ID_LIST.DELETE;
2853     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2854    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2855       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);
2856     END IF;
2857       l_ctx_id := l_search_ctx_id;
2858       FORALL I in 1..H_PARTY_ID.COUNT 
2859          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2860              l_search_ctx_id,H_PARTY_ID(I));
2861       l_party_id_idx := H_PARTY_ID.COUNT+1;
2862     ELSE
2863       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2864          and check_estimate_hits('CONTACTS',p_contact_contains_str)>l_max_thresh THEN
2865    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2866       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);
2867     END IF;
2868         IF p_index>1 THEN
2869    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2870       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);
2871     END IF;
2872           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2873           FND_MSG_PUB.ADD;
2874           RAISE FND_API.G_EXC_ERROR;
2875         ELSE
2876           push_eval;
2877           RETURN;
2878         END IF;
2879       END IF;
2880       l_ctx_id := NULL;
2881       l_party_id_idx := H_PARTY_ID.COUNT+1;
2882     END IF;
2883    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2884       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);
2885     END IF;
2886     open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id,  p_search_merged, l_contact_cur);
2887     LOOP 
2888       FETCH l_contact_cur INTO
2889          l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
2890       EXIT WHEN l_contact_cur%NOTFOUND;
2891       l_index := map_id(l_ct_party_id);
2892       l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
2893       IF NOT H_SCORES.EXISTS(l_index) THEN
2894         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);
2895       ELSE
2896         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
2897           H_SCORES(l_index).TOTAL_SCORE := 
2898                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
2899           H_SCORES(l_index).CONTACT_SCORE := l_score;
2900         END IF;
2901       END IF;
2902       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2903         H_PARTY_ID_LIST(l_index) := 1;
2904         H_PARTY_ID(l_party_id_idx) := l_ct_party_id;
2905         l_party_id_idx:= l_party_id_idx+1;
2906       END IF;
2907       IF p_ins_details = 'Y' THEN
2908         h_ct_id(detcnt) := l_org_contact_id;
2909         h_ct_party_id(detcnt) := l_ct_party_id;
2910         IF (p_emax_score > 0) THEN 
2911             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
2912         ELSE 
2913             h_ct_score(detcnt) := 0; 
2914         END IF; 
2915         detcnt := detcnt +1;
2916       END IF;
2917     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2918       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);
2919       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);
2920       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);
2921     END IF;
2922     END LOOP;
2923    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2924       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);
2925     END IF;
2926     CLOSE l_contact_cur;
2927     ROLLBACK to eval_start;
2928     IF p_ins_details = 'Y' THEN
2929    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2930       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);
2931     END IF;
2932       FORALL I in 1..h_ct_id.COUNT 
2933         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
2934           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
2935     END IF;
2936   END;
2937 
2938   /**  Private procedure to acquire and score at contact point level  ***/
2939   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
2940     l_party_id_idx NUMBER:=1;
2941     l_ctx_id NUMBER;
2942     h_cpt_id HZ_PARTY_SEARCH.IDList;
2943     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
2944     h_cpt_score HZ_PARTY_SEARCH.IDList;
2945     detcnt NUMBER := 1;
2946     l_cpt_flag VARCHAR2(1) := 'N';
2947     is_a_match VARCHAR2(1) := 'Y';
2948   BEGIN
2949    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2950       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);
2951       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);
2952     END IF;
2953     SAVEPOINT eval_start;
2954     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2955    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2956       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);
2957     END IF;
2958       l_ctx_id := l_search_ctx_id;
2959       FORALL I in 1..H_PARTY_ID.COUNT 
2960          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2961              l_search_ctx_id,H_PARTY_ID(I));
2962       H_PARTY_ID.DELETE;
2963       H_PARTY_ID_LIST.DELETE;
2964     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2965    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2966       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);
2967     END IF;
2968       l_ctx_id := l_search_ctx_id;
2969       FORALL I in 1..H_PARTY_ID.COUNT 
2970          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2971              l_search_ctx_id,H_PARTY_ID(I));
2972       l_party_id_idx := H_PARTY_ID.COUNT+1;
2973     ELSE
2974       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2975          and check_estimate_hits('CONTACT_POINTS',p_contact_pt_contains_str)>l_max_thresh THEN
2976    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2977       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);
2978     END IF;
2979         IF p_index>1 THEN
2980    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2981       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);
2982     END IF;
2983           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2984           FND_MSG_PUB.ADD;
2985           RAISE FND_API.G_EXC_ERROR;
2986         ELSE
2987           push_eval;
2988           RETURN;
2989         END IF;
2990       END IF;
2991       l_ctx_id := NULL;
2992       l_party_id_idx := H_PARTY_ID.COUNT+1;
2993     END IF;
2994    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2995       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);
2996     END IF;
2997     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);
2998     LOOP 
2999       FETCH l_contact_pt_cur INTO
3000          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;
3001       EXIT WHEN l_contact_pt_cur%NOTFOUND;
3002    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3003       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);
3004     END IF;
3005    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3006       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);
3007     END IF;
3008    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3009       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);
3010     END IF;
3011       --Fix for bug 4417124 
3012       IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN
3013         l_index := map_id(l_cpt_party_id);
3014         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
3015         IF NOT H_SCORES.EXISTS(l_index) THEN
3016           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);
3017           H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3018    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3019       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);
3020     END IF;
3021    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3022       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);
3023     END IF;
3024         ELSE
3025           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
3026             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
3027               H_SCORES(l_index).TOTAL_SCORE :=
3028               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;
3029               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;
3030               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3031    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3032       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);
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).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);
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).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);
3039     END IF;
3040    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3041       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);
3042     END IF;
3043             END IF;
3044           ELSE
3045    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3046       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);
3047     END IF;
3048             H_SCORES(l_index).TOTAL_SCORE :=
3049             		H_SCORES(l_index).TOTAL_SCORE+l_score;
3050             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3051             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3052    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3053       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);
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).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);
3057     END IF;
3058    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3059       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);
3060     END IF;
3061           END IF;
3062         END IF;
3063    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3064       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);
3065     END IF;
3066    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3067       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);
3068     END IF;
3069         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3070           -- If rule is match all 
3071           IF l_match_str = ' AND ' THEN
3072    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3073       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);
3074     END IF;
3075             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3076               is_a_match := 'Y';
3077    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3078       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);
3079     END IF;
3080             ELSE
3081               is_a_match := 'N';
3082    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3083       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);
3084     END IF;
3085             END IF;
3086           -- Else it is construed to be a match anyway
3087           ELSE
3088             is_a_match := 'Y';
3089    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3090       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);
3091     END IF;
3092           END IF;
3093         IF (is_a_match='Y') then
3094           H_PARTY_ID_LIST(l_index) := 1;
3095           H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;
3096           l_party_id_idx:= l_party_id_idx+1;
3097       end if;
3098         END IF;
3099         IF p_ins_details = 'Y' THEN
3100           IF l_match_str = ' AND ' THEN
3101    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3102       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);
3103     END IF;
3104             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3105               is_a_match := 'Y';
3106    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3107       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);
3108     END IF;
3109             ELSE
3110               is_a_match := 'N';
3111    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3112       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);
3113     END IF;
3114             END IF;
3115           ELSE
3116             is_a_match := 'Y';
3117    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3118       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);
3119     END IF;
3120           END IF;
3121           IF (is_a_match='Y') THEN
3122           FOR I IN 1..h_cpt_id.COUNT LOOP
3123           IF h_cpt_id(I)=l_contact_pt_id THEN
3124           	 l_cpt_flag := 'Y';
3125           END IF;
3126           END LOOP;
3127           IF l_cpt_flag = 'Y' THEN
3128           	 NULL;
3129           ELSE
3130          	 h_cpt_id(detcnt) := l_contact_pt_id;
3131           	 h_cpt_party_id(detcnt) := l_cpt_party_id;
3132           	 IF (p_emax_score > 0) THEN 
3133               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
3134             ELSE 
3135               h_cpt_score(detcnt) := 0; 
3136           	 END IF; 
3137             detcnt := detcnt +1;
3138           END IF;
3139       end if;
3140         END IF;
3141     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3142       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);
3143       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);
3144       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);
3145     END IF;
3146       END IF;
3147     END LOOP;
3148    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3149       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);
3150     END IF;
3151     CLOSE l_contact_pt_cur;
3152     ROLLBACK to eval_start;
3153     IF p_ins_details = 'Y' THEN
3154    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3155       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);
3156     END IF;
3157       FORALL I in 1..h_cpt_id.COUNT 
3158         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
3159           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
3160     END IF;
3161   END eval_cpt_level;
3162 
3163   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
3164   PROCEDURE do_eval (p_index NUMBER) IS
3165     l_ctx_id NUMBER;
3166     l_threshold NUMBER;
3167     other_acq_criteria_exists BOOLEAN; 
3168     acq_cnt NUMBER; 
3169   BEGIN
3170    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3171       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);
3172       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);
3173     END IF;
3174     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
3175      l_threshold :=  round(( l_entered_max_score / 460) * 78); 
3176     other_acq_criteria_exists := TRUE ;
3177     --check if acquisition criteria exists for any other entity
3178     IF l_party_contains_str IS NOT NULL THEN 
3179     	acq_cnt := 1; 
3180     END IF; 
3181     IF l_party_site_contains_str IS NOT NULL THEN 
3182     	acq_cnt := acq_cnt+1; 
3183     END IF; 
3184     IF l_contact_contains_str IS NOT NULL THEN 
3185     	acq_cnt := acq_cnt+1; 
3186     END IF;
3187     IF l_contact_pt_contains_str IS NOT NULL THEN 
3188     	acq_cnt := acq_cnt+1; 
3189     END IF;  
3190     IF acq_cnt>1 THEN 
3191     	other_acq_criteria_exists := TRUE; 
3192     ELSE
3193     	other_acq_criteria_exists := FALSE; 
3194     END IF;  
3195       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);
3196       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);
3197       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);
3198     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
3199     	IF ( call_max_score(p_index) < l_threshold) THEN 
3200    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3201       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);
3202     END IF;
3203 	     	RETURN;	
3204     	ELSE 
3205    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3206       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);
3207     END IF;
3208 	     	FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED'); 
3209 	     	FND_MSG_PUB.ADD; 
3210 	     	RAISE FND_API.G_EXC_ERROR; 
3211     	END IF; 
3212     ELSE
3213    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3214       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);
3215     END IF;
3216       FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3217       FND_MSG_PUB.ADD;
3218       RAISE FND_API.G_EXC_ERROR;
3219      END IF; 
3220     END IF;
3221     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
3222       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
3223     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
3224       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3225     ELSIF call_order(p_index) = 'CONTACT' AND l_contact_contains_str IS NOT NULL THEN
3226       eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3227     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
3228       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3229     END IF;
3230   END;
3231   /************ End of find_parties private procedures **********/ 
3232 
3233   BEGIN
3234 
3235    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3236       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);
3237     END IF;
3238    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3239       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);
3240     END IF;
3241     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3242       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);
3243       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);
3244       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);
3245       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);
3246       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);
3247       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);
3248     END IF;
3249     -- ************************************
3250     -- STEP 1. Initialization and error checks
3251 
3252     l_match_str := ' AND ';
3253     IF p_match_type = 'AND' THEN
3254       l_match_str := ' AND ';
3255     ELSIF p_match_type = 'OR' THEN
3256       l_match_str := ' OR ';
3257     END IF;
3258     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);
3259     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
3260 
3261 
3262     --Fix for bug 4417124 
3263 
3264     SELECT use_contact_addr_flag, use_contact_cpt_flag 
3265     INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
3266     FROM hz_match_rules_b 
3267     WHERE match_rule_id = 8; 
3268 
3269     IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
3270       l_use_contact_addr_info := FALSE; 
3271     END IF; 
3272 
3273     IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
3274       l_use_contact_cpt_info := FALSE; 
3275     END IF; 
3276 
3277    --End fix for bug 4417124
3278 
3279     IF p_dup_batch_id IS NOT NULL THEN
3280       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH_BATCH'),10000);
3281     ELSE
3282       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
3283     END IF;
3284     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
3285       g_score_until_thresh := true;
3286    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3287       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);
3288     END IF;
3289     ELSE
3290       g_score_until_thresh := false;
3291    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3292       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);
3293     END IF;
3294     END IF;
3295    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3296       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);
3297     END IF;
3298     -- ************************************************************
3299     -- STEP 2. Setup of intermedia query strings for Acquisition query
3300     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
3301     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
3302     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
3303    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3304       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);
3305     END IF;
3306     l_denorm_max_score:=0;
3307     l_non_denorm_max_score:=0;
3308     IF l_ps_denorm_str IS NOT NULL THEN
3309       l_denorm_max_score := l_denorm_max_score+l_ps_max_score;
3310       l_denorm_str := l_ps_denorm_str;
3311     ELSE
3312       l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;
3313     END IF;
3314     IF l_ct_denorm_str IS NOT NULL THEN
3315       l_denorm_max_score := l_denorm_max_score+l_contact_max_score;
3316       IF l_denorm_str IS NOT NULL THEN
3317         l_denorm_str := l_denorm_str || ' OR ' ||l_ct_denorm_str;
3318       ELSE
3319         l_denorm_str := l_ct_denorm_str;
3320       END IF;
3321     ELSE
3322       l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;
3323     END IF;
3324     IF l_cpt_denorm_str IS NOT NULL THEN
3325       l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;
3326       IF l_denorm_str IS NOT NULL THEN
3327         l_denorm_str := l_denorm_str || ' OR ' ||l_cpt_denorm_str;
3328       ELSE
3329         l_denorm_str := l_cpt_denorm_str;
3330       END IF;
3331     ELSE
3332       l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;
3333     END IF;
3334     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));
3335     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3336 
3337     -- Setup Search Context ID
3338     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3339     x_search_ctx_id := l_search_ctx_id;
3340 
3341    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3342       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);
3343     END IF;
3344     IF l_party_contains_str IS NULL THEN
3345       defpt := 1;
3346     END IF;
3347     IF l_party_site_contains_str IS NULL THEN
3348       defps := 1;
3349     END IF;
3350     IF l_contact_contains_str IS NULL THEN
3351       defct := 1;
3352     END IF;
3353     IF l_contact_pt_contains_str IS NULL THEN
3354       defcpt := 1;
3355     END IF;
3356 
3357     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3358    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3359       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);
3360     END IF;
3361       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);
3362       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);
3363       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);
3364       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);
3365       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);
3366       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);
3367     END IF;
3368     FOR I in 1..5 LOOP
3369       do_eval(I);
3370     END LOOP;
3371     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3372       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);
3373     END IF;
3374     x_num_matches := 0;
3375     l_num_eval := 0;
3376     IF l_match_str = ' OR ' THEN
3377       l_party_id := H_SCORES.FIRST;
3378     ELSE
3379       l_party_id := H_PARTY_ID_LIST.FIRST;
3380     END IF;
3381     WHILE l_party_id IS NOT NULL LOOP
3382       l_num_eval:= l_num_eval+1;
3383     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3384    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3385       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);
3386     END IF;
3387       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);
3388       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);
3389     END IF;
3390    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3391       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);
3392     END IF;
3393       IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(78/460) THEN
3394             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
3395             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));
3396             x_num_matches := x_num_matches+1;
3397    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3398       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);
3399     END IF;
3400       END IF;
3401       IF l_match_str = ' OR ' THEN
3402         l_party_id:=H_SCORES.NEXT(l_party_id);
3403       ELSE
3404         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3405       END IF;
3406     END LOOP;
3407     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3408    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3409       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);
3410     END IF;
3411    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3412       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);
3413     END IF;
3414 EXCEPTION
3415   WHEN L_RETURN_IMM_EXC THEN
3416     RETURN;
3417   WHEN FND_API.G_EXC_ERROR THEN
3418     RAISE FND_API.G_EXC_ERROR;
3419   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3420     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3421   WHEN OTHERS THEN
3422     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3423     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_parties');
3424     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3425     FND_MSG_PUB.ADD;
3426     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3427 END find_parties;
3428 
3429 PROCEDURE find_persons (
3430       p_rule_id               IN      NUMBER,
3431       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
3432       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
3433       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
3434       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
3435       p_restrict_sql          IN      VARCHAR2,
3436       p_match_type            IN      VARCHAR2,
3437       p_search_merged         IN      VARCHAR2,
3438       p_dup_party_id          IN      NUMBER,
3439       p_dup_set_id            IN      NUMBER,
3440       p_dup_batch_id          IN      NUMBER,
3441       p_ins_details           IN      VARCHAR2,
3442       x_search_ctx_id         OUT     NUMBER,
3443       x_num_matches           OUT     NUMBER
3444 ) IS
3445 
3446   -- Strings to hold the generated Intermedia query strings
3447   l_party_contains_str VARCHAR2(32000); 
3448   l_party_site_contains_str VARCHAR2(32000);
3449   l_contact_contains_str VARCHAR2(32000);
3450   l_contact_pt_contains_str VARCHAR2(32000);
3451   l_denorm_str VARCHAR2(32000);
3452   l_ps_denorm_str VARCHAR2(32000);
3453   l_ct_denorm_str VARCHAR2(32000);
3454   l_cpt_denorm_str VARCHAR2(32000);
3455 
3456   -- Other local variables
3457   l_match_str VARCHAR2(30); -- Match type (AND or OR)
3458   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
3459   -- For Score calculation
3460   l_max_score NUMBER;
3461   l_match_idx NUMBER;
3462   l_entered_max_score NUMBER;
3463   FIRST BOOLEAN;
3464   l_search_ctx_id NUMBER; -- Generated Search Context ID
3465 
3466   l_TX39 VARCHAR2(2000);
3467   l_TX41 VARCHAR2(2000);
3468   l_TX9 VARCHAR2(2000);
3469   l_TX1 VARCHAR2(2000);
3470   l_TX3 VARCHAR2(2000);
3471   l_TX15 VARCHAR2(2000);
3472   l_TX4 VARCHAR2(2000);
3473   l_TX10 VARCHAR2(2000);
3474   l_TX11 VARCHAR2(2000);
3475   l_TX5 VARCHAR2(2000);
3476   l_TX40 VARCHAR2(2000);
3477   l_TX8 VARCHAR2(2000);
3478   l_TX14 VARCHAR2(2000);
3479   l_TX6 VARCHAR2(2000);
3480   H_SCORES HZ_PARTY_SEARCH.score_list;
3481   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
3482   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
3483 
3484   l_score NUMBER;
3485   l_idx NUMBER;
3486   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
3487   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
3488   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
3489   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
3490   l_party_id NUMBER;
3491   l_ps_party_id NUMBER;
3492   l_ct_party_id NUMBER;
3493   l_cpt_party_id NUMBER;
3494   l_cpt_ps_id NUMBER;
3495   l_cpt_contact_id NUMBER;
3496   l_cpt_type VARCHAR2(100);
3497   l_party_site_id NUMBER;
3498   l_org_contact_id NUMBER;
3499   l_contact_pt_id NUMBER;
3500   l_cpt_level VARCHAR2(100);
3501   l_ps_contact_id NUMBER;
3502   l_party_max_score NUMBER;
3503   l_ps_max_score NUMBER;
3504   l_contact_max_score NUMBER;
3505   l_cpt_max_score NUMBER;
3506   l_denorm_max_score NUMBER;
3507   l_non_denorm_max_score NUMBER;
3508 
3509   defpt NUMBER :=0;
3510   defps NUMBER :=0;
3511   defct NUMBER :=0;
3512   defcpt NUMBER :=0;
3513   l_index NUMBER;
3514   l_max_thresh NUMBER;
3515   l_tmp NUMBER;
3516   l_merge_flag VARCHAR2(1);
3517   l_num_eval NUMBER:=0;
3518 
3519   L_RETURN_IMM_EXC Exception;
3520 
3521   
3522   /********************* Find Parties private procedures *******/
3523   PROCEDURE set_person_party_type IS
3524   BEGIN
3525     g_party_stage_rec.TX36:= 
3526         HZ_TRANS_PKG.EXACT(
3527              'PERSON'
3528              ,null,'PARTY_TYPE'
3529              ,'PARTY');
3530   END;
3531     
3532   PROCEDURE unset_person_party_type IS
3533   BEGIN
3534     g_party_stage_rec.TX36 := '';
3535   END;
3536   
3537   FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) 
3538   RETURN NUMBER IS
3539     l_party_type VARCHAR2(255);
3540     l_person_id NUMBER(15);
3541   BEGIN
3542     SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;
3543     IF l_party_type = 'PERSON' THEN
3544       RETURN p_party_id;
3545     ELSIF p_contact_id IS NULL THEN
3546       RETURN NULL;
3547     ELSE
3548       BEGIN 
3549         SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p
3550         WHERE oc.org_contact_id = p_contact_id
3551         AND r.relationship_id = oc.party_relationship_id 
3552         AND r.object_id = p_party_id
3553         AND p.party_id = r.subject_id 
3554         AND p.party_type = 'PERSON'
3555         AND ROWNUM=1;
3556         
3557         RETURN l_person_id;
3558       EXCEPTION
3559         WHEN NO_DATA_FOUND THEN
3560           RETURN NULL;
3561       END;      
3562     END IF;
3563   END;  
3564 
3565   PROCEDURE push_eval IS
3566   BEGIN
3567     H_PARTY_ID.DELETE;
3568     H_PARTY_ID_LIST.DELETE;
3569     H_SCORES.DELETE;        
3570     g_mappings.DELETE;
3571     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
3572     call_order(5) := call_order(1);
3573     call_type(5) := 'AND';
3574     call_max_score(5) := call_max_score(1);
3575     call_type(2) := 'OR';
3576   END;
3577 
3578   /**  Private procedure to acquire and score at party level  ***/
3579   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
3580     l_party_id_idx NUMBER:=1;
3581     l_ctx_id NUMBER;
3582     l_TX35_new varchar2(4000);
3583   BEGIN
3584     SAVEPOINT eval_start;
3585     set_person_party_type;
3586     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3587       l_ctx_id := l_search_ctx_id;
3588       FORALL I in 1..H_PARTY_ID.COUNT 
3589          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3590              l_search_ctx_id,H_PARTY_ID(I));
3591       H_PARTY_ID.DELETE;
3592       H_PARTY_ID_LIST.DELETE;
3593     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3594       l_ctx_id := l_search_ctx_id;
3595       FORALL I in 1..H_PARTY_ID.COUNT 
3596          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3597              l_search_ctx_id,H_PARTY_ID(I));
3598       l_party_id_idx := H_PARTY_ID.COUNT+1;
3599     ELSE
3600       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3601          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh 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 estimated hits exceed threshold',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 g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' THEN
3606    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3607       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);
3608     END IF;
3609           IF (l_party_site_contains_str IS NULL AND
3610              l_contact_contains_str IS NULL AND
3611              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN
3612             return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);
3613             RAISE L_RETURN_IMM_EXC;
3614           ELSE
3615             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);
3616           END IF;
3617         ELSE
3618           IF p_index>1 THEN
3619    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3620       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);
3621     END IF;
3622             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3623             FND_MSG_PUB.ADD;
3624             RAISE FND_API.G_EXC_ERROR;
3625           ELSE
3626             push_eval;
3627             RETURN;
3628           END IF;
3629         END IF;
3630       END IF;
3631       l_ctx_id := NULL;
3632       l_party_id_idx := H_PARTY_ID.COUNT+1;
3633     END IF;
3634     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
3635       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);
3636     END IF;
3637     LOOP 
3638       FETCH l_party_cur INTO
3639          l_party_id , l_TX39, l_TX40, l_TX41;
3640       EXIT WHEN l_party_cur%NOTFOUND;
3641       l_index := map_id(l_party_id);
3642       l_score := GET_PARTY_SCORE(l_TX39,l_TX40,l_TX41);
3643       IF NOT H_SCORES.EXISTS(l_index) THEN
3644         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
3645       ELSE
3646         H_SCORES(l_index).TOTAL_SCORE := 
3647                 H_SCORES(l_index).TOTAL_SCORE+l_score;
3648         H_SCORES(l_index).PARTY_SCORE := l_score;
3649       END IF;
3650       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3651         H_PARTY_ID_LIST(l_index) := 1;
3652         H_PARTY_ID(l_party_id_idx) := l_party_id;
3653         l_party_id_idx:= l_party_id_idx+1;
3654       END IF;
3655       IF (l_party_id_idx-1)>l_max_thresh THEN
3656          IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
3657           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
3658           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
3659           AND l_contact_pt_contains_str IS NULL THEN
3660           H_PARTY_ID.DELETE(l_party_id_idx-1);
3661           H_PARTY_ID_LIST.DELETE(l_index);
3662           H_SCORES.DELETE(l_index);
3663           EXIT;
3664         END IF;
3665         CLOSE l_party_cur;
3666         IF p_index>1 THEN
3667    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3668       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);
3669     END IF;
3670           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3671           FND_MSG_PUB.ADD;
3672           RAISE FND_API.G_EXC_ERROR;
3673         ELSE
3674           push_eval;
3675           RETURN;
3676         END IF;
3677       END IF;
3678     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3679       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);
3680       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);
3681       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);
3682     END IF;
3683     END LOOP;
3684     CLOSE l_party_cur;
3685     ROLLBACK to eval_start;
3686   END;
3687   PROCEDURE open_person_contact_cursor(
3688             p_contains_str  VARCHAR2, 
3689             p_search_ctx_id  NUMBER, 
3690             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
3691   BEGIN
3692     OPEN x_cursor FOR 
3693       SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID, TX6, TX5
3694       FROM HZ_STAGED_CONTACTS stage
3695       WHERE contains( concat_col, p_contains_str)>0
3696       AND ORG_CONTACT_ID in (
3697             SELECT  /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ 
3698             org_contact_id
3699             from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc
3700             where d.party_id = r.subject_id
3701             and oc.party_relationship_id = r.relationship_id
3702             and d.search_context_id = p_search_ctx_id);   
3703   exception
3704     when others then
3705       if (instrb(SQLERRM,'DRG-51030')>0) then 
3706         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
3707         FND_MSG_PUB.ADD;
3708         RAISE FND_API.G_EXC_ERROR;
3709       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
3710         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
3711         FND_MSG_PUB.ADD;
3712         RAISE FND_API.G_EXC_ERROR;
3713       else 
3714         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3715       end if;
3716   END;
3717 
3718   /**  Private procedure to acquire and score at party site level  ***/
3719   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
3720     l_party_id_idx NUMBER:=1;
3721     l_ctx_id NUMBER;
3722     h_ps_id HZ_PARTY_SEARCH.IDList;
3723     h_ps_party_id HZ_PARTY_SEARCH.IDList;
3724     h_ps_score HZ_PARTY_SEARCH.IDList;
3725     detcnt NUMBER := 1;
3726     l_person_id NUMBER;
3727   BEGIN
3728     SAVEPOINT eval_start;
3729     unset_person_party_type;
3730     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3731       l_ctx_id := l_search_ctx_id;
3732       FORALL I in 1..H_PARTY_ID.COUNT 
3733          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3734              l_search_ctx_id,H_PARTY_ID(I));
3735       H_PARTY_ID.DELETE;
3736       H_PARTY_ID_LIST.DELETE;
3737     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3738       l_ctx_id := l_search_ctx_id;
3739       FORALL I in 1..H_PARTY_ID.COUNT 
3740          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3741              l_search_ctx_id,H_PARTY_ID(I));
3742       l_party_id_idx := H_PARTY_ID.COUNT+1;
3743     ELSE
3744       l_party_id_idx := H_PARTY_ID.COUNT+1;
3745       l_ctx_id := NULL;
3746     END IF;
3747     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);
3748     LOOP 
3749       FETCH l_party_site_cur INTO
3750          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;
3751       EXIT WHEN l_party_site_cur%NOTFOUND;
3752       IF l_ctx_id IS NULL THEN
3753         l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);
3754       ELSE
3755         l_person_id := l_ps_party_id;
3756       END IF;
3757       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3758         l_index := map_id(l_person_id);
3759         l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX14,l_TX15);
3760         IF NOT H_SCORES.EXISTS(l_index) THEN
3761           IF l_ctx_id IS NULL THEN
3762             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);
3763           END IF;
3764         ELSE
3765           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3766             H_SCORES(l_index).TOTAL_SCORE := 
3767                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3768             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3769           END IF;
3770         END IF;
3771         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3772           H_PARTY_ID_LIST(l_index) := 1;
3773           H_PARTY_ID(l_party_id_idx) := l_person_id;
3774           l_party_id_idx:= l_party_id_idx+1;
3775         END IF;
3776         IF (l_party_id_idx-1)>l_max_thresh THEN
3777           CLOSE l_party_site_cur;
3778           IF p_index>1 THEN
3779    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3780       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);
3781     END IF;
3782             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3783             FND_MSG_PUB.ADD;
3784             RAISE FND_API.G_EXC_ERROR;
3785           ELSE
3786             push_eval;
3787             RETURN;
3788           END IF;
3789         END IF;
3790         IF p_ins_details = 'Y' THEN
3791           h_ps_id(detcnt) := l_party_site_id;
3792           h_ps_party_id(detcnt) := l_person_id;
3793           IF (p_emax_score > 0) THEN 
3794               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
3795           ELSE 
3796               h_ps_score(detcnt) := 0; 
3797           END IF; 
3798           detcnt := detcnt +1;
3799         END IF;
3800     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3801       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);
3802       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);
3803       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);
3804       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);
3805     END IF;
3806       END IF;
3807     END LOOP;
3808     CLOSE l_party_site_cur;
3809     ROLLBACK to eval_start;
3810     IF p_ins_details = 'Y' THEN
3811       FORALL I in 1..h_ps_id.COUNT 
3812         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
3813           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
3814     END IF;
3815   END;
3816 
3817   /**  Private procedure to acquire and score at party site level  ***/
3818   PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
3819     l_party_id_idx NUMBER:=1;
3820     l_ctx_id NUMBER;
3821     h_ct_id HZ_PARTY_SEARCH.IDList;
3822     h_ct_party_id HZ_PARTY_SEARCH.IDList;
3823     h_ct_score HZ_PARTY_SEARCH.IDList;
3824     detcnt NUMBER := 1;
3825     l_person_id NUMBER;
3826   BEGIN
3827     SAVEPOINT eval_start;
3828     l_ctx_id := l_search_ctx_id;
3829     unset_person_party_type;
3830     FORALL I in 1..H_PARTY_ID.COUNT 
3831          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3832              l_search_ctx_id,H_PARTY_ID(I));
3833       l_party_id_idx := H_PARTY_ID.COUNT+1;
3834     open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);
3835     LOOP 
3836       FETCH l_contact_cur INTO
3837          l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
3838       EXIT WHEN l_contact_cur%NOTFOUND;
3839       l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);
3840       l_index := map_id(l_person_id);
3841       IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3842         l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
3843         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
3844           H_SCORES(l_index).TOTAL_SCORE := 
3845                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
3846           H_SCORES(l_index).CONTACT_SCORE := l_score;
3847         END IF;
3848       END IF;
3849       IF p_ins_details = 'Y' THEN
3850         h_ct_id(detcnt) := l_org_contact_id;
3851         h_ct_party_id(detcnt) := l_person_id;
3852         IF (p_emax_score > 0) THEN 
3853             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
3854         ELSE 
3855             h_ct_score(detcnt) := 0; 
3856         END IF; 
3857         detcnt := detcnt +1;
3858       END IF;
3859     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3860       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);
3861       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);
3862       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);
3863       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);
3864     END IF;
3865     END LOOP;
3866     CLOSE l_contact_cur;
3867     ROLLBACK to eval_start;
3868     IF p_ins_details = 'Y' THEN
3869       FORALL I in 1..h_ct_id.COUNT 
3870         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
3871           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
3872     END IF;
3873   END;
3874 
3875   /**  Private procedure to acquire and score at contact point level  ***/
3876   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
3877     l_party_id_idx NUMBER:=1;
3878     l_ctx_id NUMBER;
3879     h_cpt_id HZ_PARTY_SEARCH.IDList;
3880     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
3881     h_cpt_score HZ_PARTY_SEARCH.IDList;
3882     detcnt NUMBER := 1;
3883     l_person_id NUMBER;
3884     is_a_match VARCHAR2(1) := 'Y';
3885     l_cpt_flag VARCHAR2(1) := 'N';
3886   BEGIN
3887    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3888       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);
3889     END IF;
3890    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3891       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);
3892     END IF;
3893     SAVEPOINT eval_start;
3894     unset_person_party_type;
3895     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3896       l_ctx_id := l_search_ctx_id;
3897       FORALL I in 1..H_PARTY_ID.COUNT 
3898          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3899              l_search_ctx_id,H_PARTY_ID(I));
3900       H_PARTY_ID.DELETE;
3901       H_PARTY_ID_LIST.DELETE;
3902     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3903    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3904       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);
3905     END IF;
3906       l_ctx_id := l_search_ctx_id;
3907       FORALL I in 1..H_PARTY_ID.COUNT 
3908          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3909              l_search_ctx_id,H_PARTY_ID(I));
3910       l_party_id_idx := H_PARTY_ID.COUNT+1;
3911     ELSE
3912    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3913       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);
3914     END IF;
3915       l_ctx_id := NULL;
3916       l_party_id_idx := H_PARTY_ID.COUNT+1;
3917     END IF;
3918    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3919       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);
3920     END IF;
3921     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);
3922     LOOP 
3923       FETCH l_contact_pt_cur INTO
3924          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;
3925       EXIT WHEN l_contact_pt_cur%NOTFOUND;
3926    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3927       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);
3928     END IF;
3929    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3930       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);
3931     END IF;
3932    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3933       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);
3934     END IF;
3935       IF l_ctx_id IS NULL THEN
3936         l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);
3937       ELSE
3938         l_person_id := l_cpt_party_id;
3939       END IF;
3940       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3941         l_index := map_id(l_person_id);
3942         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
3943         IF NOT H_SCORES.EXISTS(l_index) THEN
3944           IF l_ctx_id IS NULL THEN
3945             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);
3946            H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3947    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3948       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);
3949     END IF;
3950    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3951       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);
3952     END IF;
3953    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3954       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);
3955     END IF;
3956           END IF;
3957         ELSE
3958    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3959       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);
3960     END IF;
3961           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
3962             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
3963               H_SCORES(l_index).TOTAL_SCORE :=
3964               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;
3965               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;
3966               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3967    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3968       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);
3969     END IF;
3970    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3971       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);
3972     END IF;
3973    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3974       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);
3975     END IF;
3976    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3977       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);
3978     END IF;
3979             END IF;
3980           ELSE
3981    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3982       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);
3983     END IF;
3984             H_SCORES(l_index).TOTAL_SCORE :=
3985             H_SCORES(l_index).TOTAL_SCORE+l_score;
3986             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3987             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3988    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3989       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);
3990     END IF;
3991    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3992       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);
3993     END IF;
3994    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3995       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);
3996     END IF;
3997           END IF;
3998         END IF;
3999    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4000       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);
4001     END IF;
4002    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4003       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);
4004     END IF;
4005         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4006           -- If rule is match all 
4007           IF l_match_str = ' AND ' THEN
4008    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4009       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);
4010     END IF;
4011             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4012               is_a_match := 'Y';
4013    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4014       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);
4015     END IF;
4016             ELSE
4017               is_a_match := 'N';
4018    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4019       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);
4020     END IF;
4021             END IF;
4022           -- Else it is construed as a match anyway 
4023           ELSE
4024             is_a_match := 'Y';
4025    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4026       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);
4027     END IF;
4028           END IF;
4029           IF (is_a_match='Y') THEN
4030           H_PARTY_ID_LIST(l_index) := 1;
4031           H_PARTY_ID(l_party_id_idx) := l_person_id;
4032           l_party_id_idx:= l_party_id_idx+1;
4033       end if;
4034         END IF;
4035         IF (l_party_id_idx-1)>l_max_thresh THEN
4036           CLOSE l_contact_pt_cur;
4037           IF p_index>1 THEN
4038    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4039       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);
4040     END IF;
4041             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4042             FND_MSG_PUB.ADD;
4043             RAISE FND_API.G_EXC_ERROR;
4044           ELSE
4045             push_eval;
4046             RETURN;
4047           END IF;
4048         END IF;
4049         IF p_ins_details = 'Y' THEN
4050           -- If rule is match all 
4051           IF l_match_str = ' AND ' THEN
4052    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4053       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);
4054     END IF;
4055             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4056               is_a_match := 'Y';
4057    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4058       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);
4059     END IF;
4060             ELSE
4061               is_a_match := 'N';
4062    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4063       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);
4064     END IF;
4065             END IF;
4066           -- Else it is construed as a match anyway 
4067           ELSE
4068             is_a_match := 'Y';
4069    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4070       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);
4071     END IF;
4072           END IF;
4073           IF (is_a_match='Y') THEN
4074    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4075       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);
4076     END IF;
4077           FOR I IN 1..h_cpt_id.COUNT LOOP
4078           IF h_cpt_id(I)=l_contact_pt_id THEN
4079           	 l_cpt_flag := 'Y';
4080           END IF;
4081           END LOOP;
4082           IF l_cpt_flag = 'Y' THEN
4083           	 NULL;
4084           ELSE 
4085          	 h_cpt_id(detcnt) := l_contact_pt_id;
4086           h_cpt_party_id(detcnt) := l_person_id;
4087           	 IF (p_emax_score > 0) THEN 
4088               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
4089             ELSE 
4090               h_cpt_score(detcnt) := 0; 
4091           	 END IF; 
4092             detcnt := detcnt +1;
4093           END IF;
4094       end if;
4095         END IF;
4096     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4097       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);
4098       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);
4099       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);
4100       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);
4101     END IF;
4102       END IF;
4103     END LOOP;
4104     CLOSE l_contact_pt_cur;
4105     ROLLBACK to eval_start;
4106     IF p_ins_details = 'Y' THEN
4107       FORALL I in 1..h_cpt_id.COUNT 
4108         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
4109           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
4110     END IF;
4111   END;
4112 
4113   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
4114   PROCEDURE do_eval (p_index NUMBER) IS
4115     l_ctx_id NUMBER;
4116     l_threshold NUMBER;
4117     other_acq_criteria_exists BOOLEAN; 
4118     acq_cnt NUMBER; 
4119   BEGIN
4120     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
4121      l_threshold :=  round(( l_entered_max_score / 460) * 78); 
4122     other_acq_criteria_exists := TRUE ;
4123     --check if acquisition criteria exists for any other entity
4124     IF l_party_contains_str IS NOT NULL THEN 
4125     	acq_cnt := 1; 
4126     END IF; 
4127     IF l_party_site_contains_str IS NOT NULL THEN 
4128     	acq_cnt := acq_cnt+1; 
4129     END IF; 
4130     IF l_contact_contains_str IS NOT NULL THEN 
4131     	acq_cnt := acq_cnt+1; 
4132     END IF;
4133     IF l_contact_pt_contains_str IS NOT NULL THEN 
4134     	acq_cnt := acq_cnt+1; 
4135     END IF;  
4136     IF acq_cnt>1 THEN 
4137     	other_acq_criteria_exists := TRUE; 
4138     ELSE
4139     	other_acq_criteria_exists := FALSE; 
4140     END IF;  
4141       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);
4142       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);
4143       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);
4144     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
4145     	IF ( call_max_score(p_index) < l_threshold) THEN 
4146    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4147       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);
4148     END IF;
4149 	     	RETURN;	
4150     	ELSE 
4151    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4152       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);
4153     END IF;
4154 	     	FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED'); 
4155 	     	FND_MSG_PUB.ADD; 
4156 	     	RAISE FND_API.G_EXC_ERROR; 
4157     	END IF; 
4158 	  ELSE
4159    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4160       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);
4161     END IF;
4162       FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4163       FND_MSG_PUB.ADD;
4164       RAISE FND_API.G_EXC_ERROR;
4165      END IF; 
4166     END IF;
4167     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
4168       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
4169     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
4170       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4171     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
4172       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4173     END IF;
4174   END;
4175   /************ End of find_persons private procedures **********/ 
4176 
4177   BEGIN
4178 
4179     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4180       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);
4181     END IF;
4182     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4183       hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4184       hz_utility_v2pub.debug(p_message=>'p_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);
4185       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);
4186     END IF;
4187     -- ************************************
4188     -- STEP 1. Initialization and error checks
4189 
4190     l_match_str := ' AND ';
4191     IF p_match_type = 'AND' THEN
4192       l_match_str := ' AND ';
4193     ELSIF p_match_type = 'OR' THEN
4194       l_match_str := ' OR ';
4195     END IF;
4196     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);
4197     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4198 
4199     l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
4200     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
4201       g_score_until_thresh := true;
4202     ELSE
4203       g_score_until_thresh := false;
4204     END IF;
4205     -- ************************************************************
4206     -- STEP 2. Setup of intermedia query strings for Acquisition query
4207     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
4208     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
4209     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
4210     l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);
4211     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
4212 
4213     -- Setup Search Context ID
4214     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4215     x_search_ctx_id := l_search_ctx_id;
4216 
4217     IF l_party_contains_str IS NULL THEN
4218       defpt := 1;
4219     END IF;
4220     IF l_party_site_contains_str IS NULL THEN
4221       defps := 1;
4222     END IF;
4223     IF l_contact_contains_str IS NULL THEN
4224       defct := 1;
4225     END IF;
4226     IF l_contact_pt_contains_str IS NULL THEN
4227       defcpt := 1;
4228     END IF;
4229 
4230     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4231       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);
4232       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);
4233       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);
4234       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);
4235       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);
4236       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);
4237     END IF;
4238     FOR I in 1..5 LOOP
4239       do_eval(I);
4240     END LOOP;
4241     IF l_contact_contains_str IS NOT NULL THEN
4242       eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);
4243     END IF;
4244     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4245       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);
4246     END IF;
4247     x_num_matches := 0;
4248     l_num_eval := 0;
4249     IF l_match_str = ' OR ' THEN
4250       l_party_id := H_SCORES.FIRST;
4251     ELSE
4252       l_party_id := H_PARTY_ID_LIST.FIRST;
4253     END IF;
4254     WHILE l_party_id IS NOT NULL LOOP
4255       l_num_eval:= l_num_eval+1;
4256     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4257       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);
4258       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);
4259     END IF;
4260       IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(78/460) THEN
4261             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
4262             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));
4263             x_num_matches := x_num_matches+1;
4264       END IF;
4265       IF l_match_str = ' OR ' THEN
4266         l_party_id:=H_SCORES.NEXT(l_party_id);
4267       ELSE
4268         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
4269       END IF;
4270     END LOOP;
4271     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
4272     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4273       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);
4274     END IF;
4275 EXCEPTION
4276   WHEN L_RETURN_IMM_EXC THEN
4277     RETURN;
4278   WHEN FND_API.G_EXC_ERROR THEN
4279     RAISE FND_API.G_EXC_ERROR;
4280   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4281     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4282   WHEN OTHERS THEN
4283     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4284     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_persons');
4285     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4286     FND_MSG_PUB.ADD;
4287     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4288 END find_persons;
4289 
4290 PROCEDURE find_persons (
4291       p_rule_id               IN      NUMBER,
4292       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
4293       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
4294       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
4295       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
4296       p_restrict_sql          IN      VARCHAR2,
4297       p_match_type            IN      VARCHAR2,
4298       p_search_merged         IN      VARCHAR2,
4299       p_ins_details           IN      VARCHAR2,
4300       x_search_ctx_id         OUT     NUMBER,
4301       x_num_matches           OUT     NUMBER
4302 ) IS
4303 
4304   BEGIN
4305      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);
4306   END;
4307 PROCEDURE find_party_details (
4308       p_rule_id               IN      NUMBER,
4309       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
4310       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
4311       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
4312       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
4313       p_restrict_sql          IN      VARCHAR2,
4314       p_match_type            IN      VARCHAR2,
4315       p_search_merged         IN      VARCHAR2,
4316       x_search_ctx_id         OUT     NUMBER,
4317       x_num_matches           OUT     NUMBER
4318 ) IS
4319 
4320   BEGIN
4321     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4322       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);
4323     END IF;
4324     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4325       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);
4326       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);
4327       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);
4328       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);
4329     END IF;
4330   find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,
4331                p_restrict_sql,p_match_type,p_search_merged,null,null, null,'Y',
4332                x_search_ctx_id,x_num_matches);
4333   DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4334   AND NOT EXISTS 
4335        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);
4336   DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4337   AND NOT EXISTS 
4338        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);
4339   DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4340   AND NOT EXISTS 
4341        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);
4342     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4343       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);
4344     END IF;
4345 EXCEPTION
4346   WHEN FND_API.G_EXC_ERROR THEN
4347     RAISE FND_API.G_EXC_ERROR;
4348   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4349     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4350   WHEN OTHERS THEN
4351     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4352     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_party_details');
4353     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4354     FND_MSG_PUB.ADD;
4355     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4356 END find_party_details;
4357 
4358 PROCEDURE find_duplicate_parties (
4359       p_rule_id               IN      NUMBER,
4360       p_party_id              IN      NUMBER,
4361       p_restrict_sql          IN      VARCHAR2,
4362       p_match_type            IN      VARCHAR2,
4363       p_dup_batch_id          IN      NUMBER,
4364       p_search_merged         IN      VARCHAR2,
4365       x_dup_set_id            OUT     NUMBER,
4366       x_search_ctx_id         OUT     NUMBER,
4367       x_num_matches           OUT     NUMBER
4368 ) IS
4369   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4370   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4371   l_contact_list HZ_PARTY_SEARCH.contact_list;
4372   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4373   l_match_idx NUMBER;
4374 
4375   --Fix for bug 4417124
4376   l_use_contact_addr_info BOOLEAN := TRUE;
4377   l_use_contact_cpt_info BOOLEAN  := TRUE;
4378   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
4379   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
4380 
4381 BEGIN
4382 
4383     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4384       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);
4385     END IF;
4386     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4387       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);
4388       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);
4389       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);
4390       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);
4391       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);
4392       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);
4393     END IF;
4394 
4395   --Fix for bug 4417124 
4396 
4397   SELECT use_contact_addr_flag, use_contact_cpt_flag 
4398   INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
4399   FROM hz_match_rules_b 
4400   WHERE match_rule_id = 8; 
4401 
4402   IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
4403     l_use_contact_addr_info := FALSE; 
4404   END IF; 
4405 
4406   IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
4407     l_use_contact_cpt_info := FALSE; 
4408   END IF; 
4409 
4410  --End fix for bug 4417124
4411 
4412   get_party_for_search(
4413               p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);
4414 
4415     IF NOT check_prim_cond (l_party_rec,
4416                             l_party_site_list,
4417                             l_contact_list,
4418                             l_cpt_list) THEN
4419       x_dup_set_id:=NULL;
4420       x_search_ctx_id:=NULL;
4421       x_num_matches:=0;
4422       RETURN;
4423     END IF;
4424   x_dup_set_id := NULL;
4425   IF p_dup_batch_id IS NOT NULL THEN
4426     SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;
4427   END IF;
4428 
4429   --Fix for bug 4417124 
4430   IF l_party_rec.PARTY_TYPE = 'PERSON' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN
4431     find_persons(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   ELSE
4435     find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4436                p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4437                x_search_ctx_id,x_num_matches);
4438   END IF;
4439 
4440   IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN
4441     INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,
4442       STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,
4443       LAST_UPDATE_DATE, LAST_UPDATED_BY) 
4444     VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, 'SYSBATCH',
4445       'PARTY_MERGE', hz_utility_pub.created_by, hz_utility_pub.creation_date,
4446       hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,
4447       hz_utility_pub.user_id);
4448 
4449     INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
4450       MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
4451       LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) 
4452     VALUES (p_party_id,x_dup_set_id,0,0,
4453       'Y',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,
4454       hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,
4455       hz_utility_pub.user_id,p_dup_batch_id);
4456   ELSE
4457     x_dup_set_id := NULL;
4458   END IF;
4459     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4460       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);
4461     END IF;
4462 EXCEPTION
4463   WHEN FND_API.G_EXC_ERROR THEN
4464     RAISE FND_API.G_EXC_ERROR;
4465   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4466     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4467   WHEN OTHERS THEN
4468     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4469     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_duplicate_parties');
4470     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4471     FND_MSG_PUB.ADD;
4472     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4473 END find_duplicate_parties;
4474 
4475 PROCEDURE find_duplicate_party_sites (
4476       p_rule_id               IN      NUMBER,
4477       p_party_site_id         IN      NUMBER,
4478       p_party_id              IN      NUMBER,
4479       p_restrict_sql          IN      VARCHAR2,
4480       p_match_type            IN      VARCHAR2,
4481       x_search_ctx_id         OUT     NUMBER,
4482       x_num_matches           OUT     NUMBER
4483 ) IS
4484 
4485    l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
4486    l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4487    l_contact_list HZ_PARTY_SEARCH.contact_list; 
4488    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
4489    contact_point_ids HZ_PARTY_SEARCH.IDList; 
4490    p_party_site_list HZ_PARTY_SEARCH.IDList;  
4491    p_contact_ids HZ_PARTY_SEARCH.IDList; 
4492   l_match_idx NUMBER;
4493    cursor get_cpts_for_party_sites is select contact_point_id  
4494                          from hz_contact_points 
4495                          where owner_table_name = 'HZ_PARTY_SITES' 
4496                          and primary_flag='Y'
4497                          and owner_table_id = p_party_site_id; 
4498    BEGIN 
4499     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4500       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);
4501     END IF;
4502     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4503       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);
4504       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);
4505       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);
4506       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);
4507       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);
4508     END IF;
4509      p_party_site_list(1) := p_party_site_id; 
4510      OPEN get_cpts_for_party_sites;
4511      LOOP       
4512      FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; 
4513          EXIT WHEN get_cpts_for_party_sites%NOTFOUND; 
4514      END LOOP;  
4515      CLOSE get_cpts_for_party_sites; 
4516   
4517      get_search_criteria (
4518          null,
4519          p_party_site_list,
4520          HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4521          contact_point_ids, 
4522          l_party_search_rec,
4523          l_party_site_list,
4524          l_contact_list,
4525          l_contact_point_list) ;
4526     IF NOT check_prim_cond (l_party_search_rec,
4527                             l_party_site_list,
4528                             l_contact_list,
4529                             l_contact_point_list) THEN
4530       x_search_ctx_id:=NULL;
4531       x_num_matches:=0;
4532       RETURN;
4533     END IF;
4534  
4535      get_matching_party_sites (p_rule_id, 
4536          p_party_id, 
4537          l_party_site_list, 
4538          l_contact_point_list,
4539          p_restrict_sql, 
4540          p_match_type, 
4541          p_party_site_id, 
4542          x_search_ctx_id,
4543          x_num_matches);
4544     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4545       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);
4546     END IF;
4547 EXCEPTION
4548   WHEN FND_API.G_EXC_ERROR THEN
4549     RAISE FND_API.G_EXC_ERROR;
4550   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4551     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4552   WHEN OTHERS THEN
4553     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4554     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_duplicate_party_sites');
4555     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4556     FND_MSG_PUB.ADD;
4557     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4558 END find_duplicate_party_sites; 
4559  
4560 PROCEDURE find_duplicate_contacts (
4561       p_rule_id               IN      NUMBER,
4562       p_org_contact_id        IN      NUMBER,
4563       p_party_id              IN      NUMBER,
4564       p_restrict_sql          IN      VARCHAR2,
4565       p_match_type            IN      VARCHAR2,
4566       x_search_ctx_id         OUT     NUMBER,
4567       x_num_matches           OUT     NUMBER
4568 ) IS
4569 
4570  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4571  l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4572  l_contact_list HZ_PARTY_SEARCH.contact_list; 
4573  l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
4574  contact_point_ids HZ_PARTY_SEARCH.IDList; 
4575  p_party_site_list HZ_PARTY_SEARCH.IDList;   
4576  p_contact_ids HZ_PARTY_SEARCH.IDList; 
4577   l_match_idx NUMBER;
4578  cursor get_cpt_for_contact_id is select  contact_point_id 
4579    from hz_org_contacts a, hz_relationships b, hz_contact_points c 
4580    where a.party_relationship_id = b.relationship_id 
4581      and c.owner_table_name = 'HZ_PARTIES' 
4582      and c.primary_flag='Y'
4583      and c.owner_table_id = b.party_id 
4584      and b.directional_flag = 'F'  
4585      and a.org_contact_id = p_org_contact_id; 
4586 BEGIN 
4587     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4588       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);
4589     END IF;
4590     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4591       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);
4592       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);
4593       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);
4594       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);
4595       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);
4596     END IF;
4597     p_contact_ids(1) := p_org_contact_id; 
4598     OPEN get_cpt_for_contact_id; 
4599     LOOP 
4600     FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; 
4601         EXIT WHEN get_cpt_for_contact_id%NOTFOUND; 
4602     END LOOP;  
4603     CLOSE get_cpt_for_contact_id; 
4604  
4605     get_search_criteria (
4606         null,
4607         HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4608         p_contact_ids,
4609         contact_point_ids, 
4610         l_party_search_rec,
4611         l_party_site_list, 
4612         l_contact_list,
4613         l_contact_point_list) ;
4614     IF NOT check_prim_cond (l_party_search_rec,
4615                             l_party_site_list,
4616                             l_contact_list,
4617                             l_contact_point_list) THEN
4618       x_search_ctx_id:=NULL;
4619       x_num_matches:=0;
4620       RETURN;
4621     END IF;
4622  
4623     get_matching_contacts (p_rule_id, 
4624         p_party_id, 
4625         l_contact_list, 
4626         l_contact_point_list, 
4627         p_restrict_sql, 
4628         p_match_type, 
4629         p_org_contact_id, 
4630         x_search_ctx_id, 
4631         x_num_matches);
4632  
4633     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4634       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);
4635     END IF;
4636 EXCEPTION
4637   WHEN FND_API.G_EXC_ERROR THEN
4638     RAISE FND_API.G_EXC_ERROR;
4639   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4640     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4641   WHEN OTHERS THEN
4642     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4643     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_duplicate_contacts');
4644     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4645     FND_MSG_PUB.ADD;
4646     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4647 END find_duplicate_contacts; 
4648 
4649 PROCEDURE find_duplicate_contact_points (
4650       p_rule_id               IN      NUMBER,
4651       p_contact_point_id      IN      NUMBER,
4652       p_party_id              IN      NUMBER,
4653       p_restrict_sql          IN      VARCHAR2,
4654       p_match_type            IN      VARCHAR2,
4655       x_search_ctx_id         OUT     NUMBER,
4656       x_num_matches           OUT     NUMBER
4657 ) IS
4658  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
4659   l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4660    l_contact_list HZ_PARTY_SEARCH.contact_list;  
4661    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;  
4662    contact_point_ids HZ_PARTY_SEARCH.IDList;  
4663   p_party_site_list HZ_PARTY_SEARCH.IDList;   
4664   p_contact_ids HZ_PARTY_SEARCH.IDList;  
4665   l_match_idx NUMBER;
4666 
4667 BEGIN
4668     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4669       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);
4670     END IF;
4671     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4672       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);
4673       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);
4674       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);
4675       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);
4676       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);
4677     END IF;
4678   contact_point_ids(1) := p_contact_point_id;   
4679   get_search_criteria (   
4680       null, 
4681       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
4682       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
4683       contact_point_ids,   
4684       l_party_search_rec, 
4685       l_party_site_list, 
4686       l_contact_list, 
4687       l_contact_point_list ); 
4688     
4689     IF NOT check_prim_cond (l_party_search_rec,
4690                             l_party_site_list,
4691                             l_contact_list,
4692                             l_contact_point_list) THEN
4693       x_search_ctx_id:=NULL;
4694       x_num_matches:=0;
4695       RETURN;
4696     END IF;
4697    get_matching_contact_points ( 
4698       p_rule_id, 
4699       p_party_id, 
4700      l_contact_point_list, 
4701       p_restrict_sql, 
4702       p_match_type, 
4703       p_contact_point_id, 
4704       x_search_ctx_id, 
4705       x_num_matches );  
4706     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4707       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);
4708     END IF;
4709 EXCEPTION
4710   WHEN FND_API.G_EXC_ERROR THEN
4711     RAISE FND_API.G_EXC_ERROR;
4712   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4713     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4714   WHEN OTHERS THEN
4715     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4716     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_duplicate_contact_points');
4717     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4718     FND_MSG_PUB.ADD;
4719     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4720 END find_duplicate_contact_points;
4721 
4722 PROCEDURE find_parties_dynamic (
4723         p_rule_id               IN      NUMBER,
4724         p_attrib_id1            IN      NUMBER,
4725         p_attrib_id2            IN      NUMBER,
4726         p_attrib_id3            IN      NUMBER,
4727         p_attrib_id4            IN      NUMBER,
4728         p_attrib_id5            IN      NUMBER,
4729         p_attrib_id6            IN      NUMBER,
4730         p_attrib_id7            IN      NUMBER,
4731         p_attrib_id8            IN      NUMBER,
4732         p_attrib_id9            IN      NUMBER,
4733         p_attrib_id10           IN      NUMBER,
4734         p_attrib_id11           IN      NUMBER,
4735         p_attrib_id12           IN      NUMBER,
4736         p_attrib_id13           IN      NUMBER,
4737         p_attrib_id14           IN      NUMBER,
4738         p_attrib_id15           IN      NUMBER,
4739         p_attrib_id16           IN      NUMBER,
4740         p_attrib_id17           IN      NUMBER,
4741         p_attrib_id18           IN      NUMBER,
4742         p_attrib_id19           IN      NUMBER,
4743         p_attrib_id20           IN      NUMBER,
4744         p_attrib_val1           IN      VARCHAR2,
4745         p_attrib_val2           IN      VARCHAR2,
4746         p_attrib_val3           IN      VARCHAR2,
4747         p_attrib_val4           IN      VARCHAR2,
4748         p_attrib_val5           IN      VARCHAR2,
4749         p_attrib_val6           IN      VARCHAR2,
4750         p_attrib_val7           IN      VARCHAR2,
4751         p_attrib_val8           IN      VARCHAR2,
4752         p_attrib_val9           IN      VARCHAR2,
4753         p_attrib_val10          IN      VARCHAR2,
4754         p_attrib_val11          IN      VARCHAR2,
4755         p_attrib_val12          IN      VARCHAR2,
4756         p_attrib_val13          IN      VARCHAR2,
4757         p_attrib_val14          IN      VARCHAR2,
4758         p_attrib_val15          IN      VARCHAR2,
4759         p_attrib_val16          IN      VARCHAR2,
4760         p_attrib_val17          IN      VARCHAR2,
4761         p_attrib_val18          IN      VARCHAR2,
4762         p_attrib_val19          IN      VARCHAR2,
4763         p_attrib_val20          IN      VARCHAR2,
4764         p_restrict_sql          IN      VARCHAR2,
4765         p_match_type            IN      VARCHAR2,
4766         p_search_merged         IN      VARCHAR2,
4767         x_search_ctx_id         OUT     NUMBER,
4768         x_num_matches           OUT     NUMBER
4769 ) IS
4770   BEGIN
4771     call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,
4772                      p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,
4773                      p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,
4774                      p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,
4775                      p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,
4776                      p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,
4777                      p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,
4778                      p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,
4779                      p_restrict_sql,'FIND_PARTIES',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);
4780  END;
4781 
4782 PROCEDURE call_api_dynamic (
4783         p_rule_id               IN      NUMBER,
4784         p_attrib_id1            IN      NUMBER,
4785         p_attrib_id2            IN      NUMBER,
4786         p_attrib_id3            IN      NUMBER,
4787         p_attrib_id4            IN      NUMBER,
4788         p_attrib_id5            IN      NUMBER,
4789         p_attrib_id6            IN      NUMBER,
4790         p_attrib_id7            IN      NUMBER,
4791         p_attrib_id8            IN      NUMBER,
4792         p_attrib_id9            IN      NUMBER,
4793         p_attrib_id10           IN      NUMBER,
4794         p_attrib_id11           IN      NUMBER,
4795         p_attrib_id12           IN      NUMBER,
4796         p_attrib_id13           IN      NUMBER,
4797         p_attrib_id14           IN      NUMBER,
4798         p_attrib_id15           IN      NUMBER,
4799         p_attrib_id16           IN      NUMBER,
4800         p_attrib_id17           IN      NUMBER,
4801         p_attrib_id18           IN      NUMBER,
4802         p_attrib_id19           IN      NUMBER,
4803         p_attrib_id20           IN      NUMBER,
4804         p_attrib_val1           IN      VARCHAR2,
4805         p_attrib_val2           IN      VARCHAR2,
4806         p_attrib_val3           IN      VARCHAR2,
4807         p_attrib_val4           IN      VARCHAR2,
4808         p_attrib_val5           IN      VARCHAR2,
4809         p_attrib_val6           IN      VARCHAR2,
4810         p_attrib_val7           IN      VARCHAR2,
4811         p_attrib_val8           IN      VARCHAR2,
4812         p_attrib_val9           IN      VARCHAR2,
4813         p_attrib_val10          IN      VARCHAR2,
4814         p_attrib_val11          IN      VARCHAR2,
4815         p_attrib_val12          IN      VARCHAR2,
4816         p_attrib_val13          IN      VARCHAR2,
4817         p_attrib_val14          IN      VARCHAR2,
4818         p_attrib_val15          IN      VARCHAR2,
4819         p_attrib_val16          IN      VARCHAR2,
4820         p_attrib_val17          IN      VARCHAR2,
4821         p_attrib_val18          IN      VARCHAR2,
4822         p_attrib_val19          IN      VARCHAR2,
4823         p_attrib_val20          IN      VARCHAR2,
4824         p_restrict_sql          IN      VARCHAR2,
4825         p_api_name              IN      VARCHAR2,
4826         p_match_type            IN      VARCHAR2,
4827         p_party_id              IN      NUMBER,
4828         p_search_merged         IN      VARCHAR2,
4829         x_search_ctx_id         OUT     NUMBER,
4830         x_num_matches           OUT     NUMBER
4831 ) IS
4832   TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
4833   l_match_idx NUMBER;
4834   AttrVals AttrList;
4835   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4836   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4837   l_contact_list HZ_PARTY_SEARCH.contact_list;
4838   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4839   l_dup_set_id NUMBER;
4840   l_idx NUMBER;
4841   l_cpt_type VARCHAR2(255);
4842   FIRST BOOLEAN := TRUE; 
4843 
4844 BEGIN
4845     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4846       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);
4847     END IF;
4848 
4849   IF p_attrib_id1 IS NOT NULL THEN
4850     AttrVals(p_attrib_id1):=p_attrib_val1;
4851   END IF;
4852   IF p_attrib_id2 IS NOT NULL THEN
4853     AttrVals(p_attrib_id2):=p_attrib_val2;
4854   END IF;
4855   IF p_attrib_id3 IS NOT NULL THEN
4856     AttrVals(p_attrib_id3):=p_attrib_val3;
4857   END IF;
4858   IF p_attrib_id4 IS NOT NULL THEN
4859     AttrVals(p_attrib_id4):=p_attrib_val4;
4860   END IF;
4861   IF p_attrib_id5 IS NOT NULL THEN
4862     AttrVals(p_attrib_id5):=p_attrib_val5;
4863   END IF;
4864   IF p_attrib_id6 IS NOT NULL THEN
4865     AttrVals(p_attrib_id6):=p_attrib_val6;
4866   END IF;
4867   IF p_attrib_id7 IS NOT NULL THEN
4868     AttrVals(p_attrib_id7):=p_attrib_val7;
4869   END IF;
4870   IF p_attrib_id8 IS NOT NULL THEN
4871     AttrVals(p_attrib_id8):=p_attrib_val8;
4872   END IF;
4873   IF p_attrib_id9 IS NOT NULL THEN
4874     AttrVals(p_attrib_id9):=p_attrib_val9;
4875   END IF;
4876   IF p_attrib_id10 IS NOT NULL THEN
4877     AttrVals(p_attrib_id10):=p_attrib_val10;
4878   END IF;
4879   IF p_attrib_id11 IS NOT NULL THEN
4880     AttrVals(p_attrib_id11):=p_attrib_val11;
4881   END IF;
4882   IF p_attrib_id12 IS NOT NULL THEN
4883     AttrVals(p_attrib_id12):=p_attrib_val12;
4884   END IF;
4885   IF p_attrib_id13 IS NOT NULL THEN
4886     AttrVals(p_attrib_id13):=p_attrib_val13;
4887   END IF;
4888   IF p_attrib_id14 IS NOT NULL THEN
4889     AttrVals(p_attrib_id14):=p_attrib_val14;
4890   END IF;
4891   IF p_attrib_id15 IS NOT NULL THEN
4892     AttrVals(p_attrib_id15):=p_attrib_val15;
4893   END IF;
4894   IF p_attrib_id16 IS NOT NULL THEN
4895     AttrVals(p_attrib_id16):=p_attrib_val16;
4896   END IF;
4897   IF p_attrib_id17 IS NOT NULL THEN
4898     AttrVals(p_attrib_id17):=p_attrib_val17;
4899   END IF;
4900   IF p_attrib_id18 IS NOT NULL THEN
4901     AttrVals(p_attrib_id18):=p_attrib_val18;
4902   END IF;
4903   IF p_attrib_id19 IS NOT NULL THEN
4904     AttrVals(p_attrib_id19):=p_attrib_val19;
4905   END IF;
4906   IF p_attrib_id20 IS NOT NULL THEN
4907     AttrVals(p_attrib_id20):=p_attrib_val20;
4908   END IF;
4909   IF AttrVals.EXISTS(15) THEN
4910     l_party_rec.PARTY_ALL_NAMES:= AttrVals(15);
4911     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4912       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);
4913     END IF;
4914   END IF;
4915 
4916   IF AttrVals.EXISTS(16) THEN
4917     l_party_rec.DUNS_NUMBER_C:= AttrVals(16);
4918     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4919       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);
4920     END IF;
4921   END IF;
4922 
4923   IF AttrVals.EXISTS(27) THEN
4924     l_party_site_list(1).ADDRESS:= AttrVals(27);
4925     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4926       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);
4927     END IF;
4928   END IF;
4929 
4930   IF AttrVals.EXISTS(29) THEN
4931     l_party_site_list(1).CITY:= AttrVals(29);
4932     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4933       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);
4934     END IF;
4935   END IF;
4936 
4937   IF AttrVals.EXISTS(30) THEN
4938     l_party_site_list(1).POSTAL_CODE:= AttrVals(30);
4939     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4940       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);
4941     END IF;
4942   END IF;
4943 
4944   IF AttrVals.EXISTS(32) THEN
4945     l_party_site_list(1).STATE:= AttrVals(32);
4946     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4947       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);
4948     END IF;
4949   END IF;
4950 
4951   IF AttrVals.EXISTS(39) THEN
4952     l_contact_list(1).CONTACT_NAME:= AttrVals(39);
4953     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4954       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);
4955     END IF;
4956   END IF;
4957 
4958   IF AttrVals.EXISTS(44) THEN
4959     l_cpt_type := 'PHONE';
4960     FIRST := FALSE;
4961     FOR I in 1..l_cpt_list.COUNT LOOP
4962       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
4963         l_cpt_list(I).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
4964         FIRST := TRUE;
4965     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4966       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);
4967       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);
4968     END IF;
4969       END IF;
4970     END LOOP;
4971     IF not FIRST THEN
4972       l_idx := l_cpt_list.COUNT+1;
4973       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
4974       l_cpt_list(l_idx).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
4975     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4976       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);
4977       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);
4978     END IF;
4979     END IF;
4980   END IF;
4981 
4982   IF AttrVals.EXISTS(48) THEN
4983     l_cpt_type := 'EMAIL';
4984     FIRST := FALSE;
4985     FOR I in 1..l_cpt_list.COUNT LOOP
4986       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
4987         l_cpt_list(I).EMAIL_ADDRESS:= AttrVals(48);
4988         FIRST := TRUE;
4989     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4990       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);
4991       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);
4992     END IF;
4993       END IF;
4994     END LOOP;
4995     IF not FIRST THEN
4996       l_idx := l_cpt_list.COUNT+1;
4997       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
4998       l_cpt_list(l_idx).EMAIL_ADDRESS:= AttrVals(48);
4999     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5000       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);
5001       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);
5002     END IF;
5003     END IF;
5004   END IF;
5005 
5006   IF AttrVals.EXISTS(49) THEN
5007     l_cpt_type := 'WEB';
5008     FIRST := FALSE;
5009     FOR I in 1..l_cpt_list.COUNT LOOP
5010       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5011         l_cpt_list(I).URL:= AttrVals(49);
5012         FIRST := TRUE;
5013     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5014       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);
5015       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);
5016     END IF;
5017       END IF;
5018     END LOOP;
5019     IF not FIRST THEN
5020       l_idx := l_cpt_list.COUNT+1;
5021       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5022       l_cpt_list(l_idx).URL:= AttrVals(49);
5023     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5024       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);
5025       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);
5026     END IF;
5027     END IF;
5028   END IF;
5029 
5030 
5031   IF AttrVals.EXISTS(14) THEN
5032      l_party_rec.PARTY_TYPE:= AttrVals(14); 
5033   END IF; 
5034   IF upper(p_api_name) = 'FIND_PARTIES' THEN
5035     find_parties(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,NULL,NULL,NULL,'N',
5037                x_search_ctx_id,x_num_matches);
5038   ELSIF upper(p_api_name) = 'FIND_PARTY_DETAILS' THEN
5039     find_party_details(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,
5041                x_search_ctx_id,x_num_matches);
5042   ELSIF upper(p_api_name) = 'FIND_PERSONS' THEN
5043     find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5044                p_restrict_sql,p_match_type,p_search_merged,'N',
5045                x_search_ctx_id,x_num_matches);
5046   ELSIF upper(p_api_name) = 'GET_MATCHING_PARTY_SITES' THEN
5047     get_matching_party_sites(p_rule_id,p_party_id,l_party_site_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_CONTACTS' THEN
5051     get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,
5052                p_restrict_sql,p_match_type,NULL,
5053                x_search_ctx_id,x_num_matches);
5054   ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACT_POINTS' THEN
5055     get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,
5056                p_restrict_sql,p_match_type,NULL,
5057                x_search_ctx_id,x_num_matches);
5058   END IF;
5059     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5060       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);
5061     END IF;
5062 EXCEPTION
5063   WHEN FND_API.G_EXC_ERROR THEN
5064     RAISE FND_API.G_EXC_ERROR;
5065   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5066     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5067   WHEN OTHERS THEN
5068     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5069     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.call_api_dynamic');
5070     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5071     FND_MSG_PUB.ADD;
5072     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5073 END call_api_dynamic; 
5074 
5075 
5076 PROCEDURE get_matching_party_sites (
5077         p_rule_id               IN      NUMBER,
5078         p_party_id              IN      NUMBER,
5079         p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,
5080         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5081         p_restrict_sql          IN      VARCHAR2,
5082         p_match_type            IN      VARCHAR2,
5083         p_dup_party_site_id     IN      NUMBER, 
5084         x_search_ctx_id         OUT     NUMBER,
5085         x_num_matches           OUT     NUMBER
5086 ) IS
5087   
5088   -- Strings to hold the generated Intermedia query strings
5089   l_party_contains_str VARCHAR2(32000); 
5090   l_match_idx NUMBER;
5091   l_party_site_contains_str VARCHAR2(32000);
5092   l_contact_contains_str VARCHAR2(32000);
5093   l_contact_pt_contains_str VARCHAR2(32000);
5094   l_tmp VARCHAR2(32000);
5095 
5096   -- Other local variables
5097   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5098   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5099   -- For Score calculation
5100   l_max_score NUMBER;
5101   l_entered_max_score NUMBER;
5102   FIRST BOOLEAN;
5103   l_search_ctx_id NUMBER; -- Generated Search Context ID
5104 
5105   l_TX9 VARCHAR2(2000);
5106   l_TX1 VARCHAR2(2000);
5107   l_TX3 VARCHAR2(2000);
5108   l_TX15 VARCHAR2(2000);
5109   l_TX4 VARCHAR2(2000);
5110   l_TX10 VARCHAR2(2000);
5111   l_TX11 VARCHAR2(2000);
5112   l_TX5 VARCHAR2(2000);
5113   l_TX8 VARCHAR2(2000);
5114   l_TX14 VARCHAR2(2000);
5115   l_TX6 VARCHAR2(2000);
5116   H_SCORES HZ_PARTY_SEARCH.score_list;
5117 
5118   l_score NUMBER;
5119   l_idx NUMBER;
5120   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5121   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5122   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5123   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5124   l_party_id NUMBER;
5125   l_ps_party_id NUMBER;
5126   l_ct_party_id NUMBER;
5127   l_cpt_party_id NUMBER;
5128   l_cpt_ps_id NUMBER;
5129   l_cpt_contact_id NUMBER;
5130   l_cpt_type VARCHAR2(100);
5131   l_cpt_level VARCHAR2(100);
5132   l_party_site_id NUMBER;
5133   l_org_contact_id NUMBER;
5134   l_contact_pt_id NUMBER;
5135   l_cpt_level VARCHAR2(100);
5136   l_ps_contact_id NUMBER;
5137   l_party_max_score NUMBER;
5138   l_ps_max_score NUMBER;
5139   l_contact_max_score NUMBER;
5140   l_cpt_max_score NUMBER;
5141 
5142   defpt NUMBER :=0;
5143   defps NUMBER :=0;
5144   defct NUMBER :=0;
5145   defcpt NUMBER :=0;
5146   l_index NUMBER;
5147   l_match_ps_list HZ_PARTY_SEARCH.IDList;
5148   l_cnt NUMBER:=1;
5149 
5150   
5151   BEGIN
5152     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5153       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);
5154     END IF;
5155     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5156       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);
5157       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);
5158       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);
5159       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);
5160     END IF;
5161 
5162     -- ************************************
5163     -- STEP 1. Initialization and error checks
5164 
5165     l_match_str := ' AND ';
5166     IF p_match_type = 'AND' THEN
5167       l_match_str := ' AND ';
5168     ELSIF p_match_type = 'OR' THEN
5169       l_match_str := ' OR ';
5170     END IF;
5171     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);
5172     g_score_until_thresh := false;
5173     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5174 
5175     -- ************************************************************
5176     -- STEP 2. Setup of intermedia query strings for Acquisition query
5177     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5178     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5179     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);
5180 
5181     -- Setup Search Context ID
5182     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5183     x_search_ctx_id := l_search_ctx_id;
5184 
5185     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5186       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);
5187       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);
5188       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);
5189       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);
5190     END IF;
5191     IF l_party_site_contains_str IS NULL THEN
5192       defps := 1;
5193     END IF;
5194     IF l_contact_pt_contains_str IS NULL THEN
5195       defcpt := 1;
5196     END IF;
5197 
5198     IF l_party_site_contains_str IS NOT NULL THEN
5199       open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,'N', 'N',l_party_site_cur);
5200       LOOP
5201         FETCH l_party_site_cur INTO 
5202             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;
5203         EXIT WHEN l_party_site_cur%NOTFOUND;
5204       IF (p_dup_party_site_id IS NULL OR (
5205                 p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND 
5206                 l_party_site_id <> p_dup_party_site_id)) THEN  
5207             l_index := map_id(l_party_site_id);
5208             l_match_ps_list(l_cnt):= l_party_site_id ;
5209             l_cnt:=l_cnt+1;
5210             l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX14,l_TX15);
5211             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);
5212     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5213       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);
5214       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);
5215       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);
5216     END IF;
5217       END IF; 
5218       END LOOP;
5219       CLOSE l_party_site_cur;
5220     END IF;
5221 
5222     IF l_contact_pt_contains_str IS NOT NULL THEN
5223     SAVEPOINT eval_start;
5224     IF l_match_str = ' AND ' OR (
5225         ((l_cpt_max_score/l_entered_max_score)<(78/460))
5226         ) THEN
5227       FORALL I in 1..l_match_ps_list.COUNT
5228            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5229            values (l_search_ctx_id,l_match_ps_list(I));
5230         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');
5231     ELSE
5232       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5233     END IF;
5234       LOOP
5235         FETCH l_contact_pt_cur INTO 
5236             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;
5237         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5238       IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (
5239          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   
5240         l_index := map_id(l_cpt_ps_id);
5241         IF l_match_str = ' OR ' THEN
5242           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5243           IF NOT H_SCORES.EXISTS(l_index) THEN
5244             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);
5245           ELSE
5246             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5247                H_SCORES(l_index).TOTAL_SCORE := 
5248                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5249                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5250             END IF;
5251           END IF;
5252         ELSE
5253           IF H_SCORES.EXISTS(l_index) THEN
5254             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5255             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5256                H_SCORES(l_index).TOTAL_SCORE := 
5257                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5258                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5259             END IF;
5260           ELSIF defps=1 THEN
5261             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5262             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);
5263           END IF;
5264         END IF;
5265       END IF; 
5266     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5267       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);
5268       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);
5269       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);
5270     END IF;
5271       END LOOP;
5272       CLOSE l_contact_pt_cur;
5273     ROLLBACK TO eval_start;
5274     END IF;
5275     x_num_matches := 0;
5276     l_party_site_id := H_SCORES.FIRST;
5277     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5278       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);
5279     END IF;
5280     WHILE l_party_site_id IS NOT NULL LOOP
5281     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5282       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);
5283       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);
5284     END IF;
5285  IF l_match_str = ' OR ' THEN
5286 IF (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=( 78/460 ) THEN
5287     INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) 
5288     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);
5289       x_num_matches := x_num_matches+1;
5290  END IF;
5291  ELSE
5292     IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND
5293        H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND
5294        (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=(78/460) THEN
5295       INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) 
5296       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));
5297        x_num_matches := x_num_matches+1;
5298       END IF;
5299  END IF;
5300       l_party_site_id:=H_SCORES.NEXT(l_party_site_id);
5301     END LOOP;
5302     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5303       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);
5304     END IF;
5305 EXCEPTION
5306   WHEN FND_API.G_EXC_ERROR THEN
5307     RAISE FND_API.G_EXC_ERROR;
5308   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5309     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5310   WHEN OTHERS THEN
5311     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5312     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.get_matching_party_sites');
5313     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5314     FND_MSG_PUB.ADD;
5315     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5316 END get_matching_party_sites;
5317 
5318 
5319 PROCEDURE get_matching_contacts (
5320         p_rule_id               IN      NUMBER,
5321         p_party_id              IN      NUMBER,
5322         p_contact_list          IN      HZ_PARTY_SEARCH.CONTACT_LIST,
5323         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5324         p_restrict_sql          IN      VARCHAR2,
5325         p_match_type            IN      VARCHAR2,
5326         p_dup_contact_id        IN      NUMBER, 
5327         x_search_ctx_id         OUT     NUMBER,
5328         x_num_matches           OUT     NUMBER
5329 ) IS
5330   
5331   -- Strings to hold the generated Intermedia query strings
5332   l_party_contains_str VARCHAR2(32000); 
5333   l_party_site_contains_str VARCHAR2(32000);
5334   l_contact_contains_str VARCHAR2(32000);
5335   l_contact_pt_contains_str VARCHAR2(32000);
5336   l_tmp VARCHAR2(32000);
5337 
5338   -- Other local variables
5339   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5340   l_match_idx NUMBER;
5341   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5342   -- For Score calculation
5343   l_max_score NUMBER;
5344   l_entered_max_score NUMBER;
5345   FIRST BOOLEAN;
5346   l_search_ctx_id NUMBER; -- Generated Search Context ID
5347 
5348   l_TX1 VARCHAR2(2000);
5349   l_TX5 VARCHAR2(2000);
5350   l_TX8 VARCHAR2(2000);
5351   l_TX6 VARCHAR2(2000);
5352   H_SCORES HZ_PARTY_SEARCH.score_list;
5353 
5354   l_score NUMBER;
5355   l_idx NUMBER;
5356   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5357   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5358   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5359   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5360   l_party_id NUMBER;
5361   l_ps_party_id NUMBER;
5362   l_ct_party_id NUMBER;
5363   l_cpt_party_id NUMBER;
5364   l_cpt_ps_id NUMBER;
5365   l_cpt_contact_id NUMBER;
5366   l_cpt_type VARCHAR2(100);
5367   l_party_site_id NUMBER;
5368   l_org_contact_id NUMBER;
5369   l_contact_pt_id NUMBER;
5370 
5371   defpt NUMBER :=0;
5372   defps NUMBER :=0;
5373   defct NUMBER :=0;
5374   defcpt NUMBER :=0;
5375   l_index NUMBER;
5376   l_party_max_score NUMBER;
5377   l_ps_max_score NUMBER;
5378   l_contact_max_score NUMBER;
5379   l_cpt_max_score NUMBER;
5380   l_match_contact_list HZ_PARTY_SEARCH.IDList;
5381   l_cnt NUMBER:=1;
5382 
5383   
5384   BEGIN
5385     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5386       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);
5387     END IF;
5388     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5389       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);
5390       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);
5391       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);
5392       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);
5393     END IF;
5394 
5395     -- ************************************
5396     -- STEP 1. Initialization and error checks
5397 
5398     l_match_str := ' AND ';
5399     IF p_match_type = 'AND' THEN
5400       l_match_str := ' AND ';
5401     ELSIF p_match_type = 'OR' THEN
5402       l_match_str := ' OR ';
5403     END IF;
5404     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);
5405     g_score_until_thresh := false;
5406     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5407 
5408     -- ************************************************************
5409     -- STEP 2. Setup of intermedia query strings for Acquisition query
5410     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5411     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5412     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);
5413 
5414     -- Setup Search Context ID
5415     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5416     x_search_ctx_id := l_search_ctx_id;
5417 
5418     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5419       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);
5420       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);
5421       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);
5422       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);
5423     END IF;
5424     IF l_contact_contains_str IS NULL THEN
5425       defct := 1;
5426     END IF;
5427     IF l_contact_pt_contains_str IS NULL THEN
5428       defcpt := 1;
5429     END IF;
5430 
5431     IF l_contact_contains_str IS NOT NULL THEN
5432       open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);
5433       LOOP
5434         FETCH l_contact_cur INTO 
5435             l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
5436         EXIT WHEN l_contact_cur%NOTFOUND;
5437       IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN 
5438         l_index := map_id(l_org_contact_id);
5439         l_match_contact_list(l_cnt):=l_org_contact_id;
5440         l_cnt:=l_cnt+1;
5441           l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
5442             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);
5443     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5444       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);
5445       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);
5446       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);
5447     END IF;
5448       END IF; 
5449       END LOOP;
5450       CLOSE l_contact_cur;
5451     END IF;
5452 
5453     IF l_contact_pt_contains_str IS NOT NULL THEN
5454     SAVEPOINT eval_start;
5455     IF l_match_str = ' AND ' OR (
5456         ((l_cpt_max_score/l_entered_max_score)<(78/460))
5457         ) THEN
5458       FORALL I in 1..l_match_contact_list.COUNT
5459            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5460            values (l_search_ctx_id,l_match_contact_list(I));
5461       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');
5462     ELSE
5463       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5464     END IF;
5465       LOOP
5466         FETCH l_contact_pt_cur INTO 
5467             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;
5468         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5469       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 
5470         l_index := map_id(l_cpt_contact_id);
5471         IF l_match_str = ' OR ' THEN
5472           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5473           IF NOT H_SCORES.EXISTS(l_index) THEN
5474             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);
5475           ELSE
5476             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5477                H_SCORES(l_index).TOTAL_SCORE := 
5478                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5479                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5480             END IF;
5481           END IF;
5482         ELSE
5483           IF H_SCORES.EXISTS(l_index) THEN
5484             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5485             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5486                H_SCORES(l_index).TOTAL_SCORE := 
5487                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5488                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5489             END IF;
5490           ELSIF defps=1 THEN
5491             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5492             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);
5493           END IF;
5494         END IF;
5495         END IF; 
5496       END LOOP;
5497     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5498       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);
5499       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);
5500       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);
5501     END IF;
5502       CLOSE l_contact_pt_cur;
5503     END IF;
5504     x_num_matches := 0;
5505     l_org_contact_id := H_SCORES.FIRST;
5506     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5507       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);
5508     END IF;
5509     WHILE l_org_contact_id IS NOT NULL LOOP
5510       IF l_match_str = ' OR ' THEN
5511     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5512       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);
5513       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);
5514     END IF;
5515         IF (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(78/460) THEN
5516             INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) 
5517             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);
5518           x_num_matches := x_num_matches+1;
5519         END IF;
5520       ELSE
5521            IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND
5522            H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND
5523            (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(78/460) THEN
5524           INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) 
5525           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));
5526           x_num_matches := x_num_matches+1;
5527         END IF;
5528       END IF;
5529       l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);
5530     END LOOP;
5531     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5532       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);
5533     END IF;
5534 EXCEPTION
5535   WHEN FND_API.G_EXC_ERROR THEN
5536     RAISE FND_API.G_EXC_ERROR;
5537   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5538     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5539   WHEN OTHERS THEN
5540     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5541     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.get_matching_contacts');
5542     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5543     FND_MSG_PUB.ADD;
5544     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5545 END get_matching_contacts;
5546 
5547 
5548 PROCEDURE get_matching_contact_points (
5549         p_rule_id               IN      NUMBER,
5550         p_party_id              IN      NUMBER,
5551         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5552         p_restrict_sql          IN      VARCHAR2,
5553         p_match_type            IN      VARCHAR2,
5554         p_dup_contact_point_id  IN      NUMBER, 
5555         x_search_ctx_id         OUT     NUMBER,
5556         x_num_matches           OUT     NUMBER
5557 ) IS
5558 
5559 
5560   -- Strings to hold the generated Intermedia query strings
5561   l_contact_pt_contains_str VARCHAR2(32000);
5562   l_tmp VARCHAR2(32000);
5563 
5564   -- Other local variables
5565   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5566   l_match_idx NUMBER;
5567   -- For Score calculation
5568   l_entered_max_score NUMBER;
5569   l_search_ctx_id NUMBER; -- Generated Search Context ID
5570 
5571   l_TX1 VARCHAR2(2000);
5572   l_TX5 VARCHAR2(2000);
5573   l_TX8 VARCHAR2(2000);
5574   l_TX6 VARCHAR2(2000);
5575 
5576   l_score NUMBER;
5577   l_idx NUMBER;
5578   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5579   l_cpt_party_id NUMBER;
5580   l_cpt_ps_id NUMBER;
5581   l_cpt_contact_id NUMBER;
5582   l_contact_pt_id NUMBER;
5583   l_cpt_type VARCHAR2(100);
5584   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
5585   H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;
5586   H_SCORE  HZ_PARTY_SEARCH.IDList;
5587 
5588   cnt NUMBER :=0;
5589   l_party_max_score NUMBER;
5590   l_ps_max_score NUMBER;
5591   l_contact_max_score NUMBER;
5592   l_cpt_max_score NUMBER;
5593 
5594   
5595   BEGIN
5596     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5597       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);
5598     END IF;
5599     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5600       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);
5601       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);
5602       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);
5603       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);
5604     END IF;
5605 
5606     -- ************************************
5607     -- STEP 1. Initialization and error checks
5608 
5609     l_match_str := ' AND ';
5610     IF p_match_type = 'AND' THEN
5611       l_match_str := ' AND ';
5612     ELSIF p_match_type = 'OR' THEN
5613       l_match_str := ' OR ';
5614     END IF;
5615     l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, 
5616        HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
5617        p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5618     g_score_until_thresh := false;
5619     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5620 
5621     -- ************************************************************
5622     -- STEP 2. Setup of intermedia query strings for Acquisition query
5623     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5624     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);
5625 
5626     -- Setup Search Context ID
5627     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5628     x_search_ctx_id := l_search_ctx_id;
5629     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5630       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);
5631       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);
5632       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);
5633     END IF;
5634 
5635     IF l_contact_pt_contains_str IS NOT NULL THEN
5636       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5637       cnt := 1;
5638       LOOP
5639         FETCH l_contact_pt_cur INTO 
5640             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;
5641         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5642         IF (p_dup_contact_point_id IS NULL OR (
5643                p_dup_contact_point_id IS NOT NULL AND 
5644                l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND 
5645                p_dup_contact_point_id <>  l_contact_pt_id)) THEN   
5646             H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;
5647             H_PARTY_ID(cnt) := l_cpt_party_id;
5648             H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5649             cnt := cnt+1;
5650     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5651       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);
5652       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);
5653       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);
5654     END IF;
5655         END IF; 
5656       END LOOP;
5657       CLOSE l_contact_pt_cur;
5658     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5659       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);
5660     END IF;
5661       x_num_matches := 0; 
5662       FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP
5663     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5664       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);
5665       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);
5666     END IF;
5667         IF (H_SCORE(I)/l_entered_max_score) >= (78/460) THEN
5668         INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
5669             l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);
5670             x_num_matches := x_num_matches + 1; 
5671         END IF;
5672       END LOOP; 
5673     END IF;
5674     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5675       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);
5676     END IF;
5677 EXCEPTION
5678   WHEN FND_API.G_EXC_ERROR THEN
5679     RAISE FND_API.G_EXC_ERROR;
5680   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5681     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5682   WHEN OTHERS THEN
5683     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5684     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.get_matching_contact_points');
5685     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5686     FND_MSG_PUB.ADD;
5687     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5688 END get_matching_contact_points;
5689 
5690    /**********************************************************
5691    This procedure finds the score details for a specific party that 
5692    matched 
5693 
5694    **********************************************************/
5695 
5696 PROCEDURE get_score_details (
5697         p_rule_id               IN      NUMBER,
5698         p_party_id              IN      NUMBER,
5699         p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
5700         p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
5701         p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
5702         p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
5703         x_search_ctx_id         IN OUT  NUMBER
5704 ) IS
5705 
5706   -- Strings to hold the generated Intermedia query strings
5707   l_party_contains_str VARCHAR2(32000); 
5708   l_party_site_contains_str VARCHAR2(32000);
5709   l_contact_contains_str VARCHAR2(32000);
5710   l_contact_pt_contains_str VARCHAR2(32000);
5711   l_tmp VARCHAR2(32000);
5712 
5713   -- Other local variables
5714   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5715   -- For Score calculation
5716   l_max_score NUMBER;
5717   l_entered_max_score NUMBER;
5718   FIRST BOOLEAN;
5719   l_search_ctx_id NUMBER; -- Generated Search Context ID
5720 
5721   l_TX39 VARCHAR2(2000);
5722   l_max_TX39 VARCHAR2(2000);
5723   l_TX41 VARCHAR2(2000);
5724   l_max_TX41 VARCHAR2(2000);
5725   l_TX9 VARCHAR2(2000);
5726   l_max_TX9 VARCHAR2(2000);
5727   l_TX1 VARCHAR2(2000);
5728   l_max_TX1 VARCHAR2(2000);
5729   l_TX3 VARCHAR2(2000);
5730   l_max_TX3 VARCHAR2(2000);
5731   l_TX15 VARCHAR2(2000);
5732   l_max_TX15 VARCHAR2(2000);
5733   l_TX4 VARCHAR2(2000);
5734   l_max_TX4 VARCHAR2(2000);
5735   l_TX10 VARCHAR2(2000);
5736   l_max_TX10 VARCHAR2(2000);
5737   l_TX11 VARCHAR2(2000);
5738   l_max_TX11 VARCHAR2(2000);
5739   l_TX5 VARCHAR2(2000);
5740   l_max_TX5 VARCHAR2(2000);
5741   l_TX40 VARCHAR2(2000);
5742   l_max_TX40 VARCHAR2(2000);
5743   l_TX8 VARCHAR2(2000);
5744   l_max_TX8 VARCHAR2(2000);
5745   l_TX14 VARCHAR2(2000);
5746   l_max_TX14 VARCHAR2(2000);
5747   l_TX6 VARCHAR2(2000);
5748   l_max_TX6 VARCHAR2(2000);
5749   H_SCORES HZ_PARTY_SEARCH.score_list;
5750 
5751   l_score NUMBER;
5752   l_match_idx NUMBER;
5753   l_idx NUMBER;
5754   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5755   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5756   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5757   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5758   l_party_id NUMBER;
5759   l_ps_party_id NUMBER;
5760   l_ct_party_id NUMBER;
5761   l_cpt_party_id NUMBER;
5762   l_cpt_ps_id NUMBER;
5763   l_cpt_contact_id NUMBER;
5764   l_cpt_type VARCHAR2(100);
5765   l_party_site_id NUMBER;
5766   l_org_contact_id NUMBER;
5767   l_contact_pt_id NUMBER;
5768   l_ps_contact_id NUMBER;
5769   l_max_id NUMBER;
5770   l_max_idx NUMBER;
5771 
5772   l_index NUMBER;
5773   l_party_max_score NUMBER;
5774   l_ps_max_score NUMBER;
5775   l_contact_max_score NUMBER;
5776   l_cpt_max_score NUMBER;
5777 
5778   --Fix for bug 4417124 
5779   l_use_contact_addr_info BOOLEAN:=TRUE;
5780   l_use_contact_cpt_info  BOOLEAN:=TRUE;
5781   l_TX35_new VARCHAR2(4000);
5782 
5783   BEGIN
5784 
5785     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5786       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);
5787     END IF;
5788     -- ************************************
5789     -- STEP 1. Initialization and error checks
5790 
5791     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);
5792     g_score_until_thresh := false;
5793     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5794     -- ************************************************************
5795     -- STEP 2. Setup of intermedia query strings for Acquisition query
5796     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5797     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5798     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5799     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
5800 
5801     -- Setup Search Context ID
5802     IF x_search_ctx_id IS NULL THEN
5803       SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5804       x_search_ctx_id := l_search_ctx_id;
5805     ELSE
5806       l_search_ctx_id := x_search_ctx_id;
5807     END IF;
5808 
5809     open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);
5810     LOOP 
5811         FETCH l_party_cur INTO
5812            l_party_id , l_TX39, l_TX40, l_TX41;
5813         EXIT WHEN l_party_cur%NOTFOUND;
5814           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);
5815     END LOOP;
5816     CLOSE l_party_cur;
5817 
5818     IF l_party_site_contains_str IS NOT NULL THEN
5819       l_max_score := 0;
5820       l_max_id := 0;
5821       l_max_idx := 0;
5822       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_addr_info THEN
5823         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'Y','N',l_party_site_cur);
5824       ELSE
5825         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'N','N',l_party_site_cur);
5826       END IF;
5827       LOOP
5828         FETCH l_party_site_cur INTO 
5829             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;
5830         EXIT WHEN l_party_site_cur%NOTFOUND;
5831         l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX14,l_TX15);
5832         IF l_score > l_max_score THEN
5833           l_max_score := l_score;
5834           l_max_id := l_party_site_id;
5835           l_max_idx := l_match_idx;
5836           l_max_TX9 := l_TX9;
5837           l_max_TX3 := l_TX3;
5838           l_max_TX15 := l_TX15;
5839           l_max_TX4 := l_TX4;
5840           l_max_TX10 := l_TX10;
5841           l_max_TX11 := l_TX11;
5842           l_max_TX14 := l_TX14;
5843         END IF;
5844       END LOOP;
5845       CLOSE l_party_site_cur;
5846       IF l_max_score>0 THEN
5847         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);
5848       END IF;
5849     END IF;
5850 
5851     IF l_contact_contains_str IS NOT NULL THEN
5852       l_max_score := 0;
5853       l_max_id := 0;
5854       l_max_idx := 0;
5855       open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);
5856       LOOP
5857         FETCH l_contact_cur INTO 
5858             l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
5859         EXIT WHEN l_contact_cur%NOTFOUND;
5860         l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
5861         IF l_score > l_max_score THEN
5862           l_max_score := l_score;
5863           l_max_id := l_org_contact_id;
5864           l_max_idx := l_match_idx;
5865           l_max_TX5 := l_TX5;
5866           l_max_TX6 := l_TX6;
5867         END IF;
5868       END LOOP;
5869       CLOSE l_contact_cur;
5870       IF l_max_score>0 THEN
5871         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);
5872       END IF;
5873     END IF;
5874 
5875     IF l_contact_pt_contains_str IS NOT NULL THEN
5876       l_max_score := 0;
5877       l_max_id := 0;
5878       l_max_idx := 0;
5879       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_cpt_info THEN
5880         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'Y','N',l_contact_pt_cur);
5881       ELSE
5882         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'N','N',l_contact_pt_cur);
5883       END IF;
5884       LOOP
5885         FETCH l_contact_pt_cur INTO 
5886             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;
5887         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5888         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5889         IF l_score > l_max_score THEN
5890           l_max_score := l_score;
5891           l_max_id := l_contact_pt_id;
5892           l_max_idx := l_match_idx;
5893           l_max_TX1 := l_TX1;
5894           l_max_TX5 := l_TX5;
5895           l_max_TX8 := l_TX8;
5896           l_max_TX6 := l_TX6;
5897         END IF;
5898       END LOOP;
5899       IF l_max_score>0 THEN
5900         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);
5901       END IF;
5902       CLOSE l_contact_pt_cur;
5903     END IF;
5904     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5905       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);
5906     END IF;
5907 EXCEPTION
5908   WHEN FND_API.G_EXC_ERROR THEN
5909     RAISE FND_API.G_EXC_ERROR;
5910   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5911     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5912   WHEN OTHERS THEN
5913     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5914     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.get_score_details');
5915     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5916     FND_MSG_PUB.ADD;
5917     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5918 END get_score_details;
5919 
5920 
5921 /************************************************
5922   This procedure retrieves the match rule attributes into 
5923   the search record structures
5924 ************************************************/
5925 
5926 PROCEDURE get_party_for_search (
5927         p_party_id              IN      NUMBER,
5928         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
5929         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
5930         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
5931         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5932 ) IS
5933   l_party_id NUMBER;
5934   l_party_site_ids HZ_PARTY_SEARCH.IDList;
5935   l_contact_ids HZ_PARTY_SEARCH.IDList;
5936   l_contact_pt_ids HZ_PARTY_SEARCH.IDList;
5937   ps NUMBER :=1;
5938   cpt NUMBER :=1;
5939   ct NUMBER :=1;
5940   l_use_contact_info varchar2(1);
5941 BEGIN
5942 
5943     l_use_contact_info := 'Y';
5944   IF nvl(FND_PROFILE.VALUE('HZ_DQM_REL_PARTY_MATCH'),'N')='Y' THEN
5945     l_use_contact_info := 'N';
5946   END IF;
5947   l_party_id := p_party_id;
5948   FOR PARTY_SITES IN (
5949  SELECT party_site_id FROM (
5950      SELECT party_site_id,identifying_address_flag
5951       FROM HZ_PARTY_SITES
5952       WHERE party_id = p_party_id
5953       AND (status is null OR status = 'A') 
5954       AND identifying_address_flag='Y'
5955       UNION
5956 
5957      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5958       FROM HZ_PARTY_SITES
5959       WHERE party_id = p_party_id
5960       AND (status is null OR status = 'A') 
5961       AND (identifying_address_flag IS NULL OR identifying_address_flag = 'N')
5962       AND ROWNUM<6
5963       UNION
5964 
5965      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5966       FROM HZ_PARTY_SITES
5967       WHERE (status is null OR status = 'A') 
5968       AND party_id in (
5969         SELECT party_id
5970         FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
5971         WHERE HZ_RELATIONSHIPS.object_id = p_party_id
5972         AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5973         AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5974         AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5975         and l_use_contact_info = 'Y'
5976      ) 
5977      AND ROWNUM<6
5978 ) order by identifying_address_flag desc
5979     ) LOOP
5980       l_party_site_ids(ps) := PARTY_SITES.party_site_id;
5981       ps:=ps+1;
5982   END LOOP;
5983     FOR CONTACTS IN (
5984       SELECT org_contact_id
5985       FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
5986       WHERE HZ_RELATIONSHIPS.object_id = p_party_id
5987       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5988       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5989       AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
5990       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5991       AND ROWNUM<6 
5992     ) LOOP
5993       l_contact_ids(ct) := CONTACTS.org_contact_id;
5994       ct := ct+1;
5995     END LOOP;
5996     FOR CONTACT_POINTS IN (
5997       SELECT CONTACT_POINT_ID
5998       FROM HZ_CONTACT_POINTS 
5999       WHERE PRIMARY_FLAG = 'Y'
6000       AND owner_table_name = 'HZ_PARTIES'
6001       AND owner_table_id = p_party_id
6002 
6003       UNION
6004 
6005       SELECT CONTACT_POINT_ID
6006       FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS 
6007       WHERE PRIMARY_FLAG = 'Y'
6008       AND owner_table_name = 'HZ_PARTIES'
6009       AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id
6010       AND HZ_RELATIONSHIPS.object_id = p_party_id
6011       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6012       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6013       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6014         and l_use_contact_info = 'Y'
6015       AND ROWNUM<6
6016       UNION
6017 
6018       SELECT CONTACT_POINT_ID
6019       FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES  
6020       WHERE PRIMARY_FLAG = 'Y'
6021       AND owner_table_name = 'HZ_PARTY_SITES'
6022       AND owner_table_id = party_site_id 
6023       AND PARTY_ID = p_party_id 
6024       AND IDENTIFYING_ADDRESS_FLAG = 'Y') LOOP
6025       l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;
6026       cpt := cpt+1;
6027     END LOOP;
6028     get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,
6029           x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);
6030 EXCEPTION
6031   WHEN FND_API.G_EXC_ERROR THEN
6032     RAISE FND_API.G_EXC_ERROR;
6033   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6034     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6035   WHEN OTHERS THEN
6036     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6037     FND_MESSAGE.SET_TOKEN('PROC','get_party_for_search');
6038     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6039     FND_MSG_PUB.ADD;
6040     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6041 END get_party_for_search;
6042 
6043 PROCEDURE get_search_criteria (
6044         p_party_id              IN      NUMBER,
6045         p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,
6046         p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,
6047         p_contact_pt_ids        IN      HZ_PARTY_SEARCH.IDList,
6048         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6049         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6050         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6051         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6052 ) IS
6053 BEGIN
6054 
6055    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6056       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);
6057     END IF;
6058     IF p_party_id IS NOT NULL THEN
6059    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6060       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);
6061     END IF;
6062       get_party_rec(p_party_id, x_party_search_rec);
6063     END IF;
6064     IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN
6065    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6066       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);
6067     END IF;
6068       get_party_site_rec(p_party_site_ids, x_party_site_list);
6069     END IF;
6070     IF p_contact_ids IS NOT NULL AND p_contact_ids.COUNT>0 THEN
6071    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6072       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);
6073     END IF;
6074       get_contact_rec(p_contact_ids, x_contact_list);
6075     END IF;
6076     IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN
6077    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6078       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);
6079     END IF;
6080       get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);
6081     END IF;
6082 EXCEPTION
6083   WHEN FND_API.G_EXC_ERROR THEN
6084     RAISE FND_API.G_EXC_ERROR;
6085   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6086     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6087   WHEN OTHERS THEN
6088     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6089     FND_MESSAGE.SET_TOKEN('PROC','get_search_criteria');
6090     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6091     FND_MSG_PUB.ADD;
6092     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6093 END get_search_criteria;
6094 
6095 
6096 /************************************************
6097   This procedure retrieves the match rule party attributes into 
6098   the party search record structure 
6099 ************************************************/
6100 
6101 PROCEDURE get_party_rec (
6102         p_party_id              IN      NUMBER,
6103         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type
6104 ) IS
6105     l_party_type VARCHAR2(255);
6106 BEGIN
6107 
6108    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6109       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);
6110     END IF;
6111     SELECT PARTY_TYPE INTO l_party_type
6112     FROM HZ_PARTIES
6113     WHERE PARTY_ID = p_party_id;
6114 
6115    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6116       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);
6117     END IF;
6118     IF l_party_type = 'ORGANIZATION' THEN
6119       SELECT 
6120         translate(HZ_ORGANIZATION_PROFILES.DUNS_NUMBER_C, '%',' ')
6121       INTO 
6122         x_party_search_rec.DUNS_NUMBER_C
6123       FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES
6124       WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id
6125       AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL
6126       AND HZ_PARTIES.party_id = p_party_id;
6127     ELSIF l_party_type = 'PERSON' THEN
6128       NULL;
6129     END IF;
6130     x_party_search_rec.PARTY_TYPE := l_party_type;
6131    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6132       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);
6133     END IF;
6134     x_party_search_rec.PARTY_ALL_NAMES:=
6135        HZ_PARTY_ACQUIRE.get_known_as(p_party_id , 'PARTY','PARTY_ALL_NAMES');
6136 
6137 EXCEPTION
6138   WHEN OTHERS THEN
6139     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6140     FND_MESSAGE.SET_TOKEN('PROC','get_party_rec');
6141     FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_id);
6142     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6143     FND_MSG_PUB.ADD;
6144     RAISE FND_API.G_EXC_ERROR;
6145 END get_party_rec;
6146 
6147 /************************************************
6148   This procedure retrieves the match rule party site attributes into 
6149   the party site search record structure 
6150 ************************************************/
6151 
6152 PROCEDURE get_party_site_rec (
6153         p_party_site_ids       IN      HZ_PARTY_SEARCH.IDList,
6154         x_party_site_list      OUT NOCOPY HZ_PARTY_SEARCH.party_site_list
6155 ) IS
6156   CURSOR c_party_sites(cp_party_site_id NUMBER) IS
6157     SELECT party_site_id
6158       ,translate(HZ_LOCATIONS.CITY, '%',' ')
6159       ,translate(HZ_LOCATIONS.POSTAL_CODE, '%',' ')
6160       ,translate(HZ_LOCATIONS.STATE, '%',' ')
6161     FROM HZ_PARTY_SITES, HZ_LOCATIONS
6162     WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id
6163     AND   HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;
6164 
6165   I NUMBER;
6166   J NUMBER:=1;
6167   l_party_site_id NUMBER;
6168 
6169 BEGIN
6170 
6171    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6172       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);
6173     END IF;
6174     FOR I IN 1..p_party_site_ids.COUNT LOOP
6175       l_party_site_id := p_party_site_ids(I);
6176       OPEN c_party_sites(p_party_site_ids(I));
6177       LOOP
6178         FETCH c_party_sites INTO
6179              l_party_site_id
6180            ,x_party_site_list(J).CITY
6181            ,x_party_site_list(J).POSTAL_CODE
6182            ,x_party_site_list(J).STATE
6183         ;
6184         EXIT WHEN c_party_sites%NOTFOUND;
6185 
6186    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6187       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);
6188     END IF;
6189         x_party_site_list(J).ADDRESS:=
6190        HZ_PARTY_ACQUIRE.get_address(l_party_site_id , 'PARTY_SITES','ADDRESS');
6191         J:=J+1;
6192 
6193       END LOOP;
6194       CLOSE c_party_sites;
6195     END LOOP;
6196 
6197 EXCEPTION
6198   WHEN OTHERS THEN
6199     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6200     FND_MESSAGE.SET_TOKEN('PROC','get_party_site_rec');
6201     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_party_site_id);
6202     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6203     FND_MSG_PUB.ADD;
6204     RAISE FND_API.G_EXC_ERROR;
6205 END get_party_site_rec;
6206 
6207 /************************************************
6208   This procedure retrieves the match rule contact attributes into 
6209   the contact search record structure 
6210 ************************************************/
6211 
6212 PROCEDURE get_contact_rec (
6213         p_contact_ids       IN      HZ_PARTY_SEARCH.IDList,
6214         x_contact_list      OUT NOCOPY HZ_PARTY_SEARCH.contact_list
6215 ) IS
6216   CURSOR c_contacts(cp_org_contact_id NUMBER) IS
6217     SELECT org_contact_id
6218     FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES
6219     WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id
6220     AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6221     AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6222     AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
6223     AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6224     AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id
6225     AND HZ_PERSON_PROFILES.effective_end_date IS NULL;
6226 
6227   I NUMBER;
6228   l_org_contact_id NUMBER;
6229   J NUMBER:=1;
6230   BEGIN
6231 
6232    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6233       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);
6234     END IF;
6235     FOR I IN 1..p_contact_ids.COUNT LOOP
6236       l_org_contact_id := p_contact_ids(I);
6237       OPEN c_contacts(p_contact_ids(I));
6238       LOOP
6239         FETCH c_contacts INTO
6240              l_org_contact_id
6241         ;
6242         EXIT WHEN c_contacts%NOTFOUND;
6243 
6244    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6245       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);
6246     END IF;
6247         x_contact_list(J).CONTACT_NAME:=
6248        HZ_PARTY_ACQUIRE.get_contact_name(l_org_contact_id , 'CONTACTS','CONTACT_NAME');
6249 
6250         J:=J+1;
6251       END LOOP;
6252       CLOSE c_contacts;
6253     END LOOP;
6254 
6255 EXCEPTION
6256   WHEN OTHERS THEN
6257     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6258     FND_MESSAGE.SET_TOKEN('PROC','get_contact_rec');
6259     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_org_contact_id);
6260     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6261     FND_MSG_PUB.ADD;
6262     RAISE FND_API.G_EXC_ERROR;
6263 END get_contact_rec;
6264 
6265 /************************************************
6266   This procedure retrieves the match rule contact point attributes into 
6267   the contact point search record structure 
6268 ************************************************/
6269 
6270 PROCEDURE get_contact_point_rec (
6271         p_contact_point_ids     IN  HZ_PARTY_SEARCH.IDList,
6272         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6273 ) IS
6274 
6275   -- Cursor to fetch primary contact points for party
6276   CURSOR c_cpts(cp_contact_point_id NUMBER) IS
6277     SELECT contact_point_id, contact_point_type
6278       ,translate(HZ_CONTACT_POINTS.EMAIL_ADDRESS, '%',' ')
6279       ,translate(HZ_CONTACT_POINTS.URL, '%',' ')
6280     FROM HZ_CONTACT_POINTS
6281     WHERE contact_point_id = cp_contact_point_id;
6282 
6283   I NUMBER;
6284   l_contact_point_id NUMBER;
6285   J NUMBER:=1;
6286   BEGIN
6287 
6288    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6289       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);
6290     END IF;
6291     FOR I in 1..p_contact_point_ids.COUNT LOOP
6292       l_contact_point_id := p_contact_point_ids(I);
6293       OPEN c_cpts(p_contact_point_ids(I));
6294       LOOP
6295         FETCH c_cpts INTO
6296              l_contact_point_id, x_contact_point_list(J).contact_point_type
6297              ,x_contact_point_list(J).EMAIL_ADDRESS
6298              ,x_contact_point_list(J).URL
6299         ;
6300         EXIT WHEN c_cpts%NOTFOUND;
6301 
6302    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6303       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);
6304     END IF;
6305         x_contact_point_list(J).FLEX_FORMAT_PHONE_NUMBER:=
6306        HZ_PARTY_ACQUIRE.get_phone_number(l_contact_point_id , 'CONTACT_POINTS','FLEX_FORMAT_PHONE_NUMBER');
6307         J:=J+1;
6308 
6309       END LOOP;
6310       CLOSE c_cpts;
6311     END LOOP;
6312 
6313 EXCEPTION
6314   WHEN OTHERS THEN
6315     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6316     FND_MESSAGE.SET_TOKEN('PROC','get_contact_point_rec');
6317     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_contact_point_id);
6318     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6319     FND_MSG_PUB.ADD;
6320     RAISE FND_API.G_EXC_ERROR;
6321 END get_contact_point_rec;
6322 
6323 /************************************************
6324   This procedure maps a search record from the logical
6325   record structure to the stage schema structure 
6326   for the PARTY Entity after applying 
6327   the defined transformations
6328 ************************************************/
6329 
6330 PROCEDURE MAP_PARTY_REC( 
6331     p_search_ctx IN BOOLEAN,
6332     p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, 
6333     x_entered_max_score OUT NUMBER,
6334     x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type
6335   ) IS 
6336   tmp VARCHAR2(4000);
6337   l_party_name VARCHAR2(4000);
6338 BEGIN
6339    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6340       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);
6341     END IF;
6342    IF p_search_ctx THEN
6343      x_stage_rec.TX8 := NULL;
6344      g_other_party_level_attribs:=FALSE;
6345     IF p_search_rec.DUNS_NUMBER_C IS NOT NULL 
6346     THEN
6347       g_other_party_level_attribs:=TRUE;
6348     END IF;
6349      x_entered_max_score:=0;
6350     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6351       x_entered_max_score := x_entered_max_score+40;
6352     END IF;
6353     IF p_search_rec.DUNS_NUMBER_C IS NOT NULL THEN 
6354       x_entered_max_score := x_entered_max_score+80;
6355     END IF;
6356     END IF;
6357   IF p_search_ctx THEN
6358     IF p_search_rec.DUNS_NUMBER_C IS NOT NULL THEN 
6359       x_stage_rec.TX41 := 
6360         HZ_TRANS_PKG.EXACT(
6361              p_search_rec.DUNS_NUMBER_C
6362              ,null,'DUNS_NUMBER_C'
6363              ,'PARTY');
6364     ELSE
6365       x_stage_rec.TX41 := '';
6366     END IF;
6367   END IF;
6368     IF p_search_rec.DUNS_NUMBER_C IS NOT NULL THEN 
6369       x_stage_rec.TX41 := 
6370           lpad(x_stage_rec.TX41,9,'0');
6371     END IF;
6372   IF p_search_ctx THEN
6373     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6374       x_stage_rec.TX40 := 
6375         HZ_TRANS_PKG.WRNAMES_CLEANSE(
6376              p_search_rec.PARTY_ALL_NAMES
6377              ,null,'PARTY_ALL_NAMES'
6378              ,'PARTY','SEARCH');
6379     ELSE
6380       x_stage_rec.TX40 := '';
6381     END IF;
6382   ELSE
6383     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6384       tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
6385              x_stage_rec.TX40
6386              ,null,'PARTY_ALL_NAMES'
6387              ,'PARTY','SCORE');
6388       IF tmp IS NOT NULL THEN
6389         x_stage_rec.TX40 := tmp;
6390       END IF;
6391     END IF;
6392   END IF;
6393   IF p_search_ctx THEN
6394     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6395       x_stage_rec.TX39 := 
6396         HZ_TRANS_PKG.WRNAMES_EXACT(
6397              p_search_rec.PARTY_ALL_NAMES
6398              ,null,'PARTY_ALL_NAMES'
6399              ,'PARTY','SEARCH');
6400     ELSE
6401       x_stage_rec.TX39 := '';
6402     END IF;
6403   ELSE
6404     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6405       tmp :=HZ_TRANS_PKG.WRNAMES_EXACT(
6406              x_stage_rec.TX39
6407              ,null,'PARTY_ALL_NAMES'
6408              ,'PARTY','SCORE');
6409       IF tmp IS NOT NULL THEN
6410         x_stage_rec.TX39 := tmp;
6411       END IF;
6412     END IF;
6413   END IF;
6414   IF p_search_ctx THEN
6415     IF p_search_rec.PARTY_TYPE IS NOT NULL THEN 
6416       x_stage_rec.TX36 := 
6417         HZ_TRANS_PKG.EXACT(
6418              p_search_rec.PARTY_TYPE
6419              ,null,'PARTY_TYPE'
6420              ,'PARTY');
6421     ELSE
6422       x_stage_rec.TX36 := '';
6423     END IF;
6424   END IF;
6425     l_party_name := p_search_rec.PARTY_NAME;
6426     IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6427       l_party_name := p_search_rec.PARTY_ALL_NAMES;
6428     END IF;
6429     IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN
6430       x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,'PARTY_NAME','PARTY','SEARCH');
6431     END IF;
6432 EXCEPTION
6433   WHEN OTHERS THEN
6434     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6435     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_REC');
6436     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6437     FND_MSG_PUB.ADD;
6438     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6439 END;
6440 
6441 
6442 /************************************************
6443   This procedure maps a search record from the logical
6444   record structure to the stage schema structure 
6445   for the PARTY_SITES Entity after applying 
6446   the defined transformations
6447 ************************************************/
6448 
6449 PROCEDURE MAP_PARTY_SITE_REC( 
6450     p_search_ctx IN BOOLEAN,
6451     p_search_list IN HZ_PARTY_SEARCH.party_site_list, 
6452     x_entered_max_score OUT NUMBER,
6453     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list
6454   ) IS 
6455   l_current_max_score NUMBER;
6456   tmp VARCHAR2(4000);
6457 BEGIN
6458    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6459       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);
6460     END IF;
6461    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6462       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);
6463     END IF;
6464   IF p_search_ctx THEN
6465    g_ps_den_only:=TRUE;
6466     x_entered_max_score:=0;
6467     FOR I IN 1..p_search_list.COUNT LOOP
6468       l_current_max_score:=0;
6469       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6470         l_current_max_score := l_current_max_score+40;
6471         g_ps_den_only:=FALSE;
6472       END IF;
6473       IF p_search_list(I).CITY IS NOT NULL THEN 
6474         l_current_max_score := l_current_max_score+30;
6475       END IF;
6476       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6477         l_current_max_score := l_current_max_score+30;
6478       END IF;
6479       IF p_search_list(I).STATE IS NOT NULL THEN 
6480         l_current_max_score := l_current_max_score+20;
6481       END IF;
6482       IF l_current_max_score>x_entered_max_score THEN
6483         x_entered_max_score:=l_current_max_score;
6484       END IF;
6485     END LOOP;
6486   END IF;
6487   FOR I IN 1..p_search_list.COUNT LOOP
6488     IF p_search_ctx THEN
6489       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6490         x_stage_list(I).TX4 := 
6491           HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6492              p_search_list(I).ADDRESS
6493              ,null,'ADDRESS'
6494              ,'PARTY_SITES','SEARCH');
6495       ELSE
6496         x_stage_list(I).TX4 := '';
6497       END IF;
6498     ELSE
6499       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6500         tmp := HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6501              x_stage_list(I).TX4
6502              ,null,'ADDRESS'
6503              ,'PARTY_SITES','SCORE');
6504         IF tmp IS NOT NULL THEN
6505           x_stage_list(I).TX4 := tmp;
6506         END IF;
6507       END IF;
6508     END IF;
6509   END LOOP;
6510   FOR I IN 1..p_search_list.COUNT LOOP
6511     IF p_search_ctx THEN
6512       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6513         x_stage_list(I).TX3 := 
6514           HZ_TRANS_PKG.WRADDRESS_EXACT(
6515              p_search_list(I).ADDRESS
6516              ,null,'ADDRESS'
6517              ,'PARTY_SITES','SEARCH');
6518       ELSE
6519         x_stage_list(I).TX3 := '';
6520       END IF;
6521     ELSE
6522       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6523         tmp := HZ_TRANS_PKG.WRADDRESS_EXACT(
6524              x_stage_list(I).TX3
6525              ,null,'ADDRESS'
6526              ,'PARTY_SITES','SCORE');
6527         IF tmp IS NOT NULL THEN
6528           x_stage_list(I).TX3 := tmp;
6529         END IF;
6530       END IF;
6531     END IF;
6532   END LOOP;
6533   FOR I IN 1..p_search_list.COUNT LOOP
6534     IF p_search_ctx THEN
6535       IF p_search_list(I).CITY IS NOT NULL THEN 
6536         x_stage_list(I).TX10 := 
6537           HZ_TRANS_PKG.CLEANSE(
6538              p_search_list(I).CITY
6539              ,null,'CITY'
6540              ,'PARTY_SITES');
6541       ELSE
6542         x_stage_list(I).TX10 := '';
6543       END IF;
6544     END IF;
6545   END LOOP;
6546   FOR I IN 1..p_search_list.COUNT LOOP
6547     IF p_search_ctx THEN
6548       IF p_search_list(I).CITY IS NOT NULL THEN 
6549         x_stage_list(I).TX9 := 
6550           HZ_TRANS_PKG.EXACT(
6551              p_search_list(I).CITY
6552              ,null,'CITY'
6553              ,'PARTY_SITES');
6554       ELSE
6555         x_stage_list(I).TX9 := '';
6556       END IF;
6557     END IF;
6558   END LOOP;
6559   FOR I IN 1..p_search_list.COUNT LOOP
6560     IF p_search_ctx THEN
6561       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6562         x_stage_list(I).TX11 := 
6563           HZ_TRANS_PKG.RM_SPLCHAR(
6564              p_search_list(I).POSTAL_CODE
6565              ,null,'POSTAL_CODE'
6566              ,'PARTY_SITES','SEARCH');
6567       ELSE
6568         x_stage_list(I).TX11 := '';
6569       END IF;
6570     ELSE
6571       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6572         tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6573              x_stage_list(I).TX11
6574              ,null,'POSTAL_CODE'
6575              ,'PARTY_SITES','SCORE');
6576         IF tmp IS NOT NULL THEN
6577           x_stage_list(I).TX11 := tmp;
6578         END IF;
6579       END IF;
6580     END IF;
6581   END LOOP;
6582   FOR I IN 1..p_search_list.COUNT LOOP
6583     IF p_search_ctx THEN
6584       IF p_search_list(I).STATE IS NOT NULL THEN 
6585         x_stage_list(I).TX15 := 
6586           HZ_TRANS_PKG.WRSTATE_CLEANSE(
6587              p_search_list(I).STATE
6588              ,null,'STATE'
6589              ,'PARTY_SITES','SEARCH');
6590       ELSE
6591         x_stage_list(I).TX15 := '';
6592       END IF;
6593     ELSE
6594       IF p_search_list(I).STATE IS NOT NULL THEN 
6595         tmp := HZ_TRANS_PKG.WRSTATE_CLEANSE(
6596              x_stage_list(I).TX15
6597              ,null,'STATE'
6598              ,'PARTY_SITES','SCORE');
6599         IF tmp IS NOT NULL THEN
6600           x_stage_list(I).TX15 := tmp;
6601         END IF;
6602       END IF;
6603     END IF;
6604   END LOOP;
6605   FOR I IN 1..p_search_list.COUNT LOOP
6606     IF p_search_ctx THEN
6607       IF p_search_list(I).STATE IS NOT NULL THEN 
6608         x_stage_list(I).TX14 := 
6609           HZ_TRANS_PKG.WRSTATE_EXACT(
6610              p_search_list(I).STATE
6611              ,null,'STATE'
6612              ,'PARTY_SITES','SEARCH');
6613       ELSE
6614         x_stage_list(I).TX14 := '';
6615       END IF;
6616     ELSE
6617       IF p_search_list(I).STATE IS NOT NULL THEN 
6618         tmp := HZ_TRANS_PKG.WRSTATE_EXACT(
6619              x_stage_list(I).TX14
6620              ,null,'STATE'
6621              ,'PARTY_SITES','SCORE');
6622         IF tmp IS NOT NULL THEN
6623           x_stage_list(I).TX14 := tmp;
6624         END IF;
6625       END IF;
6626     END IF;
6627   END LOOP;
6628 EXCEPTION
6629   WHEN OTHERS THEN
6630     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6631     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_SITE_REC');
6632     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6633     FND_MSG_PUB.ADD;
6634     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6635 END;
6636 
6637 
6638 /************************************************
6639   This procedure maps a search record from the logical
6640   record structure to the stage schema structure 
6641   for the CONTACTS Entity after applying 
6642   the defined transformations
6643 ************************************************/
6644 
6645 PROCEDURE MAP_CONTACT_REC( 
6646     p_search_ctx IN BOOLEAN,
6647     p_search_list IN HZ_PARTY_SEARCH.contact_list, 
6648     x_entered_max_score OUT NUMBER,
6649     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list
6650   ) IS 
6651   l_current_max_score NUMBER;
6652   tmp VARCHAR2(4000);
6653 BEGIN
6654    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6655       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);
6656     END IF;
6657    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6658       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);
6659     END IF;
6660   IF p_search_ctx THEN
6661     x_entered_max_score:=0;
6662     FOR I IN 1..p_search_list.COUNT LOOP
6663       l_current_max_score:=0;
6664       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
6665         l_current_max_score := l_current_max_score+40;
6666       END IF;
6667       IF l_current_max_score>x_entered_max_score THEN
6668         x_entered_max_score:=l_current_max_score;
6669       END IF;
6670     END LOOP;
6671   END IF;
6672   FOR I IN 1..p_search_list.COUNT LOOP
6673     IF p_search_ctx THEN
6674       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
6675         x_stage_list(I).TX6 := 
6676           HZ_TRANS_PKG.WRPERSON_CLEANSE(
6677              p_search_list(I).CONTACT_NAME
6678              ,null,'CONTACT_NAME'
6679              ,'CONTACTS','SEARCH');
6680       ELSE
6681         x_stage_list(I).TX6 := '';
6682       END IF;
6683     ELSE
6684       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
6685         tmp := HZ_TRANS_PKG.WRPERSON_CLEANSE(
6686              x_stage_list(I).TX6
6687              ,null,'CONTACT_NAME'
6688              ,'CONTACTS','SCORE');
6689         IF tmp IS NOT NULL THEN
6690           x_stage_list(I).TX6 := tmp;
6691         END IF;
6692       END IF;
6693     END IF;
6694   END LOOP;
6695   FOR I IN 1..p_search_list.COUNT LOOP
6696     IF p_search_ctx THEN
6697       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
6698         x_stage_list(I).TX5 := 
6699           HZ_TRANS_PKG.WRPERSON_EXACT(
6700              p_search_list(I).CONTACT_NAME
6701              ,null,'CONTACT_NAME'
6702              ,'CONTACTS','SEARCH');
6703       ELSE
6704         x_stage_list(I).TX5 := '';
6705       END IF;
6706     ELSE
6707       IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN 
6708         tmp := HZ_TRANS_PKG.WRPERSON_EXACT(
6709              x_stage_list(I).TX5
6710              ,null,'CONTACT_NAME'
6711              ,'CONTACTS','SCORE');
6712         IF tmp IS NOT NULL THEN
6713           x_stage_list(I).TX5 := tmp;
6714         END IF;
6715       END IF;
6716     END IF;
6717   END LOOP;
6718 EXCEPTION
6719   WHEN OTHERS THEN
6720     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6721     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_REC');
6722     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6723     FND_MSG_PUB.ADD;
6724     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6725 END;
6726 
6727 
6728 /************************************************
6729   This procedure maps a search record from the logical
6730   record structure to the stage schema structure 
6731   for the CONTACT_POINTS Entity after applying 
6732   the defined transformations
6733 ************************************************/
6734 
6735 PROCEDURE MAP_CONTACT_POINT_REC( 
6736     p_search_ctx IN BOOLEAN,
6737     p_search_list IN HZ_PARTY_SEARCH.contact_point_list, 
6738     x_entered_max_score OUT NUMBER,
6739     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list
6740   ) IS 
6741   l_current_max_score NUMBER;
6742   tmp VARCHAR2(4000);
6743   TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);
6744   l_cnt_pt_type_index INDEX_VARCHAR100_TBL;
6745   TYPE CONTACT_PT_REC_TYPE IS RECORD (
6746   contact_pt_type		VARCHAR2(100),
6747   max_score    		NUMBER) ;
6748   TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;
6749   l_cnt_pt_type contact_pt_list;
6750   N NUMBER := 1;
6751   x_modify VARCHAR2(1);
6752 BEGIN
6753    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6754       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);
6755     END IF;
6756    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6757       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);
6758     END IF;
6759   IF p_search_ctx THEN
6760     x_entered_max_score:=0;
6761     FOR I IN 1..p_search_list.COUNT LOOP
6762       l_current_max_score:=0;
6763       x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;
6764       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
6765         l_current_max_score := l_current_max_score+60;
6766       END IF;
6767       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
6768         l_current_max_score := l_current_max_score+60;
6769       END IF;
6770       IF p_search_list(I).URL IS NOT NULL THEN 
6771         l_current_max_score := l_current_max_score+60;
6772       END IF;
6773       x_modify := 'N';
6774       FOR J IN 1..l_cnt_pt_type.count LOOP
6775       if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then
6776          x_modify := 'Y';
6777       IF l_cnt_pt_type(J).max_score<l_current_max_score THEN
6778       l_cnt_pt_type(J).max_score :=l_current_max_score;
6779       EXIT;
6780       END IF;
6781       end if;
6782       END LOOP;
6783       if x_modify='N' then
6784       l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;
6785       l_cnt_pt_type(N).max_score := l_current_max_score;
6786       N:= N+1;
6787       end if;
6788     END LOOP;
6789    FOR M IN 1..l_cnt_pt_type.count LOOP
6790    x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;
6791    END LOOP;
6792   END IF;
6793   FOR I IN 1..p_search_list.COUNT LOOP
6794     IF p_search_ctx THEN
6795       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
6796         x_stage_list(I).TX6 := 
6797           HZ_TRANS_PKG.CLEANSED_EMAIL(
6798              p_search_list(I).EMAIL_ADDRESS
6799              ,null,'EMAIL_ADDRESS'
6800              ,'CONTACT_POINTS','SEARCH');
6801       ELSE
6802         x_stage_list(I).TX6 := '';
6803       END IF;
6804     ELSE
6805       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
6806         tmp := HZ_TRANS_PKG.CLEANSED_EMAIL(
6807              x_stage_list(I).TX6
6808              ,null,'EMAIL_ADDRESS'
6809              ,'CONTACT_POINTS','SCORE');
6810         IF tmp IS NOT NULL THEN
6811           x_stage_list(I).TX6 := tmp;
6812         END IF;
6813       END IF;
6814     END IF;
6815   END LOOP;
6816   FOR I IN 1..p_search_list.COUNT LOOP
6817     IF p_search_ctx THEN
6818       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
6819         x_stage_list(I).TX5 := 
6820           HZ_TRANS_PKG.EXACT_EMAIL(
6821              p_search_list(I).EMAIL_ADDRESS
6822              ,null,'EMAIL_ADDRESS'
6823              ,'CONTACT_POINTS');
6824       ELSE
6825         x_stage_list(I).TX5 := '';
6826       END IF;
6827     END IF;
6828   END LOOP;
6829   FOR I IN 1..p_search_list.COUNT LOOP
6830     IF p_search_ctx THEN
6831       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
6832         x_stage_list(I).TX1 := 
6833           HZ_TRANS_PKG.RM_SPLCHAR_CTX(
6834              p_search_list(I).FLEX_FORMAT_PHONE_NUMBER
6835              ,null,'FLEX_FORMAT_PHONE_NUMBER'
6836              ,'CONTACT_POINTS','SEARCH');
6837       ELSE
6838         x_stage_list(I).TX1 := '';
6839       END IF;
6840     ELSE
6841       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
6842         tmp := HZ_TRANS_PKG.RM_SPLCHAR_CTX(
6843              x_stage_list(I).TX1
6844              ,null,'FLEX_FORMAT_PHONE_NUMBER'
6845              ,'CONTACT_POINTS','SCORE');
6846         IF tmp IS NOT NULL THEN
6847           x_stage_list(I).TX1 := tmp;
6848         END IF;
6849       END IF;
6850     END IF;
6851   END LOOP;
6852   FOR I IN 1..p_search_list.COUNT LOOP
6853     IF p_search_ctx THEN
6854       IF p_search_list(I).URL IS NOT NULL THEN 
6855         x_stage_list(I).TX8 := 
6856           HZ_TRANS_PKG.CLEANSED_URL(
6857              p_search_list(I).URL
6858              ,null,'URL'
6859              ,'CONTACT_POINTS','SEARCH');
6860       ELSE
6861         x_stage_list(I).TX8 := '';
6862       END IF;
6863     ELSE
6864       IF p_search_list(I).URL IS NOT NULL THEN 
6865         tmp := HZ_TRANS_PKG.CLEANSED_URL(
6866              x_stage_list(I).TX8
6867              ,null,'URL'
6868              ,'CONTACT_POINTS','SCORE');
6869         IF tmp IS NOT NULL THEN
6870           x_stage_list(I).TX8 := tmp;
6871         END IF;
6872       END IF;
6873     END IF;
6874   END LOOP;
6875 EXCEPTION
6876   WHEN OTHERS THEN
6877     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6878     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_POINT_REC');
6879     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6880     FND_MSG_PUB.ADD;
6881     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6882 END;
6883 
6884 
6885 /************************************************
6886   This procedure checks if the input search criteria 
6887   is valid. It checks if : 
6888    1. At least one primary condition is passed
6889    2. Contact Point Type is not null for each condition
6890 ************************************************/
6891 
6892 FUNCTION check_prim_cond(
6893       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
6894       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
6895       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
6896       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list)
6897       RETURN BOOLEAN IS
6898   BEGIN
6899     FOR I IN 1..p_contact_point_list.COUNT LOOP
6900       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (
6901 p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
6902 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
6903 OR p_contact_point_list(I).URL IS NOT NULL 
6904  ) THEN
6905         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
6906         FND_MSG_PUB.ADD;
6907         RAISE FND_API.G_EXC_ERROR;
6908       END IF;
6909     END LOOP;
6910 
6911     IF p_party_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6912       RETURN TRUE;
6913     END IF;
6914     IF p_party_search_rec.DUNS_NUMBER_C IS NOT NULL THEN 
6915       RETURN TRUE;
6916     END IF;
6917     FOR I IN 1..p_party_site_list.COUNT LOOP
6918       IF p_party_site_list(I).ADDRESS 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).CITY 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).POSTAL_CODE IS NOT NULL THEN 
6929         RETURN TRUE;
6930       END IF;
6931     END LOOP;
6932     FOR I IN 1..p_party_site_list.COUNT LOOP
6933       IF p_party_site_list(I).STATE IS NOT NULL THEN 
6934         RETURN TRUE;
6935       END IF;
6936     END LOOP;
6937     FOR I IN 1..p_contact_list.COUNT LOOP
6938       IF p_contact_list(I).CONTACT_NAME 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).FLEX_FORMAT_PHONE_NUMBER 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).EMAIL_ADDRESS IS NOT NULL THEN 
6949         RETURN TRUE;
6950       END IF;
6951     END LOOP;
6952     FOR I IN 1..p_contact_point_list.COUNT LOOP
6953       IF p_contact_point_list(I).URL IS NOT NULL THEN 
6954         RETURN TRUE;
6955       END IF;
6956     END LOOP;
6957     RETURN FALSE;
6958 EXCEPTION
6959   WHEN FND_API.G_EXC_ERROR THEN
6960     RAISE FND_API.G_EXC_ERROR;
6961   WHEN OTHERS THEN
6962     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6963     FND_MESSAGE.SET_TOKEN('PROC','check_prim_cond');
6964     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6965     FND_MSG_PUB.ADD;
6966     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6967   END check_prim_cond;
6968 
6969 /************************************************
6970   This procedure checks if the input search condition 
6971   has party site criteria. 
6972 ************************************************/
6973 
6974 PROCEDURE check_party_site_cond(
6975       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
6976       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
6977 	   x_secondary		   OUT     BOOLEAN,
6978 	   x_primary		   OUT     BOOLEAN
6979 ) IS
6980   BEGIN
6981     x_primary:= FALSE;
6982     x_secondary:= FALSE;
6983     FOR I IN 1..p_party_site_list.COUNT LOOP
6984       IF p_party_site_list(I).ADDRESS IS NOT NULL 
6985          OR p_party_site_list(I).CITY IS NOT NULL
6986          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
6987          OR p_party_site_list(I).STATE IS NOT NULL
6988       THEN
6989         x_primary := TRUE;
6990       END IF;
6991       EXIT WHEN x_primary;
6992     END LOOP;
6993     FOR I IN 1..p_contact_point_list.COUNT LOOP
6994       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
6995          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
6996          OR p_contact_point_list(I).URL IS NOT NULL
6997       THEN
6998         x_primary := TRUE;
6999       END IF;
7000       EXIT WHEN x_primary;
7001     END LOOP;
7002 
7003     FOR I IN 1..p_party_site_list.COUNT LOOP
7004       IF p_party_site_list(I).ADDRESS IS NOT NULL 
7005          OR p_party_site_list(I).CITY IS NOT NULL
7006          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
7007          OR p_party_site_list(I).STATE IS NOT NULL
7008       THEN
7009         x_secondary := TRUE;
7010       END IF;
7011       EXIT WHEN x_secondary;
7012     END LOOP;
7013     FOR I IN 1..p_contact_point_list.COUNT LOOP
7014       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7015          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7016          OR p_contact_point_list(I).URL IS NOT NULL
7017       THEN
7018         x_secondary := TRUE;
7019       END IF;
7020       EXIT WHEN x_secondary;
7021     END LOOP;
7022 EXCEPTION
7023   WHEN OTHERS THEN
7024     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7025     FND_MESSAGE.SET_TOKEN('PROC','check_party_site_cond');
7026     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7027     FND_MSG_PUB.ADD;
7028     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7029   END check_party_site_cond;
7030 
7031 /************************************************
7032   This procedure checks if the input search condition 
7033   has contact criteria. 
7034 ************************************************/
7035 
7036 PROCEDURE check_contact_cond(
7037       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
7038       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
7039       x_secondary             OUT     BOOLEAN,
7040       x_primary               OUT     BOOLEAN
7041 ) IS
7042   BEGIN
7043     x_primary:= FALSE;
7044     x_secondary:= FALSE;
7045     FOR I IN 1..p_contact_list.COUNT LOOP
7046       IF p_contact_list(I).CONTACT_NAME IS NOT NULL 
7047       THEN
7048         x_primary := TRUE;
7049       END IF;
7050       EXIT WHEN x_primary;
7051     END LOOP;
7052 
7053     FOR I IN 1..p_contact_point_list.COUNT LOOP
7054       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7055          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7056          OR p_contact_point_list(I).URL IS NOT NULL
7057       THEN
7058         x_primary := TRUE;
7059       END IF;
7060       EXIT WHEN x_primary;
7061     END LOOP;
7062 
7063     FOR I IN 1..p_contact_list.COUNT LOOP
7064       IF p_contact_list(I).CONTACT_NAME IS NOT NULL 
7065       THEN
7066         x_secondary := TRUE;
7067       END IF;
7068       EXIT WHEN x_secondary;
7069     END LOOP;
7070 
7071     FOR I IN 1..p_contact_point_list.COUNT LOOP
7072       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7073          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7074          OR p_contact_point_list(I).URL IS NOT NULL
7075       THEN
7076         x_secondary := TRUE;
7077       END IF;
7078       EXIT WHEN x_secondary;
7079     END LOOP;
7080 EXCEPTION
7081   WHEN OTHERS THEN
7082     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7083     FND_MESSAGE.SET_TOKEN('PROC','check_contact_cond');
7084     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7085     FND_MSG_PUB.ADD;
7086     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7087   END check_contact_cond;
7088 
7089 /************************************************
7090   This procedure checks if the input search condition 
7091   has valid contact point criteria. 
7092 ************************************************/
7093 
7094 PROCEDURE check_contact_point_cond(
7095       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
7096       x_secondary             OUT     BOOLEAN,
7097       x_primary               OUT     BOOLEAN
7098 ) IS
7099   BEGIN
7100     x_primary:= FALSE;
7101     x_secondary:= FALSE;
7102 
7103     FOR I IN 1..p_contact_point_list.COUNT LOOP
7104       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN 
7105         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
7106         FND_MSG_PUB.ADD;
7107         RAISE FND_API.G_EXC_ERROR;
7108       END IF;
7109     END LOOP;
7110 
7111     FOR I IN 1..p_contact_point_list.COUNT LOOP
7112       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7113          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
7114          OR p_contact_point_list(I).URL IS NOT NULL 
7115       THEN
7116         x_primary := TRUE;
7117       END IF;
7118       EXIT WHEN x_primary;
7119     END LOOP;
7120     FOR I IN 1..p_contact_point_list.COUNT LOOP
7121       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL  
7122          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
7123          OR p_contact_point_list(I).URL IS NOT NULL 
7124       THEN
7125         x_secondary := TRUE;
7126       END IF;
7127       EXIT WHEN x_secondary;
7128     END LOOP;
7129 EXCEPTION
7130   WHEN OTHERS THEN
7131     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7132     FND_MESSAGE.SET_TOKEN('PROC','check_contact_point_cond');
7133     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7134     FND_MSG_PUB.ADD;
7135     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7136   END check_contact_point_cond;
7137 
7138 FUNCTION check_staged RETURN BOOLEAN IS
7139 
7140   CURSOR c_check_staged IS 
7141     SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL 
7142     WHERE nvl(STAGED_FLAG,'N') = 'N' 
7143     AND FUNCTION_ID in (
7144                 43
7145                 ,44
7146                 ,45
7147                 ,66
7148                 ,67
7149                 ,72
7150                 ,73
7151                 ,74
7152                 ,77
7153                 ,78
7154                 ,92
7155                 ,93
7156                 ,110
7157                 ,114
7158                 ,115
7159                 ,117
7160     );
7161   l_tmp NUMBER;
7162 BEGIN
7163   IF g_staged =  1 THEN
7164     RETURN TRUE;
7165   ELSIF g_staged = 0 THEN
7166     RETURN FALSE;
7167   END IF;
7168 
7169   OPEN c_check_staged;
7170   FETCH c_check_staged INTO l_tmp;
7171   IF c_check_staged%FOUND THEN
7172     CLOSE c_check_staged;
7173     g_staged := 0;
7174     RETURN FALSE;
7175   ELSE
7176     CLOSE c_check_staged;
7177     g_staged := 1;
7178     RETURN TRUE;
7179   END IF;
7180 END check_staged;
7181 
7182 -- Fix for Bug 4736139
7183 FUNCTION check_staged_var RETURN VARCHAR2 IS
7184   l_staged       VARCHAR2(1);
7185   l_staged_bool  BOOLEAN;
7186 BEGIN
7187   l_staged_bool := check_staged;
7188   IF l_staged_bool THEN
7189     l_staged := 'Y';
7190   ELSE
7191     l_staged := 'N';
7192   END IF;
7193   RETURN l_staged;
7194 END check_staged_var;
7195 -- End fix for Bug 4736139
7196 
7197 END;
7198