1 PACKAGE BODY JG_TAXID_VAL_PKG AS
2 /* $Header: jgzzgtib.pls 120.15.12010000.1 2008/07/28 07:57:02 appldev ship $ */
3 -- Check Tax ID is numeric
4
5 FUNCTION check_numeric(p_taxpayer_id IN VARCHAR2
6 ) RETURN VARCHAR2 IS
7 l_length number(3);
8 BEGIN
9
10 l_length:=lengthb(p_taxpayer_id);
11 FOR i IN 1..l_length LOOP
12 IF substrb(p_taxpayer_id,i,1)=' ' THEN
13 RETURN('FALSE');
14 END IF;
15 END LOOP;
16
17 IF (NVL(RTRIM(TRANSLATE(p_taxpayer_id,'1234567890',' ')),'0') <> '0') THEN
18 RETURN('FALSE');
19 ELSE
20 RETURN('TRUE');
21 END IF;
22 END check_numeric;
23
24 -- Check the length for Tax ID
25
26 FUNCTION check_length(p_country_code IN VARCHAR2,
27 p_num_digits IN NUMBER,
28 p_taxpayer_id IN VARCHAR2
29 ) RETURN VARCHAR2 IS
30 l_max_digits NUMBER(3);
31 BEGIN
32 l_max_digits:=lengthb(p_taxpayer_id);
33 IF (p_country_code = 'AR' AND (l_max_digits = p_num_digits)) THEN
34 RETURN('TRUE');
35 ELSIF (p_country_code='CL' AND (l_max_digits <= p_num_digits)) THEN
36 RETURN('TRUE');
37 ELSIF (p_country_code='CO' AND (l_max_digits <= p_num_digits)) THEN
38 RETURN('TRUE');
39 ELSIF (p_country_code='TW' AND (l_max_digits = p_num_digits)) THEN
40 RETURN('TRUE');
41 ELSE
42 RETURN ('FALSE');
43 END IF;
44 END check_length;
45
46 -- Check Duplicate Primary Bank Branch in AP_BANK_BRANCHES
47
48 FUNCTION check_primary_bank_branch(p_bank_branch_id IN NUMBER,
49 p_bank_name IN VARCHAR2,
50 p_bank_branch_name IN VARCHAR2
51 )RETURN VARCHAR2 IS
52
53 l_bank_branch_id number(15);
54 l_bank_name varchar2(60);
55 l_bank_branch_name varchar2(60);
56
57 BEGIN
58 -- Stubbed out this function since ap_bank_branches is obsolete
59 RETURN('TRUE');
60
61 END check_primary_bank_branch;
62
63
64 -- Check Details Bank Branch
65
66 FUNCTION check_detail_bank_branch(p_bank_branch_id IN NUMBER
67 )RETURN VARCHAR2 IS
68
69 l_bank_branch_id number(15);
70
71 BEGIN
72
73 -- Stubbed out this function since ap_bank_branches is obsolete
74 RETURN('TRUE');
75
76 END check_detail_bank_branch;
77
78 -- Check uniqueness for Tax ID
79
80 FUNCTION check_uniqueness (p_country_code IN VARCHAR2,
81 p_taxpayer_id IN VARCHAR2,
82 p_record_id IN NUMBER,
83 p_calling_program IN VARCHAR2,
84 p_orig_system_ref IN VARCHAR2,
85 p_entity_name IN VARCHAR2,
86 p_request_id IN NUMBER
87 ) RETURN VARCHAR2 IS
88
89 CURSOR CHECK_UNIQUE_TAXID_AR IS -- Customers for Argentina, Chile, and Colombia
90 SELECT hzp.JGZZ_FISCAL_CODE
91 FROM hz_parties hzp, hz_cust_accounts hzc
92 WHERE hzp.JGZZ_FISCAL_CODE = p_taxpayer_id
93 AND hzc.party_id = hzp.party_id
94 AND hzc.CUST_ACCOUNT_ID <> nvl(p_record_id,0)
95 AND substrb(nvl(HZC.GLOBAL_ATTRIBUTE_CATEGORY,'XX.XX'),4,2) = p_country_code;
96
97 CURSOR CHECK_UNIQUE_TAXID_AR_TW IS -- Customers for Taiwan
98 SELECT hzp.JGZZ_FISCAL_CODE
99 FROM hz_parties hzp, hz_cust_accounts hzc
100 WHERE hzp.JGZZ_FISCAL_CODE = p_taxpayer_id
101 AND hzc.party_id = hzp.party_id
102 AND hzc.CUST_ACCOUNT_ID <> nvl(p_record_id,0);
103
104 CURSOR CHECK_UNIQUE_TAXID_AP IS -- Suppliers
105
106 -- TIN Project bug6063219
107 /*
108 SELECT AP.NUM_1099 FROM ap_suppliers AP
109 WHERE AP.NUM_1099 = p_taxpayer_id
110 AND AP.VENDOR_ID<>nvl(p_record_id,0)
111 AND substrb(nvl(AP.GLOBAL_ATTRIBUTE_CATEGORY,'XX.XX'),4,2) = p_country_code;
112 */
113 SELECT decode(ap.vendor_type_lookup_code,'Contractor',
114 decode(ap.organization_type_lookup_code,'INDIVIDUAL',AP.INDIVIDUAL_1099,
115 'FOREIGN INDIVIDUAL',AP.INDIVIDUAL_1099,
116 'PARTNERSHIP',AP.INDIVIDUAL_1099,
117 'FOREIGN PARTNERSHIP',AP.INDIVIDUAL_1099,
118 AP.NUM_1099),
119 AP.NUM_1099) NUM_1099
120 FROM PO_VENDORS AP
121 WHERE decode(ap.vendor_type_lookup_code,'Contractor',
122 decode(ap.organization_type_lookup_code,'INDIVIDUAL',AP.INDIVIDUAL_1099,
123 'FOREIGN INDIVIDUAL',AP.INDIVIDUAL_1099,
124 'PARTNERSHIP',AP.INDIVIDUAL_1099,
125 'FOREIGN PARTNERSHIP',AP.INDIVIDUAL_1099,
126 AP.NUM_1099),
127 AP.NUM_1099) = p_taxpayer_id
128 AND AP.VENDOR_ID <> nvl(p_record_id,0)
129 AND substrb(nvl(AP.GLOBAL_ATTRIBUTE_CATEGORY,'XX.XX'),4,2) = p_country_code;
130
131 -- Company Uniqueness of tax payer id is done by XLE.
132 -- Removed cursor for Company on HR Locations
133 -- Removed cursor to check on ap_bank_branches
134
135 CURSOR CHECK_UNIQUE_TAXID_AR1 IS -- CUSTOMERS
136 SELECT hzp.JGZZ_FISCAL_CODE
137 FROM hz_parties hzp, hz_cust_accounts hzc
138 WHERE hzp.JGZZ_FISCAL_CODE = p_taxpayer_id
139 AND hzc.CUST_ACCOUNT_ID <> nvl(p_record_id,0)
140 AND jg_zz_shared_pkg.get_country(fnd_profile.value('ORG_ID'), NULL) = p_country_code
141 -- Modified for Countries w/o GDF
142 UNION
143 SELECT I.JGZZ_FISCAL_CODE -- RA_CUSTOMERS_INTERFACE
144 FROM RA_CUSTOMERS_INTERFACE I
145 WHERE ( I.CUSTOMER_NAME <> p_entity_name
146 OR I.ORIG_SYSTEM_CUSTOMER_REF <> p_orig_system_ref)
147 AND I.JGZZ_FISCAL_CODE = p_taxpayer_id
148 AND jg_zz_shared_pkg.get_country(fnd_profile.value('ORG_ID'), NULL) = p_country_code
149 -- Modified for Countries w/o GDF
150 AND I.REQUEST_ID = p_request_id
151 AND NVL(I.VALIDATED_FLAG,'N') <> 'Y'
152 AND ROWNUM = 1;
153
154 l_taxid VARCHAR2(30);
155
156 BEGIN
157
158 -- Checking for Tax ID used by a different Customer
159
160 IF p_calling_program = 'ARXCUDCI' THEN
161 IF p_country_code = 'TW' THEN
162 OPEN CHECK_UNIQUE_TAXID_AR_TW;
163 FETCH CHECK_UNIQUE_TAXID_AR_TW INTO l_taxid;
164 IF (CHECK_UNIQUE_TAXID_AR_TW%NOTFOUND) THEN
165 RETURN('TRUE');
166 ELSE
167 RETURN('FALSE');
168 END IF;
169 CLOSE CHECK_UNIQUE_TAXID_AR_TW;
170 ELSE
171 OPEN CHECK_UNIQUE_TAXID_AR;
172 FETCH CHECK_UNIQUE_TAXID_AR INTO l_taxid;
173 IF (CHECK_UNIQUE_TAXID_AR%NOTFOUND) THEN
174 RETURN('TRUE');
175 ELSE
176 RETURN('FALSE');
177 END IF;
178 CLOSE CHECK_UNIQUE_TAXID_AR;
179 END IF;
180
181 -- Checking for Tax ID used by a different Supplier
182
183 ELSIF p_calling_program ='APXVDMVD' THEN
184 OPEN CHECK_UNIQUE_TAXID_AP;
185 FETCH CHECK_UNIQUE_TAXID_AP INTO l_taxid;
186
187 IF (CHECK_UNIQUE_TAXID_AP%NOTFOUND) THEN
188 RETURN('TRUE');
189 ELSE
190 RETURN('FALSE');
191 END IF;
192 CLOSE CHECK_UNIQUE_TAXID_AP;
193
194 -- Checking for Tax ID used by a different Company
195 -- Tax payer id for Company is done by XLE
196 -- stubbed out because of ap_bank_branches
197
198 -- Checking for Duplicate Tax ID in RA_CUSTOMERS and RA_CUSTOMERS_INTERFACE Tables
199
200 ELSIF p_calling_program = 'RACUST' THEN
201 OPEN CHECK_UNIQUE_TAXID_AR1;
202 FETCH CHECK_UNIQUE_TAXID_AR1 INTO l_taxid;
203 IF (CHECK_UNIQUE_TAXID_AR1%NOTFOUND) THEN
204 RETURN('TRUE');
205 ELSE
206 RETURN('FALSE');
207 END IF;
208 CLOSE CHECK_UNIQUE_TAXID_AR1;
209 END IF;
210
211 END check_uniqueness;
212
213 FUNCTION check_unique_tax_reg_num (p_country_code IN VARCHAR2,
214 p_tax_reg_num IN VARCHAR2,
215 p_record_id IN NUMBER,
216 p_calling_program IN VARCHAR2,
217 p_orig_system_ref IN VARCHAR2,
218 p_entity_name IN VARCHAR2,
219 p_request_id IN NUMBER
220 ) RETURN VARCHAR2 IS
221 /*
222 CURSOR CHECK_UNIQUE_TAX_REG_NUM_AR IS -- Customers
223 SELECT AR.TAX_REFERENCE
224 FROM RA_CUSTOMERS AR
225 WHERE AR.TAX_REFERENCE = p_tax_reg_num
226 AND AR.CUSTOMER_ID <>nvl(p_record_id,0)
227 AND substrb(nvl(AR.GLOBAL_ATTRIBUTE_CATEGORY,'XX.XX'),4,2) = p_country_code;
228
229 CURSOR CHECK_UNIQUE_TAX_REG_NUM_AP IS -- Suppliers
230 SELECT AP.VAT_REGISTRATION_NUM FROM PO_VENDORS AP
231 WHERE AP.VAT_REGISTRATION_NUM = p_tax_reg_num
232 AND AP.VENDOR_ID<>nvl(p_record_id,0)
233 AND substrb(nvl(AP.GLOBAL_ATTRIBUTE_CATEGORY,'XX.XX'),4,2) = p_country_code;
234
235 CURSOR CHECK_UNIQUE_TAX_REG_NUM_AR1 IS -- RA_CUSTOMERS
236 SELECT AR.TAX_REFERENCE
237 FROM RA_CUSTOMERS AR
238 WHERE AR.TAX_REFERENCE = p_tax_reg_num
239 AND AR.CUSTOMER_ID <> nvl(p_record_id,0)
240 AND jg_zz_shared_pkg.get_country(fnd_profile.value('ORG_ID'), NULL) = p_country_code -- Modified for Countries w/o GDF
241 UNION
242
243 SELECT I.CUST_TAX_REFERENCE -- RA_CUSTOMERS_INTERFACE
244 FROM RA_CUSTOMERS_INTERFACE I
245 WHERE ( I.CUSTOMER_NAME <> p_entity_name
246 OR I.ORIG_SYSTEM_CUSTOMER_REF <> p_orig_system_ref)
247 AND I.CUST_TAX_REFERENCE = p_tax_reg_num
248 AND jg_zz_shared_pkg.get_country(fnd_profile.value('ORG_ID'), NULL) = p_country_code -- Modified for Countries w/o GDF
249 AND I.REQUEST_ID = p_request_id
250 AND NVL(I.VALIDATED_FLAG,'N') <> 'Y'
251 AND ROWNUM = 1;
252
253 l_tax_reg_num VARCHAR2(50);
254 */
255
256 BEGIN
257
258 RETURN('TRUE'); -- Bug 4474699: Stub out
259
260 /*
261 -- Checking for Tax Registration Number used by a different Customer
262
263 IF p_calling_program = 'ARXCUDCI' THEN
264 OPEN CHECK_UNIQUE_TAX_REG_NUM_AR;
265 FETCH CHECK_UNIQUE_TAX_REG_NUM_AR INTO l_tax_reg_num;
266 IF (CHECK_UNIQUE_TAX_REG_NUM_AR%NOTFOUND) THEN
267 RETURN('TRUE');
268 ELSE
269 RETURN('FALSE');
270 END IF;
271 CLOSE CHECK_UNIQUE_TAX_REG_NUM_AR;
272
273 -- Checking for Tax Registration Number used by a different Supplier
274
275 ELSIF p_calling_program ='APXVDMVD' THEN
276 OPEN CHECK_UNIQUE_TAX_REG_NUM_AP;
277 FETCH CHECK_UNIQUE_TAX_REG_NUM_AP INTO l_tax_reg_num;
278
279 IF (CHECK_UNIQUE_TAX_REG_NUM_AP%NOTFOUND) THEN
280 RETURN('TRUE');
281 ELSE
282 RETURN('FALSE');
283 END IF;
284 CLOSE CHECK_UNIQUE_TAX_REG_NUM_AP;
285
286 -- Checking for Duplicate Tax Registration Number in RA_CUSTOMERS
287 -- and RA_CUSTOMERS_INTERFACE Tables
288
289 ELSIF p_calling_program = 'RACUST' THEN
290 OPEN CHECK_UNIQUE_TAX_REG_NUM_AR1;
291 FETCH CHECK_UNIQUE_TAX_REG_NUM_AR1 INTO l_tax_reg_num;
292 IF (CHECK_UNIQUE_TAX_REG_NUM_AR1%NOTFOUND) THEN
293 RETURN('TRUE');
294 ELSE
295 RETURN('FALSE');
296 END IF;
297 CLOSE CHECK_UNIQUE_TAX_REG_NUM_AR1;
298
299 END IF;
300 */
301
302 END;
303
304 -- Check the cross validation
305 -- This procedure depending upon the current module (say for example if
306 -- current module is AP) checks in AR and HR to see if the TAX ID entered
307 -- for the Supplier is used by a Customer or a Company.
308 -- If it is used then the Customer name or the Company name should match
309 -- with the Supplier name and also the Tax ID Type should match.
310 -- Depending upon the different combinations different error codes are
311 -- returned to the calling program.
312 -- The messages codes that send the procedure are:
313 -- ap1 Tax ID is used by a different Bank
314 -- ap2 Tax ID is used by a different Customer
315 -- ap3 Tax ID is used by a different Company
316 -- ap4 Supplier exists as a Customer with different Tax ID or Tax ID Type
317 -- ap5 Supplier exists as a Company with different Tax ID or Tax ID Type
318 -- ap6 Supplier exists as a Bank with different Tax ID or Tax ID Type
319 -- k6 Tax ID is used by a different Supplier
320 -- k7 Tax ID is used by a different Company
321 -- k8 Customer exists as a Supplier with different Tax ID or Tax ID Type
322 -- k9 Customer exists as a Company with different Tax ID or Tax ID Type
323 -- l1 Tax ID is used by a different Bank
324 -- l2 Customer exists as a Bank with different Tax ID or Tax ID Type
325 -- hr1 Tax ID is used by a different Bank
326 -- hr2 Tax ID is used by a different Supplier
327 -- hr3 Tax ID is used by a different Customer
328 -- hr4 Company exists as a Supplier with different Tax ID or Tax ID Type
329 -- hr5 Company exists as a Customer with different Tax ID or Tax ID Type
330 -- hr6 Company exists as a Bank with different Tax ID or Tax ID Type
331 -- bk1 Tax ID is used by a different Company
332 -- bk2 Tax ID is used by a different Customer
333 -- bk3 Tax ID is used by a different Supplier
334 -- bk4 Bank exists as a Customer with different Tax ID or Tax ID Type
335 -- bk5 Bank exists as a Supplier with different Tax ID or Tax ID Type
336 -- bk6 Bank exists as a Company with different Tax ID or Tax ID Type
337
338 PROCEDURE check_cross_module(p_country_code IN VARCHAR2,
339 p_entity_name IN VARCHAR2,
340 p_taxpayer_id IN VARCHAR2,
341 p_origin IN VARCHAR2,
342 p_taxid_type IN VARCHAR2,
343 p_calling_program IN VARCHAR2,
344 p_return_ar OUT NOCOPY VARCHAR2,
345 p_return_ap OUT NOCOPY VARCHAR2,
346 p_return_hr OUT NOCOPY VARCHAR2,
347 p_return_bk OUT NOCOPY VARCHAR2
348 ) IS
349
350 CURSOR CHECK_CROSS_AP IS --Suppliers
351
352 -- TIN Project bug6063219
353 /*
354 SELECT AP.VENDOR_NAME, AP.NUM_1099,AP.GLOBAL_ATTRIBUTE9,
355 AP.GLOBAL_ATTRIBUTE10 FROM AP_SUPPLIERS AP
356 WHERE (AP.VENDOR_NAME=p_entity_name
357 OR AP.NUM_1099= p_taxpayer_id)
358 AND substrb(nvl(AP.GLOBAL_ATTRIBUTE_CATEGORY,'XX.XX'),4,2) = p_country_code;
359 */
360 SELECT AP.VENDOR_NAME,
361 decode(ap.vendor_type_lookup_code,'Contractor',
362 decode(ap.organization_type_lookup_code,'INDIVIDUAL',AP.INDIVIDUAL_1099,
363 'FOREIGN INDIVIDUAL',AP.INDIVIDUAL_1099,
364 'PARTNERSHIP',AP.INDIVIDUAL_1099,
365 'FOREIGN PARTNERSHIP',AP.INDIVIDUAL_1099,
366 AP.NUM_1099),
367 AP.NUM_1099) NUM_1099,
368 AP.GLOBAL_ATTRIBUTE9,
369 AP.GLOBAL_ATTRIBUTE10 FROM PO_VENDORS AP
370 WHERE (AP.VENDOR_NAME=p_entity_name
371 OR decode(ap.vendor_type_lookup_code,'Contractor',
372 decode(ap.organization_type_lookup_code,'INDIVIDUAL',AP.INDIVIDUAL_1099,
373 'FOREIGN INDIVIDUAL',AP.INDIVIDUAL_1099,
374 'PARTNERSHIP',AP.INDIVIDUAL_1099,
375 'FOREIGN PARTNERSHIP',AP.INDIVIDUAL_1099,
376 AP.NUM_1099),
377 AP.NUM_1099) = p_taxpayer_id)
378 AND substrb(nvl(AP.GLOBAL_ATTRIBUTE_CATEGORY,'XX.XX'),4,2) = p_country_code;
379
380 CURSOR CHECK_CROSS_AR IS --Customers
381 SELECT HZP.PARTY_NAME, HZP.JGZZ_FISCAL_CODE,
382 HZC.GLOBAL_ATTRIBUTE9, HZC.GLOBAL_ATTRIBUTE10
383 FROM HZ_PARTIES HZP, HZ_CUST_ACCOUNTS HZC
384 WHERE (HZP.PARTY_NAME=p_entity_name
385 OR HZP.JGZZ_FISCAL_CODE=p_taxpayer_id)
386 AND substrb(nvl(HZC.GLOBAL_ATTRIBUTE_CATEGORY,'XX.XX'),4,2)=p_country_code
387 AND HZP.PARTY_ID = HZC.PARTY_ID;
388
389 CURSOR CHECK_CROSS_HR IS --Companies
390 SELECT LEGAL_ENTITY_NAME, REGISTRATION_NUMBER
391 FROM XLE_REGISTRATIONS_V -- Coud use this view XLE_LE_FROM_REGISTRATIONS_V
392 WHERE (LEGAL_ENTITY_NAME = p_entity_name
393 OR REGISTRATION_NUMBER = p_taxpayer_id)
394 AND Legislative_Category = 'INCOME_TAX'
395 AND COUNTRY = p_country_code;
396
397 /*
398 Remove cursor for AP_BANK_BRANCHES because it is obsolete
399 */
400
401
402 l_taxid VARCHAR2(30);
403 l_origin VARCHAR2(150);
404 l_taxid_type VARCHAR2(150);
405 l_entity_name VARCHAR2(240); -- utf8 changes bug # 2598519
406
407 BEGIN
408
409 -- Initialize p_return_bk
410
411 p_return_bk:='NA';
412
413 -- Checking the cross module for Suppliers
414 IF p_calling_program='APXVDMVD' THEN
415
416 -- Checking cross module Suppliers/Customers
417
418 OPEN CHECK_CROSS_AR;
419 FETCH CHECK_CROSS_AR INTO l_entity_name, l_taxid, l_origin, l_taxid_type;
420
421 IF CHECK_CROSS_AR%NOTFOUND THEN
422 p_return_ar:='SUCCESS';
423
424 ELSIF (l_taxid IS NULL AND l_entity_name = p_entity_name) THEN
425 p_return_ar:='SUCCESS';
426
427 ELSIF (l_taxid IS NOT NULL) THEN
428
429 IF (p_country_code = 'AR' AND l_entity_name = p_entity_name
430 AND l_taxid = p_taxpayer_id AND l_taxid_type=p_taxid_type AND l_origin = p_origin )
431 OR (p_country_code in ('CL','CO') AND l_entity_name = p_entity_name
432 AND l_taxid=p_taxpayer_id AND l_taxid_type = p_taxid_type) THEN
433
434 p_return_ar:='SUCCESS';
435
436 -- Check if Tax ID is used by a different Customer
437
438 ELSIF (l_entity_name<>p_entity_name AND l_taxid=p_taxpayer_id) THEN
439
440 p_return_ar:='ap2';
441
442 -- Check if Supplier exists as Customer with different TAX ID or Tax ID
443 -- Type
444
445 ELSIF (p_country_code = 'AR' AND l_entity_name=p_entity_name
446 AND (l_taxid<>p_taxpayer_id or l_taxid_type <>p_taxid_type or l_origin <> p_origin))
447 OR (p_country_code in ('CL','CO') AND l_entity_name=p_entity_name
448 AND (l_taxid<>p_taxpayer_id or l_taxid_type <>p_taxid_type ))THEN
449
450 p_return_ar:='ap4';
451
452 END IF;
453
454 END IF;
455
456 CLOSE CHECK_CROSS_AR;
457
458 -- Checking cross module Suppliers/Companies
459
460 IF p_country_code='AR' THEN
461 l_taxid_type:='80';
462 l_origin:='DOMESTIC_ORIGIN';
463 ELSIF p_country_code ='CL' THEN
464 l_taxid_type:='DOMESTIC_ORIGIN';
465 ELSIF p_country_code='CO' THEN
466 l_taxid_type:='LEGAL_ENTITY';
467 END IF;
468
469 OPEN CHECK_CROSS_HR;
470 FETCH CHECK_CROSS_HR INTO l_entity_name, l_taxid;
471
472 IF CHECK_CROSS_HR%NOTFOUND THEN
473 p_return_hr:='SUCCESS';
474
475 ELSIF (l_taxid IS NULL AND l_entity_name=p_entity_name) THEN
476 p_return_ar:='SUCCESS';
477
478 ELSIF (l_taxid IS NOT NULL) THEN
479
480 IF (p_country_code = 'AR' AND l_entity_name=p_entity_name
481 AND l_taxid=p_taxpayer_id AND l_taxid_type=p_taxid_type AND l_origin = p_origin )
482 OR (p_country_code in ('CL','CO') AND l_entity_name=p_entity_name
483 AND l_taxid=p_taxpayer_id AND l_taxid_type=p_taxid_type) THEN
484
485 p_return_hr:='SUCCESS';
486
487 -- Check if Tax ID is used by a different Company
488 ELSIF (l_entity_name<>p_entity_name AND l_taxid=p_taxpayer_id) THEN
489
490 p_return_hr:='ap3';
491
492 -- Check if Supplier exists as Company with different Tax ID or Tax ID
493 -- Type
494
495 ELSIF (p_country_code = 'AR' AND l_entity_name=p_entity_name
496 AND (l_taxid<>p_taxpayer_id or l_taxid_type <>p_taxid_type or l_origin <> p_origin))
497 OR (p_country_code in ('CL','CO') AND l_entity_name=p_entity_name
498 AND (l_taxid<>p_taxpayer_id or l_taxid_type <>p_taxid_type ))THEN
499
500 p_return_hr:='ap5';
501
502 END IF;
503
504 END IF;
505
506 CLOSE CHECK_CROSS_HR;
507
508 -- Commented out because of AP_BANK_BRANCHES
509
510 /*
511 Removed the logic for AP_BANK_BRANCHES since table is obsolete
512 */
513
514 -- Since the current module is AP, there is no validation for AP.
515 -- So returning the OUT variable as 'NA'(Not Applicable).
516 p_return_ap:='NA';
517
518 --Checking the cross module for Customers
519
520 ELSIF (p_calling_program IN ('RACUST','ARXCUDCI')) THEN
521
522 -- Checking cross module Customers/Suppliers
523 OPEN CHECK_CROSS_AP;
524 FETCH CHECK_CROSS_AP INTO l_entity_name, l_taxid, l_origin, l_taxid_type;
525
526 IF CHECK_CROSS_AP%NOTFOUND THEN
527 p_return_ap:='SUCCESS';
528
529 ELSIF (l_taxid IS NULL AND l_entity_name = p_entity_name) THEN
530 p_return_ap:='SUCCESS';
531
532 ELSIF (l_taxid IS NOT NULL) THEN
533
534 IF (p_country_code = 'AR' AND l_entity_name=p_entity_name
535 AND l_taxid=p_taxpayer_id AND l_taxid_type=p_taxid_type AND l_origin = p_origin )
536 OR (p_country_code in ('CL','CO') AND l_entity_name=p_entity_name
537 AND l_taxid=p_taxpayer_id AND l_taxid_type=p_taxid_type) THEN
538
539 p_return_ap:='SUCCESS';
540
541 -- Check if Tax ID is used by a different Supplier
542
543 ELSIF (l_entity_name<>p_entity_name AND l_taxid=p_taxpayer_id) THEN
544
545 p_return_ap:='k6';
546
547 -- Check if Customer exists as Supplier with different Tax ID or Tax ID
548 -- Type
549
550 ELSIF (p_country_code = 'AR' AND l_entity_name=p_entity_name
551 AND (l_taxid<>p_taxpayer_id or l_taxid_type <>p_taxid_type or l_origin <> p_origin))
552 OR (p_country_code in ('CL','CO') AND l_entity_name=p_entity_name
553 AND (l_taxid<>p_taxpayer_id or l_taxid_type <>p_taxid_type ))THEN
554
555 p_return_ap:='k8';
556
557 END IF;
558
559 END IF;
560
561 CLOSE CHECK_CROSS_AP;
562
563 -- Checking cross module Customers/Companies
564
565 IF p_country_code='AR' THEN
566 l_taxid_type:='80';
567 l_origin :='DOMESTIC_ORIGIN';
568 ELSIF p_country_code ='CL' THEN
569 l_taxid_type:='DOMESTIC_ORIGIN';
570 ELSIF p_country_code='CO' THEN
571 l_taxid_type:='LEGAL_ENTITY';
572 END IF;
573
574 OPEN CHECK_CROSS_HR;
575 FETCH CHECK_CROSS_HR INTO l_entity_name, l_taxid;
576
577 IF CHECK_CROSS_HR%NOTFOUND THEN
578 p_return_hr:='SUCCESS';
579
580 ELSIF (l_taxid IS NULL AND l_entity_name=p_entity_name) THEN
581
582 p_return_hr:='SUCCESS';
583
584 ELSIF (l_taxid IS NOT NULL) THEN
585
586 IF (p_country_code = 'AR' AND l_entity_name=p_entity_name
587 AND l_taxid=p_taxpayer_id AND l_taxid_type=p_taxid_type AND l_origin = p_origin )
588 OR (p_country_code in ('CL','CO') AND l_entity_name=p_entity_name
589 AND l_taxid=p_taxpayer_id AND l_taxid_type=p_taxid_type) THEN
590
591 p_return_hr:='SUCCESS';
592
593 -- Check if Tax ID is used by a different Company
594
595 ELSIF (l_entity_name<>p_entity_name AND l_taxid=p_taxpayer_id) THEN
596
597 p_return_hr:='k7';
598
599 -- Check if Customer exists as Company with different Tax ID or Tax ID
600 -- Type
601
602 ELSIF (p_country_code = 'AR' AND l_entity_name=p_entity_name
603 AND (l_taxid<>p_taxpayer_id or l_taxid_type <>p_taxid_type or l_origin <> p_origin))
604 OR (p_country_code in ('CL','CO') AND l_entity_name=p_entity_name
605 AND (l_taxid<>p_taxpayer_id or l_taxid_type <>p_taxid_type ))THEN
606
607 p_return_hr:='k9';
608
609 END IF;
610
611 END IF;
612
613 CLOSE CHECK_CROSS_HR;
614
615 -- Remove code on ap_bank_branches
616 -- Since the current module is AR, there is no validation for AR.
617 -- So returning the OUT variable as 'NA'(Not Applicable).
618 p_return_ar:='NA';
619
620 --Checking the cross module for Companies
621
622 ELSIF (p_calling_program ='PERWSLOC') THEN
623
624 p_return_hr:='NA';
625
626 -- Checking the cross module for Banks
627 -- This is applicable for Colombia only
628
629 ELSIF p_calling_program='APXSUMBA' THEN
630
631 p_return_bk:='NA';
632
633 ELSE
634
635 -- Since the current module is not in Colombia, there is no validation for BK.
636 -- So returning the OUT variable as 'NA'(Not Applicable).
637 p_return_bk:='NA';
638 END IF;
639
640 END check_cross_module;
641
642
643 -- Taxpayer ID Validation
644
645 FUNCTION check_algorithm(p_taxpayer_id IN VARCHAR2,
646 p_country IN VARCHAR2,
647 p_global_attribute12 IN VARCHAR2
648 ) RETURN VARCHAR2 IS
649 l_var1 VARCHAR2(20);
650 l_val_digit VARCHAR2(2);
651 l_mod_value NUMBER(2);
652 BEGIN
653
654 -- Check the Taxpayer ID Validation digit for Chile
655
656 IF p_country='CL' THEN
657
658
659 l_var1:=LPAD(p_taxpayer_id,12,'0');
660 l_val_digit:=(11-MOD(((TO_NUMBER(SUBSTR(l_var1,12,1))) *2 +
661 (TO_NUMBER(SUBSTR(l_var1,11,1))) *3 +
662 (TO_NUMBER(SUBSTR(l_var1,10,1))) *4 +
663 (TO_NUMBER(SUBSTR(l_var1,9,1))) *5 +
664 (TO_NUMBER(SUBSTR(l_var1,8,1))) *6 +
665 (TO_NUMBER(SUBSTR(l_var1,7,1))) *7 +
666 (TO_NUMBER(SUBSTR(l_var1,6,1))) *2 +
667 (TO_NUMBER(SUBSTR(l_var1,5,1))) *3 +
668 (TO_NUMBER(SUBSTR(l_var1,4,1))) *4 +
669 (TO_NUMBER(SUBSTR(l_var1,3,1))) *5 +
670 (TO_NUMBER(SUBSTR(l_var1,2,1))) *6 +
671 (TO_NUMBER(SUBSTR(l_var1,1,1))) *7),11));
672 IF l_val_digit='10'THEN
673 l_val_digit:='K';
674 ELSIF l_val_digit = '11' THEN
675 l_val_digit:='0';
676 END IF;
677
678 IF l_val_digit<> p_global_attribute12 THEN
679 RETURN('FALSE');
680 ELSE
681 RETURN('TRUE');
682 END IF;
683
684 -- Check the Taxpayer ID Valdiation digit for Colombia
685
686 ELSIF p_country='CO' THEN
687
688 l_var1:=LPAD(p_taxpayer_id,15,'0');
689 l_mod_value:=(MOD(((TO_NUMBER(SUBSTR(l_var1,15,1))) *3 +
690 (TO_NUMBER(SUBSTR(l_var1,14,1))) *7 +
691 (TO_NUMBER(SUBSTR(l_var1,13,1))) *13 +
692 (TO_NUMBER(SUBSTR(l_var1,12,1))) *17 +
693 (TO_NUMBER(SUBSTR(l_var1,11,1))) *19 +
694 (TO_NUMBER(SUBSTR(l_var1,10,1))) *23 +
695 (TO_NUMBER(SUBSTR(l_var1,9,1))) *29 +
696 (TO_NUMBER(SUBSTR(l_var1,8,1))) *37 +
697 (TO_NUMBER(SUBSTR(l_var1,7,1))) *41 +
698 (TO_NUMBER(SUBSTR(l_var1,6,1))) *43 +
699 (TO_NUMBER(SUBSTR(l_var1,5,1))) *47 +
700 (TO_NUMBER(SUBSTR(l_var1,4,1))) *53 +
701 (TO_NUMBER(SUBSTR(l_var1,3,1))) *59 +
702 (TO_NUMBER(SUBSTR(l_var1,2,1))) *67 +
703 (TO_NUMBER(SUBSTR(l_var1,1,1))) *71),11));
704
705 IF (l_mod_value IN (1,0)) THEN
706 l_val_digit:=l_mod_value;
707 ELSE
708 l_val_digit:=11-l_mod_value;
709 END IF;
710
711 IF l_val_digit<> p_global_attribute12 THEN
712 RETURN('FALSE');
713 ELSE
714 RETURN('TRUE');
715 END IF;
716
717 -- Check the Taxpayer ID Validation digit for Argentina
718
719 ELSIF p_country='AR' THEN
720
721 l_val_digit:=(11-MOD(((TO_NUMBER(SUBSTR(p_taxpayer_id,10,1))) *2 +
722 (TO_NUMBER(SUBSTR(p_taxpayer_id,9,1))) *3 +
723 (TO_NUMBER(SUBSTR(p_taxpayer_id,8,1))) *4 +
724 (TO_NUMBER(SUBSTR(p_taxpayer_id,7,1))) *5 +
725 (TO_NUMBER(SUBSTR(p_taxpayer_id,6,1))) *6 +
726 (TO_NUMBER(SUBSTR(p_taxpayer_id,5,1))) *7 +
727 (TO_NUMBER(SUBSTR(p_taxpayer_id,4,1))) *2 +
728 (TO_NUMBER(SUBSTR(p_taxpayer_id,3,1))) *3 +
729 (TO_NUMBER(SUBSTR(p_taxpayer_id,2,1))) *4 +
730 (TO_NUMBER(SUBSTR(p_taxpayer_id,1,1))) *5),11));
731
732 IF l_val_digit ='10' THEN
733 l_val_digit:='9';
734 ELSIF l_val_digit='11' THEN
735 l_val_digit:='0';
736 END IF;
737
738 IF l_val_digit<> p_global_attribute12 THEN
739 RETURN('FALSE');
740 ELSE
741 RETURN('TRUE');
742 END IF;
743
744 END IF;
745
746 END check_algorithm;
747
748 END JG_TAXID_VAL_PKG;