DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_34

Source


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