DBA Data[Home] [Help]
Skip to content

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  |      28-NOV-2012 Generated by HZ Match Rule Compiler
23  |
24  *=======================================================================*/
25 
26 -- ==========================================================================================
27 -- ============MATCH RULE COMPILER GENERATED CODE FOR SEARCH MATCH RULES ====================
28 -- ==========================================================================================
29 
30   TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;
31   call_order vlisttype;
32   call_max_score HZ_PARTY_SEARCH.IDList;
33   call_type vlisttype;
34   g_party_stage_rec  HZ_PARTY_STAGE.party_stage_rec_type;
35   g_party_site_stage_list  HZ_PARTY_STAGE.party_site_stage_list;
36   g_contact_stage_list  HZ_PARTY_STAGE.contact_stage_list;
37   g_contact_pt_stage_list  HZ_PARTY_STAGE.contact_pt_stage_list;
38   g_mappings  HZ_PARTY_SEARCH.IDList;
39   g_max_id NUMBER:=2000000000;
40   g_other_party_level_attribs BOOLEAN;
41 
42   g_debug_count                        NUMBER := 0;
43   g_score_until_thresh BOOLEAN:=false;
44  
45   g_thres_score NUMBER:=1000;
46   g_ps_den_only BOOLEAN;
47   g_index_owner VARCHAR2(255);
48   distinct_search_cpt_types NUMBER ; 
49 
50 PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)
51 IS
52      remainder_str VARCHAR2(4000);
53      current_pos NUMBER ;
54      temp VARCHAR2(300) ;
55 BEGIN
56      remainder_str := input_str ;
57      current_pos := 1 ;
58    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
59      WHILE remainder_str IS NOT NULL
60      LOOP
61      temp := substr(remainder_str, 1 , 255 );
62       hz_utility_v2pub.debug(p_message=>'  '||temp,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
63      current_pos := current_pos + 255 ;
64      remainder_str := substr(input_str,current_pos );
65      END LOOP ;
66     END IF;
67 END ;
68 FUNCTION check_estimate_hits (
69   p_entity VARCHAR2,
70   p_contains_str VARCHAR2) RETURN NUMBER IS
71   
72   ustatus VARCHAR2(255);
73   dstatus VARCHAR2(255);
74   l_bool BOOLEAN;
75   l_hits NUMBER := 0;
76 BEGIN
77   IF g_index_owner IS NULL THEN
78     l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,g_index_owner);
79   END IF;
80   IF p_entity='PARTY' THEN
81 
82     l_hits :=  CTX_QUERY.count_hits(
83         g_index_owner||'.'||'HZ_STAGE_PARTIES_T1',p_contains_str, false);
84   ELSIF p_entity='PARTY_SITES' THEN
85     l_hits :=  CTX_QUERY.count_hits(
86         g_index_owner||'.'||'HZ_STAGE_PARTY_SITES_T1',p_contains_str, false);
87   ELSIF p_entity='CONTACTS' THEN
88     l_hits :=  CTX_QUERY.count_hits(
89         g_index_owner||'.'||'HZ_STAGE_CONTACT_T1',p_contains_str, false);
90   ELSIF p_entity='CONTACT_POINTS' THEN
91     l_hits :=  CTX_QUERY.count_hits(
92         g_index_owner||'.'||'HZ_STAGE_CPT_T1',p_contains_str, false);
93   END IF;
94   RETURN floor(l_hits/2) ;
95   
96 
97   exception
98     when others then
99       if (instrb(SQLERRM,'DRG-51030')>0) then 
100         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
101         FND_MSG_PUB.ADD;
102         RAISE FND_API.G_EXC_ERROR;
103       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
104         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
105         FND_MSG_PUB.ADD;
106         RAISE FND_API.G_EXC_ERROR;
107       else 
108         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
109       end if;
110 END;
111 
112 
113 FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)
114 RETURN VARCHAR2
115 IS
116 p_person_restrict_sql VARCHAR2(32767);
117 p_restrict1_sql VARCHAR2(32767);
118 p_final_restrict_sql VARCHAR2(32767);
119 BEGIN
120    p_final_restrict_sql := p_restrict_sql ; 
121    IF p_restrict_sql IS NOT NULL
122    THEN
123      IF instrb(p_restrict_sql, 'STAGE.') > 0
124      THEN
125         p_restrict1_sql := replace( p_restrict_sql, 'STAGE.', 'stage1.');
126      ELSIF instrb(p_restrict_sql, 'stage.') > 0
127      THEN
128            p_restrict1_sql := replace( p_restrict_sql, 'stage.', 'stage1.');
129      END IF;
130     p_person_restrict_sql := 'exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r' 
131                                || ' where oc.org_contact_id = stage.org_contact_id and' 
132                                || ' r.relationship_id = oc.party_relationship_id' 
133                                || ' and r.subject_type = ''PERSON'' AND r.object_type = ''ORGANIZATION'' ' 
134                                || ' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id' 
135                                || ' and ' || p_restrict1_sql || ' ) )' ; 
136 p_final_restrict_sql := '((stage.org_contact_id is null and ' || p_restrict_sql || ') or (stage.org_contact_id is not null and ' 
137                            || p_person_restrict_sql ||  ' ))'; 
138  END IF;
139  return p_final_restrict_sql ;
140 END;
141   FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS
142     l_newidx NUMBER;
143   BEGIN 
144    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
145       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
146       hz_utility_v2pub.debug(p_message=>'calling the function map_id',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
147     END IF;
148    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
149       hz_utility_v2pub.debug(p_message=>'argument in_id =  '||in_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
150     END IF;
151     IF in_id<g_max_id THEN 
152       RETURN in_id;
153     ELSE
154       FOR I in 1..g_mappings.COUNT LOOP
155         IF in_id = g_mappings(I) THEN
156           RETURN (g_max_id+I);
157         END IF;
158       END LOOP;
159       l_newidx := g_mappings.COUNT+1;
160       g_mappings(l_newidx) := in_id;
161       RETURN (g_max_id+l_newidx);
162     END IF;
163   END;
164   FUNCTION GET_PARTY_SCORE 
165        (
166        p_table_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 (
322        x_matchidx OUT NUMBER
323       ,p_table_TX9 VARCHAR2
324       ,p_table_TX10 VARCHAR2
325       ,p_table_TX11 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
449           x_matchidx:=J;
450           RETURN l_current_score;
451         END IF;
452       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 = 'ALL_ACCOUNT_NAMES' THEN
484 
485      l_matched_value := HZ_PARTY_ACQUIRE.get_account_info (p_record_id, p_entity,'ALL_ACCOUNT_NAMES','Y');
486       RETURN l_matched_value;
487     END IF;
488   IF p_attribute = 'PARTY_NUMBER' 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 PARTY_NUMBER INTO l_matched_value 
495         FROM HZ_PARTIES
496         WHERE party_id = p_record_id 
497         and rownum = 1;
498       ELSIF l_party_type = 'PERSON' THEN
499         SELECT PARTY_NUMBER INTO l_matched_value 
500         FROM HZ_PARTIES
501         WHERE party_id = p_record_id 
502         and rownum = 1;
503       END IF;
504       RETURN l_matched_value;
505     END IF;
506   IF p_attribute = 'ALL_ACCOUNT_NUMBERS' THEN
507 
508      l_matched_value := HZ_PARTY_ACQUIRE.get_account_info (p_record_id, p_entity,'ALL_ACCOUNT_NUMBERS','Y');
509       RETURN l_matched_value;
510     END IF;
511   IF p_attribute = 'PARTY_ALL_NAMES' THEN
512 
513      l_matched_value := HZ_PARTY_ACQUIRE.get_known_as (p_record_id, p_entity,'PARTY_ALL_NAMES','Y');
514       RETURN l_matched_value;
515     END IF;
516   IF p_attribute = 'TAX_NAME' THEN
517 
518       SELECT party_type INTO l_party_type 
519       FROM HZ_PARTIES
520       WHERE party_id = p_record_id;
521       IF l_party_type = 'ORGANIZATION' THEN
522         SELECT TAX_NAME INTO l_matched_value 
523         FROM HZ_ORGANIZATION_PROFILES
524         WHERE party_id = p_record_id 
525         and effective_end_date is null
526         and rownum = 1;
527       ELSIF l_party_type = 'PERSON' THEN
528         SELECT TAX_NAME INTO l_matched_value 
529         FROM HZ_PERSON_PROFILES
530         WHERE party_id = p_record_id 
531         and effective_end_date is null 
532         and rownum = 1;
533       END IF;
534       RETURN l_matched_value;
535     END IF;
536   IF p_attribute = 'TAX_REFERENCE' THEN
537 
538       SELECT party_type INTO l_party_type 
539       FROM HZ_PARTIES
540       WHERE party_id = p_record_id;
541       IF l_party_type = 'ORGANIZATION' THEN
542         SELECT TAX_REFERENCE INTO l_matched_value 
543         FROM HZ_ORGANIZATION_PROFILES
544         WHERE party_id = p_record_id 
545         and effective_end_date is null
546         and rownum = 1;
547       ELSIF l_party_type = 'PERSON' THEN
548         SELECT TAX_REFERENCE INTO l_matched_value 
549         FROM HZ_PERSON_PROFILES
550         WHERE party_id = p_record_id 
551         and effective_end_date is null 
552         and rownum = 1;
553       END IF;
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
587         SELECT SIC_CODE_TYPE INTO l_matched_value 
588         FROM HZ_ORGANIZATION_PROFILES
589         WHERE party_id = p_record_id 
590         and rownum = 1;
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;
602         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
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 
611     END IF;
608         and rownum = 1;
609       END IF;
610       RETURN l_matched_value;
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
729     END IF;
726          l_matched_value := 'Err';
727      END;
728       RETURN l_matched_value;
730     NULL;
731   END IF;
732   IF p_entity = 'CONTACTS' THEN
733     NULL;
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
794       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX32, p_table_TX32,(50000*(p_idx-1)+36)) 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;
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       END IF;
800       IF l_score>0 THEN
801    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
802       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);
803     END IF;
804       l_attrib_value := get_attrib_val(p_record_id,'PARTY','ALL_ACCOUNT_NAMES');
805    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
806       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);
807     END IF;
808       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
809                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
810       VALUES (
811            p_party_id,p_record_id,p_search_ctx_id,'ALL_ACCOUNT_NAMES',
812            'PARTY', p_search_rec.ALL_ACCOUNT_NAMES,
813            l_attrib_value,l_score);
814    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
815       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);
816     END IF;
817       END IF;
818      l_score :=0;
819       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX34, p_table_TX34,(50000*(p_idx-1)+38)) THEN
820       l_score :=100;
821    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
822       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);
823     END IF;
824       END IF;
825       IF l_score>0 THEN
826    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
830    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
827       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);
828     END IF;
829       l_attrib_value := get_attrib_val(p_record_id,'PARTY','PARTY_NUMBER');
831       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);
832     END IF;
833       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
834                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
835       VALUES (
836            p_party_id,p_record_id,p_search_ctx_id,'PARTY_NUMBER',
837            'PARTY', p_search_rec.PARTY_NUMBER,
838            l_attrib_value,l_score);
839    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
840       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);
841     END IF;
842       END IF;
843      l_score :=0;
844       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX35, p_table_TX35,(50000*(p_idx-1)+39)) THEN
845       l_score :=100;
846    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
847       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);
848     END IF;
849       END IF;
850       IF l_score>0 THEN
851    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
852       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);
853     END IF;
854       l_attrib_value := get_attrib_val(p_record_id,'PARTY','ALL_ACCOUNT_NUMBERS');
855    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
856       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);
857     END IF;
858       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
859                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
860       VALUES (
861            p_party_id,p_record_id,p_search_ctx_id,'ALL_ACCOUNT_NUMBERS',
862            'PARTY', p_search_rec.ALL_ACCOUNT_NUMBERS,
863            l_attrib_value,l_score);
864    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
865       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);
866     END IF;
867       END IF;
868      l_score :=0;
869       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX39, p_table_TX39,(50000*(p_idx-1)+43)) THEN
870       l_score :=60;
871    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
872       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);
873     END IF;
874       ELSIF l_current_score<48 AND 
875           HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX40, p_table_TX40,(50000*(p_idx-1)+44)) THEN
876       l_score :=48;
877    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
878       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);
879     END IF;
880       ELSIF l_current_score<36 AND 
881           HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX158, p_table_TX158,(50000*(p_idx-1)+123)) THEN
882       l_score :=36;
883    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
884       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);
885     END IF;
886       END IF;
887       IF l_score>0 THEN
888    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
889       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);
890     END IF;
891       l_attrib_value := get_attrib_val(p_record_id,'PARTY','PARTY_ALL_NAMES');
892    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
893       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);
894     END IF;
895       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
896                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
897       VALUES (
898            p_party_id,p_record_id,p_search_ctx_id,'PARTY_ALL_NAMES',
899            'PARTY', p_search_rec.PARTY_ALL_NAMES,
900            l_attrib_value,l_score);
901    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
902       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);
903     END IF;
904       END IF;
905      l_score :=0;
906       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX42, p_table_TX42,(50000*(p_idx-1)+46)) THEN
907       l_score :=30;
908    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
909       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);
910     END IF;
911       ELSIF l_current_score<24 AND 
912           HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX43, p_table_TX43,(50000*(p_idx-1)+47)) THEN
913       l_score :=24;
914    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
918       IF l_score>0 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;
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);
921     END IF;
922       l_attrib_value := get_attrib_val(p_record_id,'PARTY','TAX_NAME');
923    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
924       hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
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,'TAX_NAME',
930            'PARTY', p_search_rec.TAX_NAME,
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.TX44, p_table_TX44,(50000*(p_idx-1)+49)) THEN
938       l_score :=56;
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','TAX_REFERENCE');
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,'TAX_REFERENCE',
955            'PARTY', p_search_rec.TAX_REFERENCE,
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;
1000     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);
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',
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
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);
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,
1080            'PARTY', p_search_rec.CORPORATION_CLASS,
1077                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
1078       VALUES (
1079            p_party_id,p_record_id,p_search_ctx_id,'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
1093        ,p_stage_rec IN HZ_PARTY_STAGE.party_site_stage_rec_type
1094       ,p_table_TX9 VARCHAR2
1095       ,p_table_TX10 VARCHAR2
1096       ,p_table_TX11 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;
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 (
1185            p_party_id,p_record_id,p_search_ctx_id,'PROVINCE',
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
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,
1270                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
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);
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;
1363       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
1485   ) IS
1486    l_dummy NUMBER;
1487   BEGIN
1488    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
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';
1592     maxscore (l_idx) := l_ct_entered_max_score;
1593 
1594     l_idx := l_cpt_entered_max_score+1;
1595     WHILE vlist.EXISTS(l_idx) LOOP
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
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
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);
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);
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);
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
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
1752     HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
1753   END IF;
1754 
1755     -- Setup query string for CATEGORY_CODE
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
1873     HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
1874   END IF;
1875 
1876     -- Setup query string for TAX_REFERENCE
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
1947     END IF;
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);
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);
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);
1982       HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_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     --
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
2089       l_contains_str_temp := null;
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
2187       l_sqlstr := l_sqlstr || ' AND ((:attr IS NULL OR ';
2188       l_sqlstr := l_sqlstr || '     (TX33 like :TX33||'' %'' ';
2189      l_sqlstr := l_sqlstr || ' )) ';
2190       l_sqlstr := l_sqlstr || '     '||p_match_str||' (:attr IS NULL OR ';
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
2273      ,g_party_stage_rec.TX35
2274      ,g_party_stage_rec.TX35
2275      ,g_party_stage_rec.TX158
2276      ,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 
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;
2394     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
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 /*+ INDEX(stage HZ_STAGE_PARTIES_T1) */ 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        ELSE 
2438            l_hint := '/*+ INDEX(stage HZ_STAGE_PARTIES_T1) */'; 
2439        END IF; 
2440      IF p_search_ctx_id IS NULL THEN
2441        l_sqlstr := 'SELECT   ' || l_hint || ' PARTY_ID , TX32, TX34, TX35, TX39, TX158, TX40, TX43, TX42, TX44, TX46, TX47, TX48, TX156, TX157'||
2442                    ' FROM HZ_STAGED_PARTIES stage'||
2443                    ' WHERE contains( concat_col, :cont)>0'||
2444                    ' AND ((:TX36 IS NULL OR :TX36||'' '' =  stage.TX36))'||
2445                    ' AND ('||p_restrict_sql||')' ||
2446                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2447           IF l_search_merged = 'Y' THEN  
2448                   l_sqlstr := l_sqlstr ;  
2449           ELSIF l_search_merged = 'I' THEN  
2450                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'', ''I'')';  
2451           ELSE  
2452                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'')';  
2453           END IF;  
2454  	   output_long_strings('----------------------------------------------------------');
2455       output_long_strings('Party Contains String = '||p_contains_str);
2456 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2457        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2458                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2459                     ,p_dup_party_id, p_dup_party_id;
2460      END IF;
2461    END IF;
2462   exception
2463     when others then
2464       if (instrb(SQLERRM,'DRG-51030')>0) then 
2465         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2466         FND_MSG_PUB.ADD;
2467         RAISE FND_API.G_EXC_ERROR;
2468       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2469         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2470         FND_MSG_PUB.ADD;
2471         RAISE FND_API.G_EXC_ERROR;
2472       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2473         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2474         FND_MSG_PUB.ADD;
2475         RAISE FND_API.G_EXC_ERROR;
2476       else 
2477         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2478     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2479     	 FND_MSG_PUB.ADD;
2480         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2481       end if;
2482   END;
2483 
2484   PROCEDURE open_party_site_cursor(
2485             p_dup_party_id NUMBER, 
2486             p_party_id NUMBER, 
2487             p_restrict_sql VARCHAR2, 
2488             p_contains_str  VARCHAR2, 
2489             p_search_ctx_id  NUMBER, 
2490             p_search_merged  VARCHAR2, 
2491             p_search_rel_sites  VARCHAR2, 
2492             p_person_api  VARCHAR2, 
2493             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
2494   l_sqlstr VARCHAR2(4000);
2495   l_hint VARCHAR2(100); 
2496   l_check NUMBER; 
2497   l_check_dt NUMBER; 
2498   l_search_merged VARCHAR2(1); 
2499   l_status_sql VARCHAR2(100); 
2500   p_restrict_sql1 VARCHAR2(4000); 
2501  
2502   BEGIN
2503    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2504       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);
2505       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);
2506     END IF;
2507      IF (p_search_merged is null) then 
2508         l_search_merged := 'N';  
2509      ELSE 
2510         l_search_merged := p_search_merged; 
2511      END IF; 
2512      IF p_party_id IS NOT NULL THEN
2513    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2514       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);
2515     END IF;
2516        IF p_search_rel_sites = 'N' THEN
2517          OPEN x_cursor FOR 
2518           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
2519           FROM HZ_STAGED_PARTY_SITES stage
2520           WHERE contains( concat_col, p_contains_str)>0
2521           AND( (l_search_merged ='Y' )  
2522              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2523              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2524           AND stage.party_id = p_party_id; 
2525        ELSE
2526          OPEN x_cursor FOR 
2527           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
2528           FROM HZ_STAGED_PARTY_SITES stage
2529           WHERE contains( concat_col, p_contains_str)>0
2530           AND( (l_search_merged ='Y' )  
2531             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2532             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2533           AND stage.party_id = p_party_id 
2534           UNION
2535           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
2536           FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc
2537           WHERE contains( concat_col, p_contains_str)>0
2538           AND( (l_search_merged ='Y' )  
2539             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2540             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2541           AND r.object_id = p_party_id 
2542           AND r.subject_id = stage.party_id 
2543           AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
2544           AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
2545           AND r.relationship_id = oc.party_relationship_id
2546           AND oc.org_contact_id = stage.org_contact_id; 
2547       END IF;
2548     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2549    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2550       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);
2551     END IF;
2552       IF p_search_ctx_id IS NULL THEN
2553    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2554       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);
2555     END IF;
2556         OPEN x_cursor FOR 
2557           SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX9, TX10, TX11, TX13, TX14, TX15, TX20, TX21, TX22
2558           FROM HZ_STAGED_PARTY_SITES stage
2559         WHERE contains( concat_col, p_contains_str)>0
2560         AND EXISTS (
2561           SELECT 1 FROM HZ_STAGED_PARTIES p
2562           WHERE p.PARTY_ID = stage.PARTY_ID
2563           AND( (l_search_merged ='Y' )  
2564           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2565           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2566           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2567           AND( (l_search_merged ='Y' )  
2568            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2569            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2570           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2571       ELSE
2572    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2573       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);
2574     END IF;
2575         IF p_person_api = 'Y' THEN
2576           OPEN x_cursor FOR 
2577             SELECT  PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX9, TX10, TX11, TX13, TX14, TX15, TX20, TX21, TX22
2578             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
2579             WHERE contains( concat_col, p_contains_str)>0
2580           AND( (l_search_merged ='Y' )  
2581           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2582           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2583             AND d.search_context_id = p_search_ctx_id
2584             AND d.party_id = stage.party_id
2585             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2586             UNION 
2587             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
2588             FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage
2589             WHERE contains( concat_col, p_contains_str)>0
2590           AND( (l_search_merged ='Y' )  
2591           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2592           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2593             AND d.search_context_id = p_search_ctx_id
2594             AND d.party_id = r.subject_id
2595             AND r.relationship_id = oc.party_relationship_id
2596             AND oc.org_contact_id = stage.org_contact_id
2597             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2598         ELSE
2599           OPEN x_cursor FOR 
2600             SELECT  PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX9, TX10, TX11, TX13, TX14, TX15, TX20, TX21, TX22
2601             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
2602             WHERE contains( concat_col, p_contains_str)>0
2603             AND( (l_search_merged ='Y' )  
2604              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2605              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2606             AND d.search_context_id = p_search_ctx_id
2607             AND d.party_id = stage.party_id
2608             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2609         END IF;
2610       END IF;
2611     ELSE
2612    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2613       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);
2614     END IF;
2615        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2616        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_PS'); 
2617        IF (l_check_dt > 0 ) THEN 
2618    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2619       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);
2620     END IF;
2621            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */'; 
2622        ELSIF (l_check > 0 ) THEN 
2623    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2624       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);
2625     END IF;
2626            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */'; 
2627        END IF; 
2628        IF l_search_merged = 'Y' THEN 
2629                l_status_sql := ' ' ;  
2630        ELSIF l_search_merged = 'I' THEN  
2631                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2632        ELSE 
2633                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2634        END IF; 
2635  		/*Performance fix for Bug:4589953*/ 
2636  		IF(p_person_api='Y') THEN 
2637        IF (l_check > 0 ) THEN 
2638        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
2639        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2640        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
2641        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2642        ELSE
2643 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2644        END IF; 
2645        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'||
2646                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2647                    ' WHERE contains( concat_col, :cont)>0'||
2648                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2649                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2650                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2651          ' AND (ORG_CONTACT_ID IS NULL ' ||
2652        	' AND ('||p_restrict_sql||'))' ||
2653        	' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2654          ' UNION ' ||
2655        			 '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'||
2656                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2657                    ' WHERE contains( concat_col, :cont)>0'||
2658                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2659                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2660                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2661          ' AND ORG_CONTACT_ID IN ' ||
2662          ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships ' ||
2663          ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
2664          ' where stage1.relationship_id = oc.party_relationship_id ' || 
2665          ' and ('||p_restrict_sql1|| ') )' ||
2666          ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2667        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2668                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2669        ELSE 
2670        l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX9, TX10, TX11, TX13, TX14, TX15, TX20, TX21, TX22'||
2671                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2672                    ' WHERE contains( concat_col, :cont)>0'||
2673                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2674                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2675                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2676                  ' AND EXISTS ('||
2677                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2678                  ' WHERE p.party_id = stage.party_id ' || 
2679                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2680                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2681                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2682        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2683                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2684                     ,p_dup_party_id, p_dup_party_id;
2685        END IF; 
2686 		ELSE 
2687        l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX9, TX10, TX11, TX13, TX14, TX15, TX20, TX21, TX22'||
2688                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2689                    ' WHERE contains( concat_col, :cont)>0'||
2690                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2691                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2692                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2693                  ' AND EXISTS ('||
2694                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2695                  ' WHERE p.party_id = stage.party_id ' || 
2696                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2697                    ' AND ('||p_restrict_sql||')' ||
2698                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2699        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2700                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2701                     ,p_dup_party_id, p_dup_party_id;
2702 		  END IF; 
2703     END IF;
2704  	    output_long_strings('----------------------------------------------------------');
2705        output_long_strings('Party Site Contains String = '||p_contains_str);
2706 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2707   exception
2708     when others then
2709       if (instrb(SQLERRM,'DRG-51030')>0) then 
2710         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2711         FND_MSG_PUB.ADD;
2712         RAISE FND_API.G_EXC_ERROR;
2713       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2714         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2715         FND_MSG_PUB.ADD;
2716         RAISE FND_API.G_EXC_ERROR;
2717       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2718         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2719         FND_MSG_PUB.ADD;
2720         RAISE FND_API.G_EXC_ERROR;
2721       else 
2722         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2723     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2724     	 FND_MSG_PUB.ADD;
2725         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2726       end if;
2727   END;
2728 
2729   PROCEDURE open_contact_cursor(
2730             p_dup_party_id NUMBER, 
2731             p_party_id NUMBER, 
2732             p_restrict_sql VARCHAR2, 
2733             p_contains_str  VARCHAR2, 
2734             p_search_ctx_id  NUMBER, 
2735             p_search_merged  VARCHAR2, 
2736             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
2737   l_sqlstr VARCHAR2(4000);
2738   l_hint VARCHAR2(100); 
2739   l_check NUMBER; 
2740   l_check_dt NUMBER; 
2741   l_search_merged VARCHAR2(1); 
2742   l_status_sql VARCHAR2(100); 
2743  
2744   BEGIN
2745    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2746       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);
2747       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);
2748     END IF;
2749      IF (p_search_merged is null) then 
2750         l_search_merged := 'N';  
2751      ELSE 
2752         l_search_merged := p_search_merged; 
2753      END IF; 
2754      IF p_party_id IS NOT NULL THEN
2755    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2756       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);
2757     END IF;
2758        OPEN x_cursor FOR 
2759           SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID
2760           FROM HZ_STAGED_CONTACTS stage
2761         WHERE contains( concat_col, p_contains_str)>0
2762         AND EXISTS (
2763           SELECT 1 FROM HZ_STAGED_PARTIES p
2764           WHERE p.PARTY_ID = stage.PARTY_ID
2765           AND( (l_search_merged ='Y' )  
2766           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2767           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2768           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2769           AND( (l_search_merged ='Y' )  
2770            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2771            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2772           AND stage.party_id = p_party_id;
2773     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2774    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2775       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);
2776     END IF;
2777       IF p_search_ctx_id IS NULL THEN
2778    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2779       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);
2780     END IF;
2781         OPEN x_cursor FOR 
2782           SELECT ORG_CONTACT_ID, PARTY_ID
2783           FROM HZ_STAGED_CONTACTS stage
2784         WHERE contains( concat_col, p_contains_str)>0
2785         AND EXISTS (
2786           SELECT 1 FROM HZ_STAGED_PARTIES p
2787           WHERE p.PARTY_ID = stage.PARTY_ID
2788           AND( (l_search_merged ='Y' )  
2789           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2790           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2791           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2792           AND( (l_search_merged ='Y' )  
2793            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2794            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2795           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2796       ELSE
2797    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2798       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);
2799     END IF;
2800           OPEN x_cursor FOR 
2801             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID
2802             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage
2803             WHERE contains( concat_col, p_contains_str)>0
2804             AND d.search_context_id = p_search_ctx_id
2805             AND d.party_id = stage.party_id
2806             AND( (l_search_merged ='Y' )  
2807              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2808              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2809             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2810       END IF;
2811     ELSE
2812    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2813       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);
2814     END IF;
2815        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2816        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CT'); 
2817        IF (l_check_dt > 0 ) THEN 
2818    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2819       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);
2820     END IF;
2821            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */'; 
2822        ELSIF (l_check > 0 ) THEN 
2823    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2824       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);
2825     END IF;
2826            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */'; 
2827        END IF; 
2828        IF l_search_merged = 'Y' THEN 
2829                l_status_sql := ' ' ;  
2830        ELSIF l_search_merged = 'I' THEN  
2831                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2832        ELSE 
2833                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2834        END IF; 
2835        l_sqlstr := 'SELECT   ' || l_hint || ' ORG_CONTACT_ID, PARTY_ID '||
2836                    ' FROM HZ_STAGED_CONTACTS stage'||
2837                    ' WHERE contains( concat_col, :cont)>0'||
2838                  ' AND EXISTS ('||
2839                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2840                  ' WHERE p.party_id = stage.party_id ' || 
2841                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36)) '|| l_status_sql ||' ) ' || 
2842                   ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2843                   ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2844                   ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2845                    ' AND ('||p_restrict_sql||')' ||
2846                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2847        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2848                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2849                     ,p_dup_party_id, p_dup_party_id;
2850     END IF;
2851  	    output_long_strings('----------------------------------------------------------');
2852        output_long_strings('Contacts Contains String = '||p_contains_str);
2853 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2854   exception
2855     when others then
2856       if (instrb(SQLERRM,'DRG-51030')>0) then 
2857         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2858         FND_MSG_PUB.ADD;
2859         RAISE FND_API.G_EXC_ERROR;
2860       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2861         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2862         FND_MSG_PUB.ADD;
2863         RAISE FND_API.G_EXC_ERROR;
2864       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2865         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2866         FND_MSG_PUB.ADD;
2867         RAISE FND_API.G_EXC_ERROR;
2868       else 
2869         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2870     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2871     	 FND_MSG_PUB.ADD;
2872         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2873       end if;
2874   END;
2875 
2876   PROCEDURE open_contact_pt_cursor(
2877             p_dup_party_id NUMBER, 
2878             p_party_id NUMBER, 
2879             p_restrict_sql VARCHAR2, 
2880             p_contains_str  VARCHAR2, 
2881             p_search_ctx_id  NUMBER, 
2882             p_search_merged  VARCHAR2, 
2883             p_search_rel_cpts  VARCHAR2, 
2884             p_person_api  VARCHAR2, 
2885             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,
2886             p_restrict_entity VARCHAR2 DEFAULT NULL) IS
2887   l_sqlstr VARCHAR2(4000);
2888   l_hint VARCHAR2(100); 
2889   l_check NUMBER; 
2890   l_check_dt NUMBER; 
2891   l_search_merged VARCHAR2(1); 
2892   l_status_sql VARCHAR2(100); 
2893   p_restrict_sql1 VARCHAR2(4000); 
2894  
2895   BEGIN
2896    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2897       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);
2898       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);
2899     END IF;
2900      IF (p_search_merged is null) then 
2901         l_search_merged := 'N';  
2902      ELSE 
2903         l_search_merged := p_search_merged; 
2904      END IF; 
2905   IF p_restrict_entity = 'CONTACTS'    
2906   THEN
2907           OPEN x_cursor FOR 
2908           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
2909           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
2910           WHERE contains( concat_col, p_contains_str)>0 
2911           AND d.search_context_id = p_search_ctx_id 
2912           AND( (l_search_merged ='Y' )  
2913            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2914            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2915           AND d.party_id = stage.org_contact_id ; 
2916    END IF; 
2917   IF p_restrict_entity = 'PARTY_SITES'    
2918   THEN
2919           OPEN x_cursor FOR 
2920           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
2921           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
2922           WHERE contains( concat_col, p_contains_str)>0 
2923           AND d.search_context_id = p_search_ctx_id 
2924           AND( (l_search_merged ='Y' )  
2925            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2926            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2927           AND d.party_id = stage.party_site_id ; 
2928    END IF; 
2929  IF p_restrict_entity IS NULL
2930  THEN
2931      IF p_party_id IS NOT NULL THEN
2932    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2933       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);
2934     END IF;
2935        IF p_search_rel_cpts = 'N' THEN
2936          OPEN x_cursor FOR 
2937           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
2938           FROM HZ_STAGED_CONTACT_POINTS stage
2939           WHERE contains( concat_col, p_contains_str)>0
2940           AND( (l_search_merged ='Y' )  
2941            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2942            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2943           AND stage.party_id = p_party_id; 
2944        ELSE
2945          OPEN x_cursor FOR 
2946           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
2947           FROM HZ_STAGED_CONTACT_POINTS stage
2948           WHERE contains( concat_col, p_contains_str)>0
2949           AND( (l_search_merged ='Y' )  
2950            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2951            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2952           AND stage.party_id = p_party_id 
2953           UNION
2954           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
2955           FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc
2956           WHERE contains( concat_col, p_contains_str)>0
2957           AND r.object_id = p_party_id 
2958           AND( (l_search_merged ='Y' )  
2959            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2960            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2961                     AND r.subject_id = stage.party_id 
2962                     AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
2963                     AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
2964                     AND r.relationship_id = oc.party_relationship_id
2965                     AND oc.org_contact_id = stage.org_contact_id; 
2966       END IF;
2967     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2968    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2969       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);
2970     END IF;
2971       IF p_search_ctx_id IS NULL THEN
2972    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2973       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);
2974     END IF;
2975         OPEN x_cursor FOR 
2976           SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX3, TX4
2977           FROM HZ_STAGED_CONTACT_POINTS stage
2978         WHERE contains( concat_col, p_contains_str)>0
2979         AND EXISTS (
2980           SELECT 1 FROM HZ_STAGED_PARTIES p
2981           WHERE p.PARTY_ID = stage.PARTY_ID
2982           AND( (l_search_merged ='Y' )  
2983           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2984           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2985           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2986           AND( (l_search_merged ='Y' )  
2987            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2988            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2989           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2990       ELSE
2991    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2992       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);
2993     END IF;
2994         IF p_person_api = 'Y' THEN
2995           OPEN x_cursor FOR 
2996             SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX3, TX4
2997             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2998             WHERE contains( concat_col, p_contains_str)>0
2999             AND d.search_context_id = p_search_ctx_id
3000             AND d.party_id = stage.party_id
3001             AND( (l_search_merged ='Y' )  
3002              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
3003              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
3004             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
3005             UNION 
3006             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
3007             FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage
3008             WHERE contains( concat_col, p_contains_str)>0
3009             AND d.search_context_id = p_search_ctx_id
3010             AND d.party_id = r.subject_id
3011             AND r.relationship_id = oc.party_relationship_id
3012             AND oc.org_contact_id = stage.org_contact_id
3013             AND( (l_search_merged ='Y' )  
3014              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
3015              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
3016             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
3017         ELSE
3018           OPEN x_cursor FOR 
3019             SELECT  CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX3, TX4
3020             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
3021             WHERE contains( concat_col, p_contains_str)>0
3022             AND d.search_context_id = p_search_ctx_id
3023             AND d.party_id = stage.party_id
3024             AND( (l_search_merged ='Y' )  
3025              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
3026              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
3027             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
3028         END IF;
3029       END IF;
3030     ELSE
3031    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3032       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);
3033     END IF;
3034        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
3035        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CPT'); 
3036        IF (l_check_dt > 0 ) THEN 
3037    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3038       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);
3039     END IF;
3040            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */'; 
3041        ELSIF (l_check > 0 ) THEN 
3042    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3043       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);
3044     END IF;
3045            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */'; 
3046        END IF; 
3047        IF l_search_merged = 'Y' THEN 
3048                l_status_sql := ' ' ;  
3049        ELSIF l_search_merged = 'I' THEN  
3050                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
3051        ELSE 
3052                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
3053        END IF; 
3054        IF p_person_api = 'Y' THEN
3055  		/*Performance fix for Bug:4589953*/ 
3056        IF (l_check > 0 ) THEN 
3057        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
3058        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
3059        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
3060        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
3061        ELSE
3062 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
3063        END IF; 
3064        	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'||
3065                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
3066                    ' WHERE contains( concat_col, :cont)>0  '||
3067                    ' AND (stage.org_contact_id is null '||
3068                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
3069                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
3070                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
3071                    ' AND ('||p_restrict_sql||'))' ||
3072                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
3073                    ' UNION ' ||
3074                    ' 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'||
3075                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
3076                    ' WHERE contains( concat_col, :cont)>0  '||
3077                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
3078                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
3079                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
3080                  ' AND (stage.org_contact_id in ' || 
3081                  ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r ' ||
3082                  ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' || 
3083                  ' where stage1.relationship_id = oc.party_relationship_id ' || 
3084                  ' and ('||p_restrict_sql1 || ') ) )' ||
3085                  ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
3086        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
3087                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
3088        ELSE 
3089        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX1, TX3, TX4'||
3090                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
3091                    ' WHERE contains( concat_col, :cont)>0'||
3092                  ' AND EXISTS ('||
3093                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
3094                  ' WHERE p.party_id = stage.party_id ' || 
3095                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
3096                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
3097                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
3098                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
3099                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
3100                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
3101        OPEN x_cursor FOR l_sqlstr USING p_contains_str
3102                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
3103                     ,p_dup_party_id, p_dup_party_id;
3104        END IF; 
3105        ELSE 
3106        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX1, TX3, TX4'||
3107                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
3108                    ' WHERE contains( concat_col, :cont)>0'||
3109                  ' AND EXISTS ('||
3110                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
3111                  ' WHERE p.party_id = stage.party_id ' || 
3112                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
3113                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
3114                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
3115                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
3116                    ' AND ('||p_restrict_sql||')' ||
3117                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
3118        OPEN x_cursor FOR l_sqlstr USING p_contains_str
3119                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
3120                     ,p_dup_party_id, p_dup_party_id;
3121        END IF; 
3122     END IF;
3123   END IF; 
3124  	    output_long_strings('----------------------------------------------------------');
3125        output_long_strings('Contact Points Contains String = '||p_contains_str);
3126 		output_long_strings('Restrict Sql = '||p_restrict_sql);
3127   exception
3128     when others then
3129       if (instrb(SQLERRM,'DRG-51030')>0) then 
3130         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
3131         FND_MSG_PUB.ADD;
3132         RAISE FND_API.G_EXC_ERROR;
3133       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
3134         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
3135         FND_MSG_PUB.ADD;
3136         RAISE FND_API.G_EXC_ERROR;
3137       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
3138         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
3139         FND_MSG_PUB.ADD;
3140         RAISE FND_API.G_EXC_ERROR;
3141       else 
3142         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
3143     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
3144     	 FND_MSG_PUB.ADD;
3145         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3146       end if;
3147   END;
3148 
3149 
3150   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
3151     l_sqlstr VARCHAR2(4000);
3152     l_search_merged VARCHAR2(1);
3153   BEGIN
3154     IF (p_search_merged is null) then 
3155        l_search_merged := 'N';  
3156     ELSE 
3157        l_search_merged := p_search_merged; 
3158     END IF; 
3159     IF p_restrict_sql IS NULL THEN
3160       INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
3161       SELECT p_search_ctx_id, PARTY_ID, decode(TX8,g_party_stage_rec.TX8||' ',100,90)
3162       FROM hz_staged_parties 
3163       WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
3164       AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  TX36))
3165       AND( (l_search_merged ='Y' ) 
3166            OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))  
3167            OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))  
3168       AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)
3169       AND rownum <= p_thresh;
3170     ELSE
3171       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 ';
3172       l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
3173       l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' =  TX36) ';
3174       IF l_search_merged = 'N' THEN
3175         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
3176       ELSIF l_search_merged = 'Y' THEN
3177         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
3178       END IF;
3179       l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
3180      l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
3181      l_sqlstr := l_sqlstr || ' AND ROWNUM <= :thresh ';
3182      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;
3183     END IF;
3184     x_num_matches := SQL%ROWCOUNT;
3185   END;
3186 
3187   FUNCTION get_new_score_rec (
3188     	 p_init_total_score NUMBER,
3189     	 p_init_party_score NUMBER,
3190     	 p_init_party_site_score NUMBER,
3191     	 p_init_contact_score NUMBER,
3192     	 p_init_contact_point_score NUMBER, 
3193     	 p_party_id NUMBER, 
3194     	 p_party_site_id NUMBER, 
3195     	 p_org_contact_id NUMBER, 
3196     	 p_contact_point_id NUMBER) 
3197      RETURN HZ_PARTY_SEARCH.score_rec IS
3198     l_score_rec HZ_PARTY_SEARCH.score_rec;
3199   BEGIN
3200    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3201       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);
3202       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);
3203     END IF;
3204     l_score_rec.TOTAL_SCORE := p_init_total_score;
3205     l_score_rec.PARTY_SCORE := p_init_party_score;
3206     l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;
3207     l_score_rec.CONTACT_SCORE := p_init_contact_score;
3208     l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;
3209     l_score_rec.PARTY_ID := p_party_id;
3210     l_score_rec.PARTY_SITE_ID := p_party_site_id;
3211     l_score_rec.ORG_CONTACT_ID := p_org_contact_id;
3212     l_score_rec.CONTACT_POINT_ID := p_contact_point_id;
3213     RETURN l_score_rec;
3214   END;
3215 
3216    /**********************************************************
3217    This procedure finds the set of parties that match the search
3218    criteria and returns a scored set of parties
3219 
3220    The steps in executing the search are as follows
3221     1. Initialization and error checks
3222     2. Setup of intermedia query strings for Acquisition query
3223     3. Execution of Acquisition query
3224     4. Execution of Secondary queries to score results
3225     5. Setup of data temporary table to return search results
3226    **********************************************************/
3227 
3228 PROCEDURE find_parties (
3229       p_rule_id               IN      NUMBER,
3230       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
3231       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
3232       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
3233       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
3234       p_restrict_sql          IN      VARCHAR2,
3235       p_match_type            IN      VARCHAR2,
3236       p_search_merged         IN      VARCHAR2,
3237       p_dup_party_id          IN      NUMBER,
3238       p_dup_set_id            IN      NUMBER,
3239       p_dup_batch_id          IN      NUMBER,
3240       p_ins_details           IN      VARCHAR2,
3241       x_search_ctx_id         OUT     NUMBER,
3242       x_num_matches           OUT     NUMBER
3243 ) IS
3244 
3245   -- Strings to hold the generated Intermedia query strings
3246   l_party_contains_str VARCHAR2(32000); 
3247   l_party_site_contains_str VARCHAR2(32000);
3248   l_contact_contains_str VARCHAR2(32000);
3249   l_contact_pt_contains_str VARCHAR2(32000);
3250   l_denorm_str VARCHAR2(32000);
3251   l_ps_denorm_str VARCHAR2(32000);
3252   l_ct_denorm_str VARCHAR2(32000);
3253   l_cpt_denorm_str VARCHAR2(32000);
3254 
3255   -- Other local variables
3256   l_match_str VARCHAR2(30); -- Match type (AND or OR)
3257   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
3258   -- For Score calculation
3259   l_max_score NUMBER;
3260   l_match_idx NUMBER;
3261   l_entered_max_score NUMBER;
3262   FIRST BOOLEAN;
3263   l_search_ctx_id NUMBER; -- Generated Search Context ID
3264 
3265   l_TX39 VARCHAR2(2000);
3266   l_TX13 VARCHAR2(2000);
3267   l_TX20 VARCHAR2(2000);
3268   l_TX42 VARCHAR2(2000);
3269   l_TX32 VARCHAR2(2000);
3270   l_TX46 VARCHAR2(2000);
3271   l_TX9 VARCHAR2(2000);
3272   l_TX22 VARCHAR2(2000);
3273   l_TX43 VARCHAR2(2000);
3274   l_TX44 VARCHAR2(2000);
3275   l_TX35 VARCHAR2(2000);
3276   l_TX1 VARCHAR2(2000);
3277   l_TX158 VARCHAR2(2000);
3278   l_TX47 VARCHAR2(2000);
3279   l_TX15 VARCHAR2(2000);
3280   l_TX21 VARCHAR2(2000);
3281   l_TX3 VARCHAR2(2000);
3282   l_TX10 VARCHAR2(2000);
3283   l_TX11 VARCHAR2(2000);
3284   l_TX4 VARCHAR2(2000);
3285   l_TX157 VARCHAR2(2000);
3286   l_TX40 VARCHAR2(2000);
3287   l_TX34 VARCHAR2(2000);
3288   l_TX48 VARCHAR2(2000);
3289   l_TX156 VARCHAR2(2000);
3290   l_TX14 VARCHAR2(2000);
3291   H_SCORES HZ_PARTY_SEARCH.score_list;
3292   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
3293   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
3294 
3295   l_score NUMBER;
3296   l_idx NUMBER;
3297   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
3298   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
3299   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
3300   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
3301   l_party_id NUMBER;
3302   l_ps_party_id NUMBER;
3303   l_ct_party_id NUMBER;
3304   l_cpt_party_id NUMBER;
3305   l_cpt_ps_id NUMBER;
3306   l_cpt_contact_id NUMBER;
3307   l_cpt_type VARCHAR2(100);
3308   l_party_site_id NUMBER;
3309   l_org_contact_id NUMBER;
3310   l_contact_pt_id NUMBER;
3311   l_ps_contact_id NUMBER;
3312   l_party_max_score NUMBER;
3313   l_ps_max_score NUMBER;
3314   l_contact_max_score NUMBER;
3315   l_cpt_max_score NUMBER;
3316   l_denorm_max_score NUMBER;
3317   l_non_denorm_max_score NUMBER;
3318 
3319   defpt NUMBER :=0;
3320   defps NUMBER :=0;
3321   defct NUMBER :=0;
3322   defcpt NUMBER :=0;
3323   l_index NUMBER;
3324   l_max_thresh NUMBER;
3325   l_tmp NUMBER;
3326   l_merge_flag VARCHAR2(1);
3327   l_num_eval NUMBER:=0;
3328 
3329   --Fix for bug 4417124 
3330   l_use_contact_addr_info BOOLEAN := TRUE;
3331   l_use_contact_cpt_info BOOLEAN  := TRUE;
3332   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
3333   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
3334 
3335   L_RETURN_IMM_EXC EXCEPTION;
3336 
3337   
3338   /********************* Find Parties private procedures *******/
3339   PROCEDURE push_eval IS
3340   BEGIN
3341    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3342       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);
3343       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);
3344     END IF;
3345    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3346       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);
3347     END IF;
3348     H_PARTY_ID.DELETE;
3349     H_PARTY_ID_LIST.DELETE;
3350     H_SCORES.DELETE;        
3351     g_mappings.DELETE;
3352     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
3353     call_order(5) := call_order(1);
3354     call_type(5) := 'AND';
3355     call_max_score(5) := call_max_score(1);
3356     call_type(2) := 'OR';
3357   END;
3358 
3359   /**  Private procedure to acquire and score at party level  ***/
3360   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
3361     l_party_id_idx NUMBER:=1;
3362     l_ctx_id NUMBER;
3363     l_precalc_score BOOLEAN := FALSE;
3364     l_TX35_new varchar2(4000);
3365   BEGIN
3366    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3367       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);
3368       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);
3369     END IF;
3370     SAVEPOINT eval_start;
3371     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3372       l_ctx_id := l_search_ctx_id;
3373    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3374       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);
3375     END IF;
3376       FORALL I in 1..H_PARTY_ID.COUNT 
3377          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3378              l_search_ctx_id,H_PARTY_ID(I));
3379       H_PARTY_ID.DELETE;
3380       H_PARTY_ID_LIST.DELETE;
3381     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3382    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3383       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);
3384     END IF;
3385       l_ctx_id := l_search_ctx_id;
3386       FORALL I in 1..H_PARTY_ID.COUNT 
3387          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3388              l_search_ctx_id,H_PARTY_ID(I));
3389       l_party_id_idx := H_PARTY_ID.COUNT+1;
3390     ELSE
3391       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3392          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
3393    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3394       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);
3395     END IF;
3396         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
3397    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3398       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);
3399     END IF;
3400           IF (l_party_site_contains_str IS NULL AND
3401              l_contact_contains_str IS NULL AND
3402              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN
3403             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);
3404             RAISE L_RETURN_IMM_EXC;
3405           ELSE
3406             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);
3407           END IF;
3408         ELSE
3409           IF p_index>1 THEN
3410    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3411       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);
3412     END IF;
3413             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3414             FND_MSG_PUB.ADD;
3415             RAISE FND_API.G_EXC_ERROR;
3416           ELSE
3417             push_eval;
3418             RETURN;
3419           END IF;
3420         END IF;
3421       END IF;
3422       l_ctx_id := NULL;
3423       l_party_id_idx := H_PARTY_ID.COUNT+1;
3424     END IF;
3425    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3426       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);
3427     END IF;
3428     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
3429       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);
3430     END IF;
3431     LOOP 
3432       FETCH l_party_cur INTO
3433          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;
3434       EXIT WHEN l_party_cur%NOTFOUND;
3435       l_index := map_id(l_party_id);
3436   l_TX35_new:=RTRIM(LTRIM(l_TX35));
3437   l_TX35_new:=(CASE l_TX35_new WHEN 'SYNC' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);
3438       l_score := GET_PARTY_SCORE(l_TX32,l_TX34,l_TX35_new,l_TX39,l_TX158,l_TX40,l_TX43,l_TX42,l_TX44,l_TX46,l_TX47,l_TX48,l_TX156,l_TX157);
3439       IF NOT H_SCORES.EXISTS(l_index) THEN
3440         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
3441       ELSE
3442         H_SCORES(l_index).TOTAL_SCORE := 
3443                 H_SCORES(l_index).TOTAL_SCORE+l_score;
3444         H_SCORES(l_index).PARTY_SCORE := l_score;
3445       END IF;
3446       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3447         H_PARTY_ID_LIST(l_index) := 1;
3448         H_PARTY_ID(l_party_id_idx) := l_party_id;
3449         l_party_id_idx:= l_party_id_idx+1;
3450       END IF;
3451       IF (l_party_id_idx-1)>l_max_thresh THEN
3452         IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
3453           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
3454           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
3455           AND l_contact_pt_contains_str IS NULL THEN
3456             EXIT;
3457         END IF;
3458 	      CLOSE l_party_cur;
3459         IF p_index>1 THEN
3460    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3461       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);
3462     END IF;
3463           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3464           FND_MSG_PUB.ADD;
3465           RAISE FND_API.G_EXC_ERROR;
3466         ELSE
3467           push_eval;
3468           RETURN;
3469         END IF;
3470       END IF;
3471     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3472       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);
3473       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);
3474     END IF;
3475     END LOOP;
3476    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3477       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);
3478     END IF;
3479     CLOSE l_party_cur;
3480     ROLLBACK to eval_start;
3481   END;
3482 
3483   /**  Private procedure to acquire and score at party site level  ***/
3484   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
3485     l_party_id_idx NUMBER:=1;
3486     l_ctx_id NUMBER;
3487     h_ps_id HZ_PARTY_SEARCH.IDList;
3488     h_ps_party_id HZ_PARTY_SEARCH.IDList;
3489     h_ps_score HZ_PARTY_SEARCH.IDList;
3490     detcnt NUMBER := 1;
3491   BEGIN
3492    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3493       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);
3494       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);
3495     END IF;
3496   IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,'D_PS')>0
3497       AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and
3498       l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> 'Y' THEN
3499     l_party_id := H_SCORES.FIRST;
3500     WHILE l_party_id IS NOT NULL LOOP
3501       H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;
3502       l_party_id:=H_SCORES.NEXT(l_party_id);
3503     END LOOP;
3504     RETURN;
3505   END IF;
3506     SAVEPOINT eval_start;
3507     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3508    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3509       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);
3510     END IF;
3511       l_ctx_id := l_search_ctx_id;
3512       FORALL I in 1..H_PARTY_ID.COUNT 
3513          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3514              l_search_ctx_id,H_PARTY_ID(I));
3515       H_PARTY_ID.DELETE;
3516       H_PARTY_ID_LIST.DELETE;
3517     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3518    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3519       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);
3520     END IF;
3521       l_ctx_id := l_search_ctx_id;
3522       FORALL I in 1..H_PARTY_ID.COUNT 
3523          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3524              l_search_ctx_id,H_PARTY_ID(I));
3525       l_party_id_idx := H_PARTY_ID.COUNT+1;
3526     ELSE
3527       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3528          and check_estimate_hits('PARTY_SITES',p_party_site_contains_str)>l_max_thresh THEN
3529    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3530       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);
3531     END IF;
3532         IF p_index>1 THEN
3533    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3534       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);
3535     END IF;
3536           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3537           FND_MSG_PUB.ADD;
3538           RAISE FND_API.G_EXC_ERROR;
3539         ELSE
3540           push_eval;
3541           RETURN;
3542         END IF;
3543       END IF;
3544       l_party_id_idx := H_PARTY_ID.COUNT+1;
3545       l_ctx_id := NULL;
3546     END IF;
3547    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3548       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);
3549     END IF;
3550     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);
3551     LOOP 
3552       FETCH l_party_site_cur INTO
3553          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;
3554       EXIT WHEN l_party_site_cur%NOTFOUND;
3555       --Fix for bug 4417124 
3556       IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN
3557         l_index := map_id(l_ps_party_id);
3558         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);
3559         IF NOT H_SCORES.EXISTS(l_index) THEN
3560           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);
3561         ELSE
3562           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3563             H_SCORES(l_index).TOTAL_SCORE := 
3564                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3565             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3566           END IF;
3567         END IF;
3568         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3569           H_PARTY_ID_LIST(l_index) := 1;
3570           H_PARTY_ID(l_party_id_idx) := l_ps_party_id;
3571           l_party_id_idx:= l_party_id_idx+1;
3572         END IF;
3573         IF p_ins_details = 'Y' THEN
3574           h_ps_id(detcnt) := l_party_site_id;
3575           h_ps_party_id(detcnt) := l_ps_party_id;
3576           IF (p_emax_score > 0) THEN 
3577               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
3578           ELSE 
3579               h_ps_score(detcnt) := 0; 
3580           END IF; 
3581           detcnt := detcnt +1;
3582         END IF;
3583     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3584       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);
3585       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);
3586       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);
3587     END IF;
3588       END IF;
3589     END LOOP;
3590    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3591       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);
3592     END IF;
3593     CLOSE l_party_site_cur;
3594     ROLLBACK to eval_start;
3595     IF p_ins_details = 'Y' THEN
3596    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3597       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);
3598     END IF;
3599       FORALL I in 1..h_ps_id.COUNT 
3600         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
3601           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
3602     END IF;
3603   END;
3604 
3605   /**  Private procedure to acquire and score at contact point level  ***/
3606   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
3607     l_party_id_idx NUMBER:=1;
3608     l_ctx_id NUMBER;
3609     h_ct_id HZ_PARTY_SEARCH.IDList;
3610     h_ct_party_id HZ_PARTY_SEARCH.IDList;
3611     h_ct_score HZ_PARTY_SEARCH.IDList;
3612     detcnt NUMBER := 1;
3613   BEGIN
3614    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3615       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);
3616       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);
3617     END IF;
3618     SAVEPOINT eval_start;
3619     IF l_match_str = ' AND ' AND p_call_type='AND' THEN
3620    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3621       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);
3622     END IF;
3623       l_ctx_id := l_search_ctx_id;
3624       FORALL I in 1..H_PARTY_ID.COUNT 
3625          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3626              l_search_ctx_id,H_PARTY_ID(I));
3627       H_PARTY_ID.DELETE;
3628       H_PARTY_ID_LIST.DELETE;
3629     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3630    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3631       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);
3632     END IF;
3633       l_ctx_id := l_search_ctx_id;
3634       FORALL I in 1..H_PARTY_ID.COUNT 
3635          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3636              l_search_ctx_id,H_PARTY_ID(I));
3637       l_party_id_idx := H_PARTY_ID.COUNT+1;
3638     ELSE
3639       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3640          and check_estimate_hits('CONTACTS',p_contact_contains_str)>l_max_thresh THEN
3641    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3642       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);
3643     END IF;
3644         IF p_index>1 THEN
3645    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3646       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);
3647     END IF;
3648           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3649           FND_MSG_PUB.ADD;
3650           RAISE FND_API.G_EXC_ERROR;
3651         ELSE
3652           push_eval;
3653           RETURN;
3654         END IF;
3655       END IF;
3656       l_ctx_id := NULL;
3657       l_party_id_idx := H_PARTY_ID.COUNT+1;
3658     END IF;
3659    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3660       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);
3661     END IF;
3662     open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id,  p_search_merged, l_contact_cur);
3663     LOOP 
3664       FETCH l_contact_cur INTO
3665          l_org_contact_id, l_ct_party_id ;
3666       EXIT WHEN l_contact_cur%NOTFOUND;
3667       l_index := map_id(l_ct_party_id);
3668       l_score := GET_CONTACTS_SCORE(l_match_idx);
3669       IF NOT H_SCORES.EXISTS(l_index) THEN
3670         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);
3671       ELSE
3672         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
3673           H_SCORES(l_index).TOTAL_SCORE := 
3674                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
3675           H_SCORES(l_index).CONTACT_SCORE := l_score;
3676         END IF;
3677       END IF;
3678       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3679         H_PARTY_ID_LIST(l_index) := 1;
3680         H_PARTY_ID(l_party_id_idx) := l_ct_party_id;
3681         l_party_id_idx:= l_party_id_idx+1;
3682       END IF;
3683       IF p_ins_details = 'Y' THEN
3684         h_ct_id(detcnt) := l_org_contact_id;
3685         h_ct_party_id(detcnt) := l_ct_party_id;
3686         IF (p_emax_score > 0) THEN 
3687             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
3688         ELSE 
3689             h_ct_score(detcnt) := 0; 
3690         END IF; 
3691         detcnt := detcnt +1;
3692       END IF;
3693     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3694       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);
3695       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);
3696       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);
3697     END IF;
3698     END LOOP;
3699    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3700       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);
3701     END IF;
3702     CLOSE l_contact_cur;
3703     ROLLBACK to eval_start;
3704     IF p_ins_details = 'Y' THEN
3705    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3706       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);
3707     END IF;
3708       FORALL I in 1..h_ct_id.COUNT 
3709         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
3710           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
3711     END IF;
3712   END;
3713 
3714   /**  Private procedure to acquire and score at contact point level  ***/
3715   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
3716     l_party_id_idx NUMBER:=1;
3717     l_ctx_id NUMBER;
3718     h_cpt_id HZ_PARTY_SEARCH.IDList;
3719     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
3720     h_cpt_score HZ_PARTY_SEARCH.IDList;
3721     detcnt NUMBER := 1;
3722     l_cpt_flag VARCHAR2(1) := 'N';
3723     is_a_match VARCHAR2(1) := 'Y';
3724   BEGIN
3725    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3726       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);
3727       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);
3728     END IF;
3729     SAVEPOINT eval_start;
3730     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3731    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3732       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);
3733     END IF;
3734       l_ctx_id := l_search_ctx_id;
3735       FORALL I in 1..H_PARTY_ID.COUNT 
3736          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3737              l_search_ctx_id,H_PARTY_ID(I));
3738       H_PARTY_ID.DELETE;
3739       H_PARTY_ID_LIST.DELETE;
3740     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3741    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3742       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);
3743     END IF;
3744       l_ctx_id := l_search_ctx_id;
3745       FORALL I in 1..H_PARTY_ID.COUNT 
3746          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3747              l_search_ctx_id,H_PARTY_ID(I));
3748       l_party_id_idx := H_PARTY_ID.COUNT+1;
3749     ELSE
3750       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3751          and check_estimate_hits('CONTACT_POINTS',p_contact_pt_contains_str)>l_max_thresh THEN
3752    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3753       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);
3754     END IF;
3755         IF p_index>1 THEN
3756    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3757       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);
3758     END IF;
3759           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3760           FND_MSG_PUB.ADD;
3761           RAISE FND_API.G_EXC_ERROR;
3762         ELSE
3763           push_eval;
3764           RETURN;
3765         END IF;
3766       END IF;
3767       l_ctx_id := NULL;
3768       l_party_id_idx := H_PARTY_ID.COUNT+1;
3769     END IF;
3770    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3771       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);
3772     END IF;
3773     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);
3774     LOOP 
3775       FETCH l_contact_pt_cur INTO
3776          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;
3777       EXIT WHEN l_contact_pt_cur%NOTFOUND;
3778    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3779       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);
3780     END IF;
3781    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3782       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);
3783     END IF;
3784    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3785       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);
3786     END IF;
3787       --Fix for bug 4417124 
3788       IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN
3789         l_index := map_id(l_cpt_party_id);
3790         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX3,l_TX4);
3791         IF NOT H_SCORES.EXISTS(l_index) THEN
3792           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);
3793           H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3794    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3795       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);
3796     END IF;
3797    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3798       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);
3799     END IF;
3800         ELSE
3801           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
3802             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
3803               H_SCORES(l_index).TOTAL_SCORE :=
3804               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;
3805               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;
3806               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3807    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3808       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);
3809     END IF;
3810    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3811       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);
3812     END IF;
3813    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3814       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);
3815     END IF;
3816    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3817       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);
3818     END IF;
3819             END IF;
3820           ELSE
3821    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3825             		H_SCORES(l_index).TOTAL_SCORE+l_score;
3822       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);
3823     END IF;
3824             H_SCORES(l_index).TOTAL_SCORE :=
3826             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3827             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3828    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3829       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);
3830     END IF;
3831    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3832       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);
3833     END IF;
3834    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3835       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);
3836     END IF;
3837           END IF;
3838         END IF;
3839    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3840       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);
3841     END IF;
3842    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3843       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);
3844     END IF;
3845         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3846           -- If rule is match all 
3847           IF l_match_str = ' AND ' THEN
3848    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3849       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);
3850     END IF;
3851             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3852               is_a_match := 'Y';
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             ELSE
3857               is_a_match := 'N';
3858    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3859       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);
3860     END IF;
3861             END IF;
3862           -- Else it is construed to be a match anyway
3863           ELSE
3864             is_a_match := 'Y';
3865    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3866       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);
3867     END IF;
3868           END IF;
3869         IF (is_a_match='Y') then
3870           H_PARTY_ID_LIST(l_index) := 1;
3871           H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;
3872           l_party_id_idx:= l_party_id_idx+1;
3873       end if;
3874         END IF;
3875         IF p_ins_details = 'Y' THEN
3876           IF l_match_str = ' AND ' THEN
3877    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3878       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);
3879     END IF;
3880             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3881               is_a_match := 'Y';
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             ELSE
3886               is_a_match := 'N';
3887    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3888       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);
3889     END IF;
3890             END IF;
3891           ELSE
3892             is_a_match := 'Y';
3893    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3894       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);
3895     END IF;
3896           END IF;
3897           IF (is_a_match='Y') THEN
3898           FOR I IN 1..h_cpt_id.COUNT LOOP
3899           IF h_cpt_id(I)=l_contact_pt_id THEN
3900           	 l_cpt_flag := 'Y';
3901           END IF;
3902           END LOOP;
3903           IF l_cpt_flag = 'Y' THEN
3904           	 NULL;
3905           ELSE
3906          	 h_cpt_id(detcnt) := l_contact_pt_id;
3907           	 h_cpt_party_id(detcnt) := l_cpt_party_id;
3908           	 IF (p_emax_score > 0) THEN 
3909               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
3910             ELSE 
3911               h_cpt_score(detcnt) := 0; 
3912           	 END IF; 
3913             detcnt := detcnt +1;
3914           END IF;
3915       end if;
3916         END IF;
3917     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3918       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);
3919       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);
3920       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);
3921     END IF;
3922       END IF;
3923     END LOOP;
3924    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3925       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);
3926     END IF;
3927     CLOSE l_contact_pt_cur;
3928     ROLLBACK to eval_start;
3929     IF p_ins_details = 'Y' THEN
3930    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3931       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);
3932     END IF;
3933       FORALL I in 1..h_cpt_id.COUNT 
3934         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
3935           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
3936     END IF;
3937   END eval_cpt_level;
3938 
3939   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
3940   PROCEDURE do_eval (p_index NUMBER) IS
3941     l_ctx_id NUMBER;
3942     l_threshold NUMBER;
3943     other_acq_criteria_exists BOOLEAN; 
3944     acq_cnt NUMBER; 
3945   BEGIN
3946    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3947       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);
3948       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);
3949     END IF;
3950     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
3951      l_threshold :=  round(( l_entered_max_score / 805) * 72); 
3952     other_acq_criteria_exists := TRUE ;
3953     --check if acquisition criteria exists for any other entity
3954     IF l_party_contains_str IS NOT NULL THEN 
3955     	acq_cnt := 1; 
3956     END IF; 
3957     IF l_party_site_contains_str IS NOT NULL THEN 
3958     	acq_cnt := acq_cnt+1; 
3959     END IF; 
3960     IF l_contact_contains_str IS NOT NULL THEN 
3961     	acq_cnt := acq_cnt+1; 
3962     END IF;
3963     IF l_contact_pt_contains_str IS NOT NULL THEN 
3964     	acq_cnt := acq_cnt+1; 
3965     END IF;  
3966     IF acq_cnt>1 THEN 
3967     	other_acq_criteria_exists := TRUE; 
3968     ELSE
3969     	other_acq_criteria_exists := FALSE; 
3970     END IF;  
3971       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);
3972       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);
3973       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);
3974     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
3975     	IF ( call_max_score(p_index) < l_threshold) THEN 
3976    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3977       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);
3978     END IF;
3979 	     	RETURN;	
3980     	ELSE 
3981    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3982       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);
3983     END IF;
3984 	     	FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED'); 
3985 	     	FND_MSG_PUB.ADD; 
3986 	     	RAISE FND_API.G_EXC_ERROR; 
3987     	END IF; 
3988     ELSE
3989    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3990       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);
3991     END IF;
3992       FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3993       FND_MSG_PUB.ADD;
3994       RAISE FND_API.G_EXC_ERROR;
3995      END IF; 
3996     END IF;
3997     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
3998       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
3999     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
4000       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4001     ELSIF call_order(p_index) = 'CONTACT' AND l_contact_contains_str IS NOT NULL THEN
4002       eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4003     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
4004       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4005     END IF;
4006   END;
4007   /************ End of find_parties private procedures **********/ 
4008 
4009   BEGIN
4010 
4011    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4012       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);
4013     END IF;
4014    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4015       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);
4016     END IF;
4017     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4018       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);
4019       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);
4020       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);
4021       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);
4022       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);
4023       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);
4024     END IF;
4025     -- ************************************
4026     -- STEP 1. Initialization and error checks
4027 
4028     l_match_str := ' AND ';
4029     IF p_match_type = 'AND' THEN
4030       l_match_str := ' AND ';
4031     ELSIF p_match_type = 'OR' THEN
4032       l_match_str := ' OR ';
4033     END IF;
4034     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);
4035     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4036 
4037 
4038     --Fix for bug 4417124 
4039 
4040     SELECT use_contact_addr_flag, use_contact_cpt_flag 
4041     INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
4042     FROM hz_match_rules_b 
4043     WHERE match_rule_id = 34; 
4044 
4045     IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
4046       l_use_contact_addr_info := FALSE; 
4047     END IF; 
4048 
4049     IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
4050       l_use_contact_cpt_info := FALSE; 
4051     END IF; 
4052 
4053    --End fix for bug 4417124
4054 
4055     IF p_dup_batch_id IS NOT NULL THEN
4056       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH_BATCH'),10000);
4057     ELSE
4058       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
4059     END IF;
4060     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
4061       g_score_until_thresh := true;
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 true',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4064     END IF;
4065     ELSE
4066       g_score_until_thresh := false;
4067    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4068       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);
4069     END IF;
4070     END IF;
4071    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4072       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);
4073     END IF;
4074     -- ************************************************************
4075     -- STEP 2. Setup of intermedia query strings for Acquisition query
4076     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
4077     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
4078     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
4079    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4080       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);
4081     END IF;
4082     l_denorm_max_score:=0;
4083     l_non_denorm_max_score:=0;
4084     IF l_ps_denorm_str IS NOT NULL THEN
4085       l_denorm_max_score := l_denorm_max_score+l_ps_max_score;
4086       l_denorm_str := l_ps_denorm_str;
4087     ELSE
4088       l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;
4089     END IF;
4090     IF l_ct_denorm_str IS NOT NULL THEN
4091       l_denorm_max_score := l_denorm_max_score+l_contact_max_score;
4092       IF l_denorm_str IS NOT NULL THEN
4093         l_denorm_str := l_denorm_str || ' OR ' ||l_ct_denorm_str;
4094       ELSE
4095         l_denorm_str := l_ct_denorm_str;
4096       END IF;
4097     ELSE
4098       l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;
4099     END IF;
4100     IF l_cpt_denorm_str IS NOT NULL THEN
4101       l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;
4102       IF l_denorm_str IS NOT NULL THEN
4103         l_denorm_str := l_denorm_str || ' OR ' ||l_cpt_denorm_str;
4104       ELSE
4105         l_denorm_str := l_cpt_denorm_str;
4106       END IF;
4107     ELSE
4108       l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;
4109     END IF;
4110     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));
4111     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
4112 
4113     -- Setup Search Context ID
4114     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4115     x_search_ctx_id := l_search_ctx_id;
4116 
4117    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4118       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);
4119     END IF;
4120     IF l_party_contains_str IS NULL THEN
4121       defpt := 1;
4122     END IF;
4123     IF l_party_site_contains_str IS NULL THEN
4124       defps := 1;
4125     END IF;
4126     IF l_contact_contains_str IS NULL THEN
4127       defct := 1;
4128     END IF;
4129     IF l_contact_pt_contains_str IS NULL THEN
4130       defcpt := 1;
4131     END IF;
4132 
4133     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4134    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4135       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);
4136     END IF;
4137       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);
4138       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);
4139       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);
4140       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);
4141       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);
4142       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);
4143     END IF;
4144     FOR I in 1..5 LOOP
4145       do_eval(I);
4146     END LOOP;
4147     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4148       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);
4149     END IF;
4150     x_num_matches := 0;
4151     l_num_eval := 0;
4152     IF l_match_str = ' OR ' THEN
4153       l_party_id := H_SCORES.FIRST;
4154     ELSE
4155       l_party_id := H_PARTY_ID_LIST.FIRST;
4156     END IF;
4157     WHILE l_party_id IS NOT NULL LOOP
4158       l_num_eval:= l_num_eval+1;
4159     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4160    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4161       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);
4162     END IF;
4163       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);
4164       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);
4165     END IF;
4166    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4167       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);
4168     END IF;
4169       IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(72/805) THEN
4170             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
4171             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));
4172             x_num_matches := x_num_matches+1;
4173    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4174       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);
4175     END IF;
4176       END IF;
4177       IF l_match_str = ' OR ' THEN
4178         l_party_id:=H_SCORES.NEXT(l_party_id);
4179       ELSE
4180         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
4181       END IF;
4182     END LOOP;
4183     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
4184    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4185       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);
4186     END IF;
4187    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4188       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);
4189     END IF;
4190 EXCEPTION
4191   WHEN L_RETURN_IMM_EXC THEN
4192     RETURN;
4193   WHEN FND_API.G_EXC_ERROR THEN
4194     RAISE FND_API.G_EXC_ERROR;
4195   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4196     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4197   WHEN OTHERS THEN
4198     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4199     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.find_parties');
4200     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4201     FND_MSG_PUB.ADD;
4202     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4203 END find_parties;
4204 
4205 PROCEDURE find_persons (
4206       p_rule_id               IN      NUMBER,
4207       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
4208       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
4209       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
4210       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
4211       p_restrict_sql          IN      VARCHAR2,
4212       p_match_type            IN      VARCHAR2,
4213       p_search_merged         IN      VARCHAR2,
4214       p_dup_party_id          IN      NUMBER,
4215       p_dup_set_id            IN      NUMBER,
4216       p_dup_batch_id          IN      NUMBER,
4217       p_ins_details           IN      VARCHAR2,
4218       x_search_ctx_id         OUT     NUMBER,
4219       x_num_matches           OUT     NUMBER
4220 ) IS
4221 
4222   -- Strings to hold the generated Intermedia query strings
4223   l_party_contains_str VARCHAR2(32000); 
4224   l_party_site_contains_str VARCHAR2(32000);
4225   l_contact_contains_str VARCHAR2(32000);
4226   l_contact_pt_contains_str VARCHAR2(32000);
4227   l_denorm_str VARCHAR2(32000);
4228   l_ps_denorm_str VARCHAR2(32000);
4229   l_ct_denorm_str VARCHAR2(32000);
4230   l_cpt_denorm_str VARCHAR2(32000);
4231 
4232   -- Other local variables
4233   l_match_str VARCHAR2(30); -- Match type (AND or OR)
4234   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
4235   -- For Score calculation
4236   l_max_score NUMBER;
4237   l_match_idx NUMBER;
4238   l_entered_max_score NUMBER;
4239   FIRST BOOLEAN;
4240   l_search_ctx_id NUMBER; -- Generated Search Context ID
4241 
4242   l_TX39 VARCHAR2(2000);
4243   l_TX13 VARCHAR2(2000);
4244   l_TX20 VARCHAR2(2000);
4245   l_TX42 VARCHAR2(2000);
4246   l_TX32 VARCHAR2(2000);
4247   l_TX46 VARCHAR2(2000);
4248   l_TX9 VARCHAR2(2000);
4249   l_TX22 VARCHAR2(2000);
4250   l_TX43 VARCHAR2(2000);
4251   l_TX44 VARCHAR2(2000);
4252   l_TX35 VARCHAR2(2000);
4253   l_TX1 VARCHAR2(2000);
4254   l_TX158 VARCHAR2(2000);
4255   l_TX47 VARCHAR2(2000);
4256   l_TX15 VARCHAR2(2000);
4257   l_TX21 VARCHAR2(2000);
4258   l_TX3 VARCHAR2(2000);
4259   l_TX10 VARCHAR2(2000);
4260   l_TX11 VARCHAR2(2000);
4261   l_TX4 VARCHAR2(2000);
4262   l_TX157 VARCHAR2(2000);
4263   l_TX40 VARCHAR2(2000);
4264   l_TX34 VARCHAR2(2000);
4265   l_TX48 VARCHAR2(2000);
4266   l_TX156 VARCHAR2(2000);
4267   l_TX14 VARCHAR2(2000);
4268   H_SCORES HZ_PARTY_SEARCH.score_list;
4269   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
4270   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
4271 
4272   l_score NUMBER;
4273   l_idx NUMBER;
4274   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
4275   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
4276   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
4277   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
4278   l_party_id NUMBER;
4279   l_ps_party_id NUMBER;
4280   l_ct_party_id NUMBER;
4281   l_cpt_party_id NUMBER;
4282   l_cpt_ps_id NUMBER;
4283   l_cpt_contact_id NUMBER;
4284   l_cpt_type VARCHAR2(100);
4285   l_party_site_id NUMBER;
4286   l_org_contact_id NUMBER;
4287   l_contact_pt_id NUMBER;
4288   l_cpt_level VARCHAR2(100);
4289   l_ps_contact_id NUMBER;
4290   l_party_max_score NUMBER;
4291   l_ps_max_score NUMBER;
4292   l_contact_max_score NUMBER;
4293   l_cpt_max_score NUMBER;
4294   l_denorm_max_score NUMBER;
4295   l_non_denorm_max_score NUMBER;
4296 
4297   defpt NUMBER :=0;
4298   defps NUMBER :=0;
4299   defct NUMBER :=0;
4300   defcpt NUMBER :=0;
4301   l_index NUMBER;
4302   l_max_thresh NUMBER;
4303   l_tmp NUMBER;
4304   l_merge_flag VARCHAR2(1);
4305   l_num_eval NUMBER:=0;
4306 
4307   L_RETURN_IMM_EXC Exception;
4308 
4309   
4310   /********************* Find Parties private procedures *******/
4311   PROCEDURE set_person_party_type IS
4312   BEGIN
4313     g_party_stage_rec.TX36:= 
4314         HZ_TRANS_PKG.EXACT(
4315              'PERSON'
4316              ,null,'PARTY_TYPE'
4317              ,'PARTY');
4318   END;
4319     
4320   PROCEDURE unset_person_party_type IS
4321   BEGIN
4322     g_party_stage_rec.TX36 := '';
4323   END;
4324   
4325   FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) 
4326   RETURN NUMBER IS
4327     l_party_type VARCHAR2(255);
4328     l_person_id NUMBER(15);
4329   BEGIN
4330     SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;
4331     IF l_party_type = 'PERSON' THEN
4332       RETURN p_party_id;
4333     ELSIF p_contact_id IS NULL THEN
4334       RETURN NULL;
4335     ELSE
4336       BEGIN 
4337         SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p
4338         WHERE oc.org_contact_id = p_contact_id
4339         AND r.relationship_id = oc.party_relationship_id 
4340         AND r.object_id = p_party_id
4341         AND p.party_id = r.subject_id 
4342         AND p.party_type = 'PERSON'
4343         AND ROWNUM=1;
4344         
4345         RETURN l_person_id;
4346       EXCEPTION
4347         WHEN NO_DATA_FOUND THEN
4348           RETURN NULL;
4349       END;      
4350     END IF;
4351   END;  
4352 
4353   PROCEDURE push_eval IS
4354   BEGIN
4355     H_PARTY_ID.DELETE;
4356     H_PARTY_ID_LIST.DELETE;
4357     H_SCORES.DELETE;        
4358     g_mappings.DELETE;
4359     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
4360     call_order(5) := call_order(1);
4361     call_type(5) := 'AND';
4362     call_max_score(5) := call_max_score(1);
4363     call_type(2) := 'OR';
4364   END;
4365 
4366   /**  Private procedure to acquire and score at party level  ***/
4367   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
4368     l_party_id_idx NUMBER:=1;
4369     l_ctx_id NUMBER;
4370     l_TX35_new varchar2(4000);
4371   BEGIN
4372     SAVEPOINT eval_start;
4373     set_person_party_type;
4374     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
4375       l_ctx_id := l_search_ctx_id;
4376       FORALL I in 1..H_PARTY_ID.COUNT 
4377          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4378              l_search_ctx_id,H_PARTY_ID(I));
4379       H_PARTY_ID.DELETE;
4380       H_PARTY_ID_LIST.DELETE;
4381     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
4382       l_ctx_id := l_search_ctx_id;
4383       FORALL I in 1..H_PARTY_ID.COUNT 
4384          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4385              l_search_ctx_id,H_PARTY_ID(I));
4386       l_party_id_idx := H_PARTY_ID.COUNT+1;
4387     ELSE
4388       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
4389          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
4390    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4391       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);
4392     END IF;
4393         IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' THEN
4394    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4395       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);
4396     END IF;
4397           IF (l_party_site_contains_str IS NULL AND
4398              l_contact_contains_str IS NULL AND
4399              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN
4400             return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);
4401             RAISE L_RETURN_IMM_EXC;
4402           ELSE
4403             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);
4404           END IF;
4405         ELSE
4406           IF p_index>1 THEN
4407    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4408       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);
4409     END IF;
4410             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4411             FND_MSG_PUB.ADD;
4412             RAISE FND_API.G_EXC_ERROR;
4413           ELSE
4414             push_eval;
4415             RETURN;
4416           END IF;
4417         END IF;
4418       END IF;
4419       l_ctx_id := NULL;
4420       l_party_id_idx := H_PARTY_ID.COUNT+1;
4421     END IF;
4422     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
4423       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);
4424     END IF;
4425     LOOP 
4426       FETCH l_party_cur INTO
4427          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;
4428       EXIT WHEN l_party_cur%NOTFOUND;
4429       l_index := map_id(l_party_id);
4430   l_TX35_new:=RTRIM(LTRIM(l_TX35));
4431   l_TX35_new:=(CASE l_TX35_new WHEN 'SYNC' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);
4432       l_score := GET_PARTY_SCORE(l_TX32,l_TX34,l_TX35_new,l_TX39,l_TX158,l_TX40,l_TX43,l_TX42,l_TX44,l_TX46,l_TX47,l_TX48,l_TX156,l_TX157);
4433       IF NOT H_SCORES.EXISTS(l_index) THEN
4434         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
4435       ELSE
4436         H_SCORES(l_index).TOTAL_SCORE := 
4437                 H_SCORES(l_index).TOTAL_SCORE+l_score;
4438         H_SCORES(l_index).PARTY_SCORE := l_score;
4439       END IF;
4440       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4441         H_PARTY_ID_LIST(l_index) := 1;
4442         H_PARTY_ID(l_party_id_idx) := l_party_id;
4443         l_party_id_idx:= l_party_id_idx+1;
4444       END IF;
4445       IF (l_party_id_idx-1)>l_max_thresh THEN
4446          IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
4447           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
4448           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
4449           AND l_contact_pt_contains_str IS NULL THEN
4450           H_PARTY_ID.DELETE(l_party_id_idx-1);
4451           H_PARTY_ID_LIST.DELETE(l_index);
4452           H_SCORES.DELETE(l_index);
4453           EXIT;
4454         END IF;
4455         CLOSE l_party_cur;
4456         IF p_index>1 THEN
4457    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4458       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);
4459     END IF;
4460           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4461           FND_MSG_PUB.ADD;
4462           RAISE FND_API.G_EXC_ERROR;
4463         ELSE
4464           push_eval;
4465           RETURN;
4466         END IF;
4467       END IF;
4468     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4469       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);
4470       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);
4471       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);
4472     END IF;
4473     END LOOP;
4474     CLOSE l_party_cur;
4475     ROLLBACK to eval_start;
4476   END;
4477   PROCEDURE open_person_contact_cursor(
4478             p_contains_str  VARCHAR2, 
4479             p_search_ctx_id  NUMBER, 
4480             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
4481   BEGIN
4482     OPEN x_cursor FOR 
4483       SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID
4484       FROM HZ_STAGED_CONTACTS stage
4485       WHERE contains( concat_col, p_contains_str)>0
4486       AND ORG_CONTACT_ID in (
4487             SELECT  /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ 
4488             org_contact_id
4489             from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc
4490             where d.party_id = r.subject_id
4491             and oc.party_relationship_id = r.relationship_id
4492             and d.search_context_id = p_search_ctx_id);   
4493   exception
4494     when others then
4495       if (instrb(SQLERRM,'DRG-51030')>0) then 
4496         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
4497         FND_MSG_PUB.ADD;
4498         RAISE FND_API.G_EXC_ERROR;
4499       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
4500         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
4501         FND_MSG_PUB.ADD;
4502         RAISE FND_API.G_EXC_ERROR;
4503       else 
4504         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4505       end if;
4506   END;
4507 
4508   /**  Private procedure to acquire and score at party site level  ***/
4509   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
4510     l_party_id_idx NUMBER:=1;
4511     l_ctx_id NUMBER;
4512     h_ps_id HZ_PARTY_SEARCH.IDList;
4513     h_ps_party_id HZ_PARTY_SEARCH.IDList;
4514     h_ps_score HZ_PARTY_SEARCH.IDList;
4515     detcnt NUMBER := 1;
4516     l_person_id NUMBER;
4517   BEGIN
4518     SAVEPOINT eval_start;
4519     unset_person_party_type;
4520     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
4521       l_ctx_id := l_search_ctx_id;
4522       FORALL I in 1..H_PARTY_ID.COUNT 
4523          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4524              l_search_ctx_id,H_PARTY_ID(I));
4525       H_PARTY_ID.DELETE;
4526       H_PARTY_ID_LIST.DELETE;
4527     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
4528       l_ctx_id := l_search_ctx_id;
4529       FORALL I in 1..H_PARTY_ID.COUNT 
4530          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4531              l_search_ctx_id,H_PARTY_ID(I));
4532       l_party_id_idx := H_PARTY_ID.COUNT+1;
4533     ELSE
4534       l_party_id_idx := H_PARTY_ID.COUNT+1;
4535       l_ctx_id := NULL;
4536     END IF;
4537     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);
4538     LOOP 
4539       FETCH l_party_site_cur INTO
4540          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;
4541       EXIT WHEN l_party_site_cur%NOTFOUND;
4542       IF l_ctx_id IS NULL THEN
4543         l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);
4544       ELSE
4545         l_person_id := l_ps_party_id;
4546       END IF;
4547       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4548         l_index := map_id(l_person_id);
4549         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);
4550         IF NOT H_SCORES.EXISTS(l_index) THEN
4551           IF l_ctx_id IS NULL THEN
4552             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);
4553           END IF;
4554         ELSE
4555           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
4556             H_SCORES(l_index).TOTAL_SCORE := 
4557                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
4558             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
4559           END IF;
4560         END IF;
4561         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4562           H_PARTY_ID_LIST(l_index) := 1;
4563           H_PARTY_ID(l_party_id_idx) := l_person_id;
4564           l_party_id_idx:= l_party_id_idx+1;
4565         END IF;
4566         IF (l_party_id_idx-1)>l_max_thresh THEN
4567           CLOSE l_party_site_cur;
4568           IF p_index>1 THEN
4569    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4570       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);
4571     END IF;
4572             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4573             FND_MSG_PUB.ADD;
4574             RAISE FND_API.G_EXC_ERROR;
4575           ELSE
4576             push_eval;
4577             RETURN;
4578           END IF;
4579         END IF;
4580         IF p_ins_details = 'Y' THEN
4581           h_ps_id(detcnt) := l_party_site_id;
4582           h_ps_party_id(detcnt) := l_person_id;
4583           IF (p_emax_score > 0) THEN 
4584               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
4585           ELSE 
4586               h_ps_score(detcnt) := 0; 
4587           END IF; 
4588           detcnt := detcnt +1;
4589         END IF;
4590     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4591       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);
4592       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);
4593       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);
4594       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);
4595     END IF;
4596       END IF;
4597     END LOOP;
4598     CLOSE l_party_site_cur;
4599     ROLLBACK to eval_start;
4600     IF p_ins_details = 'Y' THEN
4601       FORALL I in 1..h_ps_id.COUNT 
4602         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
4603           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
4604     END IF;
4605   END;
4606 
4607   /**  Private procedure to acquire and score at party site level  ***/
4608   PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
4609     l_party_id_idx NUMBER:=1;
4610     l_ctx_id NUMBER;
4611     h_ct_id HZ_PARTY_SEARCH.IDList;
4612     h_ct_party_id HZ_PARTY_SEARCH.IDList;
4613     h_ct_score HZ_PARTY_SEARCH.IDList;
4614     detcnt NUMBER := 1;
4615     l_person_id NUMBER;
4616   BEGIN
4617     SAVEPOINT eval_start;
4618     l_ctx_id := l_search_ctx_id;
4619     unset_person_party_type;
4620     FORALL I in 1..H_PARTY_ID.COUNT 
4621          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4622              l_search_ctx_id,H_PARTY_ID(I));
4623       l_party_id_idx := H_PARTY_ID.COUNT+1;
4624     open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);
4625     LOOP 
4626       FETCH l_contact_cur INTO
4627          l_org_contact_id, l_ct_party_id ;
4628       EXIT WHEN l_contact_cur%NOTFOUND;
4629       l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);
4630       l_index := map_id(l_person_id);
4631       IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4632         l_score := GET_CONTACTS_SCORE(l_match_idx);
4633         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
4634           H_SCORES(l_index).TOTAL_SCORE := 
4635                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
4636           H_SCORES(l_index).CONTACT_SCORE := l_score;
4637         END IF;
4638       END IF;
4639       IF p_ins_details = 'Y' THEN
4640         h_ct_id(detcnt) := l_org_contact_id;
4641         h_ct_party_id(detcnt) := l_person_id;
4642         IF (p_emax_score > 0) THEN 
4643             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
4644         ELSE 
4645             h_ct_score(detcnt) := 0; 
4646         END IF; 
4647         detcnt := detcnt +1;
4648       END IF;
4649     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4650       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);
4651       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);
4652       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);
4653       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);
4654     END IF;
4655     END LOOP;
4656     CLOSE l_contact_cur;
4657     ROLLBACK to eval_start;
4658     IF p_ins_details = 'Y' THEN
4659       FORALL I in 1..h_ct_id.COUNT 
4660         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
4661           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
4662     END IF;
4663   END;
4664 
4665   /**  Private procedure to acquire and score at contact point level  ***/
4666   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
4667     l_party_id_idx NUMBER:=1;
4668     l_ctx_id NUMBER;
4669     h_cpt_id HZ_PARTY_SEARCH.IDList;
4670     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
4671     h_cpt_score HZ_PARTY_SEARCH.IDList;
4672     detcnt NUMBER := 1;
4673     l_person_id NUMBER;
4674     is_a_match VARCHAR2(1) := 'Y';
4675     l_cpt_flag VARCHAR2(1) := 'N';
4676   BEGIN
4677    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4678       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);
4679     END IF;
4680    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4681       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);
4682     END IF;
4683     SAVEPOINT eval_start;
4684     unset_person_party_type;
4685     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
4686       l_ctx_id := l_search_ctx_id;
4687       FORALL I in 1..H_PARTY_ID.COUNT 
4688          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4689              l_search_ctx_id,H_PARTY_ID(I));
4690       H_PARTY_ID.DELETE;
4691       H_PARTY_ID_LIST.DELETE;
4692     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
4693    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4694       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);
4695     END IF;
4696       l_ctx_id := l_search_ctx_id;
4697       FORALL I in 1..H_PARTY_ID.COUNT 
4698          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4699              l_search_ctx_id,H_PARTY_ID(I));
4700       l_party_id_idx := H_PARTY_ID.COUNT+1;
4701     ELSE
4702    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4703       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);
4704     END IF;
4705       l_ctx_id := NULL;
4706       l_party_id_idx := H_PARTY_ID.COUNT+1;
4707     END IF;
4708    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4709       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);
4710     END IF;
4711     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);
4712     LOOP 
4713       FETCH l_contact_pt_cur INTO
4714          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;
4715       EXIT WHEN l_contact_pt_cur%NOTFOUND;
4716    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4717       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);
4718     END IF;
4719    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4720       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);
4721     END IF;
4722    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4723       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);
4724     END IF;
4725       IF l_ctx_id IS NULL THEN
4726         l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);
4727       ELSE
4728         l_person_id := l_cpt_party_id;
4729       END IF;
4730       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4731         l_index := map_id(l_person_id);
4732         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX3,l_TX4);
4733         IF NOT H_SCORES.EXISTS(l_index) THEN
4734           IF l_ctx_id IS NULL THEN
4735             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);
4736            H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4737    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4738       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);
4739     END IF;
4740    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4741       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);
4742     END IF;
4743    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4744       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);
4745     END IF;
4746           END IF;
4747         ELSE
4748    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4749       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);
4750     END IF;
4751           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
4752             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
4753               H_SCORES(l_index).TOTAL_SCORE :=
4754               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;
4755               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;
4756               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4757    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4758       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);
4759     END IF;
4760    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4761       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);
4762     END IF;
4763    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4764       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);
4765     END IF;
4766    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4767       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);
4768     END IF;
4769             END IF;
4770           ELSE
4771    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4772       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);
4773     END IF;
4774             H_SCORES(l_index).TOTAL_SCORE :=
4775             H_SCORES(l_index).TOTAL_SCORE+l_score;
4776             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4777             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4778    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4779       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);
4780     END IF;
4781    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4782       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);
4783     END IF;
4784    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4785       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);
4786     END IF;
4787           END IF;
4788         END IF;
4789    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4790       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);
4791     END IF;
4792    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4793       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);
4794     END IF;
4795         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4796           -- If rule is match all 
4797           IF l_match_str = ' AND ' THEN
4798    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4799       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);
4800     END IF;
4801             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4802               is_a_match := 'Y';
4803    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4804       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);
4805     END IF;
4806             ELSE
4807               is_a_match := 'N';
4808    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4809       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);
4810     END IF;
4811             END IF;
4812           -- Else it is construed as a match anyway 
4813           ELSE
4814             is_a_match := 'Y';
4815    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4816       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);
4817     END IF;
4818           END IF;
4819           IF (is_a_match='Y') THEN
4820           H_PARTY_ID_LIST(l_index) := 1;
4821           H_PARTY_ID(l_party_id_idx) := l_person_id;
4822           l_party_id_idx:= l_party_id_idx+1;
4823       end if;
4824         END IF;
4825         IF (l_party_id_idx-1)>l_max_thresh THEN
4826           CLOSE l_contact_pt_cur;
4827           IF p_index>1 THEN
4828    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4829       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);
4830     END IF;
4831             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4832             FND_MSG_PUB.ADD;
4833             RAISE FND_API.G_EXC_ERROR;
4834           ELSE
4835             push_eval;
4836             RETURN;
4837           END IF;
4838         END IF;
4839         IF p_ins_details = 'Y' THEN
4840           -- If rule is match all 
4841           IF l_match_str = ' AND ' THEN
4842    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4843       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);
4844     END IF;
4845             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4846               is_a_match := 'Y';
4847    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4848       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);
4849     END IF;
4850             ELSE
4851               is_a_match := 'N';
4852    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4853       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);
4854     END IF;
4855             END IF;
4856           -- Else it is construed as a match anyway 
4857           ELSE
4858             is_a_match := 'Y';
4859    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4860       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);
4861     END IF;
4862           END IF;
4863           IF (is_a_match='Y') THEN
4864    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4865       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);
4866     END IF;
4867           FOR I IN 1..h_cpt_id.COUNT LOOP
4868           IF h_cpt_id(I)=l_contact_pt_id THEN
4869           	 l_cpt_flag := 'Y';
4870           END IF;
4871           END LOOP;
4872           IF l_cpt_flag = 'Y' THEN
4873           	 NULL;
4874           ELSE 
4875          	 h_cpt_id(detcnt) := l_contact_pt_id;
4876           h_cpt_party_id(detcnt) := l_person_id;
4877           	 IF (p_emax_score > 0) THEN 
4878               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
4879             ELSE 
4880               h_cpt_score(detcnt) := 0; 
4881           	 END IF; 
4882             detcnt := detcnt +1;
4883           END IF;
4884       end if;
4885         END IF;
4886     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4887       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);
4888       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);
4889       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);
4890       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);
4891     END IF;
4892       END IF;
4893     END LOOP;
4894     CLOSE l_contact_pt_cur;
4895     ROLLBACK to eval_start;
4896     IF p_ins_details = 'Y' THEN
4897       FORALL I in 1..h_cpt_id.COUNT 
4898         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
4899           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
4900     END IF;
4901   END;
4902 
4903   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
4904   PROCEDURE do_eval (p_index NUMBER) IS
4905     l_ctx_id NUMBER;
4906     l_threshold NUMBER;
4907     other_acq_criteria_exists BOOLEAN; 
4908     acq_cnt NUMBER; 
4909   BEGIN
4910     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
4911      l_threshold :=  round(( l_entered_max_score / 805) * 72); 
4912     other_acq_criteria_exists := TRUE ;
4913     --check if acquisition criteria exists for any other entity
4914     IF l_party_contains_str IS NOT NULL THEN 
4915     	acq_cnt := 1; 
4916     END IF; 
4917     IF l_party_site_contains_str IS NOT NULL THEN 
4918     	acq_cnt := acq_cnt+1; 
4919     END IF; 
4920     IF l_contact_contains_str IS NOT NULL THEN 
4921     	acq_cnt := acq_cnt+1; 
4922     END IF;
4923     IF l_contact_pt_contains_str IS NOT NULL THEN 
4924     	acq_cnt := acq_cnt+1; 
4925     END IF;  
4926     IF acq_cnt>1 THEN 
4927     	other_acq_criteria_exists := TRUE; 
4928     ELSE
4929     	other_acq_criteria_exists := FALSE; 
4930     END IF;  
4931       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);
4932       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);
4933       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);
4934     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
4935     	IF ( call_max_score(p_index) < l_threshold) THEN 
4936    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4937       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);
4938     END IF;
4939 	     	RETURN;	
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 	  ELSE
4949    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4950       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);
4951     END IF;
4952       FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4953       FND_MSG_PUB.ADD;
4954       RAISE FND_API.G_EXC_ERROR;
4955      END IF; 
4956     END IF;
4957     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
4958       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
4959     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
4960       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4961     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
4962       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4963     END IF;
4964   END;
4965   /************ End of find_persons private procedures **********/ 
4966 
4967   BEGIN
4968 
4969     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4970       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);
4971     END IF;
4972     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4973       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);
4974       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);
4975       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);
4976     END IF;
4977     -- ************************************
4978     -- STEP 1. Initialization and error checks
4979 
4980     l_match_str := ' AND ';
4981     IF p_match_type = 'AND' THEN
4982       l_match_str := ' AND ';
4983     ELSIF p_match_type = 'OR' THEN
4984       l_match_str := ' OR ';
4985     END IF;
4986     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);
4987     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4988 
4989     l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
4990     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
4991       g_score_until_thresh := true;
4992     ELSE
4993       g_score_until_thresh := false;
4994     END IF;
4995     -- ************************************************************
4996     -- STEP 2. Setup of intermedia query strings for Acquisition query
4997     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
4998     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
4999     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
5000     l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);
5001     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
5002 
5003     -- Setup Search Context ID
5004     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5005     x_search_ctx_id := l_search_ctx_id;
5006 
5007     IF l_party_contains_str IS NULL THEN
5008       defpt := 1;
5009     END IF;
5010     IF l_party_site_contains_str IS NULL THEN
5011       defps := 1;
5012     END IF;
5013     IF l_contact_contains_str IS NULL THEN
5014       defct := 1;
5015     END IF;
5016     IF l_contact_pt_contains_str IS NULL THEN
5017       defcpt := 1;
5018     END IF;
5019 
5020     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5021       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);
5022       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);
5023       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);
5024       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);
5025       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);
5026       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);
5027     END IF;
5028     FOR I in 1..5 LOOP
5029       do_eval(I);
5030     END LOOP;
5031     IF l_contact_contains_str IS NOT NULL THEN
5032       eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);
5033     END IF;
5034     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5035       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);
5036     END IF;
5037     x_num_matches := 0;
5038     l_num_eval := 0;
5039     IF l_match_str = ' OR ' THEN
5040       l_party_id := H_SCORES.FIRST;
5041     ELSE
5042       l_party_id := H_PARTY_ID_LIST.FIRST;
5043     END IF;
5044     WHILE l_party_id IS NOT NULL LOOP
5045       l_num_eval:= l_num_eval+1;
5046     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5047       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);
5048       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);
5049     END IF;
5050       IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(72/805) THEN
5051             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
5052             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));
5053             x_num_matches := x_num_matches+1;
5054       END IF;
5055       IF l_match_str = ' OR ' THEN
5056         l_party_id:=H_SCORES.NEXT(l_party_id);
5057       ELSE
5058         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
5059       END IF;
5060     END LOOP;
5061     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
5062     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5063       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);
5064     END IF;
5065 EXCEPTION
5066   WHEN L_RETURN_IMM_EXC THEN
5067     RETURN;
5068   WHEN FND_API.G_EXC_ERROR THEN
5069     RAISE FND_API.G_EXC_ERROR;
5070   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5071     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5072   WHEN OTHERS THEN
5073     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5074     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.find_persons');
5075     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5076     FND_MSG_PUB.ADD;
5077     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5078 END find_persons;
5079 
5080 PROCEDURE find_persons (
5081       p_rule_id               IN      NUMBER,
5082       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
5083       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
5084       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
5085       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
5086       p_restrict_sql          IN      VARCHAR2,
5087       p_match_type            IN      VARCHAR2,
5088       p_search_merged         IN      VARCHAR2,
5089       p_ins_details           IN      VARCHAR2,
5090       x_search_ctx_id         OUT     NUMBER,
5091       x_num_matches           OUT     NUMBER
5092 ) IS
5093 
5094   BEGIN
5095      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);
5096   END;
5097 PROCEDURE find_party_details (
5098       p_rule_id               IN      NUMBER,
5099       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
5100       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
5101       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
5102       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
5103       p_restrict_sql          IN      VARCHAR2,
5104       p_match_type            IN      VARCHAR2,
5105       p_search_merged         IN      VARCHAR2,
5106       x_search_ctx_id         OUT     NUMBER,
5107       x_num_matches           OUT     NUMBER
5108 ) IS
5109 
5110   BEGIN
5111     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5112       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);
5113     END IF;
5114     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5115       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);
5116       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);
5117       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);
5118       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);
5119     END IF;
5120   find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,
5121                p_restrict_sql,p_match_type,p_search_merged,null,null, null,'Y',
5122                x_search_ctx_id,x_num_matches);
5123   DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
5124   AND NOT EXISTS 
5125        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);
5126   DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
5127   AND NOT EXISTS 
5128        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);
5129   DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
5130   AND NOT EXISTS 
5131        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);
5132     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5133       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);
5134     END IF;
5135 EXCEPTION
5136   WHEN FND_API.G_EXC_ERROR THEN
5137     RAISE FND_API.G_EXC_ERROR;
5138   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5139     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5140   WHEN OTHERS THEN
5141     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5142     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.find_party_details');
5143     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5144     FND_MSG_PUB.ADD;
5145     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5146 END find_party_details;
5147 
5148 PROCEDURE find_duplicate_parties (
5149       p_rule_id               IN      NUMBER,
5150       p_party_id              IN      NUMBER,
5151       p_restrict_sql          IN      VARCHAR2,
5152       p_match_type            IN      VARCHAR2,
5153       p_dup_batch_id          IN      NUMBER,
5154       p_search_merged         IN      VARCHAR2,
5155       x_dup_set_id            OUT     NUMBER,
5156       x_search_ctx_id         OUT     NUMBER,
5157       x_num_matches           OUT     NUMBER
5158 ) IS
5159   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
5160   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
5161   l_contact_list HZ_PARTY_SEARCH.contact_list;
5162   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
5163   l_match_idx NUMBER;
5164 
5165   --Fix for bug 4417124
5166   l_use_contact_addr_info BOOLEAN := TRUE;
5167   l_use_contact_cpt_info BOOLEAN  := TRUE;
5168   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
5169   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
5170 
5171 BEGIN
5172 
5173     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5174       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);
5175     END IF;
5176     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5177       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);
5178       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);
5179       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);
5180       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);
5181       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);
5182       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);
5183     END IF;
5184 
5185   --Fix for bug 4417124 
5186 
5187   SELECT use_contact_addr_flag, use_contact_cpt_flag 
5188   INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
5189   FROM hz_match_rules_b 
5190   WHERE match_rule_id = 34; 
5191 
5192   IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
5193     l_use_contact_addr_info := FALSE; 
5194   END IF; 
5195 
5196   IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
5197     l_use_contact_cpt_info := FALSE; 
5198   END IF; 
5199 
5200  --End fix for bug 4417124
5201 
5202   get_party_for_search(
5203               p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);
5204 
5205     IF NOT check_prim_cond (l_party_rec,
5206                             l_party_site_list,
5207                             l_contact_list,
5208                             l_cpt_list) THEN
5209       x_dup_set_id:=NULL;
5210       x_search_ctx_id:=NULL;
5211       x_num_matches:=0;
5212       RETURN;
5213     END IF;
5214   x_dup_set_id := NULL;
5215   IF p_dup_batch_id IS NOT NULL THEN
5216     SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;
5217   END IF;
5218 
5219   --Fix for bug 4417124 
5220   IF l_party_rec.PARTY_TYPE = 'PERSON' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN
5221     find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5222                p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
5223                x_search_ctx_id,x_num_matches);
5224   ELSE
5225     find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5226                p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
5227                x_search_ctx_id,x_num_matches);
5228   END IF;
5229 
5230   IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN
5231     INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,
5232       STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,
5233       LAST_UPDATE_DATE, LAST_UPDATED_BY) 
5234     VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, 'SYSBATCH',
5235       'PARTY_MERGE', 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);
5238 
5239     INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
5240       MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
5241       LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) 
5242     VALUES (p_party_id,x_dup_set_id,0,0,
5243       'Y',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,
5244       hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,
5245       hz_utility_pub.user_id,p_dup_batch_id);
5246   ELSE
5247     x_dup_set_id := NULL;
5248   END IF;
5249     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5250       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);
5251     END IF;
5252 EXCEPTION
5253   WHEN FND_API.G_EXC_ERROR THEN
5254     RAISE FND_API.G_EXC_ERROR;
5255   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5256     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5257   WHEN OTHERS THEN
5258     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5259     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.find_duplicate_parties');
5260     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5261     FND_MSG_PUB.ADD;
5262     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5263 END find_duplicate_parties;
5264 
5265 PROCEDURE find_duplicate_party_sites (
5266       p_rule_id               IN      NUMBER,
5267       p_party_site_id         IN      NUMBER,
5268       p_party_id              IN      NUMBER,
5269       p_restrict_sql          IN      VARCHAR2,
5270       p_match_type            IN      VARCHAR2,
5271       x_search_ctx_id         OUT     NUMBER,
5272       x_num_matches           OUT     NUMBER
5273 ) IS
5274 
5275    l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
5276    l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
5277    l_contact_list HZ_PARTY_SEARCH.contact_list; 
5278    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
5279    contact_point_ids HZ_PARTY_SEARCH.IDList; 
5280    p_party_site_list HZ_PARTY_SEARCH.IDList;  
5281    p_contact_ids HZ_PARTY_SEARCH.IDList; 
5282   l_match_idx NUMBER;
5283    cursor get_cpts_for_party_sites is select contact_point_id  
5284                          from hz_contact_points 
5285                          where owner_table_name = 'HZ_PARTY_SITES' 
5286                          and primary_flag='Y'
5287                          and owner_table_id = p_party_site_id; 
5288    BEGIN 
5289     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5290       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);
5291     END IF;
5292     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5293       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);
5294       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);
5295       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);
5296       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);
5297       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);
5298     END IF;
5299      p_party_site_list(1) := p_party_site_id; 
5300      OPEN get_cpts_for_party_sites;
5301      LOOP       
5302      FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; 
5303          EXIT WHEN get_cpts_for_party_sites%NOTFOUND; 
5304      END LOOP;  
5305      CLOSE get_cpts_for_party_sites; 
5306   
5307      get_search_criteria (
5308          null,
5309          p_party_site_list,
5310          HZ_PARTY_SEARCH.G_MISS_ID_LIST,
5311          contact_point_ids, 
5312          l_party_search_rec,
5313          l_party_site_list,
5314          l_contact_list,
5315          l_contact_point_list) ;
5316     IF NOT check_prim_cond (l_party_search_rec,
5317                             l_party_site_list,
5318                             l_contact_list,
5319                             l_contact_point_list) THEN
5320       x_search_ctx_id:=NULL;
5321       x_num_matches:=0;
5322       RETURN;
5323     END IF;
5324  
5325      get_matching_party_sites (p_rule_id, 
5326          p_party_id, 
5327          l_party_site_list, 
5328          l_contact_point_list,
5329          p_restrict_sql, 
5330          p_match_type, 
5331          p_party_site_id, 
5332          x_search_ctx_id,
5333          x_num_matches);
5334     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5335       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);
5336     END IF;
5337 EXCEPTION
5338   WHEN FND_API.G_EXC_ERROR THEN
5339     RAISE FND_API.G_EXC_ERROR;
5340   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5341     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5342   WHEN OTHERS THEN
5343     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5344     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.find_duplicate_party_sites');
5345     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5346     FND_MSG_PUB.ADD;
5347     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5348 END find_duplicate_party_sites; 
5349  
5350 PROCEDURE find_duplicate_contacts (
5351       p_rule_id               IN      NUMBER,
5352       p_org_contact_id        IN      NUMBER,
5353       p_party_id              IN      NUMBER,
5354       p_restrict_sql          IN      VARCHAR2,
5355       p_match_type            IN      VARCHAR2,
5356       x_search_ctx_id         OUT     NUMBER,
5357       x_num_matches           OUT     NUMBER
5358 ) IS
5359 
5360  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
5361  l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
5362  l_contact_list HZ_PARTY_SEARCH.contact_list; 
5363  l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
5364  contact_point_ids HZ_PARTY_SEARCH.IDList; 
5365  p_party_site_list HZ_PARTY_SEARCH.IDList;   
5366  p_contact_ids HZ_PARTY_SEARCH.IDList; 
5367   l_match_idx NUMBER;
5368  cursor get_cpt_for_contact_id is select  contact_point_id 
5369    from hz_org_contacts a, hz_relationships b, hz_contact_points c 
5370    where a.party_relationship_id = b.relationship_id 
5371      and c.owner_table_name = 'HZ_PARTIES' 
5372      and c.primary_flag='Y'
5373      and c.owner_table_id = b.party_id 
5374      and b.directional_flag = 'F'  
5375      and a.org_contact_id = p_org_contact_id; 
5376 BEGIN 
5377     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5378       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);
5379     END IF;
5380     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5381       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);
5382       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);
5383       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);
5384       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);
5385       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);
5386     END IF;
5387     p_contact_ids(1) := p_org_contact_id; 
5388     OPEN get_cpt_for_contact_id; 
5389     LOOP 
5390     FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; 
5391         EXIT WHEN get_cpt_for_contact_id%NOTFOUND; 
5392     END LOOP;  
5393     CLOSE get_cpt_for_contact_id; 
5394  
5395     get_search_criteria (
5396         null,
5397         HZ_PARTY_SEARCH.G_MISS_ID_LIST,
5398         p_contact_ids,
5399         contact_point_ids, 
5400         l_party_search_rec,
5401         l_party_site_list, 
5402         l_contact_list,
5403         l_contact_point_list) ;
5404     IF NOT check_prim_cond (l_party_search_rec,
5405                             l_party_site_list,
5406                             l_contact_list,
5407                             l_contact_point_list) THEN
5408       x_search_ctx_id:=NULL;
5409       x_num_matches:=0;
5410       RETURN;
5411     END IF;
5412  
5413     get_matching_contacts (p_rule_id, 
5414         p_party_id, 
5415         l_contact_list, 
5416         l_contact_point_list, 
5417         p_restrict_sql, 
5418         p_match_type, 
5419         p_org_contact_id, 
5420         x_search_ctx_id, 
5421         x_num_matches);
5422  
5423     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5424       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);
5425     END IF;
5426 EXCEPTION
5427   WHEN FND_API.G_EXC_ERROR THEN
5428     RAISE FND_API.G_EXC_ERROR;
5429   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5430     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5431   WHEN OTHERS THEN
5432     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5433     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.find_duplicate_contacts');
5434     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5435     FND_MSG_PUB.ADD;
5436     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5437 END find_duplicate_contacts; 
5438 
5439 PROCEDURE find_duplicate_contact_points (
5440       p_rule_id               IN      NUMBER,
5441       p_contact_point_id      IN      NUMBER,
5442       p_party_id              IN      NUMBER,
5443       p_restrict_sql          IN      VARCHAR2,
5444       p_match_type            IN      VARCHAR2,
5445       x_search_ctx_id         OUT     NUMBER,
5446       x_num_matches           OUT     NUMBER
5447 ) IS
5448  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
5449   l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
5450    l_contact_list HZ_PARTY_SEARCH.contact_list;  
5451    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;  
5452    contact_point_ids HZ_PARTY_SEARCH.IDList;  
5453   p_party_site_list HZ_PARTY_SEARCH.IDList;   
5454   p_contact_ids HZ_PARTY_SEARCH.IDList;  
5455   l_match_idx NUMBER;
5456 
5457 BEGIN
5458     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5459       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);
5460     END IF;
5461     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5462       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);
5463       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);
5464       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);
5465       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);
5466       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);
5467     END IF;
5468   contact_point_ids(1) := p_contact_point_id;   
5469   get_search_criteria (   
5470       null, 
5471       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
5472       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
5473       contact_point_ids,   
5474       l_party_search_rec, 
5475       l_party_site_list, 
5476       l_contact_list, 
5477       l_contact_point_list ); 
5478     
5479     IF NOT check_prim_cond (l_party_search_rec,
5480                             l_party_site_list,
5481                             l_contact_list,
5482                             l_contact_point_list) THEN
5483       x_search_ctx_id:=NULL;
5484       x_num_matches:=0;
5485       RETURN;
5486     END IF;
5487    get_matching_contact_points ( 
5488       p_rule_id, 
5489       p_party_id, 
5490      l_contact_point_list, 
5491       p_restrict_sql, 
5492       p_match_type, 
5493       p_contact_point_id, 
5494       x_search_ctx_id, 
5495       x_num_matches );  
5496     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5497       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);
5498     END IF;
5499 EXCEPTION
5500   WHEN FND_API.G_EXC_ERROR THEN
5501     RAISE FND_API.G_EXC_ERROR;
5502   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5503     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5504   WHEN OTHERS THEN
5505     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5506     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.find_duplicate_contact_points');
5507     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5508     FND_MSG_PUB.ADD;
5509     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5510 END find_duplicate_contact_points;
5511 
5512 PROCEDURE find_parties_dynamic (
5513         p_rule_id               IN      NUMBER,
5514         p_attrib_id1            IN      NUMBER,
5515         p_attrib_id2            IN      NUMBER,
5516         p_attrib_id3            IN      NUMBER,
5517         p_attrib_id4            IN      NUMBER,
5518         p_attrib_id5            IN      NUMBER,
5519         p_attrib_id6            IN      NUMBER,
5520         p_attrib_id7            IN      NUMBER,
5521         p_attrib_id8            IN      NUMBER,
5522         p_attrib_id9            IN      NUMBER,
5523         p_attrib_id10           IN      NUMBER,
5524         p_attrib_id11           IN      NUMBER,
5525         p_attrib_id12           IN      NUMBER,
5526         p_attrib_id13           IN      NUMBER,
5527         p_attrib_id14           IN      NUMBER,
5528         p_attrib_id15           IN      NUMBER,
5529         p_attrib_id16           IN      NUMBER,
5530         p_attrib_id17           IN      NUMBER,
5531         p_attrib_id18           IN      NUMBER,
5532         p_attrib_id19           IN      NUMBER,
5533         p_attrib_id20           IN      NUMBER,
5534         p_attrib_val1           IN      VARCHAR2,
5535         p_attrib_val2           IN      VARCHAR2,
5536         p_attrib_val3           IN      VARCHAR2,
5537         p_attrib_val4           IN      VARCHAR2,
5538         p_attrib_val5           IN      VARCHAR2,
5539         p_attrib_val6           IN      VARCHAR2,
5540         p_attrib_val7           IN      VARCHAR2,
5541         p_attrib_val8           IN      VARCHAR2,
5542         p_attrib_val9           IN      VARCHAR2,
5543         p_attrib_val10          IN      VARCHAR2,
5544         p_attrib_val11          IN      VARCHAR2,
5545         p_attrib_val12          IN      VARCHAR2,
5546         p_attrib_val13          IN      VARCHAR2,
5547         p_attrib_val14          IN      VARCHAR2,
5548         p_attrib_val15          IN      VARCHAR2,
5549         p_attrib_val16          IN      VARCHAR2,
5550         p_attrib_val17          IN      VARCHAR2,
5551         p_attrib_val18          IN      VARCHAR2,
5552         p_attrib_val19          IN      VARCHAR2,
5553         p_attrib_val20          IN      VARCHAR2,
5554         p_restrict_sql          IN      VARCHAR2,
5555         p_match_type            IN      VARCHAR2,
5556         p_search_merged         IN      VARCHAR2,
5557         x_search_ctx_id         OUT     NUMBER,
5558         x_num_matches           OUT     NUMBER
5559 ) IS
5560   BEGIN
5561     call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,
5562                      p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,
5563                      p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,
5564                      p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,
5565                      p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,
5566                      p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,
5567                      p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,
5568                      p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,
5569                      p_restrict_sql,'FIND_PARTIES',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);
5570  END;
5571 
5572 PROCEDURE call_api_dynamic (
5573         p_rule_id               IN      NUMBER,
5574         p_attrib_id1            IN      NUMBER,
5575         p_attrib_id2            IN      NUMBER,
5576         p_attrib_id3            IN      NUMBER,
5577         p_attrib_id4            IN      NUMBER,
5578         p_attrib_id5            IN      NUMBER,
5579         p_attrib_id6            IN      NUMBER,
5580         p_attrib_id7            IN      NUMBER,
5581         p_attrib_id8            IN      NUMBER,
5582         p_attrib_id9            IN      NUMBER,
5583         p_attrib_id10           IN      NUMBER,
5584         p_attrib_id11           IN      NUMBER,
5585         p_attrib_id12           IN      NUMBER,
5586         p_attrib_id13           IN      NUMBER,
5587         p_attrib_id14           IN      NUMBER,
5588         p_attrib_id15           IN      NUMBER,
5589         p_attrib_id16           IN      NUMBER,
5590         p_attrib_id17           IN      NUMBER,
5591         p_attrib_id18           IN      NUMBER,
5592         p_attrib_id19           IN      NUMBER,
5593         p_attrib_id20           IN      NUMBER,
5594         p_attrib_val1           IN      VARCHAR2,
5595         p_attrib_val2           IN      VARCHAR2,
5596         p_attrib_val3           IN      VARCHAR2,
5597         p_attrib_val4           IN      VARCHAR2,
5598         p_attrib_val5           IN      VARCHAR2,
5599         p_attrib_val6           IN      VARCHAR2,
5600         p_attrib_val7           IN      VARCHAR2,
5601         p_attrib_val8           IN      VARCHAR2,
5602         p_attrib_val9           IN      VARCHAR2,
5603         p_attrib_val10          IN      VARCHAR2,
5604         p_attrib_val11          IN      VARCHAR2,
5605         p_attrib_val12          IN      VARCHAR2,
5606         p_attrib_val13          IN      VARCHAR2,
5607         p_attrib_val14          IN      VARCHAR2,
5608         p_attrib_val15          IN      VARCHAR2,
5609         p_attrib_val16          IN      VARCHAR2,
5610         p_attrib_val17          IN      VARCHAR2,
5611         p_attrib_val18          IN      VARCHAR2,
5612         p_attrib_val19          IN      VARCHAR2,
5613         p_attrib_val20          IN      VARCHAR2,
5614         p_restrict_sql          IN      VARCHAR2,
5615         p_api_name              IN      VARCHAR2,
5616         p_match_type            IN      VARCHAR2,
5617         p_party_id              IN      NUMBER,
5618         p_search_merged         IN      VARCHAR2,
5619         x_search_ctx_id         OUT     NUMBER,
5620         x_num_matches           OUT     NUMBER
5621 ) IS
5622   TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
5623   l_match_idx NUMBER;
5624   AttrVals AttrList;
5625   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
5626   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
5627   l_contact_list HZ_PARTY_SEARCH.contact_list;
5628   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
5629   l_dup_set_id NUMBER;
5630   l_idx NUMBER;
5631   l_cpt_type VARCHAR2(255);
5632   FIRST BOOLEAN := TRUE; 
5633 
5634 BEGIN
5635     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5636       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);
5637     END IF;
5638 
5639   IF p_attrib_id1 IS NOT NULL THEN
5640     AttrVals(p_attrib_id1):=p_attrib_val1;
5641   END IF;
5642   IF p_attrib_id2 IS NOT NULL THEN
5643     AttrVals(p_attrib_id2):=p_attrib_val2;
5644   END IF;
5645   IF p_attrib_id3 IS NOT NULL THEN
5646     AttrVals(p_attrib_id3):=p_attrib_val3;
5647   END IF;
5648   IF p_attrib_id4 IS NOT NULL THEN
5649     AttrVals(p_attrib_id4):=p_attrib_val4;
5650   END IF;
5651   IF p_attrib_id5 IS NOT NULL THEN
5652     AttrVals(p_attrib_id5):=p_attrib_val5;
5653   END IF;
5654   IF p_attrib_id6 IS NOT NULL THEN
5655     AttrVals(p_attrib_id6):=p_attrib_val6;
5656   END IF;
5657   IF p_attrib_id7 IS NOT NULL THEN
5658     AttrVals(p_attrib_id7):=p_attrib_val7;
5659   END IF;
5660   IF p_attrib_id8 IS NOT NULL THEN
5661     AttrVals(p_attrib_id8):=p_attrib_val8;
5662   END IF;
5663   IF p_attrib_id9 IS NOT NULL THEN
5664     AttrVals(p_attrib_id9):=p_attrib_val9;
5665   END IF;
5666   IF p_attrib_id10 IS NOT NULL THEN
5667     AttrVals(p_attrib_id10):=p_attrib_val10;
5668   END IF;
5669   IF p_attrib_id11 IS NOT NULL THEN
5670     AttrVals(p_attrib_id11):=p_attrib_val11;
5671   END IF;
5672   IF p_attrib_id12 IS NOT NULL THEN
5673     AttrVals(p_attrib_id12):=p_attrib_val12;
5674   END IF;
5675   IF p_attrib_id13 IS NOT NULL THEN
5676     AttrVals(p_attrib_id13):=p_attrib_val13;
5677   END IF;
5678   IF p_attrib_id14 IS NOT NULL THEN
5679     AttrVals(p_attrib_id14):=p_attrib_val14;
5680   END IF;
5681   IF p_attrib_id15 IS NOT NULL THEN
5682     AttrVals(p_attrib_id15):=p_attrib_val15;
5683   END IF;
5684   IF p_attrib_id16 IS NOT NULL THEN
5685     AttrVals(p_attrib_id16):=p_attrib_val16;
5686   END IF;
5687   IF p_attrib_id17 IS NOT NULL THEN
5688     AttrVals(p_attrib_id17):=p_attrib_val17;
5689   END IF;
5690   IF p_attrib_id18 IS NOT NULL THEN
5691     AttrVals(p_attrib_id18):=p_attrib_val18;
5692   END IF;
5693   IF p_attrib_id19 IS NOT NULL THEN
5694     AttrVals(p_attrib_id19):=p_attrib_val19;
5695   END IF;
5696   IF p_attrib_id20 IS NOT NULL THEN
5697     AttrVals(p_attrib_id20):=p_attrib_val20;
5698   END IF;
5699   IF AttrVals.EXISTS(11) THEN
5700     l_party_rec.ALL_ACCOUNT_NAMES:= AttrVals(11);
5701     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5702       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);
5703     END IF;
5704   END IF;
5705 
5706   IF AttrVals.EXISTS(12) THEN
5707     l_party_rec.PARTY_NUMBER:= AttrVals(12);
5708     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5709       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);
5710     END IF;
5711   END IF;
5712 
5713   IF AttrVals.EXISTS(13) THEN
5714     l_party_rec.ALL_ACCOUNT_NUMBERS:= AttrVals(13);
5715     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5716       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);
5717     END IF;
5718   END IF;
5719 
5720   IF AttrVals.EXISTS(14) THEN
5721     l_party_rec.PARTY_TYPE:= AttrVals(14);
5722     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5723       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);
5724     END IF;
5725   END IF;
5726 
5727   IF AttrVals.EXISTS(15) THEN
5728     l_party_rec.PARTY_ALL_NAMES:= AttrVals(15);
5729     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5730       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);
5731     END IF;
5732   END IF;
5733 
5734   IF AttrVals.EXISTS(17) THEN
5735     l_party_rec.TAX_NAME:= AttrVals(17);
5736     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5737       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);
5738     END IF;
5739   END IF;
5740 
5741   IF AttrVals.EXISTS(18) THEN
5742     l_party_rec.TAX_REFERENCE:= AttrVals(18);
5743     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5744       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);
5745     END IF;
5746   END IF;
5747 
5748   IF AttrVals.EXISTS(20) THEN
5749     l_party_rec.SIC_CODE:= AttrVals(20);
5750     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5751       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);
5752     END IF;
5753   END IF;
5754 
5755   IF AttrVals.EXISTS(21) THEN
5756     l_party_rec.SIC_CODE_TYPE:= AttrVals(21);
5757     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5758       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);
5759     END IF;
5760   END IF;
5761 
5762   IF AttrVals.EXISTS(22) THEN
5763     l_party_rec.CATEGORY_CODE:= AttrVals(22);
5764     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5765       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);
5766     END IF;
5767   END IF;
5768 
5769   IF AttrVals.EXISTS(29) THEN
5770     l_party_site_list(1).CITY:= AttrVals(29);
5771     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5772       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);
5773     END IF;
5774   END IF;
5775 
5776   IF AttrVals.EXISTS(30) THEN
5777     l_party_site_list(1).POSTAL_CODE:= AttrVals(30);
5778     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5779       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);
5780     END IF;
5781   END IF;
5782 
5783   IF AttrVals.EXISTS(31) THEN
5784     l_party_site_list(1).PROVINCE:= AttrVals(31);
5785     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5786       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);
5787     END IF;
5788   END IF;
5789 
5790   IF AttrVals.EXISTS(32) THEN
5791     l_party_site_list(1).STATE:= AttrVals(32);
5792     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5793       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);
5794     END IF;
5795   END IF;
5796 
5797   IF AttrVals.EXISTS(35) THEN
5798     l_party_site_list(1).COUNTY:= AttrVals(35);
5799     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5800       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);
5801     END IF;
5802   END IF;
5803 
5804   IF AttrVals.EXISTS(36) THEN
5805     l_party_site_list(1).COUNTRY:= AttrVals(36);
5806     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5807       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);
5808     END IF;
5809   END IF;
5810 
5811   IF AttrVals.EXISTS(44) THEN
5812     l_cpt_type := 'PHONE';
5813     FIRST := FALSE;
5814     FOR I in 1..l_cpt_list.COUNT LOOP
5815       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5816         l_cpt_list(I).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
5817         FIRST := TRUE;
5818     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5819       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);
5820       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);
5821     END IF;
5822       END IF;
5823     END LOOP;
5824     IF not FIRST THEN
5825       l_idx := l_cpt_list.COUNT+1;
5826       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5827       l_cpt_list(l_idx).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
5828     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5829       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);
5830       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);
5831     END IF;
5832     END IF;
5833   END IF;
5834 
5835   IF AttrVals.EXISTS(46) THEN
5836     l_cpt_type := 'PHONE';
5837     FIRST := FALSE;
5838     FOR I in 1..l_cpt_list.COUNT LOOP
5839       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5840         l_cpt_list(I).PHONE_AREA_CODE:= AttrVals(46);
5841         FIRST := TRUE;
5842     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5843       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);
5844       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);
5845     END IF;
5846       END IF;
5847     END LOOP;
5848     IF not FIRST THEN
5849       l_idx := l_cpt_list.COUNT+1;
5850       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5851       l_cpt_list(l_idx).PHONE_AREA_CODE:= AttrVals(46);
5852     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5853       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);
5854       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);
5855     END IF;
5856     END IF;
5857   END IF;
5858 
5859   IF AttrVals.EXISTS(47) THEN
5860     l_cpt_type := 'PHONE';
5861     FIRST := FALSE;
5862     FOR I in 1..l_cpt_list.COUNT LOOP
5863       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5864         l_cpt_list(I).PHONE_COUNTRY_CODE:= AttrVals(47);
5865         FIRST := TRUE;
5866     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5867       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);
5868       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);
5869     END IF;
5870       END IF;
5871     END LOOP;
5872     IF not FIRST THEN
5873       l_idx := l_cpt_list.COUNT+1;
5874       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5875       l_cpt_list(l_idx).PHONE_COUNTRY_CODE:= AttrVals(47);
5876     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5877       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);
5878       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);
5879     END IF;
5880     END IF;
5881   END IF;
5882 
5883   IF AttrVals.EXISTS(53) THEN
5884     l_party_rec.REFERENCE_USE_FLAG:= AttrVals(53);
5885     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5886       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);
5887     END IF;
5888   END IF;
5889 
5890   IF AttrVals.EXISTS(54) THEN
5891     l_party_rec.CORPORATION_CLASS:= AttrVals(54);
5892     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5893       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);
5894     END IF;
5895   END IF;
5896 
5897 
5898   IF AttrVals.EXISTS(14) THEN
5899      l_party_rec.PARTY_TYPE:= AttrVals(14); 
5900   END IF; 
5901   IF upper(p_api_name) = 'FIND_PARTIES' THEN
5902     find_parties(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,NULL,NULL,NULL,'N',
5904                x_search_ctx_id,x_num_matches);
5905   ELSIF upper(p_api_name) = 'FIND_PARTY_DETAILS' THEN
5906     find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5907                p_restrict_sql,p_match_type,p_search_merged,
5908                x_search_ctx_id,x_num_matches);
5909   ELSIF upper(p_api_name) = 'FIND_PERSONS' THEN
5910     find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5911                p_restrict_sql,p_match_type,p_search_merged,'N',
5912                x_search_ctx_id,x_num_matches);
5913   ELSIF upper(p_api_name) = 'GET_MATCHING_PARTY_SITES' THEN
5914     get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,
5915                p_restrict_sql,p_match_type,NULL,
5916                x_search_ctx_id,x_num_matches);
5917   ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACTS' THEN
5918     get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,
5919                p_restrict_sql,p_match_type,NULL,
5920                x_search_ctx_id,x_num_matches);
5921   ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACT_POINTS' THEN
5922     get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,
5923                p_restrict_sql,p_match_type,NULL,
5924                x_search_ctx_id,x_num_matches);
5925   END IF;
5926     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5927       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);
5928     END IF;
5929 EXCEPTION
5930   WHEN FND_API.G_EXC_ERROR THEN
5931     RAISE FND_API.G_EXC_ERROR;
5932   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5933     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5934   WHEN OTHERS THEN
5935     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5936     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.call_api_dynamic');
5937     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5938     FND_MSG_PUB.ADD;
5939     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5940 END call_api_dynamic; 
5941 
5942 
5943 PROCEDURE get_matching_party_sites (
5944         p_rule_id               IN      NUMBER,
5945         p_party_id              IN      NUMBER,
5946         p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,
5947         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5948         p_restrict_sql          IN      VARCHAR2,
5949         p_match_type            IN      VARCHAR2,
5950         p_dup_party_site_id     IN      NUMBER, 
5951         x_search_ctx_id         OUT     NUMBER,
5952         x_num_matches           OUT     NUMBER
5953 ) IS
5954   
5955   -- Strings to hold the generated Intermedia query strings
5956   l_party_contains_str VARCHAR2(32000); 
5957   l_match_idx NUMBER;
5958   l_party_site_contains_str VARCHAR2(32000);
5959   l_contact_contains_str VARCHAR2(32000);
5960   l_contact_pt_contains_str VARCHAR2(32000);
5961   l_tmp VARCHAR2(32000);
5962 
5963   -- Other local variables
5964   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5965   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5966   -- For Score calculation
5967   l_max_score NUMBER;
5968   l_entered_max_score NUMBER;
5969   FIRST BOOLEAN;
5970   l_search_ctx_id NUMBER; -- Generated Search Context ID
5971 
5972   l_TX13 VARCHAR2(2000);
5973   l_TX20 VARCHAR2(2000);
5974   l_TX9 VARCHAR2(2000);
5975   l_TX22 VARCHAR2(2000);
5976   l_TX1 VARCHAR2(2000);
5977   l_TX15 VARCHAR2(2000);
5978   l_TX21 VARCHAR2(2000);
5979   l_TX3 VARCHAR2(2000);
5980   l_TX10 VARCHAR2(2000);
5981   l_TX11 VARCHAR2(2000);
5982   l_TX4 VARCHAR2(2000);
5983   l_TX14 VARCHAR2(2000);
5984   H_SCORES HZ_PARTY_SEARCH.score_list;
5985 
5986   l_score NUMBER;
5987   l_idx NUMBER;
5988   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5989   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5990   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5991   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5992   l_party_id NUMBER;
5993   l_ps_party_id NUMBER;
5994   l_ct_party_id NUMBER;
5995   l_cpt_party_id NUMBER;
5996   l_cpt_ps_id NUMBER;
5997   l_cpt_contact_id NUMBER;
5998   l_cpt_type VARCHAR2(100);
5999   l_cpt_level VARCHAR2(100);
6000   l_party_site_id NUMBER;
6001   l_org_contact_id NUMBER;
6002   l_contact_pt_id NUMBER;
6003   l_cpt_level VARCHAR2(100);
6004   l_ps_contact_id NUMBER;
6005   l_party_max_score NUMBER;
6006   l_ps_max_score NUMBER;
6007   l_contact_max_score NUMBER;
6008   l_cpt_max_score NUMBER;
6009 
6010   defpt NUMBER :=0;
6011   defps NUMBER :=0;
6012   defct NUMBER :=0;
6013   defcpt NUMBER :=0;
6014   l_index NUMBER;
6015   l_match_ps_list HZ_PARTY_SEARCH.IDList;
6016   l_cnt NUMBER:=1;
6017 
6018   
6019   BEGIN
6020     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6021       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);
6022     END IF;
6023     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6024       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);
6025       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);
6026       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);
6027       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);
6028     END IF;
6029 
6030     -- ************************************
6031     -- STEP 1. Initialization and error checks
6032 
6033     l_match_str := ' AND ';
6034     IF p_match_type = 'AND' THEN
6035       l_match_str := ' AND ';
6036     ELSIF p_match_type = 'OR' THEN
6037       l_match_str := ' OR ';
6038     END IF;
6039     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);
6040     g_score_until_thresh := false;
6041     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
6042 
6043     -- ************************************************************
6044     -- STEP 2. Setup of intermedia query strings for Acquisition query
6045     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
6046     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
6047     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);
6048 
6049     -- Setup Search Context ID
6050     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
6051     x_search_ctx_id := l_search_ctx_id;
6052 
6053     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6054       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);
6055       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);
6056       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);
6057       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);
6058     END IF;
6059     IF l_party_site_contains_str IS NULL THEN
6060       defps := 1;
6061     END IF;
6062     IF l_contact_pt_contains_str IS NULL THEN
6063       defcpt := 1;
6064     END IF;
6065 
6066     IF l_party_site_contains_str IS NOT NULL THEN
6067       open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,'N', 'N',l_party_site_cur);
6068       LOOP
6069         FETCH l_party_site_cur INTO 
6070             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;
6071         EXIT WHEN l_party_site_cur%NOTFOUND;
6072       IF (p_dup_party_site_id IS NULL OR (
6073                 p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND 
6074                 l_party_site_id <> p_dup_party_site_id)) THEN  
6075             l_index := map_id(l_party_site_id);
6076             l_match_ps_list(l_cnt):= l_party_site_id ;
6077             l_cnt:=l_cnt+1;
6078             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);
6079             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);
6080     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6081       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);
6082       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);
6083       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);
6084     END IF;
6085       END IF; 
6086       END LOOP;
6087       CLOSE l_party_site_cur;
6088     END IF;
6089 
6090     IF l_contact_pt_contains_str IS NOT NULL THEN
6091     SAVEPOINT eval_start;
6092     IF l_match_str = ' AND ' OR (
6093         ((l_cpt_max_score/l_entered_max_score)<(72/805))
6094         ) THEN
6095       FORALL I in 1..l_match_ps_list.COUNT
6096            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
6097            values (l_search_ctx_id,l_match_ps_list(I));
6098         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');
6099     ELSE
6100       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
6101     END IF;
6102       LOOP
6103         FETCH l_contact_pt_cur INTO 
6104             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;
6105         EXIT WHEN l_contact_pt_cur%NOTFOUND;
6106       IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (
6107          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   
6108         l_index := map_id(l_cpt_ps_id);
6109         IF l_match_str = ' OR ' THEN
6110           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX3,l_TX4);
6111           IF NOT H_SCORES.EXISTS(l_index) THEN
6112             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);
6113           ELSE
6114             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
6115                H_SCORES(l_index).TOTAL_SCORE := 
6116                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
6117                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
6118             END IF;
6119           END IF;
6120         ELSE
6121           IF H_SCORES.EXISTS(l_index) THEN
6122             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX3,l_TX4);
6123             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
6124                H_SCORES(l_index).TOTAL_SCORE := 
6125                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
6126                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
6127             END IF;
6128           ELSIF defps=1 THEN
6129             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX3,l_TX4);
6130             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);
6131           END IF;
6132         END IF;
6133       END IF; 
6134     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6135       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);
6136       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);
6137       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);
6138     END IF;
6139       END LOOP;
6140       CLOSE l_contact_pt_cur;
6141     ROLLBACK TO eval_start;
6142     END IF;
6143     x_num_matches := 0;
6144     l_party_site_id := H_SCORES.FIRST;
6145     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6146       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);
6147     END IF;
6148     WHILE l_party_site_id IS NOT NULL LOOP
6149     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6150       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);
6151       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);
6152     END IF;
6153  IF l_match_str = ' OR ' THEN
6154 IF (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, (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  ELSE
6160     IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND
6161        H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND
6162        (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=(72/805) THEN
6163       INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) 
6164       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));
6165        x_num_matches := x_num_matches+1;
6166       END IF;
6167  END IF;
6168       l_party_site_id:=H_SCORES.NEXT(l_party_site_id);
6169     END LOOP;
6170     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6171       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);
6172     END IF;
6173 EXCEPTION
6174   WHEN FND_API.G_EXC_ERROR THEN
6175     RAISE FND_API.G_EXC_ERROR;
6176   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6177     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6178   WHEN OTHERS THEN
6179     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6180     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.get_matching_party_sites');
6181     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6182     FND_MSG_PUB.ADD;
6183     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6184 END get_matching_party_sites;
6185 
6186 
6187 PROCEDURE get_matching_contacts (
6188         p_rule_id               IN      NUMBER,
6189         p_party_id              IN      NUMBER,
6190         p_contact_list          IN      HZ_PARTY_SEARCH.CONTACT_LIST,
6191         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
6192         p_restrict_sql          IN      VARCHAR2,
6193         p_match_type            IN      VARCHAR2,
6194         p_dup_contact_id        IN      NUMBER, 
6195         x_search_ctx_id         OUT     NUMBER,
6196         x_num_matches           OUT     NUMBER
6197 ) IS
6198   
6199   -- Strings to hold the generated Intermedia query strings
6200   l_party_contains_str VARCHAR2(32000); 
6201   l_party_site_contains_str VARCHAR2(32000);
6202   l_contact_contains_str VARCHAR2(32000);
6203   l_contact_pt_contains_str VARCHAR2(32000);
6204   l_tmp VARCHAR2(32000);
6205 
6206   -- Other local variables
6207   l_match_str VARCHAR2(30); -- Match type (AND or OR)
6208   l_match_idx NUMBER;
6209   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
6210   -- For Score calculation
6211   l_max_score NUMBER;
6212   l_entered_max_score NUMBER;
6213   FIRST BOOLEAN;
6214   l_search_ctx_id NUMBER; -- Generated Search Context ID
6215 
6216   l_TX1 VARCHAR2(2000);
6217   l_TX3 VARCHAR2(2000);
6218   l_TX4 VARCHAR2(2000);
6219   H_SCORES HZ_PARTY_SEARCH.score_list;
6220 
6221   l_score NUMBER;
6222   l_idx NUMBER;
6223   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
6224   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
6225   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
6226   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
6227   l_party_id NUMBER;
6228   l_ps_party_id NUMBER;
6229   l_ct_party_id NUMBER;
6230   l_cpt_party_id NUMBER;
6231   l_cpt_ps_id NUMBER;
6232   l_cpt_contact_id NUMBER;
6233   l_cpt_type VARCHAR2(100);
6234   l_party_site_id NUMBER;
6235   l_org_contact_id NUMBER;
6236   l_contact_pt_id NUMBER;
6237 
6238   defpt NUMBER :=0;
6239   defps NUMBER :=0;
6240   defct NUMBER :=0;
6241   defcpt NUMBER :=0;
6242   l_index NUMBER;
6243   l_party_max_score NUMBER;
6244   l_ps_max_score NUMBER;
6245   l_contact_max_score NUMBER;
6246   l_cpt_max_score NUMBER;
6247   l_match_contact_list HZ_PARTY_SEARCH.IDList;
6248   l_cnt NUMBER:=1;
6249 
6250   
6251   BEGIN
6252     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6253       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);
6254     END IF;
6255     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6256       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);
6257       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);
6258       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);
6259       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);
6260     END IF;
6261 
6262     -- ************************************
6263     -- STEP 1. Initialization and error checks
6264 
6265     l_match_str := ' AND ';
6266     IF p_match_type = 'AND' THEN
6267       l_match_str := ' AND ';
6268     ELSIF p_match_type = 'OR' THEN
6269       l_match_str := ' OR ';
6270     END IF;
6271     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);
6272     g_score_until_thresh := false;
6273     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
6274 
6275     -- ************************************************************
6276     -- STEP 2. Setup of intermedia query strings for Acquisition query
6277     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
6278     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
6279     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);
6280 
6281     -- Setup Search Context ID
6282     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
6283     x_search_ctx_id := l_search_ctx_id;
6284 
6285     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6286       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);
6287       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);
6288       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);
6289       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);
6290     END IF;
6291     IF l_contact_contains_str IS NULL THEN
6292       defct := 1;
6293     END IF;
6294     IF l_contact_pt_contains_str IS NULL THEN
6295       defcpt := 1;
6296     END IF;
6297 
6298     IF l_contact_contains_str IS NOT NULL THEN
6299       open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);
6300       LOOP
6301         FETCH l_contact_cur INTO 
6302             l_org_contact_id, l_ct_party_id ;
6303         EXIT WHEN l_contact_cur%NOTFOUND;
6304       IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN 
6305         l_index := map_id(l_org_contact_id);
6306         l_match_contact_list(l_cnt):=l_org_contact_id;
6307         l_cnt:=l_cnt+1;
6308           l_score := GET_CONTACTS_SCORE(l_match_idx);
6309             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);
6310     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6311       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);
6312       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);
6313       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);
6314     END IF;
6315       END IF; 
6316       END LOOP;
6317       CLOSE l_contact_cur;
6318     END IF;
6319 
6320     IF l_contact_pt_contains_str IS NOT NULL THEN
6321     SAVEPOINT eval_start;
6322     IF l_match_str = ' AND ' OR (
6323         ((l_cpt_max_score/l_entered_max_score)<(72/805))
6324         ) THEN
6325       FORALL I in 1..l_match_contact_list.COUNT
6326            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
6327            values (l_search_ctx_id,l_match_contact_list(I));
6328       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');
6329     ELSE
6330       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
6331     END IF;
6332       LOOP
6333         FETCH l_contact_pt_cur INTO 
6334             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;
6335         EXIT WHEN l_contact_pt_cur%NOTFOUND;
6336       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 
6337         l_index := map_id(l_cpt_contact_id);
6338         IF l_match_str = ' OR ' THEN
6339           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX3,l_TX4);
6340           IF NOT H_SCORES.EXISTS(l_index) THEN
6341             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);
6342           ELSE
6343             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
6344                H_SCORES(l_index).TOTAL_SCORE := 
6345                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
6346                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
6347             END IF;
6348           END IF;
6349         ELSE
6350           IF H_SCORES.EXISTS(l_index) THEN
6351             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX3,l_TX4);
6352             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
6353                H_SCORES(l_index).TOTAL_SCORE := 
6354                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
6355                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
6356             END IF;
6357           ELSIF defps=1 THEN
6358             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX3,l_TX4);
6359             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);
6360           END IF;
6361         END IF;
6362         END IF; 
6363       END LOOP;
6364     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6365       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);
6366       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);
6367       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);
6368     END IF;
6369       CLOSE l_contact_pt_cur;
6370     END IF;
6371     x_num_matches := 0;
6372     l_org_contact_id := H_SCORES.FIRST;
6373     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6374       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);
6375     END IF;
6376     WHILE l_org_contact_id IS NOT NULL LOOP
6377       IF l_match_str = ' OR ' THEN
6378     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6379       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);
6380       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);
6381     END IF;
6382         IF (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, (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       ELSE
6388            IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND
6389            H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND
6390            (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(72/805) THEN
6391           INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) 
6392           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));
6393           x_num_matches := x_num_matches+1;
6394         END IF;
6395       END IF;
6396       l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);
6397     END LOOP;
6398     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6399       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);
6400     END IF;
6401 EXCEPTION
6402   WHEN FND_API.G_EXC_ERROR THEN
6403     RAISE FND_API.G_EXC_ERROR;
6404   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6405     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6406   WHEN OTHERS THEN
6407     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6408     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.get_matching_contacts');
6409     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6410     FND_MSG_PUB.ADD;
6411     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6412 END get_matching_contacts;
6413 
6414 
6415 PROCEDURE get_matching_contact_points (
6416         p_rule_id               IN      NUMBER,
6417         p_party_id              IN      NUMBER,
6418         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
6419         p_restrict_sql          IN      VARCHAR2,
6420         p_match_type            IN      VARCHAR2,
6421         p_dup_contact_point_id  IN      NUMBER, 
6422         x_search_ctx_id         OUT     NUMBER,
6423         x_num_matches           OUT     NUMBER
6424 ) IS
6425 
6426 
6427   -- Strings to hold the generated Intermedia query strings
6428   l_contact_pt_contains_str VARCHAR2(32000);
6429   l_tmp VARCHAR2(32000);
6430 
6431   -- Other local variables
6432   l_match_str VARCHAR2(30); -- Match type (AND or OR)
6433   l_match_idx NUMBER;
6434   -- For Score calculation
6435   l_entered_max_score NUMBER;
6436   l_search_ctx_id NUMBER; -- Generated Search Context ID
6437 
6438   l_TX1 VARCHAR2(2000);
6439   l_TX3 VARCHAR2(2000);
6440   l_TX4 VARCHAR2(2000);
6441 
6442   l_score NUMBER;
6443   l_idx NUMBER;
6444   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
6445   l_cpt_party_id NUMBER;
6446   l_cpt_ps_id NUMBER;
6447   l_cpt_contact_id NUMBER;
6448   l_contact_pt_id NUMBER;
6449   l_cpt_type VARCHAR2(100);
6450   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
6451   H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;
6452   H_SCORE  HZ_PARTY_SEARCH.IDList;
6453 
6454   cnt NUMBER :=0;
6455   l_party_max_score NUMBER;
6456   l_ps_max_score NUMBER;
6457   l_contact_max_score NUMBER;
6458   l_cpt_max_score NUMBER;
6459 
6460   
6461   BEGIN
6462     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6463       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);
6464     END IF;
6465     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6466       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);
6467       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);
6468       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);
6469       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);
6470     END IF;
6471 
6472     -- ************************************
6473     -- STEP 1. Initialization and error checks
6474 
6475     l_match_str := ' AND ';
6476     IF p_match_type = 'AND' THEN
6477       l_match_str := ' AND ';
6478     ELSIF p_match_type = 'OR' THEN
6479       l_match_str := ' OR ';
6480     END IF;
6481     l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, 
6482        HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
6483        p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
6484     g_score_until_thresh := false;
6485     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
6486 
6487     -- ************************************************************
6488     -- STEP 2. Setup of intermedia query strings for Acquisition query
6489     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
6490     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);
6491 
6492     -- Setup Search Context ID
6493     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
6494     x_search_ctx_id := l_search_ctx_id;
6495     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6496       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);
6497       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);
6498       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);
6499     END IF;
6500 
6501     IF l_contact_pt_contains_str IS NOT NULL THEN
6502       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
6503       cnt := 1;
6504       LOOP
6505         FETCH l_contact_pt_cur INTO 
6506             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;
6507         EXIT WHEN l_contact_pt_cur%NOTFOUND;
6508         IF (p_dup_contact_point_id IS NULL OR (
6509                p_dup_contact_point_id IS NOT NULL AND 
6510                l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND 
6511                p_dup_contact_point_id <>  l_contact_pt_id)) THEN   
6512             H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;
6513             H_PARTY_ID(cnt) := l_cpt_party_id;
6514             H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX3,l_TX4);
6515             cnt := cnt+1;
6516     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6517       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);
6518       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);
6519       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);
6520     END IF;
6521         END IF; 
6522       END LOOP;
6523       CLOSE l_contact_pt_cur;
6524     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6525       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);
6526     END IF;
6527       x_num_matches := 0; 
6528       FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP
6529     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6530       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);
6531       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);
6532     END IF;
6533         IF (H_SCORE(I)/l_entered_max_score) >= (72/805) THEN
6534         INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
6535             l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);
6536             x_num_matches := x_num_matches + 1; 
6537         END IF;
6538       END LOOP; 
6539     END IF;
6540     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6541       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);
6542     END IF;
6543 EXCEPTION
6544   WHEN FND_API.G_EXC_ERROR THEN
6545     RAISE FND_API.G_EXC_ERROR;
6546   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6547     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6548   WHEN OTHERS THEN
6549     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6550     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.get_matching_contact_points');
6551     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6552     FND_MSG_PUB.ADD;
6553     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6554 END get_matching_contact_points;
6555 
6556    /**********************************************************
6557    This procedure finds the score details for a specific party that 
6558    matched 
6559 
6560    **********************************************************/
6561 
6562 PROCEDURE get_score_details (
6563         p_rule_id               IN      NUMBER,
6564         p_party_id              IN      NUMBER,
6565         p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
6566         p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
6567         p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
6568         p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
6569         x_search_ctx_id         IN OUT  NUMBER
6570 ) IS
6571 
6572   -- Strings to hold the generated Intermedia query strings
6573   l_party_contains_str VARCHAR2(32000); 
6574   l_party_site_contains_str VARCHAR2(32000);
6575   l_contact_contains_str VARCHAR2(32000);
6576   l_contact_pt_contains_str VARCHAR2(32000);
6577   l_tmp VARCHAR2(32000);
6578 
6579   -- Other local variables
6580   l_match_str VARCHAR2(30); -- Match type (AND or OR)
6581   -- For Score calculation
6582   l_max_score NUMBER;
6583   l_entered_max_score NUMBER;
6584   FIRST BOOLEAN;
6585   l_search_ctx_id NUMBER; -- Generated Search Context ID
6586 
6587   l_TX39 VARCHAR2(2000);
6588   l_max_TX39 VARCHAR2(2000);
6589   l_TX13 VARCHAR2(2000);
6590   l_max_TX13 VARCHAR2(2000);
6591   l_TX20 VARCHAR2(2000);
6592   l_max_TX20 VARCHAR2(2000);
6593   l_TX42 VARCHAR2(2000);
6594   l_max_TX42 VARCHAR2(2000);
6595   l_TX32 VARCHAR2(2000);
6596   l_max_TX32 VARCHAR2(2000);
6597   l_TX46 VARCHAR2(2000);
6598   l_max_TX46 VARCHAR2(2000);
6599   l_TX9 VARCHAR2(2000);
6600   l_max_TX9 VARCHAR2(2000);
6601   l_TX22 VARCHAR2(2000);
6602   l_max_TX22 VARCHAR2(2000);
6603   l_TX43 VARCHAR2(2000);
6604   l_max_TX43 VARCHAR2(2000);
6605   l_TX44 VARCHAR2(2000);
6606   l_max_TX44 VARCHAR2(2000);
6607   l_TX35 VARCHAR2(2000);
6608   l_max_TX35 VARCHAR2(2000);
6609   l_TX1 VARCHAR2(2000);
6610   l_max_TX1 VARCHAR2(2000);
6611   l_TX158 VARCHAR2(2000);
6612   l_max_TX158 VARCHAR2(2000);
6613   l_TX47 VARCHAR2(2000);
6614   l_max_TX47 VARCHAR2(2000);
6615   l_TX15 VARCHAR2(2000);
6616   l_max_TX15 VARCHAR2(2000);
6617   l_TX21 VARCHAR2(2000);
6618   l_max_TX21 VARCHAR2(2000);
6619   l_TX3 VARCHAR2(2000);
6620   l_max_TX3 VARCHAR2(2000);
6621   l_TX10 VARCHAR2(2000);
6622   l_max_TX10 VARCHAR2(2000);
6623   l_TX11 VARCHAR2(2000);
6624   l_max_TX11 VARCHAR2(2000);
6625   l_TX4 VARCHAR2(2000);
6626   l_max_TX4 VARCHAR2(2000);
6627   l_TX157 VARCHAR2(2000);
6628   l_max_TX157 VARCHAR2(2000);
6629   l_TX40 VARCHAR2(2000);
6630   l_max_TX40 VARCHAR2(2000);
6631   l_TX34 VARCHAR2(2000);
6632   l_max_TX34 VARCHAR2(2000);
6633   l_TX48 VARCHAR2(2000);
6634   l_max_TX48 VARCHAR2(2000);
6635   l_TX156 VARCHAR2(2000);
6636   l_max_TX156 VARCHAR2(2000);
6637   l_TX14 VARCHAR2(2000);
6638   l_max_TX14 VARCHAR2(2000);
6639   H_SCORES HZ_PARTY_SEARCH.score_list;
6640 
6641   l_score NUMBER;
6642   l_match_idx NUMBER;
6643   l_idx NUMBER;
6644   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
6645   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
6646   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
6647   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
6648   l_party_id NUMBER;
6649   l_ps_party_id NUMBER;
6650   l_ct_party_id NUMBER;
6651   l_cpt_party_id NUMBER;
6652   l_cpt_ps_id NUMBER;
6653   l_cpt_contact_id NUMBER;
6654   l_cpt_type VARCHAR2(100);
6655   l_party_site_id NUMBER;
6656   l_org_contact_id NUMBER;
6657   l_contact_pt_id NUMBER;
6658   l_ps_contact_id NUMBER;
6659   l_max_id NUMBER;
6660   l_max_idx NUMBER;
6661 
6662   l_index NUMBER;
6663   l_party_max_score NUMBER;
6664   l_ps_max_score NUMBER;
6665   l_contact_max_score NUMBER;
6666   l_cpt_max_score NUMBER;
6667 
6668   --Fix for bug 4417124 
6669   l_use_contact_addr_info BOOLEAN:=TRUE;
6670   l_use_contact_cpt_info  BOOLEAN:=TRUE;
6671   l_TX35_new VARCHAR2(4000);
6672 
6673   BEGIN
6674 
6675     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6676       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);
6677     END IF;
6678     -- ************************************
6679     -- STEP 1. Initialization and error checks
6680 
6681     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);
6682     g_score_until_thresh := false;
6683     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
6684     -- ************************************************************
6685     -- STEP 2. Setup of intermedia query strings for Acquisition query
6686     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
6687     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
6688     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
6689     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
6690 
6691     -- Setup Search Context ID
6692     IF x_search_ctx_id IS NULL THEN
6693       SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
6694       x_search_ctx_id := l_search_ctx_id;
6695     ELSE
6696       l_search_ctx_id := x_search_ctx_id;
6697     END IF;
6698 
6699     open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);
6700     LOOP 
6701         FETCH l_party_cur INTO
6702            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;
6703         EXIT WHEN l_party_cur%NOTFOUND;
6704   l_TX35_new:=RTRIM(LTRIM(l_TX35));
6705   l_TX35_new:=(CASE l_TX35_new WHEN 'SYNC' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);
6706           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_new,l_TX39,l_TX158,l_TX40,l_TX43,l_TX42,l_TX44,l_TX46,l_TX47,l_TX48,l_TX156,l_TX157,1);
6707     END LOOP;
6708     CLOSE l_party_cur;
6709 
6710     IF l_party_site_contains_str IS NOT NULL THEN
6711       l_max_score := 0;
6712       l_max_id := 0;
6713       l_max_idx := 0;
6714       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_addr_info THEN
6715         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'Y','N',l_party_site_cur);
6716       ELSE
6717         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'N','N',l_party_site_cur);
6718       END IF;
6719       LOOP
6720         FETCH l_party_site_cur INTO 
6721             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;
6722         EXIT WHEN l_party_site_cur%NOTFOUND;
6723         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);
6724         IF l_score > l_max_score THEN
6725           l_max_score := l_score;
6726           l_max_id := l_party_site_id;
6727           l_max_idx := l_match_idx;
6728           l_max_TX13 := l_TX13;
6729           l_max_TX20 := l_TX20;
6730           l_max_TX9 := l_TX9;
6731           l_max_TX22 := l_TX22;
6732           l_max_TX15 := l_TX15;
6733           l_max_TX21 := l_TX21;
6734           l_max_TX10 := l_TX10;
6735           l_max_TX11 := l_TX11;
6736           l_max_TX14 := l_TX14;
6737         END IF;
6738       END LOOP;
6739       CLOSE l_party_site_cur;
6740       IF l_max_score>0 THEN
6741         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);
6742       END IF;
6743     END IF;
6744 
6745     IF l_contact_contains_str IS NOT NULL THEN
6746       l_max_score := 0;
6747       l_max_id := 0;
6748       l_max_idx := 0;
6749       open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);
6750       LOOP
6751         FETCH l_contact_cur INTO 
6752             l_org_contact_id, l_ct_party_id ;
6753         EXIT WHEN l_contact_cur%NOTFOUND;
6754         l_score := GET_CONTACTS_SCORE(l_match_idx);
6755         IF l_score > l_max_score THEN
6756           l_max_score := l_score;
6757           l_max_id := l_org_contact_id;
6758           l_max_idx := l_match_idx;
6759         END IF;
6760       END LOOP;
6761       CLOSE l_contact_cur;
6762       IF l_max_score>0 THEN
6763         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);
6764       END IF;
6765     END IF;
6766 
6767     IF l_contact_pt_contains_str IS NOT NULL THEN
6768       l_max_score := 0;
6769       l_max_id := 0;
6770       l_max_idx := 0;
6771       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_cpt_info THEN
6772         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'Y','N',l_contact_pt_cur);
6773       ELSE
6774         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'N','N',l_contact_pt_cur);
6775       END IF;
6776       LOOP
6777         FETCH l_contact_pt_cur INTO 
6778             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;
6779         EXIT WHEN l_contact_pt_cur%NOTFOUND;
6780         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX3,l_TX4);
6781         IF l_score > l_max_score THEN
6782           l_max_score := l_score;
6783           l_max_id := l_contact_pt_id;
6784           l_max_idx := l_match_idx;
6785           l_max_TX1 := l_TX1;
6786           l_max_TX3 := l_TX3;
6787           l_max_TX4 := l_TX4;
6788         END IF;
6789       END LOOP;
6790       IF l_max_score>0 THEN
6791         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);
6792       END IF;
6793       CLOSE l_contact_pt_cur;
6794     END IF;
6795     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6796       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);
6797     END IF;
6798 EXCEPTION
6799   WHEN FND_API.G_EXC_ERROR THEN
6800     RAISE FND_API.G_EXC_ERROR;
6801   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6802     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6803   WHEN OTHERS THEN
6804     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6805     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_34.get_score_details');
6806     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6807     FND_MSG_PUB.ADD;
6808     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6809 END get_score_details;
6810 
6811 
6812 /************************************************
6813   This procedure retrieves the match rule attributes into 
6814   the search record structures
6815 ************************************************/
6816 
6817 PROCEDURE get_party_for_search (
6818         p_party_id              IN      NUMBER,
6819         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6820         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6821         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6822         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6823 ) IS
6824   l_party_id NUMBER;
6825   l_party_site_ids HZ_PARTY_SEARCH.IDList;
6826   l_contact_ids HZ_PARTY_SEARCH.IDList;
6827   l_contact_pt_ids HZ_PARTY_SEARCH.IDList;
6828   ps NUMBER :=1;
6829   cpt NUMBER :=1;
6830   ct NUMBER :=1;
6831   l_use_contact_info varchar2(1);
6832 BEGIN
6833 
6834     l_use_contact_info := 'Y';
6835   IF nvl(FND_PROFILE.VALUE('HZ_DQM_REL_PARTY_MATCH'),'N')='Y' THEN
6836     l_use_contact_info := 'N';
6837   END IF;
6838   l_party_id := p_party_id;
6839   FOR PARTY_SITES IN (
6840  SELECT party_site_id FROM (
6841      SELECT party_site_id,identifying_address_flag
6842       FROM HZ_PARTY_SITES
6843       WHERE party_id = p_party_id
6844       AND (status is null OR status = 'A') 
6845       AND identifying_address_flag='Y'
6846       UNION
6847 
6848      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
6849       FROM HZ_PARTY_SITES
6850       WHERE party_id = p_party_id
6851       AND (status is null OR status = 'A') 
6852       AND (identifying_address_flag IS NULL OR identifying_address_flag = 'N')
6853       AND ROWNUM<6
6854       UNION
6855 
6856      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
6857       FROM HZ_PARTY_SITES
6858       WHERE (status is null OR status = 'A') 
6859       AND party_id in (
6860         SELECT party_id
6861         FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
6862         WHERE HZ_RELATIONSHIPS.object_id = p_party_id
6863         AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6864         AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6865         AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6866         and l_use_contact_info = 'Y'
6867      ) 
6868      AND ROWNUM<6
6869 ) order by identifying_address_flag desc
6870     ) LOOP
6871       l_party_site_ids(ps) := PARTY_SITES.party_site_id;
6872       ps:=ps+1;
6873   END LOOP;
6874     FOR CONTACT_POINTS IN (
6875       SELECT CONTACT_POINT_ID
6876       FROM HZ_CONTACT_POINTS 
6877       WHERE PRIMARY_FLAG = 'Y'
6878       AND owner_table_name = 'HZ_PARTIES'
6879       AND owner_table_id = p_party_id
6880 
6881       UNION
6882 
6883       SELECT CONTACT_POINT_ID
6884       FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS 
6885       WHERE PRIMARY_FLAG = 'Y'
6886       AND owner_table_name = 'HZ_PARTIES'
6887       AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id
6888       AND HZ_RELATIONSHIPS.object_id = p_party_id
6889       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6890       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6891       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6892         and l_use_contact_info = 'Y'
6893       AND ROWNUM<6
6894       UNION
6895 
6896       SELECT CONTACT_POINT_ID
6897       FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES  
6898       WHERE PRIMARY_FLAG = 'Y'
6899       AND owner_table_name = 'HZ_PARTY_SITES'
6900       AND owner_table_id = party_site_id 
6901       AND PARTY_ID = p_party_id 
6902       AND IDENTIFYING_ADDRESS_FLAG = 'Y') LOOP
6903       l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;
6904       cpt := cpt+1;
6905     END LOOP;
6906     get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,
6907           x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);
6908 EXCEPTION
6909   WHEN FND_API.G_EXC_ERROR THEN
6910     RAISE FND_API.G_EXC_ERROR;
6911   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6912     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6913   WHEN OTHERS THEN
6914     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6915     FND_MESSAGE.SET_TOKEN('PROC','get_party_for_search');
6916     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6917     FND_MSG_PUB.ADD;
6918     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6919 END get_party_for_search;
6920 
6921 PROCEDURE get_search_criteria (
6922         p_party_id              IN      NUMBER,
6923         p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,
6924         p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,
6925         p_contact_pt_ids        IN      HZ_PARTY_SEARCH.IDList,
6926         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6927         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6928         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6929         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6930 ) IS
6931 BEGIN
6932 
6933    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6934       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);
6935     END IF;
6936     IF p_party_id IS NOT NULL THEN
6937    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6938       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);
6939     END IF;
6940       get_party_rec(p_party_id, x_party_search_rec);
6941     END IF;
6942     IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN
6943    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6944       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);
6945     END IF;
6946       get_party_site_rec(p_party_site_ids, x_party_site_list);
6947     END IF;
6948     IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN
6949    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6950       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);
6951     END IF;
6952       get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);
6953     END IF;
6954 EXCEPTION
6955   WHEN FND_API.G_EXC_ERROR THEN
6956     RAISE FND_API.G_EXC_ERROR;
6957   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6958     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6959   WHEN OTHERS THEN
6960     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6961     FND_MESSAGE.SET_TOKEN('PROC','get_search_criteria');
6962     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6963     FND_MSG_PUB.ADD;
6964     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6965 END get_search_criteria;
6966 
6967 
6968 /************************************************
6969   This procedure retrieves the match rule party attributes into 
6970   the party search record structure 
6971 ************************************************/
6972 
6973 PROCEDURE get_party_rec (
6974         p_party_id              IN      NUMBER,
6975         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type
6976 ) IS
6977     l_party_type VARCHAR2(255);
6978 BEGIN
6979 
6980    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6981       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);
6982     END IF;
6983     SELECT PARTY_TYPE INTO l_party_type
6984     FROM HZ_PARTIES
6985     WHERE PARTY_ID = p_party_id;
6986 
6987    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6988       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);
6989     END IF;
6990     IF l_party_type = 'ORGANIZATION' THEN
6991       SELECT 
6992         translate(HZ_PARTIES.CATEGORY_CODE, '%',' ')
6993        ,translate(HZ_ORGANIZATION_PROFILES.CORPORATION_CLASS, '%',' ')
6994        ,translate(HZ_PARTIES.PARTY_NUMBER, '%',' ')
6995        ,translate(HZ_PARTIES.PARTY_TYPE, '%',' ')
6996        ,translate(HZ_PARTIES.REFERENCE_USE_FLAG, '%',' ')
6997        ,translate(HZ_ORGANIZATION_PROFILES.SIC_CODE, '%',' ')
6998        ,translate(HZ_ORGANIZATION_PROFILES.SIC_CODE_TYPE, '%',' ')
6999        ,translate(HZ_ORGANIZATION_PROFILES.TAX_NAME, '%',' ')
7000        ,translate(HZ_ORGANIZATION_PROFILES.TAX_REFERENCE, '%',' ')
7001       INTO 
7002         x_party_search_rec.CATEGORY_CODE
7003        ,x_party_search_rec.CORPORATION_CLASS
7004        ,x_party_search_rec.PARTY_NUMBER
7005        ,x_party_search_rec.PARTY_TYPE
7006        ,x_party_search_rec.REFERENCE_USE_FLAG
7007        ,x_party_search_rec.SIC_CODE
7008        ,x_party_search_rec.SIC_CODE_TYPE
7009        ,x_party_search_rec.TAX_NAME
7010        ,x_party_search_rec.TAX_REFERENCE
7011       FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES
7012       WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id
7013       AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL
7014       AND HZ_PARTIES.party_id = p_party_id;
7015     ELSIF l_party_type = 'PERSON' THEN
7016       SELECT 
7017         translate(HZ_PARTIES.CATEGORY_CODE, '%',' ')
7018        ,translate(HZ_PARTIES.PARTY_NUMBER, '%',' ')
7019        ,translate(HZ_PARTIES.PARTY_TYPE, '%',' ')
7020        ,translate(HZ_PARTIES.REFERENCE_USE_FLAG, '%',' ')
7021        ,translate(HZ_PERSON_PROFILES.TAX_NAME, '%',' ')
7022        ,translate(HZ_PERSON_PROFILES.TAX_REFERENCE, '%',' ')
7023       INTO 
7024         x_party_search_rec.CATEGORY_CODE
7025        ,x_party_search_rec.PARTY_NUMBER
7026        ,x_party_search_rec.PARTY_TYPE
7027        ,x_party_search_rec.REFERENCE_USE_FLAG
7028        ,x_party_search_rec.TAX_NAME
7029        ,x_party_search_rec.TAX_REFERENCE
7030       FROM HZ_PARTIES, HZ_PERSON_PROFILES
7031       WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id
7032       AND HZ_PERSON_PROFILES.effective_end_date is NULL
7033       AND HZ_PARTIES.party_id = p_party_id;
7034     END IF;
7035     x_party_search_rec.PARTY_TYPE := l_party_type;
7036    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7037       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);
7038     END IF;
7039     x_party_search_rec.ALL_ACCOUNT_NAMES:=
7040        HZ_PARTY_ACQUIRE.get_account_info(p_party_id , 'PARTY','ALL_ACCOUNT_NAMES');
7041     x_party_search_rec.ALL_ACCOUNT_NUMBERS:=
7042        HZ_PARTY_ACQUIRE.get_account_info(p_party_id , 'PARTY','ALL_ACCOUNT_NUMBERS');
7043     x_party_search_rec.PARTY_ALL_NAMES:=
7044        HZ_PARTY_ACQUIRE.get_known_as(p_party_id , 'PARTY','PARTY_ALL_NAMES');
7045 
7046 EXCEPTION
7047   WHEN OTHERS THEN
7048     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
7049     FND_MESSAGE.SET_TOKEN('PROC','get_party_rec');
7050     FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_id);
7051     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7052     FND_MSG_PUB.ADD;
7053     RAISE FND_API.G_EXC_ERROR;
7054 END get_party_rec;
7055 
7056 /************************************************
7057   This procedure retrieves the match rule party site attributes into 
7058   the party site search record structure 
7059 ************************************************/
7060 
7061 PROCEDURE get_party_site_rec (
7062         p_party_site_ids       IN      HZ_PARTY_SEARCH.IDList,
7063         x_party_site_list      OUT NOCOPY HZ_PARTY_SEARCH.party_site_list
7064 ) IS
7065   CURSOR c_party_sites(cp_party_site_id NUMBER) IS
7066     SELECT party_site_id
7067       ,translate(HZ_LOCATIONS.CITY, '%',' ')
7068       ,translate(HZ_LOCATIONS.COUNTRY, '%',' ')
7069       ,translate(HZ_LOCATIONS.COUNTY, '%',' ')
7070       ,translate(HZ_LOCATIONS.POSTAL_CODE, '%',' ')
7071       ,translate(HZ_LOCATIONS.PROVINCE, '%',' ')
7072       ,translate(HZ_LOCATIONS.STATE, '%',' ')
7073     FROM HZ_PARTY_SITES, HZ_LOCATIONS
7074     WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id
7075     AND   HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;
7076 
7077   I NUMBER;
7078   J NUMBER:=1;
7079   l_party_site_id NUMBER;
7080 
7081 BEGIN
7082 
7083    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7084       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);
7085     END IF;
7086     FOR I IN 1..p_party_site_ids.COUNT LOOP
7087       l_party_site_id := p_party_site_ids(I);
7088       OPEN c_party_sites(p_party_site_ids(I));
7089       LOOP
7090         FETCH c_party_sites INTO
7091              l_party_site_id
7092            ,x_party_site_list(J).CITY
7093            ,x_party_site_list(J).COUNTRY
7094            ,x_party_site_list(J).COUNTY
7095            ,x_party_site_list(J).POSTAL_CODE
7096            ,x_party_site_list(J).PROVINCE
7097            ,x_party_site_list(J).STATE
7098         ;
7099         EXIT WHEN c_party_sites%NOTFOUND;
7100 
7101    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7102       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);
7103     END IF;
7104         J:=J+1;
7105 
7106       END LOOP;
7107       CLOSE c_party_sites;
7108     END LOOP;
7109 
7110 EXCEPTION
7111   WHEN OTHERS THEN
7112     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
7113     FND_MESSAGE.SET_TOKEN('PROC','get_party_site_rec');
7114     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_party_site_id);
7115     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7116     FND_MSG_PUB.ADD;
7117     RAISE FND_API.G_EXC_ERROR;
7118 END get_party_site_rec;
7119 
7120 /************************************************
7121   This procedure retrieves the match rule contact attributes into 
7122   the contact search record structure 
7123 ************************************************/
7124 
7125 PROCEDURE get_contact_rec (
7126         p_contact_ids       IN      HZ_PARTY_SEARCH.IDList,
7127         x_contact_list      OUT NOCOPY HZ_PARTY_SEARCH.contact_list
7128 ) IS
7129   CURSOR c_contacts(cp_org_contact_id NUMBER) IS
7130     SELECT org_contact_id
7131     FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES
7132     WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id
7133     AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
7134     AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
7135     AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
7136     AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
7137     AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id
7138     AND HZ_PERSON_PROFILES.effective_end_date IS NULL;
7139 
7140   I NUMBER;
7141   l_org_contact_id NUMBER;
7142   J NUMBER:=1;
7143   BEGIN
7144 
7145    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7146       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);
7147     END IF;
7148     FOR I IN 1..p_contact_ids.COUNT LOOP
7149       l_org_contact_id := p_contact_ids(I);
7150       OPEN c_contacts(p_contact_ids(I));
7151       LOOP
7152         FETCH c_contacts INTO
7153              l_org_contact_id
7154         ;
7155         EXIT WHEN c_contacts%NOTFOUND;
7156 
7157    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7158       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);
7159     END IF;
7160 
7161         J:=J+1;
7162       END LOOP;
7163       CLOSE c_contacts;
7164     END LOOP;
7165 
7166 EXCEPTION
7167   WHEN OTHERS THEN
7168     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
7169     FND_MESSAGE.SET_TOKEN('PROC','get_contact_rec');
7170     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_org_contact_id);
7171     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7172     FND_MSG_PUB.ADD;
7173     RAISE FND_API.G_EXC_ERROR;
7174 END get_contact_rec;
7175 
7176 /************************************************
7177   This procedure retrieves the match rule contact point attributes into 
7178   the contact point search record structure 
7179 ************************************************/
7180 
7181 PROCEDURE get_contact_point_rec (
7182         p_contact_point_ids     IN  HZ_PARTY_SEARCH.IDList,
7183         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
7184 ) IS
7185 
7186   -- Cursor to fetch primary contact points for party
7187   CURSOR c_cpts(cp_contact_point_id NUMBER) IS
7188     SELECT contact_point_id, contact_point_type
7189       ,translate(HZ_CONTACT_POINTS.PHONE_AREA_CODE, '%',' ')
7190       ,translate(HZ_CONTACT_POINTS.PHONE_COUNTRY_CODE, '%',' ')
7191     FROM HZ_CONTACT_POINTS
7192     WHERE contact_point_id = cp_contact_point_id;
7193 
7194   I NUMBER;
7195   l_contact_point_id NUMBER;
7196   J NUMBER:=1;
7197   BEGIN
7198 
7199    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7200       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);
7201     END IF;
7202     FOR I in 1..p_contact_point_ids.COUNT LOOP
7203       l_contact_point_id := p_contact_point_ids(I);
7204       OPEN c_cpts(p_contact_point_ids(I));
7205       LOOP
7206         FETCH c_cpts INTO
7207              l_contact_point_id, x_contact_point_list(J).contact_point_type
7208              ,x_contact_point_list(J).PHONE_AREA_CODE
7209              ,x_contact_point_list(J).PHONE_COUNTRY_CODE
7210         ;
7211         EXIT WHEN c_cpts%NOTFOUND;
7212 
7213    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7214       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);
7215     END IF;
7216         x_contact_point_list(J).FLEX_FORMAT_PHONE_NUMBER:=
7217        HZ_PARTY_ACQUIRE.get_phone_number(l_contact_point_id , 'CONTACT_POINTS','FLEX_FORMAT_PHONE_NUMBER');
7218         J:=J+1;
7219 
7220       END LOOP;
7221       CLOSE c_cpts;
7222     END LOOP;
7223 
7224 EXCEPTION
7225   WHEN OTHERS THEN
7226     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
7227     FND_MESSAGE.SET_TOKEN('PROC','get_contact_point_rec');
7228     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_contact_point_id);
7229     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7230     FND_MSG_PUB.ADD;
7231     RAISE FND_API.G_EXC_ERROR;
7232 END get_contact_point_rec;
7233 
7234 /************************************************
7235   This procedure maps a search record from the logical
7236   record structure to the stage schema structure 
7237   for the PARTY Entity after applying 
7238   the defined transformations
7239 ************************************************/
7240 
7241 PROCEDURE MAP_PARTY_REC( 
7242     p_search_ctx IN BOOLEAN,
7243     p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, 
7244     x_entered_max_score OUT NUMBER,
7245     x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type
7246   ) IS 
7247   tmp VARCHAR2(4000);
7248   l_party_name VARCHAR2(4000);
7249 BEGIN
7250    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7251       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);
7252     END IF;
7253    IF p_search_ctx THEN
7254      x_stage_rec.TX8 := NULL;
7255      g_other_party_level_attribs:=FALSE;
7256     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL 
7257     OR p_search_rec.PARTY_NUMBER IS NOT NULL 
7258     OR p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL 
7259     OR p_search_rec.TAX_NAME IS NOT NULL 
7260     OR p_search_rec.TAX_REFERENCE IS NOT NULL 
7261     OR p_search_rec.SIC_CODE IS NOT NULL 
7262     OR p_search_rec.SIC_CODE_TYPE IS NOT NULL 
7263     OR p_search_rec.CATEGORY_CODE IS NOT NULL 
7264     OR p_search_rec.REFERENCE_USE_FLAG IS NOT NULL 
7265     OR p_search_rec.CORPORATION_CLASS IS NOT NULL 
7266     THEN
7267       g_other_party_level_attribs:=TRUE;
7268     END IF;
7269      x_entered_max_score:=0;
7270     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
7271       x_entered_max_score := x_entered_max_score+60;
7272     END IF;
7273     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
7274       x_entered_max_score := x_entered_max_score+100;
7275     END IF;
7276     IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
7277       x_entered_max_score := x_entered_max_score+100;
7278     END IF;
7279     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
7280       x_entered_max_score := x_entered_max_score+60;
7281     END IF;
7282     IF p_search_rec.TAX_NAME IS NOT NULL THEN 
7283       x_entered_max_score := x_entered_max_score+30;
7284     END IF;
7285     IF p_search_rec.TAX_REFERENCE IS NOT NULL THEN 
7286       x_entered_max_score := x_entered_max_score+80;
7287     END IF;
7288     IF p_search_rec.SIC_CODE IS NOT NULL THEN 
7289       x_entered_max_score := x_entered_max_score+30;
7290     END IF;
7291     IF p_search_rec.SIC_CODE_TYPE IS NOT NULL THEN 
7292       x_entered_max_score := x_entered_max_score+10;
7293     END IF;
7294     IF p_search_rec.CATEGORY_CODE IS NOT NULL THEN 
7295       x_entered_max_score := x_entered_max_score+10;
7296     END IF;
7297     IF p_search_rec.REFERENCE_USE_FLAG IS NOT NULL THEN 
7298       x_entered_max_score := x_entered_max_score+20;
7299     END IF;
7300     IF p_search_rec.CORPORATION_CLASS IS NOT NULL THEN 
7301       x_entered_max_score := x_entered_max_score+30;
7302     END IF;
7303     END IF;
7304   IF p_search_ctx THEN
7305     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
7306       x_stage_rec.TX33 := 
7307         HZ_TRANS_PKG.WRNAMES_CLEANSE(
7308              p_search_rec.ALL_ACCOUNT_NAMES
7309              ,null,'ALL_ACCOUNT_NAMES'
7310              ,'PARTY','SEARCH');
7311     ELSE
7312       x_stage_rec.TX33 := '';
7313     END IF;
7314   ELSE
7315     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
7316       tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
7317              x_stage_rec.TX33
7318              ,null,'ALL_ACCOUNT_NAMES'
7319              ,'PARTY','SCORE');
7320       IF tmp IS NOT NULL THEN
7321         x_stage_rec.TX33 := tmp;
7322       END IF;
7323     END IF;
7324   END IF;
7325   IF p_search_ctx THEN
7326     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
7327       x_stage_rec.TX32 := 
7328         HZ_TRANS_PKG.WRNAMES_EXACT(
7329              p_search_rec.ALL_ACCOUNT_NAMES
7330              ,null,'ALL_ACCOUNT_NAMES'
7331              ,'PARTY','SEARCH');
7332     ELSE
7333       x_stage_rec.TX32 := '';
7334     END IF;
7335   ELSE
7336     IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
7337       tmp :=HZ_TRANS_PKG.WRNAMES_EXACT(
7338              x_stage_rec.TX32
7339              ,null,'ALL_ACCOUNT_NAMES'
7340              ,'PARTY','SCORE');
7341       IF tmp IS NOT NULL THEN
7342         x_stage_rec.TX32 := tmp;
7343       END IF;
7344     END IF;
7345   END IF;
7346   IF p_search_ctx THEN
7347     IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
7348       x_stage_rec.TX35 := 
7349         HZ_TRANS_PKG.RM_SPLCHAR(
7350              p_search_rec.ALL_ACCOUNT_NUMBERS
7351              ,null,'ALL_ACCOUNT_NUMBERS'
7352              ,'PARTY','SEARCH');
7353     ELSE
7354       x_stage_rec.TX35 := '';
7355     END IF;
7356   ELSE
7357     IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
7358       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
7359              x_stage_rec.TX35
7360              ,null,'ALL_ACCOUNT_NUMBERS'
7361              ,'PARTY','SCORE');
7362       IF tmp IS NOT NULL THEN
7363         x_stage_rec.TX35 := tmp;
7364       END IF;
7365     END IF;
7366   END IF;
7367   IF p_search_ctx THEN
7368     IF p_search_rec.CATEGORY_CODE IS NOT NULL THEN 
7369       x_stage_rec.TX48 := 
7370         HZ_TRANS_PKG.EXACT(
7371              p_search_rec.CATEGORY_CODE
7372              ,null,'CATEGORY_CODE'
7373              ,'PARTY');
7374     ELSE
7375       x_stage_rec.TX48 := '';
7376     END IF;
7377   END IF;
7378   IF p_search_ctx THEN
7379     IF p_search_rec.CORPORATION_CLASS IS NOT NULL THEN 
7380       x_stage_rec.TX157 := 
7381         HZ_TRANS_PKG.EXACT(
7382              p_search_rec.CORPORATION_CLASS
7383              ,null,'CORPORATION_CLASS'
7384              ,'PARTY');
7385     ELSE
7386       x_stage_rec.TX157 := '';
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.TX158 := 
7392         HZ_TRANS_PKG.SOUNDX(
7393              p_search_rec.PARTY_ALL_NAMES
7394              ,null,'PARTY_ALL_NAMES'
7395              ,'PARTY');
7396     ELSE
7397       x_stage_rec.TX158 := '';
7398     END IF;
7399   END IF;
7400   IF p_search_ctx THEN
7401     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
7402       x_stage_rec.TX40 := 
7403         HZ_TRANS_PKG.WRNAMES_CLEANSE(
7404              p_search_rec.PARTY_ALL_NAMES
7405              ,null,'PARTY_ALL_NAMES'
7406              ,'PARTY','SEARCH');
7407     ELSE
7408       x_stage_rec.TX40 := '';
7409     END IF;
7410   ELSE
7411     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
7412       tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
7413              x_stage_rec.TX40
7414              ,null,'PARTY_ALL_NAMES'
7415              ,'PARTY','SCORE');
7416       IF tmp IS NOT NULL THEN
7417         x_stage_rec.TX40 := tmp;
7418       END IF;
7419     END IF;
7420   END IF;
7421   IF p_search_ctx THEN
7422     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
7423       x_stage_rec.TX39 := 
7424         HZ_TRANS_PKG.WRNAMES_EXACT(
7425              p_search_rec.PARTY_ALL_NAMES
7426              ,null,'PARTY_ALL_NAMES'
7427              ,'PARTY','SEARCH');
7428     ELSE
7429       x_stage_rec.TX39 := '';
7430     END IF;
7431   ELSE
7432     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
7433       tmp :=HZ_TRANS_PKG.WRNAMES_EXACT(
7434              x_stage_rec.TX39
7435              ,null,'PARTY_ALL_NAMES'
7436              ,'PARTY','SCORE');
7437       IF tmp IS NOT NULL THEN
7438         x_stage_rec.TX39 := tmp;
7439       END IF;
7440     END IF;
7441   END IF;
7442   IF p_search_ctx THEN
7443     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
7444       x_stage_rec.TX34 := 
7445         HZ_TRANS_PKG.RM_SPLCHAR(
7446              p_search_rec.PARTY_NUMBER
7447              ,null,'PARTY_NUMBER'
7448              ,'PARTY','SEARCH');
7449     ELSE
7450       x_stage_rec.TX34 := '';
7451     END IF;
7452   ELSE
7453     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
7454       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
7455              x_stage_rec.TX34
7456              ,null,'PARTY_NUMBER'
7457              ,'PARTY','SCORE');
7458       IF tmp IS NOT NULL THEN
7459         x_stage_rec.TX34 := tmp;
7460       END IF;
7461     END IF;
7462   END IF;
7463     IF p_search_rec.PARTY_TYPE IS NOT NULL THEN 
7464       x_stage_rec.TX36 := 
7465         HZ_TRANS_PKG.EXACT(
7466              p_search_rec.PARTY_TYPE
7467              ,null,'PARTY_TYPE'
7468              ,'PARTY');
7469     ELSE
7470       x_stage_rec.TX36 := '';
7471     END IF;
7472   IF p_search_ctx THEN
7473     IF p_search_rec.REFERENCE_USE_FLAG IS NOT NULL THEN 
7474       x_stage_rec.TX156 := 
7475         HZ_TRANS_PKG.EXACT(
7476              p_search_rec.REFERENCE_USE_FLAG
7477              ,null,'REFERENCE_USE_FLAG'
7478              ,'PARTY');
7479     ELSE
7480       x_stage_rec.TX156 := '';
7481     END IF;
7482   END IF;
7483   IF p_search_ctx THEN
7484     IF p_search_rec.SIC_CODE IS NOT NULL THEN 
7485       x_stage_rec.TX46 := 
7486         HZ_TRANS_PKG.EXACT(
7487              p_search_rec.SIC_CODE
7488              ,null,'SIC_CODE'
7489              ,'PARTY');
7490     ELSE
7491       x_stage_rec.TX46 := '';
7492     END IF;
7493   END IF;
7494   IF p_search_ctx THEN
7495     IF p_search_rec.SIC_CODE_TYPE IS NOT NULL THEN 
7496       x_stage_rec.TX47 := 
7497         HZ_TRANS_PKG.EXACT(
7498              p_search_rec.SIC_CODE_TYPE
7499              ,null,'SIC_CODE_TYPE'
7500              ,'PARTY');
7501     ELSE
7502       x_stage_rec.TX47 := '';
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.TX43 := 
7508         HZ_TRANS_PKG.CLEANSE(
7509              p_search_rec.TAX_NAME
7510              ,null,'TAX_NAME'
7511              ,'PARTY');
7512     ELSE
7513       x_stage_rec.TX43 := '';
7514     END IF;
7515   END IF;
7516   IF p_search_ctx THEN
7517     IF p_search_rec.TAX_NAME IS NOT NULL THEN 
7518       x_stage_rec.TX42 := 
7519         HZ_TRANS_PKG.EXACT(
7520              p_search_rec.TAX_NAME
7521              ,null,'TAX_NAME'
7522              ,'PARTY');
7523     ELSE
7524       x_stage_rec.TX42 := '';
7525     END IF;
7526   END IF;
7527   IF p_search_ctx THEN
7528     IF p_search_rec.TAX_REFERENCE IS NOT NULL THEN 
7529       x_stage_rec.TX44 := 
7530         HZ_TRANS_PKG.RM_SPLCHAR(
7531              p_search_rec.TAX_REFERENCE
7532              ,null,'TAX_REFERENCE'
7533              ,'PARTY','SEARCH');
7534     ELSE
7535       x_stage_rec.TX44 := '';
7536     END IF;
7537   ELSE
7538     IF p_search_rec.TAX_REFERENCE IS NOT NULL THEN 
7539       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
7540              x_stage_rec.TX44
7541              ,null,'TAX_REFERENCE'
7542              ,'PARTY','SCORE');
7543       IF tmp IS NOT NULL THEN
7544         x_stage_rec.TX44 := tmp;
7545       END IF;
7546     END IF;
7547   END IF;
7548     l_party_name := p_search_rec.PARTY_NAME;
7549     IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
7550       l_party_name := p_search_rec.PARTY_ALL_NAMES;
7551     END IF;
7552     IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN
7553       x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,'PARTY_NAME','PARTY','SEARCH');
7554     END IF;
7555 EXCEPTION
7556   WHEN OTHERS THEN
7557     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7558     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_REC');
7559     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7560     FND_MSG_PUB.ADD;
7561     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7562 END;
7563 
7564 
7565 /************************************************
7566   This procedure maps a search record from the logical
7567   record structure to the stage schema structure 
7568   for the PARTY_SITES Entity after applying 
7569   the defined transformations
7570 ************************************************/
7571 
7572 PROCEDURE MAP_PARTY_SITE_REC( 
7573     p_search_ctx IN BOOLEAN,
7574     p_search_list IN HZ_PARTY_SEARCH.party_site_list, 
7575     x_entered_max_score OUT NUMBER,
7576     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list
7577   ) IS 
7578   l_current_max_score NUMBER;
7579   tmp VARCHAR2(4000);
7580 BEGIN
7581    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7582       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);
7583     END IF;
7584    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7585       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);
7586     END IF;
7587   IF p_search_ctx THEN
7588    g_ps_den_only:=TRUE;
7589     x_entered_max_score:=0;
7590     FOR I IN 1..p_search_list.COUNT LOOP
7591       l_current_max_score:=0;
7592       IF p_search_list(I).CITY IS NOT NULL THEN 
7593         l_current_max_score := l_current_max_score+30;
7594       END IF;
7595       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
7596         l_current_max_score := l_current_max_score+35;
7597       END IF;
7598       IF p_search_list(I).PROVINCE IS NOT NULL THEN 
7599         l_current_max_score := l_current_max_score+20;
7600       END IF;
7601       IF p_search_list(I).STATE IS NOT NULL THEN 
7602         l_current_max_score := l_current_max_score+20;
7603       END IF;
7604       IF p_search_list(I).COUNTY IS NOT NULL THEN 
7605         l_current_max_score := l_current_max_score+20;
7606       END IF;
7607       IF p_search_list(I).COUNTRY IS NOT NULL THEN 
7608         l_current_max_score := l_current_max_score+30;
7609       END IF;
7610       IF l_current_max_score>x_entered_max_score THEN
7611         x_entered_max_score:=l_current_max_score;
7612       END IF;
7613     END LOOP;
7614   END IF;
7615   FOR I IN 1..p_search_list.COUNT LOOP
7616     IF p_search_ctx THEN
7617       IF p_search_list(I).CITY IS NOT NULL THEN 
7618         x_stage_list(I).TX10 := 
7619           HZ_TRANS_PKG.CLEANSE(
7620              p_search_list(I).CITY
7621              ,null,'CITY'
7622              ,'PARTY_SITES');
7623       ELSE
7624         x_stage_list(I).TX10 := '';
7625       END IF;
7626     END IF;
7627   END LOOP;
7628   FOR I IN 1..p_search_list.COUNT LOOP
7629     IF p_search_ctx THEN
7630       IF p_search_list(I).CITY IS NOT NULL THEN 
7631         x_stage_list(I).TX9 := 
7632           HZ_TRANS_PKG.EXACT(
7633              p_search_list(I).CITY
7634              ,null,'CITY'
7635              ,'PARTY_SITES');
7636       ELSE
7637         x_stage_list(I).TX9 := '';
7638       END IF;
7639     END IF;
7640   END LOOP;
7641   FOR I IN 1..p_search_list.COUNT LOOP
7642     IF p_search_ctx THEN
7643       IF p_search_list(I).COUNTRY IS NOT NULL THEN 
7644         x_stage_list(I).TX22 := 
7645           HZ_TRANS_PKG.EXACT(
7646              p_search_list(I).COUNTRY
7647              ,null,'COUNTRY'
7648              ,'PARTY_SITES');
7649       ELSE
7650         x_stage_list(I).TX22 := '';
7651       END IF;
7652     END IF;
7653   END LOOP;
7654   FOR I IN 1..p_search_list.COUNT LOOP
7655     IF p_search_ctx THEN
7656       IF p_search_list(I).COUNTY IS NOT NULL THEN 
7657         x_stage_list(I).TX21 := 
7658           HZ_TRANS_PKG.CLEANSE(
7659              p_search_list(I).COUNTY
7660              ,null,'COUNTY'
7661              ,'PARTY_SITES');
7662       ELSE
7663         x_stage_list(I).TX21 := '';
7664       END IF;
7665     END IF;
7666   END LOOP;
7667   FOR I IN 1..p_search_list.COUNT LOOP
7668     IF p_search_ctx THEN
7669       IF p_search_list(I).COUNTY IS NOT NULL THEN 
7670         x_stage_list(I).TX20 := 
7671           HZ_TRANS_PKG.EXACT(
7672              p_search_list(I).COUNTY
7673              ,null,'COUNTY'
7674              ,'PARTY_SITES');
7675       ELSE
7676         x_stage_list(I).TX20 := '';
7677       END IF;
7678     END IF;
7679   END LOOP;
7680   FOR I IN 1..p_search_list.COUNT LOOP
7681     IF p_search_ctx THEN
7682       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
7683         x_stage_list(I).TX11 := 
7684           HZ_TRANS_PKG.RM_SPLCHAR(
7685              p_search_list(I).POSTAL_CODE
7686              ,null,'POSTAL_CODE'
7687              ,'PARTY_SITES','SEARCH');
7688       ELSE
7689         x_stage_list(I).TX11 := '';
7690       END IF;
7691     ELSE
7692       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
7693         tmp := HZ_TRANS_PKG.RM_SPLCHAR(
7694              x_stage_list(I).TX11
7695              ,null,'POSTAL_CODE'
7696              ,'PARTY_SITES','SCORE');
7697         IF tmp IS NOT NULL THEN
7698           x_stage_list(I).TX11 := tmp;
7699         END IF;
7700       END IF;
7701     END IF;
7702   END LOOP;
7703   FOR I IN 1..p_search_list.COUNT LOOP
7704     IF p_search_ctx THEN
7705       IF p_search_list(I).PROVINCE IS NOT NULL THEN 
7706         x_stage_list(I).TX13 := 
7707           HZ_TRANS_PKG.CLEANSE(
7708              p_search_list(I).PROVINCE
7709              ,null,'PROVINCE'
7710              ,'PARTY_SITES');
7711       ELSE
7712         x_stage_list(I).TX13 := '';
7713       END IF;
7714     END IF;
7715   END LOOP;
7716   FOR I IN 1..p_search_list.COUNT LOOP
7717     IF p_search_ctx THEN
7718       IF p_search_list(I).STATE IS NOT NULL THEN 
7719         x_stage_list(I).TX15 := 
7720           HZ_TRANS_PKG.WRSTATE_CLEANSE(
7721              p_search_list(I).STATE
7722              ,null,'STATE'
7723              ,'PARTY_SITES','SEARCH');
7724       ELSE
7725         x_stage_list(I).TX15 := '';
7726       END IF;
7727     ELSE
7728       IF p_search_list(I).STATE IS NOT NULL THEN 
7729         tmp := HZ_TRANS_PKG.WRSTATE_CLEANSE(
7730              x_stage_list(I).TX15
7731              ,null,'STATE'
7732              ,'PARTY_SITES','SCORE');
7733         IF tmp IS NOT NULL THEN
7734           x_stage_list(I).TX15 := tmp;
7735         END IF;
7736       END IF;
7737     END IF;
7738   END LOOP;
7739   FOR I IN 1..p_search_list.COUNT LOOP
7740     IF p_search_ctx THEN
7741       IF p_search_list(I).STATE IS NOT NULL THEN 
7742         x_stage_list(I).TX14 := 
7743           HZ_TRANS_PKG.WRSTATE_EXACT(
7744              p_search_list(I).STATE
7745              ,null,'STATE'
7746              ,'PARTY_SITES','SEARCH');
7747       ELSE
7748         x_stage_list(I).TX14 := '';
7749       END IF;
7750     ELSE
7751       IF p_search_list(I).STATE IS NOT NULL THEN 
7752         tmp := HZ_TRANS_PKG.WRSTATE_EXACT(
7753              x_stage_list(I).TX14
7754              ,null,'STATE'
7755              ,'PARTY_SITES','SCORE');
7756         IF tmp IS NOT NULL THEN
7757           x_stage_list(I).TX14 := tmp;
7758         END IF;
7759       END IF;
7760     END IF;
7761   END LOOP;
7762 EXCEPTION
7763   WHEN OTHERS THEN
7764     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7765     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_SITE_REC');
7766     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7767     FND_MSG_PUB.ADD;
7768     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7769 END;
7770 
7771 
7772 /************************************************
7773   This procedure maps a search record from the logical
7774   record structure to the stage schema structure 
7775   for the CONTACTS Entity after applying 
7776   the defined transformations
7777 ************************************************/
7778 
7779 PROCEDURE MAP_CONTACT_REC( 
7780     p_search_ctx IN BOOLEAN,
7781     p_search_list IN HZ_PARTY_SEARCH.contact_list, 
7782     x_entered_max_score OUT NUMBER,
7783     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list
7784   ) IS 
7785   l_current_max_score NUMBER;
7786   tmp VARCHAR2(4000);
7787 BEGIN
7788    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7789       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);
7790     END IF;
7791    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7792       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);
7793     END IF;
7794   IF p_search_ctx THEN
7795     x_entered_max_score:=0;
7796     FOR I IN 1..p_search_list.COUNT LOOP
7797       l_current_max_score:=0;
7798       IF l_current_max_score>x_entered_max_score THEN
7799         x_entered_max_score:=l_current_max_score;
7800       END IF;
7801     END LOOP;
7802   END IF;
7803   NULL;
7804 EXCEPTION
7805   WHEN OTHERS THEN
7806     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7807     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_REC');
7808     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7809     FND_MSG_PUB.ADD;
7810     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7811 END;
7812 
7813 
7814 /************************************************
7815   This procedure maps a search record from the logical
7816   record structure to the stage schema structure 
7817   for the CONTACT_POINTS Entity after applying 
7818   the defined transformations
7819 ************************************************/
7820 
7821 PROCEDURE MAP_CONTACT_POINT_REC( 
7822     p_search_ctx IN BOOLEAN,
7823     p_search_list IN HZ_PARTY_SEARCH.contact_point_list, 
7824     x_entered_max_score OUT NUMBER,
7825     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list
7826   ) IS 
7827   l_current_max_score NUMBER;
7828   tmp VARCHAR2(4000);
7829   TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);
7830   l_cnt_pt_type_index INDEX_VARCHAR100_TBL;
7831   TYPE CONTACT_PT_REC_TYPE IS RECORD (
7832   contact_pt_type		VARCHAR2(100),
7833   max_score    		NUMBER) ;
7834   TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;
7835   l_cnt_pt_type contact_pt_list;
7836   N NUMBER := 1;
7837   x_modify VARCHAR2(1);
7838 BEGIN
7839    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7840       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);
7841     END IF;
7842    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7843       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);
7844     END IF;
7845   IF p_search_ctx THEN
7846     x_entered_max_score:=0;
7847     FOR I IN 1..p_search_list.COUNT LOOP
7848       l_current_max_score:=0;
7849       x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;
7850       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7851         l_current_max_score := l_current_max_score+80;
7852       END IF;
7853       IF p_search_list(I).PHONE_AREA_CODE IS NOT NULL THEN 
7854         l_current_max_score := l_current_max_score+30;
7855       END IF;
7856       IF p_search_list(I).PHONE_COUNTRY_CODE IS NOT NULL THEN 
7857         l_current_max_score := l_current_max_score+10;
7858       END IF;
7859       x_modify := 'N';
7860       FOR J IN 1..l_cnt_pt_type.count LOOP
7861       if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then
7862          x_modify := 'Y';
7863       IF l_cnt_pt_type(J).max_score<l_current_max_score THEN
7864       l_cnt_pt_type(J).max_score :=l_current_max_score;
7865       EXIT;
7866       END IF;
7867       end if;
7868       END LOOP;
7869       if x_modify='N' then
7870       l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;
7871       l_cnt_pt_type(N).max_score := l_current_max_score;
7872       N:= N+1;
7873       end if;
7874     END LOOP;
7875    FOR M IN 1..l_cnt_pt_type.count LOOP
7876    x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;
7877    END LOOP;
7878   END IF;
7879   FOR I IN 1..p_search_list.COUNT LOOP
7880     IF p_search_ctx THEN
7881       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7882         x_stage_list(I).TX1 := 
7883           HZ_TRANS_PKG.RM_SPLCHAR_CTX(
7884              p_search_list(I).FLEX_FORMAT_PHONE_NUMBER
7885              ,null,'FLEX_FORMAT_PHONE_NUMBER'
7886              ,'CONTACT_POINTS','SEARCH');
7887       ELSE
7888         x_stage_list(I).TX1 := '';
7889       END IF;
7890     ELSE
7891       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7892         tmp := HZ_TRANS_PKG.RM_SPLCHAR_CTX(
7893              x_stage_list(I).TX1
7894              ,null,'FLEX_FORMAT_PHONE_NUMBER'
7895              ,'CONTACT_POINTS','SCORE');
7896         IF tmp IS NOT NULL THEN
7897           x_stage_list(I).TX1 := tmp;
7898         END IF;
7899       END IF;
7900     END IF;
7901   END LOOP;
7902   FOR I IN 1..p_search_list.COUNT LOOP
7903     IF p_search_ctx THEN
7904       IF p_search_list(I).PHONE_AREA_CODE IS NOT NULL THEN 
7905         x_stage_list(I).TX3 := 
7906           HZ_TRANS_PKG.RM_SPLCHAR(
7907              p_search_list(I).PHONE_AREA_CODE
7908              ,null,'PHONE_AREA_CODE'
7909              ,'CONTACT_POINTS','SEARCH');
7910       ELSE
7911         x_stage_list(I).TX3 := '';
7912       END IF;
7913     ELSE
7914       IF p_search_list(I).PHONE_AREA_CODE IS NOT NULL THEN 
7915         tmp := HZ_TRANS_PKG.RM_SPLCHAR(
7916              x_stage_list(I).TX3
7917              ,null,'PHONE_AREA_CODE'
7918              ,'CONTACT_POINTS','SCORE');
7919         IF tmp IS NOT NULL THEN
7920           x_stage_list(I).TX3 := tmp;
7921         END IF;
7922       END IF;
7923     END IF;
7924   END LOOP;
7925   FOR I IN 1..p_search_list.COUNT LOOP
7926     IF p_search_ctx THEN
7927       IF p_search_list(I).PHONE_COUNTRY_CODE IS NOT NULL THEN 
7928         x_stage_list(I).TX4 := 
7929           HZ_TRANS_PKG.RM_SPLCHAR(
7930              p_search_list(I).PHONE_COUNTRY_CODE
7931              ,null,'PHONE_COUNTRY_CODE'
7932              ,'CONTACT_POINTS','SEARCH');
7933       ELSE
7934         x_stage_list(I).TX4 := '';
7935       END IF;
7936     ELSE
7937       IF p_search_list(I).PHONE_COUNTRY_CODE IS NOT NULL THEN 
7938         tmp := HZ_TRANS_PKG.RM_SPLCHAR(
7939              x_stage_list(I).TX4
7940              ,null,'PHONE_COUNTRY_CODE'
7941              ,'CONTACT_POINTS','SCORE');
7942         IF tmp IS NOT NULL THEN
7943           x_stage_list(I).TX4 := tmp;
7944         END IF;
7945       END IF;
7946     END IF;
7947   END LOOP;
7948 EXCEPTION
7949   WHEN OTHERS THEN
7950     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7951     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_POINT_REC');
7952     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7953     FND_MSG_PUB.ADD;
7954     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7955 END;
7956 
7957 
7958 /************************************************
7959   This procedure checks if the input search criteria 
7960   is valid. It checks if : 
7961    1. At least one primary condition is passed
7962    2. Contact Point Type is not null for each condition
7963 ************************************************/
7964 
7965 FUNCTION check_prim_cond(
7966       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
7967       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
7968       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
7969       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list)
7970       RETURN BOOLEAN IS
7971   BEGIN
7972     FOR I IN 1..p_contact_point_list.COUNT LOOP
7973       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (
7974 p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7975  ) THEN
7976         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
7977         FND_MSG_PUB.ADD;
7978         RAISE FND_API.G_EXC_ERROR;
7979       END IF;
7980     END LOOP;
7981 
7982     IF p_party_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN 
7983       RETURN TRUE;
7984     END IF;
7985     IF p_party_search_rec.PARTY_NUMBER IS NOT NULL THEN 
7986       RETURN TRUE;
7987     END IF;
7988     IF p_party_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
7989       RETURN TRUE;
7990     END IF;
7991     IF p_party_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
7992       RETURN TRUE;
7993     END IF;
7994     IF p_party_search_rec.TAX_NAME IS NOT NULL THEN 
7995       RETURN TRUE;
7996     END IF;
7997     IF p_party_search_rec.TAX_REFERENCE IS NOT NULL THEN 
7998       RETURN TRUE;
7999     END IF;
8000     IF p_party_search_rec.SIC_CODE IS NOT NULL THEN 
8001       RETURN TRUE;
8002     END IF;
8003     IF p_party_search_rec.SIC_CODE_TYPE IS NOT NULL THEN 
8004       RETURN TRUE;
8005     END IF;
8006     IF p_party_search_rec.CATEGORY_CODE IS NOT NULL THEN 
8007       RETURN TRUE;
8008     END IF;
8009     IF p_party_search_rec.REFERENCE_USE_FLAG IS NOT NULL THEN 
8010       RETURN TRUE;
8011     END IF;
8012     IF p_party_search_rec.CORPORATION_CLASS IS NOT NULL THEN 
8013       RETURN TRUE;
8014     END IF;
8015     FOR I IN 1..p_party_site_list.COUNT LOOP
8016       IF p_party_site_list(I).CITY IS NOT NULL THEN 
8017         RETURN TRUE;
8018       END IF;
8019     END LOOP;
8020     FOR I IN 1..p_party_site_list.COUNT LOOP
8021       IF p_party_site_list(I).POSTAL_CODE IS NOT NULL THEN 
8022         RETURN TRUE;
8023       END IF;
8024     END LOOP;
8025     FOR I IN 1..p_party_site_list.COUNT LOOP
8026       IF p_party_site_list(I).PROVINCE IS NOT NULL THEN 
8027         RETURN TRUE;
8028       END IF;
8029     END LOOP;
8030     FOR I IN 1..p_party_site_list.COUNT LOOP
8031       IF p_party_site_list(I).STATE IS NOT NULL THEN 
8032         RETURN TRUE;
8033       END IF;
8034     END LOOP;
8035     FOR I IN 1..p_party_site_list.COUNT LOOP
8036       IF p_party_site_list(I).COUNTY IS NOT NULL THEN 
8037         RETURN TRUE;
8038       END IF;
8039     END LOOP;
8040     FOR I IN 1..p_party_site_list.COUNT LOOP
8041       IF p_party_site_list(I).COUNTRY IS NOT NULL THEN 
8042         RETURN TRUE;
8043       END IF;
8044     END LOOP;
8045     FOR I IN 1..p_contact_point_list.COUNT LOOP
8046       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
8047         RETURN TRUE;
8048       END IF;
8049     END LOOP;
8050     RETURN FALSE;
8051 EXCEPTION
8052   WHEN FND_API.G_EXC_ERROR THEN
8053     RAISE FND_API.G_EXC_ERROR;
8054   WHEN OTHERS THEN
8055     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
8056     FND_MESSAGE.SET_TOKEN('PROC','check_prim_cond');
8057     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
8058     FND_MSG_PUB.ADD;
8059     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8060   END check_prim_cond;
8061 
8062 /************************************************
8063   This procedure checks if the input search condition 
8064   has party site criteria. 
8065 ************************************************/
8066 
8067 PROCEDURE check_party_site_cond(
8068       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
8069       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
8070 	   x_secondary		   OUT     BOOLEAN,
8071 	   x_primary		   OUT     BOOLEAN
8072 ) IS
8073   BEGIN
8074     x_primary:= FALSE;
8075     x_secondary:= FALSE;
8076     FOR I IN 1..p_party_site_list.COUNT LOOP
8077       IF p_party_site_list(I).CITY IS NOT NULL 
8078          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
8079          OR p_party_site_list(I).PROVINCE IS NOT NULL
8080          OR p_party_site_list(I).STATE IS NOT NULL
8081          OR p_party_site_list(I).COUNTY IS NOT NULL
8082          OR p_party_site_list(I).COUNTRY IS NOT NULL
8083       THEN
8084         x_primary := TRUE;
8085       END IF;
8086       EXIT WHEN x_primary;
8087     END LOOP;
8088     FOR I IN 1..p_contact_point_list.COUNT LOOP
8089       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
8090       THEN
8091         x_primary := TRUE;
8092       END IF;
8093       EXIT WHEN x_primary;
8094     END LOOP;
8095 
8096     FOR I IN 1..p_party_site_list.COUNT LOOP
8097       IF p_party_site_list(I).CITY IS NOT NULL 
8098          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
8099          OR p_party_site_list(I).PROVINCE IS NOT NULL
8100          OR p_party_site_list(I).STATE IS NOT NULL
8101          OR p_party_site_list(I).COUNTY IS NOT NULL
8102          OR p_party_site_list(I).COUNTRY IS NOT NULL
8103       THEN
8104         x_secondary := TRUE;
8105       END IF;
8106       EXIT WHEN x_secondary;
8107     END LOOP;
8108     FOR I IN 1..p_contact_point_list.COUNT LOOP
8109       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
8110          OR p_contact_point_list(I).PHONE_AREA_CODE IS NOT NULL
8111          OR p_contact_point_list(I).PHONE_COUNTRY_CODE IS NOT NULL
8112       THEN
8113         x_secondary := TRUE;
8114       END IF;
8115       EXIT WHEN x_secondary;
8116     END LOOP;
8117 EXCEPTION
8118   WHEN OTHERS THEN
8119     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
8120     FND_MESSAGE.SET_TOKEN('PROC','check_party_site_cond');
8121     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
8122     FND_MSG_PUB.ADD;
8123     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8124   END check_party_site_cond;
8125 
8126 /************************************************
8127   This procedure checks if the input search condition 
8128   has contact criteria. 
8129 ************************************************/
8130 
8131 PROCEDURE check_contact_cond(
8132       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
8133       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
8134       x_secondary             OUT     BOOLEAN,
8135       x_primary               OUT     BOOLEAN
8136 ) IS
8137   BEGIN
8138     x_primary:= FALSE;
8139     x_secondary:= FALSE;
8140     FOR I IN 1..p_contact_list.COUNT LOOP
8141       NULL;
8142     END LOOP;
8143 
8144     FOR I IN 1..p_contact_point_list.COUNT LOOP
8145       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
8146       THEN
8147         x_primary := TRUE;
8148       END IF;
8149       EXIT WHEN x_primary;
8150     END LOOP;
8151 
8152     FOR I IN 1..p_contact_list.COUNT LOOP
8153       NULL;
8154     END LOOP;
8155 
8156     FOR I IN 1..p_contact_point_list.COUNT LOOP
8157       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
8158          OR p_contact_point_list(I).PHONE_AREA_CODE IS NOT NULL
8159          OR p_contact_point_list(I).PHONE_COUNTRY_CODE IS NOT NULL
8160       THEN
8161         x_secondary := TRUE;
8162       END IF;
8163       EXIT WHEN x_secondary;
8164     END LOOP;
8165 EXCEPTION
8166   WHEN OTHERS THEN
8167     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
8168     FND_MESSAGE.SET_TOKEN('PROC','check_contact_cond');
8169     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
8170     FND_MSG_PUB.ADD;
8171     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8172   END check_contact_cond;
8173 
8174 /************************************************
8175   This procedure checks if the input search condition 
8176   has valid contact point criteria. 
8177 ************************************************/
8178 
8179 PROCEDURE check_contact_point_cond(
8180       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
8181       x_secondary             OUT     BOOLEAN,
8182       x_primary               OUT     BOOLEAN
8183 ) IS
8184   BEGIN
8185     x_primary:= FALSE;
8186     x_secondary:= FALSE;
8187 
8188     FOR I IN 1..p_contact_point_list.COUNT LOOP
8189       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN 
8190         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
8191         FND_MSG_PUB.ADD;
8192         RAISE FND_API.G_EXC_ERROR;
8193       END IF;
8194     END LOOP;
8195 
8196     FOR I IN 1..p_contact_point_list.COUNT LOOP
8197       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
8198       THEN
8199         x_primary := TRUE;
8200       END IF;
8201       EXIT WHEN x_primary;
8202     END LOOP;
8203     FOR I IN 1..p_contact_point_list.COUNT LOOP
8204       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL  
8205          OR p_contact_point_list(I).PHONE_AREA_CODE IS NOT NULL 
8206          OR p_contact_point_list(I).PHONE_COUNTRY_CODE IS NOT NULL 
8207       THEN
8208         x_secondary := TRUE;
8209       END IF;
8210       EXIT WHEN x_secondary;
8211     END LOOP;
8212 EXCEPTION
8213   WHEN OTHERS THEN
8214     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
8215     FND_MESSAGE.SET_TOKEN('PROC','check_contact_point_cond');
8216     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
8217     FND_MSG_PUB.ADD;
8218     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8219   END check_contact_point_cond;
8220 
8221 FUNCTION check_staged RETURN BOOLEAN IS
8222 
8223   CURSOR c_check_staged IS 
8224     SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL 
8225     WHERE nvl(STAGED_FLAG,'N') = 'N' 
8226     AND FUNCTION_ID in (
8227                 36
8228                 ,37
8229                 ,38
8230                 ,39
8231                 ,40
8232                 ,43
8233                 ,44
8234                 ,46
8235                 ,47
8236                 ,49
8237                 ,51
8238                 ,52
8239                 ,53
8240                 ,72
8241                 ,73
8242                 ,74
8243                 ,76
8244                 ,77
8245                 ,78
8246                 ,83
8247                 ,84
8248                 ,85
8249                 ,110
8250                 ,112
8251                 ,113
8252                 ,121
8253                 ,122
8254                 ,123
8255     );
8256   l_tmp NUMBER;
8257 BEGIN
8258   IF g_staged =  1 THEN
8259     RETURN TRUE;
8260   ELSIF g_staged = 0 THEN
8261     RETURN FALSE;
8262   END IF;
8263 
8264   OPEN c_check_staged;
8265   FETCH c_check_staged INTO l_tmp;
8266   IF c_check_staged%FOUND THEN
8267     CLOSE c_check_staged;
8268     g_staged := 0;
8269     RETURN FALSE;
8270   ELSE
8271     CLOSE c_check_staged;
8272     g_staged := 1;
8273     RETURN TRUE;
8274   END IF;
8275 END check_staged;
8276 
8277 -- Fix for Bug 4736139
8278 FUNCTION check_staged_var RETURN VARCHAR2 IS
8279   l_staged       VARCHAR2(1);
8280   l_staged_bool  BOOLEAN;
8281 BEGIN
8282   l_staged_bool := check_staged;
8283   IF l_staged_bool THEN
8284     l_staged := 'Y';
8285   ELSE
8286     l_staged := 'N';
8287   END IF;
8288   RETURN l_staged;
8289 END check_staged_var;
8290 -- End fix for Bug 4736139
8291 
8292 END;
8293