DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_36

Source


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