DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_50

Source


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