DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_62

Source


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