DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_36

Source


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