DBA Data[Home] [Help]

PACKAGE: APPS.LNS_LOAN_PUB

Source


1 PACKAGE LNS_LOAN_PUB AUTHID CURRENT_USER as
2 /* $Header: LNS_LOAN_PUBP_S.pls 120.7 2011/01/06 14:00:29 scherkas ship $ */
3 /*#
4  * Start of Comments
5  * Package name     : LNS_LOAN_PUB
6  * Purpose          Creates a new loan
7  * History          :
8 */
9 -- * @rep:scope public
10 -- * @rep:product LNS
11 -- * @rep:displayname Create Loan
12 -- * @rep:lifecycle active
13 -- * @rep:compatibility S
14 -- * @rep:category BUSINESS_ENTITY LOAN
15 
16 /*=======================================================================+
17  |  Declare PUBLIC Data Types and Variables
18  +=======================================================================*/
19 
20     -- Loan header record
21     TYPE Loan_Details_Rec_Type IS RECORD (
22 
23         -- common attributes
24         product_id                  NUMBER(15)  -- FK to lns_loan_products.product_id; mandatory
25         ,loan_number                VARCHAR2(20) -- if profile LNS_GENERATE_LOAN_NUMBER = 'Y'- will be set by api; otherwise mandatory
26         ,loan_description           VARCHAR2(250) -- Free Form Text; optional
27         ,loan_assigned_to           NUMBER(15) -- FK to jtf_rs_resource_extns.resource_id; mandatory
28         ,legal_entity_id            NUMBER(15) -- FK to xle_entity_profiles.legal_entity_id; mandatory if product's legal_entity_id is null
29         ,requested_amount           NUMBER -- Loan requested amount; mandatory for direct loans
30         ,loan_application_date      DATE -- Loan application date; optional; if null will be defaulted to loan_start_date
31         ,exchange_rate_type         VARCHAR2(30) -- FK to gl_daily_conversion_types; mandatory if product's currency is different from functional currency
32         ,exchange_rate              NUMBER -- exchange_rate for USER exchange_rate_type
33         ,exchange_date              DATE -- exchange_date; mandatory if exchange_rate_type is not null
34         ,loan_purpose_code          VARCHAR2(30) -- FK to lns_lookups.lookup_code; lookup_type = 'LOAN_PURPOSE'; mandatory
35         ,loan_subtype               VARCHAR2(30) -- FK to lns_lookups.lookup_code; lookup_type = 'LOAN_SUBTYPE'; mandatory
36         ,credit_review_flag         VARCHAR2(1) -- 'Y' or 'N' or null; optional
37         ,trx_type_id                NUMBER(15) -- principal trx type; FK to ar_lookups.lookup_code; lookup_type = 'INV/CM'; mandatory
38         ,collateral_percent         NUMBER -- collateral_percent; optional
39         ,CUSTOM_PAYMENTS_FLAG       VARCHAR2(1) -- valid values: null or N or Y; optional
40         ,FORGIVENESS_FLAG           VARCHAR2(1) -- enable forgiveness: valid values: Y and N; optional; if null will be defaulted from product_id
41         ,FORGIVENESS_PERCENT        NUMBER  -- forgiveness percent; valid values from 0 to 100; optional; if null will be defaulted from product_id
42         ,org_id                     NUMBER  -- do not pass; will be returned by api
43         ,loan_type_id               NUMBER -- do not pass; will be returned by api
44         ,loan_class_code            VARCHAR2(30) -- do not pass; will be returned by api
45         ,loan_currency              VARCHAR2(15) -- do not pass; will be returned by api
46         ,maturity_date              DATE  -- do not pass; will be returned by api
47         ,open_maturity_date         DATE  -- do not pass; will be returned by api
48         ,open_payment_frequency     VARCHAR2(30)  -- do not pass; will be returned by api
49 
50         -- primary borrower attributes
51         ,primary_borrower_party_id  NUMBER(15) -- FK to hz_parties.party_id; Note: Status should be 'A'; mandatory
52         ,cust_account_id            NUMBER(15) -- FK to hz_cust_accounts_all.cust_account_id; Note: Status should be 'A'; mandatory
53         ,bill_to_acct_site_id       NUMBER(15) -- FK to hz_cust_acct_sites_all; mandatory
54         ,contact_rel_party_id       NUMBER(15) -- FK to hz_relationships.party_id; optional
55         ,CONTACT_PERS_PARTY_ID      NUMBER(15) -- FK to hz_parties.party_id; Note: Status should be 'A'; optional
56 
57         -- common term attributes
58         ,RATE_TYPE                  VARCHAR2(30)  -- FK to lns_lookups.lookup_code; lookup_type = 'RATE_TYPE'; optional; if null will be defaulted from product_id
59         ,INDEX_RATE_ID              NUMBER -- FK to lns_int_rate_headers.interest_rate_id; optional; if null will be defaulted from product_id
60         ,DAY_COUNT_METHOD           VARCHAR2(50) -- days count method; FK to lns_lookups.lookup_code; lookup_type = 'DAY_COUNT_METHOD'; optional; if null will be defaulted from product_id
61         ,LOAN_PAYMENT_FREQUENCY     VARCHAR2(30) -- loan/interest payment frequency; FK to lns_lookups.lookup_code; lookup_type = 'FREQUENCY'; optional; if null will be defaulted from product_id
62         ,CALCULATION_METHOD         VARCHAR2(30)  -- interest calculation method: SIMPLE or COMPOUND; optional; if null will be defaulted from product_id
63         ,INTEREST_COMPOUNDING_FREQ  VARCHAR2(30)  -- FK to lns_lookups.lookup_code; lookup_type = 'INTEREST_COMPOUNDING_FREQ'; optional; if null will be defaulted from product_id
64         ,PAYMENT_CALC_METHOD        VARCHAR2(30)  -- FK to lns_lookups.lookup_code; lookup_type = 'PAYMENT_CALCULATION_METHOD'; optional; if null will be defaulted from product_id else to EQUAL_PAYMENT
65         ,CUSTOM_CALC_METHOD         VARCHAR2(30)  -- FK to lns_lookups.lookup_code; lookup_type = CUSTOM_CALCULATION_METHOD; mandatory if CUSTOM_PAYMENTS_FLAG = Y
66         ,ORIG_PAY_CALC_METHOD       VARCHAR2(30)  -- FK to lns_lookups.lookup_code; lookup_type = PAYMENT_CALCULATION_METHOD; optional
67         ,PENAL_INT_RATE             NUMBER -- penal interest rate; if null will be defaulted from product_id else will be defaulted to 0
68         ,PENAL_INT_GRACE_DAYS       NUMBER -- penal interest grace days; if null will be defaulted from product_id else will be defaulted to 0
69         ,CALC_ADD_INT_UNPAID_PRIN   VARCHAR2(1) -- calc additional interest on unpaid principal flag; optional; if null will be defaulted from product_id; valid values: Y or N or null;
70         ,CALC_ADD_INT_UNPAID_INT    VARCHAR2(1) -- calc additional interest on unpaid interest flag; optional; if null will be defaulted from product_id; valid values: Y or N or null;
71         ,LOCK_DATE                  DATE  -- rate lock date; optional; optional
72         ,LOCK_EXP_DATE              DATE  -- rate lock experation date; optional
73 
74         -- 'term phase' term attributes
75         ,loan_term                  NUMBER -- term phase term; optional; if null will be defaulted from product_id
76         ,loan_term_period           VARCHAR2(30) -- FK to lns_lookups.lookup_code; lookup_type = 'PERIOD'; optional; if null will be defaulted from product_id
77         ,balloon_payment_type       VARCHAR2(30) -- FK to lns_lookups.lookup_code; lookup_type = 'BALLOON_PAYMENT_TYPE'; optional; if null will be defaulted to TERM
78         ,balloon_payment_amount     NUMBER -- balloon amount for term phase; mandatory if balloon_payment_type = 'AMOUNT'; if null will be defaulted to 0
79         ,balloon_term               NUMBER -- balloon term for term phase; mandatory if balloon_payment_type = 'TERM'; if null will be defaulted to loan_term
80         ,loan_start_date            DATE -- term phase start date; mandatory; if null will be defaulted to sysdate
81         ,FIRST_PAYMENT_DATE         DATE -- term phase loan/interest first payment date; mandatory; if null will be defaulted to loan_start_date+1 payment_period
82         ,PRIN_FIRST_PAY_DATE        DATE    -- term phase principal first payment date; used with PAYMENT_CALC_METHOD = SEPARATE_SCHEDULES; if null will be defaulted to FIRST_PAYMENT_DATE
83         ,PRIN_PAYMENT_FREQUENCY     VARCHAR2(30)  -- term phase principal payment freq; used with PAYMENT_CALC_METHOD = SEPARATE_SCHEDULES; if null will be defaulted from product_id else to LOAN_PAYMENT_FREQUENCY
84         ,floor_rate                 NUMBER  -- term phase floor rate; optional; only applies when RATE_TYPE = FLOATING
85         ,ceiling_rate               NUMBER  -- term phase ceiling rate; optional; only applies when RATE_TYPE = FLOATING
86         ,percent_increase           NUMBER  -- term phase max sequential rate percent increase; optional; only applies when RATE_TYPE = FLOATING
87         ,percent_increase_life      NUMBER  -- term phase max rate percent increase for life of the loan; optional; only applies when RATE_TYPE = FLOATING
88 
89         -- 'disbursement phase' term attributes
90         ,open_loan_term             NUMBER -- term phase term; mandatory if its loan with disbursement phase
91         ,open_loan_term_period      VARCHAR2(30) -- FK to lns_lookups.lookup_code; lookup_type = 'PERIOD'; mandatory if its loan with disbursement phase
92         ,open_loan_start_date       DATE -- disbursement phase start date; mandatory if its loan with disbursement phase
93         ,open_first_payment_date    DATE -- disbursement phase first payment date; mandatory if its loan with disbursement phase
94         ,open_to_term_event         VARCHAR2(30) -- FK to lns_lookups.lookup_code; lookup_type = 'OPEN_TO_TERM_EVENT'; mandatory if its loan with disbursement phase
95         ,open_floor_rate            NUMBER  -- open phase floor rate; optional; only applies when loan with disbursement phase and RATE_TYPE = FLOATING
96         ,open_ceiling_rate          NUMBER  -- open phase ceiling rate; optional; only applies when loan with disbursement phase and RATE_TYPE = FLOATING
97         ,open_percent_increase      NUMBER  -- open phase max sequential rate percent increase; optional; only applies when loan with disbursement phase and RATE_TYPE = FLOATING
98         ,open_percent_increase_life NUMBER  -- open phase max rate percent increase for life of the loan; optional; only applies when loan with disbursement phase and RATE_TYPE = FLOATING
99 
100         -- Terms for Payment attributes
101         ,REAMORTIZE_OVER_PAYMENT    VARCHAR2(1)  -- reamortize overpayment flag; optional; valid values: Y or N or null;
102         ,DELINQUENCY_THRESHOLD_AMOUNT NUMBER  -- delinquency amount; optional; if null will be defaulted by api;
103         ,PAYMENT_APPLICATION_ORDER  VARCHAR2(30) -- payment application order; optional; if null will be defaulted from loan_type_id
104         ,PMT_APPL_ORDER_SCOPE       VARCHAR2(30) -- payment application scope; optional; if null will be defaulted from loan_type_id
105         ,REAMORTIZE_ON_FUNDING      VARCHAR2(30) -- reamortize on funding setting; optional; if null will be defaulted from product_id; valid values: NO, REST, IMMEDIATELY;
106         ,DEFAULT_THRESHOLD_AMOUNT   NUMBER -- default threshold  amount; optional; if null will be defaulted by api;
107 
108         -- additional optional attributes
109         ,ATTRIBUTE_CATEGORY         VARCHAR2(30)    -- optional
110         ,ATTRIBUTE1                 VARCHAR2(150)    -- optional
111         ,ATTRIBUTE2                 VARCHAR2(150)    -- optional
112         ,ATTRIBUTE3                 VARCHAR2(150)    -- optional
113         ,ATTRIBUTE4                 VARCHAR2(150)    -- optional
114         ,ATTRIBUTE5                 VARCHAR2(150)    -- optional
115         ,ATTRIBUTE6                 VARCHAR2(150)    -- optional
116         ,ATTRIBUTE7                 VARCHAR2(150)    -- optional
117         ,ATTRIBUTE8                 VARCHAR2(150)    -- optional
118         ,ATTRIBUTE9                 VARCHAR2(150)    -- optional
119         ,ATTRIBUTE10                VARCHAR2(150)    -- optional
120         ,ATTRIBUTE11                VARCHAR2(150)    -- optional
121         ,ATTRIBUTE12                VARCHAR2(150)    -- optional
122         ,ATTRIBUTE13                VARCHAR2(150)    -- optional
123         ,ATTRIBUTE14                VARCHAR2(150)    -- optional
124         ,ATTRIBUTE15                VARCHAR2(150)    -- optional
125         ,ATTRIBUTE16                VARCHAR2(150)    -- optional
126         ,ATTRIBUTE17                VARCHAR2(150)    -- optional
127         ,ATTRIBUTE18                VARCHAR2(150)    -- optional
128         ,ATTRIBUTE19                VARCHAR2(150)    -- optional
129         ,ATTRIBUTE20                VARCHAR2(150)    -- optional
130         );
131 
132     -- loan lines
133     TYPE Loan_Lines_Rec_Type IS RECORD (
134         line_number             NUMBER(15) -- Any unique serial number; mandatory
135         ,payment_schedule_id    NUMBER(15) -- FK to ar_payment_schedules_all; payment_schedule_id; mandatory
136         ,requested_amount       NUMBER -- line amount; mandatory
137         ,REFERENCE_DESCRIPTION  VARCHAR2(250) -- Free form Text; optional
138         ,REFERENCE_NUMBER       VARCHAR2(60) -- do not pass; will be set to trx_number;
139         ,customer_trx_id        NUMBER   -- do not pass; will be set to customer_trx_id
140         ,remaining_balance      NUMBER   -- do not pass; will be set to amount_due_remaining
141         ,installment_number     NUMBER   -- do not pass; will be set to terms_sequence_number
142     );
143     TYPE Loan_Lines_Tbl_Type IS TABLE OF Loan_Lines_Rec_Type INDEX BY BINARY_INTEGER;
144 
145     -- loan disbursements
146     TYPE Loan_Disb_Rec_Type IS RECORD (
147         ACTIVITY_CODE		        VARCHAR2(30)   -- disbursement predefined activity code; optional
148         ,DESCRIPTION                VARCHAR2(250)   -- disbursement description; either ACTIVITY_CODE or DESCRIPTION must be passed
149         ,AMOUNT		                NUMBER   -- disbursement amount; mandatory
150         ,DUE_DATE                   DATE   -- disbursement due date; mandatory
151         ,PAYEE_PARTY_ID             NUMBER   -- disbursement party id; mandatory
152         ,BANK_ACCOUNT_ID            NUMBER   -- disbursement bank account id; optional
153         ,PAYMENT_METHOD_CODE        VARCHAR2(30)   -- disbursement payment method; optional
154     );
155     TYPE Loan_Disb_Tbl_Type IS TABLE OF Loan_Disb_Rec_Type INDEX BY BINARY_INTEGER;
156 
157     -- loan participants
158     TYPE LOAN_PART_REC_TYPE IS RECORD (
159         HZ_PARTY_ID             NUMBER(15)  -- FK to hz_parties.party_id; Note: Status should be 'A'; mandatory
160         ,LOAN_PARTICIPANT_TYPE  VARCHAR2(30)  -- FK to lns_lookups.lookup_code; lookup_type = 'LNS_PARTICIPANT_TYPE' and lookup_code <> 'PRIMARY_BORROWER'; mandatory
161         ,START_DATE_ACTIVE      DATE  -- optional
162         ,END_DATE_ACTIVE        DATE -- optional
163         ,CUST_ACCOUNT_ID        NUMBER(15) -- FK to hz_cust_accounts_all.cust_account_id; Note: Status should be 'A'; mandatory
164         ,BILL_TO_ACCT_SITE_ID   NUMBER(15) -- FK to hz_cust_acct_sites_all; mandatory
165         ,CONTACT_PERS_PARTY_ID  NUMBER(15) -- FK to hz_parties.party_id; Note: Status should be 'A'; optional
166         ,CONTACT_REL_PARTY_ID   NUMBER(15) -- FK to hz_relationships.party_id; optional
167     );
168     TYPE LOAN_PART_TBL_TYPE IS TABLE OF LOAN_PART_REC_TYPE INDEX BY BINARY_INTEGER;
169 
170     -- loan rate schedule
171     TYPE LOAN_RATES_REC_TYPE IS RECORD (
172         INDEX_RATE                  NUMBER  -- index interest rate for this rate record; mandatory
173         ,SPREAD                     NUMBER  -- interest rate spread for this rate record; optional
174         ,INDEX_DATE                 DATE    -- optional; if passed INDEX_RATE will be defaulted from this date
175         ,BEGIN_INSTALLMENT_NUMBER   NUMBER  -- BEGIN_INSTALLMENT_NUMBER for this rate record; mandatory
176         ,END_INSTALLMENT_NUMBER     NUMBER -- END_INSTALLMENT_NUMBER for this rate record; mandatory
177         ,INTEREST_ONLY_FLAG         VARCHAR2(1)  -- 'Y' or 'N' or null; optional
178     );
179     TYPE LOAN_RATES_TBL_TYPE IS TABLE OF LOAN_RATES_REC_TYPE INDEX BY BINARY_INTEGER;
180 
181     -- custom schedule
182     TYPE LOAN_CUST_SCHED_REC_TYPE IS RECORD (
183         PAYMENT_NUMBER NUMBER  -- installment number; do not pass
184         ,DUE_DATE DATE  -- installment due date; either due date or relative due date MUST BE PASSED
185         ,RELATIVE_DATE VARCHAR2(30) -- installment relative due date; either due date or relative due date MUST BE PASSED
186         ,PRINCIPAL_AMOUNT NUMBER -- principal amount; optional
187         ,PRINCIPAL_PERCENT NUMBER -- principal percentage; optional
188         ,INTEREST_AMOUNT NUMBER --interest amount; optional
189         ,LOCK_PRIN  VARCHAR2(1) -- lock principal flag; valid values: N, Y, P; if null will be set to N
193 
190         ,LOCK_INT   VARCHAR2(1) -- lock interest flag; valid values: N, Y, D; if null will be set to N
191     );
192     TYPE LOAN_CUST_SCHED_TBL_TYPE IS TABLE OF LOAN_CUST_SCHED_REC_TYPE INDEX BY BINARY_INTEGER;
194     -- accounting
195     type distribution_rec is record(
196         LINE_TYPE              VARCHAR2(30)  -- mandatory
197         ,ACCOUNT_NAME           VARCHAR2(30)  -- mandatory
198         ,CODE_COMBINATION_ID    NUMBER  -- mandatory
199         ,ACCOUNT_TYPE           VARCHAR2(30)  -- mandatory
200         ,DISTRIBUTION_PERCENT   NUMBER  -- mandatory
201         ,DISTRIBUTION_AMOUNT    NUMBER  -- mandatory
202         ,DISTRIBUTION_TYPE      VARCHAR2(30)  -- mandatory
203         ,USSGL_TRANSACTION_CODE VARCHAR2(30)  -- optional
204     );
205     type distribution_tbl is table of distribution_rec index by binary_integer;
206 
207     TYPE Loan_create_errors_type IS TABLE OF LNS_LOAN_CREATE_ERRORS_GT%ROWTYPE;
208 
209 
210 /*#
211  * Creates a loan
212  * @param p_api_version API Version Number
213  * @param P_INIT_MSG_LIST Init message stack flag
214  * @param p_commit Commit flag
215  * @param P_VALIDATION_LEVEL Validation level
216  * @param P_Loan_Details_Rec Loan Details required to create a loan
217  * @param P_Loan_Lines_Tbl Loan Lines required for ERS loan
218  * @param P_DISB_TBL Loan Disbursements for direct loan
219  * @param P_LOAN_PART_TBL Table of additional loan participants
220  * @param P_TERM_RATES_TBL Rate schedule for term phase
221  * @param P_OPEN_RATES_TBL Rate schedule for open phase
222  * @param p_loan_cust_sched_tbl Custom amortization schedule
223  * @param P_Application_id Application Id for the source application
224  * @param P_Created_by_module User Module Identification
225  * @param X_loan_id Loan Id if the loan creates successfully
226  * @param X_return_status API return status
227  * @param X_msg_count Number of error messages
228  * @param X_MSG_DATA API return errors
229 */
230 -- * @rep:scope internal
231 -- * @rep:displayname Create Loan
232 -- * @rep:lifecycle active
233 -- * @rep:compatibility S
234 
235  /*========================================================================
236  | PUBLIC PROCEDURE CREATE_LOAN
237  |
238  | DESCRIPTION
239  |      This process Creates a Loan and creates corresponding records in
240  |      LNS_TERMS, LNS_RATE_SCHEDULES, LNS_PARTICIPANTS and LNS_LOAN_LINES, LNS_CUSTOM_PAYMNT_SCHEDS etc.
241  |
242  | PSEUDO CODE/LOGIC
243  |
244  | PARAMETERS
245  |      P_API_VERSION      - API Version
246  |      P_COMMIT           - Passing 'Y' will result in an explicit commit
247  |                           being issued in the API.
248  |      P_Loan_Details_Rec - Please see documentation elsewhere for
249  |                           Loan_Details_Rec_Type.
250  |      P_Loan_Lines_Rec   - Please see documentation elsewhere for
251  |                           Loan_Lines_List_Type. Needs to be populated only
252  |                           for extended payment plan loans.
253  |      P_DISB_TBL         - Table of disbursements. Only for direct loans
254  |      P_LOAN_PART_TBL    - Table of additional loan participants.
255  |      P_TERM_RATES_TBL   - Rate schedule for loan's term phase.
256  |      P_OPEN_RATES_TBL   - Rate schedule for loan's open phase.
257  |      p_loan_cust_sched_tbl - Custom amortization schedule.
258  |      P_Application_id   - Application_id for the source application.
259  |      P_Created_by_module- Free form text not validated.
260  |      X_Loan_id          - Loan_id of the created loan will be returned if
261  |                           successful.
262  |      X_RETURN_STATUS    - Returns 'S' for success and 'F' for Failure.
263  |      X_MSG_COUNT        - Returns number of Errors.The errors are inserted
264  |                           in the Global temporary table
265  |                           LNS_LOAN_CREATE_ERRORS_GT.
266  | KNOWN ISSUES
267  |      None
268  |
269  | NOTES
270  |
271  | MODIFICATION HISTORY
272  | Date                  Author            Description of Changes
273  | 17-Jan-2006           GBELLARY          Created
274  | 17-May-2009           scherkas          Updated for bug 6936893
275  |
276  *=======================================================================*/
277 PROCEDURE CREATE_LOAN(
278     P_API_VERSION           IN         NUMBER,
279     P_INIT_MSG_LIST		    IN         VARCHAR2,
280     P_COMMIT                IN         VARCHAR2,
281     P_VALIDATION_LEVEL	    IN         NUMBER,
282     P_Loan_Details_Rec      IN OUT NOCOPY LNS_LOAN_PUB.Loan_Details_Rec_Type,  -- mandatory
283     P_Loan_Lines_Tbl        IN OUT NOCOPY LNS_LOAN_PUB.Loan_Lines_Tbl_Type,  --only for ERS loan
284     P_DISB_TBL              IN OUT NOCOPY LNS_LOAN_PUB.Loan_Disb_Tbl_Type,  -- only for direct loans
285     P_LOAN_PART_TBL         IN OUT NOCOPY LNS_LOAN_PUB.LOAN_PART_TBL_TYPE,  -- optional
286     P_OPEN_RATES_TBL        IN OUT NOCOPY LNS_LOAN_PUB.LOAN_RATES_TBL_TYPE,  -- optional
287     P_TERM_RATES_TBL        IN OUT NOCOPY LNS_LOAN_PUB.LOAN_RATES_TBL_TYPE,  -- optional
288     p_loan_cust_sched_tbl   IN OUT NOCOPY LNS_LOAN_PUB.loan_cust_sched_tbl_type,  -- optional
289     P_Application_id        IN         NUMBER,
290     P_Created_by_module     IN         VARCHAR2,
291     X_LOAN_ID               OUT NOCOPY NUMBER,
292     X_RETURN_STATUS         OUT NOCOPY VARCHAR2,
293     X_MSG_COUNT             OUT NOCOPY NUMBER,
294     X_MSG_DATA	    	    OUT NOCOPY VARCHAR2);
295 END LNS_LOAN_PUB;