DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_37

Source


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