DBA Data[Home] [Help]

PACKAGE BODY: APPS.CE_VALIDATE_BANKINFO

Source


1 package body CE_VALIDATE_BANKINFO  as
2 /* $Header: cevlbnkb.pls 120.80.12020000.14 2013/03/15 14:21:54 csutaria ship $ */
3 
4 -- bug 6856840
5 -- package variable to track whether bank ID needs to be mapped to Bank Num
6 BANK_ID_IS_NUM  BOOLEAN := FALSE;
7 
8 CURSOR get_bank_num (Xi_BANK_ID NUMBER) IS
9    SELECT OrgProfileBank.BANK_OR_BRANCH_NUMBER
10     FROM  HZ_PARTIES   PartyBank,
11           HZ_ORGANIZATION_PROFILES   OrgProfileBank,
12           HZ_CODE_ASSIGNMENTS   CABank
13    WHERE
14           PartyBank.party_id = Xi_BANK_ID
15      AND  PartyBank.PARTY_TYPE = 'ORGANIZATION'
16      AND  PartyBank.status = 'A'
17      AND  PartyBank.PARTY_ID = OrgProfileBank.PARTY_ID
18      AND  SYSDATE BETWEEN TRUNC(OrgProfileBank.EFFECTIVE_START_DATE)
19           AND NVL(TRUNC(OrgProfileBank.EFFECTIVE_END_DATE),SYSDATE)
20      AND  CABank.CLASS_CATEGORY = 'BANK_INSTITUTION_TYPE'
21      AND  CABank.CLASS_CODE = 'BANK'
22      AND  CABank.OWNER_TABLE_NAME = 'HZ_PARTIES'
23      AND  CABank.OWNER_TABLE_ID = PartyBank.PARTY_ID
24      AND  NVL(CABank.status, 'A') = 'A';
25 
26 ---Bug 15958504  added procedure for branch end_date check
27 PROCEDURE CE_END_DATE_CHECK(
28     Xi_BRANCH_ID       IN NUMBER,
29     Xi_BRANCH_END_DATE IN DATE)
30 IS
31   l_count_int number(8) :=0;
32   l_count_ext number(8) :=0;
33 BEGIN
34   cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_end_date_check');
35   cep_standard.debug('branch end_date = ' || Xi_BRANCH_END_DATE);
36   SELECT COUNT(*)
37   INTO l_count_int
38   FROM ce_bank_accounts
39   WHERE NVL(end_date,Xi_BRANCH_END_DATE+1) > Xi_BRANCH_END_DATE
40   AND bank_branch_id                       = Xi_BRANCH_ID;
41   cep_standard.debug( 'Number of active internal bankaccounts = '||l_count_int);
42   SELECT COUNT(*)
43   INTO l_count_ext
44   FROM iby_ext_bank_accounts
45   WHERE NVL(end_date,Xi_BRANCH_END_DATE+1) > Xi_BRANCH_END_DATE
46   AND branch_id                      = Xi_BRANCH_ID;
47   cep_standard.debug( 'Number of active external bankaccounts = '||l_count_ext);
48   IF (l_count_int > 0 OR l_count_ext > 0) THEN
49     fnd_message.set_name('CE', 'CE_BRANCH_END_DATE');
50     FND_MESSAGE.set_token('FIELD1', l_count_int, true);
51     FND_MESSAGE.set_token('FIELD2', l_count_ext, true);
52     fnd_msg_pub.add;
53   END IF;
54   cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_end_date_check');
55 END;
56 
57 -- bug 7582842 : Added private function
58 FUNCTION CE_DISABLE_VALIDATION RETURN BOOLEAN
59 AS
60     l_disable VARCHAR2(1) := 'N';
61 BEGIN
62     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_disable_validation');
63     l_disable := nvl(FND_PROFILE.value('CE_DISABLE_BANK_VAL'),'N');
64     cep_standard.debug('disable = '||l_disable);
65 
66     IF (l_disable = 'Y') THEN
67         RETURN TRUE;
68     ELSE
69         RETURN FALSE;
70     END IF;
71 
72 END CE_DISABLE_VALIDATION;
73 
74 FUNCTION ce_check_numeric(check_value VARCHAR2,
75                              pos_from NUMBER,
76                               pos_for NUMBER)
77 RETURN VARCHAR2
78 IS
79    num_check VARCHAR2(40);
80 BEGIN
81      num_check := '1';
82      num_check := nvl(
83                      rtrim(
84                    translate(substr(check_value,pos_from,pos_for),
85                              '1234567890',
86                              '          ')
87                                             ), '0'
88                                                         );
89 RETURN(num_check);
90 END ce_check_numeric;
91 
92 -- SEPA 6700007
93 PROCEDURE CE_VALIDATE_BIC(  X_BIC_CODE IN varchar2,
94                             p_init_msg_list  IN  VARCHAR2,
95                           x_msg_count      OUT NOCOPY NUMBER,
96                           x_msg_data       OUT NOCOPY VARCHAR2,
97                           x_return_status   IN OUT NOCOPY VARCHAR2
98                          ) AS
99  l_bic varchar2(30) ;
100  l_string varchar2(30) ;
101 
102 BEGIN
103     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bic');
104     -- Initialize message list if p_init_msg_list is set to TRUE.
105     IF FND_API.to_Boolean(p_init_msg_list) THEN
106         FND_MSG_PUB.initialize;
107     END IF;
108     -- initialize API return status to success.
109     x_return_status := fnd_api.g_ret_sts_success;
110 
111     l_bic := upper(X_BIC_CODE) ;
112 
113     IF LENGTH(l_bic)  IN ( 8,11 ) THEN
114         l_string := nvl(translate(l_bic,'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890','0'),'0');
115         l_string := nvl(length(ltrim(rtrim(replace(l_string, '0', ' ')))),'0') ;
116 
117         IF TO_NUMBER(l_string) > 0 THEN
118             fnd_message.set_name('CE', 'CE_INVALID_BIC_CODE');
119             fnd_msg_pub.add;
120             x_return_status := fnd_api.g_ret_sts_error;
121         END IF ;
122     ELSE
123         fnd_message.set_name('CE', 'CE_INVALID_BIC_LENGTH');
124         fnd_msg_pub.add;
125         x_return_status := fnd_api.g_ret_sts_error;
126     END IF ;
127 
128     FND_MSG_PUB.Count_And_Get(
129             p_encoded => FND_API.G_FALSE,
130             p_count => x_msg_count,
131             p_data  => x_msg_data);
132 
133 END CE_VALIDATE_BIC;
134 
135 FUNCTION ce_remove_formats(check_value VARCHAR2) RETURN VARCHAR2
136 IS
137    num_check VARCHAR2(40);
138 BEGIN
139 
140     num_check := upper(replace(check_value,' ',''));
141     num_check := replace(num_check,'-','');
142     num_check := replace(num_check,'.','');
143 
144     RETURN(num_check);
145 
146 END ce_remove_formats;
147 
148 /* --------------------------------------------------------------------
149 |  PRIVATE PROCEDURE                                                    |
150 |      COMPARE_BANK_AND_BRANCH_NUM                                      |
151 |                                                                       |
152 |  CALLED BY                                                            |
153 |      CE_VALIDATE_BRANCH_*                                             |
154 |                                                                       |
155 |  DESCRIPTION                                                          |
156 |      Verify that the value entered for Bank number and Branch number  |
157 |        fields are the same when both fields are entered for some      |
158 |        countries                                                      |
159  --------------------------------------------------------------------- */
160 PROCEDURE COMPARE_BANK_AND_BRANCH_NUM(
161         Xi_branch_num   IN VARCHAR2,
162         Xi_BANK_ID      IN NUMBER
163 ) AS
164     BANK_NUM    varchar2(60);
165     bank_count  number;
166 BEGIN
167 
168     cep_standard.debug('>>CE_VALIDATE_BANKINFO.compare_bank_and_branch_num');
169 
170 
171     -- Bug 6856840: Added IF clause to handle cases where Bank ID is the Bank Number --
172     IF BANK_ID_IS_NUM = TRUE
173     THEN
174         -- Bank ID is the bank number. No need to fetch from the table --
175         IF ((nvl(Xi_BANK_ID,Xi_BRANCH_NUM) = Xi_BRANCH_NUM))
176         THEN
177             cep_standard.debug('COMPARE_BANK_AND_BRANCH_NUM: ' || ' passed_check');
178         ELSE
179             cep_standard.debug('COMPARE_BANK_AND_BRANCH_NUM: ' ||
180                 'Bank number and branch number does not match'||
181                 'CE_BANK_BRANCH_NUM_NOT_MATCHED');
182             fnd_message.set_name('CE', 'CE_BANK_BRANCH_NUM_NOT_MATCHED');
183             fnd_msg_pub.add;
184         END IF;
185 
186 	ELSE
187 		-- Bank ID is being used. Check if Bank exists and fetch Bank Number --
188         SELECT count(*) INTO bank_count
189         FROM   HZ_PARTIES   PartyBank,
190                HZ_ORGANIZATION_PROFILES   OrgProfileBank,
191                HZ_CODE_ASSIGNMENTS   CABank
192         WHERE
193                PartyBank.party_id = Xi_BANK_ID
194           AND  PartyBank.PARTY_TYPE = 'ORGANIZATION'
195           AND  PartyBank.status = 'A'
196           AND  PartyBank.PARTY_ID = OrgProfileBank.PARTY_ID
197           AND  sysdate BETWEEN trunc(OrgProfileBank.EFFECTIVE_START_DATE)
198                AND nvl(trunc(OrgProfileBank.EFFECTIVE_END_DATE),sysdate)
199           AND  CABank.CLASS_CATEGORY = 'BANK_INSTITUTION_TYPE'
200           AND  CABank.CLASS_CODE = 'BANK'
201           AND  CABank.OWNER_TABLE_NAME = 'HZ_PARTIES'
202           AND  CABank.OWNER_TABLE_ID = PartyBank.PARTY_ID
203           AND  nvl(CABank.status, 'A') = 'A';
204 
205 
206         IF (bank_count = 1)
207         THEN
208             OPEN  get_bank_num(Xi_BANK_ID);
209             FETCH get_bank_num INTO bank_num;
210             CLOSE get_bank_num;
211 
212             IF  (BANK_NUM IS  NULL)
213             THEN
214                 null;
215             ELSIF  (BANK_NUM IS NOT NULL)
216             THEN
217                 BANK_NUM := upper(replace(BANK_NUM,' ',''));
218                 BANK_NUM := upper(replace(BANK_NUM,'-',''));
219 
220                 cep_standard.debug('COMPARE_BANK_AND_BRANCH_NUM: ' || 'BANK_NUM : ' ||BANK_NUM);
221 
222                 IF ((nvl(BANK_NUM,Xi_branch_num) <> Xi_branch_num))
223                 THEN
224                     cep_standard.debug('COMPARE_BANK_AND_BRANCH_NUM: ' ||
225                         'Bank number and branch number does not match'||
226                         'CE_BANK_BRANCH_NUM_NOT_MATCHED');
227                     fnd_message.set_name('CE', 'CE_BANK_BRANCH_NUM_NOT_MATCHED');
228                     fnd_msg_pub.add;
229                 END IF;
230             END IF;
231         ELSIF (bank_count > 1)
232         THEN
233             cep_standard.debug('COMPARE_BANK_AND_BRANCH_NUM: ' ||'EXCEPTION: More than one bank match ');
234             fnd_message.set_name('CE', 'CE_MANY_BANKS');
235             fnd_msg_pub.add;
236 
237         ELSIF (bank_count = 0)
238         THEN
239             cep_standard.debug('COMPARE_BANK_AND_BRANCH_NUM: ' || ' CE_BANK_DOES_NOT_EXISTS');
240             fnd_message.set_name ('CE', 'CE_BANK_DOES_NOT_EXISTS');
241             fnd_msg_pub.add;
242 
243         ELSE
244             cep_standard.debug('COMPARE_BANK_AND_BRANCH_NUM: ' || ' passed_check');
245         END IF;
246 
247         cep_standard.debug('<<CE_VALIDATE_BANKINFO.compare_bank_and_branch_num');
248     END IF; /* end of check for BANK_ID_IS_NUM*/
249 
250 EXCEPTION
251     WHEN OTHERS THEN
252         cep_standard.debug('CE_VALIDATE_BANKINFO.COMPARE_BANK_AND_BRANCH_NUM: Exception ' );
253         FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
254         fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.compare_bank_and_branch_num');
255         fnd_msg_pub.add;
256         RAISE;
257 END COMPARE_BANK_AND_BRANCH_NUM;
258 
259 /* --------------------------------------------------------------------
260 |  PUBLIC PROCEDURE                                                     |
261 |      COMPARE_ACCOUNT_NUM_AND_CD                                       |
262 |                                                                       |
263 |  CALLED BY                                                            |
264 |      CE_VALIDATE_CD_*                                                 |
265 |                                                                       |
266 |  DESCRIPTION                                                          |
267 |      Verify that the check digit entered on the account number        |
268 |      and check digit fields are the same                              |
269  --------------------------------------------------------------------- */
270 FUNCTION COMPARE_ACCOUNT_NUM_AND_CD(
271                     Xi_account_num IN VARCHAR2,
272                     Xi_CD IN NUMBER,
273                     Xi_CD_length in number,
274                     Xi_CD_pos_from_right IN Number default 0) RETURN BOOLEAN AS
275 
276 cd_position number;
277 acct_cd number;
278 
279 BEGIN
280     cep_standard.debug('>>CE_VALIDATE_BANKINFO.COMPARE_ACCOUNT_NUM_AND_CD');
281 
282     cd_position := (length(Xi_account_num) - Xi_CD_pos_from_right);
283     acct_cd := substr(Xi_account_num, cd_position, Xi_CD_length);
284 
285     cep_standard.debug('COMPARE_ACCOUNT_NUM_AND_CD: ' || 'cd_position : '||cd_position ||
286                        'acct_cd : '||acct_cd || 'Xi_CD : '||Xi_CD );
287 
288     IF (acct_cd  <> Xi_CD) THEN
289         cep_standard.debug('COMPARE_ACCOUNT_NUM_AND_CD: ' || 'CD does not match'||
290                            'CE_ACCT_NUM_AND_CD_NOT_MATCHED');
291 
292         fnd_message.set_name('CE', 'CE_ACCT_NUM_AND_CD_NOT_MATCHED');
293         fnd_msg_pub.add;
294         RETURN FALSE;
295     ELSE
296         cep_standard.debug('COMPARE_ACCOUNT_NUM_AND_CD: ' || 'CD match');
297         RETURN TRUE;
298     END IF;
299 
300     cep_standard.debug('<<CE_VALIDATE_BANKINFO.COMPARE_ACCOUNT_NUM_AND_CD');
301 
302 END COMPARE_ACCOUNT_NUM_AND_CD;
303 
304 /* --------------------------------------------------------------------
305 |  PUBLIC FUNCTION                                                      |
306 |      CE_VAL_UNIQUE_TAX_PAYER_ID                                       |
307 |                                                                       |
308 |  CALLED BY                                                            |
309 |      CE_VALIDATE_BANK                                                 |
310 |                                                                       |
311 |  DESCRIPTION                                                          |
312 |      Unique Tax Payer ID  VALIDATIONS                                 |
313 |                                                                       |
314  --------------------------------------------------------------------- */
315 -- Bug 10171134
316 FUNCTION CE_VAL_UNIQUE_TAX_PAYER_ID (
317             p_country_code    IN  VARCHAR2,
318             p_taxpayer_id     IN  VARCHAR2,
319             p_bank_id         IN varchar2
320 ) RETURN VARCHAR2 IS
321 
322     CURSOR CHECK_UNIQUE_TAXID_BK IS       -- Banks 8614674 changed the select
323         SELECT TAX_PAYER_ID
324         FROM   CE_BANKS_V
325         WHERE  tax_payer_id = p_taxpayer_id
326         AND home_country     = p_country_code
327 	 AND bank_party_id <> nvl(p_bank_id,-1) ;
328 
329     l_taxid        VARCHAR2(30);
330 
331 BEGIN
332     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VAL_UNIQUE_TAX_PAYER_ID');
333 
334     OPEN CHECK_UNIQUE_TAXID_BK;
335     FETCH CHECK_UNIQUE_TAXID_BK INTO l_taxid;
336 
337     IF (CHECK_UNIQUE_TAXID_BK%NOTFOUND)
338     THEN
339         CLOSE CHECK_UNIQUE_TAXID_BK;
340         RETURN('TRUE');
341         cep_standard.debug('CE_VAL_UNIQUE_TAX_PAYER_ID true');
342     ELSE
343         CLOSE CHECK_UNIQUE_TAXID_BK;
344         RETURN('FALSE');
345         cep_standard.debug('CE_VAL_UNIQUE_TAX_PAYER_ID false');
346     END IF;
347 
348     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VAL_UNIQUE_TAX_PAYER_ID');
349 
350 END CE_VAL_UNIQUE_TAX_PAYER_ID;
351 
352 /* --------------------------------------------------------------------
353 |  PUBLIC PROCEDURE                                                     |
354 |      CE_CHECK_CROSS_MODULE_TAX_ID                                     |
355 |                                                                       |
356 |  CALLED BY                                                            |
357 |      CE_VALIDATE_BANK                                                 |
358 |                                                                       |
359 |  DESCRIPTION                                                          |
360 |      Unique Tax Payer ID  VALIDATIONS                                 |
361 |                                                                       |
362  --------------------------------------------------------------------- */
363   -- Check the cross validation
364   -- This procedure  checks in AR, AP and HR to see if the TAX ID entered
365   --   for the Bank is used  by a Customer, Supplier or a Company.
366   -- If it is used THEN the Customer name, Supplier name or the Company
367   --   name should match with the Bank name.
368   -- Depending upon the different combinations different error codes are
369   -- returned
370   -- The messages codes returned are:
371   --   bk1  Tax ID is used by a different Company
372   --   bk2  Tax ID is used by a different Customer
373   --   bk3  Tax ID is used by a different Supplier
374   --   bk4  Bank exists as a Customer with different Tax ID or Tax ID Type
375   --   bk5  Bank exists as a Supplier with different Tax ID or Tax ID Type
376   --   bk6  Bank exists as a Company with different Tax ID or Tax ID Type
377 
378 PROCEDURE ce_check_cross_module_tax_id(
379                                p_country_code     IN  VARCHAR2,
380                                p_entity_name      IN  VARCHAR2, --l_bank_name
381                                p_taxpayer_id      IN  VARCHAR2,
382                                p_return_ar        OUT NOCOPY VARCHAR2,
383                                p_return_ap        OUT NOCOPY VARCHAR2,
384                                p_return_hr        OUT NOCOPY VARCHAR2,
385                                p_return_bk        OUT NOCOPY VARCHAR2) IS
386 
387   -- Suppliers
388   CURSOR CHECK_CROSS_AP IS
389     SELECT AP.VENDOR_NAME, AP.NUM_1099
390     FROM   PO_VENDORS AP
391     WHERE  (AP.VENDOR_NAME=p_entity_name OR  AP.NUM_1099= p_taxpayer_id)
392       AND  substrb(nvl(AP.GLOBAL_ATTRIBUTE_CATEGORY,'XX.XX'),4,2) = p_country_code;
393 
394   -- Customers
395   -- replaced ra_customers with hz_parties
396   CURSOR CHECK_CROSS_AR IS
397     SELECT AR.PARTY_NAME, AR.JGZZ_FISCAL_CODE
398     FROM   HZ_PARTIES  AR
399     WHERE  (AR.PARTY_NAME=p_entity_name OR  AR.JGZZ_FISCAL_CODE= p_taxpayer_id)
400       AND  substrb(nvl(AR.GLOBAL_ATTRIBUTE_CATEGORY,'XX.XX'),4,2) = p_country_code;
401 
402   -- Companies
403   CURSOR CHECK_CROSS_HR IS
404     SELECT HR.GLOBAL_ATTRIBUTE8, HR.GLOBAL_ATTRIBUTE11
405     FROM   HR_LOCATIONS HR
406     WHERE  (HR.GLOBAL_ATTRIBUTE8= p_entity_name
407        OR  HR.GLOBAL_ATTRIBUTE11= p_taxpayer_id)
408       AND  substrb(nvl(HR.GLOBAL_ATTRIBUTE_CATEGORY,'XX.XX'),4,2) = p_country_code
409       AND  HR.LOCATION_USE = 'HR';
410 
411   l_taxid       VARCHAR2(30);
412   l_taxid_type  VARCHAR2(150);
413   l_entity_name VARCHAR2(80);
414 
415 BEGIN
416     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_check_cross_module_tax_id'||
417             'ce_check_cross_module_tax_id - p_taxpayer_id ' || p_taxpayer_id);
418 
419     -- Checking cross module Banks/Customers
420     OPEN CHECK_CROSS_AR;
421     FETCH CHECK_CROSS_AR INTO l_entity_name, l_taxid;
422 
423     cep_standard.debug('ce_check_cross_module_tax_id - l_entity_name ' ||l_entity_name ||
424             'l_taxid ' ||l_taxid );
425 
426     IF CHECK_CROSS_AR%NOTFOUND THEN
427         p_return_ar:='SUCCESS';
428     ELSIF (l_taxid IS NULL  AND l_entity_name=p_entity_name) THEN
429         p_return_ar:='SUCCESS';
430     ELSIF (l_taxid IS NOT NULL) THEN
431         IF (l_entity_name=p_entity_name AND l_taxid=p_taxpayer_id  ) THEN
432             p_return_ar:='SUCCESS';
433         -- Check if Tax ID is used by a different Customer
434         ELSIF (l_entity_name<>p_entity_name AND l_taxid=p_taxpayer_id) THEN
435             p_return_ar:='bk2';
436         -- Check if Bank exists as Customer with different TAX ID or Tax ID
437         -- Type
438         ELSIF (l_entity_name=p_entity_name AND (l_taxid<>p_taxpayer_id )) THEN
439             p_return_ar:='bk4';
440         END IF;
441     END IF;
442 
443     cep_standard.debug('ce_check_cross_module_tax_id - p_return_ar ' || p_return_ar );
444 
445     CLOSE CHECK_CROSS_AR;
446 
447     -- Checking cross module Banks/Companies
448     IF p_country_code='CO' THEN
449         l_taxid_type:='LEGAL_ENTITY';
450     END IF;
451 
452     OPEN CHECK_CROSS_HR;
453     FETCH CHECK_CROSS_HR INTO l_entity_name, l_taxid;
454 
455     IF CHECK_CROSS_HR%NOTFOUND THEN
456         p_return_hr:='SUCCESS';
457     ELSIF (l_taxid IS NULL  AND l_entity_name=p_entity_name) THEN
458         p_return_hr:='SUCCESS';
459     ELSIF (l_taxid IS NOT NULL) THEN
460         IF (l_entity_name=p_entity_name AND l_taxid=p_taxpayer_id ) THEN
461             p_return_hr:='SUCCESS';
462         -- Check if Tax ID is used by a different Company
463         ELSIF (l_entity_name<>p_entity_name AND l_taxid=p_taxpayer_id) THEN
464             p_return_hr:='bk1';
465         -- Check if Bank exists as Company with different Tax ID
466         ELSIF (l_entity_name=p_entity_name AND (l_taxid<>p_taxpayer_id)) THEN
467             p_return_hr:='bk6';
468         END IF;
469     END IF;
470     cep_standard.debug('ce_check_cross_module_tax_id - p_return_hr ' || p_return_hr );
471     CLOSE CHECK_CROSS_HR;
472 
473     -- Checking cross module Banks/Suppliers
474     OPEN CHECK_CROSS_AP;
475     FETCH CHECK_CROSS_AP INTO l_entity_name, l_taxid;
476 
477     IF CHECK_CROSS_AP%NOTFOUND THEN
478         p_return_ap:='SUCCESS';
479     ELSIF (l_taxid IS NULL  AND l_entity_name=p_entity_name) THEN
480         p_return_ap:='SUCCESS';
481     ELSIF (l_taxid IS NOT NULL) THEN
482         IF (l_entity_name=p_entity_name AND l_taxid=p_taxpayer_id) THEN
483             p_return_ap:='SUCCESS';
484         -- Check if Tax ID is used by a different Supplier
485         ELSIF (l_entity_name<>p_entity_name AND l_taxid=p_taxpayer_id) THEN
486             p_return_ap:='bk3';
487         -- Check if Bank exists as Supplier with different Tax ID
488         ELSIF (l_entity_name=p_entity_name AND (l_taxid<>p_taxpayer_id )) THEN
489             p_return_ap:='bk5';
490         END IF;
491     END IF;
492     cep_standard.debug('ce_check_cross_module_tax_id - p_return_ap ' || p_return_ap );
493     CLOSE CHECK_CROSS_AP;
494 
495     p_return_bk:='NA';
496 
497     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_check_cross_module_tax_id');
498 
499 END ce_check_cross_module_tax_id;
500 
501 /* --------------------------------------------------------------------
502 |  PUBLIC FUNCTION                                                     |
503 |      CE_TAX_ID_CHECK_ALGORITHM                                        |
504 |                                                                       |
505 |  CALLED BY                                                            |
506 |      CE_VALIDATE_BANK                                                 |
507 |                                                                       |
508 |  DESCRIPTION                                                          |
509 |      Unique Tax Payer ID  VALIDATIONS                                 |
510 |                                                                       |
511  --------------------------------------------------------------------- */
512   -- Taxpayer ID Validation
513 FUNCTION ce_tax_id_check_algorithm(
514     p_taxpayer_id  IN VARCHAR2,
515     p_country   IN VARCHAR2,
516     p_tax_id_cd IN VARCHAR2
517 ) RETURN VARCHAR2 IS
518 
519     l_var1      VARCHAR2(20);
520     l_val_digit VARCHAR2(2);
521     l_mod_value NUMBER(2);
522 BEGIN
523     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_TAX_ID_CHECK_ALGORITHM'|| '----------' ||
524         'CE_VALIDATE_BANKINFO.CE_TAX_ID_CHECK_ALGORITHM ' ||p_COUNTRY );
525 
526     -- Check the Taxpayer ID Valdiation digit for Colombia
527     IF p_country='CO' THEN
528         l_var1:=LPAD(p_taxpayer_id,15,'0');
529         l_mod_value:=(MOD(((TO_NUMBER(SUBSTR(l_var1,15,1))) *3  +
530                            (TO_NUMBER(SUBSTR(l_var1,14,1))) *7  +
531                            (TO_NUMBER(SUBSTR(l_var1,13,1))) *13 +
532                            (TO_NUMBER(SUBSTR(l_var1,12,1))) *17 +
533                            (TO_NUMBER(SUBSTR(l_var1,11,1))) *19 +
534                            (TO_NUMBER(SUBSTR(l_var1,10,1))) *23 +
535                            (TO_NUMBER(SUBSTR(l_var1,9,1)))  *29 +
536                            (TO_NUMBER(SUBSTR(l_var1,8,1)))  *37 +
537                            (TO_NUMBER(SUBSTR(l_var1,7,1)))  *41 +
538                            (TO_NUMBER(SUBSTR(l_var1,6,1)))  *43 +
539                            (TO_NUMBER(SUBSTR(l_var1,5,1)))  *47 +
540                            (TO_NUMBER(SUBSTR(l_var1,4,1)))  *53 +
541                            (TO_NUMBER(SUBSTR(l_var1,3,1)))  *59 +
542                            (TO_NUMBER(SUBSTR(l_var1,2,1)))  *67 +
543                            (TO_NUMBER(SUBSTR(l_var1,1,1)))  *71),11));
544 
545         cep_standard.debug('CE_VALIDATE_BANKINFO.ce_tax_id_check_algorithm - l_mod_value: '|| l_mod_value);
546 
547         IF (l_mod_value IN (1,0)) THEN
548             l_val_digit:=l_mod_value;
549         ELSE
550             l_val_digit:=11-l_mod_value;
551         END IF;
552 
553         cep_standard.debug('CE_VALIDATE_BANKINFO.ce_tax_id_check_algorithm - l_val_digit: '|| l_val_digit|| '----------' ||
554             'CE_VALIDATE_BANKINFO.ce_tax_id_check_algorithm - p_tax_id_cd : '|| p_tax_id_cd );
555 
556         IF l_val_digit<> p_tax_id_cd THEN
557             cep_standard.debug('failed ce_tax_id_check_algorithm' );
558             RETURN('FALSE');
559         ELSE
560             cep_standard.debug('passed ce_tax_id_check_algorithm' );
561             RETURN('TRUE');
562         END IF;
563     END IF;
564 
565     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_TAX_ID_CHECK_ALGORITHM');
566 END ce_tax_id_check_algorithm;
567 
568 
569 /* --------------------------------------------------------------------
570 |  PUBLIC PROCEDURE                                                     |
571 |      CE_UNIQUE_BRANCH_NAME                                            |
572 |                                                                       |
573 |  DESCRIPTION                                                          |
574 |      Unique bank_id, branch_name  VALIDATIONS                         |
575 |                                                                       |
576 |  CALLED BY                                                            |
577 |
578  --------------------------------------------------------------------- */
579 PROCEDURE CE_UNIQUE_BRANCH_NAME(
580     Xi_COUNTRY_NAME    IN varchar2,
581     Xi_BRANCH_NAME  IN varchar2,
582     Xi_BANK_ID IN varchar2,
583     Xi_BRANCH_ID IN varchar2) AS
584 
585     temp_name number;
586 
587 BEGIN
588     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_UNIQUE_BRANCH_NAME');
589 
590     -- unique combination -> bank_id, branch_name, country --confirmed sql 6/25/02
591     SELECT COUNT(*) INTO temp_name
592     FROM   HZ_PARTIES              BankParty,
593            HZ_PARTIES              BranchParty,
594            HZ_ORGANIZATION_PROFILES        BankOrgProfile,
595            HZ_ORGANIZATION_PROFILES        BranchOrgProfile,
596            HZ_RELATIONSHIPS            BRRel,
597            HZ_CODE_ASSIGNMENTS         BankCA,
598            HZ_CODE_ASSIGNMENTS         BranchCA
599     WHERE  BankParty.PARTY_TYPE = 'ORGANIZATION'
600     AND    BankParty.status = 'A'
601     AND    BankParty.PARTY_ID = BankOrgProfile.PARTY_ID
602     AND    SYSDATE between TRUNC(BankOrgProfile.effective_start_date)
603            and NVL(TRUNC(BankOrgProfile.effective_end_date), SYSDATE+1)
604     AND    BankCA.CLASS_CATEGORY = 'BANK_INSTITUTION_TYPE'
605     AND    BankCA.CLASS_CODE = 'BANK'
606     AND    BankCA.OWNER_TABLE_NAME = 'HZ_PARTIES'
607     AND    BankCA.OWNER_TABLE_ID = BankParty.PARTY_ID
608     AND    NVL(BankCA.STATUS, 'A') = 'A'
609     AND    BranchParty.PARTY_TYPE(+) = 'ORGANIZATION'
610     AND    BranchParty.status(+) = 'A'
611     AND    BranchOrgProfile.PARTY_ID(+) = BranchParty.PARTY_ID
612     AND    SYSDATE BETWEEN TRUNC(BranchOrgProfile.effective_start_date(+))
613            AND NVL(TRUNC(BranchOrgProfile.effective_end_date(+)), SYSDATE+1)
614     AND    BranchCA.CLASS_CATEGORY(+) = 'BANK_INSTITUTION_TYPE'
615     AND    BranchCA.CLASS_CODE(+) = 'BANK_BRANCH'
616     AND    BranchCA.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
617     AND    BranchCA.OWNER_TABLE_ID(+) = BranchParty.PARTY_ID
618     AND    NVL(BranchCA.STATUS(+), 'A') = 'A'
619     AND    BRRel.OBJECT_ID(+) = BankParty.PARTY_ID
620     AND    BranchParty.PARTY_ID(+) = BRRel.SUBJECT_ID
621     AND    BRRel.RELATIONSHIP_TYPE(+) = 'BANK_AND_BRANCH'
622     AND    BRRel.RELATIONSHIP_CODE(+) = 'BRANCH_OF'
623     AND    BRRel.STATUS(+) = 'A'
624     AND    BRRel.SUBJECT_TABLE_NAME(+) = 'HZ_PARTIES'
625     AND    BRRel.SUBJECT_TYPE(+) =  'ORGANIZATION'
626     AND    BRRel.OBJECT_TABLE_NAME(+) = 'HZ_PARTIES'
627     AND    BRRel.OBJECT_TYPE(+) = 'ORGANIZATION'
628     AND    BankParty.PARTY_ID     =  Xi_BANK_ID
629     AND    BranchParty.party_name =  Xi_BRANCH_NAME
630     /* Bug 13641238: country is stored in OrgProfile
631 	AND    BranchParty.country    =  Xi_COUNTRY_NAME */
632 	AND    BranchOrgProfile.home_country =  Xi_COUNTRY_NAME
633     AND    BranchParty.PARTY_ID  <>  nvl(Xi_BRANCH_ID, -1);
634 
635     cep_standard.debug('CE_UNIQUE_BRANCH_NAME - temp_name: ' ||temp_name);
636 
637     IF (nvl(temp_name,0) > 0) THEN
638         cep_standard.debug('CE_UNIQUE_BRANCH_NAME: ' || 'CE_BANK_BRANCH_NAME_EXISTS');
639         fnd_message.set_name('CE', 'CE_BANK_BRANCH_NAME_EXISTS');
640         fnd_msg_pub.add;
641     END IF;
642 
643     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_UNIQUE_BRANCH_NAME');
644 
645 END CE_UNIQUE_BRANCH_NAME;
646 
647 /* --------------------------------------------------------------------
648 |  PRIVATE PROCEDURE                                                    |
649 |      CE_UNIQUE_BRANCH_NUMBER                                          |
650 |                                                                       |
651 |  DESCRIPTION                                                          |
652 |      Unique bank_id, branch_number  VALIDATIONS                       |
653 |
654 |  CALLED BY                                                            |
655 |
656  --------------------------------------------------------------------- */
657 PROCEDURE CE_UNIQUE_BRANCH_NUMBER(
658     Xi_COUNTRY_NAME    IN varchar2,
659     Xi_BRANCH_NUMBER  IN varchar2,
660     Xi_BANK_ID IN varchar2,
661     Xi_BRANCH_ID IN varchar2) AS
662 
663     temp_number number;
664 BEGIN
665     cep_standard.debug('CE_UNIQUE_BRANCH_NAME: ' || '>>CE_VALIDATE_BANKINFO.CE_UNIQUE_BRANCH_NUMBER');
666 
667     -- unique combination -> bank_id, branch_number, country --confirmed sql 6/25/02
668 
669     SELECT  COUNT(*) INTO temp_number
670     FROM    HZ_PARTIES              BankParty,
671             HZ_PARTIES              BranchParty,
672             HZ_ORGANIZATION_PROFILES        BankOrgProfile,
673             HZ_ORGANIZATION_PROFILES        BranchOrgProfile,
674             HZ_RELATIONSHIPS            BRRel,
675             HZ_CODE_ASSIGNMENTS         BankCA,
676             HZ_CODE_ASSIGNMENTS         BranchCA
677     WHERE   BankParty.PARTY_TYPE = 'ORGANIZATION'
678     AND     BankParty.status = 'A'
679     AND     BankParty.PARTY_ID = BankOrgProfile.PARTY_ID
680     AND     SYSDATE between TRUNC(BankOrgProfile.effective_start_date)
681             and NVL(TRUNC(BankOrgProfile.effective_end_date), SYSDATE+1)
682     AND     BankCA.CLASS_CATEGORY = 'BANK_INSTITUTION_TYPE'
683     AND     BankCA.CLASS_CODE = 'BANK'
684     AND     BankCA.OWNER_TABLE_NAME = 'HZ_PARTIES'
685     AND     BankCA.OWNER_TABLE_ID = BankParty.PARTY_ID
686     AND     NVL(BankCA.STATUS, 'A') = 'A'
687     AND     BranchParty.PARTY_TYPE(+) = 'ORGANIZATION'
688     AND     BranchParty.status(+) = 'A'
689     AND     BranchOrgProfile.PARTY_ID(+) = BranchParty.PARTY_ID
690     AND     SYSDATE between TRUNC(BranchOrgProfile.effective_start_date(+))
691             and NVL(TRUNC(BranchOrgProfile.effective_end_date(+)), SYSDATE+1)
692     AND     BranchCA.CLASS_CATEGORY(+) = 'BANK_INSTITUTION_TYPE'
693     AND     BranchCA.CLASS_CODE(+) = 'BANK_BRANCH'
694     AND     BranchCA.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
695     AND     BranchCA.OWNER_TABLE_ID(+) = BranchParty.PARTY_ID
696     AND     NVL(BranchCA.STATUS(+), 'A') = 'A'
697     AND     BRRel.OBJECT_ID(+) = BankParty.PARTY_ID
698     AND     BranchParty.PARTY_ID(+) = BRRel.SUBJECT_ID
699     AND     BRRel.RELATIONSHIP_TYPE(+) = 'BANK_AND_BRANCH'
700     AND     BRRel.RELATIONSHIP_CODE(+) = 'BRANCH_OF'
701     AND     BRRel.STATUS(+) = 'A'
702     AND     BRRel.SUBJECT_TABLE_NAME(+) = 'HZ_PARTIES'
703     AND     BRRel.SUBJECT_TYPE(+) =  'ORGANIZATION'
704     AND     BRRel.OBJECT_TABLE_NAME(+) = 'HZ_PARTIES'
705     AND     BRRel.OBJECT_TYPE(+) = 'ORGANIZATION'
706     AND     BankParty.PARTY_ID     =  Xi_BANK_ID
707     AND     BranchOrgProfile.BANK_OR_BRANCH_NUMBER  = Xi_BRANCH_NUMBER
708     /* Bug 13641238: country is stored in OrgProfile
709 	AND    BranchParty.country    =  Xi_COUNTRY_NAME */
710 	AND    BranchOrgProfile.home_country =  Xi_COUNTRY_NAME
711     AND     BranchParty.PARTY_ID  <>  nvl(Xi_BRANCH_ID, -1);
712 
713     cep_standard.debug('CE_UNIQUE_BRANCH_NAME: ' || 'CE_UNIQUE_BRANCH_NUMBER - temp_number: ' ||temp_number);
714 
715     IF (nvl(temp_number,0) > 0) THEN
716         cep_standard.debug('CE_UNIQUE_BRANCH_NAME: ' || 'CE_BANK_BRANCH_NUMBER_EXISTS');
717         fnd_message.set_name('CE', 'CE_BANK_BRANCH_NUMBER_EXISTS');
718         fnd_msg_pub.add;
719     END IF;
720 
721     cep_standard.debug('CE_UNIQUE_BRANCH_NAME: ' || '<<CE_VALIDATE_BANKINFO.CE_UNIQUE_BRANCH_NUMBER');
722 END CE_UNIQUE_BRANCH_NUMBER;
723 
724 /* --------------------------------------------------------------------
725 |  PRIVATE PROCEDURE                                                    |
726 |      CE_UNIQUE_BRANCH_NAME_ALT                                        |
727 |                                                                       |
728 |  DESCRIPTION                                                          |
729 |      Unique bank_id, branch_number_alt  VALIDATIONS                   |
730 |                                                                       |
731 |  CALLED BY                                                            |
732 |     Japan                                                             |
733  --------------------------------------------------------------------- */
734 PROCEDURE CE_UNIQUE_BRANCH_NAME_ALT(
735         Xi_COUNTRY_NAME    IN varchar2,
736         Xi_BRANCH_NAME_ALT  IN varchar2,
737         Xi_BANK_ID IN varchar2,
738         Xi_BRANCH_ID IN varchar2) AS
739     temp_name_alt number;
740 BEGIN
741     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_UNIQUE_BRANCH_NAME_ALT');
742     -- unique combination -> bank_id,  branch_name_alt, country  bug 2363959
743     -- confirmed sql 6/25/02
744 
745     SELECT  COUNT(*) INTO temp_name_alt
746     FROM    HZ_PARTIES              BankParty,
747             HZ_PARTIES              BranchParty,
748             HZ_ORGANIZATION_PROFILES        BankOrgProfile,
749             HZ_ORGANIZATION_PROFILES        BranchOrgProfile,
750             HZ_RELATIONSHIPS            BRRel,
751             HZ_CODE_ASSIGNMENTS         BankCA,
752             HZ_CODE_ASSIGNMENTS         BranchCA
753     WHERE   BankParty.PARTY_TYPE = 'ORGANIZATION'
754     AND     BankParty.status = 'A'
755     AND     BankParty.PARTY_ID = BankOrgProfile.PARTY_ID
756     AND     SYSDATE between TRUNC(BankOrgProfile.effective_start_date)
757             and NVL(TRUNC(BankOrgProfile.effective_end_date), SYSDATE+1)
758     AND     BankCA.CLASS_CATEGORY = 'BANK_INSTITUTION_TYPE'
759     AND     BankCA.CLASS_CODE = 'BANK'
760     AND     BankCA.OWNER_TABLE_NAME = 'HZ_PARTIES'
761     AND     BankCA.OWNER_TABLE_ID = BankParty.PARTY_ID
762     AND     NVL(BankCA.STATUS, 'A') = 'A'
763     AND     BranchParty.PARTY_TYPE(+) = 'ORGANIZATION'
764     AND     BranchParty.status(+) = 'A'
765     AND     BranchOrgProfile.PARTY_ID(+) = BranchParty.PARTY_ID
766     AND     SYSDATE between TRUNC(BranchOrgProfile.effective_start_date(+))
767             and NVL(TRUNC(BranchOrgProfile.effective_end_date(+)), SYSDATE+1)
768     AND     BranchCA.CLASS_CATEGORY(+) = 'BANK_INSTITUTION_TYPE'
769     AND     BranchCA.CLASS_CODE(+) = 'BANK_BRANCH'
770     AND     BranchCA.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
771     AND     BranchCA.OWNER_TABLE_ID(+) = BranchParty.PARTY_ID
772     AND     NVL(BranchCA.STATUS(+), 'A') = 'A'
773     AND     BRRel.OBJECT_ID(+) = BankParty.PARTY_ID
774     AND     BranchParty.PARTY_ID(+) = BRRel.SUBJECT_ID
775     AND     BRRel.RELATIONSHIP_TYPE(+) = 'BANK_AND_BRANCH'
776     AND     BRRel.RELATIONSHIP_CODE(+) = 'BRANCH_OF'
777     AND     BRRel.STATUS(+) = 'A'
778     AND     BRRel.SUBJECT_TABLE_NAME(+) = 'HZ_PARTIES'
779     AND     BRRel.SUBJECT_TYPE(+) =  'ORGANIZATION'
780     AND     BRRel.OBJECT_TABLE_NAME(+) = 'HZ_PARTIES'
781     AND     BRRel.OBJECT_TYPE(+) = 'ORGANIZATION'
782     AND     BankParty.PARTY_ID     =  Xi_BANK_ID
783     AND     BranchParty.ORGANIZATION_NAME_PHONETIC =  Xi_BRANCH_NAME_ALT
784     AND     BranchOrgProfile.home_country    =  Xi_COUNTRY_NAME -- bug 8552410 Changed BranchParty to BranchOrgProfile
785     AND     BranchParty.PARTY_ID  <>  nvl(Xi_BRANCH_ID, -1);
786 
787     cep_standard.debug('CE_UNIQUE_BRANCH_NAME_ALT - temp_name_alt: ' ||temp_name_alt);
788 
789     IF (nvl(temp_name_alt,0) > 0) THEN
790         cep_standard.debug('CE_UNIQUE_BRANCH_NAME: ' || 'CE_BANK_BRANCH_NAME_ALT_EXISTS');
791         fnd_message.set_name('CE', 'CE_BANK_BRANCH_NAME_ALT_EXISTS');
792         fnd_msg_pub.add;
793     END IF;
794 
795     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_UNIQUE_BRANCH_NAME_ALT');
796 END CE_UNIQUE_BRANCH_NAME_ALT;
797 
798 
799 /* --------------------------------------------------------------------
800 |  PRIVATE PROCEDURE                                                    |
801 |      CE_UNIQUE_ACCOUNT_NAME                                           |
802 |                                                                       |
803 |  DESCRIPTION                                                          |
804 |      Unique bank_branch_id, bank account name VALIDATIONS             |
805 |                                                                       |
806 |  CALLED BY                                                            |
807 |      CE_VALIDATE_UNIQUE_ACCOUNT_*                                     |
808 |                                                                       |
809 |  CALLS                                                                |
810 |
811  --------------------------------------------------------------------- */
812 PROCEDURE CE_UNIQUE_ACCOUNT_NAME(
813     Xi_ACCOUNT_NAME  IN varchar2,
814     Xi_BRANCH_ID IN varchar2,
815     Xi_ACCOUNT_ID IN varchar2) AS
816 
817     temp_name  number;
818 BEGIN
819     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_UNIQUE_ACCOUNT_NAME'||
820         'Xi_ACCOUNT_NAME ' ||Xi_ACCOUNT_NAME ||
821         ', Xi_BRANCH_ID ' ||Xi_BRANCH_ID );
822 
823     -- unique combination -> bank_branch_id, bank account name --confirmed sql
824     SELECT  COUNT(*) INTO temp_name
825     FROM    ce_bank_accounts ba
826     WHERE   ba.bank_account_name  = Xi_ACCOUNT_NAME
827     AND     ba.bank_branch_id      = Xi_BRANCH_ID
828     AND     ba.bank_account_id    <> nvl(Xi_ACCOUNT_ID,-1);
829 
830     cep_standard.debug('CE_UNIQUE_ACCOUNT_NAME: ' || 'temp_name: '||temp_name);
831 
832     IF (nvl(temp_name,0) > 0) THEN
833         fnd_message.set_name('CE', 'CE_BANK_ACCOUNT_NAME_EXISTS');
834         fnd_msg_pub.add;
835         cep_standard.debug('CE_UNIQUE_ACCOUNT_NAME: ' || 'CE_BANK_ACCOUNT_NAME_EXISTS');
836     END IF;
837 
838     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_UNIQUE_ACCOUNT_NAME');
839 
840 END CE_UNIQUE_ACCOUNT_NAME;
841 
842 
843 /* --------------------------------------------------------------------
844 |  PUBLIC PROCEDURE                                                     |
845 |      CE_VALIDATE_CD                                                   |
846 |                                                                       |
847 |  CALLED BY                                                            |
848 |      OA - BANK ACCOUNT INFORMATION PAGE                               |
849 |                                                                       |
850 |  CALLS                                                                |
851 |      CE_VALIDATE_CD_*           for each country                      |
852  --------------------------------------------------------------------- */
853 PROCEDURE CE_VALIDATE_CD(
854     X_COUNTRY_NAME   IN varchar2,
855     X_CD             IN varchar2,
856     X_BANK_NUMBER    IN varchar2,
857     X_BRANCH_NUMBER  IN varchar2,
858     X_ACCOUNT_NUMBER IN varchar2,
859     p_init_msg_list  IN VARCHAR2,
860     x_msg_count      OUT NOCOPY NUMBER,
861     x_msg_data       OUT NOCOPY VARCHAR2,
862     x_return_status  IN OUT NOCOPY VARCHAR2,
863     X_ACCOUNT_CLASSIFICATION IN VARCHAR2 DEFAULT NULL
864 ) AS
865     COUNTRY_NAME       VARCHAR2(2);
866     X_PASS_MAND_CHECK  VARCHAR2(1);
867     x_init_count       NUMBER;  --bug 7460921: added
868 BEGIN
869     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_cd');
870 
871     -- initialize API return status to success.
872     x_return_status := fnd_api.g_ret_sts_success;
873     COUNTRY_NAME  := X_COUNTRY_NAME;
874 
875     cep_standard.debug('CE_VALIDATE_BANKINFO.ce_validate_cd - COUNTRY_NAME: '|| COUNTRY_NAME||
876         'CE_VALIDATE_BANKINFO.ce_validate_cd - P_INIT_MSG_LIST: '|| P_INIT_MSG_LIST);
877 
878     -- Initialize message list if p_init_msg_list is set to TRUE.
879     IF FND_API.to_Boolean(p_init_msg_list) THEN
880         x_init_count := 0;
881         FND_MSG_PUB.initialize;
882     ELSE
883         -- bug 7460921 Capturing the message stack count into the variable x_init_count
884         FND_MSG_PUB.Count_And_Get(
885                 p_encoded => FND_API.G_FALSE,
886                 p_count => x_init_count,
887                 p_data  => x_msg_data);
888     END IF;
889 
890     /* We must validate the Check Digit
891        Bug 6632733 Making check digit validation optional so assigning P instead of earlier F */
892     IF X_CD is null AND
893       (X_BANK_NUMBER is not null OR X_BRANCH_NUMBER is not null OR X_ACCOUNT_NUMBER is not null)
894     THEN
895         X_PASS_MAND_CHECK := 'P';
896     ELSIF X_CD is not null THEN
897         X_PASS_MAND_CHECK := 'P';
898     ELSE
899         X_PASS_MAND_CHECK := ' ';
900     END IF;
901 
902     cep_standard.debug('CE_VALIDATE_BANKINFO.ce_validate_cd - X_PASS_MAND_CHECK: '|| X_PASS_MAND_CHECK);
903 
904     IF X_CD IS NOT NULL THEN -- Bug 6632733 Perform all the validations only if check digit is entered
905 
906         IF (COUNTRY_NAME = 'FR') THEN
907             CE_VALIDATE_BANKINFO.CE_VALIDATE_CD_FR(
908                 X_CD,
909                 X_PASS_MAND_CHECK,
910                 X_BANK_NUMBER,
911                 X_BRANCH_NUMBER,
912                 translate(X_ACCOUNT_NUMBER,'ABCDEFGHIJKLMNOPQRSTUVWXYZ ','123456789123456789234567890'));
913 
914         ELSIF (COUNTRY_NAME = 'ES') THEN
915             CE_VALIDATE_BANKINFO.CE_VALIDATE_CD_ES(X_CD,
916                 X_PASS_MAND_CHECK,
917                 X_BANK_NUMBER,
918                 X_BRANCH_NUMBER,
919                 translate(X_ACCOUNT_NUMBER,'ABCDEFGHIJKLMNOPQRSTUVWXYZ ','123456789123456789234567890'));
920 
921         ELSIF (COUNTRY_NAME = 'PT') THEN
922             CE_VALIDATE_BANKINFO.CE_VALIDATE_CD_PT(X_CD,
923                 X_PASS_MAND_CHECK,
924                 X_BANK_NUMBER,
925                 X_BRANCH_NUMBER,
926                 translate(X_ACCOUNT_NUMBER,'ABCDEFGHIJKLMNOPQRSTUVWXYZ ','123456789123456789234567890'));
927             -- added 5/14/02
928 
929         ELSIF (COUNTRY_NAME = 'DE') THEN
930             CE_VALIDATE_BANKINFO.CE_VALIDATE_CD_DE(X_CD,
931                 X_ACCOUNT_NUMBER);
932 
933         ELSIF (COUNTRY_NAME = 'GR') THEN
934             CE_VALIDATE_BANKINFO.CE_VALIDATE_CD_GR(X_CD,
935                 X_PASS_MAND_CHECK,
936                 X_BANK_NUMBER,
937                 X_BRANCH_NUMBER,
938                 translate(X_ACCOUNT_NUMBER,'ABCDEFGHIJKLMNOPQRSTUVWXYZ ','123456789123456789234567890'));
939 
940         ELSIF (COUNTRY_NAME = 'IS') THEN
941             CE_VALIDATE_BANKINFO.CE_VALIDATE_CD_IS(X_CD,
942                 translate(X_ACCOUNT_NUMBER,'ABCDEFGHIJKLMNOPQRSTUVWXYZ ','123456789123456789234567890'));
943 
944         ELSIF (COUNTRY_NAME = 'IT') THEN
945             CE_VALIDATE_BANKINFO.CE_VALIDATE_CD_IT(X_CD,
946                 X_PASS_MAND_CHECK,
947                 X_BANK_NUMBER,
948                 X_BRANCH_NUMBER,
949                 -- Bug 6836343: Removed translate command as the substitution is done in
950                 -- the procedure itself. Passing X_ACCOUNT_NUMBER directly
951                 X_ACCOUNT_NUMBER);
952 
953         ELSIF (COUNTRY_NAME = 'LU') THEN
954             CE_VALIDATE_BANKINFO.CE_VALIDATE_CD_LU(X_CD,
955                 X_BANK_NUMBER,
956                 X_BRANCH_NUMBER,
957                 X_ACCOUNT_NUMBER);
958 
959         ELSIF (COUNTRY_NAME = 'SE') THEN
960             CE_VALIDATE_BANKINFO.CE_VALIDATE_CD_SE(X_CD,X_ACCOUNT_NUMBER);
961 		END IF;
962 
963        /*  Bug 11783906
964 	   ELSIF (COUNTRY_NAME = 'FI') THEN
965             CE_VALIDATE_BANKINFO.ce_validate_cd_fi(X_CD, X_BRANCH_NUMBER, X_ACCOUNT_NUMBER);
966 
967         END IF; */
968     END IF; -- End Bug 6632733
969 
970     FND_MSG_PUB.Count_And_Get(
971         p_encoded => FND_API.G_FALSE,
972         p_count => x_msg_count,
973         p_data  => x_msg_data);
974 
975     IF x_msg_count > x_init_count THEN -- bug 7460921
976         x_return_status := fnd_api.g_ret_sts_error;
977     END IF;
978 
979     cep_standard.debug('CE_VALIDATE_BANKINFO.ce_validate_cd - P_COUNT: '|| x_msg_count);
980 
981     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_cd');
982 
983 EXCEPTION
984     WHEN OTHERS THEN
985         cep_standard.debug('Exception: CE_VALIDATE_BANKINFO.ce_validate_cd ' ||X_COUNTRY_NAME );
986 
987         FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
988         fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.cd_validate_cd');
989         fnd_msg_pub.add;
990         RAISE;
991 END CE_VALIDATE_CD;
992 
993 
994 /* --------------------------------------------------------------------
995 |  PRIVATE PROCEDURE                                                    |
996 |      CE_VALIDATE_BRANCH                                               |
997 |                                                                       |
998 |  CALLED BY                                                            |
999 |      OA - BANK BRANCH INFORMATION PAGE                                |
1000 |                                                                       |
1001 |  CALLS                                                                |
1002 |      CE_VALIDATE_BRANCH_*           for each country                  |
1003 |      CE_VALIDATE_UNIQUE_BRANCH_*    for each country                  |
1004  --------------------------------------------------------------------- */
1005 PROCEDURE CE_VALIDATE_BRANCH(
1006     X_COUNTRY_NAME              IN  VARCHAR2,
1007     X_BANK_NUMBER               IN  VARCHAR2,
1008     X_BRANCH_NUMBER             IN  VARCHAR2,
1009     X_BANK_NAME                 IN  VARCHAR2,
1010     X_BRANCH_NAME               IN  VARCHAR2,
1011     X_BRANCH_NAME_ALT           IN  VARCHAR2,
1012     X_BANK_ID                   IN  NUMBER,
1013     X_BRANCH_ID                 IN  NUMBER,
1014     p_init_msg_list             IN  VARCHAR2,
1015     x_msg_count                 OUT NOCOPY NUMBER,
1016     x_msg_data                  OUT NOCOPY VARCHAR2,
1017     X_VALUE_OUT                 OUT NOCOPY varchar2,
1018     x_return_status             IN OUT NOCOPY VARCHAR2,
1019     X_ACCOUNT_CLASSIFICATION    IN VARCHAR2 DEFAULT NULL,
1020     X_BRANCH_TYPE               IN VARCHAR2 DEFAULT NULL,  -- 9250566 added
1021     X_BRANCH_END_DATE            IN DATE DEFAULT NULL)     --Bug 15958504
1022 AS
1023     COUNTRY_NAME        VARCHAR2(2);
1024     X_PASS_MAND_CHECK   VARCHAR2(1);
1025 
1026     l_value_out           VARCHAR2(40);-- 9250566: Added
1027     l_value_out_custom    VARCHAR2(40);-- 9250566: Added
1028     l_usr_valid           VARCHAR2(1); -- 9250566: Added
1029     l_count_before_custom NUMBER;      -- 9250566: Added
1030     l_count_after_custom  NUMBER;      -- 9250566: Added
1031 
1032 BEGIN
1033     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch');
1034 
1035     -- initialize API return status to success.
1036     x_return_status := fnd_api.g_ret_sts_success;
1037 
1038     COUNTRY_NAME  := X_COUNTRY_NAME;
1039     l_value_out := X_BRANCH_NUMBER;
1040 
1041     cep_standard.debug('COUNTRY_NAME: '|| COUNTRY_NAME);
1042     cep_standard.debug('l_value_out: '|| l_value_out);
1043 
1044     -- Initialize message list if p_init_msg_list is set to TRUE.
1045     IF FND_API.to_Boolean(p_init_msg_list) THEN
1046         FND_MSG_PUB.initialize;
1047     END IF;
1048 
1049     /* We must validate the Bank Branch Number */
1050     IF X_BRANCH_NUMBER IS NULL THEN
1051         X_PASS_MAND_CHECK := 'F';
1052     ELSE
1053         X_PASS_MAND_CHECK := 'P';
1054     END IF;
1055 
1056     cep_standard.debug('X_PASS_MAND_CHECK: '|| X_PASS_MAND_CHECK);
1057     cep_standard.debug('Calling CE_VALIDATE_BRANCH_'||COUNTRY_NAME);
1058 
1059     IF (COUNTRY_NAME = 'AT') THEN
1060         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_AT(
1061             X_BRANCH_NUMBER,
1062             X_PASS_MAND_CHECK,
1063             l_value_out);
1064 
1065     ELSIF (COUNTRY_NAME = 'ES') THEN
1066         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_ES(
1067             X_BRANCH_NUMBER,
1068             X_PASS_MAND_CHECK,
1069             l_value_out);
1070 
1071     ELSIF (COUNTRY_NAME = 'FR') THEN
1072         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_FR(
1073             X_BRANCH_NUMBER,
1074             X_PASS_MAND_CHECK,
1075             l_value_out);
1076 
1077     ELSIF (COUNTRY_NAME = 'PT') THEN
1078         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_PT(
1079             X_BRANCH_NUMBER,
1080             X_PASS_MAND_CHECK);
1081 
1082     ELSIF (COUNTRY_NAME = 'BR') THEN
1083         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_BR(
1084             X_BRANCH_NUMBER,
1085             X_PASS_MAND_CHECK,
1086             l_value_out);
1087 
1088     -- added 5/14/02
1089     ELSIF (COUNTRY_NAME = 'DE') THEN
1090         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_DE(
1091             X_BRANCH_NUMBER,
1092             X_BANK_ID);
1093 
1094     ELSIF (COUNTRY_NAME = 'GR') THEN
1095         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_GR(X_BRANCH_NUMBER);
1096 
1097     ELSIF (COUNTRY_NAME = 'IS') THEN
1098         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IS(
1099             X_BRANCH_NUMBER,
1100             X_BANK_ID,
1101             l_value_out);
1102 
1103     ELSIF (COUNTRY_NAME = 'IE') THEN
1104         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IE(
1105             X_BRANCH_NUMBER,
1106             X_BANK_ID);
1107 
1108     ELSIF (COUNTRY_NAME = 'IT') THEN
1109         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IT(
1110             X_BRANCH_NUMBER,
1111             X_PASS_MAND_CHECK);
1112 
1113     ELSIF (COUNTRY_NAME = 'LU') THEN
1114         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_LU(
1115             X_BRANCH_NUMBER,
1116             X_BANK_ID);
1117 
1118     ELSIF (COUNTRY_NAME = 'PL') THEN
1119         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_PL(
1120             X_BRANCH_NUMBER,
1121             X_BANK_ID);
1122 
1123     ELSIF (COUNTRY_NAME = 'SE') THEN
1124         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_SE(
1125             X_BRANCH_NUMBER,
1126             X_BANK_ID);
1127 
1128     ELSIF (COUNTRY_NAME = 'CH') THEN
1129         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_CH(
1130             X_BRANCH_NUMBER,
1131             X_BANK_ID);
1132 
1133     ELSIF (COUNTRY_NAME = 'GB') THEN
1134         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_GB(
1135             X_BRANCH_NUMBER,
1136             X_BANK_ID);
1137 
1138     ELSIF (COUNTRY_NAME = 'US') THEN
1139         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_US(
1140             X_BRANCH_NUMBER,
1141             X_PASS_MAND_CHECK,
1142             l_value_out);
1143 
1144     -- added 10/19/04
1145     ELSIF (COUNTRY_NAME = 'AU') THEN
1146         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_AU(
1147             X_BRANCH_NUMBER,
1148             X_BANK_ID,
1149             X_PASS_MAND_CHECK);
1150 
1151     ELSIF (COUNTRY_NAME = 'IL') THEN
1152         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IL(
1153             X_BRANCH_NUMBER,
1154             X_PASS_MAND_CHECK);
1155 
1156     ELSIF (COUNTRY_NAME = 'NZ') THEN
1157         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_NZ(
1158             X_BRANCH_NUMBER,
1159             X_PASS_MAND_CHECK);
1160 
1161     ELSIF (COUNTRY_NAME = 'JP') THEN
1162         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_JP(
1163             X_BRANCH_NUMBER,
1164             X_BRANCH_NAME_ALT,
1165             X_PASS_MAND_CHECK);
1166 
1167     -- 9249372: Added
1168     ELSIF (COUNTRY_NAME = 'FI') THEN
1169         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_FI(X_BRANCH_NUMBER);
1170 
1171     END IF;
1172 
1173     --Bug 15958504  branch end_date check
1174  CE_VALIDATE_BANKINFO.ce_end_date_check(Xi_BRANCH_ID =>x_BRANCH_ID,
1175                                       Xi_BRANCH_END_DATE => X_BRANCH_END_DATE);
1176     --   UNIQUE VALIDATION CHECK for branch --
1177     --   bug 14610187: Unique validation check have been moved after the
1178     --   custom validations as they might modify the branch number.
1179 
1180     -- 9250566 ADDED 1/6 START -------------------------
1181     l_count_before_custom := Nvl(FND_MSG_PUB.count_msg,0);
1182     l_usr_valid := fnd_api.g_ret_sts_success;
1183 
1184     -- Call to custom validation routines
1185     cep_standard.debug('Calling custom validation hooks');
1186     cep_standard.debug('l_count_before=' ||l_count_before_custom);
1187     cep_standard.debug('l_value_out='    ||l_value_out);
1188     CE_CUSTOM_BANK_VALIDATIONS.ce_usr_validate_branch(
1189         Xi_COUNTRY_NAME    => X_COUNTRY_NAME,
1190         Xi_BANK_NUMBER     => X_BANK_NUMBER,
1191         Xi_BRANCH_NUMBER   => l_value_out,
1192         Xi_BANK_NAME       => X_BANK_NAME,
1193         Xi_BRANCH_NAME     => X_BRANCH_NAME,
1194         Xi_BRANCH_NAME_ALT => X_BRANCH_NAME_ALT,
1195         Xi_BRANCH_TYPE     => X_BRANCH_TYPE,
1196         Xi_BANK_ID         => X_BANK_ID,
1197         Xi_BRANCH_ID       => X_BRANCH_ID,
1198         Xo_BRANCH_NUM_OUT  => l_value_out_custom,
1199         Xo_RETURN_STATUS   => l_usr_valid
1200     );
1201 
1202     l_count_after_custom := FND_MSG_PUB.count_msg;
1203     cep_standard.debug('l_count_before='    ||l_count_before_custom);
1204 
1205     cep_standard.debug('l_value_out_custom='||l_value_out_custom);
1206     X_VALUE_OUT := NVL(l_value_out_custom,l_value_out);
1207 
1208     --   Bug 14242293: Code change(1/2) starts
1209     --   The uniqueness validation must be a combination of bank, branch name
1210     --   and branch number for all countries.
1211     cep_standard.debug('unqiue VALIDATION CHECK for branch: generic' );
1212     CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH(
1213         X_COUNTRY_NAME,
1214         X_VALUE_OUT,     /* bug 14610187 - added X_VALUE_OUT instead of X_BRANCH_NUMBER */
1215         X_BRANCH_NAME,
1216         X_BANK_ID,
1217         X_BRANCH_ID);
1218 
1219     -- country specific uniqueness checks --
1220     cep_standard.debug('unqiue VALIDATION CHECK for branch: country specific' );
1221     IF (COUNTRY_NAME = 'JP')
1222     THEN
1223         CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH_JP(
1224             X_COUNTRY_NAME,
1225             X_VALUE_OUT,    /* bug 14610187 - added X_VALUE_OUT instead of X_BRANCH_NUMBER */
1226             X_BRANCH_NAME,
1227             X_BRANCH_NAME_ALT,
1228             X_BANK_ID,
1229             X_BRANCH_ID);
1230     ELSE
1231         cep_standard.debug('No country uniqueness specific validations');
1232     END IF;
1233     --  end country unique check for branch   --
1234     --  Bug 14242293: code change (1/2) ends
1235 
1236     -- Check return status
1237     IF l_usr_valid = fnd_api.g_ret_sts_error
1238     THEN
1239        cep_standard.debug('Custom validations done - failure');
1240        IF l_count_after_custom = 0 THEN
1241           cep_standard.debug('No custom error message set');
1242        END IF;
1243     ELSE
1244        cep_standard.debug('Custom validations done - success');
1245        -- remove any unnecessary messages
1246        WHILE l_count_after_custom > l_count_before_custom
1247        LOOP
1248             FND_MSG_PUB.delete_msg(l_count_after_custom);
1249             l_count_after_custom := l_count_after_custom - 1;
1250             cep_standard.debug(l_count_after_custom);
1251         END LOOP;
1252         cep_standard.debug('After cleanup, count='||FND_MSG_PUB.count_msg);
1253 
1254     END IF;
1255     -- 9250566 ADDED 1/6 END --------------------------
1256 
1257     FND_MSG_PUB.Count_And_Get(
1258         p_encoded => FND_API.G_FALSE,
1259         p_count => x_msg_count,
1260         p_data  => x_msg_data);
1261 
1262     cep_standard.debug('P_COUNT: '|| x_msg_count);
1263 
1264     IF x_msg_count > 0 THEN
1265         x_return_status := fnd_api.g_ret_sts_error;
1266     END IF;
1267 
1268     cep_standard.debug('X_VALUE_OUT: '|| X_VALUE_OUT);
1269     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch');
1270 
1271 EXCEPTION
1272     WHEN OTHERS THEN
1273         cep_standard.debug('EXCEPTION: ce_validate_branch ' ||X_COUNTRY_NAME );
1274         FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
1275         fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.cd_validate_branch');
1276         fnd_msg_pub.add;
1277         RAISE;
1278 END CE_VALIDATE_BRANCH;
1279 
1280 /* ----------------------------------------------------------------------- */
1281 PROCEDURE CE_FORMAT_ELECTRONIC_NUM_BE(
1282     X_ACCOUNT_NUMBER          IN VARCHAR2,
1283     X_ACCOUNT_CLASSIFICATION  IN VARCHAR2 DEFAULT NULL,
1284     X_ELECTRONIC_ACCT_NUM     OUT NOCOPY VARCHAR2
1285 ) AS
1286     account_value       VARCHAR2(30);
1287     l_bank_account_num  VARCHAR2(30);
1288 BEGIN
1289     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_BE');
1290 
1291     account_value:= ce_remove_formats(X_ACCOUNT_NUMBER);
1292 
1293     IF X_ACCOUNT_CLASSIFICATION = 'EXTERNAL' THEN
1294         -- Bug 6175680 changed the character for l_bank_account_num from 12 to 14.
1295         l_bank_account_num := lpad(ltrim(rtrim(to_char(X_ACCOUNT_NUMBER))),14,'0');
1296         l_bank_account_num := rpad(nvl(l_bank_account_num, ' '), 14, ' ');
1297 
1298         -- Bug 8884977: replaced to_number() with rtrim(ltrim(,'0'))
1299         account_value := rtrim(ltrim((substr(l_bank_account_num,1,3)
1300                                  ||substr(l_bank_account_num,5,7)
1301                                  ||substr(l_bank_account_num,13,2)),'0'));
1302 
1303     END IF;
1304 
1305     cep_standard.debug('account_value ' ||account_value);
1306     X_ELECTRONIC_ACCT_NUM := account_value;
1307 
1308     cep_standard.debug('X_ELECTRONIC_ACCT_NUM ' ||X_ELECTRONIC_ACCT_NUM);
1309     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_BE');
1310 END CE_FORMAT_ELECTRONIC_NUM_BE;
1311 
1312 
1313 -- Bug 11783906
1314 PROCEDURE CE_FORMAT_ELECTRONIC_NUM_FI(
1315     X_ACCOUNT_NUMBER          IN  VARCHAR2,
1316     X_ACCOUNT_CLASSIFICATION  IN  VARCHAR2 DEFAULT NULL,
1317     X_ELECTRONIC_ACCT_NUM     OUT NOCOPY VARCHAR2
1318 ) AS
1319 
1320     account_value     VARCHAR2(30);
1321     account_pad_value VARCHAR2(30);
1322 
1323 BEGIN
1324     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_FI');
1325 
1326     -- remove formatting characters
1327     account_value := ce_remove_formats(X_Account_Number);
1328     cep_standard.debug('account_value='||account_value);
1329 
1330     -- pad as per first digit
1331     IF (SubStr(account_value,1,1) IN ('4','5'))
1332     THEN
1333         account_pad_value := SubStr(account_value,1,7) ||
1334                         LPad(SubStr(account_value,8,Length(account_value)),7,'0');
1335     ELSE
1336         account_pad_value := SubStr(account_value,1,6) ||
1337                         LPad(SubStr(account_value,7,Length(account_value)),8,'0');
1338     END IF;
1339     cep_standard.debug('account_pad_value='||account_pad_value);
1340 
1341     X_ELECTRONIC_ACCT_NUM := account_pad_value;
1342 
1343     cep_standard.debug('X_ELECTRONIC_ACCT_NUM ' ||X_ELECTRONIC_ACCT_NUM);
1344     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_FI');
1345 END CE_FORMAT_ELECTRONIC_NUM_FI;
1346 
1347 
1348 /* ----------------------------------------------------------------------- */
1349 PROCEDURE CE_FORMAT_ELECTRONIC_NUM_NL(
1350     X_ACCOUNT_NUMBER            IN VARCHAR2,
1351     X_ACCOUNT_CLASSIFICATION    IN VARCHAR2 DEFAULT NULL,
1352     X_ELECTRONIC_ACCT_NUM       OUT NOCOPY VARCHAR2
1353 ) AS
1354     account_value VARCHAR2(100);
1355 BEGIN
1356     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_NL');
1357     SELECT              decode(
1358                    upper(substr(X_ACCOUNT_NUMBER, 1, 1)),
1359                    'P', upper(X_ACCOUNT_NUMBER),
1360                    'G', 'P' || substr(X_ACCOUNT_NUMBER, 2),
1361                'I', 'P' || substr(X_ACCOUNT_NUMBER, 2),
1362                    lpad(X_ACCOUNT_NUMBER, 10, '0')
1363                    )
1364     INTO account_value
1365     FROM dual; -- Bug 13420335
1366 
1367     X_ELECTRONIC_ACCT_NUM := account_value;
1368 
1369     cep_standard.debug('X_ELECTRONIC_ACCT_NUM ' ||X_ELECTRONIC_ACCT_NUM);
1370     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_NL');
1371 END CE_FORMAT_ELECTRONIC_NUM_NL;
1372 
1373 /* ----------------------------------------------------------------------- */
1374 PROCEDURE CE_FORMAT_ELECTRONIC_NUM_NO(
1375     X_ACCOUNT_NUMBER      IN varchar2,
1376     X_ACCOUNT_CLASSIFICATION  IN VARCHAR2 DEFAULT NULL,
1377     X_ELECTRONIC_ACCT_NUM     OUT NOCOPY varchar2
1378 ) AS
1379     account_value varchar2(30);
1380 BEGIN
1381     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_NO');
1382 
1383     account_value:= lpad(replace(replace(NVL(X_ACCOUNT_NUMBER,''),'.',''),' ',''),11,0);
1384     X_ELECTRONIC_ACCT_NUM := account_value;
1385 
1386     cep_standard.debug('X_ELECTRONIC_ACCT_NUM ' ||X_ELECTRONIC_ACCT_NUM);
1387     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_NO');
1388 END CE_FORMAT_ELECTRONIC_NUM_NO;
1389 
1390 /* ----------------------------------------------------------------------- */
1391 PROCEDURE CE_FORMAT_ELECTRONIC_NUM_SE(
1392     X_ACCOUNT_NUMBER            IN VARCHAR2,
1393     X_ACCOUNT_CLASSIFICATION    IN VARCHAR2 DEFAULT NULL,
1394     X_ELECTRONIC_ACCT_NUM       OUT NOCOPY VARCHAR2
1395 ) AS
1396     account_value VARCHAR2(30);
1397 BEGIN
1398     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_SE');
1399 
1400     account_value:= ce_remove_formats(X_ACCOUNT_NUMBER);
1401     X_ELECTRONIC_ACCT_NUM := account_value;
1402 
1403     cep_standard.debug('X_ELECTRONIC_ACCT_NUM ' ||X_ELECTRONIC_ACCT_NUM);
1404     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_SE');
1405 END CE_FORMAT_ELECTRONIC_NUM_SE;
1406 
1407 /* --------------------------------------------------------------------
1408 |  PUBLIC PROCEDURE                                                    |
1409 |      CE_FORMAT_ELECTRONIC_NUM                                        |
1410 |                                                                      |
1411 |  CALLED BY                                                           |
1412 |      CE_VALIDATE_ACCOUNT                                             |
1413 |                                                                      |
1414 |  CALLS                                                               |
1415 |      CE_FORMAT_ELECTRONIC_NUM_*           for each country           |
1416  ---------------------------------------------------------------------*/
1417 PROCEDURE CE_FORMAT_ELECTRONIC_NUM(
1418     X_COUNTRY_NAME                  IN VARCHAR2,
1419     X_BANK_NUMBER                   IN VARCHAR2,
1420     X_BRANCH_NUMBER                 IN VARCHAR2,
1421     X_ACCOUNT_NUMBER                IN VARCHAR2,
1422     X_CD                            IN VARCHAR2 DEFAULT NULL,
1423     X_ACCOUNT_SUFFIX                IN VARCHAR2,
1424     X_SECONDARY_ACCOUNT_REFERENCE   IN VARCHAR2,
1425     X_ACCOUNT_CLASSIFICATION        IN VARCHAR2 DEFAULT NULL,
1426     X_ELECTRONIC_ACCT_NUM           OUT NOCOPY Varchar2,
1427     p_init_msg_list                 IN VARCHAR2,
1428     x_msg_count                     OUT NOCOPY NUMBER,
1429     x_msg_data                      OUT NOCOPY VARCHAR2,
1430     x_return_status                 IN OUT NOCOPY VARCHAR2
1431 ) AS
1432     country_name   VARCHAR2(2);
1433 BEGIN
1434     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM');
1435     -- initialize API return status to success.
1436     x_return_status := fnd_api.g_ret_sts_success;
1437 
1438     COUNTRY_NAME  := X_COUNTRY_NAME;
1439     X_ELECTRONIC_ACCT_NUM := X_ACCOUNT_NUMBER;
1440 
1441     cep_standard.debug('COUNTRY_NAME: '|| COUNTRY_NAME);
1442     cep_standard.debug('X_ELECTRONIC_ACCT_NUM: '|| X_ELECTRONIC_ACCT_NUM);
1443 	--Bug number 13096191: When country Specific validations are disabled
1444 	--formatting is not done
1445 	IF CE_DISABLE_VALIDATION THEN
1446 	cep_standard.debug('Validations are Disabled.No formatting done.');
1447 	ELSE
1448 		-- Initialize message list if p_init_msg_list is set to TRUE.
1449 		IF FND_API.to_Boolean(p_init_msg_list) THEN
1450 				FND_MSG_PUB.initialize;
1451 		END IF;
1452 		IF (COUNTRY_NAME = 'BE') THEN
1453 		CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_BE(
1454 		X_ACCOUNT_NUMBER  ,
1455 		X_ACCOUNT_CLASSIFICATION,
1456 		X_ELECTRONIC_ACCT_NUM);
1457 
1458 		ELSIF (COUNTRY_NAME = 'FI') THEN
1459 		-- Bug 11783906
1460 		CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_FI(
1461 		X_ACCOUNT_NUMBER  ,
1462 		X_ACCOUNT_CLASSIFICATION,
1463 		X_ELECTRONIC_ACCT_NUM);
1464 
1465 		ELSIF (COUNTRY_NAME = 'NL') THEN
1466 		CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_NL(
1467 		X_ACCOUNT_NUMBER  ,
1468 		X_ACCOUNT_CLASSIFICATION,
1469 		X_ELECTRONIC_ACCT_NUM);
1470 
1471 		ELSIF (COUNTRY_NAME = 'NO') THEN
1472 		CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_NO(
1473 		X_ACCOUNT_NUMBER  ,
1474 		X_ACCOUNT_CLASSIFICATION,
1475 		X_ELECTRONIC_ACCT_NUM);
1476 
1477 		ELSIF (COUNTRY_NAME = 'SE') THEN
1478 		CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM_SE(
1479 		X_ACCOUNT_NUMBER  ,
1480 		X_ACCOUNT_CLASSIFICATION,
1481 		X_ELECTRONIC_ACCT_NUM);
1482 
1483 		END IF;
1484 	 FND_MSG_PUB.Count_And_Get(
1485 			p_encoded => FND_API.G_FALSE,
1486 			p_count => x_msg_count,
1487 			p_data  => x_msg_data);
1488 	END IF;--Bug number 13096191 added
1489     IF x_msg_count > 0 THEN
1490        x_return_status := fnd_api.g_ret_sts_error;
1491     END IF;
1492 
1493     cep_standard.debug('P_COUNT: '|| x_msg_count);
1494     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM');
1495 EXCEPTION
1496   WHEN OTHERS THEN
1497     cep_standard.debug('EXCEPTION: CE_FORMAT_ELECTRONIC_NUM ' ||X_COUNTRY_NAME );
1498     FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
1499     fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.CE_FORMAT_ELECTRONIC_NUM');
1500     fnd_msg_pub.add;
1501     RAISE;
1502 END CE_FORMAT_ELECTRONIC_NUM;
1503 
1504 /* --------------------------------------------------------------------
1505 |  PRIVATE PROCEDURE                                                    |
1506 |      CE_VALIDATE_ACCOUNT                                              |
1507 |                                                                       |
1508 |  CALLED BY                                                            |
1509 |      OA - BANK ACCOUNT INFORMATION PAGE                               |
1510 |                                                                       |
1511 |  CALLS                                                                |
1512 |      CE_VALIDATE_ACCOUNT_*           for each country                 |
1513 |      CE_VALIDATE_UNIQUE_ACCOUNT_*    for each country                 |
1514  --------------------------------------------------------------------- */
1515 PROCEDURE CE_VALIDATE_ACCOUNT(
1516     x_country_name                  IN VARCHAR2,
1517     x_bank_number                   IN VARCHAR2,
1518     x_branch_number                 IN VARCHAR2,
1519     x_account_number                IN VARCHAR2,
1520     x_bank_id                       IN NUMBER,
1521     x_branch_id                     IN NUMBER,
1522     x_account_id                    IN NUMBER,
1523     x_currency_code                 IN VARCHAR2,
1524     x_account_type                  IN VARCHAR2,
1525     x_account_suffix                IN VARCHAR2,
1526     x_secondary_account_reference   IN VARCHAR2,
1527     x_account_name                  IN VARCHAR2,
1528     p_init_msg_list                 IN  VARCHAR2,
1529     x_msg_count                     OUT NOCOPY NUMBER,
1530     x_msg_data                      OUT NOCOPY VARCHAR2,
1531     x_value_out                     OUT NOCOPY Varchar2,
1532     x_return_status                 IN OUT NOCOPY VARCHAR2,
1533     x_account_classification        IN VARCHAR2 DEFAULT NULL,
1534     x_cd                            IN  VARCHAR2  DEFAULT NULL,
1535     x_electronic_acct_num           OUT NOCOPY VARCHAR2
1536 ) AS
1537     COUNTRY_NAME        VARCHAR2(2);
1538     NEW_ACCOUNT_NUM     VARCHAR2(100);
1539     X_PASS_MAND_CHECK   VARCHAR2(1);
1540 
1541     l_value_out           VARCHAR2(40);-- 9250566: Added
1542     l_value_out_custom    VARCHAR2(40);-- 9250566: Added
1543     l_usr_valid           VARCHAR2(1); -- 9250566: Added
1544     l_count_before_custom NUMBER;      -- 9250566: Added
1545     l_count_after_custom  NUMBER;      -- 9250566: Added
1546 
1547 BEGIN
1548     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account');
1549     -- initialize API return status to success.
1550     x_return_status := fnd_api.g_ret_sts_success;
1551 
1552     COUNTRY_NAME  := X_COUNTRY_NAME;
1553     l_value_out := X_ACCOUNT_NUMBER;
1554     X_ELECTRONIC_ACCT_NUM := X_ACCOUNT_NUMBER;
1555 
1556     cep_standard.debug('COUNTRY_NAME: '|| COUNTRY_NAME||', l_value_out: '|| l_value_out);
1557 
1558     -- Initialize message list if p_init_msg_list is set to TRUE.
1559     IF FND_API.to_Boolean(p_init_msg_list) THEN
1560             FND_MSG_PUB.initialize;
1561     END IF;
1562 
1563     /* We must validate the Bank Account Number */
1564     IF X_ACCOUNT_NUMBER is null   THEN
1565         X_PASS_MAND_CHECK := 'F';
1566     ELSE
1567         X_PASS_MAND_CHECK := 'P';
1568     END IF;
1569 
1570     cep_standard.debug('X_PASS_MAND_CHECK: '|| X_PASS_MAND_CHECK);
1571 
1572     IF (COUNTRY_NAME = 'AT') THEN
1573         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_AT(
1574             X_ACCOUNT_NUMBER,
1575             X_PASS_MAND_CHECK,
1576             l_value_out);
1577 
1578     ELSIF (COUNTRY_NAME = 'DK') THEN
1579         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_DK(
1580             X_ACCOUNT_NUMBER,
1581             X_PASS_MAND_CHECK,
1582             l_value_out);
1583 
1584     ELSIF (COUNTRY_NAME = 'NO') THEN
1585         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_NO(
1586             X_ACCOUNT_NUMBER,
1587             X_PASS_MAND_CHECK);
1588 
1589     ELSIF (COUNTRY_NAME = 'ES') THEN
1590         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_ES(
1591             X_ACCOUNT_NUMBER,
1592             X_PASS_MAND_CHECK,
1593             l_value_out);
1594 
1595     ELSIF (COUNTRY_NAME = 'NL') THEN
1596         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_NL(
1597             X_ACCOUNT_NUMBER,
1598             X_PASS_MAND_CHECK);
1599 
1600     ELSIF (COUNTRY_NAME = 'FR') THEN
1601         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_FR(
1602             X_ACCOUNT_NUMBER,
1603             X_PASS_MAND_CHECK,
1604             l_value_out);
1605 
1606     ELSIF (COUNTRY_NAME = 'BE') THEN
1607         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_BE(
1608             X_ACCOUNT_NUMBER,
1609             X_PASS_MAND_CHECK);
1610 
1611     ELSIF (COUNTRY_NAME = 'PT') THEN
1612         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_PT(
1613             X_ACCOUNT_NUMBER,
1614             X_PASS_MAND_CHECK,
1615             l_value_out);
1616 
1617     ELSIF (COUNTRY_NAME = 'FI') THEN -- 8897744 Removed AND (X_BRANCH_NUMBER='LMP')
1618         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_FI(
1619             X_ACCOUNT_NUMBER,
1620             X_PASS_MAND_CHECK);
1621 
1622     -- added 5/14/02
1623     ELSIF (COUNTRY_NAME = 'DE') THEN
1624         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_DE(
1625             X_ACCOUNT_NUMBER,
1626             l_value_out );
1627 
1628     ELSIF (COUNTRY_NAME = 'GR') THEN
1629         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_GR(
1630             X_ACCOUNT_NUMBER,
1631             l_value_out);
1632 
1633     ELSIF (COUNTRY_NAME = 'IS') THEN
1634         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_IS(
1635             X_ACCOUNT_NUMBER,
1636             l_value_out );
1637 
1638     ELSIF (COUNTRY_NAME = 'IE') THEN
1639         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_IE(X_ACCOUNT_NUMBER);
1640 
1641     ELSIF (COUNTRY_NAME = 'IT') THEN
1642         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_IT(X_ACCOUNT_NUMBER,l_value_out);
1643 
1644     ELSIF (COUNTRY_NAME = 'LU') THEN
1645         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_LU(X_ACCOUNT_NUMBER);
1646 
1647     ELSIF (COUNTRY_NAME = 'PL') THEN
1648         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_PL(X_ACCOUNT_NUMBER);
1649 
1650     ELSIF (COUNTRY_NAME = 'SE') THEN
1651         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_SE(X_ACCOUNT_NUMBER);
1652 
1653     ELSIF (COUNTRY_NAME = 'CH') THEN
1654         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_CH(
1655             X_ACCOUNT_NUMBER,
1656             X_ACCOUNT_TYPE );
1657 
1658     ELSIF (COUNTRY_NAME = 'GB') THEN
1659         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_GB(
1660             X_ACCOUNT_NUMBER,
1661             X_BRANCH_NUMBER,  ----Bug16234978
1662             l_value_out);
1663 
1664     ELSIF (COUNTRY_NAME = 'BR') THEN
1665         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_BR(
1666             X_ACCOUNT_NUMBER,
1667             X_SECONDARY_ACCOUNT_REFERENCE);
1668 
1669     ELSIF (COUNTRY_NAME = 'AU') THEN
1670         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_AU(
1671             X_ACCOUNT_NUMBER,
1672             X_CURRENCY_CODE);
1673 
1674     ELSIF (COUNTRY_NAME = 'IL') THEN
1675         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_IL(X_ACCOUNT_NUMBER);
1676 
1677     ELSIF (COUNTRY_NAME = 'NZ') THEN
1678         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_NZ(
1679             X_ACCOUNT_NUMBER,
1680             X_ACCOUNT_SUFFIX);
1681 
1682     ELSIF (COUNTRY_NAME = 'JP') THEN
1683         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_JP(X_ACCOUNT_NUMBER,
1684                     X_ACCOUNT_TYPE );
1685     END IF;  /* country account check */
1686 
1687     /*   UNIQUE VALIDATION CHECK for account   */
1688     cep_standard.debug('UNIQUE_VALIDATION CHECK for account');
1689 
1690     IF (COUNTRY_NAME = 'JP')   THEN
1691         CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT_JP(
1692             X_ACCOUNT_NUMBER,
1693             X_CURRENCY_CODE,
1694             X_ACCOUNT_TYPE,
1695             X_ACCOUNT_NAME,
1696             X_BRANCH_ID,
1697             X_ACCOUNT_ID);
1698 
1699     ELSIF (COUNTRY_NAME = 'NZ')   THEN
1700         CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT_NZ(
1701             X_ACCOUNT_NUMBER,
1702             X_CURRENCY_CODE,
1703             X_ACCOUNT_SUFFIX,
1704             X_ACCOUNT_NAME,
1705             X_BRANCH_ID,
1706             X_ACCOUNT_ID);
1707 
1708     ELSE
1709         cep_standard.debug('call CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT' );
1710         CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT(
1711             X_ACCOUNT_NUMBER,
1712             X_CURRENCY_CODE,
1713             X_ACCOUNT_NAME,
1714             X_BRANCH_ID,
1715             X_ACCOUNT_ID);
1716 
1717     END IF;
1718 
1719     cep_standard.debug(' UNIQUE_VALIDATION CHECK for account end ');
1720 
1721     -- ER 3973203
1722     -- Format Electronic Bank Account Num
1723     -- (CE_BANK_ACCOUNTS.BANK_ACCOUNT_NUM_ELECTRONIC)
1724     IF l_value_out IS NOT NULL THEN
1725         NEW_ACCOUNT_NUM :=  l_value_out;
1726     ELSE
1727         NEW_ACCOUNT_NUM :=  X_ACCOUNT_NUMBER;
1728     END IF;
1729     cep_standard.debug('CE_VALIDATE_ACCOUNT: NEW_ACCOUNT_NUM: '|| NEW_ACCOUNT_NUM);
1730 
1731     CE_FORMAT_ELECTRONIC_NUM(
1732         X_COUNTRY_NAME ,
1733         X_BANK_NUMBER ,
1734         X_BRANCH_NUMBER ,
1735         NEW_ACCOUNT_NUM ,
1736         X_CD,
1737         X_ACCOUNT_SUFFIX,
1738         X_SECONDARY_ACCOUNT_REFERENCE,
1739         X_ACCOUNT_CLASSIFICATION,
1740         X_ELECTRONIC_ACCT_NUM ,
1741         p_init_msg_list  ,
1742         x_msg_count ,
1743         x_msg_data ,
1744         x_return_status   );
1745 
1746     cep_standard.debug('CE_VALIDATE_ACCOUNT: X_ELECTRONIC_ACCT_NUM: '|| X_ELECTRONIC_ACCT_NUM);
1747 
1748     -- 9250566 ADDED 2/6 START -------------------------
1749     l_count_before_custom := Nvl(FND_MSG_PUB.count_msg,0);
1750     l_usr_valid := fnd_api.g_ret_sts_success;
1751 
1752     -- Call to custom validation routines
1753     cep_standard.debug('Calling custom validation hooks');
1754     cep_standard.debug('l_count_before=' ||l_count_before_custom);
1755     cep_standard.debug('l_value_out='    ||l_value_out);
1756     CE_CUSTOM_BANK_VALIDATIONS.ce_usr_validate_account(
1757         Xi_COUNTRY_NAME            => X_COUNTRY_NAME,
1758         Xi_BANK_NUMBER             => X_BANK_NUMBER,
1759         Xi_BRANCH_NUMBER           => X_BRANCH_NUMBER,
1760         Xi_ACCOUNT_NUMBER          => l_value_out,
1761         Xi_CD                      => X_CD,
1762         Xi_ACCOUNT_NAME            => X_ACCOUNT_NAME,
1763         Xi_CURRENCY_CODE           => X_CURRENCY_CODE,
1764         Xi_ACCOUNT_TYPE            => X_ACCOUNT_TYPE,
1765         Xi_ACCOUNT_SUFFIX          => X_ACCOUNT_SUFFIX,
1766         Xi_SECONDARY_ACCT_REF      => X_SECONDARY_ACCOUNT_REFERENCE,
1767         Xi_ACCT_CLASSIFICATION     => X_ACCOUNT_CLASSIFICATION,
1768         Xi_BANK_ID                 => X_BANK_ID,
1769         Xi_BRANCH_ID               => X_BRANCH_ID,
1770         Xi_ACCOUNT_ID              => X_ACCOUNT_ID,
1771         Xo_ACCOUNT_NUM_OUT         => l_value_out_custom,
1772         Xo_RETURN_STATUS           => l_usr_valid
1773     );
1774 
1775     l_count_after_custom := FND_MSG_PUB.count_msg;
1776     cep_standard.debug('l_count_before='||l_count_before_custom);
1777 
1778     cep_standard.debug('l_value_out_custom='||l_value_out_custom);
1779     X_VALUE_OUT := NVL(l_value_out_custom,l_value_out);
1780 
1781     -- Check return status
1782     IF l_usr_valid = fnd_api.g_ret_sts_error
1783     THEN
1784        cep_standard.debug('Custom validations done - failure');
1785        IF l_count_after_custom = 0 THEN
1786           cep_standard.debug('No custom error message set');
1787        END IF;
1788     ELSE
1789        cep_standard.debug('Custom validations done - success');
1790        -- remove any unnecessary messages
1791        WHILE l_count_after_custom > l_count_before_custom
1792        LOOP
1793             FND_MSG_PUB.delete_msg(l_count_after_custom);
1794             l_count_after_custom := l_count_after_custom - 1;
1795             cep_standard.debug(l_count_after_custom);
1796         END LOOP;
1797         cep_standard.debug('After cleanup, count='||FND_MSG_PUB.count_msg);
1798 
1799     END IF;
1800     -- 9250566 2/6 ADDED END --------------------------
1801 
1802     FND_MSG_PUB.Count_And_Get(
1803         p_encoded => FND_API.G_FALSE,
1804         p_count => x_msg_count,
1805         p_data  => x_msg_data);
1806 
1807     IF x_msg_count > 0 THEN
1808        x_return_status := fnd_api.g_ret_sts_error;
1809     END IF;
1810     cep_standard.debug('CE_VALIDATE_ACCOUNT: P_COUNT: '|| x_msg_count);
1811     cep_standard.debug('X_VALUE_OUT: '|| X_VALUE_OUT);
1812 
1813     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account');
1814 EXCEPTION
1815   WHEN OTHERS THEN
1816     cep_standard.debug('EXCEPTION: ce_validate_account ' ||X_COUNTRY_NAME );
1817     FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
1818     fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.ce_validate_account');
1819     fnd_msg_pub.add;
1820     RAISE;
1821 END CE_VALIDATE_ACCOUNT;
1822 
1823 /* --------------------------------------------------------------------
1824 |  PRIVATE PROCEDURE                                                    |
1825 |      CE_VALIDATE_BANK                                                 |
1826 |                                                                       |
1827 |  CALLED BY                                                            |
1828 |      OA - BANK INFORMATION PAGE                                       |
1829 |                                                                       |
1830 |  CALLS                                                                |
1831 |      CE_VALIDATE_BANK_*           for each country                    |
1832 |      CE_VALIDATE_UNIQUE_BANK_*    for each country                    |
1833  --------------------------------------------------------------------- */
1834 PROCEDURE CE_VALIDATE_BANK(
1835     X_COUNTRY_NAME    IN varchar2,
1836     X_BANK_NUMBER     IN varchar2,
1837     X_BANK_NAME       IN varchar2,
1838     X_BANK_NAME_ALT   IN varchar2,
1839     X_TAX_PAYER_ID    IN varchar2,
1840     X_BANK_ID         IN NUMBER,
1841     p_init_msg_list   IN VARCHAR2,
1842     x_msg_count      OUT NOCOPY NUMBER,
1843     x_msg_data       OUT NOCOPY VARCHAR2,
1844     X_VALUE_OUT      OUT NOCOPY varchar2,
1845     x_return_status IN OUT NOCOPY VARCHAR2,
1846     X_ACCOUNT_CLASSIFICATION IN VARCHAR2 DEFAULT NULL
1847 ) AS
1848     COUNTRY_NAME   VARCHAR2(2);
1849     X_PASS_MAND_CHECK  VARCHAR2(1);
1850 
1851     l_value_out           VARCHAR2(40);-- 9250566: Added
1852     l_value_out_custom    VARCHAR2(40);-- 9250566: Added
1853     l_usr_valid           VARCHAR2(1); -- 9250566: Added
1854     l_count_before_custom NUMBER;      -- 9250566: Added
1855     l_count_after_custom  NUMBER;      -- 9250566: Added
1856 
1857 BEGIN
1858     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank');
1859     -- initialize API return status to success.
1860     x_return_status := fnd_api.g_ret_sts_success;
1861 
1862     COUNTRY_NAME  := X_COUNTRY_NAME;
1863     l_value_out := X_BANK_NUMBER;
1864 
1865     cep_standard.debug('COUNTRY_NAME: '|| COUNTRY_NAME||
1866                        ', l_value_out: '|| l_value_out);
1867 
1868     -- Initialize message list if p_init_msg_list is set to TRUE.
1869     IF FND_API.to_Boolean(p_init_msg_list) THEN
1870             FND_MSG_PUB.initialize;
1871     END IF;
1872 
1873     /* We must validate the Bank Number */
1874     IF X_BANK_NUMBER is null   THEN
1875         X_PASS_MAND_CHECK := 'F';
1876     ELSE
1877         X_PASS_MAND_CHECK := 'P';
1878     END IF;
1879 
1880     cep_standard.debug('X_PASS_MAND_CHECK: '|| X_PASS_MAND_CHECK);
1881 
1882     IF (COUNTRY_NAME = 'ES') THEN
1883         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_ES(
1884             X_BANK_NUMBER,
1885             X_PASS_MAND_CHECK,
1886             l_value_out);
1887 
1888     ELSIF (COUNTRY_NAME = 'FR') THEN
1889         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_FR(
1890             X_BANK_NUMBER,
1891             X_PASS_MAND_CHECK,
1892             l_value_out);
1893 
1894     ELSIF (COUNTRY_NAME = 'PT') THEN
1895         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_PT(
1896             X_BANK_NUMBER,
1897             X_PASS_MAND_CHECK);
1898 
1899     ELSIF (COUNTRY_NAME = 'BR') THEN
1900         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_BR(
1901             X_BANK_NUMBER,
1902             X_PASS_MAND_CHECK,
1903             l_value_out);
1904 
1905     -- Added 5/14/02
1906     ELSIF (COUNTRY_NAME = 'DE') THEN
1907     CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_DE(X_BANK_NUMBER);
1908 
1909     ELSIF (COUNTRY_NAME = 'GR') THEN
1910         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_GR(X_BANK_NUMBER);
1911 
1912     ELSIF (COUNTRY_NAME = 'IS') THEN
1913         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_IS(
1914             X_BANK_NUMBER,
1915             l_value_out);
1916 
1917     ELSIF (COUNTRY_NAME = 'IE') THEN
1918         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_IE(X_BANK_NUMBER);
1919 
1920     ELSIF (COUNTRY_NAME = 'IT') THEN
1921         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_IT(
1922             X_BANK_NUMBER,
1923             X_PASS_MAND_CHECK);
1924 
1925     ELSIF (COUNTRY_NAME = 'LU') THEN
1926         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_LU(X_BANK_NUMBER);
1927 
1928     ELSIF (COUNTRY_NAME = 'PL') THEN
1929         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_PL(X_BANK_NUMBER);
1930 
1931     ELSIF (COUNTRY_NAME = 'SE') THEN
1932         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_SE(X_BANK_NUMBER);
1933 
1934     ELSIF (COUNTRY_NAME = 'CH') THEN
1935         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_CH(X_BANK_NUMBER);
1936 
1937     ELSIF (COUNTRY_NAME = 'GB') THEN
1938         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_GB(X_BANK_NUMBER);
1939 
1940     ELSIF (COUNTRY_NAME = 'CO') THEN
1941     -- 10171134
1942          CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_CO(
1943             X_COUNTRY_NAME,
1944             X_BANK_NAME ,
1945             X_TAX_PAYER_ID,
1946             X_BANK_ID);
1947 
1948     -- Added 10/19/04
1949     ELSIF (COUNTRY_NAME = 'AU') THEN
1950         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_AU(X_BANK_NUMBER);
1951 
1952     ELSIF (COUNTRY_NAME = 'IL') THEN
1953         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_IL(
1954             X_BANK_NUMBER,
1955             X_PASS_MAND_CHECK);
1956 
1957     ELSIF (COUNTRY_NAME = 'NZ') THEN
1958         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_NZ(
1959             X_BANK_NUMBER,
1960             X_PASS_MAND_CHECK);
1961 
1962     ELSIF (COUNTRY_NAME = 'JP') THEN
1963         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_JP(
1964             X_BANK_NUMBER,
1965             X_BANK_NAME_ALT,
1966             X_PASS_MAND_CHECK);
1967     -- 8266356: Added
1968     ELSIF (COUNTRY_NAME = 'AT') THEN
1969         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_AT(
1970             X_BANK_NUMBER,
1971             X_PASS_MAND_CHECK,
1972             l_value_out);
1973     END IF;  /* country check for bank   */
1974 
1975     /*   UNIQUE VALIDATION CHECK for bank   */
1976     cep_standard.debug('UNIQUE VALIDATION CHECK for bank' );
1977 
1978     IF (COUNTRY_NAME = 'JP') THEN
1979         cep_standard.debug('call CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BANK_JP');
1980         CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BANK_JP(
1981             X_COUNTRY_NAME,
1982             X_BANK_NUMBER ,
1983             X_BANK_NAME ,
1984             X_BANK_NAME_ALT,
1985             X_BANK_ID);
1986 
1987     END IF;  /*   country unique check for bank   */
1988 
1989     -- 9250566 ADDED 3/6 START -------------------------
1990     l_count_before_custom := Nvl(FND_MSG_PUB.count_msg,0);
1991     l_usr_valid := fnd_api.g_ret_sts_success;
1992 
1993     -- Call to custom validation routines
1994     cep_standard.debug('Calling custom validation hooks');
1995     cep_standard.debug('l_count_before=' ||l_count_before_custom);
1996     cep_standard.debug('l_value_out='    ||l_value_out);
1997     CE_CUSTOM_BANK_VALIDATIONS.ce_usr_validate_bank (
1998         Xi_COUNTRY_NAME    => X_COUNTRY_NAME,
1999         Xi_BANK_NUMBER     => l_value_out,
2000         Xi_BANK_NAME       => X_BANK_NAME,
2001         Xi_BANK_NAME_ALT   => X_BANK_NAME_ALT,
2002         Xi_TAX_PAYER_ID    => X_TAX_PAYER_ID,
2003         Xi_BANK_ID         => X_BANK_ID,
2004         Xo_BANK_NUM_OUT    => l_value_out_custom,
2005         Xo_RETURN_STATUS   => l_usr_valid);
2006 
2007     l_count_after_custom := FND_MSG_PUB.count_msg;
2008     cep_standard.debug('l_count_before='||l_count_before_custom);
2009 
2010     cep_standard.debug('l_value_out_custom='||l_value_out_custom);
2011     X_VALUE_OUT := NVL(l_value_out_custom,l_value_out);
2012     -- Check return status
2013     IF l_usr_valid = fnd_api.g_ret_sts_error
2014     THEN
2015        cep_standard.debug('Custom validations done - failure');
2016        IF l_count_after_custom = 0 THEN
2017           cep_standard.debug('No custom error message set');
2018        END IF;
2019     ELSE
2020        cep_standard.debug('Custom validations done - success');
2021        -- remove any unnecessary messages
2022        WHILE l_count_after_custom > l_count_before_custom
2023        LOOP
2024             FND_MSG_PUB.delete_msg(l_count_after_custom);
2025             l_count_after_custom := l_count_after_custom - 1;
2026             cep_standard.debug(l_count_after_custom);
2027         END LOOP;
2028         cep_standard.debug('After cleanup, count='||FND_MSG_PUB.count_msg);
2029 
2030     END IF;
2031     -- 9250566 ADDED 3/6 END --------------------------
2032 
2033     FND_MSG_PUB.Count_And_Get(
2034         p_encoded => FND_API.G_FALSE,
2035         p_count => x_msg_count,
2036         p_data  => x_msg_data);
2037 
2038     IF X_MSG_COUNT > 0 THEN
2039         x_return_status := fnd_api.g_ret_sts_error;
2040     END IF;
2041 
2042     cep_standard.debug('CE_VALIDATE_BANKINFO.ce_validate_bank - P_COUNT: '||X_MSG_COUNT);
2043     cep_standard.debug('X_VALUE_OUT: '|| X_VALUE_OUT);
2044     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank');
2045 
2046 EXCEPTION
2047   WHEN OTHERS THEN
2048     cep_standard.debug('CE_VALIDATE_BANKINFO.ce_validate_bank ' ||X_COUNTRY_NAME );
2049     FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
2050     fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.cd_validate_bank');
2051     fnd_msg_pub.add;
2052     RAISE;
2053 END CE_VALIDATE_BANK;
2054 
2055 
2056 /* --------------------------------------------------------------------
2057 |  PRIVATE PROCEDURE                                                    |
2058 |     CE_PASSED_CHECK                                                   |
2059 |                                                                       |
2060 |  DESCRIPTION                                                          |
2061 |   This procedure is called when the validations are successful        |
2062 |                                                                       |
2063 |  CALLED BY                                                            |
2064 |      CE_VALIDATE_BANK_*       for each country                        |
2065 |      CE_VALIDATE_BRANCH_*     for each country                        |
2066 |      CE_VALIDATE_ACCOUNT_*    for each country                        |
2067 |      CE_VALIDATE_CD_*         for each country                        |
2068  --------------------------------------------------------------------- */
2069 PROCEDURE CE_PASSED_CHECK (
2070         Xi_Field    IN VARCHAR2,
2071         Xi_Country  IN VARCHAR2
2072 ) AS
2073 BEGIN
2074     cep_standard.debug('CE_VALIDATE_'||xi_field
2075                         ||'_'||xi_country||' : passed_check');
2076 END CE_PASSED_CHECK;
2077 
2078 /* --------------------------------------------------------------------
2079 |  PRIVATE PROCEDURE                                                    |
2080 |     CE_FAILED_CHECK                                                   |
2081 |                                                                       |
2082 |  DESCRIPTION                                                          |
2083 |  This procedure populates the FND message queue with the appropriate  |
2084 |  error message for any country-specific validation failure            |
2085 |                                                                       |
2086 |  CALLED BY                                                            |
2087 |      CE_VALIDATE_BANK_*       for each country                        |
2088 |      CE_VALIDATE_BRANCH_*     for each country                        |
2089 |      CE_VALIDATE_ACCOUNT_*    for each country                        |
2090 |      CE_VALIDATE_CD_*         for each country                        |
2091  --------------------------------------------------------------------- */
2092 PROCEDURE CE_FAILED_CHECK (
2093         p_Field IN VARCHAR2,
2094         p_Error IN VARCHAR2,
2095         p_Token IN VARCHAR2 default NULL
2096 ) AS
2097 
2098     field_token   VARCHAR2(100) DEFAULT NULL;
2099     field_name    VARCHAR2(100) DEFAULT NULL;
2100     mesg_name     VARCHAR2(100) DEFAULT NULL;
2101     length_val    VARCHAR2(100) DEFAULT NULL;
2102 BEGIN
2103     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_FAILED_CHECK');
2104 
2105     -- Setting the field name as per call --
2106     IF    p_Field = 'ACCOUNT_NUM'    THEN field_token := 'CE_TOKEN_ACCOUNT_NUM';
2107     ELSIF p_Field = 'ACCOUNT_SUFFIX' THEN field_token := 'CE_TOKEN_ACCOUNT_SUFFIX';
2108     ELSIF p_Field = 'BANK_NUM'       THEN field_token := 'CE_TOKEN_BANK_NUM';
2109     ELSIF p_Field = 'BRANCH_NUM'     THEN field_token := 'CE_TOKEN_BRANCH_NUM';
2110     ELSIF p_Field = 'CHECK_DIGIT'    THEN field_token := 'CE_TOKEN_CHECK_DIGIT';
2111     ELSIF p_Field = 'COMPANY_CODE'   THEN field_token := 'CE_TOKEN_COMPANY_CODE';
2112     ELSIF p_Field = 'TAX_PAYER_ID'   THEN field_token := 'CE_TOKEN_TAX_PAYER_ID';
2113     ELSIF p_Field = 'ROUTE_NUM'      THEN field_token := 'CE_TOKEN_BRANCH_NUM_US';
2114     END IF;
2115 
2116     cep_standard.debug('field_token = '||field_token);
2117     -- Get field name from values stored in FND_NEW_MESSAGES --
2118     field_name := fnd_message.get_string('CE',field_token);
2119     cep_standard.debug('field_name = '||field_name);
2120 
2121     -- Setting the error message name as per call --
2122     IF    p_Error = 'LENGTH'              THEN mesg_name := 'CE_FIELD_INVALID_LEN';
2123     ELSIF p_Error = 'LENGTH_MAX'          THEN mesg_name := 'CE_FIELD_INVALID_MAX_LEN';
2124     ELSIF p_Error = 'LENGTH_MIN'          THEN mesg_name := 'CE_FIELD_INVALID_MIN_LEN';
2125     ELSIF p_Error = 'NUMERIC'             THEN mesg_name := 'CE_FIELD_INVALID_NUMERIC';
2126     ELSIF p_Error = 'ALPHANUM'            THEN mesg_name := 'CE_FIELD_INVALID_ALPHANUM'; -- 9537127: Added
2127     ELSIF p_Error = 'CD_FAILED'           THEN mesg_name := 'CE_FIELD_FAILED_VAL';
2128     ELSIF p_Error = 'POST_GIRO'           THEN mesg_name := 'CE_FIELD_INVALID_PG';
2129     ELSIF p_Error = 'INVALID_FORMAT'      THEN mesg_name := 'CE_FIELD_INVALID_FORMAT';
2130     ELSIF p_Error = 'INVALID_RTN'         THEN mesg_name := 'CE_FIELD_INVALID_RTN';
2131     END IF;
2132 
2133     cep_standard.debug('mesg_name = '||mesg_name);
2134     -- set the value for the tokens and add message to FND_MSG_PUB --
2135 	FND_MESSAGE.set_name('CE', mesg_name);
2136     FND_MESSAGE.set_token('FIELD', field_name, true);
2137 
2138     -- For length related errors, need to populate the VALUE token --
2139     IF p_Token IS NOT NULL
2140     THEN
2141         -- get the number for VALUE token from lookups
2142         BEGIN
2143             SELECT meaning
2144             INTO length_val
2145             FROM fnd_lookup_values_vl
2146             WHERE lookup_type = 'NUMBERS'
2147             AND lookup_code = p_Token;
2148         EXCEPTION
2149             WHEN NO_DATA_FOUND THEN
2150                 length_val := NULL;
2151         END;
2152         -- set the token --
2153         FND_MESSAGE.set_token('VALUE', length_val, true);
2154     END IF;
2155 
2156     -- populate the message queue
2157     FND_MSG_PUB.add;
2158 
2159     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_FAILED_CHECK');
2160 END CE_FAILED_CHECK;
2161 
2162 /* --------------------------------------------------------------------
2163 |  PRIVATE PROCEDURE                                                    |
2164 |     CE_FAILED_MANDATORY                                               |
2165 |                                                                       |
2166 |  DESCRIPTION                                                          |
2167 |  This procedure populates the FND message queue with the appropriate  |
2168 |  error message for any country-specific validation field value not    |
2169 |  entered.                                                             |
2170 |                                                                       |
2171 |  CALLED BY                                                            |
2172 |      CE_VALIDATE_BANK_*       for each country                        |
2173 |      CE_VALIDATE_BRANCH_*     for each country                        |
2174 |      CE_VALIDATE_ACCOUNT_*    for each country                        |
2175 |      CE_VALIDATE_CD_*         for each country                        |
2176  --------------------------------------------------------------------- */
2177 PROCEDURE CE_FAILED_MANDATORY (
2178         p_Field IN VARCHAR2
2179 ) AS
2180 
2181     mesg_name VARCHAR2(30);
2182 
2183 BEGIN
2184     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_FAILED_MANDATORY');
2185 
2186     IF    p_Field = 'BANK_NUM'        THEN mesg_name := 'CE_ENTER_BANK_NUM';
2187     ELSIF p_Field = 'BRANCH_NUM'      THEN mesg_name := 'CE_ENTER_BRANCH_NUM';
2188     ELSIF p_Field = 'TAX_PAYER_ID'    THEN mesg_name := 'CE_ENTER_TAX_PAYER_ID';
2189     ELSIF p_Field = 'BRANCH_NAME_ALT' THEN mesg_name := 'CE_ENTER_BRANCH_NAME_ALT';
2190     ELSIF p_Field = 'BANK_NAME_ALT'   THEN mesg_name := 'CE_ENTER_BANK_NAME_ALT';
2191     ELSIF p_Field = 'ACCOUNT_TYPE'    THEN mesg_name := 'CE_ENTER_ACCOUNT_TYPE';
2192     ELSIF p_Field = 'ACCOUNT_SUFFIX'  THEN mesg_name := 'CE_ENTER_ACCOUNT_SUFFIX';
2193     END IF;
2194 
2195     cep_standard.debug('mesg_name = '||mesg_name);
2196 
2197     FND_MESSAGE.set_name('CE', mesg_name);
2198     FND_MSG_PUB.add;
2199 
2200     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_FAILED_MANDATORY');
2201 END CE_FAILED_MANDATORY;
2202 
2203 /*  --------------------------------------------------------------------
2204 |  PRIVATE PROCEDURE                                                    |
2205 |      CE_VALIDATE_CD_*                                                 |
2206 |                                                                       |
2207 |  CALLED BY                                                            |
2208 |      CE_VALIDATE_CD                                                   |
2209 |                                                                       |
2210 |  DESCRIPTION                                                          |
2211 |      Check Digit PROCEDURES, Validations 1 or more of the following:  |
2212 |      1. Check Digit length                                            |
2213 |      2. Check Digit Composition                                       |
2214 |      2. Check Digit Algorithm                                         |
2215 |                                                                       |
2216  --------------------------------------------------------------------- */
2217 
2218 /* ---------------------------------------------------------------------
2219 | CD Validation: PORTUGAL                                               |
2220  ----------------------------------------------------------------------*/
2221 PROCEDURE CE_VALIDATE_CD_PT(
2222         Xi_CD in varchar2,
2223         Xi_PASS_MAND_CHECK in varchar2,
2224         Xi_X_BANK_NUMBER in varchar2,
2225         Xi_X_BRANCH_NUMBER in varchar2,
2226         Xi_X_ACCOUNT_NUMBER in varchar2
2227 ) AS
2228 
2229     numeric_result_cd   VARCHAR2(40);
2230     cal_cd              NUMBER(10);
2231     CONCED_NUMBER       VARCHAR2(30);
2232     cd_value            VARCHAR2(20);
2233     bk_value            VARCHAR2(30);
2234     ac_value            VARCHAR2(30);
2235     br_value            VARCHAR2(30);
2236 
2237 BEGIN
2238     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_cd_pt');
2239 
2240     -- 7582842: Disable validations using profile option
2241     IF CE_DISABLE_VALIDATION THEN
2242         cep_standard.debug('validations disabled. no check done');
2243         RETURN;
2244     END IF;
2245 
2246     CD_VALUE := upper(replace(Xi_CD,' ',''));
2247     bk_value := upper(replace(replace(Xi_X_BANK_NUMBER,' ',''),'-',''));
2248     br_value := upper(replace(replace(Xi_X_BRANCH_NUMBER,' ',''),'-',''));
2249     ac_value := upper(replace(replace(Xi_X_ACCOUNT_NUMBER,' ',''),'-',''));
2250 
2251     IF length(CD_VALUE) = 2
2252     THEN /* length is ok */
2253         numeric_result_cd := ce_check_numeric(CD_VALUE,1,length(CD_VALUE));
2254         IF  numeric_result_cd = '0'
2255         THEN /* its numeric so continue  */
2256             CONCED_NUMBER := bk_value||br_value||ac_value||CD_VALUE;
2257             cal_cd := 98 - mod(( (to_number(substr(CONCED_NUMBER,19,1)) * 3)
2258                         + (to_number(substr(CONCED_NUMBER,18,1)) * 30)
2259                         + (to_number(substr(CONCED_NUMBER,17,1)) * 9)
2260                         + (to_number(substr(CONCED_NUMBER,16,1)) * 90)
2261                         + (to_number(substr(CONCED_NUMBER,15,1)) * 27)
2262                         + (to_number(substr(CONCED_NUMBER,14,1)) * 76)
2263                         + (to_number(substr(CONCED_NUMBER,13,1)) * 81)
2264                         + (to_number(substr(CONCED_NUMBER,12,1)) * 34)
2265                         + (to_number(substr(CONCED_NUMBER,11,1)) * 49)
2266                         + (to_number(substr(CONCED_NUMBER,10,1)) * 5)
2267                         + (to_number(substr(CONCED_NUMBER,9,1)) * 50)
2268                         + (to_number(substr(CONCED_NUMBER,8,1)) * 15)
2269                         + (to_number(substr(CONCED_NUMBER,7,1)) * 53)
2270                         + (to_number(substr(CONCED_NUMBER,6,1)) * 45)
2271                         + (to_number(substr(CONCED_NUMBER,5,1)) * 62)
2272                         + (to_number(substr(CONCED_NUMBER,4,1)) * 38)
2273                         + (to_number(substr(CONCED_NUMBER,3,1)) * 89)
2274                         + (to_number(substr(CONCED_NUMBER,2,1)) * 17)
2275                         + (to_number(substr(CONCED_NUMBER,1,1)) * 73)),97);
2276 
2277             IF CD_VALUE = cal_cd
2278             THEN
2279                 ce_passed_check('CD','PT');
2280             ElSE
2281                 ce_failed_check('CHECK_DIGIT','CD_FAILED');
2282             END IF; /* end of validation check */
2283 
2284         ELSE
2285             ce_failed_check('CHECK_DIGIT','NUMERIC');
2286         END IF; /* end of numeric check */
2287     ELSE
2288         ce_failed_check('CHECK_DIGIT','LENGTH','2');
2289     END IF; /* end of length check  */
2290 
2291     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_cd_pt');
2292 END CE_VALIDATE_CD_PT;
2293 
2294 
2295 /* ---------------------------------------------------------------------
2296 | CD Validation: SPAIN                                                  |
2297  ----------------------------------------------------------------------*/
2298 PROCEDURE CE_VALIDATE_CD_ES(
2299     Xi_CD in varchar2,
2300     Xi_PASS_MAND_CHECK in varchar2,
2301     Xi_X_BANK_NUMBER in varchar2,
2302     Xi_X_BRANCH_NUMBER in varchar2,
2303     Xi_X_ACCOUNT_NUMBER in varchar2
2304 ) AS
2305 
2306     numeric_result_cd   VARCHAR2(40);
2307     cd_1                NUMBER(10);
2308     cd_2                NUMBER(10);
2309     cd_value            VARCHAR2(20);
2310     bk_value            VARCHAR2(30);
2311     ac_value            VARCHAR2(30);
2312     br_value            VARCHAR2(30);
2313 
2314 BEGIN
2315     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_cd_es');
2316 
2317     -- 7582842: Disable validations using profile option
2318     IF CE_DISABLE_VALIDATION THEN
2319         cep_standard.debug('validations disabled. no check done');
2320         RETURN;
2321     END IF;
2322 
2323     CD_VALUE := upper(Xi_CD);
2324     bk_value := upper(replace(replace(Xi_X_BANK_NUMBER,' ',''),'-',''));
2325     br_value := upper(replace(replace(Xi_X_BRANCH_NUMBER,' ',''),'-',''));
2326     ac_value := upper(replace(replace(Xi_X_ACCOUNT_NUMBER,' ',''),'-',''));
2327 
2328 	--Bug 7184848: Fixed value numeric_result_cd not being set.
2329 	numeric_result_cd := ce_check_numeric(CD_VALUE,1,length(CD_VALUE));
2330     IF numeric_result_cd = '0'
2331     THEN /* its numeric so continue  */
2332         cd_1  := 11 - mod(((to_number(substr(Xi_X_BANK_NUMBER,1,1)) * 4)
2333                     + (to_number(substr(Xi_X_BANK_NUMBER,2,1)) * 8)
2334                     + (to_number(substr(Xi_X_BANK_NUMBER,3,1)) * 5)
2335                     + (to_number(substr(Xi_X_BANK_NUMBER,4,1)) * 10)
2336                     + (to_number(substr(Xi_X_BRANCH_NUMBER,1,1)) * 9)
2337                     + (to_number(substr(Xi_X_BRANCH_NUMBER,2,1)) * 7)
2338                     + (to_number(substr(Xi_X_BRANCH_NUMBER,3,1)) * 3)
2339                     + (to_number(substr(Xi_X_BRANCH_NUMBER,4,1)) * 6)),11);
2340 
2341         IF (cd_1 = 10) THEN
2342             cd_1 := 1;
2343         ELSIF (cd_1 = 11) THEN
2344             cd_1 := 0;
2345         END IF;
2346 
2347         cd_2  := 11 - mod(((to_number(substr(Xi_X_ACCOUNT_NUMBER,1,1)) * 1)
2348                     + (to_number(substr(Xi_X_ACCOUNT_NUMBER,2,1)) * 2)
2349                     + (to_number(substr(Xi_X_ACCOUNT_NUMBER,3,1)) * 4)
2350                     + (to_number(substr(Xi_X_ACCOUNT_NUMBER,4,1)) * 8)
2351                     + (to_number(substr(Xi_X_ACCOUNT_NUMBER,5,1)) * 5)
2352                     + (to_number(substr(Xi_X_ACCOUNT_NUMBER,6,1)) * 10)
2353                     + (to_number(substr(Xi_X_ACCOUNT_NUMBER,7,1)) * 9)
2354                     + (to_number(substr(Xi_X_ACCOUNT_NUMBER,8,1)) * 7)
2355                     + (to_number(substr(Xi_X_ACCOUNT_NUMBER,9,1)) * 3)
2356                     + (to_number(substr(Xi_X_ACCOUNT_NUMBER,10,1)) * 6)),11);
2357 
2358         IF (cd_2 = 10) THEN
2359             cd_2 := 1;
2360         ELSIF (cd_2 = 11) THEN
2361             cd_2 := 0;
2362         END IF;
2363 
2364         IF (cd_1 = substr(CD_VALUE,1,1) AND cd_2 = substr(CD_VALUE,2,1))
2365         OR (CD_VALUE = '00')
2366         THEN    /* check digit checks out */
2367             ce_passed_check('CD','ES');
2368         ELSE
2369             ce_failed_check('CHECK_DIGIT','CD_FAILED');
2370         END IF; /* end of check digit validation */
2371 
2372     ELSE
2373         ce_failed_check('CHECK_DIGIT','NUMERIC');
2374     END IF;  /* end of numeric check */
2375 
2376     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_cd_es');
2377 END CE_VALIDATE_CD_ES;
2378 
2379 /* ---------------------------------------------------------------------
2380 | CD Validation: FRANCE                                                 |
2381  ----------------------------------------------------------------------*/
2382 PROCEDURE CE_VALIDATE_CD_FR(
2383         Xi_CD               in varchar2,
2384         Xi_PASS_MAND_CHECK  in varchar2,
2385         Xi_X_BANK_NUMBER    in varchar2,
2386         Xi_X_BRANCH_NUMBER  in varchar2,
2387         Xi_X_ACCOUNT_NUMBER in varchar2
2388 ) AS
2389     numeric_result_bk   varchar2(40);
2390     numeric_result_br   varchar2(40);
2391     numeric_result_cd   varchar2(40);
2392     numeric_result_ac   varchar2(40);
2393     calc_value          number(30);
2394     cd_value            varchar2(20);
2395     bk_value            varchar2(30);
2396     ac_value            varchar2(30);
2397     br_value            varchar2(30);
2398 
2399 
2400 BEGIN
2401     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_cd_fr');
2402 
2403     -- 7582842: Disable validations using profile option
2404     IF CE_DISABLE_VALIDATION THEN
2405         cep_standard.debug('validations disabled. no check done');
2406         RETURN;
2407     END IF;
2408 
2409     CD_VALUE := upper(Xi_CD);
2410     bk_value := replace(replace(upper(Xi_X_BANK_NUMBER),' ',''),'-','');
2411     br_value := replace(replace(upper(Xi_X_BRANCH_NUMBER),' ',''),'-','');
2412     ac_value := translate(upper(Xi_X_ACCOUNT_NUMBER) ,
2413                         'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
2414                         '12345678912345678923456789');
2415 	ac_value := replace(replace(ac_value,' ',''),'-','');
2416 
2417     IF length(CD_VALUE) = 2
2418     THEN    /* length is ok */
2419         numeric_result_cd := ce_check_numeric(CD_VALUE,1,length(CD_VALUE));
2420         IF numeric_result_cd = '0'
2421         THEN
2422             /* its numeric so continue  */
2423             calc_value := mod(to_number(bk_value||br_value||ac_value||cd_value),97);
2424             IF calc_value = 0
2425             THEN
2426                 ce_passed_check('CD','FR');
2427             ELSE
2428                 ce_failed_check('CHECK_DIGIT','CD_FAILED');
2429             END IF; /* end of check digit validation */
2430         ELSE
2431             ce_failed_check('CHECK_DIGIT','NUMERIC');
2432         END IF;  /* end of numeric check */
2433     ELSE
2434         ce_failed_check('CHECK_DIGIT','LENGTH','2');
2435     END IF;  /* end of length check */
2436 
2437     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_cd_fr');
2438 
2439 END CE_VALIDATE_CD_FR;
2440 
2441 /* ---------------------------------------------------------------------
2442 | CD Validation: GERMANY                                                |
2443  ----------------------------------------------------------------------*/
2444 PROCEDURE CE_VALIDATE_CD_DE(
2445     Xi_CD in varchar2,
2446     Xi_X_ACCOUNT_NUMBER in varchar2
2447 ) AS
2448     numeric_result_cd   VARCHAR2(40);
2449     ret_value           BOOLEAN;
2450     cd_value            VARCHAR2(50);
2451 	ac_value            VARCHAR2(50);
2452 
2453 BEGIN
2454     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_CD_DE');
2455 
2456     -- 7582842: Disable validations using profile option
2457     IF CE_DISABLE_VALIDATION THEN
2458         cep_standard.debug('validations disabled. no check done');
2459         RETURN;
2460     END IF;
2461 
2462     cd_value := upper(Xi_CD);
2463 
2464     IF (cd_value IS NOT NULL)
2465     THEN    /* only validate if a value has been entered */
2466         IF length(cd_value) = 1
2467         THEN    /* length is ok */
2468             numeric_result_cd := ce_check_numeric(CD_VALUE,1,length(CD_VALUE));
2469             IF numeric_result_cd = '0'
2470             THEN
2471                 /*it is numeric so continue*/
2472                 -- compare CD with account number --
2473 			    ac_value := upper(replace(Xi_X_ACCOUNT_NUMBER,' ',''));
2474 			    ac_value := upper(replace(ac_value,'-',''));
2475                 ret_value := compare_account_num_and_cd(ac_value,cd_value,1,0);
2476             ELSE
2477                 ce_failed_check('CHECK_DIGIT','NUMERIC');
2478             END IF; /* end of numeric check */
2479         ELSE
2480             ce_failed_check('CHECK_DIGIT','LENGTH','1');
2481         END IF;  /* end of length check */
2482     END IF;
2483 
2484     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_CD_DE');
2485 END CE_VALIDATE_CD_DE;
2486 
2487 
2488 /* ---------------------------------------------------------------------
2489 | CD Validation: GREECE                                                 |
2490  ----------------------------------------------------------------------*/
2491 procedure CE_VALIDATE_CD_GR(
2492         Xi_CD               in varchar2,
2493         Xi_PASS_MAND_CHECK  in varchar2,
2494         Xi_X_BANK_NUMBER    in varchar2,
2495         Xi_X_BRANCH_NUMBER  in varchar2,
2496         Xi_X_ACCOUNT_NUMBER in varchar2
2497 ) AS
2498 
2499     numeric_result_cd   VARCHAR2(40);
2500     calc_value          NUMBER(30);
2501     cd_value            VARCHAR2(20);
2502 
2503 BEGIN
2504     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_cd_gr');
2505 
2506     -- 7582842: Disable validations using profile option
2507     IF CE_DISABLE_VALIDATION THEN
2508         cep_standard.debug('validations disabled. no check done');
2509         RETURN;
2510     END IF;
2511 
2512     CD_VALUE := upper(Xi_CD);
2513     IF length(CD_VALUE) = 1
2514     THEN    /* length is ok */
2515         numeric_result_cd := ce_check_numeric(CD_VALUE,1,length(CD_VALUE));
2516         IF numeric_result_cd = '0'
2517         THEN
2518             ce_passed_check('CD','GR');
2519         ELSE
2520             ce_failed_check('CHECK_DIGIT','NUMERIC');
2521         END IF; /* end of numeric check */
2522     ELSE
2523         ce_failed_check('CHECK_DIGIT','LENGTH','1');
2524     END IF;  /* end of length check */
2525 
2526     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_cd_gr');
2527 END CE_VALIDATE_CD_GR;
2528 
2529 /* ---------------------------------------------------------------------
2530 | CD Validation: ICELAND                                                |
2531  ----------------------------------------------------------------------*/
2532 PROCEDURE CE_VALIDATE_CD_IS(
2533         Xi_CD in varchar2,
2534         Xi_X_ACCOUNT_NUMBER in varchar2
2535 ) AS
2536 
2537     numeric_result_cd   VARCHAR2(50);
2538     ret_val             BOOLEAN;
2539     cd_value            VARCHAR2(50);
2540     ac_value            VARCHAR2(50);
2541 
2542 BEGIN
2543     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_cd_is');
2544 
2545     -- 7582842: Disable validations using profile option
2546     IF CE_DISABLE_VALIDATION THEN
2547         cep_standard.debug('validations disabled. no check done');
2548         RETURN;
2549     END IF;
2550 
2551     CD_VALUE := upper(replace(Xi_CD,' ',''));
2552     ac_value := upper(replace(Xi_X_ACCOUNT_NUMBER,' ',''));
2553     ac_value := upper(replace(ac_value,'-',''));
2554 
2555     IF length(CD_VALUE) = 1
2556     THEN    /* length is ok */
2557         numeric_result_cd := ce_check_numeric(CD_VALUE,1,length(CD_VALUE));
2558         IF numeric_result_cd = '0'
2559         THEN    /* it is numeric so continue */
2560             ret_val := compare_account_num_and_cd(ac_value, CD_VALUE, 1,1);
2561         ELSE
2562             ce_failed_check('CHECK_DIGIT','NUMERIC');
2563         END IF; /* end of numeric check */
2564     ELSE
2565         ce_failed_check('CHECK_DIGIT','LENGTH','1');
2566     END IF;  /* end of length check */
2567 
2568     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_cd_is');
2569 END CE_VALIDATE_CD_IS;
2570 
2571 /* ---------------------------------------------------------------------
2572 | CD Validation: ITALY                                                  |
2573  ----------------------------------------------------------------------*/
2574 PROCEDURE CE_VALIDATE_CD_IT(
2575         Xi_CD in varchar2,
2576         Xi_PASS_MAND_CHECK in varchar2,
2577         Xi_X_BANK_NUMBER in varchar2,
2578         Xi_X_BRANCH_NUMBER in varchar2,
2579         Xi_X_ACCOUNT_NUMBER in varchar2
2580 ) AS
2581     numeric_result_bk   varchar2(40);
2582     numeric_result_br   varchar2(40);
2583     numeric_result_cd   varchar2(40);
2584     numeric_result_ac   varchar2(40);
2585     CONCED_NUMBER       varchar2(30);
2586     calc_value          varchar2(30);
2587     calc_value1         number;
2588     calc_value2         number;
2589     calc_value3         number;
2590     cd_value            varchar2(20);
2591     bk_value            varchar2(30);
2592     ac_value            varchar2(30);
2593     br_value            varchar2(30);
2594 
2595                            /**************************/
2596                            /* SUB-PROCEDURES SECTION */
2597                            /**************************/
2598 FUNCTION get_odd_value(odd_value_in varchar2)
2599 RETURN NUMBER IS
2600   odd_value_out number;
2601 BEGIN
2602     IF    odd_value_in in ('A', '0') THEN     odd_value_out := 1;
2603     ELSIF odd_value_in in ('B', '1') THEN     odd_value_out := 0;
2604     ELSIF odd_value_in in ('C', '2') THEN     odd_value_out := 5;
2605     ELSIF odd_value_in in ('D', '3') THEN     odd_value_out := 7;
2606     ELSIF odd_value_in in ('E', '4') THEN     odd_value_out := 9;
2607     ELSIF odd_value_in in ('F', '5') THEN     odd_value_out := 13;
2608     ELSIF odd_value_in in ('G', '6') THEN     odd_value_out := 15;
2609     ELSIF odd_value_in in ('H', '7') THEN     odd_value_out := 17;
2610     ELSIF odd_value_in in ('I', '8') THEN     odd_value_out := 19;
2611     ELSIF odd_value_in in ('J', '9') THEN     odd_value_out := 21;
2612     ELSIF odd_value_in = 'K' THEN     odd_value_out := 2;
2613     ELSIF odd_value_in = 'L' THEN     odd_value_out := 4;
2614     ELSIF odd_value_in = 'M' THEN     odd_value_out := 18;
2615     ELSIF odd_value_in = 'N' THEN     odd_value_out := 20;
2616     ELSIF odd_value_in = 'O' THEN     odd_value_out := 11;
2617     ELSIF odd_value_in = 'P' THEN     odd_value_out := 3;
2618     ELSIF odd_value_in = 'Q' THEN     odd_value_out := 6;
2619     ELSIF odd_value_in = 'R' THEN     odd_value_out := 8;
2620     ELSIF odd_value_in = 'S' THEN     odd_value_out := 12;
2621     ELSIF odd_value_in = 'T' THEN     odd_value_out := 14;
2622     ELSIF odd_value_in = 'U' THEN     odd_value_out := 16;
2623     ELSIF odd_value_in = 'V' THEN     odd_value_out := 10;
2624     ELSIF odd_value_in = 'W' THEN     odd_value_out := 22;
2625     ELSIF odd_value_in = 'X' THEN     odd_value_out := 25;
2626     ELSIF odd_value_in = 'Y' THEN     odd_value_out := 24;
2627     ELSIF odd_value_in = 'Z' THEN     odd_value_out := 23;
2628   END IF;
2629   RETURN(odd_value_out);
2630 END get_odd_value;
2631 
2632 FUNCTION get_even_value(even_value_in varchar2)
2633 RETURN NUMBER IS
2634   even_value_out number;
2635 BEGIN
2636     IF    even_value_in IN ('A','0') THEN     even_value_out := 0;
2637     ELSIF even_value_in IN ('B','1') THEN     even_value_out := 1;
2638     ELSIF even_value_in IN ('C','2') THEN     even_value_out := 2;
2639     ELSIF even_value_in IN ('D','3') THEN     even_value_out := 3;
2640     ELSIF even_value_in IN ('E','4') THEN     even_value_out := 4;
2641     ELSIF even_value_in IN ('F','5') THEN     even_value_out := 5;
2642     ELSIF even_value_in IN ('G','6') THEN     even_value_out := 6;
2643     ELSIF even_value_in IN ('H','7') THEN     even_value_out := 7;
2644     ELSIF even_value_in IN ('I','8') THEN     even_value_out := 8;
2645     ELSIF even_value_in IN ('J','9') THEN     even_value_out := 9;
2646     ELSIF even_value_in = 'K' THEN     even_value_out := 10;
2647     ELSIF even_value_in = 'L' THEN     even_value_out := 11;
2648     ELSIF even_value_in = 'M' THEN     even_value_out := 12;
2649     ELSIF even_value_in = 'N' THEN     even_value_out := 13;
2650     ELSIF even_value_in = 'O' THEN     even_value_out := 14;
2651     ELSIF even_value_in = 'P' THEN     even_value_out := 15;
2652     ELSIF even_value_in = 'Q' THEN     even_value_out := 16;
2653     ELSIF even_value_in = 'R' THEN     even_value_out := 17;
2654     ELSIF even_value_in = 'S' THEN     even_value_out := 18;
2655     ELSIF even_value_in = 'T' THEN     even_value_out := 19;
2656     ELSIF even_value_in = 'U' THEN     even_value_out := 20;
2657     ELSIF even_value_in = 'V' THEN     even_value_out := 21;
2658     ELSIF even_value_in = 'W' THEN     even_value_out := 22;
2659     ELSIF even_value_in = 'X' THEN     even_value_out := 23;
2660     ELSIF even_value_in = 'Y' THEN     even_value_out := 24;
2661     ELSIF even_value_in = 'Z' THEN     even_value_out := 25;
2662     END IF;
2663     RETURN(even_value_out);
2664 END get_even_value;
2665 
2666 FUNCTION get_result_cd(remainder_value_in number)
2667 RETURN varchar2 IS
2668   remainder_value_out VARCHAR2(1);
2669 BEGIN
2670     IF    remainder_value_in =  '0' THEN     remainder_value_out := 'A';
2671     ELSIF remainder_value_in =  '1' THEN     remainder_value_out := 'B';
2672     ELSIF remainder_value_in =  '2' THEN     remainder_value_out := 'C';
2673     ELSIF remainder_value_in =  '3' THEN     remainder_value_out := 'D';
2674     ELSIF remainder_value_in =  '4' THEN     remainder_value_out := 'E';
2675     ELSIF remainder_value_in =  '5' THEN     remainder_value_out := 'F';
2676     ELSIF remainder_value_in =  '6' THEN     remainder_value_out := 'G';
2677     ELSIF remainder_value_in =  '7' THEN     remainder_value_out := 'H';
2678     ELSIF remainder_value_in =  '8' THEN     remainder_value_out := 'I';
2679     ELSIF remainder_value_in =  '9' THEN     remainder_value_out := 'J';
2680     ELSIF remainder_value_in =  '10' THEN     remainder_value_out := 'K';
2681     ELSIF remainder_value_in =  '11' THEN     remainder_value_out := 'L';
2682     ELSIF remainder_value_in =  '12' THEN     remainder_value_out := 'M';
2683     ELSIF remainder_value_in =  '13' THEN     remainder_value_out := 'N';
2684     ELSIF remainder_value_in =  '14' THEN     remainder_value_out := 'O';
2685     ELSIF remainder_value_in =  '15' THEN     remainder_value_out := 'P';
2686     ELSIF remainder_value_in =  '16' THEN     remainder_value_out := 'Q';
2687     ELSIF remainder_value_in =  '17' THEN     remainder_value_out := 'R';
2688     ELSIF remainder_value_in =  '18' THEN     remainder_value_out := 'S';
2689     ELSIF remainder_value_in =  '19' THEN     remainder_value_out := 'T';
2690     ELSIF remainder_value_in =  '20' THEN     remainder_value_out := 'U';
2691     ELSIF remainder_value_in =  '21' THEN     remainder_value_out := 'V';
2692     ELSIF remainder_value_in =  '22' THEN     remainder_value_out := 'W';
2693     ELSIF remainder_value_in =  '23' THEN     remainder_value_out := 'X';
2694     ELSIF remainder_value_in =  '24' THEN     remainder_value_out := 'Y';
2695     ELSIF remainder_value_in =  '25' THEN     remainder_value_out := 'Z';
2696     END IF;
2697     RETURN(remainder_value_out);
2698 END get_result_cd;
2699                            /****************/
2700                            /* MAIN SECTION */
2701                            /****************/
2702 BEGIN
2703 
2704     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_cd_it');
2705     cep_standard.debug('Xi_X_ACCOUNT_NUMBER: '||Xi_X_ACCOUNT_NUMBER);
2706 
2707     -- 7582842: Disable validations using profile option
2708     IF CE_DISABLE_VALIDATION THEN
2709         cep_standard.debug('validations disabled. no check done');
2710         RETURN;
2711     END IF;
2712 
2713     CD_VALUE := upper(replace(Xi_CD,' ',''));
2714     bk_value := upper(replace(replace(Xi_X_BANK_NUMBER,' ',''),'-',''));
2715     br_value := upper(replace(replace(Xi_X_BRANCH_NUMBER,' ',''),'-',''));
2716     ac_value := upper(replace(replace(Xi_X_ACCOUNT_NUMBER,' ',''),'-',''));
2717 
2718     IF length(CD_VALUE) = 1
2719     THEN    /* length is ok */
2720         CONCED_NUMBER := bk_value||br_value||ac_value;
2721 
2722         calc_value1 := (get_odd_value(substr(conced_number,1,1)) +
2723                         get_even_value(substr(conced_number,2,1)) +
2724                         get_odd_value(substr(conced_number,3,1)) +
2725                         get_even_value(substr(conced_number,4,1)) +
2726                         get_odd_value(substr(conced_number,5,1)) +
2727                         get_even_value(substr(conced_number,6,1)) +
2728                         get_odd_value(substr(conced_number,7,1)) +
2729                         get_even_value(substr(conced_number,8,1)) +
2730                         get_odd_value(substr(conced_number,9,1)) +
2731                         get_even_value(substr(conced_number,10,1)) +
2732                         get_odd_value(substr(conced_number,11,1)) +
2733                         get_even_value(substr(conced_number,12,1)) +
2734                         get_odd_value(substr(conced_number,13,1)) +
2735                         get_even_value(substr(conced_number,14,1)) +
2736                         get_odd_value(substr(conced_number,15,1)) +
2737                         get_even_value(substr(conced_number,16,1)) +
2738                         get_odd_value(substr(conced_number,17,1)) +
2739                         get_even_value(substr(conced_number,18,1)) +
2740                         get_odd_value(substr(conced_number,19,1)) +
2741                         get_even_value(substr(conced_number,20,1)) +
2742                         get_odd_value(substr(conced_number,21,1)) +
2743                         get_even_value(substr(conced_number,22,1))) ;
2744         calc_value2 := nvl(mod(calc_value1,26),0);
2745         calc_value := get_result_cd(calc_value2);
2746 
2747         IF calc_value = CD_VALUE
2748         THEN
2749             ce_passed_check('CD','IT');
2750         ELSE
2751             ce_failed_check('CHECK_DIGIT','CD_FAILED');
2752         END IF; /* end of check digit validation */
2753     ELSE
2754         ce_failed_check('CHECK_DIGIT','LENGTH','1');
2755     END IF;  /* end of length check */
2756 
2757     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_cd_it');
2758 END CE_VALIDATE_CD_IT;
2759 
2760 /* ---------------------------------------------------------------------
2761 | CD Validation: LUXEMBOURG                                             |
2762  ----------------------------------------------------------------------*/
2763 PROCEDURE CE_VALIDATE_CD_LU(
2764         Xi_CD               in varchar2,
2765         Xi_X_BANK_NUMBER    in varchar2,
2766         Xi_X_BRANCH_NUMBER  in varchar2,
2767         Xi_X_ACCOUNT_NUMBER in varchar2
2768 ) AS
2769     numeric_result_cd   VARCHAR2(40);
2770     account_value       VARCHAR2(30);
2771     check_digit         VARCHAR2(2);
2772 
2773 BEGIN
2774     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_cd_lu');
2775 
2776     -- 7582842: Disable validations using profile option
2777     IF CE_DISABLE_VALIDATION THEN
2778         cep_standard.debug('validations disabled. no check done');
2779         RETURN;
2780     END IF;
2781 
2782     ACCOUNT_VALUE := lpad(Xi_X_ACCOUNT_NUMBER,12,0);
2783     CHECK_DIGIT := Xi_CD;
2784 
2785     IF length(CHECK_DIGIT) = 2
2786     THEN /*length is ok*/
2787         numeric_result_cd := ce_check_numeric(CHECK_DIGIT,1,length(CHECK_DIGIT));
2788         IF numeric_result_cd = '0'
2789         THEN
2790             ce_passed_check('CD','LU');
2791         ELSE
2792             ce_failed_check('CHECK_DIGIT','NUMERIC');
2793         END IF;  /* end of numeric check */
2794     ELSE
2795         ce_failed_check('CHECK_DIGIT','LENGTH','2');
2796     END IF;  /* end of length check */
2797 
2798     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_cd_lu');
2799 END CE_VALIDATE_CD_LU;
2800 
2801 /* ---------------------------------------------------------------------
2802 | CD Validation: SWEDEN                                                 |
2803  ----------------------------------------------------------------------*/
2804 procedure CE_VALIDATE_CD_SE(
2805         Xi_CD               in varchar2,
2806         Xi_X_ACCOUNT_NUMBER in varchar2
2807 ) AS
2808     numeric_result_cd   varchar2(40);
2809     calc_value          number(30);
2810     cd_value            varchar2(20);
2811 
2812 BEGIN
2813     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_cd_se');
2814 
2815     -- 7582842: Disable validations using profile option
2816     IF CE_DISABLE_VALIDATION THEN
2817         cep_standard.debug('validations disabled. no check done');
2818         RETURN;
2819     END IF;
2820 
2821     CD_VALUE := upper(Xi_CD);
2822 
2823     IF length(CD_VALUE) = 1
2824     THEN    /* length is ok */
2825 
2826         numeric_result_cd := ce_check_numeric(CD_VALUE,1,length(CD_VALUE));
2827         IF numeric_result_cd = '0'
2828         THEN
2829             ce_passed_check('CD','SE');
2830         ELSE
2831             ce_failed_check('CHECK_DIGIT','NUMERIC');
2832         END IF; /* end of numeric check */
2833     ELSE
2834         ce_failed_check('CHECK_DIGIT','LENGTH','1');
2835     END IF;  /* end of length check */
2836 
2837     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_cd_se');
2838 END CE_VALIDATE_CD_SE;
2839 
2840 -- 9249372: Added ce_validate_cd_fi
2841 /* ---------------------------------------------------------------------
2842 | CD Validation: FINLAND                                                |
2843 | 9575010: Check digit is not entered as part of account number         |
2844 | CD algorithm will be applied only if CD, A/C Num and Branch Num are   |
2845 | all entered.
2846  ----------------------------------------------------------------------*/
2847 procedure CE_VALIDATE_CD_FI(
2848         Xi_CD               in varchar2,
2849         Xi_X_BRANCH_NUMBER  in varchar2,
2850         Xi_X_ACCOUNT_NUMBER in varchar2
2851 ) AS
2852 
2853     branch_value      VARCHAR2(30);
2854     account_value     VARCHAR2(30);
2855     check_value       VARCHAR2(30);
2856     check_pad_value   VARCHAR2(30);
2857     int_val           NUMBER;
2858     weighted_sum      NUMBER;
2859     digit             NUMBER;
2860 BEGIN
2861     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_cd_fi');
2862 
2863     -- 7582842: Disable validations using profile option
2864     IF CE_DISABLE_VALIDATION THEN
2865         cep_standard.debug('validations disabled. no check done');
2866         RETURN;
2867     END IF;
2868 
2869     branch_value := ce_remove_formats(Xi_X_Branch_Number);
2870     account_value := ce_remove_formats(Xi_X_Account_Number);
2871 
2872     IF length(Xi_CD) = 1
2873     THEN
2874         -- check digit validation to be applied only if branch number available.
2875         IF(Xi_X_BRANCH_NUMBER IS NOT NULL)
2876         THEN
2877             check_value := branch_value || account_value || Xi_CD;
2878             IF (SubStr(account_value,1,1) IN ('4','5'))
2879             THEN
2880                 check_pad_value := SubStr(check_value,1,7) ||
2881                 LPad(SubStr(check_value,8,Length(check_value)),7,'0');
2882             ELSE
2883                 check_pad_value := SubStr(check_value,1,6) ||
2884                 LPad(SubStr(check_value,7,Length(check_value)),8,'0');
2885             END IF;
2886 
2887             cep_standard.debug('check_pad_value='||check_pad_value);
2888 
2889             -- Luhn Mod 10 Alogrithm
2890             int_val := To_Number(
2891                         To_Char(SubStr(check_pad_value,1,1) *2)||
2892                         To_Char(SubStr(check_pad_value,2,1) *1)||
2893                         To_Char(SubStr(check_pad_value,3,1) *2)||
2894                         To_Char(SubStr(check_pad_value,4,1) *1)||
2895                         To_Char(SubStr(check_pad_value,5,1) *2)||
2896                         To_Char(SubStr(check_pad_value,6,1) *1)||
2897                         To_Char(SubStr(check_pad_value,7,1) *2)||
2898                         To_Char(SubStr(check_pad_value,8,1) *1)||
2899                         To_Char(SubStr(check_pad_value,9,1) *2)||
2900                         To_Char(SubStr(check_pad_value,10,1)*1)||
2901                         To_Char(SubStr(check_pad_value,11,1)*2)||
2902                         To_Char(SubStr(check_pad_value,12,1)*1)||
2903                         To_Char(SubStr(check_pad_value,13,1)*2)||
2904                         To_Char(SubStr(check_pad_value,14,1)*1)
2905                         );
2906             cep_standard.debug('int_val='||int_val);
2907 
2908             weighted_sum := 0;
2909             WHILE int_val <> 0 LOOP
2910                 digit := Mod(int_val,10);
2911                 weighted_sum := weighted_sum + digit;
2912                 int_val := floor(int_val/10);
2913             END LOOP;
2914 
2915             cep_standard.debug ('weighted_sum='||weighted_sum);
2916 
2917             IF (Mod(weighted_sum,10)=0)
2918             THEN
2919                 ce_passed_check('CHECK_DIGIT','FI');
2920             ELSE
2921                 ce_failed_check('CHECK_DIGIT','CD_FAILED');
2922             END IF;
2923 
2924         ELSE
2925             /* No branch number. CD Algo skipped */
2926             ce_passed_check('CD','FI');
2927         END IF; /* end of branch number check */
2928 
2929     ELSE
2930         ce_failed_check('CHECK_DIGIT','LENGTH','1');
2931     END IF; /* length check */
2932 
2933     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_cd_fi');
2934 END CE_VALIDATE_CD_FI;
2935 
2936 
2937 
2938 /* --------------------------------------------------------------------
2939 |  PRIVATE PROCEDURE                                                    |
2940 |      CE_VALIDATE_BRANCH_*                                             |
2941 |                                                                       |
2942 |  CALLED BY                                                            |
2943 |      CE_VALIDATE_BRANCH                                               |
2944 |                                                                       |
2945 |  DESCRIPTION                                                          |
2946 |      Branch PROCEDURES, Validate 1 or more of the following:          |
2947 |      1. Branch number length                                          |
2948 |      2. Branch number datatype (numeric, alphanumeric, or alphabet    |
2949 |      3. Branch number Algorithm                                       |
2950 |                                                                       |
2951 |  RETURN                                                               |
2952 |      Xo_VALUE_OUT - Branch Number is return with leading 0            |
2953 |                     (Not for all countries)                           |
2954  --------------------------------------------------------------------- */
2955 
2956 /* ---------------------------------------------------------------------
2957 | Branch Number Validation: AUSTRIA                                     |
2958  ----------------------------------------------------------------------*/
2959 procedure CE_VALIDATE_BRANCH_AT(
2960         Xi_BRANCH_NUMBER  in varchar2,
2961         Xi_PASS_MAND_CHECK in varchar2,
2962         Xo_VALUE_OUT OUT NOCOPY varchar2
2963 ) AS
2964 
2965     branch_value VARCHAR2(30);
2966     numeric_result VARCHAR2(40);
2967 
2968 BEGIN
2969     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_at');
2970 
2971     Xo_VALUE_OUT := Xi_BRANCH_NUMBER;
2972 
2973     -- 7582842: Disable validations using profile option
2974     IF CE_DISABLE_VALIDATION THEN
2975         cep_standard.debug('validations disabled. no check done');
2976         RETURN;
2977     END IF;
2978 
2979     BRANCH_VALUE := upper(Xi_BRANCH_NUMBER);
2980     -- 8266356: Branch Number is not mandatory.
2981     IF BRANCH_VALUE IS NOT NULL
2982     THEN
2983         BRANCH_VALUE := replace(replace(BRANCH_VALUE,' ',''),'-','');
2984         IF ( length(BRANCH_VALUE) = 5 )
2985         THEN
2986             /* length is ok */
2987             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
2988             IF (numeric_result = '0')
2989             THEN
2990                 /* its numeric validations successful */
2991                 Xo_VALUE_OUT := BRANCH_VALUE;
2992                 ce_passed_check('BRANCH','AT');
2993             ELSE
2994                 ce_failed_check('BRANCH_NUM','NUMERIC');
2995             END IF;  /* end of numeric check */
2996         ELSE
2997             ce_failed_check('BRANCH_NUM','LENGTH','5');
2998         END IF;  /* end of length check */
2999     END IF;
3000 
3001     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_at');
3002 END CE_VALIDATE_BRANCH_AT;
3003 
3004 /* ---------------------------------------------------------------------
3005 | Branch Number Validation: PORTUGAL                                    |
3006  ----------------------------------------------------------------------*/
3007 procedure CE_VALIDATE_BRANCH_PT(
3008         Xi_BRANCH_NUMBER    in varchar2,
3009         Xi_PASS_MAND_CHECK  in varchar2
3010 ) AS
3011         branch_value    VARCHAR2(30);
3012         numeric_result  VARCHAR2(40);
3013 
3014 BEGIN
3015     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_pt');
3016 
3017     -- 7582842: Disable validations using profile option
3018     IF CE_DISABLE_VALIDATION THEN
3019         cep_standard.debug('validations disabled. no check done');
3020         RETURN;
3021     END IF;
3022 
3023     BRANCH_VALUE := upper(Xi_BRANCH_NUMBER);
3024 
3025     IF Xi_PASS_MAND_CHECK = 'F'
3026     THEN
3027         ce_failed_mandatory('BRANCH_NUM');
3028 
3029     ELSIF Xi_PASS_MAND_CHECK = 'P'
3030     THEN
3031         BRANCH_VALUE := replace(replace(BRANCH_VALUE,' ',''),'-','');
3032         IF length(BRANCH_VALUE) = 4
3033         THEN    /* length is ok */
3034             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
3035             IF numeric_result = '0'
3036             THEN /* it's numeric - validations successful */
3037                 ce_passed_check('BRANCH','PT');
3038             ELSE
3039                 ce_failed_check('BRANCH_NUM','NUMERIC');
3040             END IF;  /* end of numeric check */
3041         ELSE
3042             ce_failed_check('BRANCH_NUM','LENGTH','4');
3043         END IF;  /* end of length check */
3044     END IF; /* end of mandatory check  */
3045 
3046     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_pt');
3047 END CE_VALIDATE_BRANCH_PT;
3048 
3049 /* ---------------------------------------------------------------------
3050 | Branch Number Validation: FRANCE                                      |
3051  ----------------------------------------------------------------------*/
3052 procedure CE_VALIDATE_BRANCH_FR(
3053         Xi_BRANCH_NUMBER    in varchar2,
3054         Xi_PASS_MAND_CHECK  in varchar2,
3055         Xo_VALUE_OUT        OUT NOCOPY varchar2
3056 ) AS
3057 
3058 branch_value VARCHAR2(30);
3059 numeric_result VARCHAR2(40);
3060 
3061 BEGIN
3062     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_fr');
3063 
3064 
3065     Xo_VALUE_OUT := Xi_BRANCH_NUMBER;
3066     -- 7582842: Disable validations using profile option
3067     IF CE_DISABLE_VALIDATION THEN
3068         cep_standard.debug('validations disabled. no check done');
3069         RETURN;
3070     END IF;
3071 
3072     BRANCH_VALUE := upper(Xi_BRANCH_NUMBER );
3073     IF Xi_PASS_MAND_CHECK = 'F'
3074     THEN
3075         ce_failed_mandatory('BRANCH_NUM');
3076     ELSIF Xi_PASS_MAND_CHECK = 'P'
3077     THEN
3078 
3079         BRANCH_VALUE := replace(replace(BRANCH_VALUE,' ',''),'-','');
3080         IF length(BRANCH_VALUE) > 5
3081         THEN
3082             ce_failed_check('BRANCH_NUM','LENGTH_MAX','5');
3083         ELSE    /* length is ok */
3084             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
3085             IF numeric_result = '0'
3086             THEN    /* its numeric - validations successful */
3087                 BRANCH_VALUE := lpad(BRANCH_VALUE,5,0);
3088                 Xo_VALUE_OUT := BRANCH_VALUE;
3089                 ce_passed_check('BRANCH','FR');
3090             ELSE
3091                 ce_failed_check('BRANCH_NUM','NUMERIC');
3092             END IF;  /* end of numeric check */
3093         END IF;  /* end of length check */
3094     END IF; /* end of mandatory check  */
3095 
3096     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_fr');
3097 END CE_VALIDATE_BRANCH_FR;
3098 
3099 /* ---------------------------------------------------------------------
3100 | Branch Number Validation: SPAIN                                       |
3101  ----------------------------------------------------------------------*/
3102 procedure CE_VALIDATE_BRANCH_ES (
3103         Xi_BRANCH_NUMBER    in varchar2,
3104         Xi_PASS_MAND_CHECK  in varchar2,
3105         Xo_VALUE_OUT        out nocopy varchar2
3106 ) AS
3107 
3108     BRANCH_VALUE    varchar2(30);
3109     NUMERIC_RESULT  varchar2(40);
3110 
3111 BEGIN
3112     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_es');
3113 
3114     Xo_VALUE_OUT := Xi_BRANCH_NUMBER;
3115     -- 7582842: Disable validations using profile option
3116     IF CE_DISABLE_VALIDATION THEN
3117         cep_standard.debug('validations disabled. no check done');
3118         RETURN;
3119     END IF;
3120 
3121     BRANCH_VALUE := upper(Xi_BRANCH_NUMBER );
3122     BRANCH_VALUE := replace(replace(BRANCH_VALUE,' ',''),'-','');
3123 
3124     IF Xi_PASS_MAND_CHECK = 'F'
3125     THEN
3126         ce_failed_mandatory('BRANCH_NUM');
3127 
3128     ELSIF Xi_PASS_MAND_CHECK = 'P'
3129     THEN
3130         IF length(BRANCH_VALUE) > 4
3131         THEN
3132             ce_failed_check('BRANCH_NUM','LENGTH_MAX','4');
3133         ELSE    /* length is ok */
3134             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
3135             IF numeric_result = '0'
3136             THEN    /* it's numeric - validations successful */
3137                 BRANCH_VALUE := lpad(BRANCH_VALUE,4,0);
3138                 Xo_VALUE_OUT := BRANCH_VALUE;
3139                 ce_passed_check('BRANCH','ES');
3140             ELSE
3141                 ce_failed_check('BRANCH_NUM','NUMERIC');
3142             END IF;  /* end of numeric check */
3143         END IF;  /* end of length check */
3144     END IF; /* end of mandatory check  */
3145 
3146     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_es');
3147 END CE_VALIDATE_BRANCH_ES;
3148 
3149 /* ---------------------------------------------------------------------
3150 | Branch Number Validation: BRAZIL                                      |
3151  ----------------------------------------------------------------------*/
3152 procedure CE_VALIDATE_BRANCH_BR(
3153         Xi_BRANCH_NUMBER    in varchar2,
3154         Xi_PASS_MAND_CHECK  in varchar2,
3155         Xo_VALUE_OUT        OUT NOCOPY varchar2
3156 ) AS
3157 
3158     branch_value    VARCHAR2(30);
3159     numeric_result  VARCHAR2(40);
3160 
3161 BEGIN
3162     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_br');
3163 
3164     -- 6083246: Brazil Branch number is not standardized and there should be
3165     -- no validation for this field.
3166     Xo_VALUE_OUT := Xi_BRANCH_NUMBER ;
3167     ce_passed_check('BRANCH','BR');
3168 
3169     /*----
3170     BRANCH_VALUE := upper(Xi_BRANCH_NUMBER );
3171     Xo_VALUE_OUT := BRANCH_VALUE;
3172 
3173     -- 7582842: Disable validations using profile option
3174     IF CE_DISABLE_VALIDATION THEN
3175         cep_standard.debug('validations disabled. no check done');
3176         RETURN;
3177     END IF;
3178 
3179     IF Xi_PASS_MAND_CHECK = 'F'
3180     THEN
3181         ce_failed_mandatory('BRANCH_NUM');
3182     ELSIF Xi_PASS_MAND_CHECK = 'P'
3183     THEN
3184         BRANCH_VALUE := replace(replace(BRANCH_VALUE,' ',''),'-','');
3185         IF length(BRANCH_VALUE) > 5
3186         THEN
3187             ce_failed_check('BRANCH_NUM','LENGTH_MAX','5');
3188         ELSE
3189             -- length is ok
3190             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
3191             IF numeric_result = '0'
3192             THEN
3193                 -- its numeric - validations successful
3194                 BRANCH_VALUE := lpad(BRANCH_VALUE,5,0);
3195                 Xo_VALUE_OUT := BRANCH_VALUE;
3196                 ce_passed_check('BRANCH','BR');
3197             ELSE
3198                 ce_failed_check('BRANCH_NUM','NUMERIC');
3199             END IF;  -- end of numeric check
3200         END IF;  -- end of length check
3201     END IF; -- end of mandatory check
3202     ----*/
3203 
3204     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_br');
3205 END CE_VALIDATE_BRANCH_BR;
3206 
3207 /* ---------------------------------------------------------------------
3208 | Branch Number Validation: GERMANY                                     |
3209  ----------------------------------------------------------------------*/
3210 procedure CE_VALIDATE_BRANCH_DE(
3211     Xi_BRANCH_NUMBER  in varchar2,
3212     Xi_BANK_ID        in number
3213 ) AS
3214 
3215     branch_num      VARCHAR2(30);
3216     numeric_result  VARCHAR2(40);
3217 
3218 BEGIN
3219     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_de');
3220 
3221     -- 7582842: Disable validations using profile option
3222     IF CE_DISABLE_VALIDATION THEN
3223         cep_standard.debug('validations disabled. no check done');
3224         RETURN;
3225     END IF;
3226 
3227     -- remove spaces and hyphens --
3228     BRANCH_NUM := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3229     BRANCH_NUM := replace(BRANCH_NUM,'-','');
3230 
3231     IF (BRANCH_NUM) IS NOT NULL
3232     THEN    /* only validate if a value has been entered */
3233         IF length(BRANCH_NUM) = 8
3234         THEN    /* length is ok */
3235             numeric_result := ce_check_numeric(BRANCH_NUM,1,length(BRANCH_NUM));
3236             IF numeric_result = '0'
3237             THEN  /* its numeric so continue  */
3238                 -- Bank number and branch number should be the same
3239                 compare_bank_and_branch_num(BRANCH_NUM, Xi_BANK_ID);
3240             ELSE
3241                 ce_failed_check('BRANCH_NUM','NUMERIC');
3242             END IF;  /* end of numeric check */
3243         ELSE
3244             ce_failed_check('BRANCH_NUM','LENGTH','8');
3245         END IF;  /* end of length check */
3246     END IF;
3247 
3248     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_de');
3249 END CE_VALIDATE_BRANCH_DE;
3250 
3251 /* ---------------------------------------------------------------------
3252 | Branch Number Validation: GREECE                                       |
3253  ----------------------------------------------------------------------*/
3254 procedure CE_VALIDATE_BRANCH_GR(
3255         Xi_BRANCH_NUMBER  in varchar2
3256 ) AS
3257 
3258     branch_value    VARCHAR2(30);
3259     numeric_result  VARCHAR2(40);
3260 
3261 BEGIN
3262     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_gr');
3263 
3264     -- 7582842: Disable validations using profile option
3265     IF CE_DISABLE_VALIDATION THEN
3266         cep_standard.debug('validations disabled. no check done');
3267         RETURN;
3268     END IF;
3269 
3270     BRANCH_VALUE := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3271     BRANCH_VALUE := replace(BRANCH_VALUE,'-','');
3272 
3273     IF (BRANCH_VALUE) IS NOT NULL
3274     THEN    /* only validate if a value has been entered */
3275         IF length(BRANCH_VALUE) > 4
3276         THEN
3277             ce_failed_check('BRANCH_NUM','LENGTH_MAX','4');
3278         ELSE    /* length is ok */
3279             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
3280             IF numeric_result = '0'
3281             THEN    /* it's numeric - validations successful*/
3282                 ce_passed_check('BRANCH','GR');
3283             ELSE
3284                 ce_failed_check('BRANCH_NUM','NUMERIC');
3285             END IF;  /* end of numeric check */
3286         END IF;  /* end of length check */
3287     END IF; /* end of null check */
3288 
3289     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_gr');
3290 END CE_VALIDATE_BRANCH_GR;
3291 
3292 /* ---------------------------------------------------------------------
3293 | Branch Number Validation: ICELAND                                     |
3294  ----------------------------------------------------------------------*/
3295 procedure CE_VALIDATE_BRANCH_IS(
3296         Xi_BRANCH_NUMBER IN VARCHAR2,
3297         Xi_BANK_ID       IN NUMBER,
3298         Xo_VALUE_OUT     OUT NOCOPY VARCHAR2
3299 ) AS
3300 
3301     branch_num      VARCHAR2(60);
3302     numeric_result  VARCHAR2(40);
3303 
3304 BEGIN
3305     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_is');
3306 
3307     Xo_VALUE_OUT := Xi_BRANCH_NUMBER;
3308     -- 7582842: Disable validations using profile option
3309     IF CE_DISABLE_VALIDATION THEN
3310         cep_standard.debug('validations disabled. no check done');
3311         RETURN;
3312     END IF;
3313 
3314     -- remove spaces and hyphens --
3315     BRANCH_NUM := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3316     BRANCH_NUM := replace(BRANCH_NUM,'-','');
3317 
3318     IF (BRANCH_NUM) IS NOT NULL
3319     THEN    /* only validate if a branch number has been entered */
3320         IF length(BRANCH_NUM) > 4
3321         THEN
3322             ce_failed_check('BRANCH_NUM','LENGTH_MAX','4');
3323         ELSE    /* length is ok */
3324             numeric_result := ce_check_numeric(BRANCH_NUM,1,length(BRANCH_NUM));
3325             IF numeric_result = '0'
3326             THEN /* its numeric so continue  */
3327                 -- Bank number and branch number should be the same
3328                 BRANCH_NUM := lpad(BRANCH_NUM,4,0);
3329                 Xo_VALUE_OUT := BRANCH_NUM;
3330                 compare_bank_and_branch_num(branch_num, Xi_BANK_ID);
3331             ELSE
3332                 ce_failed_check('BRANCH_NUM','NUMERIC');
3333             END IF;  /* end of numeric check */
3334         END IF;  /* end of length check */
3335     ELSE
3336         ce_passed_check('BRANCH','IS');
3337     END IF;  /* end of null check */
3338 
3339     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_is');
3340 END CE_VALIDATE_BRANCH_IS;
3341 
3342 
3343 /* ---------------------------------------------------------------------
3344 | Branch Number Validation: IRELAND                                     |
3345  ----------------------------------------------------------------------*/
3346 procedure CE_VALIDATE_BRANCH_IE(
3347         Xi_BRANCH_NUMBER  in varchar2,
3348         Xi_BANK_ID        in number
3349 ) AS
3350 
3351     branch_num      VARCHAR2(60);
3352     numeric_result  VARCHAR2(40);
3353 
3354 BEGIN
3355     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_ie');
3356 
3357     -- 7582842: Disable validations using profile option
3358     IF CE_DISABLE_VALIDATION THEN
3359         cep_standard.debug('validations disabled. no check done');
3360         RETURN;
3361     END IF;
3362 
3363     -- remove spaces and hyphens --
3364     BRANCH_NUM := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3365     BRANCH_NUM := replace(BRANCH_NUM,'-','');
3366 
3367     IF (BRANCH_NUM) IS NOT NULL
3368     THEN    /* only validate if a value has been entered */
3369         -- Bug 6846899 : Valid length is 6 not 8
3370         IF length(BRANCH_NUM) = 6
3371         THEN    /* length is ok */
3372             numeric_result := ce_check_numeric(BRANCH_NUM,1,length(BRANCH_NUM));
3373             IF numeric_result = '0'
3374             THEN /* its numeric so continue  */
3375                 -- Bank number and branch number should be the same
3376                 compare_bank_and_branch_num(branch_num, Xi_BANK_ID);
3377             ELSE
3378                 ce_failed_check('BRANCH_NUM','NUMERIC');
3379             END IF;  /* end of numeric check */
3380         ELSE
3381             ce_failed_check('BRANCH_NUM','LENGTH','6');
3382         END IF;  /* end of length check */
3383     ELSE
3384         ce_passed_check('BRANCH','IE');
3385     END IF; /* end of null check */
3386 
3387     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_ie');
3388 END CE_VALIDATE_BRANCH_IE;
3389 
3390 /* ---------------------------------------------------------------------
3391 | Branch Number Validation: ITALY                                       |
3392  ----------------------------------------------------------------------*/
3393 procedure CE_VALIDATE_BRANCH_IT(
3394         Xi_BRANCH_NUMBER    in varchar2,
3395         Xi_PASS_MAND_CHECK  in varchar2
3396 ) AS
3397 
3398     branch_value    VARCHAR2(30);
3399     numeric_result  VARCHAR2(40);
3400 
3401 BEGIN
3402     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_it');
3403 
3404     -- 7582842: Disable validations using profile option
3405     IF CE_DISABLE_VALIDATION THEN
3406         cep_standard.debug('validations disabled. no check done');
3407         RETURN;
3408     END IF;
3409 
3410     -- remove spaces and hyphens --
3411     BRANCH_VALUE := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3412     BRANCH_VALUE := replace(BRANCH_VALUE,'-','');
3413 
3414     IF Xi_PASS_MAND_CHECK = 'F'
3415     THEN
3416         ce_failed_mandatory('BRANCH_NUM');
3417     ELSIF Xi_PASS_MAND_CHECK = 'P'
3418     THEN
3419         IF length(BRANCH_VALUE) = 5
3420         THEN    /* length is ok */
3421             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
3422             IF numeric_result = '0'
3423             THEN    /* it's numeric - validations successful */
3424                 ce_passed_check('BRANCH','IT');
3425             ELSE
3426                 ce_failed_check('BRANCH_NUM','NUMERIC');
3427             END IF;  /* end of numeric check */
3428         ELSE
3429             ce_failed_check('BRANCH_NUM','LENGTH','5');
3430         END IF;  /* end of length check */
3431     END IF; /* end of mandatory check  */
3432 
3433     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_it');
3434 END CE_VALIDATE_BRANCH_IT;
3435 
3436 /* ---------------------------------------------------------------------
3437 | Branch Number Validation: LUXEMBOURG                                  |
3438  ----------------------------------------------------------------------*/
3439 procedure CE_VALIDATE_BRANCH_LU(
3440         Xi_BRANCH_NUMBER  in varchar2,
3441         Xi_BANK_ID        in number
3442 ) AS
3443     branch_num      VARCHAR2(60);
3444     numeric_result  VARCHAR2(40);
3445 
3446 BEGIN
3447     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_lu');
3448 
3449     -- 7582842: Disable validations using profile option
3450     IF CE_DISABLE_VALIDATION THEN
3451         cep_standard.debug('validations disabled. no check done');
3452         RETURN;
3453     END IF;
3454 
3455     -- remove hyphens and spaces --
3456     BRANCH_NUM := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3457     BRANCH_NUM := replace(BRANCH_NUM,'-','');
3458 
3459     IF (BRANCH_NUM) IS NOT NULL
3460     THEN    /* only validate if a value has been entered */
3461         -- 6005620: Bank/Branch Num length is 3
3462         IF length(BRANCH_NUM) = 3
3463         THEN /* length is ok */
3464             numeric_result := ce_check_numeric(BRANCH_NUM,1,length(BRANCH_NUM));
3465             IF numeric_result = '0'
3466             THEN /* its numeric so continue  */
3467                 -- Bank number and branch number should be the same
3468                 compare_bank_and_branch_num(BRANCH_NUM, Xi_BANK_ID);
3469             ELSE
3470                 ce_failed_check('BRANCH_NUM','NUMERIC');
3471             END IF;  /* end of numeric check */
3472         ELSE
3473             ce_failed_check('BRANCH_NUM','LENGTH','3');
3474         END IF;  /* end of length check */
3475     ELSE
3476         ce_passed_check('BRANCH','LU');
3477     END IF; /* end of null check */
3478 
3479     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_lu');
3480 END CE_VALIDATE_BRANCH_LU;
3481 
3482 /* ---------------------------------------------------------------------
3483 | Branch Number Validation: POLAND                                      |
3484  ----------------------------------------------------------------------*/
3485 procedure CE_VALIDATE_BRANCH_PL(
3486         Xi_BRANCH_NUMBER  in varchar2,
3487         Xi_BANK_ID        in NUMBER
3488 ) AS
3489 
3490     branch_num      VARCHAR2(60);
3491     numeric_result  VARCHAR2(40);
3492     cal_cd1         NUMBER;
3493 
3494 BEGIN
3495     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_pl');
3496 
3497     -- 7582842: Disable validations using profile option
3498     IF CE_DISABLE_VALIDATION THEN
3499         cep_standard.debug('validations disabled. no check done');
3500         RETURN;
3501     END IF;
3502 
3503     -- remove spaces and hyphens --
3504     BRANCH_NUM := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3505     BRANCH_NUM := replace(BRANCH_NUM,'-','');
3506 
3507     IF (BRANCH_NUM) IS NOT NULL
3508     THEN    /* only validate if a value has been entered */
3509         IF length(BRANCH_NUM) = 8
3510         THEN    /* length is ok */
3511             numeric_result := ce_check_numeric(BRANCH_NUM,1,length(BRANCH_NUM));
3512             IF numeric_result = '0'
3513             THEN /* its numeric so continue  */
3514                 -- Bank number and branch number should be the same
3515                 compare_bank_and_branch_num(BRANCH_NUM, Xi_BANK_ID);
3516                 -- Bug 7454786: No check digit validation for Poland
3517                 ce_passed_check('BRANCH','PL');
3518             ELSE
3519                 ce_failed_check('BRANCH_NUM','NUMERIC');
3520             END IF;  /* end of numeric check */
3521         ELSE
3522             ce_failed_check('BRANCH_NUM','LENGTH','8');
3523         END IF; /* end of length check */
3524     ELSE
3525         ce_passed_check('BRANCH','PL');
3526     END IF; /* end of null check */
3527 
3528     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_pl');
3529 END CE_VALIDATE_BRANCH_PL;
3530 
3531 /* ---------------------------------------------------------------------
3532 | Branch Number Validation: SWEDEN                                      |
3533  ----------------------------------------------------------------------*/
3534 procedure CE_VALIDATE_BRANCH_SE(
3535         Xi_BRANCH_NUMBER  in varchar2,
3536         Xi_BANK_ID        in number
3537 ) AS
3538 
3539     branch_num      VARCHAR2(60);
3540     numeric_result  VARCHAR2(40);
3541 
3542 BEGIN
3543     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_se');
3544 
3545     -- 7582842: Disable validations using profile option
3546     IF CE_DISABLE_VALIDATION THEN
3547         cep_standard.debug('validations disabled. no check done');
3548         RETURN;
3549     END IF;
3550 
3551     -- remove hyphens and spaces --
3552     BRANCH_NUM := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3553     BRANCH_NUM := replace(BRANCH_NUM,'-','');
3554 
3555     IF (BRANCH_NUM) IS NOT NULL
3556     THEN    /* only validate if a value has been entered */
3557         IF (length(BRANCH_NUM) < 4)
3558         THEN
3559             ce_failed_check('BRANCH_NUM','LENGTH_MIN','4');
3560 
3561         ELSIF (length(BRANCH_NUM) > 5)
3562         THEN
3563             ce_failed_check('BRANCH_NUM','LENGTH_MAX','5');
3564 
3565         ELSE    /* length is ok */
3566             numeric_result := ce_check_numeric(BRANCH_NUM,1,length(BRANCH_NUM));
3567             IF numeric_result = '0'
3568             THEN    /* its numeric so continue  */
3569                 -- Bank number and branch number should be the same
3570                 compare_bank_and_branch_num(BRANCH_NUM, Xi_BANK_ID);
3571             ELSE
3572                 ce_failed_check('BRANCH_NUM','NUMERIC');
3573             END IF;  /* end of numeric check */
3574         END IF;  /* end of length check */
3575     ELSE
3576         ce_passed_check('BRANCH','SE');
3577     END IF; /* end of null check */
3578 
3579     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_se');
3580 END CE_VALIDATE_BRANCH_SE;
3581 
3582 
3583 /* ---------------------------------------------------------------------
3584 | Branch Number Validation: SWITZERLAND                                 |
3585  ----------------------------------------------------------------------*/
3586 procedure CE_VALIDATE_BRANCH_CH(
3587         Xi_BRANCH_NUMBER  in varchar2,
3588         Xi_BANK_ID        in number
3589 ) AS
3590 
3591     branch_num      VARCHAR2(60);
3592     numeric_result  VARCHAR2(40);
3593 
3594 BEGIN
3595     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_ch');
3596 
3597     -- 7582842: Disable validations using profile option
3598     IF CE_DISABLE_VALIDATION THEN
3599         cep_standard.debug('validations disabled. no check done');
3600         RETURN;
3601     END IF;
3602 
3603     -- remove spaces and hyphens --
3604     BRANCH_NUM := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3605     BRANCH_NUM := replace(BRANCH_NUM,'-','');
3606 
3607     IF (BRANCH_NUM) IS NOT NULL
3608     THEN /* only validate if a value has been entered */
3609         -- Bug 6208182 - Length of the branch number should be between 7 to 9
3610         -- numeric digits. (Changed from 3 -> 6)
3611 		-- Bug 6885135 - Length restriction changed to (3->9)
3612         IF (length(BRANCH_NUM) < 3)
3613         THEN
3614             ce_failed_check('BRANCH_NUM','LENGTH_MIN','3');
3615         ELSIF (length(BRANCH_NUM) > 9)
3616         THEN
3617             ce_failed_check('BRANCH_NUM','LENGTH_MAX','9');
3618         ELSE    /* length is ok */
3619             numeric_result := ce_check_numeric(BRANCH_NUM,1,length(BRANCH_NUM));
3620             IF numeric_result = '0'
3621             THEN /* its numeric so continue  */
3622                 -- Bank number and branch number should be the same
3623                 -- Bug 6208182 - validation to check if bank and branch number are same
3624                 -- is not required for swiss banks.
3625                 -- compare_bank_and_branch_num(branch_num, Xi_BANK_ID);
3626                 ce_passed_check('BRANCH','CH');
3627             ELSE
3628                 ce_failed_check('BRANCH_NUM','NUMERIC');
3629             END IF;  /* end of numeric check */
3630         END IF; /* end of length check */
3631     ELSE
3632         ce_passed_check('BRANCH','CH');
3633     END IF; /* end of null check */
3634 
3635     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_ch');
3636 END CE_VALIDATE_BRANCH_CH;
3637 
3638 /* ---------------------------------------------------------------------
3639 | Branch Number Validation: UNITED KINGDOM                              |
3640  ----------------------------------------------------------------------*/
3641 procedure CE_VALIDATE_BRANCH_GB(
3642         Xi_BRANCH_NUMBER  in varchar2,
3643         Xi_BANK_ID        in number
3644 ) AS
3645 
3646         branch_num      VARCHAR2(60);
3647         numeric_result  VARCHAR2(40);
3648 
3649 BEGIN
3650     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_gb');
3651 
3652     -- 7582842: Disable validations using profile option
3653     IF CE_DISABLE_VALIDATION THEN
3654         cep_standard.debug('validations disabled. no check done');
3655         RETURN;
3656     END IF;
3657 
3658     -- remove spaces and hyphens --
3659     BRANCH_NUM := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3660     BRANCH_NUM := replace(BRANCH_NUM,'-','');
3661 
3662     IF (BRANCH_NUM) IS NOT NULL
3663     THEN    /* only validate if a value has been entered */
3664         IF length(BRANCH_NUM) = 6
3665         THEN    /* length is ok */
3666             numeric_result := ce_check_numeric(BRANCH_NUM,1,length(BRANCH_NUM));
3667             IF numeric_result = '0'
3668             THEN /* its numeric so continue  */
3669                 -- Bank number and branch number should be the same
3670                 compare_bank_and_branch_num(BRANCH_NUM, Xi_BANK_ID);
3671             ELSE
3672                 ce_failed_check('BRANCH_NUM','NUMERIC');
3673             END IF;  /* end of numeric check */
3674         ELSE
3675             ce_failed_check('BRANCH_NUM','LENGTH','6');
3676         END IF;  /* end of length check */
3677     ELSE
3678         ce_passed_check('BRANCH','GB');
3679     END IF; /* end of null check */
3680 
3681     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_gb');
3682 END CE_VALIDATE_BRANCH_GB;
3683 
3684 /* ---------------------------------------------------------------------
3685 | Branch Number Validation: UNITED STATES                               |
3686 | For the US, Branch Number is Routing Transit Number                   |
3687  ----------------------------------------------------------------------*/
3688 procedure CE_VALIDATE_BRANCH_US(
3689         Xi_BRANCH_NUMBER    in varchar2,
3690         Xi_PASS_MAND_CHECK  in varchar2,
3691         Xo_VALUE_OUT        OUT NOCOPY varchar2
3692 ) AS
3693 
3694     branch_value        VARCHAR2(30);
3695     branch_value_out    VARCHAR2(30);
3696     cal_cd1             NUMBER;
3697     cd_value            NUMBER;
3698     l_mod_value         NUMBER;
3699     numeric_result      VARCHAR2(40);
3700 
3701 BEGIN
3702     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_us');
3703 
3704     Xo_VALUE_OUT := Xi_BRANCH_NUMBER;
3705     -- 7582842: Disable validations using profile option
3706     IF CE_DISABLE_VALIDATION THEN
3707         cep_standard.debug('validations disabled. no check done');
3708         RETURN;
3709     END IF;
3710 
3711     -- remove spaces and hyphens --
3712     BRANCH_VALUE := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3713     BRANCH_VALUE := replace(BRANCH_VALUE,'-','');
3714 
3715     -- Branch Number is optional for all US banks --
3716     IF Xi_PASS_MAND_CHECK = 'P'
3717     THEN    /* only validate if value has been entered */
3718         IF length(BRANCH_VALUE) > 9
3719         THEN
3720             ce_failed_check('ROUTE_NUM','LENGTH_MAX','9');
3721         ELSE    /* length is ok */
3722 
3723             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
3724             IF numeric_result = '0'
3725             THEN    /* it is numeric */
3726 
3727                 BRANCH_VALUE_OUT := lpad(BRANCH_VALUE,9,0);
3728                 IF (substr(BRANCH_VALUE_OUT,1,8) = '00000000')
3729                 THEN    /* After padding to 9 digits, the leading 8 cannot be all 0 */
3730                     ce_failed_check('ROUTE_NUM','INVALID_RTN');
3731                 ELSE
3732                     -- Modulus 10
3733                     l_mod_value :=  mod(((to_number(substr(BRANCH_VALUE_OUT,1,1)) * 3)
3734                                     + (to_number(substr(BRANCH_VALUE_OUT,2,1)) * 7)
3735                                     + (to_number(substr(BRANCH_VALUE_OUT,3,1)) * 1)
3736                                     + (to_number(substr(BRANCH_VALUE_OUT,4,1)) * 3)
3737                                     + (to_number(substr(BRANCH_VALUE_OUT,5,1)) * 7)
3738                                     + (to_number(substr(BRANCH_VALUE_OUT,6,1)) * 1)
3739                                     + (to_number(substr(BRANCH_VALUE_OUT,7,1)) * 3)
3740                                     + (to_number(substr(BRANCH_VALUE_OUT,8,1)) * 7)),10);
3741 
3742                     -- Bug 6052424  changed the IN clause
3743                     IF (l_mod_value IN (0)) THEN
3744                         cal_cd1:=l_mod_value;
3745                     ELSE
3746                         cal_cd1 :=10-l_mod_value;
3747                     END IF;
3748                     cd_value := substr(BRANCH_VALUE_OUT,9,1);
3749 
3750                     IF cal_cd1 = cd_value
3751                     THEN    /* check digit checks out validations successful */
3752                         Xo_VALUE_OUT := BRANCH_VALUE_OUT;
3753                         ce_passed_check('BRANCH','US');
3754                     ELSE
3755                         ce_failed_check('ROUTE_NUM','CD_FAILED');
3756                     END IF;
3757                 END IF; /* end of padding check */
3758             ELSE
3759                 ce_failed_check('ROUTE_NUM','NUMERIC');
3760             END IF;  /* end of numeric check */
3761         END IF;  /* end length check */
3762     ELSE
3763         ce_passed_check('BRANCH','US');
3764     END IF;  /* end of null check  */
3765 
3766     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_us');
3767 END CE_VALIDATE_BRANCH_US;
3768 
3769 /* ---------------------------------------------------------------------
3770 | Branch Number Validation: AUSTRALIA                                   |
3771  ----------------------------------------------------------------------*/
3772 procedure CE_VALIDATE_BRANCH_AU(
3773         Xi_BRANCH_NUMBER    in varchar2,
3774         Xi_BANK_ID          in NUMBER,
3775         Xi_PASS_MAND_CHECK  in varchar2
3776 ) AS
3777 
3778     BRANCH_VALUE            varchar2(30);
3779     BANK_VALUE              varchar2(30);
3780     BANK_num                varchar2(30);
3781     valid_branch_length     number;
3782     numeric_result          varchar2(40);
3783 
3784 BEGIN
3785     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_au');
3786 
3787     -- 7582842: Disable validations using profile option
3788     IF CE_DISABLE_VALIDATION THEN
3789         cep_standard.debug('validations disabled. no check done');
3790         RETURN;
3791     END IF;
3792 
3793     -- remove spaces and hyphens --
3794     BRANCH_VALUE := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3795     BRANCH_VALUE := replace(BRANCH_VALUE,'-','');
3796 
3797 
3798     IF Xi_PASS_MAND_CHECK = 'F'
3799     THEN
3800         ce_failed_mandatory('BRANCH_NUM');
3801 
3802     ELSIF Xi_PASS_MAND_CHECK = 'P'
3803     THEN
3804         -- Bug 6856840: Added IF clause to handle cases where Bank ID is the Bank Number
3805         IF BANK_ID_IS_NUM = TRUE
3806         THEN
3807             bank_num := Xi_BANK_ID;
3808         ELSE
3809             -- fetch the bank number
3810             OPEN  get_bank_num(Xi_BANK_ID);
3811             FETCH get_bank_num INTO bank_num;
3812             CLOSE get_bank_num;
3813         END IF;
3814 		BANK_VALUE := upper(replace(bank_num,' ',''));
3815 		BANK_VALUE := replace(BANK_VALUE,'-','');
3816 
3817 		-- Bank number and branch number should have total of 6 digits --
3818         valid_branch_length := 6 - nvl(length(BANK_VALUE), 0);
3819         IF (length(BRANCH_VALUE) = valid_branch_length)
3820         THEN
3821             /* length is ok */
3822             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
3823             IF numeric_result = '0'
3824             THEN
3825                 /* its numeric - validations successful */
3826                 ce_passed_check('BRANCH','AU');
3827             ELSE
3828                 ce_failed_check('BRANCH_NUM','NUMERIC');
3829             END IF; /* end of numeric check */
3830         ELSE
3831             ce_failed_check('BRANCH_NUM','LENGTH',to_char(valid_branch_length));
3832         END IF; /* end of length check */
3833 
3834     END IF; /* end of mandatory check  */
3835 
3836     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_au');
3837 END CE_VALIDATE_BRANCH_AU;
3838 
3839 /* ---------------------------------------------------------------------
3840 | Branch Number Validation: ISRAEL                                      |
3841  ----------------------------------------------------------------------*/
3842 procedure CE_VALIDATE_BRANCH_IL(
3843         Xi_BRANCH_NUMBER    in varchar2,
3844         Xi_PASS_MAND_CHECK  in varchar2
3845 ) AS
3846 
3847     branch_value    VARCHAR2(30);
3848     numeric_result  VARCHAR2(40);
3849 
3850 BEGIN
3851     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_il');
3852 
3853     -- 7582842: Disable validations using profile option
3854     IF CE_DISABLE_VALIDATION THEN
3855         cep_standard.debug('validations disabled. no check done');
3856         RETURN;
3857     END IF;
3858 
3859     BRANCH_VALUE := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3860     BRANCH_VALUE := replace(BRANCH_VALUE,'-','');
3861 
3862     IF Xi_PASS_MAND_CHECK = 'F'
3863     THEN
3864         ce_failed_mandatory('BRANCH_NUM');
3865 
3866     ELSIF Xi_PASS_MAND_CHECK = 'P'
3867     THEN
3868         IF length(BRANCH_VALUE) = 3
3869         THEN    /* length is ok */
3870             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
3871             IF numeric_result = '0'
3872             THEN    /* it's numeric - validations successful */
3873                 ce_passed_check('BRANCH','IL');
3874             ELSE
3875                 ce_failed_check('BRANCH_NUM','NUMERIC');
3876             END IF;  /* end of numeric check */
3877         ELSE
3878             ce_failed_check('BRANCH_NUM','LENGTH','3');
3879         END IF;  /* end of length check */
3880     END IF; /* end of mandatory check  */
3881 
3882     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_il');
3883 END CE_VALIDATE_BRANCH_IL;
3884 
3885 /* ---------------------------------------------------------------------
3886 | Branch Number Validation: NEW ZEALAND                                 |
3887  ----------------------------------------------------------------------*/
3888 procedure CE_VALIDATE_BRANCH_NZ(
3889         Xi_BRANCH_NUMBER    in varchar2,
3890         Xi_PASS_MAND_CHECK  in varchar2
3891 ) AS
3892 
3893     branch_value    VARCHAR2(30);
3894     numeric_result  VARCHAR2(40);
3895 
3896 BEGIN
3897     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_nz');
3898 
3899     -- 7582842: Disable validations using profile option
3900     IF CE_DISABLE_VALIDATION THEN
3901         cep_standard.debug('validations disabled. no check done');
3902         RETURN;
3903     END IF;
3904 
3905     -- remove hyphens and spaces --
3906     BRANCH_VALUE := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3907     BRANCH_VALUE := replace(BRANCH_VALUE,'-','');
3908 
3909     IF Xi_PASS_MAND_CHECK = 'F'
3910     THEN
3911         ce_failed_mandatory('BRANCH_NUM');
3912 
3913     ELSIF Xi_PASS_MAND_CHECK = 'P'
3914     THEN
3915         IF length(BRANCH_VALUE) = 4
3916         THEN    /* length is ok */
3917             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
3918             IF numeric_result = '0'
3919             THEN    /* it's numeric - validations successful */
3920                 ce_passed_check('BRANCH','NZ');
3921             ELSE
3922                 ce_failed_check('BRANCH_NUM','NUMERIC');
3923             END IF;  /* end of numeric check */
3924         ELSE
3925             ce_failed_check('BRANCH_NUM','LENGTH','4');
3926         END IF;  /* end of length check */
3927     END IF; /* end of mandatory check  */
3928 
3929     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_nz');
3930 END CE_VALIDATE_BRANCH_NZ;
3931 
3932 /* ---------------------------------------------------------------------
3933 | Branch Number Validation: JAPAN                                       |
3934  ----------------------------------------------------------------------*/
3935 procedure CE_VALIDATE_BRANCH_JP(
3936         Xi_BRANCH_NUMBER    in varchar2,
3937         Xi_BRANCH_NAME_ALT  in varchar2,
3938         Xi_PASS_MAND_CHECK  in varchar2
3939 ) AS
3940 
3941     branch_value    VARCHAR2(30);
3942     numeric_result  VARCHAR2(40);
3943 
3944 BEGIN
3945     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_jp');
3946 
3947     -- 7582842: This validation fires irrespective of disable profile
3948     -- Check that Branch Name Alt has been entered --
3949     IF (Xi_BRANCH_NAME_ALT  IS NULL)
3950     THEN
3951        ce_failed_mandatory('BRANCH_NAME_ALT');
3952     END IF;
3953 
3954     -- 7582842: Disable validations using profile option
3955     IF CE_DISABLE_VALIDATION THEN
3956         cep_standard.debug('branch number validations disabled.');
3957         RETURN;
3958     END IF;
3959 
3960     -- remove spaces and hyphens --
3961     BRANCH_VALUE := upper(replace(Xi_BRANCH_NUMBER,' ',''));
3962     BRANCH_VALUE := replace(BRANCH_VALUE,'-','');
3963 
3964     IF Xi_PASS_MAND_CHECK = 'F'
3965     THEN
3966         ce_failed_mandatory('BRANCH_NUM');
3967     ELSIF Xi_PASS_MAND_CHECK = 'P'
3968     THEN
3969         -- bug 5746679 change from 4 numeric digits to 3 numeric digits
3970         IF length(BRANCH_VALUE) = 3
3971         THEN    /* length is ok */
3972             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
3973             IF numeric_result = '0'
3974             THEN    /* it's numeric - validations successful*/
3975                 ce_passed_check('BRANCH','JP');
3976             ELSE
3977                 ce_failed_check('BRANCH_NUM','NUMERIC');
3978             END IF;  /* end of numeric check */
3979         ELSE
3980             ce_failed_check('BRANCH_NUM','LENGTH','3');
3981         END IF;  /* end of length check */
3982     END IF; /* end of mandatory check  */
3983 
3984     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_jp');
3985 END CE_VALIDATE_BRANCH_JP;
3986 
3987 -- Bug 9249372: Added
3988 /* ---------------------------------------------------------------------
3989 | Branch Number Validation: FINLAND                                     |
3990  ----------------------------------------------------------------------*/
3991 PROCEDURE CE_VALIDATE_BRANCH_FI(
3992         Xi_BRANCH_NUMBER    IN VARCHAR2
3993 ) AS
3994 
3995     branch_value    VARCHAR2(30);
3996     numeric_result  VARCHAR2(40);
3997 BEGIN
3998     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_branch_fi');
3999 
4000     -- 7582842: Disable validations using profile option
4001     IF CE_DISABLE_VALIDATION THEN
4002         cep_standard.debug('branch number validations disabled.');
4003         RETURN;
4004     END IF;
4005 
4006     -- remove spaces and hyphens --
4007     BRANCH_VALUE := upper(replace(Xi_BRANCH_NUMBER,' ',''));
4008     BRANCH_VALUE := replace(BRANCH_VALUE,'-','');
4009 
4010     IF Xi_BRANCH_NUMBER IS NOT NULL
4011     THEN
4012         IF length(BRANCH_VALUE) = 6
4013         THEN    /* length is ok */
4014             numeric_result := ce_check_numeric(BRANCH_VALUE,1,length(BRANCH_VALUE));
4015             IF numeric_result = '0'
4016             THEN    /* it's numeric - validations successful*/
4017                 ce_passed_check('BRANCH','FI');
4018             ELSE
4019                 ce_failed_check('BRANCH_NUM','NUMERIC');
4020             END IF;  /* end of numeric check */
4021         ELSE
4022             ce_failed_check('BRANCH_NUM','LENGTH','6');
4023         END IF;  /* end of length check */
4024     END IF; /* end of mandatory check  */
4025 
4026     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_branch_fi');
4027 END CE_VALIDATE_BRANCH_FI;
4028 
4029 /* --------------------------------------------------------------------
4030 |  PRIVATE PROCEDURE                                                    |
4031 |      CE_VALIDATE_ACCOUNT_*                                            |
4032 |                                                                       |
4033 |  CALLED BY                                                            |
4034 |      CE_VALIDATE_ACCOUNT                                              |
4035 |                                                                       |
4036 |  DESCRIPTION                                                          |
4037 |      ACCOUNT PROCEDURES, Validate 1 or more of the following:         |
4038 |      1. Account number length                                         |
4039 |      2. Account number datatype (numeric, alphanumeric, or alphabet   |
4040 |      3. Account number Algorithm                                      |
4041 |                                                                       |
4042 |  RETURN                                                               |
4043 |      Xo_VALUE_OUT - Account Number is return with leading 0           |
4044 |                     (Not for all countries)                           |
4045  --------------------------------------------------------------------- */
4046 
4047 /* ---------------------------------------------------------------------
4048 | Account Number Validation: AUSTRIA                                    |
4049 | 9537127: Minimum length of 4 enforced. No Zero Padding                |
4050  ----------------------------------------------------------------------*/
4051 procedure CE_VALIDATE_ACCOUNT_AT (
4052         Xi_ACCOUNT_NUMBER   in varchar2,
4053         Xi_PASS_MAND_CHECK  in varchar2,
4054         Xo_VALUE_OUT        out nocopy varchar2
4055 ) AS
4056     account_value   VARCHAR2(30);
4057     numeric_result  VARCHAR2(30);
4058 
4059 BEGIN
4060     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_at');
4061 
4062     Xo_VALUE_OUT := Xi_ACCOUNT_NUMBER ;
4063     -- 7582842: Disable validations using profile option
4064     IF CE_DISABLE_VALIDATION THEN
4065         cep_standard.debug('validations disabled. no check done');
4066         RETURN;
4067     END IF;
4068 
4069     account_value := UPPER(Xi_ACCOUNT_NUMBER);
4070 
4071     -- check for length constraints
4072     IF length(account_value) > 11
4073     THEN
4074         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','11');
4075     ELSIF length(account_value) < 4
4076     THEN
4077         ce_failed_check('ACCOUNT_NUM','LENGTH_MIN','4');
4078     END IF;
4079 
4080     -- check for alphanumeric characters
4081     IF NOT regexp_like(account_value,'^[0-9]*$')
4082     THEN
4083         ce_failed_check('ACCOUNT_NUM','NUMERIC');
4084     END IF;
4085 
4086     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_at');
4087 END CE_VALIDATE_ACCOUNT_AT;
4088 
4089 /* ---------------------------------------------------------------------
4090 | Account Number Validation: PORTUGAL                                   |
4091 | 9537127: No Zero Padding. Account number should be 11N                |
4092  ----------------------------------------------------------------------*/
4093 procedure CE_VALIDATE_ACCOUNT_PT (
4094         Xi_ACCOUNT_NUMBER   in varchar2,
4095         Xi_PASS_MAND_CHECK  in varchar2,
4096         Xo_VALUE_OUT        out nocopy varchar2
4097 ) AS
4098     account_value   VARCHAR2(30);
4099 BEGIN
4100     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_pt');
4101 
4102     Xo_VALUE_OUT := Xi_ACCOUNT_NUMBER;
4103     -- 7582842: Disable validations using profile option
4104     IF CE_DISABLE_VALIDATION THEN
4105         cep_standard.debug('validations disabled. no check done');
4106         RETURN;
4107     END IF;
4108 
4109     account_value := UPPER(Xi_ACCOUNT_NUMBER);
4110 
4111     -- check for length
4112     IF length(ACCOUNT_VALUE) <> 11
4113     THEN
4114         ce_failed_check('ACCOUNT_NUM','LENGTH','11');
4115     END IF;
4116 
4117     -- check for numeric digits
4118     IF NOT regexp_like(account_value,'^[0-9]*$')
4119     THEN
4120         ce_failed_check('ACCOUNT_NUM','NUMERIC');
4121     END IF;
4122 
4123     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_pt');
4124 END CE_VALIDATE_ACCOUNT_PT;
4125 
4126 /* ---------------------------------------------------------------------
4127 | Account Number Validation: BELGIUM                                    |
4128  ----------------------------------------------------------------------*/
4129 procedure CE_VALIDATE_ACCOUNT_BE (
4130         Xi_ACCOUNT_NUMBER   in varchar2,
4131         Xi_PASS_MAND_CHECK  in varchar2
4132 ) AS
4133 
4134     account_value   VARCHAR2(30);
4135     entered_format  VARCHAR2(30);
4136     numeric_result  VARCHAR2(40);
4137     bank_code       VARCHAR2(3);
4138     middle          VARCHAR2(7);
4139     check_digit     VARCHAR2(2);
4140     conced          VARCHAR2(30);
4141 
4142 BEGIN
4143     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_be');
4144 
4145     -- 7582842: Disable validations using profile option
4146     IF CE_DISABLE_VALIDATION THEN
4147         cep_standard.debug('validations disabled. no check done');
4148         RETURN;
4149     END IF;
4150 
4151     -- remove spaces --
4152     account_value := upper(replace(Xi_ACCOUNT_NUMBER,' ',''));
4153     conced := replace(account_value,'-','');
4154 
4155     IF (length(CONCED) = 12)
4156     THEN    /* length is ok */
4157         numeric_result := ce_check_numeric(CONCED,1,length(CONCED));
4158         IF numeric_result = '0'
4159         THEN    /* its numeric, continue */
4160             /* Account number should be of the format 999-9999999-99 */
4161             entered_format := translate(account_value,'0123456789',
4162                                                       '9999999999');
4163             IF (entered_format = '999-9999999-99')
4164             THEN    /* account format is correct */
4165 
4166                 BANK_CODE       := substr(ACCOUNT_VALUE,1,3);
4167                 MIDDLE          := substr(ACCOUNT_VALUE,5,7);
4168                 CHECK_DIGIT     := substr(ACCOUNT_VALUE,13,2);
4169 
4170                 -- The check digits are calculated by dividing the first 10
4171                 -- digits by 97. If the remainder is 00, THEN the check
4172                 -- digits are 97. Otherwise the check digits are the
4173                 -- remainders.
4174                 IF check_digit = 00
4175                 THEN
4176                     -- 2261587 fbreslin: 00 is never a valid check digit,
4177                     -- even if  the MOD of the account number is 0
4178                     ce_failed_check('ACCOUNT_NUM','CD_FAILED');
4179                 ELSIF  MOD(BANK_CODE||MIDDLE,97) = MOD(CHECK_DIGIT,97)
4180                 THEN /* check digit checks out - validations successful */
4181                     ce_passed_check('ACCOUNT','BE');
4182                 ELSE
4183                     ce_failed_check('ACCOUNT_NUM','CD_FAILED');
4184                 END IF; /* end of CD validation */
4185 
4186             ELSE
4187                 ce_failed_check('ACCOUNT_NUM','INVALID_FORMAT');
4188             END IF; /* end of format check */
4189 
4190         ELSE
4191             ce_failed_check('ACCOUNT_NUM','NUMERIC');
4192         END IF;  /* end of numeric check */
4193 
4194     ELSE
4195         ce_failed_check('ACCOUNT_NUM','LENGTH','12');
4196     END IF;  /* end of length check */
4197 
4198     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_be');
4199 END CE_VALIDATE_ACCOUNT_BE;
4200 
4201 
4202 /* ---------------------------------------------------------------------
4203 | Account Number Validation: DENMARK                                    |
4204  ----------------------------------------------------------------------*/
4205 procedure CE_VALIDATE_ACCOUNT_DK (
4206         Xi_ACCOUNT_NUMBER   in varchar2,
4207         Xi_PASS_MAND_CHECK  in varchar2,
4208         Xo_VALUE_OUT        out nocopy varchar2
4209 ) AS
4210     account_value       varchar2(30);
4211     numeric_result      varchar2(30);
4212 
4213 BEGIN
4214     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_dk');
4215 
4216     Xo_VALUE_OUT := Xi_ACCOUNT_NUMBER;
4217     -- 7582842: Disable validations using profile option
4218     IF CE_DISABLE_VALIDATION THEN
4219         cep_standard.debug('validations disabled. no check done');
4220         RETURN;
4221     END IF;
4222 
4223     account_value := upper(Xi_ACCOUNT_NUMBER );
4224     account_value := replace(replace(account_value,' ',''),'-','');
4225 
4226     IF length(account_value) <= 10
4227     THEN    /* length is ok */
4228         numeric_result := ce_check_numeric(ACCOUNT_VALUE,1,length(ACCOUNT_VALUE));
4229         IF numeric_result = '0'
4230         THEN    /* it's numeric so validations successful */
4231             ce_passed_check('ACCOUNT','DK');
4232         ELSE
4233             ce_failed_check('ACCOUNT_NUM','NUMERIC');
4234         END IF; /* end of numeric check */
4235     ELSE
4236         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','10');
4237     END IF;  /* end of length check */
4238 
4239     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_dk');
4240 END CE_VALIDATE_ACCOUNT_DK;
4241 
4242 /* ---------------------------------------------------------------------
4243 | Account Number Validation: FRANCE                                     |
4244 | 9537127: No Zero Padding. Account number should be 11AN                |
4245  ----------------------------------------------------------------------*/
4246 procedure CE_VALIDATE_ACCOUNT_FR (
4247         Xi_ACCOUNT_NUMBER   in varchar2,
4248         Xi_PASS_MAND_CHECK  in varchar2,
4249         Xo_VALUE_OUT        out nocopy varchar2
4250 ) AS
4251 
4252     ACCOUNT_VALUE varchar2(30);
4253 
4254 BEGIN
4255     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_fr');
4256 
4257     Xo_VALUE_OUT  := Xi_ACCOUNT_NUMBER;
4258     -- 7582842: Disable validations using profile option
4259     IF CE_DISABLE_VALIDATION THEN
4260         cep_standard.debug('validations disabled. no check done');
4261         RETURN;
4262     END IF;
4263 
4264     account_value := UPPER(Xi_ACCOUNT_NUMBER);
4265 
4266     -- check for length
4267     IF length(ACCOUNT_VALUE) <> 11
4268     THEN
4269         ce_failed_check('ACCOUNT_NUM','LENGTH','11');
4270     END IF;  /* end of length check */
4271 
4272     -- check for alpha-numeric characters
4273     IF NOT regexp_like(account_value,'^[a-zA-Z0-9]*$')
4274     THEN
4275         ce_failed_check('ACCOUNT_NUM','ALPHANUM');
4276     END IF;
4277 
4278     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_fr');
4279 END CE_VALIDATE_ACCOUNT_FR;
4280 
4281 
4282 /* ---------------------------------------------------------------------
4283 | Account Number Validation: NETHERLANDS                                |
4284  ----------------------------------------------------------------------*/
4285 procedure CE_VALIDATE_ACCOUNT_NL(
4286         Xi_ACCOUNT_NUMBER  in varchar2,
4287         Xi_PASS_MAND_CHECK in varchar2
4288 ) AS
4289 
4290     account_value       VARCHAR2(30);
4291     numeric_result      VARCHAR2(40);
4292     position_i          NUMBER(2);
4293     integer_value       NUMBER(1);
4294     multiplied_number   NUMBER(2);
4295     multiplied_sum      NUMBER(3);
4296     loop_sum            NUMBER(3);
4297                            /**************************/
4298                            /* SUB-PROCEDURES SECTION */
4299                            /**************************/
4300     procedure check_11(
4301             input_value     IN  VARCHAR2,
4302             mult_sum_result OUT NOCOPY NUMBER
4303     )
4304     IS
4305     BEGIN
4306           FOR position_i in 1..10  LOOP
4307               integer_value := substr(input_value,position_i,1);
4308               multiplied_number := integer_value * (11-position_i);
4309               loop_sum := loop_sum + multiplied_number;
4310           END LOOP;
4311           mult_sum_result := loop_sum;
4312     END check_11;
4313                            /**************************/
4314                            /*      MAIN SECTION      */
4315                            /**************************/
4316 BEGIN
4317     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_nl');
4318 
4319     -- 7582842: Disable validations using profile option
4320     IF CE_DISABLE_VALIDATION THEN
4321         cep_standard.debug('validations disabled. no check done');
4322         RETURN;
4323     END IF;
4324 
4325     multiplied_number := 0;
4326     multiplied_sum := 0;
4327     loop_sum := 0;
4328 
4329 	ACCOUNT_VALUE := upper(Xi_ACCOUNT_NUMBER );
4330 	ACCOUNT_VALUE := replace(replace(account_value,' ',''),'-','');
4331 
4332     --
4333     -- Bug 8478951: Change of validation for NL Post/Giro Accounts
4334     -- A. If the bank account number is numeric and consists of
4335     --    - 7 digits or less, or
4336     --    - prefixed with 000, or
4337     --    - prefixed with P/G
4338     --    then bank account will be considered as Post/Giro Account
4339     -- B. If the bank account number is of 9/10 digits then the existing
4340     --    validations will be applied.
4341     --
4342     IF (substr(ACCOUNT_VALUE,1,1) = 'P' OR substr(ACCOUNT_VALUE,1,1) = 'G')
4343      OR substr(ACCOUNT_VALUE,1,3) = '000'
4344      OR length(ACCOUNT_VALUE) <= 7
4345 
4346     THEN -- 'Giro' and 'Postbank' accounts
4347 
4348         cep_standard.debug('Validating account as Post/Giro...');
4349         -- Remove preceeding format strings
4350         IF (substr(ACCOUNT_VALUE,1,1) = 'P' OR substr(ACCOUNT_VALUE,1,1) = 'G')
4351         THEN
4352             ACCOUNT_VALUE := substr(ACCOUNT_VALUE,2,length(ACCOUNT_VALUE));
4353         ELSIF substr(ACCOUNT_VALUE,1,3) = '000'
4354         THEN
4355             ACCOUNT_VALUE := substr(ACCOUNT_VALUE,4,length(ACCOUNT_VALUE));
4356         END IF;
4357 
4358         -- Check for length of the account number
4359         IF length(ACCOUNT_VALUE) <= 7
4360         THEN
4361             numeric_result := ce_check_numeric(ACCOUNT_VALUE,1,length(ACCOUNT_VALUE));
4362             IF numeric_result = '0'
4363             THEN /* all validations successful */
4364                 ce_passed_check('ACCOUNT','NL');
4365             ELSE  /* failed numeric check */
4366                 ce_failed_check('ACCOUNT_NUM','POST_GIRO');
4367             END IF;
4368         ELSE  /* failed length check  */
4369             ce_failed_check('ACCOUNT_NUM','POST_GIRO');
4370         END IF;
4371 
4372     ELSE /* not a PostGiro account */
4373         cep_standard.debug('Validating account as regular...');
4374         -- check length
4375         IF length(ACCOUNT_VALUE) < 9
4376         THEN
4377             ce_failed_check('ACCOUNT_NUM','LENGTH_MIN','9');
4378         ELSIF length(ACCOUNT_VALUE) > 10
4379         THEN
4380             ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','10'); -- 12890281: Fixed error message.
4381         ELSE /* length is ok */
4382 
4383             numeric_result := ce_check_numeric(ACCOUNT_VALUE,1,length(ACCOUNT_VALUE));
4384             IF numeric_result = '0' AND instr(ACCOUNT_VALUE,' ') = 0
4385             THEN    /* it's numeric so continue */
4386 
4387                 ACCOUNT_VALUE := lpad(ACCOUNT_VALUE,10,0);
4388                 check_11(ACCOUNT_VALUE,multiplied_sum);
4389                 IF mod(multiplied_sum,11) = 0
4390                 THEN
4391                     ce_passed_check('ACCOUNT','NL');
4392                 ELSE
4393                     ce_failed_check('ACCOUNT_NUM','CD_FAILED');
4394                 END IF; /* end of CD validation */
4395 
4396             ELSE
4397                 ce_failed_check('ACCOUNT_NUM','NUMERIC');
4398             END IF; /* end of numeric check */
4399 
4400         END IF; /* end of length check */
4401 
4402     END IF; /* end of 'Postgiro' check */
4403 
4404     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_nl');
4405 END CE_VALIDATE_ACCOUNT_NL;
4406 
4407 /* ---------------------------------------------------------------------
4408 | Account Number Validation: SPAIN                                      |
4409 | Bug 9539000: Account number should be 10N. No automatic zero padding  |
4410  ----------------------------------------------------------------------*/
4411 procedure CE_VALIDATE_ACCOUNT_ES(
4412         Xi_ACCOUNT_NUMBER   in varchar2,
4413         Xi_PASS_MAND_CHECK  in varchar2,
4414         Xo_VALUE_OUT        out nocopy varchar2
4415 ) AS
4416 
4417     account_value   VARCHAR2(30);
4418 
4419 BEGIN
4420     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_es');
4421 
4422     Xo_VALUE_OUT := Xi_ACCOUNT_NUMBER; -- 12998039: Prevent auto-uppercase conversion
4423     ACCOUNT_VALUE := upper(Xi_ACCOUNT_NUMBER);
4424 
4425     -- 7582842: Disable validations using profile option
4426     IF CE_DISABLE_VALIDATION THEN
4427         cep_standard.debug('validations disabled. no check done');
4428         RETURN;
4429     END IF;
4430 
4431     -- check for length
4432     IF length(ACCOUNT_VALUE) <> 10 -- Bug 9058549: length must be 10 digits
4433     THEN
4434         ce_failed_check('ACCOUNT_NUM','LENGTH','10');
4435     END IF;
4436 
4437     -- check for numeric digits
4438     IF NOT regexp_like(account_value,'^[0-9]*$')
4439     THEN
4440         ce_failed_check('ACCOUNT_NUM','NUMERIC');
4441     END IF;
4442 
4443     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_es');
4444 END CE_VALIDATE_ACCOUNT_ES;
4445 
4446 /* ---------------------------------------------------------------------+
4447 | Account Number Validation: NORWAY                                     |
4448 +----------------------------------------------------------------------*/
4449 procedure CE_VALIDATE_ACCOUNT_NO (
4450         Xi_ACCOUNT_NUMBER  in varchar2,
4451         Xi_PASS_MAND_CHECK in varchar2
4452 ) AS
4453 
4454     account_value   VARCHAR2(30);
4455     numeric_result  VARCHAR2(40);
4456     computed_sum    NUMBER;
4457     calc_cd         NUMBER;
4458     check_digit     VARCHAR2(20);
4459 
4460 BEGIN
4461     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_no');
4462 
4463     -- 7582842: Disable validations using profile option
4464     IF CE_DISABLE_VALIDATION THEN
4465         cep_standard.debug('validations disabled. no check done');
4466         RETURN;
4467     END IF;
4468 
4469     ACCOUNT_VALUE := upper(Xi_ACCOUNT_NUMBER );
4470 	ACCOUNT_VALUE := replace(replace(account_value,' ',''),'-','');
4471 
4472     IF  length(ACCOUNT_VALUE) = 11
4473     THEN    /* length is ok */
4474         check_digit := substr(ACCOUNT_VALUE,11,1);
4475 
4476         numeric_result := ce_check_numeric(ACCOUNT_VALUE,1,length(ACCOUNT_VALUE));
4477         IF numeric_result = '0'
4478         THEN    /* its numeric so continue */
4479 			/* perform check digit validation only if 5,6 digits are not 0 */
4480             IF (substr(ACCOUNT_VALUE,5,2) <> '00')
4481             THEN
4482                 computed_sum := 5 * substr(ACCOUNT_VALUE,1,1) +
4483                                 4 * substr(ACCOUNT_VALUE,2,1) +
4484                                 3 * substr(ACCOUNT_VALUE,3,1) +
4485                                 2 * substr(ACCOUNT_VALUE,4,1) +
4486                                 7 * substr(ACCOUNT_VALUE,5,1) +
4487                                 6 * substr(ACCOUNT_VALUE,6,1) +
4488                                 5 * substr(ACCOUNT_VALUE,7,1) +
4489                                 4 * substr(ACCOUNT_VALUE,8,1) +
4490                                 3 * substr(ACCOUNT_VALUE,9,1) +
4491                                 2 * substr(ACCOUNT_VALUE,10,1);
4492 
4493                 calc_cd := 11 - mod(computed_sum,11);
4494 
4495                 /* if remainder is 0 THEN check digit is 0 */
4496                 IF calc_cd = 11 THEN
4497                     calc_cd := 0;
4498                 ELSIF calc_cd = 10 THEN
4499                     /* check digit 10 cannot be used */
4500                     ce_failed_check('ACCOUNT_NUM','CD_FAILED');
4501                 END IF;
4502 
4503                 IF to_char(calc_cd) <> check_digit
4504                 THEN    /* check digit is not ok */
4505                     ce_failed_check('ACCOUNT_NUM','CD_FAILED');
4506                 ELSE
4507                     ce_passed_check('ACCOUNT','NO');
4508                 END IF;
4509 			END IF; /* end of check digit validation */
4510 
4511         ELSE
4512             ce_failed_check('ACCOUNT_NUM','NUMERIC');
4513         END IF; /* end of numeric check */
4514 
4515     ELSE
4516         ce_failed_check('ACCOUNT_NUM','LENGTH','11');
4517     END IF; /* end of length check */
4518 
4519     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_no');
4520 END CE_VALIDATE_ACCOUNT_NO;
4521 
4522 /* ---------------------------------------------------------------------
4523 | Account Number Validation: FINLAND                                    |
4524  ----------------------------------------------------------------------*/
4525 -- Bug 11783906
4526 Procedure CE_VALIDATE_ACCOUNT_FI (
4527         Xi_ACCOUNT_NUMBER  in varchar2,
4528         Xi_PASS_MAND_CHECK in varchar2
4529 ) AS
4530 
4531     account_value     VARCHAR2(30);
4532     account_pad_value VARCHAR2(30);
4533     int_val           NUMBER;
4534     weighted_sum      NUMBER;
4535     digit             NUMBER;
4536 
4537 BEGIN
4538     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_fi');
4539 
4540     -- 7582842: Disable validations using profile option
4541     IF CE_DISABLE_VALIDATION THEN
4542         cep_standard.debug('validations disabled. no check done');
4543         RETURN;
4544     END IF;
4545 
4546     -- remove formatting characters
4547     account_value := ce_remove_formats(Xi_Account_Number);
4548     cep_standard.debug('account_value='||account_value);
4549 
4550     --check the length
4551     IF (length(account_value) < 15)
4552     THEN
4553         IF (length(account_value) > 7)
4554         THEN
4555             IF ce_check_numeric(ACCOUNT_VALUE,1,length(ACCOUNT_VALUE)) = '0'
4556             THEN
4557                 -- numeric check passed. perform checksum validation
4558                 -- pad upto 14 digits
4559                 IF (SubStr(account_value,1,1) IN ('4','5'))
4560                 THEN
4561                     account_pad_value := SubStr(account_value,1,7) ||
4562                                     LPad(SubStr(account_value,8,Length(account_value)),7,'0');
4563                 ELSE
4564                     account_pad_value := SubStr(account_value,1,6) ||
4565                                     LPad(SubStr(account_value,7,Length(account_value)),8,'0');
4566                 END IF;
4567                 cep_standard.debug('account_pad_value='||account_pad_value);
4568 
4569                 -- Luhn Mod 10 Alogrithm
4570                 int_val := To_Number(
4571                             To_Char(SubStr(account_pad_value,1,1) *2)||
4572                             To_Char(SubStr(account_pad_value,2,1) *1)||
4573                             To_Char(SubStr(account_pad_value,3,1) *2)||
4574                             To_Char(SubStr(account_pad_value,4,1) *1)||
4575                             To_Char(SubStr(account_pad_value,5,1) *2)||
4576                             To_Char(SubStr(account_pad_value,6,1) *1)||
4577                             To_Char(SubStr(account_pad_value,7,1) *2)||
4578                             To_Char(SubStr(account_pad_value,8,1) *1)||
4579                             To_Char(SubStr(account_pad_value,9,1) *2)||
4580                             To_Char(SubStr(account_pad_value,10,1)*1)||
4581                             To_Char(SubStr(account_pad_value,11,1)*2)||
4582                             To_Char(SubStr(account_pad_value,12,1)*1)||
4583                             To_Char(SubStr(account_pad_value,13,1)*2)||
4584                             To_Char(SubStr(account_pad_value,14,1)*1)
4585                            );
4586                 cep_standard.debug('int_val='||int_val);
4587                 weighted_sum := 0;
4588                 WHILE int_val <> 0
4589                 LOOP
4590                     digit := Mod(int_val,10);
4591                     weighted_sum := weighted_sum + digit;
4592                     int_val := floor(int_val/10);
4593                 END LOOP;
4594 
4595                 cep_standard.debug ('weighted_sum='||weighted_sum);
4596 
4597                 IF (Mod(weighted_sum,10)=0)
4598                 THEN
4599                     ce_passed_check('ACCOUNT','FI');
4600                 ELSE
4601                     ce_failed_check('ACCOUNT_NUM','CD_FAILED');
4602                 END IF;
4603 
4604             ELSE
4605                 ce_failed_check('ACCOUNT_NUM','NUMERIC');
4606             END IF; -- End Numeric check
4607         ELSE
4608         --Bug 14635098: Token parameter changed to 8
4609             ce_failed_check('ACCOUNT_NUM','LENGTH_MIN','8');
4610         END IF; -- End Min Length check
4611     ELSE
4612         --Bug 14635098: Token parameter changed to 14
4613         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','14');
4614     END IF; -- End Max Length check
4615 
4616     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_fi');
4617 END CE_VALIDATE_ACCOUNT_FI;
4618 
4619 /* ---------------------------------------------------------------------
4620 | Account Number Validation: GERMANY                                    |
4621 | Bug 9539000: Account Number should be 1-10N. No auto zero-padding     |
4622  ----------------------------------------------------------------------*/
4623  procedure CE_VALIDATE_ACCOUNT_DE(
4624         Xi_ACCOUNT_NUMBER   in varchar2,
4625         Xo_VALUE_OUT        out nocopy varchar2
4626 ) AS
4627 
4628     account_value   VARCHAR2(60);
4629     numeric_result  VARCHAR2(40);
4630 
4631 BEGIN
4632     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_DE');
4633 
4634     Xo_VALUE_OUT := Xi_ACCOUNT_NUMBER; -- 12998039: Prevent auto-uppercase conversion
4635     account_value := upper(Xi_ACCOUNT_NUMBER );
4636 
4637     -- 7582842: Disable validations using profile option
4638     IF CE_DISABLE_VALIDATION THEN
4639         cep_standard.debug('validations disabled. no check done');
4640         RETURN;
4641     END IF;
4642 
4643     -- length check
4644     IF length(account_value) > 10
4645     THEN
4646         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','10');
4647     END IF;
4648 
4649     -- numeric check
4650     IF NOT regexp_like(account_value,'^[0-9]*$')
4651     THEN
4652         ce_failed_check('ACCOUNT_NUM','NUMERIC');
4653     END IF;
4654 
4655     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_DE');
4656 END CE_VALIDATE_ACCOUNT_DE;
4657 
4658 /* ---------------------------------------------------------------------
4659 | Account Number Validation: GREECE                                     |
4660  ----------------------------------------------------------------------*/
4661 procedure CE_VALIDATE_ACCOUNT_GR(
4662         Xi_ACCOUNT_NUMBER   in varchar2,
4663         Xo_VALUE_OUT        out nocopy varchar2
4664 ) AS
4665 
4666     account_value   VARCHAR2(30);
4667     numeric_result  VARCHAR2(40);
4668 
4669 BEGIN
4670     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_GR');
4671 
4672     Xo_VALUE_OUT := Xi_ACCOUNT_NUMBER;
4673     -- 7582842: Disable validations using profile option
4674     IF CE_DISABLE_VALIDATION THEN
4675         cep_standard.debug('validations disabled. no check done');
4676         RETURN;
4677     END IF;
4678 
4679     -- remove spaces and hyphens --
4680     account_value := replace(Xi_ACCOUNT_NUMBER,' ',''); -- 12998039: remove uppercase conversion
4681     account_value := replace(account_value,'-','');
4682 
4683     IF length(account_value) < 8
4684     THEN
4685         ce_failed_check('ACCOUNT_NUM','LENGTH_MIN','8');
4686     ELSIF length(account_value) > 16 -- 8207572
4687     THEN
4688         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','16'); -- Bug 8207572
4689     ELSE    /* length is ok */
4690         -- 8207572: removed numeric check and changed padding length
4691         Xo_VALUE_OUT := lpad(account_value,16,0);
4692         ce_passed_check('ACCOUNT','GR');
4693     END IF;  /* end of length check */
4694 
4695     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_GR');
4696 END CE_VALIDATE_ACCOUNT_GR;
4697 
4698 /* ---------------------------------------------------------------------
4699 | Account Number Validation: ICELAND                                    |
4700  ----------------------------------------------------------------------*/
4701 procedure CE_VALIDATE_ACCOUNT_IS(
4702         Xi_ACCOUNT_NUMBER  in varchar2,
4703         Xo_VALUE_OUT       out  nocopy varchar2
4704 )   AS
4705 
4706     ac_value       VARCHAR2(50);
4707     cal_cd         NUMBER;
4708     cal_cd1        NUMBER;
4709     cd_value       VARCHAR2(50);
4710     ac_cd_value    VARCHAR2(50);
4711     numeric_result VARCHAR2(40);
4712 
4713 BEGIN
4714     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_is');
4715 
4716     Xo_VALUE_OUT := Xi_ACCOUNT_NUMBER;
4717     -- 7582842: Disable validations using profile option
4718     IF CE_DISABLE_VALIDATION THEN
4719         cep_standard.debug('validations disabled. no check done');
4720         RETURN;
4721     END IF;
4722 
4723     -- remove spaces and hyphens --
4724     ac_value := upper(Xi_ACCOUNT_NUMBER );
4725     ac_value := replace(ac_value,' ','');
4726     ac_value := replace(ac_value,'-','');
4727 
4728     IF length(ac_value) <= 18
4729     THEN    /* length is ok */
4730         numeric_result := ce_check_numeric(AC_VALUE,1,length(AC_VALUE));
4731         IF numeric_result = '0'
4732         THEN    /* its numeric so continue */
4733             ac_value     := lpad(ac_value,18,0);
4734             Xo_VALUE_OUT := ac_value;
4735 
4736             cal_cd1 := mod(( (to_number(substr(ac_value,9,1))  * 3)
4737                             +(to_number(substr(ac_value,10,1)) * 2)
4738                             +(to_number(substr(ac_value,11,1)) * 7)
4739                             +(to_number(substr(ac_value,12,1)) * 6)
4740                             +(to_number(substr(ac_value,13,1)) * 5)
4741                             +(to_number(substr(ac_value,14,1)) * 4)
4742                             +(to_number(substr(ac_value,15,1)) * 3)
4743                             +(to_number(substr(ac_value,16,1)) * 2)),11);
4744 
4745             IF cal_cd1 = 0 THEN
4746                 cal_cd := 0;
4747             ELSE
4748                 cal_cd := (11 - cal_cd1);
4749             END IF;
4750 
4751             -- the check digit is the penultimate digit of (a3).
4752             ac_cd_value := substr(ac_value,17,1);
4753 
4754             IF ac_cd_value = cal_cd
4755             THEN    /* check digit checks out */
4756                 ce_passed_check('ACCOUNT','IS');
4757             ELSE
4758                 ce_failed_check('ACCOUNT_NUM','CD_FAILED');
4759             END IF; /* end of CD validation */
4760 
4761         ELSE
4762             ce_failed_check('ACCOUNT_NUM','NUMERIC');
4763         END IF; /* end of numeric check */
4764 
4765     ELSE
4766         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','18');
4767     END IF;  /* end of length check */
4768 
4769     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_is');
4770 END CE_VALIDATE_ACCOUNT_IS;
4771 
4772 /* ---------------------------------------------------------------------
4773 | Account Number Validation: IRELAND                                    |
4774  ----------------------------------------------------------------------*/
4775 procedure CE_VALIDATE_ACCOUNT_IE(
4776         Xi_ACCOUNT_NUMBER  in varchar2
4777 )   AS
4778 
4779         account_value   VARCHAR2(30);
4780         numeric_result  VARCHAR2(40);
4781 
4782 BEGIN
4783     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_ie');
4784 
4785     -- 7582842: Disable validations using profile option
4786     IF CE_DISABLE_VALIDATION THEN
4787         cep_standard.debug('validations disabled. no check done');
4788         RETURN;
4789     END IF;
4790 
4791     -- remove spaces and hyphens --
4792     account_value := upper(Xi_ACCOUNT_NUMBER );
4793     account_value := replace(account_value,' ','');
4794     account_value := replace(account_value,'-','');
4795 
4796     IF length(account_value) = 8
4797     THEN    /* length is ok */
4798         numeric_result := ce_check_numeric(ACCOUNT_VALUE,1,length(ACCOUNT_VALUE));
4799         IF numeric_result = '0'
4800         THEN    /* it's numeric so validations successful */
4801             ce_passed_check('ACCOUNT','IE');
4802         ELSE
4803             ce_failed_check('ACCOUNT_NUM','NUMERIC');
4804         END IF; /* end of numeric check */
4805     ELSE
4806        ce_failed_check('ACCOUNT_NUM','LENGTH','8');
4807     END IF;  /* end of length check */
4808 
4809     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_ie');
4810 END CE_VALIDATE_ACCOUNT_IE;
4811 
4812 /* ---------------------------------------------------------------------
4813 | Account Number Validation: ITALY                                      |
4814  ----------------------------------------------------------------------*/
4815 procedure CE_VALIDATE_ACCOUNT_IT(
4816         Xi_ACCOUNT_NUMBER  in varchar2,
4817         Xo_VALUE_OUT OUT NOCOPY varchar2
4818 ) AS
4819 
4820     account_value VARCHAR2(50);
4821 
4822 BEGIN
4823     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_it');
4824 
4825     Xo_VALUE_OUT := Xi_ACCOUNT_NUMBER;
4826     -- 7582842: Disable validations using profile option
4827     IF CE_DISABLE_VALIDATION THEN
4828         cep_standard.debug('validations disabled. no check done');
4829         RETURN;
4830     END IF;
4831 
4832     -- remove hyphens and spaces --
4833     account_value := replace(Xi_ACCOUNT_NUMBER,' ',''); -- 12998039: remove uppercase conversion
4834     account_value := replace(account_value,'-','');
4835 
4836     IF length(account_value) <= 12
4837     THEN    /* length is ok */
4838         Xo_VALUE_OUT := lpad(account_value,12,0);
4839         ce_passed_check('ACCOUNT','IT');
4840     ELSE
4841         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','12');
4842     END IF;  /* end of length check */
4843 
4844     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_it');
4845 END CE_VALIDATE_ACCOUNT_IT;
4846 
4847 /* ---------------------------------------------------------------------
4848 | Account Number Validation: LUXEMBOURG                                 |
4849  ----------------------------------------------------------------------*/
4850 procedure CE_VALIDATE_ACCOUNT_LU(
4851     Xi_ACCOUNT_NUMBER  in varchar2
4852 ) AS
4853     account_value   varchar2(30);
4854     numeric_result  varchar2(40);
4855 
4856 BEGIN
4857     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_lu');
4858 
4859     -- 7582842: Disable validations using profile option
4860     IF CE_DISABLE_VALIDATION THEN
4861         cep_standard.debug('validations disabled. no check done');
4862         RETURN;
4863     END IF;
4864 
4865     -- remove spaces and hyphens --
4866     account_value := upper(Xi_ACCOUNT_NUMBER );
4867     account_value := replace(account_value,' ','');
4868     account_value := replace(account_value,'-','');
4869 
4870     -- 6005620: Standardized IBAN structure. Account number: 13an
4871     IF length(account_value) = 13
4872     THEN    /* length is ok */
4873         ce_passed_check('ACCOUNT','LU');
4874     ELSE
4875        -- Bug 7570051 : Correct length token
4876        ce_failed_check('ACCOUNT_NUM','LENGTH','13');
4877     END IF;  /* end of length check */
4878 
4879     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_lu');
4880 END CE_VALIDATE_ACCOUNT_LU;
4881 
4882 /* ---------------------------------------------------------------------
4883 | Account Number Validation: POLAND                                     |
4884 | 9537127: Account Number should be 16N                                 |
4885  ----------------------------------------------------------------------*/
4886 procedure CE_VALIDATE_ACCOUNT_PL(
4887         Xi_ACCOUNT_NUMBER  in varchar2
4888 ) AS
4889     account_value   VARCHAR2(30);
4890 
4891 BEGIN
4892     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_pl');
4893 
4894     -- 7582842: Disable validations using profile option
4895     IF CE_DISABLE_VALIDATION THEN
4896         cep_standard.debug('validations disabled. no check done');
4897         RETURN;
4898     END IF;
4899 
4900     account_value := UPPER(Xi_ACCOUNT_NUMBER);
4901 
4902     -- check for length
4903     IF length(account_value) <> 16
4904     THEN
4905         ce_failed_check('ACCOUNT_NUM','LENGTH','16');
4906     END IF;
4907 
4908     -- check for numeric digits
4909     IF NOT regexp_like(account_value,'^[0-9]*$')
4910     THEN
4911         ce_failed_check('ACCOUNT_NUM','NUMERIC');
4912     END IF;
4913 
4914     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_pl');
4915 END CE_VALIDATE_ACCOUNT_PL;
4916 
4917 /* ---------------------------------------------------------------------
4918 | Account Number Validation: SWEDEN                                     |
4919  ----------------------------------------------------------------------*/
4920 procedure CE_VALIDATE_ACCOUNT_SE(
4921         Xi_ACCOUNT_NUMBER  in varchar2
4922 ) AS
4923     account_value   VARCHAR2(30);
4924     numeric_result  VARCHAR2(40);
4925 
4926 BEGIN
4927     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_se');
4928 
4929     -- 7582842: Disable validations using profile option
4930     IF CE_DISABLE_VALIDATION THEN
4931         cep_standard.debug('validations disabled. no check done');
4932         RETURN;
4933     END IF;
4934 
4935     -- remove spaces and hyphens --
4936     account_value := upper(replace(Xi_ACCOUNT_NUMBER ,' ',''));
4937     account_value := replace(account_value,'-','');
4938 
4939     IF length(account_value) <= 16 -- 8246542: validation changed to 16 from 11
4940     THEN    /* length is ok */
4941         numeric_result := ce_check_numeric(ACCOUNT_VALUE,1,length(ACCOUNT_VALUE));
4942         IF numeric_result = '0'
4943         THEN
4944             ce_passed_check('ACCOUNT','SE');
4945         ELSE
4946             ce_failed_check('ACCOUNT_NUM','NUMERIC');
4947         END IF;
4948     ELSE
4949         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','16'); -- 8246542
4950     END IF;  /* end of length check */
4951 
4952     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_se');
4953 END CE_VALIDATE_ACCOUNT_SE;
4954 
4955 /* ---------------------------------------------------------------------
4956 | Account Number Validation: SWITZERLAND                                |
4957 | 9537127: Account number should be  1/16AN                             |
4958  ----------------------------------------------------------------------*/
4959 procedure CE_VALIDATE_ACCOUNT_CH(
4960         Xi_ACCOUNT_NUMBER   in varchar2,
4961         Xi_ACCOUNT_TYPE     in varchar2
4962 ) AS
4963 
4964     account_value   VARCHAR2(30);
4965 
4966 BEGIN
4967     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_ch');
4968 
4969     --8707415  Removed mandatory check for the account type, removed the code
4970     -- 7582842: Disable validations using profile option
4971     IF CE_DISABLE_VALIDATION THEN
4972         cep_standard.debug('validations disabled');
4973         RETURN;
4974     END IF;
4975 
4976     account_value := UPPER(Xi_ACCOUNT_NUMBER);
4977 
4978     -- check for max length
4979     IF length(account_value) > 16  THEN
4980         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','16');
4981     END IF;  /* end of length check */
4982 
4983     -- check for alphanumeric values
4984     IF NOT regexp_like(account_value,'^[a-zA-Z0-9]*$') THEN
4985         ce_failed_check('ACCOUNT_NUM','ALPHANUM');
4986     END IF;
4987 
4988     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_ch');
4989 END CE_VALIDATE_ACCOUNT_CH;
4990 
4991 /* ---------------------------------------------------------------------
4992 | Account Number Validation: UNITED KINGDOM                             |
4993  ----------------------------------------------------------------------*/
4994 procedure CE_VALIDATE_ACCOUNT_GB(
4995         Xi_ACCOUNT_NUMBER   in varchar2,
4996         Xi_BRANCH_NUMBER    in varchar2 default null,  ---Bug16234978, 16468593
4997         Xo_VALUE_OUT        out nocopy varchar2
4998 ) AS
4999 
5000     account_value   VARCHAR2(30);
5001     numeric_result  VARCHAR2(40);
5002     l_return_status VARCHAR2(1);         ---Bug16234978
5003     branch_num      VARCHAR2(8);         ---Bug16234978
5004 BEGIN
5005     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_gb');
5006 
5007     Xo_VALUE_OUT := Xi_ACCOUNT_NUMBER;
5008     -- 7582842: Disable validations using profile option
5009     IF CE_DISABLE_VALIDATION THEN
5010         cep_standard.debug('validations disabled. no check done');
5011         RETURN;
5012     END IF;
5013 
5014     -- initialize API return status to success.
5015     l_return_status := fnd_api.g_ret_sts_success;          ---- Bug16234978
5016 
5017     account_value := upper(replace(Xi_ACCOUNT_NUMBER,' ',''));
5018     account_value := replace(account_value,'-','');
5019     IF length(account_value) <= 8
5020     THEN    /* length is ok */
5021         numeric_result := ce_check_numeric(ACCOUNT_VALUE,1,length(ACCOUNT_VALUE));
5022         IF numeric_result = '0' THEN
5023             /* it's numeric */
5024             --7022651: Remove zero padding for UK Account Numbers.
5025             --Xo_VALUE_OUT := lpad(account_value,8,0);
5026             /* Bug 16234978 Code change (2/2) starts */
5027             branch_num := upper(replace(Xi_BRANCH_NUMBER,' ',''));
5028             branch_num := replace(branch_num,'-','');
5029             IF branch_num IS NOT NULL then
5030                 CE_VALIDATE_BANKINFO.ce_validate_mod_gb(Xi_ACCOUNT_NUMBER => account_value,
5031                                                         Xi_SORT_CODE      => branch_num,
5032                                                         Xo_RETURN_STATUS  => l_return_status);
5033             END IF;
5034             cep_standard.debug('l_return_status = '||l_return_status);
5035             IF l_return_status = fnd_api.g_ret_sts_error THEN
5036                 ce_failed_check('ACCOUNT_NUM', 'CD_FAILED');
5037             ELSE
5038                 ce_passed_check('ACCOUNT','GB');
5039             END IF;
5040         /* Bug 16234978 Code change (2/2) ends */
5041         ELSE
5042             ce_failed_check('ACCOUNT_NUM','NUMERIC');
5043         END IF; /* end of numeric check */
5044     ELSE
5045         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','8');
5046     END IF;  /* end of length check */
5047 
5048     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_gb');
5049 END CE_VALIDATE_ACCOUNT_GB;
5050 
5051 /* ---------------------------------------------------------------------
5052 | Account Number Validation: BRAZIL                                     |
5053  ----------------------------------------------------------------------*/
5054 PROCEDURE CE_VALIDATE_ACCOUNT_BR(
5055     Xi_ACCOUNT_NUMBER              IN VARCHAR2,
5056     Xi_SECONDARY_ACCOUNT_REFERENCE IN VARCHAR2 )
5057 AS
5058   account_ref    VARCHAR2(30);
5059   numeric_result VARCHAR2(40);
5060   l_account_num  VARCHAR2(40); -- Bug 16035273
5061 BEGIN
5062   cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_br');
5063   -- 7582842: Disable validations using profile option
5064   IF CE_DISABLE_VALIDATION THEN -- Bug 11065718
5065     cep_standard.debug('validations disabled. no check done');
5066     RETURN;
5067   END IF;
5068   --Bug 16035273
5069   --remove spaces and hyphens from account number
5070   l_account_num      := upper(REPLACE(Xi_ACCOUNT_NUMBER,' ',''));
5071   l_account_num      := REPLACE(l_account_num,'-','');
5072 
5073     IF NOT regexp_like(l_account_num , '^[[:alnum:]]+$') THEN
5074         ce_failed_check('ACCOUNT_NUM','ALPHANUM');
5075     END IF;
5076 
5077   -- remove spaces and hyphens from company code --
5078   account_ref      := upper(REPLACE(Xi_SECONDARY_ACCOUNT_REFERENCE,' ',''));
5079   account_ref      := REPLACE(account_ref,'-','');
5080   IF (account_ref) IS NOT NULL THEN
5081     /* only validate if a value has been entered */
5082     IF LENGTH(account_ref) <= 15 THEN
5083       /* length is ok */
5084       numeric_result   := ce_check_numeric(ACCOUNT_REF,1,LENGTH(ACCOUNT_REF));
5085       IF numeric_result = '0' THEN
5086         /* its numeric so validations successful */
5087         ce_passed_check('ACCOUNT','BR');
5088       ELSE
5089         ce_failed_check('COMPANY_CODE','NUMERIC');
5090       END IF;
5091       /* end of numeric check */
5092     ELSE
5093       ce_failed_check('COMPANY_CODE','LENGTH_MAX','15');
5094     END IF;
5095     /* end of length check */
5096   END IF;
5097   /* end of not null check */
5098   cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_br');
5099 END CE_VALIDATE_ACCOUNT_BR;
5100 
5101 /* ---------------------------------------------------------------------
5102 | Account Number Validation: AUSTRALIA                                  |
5103  ----------------------------------------------------------------------*/
5104 procedure CE_VALIDATE_ACCOUNT_AU(
5105         Xi_ACCOUNT_NUMBER  in varchar2,
5106         Xi_CURRENCY_CODE   in varchar2
5107 ) AS
5108 
5109     account_value   VARCHAR2(30);
5110     numeric_result  VARCHAR2(40);
5111 
5112 BEGIN
5113     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_au');
5114 
5115     -- 7582842: Disable validations using profile option
5116     IF CE_DISABLE_VALIDATION THEN
5117         cep_standard.debug('validations disabled. no check done');
5118         RETURN;
5119     END IF;
5120 
5121     -- remove spaces and hyphens
5122     account_value := upper(Xi_ACCOUNT_NUMBER );
5123     account_value := replace(account_value,' ','');
5124     account_value := replace(account_value,'-','');
5125 
5126     --   Bug 6079454 changed minimum length to 6
5127     --   Bug 8228625 changed minimum length to 5
5128     IF length(account_value) > 10
5129     THEN
5130         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','10');
5131     ELSIF length(account_value) < 5
5132     THEN
5133         ce_failed_check('ACCOUNT_NUM','LENGTH_MIN','5');
5134     ELSE    /* length is ok */
5135         -- 6760446: Numeric check only for AUD denominated accounts.
5136         IF Xi_CURRENCY_CODE = 'AUD'
5137         THEN
5138             numeric_result := ce_check_numeric(ACCOUNT_VALUE,1,length(ACCOUNT_VALUE));
5139             IF numeric_result = '0'
5140             THEN    /* its is numeric - validation succesful */
5141                 ce_passed_check('ACCOUNT','AU');
5142             ELSE
5143                 ce_failed_check('ACCOUNT_NUM','NUMERIC');
5144             END IF; /* end of numeric check */
5145         ELSE
5146             ce_passed_check('ACCOUNT','AU');
5147         END IF; /* end of currency check */
5148     END IF;  /* end of length check */
5149 
5150     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_au');
5151 END CE_VALIDATE_ACCOUNT_AU;
5152 
5153 /* ---------------------------------------------------------------------
5154 | Account Number Validation: ISRAEL                                     |
5155  ----------------------------------------------------------------------*/
5156  procedure CE_VALIDATE_ACCOUNT_IL(
5157         Xi_ACCOUNT_NUMBER  in varchar2
5158 ) AS
5159 
5160     account_value  VARCHAR2(30);
5161     numeric_result VARCHAR2(40);
5162 
5163 BEGIN
5164     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_il');
5165 
5166     -- 7582842: Disable validations using profile option
5167     IF CE_DISABLE_VALIDATION THEN
5168         cep_standard.debug('validations disabled. no check done');
5169         RETURN;
5170     END IF;
5171 
5172     account_value := upper(Xi_ACCOUNT_NUMBER );
5173     account_value := replace(account_value,' ','');
5174     account_value := replace(account_value,'-','');
5175     -- Bug 9645400
5176     IF length(account_value) <= 9
5177     THEN    /* length is ok */
5178         numeric_result := ce_check_numeric(ACCOUNT_VALUE,1,length(ACCOUNT_VALUE));
5179         IF numeric_result = '0'
5180         THEN    /* its numeric validations successful */
5181             ce_passed_check('ACCOUNT','IL');
5182         ELSE
5183             ce_failed_check('ACCOUNT_NUM','NUMERIC');
5184         END IF; /* end of numeric check */
5185     ELSE
5186         ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','9');
5187     END IF;  /* end of length check */
5188 
5189     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_il');
5190 END CE_VALIDATE_ACCOUNT_IL;
5191 
5192 /* ---------------------------------------------------------------------
5193 | Account Number Validation: NEW ZEALAND                                |
5194  ----------------------------------------------------------------------*/
5195 procedure CE_VALIDATE_ACCOUNT_NZ(
5196         Xi_ACCOUNT_NUMBER  in varchar2,
5197         Xi_ACCOUNT_SUFFIX in varchar2
5198 ) AS
5199 
5200     account_value   VARCHAR2(30);
5201     account_suffix  VARCHAR2(30);
5202     numeric_result  VARCHAR2(40);
5203 
5204 BEGIN
5205     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_nz');
5206 
5207 --  bug 8416679, relaxed account validations for New Zealand
5208 --    -- check account number
5209 --    account_value := upper(Xi_ACCOUNT_NUMBER );
5210 --    account_value := replace(account_value,' ','');
5211 --    account_value := replace(account_value,'-','');
5212 --
5213 --
5214 --    IF length(account_value) > 8
5215 --    THEN
5216 --        ce_failed_check('ACCOUNT_NUM','LENGTH_MAX','8');
5217 --    ELSIF length(account_value) < 6
5218 --    THEN
5219 --        ce_failed_check('ACCOUNT_NUM','LENGTH_MIN','6');
5220 --    ELSE
5221 --        numeric_result := ce_check_numeric(ACCOUNT_VALUE,1,length(ACCOUNT_VALUE));
5222 --        IF numeric_result = '0'
5223 --        THEN    /* it's numeric so validations successful */
5224 --            ce_passed_check('ACCOUNT','NZ');
5225 --        ELSE
5226 --            ce_failed_check('ACCOUNT_NUM','NUMERIC');
5227 --        END IF; /* end of numeric check */
5228 --    END IF;  /* end of length check */
5229 --
5230 --    -- check account_suffix
5231 --    account_suffix := upper(Xi_ACCOUNT_SUFFIX );
5232 --    account_suffix := replace(account_suffix,' ','');
5233 --    account_suffix := replace(account_suffix,'-','');
5234 --
5235 --    IF account_suffix IS NOT NULL
5236 --    THEN
5237 --        IF length(account_suffix) = 3
5238 --        THEN    /* length is ok */
5239 --            numeric_result := ce_check_numeric(ACCOUNT_SUFFIX,1,length(ACCOUNT_SUFFIX));
5240 --            IF numeric_result = '0'
5241 --            THEN    /* it's numeric all validations successful */
5242 --                ce_passed_check('ACCOUNT','NZ');
5243 --            ELSE
5244 --                ce_failed_check('ACCOUNT_SUFFIX','NUMERIC');
5245 --            END IF; /* end of numeric check */
5246 --        ELSE
5247 --            ce_failed_check('ACCOUNT_SUFFIX','LENGTH','3');
5248 --        END IF;  /* end of length check */
5249 --    ELSE
5250 --        ce_failed_mandatory('ACCOUNT_SUFFIX');
5251 --    END IF; /* end of mandatory check */
5252 --
5253     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_nz');
5254 END CE_VALIDATE_ACCOUNT_NZ;
5255 
5256 /* ---------------------------------------------------------------------
5257 | Account Number Validation: JAPAN                                      |
5258  ----------------------------------------------------------------------*/
5259 procedure CE_VALIDATE_ACCOUNT_JP(
5260         Xi_ACCOUNT_NUMBER  in varchar2,
5261         Xi_ACCOUNT_TYPE  in varchar2
5262 ) AS
5263 
5264 BEGIN
5265     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_account_jp');
5266 
5267     -- 7582842: No Checks on Account number. Disable profile option does not
5268     -- apply here.
5269 
5270     /* Account number is required */
5271     IF (Xi_ACCOUNT_NUMBER is null)  THEN
5272       ce_failed_mandatory('ACCOUNT_NUMBER');
5273     END if;
5274     /* Account type is required */
5275     IF (Xi_ACCOUNT_TYPE  is null)  THEN
5276       ce_failed_mandatory('ACCOUNT_TYPE');
5277     END if;
5278 
5279 
5280     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_account_jp');
5281 END CE_VALIDATE_ACCOUNT_JP;
5282 
5283 /* --------------------------------------------------------------------
5284 |  PRIVATE PROCEDURE                                                    |
5285 |      CE_VALIDATE_BANK_*                                               |
5286 |                                                                       |
5287 |  CALLED BY                                                            |
5288 |      CE_VALIDATE_BANK                                                 |
5289 |                                                                       |
5290 |  DESCRIPTION                                                          |
5291 |      BANK PROCEDURES, Validate 1 or more of the following:            |
5292 |      1. Bank number length                                            |
5293 |      2. Bank number datatype (numeric, alphanumeric, or alphabet      |
5294 |      3. Bank number Algorithm                                         |
5295 |                                                                       |
5296 |  RETURN                                                               |
5297 |      Xo_VALUE_OUT - Bank Number is return with leading 0              |
5298 |                     (Not for all countries)                           |
5299  --------------------------------------------------------------------- */
5300 
5301 /* ---------------------------------------------------------------------
5302 | Bank Number Validation: SPAIN                                         |
5303  ----------------------------------------------------------------------*/
5304 procedure CE_VALIDATE_BANK_ES (
5305         Xi_BANK_NUMBER      in varchar2,
5306         Xi_PASS_MAND_CHECK  in varchar2,
5307         Xo_VALUE_OUT        OUT NOCOPY varchar2
5308 ) AS
5309 
5310     bank_value VARCHAR2(30);
5311     numeric_result VARCHAR2(40);
5312 
5313 BEGIN
5314     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_es');
5315 
5316     Xo_VALUE_OUT :=  Xi_BANK_NUMBER;
5317     -- 7582842: Disable validations using profile option
5318     IF CE_DISABLE_VALIDATION THEN
5319         cep_standard.debug('validations disabled. no check done');
5320         RETURN;
5321     END IF;
5322 
5323     -- remove spaces and hyphens --
5324 	BANK_VALUE   :=  upper(Xi_BANK_NUMBER);
5325     BANK_VALUE   :=  replace(replace(BANK_VALUE,' ',''),'-','');
5326 
5327     IF Xi_PASS_MAND_CHECK = 'F'
5328     THEN
5329         ce_failed_mandatory('BANK_NUM');
5330 
5331     ELSIF Xi_PASS_MAND_CHECK = 'P'
5332     THEN
5333         IF length(BANK_VALUE) > 4
5334         THEN
5335             ce_failed_check('BANK_NUM','LENGTH_MAX','4');
5336         ELSE
5337             /* length is ok */
5338             BANK_VALUE := lpad(BANK_VALUE,4,0);
5339             numeric_result := ce_check_numeric(BANK_VALUE,1,length(BANK_VALUE));
5340             IF numeric_result = '0'
5341             THEN
5342                 /* its numeric validations successful*/
5343                 Xo_VALUE_OUT := BANK_VALUE;
5344                 ce_passed_check('BANK','ES');
5345             ELSE
5346                 ce_failed_check('BANK_NUM','NUMERIC');
5347             END IF;  /* end of numeric check */
5348         END IF;  /* end of length check */
5349     END IF; /* end of mandatory check  */
5350 
5351     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_es');
5352 END CE_VALIDATE_BANK_ES;
5353 
5354 /* ---------------------------------------------------------------------
5355 | Bank Number Validation: FRANCE                                        |
5356  ----------------------------------------------------------------------*/
5357 procedure CE_VALIDATE_BANK_FR(
5358         Xi_BANK_NUMBER  in varchar2,
5359         Xi_PASS_MAND_CHECK in varchar2,
5360         Xo_VALUE_OUT OUT NOCOPY varchar2
5361 ) AS
5362 BANK_VALUE varchar2(30);
5363 numeric_result varchar2(40);
5364 
5365 BEGIN
5366     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_fr');
5367 
5368     Xo_VALUE_OUT := Xi_BANK_NUMBER;
5369     -- 7582842: Disable validations using profile option
5370     IF CE_DISABLE_VALIDATION THEN
5371         cep_standard.debug('validations disabled. no check done');
5372         RETURN;
5373     END IF;
5374 
5375     -- remove spaces and hyphens --
5376     BANK_VALUE   := upper(Xi_BANK_NUMBER );
5377     BANK_VALUE   := replace(replace(BANK_VALUE,' ',''),'-','');
5378 
5379     IF Xi_PASS_MAND_CHECK = 'F'
5380     THEN
5381         ce_failed_mandatory('BANK_NUM');
5382 
5383     ELSIF Xi_PASS_MAND_CHECK = 'P'
5384     THEN
5385         /* mandatory check passed */
5386 
5387         IF length(BANK_VALUE) > 5
5388         THEN
5389             ce_failed_check('BANK_NUM','LENGTH_MAX','5');
5390         ELSE
5391             /* length check passed */
5392             BANK_VALUE := lpad(BANK_VALUE,5,0);
5393             numeric_result := ce_check_numeric(BANK_VALUE,1,length(BANK_VALUE));
5394 
5395             IF numeric_result = '0'
5396             THEN
5397                 /* numeric check passed - validations successful*/
5398                 Xo_VALUE_OUT := BANK_VALUE;
5399                 ce_passed_check('BANK','FR');
5400             ELSE
5401                 ce_failed_check('BANK_NUM','NUMERIC');
5402             END IF;  /* end of numeric check */
5403         END IF;  /* end of length check */
5404     END IF; /* end of mandatory check  */
5405 
5406     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_fr');
5407 
5408 END CE_VALIDATE_BANK_FR;
5409 
5410 /* ---------------------------------------------------------------------
5411 | Bank Number Validation: PORTUGAL                                      |
5412  ----------------------------------------------------------------------*/
5413 procedure CE_VALIDATE_BANK_PT(
5414         Xi_BANK_NUMBER      in varchar2,
5415         Xi_PASS_MAND_CHECK  in varchar2
5416 ) AS
5417 
5418     bank_value      VARCHAR2(30);
5419     numeric_result  VARCHAR2(40);
5420 
5421 BEGIN
5422     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_pt');
5423 
5424     -- 7582842: Disable validations using profile option
5425     IF CE_DISABLE_VALIDATION THEN
5426         cep_standard.debug('validations disabled. no check done');
5427         RETURN;
5428     END IF;
5429 
5430     -- remove spaces --
5431     BANK_VALUE := replace(replace(Xi_BANK_NUMBER,' ',''),'-','');
5432 
5433     IF Xi_PASS_MAND_CHECK = 'F'
5434     THEN
5435         ce_failed_mandatory('BANK_NUM');
5436 
5437     ELSIF Xi_PASS_MAND_CHECK = 'P'
5438     THEN
5439         IF length(BANK_VALUE) = 4
5440         THEN
5441             /* length is ok */
5442             numeric_result := ce_check_numeric(BANK_VALUE,1,length(BANK_VALUE));
5443             IF numeric_result = '0'
5444             THEN    /* its numeric - validations successful */
5445                 ce_passed_check('BANK','PT');
5446             ELSE
5447                 ce_failed_check('BANK_NUM','NUMERIC');
5448             END IF;  /* end of numeric check */
5449 
5450         ELSE
5451             ce_failed_check('BANK_NUM','LENGTH','4');
5452         END IF;  /* end of length check */
5453 
5454     END IF; /* end of mandatory check  */
5455 
5456     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_pt');
5457 END CE_VALIDATE_BANK_PT;
5458 
5459 /* ---------------------------------------------------------------------
5460 | Bank Number Validation: BRAZIL                                        |
5461  ----------------------------------------------------------------------*/
5462 procedure CE_VALIDATE_BANK_BR(
5463         Xi_BANK_NUMBER      in varchar2,
5464         Xi_PASS_MAND_CHECK  in varchar2,
5465         Xo_VALUE_OUT        OUT NOCOPY varchar2
5466 ) AS
5467 
5468     bank_value      VARCHAR2(30);
5469     numeric_result  VARCHAR2(40);
5470 
5471 BEGIN
5472     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_br');
5473 
5474     Xo_VALUE_OUT := Xi_BANK_NUMBER;
5475     -- 7582842: Disable validations using profile option
5476     IF CE_DISABLE_VALIDATION THEN
5477         cep_standard.debug('validations disabled. no check done');
5478         RETURN;
5479     END IF;
5480 
5481     BANK_VALUE := upper(Xi_BANK_NUMBER );
5482     BANK_VALUE := replace(replace(BANK_VALUE,' ',''),'-','');
5483 
5484     IF Xi_PASS_MAND_CHECK = 'F'
5485     THEN /* mandatory check failed */
5486         ce_failed_mandatory('BANK_NUM');
5487 
5488     ELSIF Xi_PASS_MAND_CHECK = 'P'
5489     THEN
5490         /* mandatory check passed */
5491         IF length(BANK_VALUE) > 3
5492         THEN
5493             ce_failed_check('BANK_NUM','LENGTH_MAX','3');
5494 
5495         ELSE
5496             /* length is ok */
5497             BANK_VALUE := lpad(BANK_VALUE,3,0);
5498             numeric_result := ce_check_numeric(BANK_VALUE,1,length(BANK_VALUE));
5499             IF numeric_result = '0' THEN
5500                 /* numeric check passed validations successful */
5501                 Xo_VALUE_OUT := BANK_VALUE;
5502                 ce_passed_check('BANK','BR');
5503             ELSE
5504                 ce_failed_check('BANK_NUM','NUMERIC');
5505             END IF;  /* end of numeric check */
5506         END IF;  /* end of length check */
5507     END IF; /* end of mandatory check  */
5508 
5509     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_br');
5510 END CE_VALIDATE_BANK_BR;
5511 
5512 /* ---------------------------------------------------------------------
5513 | Bank Number Validation: GERMANY                                       |
5514  ----------------------------------------------------------------------*/
5515 procedure CE_VALIDATE_BANK_DE(
5516         Xi_BANK_NUMBER  in varchar2
5517 ) AS
5518     BANK_NUM        varchar2(30);
5519     numeric_result  varchar2(40);
5520 
5521 BEGIN
5522     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_de');
5523 
5524     -- 7582842: Disable validations using profile option
5525     IF CE_DISABLE_VALIDATION THEN
5526         cep_standard.debug('validations disabled. no check done');
5527         RETURN;
5528     END IF;
5529 
5530     BANK_NUM := upper(replace(Xi_BANK_NUMBER,' ',''));
5531     BANK_NUM := replace(BANK_NUM,'-','');
5532 
5533     IF (BANK_NUM) IS NOT NULL
5534     THEN /* only validate if bank num is entered */
5535         IF length(BANK_NUM) = 8
5536         THEN /* length is ok */
5537             numeric_result := ce_check_numeric(BANK_NUM,1,length(BANK_NUM));
5538 
5539             IF numeric_result = '0'
5540             THEN /* its numeric validation successful */
5541                 ce_passed_check('BANK','DE');
5542             ELSE
5543                 ce_failed_check('BANK_NUM','NUMERIC');
5544             END IF;  /* end of numeric check */
5545         ELSE
5546             ce_failed_check('BANK_NUM','LENGTH','8');
5547         END IF;  /* end of length check */
5548     END IF;
5549 
5550     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_de');
5551 END CE_VALIDATE_BANK_DE;
5552 
5553 /* ---------------------------------------------------------------------
5554 | Bank Number Validation: GREECE                                        |
5555  ----------------------------------------------------------------------*/
5556 procedure CE_VALIDATE_BANK_GR(
5557         Xi_BANK_NUMBER  in varchar2
5558 ) AS
5559 
5560     BANK_VALUE      varchar2(30);
5561     numeric_result  varchar2(40);
5562 
5563 BEGIN
5564     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_gr');
5565 
5566     -- 7582842: Disable validations using profile option
5567     IF CE_DISABLE_VALIDATION THEN
5568         cep_standard.debug('validations disabled. no check done');
5569         RETURN;
5570     END IF;
5571 
5572     -- remove spaces and hyphens before validating --
5573     BANK_VALUE := upper(replace(Xi_BANK_NUMBER,' ',''));
5574     BANK_VALUE := replace(BANK_VALUE,'-','');
5575 
5576     IF (BANK_VALUE) IS NOT NULL
5577     THEN    /* only validate if value entered */
5578         IF length(BANK_VALUE) <= 3
5579         THEN    /* length is ok */
5580             numeric_result := ce_check_numeric(BANK_VALUE,1,length(BANK_VALUE));
5581             IF numeric_result = '0'
5582             THEN /* its numeric - validations successful  */
5583                 ce_passed_check('BANK','GR');
5584             ELSE
5585                 ce_failed_check('BANK_NUM','NUMERIC');
5586             END IF;  /* end of numeric check */
5587 
5588         ELSE
5589                 ce_failed_check('BANK_NUM','LENGTH_MAX', '3');
5590         END IF;  /* end of length check */
5591     END IF;
5592 
5593     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_gr');
5594 END CE_VALIDATE_BANK_GR;
5595 
5596 /* ---------------------------------------------------------------------
5597 | Bank Number Validation: ICELAND                                       |
5598  ----------------------------------------------------------------------*/
5599 procedure CE_VALIDATE_BANK_IS(
5600         Xi_BANK_NUMBER  in varchar2,
5601         Xo_VALUE_OUT    OUT NOCOPY varchar2
5602 ) AS
5603 
5604     BANK_NUM        varchar2(60);
5605     numeric_result  varchar2(40);
5606 
5607 BEGIN
5608     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_is');
5609 
5610     Xo_VALUE_OUT := Xi_BANK_NUMBER;
5611     -- 7582842: Disable validations using profile option
5612     IF CE_DISABLE_VALIDATION THEN
5613         cep_standard.debug('validations disabled. no check done');
5614         RETURN;
5615     END IF;
5616 
5617     -- remove spaces and hyphens --
5618     BANK_NUM := upper(replace(Xi_BANK_NUMBER,' ',''));
5619     BANK_NUM := replace(BANK_NUM,'-','');
5620 
5621     IF (BANK_NUM) IS NOT NULL
5622     THEN
5623         IF length(BANK_NUM) <= 4
5624         THEN    /* length is ok */
5625             numeric_result := ce_check_numeric(BANK_NUM,1,length(BANK_NUM));
5626             IF numeric_result = '0'
5627             THEN /* its numeric - validations successful */
5628                 Xo_VALUE_OUT := lpad(bank_num,4,0);
5629                 ce_passed_check('BANK','IS');
5630             ELSE
5631                 ce_failed_check('BANK_NUM','NUMERIC');
5632             END IF;  /* end of numeric check */
5633         ELSE
5634             ce_failed_check('BANK_NUM','LENGTH_MAX','4');
5635         END IF;  /* end of length check */
5636     END IF;
5637 
5638     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_is');
5639 END CE_VALIDATE_BANK_IS;
5640 
5641 /* ---------------------------------------------------------------------
5642 | Bank Number Validation: IRELAND                                       |
5643  ----------------------------------------------------------------------*/
5644 procedure CE_VALIDATE_BANK_IE(
5645         Xi_BANK_NUMBER  in varchar2
5646 ) AS
5647 
5648     bank_num        VARCHAR2(60);
5649     numeric_result  VARCHAR2(40);
5650 
5651 BEGIN
5652     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_ie');
5653 
5654     -- 7582842: Disable validations using profile option
5655     IF CE_DISABLE_VALIDATION THEN
5656         cep_standard.debug('validations disabled. no check done');
5657         RETURN;
5658     END IF;
5659 
5660     -- remove spaces and hyphens
5661     BANK_NUM := upper(replace(Xi_BANK_NUMBER,' ',''));
5662     BANK_NUM := replace(BANK_NUM,'-','');
5663 
5664     IF (BANK_NUM) IS NOT NULL
5665     THEN
5666         /* only validate if a value has been entered */
5667         -- Bug 6846899 : Valid length is 6 not 8
5668         IF length(BANK_NUM) = 6
5669         THEN    /* length is ok */
5670             numeric_result := ce_check_numeric(BANK_NUM,1,length(BANK_NUM));
5671             IF numeric_result = '0'
5672             THEN /* its numeric so validations sucessful  */
5673                 ce_passed_check('BANK','IE');
5674             ELSE
5675                 ce_failed_check('BANK_NUM','NUMERIC');
5676             END IF;  /* end of numeric check */
5677 
5678         ELSE
5679             ce_failed_check('BANK_NUM','LENGTH','6');
5680         END IF;  /* end of length check */
5681 
5682     END IF;
5683 
5684     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_ie');
5685 END CE_VALIDATE_BANK_IE;
5686 
5687 /* ---------------------------------------------------------------------
5688 | Bank Number Validation: ITALY                                         |
5689  ----------------------------------------------------------------------*/
5690 procedure CE_VALIDATE_BANK_IT(
5691         Xi_BANK_NUMBER  in varchar2,
5692         Xi_PASS_MAND_CHECK in varchar2
5693 ) AS
5694 
5695     bank_value      VARCHAR2(30);
5696     numeric_result  VARCHAR2(40);
5697 
5698 BEGIN
5699     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_it');
5700 
5701     -- 7582842: Disable validations using profile option
5702     IF CE_DISABLE_VALIDATION THEN
5703         cep_standard.debug('validations disabled. no check done');
5704         RETURN;
5705     END IF;
5706 
5707     -- remove spaces and hyphens --
5708     BANK_VALUE := upper(replace(Xi_BANK_NUMBER,' ',''));
5709     BANK_VALUE := replace(BANK_VALUE,'-','');
5710 
5711     IF Xi_PASS_MAND_CHECK = 'F'
5712     THEN
5713         ce_failed_mandatory('BANK_NUM');
5714 
5715     ELSIF Xi_PASS_MAND_CHECK = 'P'
5716     THEN
5717         IF length(BANK_VALUE) = 5
5718         THEN
5719             /* length is ok */
5720             numeric_result := ce_check_numeric(BANK_VALUE,1,length(BANK_VALUE));
5721             IF numeric_result = '0'
5722             THEN
5723                 /* its numeric - validations successful  */
5724                 ce_passed_check('BANK','IT');
5725             ELSE
5726                 ce_failed_check('BANK_NUM','NUMERIC');
5727             END IF;  /* end of numeric check */
5728 
5729         ELSE
5730             ce_failed_check('BANK_NUM','LENGTH','5');
5731         END IF;  /* end of length check */
5732 
5733     END IF; /* end of mandatory check  */
5734 
5735     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_it');
5736 END CE_VALIDATE_BANK_IT;
5737 
5738 /* ---------------------------------------------------------------------
5739 | Bank Number Validation: LUXEMBOURG                                    |
5740  ----------------------------------------------------------------------*/
5741 procedure CE_VALIDATE_BANK_LU(
5742         Xi_BANK_NUMBER  in varchar2
5743 ) AS
5744 
5745     bank_num        VARCHAR2(60);
5746     numeric_result  VARCHAR2(40);
5747 
5748 BEGIN
5749     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_lu');
5750 
5751     -- 7582842: Disable validations using profile option
5752     IF CE_DISABLE_VALIDATION THEN
5753         cep_standard.debug('validations disabled. no check done');
5754         RETURN;
5755     END IF;
5756 
5757     -- remove spaces and hyphens --
5758     BANK_NUM := upper(replace(Xi_BANK_NUMBER,' ',''));
5759     BANK_NUM := replace(BANK_NUM,'-','');
5760 
5761     IF (BANK_NUM) IS NOT NULL
5762     THEN
5763         /* only validate if a value has been entered */
5764         -- 6005620: IBAN standardized structure. Bank Num: 3n
5765         IF length(BANK_NUM) = 3
5766         THEN
5767             /* length is ok */
5768             numeric_result := ce_check_numeric(BANK_NUM,1,length(BANK_NUM));
5769             IF numeric_result = '0'
5770             THEN /* its numeric - validations successful */
5771                 ce_passed_check('BANK','LU');
5772             ELSE
5773                 ce_failed_check('BANK_NUM','NUMERIC');
5774             END IF;  /* end of numeric check */
5775 
5776         ELSE
5777             ce_failed_check('BANK_NUM','LENGTH','3');
5778         END IF;  /* end of length check */
5779 
5780     END IF;
5781 
5782     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_lu');
5783 END CE_VALIDATE_BANK_LU;
5784 
5785 /* ---------------------------------------------------------------------
5786 | Bank Number Validation: POLAND                                        |
5787  ----------------------------------------------------------------------*/
5788 procedure CE_VALIDATE_BANK_PL(
5789         Xi_BANK_NUMBER  in varchar2
5790 ) AS
5791 
5792     bank_num        VARCHAR2(60);
5793     numeric_result  VARCHAR2(40);
5794     cal_cd1         NUMBER;
5795 
5796 BEGIN
5797     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_pl');
5798 
5799     -- 7582842: Disable validations using profile option
5800     IF CE_DISABLE_VALIDATION THEN
5801         cep_standard.debug('validations disabled. no check done');
5802         RETURN;
5803     END IF;
5804 
5805     -- remove spaces and hyphens --
5806     BANK_NUM := upper(replace(Xi_BANK_NUMBER,' ',''));
5807     BANK_NUM := replace(BANK_NUM,'-','');
5808 
5809     IF (BANK_NUM) IS NOT NULL
5810     THEN
5811         /* only validate if a value has been entered */
5812         IF length(BANK_NUM) = 8
5813         THEN
5814             /* length is ok */
5815             numeric_result := ce_check_numeric(BANK_NUM,1,length(BANK_NUM));
5816             IF numeric_result = '0'
5817             THEN
5818                 -- Bug 7454786: No check digit validation for Poland
5819                 ce_passed_check('BANK','PL');
5820             ELSE
5821                 ce_failed_check('BANK_NUM','NUMERIC');
5822             END IF;  /* end of numeric check */
5823 
5824         ELSE
5825             ce_failed_check('BANK_NUM','LENGTH','8');
5826         END IF;  /* end of length check */
5827 
5828     END IF;
5829 
5830     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_pl');
5831 END CE_VALIDATE_BANK_PL;
5832 
5833 /* ---------------------------------------------------------------------
5834 | Bank Number Validation: SWEDEN                                        |
5835  ----------------------------------------------------------------------*/
5836 procedure CE_VALIDATE_BANK_SE(
5837         Xi_BANK_NUMBER  in varchar2
5838 ) AS
5839 
5840     bank_num VARCHAR2(60);
5841     numeric_result VARCHAR2(40);
5842 
5843 BEGIN
5844     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_se');
5845 
5846     -- 7582842: Disable validations using profile option
5847     IF CE_DISABLE_VALIDATION THEN
5848         cep_standard.debug('validations disabled. no check done');
5849         RETURN;
5850     END IF;
5851 
5852     -- remove spaces and hyphens --
5853     BANK_NUM := upper(replace(Xi_BANK_NUMBER,' ',''));
5854     BANK_NUM := replace(BANK_NUM,'-','');
5855 
5856     IF (BANK_NUM) IS NOT NULL
5857     THEN
5858         /* only validate if a value has been entered */
5859         IF length(BANK_NUM) > 5
5860         THEN
5861             ce_failed_check('BANK_NUM','LENGTH_MAX','5');
5862         ELSIF length(BANK_NUM) < 4
5863         THEN
5864             ce_failed_check('BANK_NUM','LENGTH_MIN','4');
5865         ELSE
5866             /* length is ok */
5867             numeric_result := ce_check_numeric(BANK_NUM,1,length(BANK_NUM));
5868             IF numeric_result = '0'
5869             THEN /* its numeric - validation successful */
5870                 ce_passed_check('BANK','SE');
5871             ELSE
5872                 ce_failed_check('BANK_NUM','NUMERIC');
5873             END IF;  /* end of numeric check */
5874         END IF;  /* end of length check */
5875     END IF;
5876 
5877     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_se');
5878 END CE_VALIDATE_BANK_SE;
5879 
5880 /* ---------------------------------------------------------------------
5881 | Bank Number Validation: SWITZERLAND                                   |
5882  ----------------------------------------------------------------------*/
5883 procedure CE_VALIDATE_BANK_CH(
5884         Xi_BANK_NUMBER  in varchar2
5885 ) AS
5886 
5887     bank_num VARCHAR2(60);
5888     numeric_result VARCHAR2(40);
5889 
5890 BEGIN
5891     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_ch');
5892 
5893     -- 7582842: Disable validations using profile option
5894     IF CE_DISABLE_VALIDATION THEN
5895         cep_standard.debug('validations disabled. no check done');
5896         RETURN;
5897     END IF;
5898 
5899     -- remove spaces and hyphens --
5900     BANK_NUM := upper(replace(Xi_BANK_NUMBER,' ',''));
5901     BANK_NUM := replace(BANK_NUM,'-','');
5902 
5903     IF (BANK_NUM) IS NOT NULL
5904     THEN
5905         /* only validate if a value has been entered */
5906         IF length(BANK_NUM) > 5
5907         THEN
5908             ce_failed_check('BANK_NUM','LENGTH_MAX','5');
5909         ELSIF length(BANK_NUM) < 3
5910         THEN
5911             ce_failed_check('BANK_NUM','LENGTH_MIN','3');
5912         ELSE
5913             /* length is ok */
5914             numeric_result := ce_check_numeric(BANK_NUM,1,length(BANK_NUM));
5915             IF numeric_result = '0'
5916             THEN /* its numeric - validations successful */
5917                 ce_passed_check('BANK','CH');
5918             ELSE
5919                 ce_failed_check('BANK_NUM','NUMERIC');
5920             END IF;  /* end of numeric check */
5921         END IF;  /* end of length check */
5922     END IF;
5923 
5924     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_ch');
5925 END CE_VALIDATE_BANK_CH;
5926 
5927 /* ---------------------------------------------------------------------
5928 | Bank Number Validation: UNITED KINGDOM                                |
5929  ----------------------------------------------------------------------*/
5930 procedure CE_VALIDATE_BANK_GB(
5931         Xi_BANK_NUMBER  in varchar2
5932 ) AS
5933 
5934     bank_num VARCHAR2(60);
5935     numeric_result VARCHAR2(40);
5936 
5937 BEGIN
5938     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_gb');
5939 
5940     -- 7582842: Disable validations using profile option
5941     IF CE_DISABLE_VALIDATION THEN
5942         cep_standard.debug('validations disabled. no check done');
5943         RETURN;
5944     END IF;
5945 
5946     -- remove spaces and hyphens --
5947     BANK_NUM := upper(replace(Xi_BANK_NUMBER,' ',''));
5948     BANK_NUM := replace(BANK_NUM,'-','');
5949 
5950     IF (BANK_NUM) IS NOT NULL
5951     THEN
5952         /* only validate if a value has been entered */
5953         IF length(BANK_NUM) = 6
5954         THEN
5955             /* length is ok */
5956             numeric_result := ce_check_numeric(BANK_NUM,1,length(BANK_NUM));
5957             IF numeric_result = '0'
5958             THEN /* its numeric - validations successful */
5959                 ce_passed_check('BANK','GB');
5960             ELSE
5961                 ce_failed_check('BANK_NUM','NUMERIC');
5962             END IF;  /* end of numeric check */
5963         ELSE
5964             ce_failed_check('BANK_NUM','LENGTH','6');
5965         END IF;  /* end of length check */
5966     END IF;
5967 
5968     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_gb');
5969 END CE_VALIDATE_BANK_GB;
5970 
5971 /* ---------------------------------------------------------------------
5972 | Bank Number Validation: COLUMBIA                                      |
5973  ----------------------------------------------------------------------*/
5974 --Bug 10171134
5975 procedure CE_VALIDATE_BANK_CO(
5976         Xi_COUNTRY_NAME     in varchar2,
5977         Xi_BANK_NAME        in varchar2,
5978         Xi_TAX_PAYER_ID     in VARCHAR2,
5979         Xi_BANK_ID          IN varchar2
5980 ) AS
5981 
5982     tax_id          VARCHAR2(60);
5983     tax_id1         VARCHAR2(60);
5984     tax_id_end      NUMBER;
5985     tax_id_cd_start NUMBER;
5986     tax_id_cd       VARCHAR2(60);
5987     numeric_result  VARCHAR2(40);
5988     l_supp          VARCHAR(10);
5989     l_comp          VARCHAR(10);
5990     l_cust          VARCHAR(10);
5991     l_bank          VARCHAR(10);
5992 
5993 BEGIN
5994     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_CO');
5995 
5996     -- 7582842: No validations on bank number. Disable profile will not apply
5997     -- here.
5998 
5999     -- the last digit of tax payer id is the check digits
6000     TAX_ID1 := upper(replace(Xi_TAX_PAYER_ID,' ',''));
6001     TAX_ID1 := replace(TAX_ID1,'-','');
6002     tax_id_end := (length(tax_id1) - 1);
6003     tax_id := substr(tax_id1,1, tax_id_end);
6004     tax_id_cd_start := (length(tax_id1));
6005     tax_id_cd := substr(tax_id1, tax_id_cd_start, length(tax_id1));
6006 
6007     IF (tax_id) IS NOT NULL
6008     THEN
6009         IF length(tax_id) <= 14
6010         THEN
6011             numeric_result := ce_check_numeric(tax_id,1,length(tax_id));
6012             IF numeric_result = '0'
6013             THEN
6014 	    /* its numeric so continue.. Bug 8614674 replaced tax_id with tax_id1 as it is
6015 	        stored with check digit */
6016 		-- Bug 10171134
6017                 IF CE_VALIDATE_BANKINFO.CE_VAL_UNIQUE_TAX_PAYER_ID(
6018                     Xi_COUNTRY_NAME,TAX_ID1,Xi_BANK_ID) = 'TRUE'
6019                 THEN
6020                     CE_VALIDATE_BANKINFO.CE_CHECK_CROSS_MODULE_TAX_ID(
6021                         Xi_COUNTRY_NAME,
6022                         Xi_BANK_NAME,
6023                         TAX_ID,
6024                         l_cust,
6025                         l_supp,
6026                         l_comp,
6027                         l_bank
6028                     );
6029 
6030                     cep_standard.debug('l_cust : '|| l_cust );
6031                     cep_standard.debug('l_supp : '|| l_supp );
6032                     cep_standard.debug('l_comp : '|| l_comp );
6033                     cep_standard.debug('l_bank : '|| l_bank );
6034 
6035                     IF (l_supp  = 'bk3' OR l_cust= 'bk2' OR l_comp = 'bk1')
6036                     THEN
6037                         FND_MESSAGE.SET_NAME('CE','CE_TAXID_EXIST');
6038                         fnd_msg_pub.add;
6039                     END IF;
6040                     IF (l_supp = 'bk5')
6041                     THEN
6042                         FND_MESSAGE.SET_NAME('CE','CE_TAXID_BANK_EXIST_AS_SUPP');
6043                         fnd_msg_pub.add;
6044                     END IF;
6045                     IF (l_cust = 'bk4')
6046                     THEN
6047                         FND_MESSAGE.SET_NAME('CE','CE_TAXID_BANK_EXIST_AS_CUST');
6048                         fnd_msg_pub.add;
6049                     END IF;
6050                     IF (l_comp = 'bk6') THEN
6051                         FND_MESSAGE.SET_NAME('CE','CE_TAXID_BANK_EXIST_AS_COMP');
6052                         fnd_msg_pub.add;
6053                     END IF;
6054                     IF ce_tax_id_check_algorithm(TAX_ID,Xi_COUNTRY_NAME,TAX_ID_CD) = 'FALSE'
6055                     THEN
6056                         ce_failed_check('TAX_PAYER_ID','CD_FAILED');
6057                     END IF; /* end of check digit validation */
6058                 ELSE
6059                     fnd_message.set_name ('CE', 'CE_TAX_PAYER_ID_NOT_UNIQUE');
6060                     fnd_msg_pub.add;
6061                 END IF; /* end of unique check */
6062             ELSE
6063                 ce_failed_check('TAX_PAYER_ID','NUMERIC');
6064             END IF;  /* end of numeric check */
6065         ELSE
6066             ce_failed_check('TAX_PAYER_ID','LENGTH_MAX','14');
6067         END IF;  /* end of length check */
6068     ELSE
6069         ce_failed_mandatory('TAX_PAYER_ID');
6070     END IF; /* end of mandatory check */
6071 
6072     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_CO');
6073 END CE_VALIDATE_BANK_CO;
6074 
6075 /* ---------------------------------------------------------------------
6076 | Bank Number Validation: AUSTRALIA                                     |
6077  ----------------------------------------------------------------------*/
6078 procedure CE_VALIDATE_BANK_AU(
6079         Xi_BANK_NUMBER  in varchar2
6080 ) AS
6081     BANK_NUM        varchar2(60);
6082     numeric_result  varchar2(40);
6083 
6084 BEGIN
6085     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_au');
6086 
6087     -- 7582842: Disable validations using profile option
6088     IF CE_DISABLE_VALIDATION THEN
6089         cep_standard.debug('validations disabled. no check done');
6090         RETURN;
6091     END IF;
6092 
6093     -- Remove blanks and hyphens before validation --
6094     BANK_NUM := upper(replace(Xi_BANK_NUMBER,' ',''));
6095     BANK_NUM := replace(BANK_NUM,'-','');
6096 
6097     IF (BANK_NUM) IS NOT NULL
6098     THEN /* only validate if a value has been entered */
6099         IF length(BANK_NUM) < 2
6100         THEN /* length less than min */
6101             ce_failed_check('BANK_NUM','LENGTH_MIN','2');
6102 
6103         ELSIF length(BANK_NUM) > 3
6104         THEN /* length more than max */
6105             ce_failed_check('BANK_NUM','LENGTH_MAX','3');
6106 
6107         ELSE /* length is ok */
6108             numeric_result := ce_check_numeric(BANK_NUM,1,length(BANK_NUM));
6109             IF numeric_result = '0'
6110             THEN  /* its numeric, validations successfull */
6111                 ce_passed_check('BANK','AU');
6112             ELSE
6113                 ce_failed_check('BANK_NUM','NUMERIC');
6114             END IF;  /* end of numeric check */
6115         END IF;  /* end of length check */
6116     ELSE
6117         ce_passed_check('BANK','AU');
6118     END IF;
6119 
6120     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_au');
6121 END CE_VALIDATE_BANK_AU;
6122 
6123 /* ---------------------------------------------------------------------
6124 | Bank Number Validation: ISRAEL                                        |
6125  ----------------------------------------------------------------------*/
6126 procedure CE_VALIDATE_BANK_IL(
6127         Xi_BANK_NUMBER      in varchar2,
6128         Xi_PASS_MAND_CHECK  in varchar2
6129 ) AS
6130 
6131     bank_value      VARCHAR2(30);
6132     numeric_result  VARCHAR2(40);
6133 
6134 BEGIN
6135     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_il');
6136 
6137     -- 7582842: Disable validations using profile option
6138     IF CE_DISABLE_VALIDATION THEN
6139         cep_standard.debug('validations disabled. no check done');
6140         RETURN;
6141     END IF;
6142 
6143     -- remove spaces and hyphens --
6144     BANK_VALUE := upper(replace(Xi_BANK_NUMBER,' ',''));
6145     BANK_VALUE := replace(BANK_VALUE,'-','');
6146 
6147     IF Xi_PASS_MAND_CHECK = 'F'
6148     THEN
6149         ce_failed_mandatory('BANK_NUM');
6150 
6151     ELSIF Xi_PASS_MAND_CHECK = 'P'
6152     THEN
6153 
6154         IF length(BANK_VALUE) > 2
6155         THEN
6156             ce_failed_check('BANK_NUM','LENGTH_MAX','2');
6157         ELSE
6158             /* length is ok */
6159             numeric_result := ce_check_numeric(BANK_VALUE,1,length(BANK_VALUE));
6160             IF numeric_result = '0'
6161             THEN
6162                 /* it's numeric - validations successful  */
6163                 ce_passed_check('BANK','IL');
6164             ELSE
6165                 ce_failed_check('BANK_NUM','NUMERIC');
6166             END IF;  /* end of numeric check */
6167 
6168         END IF;  /* end of length check */
6169 
6170     END IF; /* end of mandatory check  */
6171 
6172     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_il');
6173 END CE_VALIDATE_BANK_IL;
6174 
6175 /* ---------------------------------------------------------------------
6176 | Bank Number Validation: NEW ZEALAND                                   |
6177  ----------------------------------------------------------------------*/
6178 procedure CE_VALIDATE_BANK_NZ(
6179         Xi_BANK_NUMBER      in varchar2,
6180         Xi_PASS_MAND_CHECK  in varchar2
6181 ) AS
6182 
6183     bank_value VARCHAR2(30);
6184     numeric_result VARCHAR2(40);
6185 
6186 BEGIN
6187     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_nz');
6188 
6189     -- 7582842: Disable validations using profile option
6190     IF CE_DISABLE_VALIDATION THEN
6191         cep_standard.debug('validations disabled. no check done');
6192         RETURN;
6193     END IF;
6194 
6195     -- remove spaces and hyphens --
6196     BANK_VALUE := upper(replace(Xi_BANK_NUMBER,' ',''));
6197     BANK_VALUE := replace(BANK_VALUE,'-','');
6198 
6199     IF Xi_PASS_MAND_CHECK = 'F'
6200     THEN
6201         ce_failed_mandatory('BANK_NUM');
6202 
6203     ELSIF Xi_PASS_MAND_CHECK = 'P'
6204     THEN
6205         IF length(BANK_VALUE) = 2
6206         THEN
6207             /* length is ok */
6208             numeric_result := ce_check_numeric(BANK_VALUE,1,length(BANK_VALUE));
6209             IF numeric_result = '0'
6210             THEN
6211                 /* its numeric - validations passed */
6212                 ce_passed_check('BANK','NZ');
6213             ELSE
6214                 ce_failed_check('BANK_NUM','NUMERIC');
6215             END IF;  /* end of numeric check */
6216 
6217         ELSE
6218             ce_failed_check('BANK_NUM','LENGTH','2');
6219         END IF;  /* end of length check */
6220 
6221     END IF; /* end of mandatory check  */
6222 
6223     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_nz');
6224 END CE_VALIDATE_BANK_NZ;
6225 
6226 /* ---------------------------------------------------------------------
6227 | Bank Number Validation: JAPAN                                         |
6228  ----------------------------------------------------------------------*/
6229 procedure CE_VALIDATE_BANK_JP(
6230         Xi_BANK_NUMBER      in varchar2,
6231         Xi_BANK_NAME_ALT    in varchar2,
6232         Xi_PASS_MAND_CHECK  in varchar2
6233 ) AS
6234 
6235     bank_value      VARCHAR2(30);
6236     numeric_result  VARCHAR2(40);
6237 
6238 BEGIN
6239     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_jp');
6240 
6241     -- check that BANK_NAME_ALT is also entered
6242     -- 7582842: This check is done irrespective of the disable profile option
6243     IF (Xi_BANK_NAME_ALT is null) THEN
6244         ce_failed_mandatory('BANK_NAME_ALT');
6245     END IF;
6246 
6247     -- 7582842: Disable validations using profile option
6248     IF CE_DISABLE_VALIDATION THEN
6249         cep_standard.debug('validations disabled. no check done');
6250         RETURN;
6251     END IF;
6252 
6253     -- remove spaces and hyphens --
6254     BANK_VALUE := upper(replace(Xi_BANK_NUMBER,' ',''));
6255     BANK_VALUE := replace(BANK_VALUE,'-','');
6256 
6257     IF Xi_PASS_MAND_CHECK = 'F'
6258     THEN
6259         ce_failed_mandatory('BANK_NUM');
6260 
6261     ELSIF Xi_PASS_MAND_CHECK = 'P'
6262     THEN
6263         --bug 5746679 change from 3 numeric digits to 4 numberic digits
6264         IF length(BANK_VALUE) = 4
6265         THEN
6266             /* length is ok */
6267             numeric_result := ce_check_numeric(BANK_VALUE,1,length(BANK_VALUE));
6268             IF numeric_result = '0'
6269             THEN
6270                 /* its numeric - validations successful  */
6271                 ce_passed_check('BANK','JP');
6272             ELSE
6273                 ce_failed_check('BANK_NUM','NUMERIC');
6274             END IF;  /* end of numeric check */
6275 
6276         ELSE
6277             ce_failed_check('BANK_NUM','LENGTH','4');
6278         END IF;  /* end of length check */
6279 
6280     END IF; /* end of mandatory check for bank num */
6281 
6282     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_jp');
6283 END CE_VALIDATE_BANK_JP;
6284 
6285 -- 8266356: Added procedure
6286 /* ---------------------------------------------------------------------
6287 | Bank Number Validation: AUSTRIA                                     |
6288  ----------------------------------------------------------------------*/
6289 procedure CE_VALIDATE_BANK_AT(
6290         Xi_BANK_NUMBER  in varchar2,
6291         Xi_PASS_MAND_CHECK in varchar2,
6292         Xo_VALUE_OUT OUT NOCOPY varchar2
6293 ) AS
6294 
6295     bank_value VARCHAR2(30);
6296     numeric_result VARCHAR2(40);
6297 
6298 BEGIN
6299     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank_at');
6300 
6301     Xo_VALUE_OUT := Xi_BANK_NUMBER;
6302     -- 7582842: Disable validations using profile option
6303     IF CE_DISABLE_VALIDATION THEN
6304         cep_standard.debug('validations disabled. no check done');
6305         RETURN;
6306     END IF;
6307 
6308     -- 8266356: Bank Number is not mandatory.
6309     IF Xi_BANK_NUMBER IS NOT NULL
6310     THEN
6311         BANK_VALUE := upper(Xi_BANK_NUMBER);
6312         BANK_VALUE := replace(replace(BANK_VALUE,' ',''),'-','');
6313         IF ( length(BANK_VALUE) = 5 )
6314         THEN
6315             /* length is ok */
6316             numeric_result := ce_check_numeric(BANK_VALUE,1,length(BANK_VALUE));
6317             IF (numeric_result = '0')
6318             THEN
6319                 /* its numeric validations successful */
6320                 Xo_VALUE_OUT := BANK_VALUE;
6321                 ce_passed_check('BANK','AT');
6322             ELSE
6323                 ce_failed_check('BANK_NUM','NUMERIC');
6324             END IF;  /* end of numeric check */
6325         ELSE
6326             ce_failed_check('BANK_NUM','LENGTH','5');
6327         END IF;  /* end of length check */
6328     END IF;
6329 
6330     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_bank_at');
6331 END CE_VALIDATE_BANK_AT;
6332 
6333 /* --------------------------------------------------------------------
6334 |  PRIVATE PROCEDURE                                                    |
6335 |      CE_VALIDATE_UNIQUE_ACCOUNT_*                                     |
6336 |                                                                       |
6337 |  CALLED BY                                                            |
6338 |      CE_VALIDATE_ACCOUNT                                              |
6339 |                                                                       |
6340 |  DESCRIPTION                                                          |
6341 |      Unique Account VALIDATIONS                                       |
6342 |                                                                       |
6343 |                                                                       |
6344  --------------------------------------------------------------------- */
6345 PROCEDURE CE_VALIDATE_UNIQUE_ACCOUNT(
6346     Xi_ACCOUNT_NUMBER  in VARCHAR2,
6347     Xi_CURRENCY_CODE   in VARCHAR2,
6348     Xi_ACCOUNT_NAME    in VARCHAR2,
6349     Xi_BRANCH_ID       in NUMBER,
6350     Xi_ACCOUNT_ID      in NUMBER
6351 ) AS
6352     temp_number     number;
6353 BEGIN
6354     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT');
6355 
6356     -- unique combination -> bank_branch_id, bank account number, currency code
6357     -- due to upgrade changes, the unique combination was changed to:
6358     -- bank_branch_id, bank account number, currency code, and account name
6359     SELECT COUNT(*) INTO temp_number
6360     FROM   ce_bank_accounts ba
6361     WHERE  ba.bank_account_num  =  Xi_ACCOUNT_NUMBER
6362     AND    ba.bank_account_name =  Xi_ACCOUNT_NAME
6363     AND    ba.bank_branch_id    =  Xi_BRANCH_ID
6364     AND    ba.currency_code     =  Xi_CURRENCY_CODE
6365     AND    ba.bank_account_id   <> nvl(Xi_ACCOUNT_ID,-1);
6366 
6367     cep_standard.debug('CE_VALIDATE_UNIQUE_ACCOUNT: ' || 'temp_number: '||temp_number);
6368 
6369     IF (nvl(temp_number,0) > 0) THEN
6370         cep_standard.debug('CE_VALIDATE_UNIQUE_ACCOUNT: ' || 'CE_BANK_ACCOUNT_NUM_EXISTS');
6371         fnd_message.set_name('CE', 'CE_BANK_ACCOUNT_NUM_EXISTS');
6372         fnd_msg_pub.add;
6373     END IF;
6374 
6375     -- unique combination -> bank_branch_id, bank account name
6376     -- Bug 7836516 removed this check
6377     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT');
6378 
6379 END CE_VALIDATE_UNIQUE_ACCOUNT;
6380 
6381 /* -------------------------------------------------------------------- */
6382 
6383 PROCEDURE CE_VALIDATE_UNIQUE_ACCOUNT_JP(
6384         Xi_ACCOUNT_NUMBER in VARCHAR2,
6385         Xi_CURRENCY_CODE  in VARCHAR2,
6386         Xi_ACCOUNT_TYPE   in VARCHAR2,
6387         Xi_ACCOUNT_NAME   in VARCHAR2,
6388         Xi_BRANCH_ID      in NUMBER,
6389         Xi_ACCOUNT_ID     in NUMBER
6390 )AS
6391     temp_number     NUMBER;
6392 BEGIN
6393     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT_JP');
6394 
6395     -- unique combination -> bank_branch_id, bank account number, currency code, account type
6396     -- due to upgrade changes account name was added to the unique combination
6397     SELECT count(*) INTO temp_number
6398     FROM   ce_bank_accounts ba
6399     WHERE  ba.bank_account_num = Xi_ACCOUNT_NUMBER
6400     AND    ba.bank_account_name = Xi_ACCOUNT_NAME
6401     AND    ba.bank_account_type = Xi_ACCOUNT_TYPE
6402     AND    ba.currency_code     = Xi_CURRENCY_CODE
6403     AND    ba.bank_branch_id    = Xi_BRANCH_ID
6404     AND    ba.bank_account_id  <> nvl(Xi_ACCOUNT_ID,-1);
6405 
6406     cep_standard.debug('CE_VALIDATE_UNIQUE_ACCOUNT: ' || 'temp_number: '||temp_number);
6407 
6408     IF (nvl(temp_number,0) > 0) THEN
6409         fnd_message.set_name('CE', 'CE_BANK_ACCOUNT_NUM_EXISTS');
6410         fnd_msg_pub.add;
6411         cep_standard.debug('CE_VALIDATE_UNIQUE_ACCOUNT: ' || 'CE_BANK_ACCOUNT_NUM_EXISTS');
6412     END IF;
6413 
6414     -- unique combination -> bank_branch_id, bank account name
6415     -- Bug 7836516 removed this check
6416 
6417     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT_JP');
6418 
6419 END CE_VALIDATE_UNIQUE_ACCOUNT_JP;
6420 
6421 /* -------------------------------------------------------------------- */
6422 PROCEDURE CE_VALIDATE_UNIQUE_ACCOUNT_NZ(
6423         Xi_ACCOUNT_NUMBER in VARCHAR2,
6424         Xi_CURRENCY_CODE  in VARCHAR2,
6425         Xi_ACCOUNT_SUFFIX in VARCHAR2,
6426         Xi_ACCOUNT_NAME   in VARCHAR2,
6427         Xi_BRANCH_ID      in NUMBER,
6428         Xi_ACCOUNT_ID     in NUMBER)
6429 AS
6430 
6431 temp_number     NUMBER;
6432 
6433 BEGIN
6434     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT_NZ');
6435 
6436     -- unique combination -> bank_branch_id, bank account number, currency code, account suffix
6437     -- due to upgrade changes account name was added to the unique combination
6438     SELECT COUNT(*) INTO temp_number
6439     FROM   ce_bank_accounts ba
6440     WHERE  ba.bank_account_num = Xi_ACCOUNT_NUMBER
6441     AND    ba.bank_account_name = Xi_ACCOUNT_NAME
6442     AND    ba.account_suffix    = Xi_ACCOUNT_SUFFIX
6443     AND    ba.currency_code     = Xi_CURRENCY_CODE
6444     AND    ba.bank_branch_id    = Xi_BRANCH_ID
6445     AND    ba.bank_account_id  <> nvl(Xi_ACCOUNT_ID,-1);
6446 
6447     cep_standard.debug('CE_VALIDATE_UNIQUE_ACCOUNT: ' || 'temp_number: ' || temp_number);
6448 
6449     IF (nvl(temp_number,0) > 0) THEN
6450         cep_standard.debug('CE_VALIDATE_UNIQUE_ACCOUNT: ' || 'CE_BANK_ACCOUNT_NUM_EXISTS');
6451         fnd_message.set_name('CE', 'CE_BANK_ACCOUNT_NUM_EXISTS');
6452         fnd_msg_pub.add;
6453     END IF;
6454 
6455     -- unique combination -> bank_branch_id, bank account name
6456     -- Bug 7836516 removed this check
6457 
6458     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT_NZ');
6459 END CE_VALIDATE_UNIQUE_ACCOUNT_NZ;
6460 
6461 
6462 /* --------------------------------------------------------------------
6463 |  PRIVATE PROCEDURE                                                    |
6464 |      CE_VALIDATE_UNIQUE_BRANCH_*                                      |
6465 |                                                                       |
6466 |  CALLED BY                                                            |
6467 |      CE_VALIDATE_BRANCH                                               |
6468 |                                                                       |
6469 |  DESCRIPTION                                                          |
6470 |      Unique Branch VALIDATIONS                                        |
6471 |                                                                       |
6472  --------------------------------------------------------------------- */
6473 -- Bug 14242293: Code change(2/2) starts
6474 PROCEDURE CE_VALIDATE_UNIQUE_BRANCH(
6475     Xi_COUNTRY_NAME     in varchar2,
6476     Xi_BRANCH_NUMBER    in varchar2,
6477     Xi_BRANCH_NAME      in varchar2,
6478     Xi_BANK_ID          in number,
6479     Xi_BRANCH_ID        in number
6480 ) AS
6481     l_temp_number     NUMBER;
6482 BEGIN
6483     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH');
6484     SELECT  COUNT(*)
6485     INTO    l_temp_number
6486     FROM    HZ_PARTIES              BankParty,
6487             HZ_PARTIES              BranchParty,
6488             HZ_ORGANIZATION_PROFILES        BankOrgProfile,
6489             HZ_ORGANIZATION_PROFILES        BranchOrgProfile,
6490             HZ_RELATIONSHIPS            BRRel,
6491             HZ_CODE_ASSIGNMENTS         BankCA,
6492             HZ_CODE_ASSIGNMENTS         BranchCA
6493     WHERE   BankParty.PARTY_TYPE = 'ORGANIZATION'
6494     AND     BankParty.status = 'A'
6495     AND     BankParty.PARTY_ID = BankOrgProfile.PARTY_ID
6496     AND     SYSDATE between TRUNC(BankOrgProfile.effective_start_date)
6497             and NVL(TRUNC(BankOrgProfile.effective_end_date), SYSDATE+1)
6498     AND     BankCA.CLASS_CATEGORY = 'BANK_INSTITUTION_TYPE'
6499     AND     BankCA.CLASS_CODE = 'BANK'
6500     AND     BankCA.OWNER_TABLE_NAME = 'HZ_PARTIES'
6501     AND     BankCA.OWNER_TABLE_ID = BankParty.PARTY_ID
6502     AND     NVL(BankCA.STATUS, 'A') = 'A'
6503     AND     BranchParty.PARTY_TYPE(+) = 'ORGANIZATION'
6504     AND     BranchParty.status(+) = 'A'
6505     AND     BranchOrgProfile.PARTY_ID(+) = BranchParty.PARTY_ID
6506     AND     SYSDATE between TRUNC(BranchOrgProfile.effective_start_date(+))
6507             and NVL(TRUNC(BranchOrgProfile.effective_end_date(+)), SYSDATE+1)
6508     AND     BranchCA.CLASS_CATEGORY(+) = 'BANK_INSTITUTION_TYPE'
6509     AND     BranchCA.CLASS_CODE(+) = 'BANK_BRANCH'
6510     AND     BranchCA.OWNER_TABLE_NAME(+) = 'HZ_PARTIES'
6511     AND     BranchCA.OWNER_TABLE_ID(+) = BranchParty.PARTY_ID
6512     AND     NVL(BranchCA.STATUS(+), 'A') = 'A'
6513     AND     BRRel.OBJECT_ID(+) = BankParty.PARTY_ID
6514     AND     BranchParty.PARTY_ID(+) = BRRel.SUBJECT_ID
6515     AND     BRRel.RELATIONSHIP_TYPE(+) = 'BANK_AND_BRANCH'
6516     AND     BRRel.RELATIONSHIP_CODE(+) = 'BRANCH_OF'
6517     AND     BRRel.STATUS(+) = 'A'
6518     AND     BRRel.SUBJECT_TABLE_NAME(+) = 'HZ_PARTIES'
6519     AND     BRRel.SUBJECT_TYPE(+) =  'ORGANIZATION'
6520     AND     BRRel.OBJECT_TABLE_NAME(+) = 'HZ_PARTIES'
6521     AND     BRRel.OBJECT_TYPE(+) = 'ORGANIZATION'
6522     AND     BankParty.PARTY_ID =  Xi_BANK_ID
6523     AND     BranchParty.PARTY_NAME  = Xi_BRANCH_NAME
6524     AND     nvl(BranchOrgProfile.BANK_OR_BRANCH_NUMBER,'X') = nvl(Xi_BRANCH_NUMBER,'X')
6525 	AND     BranchOrgProfile.HOME_COUNTRY = Xi_COUNTRY_NAME
6526     AND     BranchParty.PARTY_ID  <>  nvl(Xi_BRANCH_ID, -1);
6527 
6528     cep_standard.debug('already existing branches='||l_temp_number);
6529 
6530     IF (nvl(l_temp_number,0) > 0) THEN
6531         cep_standard.debug('Branch already exists');
6532         fnd_message.set_name('CE', 'CE_BANK_BRANCH_EXISTS');
6533         fnd_msg_pub.add;
6534     END IF;
6535 
6536 
6537     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH');
6538 END CE_VALIDATE_UNIQUE_BRANCH;
6539 
6540 PROCEDURE CE_VALIDATE_UNIQUE_BRANCH_JP(
6541     Xi_COUNTRY_NAME     IN VARCHAR2,
6542     Xi_BRANCH_NUMBER    IN VARCHAR2,
6543     Xi_BRANCH_NAME      IN VARCHAR2,
6544     Xi_BRANCH_NAME_ALT  IN VARCHAR2,
6545     Xi_BANK_ID          IN NUMBER,
6546     Xi_BRANCH_ID        IN NUMBER
6547 ) AS
6548 BEGIN
6549     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH_JP');
6550     -- unique combination -> bank_id,  branch_name_alt, country  bug 2363959
6551     CE_VALIDATE_BANKINFO.CE_UNIQUE_BRANCH_NAME_ALT(
6552         Xi_COUNTRY_NAME,
6553         Xi_BRANCH_NAME_ALT,
6554         Xi_BANK_ID,
6555         Xi_BRANCH_ID);
6556 
6557     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH_JP');
6558 END CE_VALIDATE_UNIQUE_BRANCH_JP;
6559 
6560 PROCEDURE CE_VALIDATE_UNIQUE_BRANCH_DE(
6561     Xi_BRANCH_NUMBER in varchar2,
6562     Xi_BRANCH_NAME    in varchar2,
6563     Xi_BANK_ID    in number,
6564     Xi_BRANCH_ID  in number
6565 ) AS
6566 BEGIN
6567     cep_standard.debug('CE_VALIDATE_UNIQUE_BRANCH_DE no specific unique requirement');
6568 END CE_VALIDATE_UNIQUE_BRANCH_DE;
6569 
6570 PROCEDURE CE_VALIDATE_UNIQUE_BRANCH_US(
6571     Xi_BRANCH_NUMBER in varchar2,
6572     Xi_BRANCH_NAME    in varchar2,
6573     Xi_BANK_ID    in number,
6574     Xi_BRANCH_ID  in number
6575 ) AS
6576 BEGIN
6577     cep_standard.debug('CE_VALIDATE_UNIQUE_BRANCH_US no specific unique requirement');
6578 END CE_VALIDATE_UNIQUE_BRANCH_US;
6579 /* ------------------------------------------------------------------------ */
6580 -- Bug 14242293: Code change(2/2) ends
6581 
6582 /* --------------------------------------------------------------------
6583 |  PRIVATE PROCEDURE                                                    |
6584 |      CE_VALIDATE_UNIQUE_BANK_*                                        |
6585 |                                                                       |
6586 |  CALLED BY                                                            |
6587 |      CE_VALIDATE_BANK                                                 |
6588 |                                                                       |
6589 |  DESCRIPTION                                                          |
6590 |      Unique Bank  VALIDATIONS                                         |
6591 |                                                                       |
6592  --------------------------------------------------------------------- */
6593 PROCEDURE CE_VALIDATE_UNIQUE_BANK_JP(
6594     Xi_COUNTRY_NAME in varchar2,
6595     Xi_BANK_NUMBER in varchar2,
6596     Xi_BANK_NAME     in varchar2,
6597     Xi_BANK_NAME_ALT in varchar2,
6598     Xi_BANK_ID   in varchar2
6599 ) AS
6600     temp_number number;
6601     temp_name number;
6602     temp_name_alt number;
6603 BEGIN
6604     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BANK_JP');
6605     -- unique combination -> bank_name_alt, country  bug 2363959 --confirmed sql 6/28/02
6606     SELECT COUNT(*)
6607     INTO   temp_name_alt
6608     FROM   HZ_PARTIES   HzPartyBankEO,
6609            HZ_ORGANIZATION_PROFILES   HzOrgProfileBankEO,
6610            HZ_CODE_ASSIGNMENTS   HzCodeAssignmentBankEO
6611     WHERE  HzPartyBankEO.ORGANIZATION_NAME_PHONETIC =  Xi_BANK_NAME_ALT
6612       AND  HzOrgProfileBankEO.home_country     = Xi_COUNTRY_NAME -- 8552410: Changed HzPartyBankEO to HzOrgProfileBankEO
6613       AND  HzPartyBankEO.PARTY_TYPE = 'ORGANIZATION'
6614       AND  HzPartyBankEO.status = 'A'
6615       AND  HzPartyBankEO.PARTY_ID = HzOrgProfileBankEO.PARTY_ID
6616       AND  SYSDATE BETWEEN TRUNC(HzOrgProfileBankEO.EFFECTIVE_START_DATE)
6617                    AND NVL(TRUNC(HzOrgProfileBankEO.EFFECTIVE_END_DATE),SYSDATE)
6618       AND  HzCodeAssignmentBankEO.CLASS_CATEGORY = 'BANK_INSTITUTION_TYPE'
6619       AND  HzCodeAssignmentBankEO.CLASS_CODE = 'BANK'
6620       AND  HzCodeAssignmentBankEO.OWNER_TABLE_NAME = 'HZ_PARTIES'
6621       AND  HzCodeAssignmentBankEO.OWNER_TABLE_ID = HzPartyBankEO.PARTY_ID
6622       AND  NVL(HzCodeAssignmentBankEO.status, 'A') = 'A'
6623       AND  HzPartyBankEO.PARTY_ID <> NVL(Xi_BANK_ID, -1);  -- Bug 8552410: Changed = to <>
6624 
6625     cep_standard.debug('CE_VALIDATE_UNIQUE_BANK_JP - temp_name_alt: ' ||temp_name_alt);
6626 
6627     IF (nvl(temp_name_alt,0) > 0) THEN
6628         cep_standard.debug('CE_VALIDATE_UNIQUE_BANK_JP: ' || 'CE_BANK_NAME_ALT_EXISTS');
6629         fnd_message.set_name('CE', 'CE_BANK_NAME_ALT_EXISTS');
6630         fnd_msg_pub.add;
6631     END IF;
6632 
6633     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BANK_JP');
6634 END CE_VALIDATE_UNIQUE_BANK_JP;
6635 
6636 -- added 10/25/04
6637 /* --------------------------------------------------------------------
6638 |  PRIVATE PROCEDURE                                                    |
6639 |      CE_VALIDATE_MISC_*   other misc validations
6640  --------------------------------------------------------------------- */
6641 PROCEDURE CE_VALIDATE_MISC_EFT_NUM(
6642     x_country_name      IN VARCHAR2,
6643     x_eft_number        IN VARCHAR2,
6644     p_init_msg_list     IN  VARCHAR2,
6645     x_msg_count         OUT NOCOPY NUMBER,
6646     x_msg_data          OUT NOCOPY VARCHAR2,
6647     x_return_status     IN OUT NOCOPY VARCHAR2
6648 ) AS
6649     country_name   VARCHAR2(2);
6650     eft_num_value  VARCHAR2(60);
6651     numeric_result VARCHAR2(40);
6652 
6653     procedure fail_mandatory is
6654     begin
6655        fnd_message.set_name ('CE', 'CE_ENTER_EFT_NUMBER');
6656        fnd_msg_pub.add;
6657        cep_standard.debug('CE_VALIDATE_MISC_EFT_NUM: ' || 'CE_ENTER_EFT_NUMBER');
6658     end fail_mandatory;
6659 
6660     procedure fail_check is
6661     begin
6662        fnd_message.set_name ('CE', 'CE_INVALID_EFT_NUMBER');
6663        fnd_msg_pub.add;
6664        cep_standard.debug('CE_VALIDATE_MISC_EFT_NUM: ' || 'CE_INVALID_EFT_NUMBER');
6665     end fail_check;
6666 
6667     procedure pass_check is
6668     begin
6669        cep_standard.debug('CE_VALIDATE_MISC_EFT_NUM: ' || 'pass_check');
6670     end pass_check;
6671 BEGIN
6672     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_MISC_EFT_NUM');
6673 
6674     -- initialize API return status to success.
6675     x_return_status := fnd_api.g_ret_sts_success;
6676 
6677     COUNTRY_NAME  := X_COUNTRY_NAME;
6678     cep_standard.debug('CE_VALIDATE_MISC_EFT_NUM - COUNTRY_NAME: '|| COUNTRY_NAME);
6679 
6680     -- Initialize message list if p_init_msg_list is set to TRUE.
6681     IF FND_API.to_Boolean(p_init_msg_list) THEN
6682         FND_MSG_PUB.initialize;
6683     END IF;
6684 
6685     EFT_NUM_VALUE := upper(replace(X_EFT_NUMBER,' ',''));
6686     EFT_NUM_VALUE := replace(EFT_NUM_VALUE,'-','');
6687 
6688     IF (COUNTRY_NAME = 'IL') THEN
6689         IF (EFT_NUM_VALUE is null) THEN
6690             fail_mandatory;
6691         ELSE
6692             IF length(EFT_NUM_VALUE) = 8 THEN
6693                 numeric_result := ce_check_numeric(EFT_NUM_VALUE,1,length(EFT_NUM_VALUE));
6694                 IF numeric_result = '0'      THEN
6695                     --  its numeric so continue
6696                     pass_check;
6697                 ELSE
6698                     fail_check;
6699                 END IF;  -- end of numeric check
6700             ELSE
6701                 fail_check;
6702             END IF;  -- end of length check
6703         END IF; --  end of mandatory check
6704     ELSE -- other countries pass_check
6705         pass_check;
6706     END IF; -- end of country_name
6707 
6708     FND_MSG_PUB.Count_And_Get(
6709         p_encoded => FND_API.G_FALSE,
6710         p_count => x_msg_count,
6711         p_data  => x_msg_data);
6712 
6713     IF x_msg_count > 0 THEN
6714         x_return_status := fnd_api.g_ret_sts_error;
6715     END IF;
6716 
6717     cep_standard.debug('CE_VALIDATE_BANKINFO.ce_validate_misc_eft_num - P_COUNT: '|| x_msg_count);
6718     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_MISC_EFT_NUM');
6719 
6720 EXCEPTION
6721   WHEN OTHERS THEN
6722     cep_standard.debug('CE_VALIDATE_BANKINFO.CE_VALIDATE_MISC_EFT_NUM ' ||X_COUNTRY_NAME );
6723     FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
6724     fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.cd_validate_misc_eft_num');
6725     fnd_msg_pub.add;
6726     RAISE;
6727 END CE_VALIDATE_MISC_EFT_NUM;
6728 
6729 /* -------------------------------------------------------------------- */
6730 
6731 PROCEDURE CE_VALIDATE_MISC_ACCT_HLDR_ALT(
6732     X_COUNTRY_NAME              IN VARCHAR2,
6733     X_ACCOUNT_HOLDER_ALT        IN VARCHAR2,
6734     X_ACCOUNT_CLASSIFICATION    IN VARCHAR2,
6735     p_init_msg_list             IN VARCHAR2,
6736     x_msg_count                 OUT NOCOPY NUMBER,
6737     x_msg_data                  OUT NOCOPY VARCHAR2,
6738     x_return_status             IN OUT NOCOPY VARCHAR2
6739 ) AS
6740     COUNTRY_NAME        VARCHAR2(2);
6741     ACCOUNT_HOLDER_ALT  VARCHAR2(60);
6742     numeric_result      VARCHAR2(40);
6743 
6744     procedure fail_mandatory is
6745     begin
6746        fnd_message.set_name ('CE', 'CE_ENTER_ACCOUNT_HOLDER_ALT');
6747        fnd_msg_pub.add;
6748        cep_standard.debug('CE_VALIDATE_MISC_ACCT_HLDR_ALT: ' || 'CE_ENTER_ACCOUNT_HOLDER_ALT');
6749     end fail_mandatory;
6750 
6751     procedure pass_check is
6752     begin
6753        cep_standard.debug('pass_check');
6754     end pass_check;
6755 
6756 BEGIN
6757     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_MISC_ACCT_HLDR_ALT');
6758 
6759     -- initialize API return status to success.
6760     x_return_status := fnd_api.g_ret_sts_success;
6761 
6762     COUNTRY_NAME  := X_COUNTRY_NAME;
6763     cep_standard.debug('CE_VALIDATE_MISC_ACCT_HLDR_ALT - COUNTRY_NAME: '|| COUNTRY_NAME);
6764 
6765     -- Initialize message list if p_init_msg_list is set to TRUE.
6766     IF FND_API.to_Boolean(p_init_msg_list) THEN
6767         FND_MSG_PUB.initialize;
6768     END IF;
6769 
6770     ACCOUNT_HOLDER_ALT := X_ACCOUNT_HOLDER_ALT;
6771     IF (COUNTRY_NAME = 'JP') THEN
6772         IF (ACCOUNT_HOLDER_ALT is null and X_ACCOUNT_CLASSIFICATION = 'INTERNAL') THEN
6773             fail_mandatory;
6774         ELSE
6775             pass_check;
6776         END IF; -- end of mandatory check
6777     ELSE -- other countries pass_check
6778         pass_check;
6779     END IF; -- end of country_name
6780 
6781     FND_MSG_PUB.Count_And_Get(
6782         p_encoded => FND_API.G_FALSE,
6783         p_count => x_msg_count,
6784         p_data  => x_msg_data);
6785 
6786     IF x_msg_count > 0 THEN
6787        x_return_status := fnd_api.g_ret_sts_error;
6788     END IF;
6789     cep_standard.debug('CE_VALIDATE_BANKINFO.ce_validate_misc_acct_hldr_alt - P_COUNT: '|| x_msg_count);
6790 
6791     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_MISC_ACCT_HLDR_ALT');
6792 EXCEPTION
6793   WHEN OTHERS THEN
6794     cep_standard.debug('CE_VALIDATE_BANKINFO.CE_VALIDATE_MISC_ACCT_HLDR_ALT ' ||X_COUNTRY_NAME );
6795     FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
6796     fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.cd_validate_misc_acct_hldr_alt');
6797     fnd_msg_pub.add;
6798     RAISE;
6799 END CE_VALIDATE_MISC_ACCT_HLDR_ALT;
6800 
6801 -- added 12/18/06
6802 /* -------------------------------------------------------------------- */
6803 
6804 PROCEDURE ce_validate_branch_is_format(
6805     Xi_BRANCH_NUMBER    in varchar2,
6806     Xo_VALUE_OUT        OUT NOCOPY varchar2
6807 ) AS
6808     branch_num      VARCHAR2(100);
6809     numeric_result  VARCHAR2(100);
6810 BEGIN
6811     cep_standard.debug('>>CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IS_FORMAT');
6812 
6813     Xo_VALUE_OUT := Xi_BRANCH_NUMBER;
6814     -- 7582842: Disable validations using profile option
6815     IF CE_DISABLE_VALIDATION THEN
6816         cep_standard.debug('validations disabled. no check done');
6817         RETURN;
6818     END IF;
6819 
6820     BRANCH_NUM := upper(replace(Xi_BRANCH_NUMBER,' ',''));
6821     BRANCH_NUM := replace(BRANCH_NUM,'-','');
6822 
6823     IF (BRANCH_NUM) IS NOT NULL
6824     THEN    /* length is ok */
6825         IF length(BRANCH_NUM) <= 4
6826         THEN
6827             numeric_result := ce_check_numeric(BRANCH_NUM,1,length(BRANCH_NUM));
6828             IF numeric_result = '0'
6829             THEN /* its numeric so continue  */
6830                 Xo_value_out := lpad(BRANCH_NUM,4,0);
6831                 BRANCH_NUM := lpad(BRANCH_NUM,4,0);
6832             ELSE
6833                 ce_failed_check('BRANCH_NUM','NUMERIC');
6834             END IF;  /* end of numeric check */
6835         ELSE
6836             ce_failed_check('BRANCH_NUM','LENGTH_MAX','4');
6837         END IF;  /* end of length check */
6838     END IF;  /* end of null check */
6839 
6840     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IS_FORMAT');
6841 END CE_VALIDATE_BRANCH_IS_FORMAT;
6842 
6843 /* --------------------------------------------------------------------
6844 |  PRIVATE PROCEDURE                                                    |
6845 |      GET_BRANCH_NUM_FORMAT                                               |
6846 |                                                                       |
6847 |  CALLED BY                                                            |
6848 |      AR                                |
6849 |                                                                       |
6850 |  CALLS                                                                |
6851 |      CE_VALIDATE_BRANCH_*           for each country                  |
6852 |      CE_VALIDATE_BRANCH_IS_FORMAT                                     |
6853  --------------------------------------------------------------------- */
6854 PROCEDURE GET_BRANCH_NUM_FORMAT(
6855     x_country_name  IN VARCHAR2,
6856     x_branch_number IN VARCHAR2,
6857     x_value_out     OUT NOCOPY Varchar2,
6858     p_init_msg_list IN VARCHAR2,
6859     x_msg_count     OUT NOCOPY NUMBER,
6860     x_msg_data      OUT NOCOPY VARCHAR2,
6861     x_return_status IN OUT NOCOPY VARCHAR2
6862 ) AS
6863 
6864     COUNTRY_NAME   VARCHAR2(2);
6865     X_PASS_MAND_CHECK  VARCHAR2(1);
6866 
6867     procedure fail_mandatory is
6868     begin
6869        fnd_message.set_name ('CE', 'CE_ENTER_BRANCH_NUM');
6870        fnd_msg_pub.add;
6871        cep_standard.debug('GET_BRANCH_NUM_FORMAT: ' || 'CE_ENTER_BRANCH_NUM');
6872     end fail_mandatory;
6873 
6874 BEGIN
6875     cep_standard.debug('>>CE_VALIDATE_BANKINFO.GET_BRANCH_NUM_FORMAT');
6876 
6877     -- initialize API return status to success.
6878     x_return_status := fnd_api.g_ret_sts_success;
6879 
6880     COUNTRY_NAME  := X_COUNTRY_NAME;
6881     X_VALUE_OUT := X_BRANCH_NUMBER;
6882     cep_standard.debug('COUNTRY_NAME: '|| COUNTRY_NAME);
6883     cep_standard.debug('X_VALUE_OUT: '|| X_VALUE_OUT);
6884 
6885     -- Initialize message list if p_init_msg_list is set to TRUE.
6886     IF FND_API.to_Boolean(p_init_msg_list) THEN
6887         FND_MSG_PUB.initialize;
6888     END IF;
6889 
6890     /* We must validate the Bank Branch Number */
6891     IF X_BRANCH_NUMBER is null   THEN
6892         X_PASS_MAND_CHECK := 'F';
6893     ELSE
6894         X_PASS_MAND_CHECK := 'P';
6895     END IF;
6896 
6897     cep_standard.debug('GET_BRANCH_NUM_FORMAT - X_PASS_MAND_CHECK: '|| X_PASS_MAND_CHECK);
6898     IF (X_PASS_MAND_CHECK = 'P')  THEN
6899         IF (COUNTRY_NAME = 'AT') THEN
6900             CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_AT(
6901                 X_BRANCH_NUMBER,
6902                 X_PASS_MAND_CHECK,
6903                 X_VALUE_OUT);
6904 
6905         ELSIF (COUNTRY_NAME = 'ES') THEN
6906             CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_ES(
6907                 X_BRANCH_NUMBER,
6908                 X_PASS_MAND_CHECK,
6909                 X_VALUE_OUT);
6910 
6911         ELSIF (COUNTRY_NAME = 'FR') THEN
6912             CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_FR(
6913                 X_BRANCH_NUMBER,
6914                 X_PASS_MAND_CHECK,
6915                 X_VALUE_OUT);
6916 
6917         ELSIF (COUNTRY_NAME = 'BR') THEN
6918             CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_BR(
6919                 X_BRANCH_NUMBER,
6920                 X_PASS_MAND_CHECK,
6921                 X_VALUE_OUT);
6922 
6923         ELSIF (COUNTRY_NAME = 'IS') THEN
6924             CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IS_FORMAT(
6925                 X_BRANCH_NUMBER,
6926                 X_VALUE_OUT);
6927 
6928         ELSIF (COUNTRY_NAME = 'US') THEN
6929             CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_US(
6930                 X_BRANCH_NUMBER,
6931                 X_PASS_MAND_CHECK,
6932                 X_VALUE_OUT);
6933 
6934         END IF;
6935     ELSE
6936         fail_mandatory;
6937     END IF;
6938 
6939     FND_MSG_PUB.Count_And_Get(
6940         p_encoded => FND_API.G_FALSE,
6941         p_count => x_msg_count,
6942         p_data  => x_msg_data);
6943 
6944     IF x_msg_count > 0 THEN
6945         x_return_status := fnd_api.g_ret_sts_error;
6946     END IF;
6947 
6948     cep_standard.debug('P_COUNT: '|| x_msg_count );
6949     cep_standard.debug('X_VALUE_OUT: '|| X_VALUE_OUT);
6950     cep_standard.debug('<<CE_VALIDATE_BANKINFO.GET_BRANCH_NUM_FORMAT');
6951 
6952 EXCEPTION
6953   WHEN OTHERS THEN
6954     cep_standard.debug('CE_VALIDATE_BANKINFO.GET_BRANCH_NUM_FORMAT ' ||X_COUNTRY_NAME );
6955     FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
6956     fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.GET_BRANCH_NUM_FORMAT');
6957     fnd_msg_pub.add;
6958     RAISE;
6959 END GET_BRANCH_NUM_FORMAT;
6960 
6961 -- bug 6856840 : Added procedure
6962 /* ---------------------------------------------------------------------
6963 |  PUBLIC PROCEDURE                                                     |
6964 |      CE_VALIDATE_BRANCH_BANK                                          |
6965 |                                                                       |
6966 |  DESCRIPTION                                                          |
6967 |     This procedure sets the global variable BANK_ID_IS_NUM and calls  |
6968 |     the country-specific branch validation procedure.                 |
6969 |                                                                       |
6970 |  CALLED BY                                                            |
6971 |      IBY                                                              |
6972 |                                                                       |
6973 |  CALLS                                                                |
6974 |      CE_VALIDATE_BRANCH_*           for some countries                |
6975  --------------------------------------------------------------------- */
6976 procedure CE_VALIDATE_BRANCH_BANK (
6977     Xi_COUNTRY     IN varchar2,
6978     Xi_BRANCH_NUM  IN varchar2,
6979     Xi_BANK_NUM    IN varchar2,
6980 	Xo_VALUE_OUT   OUT NOCOPY varchar2
6981 ) AS
6982 BEGIN
6983     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_BANK');
6984 
6985     -- setting global variable to map Bank ID as Bank Number instead
6986     -- of party ID
6987     BANK_ID_IS_NUM := TRUE;
6988 
6989 	Xo_VALUE_OUT := Xi_BRANCH_NUM;
6990 	-- depending upon country code call the appropriate function
6991     IF    Xi_COUNTRY = 'AU'
6992     THEN
6993         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_AU(
6994                     Xi_BRANCH_NUMBER    => Xi_BRANCH_NUM,
6995                     Xi_BANK_ID          => Xi_BANK_NUM,
6996                     Xi_PASS_MAND_CHECK  => 'P');
6997 
6998     ELSIF Xi_COUNTRY = 'DE'
6999     THEN
7000         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_DE(
7001                     Xi_BRANCH_NUMBER    => Xi_BRANCH_NUM,
7002                     Xi_BANK_ID          => Xi_BANK_NUM);
7003 
7004     ELSIF Xi_COUNTRY = 'IS'
7005     THEN
7006         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IS(
7007                     Xi_BRANCH_NUMBER    => Xi_BRANCH_NUM,
7008                     Xi_BANK_ID          => Xi_BANK_NUM,
7009 					Xo_VALUE_OUT		=> Xo_VALUE_OUT);
7010 
7011     ELSIF Xi_COUNTRY = 'IE'
7012     THEN
7013         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IE(
7014                     Xi_BRANCH_NUMBER    => Xi_BRANCH_NUM,
7015                     Xi_BANK_ID          => Xi_BANK_NUM);
7016 
7017     ELSIF Xi_COUNTRY = 'LU'
7018     THEN
7019         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_LU(
7020                     Xi_BRANCH_NUMBER    => Xi_BRANCH_NUM,
7021                     Xi_BANK_ID          => Xi_BANK_NUM);
7022 
7023     ELSIF Xi_COUNTRY = 'PL'
7024     THEN
7025         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_PL(
7026                     Xi_BRANCH_NUMBER    => Xi_BRANCH_NUM,
7027                     Xi_BANK_ID          => Xi_BANK_NUM);
7028 
7029     ELSIF Xi_COUNTRY = 'SE'
7030     THEN
7031         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_SE(
7032                     Xi_BRANCH_NUMBER    => Xi_BRANCH_NUM,
7033                     Xi_BANK_ID          => Xi_BANK_NUM);
7034 
7035     ELSIF Xi_COUNTRY = 'CH'
7036     THEN
7037         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_CH(
7038                     Xi_BRANCH_NUMBER    => Xi_BRANCH_NUM,
7039                     Xi_BANK_ID          => Xi_BANK_NUM);
7040 
7041     ELSIF Xi_COUNTRY = 'GB'
7042     THEN
7043         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_GB(
7044                     Xi_BRANCH_NUMBER    => Xi_BRANCH_NUM,
7045                     Xi_BANK_ID          => Xi_BANK_NUM);
7046     END IF;
7047 
7048     -- resetting the variable
7049     BANK_ID_IS_NUM := FALSE;
7050 
7051     cep_standard.debug('<<CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_BANK');
7052 END CE_VALIDATE_BRANCH_BANK;
7053 
7054 --  7582842: The following procedures are no longer used by CE:
7055 --    1) UPD_BANK_UNIQUE
7056 --    2) UPD_BANK_VALIDATE
7057 --    3) UPD_BRANCH_UNIQUE
7058 --    4) UPD_BRANCH_VALIDATE
7059 --    5) UPD_ACCOUNT_UNIQUE
7060 --    6) UPD_ACCOUNT_VALIDATE
7061 --   But, these have been retained due to possible external dependencies
7062 --   as these are public porcedures
7063 /* -------------------------------------------------------------------
7064 |  PUBLIC PROCEDURE                                                   |
7065 |   UPD_BANK_UNIQUE                                                   |
7066 |    Description:  Bank uniqueness validation                         |
7067 |    Usage:        Bug 7582842 - No longer called by CE               |
7068 |    Calls:        CE_VALIDATE_UNIQUE_BANK_*                          |
7069  --------------------------------------------------------------------*/
7070 PROCEDURE UPD_BANK_UNIQUE(
7071     X_COUNTRY_NAME    IN varchar2,
7072     X_BANK_NUMBER     IN varchar2,
7073     X_BANK_NAME       IN varchar2,
7074     X_BANK_NAME_ALT   IN varchar2,
7075     X_TAX_PAYER_ID    IN varchar2,
7076     X_BANK_ID         IN NUMBER,
7077     p_init_msg_list   IN VARCHAR2,
7078     x_msg_count      OUT NOCOPY NUMBER,
7079     x_msg_data       OUT NOCOPY VARCHAR2,
7080     X_VALUE_OUT      OUT NOCOPY varchar2,
7081     x_return_status     IN OUT NOCOPY VARCHAR2,
7082     X_ACCOUNT_CLASSIFICATION IN VARCHAR2 DEFAULT NULL
7083 ) AS
7084     COUNTRY_NAME   VARCHAR2(2);
7085     X_PASS_MAND_CHECK  VARCHAR2(1);
7086 BEGIN
7087     cep_standard.debug('>>CE_VALIDATE_BANKINFO.upd_bank_unique');
7088     -- initialize API return status to success.
7089     x_return_status := fnd_api.g_ret_sts_success;
7090 
7091     COUNTRY_NAME  := X_COUNTRY_NAME;
7092     X_VALUE_OUT := X_BANK_NUMBER;
7093 
7094     cep_standard.debug('COUNTRY_NAME: '|| COUNTRY_NAME ||
7095                        ', X_VALUE_OUT: '|| X_VALUE_OUT);
7096 
7097     -- Initialize message list if p_init_msg_list is set to TRUE.
7098     IF FND_API.to_Boolean(p_init_msg_list) THEN
7099         FND_MSG_PUB.initialize;
7100     END IF;
7101 
7102     cep_standard.debug('P_INIT_MSG_LIST: '|| P_INIT_MSG_LIST);
7103 
7104     /* UNIQUE VALIDATION CHECK for bank */
7105     cep_standard.debug('UNIQUE VALIDATION CHECK for bank' );
7106 
7107     IF (COUNTRY_NAME = 'JP') THEN
7108         cep_standard.debug('call CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BANK_JP' );
7109 
7110         CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BANK_JP(
7111             X_COUNTRY_NAME,
7112             X_BANK_NUMBER ,
7113             X_BANK_NAME ,
7114             X_BANK_NAME_ALT,
7115             X_BANK_ID);
7116 
7117     END IF;  /* country unique check for bank  */
7118     cep_standard.debug('CE_VALIDATE_CD: ' || 'UNIQUE VALIDATION CHECK for bank end' );
7119 
7120     FND_MSG_PUB.Count_And_Get(
7121         p_encoded => FND_API.G_FALSE,
7122         p_count => x_msg_count,
7123         p_data  => x_msg_data);
7124 
7125     IF x_msg_count > 0 THEN
7126         x_return_status := fnd_api.g_ret_sts_error;
7127     END IF;
7128 
7129     cep_standard.debug('CE_VALIDATE_BANKINFO.upd_bank_unique - P_COUNT: '|| x_msg_count);
7130     cep_standard.debug('X_VALUE_OUT: '|| X_VALUE_OUT);
7131     cep_standard.debug('<<CE_VALIDATE_BANKINFO.upd_bank_unique');
7132 EXCEPTION
7133   WHEN OTHERS THEN
7134     cep_standard.debug('CE_VALIDATE_BANKINFO.upd_bank_unique ' ||X_COUNTRY_NAME );
7135     FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
7136     fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.upd_bank_unique');
7137     fnd_msg_pub.add;
7138     RAISE;
7139 END UPD_BANK_UNIQUE;
7140 
7141 /* -------------------------------------------------------------------
7142 |  PUBLIC PROCEDURE                                                   |
7143 |   UPD_BANK_VALIDATE                                                 |
7144 |    Description:  Country specific Bank validation that does not     |
7145 |                  include the uniqueness validations                 |
7146 |    Usage:        Bug 7582842 - No longer called by CE               |
7147 |    Calls:        CE_VALIDATE_BANK_*                                 |
7148  --------------------------------------------------------------------*/
7149 PROCEDURE UPD_BANK_VALIDATE(
7150     X_COUNTRY_NAME    IN varchar2,
7151     X_BANK_NUMBER     IN varchar2,
7152     X_BANK_NAME       IN varchar2,
7153     X_BANK_NAME_ALT   IN varchar2,
7154     X_TAX_PAYER_ID    IN varchar2,
7155     X_BANK_ID         IN NUMBER,
7156     p_init_msg_list   IN VARCHAR2,
7157     x_msg_count      OUT NOCOPY NUMBER,
7158     x_msg_data       OUT NOCOPY VARCHAR2,
7159     X_VALUE_OUT      OUT NOCOPY varchar2,
7160     x_return_status     IN OUT NOCOPY VARCHAR2,
7161     X_ACCOUNT_CLASSIFICATION IN VARCHAR2 DEFAULT NULL
7162 ) AS
7163     COUNTRY_NAME   VARCHAR2(2);
7164     X_PASS_MAND_CHECK  VARCHAR2(1);
7165 
7166     l_value_out           VARCHAR2(40);-- 9250566: Added
7167     l_value_out_custom    VARCHAR2(40);-- 9250566: Added
7168     l_usr_valid           VARCHAR2(1); -- 9250566: Added
7169     l_count_before_custom NUMBER;      -- 9250566: Added
7170     l_count_after_custom  NUMBER;      -- 9250566: Added
7171 
7172 BEGIN
7173     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_bank');
7174 
7175     -- initialize API return status to success.
7176     x_return_status := fnd_api.g_ret_sts_success;
7177 
7178     COUNTRY_NAME  := X_COUNTRY_NAME;
7179     l_value_out := X_BANK_NUMBER;
7180 
7181     cep_standard.debug('COUNTRY_NAME: '|| COUNTRY_NAME||
7182                        ', l_value_out: '|| l_value_out);
7183 
7184     -- Initialize message list if p_init_msg_list is set to TRUE.
7185     IF FND_API.to_Boolean(p_init_msg_list) THEN
7186         FND_MSG_PUB.initialize;
7187     END IF;
7188 
7189     cep_standard.debug('CE_VALIDATE_BANKINFO.upd_bank_validate - P_INIT_MSG_LIST: '|| P_INIT_MSG_LIST);
7190 
7191     /* We must validate the Bank Number */
7192     IF X_BANK_NUMBER is null   THEN
7193         X_PASS_MAND_CHECK := 'F';
7194     ELSE
7195         X_PASS_MAND_CHECK := 'P';
7196     END IF;
7197 
7198     IF (COUNTRY_NAME = 'ES') THEN
7199         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_ES(
7200             X_BANK_NUMBER,
7201             X_PASS_MAND_CHECK,
7202             l_value_out);
7203 
7204     ELSIF (COUNTRY_NAME = 'FR') THEN
7205         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_FR(
7206             X_BANK_NUMBER,
7207             X_PASS_MAND_CHECK,
7208             l_value_out);
7209 
7210     ELSIF (COUNTRY_NAME = 'PT') THEN
7211         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_PT(
7212             X_BANK_NUMBER,
7213             X_PASS_MAND_CHECK);
7214 
7215     ELSIF (COUNTRY_NAME = 'BR') THEN
7216         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_BR(
7217             X_BANK_NUMBER,
7218             X_PASS_MAND_CHECK,
7219             l_value_out);
7220 
7221     -- Added 5/14/02
7222     ELSIF (COUNTRY_NAME = 'DE') THEN
7223         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_DE(X_BANK_NUMBER);
7224 
7225     ELSIF (COUNTRY_NAME = 'GR') THEN
7226         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_GR(X_BANK_NUMBER);
7227 
7228     ELSIF (COUNTRY_NAME = 'IS') THEN
7229         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_IS(
7230             X_BANK_NUMBER,
7231             l_value_out);
7232 
7233     ELSIF (COUNTRY_NAME = 'IE') THEN
7234         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_IE(X_BANK_NUMBER);
7235 
7236     ELSIF (COUNTRY_NAME = 'IT') THEN
7237         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_IT(
7238             X_BANK_NUMBER,
7239             X_PASS_MAND_CHECK);
7240 
7241     ELSIF (COUNTRY_NAME = 'LU') THEN
7242         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_LU(X_BANK_NUMBER);
7243 
7244 
7245     ELSIF (COUNTRY_NAME = 'PL') THEN
7246         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_PL(X_BANK_NUMBER);
7247 
7248     ELSIF (COUNTRY_NAME = 'SE') THEN
7249         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_SE(X_BANK_NUMBER);
7250 
7251     ELSIF (COUNTRY_NAME = 'CH') THEN
7252         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_CH(X_BANK_NUMBER);
7253 
7254     ELSIF (COUNTRY_NAME = 'GB') THEN
7255         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_GB(X_BANK_NUMBER);
7256 
7257     ELSIF (COUNTRY_NAME = 'CO') THEN
7258     --Bug 10171134
7259         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_CO(
7260             X_COUNTRY_NAME,
7261             X_BANK_NAME ,
7262             X_TAX_PAYER_ID,
7263             X_BANK_ID);
7264 
7265     -- Added 10/19/04
7266     ELSIF (COUNTRY_NAME = 'AU') THEN
7267         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_AU(X_BANK_NUMBER);
7268 
7269     ELSIF (COUNTRY_NAME = 'IL') THEN
7270         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_IL(
7271             X_BANK_NUMBER,
7272             X_PASS_MAND_CHECK);
7273 
7274     ELSIF (COUNTRY_NAME = 'NZ') THEN
7275         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_NZ(
7276             X_BANK_NUMBER,
7277             X_PASS_MAND_CHECK);
7278 
7279     ELSIF (COUNTRY_NAME = 'JP') THEN
7280         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_JP(
7281             X_BANK_NUMBER,
7282             X_BANK_NAME_ALT,
7283             X_PASS_MAND_CHECK);
7284 
7285             -- 8266356: Added
7286     ELSIF (COUNTRY_NAME = 'AT') THEN
7287         CE_VALIDATE_BANKINFO.CE_VALIDATE_BANK_AT(
7288             X_BANK_NUMBER,
7289             X_PASS_MAND_CHECK,
7290             l_value_out);
7291 
7292     END IF;  /* country check for bank   */
7293 
7294     -- 9250566 ADDED 4/6 START -------------------------
7295     l_count_before_custom := Nvl(FND_MSG_PUB.count_msg,0);
7296     l_usr_valid := fnd_api.g_ret_sts_success;
7297 
7298     -- Call to custom validation routines
7299     cep_standard.debug('Calling custom validation hooks');
7300     cep_standard.debug('l_count_before=' ||l_count_before_custom);
7301     cep_standard.debug('l_value_out='    ||l_value_out);
7302     CE_CUSTOM_BANK_VALIDATIONS.ce_usr_validate_bank (
7303         Xi_COUNTRY_NAME    => X_COUNTRY_NAME,
7304         Xi_BANK_NUMBER     => l_value_out,
7305         Xi_BANK_NAME       => X_BANK_NAME,
7306         Xi_BANK_NAME_ALT   => X_BANK_NAME_ALT,
7307         Xi_TAX_PAYER_ID    => X_TAX_PAYER_ID,
7308         Xi_BANK_ID         => X_BANK_ID,
7309         Xo_BANK_NUM_OUT    => l_value_out_custom,
7310         Xo_RETURN_STATUS   => l_usr_valid
7311     );
7312     l_count_after_custom := FND_MSG_PUB.count_msg;
7313     cep_standard.debug('l_count_before='||l_count_before_custom);
7314 
7315     cep_standard.debug('l_value_out_custom='||l_value_out_custom);
7316     X_VALUE_OUT := NVL(l_value_out_custom,l_value_out);
7317 
7318     -- Check return status
7319     IF l_usr_valid = fnd_api.g_ret_sts_error
7320     THEN
7321        cep_standard.debug('Custom validations done - failure');
7322        IF l_count_after_custom = 0 THEN
7323           cep_standard.debug('No custom error message set');
7324        END IF;
7325     ELSE
7326        cep_standard.debug('Custom validations done - success');
7327        -- remove any unnecessary messages
7328        WHILE l_count_after_custom > l_count_before_custom
7329        LOOP
7330             FND_MSG_PUB.delete_msg(l_count_after_custom);
7331             l_count_after_custom := l_count_after_custom - 1;
7332             cep_standard.debug(l_count_after_custom);
7333         END LOOP;
7334         cep_standard.debug('After cleanup, count='||FND_MSG_PUB.count_msg);
7335 
7336     END IF;
7337     -- 9250566 ADDED 4/6 END --------------------------
7338 
7339 
7340     FND_MSG_PUB.Count_And_Get(
7341         p_encoded => FND_API.G_FALSE,
7342         p_count => x_msg_count,
7343         p_data  => x_msg_data);
7344 
7345     IF x_msg_count > 0 THEN
7346         x_return_status := fnd_api.g_ret_sts_error;
7347     END IF;
7348 
7349     cep_standard.debug('CE_VALIDATE_BANKINFO.upd_bank_validate - P_COUNT: '|| x_msg_count);
7350     cep_standard.debug('X_VALUE_OUT: '|| X_VALUE_OUT);
7351     cep_standard.debug('<<CE_VALIDATE_BANKINFO.upd_bank_validate');
7352 EXCEPTION
7353   WHEN OTHERS THEN
7354     cep_standard.debug('EXCEPTION: upd_bank_validate' ||X_COUNTRY_NAME );
7355     FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
7356     fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.upd_bank_validate');
7357     fnd_msg_pub.add;
7358     RAISE;
7359 END UPD_BANK_VALIDATE;
7360 
7361 /* -------------------------------------------------------------------
7362 |  PUBLIC PROCEDURE                                                   |
7363 |   UPD_BRANCH_UNIQUE                                                 |
7364 |    Description:  Branch uniqueness validation                       |
7365 |    Usage:        Bug 7582842 - No longer called by CE               |
7366 |    Calls:        CE_VALIDATE_UNIQUE_BRANCH_*                        |
7367  ------------------------------------------------------------------  */
7368 PROCEDURE UPD_BRANCH_UNIQUE(
7369     X_COUNTRY_NAME     IN  varchar2,
7370     X_BANK_NUMBER      IN  varchar2,
7371     X_BRANCH_NUMBER    IN  varchar2,
7372     X_BANK_NAME        IN  varchar2,
7373     X_BRANCH_NAME      IN  varchar2,
7374     X_BRANCH_NAME_ALT  IN  varchar2,
7375     X_BANK_ID          IN  NUMBER,
7376     X_BRANCH_ID        IN  NUMBER,
7377     P_INIT_MSG_LIST    IN  VARCHAR2,
7378     X_MSG_COUNT        OUT NOCOPY NUMBER,
7379     X_MSG_DATA         OUT NOCOPY VARCHAR2,
7380     X_VALUE_OUT        OUT NOCOPY varchar2,
7381     X_RETURN_STATUS    IN OUT NOCOPY VARCHAR2,
7382     X_ACCOUNT_CLASSIFICATION IN VARCHAR2 DEFAULT NULL
7383 ) AS
7384 
7385     COUNTRY_NAME   VARCHAR2(2);
7386     X_PASS_MAND_CHECK  VARCHAR2(1);
7387 
7388 BEGIN
7389 
7390     cep_standard.debug('>>CE_VALIDATE_BANKINFO.upd_branch_unique');
7391 
7392     -- initialize API return status to success.
7393     x_return_status := fnd_api.g_ret_sts_success;
7394 
7395     COUNTRY_NAME  := X_COUNTRY_NAME;
7396     X_VALUE_OUT := X_BRANCH_NUMBER;
7397 
7398     cep_standard.debug('CE_VALIDATE_BANKINFO.upd_branch_unique - COUNTRY_NAME: '|| COUNTRY_NAME||
7399         ',  X_VALUE_OUT: '|| X_VALUE_OUT);
7400 
7401     -- Initialize message list if p_init_msg_list is set to TRUE.
7402     IF FND_API.to_Boolean(p_init_msg_list) THEN
7403         FND_MSG_PUB.initialize;
7404     END IF;
7405 
7406     /*   UNIQUE VALIDATION CHECK for branch   */
7407     cep_standard.debug('UNIQUE VALIDATION CHECK for branch' );
7408 
7409     -- bug 4730717,
7410     -- 11/30/05 unique validation for US and Germany bank branches should not
7411     -- be removed
7412 	-- 02/04/12 bug 13641238: changes to unique validation for US
7413     IF (COUNTRY_NAME = 'JP') THEN
7414         cep_standard.debug('call CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH_JP' );
7415 
7416         CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH_JP(
7417             X_COUNTRY_NAME,
7418             X_BRANCH_NUMBER,
7419             X_BRANCH_NAME,
7420             X_BRANCH_NAME_ALT,
7421             X_BANK_ID,
7422             X_BRANCH_ID);
7423 
7424 	-- bug 13641238: Added call for US
7425     ELSIF (COUNTRY_NAME = 'US') THEN
7426 		cep_standard.debug('call CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH_US');
7427 
7428 		CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH_US(
7429 			Xi_BRANCH_NUMBER => X_BRANCH_NUMBER,
7430 			Xi_BRANCH_NAME   => X_BRANCH_NAME,
7431 			Xi_BANK_ID       => X_BANK_ID,
7432 			Xi_BRANCH_ID     => X_BRANCH_ID);
7433     ELSE
7434         cep_standard.debug('call CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH' );
7435 
7436         CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_BRANCH(
7437             X_COUNTRY_NAME,
7438             X_BRANCH_NUMBER,
7439             X_BRANCH_NAME,
7440             X_BANK_ID,
7441             X_BRANCH_ID);
7442     END IF;
7443     /*  end country unique check for branch   */
7444 
7445     FND_MSG_PUB.Count_And_Get(
7446         p_encoded => FND_API.G_FALSE,
7447         p_count => x_msg_count,
7448         p_data  => x_msg_data);
7449 
7450     IF x_msg_count > 0 THEN
7451         x_return_status := fnd_api.g_ret_sts_error;
7452     END IF;
7453 
7454     cep_standard.debug('CE_VALIDATE_BANKINFO.upd_branch_unique - P_COUNT: '|| x_msg_count||
7455         ' X_VALUE_OUT: '|| X_VALUE_OUT||
7456         '<<CE_VALIDATE_BANKINFO.upd_branch_unique');
7457 
7458 EXCEPTION
7459     WHEN OTHERS THEN
7460         cep_standard.debug('EXCEPTION: upd_branch_unique ' ||X_COUNTRY_NAME );
7461         FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
7462         fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.upd_branch_unique');
7463         fnd_msg_pub.add;
7464         RAISE;
7465 END UPD_BRANCH_UNIQUE;
7466 
7467 
7468 /* -------------------------------------------------------------------
7469 |  PUBLIC PROCEDURE                                                   |
7470 |   UPD_BRANCH_VALIDATE                                               |
7471 |    Description:  Country specific Branch validation                 |
7472 |                  that does not include the uniqueness validation    |
7473 |    Usage:        Bug 7582842 - No longer called by CE               |
7474 |    Calls:        CE_VALIDATE_BRANCH_*                               |
7475  --------------------------------------------------------------------*/
7476 PROCEDURE UPD_BRANCH_VALIDATE(
7477     x_country_name      IN  varchar2,
7478     x_bank_number       IN  varchar2,
7479     x_branch_number     IN  varchar2,
7480     x_bank_name         IN  varchar2,
7481     x_branch_name       IN  varchar2,
7482     x_branch_name_alt   IN  varchar2,
7483     x_bank_id           IN  NUMBER,
7484     x_branch_id         IN  NUMBER,
7485     p_init_msg_list     IN  VARCHAR2,
7486     x_msg_count         OUT NOCOPY NUMBER,
7487     x_msg_data          OUT NOCOPY VARCHAR2,
7488     x_value_out         OUT NOCOPY varchar2,
7489     x_return_status     IN OUT NOCOPY VARCHAR2,
7490     x_account_classification IN VARCHAR2 DEFAULT NULL,
7491     x_branch_type       IN VARCHAR2 DEFAULT NULL -- 9250566 added
7492 ) AS
7493 
7494     COUNTRY_NAME   VARCHAR2(2);
7495     X_PASS_MAND_CHECK  VARCHAR2(1);
7496 
7497     l_value_out           VARCHAR2(40);-- 9250566: Added
7498     l_value_out_custom    VARCHAR2(40);-- 9250566: Added
7499     l_usr_valid           VARCHAR2(1); -- 9250566: Added
7500     l_count_before_custom NUMBER;      -- 9250566: Added
7501     l_count_after_custom  NUMBER;      -- 9250566: Added
7502 
7503 BEGIN
7504 
7505     cep_standard.debug('>>CE_VALIDATE_BANKINFO.upd_branch_validate');
7506 
7507     -- initialize API return status to success.
7508     x_return_status := fnd_api.g_ret_sts_success;
7509 
7510     COUNTRY_NAME  := X_COUNTRY_NAME;
7511     l_value_out := X_BRANCH_NUMBER;
7512 
7513     cep_standard.debug('COUNTRY_NAME: '|| COUNTRY_NAME);
7514     cep_standard.debug('l_value_out: '|| l_value_out);
7515 
7516     -- Initialize message list if p_init_msg_list is set to TRUE.
7517     IF FND_API.to_Boolean(p_init_msg_list) THEN
7518         FND_MSG_PUB.initialize;
7519     END IF;
7520 
7521     /* We must validate the Bank Branch Number */
7522     IF X_BRANCH_NUMBER IS NULL THEN
7523         X_PASS_MAND_CHECK := 'F';
7524     ELSE
7525         X_PASS_MAND_CHECK := 'P';
7526     END IF;
7527     cep_standard.debug('X_PASS_MAND_CHECK: '|| X_PASS_MAND_CHECK);
7528 
7529     cep_standard.debug('Calling CE_VALIDATE_BRANCH_'||COUNTRY_NAME);
7530     IF (COUNTRY_NAME = 'AT') THEN
7531         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_AT(
7532             X_BRANCH_NUMBER,
7533             X_PASS_MAND_CHECK,
7534             l_value_out);
7535 
7536     ELSIF (COUNTRY_NAME = 'ES') THEN
7537         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_ES(
7538             X_BRANCH_NUMBER,
7539             X_PASS_MAND_CHECK,
7540             l_value_out);
7541 
7542     ELSIF (COUNTRY_NAME = 'FR') THEN
7543         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_FR(
7544             X_BRANCH_NUMBER,
7545             X_PASS_MAND_CHECK,
7546             l_value_out);
7547 
7548     ELSIF (COUNTRY_NAME = 'PT') THEN
7549         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_PT(
7550             X_BRANCH_NUMBER,
7551             X_PASS_MAND_CHECK);
7552 
7553     ELSIF (COUNTRY_NAME = 'BR') THEN
7554         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_BR(
7555             X_BRANCH_NUMBER,
7556             X_PASS_MAND_CHECK,
7557             l_value_out);
7558 
7559     -- added 5/14/02
7560     ELSIF (COUNTRY_NAME = 'DE') THEN
7561         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_DE(
7562             X_BRANCH_NUMBER,
7563             X_BANK_ID);
7564 
7565     ELSIF (COUNTRY_NAME = 'GR') THEN
7566         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_GR(X_BRANCH_NUMBER);
7567 
7568     ELSIF (COUNTRY_NAME = 'IS') THEN
7569         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IS(
7570             X_BRANCH_NUMBER,
7571             X_BANK_ID,
7572             l_value_out);
7573 
7574     ELSIF (COUNTRY_NAME = 'IE') THEN
7575         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IE(
7576             X_BRANCH_NUMBER,
7577             X_BANK_ID);
7578 
7579     ELSIF (COUNTRY_NAME = 'IT') THEN
7580         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IT(
7581             X_BRANCH_NUMBER,
7582             X_PASS_MAND_CHECK);
7583 
7584     ELSIF (COUNTRY_NAME = 'LU') THEN
7585         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_LU(
7586             X_BRANCH_NUMBER,
7587             X_BANK_ID);
7588 
7589     ELSIF (COUNTRY_NAME = 'PL') THEN
7590         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_PL(
7591             X_BRANCH_NUMBER,
7592             X_BANK_ID);
7593 
7594     ELSIF (COUNTRY_NAME = 'SE') THEN
7595         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_SE(
7596             X_BRANCH_NUMBER,
7597             X_BANK_ID);
7598 
7599     ELSIF (COUNTRY_NAME = 'CH') THEN
7600         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_CH(
7601             X_BRANCH_NUMBER,
7602             X_BANK_ID);
7603 
7604     ELSIF (COUNTRY_NAME = 'GB') THEN
7605         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_GB(
7606             X_BRANCH_NUMBER,
7607             X_BANK_ID);
7608 
7609     ELSIF (COUNTRY_NAME = 'US') THEN
7610         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_US(
7611             X_BRANCH_NUMBER,
7612             X_PASS_MAND_CHECK,
7613             l_value_out);
7614 
7615     -- added 10/19/04
7616     ELSIF (COUNTRY_NAME = 'AU') THEN
7617         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_AU(X_BRANCH_NUMBER,
7618             X_BANK_ID,
7619             X_PASS_MAND_CHECK);
7620 
7621     ELSIF (COUNTRY_NAME = 'IL') THEN
7622         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_IL(X_BRANCH_NUMBER,
7623             X_PASS_MAND_CHECK);
7624 
7625     ELSIF (COUNTRY_NAME = 'NZ') THEN
7626         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_NZ(X_BRANCH_NUMBER,
7627             X_PASS_MAND_CHECK);
7628 
7629     ELSIF (COUNTRY_NAME = 'JP') THEN
7630         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_JP(X_BRANCH_NUMBER,
7631             X_BRANCH_NAME_ALT,
7632             X_PASS_MAND_CHECK);
7633 
7634     -- 9249372: Added
7635     ELSIF (COUNTRY_NAME = 'FI') THEN
7636         CE_VALIDATE_BANKINFO.CE_VALIDATE_BRANCH_FI(X_BRANCH_NUMBER);
7637 
7638     END IF;
7639 
7640     -- 9250566 ADDED 5/6 START -------------------------
7641     l_count_before_custom := Nvl(FND_MSG_PUB.count_msg,0);
7642     l_usr_valid := fnd_api.g_ret_sts_success;
7643 
7644     -- Call to custom validation routines
7645     cep_standard.debug('Calling custom validation hooks');
7646     cep_standard.debug('l_count_before=' ||l_count_before_custom);
7647     cep_standard.debug('l_value_out='    ||l_value_out);
7648     CE_CUSTOM_BANK_VALIDATIONS.ce_usr_validate_branch(
7649         Xi_COUNTRY_NAME    => X_COUNTRY_NAME,
7650         Xi_BANK_NUMBER     => X_BANK_NUMBER,
7651         Xi_BRANCH_NUMBER   => l_value_out,
7652         Xi_BANK_NAME       => X_BANK_NAME,
7653         Xi_BRANCH_NAME     => X_BRANCH_NAME,
7654         Xi_BRANCH_NAME_ALT => X_BRANCH_NAME_ALT,
7655         Xi_BRANCH_TYPE     => X_BRANCH_TYPE,
7656         Xi_BANK_ID         => X_BANK_ID,
7657         Xi_BRANCH_ID       => X_BRANCH_ID,
7658         Xo_BRANCH_NUM_OUT  => l_value_out_custom,
7659         Xo_RETURN_STATUS   => l_usr_valid
7660     );
7661 
7662     l_count_after_custom := FND_MSG_PUB.count_msg;
7663     cep_standard.debug('l_count_before='||l_count_before_custom);
7664 
7665     cep_standard.debug('l_value_out_custom='||l_value_out_custom);
7666     X_VALUE_OUT := l_value_out_custom;
7667 
7668     -- Check return status
7669     IF l_usr_valid = fnd_api.g_ret_sts_error
7670     THEN
7671        cep_standard.debug('Custom validations done - failure');
7672        IF l_count_after_custom = 0 THEN
7673           cep_standard.debug('No custom error message set');
7674        END IF;
7675     ELSE
7676        cep_standard.debug('Custom validations done - success');
7677        -- remove any unnecessary messages
7678        WHILE l_count_after_custom > l_count_before_custom
7679        LOOP
7680             FND_MSG_PUB.delete_msg(l_count_after_custom);
7681             l_count_after_custom := l_count_after_custom - 1;
7682             cep_standard.debug(l_count_after_custom);
7683         END LOOP;
7684         cep_standard.debug('After cleanup, count='||FND_MSG_PUB.count_msg);
7685 
7686     END IF;
7687     -- 9250566 5/6 ADDED END --------------------------
7688 
7689     FND_MSG_PUB.Count_And_Get(
7690         p_encoded => FND_API.G_FALSE,
7691         p_count => x_msg_count,
7692         p_data  => x_msg_data);
7693 
7694     IF x_msg_count > 0 THEN
7695         x_return_status := fnd_api.g_ret_sts_error;
7696     END IF;
7697 
7698     cep_standard.debug('P_COUNT: '|| x_msg_count);
7699     cep_standard.debug(' X_VALUE_OUT: '|| X_VALUE_OUT);
7700     cep_standard.debug('<<CE_VALIDATE_BANKINFO.upd_branch_validate');
7701 
7702 EXCEPTION
7703     WHEN OTHERS THEN
7704         cep_standard.debug('EXCEPTION: upd_branch_validate ' ||X_COUNTRY_NAME );
7705         FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
7706         fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.upd_branch_validate');
7707         fnd_msg_pub.add;
7708         RAISE;
7709 END UPD_BRANCH_VALIDATE;
7710 
7711 /* -------------------------------------------------------------------
7712 |  PUBLIC PROCEDURE                                                   |
7713 |   UPD_ACCOUNT_UNIQUE                                                |
7714 |    Description:  Bank Account uniqueness validation                 |
7715 |    Usage: Bug 7582842 - No longer called by CE                      |
7716 |    Calls:        CE_VALIDATE_UNIQUE_ACCOUNT_*                       |
7717  --------------------------------------------------------------------*/
7718 PROCEDURE UPD_ACCOUNT_UNIQUE(
7719     X_COUNTRY_NAME    IN varchar2,
7720     X_BANK_NUMBER     IN varchar2,
7721     X_BRANCH_NUMBER   IN varchar2,
7722     X_ACCOUNT_NUMBER  IN varchar2,
7723     X_BANK_ID         IN number,
7724     X_BRANCH_ID       IN number,
7725     X_ACCOUNT_ID      IN number,
7726     X_CURRENCY_CODE   IN varchar2,
7727     X_ACCOUNT_TYPE    IN varchar2,
7728     X_ACCOUNT_SUFFIX  IN varchar2,
7729     X_SECONDARY_ACCOUNT_REFERENCE  IN varchar2,
7730     X_ACCOUNT_NAME    IN varchar2,
7731     p_init_msg_list   IN  VARCHAR2,
7732     x_msg_count      OUT NOCOPY NUMBER,
7733     x_msg_data       OUT NOCOPY VARCHAR2,
7734     X_VALUE_OUT      OUT NOCOPY varchar2,
7735     x_return_status     IN OUT NOCOPY VARCHAR2,
7736     X_ACCOUNT_CLASSIFICATION IN VARCHAR2 DEFAULT NULL
7737 ) AS
7738     COUNTRY_NAME   VARCHAR2(2);
7739     X_PASS_MAND_CHECK  VARCHAR2(1);
7740 BEGIN
7741     cep_standard.debug('>>CE_VALIDATE_BANKINFO.upd_account_unique');
7742 
7743     -- initialize API return status to success.
7744     x_return_status := fnd_api.g_ret_sts_success;
7745 
7746     COUNTRY_NAME  := X_COUNTRY_NAME;
7747     X_VALUE_OUT := X_ACCOUNT_NUMBER;
7748 
7749     cep_standard.debug('COUNTRY_NAME: '|| COUNTRY_NAME||
7750                        ', X_VALUE_OUT: '|| X_VALUE_OUT);
7751 
7752     -- Initialize message list if p_init_msg_list is set to TRUE.
7753     IF FND_API.to_Boolean(p_init_msg_list) THEN
7754         FND_MSG_PUB.initialize;
7755     END IF;
7756 
7757     /*   UNIQUE VALIDATION CHECK for account   */
7758     cep_standard.debug('UNIQUE_VALIDATION CHECK for account');
7759 
7760     IF (COUNTRY_NAME = 'JP')   THEN
7761         CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT_JP(
7762             X_ACCOUNT_NUMBER,
7763             X_CURRENCY_CODE,
7764             X_ACCOUNT_TYPE,
7765             X_ACCOUNT_NAME,
7766             X_BRANCH_ID,
7767             X_ACCOUNT_ID);
7768 
7769     ELSIF (COUNTRY_NAME = 'NZ')   THEN
7770         CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT_NZ(
7771             X_ACCOUNT_NUMBER,
7772             X_CURRENCY_CODE,
7773             X_ACCOUNT_SUFFIX,
7774             X_ACCOUNT_NAME,
7775             X_BRANCH_ID,
7776             X_ACCOUNT_ID);
7777     ELSE
7778         CE_VALIDATE_BANKINFO.CE_VALIDATE_UNIQUE_ACCOUNT(
7779             X_ACCOUNT_NUMBER,
7780             X_CURRENCY_CODE,
7781             X_ACCOUNT_NAME,
7782             X_BRANCH_ID,
7783             X_ACCOUNT_ID);
7784     END IF;
7785     cep_standard.debug(' UNIQUE_VALIDATION CHECK for account end ');
7786 
7787     FND_MSG_PUB.Count_And_Get(
7788         p_encoded => FND_API.G_FALSE,
7789         p_count => x_msg_count,
7790         p_data  => x_msg_data);
7791 
7792     IF x_msg_count > 0 THEN
7793         x_return_status := fnd_api.g_ret_sts_error;
7794     END IF;
7795 
7796     cep_standard.debug('CE_VALIDATE_BANKINFO.upd_account_unique - P_COUNT: '|| x_msg_count);
7797     cep_standard.debug('X_VALUE_OUT: '|| X_VALUE_OUT);
7798     cep_standard.debug('<<CE_VALIDATE_BANKINFO.upd_account_unique');
7799 EXCEPTION
7800   WHEN OTHERS THEN
7801     cep_standard.debug('CE_VALIDATE_BANKINFO.upd_account_unique ' ||X_COUNTRY_NAME );
7802     FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
7803     fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.upd_account_unique');
7804     fnd_msg_pub.add;
7805     RAISE;
7806 END UPD_ACCOUNT_UNIQUE;
7807 
7808 /* -------------------------------------------------------------------
7809 |  PUBLIC PROCEDURE                                                   |
7810 |   UPD_ACCOUNT_VALIDATE                                              |
7811 |    Description:  Country specific Bank Account validation           |
7812 |                  that does not include the uniqueness validations   |
7813 |    Usage: Bug 7582842 - No longer called by CE                      |
7814 |    Calls: CE_VALIDATE_ACCOUNT_*                                     |
7815  --------------------------------------------------------------------*/
7816 PROCEDURE UPD_ACCOUNT_VALIDATE(
7817     X_COUNTRY_NAME    IN varchar2,
7818     X_BANK_NUMBER     IN varchar2,
7819     X_BRANCH_NUMBER   IN varchar2,
7820     X_ACCOUNT_NUMBER  IN varchar2,
7821     X_BANK_ID         IN number,
7822     X_BRANCH_ID       IN number,
7823     X_ACCOUNT_ID      IN number,
7824     X_CURRENCY_CODE   IN varchar2,
7825     X_ACCOUNT_TYPE    IN varchar2,
7826     X_ACCOUNT_SUFFIX  IN varchar2,
7827     X_SECONDARY_ACCOUNT_REFERENCE  IN varchar2,
7828     X_ACCOUNT_NAME    IN varchar2,
7829     p_init_msg_list   IN  VARCHAR2,
7830     x_msg_count      OUT NOCOPY NUMBER,
7831     x_msg_data       OUT NOCOPY VARCHAR2,
7832     X_VALUE_OUT      OUT NOCOPY varchar2,
7833     x_return_status     IN OUT NOCOPY VARCHAR2,
7834     X_ACCOUNT_CLASSIFICATION IN VARCHAR2 DEFAULT NULL,
7835     X_CD                 IN  varchar2  DEFAULT NULL,
7836     X_ELECTRONIC_ACCT_NUM    OUT NOCOPY varchar2
7837 ) AS
7838     COUNTRY_NAME   VARCHAR2(2);
7839     X_PASS_MAND_CHECK  VARCHAR2(1);
7840     NEW_ACCOUNT_NUM  VARCHAR2(100);
7841 
7842     l_value_out           VARCHAR2(40);-- 9250566: Added
7843     l_value_out_custom    VARCHAR2(40);-- 9250566: Added
7844     l_usr_valid           VARCHAR2(1); -- 9250566: Added
7845     l_count_before_custom NUMBER;      -- 9250566: Added
7846     l_count_after_custom  NUMBER;      -- 9250566: Added
7847 
7848 BEGIN
7849     cep_standard.debug('>>CE_VALIDATE_BANKINFO.upd_account_validate');
7850     -- initialize API return status to success.
7851     x_return_status := fnd_api.g_ret_sts_success;
7852 
7853     COUNTRY_NAME  := X_COUNTRY_NAME;
7854     l_value_out := X_ACCOUNT_NUMBER;
7855     X_ELECTRONIC_ACCT_NUM := X_ACCOUNT_NUMBER;
7856 
7857     cep_standard.debug('COUNTRY_NAME: '|| COUNTRY_NAME||
7858                        ', l_value_out: '|| l_value_out);
7859 
7860     -- Initialize message list if p_init_msg_list is set to TRUE.
7861     --IF FND_API.to_Boolean(p_init_msg_list) THEN
7862         FND_MSG_PUB.initialize;
7863     --END IF;
7864 
7865     /* We must validate the Bank Account Number */
7866     IF X_ACCOUNT_NUMBER is null   THEN
7867         X_PASS_MAND_CHECK := 'F';
7868     ELSE
7869         X_PASS_MAND_CHECK := 'P';
7870     END IF;
7871 
7872     IF (COUNTRY_NAME = 'AT') THEN
7873         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_AT(
7874             X_ACCOUNT_NUMBER,
7875             X_PASS_MAND_CHECK,
7876             l_value_out);
7877 
7878     ELSIF (COUNTRY_NAME = 'DK') THEN
7879         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_DK(
7880             X_ACCOUNT_NUMBER,
7881             X_PASS_MAND_CHECK,
7882             l_value_out);
7883 
7884     ELSIF (COUNTRY_NAME = 'NO') THEN
7885         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_NO(
7886             X_ACCOUNT_NUMBER,
7887             X_PASS_MAND_CHECK);
7888 
7889     ELSIF (COUNTRY_NAME = 'ES') THEN
7890         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_ES(
7891             X_ACCOUNT_NUMBER,
7892             X_PASS_MAND_CHECK,
7893             l_value_out);
7894 
7895     ELSIF (COUNTRY_NAME = 'NL') THEN
7896         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_NL(
7897             X_ACCOUNT_NUMBER,
7898             X_PASS_MAND_CHECK);
7899 
7900     ELSIF (COUNTRY_NAME = 'FR') THEN
7901         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_FR(
7902             X_ACCOUNT_NUMBER,
7903             X_PASS_MAND_CHECK,
7904             l_value_out);
7905 
7906     ELSIF (COUNTRY_NAME = 'BE') THEN
7907         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_BE(
7908             X_ACCOUNT_NUMBER,
7909             X_PASS_MAND_CHECK);
7910 
7911     ELSIF (COUNTRY_NAME = 'PT') THEN
7912         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_PT(
7913             X_ACCOUNT_NUMBER,
7914             X_PASS_MAND_CHECK,
7915             l_value_out);
7916 
7917     ELSIF (COUNTRY_NAME = 'FI') THEN -- 8897744 Removed AND (X_BRANCH_NUMBER='LMP')
7918         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_FI(
7919             X_ACCOUNT_NUMBER,
7920             X_PASS_MAND_CHECK);
7921 
7922     -- added 5/14/02
7923     ELSIF (COUNTRY_NAME = 'DE') THEN
7924         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_DE(
7925             X_ACCOUNT_NUMBER,
7926             l_value_out );
7927 
7928     ELSIF (COUNTRY_NAME = 'GR') THEN
7929         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_GR(
7930             X_ACCOUNT_NUMBER,
7931             l_value_out);
7932 
7933     ELSIF (COUNTRY_NAME = 'IS') THEN
7934         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_IS(
7935             X_ACCOUNT_NUMBER,
7936             l_value_out );
7937 
7938     ELSIF (COUNTRY_NAME = 'IE') THEN
7939         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_IE(X_ACCOUNT_NUMBER);
7940 
7941     ELSIF (COUNTRY_NAME = 'IT') THEN
7942         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_IT(
7943             X_ACCOUNT_NUMBER,
7944             l_value_out);
7945 
7946     ELSIF (COUNTRY_NAME = 'LU') THEN
7947         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_LU(X_ACCOUNT_NUMBER);
7948 
7949     ELSIF (COUNTRY_NAME = 'PL') THEN
7950         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_PL(X_ACCOUNT_NUMBER);
7951 
7952     ELSIF (COUNTRY_NAME = 'SE') THEN
7953         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_SE(X_ACCOUNT_NUMBER);
7954 
7955     ELSIF (COUNTRY_NAME = 'CH') THEN
7956         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_CH(
7957             X_ACCOUNT_NUMBER,
7958             X_ACCOUNT_TYPE );
7959 
7960     ELSIF (COUNTRY_NAME = 'GB') THEN
7961         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_GB(
7962             X_ACCOUNT_NUMBER,
7963             X_BRANCH_NUMBER, ---Bug16234978
7964             l_value_out);
7965 
7966     ELSIF (COUNTRY_NAME = 'BR') THEN
7967         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_BR(
7968             X_ACCOUNT_NUMBER,
7969             X_SECONDARY_ACCOUNT_REFERENCE);
7970 
7971     -- added 10/19/04
7972     ELSIF (COUNTRY_NAME = 'AU') THEN
7973         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_AU(
7974             X_ACCOUNT_NUMBER,
7975             X_CURRENCY_CODE);
7976 
7977     ELSIF (COUNTRY_NAME = 'IL') THEN
7978         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_IL(X_ACCOUNT_NUMBER);
7979 
7980     ELSIF (COUNTRY_NAME = 'NZ') THEN
7981         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_NZ(
7982             X_ACCOUNT_NUMBER,
7983             X_ACCOUNT_SUFFIX);
7984 
7985     ELSIF (COUNTRY_NAME = 'JP') THEN
7986         CE_VALIDATE_BANKINFO.CE_VALIDATE_ACCOUNT_JP(
7987             X_ACCOUNT_NUMBER,
7988             X_ACCOUNT_TYPE );
7989 
7990     END IF;  /* country account check */
7991 
7992     -- ER 3973203
7993     -- Format Electronic Bank Account Num
7994     -- (CE_BANK_ACCOUNTS.BANK_ACCOUNT_NUM_ELECTRONIC)
7995     IF l_value_out IS NOT NULL THEN
7996         NEW_ACCOUNT_NUM :=  l_value_out;
7997     ELSE
7998         NEW_ACCOUNT_NUM :=  X_ACCOUNT_NUMBER;
7999     END IF;
8000 
8001     CE_FORMAT_ELECTRONIC_NUM(
8002         x_country_name ,
8003         x_bank_number ,
8004         x_branch_number ,
8005         new_account_num ,
8006         x_cd,
8007         x_account_suffix,
8008         x_secondary_account_reference,
8009         x_account_classification,
8010         x_electronic_acct_num ,
8011         p_init_msg_list  ,
8012         x_msg_count ,
8013         x_msg_data ,
8014         x_return_status   );
8015 
8016     -- 9250566 ADDED 6/6 START -------------------------
8017     l_count_before_custom := Nvl(FND_MSG_PUB.count_msg,0);
8018     l_usr_valid := fnd_api.g_ret_sts_success;
8019 
8020     -- Call to custom validation routines
8021     cep_standard.debug('Calling custom validation hooks');
8022     cep_standard.debug('l_count_before=' ||l_count_before_custom);
8023     cep_standard.debug('l_value_out='    ||l_value_out);
8024     CE_CUSTOM_BANK_VALIDATIONS.ce_usr_validate_account(
8025         Xi_COUNTRY_NAME            => X_COUNTRY_NAME,
8026         Xi_BANK_NUMBER             => X_BANK_NUMBER,
8027         Xi_BRANCH_NUMBER           => X_BRANCH_NUMBER,
8028         Xi_ACCOUNT_NUMBER          => l_value_out,
8029         Xi_CD                      => X_CD,
8030         Xi_ACCOUNT_NAME            => X_ACCOUNT_NAME,
8031         Xi_CURRENCY_CODE           => X_CURRENCY_CODE,
8032         Xi_ACCOUNT_TYPE            => X_ACCOUNT_TYPE,
8033         Xi_ACCOUNT_SUFFIX          => X_ACCOUNT_SUFFIX,
8034         Xi_SECONDARY_ACCT_REF      => X_SECONDARY_ACCOUNT_REFERENCE,
8035         Xi_ACCT_CLASSIFICATION     => X_ACCOUNT_CLASSIFICATION,
8036         Xi_BANK_ID                 => X_BANK_ID,
8037         Xi_BRANCH_ID               => X_BRANCH_ID,
8038         Xi_ACCOUNT_ID              => X_ACCOUNT_ID,
8039         Xo_ACCOUNT_NUM_OUT         => l_value_out_custom,
8040         Xo_RETURN_STATUS           => l_usr_valid
8041     );
8042 
8043     l_count_after_custom := FND_MSG_PUB.count_msg;
8044     cep_standard.debug('l_count_after='     ||l_count_after_custom);
8045 
8046     cep_standard.debug('l_value_out_custom='||l_value_out_custom);
8047     X_VALUE_OUT := NVL(l_value_out_custom,l_value_out);
8048 
8049     -- Check return status
8050     IF l_usr_valid = fnd_api.g_ret_sts_error
8051     THEN
8052        cep_standard.debug('Custom validations done - failure');
8053        IF l_count_after_custom = 0 THEN
8054           cep_standard.debug('No custom error message set');
8055        END IF;
8056     ELSE
8057        cep_standard.debug('Custom validations done - success');
8058        -- remove any unnecessary messages
8059        WHILE l_count_after_custom > l_count_before_custom
8060        LOOP
8061             FND_MSG_PUB.delete_msg(l_count_after_custom);
8062             l_count_after_custom := l_count_after_custom - 1;
8063             cep_standard.debug(l_count_after_custom);
8064         END LOOP;
8065         cep_standard.debug('After cleanup, count='||FND_MSG_PUB.count_msg);
8066 
8067     END IF;
8068     -- 9250566 6/6 ADDED END --------------------------
8069 
8070     FND_MSG_PUB.Count_And_Get(
8071         p_encoded => FND_API.G_FALSE,
8072         p_count => x_msg_count,
8073         p_data  => x_msg_data);
8074 
8075     IF x_msg_count > 0 THEN
8076         x_return_status := fnd_api.g_ret_sts_error;
8077     END IF;
8078 
8079     cep_standard.debug('CE_VALIDATE_BANKINFO.upd_account_validate - P_COUNT: '|| x_msg_count);
8080     cep_standard.debug('X_VALUE_OUT: '|| X_VALUE_OUT);
8081     cep_standard.debug('<<CE_VALIDATE_BANKINFO.upd_account_validate');
8082 EXCEPTION
8083   WHEN OTHERS THEN
8084     cep_standard.debug('EXCEPTION: upd_account_validate ' ||X_COUNTRY_NAME );
8085     FND_MESSAGE.set_name('CE', 'CE_UNHANDLED_EXCEPTION');
8086     fnd_message.set_token('PROCEDURE', 'CE_VALIDATE_BANKINFO.upd_account_validate');
8087     fnd_msg_pub.add;
8088     RAISE;
8089 END UPD_ACCOUNT_VALIDATE;
8090 
8091 /* 10172325 - Validation wrapper functions added for Fusion Migration */
8092 /* -------------------------------------------------------------------
8093 | Public Function: IS_IBAN_VALID                                      |
8094 | Description:     This function can be used to validate an IBAN value|
8095 |                  All errors are stored in the FND message stack     |
8096 | Calls:           CE_BANK_AND_ACCOUNT_VALIDATION.validate_iban       |
8097 | Parameters:      p_in_IBAN - IBAN value to be validated             |
8098 | Returns:         'Y' - IBAN is valid                                |
8099 |                  'N' - IBAN is not valid                            |
8100  --------------------------------------------------------------------*/
8101 FUNCTION is_IBAN_valid (p_in_IBAN IN VARCHAR2)
8102 RETURN VARCHAR2 AS
8103     l_out_IBAN      VARCHAR2(100);
8104     l_return_status VARCHAR2(10);
8105 BEGIN
8106     CE_BANK_AND_ACCOUNT_VALIDATION.validate_iban(
8107          p_IBAN          => p_in_IBAN
8108         ,p_IBAN_OUT      => l_out_IBAN
8109         ,x_RETURN_STATUS => l_return_status
8110     );
8111     IF l_return_status = 'S' THEN
8112         RETURN 'Y';
8113     ELSE
8114         RETURN 'N';
8115     END IF;
8116 END is_IBAN_valid;
8117 
8118 /* -------------------------------------------------------------------
8119 | Public Function: IS_BIC_VALID                                       |
8120 | Description:     This function can be used to validate a BIC Value  |
8121 |                  All errors are stored in the FND message stack     |
8122 | Calls:           CE_VALIDATE_BANKINFO.ce_validate_bic               |
8123 | Parameters:      p_in_BIC - BIC value to be validated               |
8124 | Returns:         'Y' - BIC is valid                                 |
8125 |                  'N' - BIC is not valid                             |
8126  --------------------------------------------------------------------*/
8127 FUNCTION is_BIC_valid (p_in_BIC IN VARCHAR2)
8128 RETURN VARCHAR2 AS
8129     l_msg_count     NUMBER;
8130     l_msg_data      VARCHAR2(240);
8131     l_return_status VARCHAR2(10);
8132 
8133 BEGIN
8134     l_return_status := fnd_api.g_ret_sts_success;
8135 
8136     CE_VALIDATE_BANKINFO.ce_validate_bic(
8137          X_bic_code      => p_in_BIC
8138         ,P_init_msg_list => FND_API.g_false
8139         ,X_msg_count     => l_msg_count
8140         ,X_msg_data      => l_msg_data
8141         ,X_return_status => l_return_status
8142     );
8143 
8144     IF l_return_status = 'S' THEN
8145         RETURN 'Y';
8146     ELSE
8147         RETURN 'N';
8148     END IF;
8149 END is_BIC_valid;
8150 
8151 /* Bug 16234978 Code change (1/2) starts */
8152 /* -------------------------------------------------------------------
8153 | Public Procedure: CE_VALIDATE_MOD_GB                                |
8154 | Description:      Modulus check validation for UK Bank account      |
8155 |                   numbers.                                          |
8156 | Called by:        CE_VALIDATE_BANKINFO.ce_validate_account_gb       |
8157 | Parameters:       Xi_ACCOUNT_NUMBER - Account number to be validated|
8158 |                   Xi_SORT_CODE      - Branch number                 |
8159 |                   Xo_RETURN_STATUS  - OUT parameter                 |
8160  --------------------------------------------------------------------*/
8161 procedure CE_VALIDATE_MOD_GB(Xi_ACCOUNT_NUMBER IN VARCHAR2,
8162                              Xi_SORT_CODE      IN VARCHAR2,
8163                              Xo_RETURN_STATUS  OUT NOCOPY VARCHAR2)
8164     AS
8165     type mod_checks_tabtype is
8166         table of ce_uk_val_modulus_weights%rowtype index by pls_integer;
8167 
8168     type acct_num_arr_type is
8169         table of number(1) index by pls_integer;
8170 
8171     t_modulus_checks    mod_checks_tabtype;
8172     l_account_num_arr   acct_num_arr_type;
8173     l_weights           ce_uk_val_modulus_weights%rowtype;
8174     l_acct_valid        boolean;
8175     l_check_reqd        boolean;
8176     l_mod_check_count   number;
8177     l_calc_cd           number;
8178     l_actual_cd         number;
8179     l_combined_number   varchar2(14);
8180     l_sort_code         varchar2(8);
8181 
8182     cursor c_modulus_checks (p_sort_code varchar2)
8183     is
8184     select *
8185     from ce_uk_val_modulus_weights
8186     where p_sort_code between from_sort_code and to_sort_code
8187     order by modulus_check_id;
8188 
8189     function calccheckdigit(
8190         p_combined_number in varchar2,
8191         p_modulus_checks_rec in ce_uk_val_modulus_weights%rowtype)
8192     return number
8193     as
8194         l_prod_u   NUMBER(5);
8195         l_prod_v   NUMBER(5);
8196         l_prod_w   NUMBER(5);
8197         l_prod_x   NUMBER(5);
8198         l_prod_y   NUMBER(5);
8199         l_prod_z   NUMBER(5);
8200         l_prod_a   NUMBER(5);
8201         l_prod_b   NUMBER(5);
8202         l_prod_c   NUMBER(5);
8203         l_prod_d   NUMBER(5);
8204         l_prod_e   NUMBER(5);
8205         l_prod_f   NUMBER(5);
8206         l_prod_g   NUMBER(5);
8207         l_prod_h   NUMBER(5);
8208         l_sum_prod NUMBER(7);
8209         l_mod_res  NUMBER(2);
8210 
8211         function sumdigits(
8212             p_num in varchar2)
8213         return number
8214         as
8215             l_sum number(3);
8216             l_pos number(1);
8217         begin
8218             l_sum     := 0;
8219             for l_pos in 1 .. length(p_num)
8220             loop
8221                 l_sum := l_sum + substr(p_num,l_pos,1);
8222             end loop;
8223             return l_sum;
8224         end sumdigits;
8225     begin
8226         cep_standard.debug('>>calccheckdigit');
8227         -- multiply digits with their weights
8228         l_prod_u := p_modulus_checks_rec.weight_u * SUBSTR(p_combined_number,1,1);
8229         l_prod_v := p_modulus_checks_rec.weight_v * SUBSTR(p_combined_number,2,1);
8230         l_prod_w := p_modulus_checks_rec.weight_w * SUBSTR(p_combined_number,3,1);
8231         l_prod_x := p_modulus_checks_rec.weight_x * SUBSTR(p_combined_number,4,1);
8232         l_prod_y := p_modulus_checks_rec.weight_y * SUBSTR(p_combined_number,5,1);
8233         l_prod_z := p_modulus_checks_rec.weight_z * SUBSTR(p_combined_number,6,1);
8234         l_prod_a := p_modulus_checks_rec.weight_a * SUBSTR(p_combined_number,7,1);
8235         l_prod_b := p_modulus_checks_rec.weight_b * SUBSTR(p_combined_number,8,1);
8236         l_prod_c := p_modulus_checks_rec.weight_c * SUBSTR(p_combined_number,9,1);
8237         l_prod_d := p_modulus_checks_rec.weight_d * SUBSTR(p_combined_number,10,1);
8238         l_prod_e := p_modulus_checks_rec.weight_e * SUBSTR(p_combined_number,11,1);
8239         l_prod_f := p_modulus_checks_rec.weight_f * SUBSTR(p_combined_number,12,1);
8240         l_prod_g := p_modulus_checks_rec.weight_g * SUBSTR(p_combined_number,13,1);
8241         l_prod_h := p_modulus_checks_rec.weight_h * SUBSTR(p_combined_number,14,1);
8242 
8243         cep_standard.debug('check_type = '||p_modulus_checks_rec.check_type);
8244         -- for DBLAL sum is of the digits of the products
8245         if(p_modulus_checks_rec.check_type = 'DBLAL')
8246         then
8247             l_sum_prod  := sumDigits(l_prod_u) +
8248                            sumDigits(l_prod_v) +
8249                            sumDigits(l_prod_w) +
8250                            sumDigits(l_prod_x) +
8251                            sumDigits(l_prod_y) +
8252                            sumDigits(l_prod_z) +
8253                            sumDigits(l_prod_a) +
8254                            sumDigits(l_prod_b) +
8255                            sumDigits(l_prod_c) +
8256                            sumDigits(l_prod_d) +
8257                            sumDigits(l_prod_e) +
8258                            sumDigits(l_prod_f) +
8259                            sumDigits(l_prod_g) +
8260                            sumDigits(l_prod_h);
8261         else -- for MOD10 and MOD11 sum is of the products
8262             l_sum_prod := l_prod_u +
8263                           l_prod_v +
8264                           l_prod_w +
8265                           l_prod_x +
8266                           l_prod_y +
8267                           l_prod_z +
8268                           l_prod_a +
8269                           l_prod_b +
8270                           l_prod_c +
8271                           l_prod_d +
8272                           l_prod_e +
8273                           l_prod_f +
8274                           l_prod_g +
8275                           l_prod_h;
8276         end if;
8277         -- for exception 1, add 27 to the sum
8278         if (p_modulus_checks_rec.exception_code = 1)
8279         then
8280             l_sum_prod := l_sum_prod + 27;
8281         end if;
8282 
8283         -- calculate remainder(check digit)
8284         if(p_modulus_checks_rec.check_type = 'MOD11')
8285         then
8286             l_mod_res := mod(l_sum_prod,11);
8287         else -- for mod10 and dblal, get mod of 10
8288             l_mod_res := mod(l_sum_prod,10);
8289         end if;
8290         cep_standard.debug('<<calccheckdigit');
8291         return l_mod_res;
8292     end calccheckdigit;
8293 
8294 begin
8295     cep_standard.debug('>>CE_VALIDATE_BANKINFO.ce_validate_mod_gb');
8296     -- initialize API return status to success.
8297     Xo_return_status := fnd_api.g_ret_sts_success;
8298 
8299     open c_modulus_checks(xi_sort_code);
8300     fetch c_modulus_checks bulk collect into t_modulus_checks;
8301     close c_modulus_checks;
8302 
8303     l_sort_code       := xi_sort_code;
8304     l_acct_valid      := true;
8305 
8306     for l_mod_check_count in 1 .. t_modulus_checks.count
8307     loop
8308     l_check_reqd      := true;
8309 
8310         cep_standard.debug('------------------------ performing check #'||l_mod_check_count);
8311         cep_standard.debug('exception_code = '||t_modulus_checks(l_mod_check_count).exception_code);
8312         cep_standard.debug('sort_code = '||xi_sort_code);
8313         cep_standard.debug('account_number = '||xi_account_number);
8314 
8315         for l_pos in 1..8
8316         loop
8317             l_account_num_arr(l_pos) := substr(xi_account_number, l_pos, 1);
8318         end loop;
8319 
8320         ----
8321         -- processing for exceptions before calculating modulus
8322         ----
8323         case
8324             ----
8325             -- exception 2
8326             ----
8327             when t_modulus_checks(l_mod_check_count).exception_code = 2
8328             then
8329                 if l_account_num_arr(1) <> 0 and l_account_num_arr(7) <> 9
8330                 then
8331                     t_modulus_checks(l_mod_check_count).weight_u := 0;
8332                     t_modulus_checks(l_mod_check_count).weight_v := 0;
8333                     t_modulus_checks(l_mod_check_count).weight_w := 1;
8334                     t_modulus_checks(l_mod_check_count).weight_x := 2;
8335                     t_modulus_checks(l_mod_check_count).weight_y := 5;
8336                     t_modulus_checks(l_mod_check_count).weight_z := 3;
8337                     t_modulus_checks(l_mod_check_count).weight_a := 6;
8338                     t_modulus_checks(l_mod_check_count).weight_b := 4;
8339                     t_modulus_checks(l_mod_check_count).weight_c := 8;
8340                     t_modulus_checks(l_mod_check_count).weight_d := 7;
8341                     t_modulus_checks(l_mod_check_count).weight_e := 10;
8342                     t_modulus_checks(l_mod_check_count).weight_f := 9;
8343                     t_modulus_checks(l_mod_check_count).weight_g := 3;
8344                     t_modulus_checks(l_mod_check_count).weight_h := 1;
8345                 elsif l_account_num_arr(1) <> 0 and l_account_num_arr(7) = 9
8346                 then
8347                     t_modulus_checks(l_mod_check_count).weight_u := 0;
8348                     t_modulus_checks(l_mod_check_count).weight_v := 0;
8349                     t_modulus_checks(l_mod_check_count).weight_w := 0;
8350                     t_modulus_checks(l_mod_check_count).weight_x := 0;
8351                     t_modulus_checks(l_mod_check_count).weight_y := 0;
8352                     t_modulus_checks(l_mod_check_count).weight_z := 0;
8353                     t_modulus_checks(l_mod_check_count).weight_a := 0;
8354                     t_modulus_checks(l_mod_check_count).weight_b := 0;
8355                     t_modulus_checks(l_mod_check_count).weight_c := 8;
8356                     t_modulus_checks(l_mod_check_count).weight_d := 7;
8357                     t_modulus_checks(l_mod_check_count).weight_e := 10;
8358                     t_modulus_checks(l_mod_check_count).weight_f := 9;
8359                     t_modulus_checks(l_mod_check_count).weight_g := 3;
8360                     t_modulus_checks(l_mod_check_count).weight_h := 1;
8361                 end if;
8362 
8363             ----
8364             -- exception 3
8365             ----
8366             when t_modulus_checks(l_mod_check_count).exception_code = 3
8367             then
8368                 if l_account_num_arr(3) in (6, 9)
8369                 then
8370                     l_check_reqd := false;
8371                     cep_standard.debug('Exception 3: No check required');
8372                 end if;
8373 
8374             ----
8375             -- exception 5
8376             ----
8377             when t_modulus_checks(l_mod_check_count).exception_code = 5
8378             then
8379                if  t_modulus_checks(l_mod_check_count).Check_Type = 'MOD11' then
8380                     BEGIN
8381                         select subs_sort_code
8382                         into l_sort_code
8383                         from ce_uk_val_subs_codes
8384                         where orig_sort_code = xi_sort_code;
8385 
8386                         cep_standard.debug('substituting sort code with value from mod_subs_sort_code table');
8387                         cep_standard.debug('original sort code = '||xi_sort_code);
8388                         cep_standard.debug('substitution sort code = '||l_sort_code);
8389                     EXCEPTION
8390                     WHEN no_data_found THEN
8391                         cep_standard.debug('Sort code does not appear in mod_subs_sort_code table, hence original sort code is used');
8392                     END;
8393                end if;
8394             ----
8395             -- exception 6
8396             ----
8397             when t_modulus_checks(l_mod_check_count).exception_code = 6
8398             then
8399                 if (l_account_num_arr(1) in (4, 5, 6, 7, 8))
8400                 and (l_account_num_arr(7) = l_account_num_arr(8))
8401                 then
8402                     l_check_reqd := false;
8403                     cep_standard.debug('Foreign accounts- checks cannot be performed');
8404                 end if;
8405 
8406             ----
8407             -- exception 7
8408             ----
8409             when t_modulus_checks(l_mod_check_count).exception_code = 7
8410             then
8411                 if l_account_num_arr(7) = 9
8412                 then
8413                     t_modulus_checks(l_mod_check_count).weight_u := 0;
8414                     t_modulus_checks(l_mod_check_count).weight_v := 0;
8415                     t_modulus_checks(l_mod_check_count).weight_w := 0;
8416                     t_modulus_checks(l_mod_check_count).weight_x := 0;
8417                     t_modulus_checks(l_mod_check_count).weight_y := 0;
8418                     t_modulus_checks(l_mod_check_count).weight_z := 0;
8419                     t_modulus_checks(l_mod_check_count).weight_a := 0;
8420                     t_modulus_checks(l_mod_check_count).weight_b := 0;
8421                 end if;
8422 
8423             ----
8424             -- exception 8
8425             ----
8426             when t_modulus_checks(l_mod_check_count).exception_code = 8
8427             then
8428                 l_sort_code := '090126';
8429                 cep_standard.debug('substituting sort code..');
8430                 cep_standard.debug('original sort code = '||xi_sort_code);
8431                 cep_standard.debug('substitution sort code = '||l_sort_code);
8432 
8433             ----
8434             -- exception 9
8435             ----
8436             when t_modulus_checks(l_mod_check_count).exception_code = 9
8437             then
8438                 l_sort_code := '309634';
8439                 cep_standard.debug('substituting sort code..');
8440                 cep_standard.debug('original sort code = '||xi_sort_code);
8441                 cep_standard.debug('substitution sort code = '||l_sort_code);
8442 
8443             ----
8444             -- exception 10
8445             ----
8446             when t_modulus_checks(l_mod_check_count).exception_code = 10
8447             then
8448                 if to_char((l_account_num_arr(1)||l_account_num_arr(2))) in ('09', '99')
8449                     and l_account_num_arr(7) = 9
8450                 then
8451                     t_modulus_checks(l_mod_check_count).weight_u := 0;
8452                     t_modulus_checks(l_mod_check_count).weight_v := 0;
8453                     t_modulus_checks(l_mod_check_count).weight_w := 0;
8454                     t_modulus_checks(l_mod_check_count).weight_x := 0;
8455                     t_modulus_checks(l_mod_check_count).weight_y := 0;
8456                     t_modulus_checks(l_mod_check_count).weight_z := 0;
8457                     t_modulus_checks(l_mod_check_count).weight_a := 0;
8458                     t_modulus_checks(l_mod_check_count).weight_b := 0;
8459                 end if;
8460             else
8461             NULL;
8462         end case ;
8463         l_combined_number := l_sort_code||xi_account_number;
8464 
8465         if(l_check_reqd)
8466         then
8467             l_calc_cd := calcCheckDigit(l_combined_number, t_modulus_checks(l_mod_check_count));
8468             l_actual_cd := 0;
8469             ----
8470             -- processing for exceptions after modulus checking
8471             ----
8472             case
8473                 ----
8474                 -- exception 4
8475                 ----
8476                 when t_modulus_checks(l_mod_check_count).exception_code = 4
8477                 then
8478                     l_actual_cd := l_account_num_arr(7)||l_account_num_arr(8);
8479 
8480                 ----
8481                 -- exception 5
8482                 ----
8483                 when t_modulus_checks(l_mod_check_count).exception_code = 5
8484                 then
8485 
8486                     if t_modulus_checks(l_mod_check_count).check_type = 'MOD11'
8487                     then
8488                         l_calc_cd   := Mod((11-l_calc_cd),11);
8489                         l_actual_cd := l_account_num_arr(7);
8490                     elsif t_modulus_checks(l_mod_check_count).check_type = 'DBLAL' then
8491                         l_calc_cd    := Mod((10-l_calc_cd),10);
8492                         l_actual_cd  := l_account_num_arr(8);
8493                     end if;
8494 
8495                 ----
8496                 -- exception 14
8497                 ----
8498                 when t_modulus_checks(l_mod_check_count).exception_code = 14
8499                 then
8500                     if l_calc_cd <> 0
8501                     then
8502                         cep_standard.debug('l_calc_cd = '||l_calc_cd);
8503                         cep_standard.debug('l_actual_cd = '||l_actual_cd);
8504                         cep_standard.debug('Exception 14: First check fails, hence performing second check');
8505                         if l_account_num_arr(8) not in (0, 1, 9)
8506                         then
8507                              cep_standard.debug('It is not a valid Coutts number - second check cannot be performed');
8508                         else
8509                              l_combined_number := l_sort_code||'0'||substr(xi_account_number,1,7);
8510                              l_calc_cd         := calcCheckDigit(l_combined_number, t_modulus_checks(l_mod_check_count));
8511                         end if;
8512                     end if;
8513                 ELSE
8514                 NULL;
8515             end case ;
8516 
8517             cep_standard.debug('l_actual_cd = '||l_actual_cd);
8518             cep_standard.debug('l_calc_cd = '||l_calc_cd);
8519 
8520             if (l_calc_cd = l_actual_cd )
8521             then
8522                 l_acct_valid := true;
8523                 cep_standard.debug('check succesful');
8524             else
8525                 l_acct_valid := false;
8526                 cep_standard.debug('check fails');
8527             end if;
8528             if (not l_acct_valid and t_modulus_checks(l_mod_check_count).exception_code not in (2,10,12))
8529                or (l_acct_valid and t_modulus_checks(l_mod_check_count).exception_code IN (2,10,12))
8530             then
8531                exit;
8532             end if;
8533         end if; -- check required
8534     end loop;
8535     if(l_acct_valid)
8536     then
8537         Xo_return_status := fnd_api.g_ret_sts_success;
8538         cep_standard.debug('Account #'||xi_account_number||' is valid.');
8539     else
8540         Xo_return_status := fnd_api.g_ret_sts_error;
8541         cep_standard.debug('Account #'||xi_account_number||' is invalid.');
8542     end if;
8543     cep_standard.debug('<<CE_VALIDATE_BANKINFO.ce_validate_mod_gb');
8544 END CE_VALIDATE_MOD_GB;
8545 /* Bug 16234978 Code change (1/2) ends */
8546 
8547 END CE_VALIDATE_BANKINFO;