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