DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_51

Source


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