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