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