DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_42

Source


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