[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;