1 PACKAGE LNS_FINANCIALS AS
2 /* $Header: LNS_FINANCIAL_S.pls 120.11.12010000.6 2009/01/12 20:19:55 scherkas ship $ */
3
4 /*========================================================================+
5 | Declare PUBLIC Data Types and Variables
6 +========================================================================*/
7
8 /*========================================================================+
9 | Interest Rate Rec is for capturing interest rate details
10 | Rate Schedule Table is to help handle multi-rate loans
11 +========================================================================*/
12 TYPE INTEREST_RATE_REC IS RECORD(RATE_ID NUMBER
13 ,BEGIN_DATE DATE
14 ,END_DATE DATE
15 ,ANNUAL_RATE NUMBER
16 ,SPREAD NUMBER
17 ,BEGIN_INSTALLMENT_NUMBER NUMBER
18 ,END_INSTALLMENT_NUMBER NUMBER
19 ,INTEREST_ONLY_FLAG VARCHAR2(1)
20 ,PHASE VARCHAR2(30)
21 ,FLOATING_FLAG VARCHAR2(1));
22
23 TYPE RATE_SCHEDULE_TBL IS TABLE OF INTEREST_RATE_REC INDEX BY BINARY_INTEGER;
24
25 /*========================================================================+
26 | This is the main record type for amortization
27 | The runAmortization procedures will return this information to UI
28 +========================================================================*/
29 TYPE AMORTIZATION_REC IS RECORD(INSTALLMENT_NUMBER NUMBER
30 ,DUE_DATE DATE
31 ,PERIOD_START_DATE DATE
32 ,PERIOD_END_DATE DATE
33 ,PRINCIPAL_AMOUNT NUMBER
34 ,INTEREST_AMOUNT NUMBER
35 ,NORMAL_INT_AMOUNT NUMBER
36 ,ADD_PRIN_INT_AMOUNT NUMBER
37 ,ADD_INT_INT_AMOUNT NUMBER
38 ,PENAL_INT_AMOUNT NUMBER
39 ,FEE_AMOUNT NUMBER
40 ,OTHER_AMOUNT NUMBER
41 ,BEGIN_BALANCE NUMBER
42 ,END_BALANCE NUMBER
43 ,TOTAL NUMBER
44 ,INTEREST_CUMULATIVE NUMBER
45 ,PRINCIPAL_CUMULATIVE NUMBER
46 ,FEES_CUMULATIVE NUMBER
47 ,OTHER_CUMULATIVE NUMBER
48 ,RATE_ID NUMBER
49 ,RATE_UNADJ NUMBER
50 ,RATE_CHANGE_FREQ VARCHAR2(30)
51 ,SOURCE VARCHAR2(30)
52 ,GRAND_TOTAL_FLAG VARCHAR2(1)
53 ,UNPAID_PRIN NUMBER
54 ,UNPAID_INT NUMBER
55 ,INTEREST_RATE NUMBER);
56
57 TYPE AMORTIZATION_TBL IS TABLE OF AMORTIZATION_REC INDEX BY BINARY_INTEGER;
58
59 /*========================================================================+
60 | This record type will contain all the pertinent properties for a loan
61 | includes reamortization , currency, arrears, amounts
62 |+========================================================================*/
63 TYPE LOAN_DETAILS_REC IS RECORD(LOAN_ID NUMBER -- loan id
64 ,LOAN_TERM NUMBER -- term of the loan
65 ,LOAN_TERM_PERIOD VARCHAR2(30) -- term period of the loan
66 ,AMORTIZED_TERM NUMBER -- amotrtized term of the loan
67 ,AMORTIZED_TERM_PERIOD VARCHAR2(30) -- amotrtized term period of the loan
68 ,AMORTIZATION_FREQUENCY VARCHAR2(30)
69 ,PAYMENT_FREQUENCY VARCHAR2(30)
70 ,FIRST_PAYMENT_DATE DATE
71 ,LOAN_START_DATE DATE
72 ,REQUESTED_AMOUNT NUMBER
73 ,FUNDED_AMOUNT NUMBER
74 ,REMAINING_BALANCE NUMBER
75 ,PRINCIPAL_PAID_TO_DATE NUMBER
76 ,INTEREST_PAID_TO_DATE NUMBER
77 ,FEES_PAID_TO_DATE NUMBER
78 ,UNPAID_PRINCIPAL NUMBER
79 ,UNPAID_INTEREST NUMBER
80 ,UNBILLED_PRINCIPAL NUMBER
81 ,MATURITY_DATE DATE
82 ,NUMBER_INSTALLMENTS NUMBER -- based off of TERM + TERM_PERIOD
83 ,NUM_AMORTIZATION_INTERVALS NUMBER -- based off of AMORTIZATION_TERM + AMORTIZATION_TERM_PERIOD
84 ,REAMORTIZE_OVERPAY VARCHAR2(1)
85 ,REAMORTIZE_UNDERPAY VARCHAR2(1)
86 ,REAMORTIZE_WITH_INTEREST VARCHAR2(1) -- for future use
87 ,REAMORTIZE_AMOUNT NUMBER
88 ,REAMORTIZE_FROM_INSTALLMENT NUMBER
89 ,REAMORTIZE_TO_INSTALLMENT NUMBER -- for future use
90 ,LAST_INSTALLMENT_BILLED NUMBER
91 ,DAY_COUNT_METHOD VARCHAR2(30) -- day count methodology
92 ,PAY_IN_ARREARS VARCHAR2(1) -- Y/N for pay in arrears
93 ,PAY_IN_ARREARS_BOOLEAN BOOLEAN -- boolean for pay in arrears
94 ,CUSTOM_SCHEDULE VARCHAR2(1) -- Y/N for custom payment schedule
95 ,LOAN_STATUS VARCHAR2(30) -- loan status
96 ,LAST_INTEREST_ACCRUAL DATE -- last interest accrual date
97 ,LAST_ACTIVITY VARCHAR2(30) -- for future use
98 ,LAST_ACTIVITY_DATE DATE -- last activity date on the loan
99 ,LOAN_CURRENCY VARCHAR2(15) -- loan currency
100 ,CURRENCY_PRECISION NUMBER -- currency precision
101 ,OPEN_TERM NUMBER -- open term
102 ,OPEN_TERM_PERIOD VARCHAR2(30) -- open term period
103 ,OPEN_PAYMENT_FREQUENCY VARCHAR2(30) -- payment freq during open phase
104 ,OPEN_FIRST_PAYMENT_DATE DATE -- open phase first pay date
105 ,OPEN_START_DATE DATE -- begin date of open phase
106 ,OPEN_MATURITY_DATE DATE -- maturity date of open phase
107 ,LOAN_PHASE VARCHAR2(30) -- OPEN or TERM for phase of the loan
108 ,BALLOON_PAYMENT_TYPE VARCHAR2(30) -- TERM or AMOUNT
109 ,BALLOON_PAYMENT_AMOUNT NUMBER -- if balloon type = AMOUNT then the actual amount
110 ,AMORTIZED_AMOUNT NUMBER -- amortized amount
111 ,RATE_TYPE VARCHAR2(30) -- fixed or variable
112 ,OPEN_RATE_CHG_FREQ VARCHAR2(30) -- how often rate changes during open phase
113 ,OPEN_INDEX_RATE_ID NUMBER -- index_rate_id
114 ,OPEN_INDEX_DATE DATE -- open index date
115 ,OPEN_CEILING_RATE NUMBER -- open ceiling rate
116 ,OPEN_FLOOR_RATE NUMBER -- open floor rate
117 ,OPEN_FIRST_PERCENT_INCREASE NUMBER -- open first percentage increase
118 ,OPEN_ADJ_PERCENT_INCREASE NUMBER -- open percentage increase btwn adjustments
119 ,OPEN_LIFE_PERCENT_INCREASE NUMBER -- open lifetime max adjustment for interest
120 ,TERM_RATE_CHG_FREQ VARCHAR2(30) -- how often rate changes during term phase
121 ,TERM_INDEX_RATE_ID NUMBER -- index_rate_id
122 ,TERM_INDEX_DATE DATE -- term index date
123 ,TERM_CEILING_RATE NUMBER -- term ceiling rate
124 ,TERM_FLOOR_RATE NUMBER -- term floor rate
125 ,TERM_FIRST_PERCENT_INCREASE NUMBER -- term first percentage increase
126 ,TERM_ADJ_PERCENT_INCREASE NUMBER -- term percentage increase btwn adjustments
127 ,TERM_LIFE_PERCENT_INCREASE NUMBER -- term lifetime max adjustment for interest
128 ,OPEN_TO_TERM_FLAG VARCHAR2(1)
129 ,OPEN_TO_TERM_EVENT VARCHAR2(30)
130 ,MULTIPLE_FUNDING_FLAG VARCHAR2(1)
131 ,SECONDARY_STATUS VARCHAR2(30)
132 ,OPEN_PROJECTED_INTEREST_RATE NUMBER -- open projected interest rate
133 ,TERM_PROJECTED_INTEREST_RATE NUMBER -- term projected interest rate
134 ,INITIAL_INTEREST_RATE NUMBER --
135 ,LAST_INTEREST_RATE NUMBER --
136 ,FIRST_RATE_CHANGE_DATE DATE
137 ,NEXT_RATE_CHANGE_DATE DATE
138 ,CALCULATION_METHOD VARCHAR2(30) -- interest calc method: simple, compound
139 ,INTEREST_COMPOUNDING_FREQ VARCHAR2(30)
140 ,PAYMENT_CALC_METHOD VARCHAR2(30) -- payment calc method: equal payment, equal principal
141 ,ORIG_PAY_CALC_METHOD VARCHAR2(30)
142 ,PRIN_FIRST_PAY_DATE DATE -- principal first payment date; used with PAYMENT_CALC_METHOD=SEPERATE_PRIN_INT
143 ,PRIN_PAYMENT_FREQUENCY VARCHAR2(30) -- principal payment freq; used with PAYMENT_CALC_METHOD=SEPERATE_PRIN_INT
144 ,PRIN_NUMBER_INSTALLMENTS NUMBER -- principal number of installments; used with PAYMENT_CALC_METHOD=SEPERATE_PRIN_INT
145 ,PRIN_AMORT_INSTALLMENTS NUMBER -- principal number of amortized installments; used with PAYMENT_CALC_METHOD=SEPERATE_PRIN_INT
146 ,PRIN_PAY_IN_ARREARS VARCHAR2(1) -- Y/N for principal pay in arrears; used with PAYMENT_CALC_METHOD=SEPERATE_PRIN_INT
147 ,PRIN_PAY_IN_ARREARS_BOOL BOOLEAN -- boolean for principal pay in arrears
148 ,EXTEND_FROM_INSTALLMENT NUMBER
149 ,ORIG_NUMBER_INSTALLMENTS NUMBER
150 ,PENAL_INT_RATE NUMBER
151 ,PENAL_INT_GRACE_DAYS NUMBER
152 );
153
154 /*========================================================================+
155 | this is for the old payoff calculation
156 +========================================================================*/
157 TYPE PAYOFF_REC is RECORD(TOTAL_PRINCIPAL_REMAINING NUMBER
158 ,UNPAID_PRINCIPAL NUMBER -- billed but not paid
159 ,UNBILLED_PRINCIPAL NUMBER -- not billed
160 ,TOTAL_INTEREST_REMAINING NUMBER
161 ,UNPAID_INTEREST NUMBER -- billed but not paid
162 ,ADDITIONAL_INTEREST_DUE NUMBER -- this is the main calculation needs
163 ,TOTAL_FEES_REMAINING NUMBER
164 ,UNPAID_FEES NUMBER -- billed but not paid
165 ,ADDITIONAL_FEES_DUE NUMBER -- for future
166 ,DUE_DATE DATE);
167
168 TYPE PAYOFF_TBL is TABLE OF PAYOFF_REC INDEX BY BINARY_INTEGER;
169
170 /*========================================================================+
171 | new record type for payoff enhancements
172 | tbl type is extensible by "PURPOSE"
173 +========================================================================*/
174 TYPE PAYOFF_REC2 is record(PAYOFF_PURPOSE VARCHAR2(30)
175 ,BILLED_AMOUNT NUMBER
176 ,UNBILLED_AMOUNT NUMBER
177 ,TOTAL_AMOUNT NUMBER );
178
179 TYPE PAYOFF_TBL2 is TABLE OF PAYOFF_REC2 INDEX BY BINARY_INTEGER;
180
181 /*========================================================================+
182 | used to calculate average daily balance
183 +========================================================================*/
184 TYPE LOAN_ACTIVITY_REC is record(ACTIVITY_DATE DATE
185 ,ACTIVITY_AMOUNT NUMBER
186 ,ENDING_BALANCE NUMBER
187 ,DAYS_AT_BALANCE NUMBER);
188
189 TYPE LOAN_ACTIVITY_TBL is table of LOAN_ACTIVITY_REC index by binary_integer;
190
191 /*========================================================================+
192 | types for building payment schedule
193 +========================================================================*/
194 TYPE PAYMENT_SCHEDULE is record(PERIOD_BEGIN_DATE DATE
195 ,PERIOD_END_DATE DATE);
196
197 TYPE PAYMENT_SCHEDULE_TBL is table of PAYMENT_SCHEDULE index by binary_integer;
198
199 /*========================================================================+
200 | helper types
201 +========================================================================*/
202 TYPE DATE_TBL IS TABLE OF DATE INDEX BY BINARY_INTEGER;
203 type amount_tbl is table of number index by Binary_Integer;
204 type vchar_tbl is table of varchar2(30) index by binary_integer;
205
206 /*========================================================================+
207 | fees types
208 +========================================================================*/
209 TYPE FEES_REC IS RECORD(FEE_ID NUMBER
210 ,FEE_NAME VARCHAR2(50)
211 ,FEE_AMOUNT NUMBER
212 ,FEE_INSTALLMENT NUMBER
213 ,FEE_DESCRIPTION VARCHAR2(250)
214 ,FEE_SCHEDULE_ID NUMBER
215 ,FEE_WAIVABLE_FLAG VARCHAR2(1)
216 ,WAIVE_AMOUNT NUMBER
217 ,BILLED_FLAG VARCHAR2(1)
218 ,ACTIVE_FLAG VARCHAR2(1));
219
220 TYPE FEES_TBL IS TABLE OF FEES_REC INDEX BY BINARY_INTEGER;
221
222 procedure shiftLoan(p_loan_id in number
223 ,p_init_msg_list IN VARCHAR2
224 ,p_commit IN VARCHAR2
225 ,x_return_status OUT NOCOPY VARCHAR2
226 ,x_msg_count OUT NOCOPY NUMBER
230 ,p_new_start_date in date
227 ,x_msg_data OUT NOCOPY VARCHAR2);
228
229 procedure shiftLoanDates(p_loan_id in number
231 ,p_phase in varchar2
232 ,x_loan_details out NOCOPY lns_financials.loan_details_rec
233 ,x_dates_shifted_flag OUT NOCOPY VARCHAR2
234 ,x_return_status OUT NOCOPY VARCHAR2
235 ,x_msg_count OUT NOCOPY NUMBER
236 ,x_msg_data OUT NOCOPY VARCHAR2);
237
238 function getAverageDailyBalance(p_loan_id number
239 ,p_term_id number
240 ,p_from_date date
241 ,p_to_date date
242 ,p_calc_method number) return number;
243
244 function getWeightedBalance(p_loan_id number
245 ,p_from_date date
246 ,p_to_date date
247 ,p_calc_method varchar2
248 ,p_phase varchar2
249 ,p_day_count_method varchar2) return number;
250
251 procedure validatePayoff(p_loan_details in LNS_FINANCIALS.LOAN_DETAILS_REC
252 ,p_payoff_date in date
253 ,x_return_status OUT NOCOPY VARCHAR2
254 ,x_msg_count OUT NOCOPY NUMBER
255 ,x_msg_data OUT NOCOPY VARCHAR2);
256
257 -- payoff calculation
258 procedure calculatePayoff(p_api_version IN NUMBER
259 ,p_init_msg_list IN VARCHAR2
260 ,p_loan_id in number
261 ,p_payoff_date in date
262 ,x_payoff_tbl OUT NOCOPY LNS_FINANCIALS.PAYOFF_TBL2
263 ,x_return_status OUT NOCOPY VARCHAR2
264 ,x_msg_count OUT NOCOPY NUMBER
265 ,x_msg_data OUT NOCOPY VARCHAR2);
266
267 function getLoanDetails(p_loan_id in number
268 ,p_based_on_terms in varchar2
269 ,p_phase in varchar2) return LNS_FINANCIALS.LOAN_DETAILS_REC;
270
271 function compoundInterest(p_rate in number
272 ,p_period_value in number
273 ,p_period_type in varchar2) return number;
274
275 function getAnnualRate(p_loan_Id in number) return number;
276
277 function getActiveRate(p_loan_id in number) return number;
278
279 function getRemainingBalance(p_loan_id in number) return number;
280
281 function getPeriodicRate(p_period_start_date in date
282 ,p_period_end_date in date
283 ,p_annualized_rate in number
284 ,p_days_count_method in varchar2) return number;
285
286 function getWeightedRate(p_loan_details in LNS_FINANCIALS.LOAN_DETAILS_REC
287 ,p_start_date in date
288 ,p_end_date in date
289 ,p_rate_tbl in LNS_FINANCIALS.RATE_SCHEDULE_TBL) return number;
290
291 procedure amortizeEPLoan(p_loan_details in LNS_FINANCIALS.LOAN_DETAILS_REC
292 ,p_rate_schedule in LNS_FINANCIALS.RATE_SCHEDULE_TBL
293 ,p_based_on_terms IN VARCHAR2
294 ,p_installment_number in number
295 ,x_loan_amort_tbl out nocopy LNS_FINANCIALS.AMORTIZATION_TBL);
296
297 procedure amortizeLoan(p_loan_details in LNS_FINANCIALS.LOAN_DETAILS_REC
301 ,x_loan_amort_tbl out nocopy LNS_FINANCIALS.AMORTIZATION_TBL);
298 ,p_rate_schedule in LNS_FINANCIALS.RATE_SCHEDULE_TBL
299 ,p_based_on_terms IN VARCHAR2
300 ,p_installment_number in number
302
303 procedure amortizeLoan(p_loan_Id in number
304 ,p_based_on_terms IN VARCHAR2
305 ,p_installment_number in number
306 ,x_loan_amort_tbl out nocopy LNS_FINANCIALS.AMORTIZATION_TBL);
307
308 procedure loanProjection(p_loan_details in LNS_FINANCIALS.LOAN_DETAILS_REC
309 ,p_rate_schedule in LNS_FINANCIALS.RATE_SCHEDULE_TBL
310 ,x_loan_amort_tbl out nocopy LNS_FINANCIALS.AMORTIZATION_TBL);
311
312 procedure runOpenProjection(p_init_msg_list IN VARCHAR2
313 ,p_loan_ID IN NUMBER
314 ,p_based_on_terms IN VARCHAR2
315 ,x_amort_tbl OUT NOCOPY LNS_FINANCIALS.AMORTIZATION_TBL
316 ,x_return_status OUT NOCOPY VARCHAR2
317 ,x_msg_count OUT NOCOPY NUMBER
318 ,x_msg_data OUT NOCOPY VARCHAR2);
319
320 procedure validateLoan(p_api_version IN NUMBER
321 ,p_init_msg_list IN VARCHAR2
322 ,p_loan_ID IN NUMBER
323 ,x_return_status OUT NOCOPY VARCHAR2
324 ,x_msg_count OUT NOCOPY NUMBER
325 ,x_msg_data OUT NOCOPY VARCHAR2);
326
327 procedure runAmortization(p_api_version IN NUMBER
328 ,p_init_msg_list IN VARCHAR2
329 ,p_commit IN VARCHAR2
330 ,p_loan_ID IN NUMBER
331 ,p_based_on_terms IN VARCHAR2
332 ,x_amort_tbl OUT NOCOPY LNS_FINANCIALS.AMORTIZATION_TBL
333 ,x_return_status OUT NOCOPY VARCHAR2
334 ,x_msg_count OUT NOCOPY NUMBER
335 ,x_msg_data OUT NOCOPY VARCHAR2);
336
337 function getRateSchedule(p_loan_id in number
338 ,p_phase in varchar2) return LNS_FINANCIALS.RATE_SCHEDULE_TBL;
339
340 --function getRateSchedule(p_loan_id in number) return LNS_FINANCIALS.RATE_SCHEDULE_TBL;
341
342 function getRateDetails(p_installment IN NUMBER
343 ,p_rate_tbl IN LNS_FINANCIALS.RATE_SCHEDULE_TBL) return LNS_FINANCIALS.INTEREST_RATE_REC;
344
345 function getRateDetails(p_date in date
346 ,p_rate_tbl in LNS_FINANCIALS.RATE_SCHEDULE_TBL) return LNS_FINANCIALS.INTEREST_RATE_REC;
347
348 function termlyPayment(p_termly_amount in number
349 ,p_annual_rate in number
350 ,p_loan_amount in number
351 ,p_payments_per_year in number
352 ,p_period_type in varchar2) return number;
353
354 procedure getInstallment(p_api_version IN NUMBER
355 ,p_init_msg_list IN VARCHAR2
356 ,p_commit IN VARCHAR2
357 ,p_loan_Id IN NUMBER
358 ,p_installment_number IN NUMBER
359 ,x_amortization_rec OUT NOCOPY LNS_FINANCIALS.AMORTIZATION_REC
360 ,x_fees_tbl OUT NOCOPY LNS_FINANCIALS.FEES_TBL
361 ,x_return_status OUT NOCOPY VARCHAR2
362 ,x_msg_count OUT NOCOPY NUMBER
363 ,x_msg_data OUT NOCOPY VARCHAR2);
364
365 procedure getOpenInstallment(p_init_msg_list IN VARCHAR2
366 ,p_loan_Id in number
367 ,p_installment_number in number
368 ,x_amortization_rec OUT NOCOPY LNS_FINANCIALS.AMORTIZATION_REC
369 ,x_fees_tbl OUT NOCOPY LNS_FINANCIALS.FEES_TBL
370 ,x_return_status OUT NOCOPY VARCHAR2
371 ,x_msg_count OUT NOCOPY NUMBER
372 ,x_msg_data OUT NOCOPY VARCHAR2);
373
374 function getRatesTable(p_index_rate_id in number
375 ,p_index_date in date
376 ,p_rate_change_frequency in varchar2
377 ,p_maturity_date in date) return LNS_FINANCIALS.RATE_SCHEDULE_TBL;
378
379
380 procedure preProcessInstallment(p_api_version IN NUMBER
381 ,p_init_msg_list IN VARCHAR2
382 ,p_commit IN VARCHAR2
383 ,p_loan_ID IN NUMBER
384 ,p_installment_number IN NUMBER
385 ,x_amortization_rec OUT NOCOPY LNS_FINANCIALS.AMORTIZATION_REC
386 ,x_return_status OUT NOCOPY VARCHAR2
387 ,x_msg_count OUT NOCOPY NUMBER
388 ,x_msg_data OUT NOCOPY VARCHAR2);
389
390 procedure preProcessOpenInstallment(p_init_msg_list IN VARCHAR2
391 ,p_commit IN VARCHAR2
392 ,p_loan_ID IN NUMBER
393 ,p_installment_number IN NUMBER
394 ,x_amortization_rec OUT NOCOPY LNS_FINANCIALS.AMORTIZATION_REC
395 ,x_return_status OUT NOCOPY VARCHAR2
396 ,x_msg_count OUT NOCOPY NUMBER
397 ,x_msg_data OUT NOCOPY VARCHAR2);
398
399 function calculateEPPayment(p_loan_amount in number
400 ,p_num_intervals in number
401 ,p_ending_balance in number
402 ,p_pay_in_arrears in boolean) return number;
403
404 function calculatePayment(p_loan_amount in number
405 ,p_periodic_rate in number
406 ,p_num_intervals in number
407 ,p_ending_balance in number
408 ,p_pay_in_arrears in boolean) return number;
409
410 function calculateInterest(p_amount in number
411 ,p_periodic_rate in number
412 ,p_compounding_period in varchar2) return number;
413
414 function calculateInterestRate(p_initial_rate in number
415 ,p_rate_to_compare in number
416 ,p_last_period_rate in number
417 ,p_max_first_adjustment in number
418 ,p_max_period_adjustment in number
419 ,p_max_lifetime_adjustment in number
420 ,p_ceiling_rate in number
421 ,p_floor_rate in number
422 ,p_installment_number in number) return number;
423
424 procedure floatingRatePostProcessing(p_loan_id IN NUMBER
425 ,p_init_msg_list IN VARCHAR2
426 ,p_commit IN VARCHAR2
430 ,p_annualized_interest_rate IN NUMBER
427 ,p_installment_number IN NUMBER
428 ,p_period_begin_date IN DATE
429 ,p_interest_adjustment_freq IN VARCHAR2
431 ,p_rate_id IN OUT NOCOPY NUMBER
432 ,p_phase IN VARCHAR2
433 ,x_return_status OUT NOCOPY VARCHAR2
434 ,x_msg_count OUT NOCOPY NUMBER
435 ,x_msg_data OUT NOCOPY VARCHAR2);
436
437
438 function getAPR(p_loan_id in number
439 ,p_term_id in number
440 ,p_actual_flag in varchar2) return number;
441
442 function frequency2ppy(p_frequency in varchar2) return number;
443
444 function getCompoundPeriodicRate(p_compound_freq in varchar2
445 ,p_payment_freq in varchar2
446 ,p_annualized_rate in number
447 ,p_period_start_date in date
448 ,p_period_end_date in date
449 ,p_days_count_method in varchar2) return number;
450
451 -- This function calculates normal interest
452 function CALC_NORM_INTEREST(p_loan_id in number,
453 p_calc_method in varchar2,
454 p_period_start_date in date,
455 p_period_end_date in date,
456 p_interest_rate in number,
457 p_day_count_method in varchar2,
458 p_payment_freq in varchar2,
459 p_compound_freq in varchar2) return number;
460
461 -- This procedure calculates additional and penal interest
462 procedure CALC_ADD_INTEREST(p_loan_id in number,
463 p_calc_method in varchar2,
464 p_period_start_date in date,
465 p_period_end_date in date,
466 p_interest_rate in number,
467 p_day_count_method in varchar2,
468 p_payment_freq in varchar2,
469 p_compound_freq in varchar2,
470 p_penal_int_rate in number,
471 p_prev_grace_end_date in date,
472 p_grace_start_date in date,
473 p_grace_end_date in date,
474 p_target in varchar2,
475 x_add_interest out NOCOPY number,
476 x_penal_interest out NOCOPY number);
477
478 END LNS_FINANCIALS;