DBA Data[Home] [Help]

PACKAGE BODY: APPS.JL_BR_INTEREST_HANDLING

Source


1 PACKAGE BODY JL_BR_INTEREST_HANDLING AS
2 /* $Header: jlbrsinb.pls 120.8 2011/10/21 21:18:41 abuissa ship $ */
3 
4 G_LEVEL_STATEMENT       CONSTANT NUMBER   := FND_LOG.LEVEL_STATEMENT;
5 G_CURRENT_RUNTIME_LEVEL CONSTANT NUMBER   := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6 G_LEVEL_PROCEDURE       CONSTANT NUMBER   := FND_LOG.LEVEL_PROCEDURE;
7 
8 
9 -- *****************************************************************************
10 -- This procedure calcualtes interest based on the interest parameteres
11 -- entered by the user. This has MOAC changes needed for R12. bug: 8621688
12 -- Created by: vspuli
13 -- Creation Date : 02-JUL-2009
14 -- ****************************************************************************
15 PROCEDURE JL_BR_INTEREST(X_Interest_Type           IN VARCHAR2,
16                          X_Interest_Rate_Amount    IN NUMBER,
17                          X_Period_Days             IN NUMBER,
18                          X_Interest_Formula 	   IN VARCHAR2,
19                          X_Grace_Days   		   IN NUMBER,
20                          X_Penalty_Type		   IN VARCHAR2,
21                          X_Penalty_Rate_Amount     IN NUMBER,
22                          X_Due_Date                IN DATE,
23                          X_Payment_Date            IN DATE,
24                          X_Invoice_Amount          IN NUMBER,
25                          X_JLBR_Calendar     	   IN VARCHAR2,
26                          X_JLBR_Local_Holiday      IN VARCHAR2,
27                          X_JLBR_Action_Non_Workday IN VARCHAR2,
28                          X_Interest_Calculated     IN OUT NOCOPY NUMBER,
29                          X_Days_Late               IN OUT NOCOPY NUMBER,
30                          X_Exit_Code               OUT NOCOPY NUMBER,
31 			 X_ORG_ID                  IN NUMBER) IS
32 
33    P_Date_Ok      	DATE;
34    P_Late_Days1         NUMBER(38);
35    P_Late_Days2         NUMBER(38);
36    P_Penalty_Calculated NUMBER; -- BUG Number 859348
37    P_Status             NUMBER(38);
38    P_WorkDay_Ok         VARCHAR2(11);
39    P_WorkDay_Date       DATE;
40    P_Return_Code        NUMBER(38);
41    C_interest_tolerance_amount number;
42    jg_app_short_name   VARCHAR2(10);
43    l_debug_info        VARCHAR2(2000);
44 BEGIN
45    P_Status := 0;
46    X_Exit_Code := 0;
47    P_Late_Days1 := 0;
48    P_Late_Days2 := 0;
49    P_Penalty_Calculated := 0;
50    X_Interest_Calculated := 0;
51    X_Days_Late := 0;
52 
53     l_debug_info := 'Entered Interest Package ';
54       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
55         fnd_file.put_line(FND_FILE.LOG,l_debug_info);
56       END IF;
57    P_Date_Ok := X_Due_Date + NVL(X_Grace_Days,0);
58 
59     l_debug_info := 'jlbr p_date_ok: '||to_char(P_Date_Ok, 'DD-MON-YYYY');
60       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
61         fnd_file.put_line(FND_FILE.LOG,l_debug_info);
62       END IF;
63 
64    --
65    -- Validate Tolerance from ap_system_parameters
66    --
67     SELECT nvl(interest_tolerance_amount,0)
68          Into C_interest_tolerance_amount
69     FROM   ap_system_parameters_all
70     WHERE  nvl(org_id,-99) = nvl(x_org_id,-99);
71 
72 
73 /***
74    SELECT nvl(interest_tolerance_amount,0)
75      INTO C_interest_tolerance_amount
76      FROM ap_system_parameters;
77 ***/
78 
79 
80     l_debug_info := 'jlbr tolerance_amount '||to_char(C_interest_tolerance_amount);
81       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
82         fnd_file.put_line(FND_FILE.LOG,l_debug_info);
83       END IF;
84 
85 
86    jl_br_workday_calendar.jl_br_check_date(to_char(P_Date_Ok, 'DD-MM-YYYY'),
87    		                               X_JLBR_Calendar,
88                                            X_JLBR_Local_Holiday,
89                                            X_JLBR_Action_Non_Workday,
90                                            P_WorkDay_Ok,
91                                            P_Status);
92 
93    P_WorkDay_Date := to_date(P_WorkDay_Ok, 'DD-MM-YYYY');
94 
95     l_debug_info := 'jlbr check_date status '||to_char(P_Status);
96       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
97         fnd_file.put_line(FND_FILE.LOG,l_debug_info);
98       END IF;
99 
100 
101 
102 
103     l_debug_info := 'jlbr check_date return '||P_WorkDay_Ok;
104       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
105         fnd_file.put_line(FND_FILE.LOG,l_debug_info);
106       END IF;
107 
108    IF P_Status = 0 THEN
109 
110       l_debug_info := 'jlbr interest calc ';
111       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
112         fnd_file.put_line(FND_FILE.LOG,l_debug_info);
113       END IF;
114 
115       X_Days_Late := trunc(X_Payment_Date - P_WorkDay_Date);
116       P_Late_Days2 := trunc(X_Payment_Date - X_Due_Date);
117 
118 
119       l_debug_info := 'jlbr interest calc:  X_Days_Late' || to_char(X_Days_Late);
120       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
121         fnd_file.put_line(FND_FILE.LOG,l_debug_info);
122       END IF;
123 
124       l_debug_info := 'jlbr interest calc:  P_Late_Days2' || to_char(P_Late_Days2);
125       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
126         fnd_file.put_line(FND_FILE.LOG,l_debug_info);
127       END IF;
128 
129       IF X_Days_Late > 0 THEN
130          IF X_Interest_Type IS NOT NULL THEN
131             IF X_Interest_Type = 'R' THEN
132                IF X_Interest_Formula = 'S' THEN
133        X_Interest_Calculated := round(((NVL(X_Interest_Rate_Amount,0)/NVL(X_Period_Days,0))/100)
134        * NVL(X_Invoice_Amount,0)
135        * NVL(P_Late_Days2,0),2);
136                ELSE
137        X_Interest_Calculated := round(NVL(X_Invoice_Amount,0) *
138        (POWER(( 1 + (NVL(X_Interest_Rate_Amount,0)/100)),
139        (NVL(P_Late_Days2,0)/NVL(X_Period_Days,0))) - 1),2);
140                END IF;
141             ELSE
142                X_Interest_Calculated := round(NVL(P_Late_Days2,0) * (NVL(X_Interest_Rate_Amount,0)/NVL(X_Period_Days,0)),2);
143             END IF;
144          END IF;
145 
146          IF X_Penalty_Type IS NOT NULL THEN
147             IF X_Penalty_Type = 'R' THEN
148                P_Penalty_Calculated := round(NVL(X_Penalty_Rate_Amount,0)/100 * NVL(X_Invoice_Amount,0),2);
149             ELSE
150                P_Penalty_Calculated := round(NVL(X_Penalty_Rate_Amount,0),2);
151             END IF;
152             X_Interest_Calculated := round(NVL(X_Interest_Calculated,0) + NVL(P_Penalty_Calculated,0),2);
153          END IF;
154          -- Verify Tolerance vs Interest_Calculated
155          -- Bug# 1480683
156          -- Bug 2020279 check tolerance only for AP
157          --
158          --fnd_profile.get('JGZZ_APPL_SHORT_NAME', jg_app_short_name);
159          jg_app_short_name := JG_ZZ_SHARED_PKG.get_application;
160          --
161          IF jg_app_short_name = 'SQLAP' THEN
162            IF C_interest_tolerance_amount > X_Interest_Calculated THEN
163               X_Interest_Calculated := 0;
164            END IF;
165          END IF;
166       END IF;
167    ELSE
168       X_Exit_Code := 1;
169    END IF;
170 
171 
172      l_debug_info := 'jlbr interest calc:  return' || to_char(X_Interest_Calculated);
173       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
174         fnd_file.put_line(FND_FILE.LOG,l_debug_info);
175       END IF;
176 
177      l_debug_info := 'jlbr interest calc:  Exit Code' || to_char(X_Exit_Code);
178       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
179         fnd_file.put_line(FND_FILE.LOG,l_debug_info);
180       END IF;
181 
182 
183 END JL_BR_INTEREST;
184 
185 
186 
187 
188 
189 PROCEDURE JL_BR_INTEREST(X_Interest_Type           IN VARCHAR2,
190                          X_Interest_Rate_Amount    IN NUMBER,
191                          X_Period_Days             IN NUMBER,
192                          X_Interest_Formula 	   IN VARCHAR2,
193                          X_Grace_Days   		   IN NUMBER,
194                          X_Penalty_Type		   IN VARCHAR2,
195                          X_Penalty_Rate_Amount     IN NUMBER,
196                          X_Due_Date                IN DATE,
197                          X_Payment_Date            IN DATE,
198                          X_Invoice_Amount          IN NUMBER,
199                          X_JLBR_Calendar     	   IN VARCHAR2,
200                          X_JLBR_Local_Holiday      IN VARCHAR2,
201                          X_JLBR_Action_Non_Workday IN VARCHAR2,
202                          X_Interest_Calculated     IN OUT NOCOPY NUMBER,
203                          X_Days_Late               IN OUT NOCOPY NUMBER,
204                          X_Exit_Code               OUT NOCOPY NUMBER) IS
205 
206    P_Date_Ok      	DATE;
207    P_Late_Days1         NUMBER(38);
208    P_Late_Days2         NUMBER(38);
209    P_Penalty_Calculated NUMBER; -- BUG Number 859348
210    P_Status             NUMBER(38);
211    P_WorkDay_Ok         VARCHAR2(11);
212    P_WorkDay_Date       DATE;
213    P_Return_Code        NUMBER(38);
214    C_interest_tolerance_amount number;
215    jg_app_short_name VARCHAR2(10);
216 
217 BEGIN
218    P_Status := 0;
219    X_Exit_Code := 0;
220    P_Late_Days1 := 0;
221    P_Late_Days2 := 0;
222    P_Penalty_Calculated := 0;
223    X_Interest_Calculated := 0;
224    X_Days_Late := 0;
225 
226    P_Date_Ok := X_Due_Date + NVL(X_Grace_Days,0);
227    --
228    -- Validate Tolerance from ap_system_parameters
229    --
230    SELECT nvl(interest_tolerance_amount,0)
231      INTO C_interest_tolerance_amount
232      FROM ap_system_parameters;
233 
234 
235    jl_br_workday_calendar.jl_br_check_date(to_char(P_Date_Ok, 'DD-MM-YYYY'),
236    		                               X_JLBR_Calendar,
237                                            X_JLBR_Local_Holiday,
238                                            X_JLBR_Action_Non_Workday,
239                                            P_WorkDay_Ok,
240                                            P_Status);
241 
242    P_WorkDay_Date := to_date(P_WorkDay_Ok, 'DD-MM-YYYY');
243 
244    IF P_Status = 0 THEN
245       X_Days_Late := trunc(X_Payment_Date - P_WorkDay_Date);
246       P_Late_Days2 := trunc(X_Payment_Date - X_Due_Date);
247 
248       IF X_Days_Late > 0 THEN
249          IF X_Interest_Type IS NOT NULL THEN
250             IF X_Interest_Type = 'R' THEN
251                IF X_Interest_Formula = 'S' THEN
252        X_Interest_Calculated := round(((NVL(X_Interest_Rate_Amount,0)/NVL(X_Period_Days,0))/100)
253        * NVL(X_Invoice_Amount,0)
254        * NVL(P_Late_Days2,0),2);
255                ELSE
256        X_Interest_Calculated := round(NVL(X_Invoice_Amount,0) *
257        (POWER(( 1 + (NVL(X_Interest_Rate_Amount,0)/100)),
258        (NVL(P_Late_Days2,0)/NVL(X_Period_Days,0))) - 1),2);
259                END IF;
260             ELSE
261                X_Interest_Calculated := round(NVL(P_Late_Days2,0) * (NVL(X_Interest_Rate_Amount,0)/NVL(X_Period_Days,0)),2);
262             END IF;
263          END IF;
264 
265          IF X_Penalty_Type IS NOT NULL THEN
266             IF X_Penalty_Type = 'R' THEN
267                P_Penalty_Calculated := round(NVL(X_Penalty_Rate_Amount,0)/100 * NVL(X_Invoice_Amount,0),2);
268             ELSE
269                P_Penalty_Calculated := round(NVL(X_Penalty_Rate_Amount,0),2);
270             END IF;
271             X_Interest_Calculated := round(NVL(X_Interest_Calculated,0) + NVL(P_Penalty_Calculated,0),2);
272          END IF;
273          -- Verify Tolerance vs Interest_Calculated
274          -- Bug# 1480683
275          -- Bug 2020279 check tolerance only for AP
276          --
277          --fnd_profile.get('JGZZ_APPL_SHORT_NAME', jg_app_short_name);
278          jg_app_short_name := JG_ZZ_SHARED_PKG.get_application;
279          --
280          IF jg_app_short_name = 'SQLAP' THEN
281            IF C_interest_tolerance_amount > X_Interest_Calculated THEN
282               X_Interest_Calculated := 0;
283            END IF;
284          END IF;
285       END IF;
286    ELSE
287       X_Exit_Code := 1;
288    END IF;
289 END JL_BR_INTEREST;
290 
291 
292 -- *****************************************************************************
293 -- This procedure updates the interest inovice description according to
294 -- brazilian rates.
295 -- Created by: Dario Betancourt.
296 -- Creation Date : 29-Mar-1999
297 -- ****************************************************************************
298 PROCEDURE JL_BR_CHANGE_INT_DES(P_invoice_related number,
299                                P_invoice_original number,
300                                P_payment_num_org number) IS
301   l_interest_type       VARCHAR2(15);
302   --l_currency_symbol     VARCHAR2(4) := 'R$';
303   --commented above for bug 2870854
304   --increased length to 12.
305   l_currency_symbol     VARCHAR2(12) := 'R$';
306   l_rate_amount         NUMBER;
307   l_due_date            DATE;
308   l_check_date          DATE;
309   l_invoice_days_late   NUMBER;
310   l_nls_interest        VARCHAR2(25);
311   l_nls_days            VARCHAR2(25);
312   l_nls_percent         VARCHAR2(25);
313   l_invoice_description VARCHAR2(240);
314 BEGIN
315    -- ********************************************************
316    -- Get the Translatable Words for filling the description
317    -- ********************************************************
318    SELECT l1.displayed_field,
319           l2.displayed_field,
320           l3.displayed_field
321    INTO l_nls_interest,
322         l_nls_days,
323         l_nls_percent
324    FROM ap_lookup_codes l1,
325         ap_lookup_codes l2,
326         ap_lookup_codes l3
327    WHERE l1.lookup_type = 'NLS TRANSLATION'
328      AND l1.lookup_code = 'INTEREST'
329      AND l2.lookup_type = 'NLS TRANSLATION'
330      AND l2.lookup_code = 'DAYS'
331      AND l3.lookup_type = 'NLS TRANSLATION'
332      AND l3.lookup_code = 'PERCENT';
333 
334    -- ***********************************************************
335    -- Get the interest rate from(GA2) and due_date
336    -- from ap_payment_schedules
337    -- ***********************************************************
338    SELECT substr(global_attribute1, 1, 15),
339           nvl(to_number(substr(global_attribute2, 1, 15)), 0),
340           due_date
341    INTO l_interest_type, l_rate_amount, l_due_date
342    FROM ap_payment_schedules
343    WHERE invoice_id  = P_invoice_original
344      AND payment_num = P_payment_num_org;
345 
346    -- *********************************************************
347    -- Get the payment_date from ap_invoices (interest invoice)
348    -- *********************************************************
349    SELECT invoice_date
350    INTO l_check_date
351    FROM ap_invoices
352    WHERE invoice_id = P_invoice_related;
353 
354 
355    -- *********************************************************
356    -- Calculate the days late.
357    -- *********************************************************
358    l_invoice_days_late := LEAST(TRUNC(l_check_date), ADD_MONTHS(TRUNC(l_due_date), 12))
359                          - TRUNC(l_due_date);
360 
361    -- **********************************************************
362    -- Concat the Description with the appropriate interest rate
363    -- BUG Number 856304
364    -- **********************************************************
365    IF l_interest_type = 'R' THEN
366      l_invoice_description := l_nls_interest || ' ' || to_char(l_invoice_days_late)
367                               || ' ' || l_nls_days || to_char(l_rate_amount) || l_nls_percent;
368    ELSIF l_interest_type = 'A' THEN
369      -- *********************************************************
370      -- Get the currency symbol
371      -- *********************************************************
372      SELECT fc.symbol
373      INTO l_currency_symbol
374      FROM ap_invoices ai, fnd_currencies_vl fc
375      WHERE ai.invoice_currency_code = fc.currency_code
376        AND ai.invoice_id = P_invoice_original;
377 
378      l_invoice_description := l_nls_interest || ' ' || to_char(l_invoice_days_late)
379                               || ' ' || l_nls_days || l_currency_symbol || to_char(l_rate_amount);
380    ELSE
381      l_invoice_description := 'Invalid Interest Type: ' || l_interest_type;
382    END IF;
383 
384    UPDATE ap_invoices
385    SET description = l_invoice_description
386    WHERE invoice_id = P_invoice_related;
387 
388 EXCEPTION
389      WHEN others THEN NULL;
390 END JL_BR_CHANGE_INT_DES;
391 
392 PROCEDURE JL_BR_INTEREST(X_Interest_Type           IN VARCHAR2,
393                          X_Interest_Rate_Amount    IN NUMBER,
394                          X_Period_Days             IN NUMBER,
395                          X_Interest_Formula 	   IN VARCHAR2,
396                          X_Grace_Days   		   IN NUMBER,
397                          X_Penalty_Type		   IN VARCHAR2,
398                          X_Penalty_Rate_Amount     IN NUMBER,
399                          X_Due_Date                IN DATE,
400                          X_Payment_Date            IN DATE,
401                          X_Invoice_Amount          IN NUMBER,
402                          X_JLBR_Calendar     	   IN VARCHAR2,
403                          X_JLBR_Local_Holiday      IN VARCHAR2,
404                          X_JLBR_Action_Non_Workday IN VARCHAR2,
405                          X_Interest_Calculated     IN OUT NOCOPY NUMBER,
406                          X_Days_Late               IN OUT NOCOPY NUMBER,
407                          X_Exit_Code               OUT NOCOPY NUMBER,
408                          X_JLBR_State              IN VARCHAR2) IS -- Bug # 2319552
409 
410    P_Date_Ok      	DATE;
411    P_Late_Days1         NUMBER(38);
412    P_Late_Days2         NUMBER(38);
413    P_Penalty_Calculated NUMBER; -- BUG Number 859348
414    P_Status             NUMBER(38);
415    P_WorkDay_Ok         VARCHAR2(11);
416    P_WorkDay_Date       DATE;
417    P_Return_Code        NUMBER(38);
418    C_interest_tolerance_amount number;
419    jg_app_short_name VARCHAR2(10);
420 
421 BEGIN
422    P_Status := 0;
423    X_Exit_Code := 0;
424    P_Late_Days1 := 0;
425    P_Late_Days2 := 0;
426    P_Penalty_Calculated := 0;
427    X_Interest_Calculated := 0;
428    X_Days_Late := 0;
429 
430    P_Date_Ok := X_Due_Date + NVL(X_Grace_Days,0);
431    --
432    -- Validate Tolerance from ap_system_parameters
433    --
434    SELECT nvl(interest_tolerance_amount,0)
435      INTO C_interest_tolerance_amount
436      FROM ap_system_parameters;
437 
438 
439    jl_br_workday_calendar.jl_br_check_date(to_char(P_Date_Ok, 'DD-MM-YYYY'),
440    		                               X_JLBR_Calendar,
441                                            X_JLBR_Local_Holiday,
442                                            X_JLBR_Action_Non_Workday,
443                                            P_WorkDay_Ok,
444                                            P_Status,
445                                            X_JLBR_State); -- Bug # 2319552
446 
447    P_WorkDay_Date := to_date(P_WorkDay_Ok, 'DD-MM-YYYY');
448 
449    IF P_Status = 0 THEN
450       X_Days_Late := trunc(X_Payment_Date - P_WorkDay_Date);
451       P_Late_Days2 := trunc(X_Payment_Date - X_Due_Date);
452 
453       IF X_Days_Late > 0 THEN
454          IF X_Interest_Type IS NOT NULL THEN
455             IF X_Interest_Type = 'R' THEN
456                IF X_Interest_Formula = 'S' THEN
457        X_Interest_Calculated := round(((NVL(X_Interest_Rate_Amount,0)/NVL(X_Period_Days,0))/100)
458        * NVL(X_Invoice_Amount,0)
459        * NVL(P_Late_Days2,0),2);
460                ELSE
461        X_Interest_Calculated := round(NVL(X_Invoice_Amount,0) *
462        (POWER(( 1 + (NVL(X_Interest_Rate_Amount,0)/100)),
463        (NVL(P_Late_Days2,0)/NVL(X_Period_Days,0))) - 1),2);
464                END IF;
465             ELSE
466                X_Interest_Calculated := round(NVL(P_Late_Days2,0) * (NVL(X_Interest_Rate_Amount,0)/NVL(X_Period_Days,0)),2);
467             END IF;
468          END IF;
469 
470          IF X_Penalty_Type IS NOT NULL THEN
471             IF X_Penalty_Type = 'R' THEN
472                P_Penalty_Calculated := round(NVL(X_Penalty_Rate_Amount,0)/100 * NVL(X_Invoice_Amount,0),2);
473             ELSE
474                P_Penalty_Calculated := round(NVL(X_Penalty_Rate_Amount,0),2);
475             END IF;
476             X_Interest_Calculated := round(NVL(X_Interest_Calculated,0) + NVL(P_Penalty_Calculated,0),2);
477          END IF;
478          -- Verify Tolerance vs Interest_Calculated
479          -- Bug# 1480683
480          -- Bug 2020279 check tolerance only for AP
481          --
482          --fnd_profile.get('JGZZ_APPL_SHORT_NAME', jg_app_short_name);
483          jg_app_short_name := JG_ZZ_SHARED_PKG.get_application;
484          --
485          IF jg_app_short_name = 'SQLAP' THEN
486            IF C_interest_tolerance_amount > X_Interest_Calculated THEN
487               X_Interest_Calculated := 0;
488            END IF;
489          END IF;
490       END IF;
491    ELSE
492       X_Exit_Code := 1;
493    END IF;
494 END JL_BR_INTEREST;
495 
496 --bug 13244476 - MOAC changes
497 PROCEDURE JL_BR_INTEREST(X_Interest_Type           IN VARCHAR2,
498                          X_Interest_Rate_Amount    IN NUMBER,
499                          X_Period_Days             IN NUMBER,
500                          X_Interest_Formula 	   IN VARCHAR2,
501                          X_Grace_Days   		   IN NUMBER,
502                          X_Penalty_Type		   IN VARCHAR2,
503                          X_Penalty_Rate_Amount     IN NUMBER,
504                          X_Due_Date                IN DATE,
505                          X_Payment_Date            IN DATE,
506                          X_Invoice_Amount          IN NUMBER,
507                          X_JLBR_Calendar     	   IN VARCHAR2,
508                          X_JLBR_Local_Holiday      IN VARCHAR2,
509                          X_JLBR_Action_Non_Workday IN VARCHAR2,
510                          X_Interest_Calculated     IN OUT NOCOPY NUMBER,
511                          X_Days_Late               IN OUT NOCOPY NUMBER,
512                          X_Exit_Code               OUT NOCOPY NUMBER,
513                          X_JLBR_State              IN VARCHAR2, -- Bug # 2319552
514                          X_ORG_ID                  IN NUMBER)  IS -- Bug # 13244476
515 
516    P_Date_Ok      	DATE;
517    P_Late_Days1         NUMBER(38);
518    P_Late_Days2         NUMBER(38);
519    P_Penalty_Calculated NUMBER; -- BUG Number 859348
520    P_Status             NUMBER(38);
521    P_WorkDay_Ok         VARCHAR2(11);
522    P_WorkDay_Date       DATE;
523    P_Return_Code        NUMBER(38);
524    C_interest_tolerance_amount number;
525    jg_app_short_name VARCHAR2(10);
526 
527 BEGIN
528    P_Status := 0;
529    X_Exit_Code := 0;
530    P_Late_Days1 := 0;
531    P_Late_Days2 := 0;
532    P_Penalty_Calculated := 0;
533    X_Interest_Calculated := 0;
534    X_Days_Late := 0;
535 
536    P_Date_Ok := X_Due_Date + NVL(X_Grace_Days,0);
537    --
538    -- Validate Tolerance from ap_system_parameters
539    --
540    SELECT nvl(interest_tolerance_amount,0)
541      INTO C_interest_tolerance_amount
542      FROM ap_system_parameters_all --bug 13244476
543     WHERE nvl(org_id,-99) = nvl(x_org_id,-99); --bug 13244476
544 
545 
546    jl_br_workday_calendar.jl_br_check_date(to_char(P_Date_Ok, 'DD-MM-YYYY'),
547    		                               X_JLBR_Calendar,
548                                            X_JLBR_Local_Holiday,
549                                            X_JLBR_Action_Non_Workday,
550                                            P_WorkDay_Ok,
551                                            P_Status,
552                                            X_JLBR_State); -- Bug # 2319552
553 
554    P_WorkDay_Date := to_date(P_WorkDay_Ok, 'DD-MM-YYYY');
555 
556    IF P_Status = 0 THEN
557       X_Days_Late := trunc(X_Payment_Date - P_WorkDay_Date);
558       P_Late_Days2 := trunc(X_Payment_Date - X_Due_Date);
559 
560       IF X_Days_Late > 0 THEN
561          IF X_Interest_Type IS NOT NULL THEN
562             IF X_Interest_Type = 'R' THEN
563                IF X_Interest_Formula = 'S' THEN
564        X_Interest_Calculated := round(((NVL(X_Interest_Rate_Amount,0)/NVL(X_Period_Days,0))/100)
565        * NVL(X_Invoice_Amount,0)
566        * NVL(P_Late_Days2,0),2);
567                ELSE
568        X_Interest_Calculated := round(NVL(X_Invoice_Amount,0) *
569        (POWER(( 1 + (NVL(X_Interest_Rate_Amount,0)/100)),
570        (NVL(P_Late_Days2,0)/NVL(X_Period_Days,0))) - 1),2);
571                END IF;
572             ELSE
573                X_Interest_Calculated := round(NVL(P_Late_Days2,0) * (NVL(X_Interest_Rate_Amount,0)/NVL(X_Period_Days,0)),2);
574             END IF;
575          END IF;
576 
577          IF X_Penalty_Type IS NOT NULL THEN
578             IF X_Penalty_Type = 'R' THEN
579                P_Penalty_Calculated := round(NVL(X_Penalty_Rate_Amount,0)/100 * NVL(X_Invoice_Amount,0),2);
580             ELSE
581                P_Penalty_Calculated := round(NVL(X_Penalty_Rate_Amount,0),2);
582             END IF;
583             X_Interest_Calculated := round(NVL(X_Interest_Calculated,0) + NVL(P_Penalty_Calculated,0),2);
584          END IF;
585          -- Verify Tolerance vs Interest_Calculated
586          -- Bug# 1480683
587          -- Bug 2020279 check tolerance only for AP
588          --
589          --fnd_profile.get('JGZZ_APPL_SHORT_NAME', jg_app_short_name);
590          jg_app_short_name := JG_ZZ_SHARED_PKG.get_application;
591          --
592          IF jg_app_short_name = 'SQLAP' THEN
593            IF C_interest_tolerance_amount > X_Interest_Calculated THEN
594               X_Interest_Calculated := 0;
595            END IF;
596          END IF;
597       END IF;
598    ELSE
599       X_Exit_Code := 1;
600    END IF;
601 END JL_BR_INTEREST;
602 
603 END JL_BR_INTEREST_HANDLING;