DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_52

Source


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