DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_60

Source


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