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  |      30-MAR-2009 Generated by HZ Match Rule Compiler
23  |
24  *=======================================================================*/
25 
26 -- ==========================================================================================
27 -- ============MATCH RULE COMPILER GENERATED CODE FOR SEARCH MATCH RULES ====================
28 -- ==========================================================================================
29 
30   TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;
31   call_order vlisttype;
32   call_max_score HZ_PARTY_SEARCH.IDList;
33   call_type vlisttype;
34   g_party_stage_rec  HZ_PARTY_STAGE.party_stage_rec_type;
35   g_party_site_stage_list  HZ_PARTY_STAGE.party_site_stage_list;
36   g_contact_stage_list  HZ_PARTY_STAGE.contact_stage_list;
37   g_contact_pt_stage_list  HZ_PARTY_STAGE.contact_pt_stage_list;
38   g_mappings  HZ_PARTY_SEARCH.IDList;
39   g_max_id NUMBER:=2000000000;
40   g_other_party_level_attribs BOOLEAN;
41 
42   g_debug_count                        NUMBER := 0;
43   g_score_until_thresh BOOLEAN:=false;
44  
45   g_thres_score NUMBER:=1000;
46   g_ps_den_only BOOLEAN;
47   g_index_owner VARCHAR2(255);
48   distinct_search_cpt_types NUMBER ; 
49 
50 PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)
51 IS
52      remainder_str VARCHAR2(4000);
53      current_pos NUMBER ;
54      temp VARCHAR2(300) ;
55 BEGIN
56      remainder_str := input_str ;
57      current_pos := 1 ;
58    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
59      WHILE remainder_str IS NOT NULL
60      LOOP
61      temp := substr(remainder_str, 1 , 255 );
62       hz_utility_v2pub.debug(p_message=>'  '||temp,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
63      current_pos := current_pos + 255 ;
64      remainder_str := substr(input_str,current_pos );
65      END LOOP ;
66     END IF;
67 END ;
68 FUNCTION check_estimate_hits (
69   p_entity VARCHAR2,
70   p_contains_str VARCHAR2) RETURN NUMBER IS
71   
72   ustatus VARCHAR2(255);
73   dstatus VARCHAR2(255);
74   l_bool BOOLEAN;
75   l_hits NUMBER := 0;
76 BEGIN
77   IF g_index_owner IS NULL THEN
78     l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,g_index_owner);
79   END IF;
80   IF p_entity='PARTY' THEN
81 
82     l_hits :=  CTX_QUERY.count_hits(
83         g_index_owner||'.'||'HZ_STAGE_PARTIES_T1',p_contains_str, false);
84   ELSIF p_entity='PARTY_SITES' THEN
85     l_hits :=  CTX_QUERY.count_hits(
86         g_index_owner||'.'||'HZ_STAGE_PARTY_SITES_T1',p_contains_str, false);
87   ELSIF p_entity='CONTACTS' THEN
88     l_hits :=  CTX_QUERY.count_hits(
89         g_index_owner||'.'||'HZ_STAGE_CONTACT_T1',p_contains_str, false);
90   ELSIF p_entity='CONTACT_POINTS' THEN
91     l_hits :=  CTX_QUERY.count_hits(
92         g_index_owner||'.'||'HZ_STAGE_CPT_T1',p_contains_str, false);
93   END IF;
94   RETURN floor(l_hits/2) ;
95   
96 
97   exception
98     when others then
99       if (instrb(SQLERRM,'DRG-51030')>0) then 
100         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
101         FND_MSG_PUB.ADD;
102         RAISE FND_API.G_EXC_ERROR;
103       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
104         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
105         FND_MSG_PUB.ADD;
106         RAISE FND_API.G_EXC_ERROR;
107       else 
108         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
109       end if;
110 END;
111 
112 
113 FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)
114 RETURN VARCHAR2
115 IS
116 p_person_restrict_sql VARCHAR2(32767);
117 p_restrict1_sql VARCHAR2(32767);
118 p_final_restrict_sql VARCHAR2(32767);
119 BEGIN
120    p_final_restrict_sql := p_restrict_sql ; 
121    IF p_restrict_sql IS NOT NULL
122    THEN
123      IF instrb(p_restrict_sql, 'STAGE.') > 0
124      THEN
125         p_restrict1_sql := replace( p_restrict_sql, 'STAGE.', 'stage1.');
126      ELSIF instrb(p_restrict_sql, 'stage.') > 0
127      THEN
128            p_restrict1_sql := replace( p_restrict_sql, 'stage.', 'stage1.');
129      END IF;
130     p_person_restrict_sql := 'exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r' 
131                                || ' where oc.org_contact_id = stage.org_contact_id and' 
132                                || ' r.relationship_id = oc.party_relationship_id' 
133                                || ' and r.subject_type = ''PERSON'' AND r.object_type = ''ORGANIZATION'' ' 
134                                || ' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id' 
135                                || ' and ' || p_restrict1_sql || ' ) )' ; 
136 p_final_restrict_sql := '((stage.org_contact_id is null and ' || p_restrict_sql || ') or (stage.org_contact_id is not null and ' 
137                            || p_person_restrict_sql ||  ' ))'; 
138  END IF;
139  return p_final_restrict_sql ;
140 END;
141   FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS
142     l_newidx NUMBER;
143   BEGIN 
144    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
145       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
146       hz_utility_v2pub.debug(p_message=>'calling the function map_id',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
147     END IF;
148    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
149       hz_utility_v2pub.debug(p_message=>'argument in_id =  '||in_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
150     END IF;
151     IF in_id<g_max_id THEN 
152       RETURN in_id;
153     ELSE
154       FOR I in 1..g_mappings.COUNT LOOP
155         IF in_id = g_mappings(I) THEN
156           RETURN (g_max_id+I);
157         END IF;
158       END LOOP;
159       l_newidx := g_mappings.COUNT+1;
160       g_mappings(l_newidx) := in_id;
161       RETURN (g_max_id+l_newidx);
162     END IF;
163   END;
164   FUNCTION GET_PARTY_SCORE 
165        (
166        p_table_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;
360        x_matchidx OUT NUMBER
357     RETURN maxscore;
358   END;
359   FUNCTION GET_CONTACT_POINTS_SCORE (
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_ALL_NAMES' THEN
412 
413      l_matched_value := HZ_PARTY_ACQUIRE.get_known_as (p_record_id, p_entity,'PARTY_ALL_NAMES','Y');
414       RETURN l_matched_value;
415     END IF;
416   IF p_attribute = 'PARTY_NUMBER' THEN
417 
418       SELECT party_type INTO l_party_type 
419       FROM HZ_PARTIES
420       WHERE party_id = p_record_id;
421       IF l_party_type = 'ORGANIZATION' 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       ELSIF l_party_type = 'PERSON' THEN
427         SELECT PARTY_NUMBER INTO l_matched_value 
428         FROM HZ_PARTIES
429         WHERE party_id = p_record_id 
430         and rownum = 1;
431       END IF;
432       RETURN l_matched_value;
433     END IF;
434   IF p_attribute = 'ALL_ACCOUNT_NUMBERS' THEN
435 
436      l_matched_value := HZ_PARTY_ACQUIRE.get_account_info (p_record_id, p_entity,'ALL_ACCOUNT_NUMBERS','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 
499      EXCEPTION
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;
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.TX39, p_table_TX39,(50000*(p_idx-1)+43)) THEN
594       l_score :=40;
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       ELSIF l_current_score<32 AND 
599           HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX40, p_table_TX40,(50000*(p_idx-1)+44)) THEN
600       l_score :=32;
601    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
602       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);
603     END IF;
604       END IF;
605       IF l_score>0 THEN
606    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
607       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);
608     END IF;
609       l_attrib_value := get_attrib_val(p_record_id,'PARTY','PARTY_ALL_NAMES');
610    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
611       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);
612     END IF;
613       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
617            'PARTY', p_search_rec.PARTY_ALL_NAMES,
614                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
615       VALUES (
616            p_party_id,p_record_id,p_search_ctx_id,'PARTY_ALL_NAMES',
618            l_attrib_value,l_score);
619    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
620       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);
621     END IF;
622       END IF;
623      l_score :=0;
624       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX34, p_table_TX34,(50000*(p_idx-1)+38)) THEN
625       l_score :=60;
626    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
627       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);
628     END IF;
629       END IF;
630       IF l_score>0 THEN
631    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
632       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);
633     END IF;
634       l_attrib_value := get_attrib_val(p_record_id,'PARTY','PARTY_NUMBER');
635    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
636       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);
637     END IF;
638       INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
639                 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
640       VALUES (
641            p_party_id,p_record_id,p_search_ctx_id,'PARTY_NUMBER',
642            'PARTY', p_search_rec.PARTY_NUMBER,
643            l_attrib_value,l_score);
644    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
645       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);
646     END IF;
647       END IF;
648      l_score :=0;
649       IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX35, p_table_TX35,(50000*(p_idx-1)+39)) THEN
650       l_score :=60;
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','ALL_ACCOUNT_NUMBERS');
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,'ALL_ACCOUNT_NUMBERS',
667            'PARTY', p_search_rec.ALL_ACCOUNT_NUMBERS,
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);
699   END;
696     END IF;
697       END IF;
698     NULL;
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
793       IF l_score>0 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;
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;
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);
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
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;
973     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);
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 /************************************************
1087 
1084   This procedure populates global cond record
1085   for the CONTACT_POINTS Entity 
1086 ************************************************/
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);
1194     MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);
1191 
1192 POP_CONTACT_POINTS_COND_REC(p_contact_point_list);
1193 
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);
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);
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);
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
1358       l_denorm_str := p_denorm_str;
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
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); 
1461     l_filter_str VARCHAR2(4000) := null;
1458     l_contains_str_temp VARCHAR2(32000); 
1459     l_den_contains_str VARCHAR2(32000); 
1460     l_den_contains_str_temp VARCHAR2(32000); 
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);
1568     -- Dynamic setup of party site contains str
1565     END IF;
1566     x_denorm_str := NULL;
1567 
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,
1689     l_sqlstr VARCHAR2(4000);
1686             p_search_merged VARCHAR2,
1687             p_party_contains_str VARCHAR2,
1688             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
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||' ';
1777     END IF;
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);
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
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);
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
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 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        END IF; 
1919      IF p_search_ctx_id IS NULL THEN
1920        l_sqlstr := 'SELECT   ' || l_hint || ' PARTY_ID , TX34, TX35, TX40, TX39, TX45'||
1921                    ' FROM HZ_STAGED_PARTIES stage'||
1922                    ' WHERE contains( concat_col, :cont)>0'||
1923                    ' AND ((:TX36 IS NULL OR :TX36||'' '' =  stage.TX36))'||
1924                    ' AND ('||p_restrict_sql||')' ||
1925                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
1926           IF l_search_merged = 'Y' THEN  
1927                   l_sqlstr := l_sqlstr ;  
1928           ELSIF l_search_merged = 'I' THEN  
1929                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'', ''I'')';  
1930           ELSE  
1931                   l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'')';  
1932           END IF;  
1933  	   output_long_strings('----------------------------------------------------------');
1934       output_long_strings('Party Contains String = '||p_contains_str);
1935 		output_long_strings('Restrict Sql = '||p_restrict_sql);
1936        OPEN x_cursor FOR l_sqlstr USING p_contains_str
1937                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1938                     ,p_dup_party_id, p_dup_party_id;
1939      END IF;
1940    END IF;
1941   exception
1942     when others then
1943       if (instrb(SQLERRM,'DRG-51030')>0) then 
1944         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1945         FND_MSG_PUB.ADD;
1946         RAISE FND_API.G_EXC_ERROR;
1947       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
1948         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1949         FND_MSG_PUB.ADD;
1950         RAISE FND_API.G_EXC_ERROR;
1951       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
1952         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1953         FND_MSG_PUB.ADD;
1954         RAISE FND_API.G_EXC_ERROR;
1955       else 
1956         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1957     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1958     	 FND_MSG_PUB.ADD;
1959         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1960       end if;
1961   END;
1962 
1963   PROCEDURE open_party_site_cursor(
1964             p_dup_party_id NUMBER, 
1965             p_party_id NUMBER, 
1966             p_restrict_sql VARCHAR2, 
1967             p_contains_str  VARCHAR2, 
1968             p_search_ctx_id  NUMBER, 
1969             p_search_merged  VARCHAR2, 
1970             p_search_rel_sites  VARCHAR2, 
1971             p_person_api  VARCHAR2, 
1972             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1973   l_sqlstr VARCHAR2(4000);
1974   l_hint VARCHAR2(100); 
1978   l_status_sql VARCHAR2(100); 
1975   l_check NUMBER; 
1976   l_check_dt NUMBER; 
1977   l_search_merged VARCHAR2(1); 
1979   p_restrict_sql1 VARCHAR2(4000); 
1980  
1981   BEGIN
1982    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1983       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);
1984       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);
1985     END IF;
1986      IF (p_search_merged is null) then 
1987         l_search_merged := 'N';  
1988      ELSE 
1989         l_search_merged := p_search_merged; 
1990      END IF; 
1991      IF p_party_id IS NOT NULL THEN
1992    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1993       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);
1994     END IF;
1995        IF p_search_rel_sites = 'N' THEN
1996          OPEN x_cursor FOR 
1997           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
1998           FROM HZ_STAGED_PARTY_SITES stage
1999           WHERE contains( concat_col, p_contains_str)>0
2000           AND( (l_search_merged ='Y' )  
2001              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2002              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2003           AND stage.party_id = p_party_id; 
2004        ELSE
2005          OPEN x_cursor FOR 
2006           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
2007           FROM HZ_STAGED_PARTY_SITES stage
2008           WHERE contains( concat_col, p_contains_str)>0
2009           AND( (l_search_merged ='Y' )  
2010             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2011             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2012           AND stage.party_id = p_party_id 
2013           UNION
2014           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
2015           FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc
2016           WHERE contains( concat_col, p_contains_str)>0
2017           AND( (l_search_merged ='Y' )  
2018             OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2019             OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2020           AND r.object_id = p_party_id 
2021           AND r.subject_id = stage.party_id 
2022           AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
2023           AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
2024           AND r.relationship_id = oc.party_relationship_id
2025           AND oc.org_contact_id = stage.org_contact_id; 
2026       END IF;
2027     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2028    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2029       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);
2030     END IF;
2031       IF p_search_ctx_id IS NULL THEN
2032    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2033       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);
2034     END IF;
2035         OPEN x_cursor FOR 
2036           SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX22
2037           FROM HZ_STAGED_PARTY_SITES stage
2038         WHERE contains( concat_col, p_contains_str)>0
2039         AND EXISTS (
2040           SELECT 1 FROM HZ_STAGED_PARTIES p
2041           WHERE p.PARTY_ID = stage.PARTY_ID
2042           AND( (l_search_merged ='Y' )  
2043           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2044           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2045           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2046           AND( (l_search_merged ='Y' )  
2047            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2048            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2049           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2050       ELSE
2051    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2052       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);
2053     END IF;
2054         IF p_person_api = 'Y' THEN
2055           OPEN x_cursor FOR 
2056             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX22
2057             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
2058             WHERE contains( concat_col, p_contains_str)>0
2059           AND( (l_search_merged ='Y' )  
2060           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2061           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2065             UNION 
2062             AND d.search_context_id = p_search_ctx_id
2063             AND d.party_id = stage.party_id
2064             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2066             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
2067             FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage
2068             WHERE contains( concat_col, p_contains_str)>0
2069           AND( (l_search_merged ='Y' )  
2070           OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2071           OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2072             AND d.search_context_id = p_search_ctx_id
2073             AND d.party_id = r.subject_id
2074             AND r.relationship_id = oc.party_relationship_id
2075             AND oc.org_contact_id = stage.org_contact_id
2076             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2077         ELSE
2078           OPEN x_cursor FOR 
2079             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX22
2080             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
2081             WHERE contains( concat_col, p_contains_str)>0
2082             AND( (l_search_merged ='Y' )  
2083              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2084              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2085             AND d.search_context_id = p_search_ctx_id
2086             AND d.party_id = stage.party_id
2087             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2088         END IF;
2089       END IF;
2090     ELSE
2091    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2092       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);
2093     END IF;
2094        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2095        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_PS'); 
2096        IF (l_check_dt > 0 ) THEN 
2097    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2098       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);
2099     END IF;
2100            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */'; 
2101        ELSIF (l_check > 0 ) THEN 
2102    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2103       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);
2104     END IF;
2105            l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */'; 
2106        END IF; 
2107        IF l_search_merged = 'Y' THEN 
2108                l_status_sql := ' ' ;  
2109        ELSIF l_search_merged = 'I' THEN  
2110                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2111        ELSE 
2112                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2113        END IF; 
2114  		/*Performance fix for Bug:4589953*/ 
2115  		IF(p_person_api='Y') THEN 
2116        IF (l_check > 0 ) THEN 
2117        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
2118        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2119        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
2120        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2121        ELSE
2122 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2123        END IF; 
2124        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'||
2125                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2126                    ' WHERE contains( concat_col, :cont)>0'||
2127                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2128                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2129                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2130          ' AND (ORG_CONTACT_ID IS NULL ' ||
2131        	' AND ('||p_restrict_sql||'))' ||
2132        	' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2133          ' UNION ' ||
2134        			 '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'||
2135                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2136                    ' WHERE contains( concat_col, :cont)>0'||
2137                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2138                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2139                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2140          ' AND ORG_CONTACT_ID IN ' ||
2141          ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships ' ||
2142          ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
2143          ' where stage1.relationship_id = oc.party_relationship_id ' || 
2144          ' and ('||p_restrict_sql1|| ') )' ||
2145          ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2146        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2150                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2147                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2148        ELSE 
2149        l_sqlstr := 'SELECT ' || l_hint ||' PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX22'||
2151                    ' WHERE contains( concat_col, :cont)>0'||
2152                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2153                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2154                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2155                  ' AND EXISTS ('||
2156                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2157                  ' WHERE p.party_id = stage.party_id ' || 
2158                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2159                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2160                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2161        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2162                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2163                     ,p_dup_party_id, p_dup_party_id;
2164        END IF; 
2165 		ELSE 
2166        l_sqlstr := 'SELECT ' || l_hint ||' PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX12, TX13, TX14, TX15, TX22'||
2167                    ' FROM HZ_STAGED_PARTY_SITES stage'||
2168                    ' WHERE contains( concat_col, :cont)>0'||
2169                    '  AND( ('''||l_search_merged||''' =''Y'' )  '|| 
2170                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '|| 
2171                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '|| 
2172                  ' AND EXISTS ('||
2173                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2174                  ' WHERE p.party_id = stage.party_id ' || 
2175                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2176                    ' AND ('||p_restrict_sql||')' ||
2177                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2178        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2179                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2180                     ,p_dup_party_id, p_dup_party_id;
2181 		  END IF; 
2182     END IF;
2183  	    output_long_strings('----------------------------------------------------------');
2184        output_long_strings('Party Site Contains String = '||p_contains_str);
2185 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2186   exception
2187     when others then
2188       if (instrb(SQLERRM,'DRG-51030')>0) then 
2189         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2190         FND_MSG_PUB.ADD;
2191         RAISE FND_API.G_EXC_ERROR;
2192       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2193         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2194         FND_MSG_PUB.ADD;
2195         RAISE FND_API.G_EXC_ERROR;
2196       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2197         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2198         FND_MSG_PUB.ADD;
2199         RAISE FND_API.G_EXC_ERROR;
2200       else 
2201         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2202     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2203     	 FND_MSG_PUB.ADD;
2204         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2205       end if;
2206   END;
2207 
2208   PROCEDURE open_contact_cursor(
2209             p_dup_party_id NUMBER, 
2210             p_party_id NUMBER, 
2211             p_restrict_sql VARCHAR2, 
2212             p_contains_str  VARCHAR2, 
2213             p_search_ctx_id  NUMBER, 
2214             p_search_merged  VARCHAR2, 
2215             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
2216   l_sqlstr VARCHAR2(4000);
2217   l_hint VARCHAR2(100); 
2218   l_check NUMBER; 
2219   l_check_dt NUMBER; 
2220   l_search_merged VARCHAR2(1); 
2221   l_status_sql VARCHAR2(100); 
2222  
2223   BEGIN
2224    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2225       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);
2226       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);
2227     END IF;
2228      IF (p_search_merged is null) then 
2229         l_search_merged := 'N';  
2230      ELSE 
2231         l_search_merged := p_search_merged; 
2232      END IF; 
2233      IF p_party_id IS NOT NULL THEN
2234    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2235       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);
2236     END IF;
2237        OPEN x_cursor FOR 
2238           SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID, TX22
2239           FROM HZ_STAGED_CONTACTS stage
2240         WHERE contains( concat_col, p_contains_str)>0
2241         AND EXISTS (
2242           SELECT 1 FROM HZ_STAGED_PARTIES p
2243           WHERE p.PARTY_ID = stage.PARTY_ID
2244           AND( (l_search_merged ='Y' )  
2245           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2246           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2250            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2247           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2248           AND( (l_search_merged ='Y' )  
2249            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2251           AND stage.party_id = p_party_id;
2252     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2253    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2254       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);
2255     END IF;
2256       IF p_search_ctx_id IS NULL THEN
2257    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2258       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);
2259     END IF;
2260         OPEN x_cursor FOR 
2261           SELECT ORG_CONTACT_ID, PARTY_ID, TX22
2262           FROM HZ_STAGED_CONTACTS stage
2263         WHERE contains( concat_col, p_contains_str)>0
2264         AND EXISTS (
2265           SELECT 1 FROM HZ_STAGED_PARTIES p
2266           WHERE p.PARTY_ID = stage.PARTY_ID
2267           AND( (l_search_merged ='Y' )  
2268           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2269           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2270           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2271           AND( (l_search_merged ='Y' )  
2272            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2273            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2274           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2275       ELSE
2276    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2277       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);
2278     END IF;
2279           OPEN x_cursor FOR 
2280             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID, TX22
2281             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage
2282             WHERE contains( concat_col, p_contains_str)>0
2283             AND d.search_context_id = p_search_ctx_id
2284             AND d.party_id = stage.party_id
2285             AND( (l_search_merged ='Y' )  
2286              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2287              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2288             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2289       END IF;
2290     ELSE
2291    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2292       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);
2293     END IF;
2294        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2295        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CT'); 
2296        IF (l_check_dt > 0 ) THEN 
2297    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2298       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);
2299     END IF;
2300            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */'; 
2301        ELSIF (l_check > 0 ) THEN 
2302    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2303       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);
2304     END IF;
2305            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */'; 
2306        END IF; 
2307        IF l_search_merged = 'Y' THEN 
2308                l_status_sql := ' ' ;  
2309        ELSIF l_search_merged = 'I' THEN  
2310                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2311        ELSE 
2312                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2313        END IF; 
2314        l_sqlstr := 'SELECT   ' || l_hint || ' ORG_CONTACT_ID, PARTY_ID , TX22'||
2315                    ' FROM HZ_STAGED_CONTACTS stage'||
2316                    ' WHERE contains( concat_col, :cont)>0'||
2317                  ' AND EXISTS ('||
2318                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2319                  ' WHERE p.party_id = stage.party_id ' || 
2320                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36)) '|| l_status_sql ||' ) ' || 
2321                   ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2322                   ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2323                   ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2324                    ' AND ('||p_restrict_sql||')' ||
2325                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2326        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2327                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2328                     ,p_dup_party_id, p_dup_party_id;
2329     END IF;
2330  	    output_long_strings('----------------------------------------------------------');
2331        output_long_strings('Contacts Contains String = '||p_contains_str);
2332 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2333   exception
2337         FND_MSG_PUB.ADD;
2334     when others then
2335       if (instrb(SQLERRM,'DRG-51030')>0) then 
2336         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2338         RAISE FND_API.G_EXC_ERROR;
2339       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2340         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2341         FND_MSG_PUB.ADD;
2342         RAISE FND_API.G_EXC_ERROR;
2343       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2344         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2345         FND_MSG_PUB.ADD;
2346         RAISE FND_API.G_EXC_ERROR;
2347       else 
2348         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2349     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2350     	 FND_MSG_PUB.ADD;
2351         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2352       end if;
2353   END;
2354 
2355   PROCEDURE open_contact_pt_cursor(
2356             p_dup_party_id NUMBER, 
2357             p_party_id NUMBER, 
2358             p_restrict_sql VARCHAR2, 
2359             p_contains_str  VARCHAR2, 
2360             p_search_ctx_id  NUMBER, 
2361             p_search_merged  VARCHAR2, 
2362             p_search_rel_cpts  VARCHAR2, 
2363             p_person_api  VARCHAR2, 
2364             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,
2365             p_restrict_entity VARCHAR2 DEFAULT NULL) IS
2366   l_sqlstr VARCHAR2(4000);
2367   l_hint VARCHAR2(100); 
2368   l_check NUMBER; 
2369   l_check_dt NUMBER; 
2370   l_search_merged VARCHAR2(1); 
2371   l_status_sql VARCHAR2(100); 
2372   p_restrict_sql1 VARCHAR2(4000); 
2373  
2374   BEGIN
2375    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2376       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);
2377       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);
2378     END IF;
2379      IF (p_search_merged is null) then 
2380         l_search_merged := 'N';  
2381      ELSE 
2382         l_search_merged := p_search_merged; 
2383      END IF; 
2384   IF p_restrict_entity = 'CONTACTS'    
2385   THEN
2386           OPEN x_cursor FOR 
2387           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
2388           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
2389           WHERE contains( concat_col, p_contains_str)>0 
2390           AND d.search_context_id = p_search_ctx_id 
2391           AND( (l_search_merged ='Y' )  
2392            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2393            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2394           AND d.party_id = stage.org_contact_id ; 
2395    END IF; 
2396   IF p_restrict_entity = 'PARTY_SITES'    
2397   THEN
2398           OPEN x_cursor FOR 
2399           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
2400           FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage 
2401           WHERE contains( concat_col, p_contains_str)>0 
2402           AND d.search_context_id = p_search_ctx_id 
2403           AND( (l_search_merged ='Y' )  
2404            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2405            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2406           AND d.party_id = stage.party_site_id ; 
2407    END IF; 
2408  IF p_restrict_entity IS NULL
2409  THEN
2410      IF p_party_id IS NOT NULL THEN
2411    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2412       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);
2413     END IF;
2414        IF p_search_rel_cpts = 'N' THEN
2415          OPEN x_cursor FOR 
2416           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
2417           FROM HZ_STAGED_CONTACT_POINTS stage
2418           WHERE contains( concat_col, p_contains_str)>0
2419           AND( (l_search_merged ='Y' )  
2420            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2421            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2422           AND stage.party_id = p_party_id; 
2423        ELSE
2424          OPEN x_cursor FOR 
2425           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
2426           FROM HZ_STAGED_CONTACT_POINTS stage
2427           WHERE contains( concat_col, p_contains_str)>0
2428           AND( (l_search_merged ='Y' )  
2429            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2430            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2431           AND stage.party_id = p_party_id 
2432           UNION
2433           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
2434           FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc
2435           WHERE contains( concat_col, p_contains_str)>0
2439            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2436           AND r.object_id = p_party_id 
2437           AND( (l_search_merged ='Y' )  
2438            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2440                     AND r.subject_id = stage.party_id 
2441                     AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES' 
2442                     AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES' 
2443                     AND r.relationship_id = oc.party_relationship_id
2444                     AND oc.org_contact_id = stage.org_contact_id; 
2445       END IF;
2446     ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2447    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2448       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);
2449     END IF;
2450       IF p_search_ctx_id IS NULL THEN
2451    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2452       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);
2453     END IF;
2454         OPEN x_cursor FOR 
2455           SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2456           FROM HZ_STAGED_CONTACT_POINTS stage
2457         WHERE contains( concat_col, p_contains_str)>0
2458         AND EXISTS (
2459           SELECT 1 FROM HZ_STAGED_PARTIES p
2460           WHERE p.PARTY_ID = stage.PARTY_ID
2461           AND( (l_search_merged ='Y' )  
2462           OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))  
2463           OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A'))       )  
2464           AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  p.TX36)))
2465           AND( (l_search_merged ='Y' )  
2466            OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2467            OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2468           AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2469       ELSE
2470    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2471       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);
2472     END IF;
2473         IF p_person_api = 'Y' THEN
2474           OPEN x_cursor FOR 
2475             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2476             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2477             WHERE contains( concat_col, p_contains_str)>0
2478             AND d.search_context_id = p_search_ctx_id
2479             AND d.party_id = stage.party_id
2480             AND( (l_search_merged ='Y' )  
2481              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2482              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2483             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2484             UNION 
2485             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
2486             FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage
2487             WHERE contains( concat_col, p_contains_str)>0
2488             AND d.search_context_id = p_search_ctx_id
2489             AND d.party_id = r.subject_id
2490             AND r.relationship_id = oc.party_relationship_id
2491             AND oc.org_contact_id = stage.org_contact_id
2492             AND( (l_search_merged ='Y' )  
2493              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2494              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2495             AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2496         ELSE
2497           OPEN x_cursor FOR 
2498             SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2499             FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2500             WHERE contains( concat_col, p_contains_str)>0
2501             AND d.search_context_id = p_search_ctx_id
2502             AND d.party_id = stage.party_id
2503             AND( (l_search_merged ='Y' )  
2504              OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))  
2505              OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A')       )  
2506             AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2507         END IF;
2508       END IF;
2509     ELSE
2510    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2511       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);
2512     END IF;
2513        l_check := instrb(p_restrict_sql, 'SELECTIVE'); 
2514        l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CPT'); 
2515        IF (l_check_dt > 0 ) THEN 
2516    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2517       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);
2518     END IF;
2519            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */'; 
2520        ELSIF (l_check > 0 ) THEN 
2524            l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */'; 
2521    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2522       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);
2523     END IF;
2525        END IF; 
2526        IF l_search_merged = 'Y' THEN 
2527                l_status_sql := ' ' ;  
2528        ELSIF l_search_merged = 'I' THEN  
2529                l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')'; 
2530        ELSE 
2531                l_status_sql := ' AND nvl(p.status,''A'') in (''A'')'; 
2532        END IF; 
2533        IF p_person_api = 'Y' THEN
2534  		/*Performance fix for Bug:4589953*/ 
2535        IF (l_check > 0 ) THEN 
2536        IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN 
2537        	p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2538        ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN 
2539        	p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2540        ELSE
2541 		p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2542        END IF; 
2543        	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'||
2544                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2545                    ' WHERE contains( concat_col, :cont)>0  '||
2546                    ' AND (stage.org_contact_id is null '||
2547                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2548                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2549                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2550                    ' AND ('||p_restrict_sql||'))' ||
2551                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2552                    ' UNION ' ||
2553                    ' 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'||
2554                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2555                    ' WHERE contains( concat_col, :cont)>0  '||
2556                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2557                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2558                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2559                  ' AND (stage.org_contact_id in ' || 
2560                  ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r ' ||
2561                  ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' || 
2562                  ' where stage1.relationship_id = oc.party_relationship_id ' || 
2563                  ' and ('||p_restrict_sql1 || ') ) )' ||
2564                  ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2565        OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2566                     p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2567        ELSE 
2568        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX1, TX6, TX5'||
2569                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2570                    ' WHERE contains( concat_col, :cont)>0'||
2571                  ' AND EXISTS ('||
2572                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2573                  ' WHERE p.party_id = stage.party_id ' || 
2574                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2575                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2576                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2577                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2578                    ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2579                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2580        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2581                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2582                     ,p_dup_party_id, p_dup_party_id;
2583        END IF; 
2584        ELSE 
2585        	l_sqlstr := 'SELECT   ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  , TX1, TX6, TX5'||
2586                    ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2587                    ' WHERE contains( concat_col, :cont)>0'||
2588                  ' AND EXISTS ('||
2589                  ' SELECT 1 FROM HZ_STAGED_PARTIES p ' || 
2590                  ' WHERE p.party_id = stage.party_id ' || 
2591                  ' AND ((:TX36 IS NULL OR :TX36||'' '' =  p.TX36))  '|| l_status_sql ||' ) ' || 
2592                    ' AND( ('''||l_search_merged||''' =''Y'' )  '||
2593                    '   OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  '||
2594                    '   OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  '||
2595                    ' AND ('||p_restrict_sql||')' ||
2596                    ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '; 
2597        OPEN x_cursor FOR l_sqlstr USING p_contains_str
2598                               ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2599                     ,p_dup_party_id, p_dup_party_id;
2600        END IF; 
2601     END IF;
2602   END IF; 
2606   exception
2603  	    output_long_strings('----------------------------------------------------------');
2604        output_long_strings('Contact Points Contains String = '||p_contains_str);
2605 		output_long_strings('Restrict Sql = '||p_restrict_sql);
2607     when others then
2608       if (instrb(SQLERRM,'DRG-51030')>0) then 
2609         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2610         FND_MSG_PUB.ADD;
2611         RAISE FND_API.G_EXC_ERROR;
2612       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
2613         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2614         FND_MSG_PUB.ADD;
2615         RAISE FND_API.G_EXC_ERROR;
2616       elsif (instrb(SQLERRM,'ORA-20000')>0) then 
2617         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2618         FND_MSG_PUB.ADD;
2619         RAISE FND_API.G_EXC_ERROR;
2620       else 
2621         FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2622     	 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2623     	 FND_MSG_PUB.ADD;
2624         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2625       end if;
2626   END;
2627 
2628 
2629   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
2630     l_sqlstr VARCHAR2(4000);
2631     l_search_merged VARCHAR2(1);
2632   BEGIN
2633     IF (p_search_merged is null) then 
2634        l_search_merged := 'N';  
2635     ELSE 
2636        l_search_merged := p_search_merged; 
2637     END IF; 
2638     IF p_restrict_sql IS NULL THEN
2639       INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
2640       SELECT p_search_ctx_id, PARTY_ID, decode(TX8,g_party_stage_rec.TX8||' ',100,90)
2641       FROM hz_staged_parties 
2642       WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
2643       AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' =  TX36))
2644       AND( (l_search_merged ='Y' ) 
2645            OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))  
2646            OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))  
2647       AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)
2648       AND rownum <= p_thresh;
2649     ELSE
2650       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 ';
2651       l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
2652       l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' =  TX36) ';
2653       IF l_search_merged = 'N' THEN
2654         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
2655       ELSIF l_search_merged = 'Y' THEN
2656         l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
2657       END IF;
2658       l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
2659      l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
2660      l_sqlstr := l_sqlstr || ' AND ROWNUM <= :thresh ';
2661      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;
2662     END IF;
2663     x_num_matches := SQL%ROWCOUNT;
2664   END;
2665 
2666   FUNCTION get_new_score_rec (
2667     	 p_init_total_score NUMBER,
2668     	 p_init_party_score NUMBER,
2669     	 p_init_party_site_score NUMBER,
2670     	 p_init_contact_score NUMBER,
2671     	 p_init_contact_point_score NUMBER, 
2672     	 p_party_id NUMBER, 
2673     	 p_party_site_id NUMBER, 
2674     	 p_org_contact_id NUMBER, 
2675     	 p_contact_point_id NUMBER) 
2676      RETURN HZ_PARTY_SEARCH.score_rec IS
2677     l_score_rec HZ_PARTY_SEARCH.score_rec;
2678   BEGIN
2679    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2680       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);
2681       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);
2682     END IF;
2683     l_score_rec.TOTAL_SCORE := p_init_total_score;
2684     l_score_rec.PARTY_SCORE := p_init_party_score;
2685     l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;
2686     l_score_rec.CONTACT_SCORE := p_init_contact_score;
2687     l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;
2688     l_score_rec.PARTY_ID := p_party_id;
2689     l_score_rec.PARTY_SITE_ID := p_party_site_id;
2690     l_score_rec.ORG_CONTACT_ID := p_org_contact_id;
2691     l_score_rec.CONTACT_POINT_ID := p_contact_point_id;
2692     RETURN l_score_rec;
2693   END;
2694 
2695    /**********************************************************
2696    This procedure finds the set of parties that match the search
2697    criteria and returns a scored set of parties
2698 
2699    The steps in executing the search are as follows
2700     1. Initialization and error checks
2701     2. Setup of intermedia query strings for Acquisition query
2702     3. Execution of Acquisition query
2703     4. Execution of Secondary queries to score results
2704     5. Setup of data temporary table to return search results
2705    **********************************************************/
2706 
2707 PROCEDURE find_parties (
2708       p_rule_id               IN      NUMBER,
2709       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
2710       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
2711       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
2715       p_search_merged         IN      VARCHAR2,
2712       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
2713       p_restrict_sql          IN      VARCHAR2,
2714       p_match_type            IN      VARCHAR2,
2716       p_dup_party_id          IN      NUMBER,
2717       p_dup_set_id            IN      NUMBER,
2718       p_dup_batch_id          IN      NUMBER,
2719       p_ins_details           IN      VARCHAR2,
2720       x_search_ctx_id         OUT     NUMBER,
2721       x_num_matches           OUT     NUMBER
2722 ) IS
2723 
2724   -- Strings to hold the generated Intermedia query strings
2725   l_party_contains_str VARCHAR2(32000); 
2726   l_party_site_contains_str VARCHAR2(32000);
2727   l_contact_contains_str VARCHAR2(32000);
2728   l_contact_pt_contains_str VARCHAR2(32000);
2729   l_denorm_str VARCHAR2(32000);
2730   l_ps_denorm_str VARCHAR2(32000);
2731   l_ct_denorm_str VARCHAR2(32000);
2732   l_cpt_denorm_str VARCHAR2(32000);
2733 
2734   -- Other local variables
2735   l_match_str VARCHAR2(30); -- Match type (AND or OR)
2736   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
2737   -- For Score calculation
2738   l_max_score NUMBER;
2739   l_match_idx NUMBER;
2740   l_entered_max_score NUMBER;
2741   FIRST BOOLEAN;
2742   l_search_ctx_id NUMBER; -- Generated Search Context ID
2743 
2744   l_TX39 VARCHAR2(2000);
2745   l_TX13 VARCHAR2(2000);
2746   l_TX9 VARCHAR2(2000);
2747   l_TX22 VARCHAR2(2000);
2748   l_TX35 VARCHAR2(2000);
2749   l_TX1 VARCHAR2(2000);
2750   l_TX3 VARCHAR2(2000);
2751   l_TX12 VARCHAR2(2000);
2752   l_TX15 VARCHAR2(2000);
2753   l_TX4 VARCHAR2(2000);
2754   l_TX10 VARCHAR2(2000);
2755   l_TX11 VARCHAR2(2000);
2756   l_TX5 VARCHAR2(2000);
2757   l_TX40 VARCHAR2(2000);
2758   l_TX34 VARCHAR2(2000);
2759   l_TX45 VARCHAR2(2000);
2760   l_TX14 VARCHAR2(2000);
2761   l_TX6 VARCHAR2(2000);
2762   H_SCORES HZ_PARTY_SEARCH.score_list;
2763   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
2764   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
2765 
2766   l_score NUMBER;
2767   l_idx NUMBER;
2768   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
2769   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
2770   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
2771   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
2772   l_party_id NUMBER;
2773   l_ps_party_id NUMBER;
2774   l_ct_party_id NUMBER;
2775   l_cpt_party_id NUMBER;
2776   l_cpt_ps_id NUMBER;
2777   l_cpt_contact_id NUMBER;
2778   l_cpt_type VARCHAR2(100);
2779   l_party_site_id NUMBER;
2780   l_org_contact_id NUMBER;
2781   l_contact_pt_id NUMBER;
2782   l_ps_contact_id NUMBER;
2783   l_party_max_score NUMBER;
2784   l_ps_max_score NUMBER;
2785   l_contact_max_score NUMBER;
2786   l_cpt_max_score NUMBER;
2787   l_denorm_max_score NUMBER;
2788   l_non_denorm_max_score NUMBER;
2789 
2790   defpt NUMBER :=0;
2791   defps NUMBER :=0;
2792   defct NUMBER :=0;
2793   defcpt NUMBER :=0;
2794   l_index NUMBER;
2795   l_max_thresh NUMBER;
2796   l_tmp NUMBER;
2797   l_merge_flag VARCHAR2(1);
2798   l_num_eval NUMBER:=0;
2799 
2800   --Fix for bug 4417124 
2801   l_use_contact_addr_info BOOLEAN := TRUE;
2802   l_use_contact_cpt_info BOOLEAN  := TRUE;
2803   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
2804   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
2805 
2806   L_RETURN_IMM_EXC EXCEPTION;
2807 
2808   
2809   /********************* Find Parties private procedures *******/
2810   PROCEDURE push_eval IS
2811   BEGIN
2812    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2813       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);
2814       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);
2815     END IF;
2816    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2817       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);
2818     END IF;
2819     H_PARTY_ID.DELETE;
2820     H_PARTY_ID_LIST.DELETE;
2821     H_SCORES.DELETE;        
2822     g_mappings.DELETE;
2823     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
2824     call_order(5) := call_order(1);
2825     call_type(5) := 'AND';
2826     call_max_score(5) := call_max_score(1);
2827     call_type(2) := 'OR';
2828   END;
2829 
2830   /**  Private procedure to acquire and score at party level  ***/
2831   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
2832     l_party_id_idx NUMBER:=1;
2833     l_ctx_id NUMBER;
2834     l_precalc_score BOOLEAN := FALSE;
2835   BEGIN
2836    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2837       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);
2838       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);
2839     END IF;
2840     SAVEPOINT eval_start;
2841     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2842       l_ctx_id := l_search_ctx_id;
2843    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2847          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2844       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);
2845     END IF;
2846       FORALL I in 1..H_PARTY_ID.COUNT 
2848              l_search_ctx_id,H_PARTY_ID(I));
2849       H_PARTY_ID.DELETE;
2850       H_PARTY_ID_LIST.DELETE;
2851     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2852    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2853       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);
2854     END IF;
2855       l_ctx_id := l_search_ctx_id;
2856       FORALL I in 1..H_PARTY_ID.COUNT 
2857          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2858              l_search_ctx_id,H_PARTY_ID(I));
2859       l_party_id_idx := H_PARTY_ID.COUNT+1;
2860     ELSE
2861       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2862          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
2863    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2864       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);
2865     END IF;
2866         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
2867    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2868       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);
2869     END IF;
2870           IF (l_party_site_contains_str IS NULL AND
2871              l_contact_contains_str IS NULL AND
2872              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN
2873             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);
2874             RAISE L_RETURN_IMM_EXC;
2875           ELSE
2876             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);
2877           END IF;
2878         ELSE
2879           IF p_index>1 THEN
2880    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2881       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);
2882     END IF;
2883             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2884             FND_MSG_PUB.ADD;
2885             RAISE FND_API.G_EXC_ERROR;
2886           ELSE
2887             push_eval;
2888             RETURN;
2889           END IF;
2890         END IF;
2891       END IF;
2892       l_ctx_id := NULL;
2893       l_party_id_idx := H_PARTY_ID.COUNT+1;
2894     END IF;
2895    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2896       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);
2897     END IF;
2898     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
2899       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);
2900     END IF;
2901     LOOP 
2902       FETCH l_party_cur INTO
2903          l_party_id , l_TX34, l_TX35, l_TX40, l_TX39, l_TX45;
2904       EXIT WHEN l_party_cur%NOTFOUND;
2905       l_index := map_id(l_party_id);
2906       l_score := GET_PARTY_SCORE(l_TX34,l_TX35,l_TX40,l_TX39,l_TX45);
2907       IF NOT H_SCORES.EXISTS(l_index) THEN
2908         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
2909       ELSE
2910         H_SCORES(l_index).TOTAL_SCORE := 
2911                 H_SCORES(l_index).TOTAL_SCORE+l_score;
2912         H_SCORES(l_index).PARTY_SCORE := l_score;
2913       END IF;
2914       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2915         H_PARTY_ID_LIST(l_index) := 1;
2916         H_PARTY_ID(l_party_id_idx) := l_party_id;
2917         l_party_id_idx:= l_party_id_idx+1;
2918       END IF;
2919       IF (l_party_id_idx-1)>l_max_thresh THEN
2920         IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
2921           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
2922           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
2923           AND l_contact_pt_contains_str IS NULL THEN
2924             EXIT;
2925         END IF;
2926 	      CLOSE l_party_cur;
2927         IF p_index>1 THEN
2928    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2929       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);
2930     END IF;
2931           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2932           FND_MSG_PUB.ADD;
2933           RAISE FND_API.G_EXC_ERROR;
2934         ELSE
2935           push_eval;
2936           RETURN;
2937         END IF;
2938       END IF;
2939     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2943     END LOOP;
2940       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);
2941       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);
2942     END IF;
2944    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2945       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);
2946     END IF;
2947     CLOSE l_party_cur;
2948     ROLLBACK to eval_start;
2949   END;
2950 
2951   /**  Private procedure to acquire and score at party site level  ***/
2952   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
2953     l_party_id_idx NUMBER:=1;
2954     l_ctx_id NUMBER;
2955     h_ps_id HZ_PARTY_SEARCH.IDList;
2956     h_ps_party_id HZ_PARTY_SEARCH.IDList;
2957     h_ps_score HZ_PARTY_SEARCH.IDList;
2958     detcnt NUMBER := 1;
2959   BEGIN
2960    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2961       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);
2962       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);
2963     END IF;
2964   IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,'D_PS')>0
2965       AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and
2966       l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> 'Y' THEN
2967     l_party_id := H_SCORES.FIRST;
2968     WHILE l_party_id IS NOT NULL LOOP
2969       H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;
2970       l_party_id:=H_SCORES.NEXT(l_party_id);
2971     END LOOP;
2972     RETURN;
2973   END IF;
2974     SAVEPOINT eval_start;
2975     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2976    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2977       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);
2978     END IF;
2979       l_ctx_id := l_search_ctx_id;
2980       FORALL I in 1..H_PARTY_ID.COUNT 
2981          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2982              l_search_ctx_id,H_PARTY_ID(I));
2983       H_PARTY_ID.DELETE;
2984       H_PARTY_ID_LIST.DELETE;
2985     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2986    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2987       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);
2988     END IF;
2989       l_ctx_id := l_search_ctx_id;
2990       FORALL I in 1..H_PARTY_ID.COUNT 
2991          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2992              l_search_ctx_id,H_PARTY_ID(I));
2993       l_party_id_idx := H_PARTY_ID.COUNT+1;
2994     ELSE
2995       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2996          and check_estimate_hits('PARTY_SITES',p_party_site_contains_str)>l_max_thresh THEN
2997    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2998       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);
2999     END IF;
3000         IF p_index>1 THEN
3001    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3002       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);
3003     END IF;
3004           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3005           FND_MSG_PUB.ADD;
3006           RAISE FND_API.G_EXC_ERROR;
3007         ELSE
3008           push_eval;
3009           RETURN;
3010         END IF;
3011       END IF;
3012       l_party_id_idx := H_PARTY_ID.COUNT+1;
3013       l_ctx_id := NULL;
3014     END IF;
3015    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3016       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);
3017     END IF;
3018     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);
3019     LOOP 
3020       FETCH l_party_site_cur INTO
3021          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;
3022       EXIT WHEN l_party_site_cur%NOTFOUND;
3023       --Fix for bug 4417124 
3024       IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN
3025         l_index := map_id(l_ps_party_id);
3026         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);
3027         IF NOT H_SCORES.EXISTS(l_index) THEN
3028           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);
3032                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3029         ELSE
3030           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3031             H_SCORES(l_index).TOTAL_SCORE := 
3033             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3034           END IF;
3035         END IF;
3036         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3037           H_PARTY_ID_LIST(l_index) := 1;
3038           H_PARTY_ID(l_party_id_idx) := l_ps_party_id;
3039           l_party_id_idx:= l_party_id_idx+1;
3040         END IF;
3041         IF p_ins_details = 'Y' THEN
3042           h_ps_id(detcnt) := l_party_site_id;
3043           h_ps_party_id(detcnt) := l_ps_party_id;
3044           IF (p_emax_score > 0) THEN 
3045               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
3046           ELSE 
3047               h_ps_score(detcnt) := 0; 
3048           END IF; 
3049           detcnt := detcnt +1;
3050         END IF;
3051     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3052       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);
3053       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);
3054       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);
3055     END IF;
3056       END IF;
3057     END LOOP;
3058    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3059       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);
3060     END IF;
3061     CLOSE l_party_site_cur;
3062     ROLLBACK to eval_start;
3063     IF p_ins_details = 'Y' THEN
3064    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3065       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);
3066     END IF;
3067       FORALL I in 1..h_ps_id.COUNT 
3068         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
3069           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
3070     END IF;
3071   END;
3072 
3073   /**  Private procedure to acquire and score at contact point level  ***/
3074   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
3075     l_party_id_idx NUMBER:=1;
3076     l_ctx_id NUMBER;
3077     h_ct_id HZ_PARTY_SEARCH.IDList;
3078     h_ct_party_id HZ_PARTY_SEARCH.IDList;
3079     h_ct_score HZ_PARTY_SEARCH.IDList;
3080     detcnt NUMBER := 1;
3081   BEGIN
3082    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3083       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);
3084       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);
3085     END IF;
3086     SAVEPOINT eval_start;
3087     IF l_match_str = ' AND ' AND p_call_type='AND' THEN
3088    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3089       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);
3090     END IF;
3091       l_ctx_id := l_search_ctx_id;
3092       FORALL I in 1..H_PARTY_ID.COUNT 
3093          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3094              l_search_ctx_id,H_PARTY_ID(I));
3095       H_PARTY_ID.DELETE;
3096       H_PARTY_ID_LIST.DELETE;
3097     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3098    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3099       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);
3100     END IF;
3101       l_ctx_id := l_search_ctx_id;
3102       FORALL I in 1..H_PARTY_ID.COUNT 
3103          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3104              l_search_ctx_id,H_PARTY_ID(I));
3105       l_party_id_idx := H_PARTY_ID.COUNT+1;
3106     ELSE
3107       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3108          and check_estimate_hits('CONTACTS',p_contact_contains_str)>l_max_thresh THEN
3109    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3110       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);
3111     END IF;
3112         IF p_index>1 THEN
3113    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3114       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);
3115     END IF;
3116           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3117           FND_MSG_PUB.ADD;
3121           RETURN;
3118           RAISE FND_API.G_EXC_ERROR;
3119         ELSE
3120           push_eval;
3122         END IF;
3123       END IF;
3124       l_ctx_id := NULL;
3125       l_party_id_idx := H_PARTY_ID.COUNT+1;
3126     END IF;
3127    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3128       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);
3129     END IF;
3130     open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id,  p_search_merged, l_contact_cur);
3131     LOOP 
3132       FETCH l_contact_cur INTO
3133          l_org_contact_id, l_ct_party_id , l_TX22;
3134       EXIT WHEN l_contact_cur%NOTFOUND;
3135       l_index := map_id(l_ct_party_id);
3136       l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX22);
3137       IF NOT H_SCORES.EXISTS(l_index) THEN
3138         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);
3139       ELSE
3140         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
3141           H_SCORES(l_index).TOTAL_SCORE := 
3142                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
3143           H_SCORES(l_index).CONTACT_SCORE := l_score;
3144         END IF;
3145       END IF;
3146       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3147         H_PARTY_ID_LIST(l_index) := 1;
3148         H_PARTY_ID(l_party_id_idx) := l_ct_party_id;
3149         l_party_id_idx:= l_party_id_idx+1;
3150       END IF;
3151       IF p_ins_details = 'Y' THEN
3152         h_ct_id(detcnt) := l_org_contact_id;
3153         h_ct_party_id(detcnt) := l_ct_party_id;
3154         IF (p_emax_score > 0) THEN 
3155             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
3156         ELSE 
3157             h_ct_score(detcnt) := 0; 
3158         END IF; 
3159         detcnt := detcnt +1;
3160       END IF;
3161     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3162       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);
3163       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);
3164       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);
3165     END IF;
3166     END LOOP;
3167    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3168       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);
3169     END IF;
3170     CLOSE l_contact_cur;
3171     ROLLBACK to eval_start;
3172     IF p_ins_details = 'Y' THEN
3173    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3174       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);
3175     END IF;
3176       FORALL I in 1..h_ct_id.COUNT 
3177         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
3178           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
3179     END IF;
3180   END;
3181 
3182   /**  Private procedure to acquire and score at contact point level  ***/
3183   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
3184     l_party_id_idx NUMBER:=1;
3185     l_ctx_id NUMBER;
3186     h_cpt_id HZ_PARTY_SEARCH.IDList;
3187     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
3188     h_cpt_score HZ_PARTY_SEARCH.IDList;
3189     detcnt NUMBER := 1;
3190     l_cpt_flag VARCHAR2(1) := 'N';
3191     is_a_match VARCHAR2(1) := 'Y';
3192   BEGIN
3193    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3194       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);
3195       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);
3196     END IF;
3197     SAVEPOINT eval_start;
3198     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3199    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3200       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);
3201     END IF;
3202       l_ctx_id := l_search_ctx_id;
3203       FORALL I in 1..H_PARTY_ID.COUNT 
3204          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3205              l_search_ctx_id,H_PARTY_ID(I));
3206       H_PARTY_ID.DELETE;
3207       H_PARTY_ID_LIST.DELETE;
3208     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3209    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3213       FORALL I in 1..H_PARTY_ID.COUNT 
3210       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);
3211     END IF;
3212       l_ctx_id := l_search_ctx_id;
3214          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3215              l_search_ctx_id,H_PARTY_ID(I));
3216       l_party_id_idx := H_PARTY_ID.COUNT+1;
3217     ELSE
3218       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3219          and check_estimate_hits('CONTACT_POINTS',p_contact_pt_contains_str)>l_max_thresh THEN
3220    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3221       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);
3222     END IF;
3223         IF p_index>1 THEN
3224    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3225       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);
3226     END IF;
3227           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3228           FND_MSG_PUB.ADD;
3229           RAISE FND_API.G_EXC_ERROR;
3230         ELSE
3231           push_eval;
3232           RETURN;
3233         END IF;
3234       END IF;
3235       l_ctx_id := NULL;
3236       l_party_id_idx := H_PARTY_ID.COUNT+1;
3237     END IF;
3238    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3239       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);
3240     END IF;
3241     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);
3242     LOOP 
3243       FETCH l_contact_pt_cur INTO
3244          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;
3245       EXIT WHEN l_contact_pt_cur%NOTFOUND;
3246    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3247       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);
3248     END IF;
3249    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3250       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);
3251     END IF;
3252    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3253       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);
3254     END IF;
3255       --Fix for bug 4417124 
3256       IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN
3257         l_index := map_id(l_cpt_party_id);
3258         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
3259         IF NOT H_SCORES.EXISTS(l_index) THEN
3260           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);
3261           H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3262    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3263       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);
3264     END IF;
3265    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3266       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);
3267     END IF;
3268         ELSE
3269           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
3270             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
3271               H_SCORES(l_index).TOTAL_SCORE :=
3272               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;
3273               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;
3274               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3275    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3276       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);
3277     END IF;
3278    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3279       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);
3280     END IF;
3281    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3282       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);
3283     END IF;
3284    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3288           ELSE
3285       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);
3286     END IF;
3287             END IF;
3289    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3290       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);
3291     END IF;
3292             H_SCORES(l_index).TOTAL_SCORE :=
3293             		H_SCORES(l_index).TOTAL_SCORE+l_score;
3294             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3295             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3296    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3297       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);
3298     END IF;
3299    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3300       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);
3301     END IF;
3302    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3303       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);
3304     END IF;
3305           END IF;
3306         END IF;
3307    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3308       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);
3309     END IF;
3310    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3311       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);
3312     END IF;
3313         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3314           -- If rule is match all 
3315           IF l_match_str = ' AND ' THEN
3316    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3317       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);
3318     END IF;
3319             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3320               is_a_match := 'Y';
3321    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3322       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);
3323     END IF;
3324             ELSE
3325               is_a_match := 'N';
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             END IF;
3330           -- Else it is construed to be a match anyway
3331           ELSE
3332             is_a_match := 'Y';
3333    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3334       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);
3335     END IF;
3336           END IF;
3337         IF (is_a_match='Y') then
3338           H_PARTY_ID_LIST(l_index) := 1;
3339           H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;
3340           l_party_id_idx:= l_party_id_idx+1;
3341       end if;
3342         END IF;
3343         IF p_ins_details = 'Y' THEN
3344           IF l_match_str = ' AND ' THEN
3345    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3346       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);
3347     END IF;
3348             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3349               is_a_match := 'Y';
3350    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3351       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);
3352     END IF;
3353             ELSE
3354               is_a_match := 'N';
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             END IF;
3359           ELSE
3360             is_a_match := 'Y';
3361    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3362       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);
3363     END IF;
3364           END IF;
3365           IF (is_a_match='Y') THEN
3366           FOR I IN 1..h_cpt_id.COUNT LOOP
3367           IF h_cpt_id(I)=l_contact_pt_id THEN
3368           	 l_cpt_flag := 'Y';
3369           END IF;
3373           ELSE
3370           END LOOP;
3371           IF l_cpt_flag = 'Y' THEN
3372           	 NULL;
3374          	 h_cpt_id(detcnt) := l_contact_pt_id;
3375           	 h_cpt_party_id(detcnt) := l_cpt_party_id;
3376           	 IF (p_emax_score > 0) THEN 
3377               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
3378             ELSE 
3379               h_cpt_score(detcnt) := 0; 
3380           	 END IF; 
3381             detcnt := detcnt +1;
3382           END IF;
3383       end if;
3384         END IF;
3385     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3386       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);
3387       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);
3388       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);
3389     END IF;
3390       END IF;
3391     END LOOP;
3392    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3393       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);
3394     END IF;
3395     CLOSE l_contact_pt_cur;
3396     ROLLBACK to eval_start;
3397     IF p_ins_details = 'Y' THEN
3398    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3399       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);
3400     END IF;
3401       FORALL I in 1..h_cpt_id.COUNT 
3402         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
3403           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
3404     END IF;
3405   END eval_cpt_level;
3406 
3407   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
3408   PROCEDURE do_eval (p_index NUMBER) IS
3409     l_ctx_id NUMBER;
3410     l_threshold NUMBER;
3411     other_acq_criteria_exists BOOLEAN; 
3412     acq_cnt NUMBER; 
3413   BEGIN
3414    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3415       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);
3416       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);
3417     END IF;
3418     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
3419      l_threshold :=  round(( l_entered_max_score / 520) * 416); 
3420     other_acq_criteria_exists := TRUE ;
3421     --check if acquisition criteria exists for any other entity
3422     IF l_party_contains_str IS NOT NULL THEN 
3423     	acq_cnt := 1; 
3424     END IF; 
3425     IF l_party_site_contains_str IS NOT NULL THEN 
3426     	acq_cnt := acq_cnt+1; 
3427     END IF; 
3428     IF l_contact_contains_str IS NOT NULL THEN 
3429     	acq_cnt := acq_cnt+1; 
3430     END IF;
3431     IF l_contact_pt_contains_str IS NOT NULL THEN 
3432     	acq_cnt := acq_cnt+1; 
3433     END IF;  
3434     IF acq_cnt>1 THEN 
3435     	other_acq_criteria_exists := TRUE; 
3436     ELSE
3437     	other_acq_criteria_exists := FALSE; 
3438     END IF;  
3439       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);
3440       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);
3441       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);
3442     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
3443     	IF ( call_max_score(p_index) < l_threshold) THEN 
3444    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3445       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);
3446     END IF;
3447 	     	RETURN;	
3448     	ELSE 
3449    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3450       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);
3451     END IF;
3452 	     	FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED'); 
3453 	     	FND_MSG_PUB.ADD; 
3454 	     	RAISE FND_API.G_EXC_ERROR; 
3455     	END IF; 
3456     ELSE
3457    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3458       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);
3459     END IF;
3460       FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3461       FND_MSG_PUB.ADD;
3462       RAISE FND_API.G_EXC_ERROR;
3463      END IF; 
3464     END IF;
3465     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
3469     ELSIF call_order(p_index) = 'CONTACT' AND l_contact_contains_str IS NOT NULL THEN
3466       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
3467     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
3468       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3470       eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3471     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
3472       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3473     END IF;
3474   END;
3475   /************ End of find_parties private procedures **********/ 
3476 
3477   BEGIN
3478 
3479    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3480       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);
3481     END IF;
3482    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3483       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);
3484     END IF;
3485     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3486       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);
3487       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);
3488       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);
3489       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);
3490       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);
3491       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);
3492     END IF;
3493     -- ************************************
3494     -- STEP 1. Initialization and error checks
3495 
3496     l_match_str := ' AND ';
3497     IF p_match_type = 'AND' THEN
3498       l_match_str := ' AND ';
3499     ELSIF p_match_type = 'OR' THEN
3500       l_match_str := ' OR ';
3501     END IF;
3502     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);
3503     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
3504 
3505 
3506     --Fix for bug 4417124 
3507 
3508     SELECT use_contact_addr_flag, use_contact_cpt_flag 
3509     INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
3510     FROM hz_match_rules_b 
3511     WHERE match_rule_id = 60; 
3512 
3513     IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
3514       l_use_contact_addr_info := FALSE; 
3515     END IF; 
3516 
3517     IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
3518       l_use_contact_cpt_info := FALSE; 
3519     END IF; 
3520 
3521    --End fix for bug 4417124
3522 
3523     IF p_dup_batch_id IS NOT NULL THEN
3524       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH_BATCH'),10000);
3525     ELSE
3526       l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
3527     END IF;
3528     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
3529       g_score_until_thresh := true;
3530    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3531       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);
3532     END IF;
3533     ELSE
3534       g_score_until_thresh := false;
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 false',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3537     END IF;
3538     END IF;
3539    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3540       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);
3541     END IF;
3542     -- ************************************************************
3543     -- STEP 2. Setup of intermedia query strings for Acquisition query
3544     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
3545     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
3546     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
3547    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3548       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);
3549     END IF;
3550     l_denorm_max_score:=0;
3551     l_non_denorm_max_score:=0;
3552     IF l_ps_denorm_str IS NOT NULL THEN
3553       l_denorm_max_score := l_denorm_max_score+l_ps_max_score;
3554       l_denorm_str := l_ps_denorm_str;
3555     ELSE
3559       l_denorm_max_score := l_denorm_max_score+l_contact_max_score;
3556       l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;
3557     END IF;
3558     IF l_ct_denorm_str IS NOT NULL THEN
3560       IF l_denorm_str IS NOT NULL THEN
3561         l_denorm_str := l_denorm_str || ' OR ' ||l_ct_denorm_str;
3562       ELSE
3563         l_denorm_str := l_ct_denorm_str;
3564       END IF;
3565     ELSE
3566       l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;
3567     END IF;
3568     IF l_cpt_denorm_str IS NOT NULL THEN
3569       l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;
3570       IF l_denorm_str IS NOT NULL THEN
3571         l_denorm_str := l_denorm_str || ' OR ' ||l_cpt_denorm_str;
3572       ELSE
3573         l_denorm_str := l_cpt_denorm_str;
3574       END IF;
3575     ELSE
3576       l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;
3577     END IF;
3578     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));
3579     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3580 
3581     -- Setup Search Context ID
3582     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3583     x_search_ctx_id := l_search_ctx_id;
3584 
3585    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3586       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);
3587     END IF;
3588     IF l_party_contains_str IS NULL THEN
3589       defpt := 1;
3590     END IF;
3591     IF l_party_site_contains_str IS NULL THEN
3592       defps := 1;
3593     END IF;
3594     IF l_contact_contains_str IS NULL THEN
3595       defct := 1;
3596     END IF;
3597     IF l_contact_pt_contains_str IS NULL THEN
3598       defcpt := 1;
3599     END IF;
3600 
3601     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3602    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3603       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);
3604     END IF;
3605       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);
3606       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);
3607       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);
3608       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);
3609       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);
3610       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);
3611     END IF;
3612     FOR I in 1..5 LOOP
3613       do_eval(I);
3614     END LOOP;
3615     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3616       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);
3617     END IF;
3618     x_num_matches := 0;
3619     l_num_eval := 0;
3620     IF l_match_str = ' OR ' THEN
3621       l_party_id := H_SCORES.FIRST;
3622     ELSE
3623       l_party_id := H_PARTY_ID_LIST.FIRST;
3624     END IF;
3625     WHILE l_party_id IS NOT NULL LOOP
3626       l_num_eval:= l_num_eval+1;
3627     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3628    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3629       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);
3630     END IF;
3631       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);
3632       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);
3633     END IF;
3634    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3635       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);
3636     END IF;
3637       IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(416/520) THEN
3638             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
3639             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));
3640             x_num_matches := x_num_matches+1;
3641    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3645       IF l_match_str = ' OR ' THEN
3642       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);
3643     END IF;
3644       END IF;
3646         l_party_id:=H_SCORES.NEXT(l_party_id);
3647       ELSE
3648         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3649       END IF;
3650     END LOOP;
3651     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3652    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3653       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);
3654     END IF;
3655    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3656       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);
3657     END IF;
3658 EXCEPTION
3659   WHEN L_RETURN_IMM_EXC THEN
3660     RETURN;
3661   WHEN FND_API.G_EXC_ERROR THEN
3662     RAISE FND_API.G_EXC_ERROR;
3663   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3664     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3665   WHEN OTHERS THEN
3666     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3667     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.find_parties');
3668     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3669     FND_MSG_PUB.ADD;
3670     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3671 END find_parties;
3672 
3673 PROCEDURE find_persons (
3674       p_rule_id               IN      NUMBER,
3675       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
3676       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
3677       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
3678       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
3679       p_restrict_sql          IN      VARCHAR2,
3680       p_match_type            IN      VARCHAR2,
3681       p_search_merged         IN      VARCHAR2,
3682       p_dup_party_id          IN      NUMBER,
3683       p_dup_set_id            IN      NUMBER,
3684       p_dup_batch_id          IN      NUMBER,
3685       p_ins_details           IN      VARCHAR2,
3686       x_search_ctx_id         OUT     NUMBER,
3687       x_num_matches           OUT     NUMBER
3688 ) IS
3689 
3690   -- Strings to hold the generated Intermedia query strings
3691   l_party_contains_str VARCHAR2(32000); 
3692   l_party_site_contains_str VARCHAR2(32000);
3693   l_contact_contains_str VARCHAR2(32000);
3694   l_contact_pt_contains_str VARCHAR2(32000);
3695   l_denorm_str VARCHAR2(32000);
3696   l_ps_denorm_str VARCHAR2(32000);
3697   l_ct_denorm_str VARCHAR2(32000);
3698   l_cpt_denorm_str VARCHAR2(32000);
3699 
3700   -- Other local variables
3701   l_match_str VARCHAR2(30); -- Match type (AND or OR)
3702   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
3703   -- For Score calculation
3704   l_max_score NUMBER;
3705   l_match_idx NUMBER;
3706   l_entered_max_score NUMBER;
3707   FIRST BOOLEAN;
3708   l_search_ctx_id NUMBER; -- Generated Search Context ID
3709 
3710   l_TX39 VARCHAR2(2000);
3711   l_TX13 VARCHAR2(2000);
3712   l_TX9 VARCHAR2(2000);
3713   l_TX22 VARCHAR2(2000);
3714   l_TX35 VARCHAR2(2000);
3715   l_TX1 VARCHAR2(2000);
3716   l_TX3 VARCHAR2(2000);
3717   l_TX12 VARCHAR2(2000);
3718   l_TX15 VARCHAR2(2000);
3719   l_TX4 VARCHAR2(2000);
3720   l_TX10 VARCHAR2(2000);
3721   l_TX11 VARCHAR2(2000);
3722   l_TX5 VARCHAR2(2000);
3723   l_TX40 VARCHAR2(2000);
3724   l_TX34 VARCHAR2(2000);
3725   l_TX45 VARCHAR2(2000);
3726   l_TX14 VARCHAR2(2000);
3727   l_TX6 VARCHAR2(2000);
3728   H_SCORES HZ_PARTY_SEARCH.score_list;
3729   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
3730   H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
3731 
3732   l_score NUMBER;
3733   l_idx NUMBER;
3734   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
3735   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
3736   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
3737   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
3738   l_party_id NUMBER;
3739   l_ps_party_id NUMBER;
3740   l_ct_party_id NUMBER;
3741   l_cpt_party_id NUMBER;
3742   l_cpt_ps_id NUMBER;
3743   l_cpt_contact_id NUMBER;
3744   l_cpt_type VARCHAR2(100);
3745   l_party_site_id NUMBER;
3746   l_org_contact_id NUMBER;
3747   l_contact_pt_id NUMBER;
3748   l_cpt_level VARCHAR2(100);
3749   l_ps_contact_id NUMBER;
3750   l_party_max_score NUMBER;
3751   l_ps_max_score NUMBER;
3752   l_contact_max_score NUMBER;
3753   l_cpt_max_score NUMBER;
3754   l_denorm_max_score NUMBER;
3755   l_non_denorm_max_score NUMBER;
3756 
3757   defpt NUMBER :=0;
3758   defps NUMBER :=0;
3759   defct NUMBER :=0;
3760   defcpt NUMBER :=0;
3761   l_index NUMBER;
3762   l_max_thresh NUMBER;
3763   l_tmp NUMBER;
3764   l_merge_flag VARCHAR2(1);
3765   l_num_eval NUMBER:=0;
3766 
3767   L_RETURN_IMM_EXC Exception;
3768 
3769   
3770   /********************* Find Parties private procedures *******/
3771   PROCEDURE set_person_party_type IS
3772   BEGIN
3773     g_party_stage_rec.TX36:= 
3774         HZ_TRANS_PKG.EXACT(
3775              'PERSON'
3776              ,null,'PARTY_TYPE'
3777              ,'PARTY');
3778   END;
3779     
3780   PROCEDURE unset_person_party_type IS
3781   BEGIN
3782     g_party_stage_rec.TX36 := '';
3783   END;
3784   
3785   FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) 
3786   RETURN NUMBER IS
3790     SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;
3787     l_party_type VARCHAR2(255);
3788     l_person_id NUMBER(15);
3789   BEGIN
3791     IF l_party_type = 'PERSON' THEN
3792       RETURN p_party_id;
3793     ELSIF p_contact_id IS NULL THEN
3794       RETURN NULL;
3795     ELSE
3796       BEGIN 
3797         SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p
3798         WHERE oc.org_contact_id = p_contact_id
3799         AND r.relationship_id = oc.party_relationship_id 
3800         AND r.object_id = p_party_id
3801         AND p.party_id = r.subject_id 
3802         AND p.party_type = 'PERSON'
3803         AND ROWNUM=1;
3804         
3805         RETURN l_person_id;
3806       EXCEPTION
3807         WHEN NO_DATA_FOUND THEN
3808           RETURN NULL;
3809       END;      
3810     END IF;
3811   END;  
3812 
3813   PROCEDURE push_eval IS
3814   BEGIN
3815     H_PARTY_ID.DELETE;
3816     H_PARTY_ID_LIST.DELETE;
3817     H_SCORES.DELETE;        
3818     g_mappings.DELETE;
3819     HZ_DQM_SEARCH_UTIL.set_num_eval(0);
3820     call_order(5) := call_order(1);
3821     call_type(5) := 'AND';
3822     call_max_score(5) := call_max_score(1);
3823     call_type(2) := 'OR';
3824   END;
3825 
3826   /**  Private procedure to acquire and score at party level  ***/
3827   PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
3828     l_party_id_idx NUMBER:=1;
3829     l_ctx_id NUMBER;
3830   BEGIN
3831     SAVEPOINT eval_start;
3832     set_person_party_type;
3833     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3834       l_ctx_id := l_search_ctx_id;
3835       FORALL I in 1..H_PARTY_ID.COUNT 
3836          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3837              l_search_ctx_id,H_PARTY_ID(I));
3838       H_PARTY_ID.DELETE;
3839       H_PARTY_ID_LIST.DELETE;
3840     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3841       l_ctx_id := l_search_ctx_id;
3842       FORALL I in 1..H_PARTY_ID.COUNT 
3843          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3844              l_search_ctx_id,H_PARTY_ID(I));
3845       l_party_id_idx := H_PARTY_ID.COUNT+1;
3846     ELSE
3847       IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3848          and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
3849    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3850       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);
3851     END IF;
3852         IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' THEN
3853    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3854       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);
3855     END IF;
3856           IF (l_party_site_contains_str IS NULL AND
3857              l_contact_contains_str IS NULL AND
3858              l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN
3859             return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);
3860             RAISE L_RETURN_IMM_EXC;
3861           ELSE
3862             open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);
3863           END IF;
3864         ELSE
3865           IF p_index>1 THEN
3866    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3867       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);
3868     END IF;
3869             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3870             FND_MSG_PUB.ADD;
3871             RAISE FND_API.G_EXC_ERROR;
3872           ELSE
3873             push_eval;
3874             RETURN;
3875           END IF;
3876         END IF;
3877       END IF;
3878       l_ctx_id := NULL;
3879       l_party_id_idx := H_PARTY_ID.COUNT+1;
3880     END IF;
3881     IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
3882       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);
3883     END IF;
3884     LOOP 
3885       FETCH l_party_cur INTO
3886          l_party_id , l_TX34, l_TX35, l_TX40, l_TX39, l_TX45;
3887       EXIT WHEN l_party_cur%NOTFOUND;
3888       l_index := map_id(l_party_id);
3889       l_score := GET_PARTY_SCORE(l_TX34,l_TX35,l_TX40,l_TX39,l_TX45);
3890       IF NOT H_SCORES.EXISTS(l_index) THEN
3891         H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
3892       ELSE
3893         H_SCORES(l_index).TOTAL_SCORE := 
3894                 H_SCORES(l_index).TOTAL_SCORE+l_score;
3895         H_SCORES(l_index).PARTY_SCORE := l_score;
3896       END IF;
3897       IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3898         H_PARTY_ID_LIST(l_index) := 1;
3899         H_PARTY_ID(l_party_id_idx) := l_party_id;
3900         l_party_id_idx:= l_party_id_idx+1;
3901       END IF;
3902       IF (l_party_id_idx-1)>l_max_thresh THEN
3903          IF p_index=1 AND call_order(2) = 'PARTY_SITE' 
3904           AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
3908           H_PARTY_ID_LIST.DELETE(l_index);
3905           AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' 
3906           AND l_contact_pt_contains_str IS NULL THEN
3907           H_PARTY_ID.DELETE(l_party_id_idx-1);
3909           H_SCORES.DELETE(l_index);
3910           EXIT;
3911         END IF;
3912         CLOSE l_party_cur;
3913         IF p_index>1 THEN
3914    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3915       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);
3916     END IF;
3917           FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3918           FND_MSG_PUB.ADD;
3919           RAISE FND_API.G_EXC_ERROR;
3920         ELSE
3921           push_eval;
3922           RETURN;
3923         END IF;
3924       END IF;
3925     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3926       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);
3927       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);
3928       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);
3929     END IF;
3930     END LOOP;
3931     CLOSE l_party_cur;
3932     ROLLBACK to eval_start;
3933   END;
3934   PROCEDURE open_person_contact_cursor(
3935             p_contains_str  VARCHAR2, 
3936             p_search_ctx_id  NUMBER, 
3937             x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
3938   BEGIN
3939     OPEN x_cursor FOR 
3940       SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID, TX22
3941       FROM HZ_STAGED_CONTACTS stage
3942       WHERE contains( concat_col, p_contains_str)>0
3943       AND ORG_CONTACT_ID in (
3944             SELECT  /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ 
3945             org_contact_id
3946             from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc
3947             where d.party_id = r.subject_id
3948             and oc.party_relationship_id = r.relationship_id
3949             and d.search_context_id = p_search_ctx_id);   
3950   exception
3951     when others then
3952       if (instrb(SQLERRM,'DRG-51030')>0) then 
3953         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
3954         FND_MSG_PUB.ADD;
3955         RAISE FND_API.G_EXC_ERROR;
3956       elsif (instrb(SQLERRM,'DRG-50943')>0) then 
3957         FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
3958         FND_MSG_PUB.ADD;
3959         RAISE FND_API.G_EXC_ERROR;
3960       else 
3961         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3962       end if;
3963   END;
3964 
3965   /**  Private procedure to acquire and score at party site level  ***/
3966   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
3967     l_party_id_idx NUMBER:=1;
3968     l_ctx_id NUMBER;
3969     h_ps_id HZ_PARTY_SEARCH.IDList;
3970     h_ps_party_id HZ_PARTY_SEARCH.IDList;
3971     h_ps_score HZ_PARTY_SEARCH.IDList;
3972     detcnt NUMBER := 1;
3973     l_person_id NUMBER;
3974   BEGIN
3975     SAVEPOINT eval_start;
3976     unset_person_party_type;
3977     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3978       l_ctx_id := l_search_ctx_id;
3979       FORALL I in 1..H_PARTY_ID.COUNT 
3980          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3981              l_search_ctx_id,H_PARTY_ID(I));
3982       H_PARTY_ID.DELETE;
3983       H_PARTY_ID_LIST.DELETE;
3984     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3985       l_ctx_id := l_search_ctx_id;
3986       FORALL I in 1..H_PARTY_ID.COUNT 
3987          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3988              l_search_ctx_id,H_PARTY_ID(I));
3989       l_party_id_idx := H_PARTY_ID.COUNT+1;
3990     ELSE
3991       l_party_id_idx := H_PARTY_ID.COUNT+1;
3992       l_ctx_id := NULL;
3993     END IF;
3994     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);
3995     LOOP 
3996       FETCH l_party_site_cur INTO
3997          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;
3998       EXIT WHEN l_party_site_cur%NOTFOUND;
3999       IF l_ctx_id IS NULL THEN
4000         l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);
4001       ELSE
4002         l_person_id := l_ps_party_id;
4003       END IF;
4004       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4005         l_index := map_id(l_person_id);
4006         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);
4007         IF NOT H_SCORES.EXISTS(l_index) THEN
4008           IF l_ctx_id IS NULL THEN
4009             H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);
4010           END IF;
4011         ELSE
4012           IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
4013             H_SCORES(l_index).TOTAL_SCORE := 
4014                   H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
4015             H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
4016           END IF;
4017         END IF;
4021           l_party_id_idx:= l_party_id_idx+1;
4018         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4019           H_PARTY_ID_LIST(l_index) := 1;
4020           H_PARTY_ID(l_party_id_idx) := l_person_id;
4022         END IF;
4023         IF (l_party_id_idx-1)>l_max_thresh THEN
4024           CLOSE l_party_site_cur;
4025           IF p_index>1 THEN
4026    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4027       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);
4028     END IF;
4029             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4030             FND_MSG_PUB.ADD;
4031             RAISE FND_API.G_EXC_ERROR;
4032           ELSE
4033             push_eval;
4034             RETURN;
4035           END IF;
4036         END IF;
4037         IF p_ins_details = 'Y' THEN
4038           h_ps_id(detcnt) := l_party_site_id;
4039           h_ps_party_id(detcnt) := l_person_id;
4040           IF (p_emax_score > 0) THEN 
4041               h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
4042           ELSE 
4043               h_ps_score(detcnt) := 0; 
4044           END IF; 
4045           detcnt := detcnt +1;
4046         END IF;
4047     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4048       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);
4049       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);
4050       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);
4051       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);
4052     END IF;
4053       END IF;
4054     END LOOP;
4055     CLOSE l_party_site_cur;
4056     ROLLBACK to eval_start;
4057     IF p_ins_details = 'Y' THEN
4058       FORALL I in 1..h_ps_id.COUNT 
4059         INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
4060           l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
4061     END IF;
4062   END;
4063 
4064   /**  Private procedure to acquire and score at party site level  ***/
4065   PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
4066     l_party_id_idx NUMBER:=1;
4067     l_ctx_id NUMBER;
4068     h_ct_id HZ_PARTY_SEARCH.IDList;
4069     h_ct_party_id HZ_PARTY_SEARCH.IDList;
4070     h_ct_score HZ_PARTY_SEARCH.IDList;
4071     detcnt NUMBER := 1;
4072     l_person_id NUMBER;
4073   BEGIN
4074     SAVEPOINT eval_start;
4075     l_ctx_id := l_search_ctx_id;
4076     unset_person_party_type;
4077     FORALL I in 1..H_PARTY_ID.COUNT 
4078          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4079              l_search_ctx_id,H_PARTY_ID(I));
4080       l_party_id_idx := H_PARTY_ID.COUNT+1;
4081     open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);
4082     LOOP 
4083       FETCH l_contact_cur INTO
4084          l_org_contact_id, l_ct_party_id , l_TX22;
4085       EXIT WHEN l_contact_cur%NOTFOUND;
4086       l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);
4087       l_index := map_id(l_person_id);
4088       IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4089         l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX22);
4090         IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
4091           H_SCORES(l_index).TOTAL_SCORE := 
4092                 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
4093           H_SCORES(l_index).CONTACT_SCORE := l_score;
4094         END IF;
4095       END IF;
4096       IF p_ins_details = 'Y' THEN
4097         h_ct_id(detcnt) := l_org_contact_id;
4098         h_ct_party_id(detcnt) := l_person_id;
4099         IF (p_emax_score > 0) THEN 
4100             h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
4101         ELSE 
4102             h_ct_score(detcnt) := 0; 
4103         END IF; 
4104         detcnt := detcnt +1;
4105       END IF;
4106     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4107       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);
4108       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);
4109       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);
4110       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);
4111     END IF;
4112     END LOOP;
4113     CLOSE l_contact_cur;
4114     ROLLBACK to eval_start;
4115     IF p_ins_details = 'Y' THEN
4116       FORALL I in 1..h_ct_id.COUNT 
4117         INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
4118           l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
4119     END IF;
4120   END;
4121 
4122   /**  Private procedure to acquire and score at contact point level  ***/
4126     h_cpt_id HZ_PARTY_SEARCH.IDList;
4123   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
4124     l_party_id_idx NUMBER:=1;
4125     l_ctx_id NUMBER;
4127     h_cpt_party_id HZ_PARTY_SEARCH.IDList;
4128     h_cpt_score HZ_PARTY_SEARCH.IDList;
4129     detcnt NUMBER := 1;
4130     l_person_id NUMBER;
4131     is_a_match VARCHAR2(1) := 'Y';
4132     l_cpt_flag VARCHAR2(1) := 'N';
4133   BEGIN
4134    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4135       hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4136     END IF;
4137    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4138       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);
4139     END IF;
4140     SAVEPOINT eval_start;
4141     unset_person_party_type;
4142     IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
4143       l_ctx_id := l_search_ctx_id;
4144       FORALL I in 1..H_PARTY_ID.COUNT 
4145          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4146              l_search_ctx_id,H_PARTY_ID(I));
4147       H_PARTY_ID.DELETE;
4148       H_PARTY_ID_LIST.DELETE;
4149     ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
4150    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4151       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);
4152     END IF;
4153       l_ctx_id := l_search_ctx_id;
4154       FORALL I in 1..H_PARTY_ID.COUNT 
4155          INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4156              l_search_ctx_id,H_PARTY_ID(I));
4157       l_party_id_idx := H_PARTY_ID.COUNT+1;
4158     ELSE
4159    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4160       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);
4161     END IF;
4162       l_ctx_id := NULL;
4163       l_party_id_idx := H_PARTY_ID.COUNT+1;
4164     END IF;
4165    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4166       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);
4167     END IF;
4168     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);
4169     LOOP 
4170       FETCH l_contact_pt_cur INTO
4171          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;
4172       EXIT WHEN l_contact_pt_cur%NOTFOUND;
4173    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4174       hz_utility_v2pub.debug(p_message=>' ------------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4175     END IF;
4176    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4177       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);
4178     END IF;
4179    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4180       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);
4181     END IF;
4182       IF l_ctx_id IS NULL THEN
4183         l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);
4184       ELSE
4185         l_person_id := l_cpt_party_id;
4186       END IF;
4187       IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4188         l_index := map_id(l_person_id);
4189         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
4190         IF NOT H_SCORES.EXISTS(l_index) THEN
4191           IF l_ctx_id IS NULL THEN
4192             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);
4193            H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4194    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4195       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);
4196     END IF;
4197    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4198       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);
4199     END IF;
4200    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4201       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);
4202     END IF;
4203           END IF;
4204         ELSE
4205    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4206       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);
4210               H_SCORES(l_index).TOTAL_SCORE :=
4207     END IF;
4208           IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
4209             IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
4211               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;
4212               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;
4213               H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4214    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4215       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);
4216     END IF;
4217    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4218       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);
4219     END IF;
4220    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4221       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);
4222     END IF;
4223    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4224       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);
4225     END IF;
4226             END IF;
4227           ELSE
4228    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4229       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);
4230     END IF;
4231             H_SCORES(l_index).TOTAL_SCORE :=
4232             H_SCORES(l_index).TOTAL_SCORE+l_score;
4233             H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4234             H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4235    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4236       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);
4237     END IF;
4238    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4239       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);
4240     END IF;
4241    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4242       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);
4243     END IF;
4244           END IF;
4245         END IF;
4246    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4247       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);
4248     END IF;
4249    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4250       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);
4251     END IF;
4252         IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4253           -- If rule is match all 
4254           IF l_match_str = ' AND ' THEN
4255    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4256       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);
4257     END IF;
4258             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4259               is_a_match := 'Y';
4260    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4261       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);
4262     END IF;
4263             ELSE
4264               is_a_match := 'N';
4265    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4266       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);
4267     END IF;
4268             END IF;
4269           -- Else it is construed as a match anyway 
4270           ELSE
4271             is_a_match := 'Y';
4272    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4273       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);
4274     END IF;
4275           END IF;
4276           IF (is_a_match='Y') THEN
4277           H_PARTY_ID_LIST(l_index) := 1;
4278           H_PARTY_ID(l_party_id_idx) := l_person_id;
4279           l_party_id_idx:= l_party_id_idx+1;
4280       end if;
4281         END IF;
4282         IF (l_party_id_idx-1)>l_max_thresh THEN
4283           CLOSE l_contact_pt_cur;
4284           IF p_index>1 THEN
4285    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4289             FND_MSG_PUB.ADD;
4286       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);
4287     END IF;
4288             FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4290             RAISE FND_API.G_EXC_ERROR;
4291           ELSE
4292             push_eval;
4293             RETURN;
4294           END IF;
4295         END IF;
4296         IF p_ins_details = 'Y' THEN
4297           -- If rule is match all 
4298           IF l_match_str = ' AND ' THEN
4299    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4300       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);
4301     END IF;
4302             IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4303               is_a_match := 'Y';
4304    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4305       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);
4306     END IF;
4307             ELSE
4308               is_a_match := 'N';
4309    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4310       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);
4311     END IF;
4312             END IF;
4313           -- Else it is construed as a match anyway 
4314           ELSE
4315             is_a_match := 'Y';
4316    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4317       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);
4318     END IF;
4319           END IF;
4320           IF (is_a_match='Y') THEN
4321    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4322       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);
4323     END IF;
4324           FOR I IN 1..h_cpt_id.COUNT LOOP
4325           IF h_cpt_id(I)=l_contact_pt_id THEN
4326           	 l_cpt_flag := 'Y';
4327           END IF;
4328           END LOOP;
4329           IF l_cpt_flag = 'Y' THEN
4330           	 NULL;
4331           ELSE 
4332          	 h_cpt_id(detcnt) := l_contact_pt_id;
4333           h_cpt_party_id(detcnt) := l_person_id;
4334           	 IF (p_emax_score > 0) THEN 
4335               h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
4336             ELSE 
4337               h_cpt_score(detcnt) := 0; 
4338           	 END IF; 
4339             detcnt := detcnt +1;
4340           END IF;
4341       end if;
4342         END IF;
4343     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4344       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);
4345       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);
4346       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);
4347       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);
4348     END IF;
4349       END IF;
4350     END LOOP;
4351     CLOSE l_contact_pt_cur;
4352     ROLLBACK to eval_start;
4353     IF p_ins_details = 'Y' THEN
4354       FORALL I in 1..h_cpt_id.COUNT 
4355         INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
4356           l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
4357     END IF;
4358   END;
4359 
4360   /**  Private procedure to call the eval procedure at each entity in the correct order ***/
4361   PROCEDURE do_eval (p_index NUMBER) IS
4362     l_ctx_id NUMBER;
4363     l_threshold NUMBER;
4364     other_acq_criteria_exists BOOLEAN; 
4365     acq_cnt NUMBER; 
4366   BEGIN
4367     IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
4368      l_threshold :=  round(( l_entered_max_score / 520) * 416); 
4369     other_acq_criteria_exists := TRUE ;
4370     --check if acquisition criteria exists for any other entity
4371     IF l_party_contains_str IS NOT NULL THEN 
4372     	acq_cnt := 1; 
4373     END IF; 
4374     IF l_party_site_contains_str IS NOT NULL THEN 
4375     	acq_cnt := acq_cnt+1; 
4376     END IF; 
4377     IF l_contact_contains_str IS NOT NULL THEN 
4378     	acq_cnt := acq_cnt+1; 
4379     END IF;
4380     IF l_contact_pt_contains_str IS NOT NULL THEN 
4381     	acq_cnt := acq_cnt+1; 
4382     END IF;  
4383     IF acq_cnt>1 THEN 
4384     	other_acq_criteria_exists := TRUE; 
4385     ELSE
4386     	other_acq_criteria_exists := FALSE; 
4387     END IF;  
4388       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);
4392     	IF ( call_max_score(p_index) < l_threshold) THEN 
4389       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);
4390       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);
4391     IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
4393    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4394       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);
4395     END IF;
4396 	     	RETURN;	
4397     	ELSE 
4398    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4399       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);
4400     END IF;
4401 	     	FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED'); 
4402 	     	FND_MSG_PUB.ADD; 
4403 	     	RAISE FND_API.G_EXC_ERROR; 
4404     	END IF; 
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     END IF;
4414     IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
4415       eval_party_level(l_party_contains_str,call_type(p_index), p_index);
4416     ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
4417       eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4418     ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
4419       eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4420     END IF;
4421   END;
4422   /************ End of find_persons private procedures **********/ 
4423 
4424   BEGIN
4425 
4426     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4427       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);
4428     END IF;
4429     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4430       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);
4431       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);
4432       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);
4433     END IF;
4434     -- ************************************
4435     -- STEP 1. Initialization and error checks
4436 
4437     l_match_str := ' AND ';
4438     IF p_match_type = 'AND' THEN
4439       l_match_str := ' AND ';
4440     ELSIF p_match_type = 'OR' THEN
4441       l_match_str := ' OR ';
4442     END IF;
4443     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);
4444     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4445 
4446     l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
4447     IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
4448       g_score_until_thresh := true;
4449     ELSE
4450       g_score_until_thresh := false;
4451     END IF;
4452     -- ************************************************************
4453     -- STEP 2. Setup of intermedia query strings for Acquisition query
4454     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
4455     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
4456     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
4457     l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);
4458     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
4459 
4460     -- Setup Search Context ID
4461     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4462     x_search_ctx_id := l_search_ctx_id;
4463 
4464     IF l_party_contains_str IS NULL THEN
4465       defpt := 1;
4466     END IF;
4467     IF l_party_site_contains_str IS NULL THEN
4468       defps := 1;
4469     END IF;
4470     IF l_contact_contains_str IS NULL THEN
4471       defct := 1;
4472     END IF;
4473     IF l_contact_pt_contains_str IS NULL THEN
4474       defcpt := 1;
4475     END IF;
4476 
4477     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4478       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);
4479       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);
4483       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);
4480       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);
4481       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);
4482       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);
4484     END IF;
4485     FOR I in 1..5 LOOP
4486       do_eval(I);
4487     END LOOP;
4488     IF l_contact_contains_str IS NOT NULL THEN
4489       eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);
4490     END IF;
4491     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4492       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);
4493     END IF;
4494     x_num_matches := 0;
4495     l_num_eval := 0;
4496     IF l_match_str = ' OR ' THEN
4497       l_party_id := H_SCORES.FIRST;
4498     ELSE
4499       l_party_id := H_PARTY_ID_LIST.FIRST;
4500     END IF;
4501     WHILE l_party_id IS NOT NULL LOOP
4502       l_num_eval:= l_num_eval+1;
4503     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4504       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);
4505       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);
4506     END IF;
4507       IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(416/520) THEN
4508             INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) 
4509             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));
4510             x_num_matches := x_num_matches+1;
4511       END IF;
4512       IF l_match_str = ' OR ' THEN
4513         l_party_id:=H_SCORES.NEXT(l_party_id);
4514       ELSE
4515         l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
4516       END IF;
4517     END LOOP;
4518     HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
4519     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4520       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);
4521     END IF;
4522 EXCEPTION
4523   WHEN L_RETURN_IMM_EXC THEN
4524     RETURN;
4525   WHEN FND_API.G_EXC_ERROR THEN
4526     RAISE FND_API.G_EXC_ERROR;
4527   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4528     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4529   WHEN OTHERS THEN
4530     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4531     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.find_persons');
4532     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4533     FND_MSG_PUB.ADD;
4534     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4535 END find_persons;
4536 
4537 PROCEDURE find_persons (
4538       p_rule_id               IN      NUMBER,
4539       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
4540       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
4541       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
4542       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
4543       p_restrict_sql          IN      VARCHAR2,
4544       p_match_type            IN      VARCHAR2,
4545       p_search_merged         IN      VARCHAR2,
4546       p_ins_details           IN      VARCHAR2,
4547       x_search_ctx_id         OUT     NUMBER,
4548       x_num_matches           OUT     NUMBER
4549 ) IS
4550 
4551   BEGIN
4552      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);
4553   END;
4554 PROCEDURE find_party_details (
4555       p_rule_id               IN      NUMBER,
4556       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
4557       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
4558       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
4559       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
4560       p_restrict_sql          IN      VARCHAR2,
4561       p_match_type            IN      VARCHAR2,
4562       p_search_merged         IN      VARCHAR2,
4563       x_search_ctx_id         OUT     NUMBER,
4564       x_num_matches           OUT     NUMBER
4565 ) IS
4566 
4567   BEGIN
4568     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4569       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);
4570     END IF;
4571     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4572       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);
4573       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);
4577   find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,
4574       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);
4575       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);
4576     END IF;
4578                p_restrict_sql,p_match_type,p_search_merged,null,null, null,'Y',
4579                x_search_ctx_id,x_num_matches);
4580   DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4581   AND NOT EXISTS 
4582        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);
4583   DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4584   AND NOT EXISTS 
4585        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);
4586   DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id 
4587   AND NOT EXISTS 
4588        (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);
4589     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4590       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);
4591     END IF;
4592 EXCEPTION
4593   WHEN FND_API.G_EXC_ERROR THEN
4594     RAISE FND_API.G_EXC_ERROR;
4595   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4596     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4597   WHEN OTHERS THEN
4598     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4599     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.find_party_details');
4600     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4601     FND_MSG_PUB.ADD;
4602     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4603 END find_party_details;
4604 
4605 PROCEDURE find_duplicate_parties (
4606       p_rule_id               IN      NUMBER,
4607       p_party_id              IN      NUMBER,
4608       p_restrict_sql          IN      VARCHAR2,
4609       p_match_type            IN      VARCHAR2,
4610       p_dup_batch_id          IN      NUMBER,
4611       p_search_merged         IN      VARCHAR2,
4612       x_dup_set_id            OUT     NUMBER,
4613       x_search_ctx_id         OUT     NUMBER,
4614       x_num_matches           OUT     NUMBER
4615 ) IS
4616   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4617   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4618   l_contact_list HZ_PARTY_SEARCH.contact_list;
4619   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4620   l_match_idx NUMBER;
4621 
4622   --Fix for bug 4417124
4623   l_use_contact_addr_info BOOLEAN := TRUE;
4624   l_use_contact_cpt_info BOOLEAN  := TRUE;
4625   l_use_contact_addr_flag VARCHAR2(1) := 'Y';
4626   l_use_contact_cpt_flag  VARCHAR2(1) := 'Y';
4627 
4628 BEGIN
4629 
4630     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4631       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);
4632     END IF;
4633     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4634       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);
4635       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);
4636       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);
4637       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);
4638       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);
4639       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);
4640     END IF;
4641 
4642   --Fix for bug 4417124 
4643 
4644   SELECT use_contact_addr_flag, use_contact_cpt_flag 
4645   INTO l_use_contact_addr_flag, l_use_contact_cpt_flag 
4646   FROM hz_match_rules_b 
4647   WHERE match_rule_id = 60; 
4648 
4649   IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
4650     l_use_contact_addr_info := FALSE; 
4651   END IF; 
4652 
4653   IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
4654     l_use_contact_cpt_info := FALSE; 
4655   END IF; 
4656 
4657  --End fix for bug 4417124
4658 
4659   get_party_for_search(
4660               p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);
4661 
4662     IF NOT check_prim_cond (l_party_rec,
4663                             l_party_site_list,
4664                             l_contact_list,
4665                             l_cpt_list) THEN
4666       x_dup_set_id:=NULL;
4667       x_search_ctx_id:=NULL;
4668       x_num_matches:=0;
4669       RETURN;
4670     END IF;
4671   x_dup_set_id := NULL;
4672   IF p_dup_batch_id IS NOT NULL THEN
4673     SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;
4674   END IF;
4675 
4676   --Fix for bug 4417124 
4677   IF l_party_rec.PARTY_TYPE = 'PERSON' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN
4681   ELSE
4678     find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4679                p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4680                x_search_ctx_id,x_num_matches);
4682     find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4683                p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4684                x_search_ctx_id,x_num_matches);
4685   END IF;
4686 
4687   IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN
4688     INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,
4689       STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,
4690       LAST_UPDATE_DATE, LAST_UPDATED_BY) 
4691     VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, 'SYSBATCH',
4692       'PARTY_MERGE', hz_utility_pub.created_by, hz_utility_pub.creation_date,
4693       hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,
4694       hz_utility_pub.user_id);
4695 
4696     INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
4697       MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
4698       LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) 
4699     VALUES (p_party_id,x_dup_set_id,0,0,
4700       'Y',100,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,p_dup_batch_id);
4703   ELSE
4704     x_dup_set_id := NULL;
4705   END IF;
4706     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4707       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);
4708     END IF;
4709 EXCEPTION
4710   WHEN FND_API.G_EXC_ERROR THEN
4711     RAISE FND_API.G_EXC_ERROR;
4712   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4713     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4714   WHEN OTHERS THEN
4715     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4716     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.find_duplicate_parties');
4717     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4718     FND_MSG_PUB.ADD;
4719     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4720 END find_duplicate_parties;
4721 
4722 PROCEDURE find_duplicate_party_sites (
4723       p_rule_id               IN      NUMBER,
4724       p_party_site_id         IN      NUMBER,
4725       p_party_id              IN      NUMBER,
4726       p_restrict_sql          IN      VARCHAR2,
4727       p_match_type            IN      VARCHAR2,
4728       x_search_ctx_id         OUT     NUMBER,
4729       x_num_matches           OUT     NUMBER
4730 ) IS
4731 
4732    l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
4733    l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4734    l_contact_list HZ_PARTY_SEARCH.contact_list; 
4735    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
4736    contact_point_ids HZ_PARTY_SEARCH.IDList; 
4737    p_party_site_list HZ_PARTY_SEARCH.IDList;  
4738    p_contact_ids HZ_PARTY_SEARCH.IDList; 
4739   l_match_idx NUMBER;
4740    cursor get_cpts_for_party_sites is select contact_point_id  
4741                          from hz_contact_points 
4742                          where owner_table_name = 'HZ_PARTY_SITES' 
4743                          and primary_flag='Y'
4744                          and owner_table_id = p_party_site_id; 
4745    BEGIN 
4746     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4747       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);
4748     END IF;
4749     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4750       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);
4751       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);
4752       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);
4753       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);
4754       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);
4755     END IF;
4756      p_party_site_list(1) := p_party_site_id; 
4757      OPEN get_cpts_for_party_sites;
4758      LOOP       
4759      FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; 
4760          EXIT WHEN get_cpts_for_party_sites%NOTFOUND; 
4761      END LOOP;  
4762      CLOSE get_cpts_for_party_sites; 
4763   
4764      get_search_criteria (
4765          null,
4766          p_party_site_list,
4767          HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4768          contact_point_ids, 
4769          l_party_search_rec,
4770          l_party_site_list,
4771          l_contact_list,
4772          l_contact_point_list) ;
4773     IF NOT check_prim_cond (l_party_search_rec,
4774                             l_party_site_list,
4775                             l_contact_list,
4776                             l_contact_point_list) THEN
4777       x_search_ctx_id:=NULL;
4778       x_num_matches:=0;
4779       RETURN;
4780     END IF;
4781  
4785          l_contact_point_list,
4782      get_matching_party_sites (p_rule_id, 
4783          p_party_id, 
4784          l_party_site_list, 
4786          p_restrict_sql, 
4787          p_match_type, 
4788          p_party_site_id, 
4789          x_search_ctx_id,
4790          x_num_matches);
4791     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4792       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);
4793     END IF;
4794 EXCEPTION
4795   WHEN FND_API.G_EXC_ERROR THEN
4796     RAISE FND_API.G_EXC_ERROR;
4797   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4798     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4799   WHEN OTHERS THEN
4800     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4801     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.find_duplicate_party_sites');
4802     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4803     FND_MSG_PUB.ADD;
4804     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4805 END find_duplicate_party_sites; 
4806  
4807 PROCEDURE find_duplicate_contacts (
4808       p_rule_id               IN      NUMBER,
4809       p_org_contact_id        IN      NUMBER,
4810       p_party_id              IN      NUMBER,
4811       p_restrict_sql          IN      VARCHAR2,
4812       p_match_type            IN      VARCHAR2,
4813       x_search_ctx_id         OUT     NUMBER,
4814       x_num_matches           OUT     NUMBER
4815 ) IS
4816 
4817  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4818  l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4819  l_contact_list HZ_PARTY_SEARCH.contact_list; 
4820  l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; 
4821  contact_point_ids HZ_PARTY_SEARCH.IDList; 
4822  p_party_site_list HZ_PARTY_SEARCH.IDList;   
4823  p_contact_ids HZ_PARTY_SEARCH.IDList; 
4824   l_match_idx NUMBER;
4825  cursor get_cpt_for_contact_id is select  contact_point_id 
4826    from hz_org_contacts a, hz_relationships b, hz_contact_points c 
4827    where a.party_relationship_id = b.relationship_id 
4828      and c.owner_table_name = 'HZ_PARTIES' 
4829      and c.primary_flag='Y'
4830      and c.owner_table_id = b.party_id 
4831      and b.directional_flag = 'F'  
4832      and a.org_contact_id = p_org_contact_id; 
4833 BEGIN 
4834     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4835       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);
4836     END IF;
4837     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4838       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);
4839       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);
4840       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);
4841       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);
4842       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);
4843     END IF;
4844     p_contact_ids(1) := p_org_contact_id; 
4845     OPEN get_cpt_for_contact_id; 
4846     LOOP 
4847     FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; 
4848         EXIT WHEN get_cpt_for_contact_id%NOTFOUND; 
4849     END LOOP;  
4850     CLOSE get_cpt_for_contact_id; 
4851  
4852     get_search_criteria (
4853         null,
4854         HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4855         p_contact_ids,
4856         contact_point_ids, 
4857         l_party_search_rec,
4858         l_party_site_list, 
4859         l_contact_list,
4860         l_contact_point_list) ;
4861     IF NOT check_prim_cond (l_party_search_rec,
4862                             l_party_site_list,
4863                             l_contact_list,
4864                             l_contact_point_list) THEN
4865       x_search_ctx_id:=NULL;
4866       x_num_matches:=0;
4867       RETURN;
4868     END IF;
4869  
4870     get_matching_contacts (p_rule_id, 
4871         p_party_id, 
4872         l_contact_list, 
4873         l_contact_point_list, 
4874         p_restrict_sql, 
4875         p_match_type, 
4876         p_org_contact_id, 
4877         x_search_ctx_id, 
4878         x_num_matches);
4879  
4880     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4881       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);
4882     END IF;
4883 EXCEPTION
4884   WHEN FND_API.G_EXC_ERROR THEN
4885     RAISE FND_API.G_EXC_ERROR;
4886   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4887     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4888   WHEN OTHERS THEN
4889     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4890     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.find_duplicate_contacts');
4891     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4892     FND_MSG_PUB.ADD;
4893     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4894 END find_duplicate_contacts; 
4895 
4896 PROCEDURE find_duplicate_contact_points (
4897       p_rule_id               IN      NUMBER,
4898       p_contact_point_id      IN      NUMBER,
4902       x_search_ctx_id         OUT     NUMBER,
4899       p_party_id              IN      NUMBER,
4900       p_restrict_sql          IN      VARCHAR2,
4901       p_match_type            IN      VARCHAR2,
4903       x_num_matches           OUT     NUMBER
4904 ) IS
4905  l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; 
4906   l_party_site_list HZ_PARTY_SEARCH.party_site_list; 
4907    l_contact_list HZ_PARTY_SEARCH.contact_list;  
4908    l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;  
4909    contact_point_ids HZ_PARTY_SEARCH.IDList;  
4910   p_party_site_list HZ_PARTY_SEARCH.IDList;   
4911   p_contact_ids HZ_PARTY_SEARCH.IDList;  
4912   l_match_idx NUMBER;
4913 
4914 BEGIN
4915     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4916       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);
4917     END IF;
4918     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4919       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);
4920       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);
4921       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);
4922       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);
4923       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);
4924     END IF;
4925   contact_point_ids(1) := p_contact_point_id;   
4926   get_search_criteria (   
4927       null, 
4928       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
4929       HZ_PARTY_SEARCH.G_MISS_ID_LIST, 
4930       contact_point_ids,   
4931       l_party_search_rec, 
4932       l_party_site_list, 
4933       l_contact_list, 
4934       l_contact_point_list ); 
4935     
4936     IF NOT check_prim_cond (l_party_search_rec,
4937                             l_party_site_list,
4938                             l_contact_list,
4939                             l_contact_point_list) THEN
4940       x_search_ctx_id:=NULL;
4941       x_num_matches:=0;
4942       RETURN;
4943     END IF;
4944    get_matching_contact_points ( 
4945       p_rule_id, 
4946       p_party_id, 
4947      l_contact_point_list, 
4948       p_restrict_sql, 
4949       p_match_type, 
4950       p_contact_point_id, 
4951       x_search_ctx_id, 
4952       x_num_matches );  
4953     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4954       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);
4955     END IF;
4956 EXCEPTION
4957   WHEN FND_API.G_EXC_ERROR THEN
4958     RAISE FND_API.G_EXC_ERROR;
4959   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4960     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4961   WHEN OTHERS THEN
4962     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4963     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.find_duplicate_contact_points');
4964     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4965     FND_MSG_PUB.ADD;
4966     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4967 END find_duplicate_contact_points;
4968 
4969 PROCEDURE find_parties_dynamic (
4970         p_rule_id               IN      NUMBER,
4971         p_attrib_id1            IN      NUMBER,
4972         p_attrib_id2            IN      NUMBER,
4973         p_attrib_id3            IN      NUMBER,
4974         p_attrib_id4            IN      NUMBER,
4975         p_attrib_id5            IN      NUMBER,
4976         p_attrib_id6            IN      NUMBER,
4977         p_attrib_id7            IN      NUMBER,
4978         p_attrib_id8            IN      NUMBER,
4979         p_attrib_id9            IN      NUMBER,
4980         p_attrib_id10           IN      NUMBER,
4981         p_attrib_id11           IN      NUMBER,
4982         p_attrib_id12           IN      NUMBER,
4983         p_attrib_id13           IN      NUMBER,
4984         p_attrib_id14           IN      NUMBER,
4985         p_attrib_id15           IN      NUMBER,
4986         p_attrib_id16           IN      NUMBER,
4987         p_attrib_id17           IN      NUMBER,
4988         p_attrib_id18           IN      NUMBER,
4989         p_attrib_id19           IN      NUMBER,
4990         p_attrib_id20           IN      NUMBER,
4991         p_attrib_val1           IN      VARCHAR2,
4992         p_attrib_val2           IN      VARCHAR2,
4993         p_attrib_val3           IN      VARCHAR2,
4994         p_attrib_val4           IN      VARCHAR2,
4995         p_attrib_val5           IN      VARCHAR2,
4996         p_attrib_val6           IN      VARCHAR2,
4997         p_attrib_val7           IN      VARCHAR2,
4998         p_attrib_val8           IN      VARCHAR2,
4999         p_attrib_val9           IN      VARCHAR2,
5000         p_attrib_val10          IN      VARCHAR2,
5001         p_attrib_val11          IN      VARCHAR2,
5002         p_attrib_val12          IN      VARCHAR2,
5003         p_attrib_val13          IN      VARCHAR2,
5004         p_attrib_val14          IN      VARCHAR2,
5005         p_attrib_val15          IN      VARCHAR2,
5006         p_attrib_val16          IN      VARCHAR2,
5007         p_attrib_val17          IN      VARCHAR2,
5011         p_restrict_sql          IN      VARCHAR2,
5008         p_attrib_val18          IN      VARCHAR2,
5009         p_attrib_val19          IN      VARCHAR2,
5010         p_attrib_val20          IN      VARCHAR2,
5012         p_match_type            IN      VARCHAR2,
5013         p_search_merged         IN      VARCHAR2,
5014         x_search_ctx_id         OUT     NUMBER,
5015         x_num_matches           OUT     NUMBER
5016 ) IS
5017   BEGIN
5018     call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,
5019                      p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,
5020                      p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,
5021                      p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,
5022                      p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,
5023                      p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,
5024                      p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,
5025                      p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,
5026                      p_restrict_sql,'FIND_PARTIES',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);
5027  END;
5028 
5029 PROCEDURE call_api_dynamic (
5030         p_rule_id               IN      NUMBER,
5031         p_attrib_id1            IN      NUMBER,
5032         p_attrib_id2            IN      NUMBER,
5033         p_attrib_id3            IN      NUMBER,
5034         p_attrib_id4            IN      NUMBER,
5035         p_attrib_id5            IN      NUMBER,
5036         p_attrib_id6            IN      NUMBER,
5037         p_attrib_id7            IN      NUMBER,
5038         p_attrib_id8            IN      NUMBER,
5039         p_attrib_id9            IN      NUMBER,
5040         p_attrib_id10           IN      NUMBER,
5041         p_attrib_id11           IN      NUMBER,
5042         p_attrib_id12           IN      NUMBER,
5043         p_attrib_id13           IN      NUMBER,
5044         p_attrib_id14           IN      NUMBER,
5045         p_attrib_id15           IN      NUMBER,
5046         p_attrib_id16           IN      NUMBER,
5047         p_attrib_id17           IN      NUMBER,
5048         p_attrib_id18           IN      NUMBER,
5049         p_attrib_id19           IN      NUMBER,
5050         p_attrib_id20           IN      NUMBER,
5051         p_attrib_val1           IN      VARCHAR2,
5052         p_attrib_val2           IN      VARCHAR2,
5053         p_attrib_val3           IN      VARCHAR2,
5054         p_attrib_val4           IN      VARCHAR2,
5055         p_attrib_val5           IN      VARCHAR2,
5056         p_attrib_val6           IN      VARCHAR2,
5057         p_attrib_val7           IN      VARCHAR2,
5058         p_attrib_val8           IN      VARCHAR2,
5059         p_attrib_val9           IN      VARCHAR2,
5060         p_attrib_val10          IN      VARCHAR2,
5061         p_attrib_val11          IN      VARCHAR2,
5062         p_attrib_val12          IN      VARCHAR2,
5063         p_attrib_val13          IN      VARCHAR2,
5064         p_attrib_val14          IN      VARCHAR2,
5065         p_attrib_val15          IN      VARCHAR2,
5066         p_attrib_val16          IN      VARCHAR2,
5067         p_attrib_val17          IN      VARCHAR2,
5068         p_attrib_val18          IN      VARCHAR2,
5069         p_attrib_val19          IN      VARCHAR2,
5070         p_attrib_val20          IN      VARCHAR2,
5071         p_restrict_sql          IN      VARCHAR2,
5072         p_api_name              IN      VARCHAR2,
5073         p_match_type            IN      VARCHAR2,
5074         p_party_id              IN      NUMBER,
5075         p_search_merged         IN      VARCHAR2,
5076         x_search_ctx_id         OUT     NUMBER,
5077         x_num_matches           OUT     NUMBER
5078 ) IS
5079   TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
5080   l_match_idx NUMBER;
5081   AttrVals AttrList;
5082   l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
5083   l_party_site_list HZ_PARTY_SEARCH.party_site_list;
5084   l_contact_list HZ_PARTY_SEARCH.contact_list;
5085   l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
5086   l_dup_set_id NUMBER;
5087   l_idx NUMBER;
5088   l_cpt_type VARCHAR2(255);
5089   FIRST BOOLEAN := TRUE; 
5090 
5091 BEGIN
5092     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5093       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);
5094     END IF;
5095 
5096   IF p_attrib_id1 IS NOT NULL THEN
5097     AttrVals(p_attrib_id1):=p_attrib_val1;
5098   END IF;
5099   IF p_attrib_id2 IS NOT NULL THEN
5100     AttrVals(p_attrib_id2):=p_attrib_val2;
5101   END IF;
5102   IF p_attrib_id3 IS NOT NULL THEN
5103     AttrVals(p_attrib_id3):=p_attrib_val3;
5104   END IF;
5105   IF p_attrib_id4 IS NOT NULL THEN
5106     AttrVals(p_attrib_id4):=p_attrib_val4;
5107   END IF;
5108   IF p_attrib_id5 IS NOT NULL THEN
5109     AttrVals(p_attrib_id5):=p_attrib_val5;
5110   END IF;
5111   IF p_attrib_id6 IS NOT NULL THEN
5112     AttrVals(p_attrib_id6):=p_attrib_val6;
5113   END IF;
5114   IF p_attrib_id7 IS NOT NULL THEN
5115     AttrVals(p_attrib_id7):=p_attrib_val7;
5116   END IF;
5117   IF p_attrib_id8 IS NOT NULL THEN
5118     AttrVals(p_attrib_id8):=p_attrib_val8;
5119   END IF;
5120   IF p_attrib_id9 IS NOT NULL THEN
5121     AttrVals(p_attrib_id9):=p_attrib_val9;
5122   END IF;
5123   IF p_attrib_id10 IS NOT NULL THEN
5127     AttrVals(p_attrib_id11):=p_attrib_val11;
5124     AttrVals(p_attrib_id10):=p_attrib_val10;
5125   END IF;
5126   IF p_attrib_id11 IS NOT NULL THEN
5128   END IF;
5129   IF p_attrib_id12 IS NOT NULL THEN
5130     AttrVals(p_attrib_id12):=p_attrib_val12;
5131   END IF;
5132   IF p_attrib_id13 IS NOT NULL THEN
5133     AttrVals(p_attrib_id13):=p_attrib_val13;
5134   END IF;
5135   IF p_attrib_id14 IS NOT NULL THEN
5136     AttrVals(p_attrib_id14):=p_attrib_val14;
5137   END IF;
5138   IF p_attrib_id15 IS NOT NULL THEN
5139     AttrVals(p_attrib_id15):=p_attrib_val15;
5140   END IF;
5141   IF p_attrib_id16 IS NOT NULL THEN
5142     AttrVals(p_attrib_id16):=p_attrib_val16;
5143   END IF;
5144   IF p_attrib_id17 IS NOT NULL THEN
5145     AttrVals(p_attrib_id17):=p_attrib_val17;
5146   END IF;
5147   IF p_attrib_id18 IS NOT NULL THEN
5148     AttrVals(p_attrib_id18):=p_attrib_val18;
5149   END IF;
5150   IF p_attrib_id19 IS NOT NULL THEN
5151     AttrVals(p_attrib_id19):=p_attrib_val19;
5152   END IF;
5153   IF p_attrib_id20 IS NOT NULL THEN
5154     AttrVals(p_attrib_id20):=p_attrib_val20;
5155   END IF;
5156   IF AttrVals.EXISTS(12) THEN
5157     l_party_rec.PARTY_NUMBER:= AttrVals(12);
5158     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5159       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);
5160     END IF;
5161   END IF;
5162 
5163   IF AttrVals.EXISTS(13) THEN
5164     l_party_rec.ALL_ACCOUNT_NUMBERS:= AttrVals(13);
5165     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5166       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);
5167     END IF;
5168   END IF;
5169 
5170   IF AttrVals.EXISTS(15) THEN
5171     l_party_rec.PARTY_ALL_NAMES:= AttrVals(15);
5172     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5173       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);
5174     END IF;
5175   END IF;
5176 
5177   IF AttrVals.EXISTS(19) THEN
5178     l_party_rec.JGZZ_FISCAL_CODE:= AttrVals(19);
5179     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5180       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);
5181     END IF;
5182   END IF;
5183 
5184   IF AttrVals.EXISTS(27) THEN
5185     l_party_site_list(1).ADDRESS:= AttrVals(27);
5186     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5187       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);
5188     END IF;
5189   END IF;
5190 
5191   IF AttrVals.EXISTS(29) THEN
5192     l_party_site_list(1).CITY:= AttrVals(29);
5193     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5194       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);
5195     END IF;
5196   END IF;
5197 
5198   IF AttrVals.EXISTS(30) THEN
5199     l_party_site_list(1).POSTAL_CODE:= AttrVals(30);
5200     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5201       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);
5202     END IF;
5203   END IF;
5204 
5205   IF AttrVals.EXISTS(31) THEN
5206     l_party_site_list(1).PROVINCE:= AttrVals(31);
5207     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5208       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);
5209     END IF;
5210   END IF;
5211 
5212   IF AttrVals.EXISTS(32) THEN
5213     l_party_site_list(1).STATE:= AttrVals(32);
5214     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5215       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);
5216     END IF;
5217   END IF;
5218 
5219   IF AttrVals.EXISTS(36) THEN
5220     l_party_site_list(1).COUNTRY:= AttrVals(36);
5221     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5222       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);
5223     END IF;
5224   END IF;
5225 
5226   IF AttrVals.EXISTS(43) THEN
5227     l_contact_list(1).JOB_TITLE:= AttrVals(43);
5228     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5229       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);
5230     END IF;
5231   END IF;
5232 
5233   IF AttrVals.EXISTS(44) THEN
5234     l_cpt_type := 'PHONE';
5235     FIRST := FALSE;
5236     FOR I in 1..l_cpt_list.COUNT LOOP
5237       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5241       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);
5238         l_cpt_list(I).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
5239         FIRST := TRUE;
5240     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5242       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);
5243     END IF;
5244       END IF;
5245     END LOOP;
5246     IF not FIRST THEN
5247       l_idx := l_cpt_list.COUNT+1;
5248       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5249       l_cpt_list(l_idx).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
5250     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5251       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);
5252       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);
5253     END IF;
5254     END IF;
5255   END IF;
5256 
5257   IF AttrVals.EXISTS(48) THEN
5258     l_cpt_type := 'EMAIL';
5259     FIRST := FALSE;
5260     FOR I in 1..l_cpt_list.COUNT LOOP
5261       IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5262         l_cpt_list(I).EMAIL_ADDRESS:= AttrVals(48);
5263         FIRST := TRUE;
5264     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5265       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);
5266       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);
5267     END IF;
5268       END IF;
5269     END LOOP;
5270     IF not FIRST THEN
5271       l_idx := l_cpt_list.COUNT+1;
5272       l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5273       l_cpt_list(l_idx).EMAIL_ADDRESS:= AttrVals(48);
5274     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5275       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);
5276       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);
5277     END IF;
5278     END IF;
5279   END IF;
5280 
5281 
5282   IF AttrVals.EXISTS(14) THEN
5283      l_party_rec.PARTY_TYPE:= AttrVals(14); 
5284   END IF; 
5285   IF upper(p_api_name) = 'FIND_PARTIES' THEN
5286     find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5287                p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,'N',
5288                x_search_ctx_id,x_num_matches);
5289   ELSIF upper(p_api_name) = 'FIND_PARTY_DETAILS' THEN
5290     find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5291                p_restrict_sql,p_match_type,p_search_merged,
5292                x_search_ctx_id,x_num_matches);
5293   ELSIF upper(p_api_name) = 'FIND_PERSONS' THEN
5294     find_persons(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,'N',
5296                x_search_ctx_id,x_num_matches);
5297   ELSIF upper(p_api_name) = 'GET_MATCHING_PARTY_SITES' THEN
5298     get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,
5299                p_restrict_sql,p_match_type,NULL,
5300                x_search_ctx_id,x_num_matches);
5301   ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACTS' THEN
5302     get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,
5303                p_restrict_sql,p_match_type,NULL,
5304                x_search_ctx_id,x_num_matches);
5305   ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACT_POINTS' THEN
5306     get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,
5307                p_restrict_sql,p_match_type,NULL,
5308                x_search_ctx_id,x_num_matches);
5309   END IF;
5310     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5311       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);
5312     END IF;
5313 EXCEPTION
5314   WHEN FND_API.G_EXC_ERROR THEN
5315     RAISE FND_API.G_EXC_ERROR;
5316   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5317     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5318   WHEN OTHERS THEN
5319     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5320     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.call_api_dynamic');
5321     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5322     FND_MSG_PUB.ADD;
5323     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5324 END call_api_dynamic; 
5325 
5326 
5327 PROCEDURE get_matching_party_sites (
5328         p_rule_id               IN      NUMBER,
5329         p_party_id              IN      NUMBER,
5330         p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,
5331         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5332         p_restrict_sql          IN      VARCHAR2,
5333         p_match_type            IN      VARCHAR2,
5334         p_dup_party_site_id     IN      NUMBER, 
5338   
5335         x_search_ctx_id         OUT     NUMBER,
5336         x_num_matches           OUT     NUMBER
5337 ) IS
5339   -- Strings to hold the generated Intermedia query strings
5340   l_party_contains_str VARCHAR2(32000); 
5341   l_match_idx NUMBER;
5342   l_party_site_contains_str VARCHAR2(32000);
5343   l_contact_contains_str VARCHAR2(32000);
5344   l_contact_pt_contains_str VARCHAR2(32000);
5345   l_tmp VARCHAR2(32000);
5346 
5347   -- Other local variables
5348   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5349   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5350   -- For Score calculation
5351   l_max_score NUMBER;
5352   l_entered_max_score NUMBER;
5353   FIRST BOOLEAN;
5354   l_search_ctx_id NUMBER; -- Generated Search Context ID
5355 
5356   l_TX13 VARCHAR2(2000);
5357   l_TX9 VARCHAR2(2000);
5358   l_TX22 VARCHAR2(2000);
5359   l_TX1 VARCHAR2(2000);
5360   l_TX3 VARCHAR2(2000);
5361   l_TX12 VARCHAR2(2000);
5362   l_TX15 VARCHAR2(2000);
5363   l_TX4 VARCHAR2(2000);
5364   l_TX10 VARCHAR2(2000);
5365   l_TX11 VARCHAR2(2000);
5366   l_TX5 VARCHAR2(2000);
5367   l_TX14 VARCHAR2(2000);
5368   l_TX6 VARCHAR2(2000);
5369   H_SCORES HZ_PARTY_SEARCH.score_list;
5370 
5371   l_score NUMBER;
5372   l_idx NUMBER;
5373   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5374   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5375   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5376   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5377   l_party_id NUMBER;
5378   l_ps_party_id NUMBER;
5379   l_ct_party_id NUMBER;
5380   l_cpt_party_id NUMBER;
5381   l_cpt_ps_id NUMBER;
5382   l_cpt_contact_id NUMBER;
5383   l_cpt_type VARCHAR2(100);
5384   l_cpt_level VARCHAR2(100);
5385   l_party_site_id NUMBER;
5386   l_org_contact_id NUMBER;
5387   l_contact_pt_id NUMBER;
5388   l_cpt_level VARCHAR2(100);
5389   l_ps_contact_id NUMBER;
5390   l_party_max_score NUMBER;
5391   l_ps_max_score NUMBER;
5392   l_contact_max_score NUMBER;
5393   l_cpt_max_score NUMBER;
5394 
5395   defpt NUMBER :=0;
5396   defps NUMBER :=0;
5397   defct NUMBER :=0;
5398   defcpt NUMBER :=0;
5399   l_index NUMBER;
5400   l_match_ps_list HZ_PARTY_SEARCH.IDList;
5401   l_cnt NUMBER:=1;
5402 
5403   
5404   BEGIN
5405     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5406       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);
5407     END IF;
5408     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5409       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);
5410       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);
5411       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);
5412       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);
5413     END IF;
5414 
5415     -- ************************************
5416     -- STEP 1. Initialization and error checks
5417 
5418     l_match_str := ' AND ';
5419     IF p_match_type = 'AND' THEN
5420       l_match_str := ' AND ';
5421     ELSIF p_match_type = 'OR' THEN
5422       l_match_str := ' OR ';
5423     END IF;
5424     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);
5425     g_score_until_thresh := false;
5426     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5427 
5428     -- ************************************************************
5429     -- STEP 2. Setup of intermedia query strings for Acquisition query
5430     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5431     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5432     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);
5433 
5434     -- Setup Search Context ID
5435     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5436     x_search_ctx_id := l_search_ctx_id;
5437 
5438     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5439       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);
5440       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);
5441       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);
5442       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);
5443     END IF;
5444     IF l_party_site_contains_str IS NULL THEN
5445       defps := 1;
5446     END IF;
5447     IF l_contact_pt_contains_str IS NULL THEN
5448       defcpt := 1;
5449     END IF;
5450 
5451     IF l_party_site_contains_str IS NOT NULL THEN
5455             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;
5452       open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,'N', 'N',l_party_site_cur);
5453       LOOP
5454         FETCH l_party_site_cur INTO 
5456         EXIT WHEN l_party_site_cur%NOTFOUND;
5457       IF (p_dup_party_site_id IS NULL OR (
5458                 p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND 
5459                 l_party_site_id <> p_dup_party_site_id)) THEN  
5460             l_index := map_id(l_party_site_id);
5461             l_match_ps_list(l_cnt):= l_party_site_id ;
5462             l_cnt:=l_cnt+1;
5463             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);
5464             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);
5465     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5466       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);
5467       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);
5468       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);
5469     END IF;
5470       END IF; 
5471       END LOOP;
5472       CLOSE l_party_site_cur;
5473     END IF;
5474 
5475     IF l_contact_pt_contains_str IS NOT NULL THEN
5476     SAVEPOINT eval_start;
5477     IF l_match_str = ' AND ' OR (
5478         ((l_cpt_max_score/l_entered_max_score)<(416/520))
5479         ) THEN
5480       FORALL I in 1..l_match_ps_list.COUNT
5481            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5482            values (l_search_ctx_id,l_match_ps_list(I));
5483         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');
5484     ELSE
5485       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5486     END IF;
5487       LOOP
5488         FETCH l_contact_pt_cur INTO 
5489             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;
5490         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5491       IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (
5492          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   
5493         l_index := map_id(l_cpt_ps_id);
5494         IF l_match_str = ' OR ' THEN
5495           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5496           IF NOT H_SCORES.EXISTS(l_index) THEN
5497             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);
5498           ELSE
5499             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5500                H_SCORES(l_index).TOTAL_SCORE := 
5501                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5502                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5503             END IF;
5504           END IF;
5505         ELSE
5506           IF H_SCORES.EXISTS(l_index) THEN
5507             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5508             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5509                H_SCORES(l_index).TOTAL_SCORE := 
5510                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5511                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5512             END IF;
5513           ELSIF defps=1 THEN
5514             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5515             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);
5516           END IF;
5517         END IF;
5518       END IF; 
5519     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5520       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);
5521       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);
5522       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);
5523     END IF;
5524       END LOOP;
5525       CLOSE l_contact_pt_cur;
5526     ROLLBACK TO eval_start;
5527     END IF;
5528     x_num_matches := 0;
5529     l_party_site_id := H_SCORES.FIRST;
5530     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5531       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);
5532     END IF;
5533     WHILE l_party_site_id IS NOT NULL LOOP
5534     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5535       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);
5539 IF (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=( 416/520 ) THEN
5536       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);
5537     END IF;
5538  IF l_match_str = ' OR ' THEN
5540     INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) 
5541     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);
5542       x_num_matches := x_num_matches+1;
5543  END IF;
5544  ELSE
5545     IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND
5546        H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND
5547        (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, round((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  END IF;
5553       l_party_site_id:=H_SCORES.NEXT(l_party_site_id);
5554     END LOOP;
5555     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5556       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);
5557     END IF;
5558 EXCEPTION
5559   WHEN FND_API.G_EXC_ERROR THEN
5560     RAISE FND_API.G_EXC_ERROR;
5561   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5562     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5563   WHEN OTHERS THEN
5564     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5565     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.get_matching_party_sites');
5566     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5567     FND_MSG_PUB.ADD;
5568     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5569 END get_matching_party_sites;
5570 
5571 
5572 PROCEDURE get_matching_contacts (
5573         p_rule_id               IN      NUMBER,
5574         p_party_id              IN      NUMBER,
5575         p_contact_list          IN      HZ_PARTY_SEARCH.CONTACT_LIST,
5576         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5577         p_restrict_sql          IN      VARCHAR2,
5578         p_match_type            IN      VARCHAR2,
5579         p_dup_contact_id        IN      NUMBER, 
5580         x_search_ctx_id         OUT     NUMBER,
5581         x_num_matches           OUT     NUMBER
5582 ) IS
5583   
5584   -- Strings to hold the generated Intermedia query strings
5585   l_party_contains_str VARCHAR2(32000); 
5586   l_party_site_contains_str VARCHAR2(32000);
5587   l_contact_contains_str VARCHAR2(32000);
5588   l_contact_pt_contains_str VARCHAR2(32000);
5589   l_tmp VARCHAR2(32000);
5590 
5591   -- Other local variables
5592   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5593   l_match_idx NUMBER;
5594   l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5595   -- For Score calculation
5596   l_max_score NUMBER;
5597   l_entered_max_score NUMBER;
5598   FIRST BOOLEAN;
5599   l_search_ctx_id NUMBER; -- Generated Search Context ID
5600 
5601   l_TX22 VARCHAR2(2000);
5602   l_TX1 VARCHAR2(2000);
5603   l_TX5 VARCHAR2(2000);
5604   l_TX6 VARCHAR2(2000);
5605   H_SCORES HZ_PARTY_SEARCH.score_list;
5606 
5607   l_score NUMBER;
5608   l_idx NUMBER;
5609   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5610   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5611   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5612   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5613   l_party_id NUMBER;
5614   l_ps_party_id NUMBER;
5615   l_ct_party_id NUMBER;
5616   l_cpt_party_id NUMBER;
5617   l_cpt_ps_id NUMBER;
5618   l_cpt_contact_id NUMBER;
5619   l_cpt_type VARCHAR2(100);
5620   l_party_site_id NUMBER;
5621   l_org_contact_id NUMBER;
5622   l_contact_pt_id NUMBER;
5623 
5624   defpt NUMBER :=0;
5625   defps NUMBER :=0;
5626   defct NUMBER :=0;
5627   defcpt NUMBER :=0;
5628   l_index NUMBER;
5629   l_party_max_score NUMBER;
5630   l_ps_max_score NUMBER;
5631   l_contact_max_score NUMBER;
5632   l_cpt_max_score NUMBER;
5633   l_match_contact_list HZ_PARTY_SEARCH.IDList;
5634   l_cnt NUMBER:=1;
5635 
5636   
5637   BEGIN
5638     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5639       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);
5640     END IF;
5641     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5642       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);
5643       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);
5644       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);
5645       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);
5646     END IF;
5647 
5648     -- ************************************
5649     -- STEP 1. Initialization and error checks
5653       l_match_str := ' AND ';
5650 
5651     l_match_str := ' AND ';
5652     IF p_match_type = 'AND' THEN
5654     ELSIF p_match_type = 'OR' THEN
5655       l_match_str := ' OR ';
5656     END IF;
5657     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);
5658     g_score_until_thresh := false;
5659     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5660 
5661     -- ************************************************************
5662     -- STEP 2. Setup of intermedia query strings for Acquisition query
5663     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5664     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5665     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);
5666 
5667     -- Setup Search Context ID
5668     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5669     x_search_ctx_id := l_search_ctx_id;
5670 
5671     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5672       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);
5673       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);
5674       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);
5675       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);
5676     END IF;
5677     IF l_contact_contains_str IS NULL THEN
5678       defct := 1;
5679     END IF;
5680     IF l_contact_pt_contains_str IS NULL THEN
5681       defcpt := 1;
5682     END IF;
5683 
5684     IF l_contact_contains_str IS NOT NULL THEN
5685       open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);
5686       LOOP
5687         FETCH l_contact_cur INTO 
5688             l_org_contact_id, l_ct_party_id , l_TX22;
5689         EXIT WHEN l_contact_cur%NOTFOUND;
5690       IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN 
5691         l_index := map_id(l_org_contact_id);
5692         l_match_contact_list(l_cnt):=l_org_contact_id;
5693         l_cnt:=l_cnt+1;
5694           l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX22);
5695             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);
5696     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5697       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);
5698       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);
5699       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);
5700     END IF;
5701       END IF; 
5702       END LOOP;
5703       CLOSE l_contact_cur;
5704     END IF;
5705 
5706     IF l_contact_pt_contains_str IS NOT NULL THEN
5707     SAVEPOINT eval_start;
5708     IF l_match_str = ' AND ' OR (
5709         ((l_cpt_max_score/l_entered_max_score)<(416/520))
5710         ) THEN
5711       FORALL I in 1..l_match_contact_list.COUNT
5712            INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5713            values (l_search_ctx_id,l_match_contact_list(I));
5714       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');
5715     ELSE
5716       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5717     END IF;
5718       LOOP
5719         FETCH l_contact_pt_cur INTO 
5720             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;
5721         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5722       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 
5723         l_index := map_id(l_cpt_contact_id);
5724         IF l_match_str = ' OR ' THEN
5725           l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5726           IF NOT H_SCORES.EXISTS(l_index) THEN
5727             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);
5728           ELSE
5729             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5730                H_SCORES(l_index).TOTAL_SCORE := 
5731                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5732                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5733             END IF;
5734           END IF;
5735         ELSE
5736           IF H_SCORES.EXISTS(l_index) THEN
5737             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5738             IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5739                H_SCORES(l_index).TOTAL_SCORE := 
5740                       H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5744             l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5741                H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5742             END IF;
5743           ELSIF defps=1 THEN
5745             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);
5746           END IF;
5747         END IF;
5748         END IF; 
5749       END LOOP;
5750     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5751       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);
5752       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);
5753       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);
5754     END IF;
5755       CLOSE l_contact_pt_cur;
5756     END IF;
5757     x_num_matches := 0;
5758     l_org_contact_id := H_SCORES.FIRST;
5759     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5760       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);
5761     END IF;
5762     WHILE l_org_contact_id IS NOT NULL LOOP
5763       IF l_match_str = ' OR ' THEN
5764     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5765       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);
5766       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);
5767     END IF;
5768         IF (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(416/520) THEN
5769             INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) 
5770             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);
5771           x_num_matches := x_num_matches+1;
5772         END IF;
5773       ELSE
5774            IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND
5775            H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND
5776            (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, round((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       END IF;
5782       l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);
5783     END LOOP;
5784     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5785       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);
5786     END IF;
5787 EXCEPTION
5788   WHEN FND_API.G_EXC_ERROR THEN
5789     RAISE FND_API.G_EXC_ERROR;
5790   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5791     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5792   WHEN OTHERS THEN
5793     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5794     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.get_matching_contacts');
5795     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5796     FND_MSG_PUB.ADD;
5797     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5798 END get_matching_contacts;
5799 
5800 
5801 PROCEDURE get_matching_contact_points (
5802         p_rule_id               IN      NUMBER,
5803         p_party_id              IN      NUMBER,
5804         p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5805         p_restrict_sql          IN      VARCHAR2,
5806         p_match_type            IN      VARCHAR2,
5807         p_dup_contact_point_id  IN      NUMBER, 
5808         x_search_ctx_id         OUT     NUMBER,
5809         x_num_matches           OUT     NUMBER
5810 ) IS
5811 
5812 
5813   -- Strings to hold the generated Intermedia query strings
5814   l_contact_pt_contains_str VARCHAR2(32000);
5815   l_tmp VARCHAR2(32000);
5816 
5817   -- Other local variables
5818   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5819   l_match_idx NUMBER;
5820   -- For Score calculation
5821   l_entered_max_score NUMBER;
5822   l_search_ctx_id NUMBER; -- Generated Search Context ID
5823 
5824   l_TX1 VARCHAR2(2000);
5825   l_TX5 VARCHAR2(2000);
5826   l_TX6 VARCHAR2(2000);
5827 
5828   l_score NUMBER;
5829   l_idx NUMBER;
5830   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5831   l_cpt_party_id NUMBER;
5832   l_cpt_ps_id NUMBER;
5833   l_cpt_contact_id NUMBER;
5834   l_contact_pt_id NUMBER;
5835   l_cpt_type VARCHAR2(100);
5836   H_PARTY_ID HZ_PARTY_SEARCH.IDList;
5837   H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;
5838   H_SCORE  HZ_PARTY_SEARCH.IDList;
5839 
5840   cnt NUMBER :=0;
5841   l_party_max_score NUMBER;
5842   l_ps_max_score NUMBER;
5843   l_contact_max_score NUMBER;
5844   l_cpt_max_score NUMBER;
5845 
5846   
5847   BEGIN
5848     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5852       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);
5849       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);
5850     END IF;
5851     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5853       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);
5854       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);
5855       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);
5856     END IF;
5857 
5858     -- ************************************
5859     -- STEP 1. Initialization and error checks
5860 
5861     l_match_str := ' AND ';
5862     IF p_match_type = 'AND' THEN
5863       l_match_str := ' AND ';
5864     ELSIF p_match_type = 'OR' THEN
5865       l_match_str := ' OR ';
5866     END IF;
5867     l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, 
5868        HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
5869        p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5870     g_score_until_thresh := false;
5871     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5872 
5873     -- ************************************************************
5874     -- STEP 2. Setup of intermedia query strings for Acquisition query
5875     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5876     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);
5877 
5878     -- Setup Search Context ID
5879     SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5880     x_search_ctx_id := l_search_ctx_id;
5881     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5882       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);
5883       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);
5884       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);
5885     END IF;
5886 
5887     IF l_contact_pt_contains_str IS NOT NULL THEN
5888       open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5889       cnt := 1;
5890       LOOP
5891         FETCH l_contact_pt_cur INTO 
5892             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;
5893         EXIT WHEN l_contact_pt_cur%NOTFOUND;
5894         IF (p_dup_contact_point_id IS NULL OR (
5895                p_dup_contact_point_id IS NOT NULL AND 
5896                l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND 
5897                p_dup_contact_point_id <>  l_contact_pt_id)) THEN   
5898             H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;
5899             H_PARTY_ID(cnt) := l_cpt_party_id;
5900             H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5901             cnt := cnt+1;
5902     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5903       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);
5904       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);
5905       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);
5906     END IF;
5907         END IF; 
5908       END LOOP;
5909       CLOSE l_contact_pt_cur;
5910     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5911       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);
5912     END IF;
5913       x_num_matches := 0; 
5914       FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP
5915     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5916       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);
5917       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);
5918     END IF;
5919         IF (H_SCORE(I)/l_entered_max_score) >= (416/520) THEN
5920         INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
5921             l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);
5922             x_num_matches := x_num_matches + 1; 
5923         END IF;
5924       END LOOP; 
5925     END IF;
5926     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5927       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);
5931     RAISE FND_API.G_EXC_ERROR;
5928     END IF;
5929 EXCEPTION
5930   WHEN FND_API.G_EXC_ERROR THEN
5932   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5933     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5934   WHEN OTHERS THEN
5935     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5936     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.get_matching_contact_points');
5937     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5938     FND_MSG_PUB.ADD;
5939     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5940 END get_matching_contact_points;
5941 
5942    /**********************************************************
5943    This procedure finds the score details for a specific party that 
5944    matched 
5945 
5946    **********************************************************/
5947 
5948 PROCEDURE get_score_details (
5949         p_rule_id               IN      NUMBER,
5950         p_party_id              IN      NUMBER,
5951         p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
5952         p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
5953         p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
5954         p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
5955         x_search_ctx_id         IN OUT  NUMBER
5956 ) IS
5957 
5958   -- Strings to hold the generated Intermedia query strings
5959   l_party_contains_str VARCHAR2(32000); 
5960   l_party_site_contains_str VARCHAR2(32000);
5961   l_contact_contains_str VARCHAR2(32000);
5962   l_contact_pt_contains_str VARCHAR2(32000);
5963   l_tmp VARCHAR2(32000);
5964 
5965   -- Other local variables
5966   l_match_str VARCHAR2(30); -- Match type (AND or OR)
5967   -- For Score calculation
5968   l_max_score NUMBER;
5969   l_entered_max_score NUMBER;
5970   FIRST BOOLEAN;
5971   l_search_ctx_id NUMBER; -- Generated Search Context ID
5972 
5973   l_TX39 VARCHAR2(2000);
5974   l_max_TX39 VARCHAR2(2000);
5975   l_TX13 VARCHAR2(2000);
5976   l_max_TX13 VARCHAR2(2000);
5977   l_TX9 VARCHAR2(2000);
5978   l_max_TX9 VARCHAR2(2000);
5979   l_TX22 VARCHAR2(2000);
5980   l_max_TX22 VARCHAR2(2000);
5981   l_TX35 VARCHAR2(2000);
5982   l_max_TX35 VARCHAR2(2000);
5983   l_TX1 VARCHAR2(2000);
5984   l_max_TX1 VARCHAR2(2000);
5985   l_TX3 VARCHAR2(2000);
5986   l_max_TX3 VARCHAR2(2000);
5987   l_TX12 VARCHAR2(2000);
5988   l_max_TX12 VARCHAR2(2000);
5989   l_TX15 VARCHAR2(2000);
5990   l_max_TX15 VARCHAR2(2000);
5991   l_TX4 VARCHAR2(2000);
5992   l_max_TX4 VARCHAR2(2000);
5993   l_TX10 VARCHAR2(2000);
5994   l_max_TX10 VARCHAR2(2000);
5995   l_TX11 VARCHAR2(2000);
5996   l_max_TX11 VARCHAR2(2000);
5997   l_TX5 VARCHAR2(2000);
5998   l_max_TX5 VARCHAR2(2000);
5999   l_TX40 VARCHAR2(2000);
6000   l_max_TX40 VARCHAR2(2000);
6001   l_TX34 VARCHAR2(2000);
6002   l_max_TX34 VARCHAR2(2000);
6003   l_TX45 VARCHAR2(2000);
6004   l_max_TX45 VARCHAR2(2000);
6005   l_TX14 VARCHAR2(2000);
6006   l_max_TX14 VARCHAR2(2000);
6007   l_TX6 VARCHAR2(2000);
6008   l_max_TX6 VARCHAR2(2000);
6009   H_SCORES HZ_PARTY_SEARCH.score_list;
6010 
6011   l_score NUMBER;
6012   l_match_idx NUMBER;
6013   l_idx NUMBER;
6014   l_party_cur HZ_PARTY_STAGE.StageCurTyp;
6015   l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
6016   l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
6017   l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
6018   l_party_id NUMBER;
6019   l_ps_party_id NUMBER;
6020   l_ct_party_id NUMBER;
6021   l_cpt_party_id NUMBER;
6022   l_cpt_ps_id NUMBER;
6023   l_cpt_contact_id NUMBER;
6024   l_cpt_type VARCHAR2(100);
6025   l_party_site_id NUMBER;
6026   l_org_contact_id NUMBER;
6027   l_contact_pt_id NUMBER;
6028   l_ps_contact_id NUMBER;
6029   l_max_id NUMBER;
6030   l_max_idx NUMBER;
6031 
6032   l_index NUMBER;
6033   l_party_max_score NUMBER;
6034   l_ps_max_score NUMBER;
6035   l_contact_max_score NUMBER;
6036   l_cpt_max_score NUMBER;
6037 
6038   --Fix for bug 4417124 
6039   l_use_contact_addr_info BOOLEAN:=TRUE;
6040   l_use_contact_cpt_info  BOOLEAN:=TRUE;
6041 
6042   BEGIN
6043 
6044     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6045       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);
6046     END IF;
6047     -- ************************************
6048     -- STEP 1. Initialization and error checks
6049 
6050     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);
6051     g_score_until_thresh := false;
6052     IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
6053     -- ************************************************************
6054     -- STEP 2. Setup of intermedia query strings for Acquisition query
6055     l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
6056     l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
6057     l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
6058     init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
6059 
6060     -- Setup Search Context ID
6061     IF x_search_ctx_id IS NULL THEN
6062       SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
6063       x_search_ctx_id := l_search_ctx_id;
6064     ELSE
6065       l_search_ctx_id := x_search_ctx_id;
6066     END IF;
6067 
6071            l_party_id , l_TX34, l_TX35, l_TX40, l_TX39, l_TX45;
6068     open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);
6069     LOOP 
6070         FETCH l_party_cur INTO
6072         EXIT WHEN l_party_cur%NOTFOUND;
6073           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,l_TX40,l_TX39,l_TX45,1);
6074     END LOOP;
6075     CLOSE l_party_cur;
6076 
6077     IF l_party_site_contains_str IS NOT NULL THEN
6078       l_max_score := 0;
6079       l_max_id := 0;
6080       l_max_idx := 0;
6081       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_addr_info THEN
6082         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'Y','N',l_party_site_cur);
6083       ELSE
6084         open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'N','N',l_party_site_cur);
6085       END IF;
6086       LOOP
6087         FETCH l_party_site_cur INTO 
6088             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;
6089         EXIT WHEN l_party_site_cur%NOTFOUND;
6090         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);
6091         IF l_score > l_max_score THEN
6092           l_max_score := l_score;
6093           l_max_id := l_party_site_id;
6094           l_max_idx := l_match_idx;
6095           l_max_TX13 := l_TX13;
6096           l_max_TX9 := l_TX9;
6097           l_max_TX22 := l_TX22;
6098           l_max_TX3 := l_TX3;
6099           l_max_TX12 := l_TX12;
6100           l_max_TX15 := l_TX15;
6101           l_max_TX4 := l_TX4;
6102           l_max_TX10 := l_TX10;
6103           l_max_TX11 := l_TX11;
6104           l_max_TX14 := l_TX14;
6105         END IF;
6106       END LOOP;
6107       CLOSE l_party_site_cur;
6108       IF l_max_score>0 THEN
6109         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);
6110       END IF;
6111     END IF;
6112 
6113     IF l_contact_contains_str IS NOT NULL THEN
6114       l_max_score := 0;
6115       l_max_id := 0;
6116       l_max_idx := 0;
6117       open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);
6118       LOOP
6119         FETCH l_contact_cur INTO 
6120             l_org_contact_id, l_ct_party_id , l_TX22;
6121         EXIT WHEN l_contact_cur%NOTFOUND;
6122         l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX22);
6123         IF l_score > l_max_score THEN
6124           l_max_score := l_score;
6125           l_max_id := l_org_contact_id;
6126           l_max_idx := l_match_idx;
6127           l_max_TX22 := l_TX22;
6128         END IF;
6129       END LOOP;
6130       CLOSE l_contact_cur;
6131       IF l_max_score>0 THEN
6132         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);
6133       END IF;
6134     END IF;
6135 
6136     IF l_contact_pt_contains_str IS NOT NULL THEN
6137       l_max_score := 0;
6138       l_max_id := 0;
6139       l_max_idx := 0;
6140       IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_cpt_info THEN
6141         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'Y','N',l_contact_pt_cur);
6142       ELSE
6143         open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'N','N',l_contact_pt_cur);
6144       END IF;
6145       LOOP
6146         FETCH l_contact_pt_cur INTO 
6147             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;
6148         EXIT WHEN l_contact_pt_cur%NOTFOUND;
6149         l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
6150         IF l_score > l_max_score THEN
6151           l_max_score := l_score;
6152           l_max_id := l_contact_pt_id;
6153           l_max_idx := l_match_idx;
6154           l_max_TX1 := l_TX1;
6155           l_max_TX5 := l_TX5;
6156           l_max_TX6 := l_TX6;
6157         END IF;
6158       END LOOP;
6159       IF l_max_score>0 THEN
6160         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);
6161       END IF;
6162       CLOSE l_contact_pt_cur;
6163     END IF;
6164     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6165       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);
6166     END IF;
6167 EXCEPTION
6168   WHEN FND_API.G_EXC_ERROR THEN
6169     RAISE FND_API.G_EXC_ERROR;
6170   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6171     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6172   WHEN OTHERS THEN
6173     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6174     FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_60.get_score_details');
6175     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6176     FND_MSG_PUB.ADD;
6177     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6178 END get_score_details;
6179 
6180 
6181 /************************************************
6182   This procedure retrieves the match rule attributes into 
6183   the search record structures
6187         p_party_id              IN      NUMBER,
6184 ************************************************/
6185 
6186 PROCEDURE get_party_for_search (
6188         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6189         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6190         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6191         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6192 ) IS
6193   l_party_id NUMBER;
6194   l_party_site_ids HZ_PARTY_SEARCH.IDList;
6195   l_contact_ids HZ_PARTY_SEARCH.IDList;
6196   l_contact_pt_ids HZ_PARTY_SEARCH.IDList;
6197   ps NUMBER :=1;
6198   cpt NUMBER :=1;
6199   ct NUMBER :=1;
6200   l_use_contact_info varchar2(1);
6201 BEGIN
6202 
6203     l_use_contact_info := 'Y';
6204   IF nvl(FND_PROFILE.VALUE('HZ_DQM_REL_PARTY_MATCH'),'N')='Y' THEN
6205     l_use_contact_info := 'N';
6206   END IF;
6207   l_party_id := p_party_id;
6208   FOR PARTY_SITES IN (
6209  SELECT party_site_id FROM (
6210      SELECT party_site_id,identifying_address_flag
6211       FROM HZ_PARTY_SITES
6212       WHERE party_id = p_party_id
6213       AND (status is null OR status = 'A') 
6214       AND identifying_address_flag='Y'
6215       UNION
6216 
6217      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
6218       FROM HZ_PARTY_SITES
6219       WHERE party_id = p_party_id
6220       AND (status is null OR status = 'A') 
6221       AND (identifying_address_flag IS NULL OR identifying_address_flag = 'N')
6222       AND ROWNUM<6
6223       UNION
6224 
6225      SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
6226       FROM HZ_PARTY_SITES
6227       WHERE (status is null OR status = 'A') 
6228       AND party_id in (
6229         SELECT party_id
6230         FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
6231         WHERE HZ_RELATIONSHIPS.object_id = p_party_id
6232         AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6233         AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6234         AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6235         and l_use_contact_info = 'Y'
6236      ) 
6237      AND ROWNUM<6
6238 ) order by identifying_address_flag desc
6239     ) LOOP
6240       l_party_site_ids(ps) := PARTY_SITES.party_site_id;
6241       ps:=ps+1;
6242   END LOOP;
6243     FOR CONTACTS IN (
6244       SELECT org_contact_id
6245       FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
6246       WHERE HZ_RELATIONSHIPS.object_id = p_party_id
6247       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6248       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6249       AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
6250       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6251       AND ROWNUM<6 
6252     ) LOOP
6253       l_contact_ids(ct) := CONTACTS.org_contact_id;
6254       ct := ct+1;
6255     END LOOP;
6256     FOR CONTACT_POINTS IN (
6257       SELECT CONTACT_POINT_ID
6258       FROM HZ_CONTACT_POINTS 
6259       WHERE PRIMARY_FLAG = 'Y'
6260       AND owner_table_name = 'HZ_PARTIES'
6261       AND owner_table_id = p_party_id
6262 
6263       UNION
6264 
6265       SELECT CONTACT_POINT_ID
6266       FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS 
6267       WHERE PRIMARY_FLAG = 'Y'
6268       AND owner_table_name = 'HZ_PARTIES'
6269       AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id
6270       AND HZ_RELATIONSHIPS.object_id = p_party_id
6271       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6272       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6273       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6274         and l_use_contact_info = 'Y'
6275       AND ROWNUM<6
6276       UNION
6277 
6278       SELECT CONTACT_POINT_ID
6279       FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES  
6280       WHERE PRIMARY_FLAG = 'Y'
6281       AND owner_table_name = 'HZ_PARTY_SITES'
6282       AND owner_table_id = party_site_id 
6283       AND PARTY_ID = p_party_id 
6284       AND IDENTIFYING_ADDRESS_FLAG = 'Y') LOOP
6285       l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;
6286       cpt := cpt+1;
6287     END LOOP;
6288     get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,
6289           x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);
6290 EXCEPTION
6291   WHEN FND_API.G_EXC_ERROR THEN
6292     RAISE FND_API.G_EXC_ERROR;
6293   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6294     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6295   WHEN OTHERS THEN
6296     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6297     FND_MESSAGE.SET_TOKEN('PROC','get_party_for_search');
6298     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6299     FND_MSG_PUB.ADD;
6300     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6301 END get_party_for_search;
6302 
6303 PROCEDURE get_search_criteria (
6304         p_party_id              IN      NUMBER,
6305         p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,
6306         p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,
6307         p_contact_pt_ids        IN      HZ_PARTY_SEARCH.IDList,
6308         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6309         x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6310         x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6311         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6312 ) IS
6316       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);
6313 BEGIN
6314 
6315    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6317     END IF;
6318     IF p_party_id IS NOT NULL THEN
6319    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6320       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);
6321     END IF;
6322       get_party_rec(p_party_id, x_party_search_rec);
6323     END IF;
6324     IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN
6325    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6326       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);
6327     END IF;
6328       get_party_site_rec(p_party_site_ids, x_party_site_list);
6329     END IF;
6330     IF p_contact_ids IS NOT NULL AND p_contact_ids.COUNT>0 THEN
6331    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6332       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);
6333     END IF;
6334       get_contact_rec(p_contact_ids, x_contact_list);
6335     END IF;
6336     IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN
6337    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6338       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);
6339     END IF;
6340       get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);
6341     END IF;
6342 EXCEPTION
6343   WHEN FND_API.G_EXC_ERROR THEN
6344     RAISE FND_API.G_EXC_ERROR;
6345   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6346     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6347   WHEN OTHERS THEN
6348     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6349     FND_MESSAGE.SET_TOKEN('PROC','get_search_criteria');
6350     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6351     FND_MSG_PUB.ADD;
6352     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6353 END get_search_criteria;
6354 
6355 
6356 /************************************************
6357   This procedure retrieves the match rule party attributes into 
6358   the party search record structure 
6359 ************************************************/
6360 
6361 PROCEDURE get_party_rec (
6362         p_party_id              IN      NUMBER,
6363         x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type
6364 ) IS
6365     l_party_type VARCHAR2(255);
6366 BEGIN
6367 
6368    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6369       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);
6370     END IF;
6371     SELECT PARTY_TYPE INTO l_party_type
6372     FROM HZ_PARTIES
6373     WHERE PARTY_ID = p_party_id;
6374 
6375    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6376       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);
6377     END IF;
6378     IF l_party_type = 'ORGANIZATION' THEN
6379       SELECT 
6380         translate(HZ_ORGANIZATION_PROFILES.JGZZ_FISCAL_CODE, '%',' ')
6381        ,translate(HZ_PARTIES.PARTY_NUMBER, '%',' ')
6382       INTO 
6383         x_party_search_rec.JGZZ_FISCAL_CODE
6384        ,x_party_search_rec.PARTY_NUMBER
6385       FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES
6386       WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id
6387       AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL
6388       AND HZ_PARTIES.party_id = p_party_id;
6389     ELSIF l_party_type = 'PERSON' THEN
6390       SELECT 
6391         translate(HZ_PERSON_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_PERSON_PROFILES
6397       WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id
6398       AND HZ_PERSON_PROFILES.effective_end_date is NULL
6399       AND HZ_PARTIES.party_id = p_party_id;
6400     END IF;
6401     x_party_search_rec.PARTY_TYPE := l_party_type;
6402    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6403       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);
6404     END IF;
6405     x_party_search_rec.ALL_ACCOUNT_NUMBERS:=
6406        HZ_PARTY_ACQUIRE.get_account_info(p_party_id , 'PARTY','ALL_ACCOUNT_NUMBERS');
6407     x_party_search_rec.PARTY_ALL_NAMES:=
6408        HZ_PARTY_ACQUIRE.get_known_as(p_party_id , 'PARTY','PARTY_ALL_NAMES');
6409 
6410 EXCEPTION
6411   WHEN OTHERS THEN
6412     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6413     FND_MESSAGE.SET_TOKEN('PROC','get_party_rec');
6414     FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_id);
6415     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6416     FND_MSG_PUB.ADD;
6417     RAISE FND_API.G_EXC_ERROR;
6418 END get_party_rec;
6419 
6420 /************************************************
6424 
6421   This procedure retrieves the match rule party site attributes into 
6422   the party site search record structure 
6423 ************************************************/
6425 PROCEDURE get_party_site_rec (
6426         p_party_site_ids       IN      HZ_PARTY_SEARCH.IDList,
6427         x_party_site_list      OUT NOCOPY HZ_PARTY_SEARCH.party_site_list
6428 ) IS
6429   CURSOR c_party_sites(cp_party_site_id NUMBER) IS
6430     SELECT party_site_id
6431       ,translate(HZ_LOCATIONS.CITY, '%',' ')
6432       ,translate(HZ_LOCATIONS.COUNTRY, '%',' ')
6433       ,translate(HZ_LOCATIONS.POSTAL_CODE, '%',' ')
6434       ,translate(HZ_LOCATIONS.PROVINCE, '%',' ')
6435       ,translate(HZ_LOCATIONS.STATE, '%',' ')
6436     FROM HZ_PARTY_SITES, HZ_LOCATIONS
6437     WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id
6438     AND   HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;
6439 
6440   I NUMBER;
6441   J NUMBER:=1;
6442   l_party_site_id NUMBER;
6443 
6444 BEGIN
6445 
6446    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6447       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);
6448     END IF;
6449     FOR I IN 1..p_party_site_ids.COUNT LOOP
6450       l_party_site_id := p_party_site_ids(I);
6451       OPEN c_party_sites(p_party_site_ids(I));
6452       LOOP
6453         FETCH c_party_sites INTO
6454              l_party_site_id
6455            ,x_party_site_list(J).CITY
6456            ,x_party_site_list(J).COUNTRY
6457            ,x_party_site_list(J).POSTAL_CODE
6458            ,x_party_site_list(J).PROVINCE
6459            ,x_party_site_list(J).STATE
6460         ;
6461         EXIT WHEN c_party_sites%NOTFOUND;
6462 
6463    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6464       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);
6465     END IF;
6466         x_party_site_list(J).ADDRESS:=
6467        HZ_PARTY_ACQUIRE.get_address(l_party_site_id , 'PARTY_SITES','ADDRESS');
6468         J:=J+1;
6469 
6470       END LOOP;
6471       CLOSE c_party_sites;
6472     END LOOP;
6473 
6474 EXCEPTION
6475   WHEN OTHERS THEN
6476     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6477     FND_MESSAGE.SET_TOKEN('PROC','get_party_site_rec');
6478     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_party_site_id);
6479     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6480     FND_MSG_PUB.ADD;
6481     RAISE FND_API.G_EXC_ERROR;
6482 END get_party_site_rec;
6483 
6484 /************************************************
6485   This procedure retrieves the match rule contact attributes into 
6486   the contact search record structure 
6487 ************************************************/
6488 
6489 PROCEDURE get_contact_rec (
6490         p_contact_ids       IN      HZ_PARTY_SEARCH.IDList,
6491         x_contact_list      OUT NOCOPY HZ_PARTY_SEARCH.contact_list
6492 ) IS
6493   CURSOR c_contacts(cp_org_contact_id NUMBER) IS
6494     SELECT org_contact_id
6495       ,translate(HZ_ORG_CONTACTS.JOB_TITLE, '%',' ')
6496     FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES
6497     WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id
6498     AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6499     AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6500     AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
6501     AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6502     AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id
6503     AND HZ_PERSON_PROFILES.effective_end_date IS NULL;
6504 
6505   I NUMBER;
6506   l_org_contact_id NUMBER;
6507   J NUMBER:=1;
6508   BEGIN
6509 
6510    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6511       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);
6512     END IF;
6513     FOR I IN 1..p_contact_ids.COUNT LOOP
6514       l_org_contact_id := p_contact_ids(I);
6515       OPEN c_contacts(p_contact_ids(I));
6516       LOOP
6517         FETCH c_contacts INTO
6518              l_org_contact_id
6519              ,x_contact_list(J).JOB_TITLE
6520         ;
6521         EXIT WHEN c_contacts%NOTFOUND;
6522 
6523    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6524       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);
6525     END IF;
6526 
6527         J:=J+1;
6528       END LOOP;
6529       CLOSE c_contacts;
6530     END LOOP;
6531 
6532 EXCEPTION
6533   WHEN OTHERS THEN
6534     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6535     FND_MESSAGE.SET_TOKEN('PROC','get_contact_rec');
6536     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_org_contact_id);
6537     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6538     FND_MSG_PUB.ADD;
6539     RAISE FND_API.G_EXC_ERROR;
6540 END get_contact_rec;
6541 
6542 /************************************************
6543   This procedure retrieves the match rule contact point attributes into 
6544   the contact point search record structure 
6545 ************************************************/
6546 
6547 PROCEDURE get_contact_point_rec (
6548         p_contact_point_ids     IN  HZ_PARTY_SEARCH.IDList,
6552   -- Cursor to fetch primary contact points for party
6549         x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6550 ) IS
6551 
6553   CURSOR c_cpts(cp_contact_point_id NUMBER) IS
6554     SELECT contact_point_id, contact_point_type
6555       ,translate(HZ_CONTACT_POINTS.EMAIL_ADDRESS, '%',' ')
6556     FROM HZ_CONTACT_POINTS
6557     WHERE contact_point_id = cp_contact_point_id;
6558 
6559   I NUMBER;
6560   l_contact_point_id NUMBER;
6561   J NUMBER:=1;
6562   BEGIN
6563 
6564    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6565       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);
6566     END IF;
6567     FOR I in 1..p_contact_point_ids.COUNT LOOP
6568       l_contact_point_id := p_contact_point_ids(I);
6569       OPEN c_cpts(p_contact_point_ids(I));
6570       LOOP
6571         FETCH c_cpts INTO
6572              l_contact_point_id, x_contact_point_list(J).contact_point_type
6573              ,x_contact_point_list(J).EMAIL_ADDRESS
6574         ;
6575         EXIT WHEN c_cpts%NOTFOUND;
6576 
6577    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6578       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);
6579     END IF;
6580         x_contact_point_list(J).FLEX_FORMAT_PHONE_NUMBER:=
6581        HZ_PARTY_ACQUIRE.get_phone_number(l_contact_point_id , 'CONTACT_POINTS','FLEX_FORMAT_PHONE_NUMBER');
6582         J:=J+1;
6583 
6584       END LOOP;
6585       CLOSE c_cpts;
6586     END LOOP;
6587 
6588 EXCEPTION
6589   WHEN OTHERS THEN
6590     FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6591     FND_MESSAGE.SET_TOKEN('PROC','get_contact_point_rec');
6592     FND_MESSAGE.SET_TOKEN('PARTY_ID',l_contact_point_id);
6593     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6594     FND_MSG_PUB.ADD;
6595     RAISE FND_API.G_EXC_ERROR;
6596 END get_contact_point_rec;
6597 
6598 /************************************************
6599   This procedure maps a search record from the logical
6600   record structure to the stage schema structure 
6601   for the PARTY Entity after applying 
6602   the defined transformations
6603 ************************************************/
6604 
6605 PROCEDURE MAP_PARTY_REC( 
6606     p_search_ctx IN BOOLEAN,
6607     p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, 
6608     x_entered_max_score OUT NUMBER,
6609     x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type
6610   ) IS 
6611   tmp VARCHAR2(4000);
6612   l_party_name VARCHAR2(4000);
6613 BEGIN
6614    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6615       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);
6616     END IF;
6617    IF p_search_ctx THEN
6618      x_stage_rec.TX8 := NULL;
6619      g_other_party_level_attribs:=FALSE;
6620     IF p_search_rec.PARTY_NUMBER IS NOT NULL 
6621     OR p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL 
6622     OR p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL 
6623     THEN
6624       g_other_party_level_attribs:=TRUE;
6625     END IF;
6626      x_entered_max_score:=0;
6627     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
6628       x_entered_max_score := x_entered_max_score+60;
6629     END IF;
6630     IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
6631       x_entered_max_score := x_entered_max_score+60;
6632     END IF;
6633     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6634       x_entered_max_score := x_entered_max_score+40;
6635     END IF;
6636     IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
6637       x_entered_max_score := x_entered_max_score+60;
6638     END IF;
6639     END IF;
6640   IF p_search_ctx THEN
6641     IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
6642       x_stage_rec.TX35 := 
6643         HZ_TRANS_PKG.RM_SPLCHAR(
6644              p_search_rec.ALL_ACCOUNT_NUMBERS
6645              ,null,'ALL_ACCOUNT_NUMBERS'
6646              ,'PARTY','SEARCH');
6647     ELSE
6648       x_stage_rec.TX35 := '';
6649     END IF;
6650   ELSE
6651     IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
6652       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
6653              x_stage_rec.TX35
6654              ,null,'ALL_ACCOUNT_NUMBERS'
6655              ,'PARTY','SCORE');
6656       IF tmp IS NOT NULL THEN
6657         x_stage_rec.TX35 := tmp;
6658       END IF;
6659     END IF;
6660   END IF;
6661   IF p_search_ctx THEN
6662     IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
6663       x_stage_rec.TX45 := 
6664         HZ_TRANS_PKG.RM_SPLCHAR(
6665              p_search_rec.JGZZ_FISCAL_CODE
6666              ,null,'JGZZ_FISCAL_CODE'
6667              ,'PARTY','SEARCH');
6668     ELSE
6669       x_stage_rec.TX45 := '';
6670     END IF;
6671   ELSE
6672     IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
6673       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
6674              x_stage_rec.TX45
6675              ,null,'JGZZ_FISCAL_CODE'
6676              ,'PARTY','SCORE');
6677       IF tmp IS NOT NULL THEN
6678         x_stage_rec.TX45 := tmp;
6679       END IF;
6680     END IF;
6681   END IF;
6682   IF p_search_ctx THEN
6683     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6684       x_stage_rec.TX40 := 
6688              ,'PARTY','SEARCH');
6685         HZ_TRANS_PKG.WRNAMES_CLEANSE(
6686              p_search_rec.PARTY_ALL_NAMES
6687              ,null,'PARTY_ALL_NAMES'
6689     ELSE
6690       x_stage_rec.TX40 := '';
6691     END IF;
6692   ELSE
6693     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6694       tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
6695              x_stage_rec.TX40
6696              ,null,'PARTY_ALL_NAMES'
6697              ,'PARTY','SCORE');
6698       IF tmp IS NOT NULL THEN
6699         x_stage_rec.TX40 := tmp;
6700       END IF;
6701     END IF;
6702   END IF;
6703   IF p_search_ctx THEN
6704     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6705       x_stage_rec.TX39 := 
6706         HZ_TRANS_PKG.WRNAMES_EXACT(
6707              p_search_rec.PARTY_ALL_NAMES
6708              ,null,'PARTY_ALL_NAMES'
6709              ,'PARTY','SEARCH');
6710     ELSE
6711       x_stage_rec.TX39 := '';
6712     END IF;
6713   ELSE
6714     IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
6715       tmp :=HZ_TRANS_PKG.WRNAMES_EXACT(
6716              x_stage_rec.TX39
6717              ,null,'PARTY_ALL_NAMES'
6718              ,'PARTY','SCORE');
6719       IF tmp IS NOT NULL THEN
6720         x_stage_rec.TX39 := tmp;
6721       END IF;
6722     END IF;
6723   END IF;
6724   IF p_search_ctx THEN
6725     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
6726       x_stage_rec.TX34 := 
6727         HZ_TRANS_PKG.RM_SPLCHAR(
6728              p_search_rec.PARTY_NUMBER
6729              ,null,'PARTY_NUMBER'
6730              ,'PARTY','SEARCH');
6731     ELSE
6732       x_stage_rec.TX34 := '';
6733     END IF;
6734   ELSE
6735     IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN 
6736       tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
6737              x_stage_rec.TX34
6738              ,null,'PARTY_NUMBER'
6739              ,'PARTY','SCORE');
6740       IF tmp IS NOT NULL THEN
6741         x_stage_rec.TX34 := tmp;
6742       END IF;
6743     END IF;
6744   END IF;
6745   IF p_search_ctx THEN
6746     IF p_search_rec.PARTY_TYPE IS NOT NULL THEN 
6747       x_stage_rec.TX36 := 
6748         HZ_TRANS_PKG.EXACT(
6749              p_search_rec.PARTY_TYPE
6750              ,null,'PARTY_TYPE'
6751              ,'PARTY');
6752     ELSE
6753       x_stage_rec.TX36 := '';
6754     END IF;
6755   END IF;
6756     l_party_name := p_search_rec.PARTY_NAME;
6757     IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6758       l_party_name := p_search_rec.PARTY_ALL_NAMES;
6759     END IF;
6760     IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN
6761       x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,'PARTY_NAME','PARTY','SEARCH');
6762     END IF;
6763 EXCEPTION
6764   WHEN OTHERS THEN
6765     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6766     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_REC');
6767     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6768     FND_MSG_PUB.ADD;
6769     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6770 END;
6771 
6772 
6773 /************************************************
6774   This procedure maps a search record from the logical
6775   record structure to the stage schema structure 
6776   for the PARTY_SITES Entity after applying 
6777   the defined transformations
6778 ************************************************/
6779 
6780 PROCEDURE MAP_PARTY_SITE_REC( 
6781     p_search_ctx IN BOOLEAN,
6782     p_search_list IN HZ_PARTY_SEARCH.party_site_list, 
6783     x_entered_max_score OUT NUMBER,
6784     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list
6785   ) IS 
6786   l_current_max_score NUMBER;
6787   tmp VARCHAR2(4000);
6788 BEGIN
6789    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6790       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);
6791     END IF;
6792    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6793       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);
6794     END IF;
6795   IF p_search_ctx THEN
6796    g_ps_den_only:=TRUE;
6797     x_entered_max_score:=0;
6798     FOR I IN 1..p_search_list.COUNT LOOP
6799       l_current_max_score:=0;
6800       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6801         l_current_max_score := l_current_max_score+40;
6802         g_ps_den_only:=FALSE;
6803       END IF;
6804       IF p_search_list(I).CITY IS NOT NULL THEN 
6805         l_current_max_score := l_current_max_score+30;
6806       END IF;
6807       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6808         l_current_max_score := l_current_max_score+40;
6809       END IF;
6810       IF p_search_list(I).PROVINCE IS NOT NULL THEN 
6811         l_current_max_score := l_current_max_score+20;
6812       END IF;
6813       IF p_search_list(I).STATE IS NOT NULL THEN 
6814         l_current_max_score := l_current_max_score+20;
6815       END IF;
6816       IF p_search_list(I).COUNTRY IS NOT NULL THEN 
6817         l_current_max_score := l_current_max_score+10;
6818       END IF;
6819       IF l_current_max_score>x_entered_max_score THEN
6820         x_entered_max_score:=l_current_max_score;
6821       END IF;
6822     END LOOP;
6823   END IF;
6824   FOR I IN 1..p_search_list.COUNT LOOP
6825     IF p_search_ctx THEN
6829              p_search_list(I).ADDRESS
6826       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6827         x_stage_list(I).TX4 := 
6828           HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6830              ,null,'ADDRESS'
6831              ,'PARTY_SITES','SEARCH');
6832       ELSE
6833         x_stage_list(I).TX4 := '';
6834       END IF;
6835     ELSE
6836       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6837         tmp := HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6838              x_stage_list(I).TX4
6839              ,null,'ADDRESS'
6840              ,'PARTY_SITES','SCORE');
6841         IF tmp IS NOT NULL THEN
6842           x_stage_list(I).TX4 := tmp;
6843         END IF;
6844       END IF;
6845     END IF;
6846   END LOOP;
6847   FOR I IN 1..p_search_list.COUNT LOOP
6848     IF p_search_ctx THEN
6849       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6850         x_stage_list(I).TX3 := 
6851           HZ_TRANS_PKG.WRADDRESS_EXACT(
6852              p_search_list(I).ADDRESS
6853              ,null,'ADDRESS'
6854              ,'PARTY_SITES','SEARCH');
6855       ELSE
6856         x_stage_list(I).TX3 := '';
6857       END IF;
6858     ELSE
6859       IF p_search_list(I).ADDRESS IS NOT NULL THEN 
6860         tmp := HZ_TRANS_PKG.WRADDRESS_EXACT(
6861              x_stage_list(I).TX3
6862              ,null,'ADDRESS'
6863              ,'PARTY_SITES','SCORE');
6864         IF tmp IS NOT NULL THEN
6865           x_stage_list(I).TX3 := tmp;
6866         END IF;
6867       END IF;
6868     END IF;
6869   END LOOP;
6870   FOR I IN 1..p_search_list.COUNT LOOP
6871     IF p_search_ctx THEN
6872       IF p_search_list(I).CITY IS NOT NULL THEN 
6873         x_stage_list(I).TX10 := 
6874           HZ_TRANS_PKG.CLEANSE(
6875              p_search_list(I).CITY
6876              ,null,'CITY'
6877              ,'PARTY_SITES');
6878       ELSE
6879         x_stage_list(I).TX10 := '';
6880       END IF;
6881     END IF;
6882   END LOOP;
6883   FOR I IN 1..p_search_list.COUNT LOOP
6884     IF p_search_ctx THEN
6885       IF p_search_list(I).CITY IS NOT NULL THEN 
6886         x_stage_list(I).TX9 := 
6887           HZ_TRANS_PKG.EXACT(
6888              p_search_list(I).CITY
6889              ,null,'CITY'
6890              ,'PARTY_SITES');
6891       ELSE
6892         x_stage_list(I).TX9 := '';
6893       END IF;
6894     END IF;
6895   END LOOP;
6896   FOR I IN 1..p_search_list.COUNT LOOP
6897     IF p_search_ctx THEN
6898       IF p_search_list(I).COUNTRY IS NOT NULL THEN 
6899         x_stage_list(I).TX22 := 
6900           HZ_TRANS_PKG.EXACT(
6901              p_search_list(I).COUNTRY
6902              ,null,'COUNTRY'
6903              ,'PARTY_SITES');
6904       ELSE
6905         x_stage_list(I).TX22 := '';
6906       END IF;
6907     END IF;
6908   END LOOP;
6909   FOR I IN 1..p_search_list.COUNT LOOP
6910     IF p_search_ctx THEN
6911       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6912         x_stage_list(I).TX11 := 
6913           HZ_TRANS_PKG.RM_SPLCHAR(
6914              p_search_list(I).POSTAL_CODE
6915              ,null,'POSTAL_CODE'
6916              ,'PARTY_SITES','SEARCH');
6917       ELSE
6918         x_stage_list(I).TX11 := '';
6919       END IF;
6920     ELSE
6921       IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN 
6922         tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6923              x_stage_list(I).TX11
6924              ,null,'POSTAL_CODE'
6925              ,'PARTY_SITES','SCORE');
6926         IF tmp IS NOT NULL THEN
6927           x_stage_list(I).TX11 := tmp;
6928         END IF;
6929       END IF;
6930     END IF;
6931   END LOOP;
6932   FOR I IN 1..p_search_list.COUNT LOOP
6933     IF p_search_ctx THEN
6934       IF p_search_list(I).PROVINCE IS NOT NULL THEN 
6935         x_stage_list(I).TX13 := 
6936           HZ_TRANS_PKG.CLEANSE(
6937              p_search_list(I).PROVINCE
6938              ,null,'PROVINCE'
6939              ,'PARTY_SITES');
6940       ELSE
6941         x_stage_list(I).TX13 := '';
6942       END IF;
6943     END IF;
6944   END LOOP;
6945   FOR I IN 1..p_search_list.COUNT LOOP
6946     IF p_search_ctx THEN
6947       IF p_search_list(I).PROVINCE IS NOT NULL THEN 
6948         x_stage_list(I).TX12 := 
6949           HZ_TRANS_PKG.EXACT(
6950              p_search_list(I).PROVINCE
6951              ,null,'PROVINCE'
6952              ,'PARTY_SITES');
6953       ELSE
6954         x_stage_list(I).TX12 := '';
6955       END IF;
6956     END IF;
6957   END LOOP;
6958   FOR I IN 1..p_search_list.COUNT LOOP
6959     IF p_search_ctx THEN
6960       IF p_search_list(I).STATE IS NOT NULL THEN 
6961         x_stage_list(I).TX15 := 
6962           HZ_TRANS_PKG.WRSTATE_CLEANSE(
6963              p_search_list(I).STATE
6964              ,null,'STATE'
6965              ,'PARTY_SITES','SEARCH');
6966       ELSE
6967         x_stage_list(I).TX15 := '';
6968       END IF;
6969     ELSE
6970       IF p_search_list(I).STATE IS NOT NULL THEN 
6971         tmp := HZ_TRANS_PKG.WRSTATE_CLEANSE(
6972              x_stage_list(I).TX15
6973              ,null,'STATE'
6974              ,'PARTY_SITES','SCORE');
6975         IF tmp IS NOT NULL THEN
6976           x_stage_list(I).TX15 := tmp;
6977         END IF;
6978       END IF;
6982     IF p_search_ctx THEN
6979     END IF;
6980   END LOOP;
6981   FOR I IN 1..p_search_list.COUNT LOOP
6983       IF p_search_list(I).STATE IS NOT NULL THEN 
6984         x_stage_list(I).TX14 := 
6985           HZ_TRANS_PKG.WRSTATE_EXACT(
6986              p_search_list(I).STATE
6987              ,null,'STATE'
6988              ,'PARTY_SITES','SEARCH');
6989       ELSE
6990         x_stage_list(I).TX14 := '';
6991       END IF;
6992     ELSE
6993       IF p_search_list(I).STATE IS NOT NULL THEN 
6994         tmp := HZ_TRANS_PKG.WRSTATE_EXACT(
6995              x_stage_list(I).TX14
6996              ,null,'STATE'
6997              ,'PARTY_SITES','SCORE');
6998         IF tmp IS NOT NULL THEN
6999           x_stage_list(I).TX14 := tmp;
7000         END IF;
7001       END IF;
7002     END IF;
7003   END LOOP;
7004 EXCEPTION
7005   WHEN OTHERS THEN
7006     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7007     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_SITE_REC');
7008     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7009     FND_MSG_PUB.ADD;
7010     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7011 END;
7012 
7013 
7014 /************************************************
7015   This procedure maps a search record from the logical
7016   record structure to the stage schema structure 
7017   for the CONTACTS Entity after applying 
7018   the defined transformations
7019 ************************************************/
7020 
7021 PROCEDURE MAP_CONTACT_REC( 
7022     p_search_ctx IN BOOLEAN,
7023     p_search_list IN HZ_PARTY_SEARCH.contact_list, 
7024     x_entered_max_score OUT NUMBER,
7025     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list
7026   ) IS 
7027   l_current_max_score NUMBER;
7028   tmp VARCHAR2(4000);
7029 BEGIN
7030    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7031       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);
7032     END IF;
7033    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7034       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);
7035     END IF;
7036   IF p_search_ctx THEN
7037     x_entered_max_score:=0;
7038     FOR I IN 1..p_search_list.COUNT LOOP
7039       l_current_max_score:=0;
7040       IF p_search_list(I).JOB_TITLE IS NOT NULL THEN 
7041         l_current_max_score := l_current_max_score+20;
7042       END IF;
7043       IF l_current_max_score>x_entered_max_score THEN
7044         x_entered_max_score:=l_current_max_score;
7045       END IF;
7046     END LOOP;
7047   END IF;
7048   FOR I IN 1..p_search_list.COUNT LOOP
7049     IF p_search_ctx THEN
7050       IF p_search_list(I).JOB_TITLE IS NOT NULL THEN 
7051         x_stage_list(I).TX22 := 
7052           HZ_TRANS_PKG.EXACT(
7053              p_search_list(I).JOB_TITLE
7054              ,null,'JOB_TITLE'
7055              ,'CONTACTS');
7056       ELSE
7057         x_stage_list(I).TX22 := '';
7058       END IF;
7059     END IF;
7060   END LOOP;
7061 EXCEPTION
7062   WHEN OTHERS THEN
7063     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7064     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_REC');
7065     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7066     FND_MSG_PUB.ADD;
7067     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7068 END;
7069 
7070 
7071 /************************************************
7072   This procedure maps a search record from the logical
7073   record structure to the stage schema structure 
7074   for the CONTACT_POINTS Entity after applying 
7075   the defined transformations
7076 ************************************************/
7077 
7078 PROCEDURE MAP_CONTACT_POINT_REC( 
7079     p_search_ctx IN BOOLEAN,
7080     p_search_list IN HZ_PARTY_SEARCH.contact_point_list, 
7081     x_entered_max_score OUT NUMBER,
7082     x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list
7083   ) IS 
7084   l_current_max_score NUMBER;
7085   tmp VARCHAR2(4000);
7086   TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);
7087   l_cnt_pt_type_index INDEX_VARCHAR100_TBL;
7088   TYPE CONTACT_PT_REC_TYPE IS RECORD (
7089   contact_pt_type		VARCHAR2(100),
7090   max_score    		NUMBER) ;
7091   TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;
7092   l_cnt_pt_type contact_pt_list;
7093   N NUMBER := 1;
7094   x_modify VARCHAR2(1);
7095 BEGIN
7096    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7097       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);
7098     END IF;
7099    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7100       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);
7101     END IF;
7102   IF p_search_ctx THEN
7103     x_entered_max_score:=0;
7104     FOR I IN 1..p_search_list.COUNT LOOP
7105       l_current_max_score:=0;
7106       x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;
7110       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7107       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7108         l_current_max_score := l_current_max_score+60;
7109       END IF;
7111         l_current_max_score := l_current_max_score+60;
7112       END IF;
7113       x_modify := 'N';
7114       FOR J IN 1..l_cnt_pt_type.count LOOP
7115       if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then
7116          x_modify := 'Y';
7117       IF l_cnt_pt_type(J).max_score<l_current_max_score THEN
7118       l_cnt_pt_type(J).max_score :=l_current_max_score;
7119       EXIT;
7120       END IF;
7121       end if;
7122       END LOOP;
7123       if x_modify='N' then
7124       l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;
7125       l_cnt_pt_type(N).max_score := l_current_max_score;
7126       N:= N+1;
7127       end if;
7128     END LOOP;
7129    FOR M IN 1..l_cnt_pt_type.count LOOP
7130    x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;
7131    END LOOP;
7132   END IF;
7133   FOR I IN 1..p_search_list.COUNT LOOP
7134     IF p_search_ctx THEN
7135       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7136         x_stage_list(I).TX6 := 
7137           HZ_TRANS_PKG.CLEANSED_EMAIL(
7138              p_search_list(I).EMAIL_ADDRESS
7139              ,null,'EMAIL_ADDRESS'
7140              ,'CONTACT_POINTS','SEARCH');
7141       ELSE
7142         x_stage_list(I).TX6 := '';
7143       END IF;
7144     ELSE
7145       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7146         tmp := HZ_TRANS_PKG.CLEANSED_EMAIL(
7147              x_stage_list(I).TX6
7148              ,null,'EMAIL_ADDRESS'
7149              ,'CONTACT_POINTS','SCORE');
7150         IF tmp IS NOT NULL THEN
7151           x_stage_list(I).TX6 := tmp;
7152         END IF;
7153       END IF;
7154     END IF;
7155   END LOOP;
7156   FOR I IN 1..p_search_list.COUNT LOOP
7157     IF p_search_ctx THEN
7158       IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7159         x_stage_list(I).TX5 := 
7160           HZ_TRANS_PKG.EXACT_EMAIL(
7161              p_search_list(I).EMAIL_ADDRESS
7162              ,null,'EMAIL_ADDRESS'
7163              ,'CONTACT_POINTS');
7164       ELSE
7165         x_stage_list(I).TX5 := '';
7166       END IF;
7167     END IF;
7168   END LOOP;
7169   FOR I IN 1..p_search_list.COUNT LOOP
7170     IF p_search_ctx THEN
7171       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7172         x_stage_list(I).TX1 := 
7173           HZ_TRANS_PKG.RM_SPLCHAR_CTX(
7174              p_search_list(I).FLEX_FORMAT_PHONE_NUMBER
7175              ,null,'FLEX_FORMAT_PHONE_NUMBER'
7176              ,'CONTACT_POINTS','SEARCH');
7177       ELSE
7178         x_stage_list(I).TX1 := '';
7179       END IF;
7180     ELSE
7181       IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7182         tmp := HZ_TRANS_PKG.RM_SPLCHAR_CTX(
7183              x_stage_list(I).TX1
7184              ,null,'FLEX_FORMAT_PHONE_NUMBER'
7185              ,'CONTACT_POINTS','SCORE');
7186         IF tmp IS NOT NULL THEN
7187           x_stage_list(I).TX1 := tmp;
7188         END IF;
7189       END IF;
7190     END IF;
7191   END LOOP;
7192 EXCEPTION
7193   WHEN OTHERS THEN
7194     FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7195     FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_POINT_REC');
7196     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7197     FND_MSG_PUB.ADD;
7198     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7199 END;
7200 
7201 
7202 /************************************************
7203   This procedure checks if the input search criteria 
7204   is valid. It checks if : 
7205    1. At least one primary condition is passed
7206    2. Contact Point Type is not null for each condition
7207 ************************************************/
7208 
7209 FUNCTION check_prim_cond(
7210       p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,
7211       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
7212       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
7213       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list)
7214       RETURN BOOLEAN IS
7215   BEGIN
7216     FOR I IN 1..p_contact_point_list.COUNT LOOP
7217       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (
7218 p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7219 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
7220  ) THEN
7221         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
7222         FND_MSG_PUB.ADD;
7223         RAISE FND_API.G_EXC_ERROR;
7224       END IF;
7225     END LOOP;
7226 
7227     IF p_party_search_rec.PARTY_NUMBER IS NOT NULL THEN 
7228       RETURN TRUE;
7229     END IF;
7230     IF p_party_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN 
7231       RETURN TRUE;
7232     END IF;
7233     IF p_party_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN 
7234       RETURN TRUE;
7235     END IF;
7236     IF p_party_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN 
7237       RETURN TRUE;
7238     END IF;
7239     FOR I IN 1..p_party_site_list.COUNT LOOP
7240       IF p_party_site_list(I).ADDRESS IS NOT NULL THEN 
7241         RETURN TRUE;
7242       END IF;
7243     END LOOP;
7244     FOR I IN 1..p_party_site_list.COUNT LOOP
7245       IF p_party_site_list(I).CITY IS NOT NULL THEN 
7249     FOR I IN 1..p_party_site_list.COUNT LOOP
7246         RETURN TRUE;
7247       END IF;
7248     END LOOP;
7250       IF p_party_site_list(I).POSTAL_CODE IS NOT NULL THEN 
7251         RETURN TRUE;
7252       END IF;
7253     END LOOP;
7254     FOR I IN 1..p_party_site_list.COUNT LOOP
7255       IF p_party_site_list(I).PROVINCE IS NOT NULL THEN 
7256         RETURN TRUE;
7257       END IF;
7258     END LOOP;
7259     FOR I IN 1..p_party_site_list.COUNT LOOP
7260       IF p_party_site_list(I).STATE IS NOT NULL THEN 
7261         RETURN TRUE;
7262       END IF;
7263     END LOOP;
7264     FOR I IN 1..p_party_site_list.COUNT LOOP
7265       IF p_party_site_list(I).COUNTRY IS NOT NULL THEN 
7266         RETURN TRUE;
7267       END IF;
7268     END LOOP;
7269     FOR I IN 1..p_contact_list.COUNT LOOP
7270       IF p_contact_list(I).JOB_TITLE IS NOT NULL THEN 
7271         RETURN TRUE;
7272       END IF;
7273     END LOOP;
7274     FOR I IN 1..p_contact_point_list.COUNT LOOP
7275       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN 
7276         RETURN TRUE;
7277       END IF;
7278     END LOOP;
7279     FOR I IN 1..p_contact_point_list.COUNT LOOP
7280       IF p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL THEN 
7281         RETURN TRUE;
7282       END IF;
7283     END LOOP;
7284     RETURN FALSE;
7285 EXCEPTION
7286   WHEN FND_API.G_EXC_ERROR THEN
7287     RAISE FND_API.G_EXC_ERROR;
7288   WHEN OTHERS THEN
7289     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7290     FND_MESSAGE.SET_TOKEN('PROC','check_prim_cond');
7291     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7292     FND_MSG_PUB.ADD;
7293     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7294   END check_prim_cond;
7295 
7296 /************************************************
7297   This procedure checks if the input search condition 
7298   has party site criteria. 
7299 ************************************************/
7300 
7301 PROCEDURE check_party_site_cond(
7302       p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,
7303       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
7304 	   x_secondary		   OUT     BOOLEAN,
7305 	   x_primary		   OUT     BOOLEAN
7306 ) IS
7307   BEGIN
7308     x_primary:= FALSE;
7309     x_secondary:= FALSE;
7310     FOR I IN 1..p_party_site_list.COUNT LOOP
7311       IF p_party_site_list(I).ADDRESS IS NOT NULL 
7312          OR p_party_site_list(I).CITY IS NOT NULL
7313          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
7314          OR p_party_site_list(I).PROVINCE IS NOT NULL
7315          OR p_party_site_list(I).STATE IS NOT NULL
7316          OR p_party_site_list(I).COUNTRY IS NOT NULL
7317       THEN
7318         x_primary := TRUE;
7319       END IF;
7320       EXIT WHEN x_primary;
7321     END LOOP;
7322     FOR I IN 1..p_contact_point_list.COUNT LOOP
7323       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7324          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7325       THEN
7326         x_primary := TRUE;
7327       END IF;
7328       EXIT WHEN x_primary;
7329     END LOOP;
7330 
7331     FOR I IN 1..p_party_site_list.COUNT LOOP
7332       IF p_party_site_list(I).ADDRESS IS NOT NULL 
7333          OR p_party_site_list(I).CITY IS NOT NULL
7334          OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
7335          OR p_party_site_list(I).PROVINCE IS NOT NULL
7336          OR p_party_site_list(I).STATE IS NOT NULL
7337          OR p_party_site_list(I).COUNTRY IS NOT NULL
7338       THEN
7339         x_secondary := TRUE;
7340       END IF;
7341       EXIT WHEN x_secondary;
7342     END LOOP;
7343     FOR I IN 1..p_contact_point_list.COUNT LOOP
7344       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7345          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7346       THEN
7347         x_secondary := TRUE;
7348       END IF;
7349       EXIT WHEN x_secondary;
7350     END LOOP;
7351 EXCEPTION
7352   WHEN OTHERS THEN
7353     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7354     FND_MESSAGE.SET_TOKEN('PROC','check_party_site_cond');
7355     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7356     FND_MSG_PUB.ADD;
7357     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7358   END check_party_site_cond;
7359 
7360 /************************************************
7361   This procedure checks if the input search condition 
7362   has contact criteria. 
7363 ************************************************/
7364 
7365 PROCEDURE check_contact_cond(
7366       p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,
7367       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
7368       x_secondary             OUT     BOOLEAN,
7369       x_primary               OUT     BOOLEAN
7370 ) IS
7371   BEGIN
7372     x_primary:= FALSE;
7373     x_secondary:= FALSE;
7374     FOR I IN 1..p_contact_list.COUNT LOOP
7375       IF p_contact_list(I).JOB_TITLE IS NOT NULL 
7376       THEN
7377         x_primary := TRUE;
7378       END IF;
7379       EXIT WHEN x_primary;
7380     END LOOP;
7381 
7382     FOR I IN 1..p_contact_point_list.COUNT LOOP
7383       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7384          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7385       THEN
7386         x_primary := TRUE;
7387       END IF;
7388       EXIT WHEN x_primary;
7389     END LOOP;
7390 
7391     FOR I IN 1..p_contact_list.COUNT LOOP
7392       IF p_contact_list(I).JOB_TITLE IS NOT NULL 
7393       THEN
7394         x_secondary := TRUE;
7395       END IF;
7396       EXIT WHEN x_secondary;
7397     END LOOP;
7398 
7399     FOR I IN 1..p_contact_point_list.COUNT LOOP
7400       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7401          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7402       THEN
7403         x_secondary := TRUE;
7404       END IF;
7405       EXIT WHEN x_secondary;
7406     END LOOP;
7407 EXCEPTION
7408   WHEN OTHERS THEN
7409     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7410     FND_MESSAGE.SET_TOKEN('PROC','check_contact_cond');
7411     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7412     FND_MSG_PUB.ADD;
7413     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7414   END check_contact_cond;
7415 
7416 /************************************************
7417   This procedure checks if the input search condition 
7418   has valid contact point criteria. 
7419 ************************************************/
7420 
7421 PROCEDURE check_contact_point_cond(
7422       p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,
7423       x_secondary             OUT     BOOLEAN,
7424       x_primary               OUT     BOOLEAN
7425 ) IS
7426   BEGIN
7427     x_primary:= FALSE;
7428     x_secondary:= FALSE;
7429 
7430     FOR I IN 1..p_contact_point_list.COUNT LOOP
7431       IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN 
7432         FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
7433         FND_MSG_PUB.ADD;
7434         RAISE FND_API.G_EXC_ERROR;
7435       END IF;
7436     END LOOP;
7437 
7438     FOR I IN 1..p_contact_point_list.COUNT LOOP
7439       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL 
7440          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
7441       THEN
7442         x_primary := TRUE;
7443       END IF;
7444       EXIT WHEN x_primary;
7445     END LOOP;
7446     FOR I IN 1..p_contact_point_list.COUNT LOOP
7447       IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL  
7448          OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL 
7449       THEN
7450         x_secondary := TRUE;
7451       END IF;
7452       EXIT WHEN x_secondary;
7453     END LOOP;
7454 EXCEPTION
7455   WHEN OTHERS THEN
7456     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7457     FND_MESSAGE.SET_TOKEN('PROC','check_contact_point_cond');
7458     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7459     FND_MSG_PUB.ADD;
7460     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7461   END check_contact_point_cond;
7462 
7463 FUNCTION check_staged RETURN BOOLEAN IS
7464 
7465   CURSOR c_check_staged IS 
7466     SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL 
7467     WHERE nvl(STAGED_FLAG,'N') = 'N' 
7468     AND FUNCTION_ID in (
7469                 38
7470                 ,39
7471                 ,43
7472                 ,44
7473                 ,50
7474                 ,66
7475                 ,67
7476                 ,72
7477                 ,73
7478                 ,74
7479                 ,75
7480                 ,76
7481                 ,77
7482                 ,78
7483                 ,85
7484                 ,109
7485                 ,110
7486                 ,114
7487                 ,115
7488     );
7489   l_tmp NUMBER;
7490 BEGIN
7491   IF g_staged =  1 THEN
7492     RETURN TRUE;
7493   ELSIF g_staged = 0 THEN
7494     RETURN FALSE;
7495   END IF;
7496 
7497   OPEN c_check_staged;
7498   FETCH c_check_staged INTO l_tmp;
7499   IF c_check_staged%FOUND THEN
7500     CLOSE c_check_staged;
7501     g_staged := 0;
7502     RETURN FALSE;
7503   ELSE
7504     CLOSE c_check_staged;
7505     g_staged := 1;
7506     RETURN TRUE;
7507   END IF;
7508 END check_staged;
7509 
7510 -- Fix for Bug 4736139
7511 FUNCTION check_staged_var RETURN VARCHAR2 IS
7512   l_staged       VARCHAR2(1);
7513   l_staged_bool  BOOLEAN;
7514 BEGIN
7515   l_staged_bool := check_staged;
7516   IF l_staged_bool THEN
7517     l_staged := 'Y';
7518   ELSE
7519     l_staged := 'N';
7520   END IF;
7521   RETURN l_staged;
7522 END check_staged_var;
7523 -- End fix for Bug 4736139
7524 
7525 END;
7526