DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_LA_STREAM_PVT

Source


1 Package body OKL_LA_STREAM_PVT as
2 /* $Header: OKLRSGAB.pls 120.141.12010000.3 2008/10/22 00:24:11 rbanerje ship $ */
3 
4 -------------------------------------------------------------------------------------------------
5 -- GLOBAL MESSAGE CONSTANTS
6 -------------------------------------------------------------------------------------------------
7   G_NO_PARENT_RECORD    CONSTANT  VARCHAR2(200) := 'OKL_NO_PARENT_RECORD';
8   G_FND_APP		        CONSTANT  VARCHAR2(200) := OKL_API.G_FND_APP;
9   g_rep_req_yn                    VARCHAR2(3) := 'N';
10   G_SFE_TYPE_SUBSIDY            CONSTANT VARCHAR2(200) := okl_create_streams_pvt.G_SFE_TYPE_SUBSIDY;
11   G_REQUIRED_VALUE	    CONSTANT  VARCHAR2(200) := OKL_API.G_REQUIRED_VALUE;
12   G_INVALID_VALUE		CONSTANT  VARCHAR2(200) := OKL_API.G_INVALID_VALUE;
13   G_UNEXPECTED_ERROR    CONSTANT  VARCHAR2(200) := 'OKL_CONTRACTS_UNEXP_ERROR';
14   G_DB_ERROR             CONSTANT VARCHAR2(12)  := 'OKL_DB_ERROR';
15   G_PROG_NAME_TOKEN      CONSTANT VARCHAR2(9)   := 'PROG_NAME';
16   G_SQLCODE_TOKEN        CONSTANT VARCHAR2(7)   := 'SQLCODE';
17   G_SQLERRM_TOKEN        CONSTANT VARCHAR2(7)   := 'SQLERRM';
18   G_UPPERCASE_REQUIRED	CONSTANT  VARCHAR2(200) := 'OKL_CONTRACTS_UPPERCASE_REQ';
19   G_COL_NAME_TOKEN      CONSTANT  VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
20   -- Start modification Bug#3066346 bakuchib
21   G_LLA_NO_MATCHING_RECORD  CONSTANT VARCHAR2(200) := 'OKL_LLA_NO_MATCHING_RECORD';
22   l_pay_tbl                          OKL_STREAM_GENERATOR_PVT.payment_tbl_type;
23   -- End modification Bug#3066346 bakuchib
24   -- Variable put by HKPATEL for rollover quote
25   l_link_fee_asset_yn			  VARCHAR2(12)  := 'NONE';
26 -- srsreeni - Bug#5699923 - Added - Start
27  G_STREAM_ACTIVITY_WORK CONSTANT VARCHAR2(4) := OKL_PROCESS_STREAMS_PVT.G_STREAM_ACTIVITY_WORK;
28  G_FEE_ROLLOVER CONSTANT VARCHAR2(30) := 'ROLLOVER';
29  G_FEE_FINANCED CONSTANT VARCHAR2(30) := 'FINANCED';
30  G_ORIGIN_STRM_PURPOSE CONSTANT VARCHAR2(30) := 'ORIGIN';
31  G_REPORT_STRM_PURPOSE CONSTANT VARCHAR2(30) := 'REPORT';
32 -- srsreeni - Bug#5699923 - Added - End
33 ------------------------------------------------------------------------------------
34 -- GLOBAL EXCEPTION
35 ------------------------------------------------------------------------------------
36   G_EXCEPTION_HALT_VALIDATION             EXCEPTION;
37   G_EXCEPTION_STOP_VALIDATION             EXCEPTION;
38   G_API_TYPE                CONSTANT  VARCHAR2(4) := '_PVT';
39   G_API_VERSION             CONSTANT  NUMBER      := 1.0;
40   G_SCOPE                   CONSTANT  VARCHAR2(4) := '_PVT';
41 
42   --Added by kthiruva for Bug 5161075 on 19-Apr-2006
43   G_FALSE                   CONSTANT VARCHAR2(10) := 'false';
44  -- GLOBAL COMPOSITE DATA TYPE
45   --Added for debug_logging
46   L_DEBUG_ENABLED VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
47 
48 -----------------------------------------------------------------------------------
49 -- Start of Bug#2757289 modification bakuchib
50   TYPE stub_rec_type IS RECORD (
51        number_of_periods   NUMBER := 1,
52        advance_or_arrears  OKL_SIF_FEES_V.advance_or_arrears%TYPE := OKL_CREATE_STREAMS_PVT.G_ARREARS,
53        period              OKL_SIF_FEES_V.period%TYPE := 'T');
54   g_stub_rec               stub_rec_type;
55   SUBTYPE pdtv_rec_type           IS okl_setupproducts_pvt.pdtv_rec_type;
56   SUBTYPE ast_dtl_tbl_type        IS okl_activate_asset_pvt.ast_dtl_tbl_type;
57   SUBTYPE pdt_param_rec_type      IS okl_setupproducts_pvt.pdt_parameters_rec_type;
58   SUBTYPE asbv_tbl_type           IS okl_subsidy_process_pvt.asbv_tbl_type;
59 -- End of Bug#2757289 modification  bakuchib
60 -----------------------------------------------------------------------------------
61  --Added by kthiruva for the Variable Rate Build
62  --Record type declaration for storing the date and amount all the paydowns on a contract
63  TYPE ppd_rec_type IS RECORD (
64     paydown_date          DATE,
65     paydown_amount        NUMBER,
66     curr_paydown          VARCHAR2(1),
67     diff_to_next          NUMBER,
68     ppd_processed_yn      VARCHAR2(1)
69     );
70 
71  TYPE ppd_tbl_type is TABLE OF ppd_rec_Type INDEX BY BINARY_INTEGER;
72  l_ppd_tbl                  ppd_tbl_type;
73  l_ppd_count                NUMBER := 0;
74  g_paydown_date             DATE;
75  l_days_in_period           NUMBER;
76  l_first_batch              VARCHAR2(1) := 'N';
77  l_periods_after_ppd        NUMBER;
78  l_period_end_date          DATE;
79  l_adjusting_stub_date      DATE;
80  l_days_between             NUMBER;
81  --End of Changes
82 
83   --Added by kthiruva on 27-Mar-2006 for logging purposes
84   --Start of Changes
85   PROCEDURE WRITE_TO_LOG(p_message	IN	VARCHAR2)
86   IS
87   BEGIN
88       IF L_DEBUG_ENABLED = 'Y' then
89         fnd_file.put_line (fnd_file.log,p_message);
90       END IF;
91   END WRITE_TO_LOG;
92 
93 
94 --Debuging procedures
95   PROCEDURE print(p_proc_name     IN VARCHAR2,
96                   p_message       IN VARCHAR2,
97 	              x_return_status IN VARCHAR2) IS
98   BEGIN
99      NULL;
100 --    dbms_output.put_line( G_PKG_NAME||':'||p_proc_name||':'||p_message||':'||x_return_status );
101   END;
102   PROCEDURE print(p_proc_name     IN VARCHAR2,
103                   p_message       IN VARCHAR2) IS
104   BEGIN
105      print(p_proc_name, p_message, 'S' );
106   END;
107     -- Added new procedure for get the streams for reporting and original product
108 PROCEDURE get_primary_pricing_name
109 (
110  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
111  p_sty_id                IN okl_strm_type_b.ID%TYPE,
112  x_return_status		OUT NOCOPY VARCHAR2,
113  x_primary_pricing_name	OUT NOCOPY OKL_ST_GEN_TMPT_LNS.PRICING_NAME%TYPE
114 )
115 
116 IS
117 
118 CURSOR cntrct_csr (l_khr_id NUMBER)IS
119 SELECT pdt_id, start_date
120 FROM     okl_k_headers_full_v
121 WHERE id = l_khr_id;
122 
123 CURSOR pry_prc_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
124 SELECT PRICING_NAME
125 FROM   OKL_STRM_TMPT_LINES_UV STL
126 WHERE STL.PRIMARY_YN = 'Y'
127 AND STL.PDT_ID = l_pdt_id
128 AND    (STL.START_DATE <= l_contract_start_date)
129 AND    (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
130 AND	   PRIMARY_STY_ID =   p_sty_id;
131 
132 CURSOR sty_csr IS
133 SELECT CODE
134 FROM okl_strm_type_b
135 WHERE id = p_sty_id;
136 
137 
138   l_primary_pricing_name	VARCHAR2(30);
139 
140   l_contract_start_date 	DATE;
141   l_product_id 		  	    NUMBER;
142   l_sty_code okl_strm_type_b.code%TYPE;
143 
144 BEGIN
145 
146   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
147 
148 
149   OPEN cntrct_csr (p_khr_id);
150   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
151   CLOSE cntrct_csr;
152 
153 
154 
155   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
156     OPEN pry_prc_csr (l_product_id, l_contract_start_date);
157     FETCH pry_prc_csr INTO l_primary_pricing_name;
158       IF  pry_prc_csr%NOTFOUND THEN
159 
160 -- Bug 4064253
161 
162       	  OPEN sty_csr;
163       	  FETCH sty_csr INTO l_sty_code;
164       	  CLOSE sty_csr;
165 
166 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
167                           p_msg_name     => 'OKL_PRY_STY_CODE_NOT_FOUND',
168                           p_token1        => 'STY_CODE',
169                           p_token1_value  => l_sty_code);
170             RAISE Okl_Api.G_EXCEPTION_ERROR;
171 	 END IF;
172      CLOSE pry_prc_csr;
173 
174   ELSE
175 
176 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
177                           p_msg_name     => 'OKL_NO_PDT_FOUND');
178             RAISE Okl_Api.G_EXCEPTION_ERROR;
179 
180   END IF;
181 
182   x_primary_pricing_name := l_primary_pricing_name;
183 
184   EXCEPTION
185   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
186      IF cntrct_csr%ISOPEN THEN
187 	    CLOSE cntrct_csr;
188 	 END IF;
189      IF pry_prc_csr%ISOPEN THEN
190 	    CLOSE pry_prc_csr;
191 	 END IF;
192      x_return_status := Okl_Api.G_RET_STS_ERROR ;
193 
194   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
195      IF cntrct_csr%ISOPEN THEN
196 	    CLOSE cntrct_csr;
197 	 END IF;
198      IF pry_prc_csr%ISOPEN THEN
199 	    CLOSE pry_prc_csr;
200 	 END IF;
201      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
202 
203   WHEN OTHERS THEN
204      IF cntrct_csr%ISOPEN THEN
205 	    CLOSE cntrct_csr;
206 	 END IF;
207      IF pry_prc_csr%ISOPEN THEN
208 	    CLOSE pry_prc_csr;
209 	 END IF;
210      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
211 
212 
213 END get_primary_pricing_name;
214 
215 PROCEDURE get_dependent_pricing_name
216 (
217  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
218  p_sty_id                IN okl_strm_type_b.ID%TYPE,
219  x_return_status		OUT NOCOPY VARCHAR2,
220  x_dependent_pricing_name	OUT NOCOPY OKL_ST_GEN_TMPT_LNS.PRICING_NAME%TYPE
221 )
222 
223 IS
224 
225 CURSOR cntrct_csr (l_khr_id NUMBER)IS
226 SELECT pdt_id, start_date
227 FROM     okl_k_headers_full_v
228 WHERE id = l_khr_id;
229 
230 CURSOR pry_prc_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
231 SELECT PRICING_NAME
232 FROM   OKL_STRM_TMPT_LINES_UV STL
233 WHERE STL.PRIMARY_YN = 'N'
234 AND STL.PDT_ID = l_pdt_id
235 AND    (STL.START_DATE <= l_contract_start_date)
236 AND    (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
237 AND	   DEPENDENT_STY_ID =   p_sty_id
238 AND PRICING_NAME IS NOT NULL;
239 
240 CURSOR sty_csr IS
241 SELECT CODE
242 FROM okl_strm_type_b
243 WHERE id = p_sty_id;
244 
245   l_dependent_pricing_name	VARCHAR2(40);
246 
247   l_contract_start_date 	DATE;
248   l_product_id 		  	    NUMBER;
249   l_sty_code okl_strm_type_b.code%TYPE;
250 
251 BEGIN
252 
253   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
254 
255 
256   OPEN cntrct_csr (p_khr_id);
257   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
258   CLOSE cntrct_csr;
259 
260 
261 
262   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
263     --okl_debug_pub.logmessage('Product Id1'||l_product_id);
264 	--okl_debug_pub.logmessage('Contract Strat Date1'||l_contract_start_date);
265     OPEN pry_prc_csr (l_product_id, l_contract_start_date);
266     FETCH pry_prc_csr INTO l_dependent_pricing_name;
267       IF  pry_prc_csr%NOTFOUND THEN
268 
269 -- Bug 4064253
270       	  OPEN sty_csr;
271       	  FETCH sty_csr INTO l_sty_code;
272       	  CLOSE sty_csr;
273 
274 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
275                           p_msg_name     => 'OKL_DEP_STY_CODE_NOT_FOUND',
276                           p_token1        => 'STY_CODE',
277                           p_token1_value  => l_sty_code);
278 
279             RAISE Okl_Api.G_EXCEPTION_ERROR;
280 	 END IF;
281      CLOSE pry_prc_csr;
282 
283   ELSE
284 
285 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
286                           p_msg_name     => 'OKL_NO_PDT_FOUND');
287             RAISE Okl_Api.G_EXCEPTION_ERROR;
288 
289   END IF;
290 
291   x_dependent_pricing_name := l_dependent_pricing_name;
292 
293   EXCEPTION
294   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
295      IF cntrct_csr%ISOPEN THEN
296 	    CLOSE cntrct_csr;
297 	 END IF;
298      IF pry_prc_csr%ISOPEN THEN
299 	    CLOSE pry_prc_csr;
300 	 END IF;
301      x_return_status := Okl_Api.G_RET_STS_ERROR ;
302 
303   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
304      IF cntrct_csr%ISOPEN THEN
305 	    CLOSE cntrct_csr;
306 	 END IF;
307      IF pry_prc_csr%ISOPEN THEN
308 	    CLOSE pry_prc_csr;
309 	 END IF;
310      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
311 
312   WHEN OTHERS THEN
313      IF cntrct_csr%ISOPEN THEN
314 	    CLOSE cntrct_csr;
315 	 END IF;
316      IF pry_prc_csr%ISOPEN THEN
317 	    CLOSE pry_prc_csr;
318 	 END IF;
319      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
320       --okl_debug_pub.logmessage(SQLERRM);
321 
322 END get_dependent_pricing_name;
323 
324 PROCEDURE get_primary_stream_type
325 (
326  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
327  p_primary_sty_purpose   IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
328  x_return_status		OUT NOCOPY VARCHAR2,
329  x_primary_sty_id 		OUT NOCOPY strm_rec_type
330 )
331 
332 IS
333 
334 CURSOR cntrct_csr (l_khr_id NUMBER)IS
335 SELECT pdt_id, start_date
336 FROM     okl_k_headers_full_v
337 WHERE id = l_khr_id;
338 
339 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
340 SELECT PRIMARY_STY_ID, PRICING_NAME
341 FROM   OKL_STRM_TMPT_LINES_UV STL
342 WHERE STL.PRIMARY_YN = 'Y'
343 AND STL.PDT_ID = l_pdt_id
344 AND    (STL.START_DATE <= l_contract_start_date)
345 AND    (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
346 AND	   PRIMARY_STY_PURPOSE =   p_primary_sty_purpose
347 AND PRICING_NAME IS NOT NULL;
348 
349   l_product_id 			  					NUMBER;
350   l_strm_rec_type strm_rec_type;
351   l_contract_start_date 	DATE;
352   l_primary_sty_id 			  	NUMBER;
353   l_primary_sty_purpose_meaning VARCHAR2(4000);
354 
355 BEGIN
356 
357   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
358 
359 
360   OPEN cntrct_csr (p_khr_id);
361   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
362   CLOSE cntrct_csr;
363 
364 
365 
366   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
367     OPEN pry_sty_csr (l_product_id, l_contract_start_date);
368     FETCH pry_sty_csr INTO l_strm_rec_type;
369       IF  pry_sty_csr%NOTFOUND THEN
370 
371 -- Bug 4064253
372 
373                   l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
374                   			('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
375 
376 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
377                           p_msg_name     => 'OKL_NO_PRY_STY_FOUND',
378                           p_token1        => 'PURPOSE',
379                           p_token1_value  => l_primary_sty_purpose_meaning);
380 
381             RAISE Okl_Api.G_EXCEPTION_ERROR;
382 	 END IF;
383      CLOSE pry_sty_csr;
384 
385   ELSE
386 
387 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
388                           p_msg_name     => 'OKL_NO_PDT_FOUND');
389             RAISE Okl_Api.G_EXCEPTION_ERROR;
390 
391   END IF;
392 
393   x_primary_sty_id := l_strm_rec_type;
394 
395   EXCEPTION
396   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
397      IF cntrct_csr%ISOPEN THEN
398 	    CLOSE cntrct_csr;
399 	 END IF;
400      IF pry_sty_csr%ISOPEN THEN
401 	    CLOSE pry_sty_csr;
402 	 END IF;
403      x_return_status := Okl_Api.G_RET_STS_ERROR ;
404 
405   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
406      IF cntrct_csr%ISOPEN THEN
407 	    CLOSE cntrct_csr;
408 	 END IF;
409      IF pry_sty_csr%ISOPEN THEN
410 	    CLOSE pry_sty_csr;
411 	 END IF;
412      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
413 
414   WHEN OTHERS THEN
415      IF cntrct_csr%ISOPEN THEN
416 	    CLOSE cntrct_csr;
417 	 END IF;
418      IF pry_sty_csr%ISOPEN THEN
419 	    CLOSE pry_sty_csr;
420 	 END IF;
421      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
422 
423 
424 END get_primary_stream_type;
425 
426  PROCEDURE get_primary_no_prc_stream_type
427 (
428  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
429  p_pdt_id  		   	     IN okl_k_headers_full_v.pdt_id%TYPE,
430  p_primary_sty_purpose   IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
431  x_return_status		OUT NOCOPY VARCHAR2,
432  x_primary_sty_id 		OUT NOCOPY strm_rec_type
433 )
434 
435 
436 
437 IS
438 
439 CURSOR cntrct_csr (l_khr_id NUMBER)IS
440 SELECT pdt_id, start_date
441 FROM     okl_k_headers_full_v
442 WHERE id = l_khr_id;
443 
444 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
445 SELECT PRIMARY_STY_ID,PRICING_NAME
446 FROM   OKL_STRM_TMPT_LINES_UV STL
447 WHERE STL.PRIMARY_YN = 'Y'
448 AND STL.PDT_ID = l_pdt_id
449 AND    (STL.START_DATE <= l_contract_start_date)
450 AND    (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
451 AND	   PRIMARY_STY_PURPOSE =   p_primary_sty_purpose;
452 
453   l_product_id 			  					NUMBER;
454   l_strm_rec_type strm_rec_type;
455   l_contract_start_date 	DATE;
456   l_primary_sty_id 			  	NUMBER;
457   l_primary_sty_purpose_meaning VARCHAR2(4000);
458 
459 BEGIN
460 
461   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
462 
463 
464   OPEN cntrct_csr (p_khr_id);
465   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
466   CLOSE cntrct_csr;
467 
468 
469 
470   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
471 
472     OPEN pry_sty_csr (l_product_id, l_contract_start_date);
473     FETCH pry_sty_csr INTO l_strm_rec_type;
474       IF  pry_sty_csr%NOTFOUND THEN
475 
476 -- Bug 4064253
477 
478                   l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
479                   			('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
480 
481 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
482                           p_msg_name     => 'OKL_NO_PRY_STY_FOUND',
483                           p_token1        => 'PURPOSE',
484                           p_token1_value  => l_primary_sty_purpose_meaning);
485 
486             RAISE Okl_Api.G_EXCEPTION_ERROR;
487 	 END IF;
488      CLOSE pry_sty_csr;
489 
490   ELSE
491 
492 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
493                           p_msg_name     => 'OKL_NO_PDT_FOUND');
494             RAISE Okl_Api.G_EXCEPTION_ERROR;
495 
496   END IF;
497 
498   x_primary_sty_id := l_strm_rec_type;
499 
500   EXCEPTION
501   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
502      IF cntrct_csr%ISOPEN THEN
503 	    CLOSE cntrct_csr;
504 	 END IF;
505      IF pry_sty_csr%ISOPEN THEN
506 	    CLOSE pry_sty_csr;
507 	 END IF;
508      x_return_status := Okl_Api.G_RET_STS_ERROR ;
509 
510   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
511      IF cntrct_csr%ISOPEN THEN
512 	    CLOSE cntrct_csr;
513 	 END IF;
514      IF pry_sty_csr%ISOPEN THEN
515 	    CLOSE pry_sty_csr;
516 	 END IF;
517      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
518 
519   WHEN OTHERS THEN
520      IF cntrct_csr%ISOPEN THEN
521 	    CLOSE cntrct_csr;
522 	 END IF;
523      IF pry_sty_csr%ISOPEN THEN
524 	    CLOSE pry_sty_csr;
525 	 END IF;
526      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
527 
528 
529 END get_primary_no_prc_stream_type;
530 
531 PROCEDURE get_dep_no_prc_stream_type
532 (
533  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
534  p_pdt_id                IN okl_k_headers_full_v.pdt_id%TYPE,
535  p_primary_sty_purpose   IN okl_strm_type_b.stream_type_purpose%TYPE,
536  p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
537  x_return_status		 OUT NOCOPY VARCHAR2,
538  x_dependent_sty_id 	 OUT NOCOPY strm_rec_type
539 )
540 
541 IS
542 
543 CURSOR cntrct_csr (l_khr_id NUMBER)IS
544 SELECT pdt_id, start_date
545 FROM     okl_k_headers_full_v
546 WHERE id = l_khr_id;
547 
548 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
549 SELECT DEPENDENT_STY_ID,PRICING_NAME
550 FROM   OKL_STRM_TMPT_LINES_UV STL
551 WHERE PRIMARY_YN = 'N'
552 AND STL.PDT_ID = l_product_id
553 AND (STL.START_DATE <= l_contract_start_date)
554 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
555 AND	PRIMARY_STY_PURPOSE =   p_primary_sty_purpose
556 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose;
557 
558   l_product_id 				NUMBER;
559   l_strm_rec_type strm_rec_type;
560   l_contract_start_date 	DATE;
561   l_dependetn_sty_id		NUMBER;
562   rec_count                 NUMBER := 0;
563   l_dep_sty_purpose_meaning VARCHAR2(4000);
564 
565 BEGIN
566 
567   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
568 
569 --  DBMS_OUTPUT.PUT_LINE('l_p_khr_id -  ' || p_khr_id);
570 
571   OPEN cntrct_csr (p_khr_id);
572   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
573   CLOSE cntrct_csr;
574 
575 --  DBMS_OUTPUT.PUT_LINE('l_pdt_id -  ' || l_product_id);
576 --  DBMS_OUTPUT.PUT_LINE('l_start_date -  ' || l_contract_start_date);
577 
578   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
579 
580     OPEN dep_sty_csr (p_pdt_id, l_contract_start_date);
581     FETCH dep_sty_csr INTO l_strm_rec_type;
582       IF  dep_sty_csr%NOTFOUND THEN
583 
584 -- Bug 4064253
585 
586             l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
587             			('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
588 
589 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
590                           p_msg_name     => 'OKL_NO_DEP_STY_FOUND',
591                           p_token1        => 'PURPOSE',
592                           p_token1_value  => l_dep_sty_purpose_meaning);
593 
594             RAISE Okl_Api.G_EXCEPTION_ERROR;
595       END IF;
596     CLOSE dep_sty_csr;
597 
598   ELSE
599 
600 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
601                           p_msg_name     => 'OKL_NO_PDT_FOUND');
602             RAISE Okl_Api.G_EXCEPTION_ERROR;
603 
604   END IF;
605 
606   x_dependent_sty_id := l_strm_rec_type;
607 
608   EXCEPTION
609   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
610      IF cntrct_csr%ISOPEN THEN
611 	    CLOSE cntrct_csr;
612 	 END IF;
613      IF dep_sty_csr%ISOPEN THEN
614 	    CLOSE dep_sty_csr;
615 	 END IF;
616      x_return_status := Okl_Api.G_RET_STS_ERROR ;
617 
618   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
619      IF cntrct_csr%ISOPEN THEN
620 	    CLOSE cntrct_csr;
621 	 END IF;
622      IF dep_sty_csr%ISOPEN THEN
623 	    CLOSE dep_sty_csr;
624 	 END IF;
625      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
626 
627   WHEN OTHERS THEN
628      IF cntrct_csr%ISOPEN THEN
629 	    CLOSE cntrct_csr;
630 	 END IF;
631      IF dep_sty_csr%ISOPEN THEN
632 	    CLOSE dep_sty_csr;
633 	 END IF;
634      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
635 
636 END get_dep_no_prc_stream_type;
637 
638 PROCEDURE get_dep_no_prc_stream_type
639 (
640  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
641  p_pdt_id                IN okl_k_headers_full_v.pdt_id%TYPE,
642  p_primary_sty_id        IN okl_strm_type_b.id%TYPE,
643  p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
644  x_return_status		 OUT NOCOPY VARCHAR2,
645  x_dependent_sty_id 	 OUT NOCOPY strm_rec_type
646 )
647 
648 IS
649 
650 CURSOR cntrct_csr (l_khr_id NUMBER)IS
651 SELECT pdt_id, start_date
652 FROM     okl_k_headers_full_v
653 WHERE id = l_khr_id;
654 
655 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
656 SELECT DEPENDENT_STY_ID,PRICING_NAME
657 FROM   OKL_STRM_TMPT_LINES_UV STL
658 WHERE PRIMARY_YN = 'N'
659 AND STL.PDT_ID = l_product_id
660 AND (STL.START_DATE <= l_contract_start_date)
661 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
662 AND	PRIMARY_STY_ID =   p_primary_sty_id
663 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose;
664 
665   l_product_id 				NUMBER;
666   l_strm_rec_type strm_rec_type;
667   l_contract_start_date 	DATE;
668   l_dependetn_sty_id		NUMBER;
669   rec_count                 NUMBER := 0;
670   l_dep_sty_purpose_meaning VARCHAR2(4000);
671 
672 BEGIN
673 
674   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
675 
676 --  DBMS_OUTPUT.PUT_LINE('l_p_khr_id -  ' || p_khr_id);
677 
678   OPEN cntrct_csr (p_khr_id);
679   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
680   CLOSE cntrct_csr;
681 
682 --  DBMS_OUTPUT.PUT_LINE('l_pdt_id -  ' || l_product_id);
683 --  DBMS_OUTPUT.PUT_LINE('l_start_date -  ' || l_contract_start_date);
684 
685   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
686 
687     OPEN dep_sty_csr (p_pdt_id, l_contract_start_date);
688     FETCH dep_sty_csr INTO l_strm_rec_type;
689       IF  dep_sty_csr%NOTFOUND THEN
690 
691 -- Bug 4064253
692 
693             l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
694             			('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
695 
696 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
697                           p_msg_name     => 'OKL_NO_DEP_STY_FOUND',
698                           p_token1        => 'PURPOSE',
699                           p_token1_value  => l_dep_sty_purpose_meaning);
700 
701             RAISE Okl_Api.G_EXCEPTION_ERROR;
702       END IF;
703     CLOSE dep_sty_csr;
704 
705   ELSE
706 
707 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
708                           p_msg_name     => 'OKL_NO_PDT_FOUND');
709             RAISE Okl_Api.G_EXCEPTION_ERROR;
710 
711   END IF;
712 
713   x_dependent_sty_id := l_strm_rec_type;
714 
715   EXCEPTION
716   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
717      IF cntrct_csr%ISOPEN THEN
718 	    CLOSE cntrct_csr;
719 	 END IF;
720      IF dep_sty_csr%ISOPEN THEN
721 	    CLOSE dep_sty_csr;
722 	 END IF;
723      x_return_status := Okl_Api.G_RET_STS_ERROR ;
724 
725   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
726      IF cntrct_csr%ISOPEN THEN
727 	    CLOSE cntrct_csr;
728 	 END IF;
729      IF dep_sty_csr%ISOPEN THEN
730 	    CLOSE dep_sty_csr;
731 	 END IF;
732      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
733 
734   WHEN OTHERS THEN
735      IF cntrct_csr%ISOPEN THEN
736 	    CLOSE cntrct_csr;
737 	 END IF;
738      IF dep_sty_csr%ISOPEN THEN
739 	    CLOSE dep_sty_csr;
740 	 END IF;
741      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
742 
743 END get_dep_no_prc_stream_type;
744 
745 PROCEDURE get_dep_no_prc_stream_type
746 (
747  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
748  p_primary_sty_id   IN okl_strm_type_b.id%TYPE,
749  p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
750  x_return_status		 OUT NOCOPY VARCHAR2,
751  x_dependent_sty_id 	 OUT NOCOPY strm_rec_type
752 )
753 
754 IS
755 
756 CURSOR cntrct_csr (l_khr_id NUMBER)IS
757 SELECT pdt_id, start_date
758 FROM     okl_k_headers_full_v
759 WHERE id = l_khr_id;
760 
761 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
762 SELECT DEPENDENT_STY_ID,PRICING_NAME
763 FROM   OKL_STRM_TMPT_LINES_UV STL
764 WHERE PRIMARY_YN = 'N'
765 AND STL.PDT_ID = l_product_id
766 AND (STL.START_DATE <= l_contract_start_date)
767 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
768 AND	PRIMARY_STY_ID =   p_primary_sty_id
769 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose;
770 
771   l_product_id 				NUMBER;
772   l_strm_rec_type strm_rec_type;
773   l_contract_start_date 	DATE;
774   l_dependetn_sty_id		NUMBER;
775   rec_count                 NUMBER := 0;
776   l_dep_sty_purpose_meaning VARCHAR2(4000);
777 
778 BEGIN
779 
780   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
781 
782 --  DBMS_OUTPUT.PUT_LINE('l_p_khr_id -  ' || p_khr_id);
783 
784   OPEN cntrct_csr (p_khr_id);
785   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
786   CLOSE cntrct_csr;
787 
788 --  DBMS_OUTPUT.PUT_LINE('l_pdt_id -  ' || l_product_id);
789 --  DBMS_OUTPUT.PUT_LINE('l_start_date -  ' || l_contract_start_date);
790 
791   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
792 
793     OPEN dep_sty_csr (l_product_id, l_contract_start_date);
794     FETCH dep_sty_csr INTO l_strm_rec_type;
795       IF  dep_sty_csr%NOTFOUND THEN
796 
797 -- Bug 4064253
798 
799             l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
800             			('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
801 
802 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
803                           p_msg_name     => 'OKL_NO_DEP_STY_FOUND',
804                           p_token1        => 'PURPOSE',
805                           p_token1_value  => l_dep_sty_purpose_meaning);
806 
807             RAISE Okl_Api.G_EXCEPTION_ERROR;
808       END IF;
809     CLOSE dep_sty_csr;
810 
811   ELSE
812 
813 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
814                           p_msg_name     => 'OKL_NO_PDT_FOUND');
815             RAISE Okl_Api.G_EXCEPTION_ERROR;
816 
817   END IF;
818 
819   x_dependent_sty_id := l_strm_rec_type;
820 
821   EXCEPTION
822   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
823      IF cntrct_csr%ISOPEN THEN
824 	    CLOSE cntrct_csr;
825 	 END IF;
826      IF dep_sty_csr%ISOPEN THEN
827 	    CLOSE dep_sty_csr;
828 	 END IF;
829      x_return_status := Okl_Api.G_RET_STS_ERROR ;
830 
831   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
832      IF cntrct_csr%ISOPEN THEN
833 	    CLOSE cntrct_csr;
834 	 END IF;
835      IF dep_sty_csr%ISOPEN THEN
836 	    CLOSE dep_sty_csr;
837 	 END IF;
838      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
839 
840   WHEN OTHERS THEN
841      IF cntrct_csr%ISOPEN THEN
842 	    CLOSE cntrct_csr;
843 	 END IF;
844      IF dep_sty_csr%ISOPEN THEN
845 	    CLOSE dep_sty_csr;
846 	 END IF;
847      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
848 
849 END get_dep_no_prc_stream_type;
850 
851 
852  PROCEDURE get_primary_stream_type
853 (
854  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
855  p_pdt_id  		   	     IN okl_k_headers_full_v.pdt_id%TYPE,
856  p_primary_sty_purpose   IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
857  x_return_status		OUT NOCOPY VARCHAR2,
858  x_primary_sty_id 		OUT NOCOPY strm_rec_type
859 )
860 
861 
862 
863 IS
864 
865 CURSOR cntrct_csr (l_khr_id NUMBER)IS
866 SELECT pdt_id, start_date
867 FROM     okl_k_headers_full_v
868 WHERE id = l_khr_id;
869 
870 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
871 SELECT PRIMARY_STY_ID,PRICING_NAME
872 FROM   OKL_STRM_TMPT_LINES_UV STL
873 WHERE STL.PRIMARY_YN = 'Y'
874 AND STL.PDT_ID = l_pdt_id
875 AND    (STL.START_DATE <= l_contract_start_date)
876 AND    (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
877 AND	   PRIMARY_STY_PURPOSE =   p_primary_sty_purpose
878 AND PRICING_NAME IS NOT NULL;
879 
880   l_product_id 			  					NUMBER;
881   l_strm_rec_type strm_rec_type;
882   l_contract_start_date 	DATE;
883   l_primary_sty_id 			  	NUMBER;
884   l_primary_sty_purpose_meaning VARCHAR2(4000);
885 
886 BEGIN
887 
888   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
889 
890 
891   OPEN cntrct_csr (p_khr_id);
892   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
893   CLOSE cntrct_csr;
894 
895 
896 
897   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
898 
899     OPEN pry_sty_csr (l_product_id, l_contract_start_date);
900     FETCH pry_sty_csr INTO l_strm_rec_type;
901       IF  pry_sty_csr%NOTFOUND THEN
902 
903 -- Bug 4064253
904 
905                   l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
906                   			('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
907 
908 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
909                           p_msg_name     => 'OKL_NO_PRY_STY_FOUND',
910                           p_token1        => 'PURPOSE',
911                           p_token1_value  => l_primary_sty_purpose_meaning);
912 
913             RAISE Okl_Api.G_EXCEPTION_ERROR;
914 	 END IF;
915      CLOSE pry_sty_csr;
916 
917   ELSE
918 
919 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
920                           p_msg_name     => 'OKL_NO_PDT_FOUND');
921             RAISE Okl_Api.G_EXCEPTION_ERROR;
922 
923   END IF;
924 
925   x_primary_sty_id := l_strm_rec_type;
926 
927   EXCEPTION
928   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
929      IF cntrct_csr%ISOPEN THEN
930 	    CLOSE cntrct_csr;
931 	 END IF;
932      IF pry_sty_csr%ISOPEN THEN
933 	    CLOSE pry_sty_csr;
934 	 END IF;
935      x_return_status := Okl_Api.G_RET_STS_ERROR ;
936 
937   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
938      IF cntrct_csr%ISOPEN THEN
939 	    CLOSE cntrct_csr;
940 	 END IF;
941      IF pry_sty_csr%ISOPEN THEN
942 	    CLOSE pry_sty_csr;
943 	 END IF;
944      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
945 
946   WHEN OTHERS THEN
947      IF cntrct_csr%ISOPEN THEN
948 	    CLOSE cntrct_csr;
949 	 END IF;
950      IF pry_sty_csr%ISOPEN THEN
951 	    CLOSE pry_sty_csr;
952 	 END IF;
953      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
954 
955 
956 END get_primary_stream_type;
957 
958 PROCEDURE get_primary_stream_types
959 (
960  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
961  p_primary_sty_purpose   IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
962  x_return_status		OUT NOCOPY VARCHAR2,
963  x_primary_sty_id 		OUT NOCOPY okl_strm_type_id_tbl_type
964 )
965 
966 IS
967 
968 CURSOR cntrct_csr (l_khr_id NUMBER)IS
969 SELECT pdt_id, start_date
970 FROM     okl_k_headers_full_v
971 WHERE id = l_khr_id;
972 
973 CURSOR pry_sty_csr (l_pdt_id NUMBER, l_contract_start_date DATE) IS
974 SELECT PRIMARY_STY_ID,PRICING_NAME
975 FROM   OKL_STRM_TMPT_LINES_UV STL
976 WHERE STL.PRIMARY_YN = 'Y'
977 AND STL.PDT_ID = l_pdt_id
978 AND    (STL.START_DATE <= l_contract_start_date)
979 AND    (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
980 AND	   PRIMARY_STY_PURPOSE =   p_primary_sty_purpose
981 AND PRICING_NAME IS NOT NULL;
982 
983   l_product_id 			  	NUMBER;
984   l_contract_start_date 	DATE;
985   l_primary_sty_id 			NUMBER;
986   rec_count                     INTEGER := 0;
987   l_primary_sty_purpose_meaning VARCHAR2(4000);
988 
989 BEGIN
990 
991   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
992   x_primary_sty_id.delete;
993 
994 
995   OPEN cntrct_csr (p_khr_id);
996   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
997   CLOSE cntrct_csr;
998 
999   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1000 
1001     FOR l_pry_sty_csr_rec in pry_sty_csr(l_product_id, l_contract_start_date) LOOP
1002 	   rec_count := rec_count + 1;
1003 	   x_primary_sty_id(rec_count).id := l_pry_sty_csr_rec.primary_sty_id;
1004 	   x_primary_sty_id(rec_count).pricing_name := l_pry_sty_csr_rec.pricing_name;
1005 	END LOOP;
1006 
1007 -- Bug 4064253
1008     IF  (x_primary_sty_id.count = 0) THEN
1009         l_primary_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1010                   			('OKL_STREAM_TYPE_PURPOSE', p_primary_sty_purpose);
1011 
1012 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1013                           p_msg_name     => 'OKL_NO_PRY_STY_FOUND',
1014                           p_token1        => 'PURPOSE',
1015                           p_token1_value  => l_primary_sty_purpose_meaning);
1016 
1017             RAISE Okl_Api.G_EXCEPTION_ERROR;
1018 	 END IF;
1019   ELSE
1020 
1021 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1022                           p_msg_name     => 'OKL_NO_PDT_FOUND');
1023             RAISE Okl_Api.G_EXCEPTION_ERROR;
1024 
1025   END IF;
1026 
1027  -- x_primary_sty_id := l_primary_sty_id;
1028 
1029   EXCEPTION
1030   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1031      IF cntrct_csr%ISOPEN THEN
1032 	    CLOSE cntrct_csr;
1033 	 END IF;
1034      IF pry_sty_csr%ISOPEN THEN
1035 	    CLOSE pry_sty_csr;
1036 	 END IF;
1037      x_return_status := Okl_Api.G_RET_STS_ERROR ;
1038 
1039   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1040      IF cntrct_csr%ISOPEN THEN
1041 	    CLOSE cntrct_csr;
1042 	 END IF;
1043      IF pry_sty_csr%ISOPEN THEN
1044 	    CLOSE pry_sty_csr;
1045 	 END IF;
1046      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1047 
1048   WHEN OTHERS THEN
1049      IF cntrct_csr%ISOPEN THEN
1050 	    CLOSE cntrct_csr;
1051 	 END IF;
1052      IF pry_sty_csr%ISOPEN THEN
1053 	    CLOSE pry_sty_csr;
1054 	 END IF;
1055      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1056 
1057 
1058 END get_primary_stream_types;
1059 
1060 PROCEDURE get_dependent_stream_type
1061 (
1062  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
1063  p_primary_sty_purpose   IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
1064  p_dependent_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
1065  x_return_status		 OUT NOCOPY VARCHAR2,
1066  x_dependent_sty_id 	 OUT NOCOPY strm_rec_type
1067 )
1068 
1069 IS
1070 
1071 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1072 SELECT pdt_id, start_date
1073 FROM     okl_k_headers_full_v
1074 WHERE id = l_khr_id;
1075 
1076 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1077 SELECT DEPENDENT_STY_ID,PRICING_NAME
1078 FROM   OKL_STRM_TMPT_LINES_UV STL
1079 WHERE PRIMARY_YN = 'N'
1080 AND STL.PDT_ID = l_product_id
1081 AND    (STL.START_DATE <= l_contract_start_date)
1082 AND   (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1083 AND	   PRIMARY_STY_PURPOSE =   p_primary_sty_purpose
1084 AND	   DEPENDENT_STY_PURPOSE =   p_dependent_sty_purpose
1085 AND PRICING_NAME IS NOT NULL;
1086 
1087   l_product_id 			  					NUMBER;
1088   l_strm_rec_type strm_rec_type;
1089   l_contract_start_date 	DATE;
1090   l_dependetn_sty_id 			  					NUMBER;
1091   l_dep_sty_purpose_meaning VARCHAR2(4000);
1092 BEGIN
1093 
1094   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
1095 
1096 --  DBMS_OUTPUT.PUT_LINE('l_p_khr_id -  ' || p_khr_id);
1097 
1098   OPEN cntrct_csr (p_khr_id);
1099   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1100   CLOSE cntrct_csr;
1101 
1102 --  DBMS_OUTPUT.PUT_LINE('l_pdt_id -  ' || l_product_id);
1103 --  DBMS_OUTPUT.PUT_LINE('l_start_date -  ' || l_contract_start_date);
1104 
1105   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1106     OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1107     FETCH dep_sty_csr INTO l_strm_rec_type;
1108       IF  dep_sty_csr%NOTFOUND THEN
1109 
1110 -- Bug 4064253
1111 
1112             l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1113             			('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1114 
1115 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1116                           p_msg_name     => 'OKL_NO_DEP_STY_FOUND',
1117                           p_token1        => 'PURPOSE',
1118                           p_token1_value  => l_dep_sty_purpose_meaning);
1119 
1120             RAISE Okl_Api.G_EXCEPTION_ERROR;
1121 	 END IF;
1122      CLOSE dep_sty_csr;
1123 
1124   ELSE
1125 
1126 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1127                           p_msg_name     => 'OKL_NO_PDT_FOUND');
1128             RAISE Okl_Api.G_EXCEPTION_ERROR;
1129 
1130   END IF;
1131 
1132   x_dependent_sty_id := l_strm_rec_type;
1133 
1134   EXCEPTION
1135   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1136      IF cntrct_csr%ISOPEN THEN
1137 	    CLOSE cntrct_csr;
1138 	 END IF;
1139      IF dep_sty_csr%ISOPEN THEN
1140 	    CLOSE dep_sty_csr;
1141 	 END IF;
1142      x_return_status := Okl_Api.G_RET_STS_ERROR ;
1143 
1144   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1145      IF cntrct_csr%ISOPEN THEN
1146 	    CLOSE cntrct_csr;
1147 	 END IF;
1148      IF dep_sty_csr%ISOPEN THEN
1149 	    CLOSE dep_sty_csr;
1150 	 END IF;
1151      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1152 
1153   WHEN OTHERS THEN
1154      IF cntrct_csr%ISOPEN THEN
1155 	    CLOSE cntrct_csr;
1156 	 END IF;
1157      IF dep_sty_csr%ISOPEN THEN
1158 	    CLOSE dep_sty_csr;
1159 	 END IF;
1160      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1161 
1162 END get_dependent_stream_type;
1163 
1164 PROCEDURE get_dependent_stream_type
1165 (
1166  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
1167  p_primary_sty_id        IN okl_strm_type_b.ID%TYPE,
1168  p_dependent_sty_purpose IN okl_strm_type_b.STREAM_TYPE_PURPOSE%TYPE,
1169  x_return_status		 OUT NOCOPY VARCHAR2,
1170  x_dependent_sty_id 	 OUT NOCOPY strm_rec_type
1171 )
1172 
1173 IS
1174 
1175 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1176 SELECT pdt_id, start_date
1177 FROM     okl_k_headers_full_v
1178 WHERE id = l_khr_id;
1179 
1180 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1181 SELECT DEPENDENT_STY_ID,PRICING_NAME
1182 FROM   OKL_STRM_TMPT_LINES_UV STL
1183 WHERE PRIMARY_YN = 'N'
1184 AND STL.PDT_ID = l_product_id
1185 AND    (STL.START_DATE <= l_contract_start_date)
1186 AND   (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1187 AND	   PRIMARY_STY_ID =   p_primary_sty_id
1188 AND	   DEPENDENT_STY_PURPOSE =   p_dependent_sty_purpose
1189 AND PRICING_NAME IS NOT NULL;
1190 
1191   l_product_id 			  					NUMBER;
1192   l_strm_rec_type strm_rec_type;
1193   l_contract_start_date 	DATE;
1194   l_dependetn_sty_id 			  					NUMBER;
1195   l_dep_sty_purpose_meaning VARCHAR2(4000);
1196 BEGIN
1197 
1198   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
1199 
1200 --  DBMS_OUTPUT.PUT_LINE('l_p_khr_id -  ' || p_khr_id);
1201 
1202   OPEN cntrct_csr (p_khr_id);
1203   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1204   CLOSE cntrct_csr;
1205 
1206 --  DBMS_OUTPUT.PUT_LINE('l_pdt_id -  ' || l_product_id);
1207 --  DBMS_OUTPUT.PUT_LINE('l_start_date -  ' || l_contract_start_date);
1208 
1209   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1210     OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1211     FETCH dep_sty_csr INTO l_strm_rec_type;
1212       IF  dep_sty_csr%NOTFOUND THEN
1213 
1214 -- Bug 4064253
1215 
1216             l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1217             			('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1218 
1219 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1220                           p_msg_name     => 'OKL_NO_DEP_STY_FOUND',
1221                           p_token1        => 'PURPOSE',
1222                           p_token1_value  => l_dep_sty_purpose_meaning);
1223 
1224             RAISE Okl_Api.G_EXCEPTION_ERROR;
1225 	 END IF;
1226      CLOSE dep_sty_csr;
1227 
1228   ELSE
1229 
1230 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1231                           p_msg_name     => 'OKL_NO_PDT_FOUND');
1232             RAISE Okl_Api.G_EXCEPTION_ERROR;
1233 
1234   END IF;
1235 
1236   x_dependent_sty_id := l_strm_rec_type;
1237 
1238   EXCEPTION
1239   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1240      IF cntrct_csr%ISOPEN THEN
1241 	    CLOSE cntrct_csr;
1242 	 END IF;
1243      IF dep_sty_csr%ISOPEN THEN
1244 	    CLOSE dep_sty_csr;
1245 	 END IF;
1246      x_return_status := Okl_Api.G_RET_STS_ERROR ;
1247 
1248   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1249      IF cntrct_csr%ISOPEN THEN
1250 	    CLOSE cntrct_csr;
1251 	 END IF;
1252      IF dep_sty_csr%ISOPEN THEN
1253 	    CLOSE dep_sty_csr;
1254 	 END IF;
1255      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1256 
1257   WHEN OTHERS THEN
1258      IF cntrct_csr%ISOPEN THEN
1259 	    CLOSE cntrct_csr;
1260 	 END IF;
1261      IF dep_sty_csr%ISOPEN THEN
1262 	    CLOSE dep_sty_csr;
1263 	 END IF;
1264      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1265 
1266 END get_dependent_stream_type;
1267 PROCEDURE get_dependent_stream_types
1268 (
1269  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
1270  p_primary_sty_id        IN okl_strm_type_b.ID%TYPE,
1271  x_return_status		 OUT NOCOPY VARCHAR2,
1272  x_dependent_sty_id 	 OUT NOCOPY okl_strm_type_id_tbl_type
1273 )
1274 
1275 IS
1276 
1277 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1278 SELECT pdt_id, start_date
1279 FROM     okl_k_headers_full_v
1280 WHERE id = l_khr_id;
1281 
1282 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1283 SELECT DEPENDENT_STY_ID,PRICING_NAME
1284 FROM   OKL_STRM_TMPT_LINES_UV STL
1285 WHERE PRIMARY_YN = 'N'
1286 AND STL.PDT_ID = l_product_id
1287 AND    (STL.START_DATE <= l_contract_start_date)
1288 AND   (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1289 AND	   PRIMARY_STY_ID =   p_primary_sty_id
1290 AND PRICING_NAME IS NOT NULL;
1291 
1292   l_product_id 			  					NUMBER;
1293   l_contract_start_date 	DATE;
1294   l_dependetn_sty_id 			  					NUMBER;
1295   rec_count                 NUMBER:= 0 ;
1296   l_dep_sty_purpose_meaning VARCHAR2(4000);
1297 
1298 BEGIN
1299 
1300   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
1301 
1302 --  DBMS_OUTPUT.PUT_LINE('l_p_khr_id -  ' || p_khr_id);
1303 
1304   OPEN cntrct_csr (p_khr_id);
1305   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1306   CLOSE cntrct_csr;
1307 
1308 --  DBMS_OUTPUT.PUT_LINE('l_pdt_id -  ' || l_product_id);
1309 --  DBMS_OUTPUT.PUT_LINE('l_start_date -  ' || l_contract_start_date);
1310 
1311   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1312     FOR l_dep_sty_csr_rec in dep_sty_csr(l_product_id, l_contract_start_date) LOOP
1313 	   rec_count := rec_count + 1;
1314 	   x_dependent_sty_id(rec_count).id := l_dep_sty_csr_rec.dependent_sty_id;
1315 	   x_dependent_sty_id(rec_count).pricing_name := l_dep_sty_csr_rec.pricing_name;
1316 	END LOOP;
1317 
1318 -- Bug 4064253
1319 /*
1320     IF  (x_dependent_sty_id.count = 0) THEN
1321        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1322                            p_msg_name     => 'OKL_NO_PDT_FOUND');,
1323 
1324        RAISE Okl_Api.G_EXCEPTION_ERROR;
1325 	END IF;
1326 */
1327 
1328   ELSE
1329 	 Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1330                          p_msg_name     => 'OKL_NO_PDT_FOUND');
1331      RAISE Okl_Api.G_EXCEPTION_ERROR;
1332   END IF;
1333 
1334   EXCEPTION
1335   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1336      IF cntrct_csr%ISOPEN THEN
1337 	    CLOSE cntrct_csr;
1338 	 END IF;
1339      IF dep_sty_csr%ISOPEN THEN
1340 	    CLOSE dep_sty_csr;
1341 	 END IF;
1342      x_return_status := Okl_Api.G_RET_STS_ERROR ;
1343 
1344   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1345      IF cntrct_csr%ISOPEN THEN
1346 	    CLOSE cntrct_csr;
1347 	 END IF;
1348      IF dep_sty_csr%ISOPEN THEN
1349 	    CLOSE dep_sty_csr;
1350 	 END IF;
1351      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1352 
1353   WHEN OTHERS THEN
1354      IF cntrct_csr%ISOPEN THEN
1355 	    CLOSE cntrct_csr;
1356 	 END IF;
1357      IF dep_sty_csr%ISOPEN THEN
1358 	    CLOSE dep_sty_csr;
1359 	 END IF;
1360      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1361 
1362 END get_dependent_stream_types;
1363 
1364 
1365 
1366 PROCEDURE get_dependent_stream_types
1367 (
1368  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
1369  p_pdt_id                IN okl_k_headers_full_v.pdt_id%TYPE,
1370  p_primary_sty_id        IN okl_strm_type_b.ID%TYPE,
1371  x_return_status		 OUT NOCOPY VARCHAR2,
1372  x_dependent_sty_id 	 OUT NOCOPY okl_strm_type_id_tbl_type
1373 )
1374 
1375 IS
1376 
1377 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1378 SELECT pdt_id, start_date
1379 FROM     okl_k_headers_full_v
1380 WHERE id = l_khr_id;
1381 
1382 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1383 SELECT DEPENDENT_STY_ID, PRICING_NAME
1384 FROM   OKL_STRM_TMPT_LINES_UV STL
1385 WHERE PRIMARY_YN = 'N'
1386 AND STL.PDT_ID = l_product_id
1387 AND    (STL.START_DATE <= l_contract_start_date)
1388 AND   (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1389 AND	   PRIMARY_STY_ID =   p_primary_sty_id
1390 AND PRICING_NAME IS NOT NULL;
1391 
1392   l_product_id 			  					NUMBER;
1393   l_contract_start_date 	DATE;
1394   l_dependetn_sty_id 			  					NUMBER;
1395   rec_count                 NUMBER := 0 ;
1396   l_dep_sty_purpose_meaning VARCHAR2(4000);
1397 
1398 BEGIN
1399 
1400   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
1401 
1402 --  DBMS_OUTPUT.PUT_LINE('l_p_khr_id -  ' || p_khr_id);
1403 
1404   OPEN cntrct_csr (p_khr_id);
1405   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1406   CLOSE cntrct_csr;
1407 
1408 --  DBMS_OUTPUT.PUT_LINE('l_pdt_id -  ' || l_product_id);
1409 --  DBMS_OUTPUT.PUT_LINE('l_start_date -  ' || l_contract_start_date);
1410 
1411   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1412 
1413     FOR l_dep_sty_csr_rec in dep_sty_csr(p_pdt_id, l_contract_start_date) LOOP
1414 	   rec_count := rec_count + 1;
1415 	   x_dependent_sty_id(rec_count).id := l_dep_sty_csr_rec.dependent_sty_id;
1416 	   x_dependent_sty_id(rec_count).pricing_name := l_dep_sty_csr_rec.pricing_name;
1417 	END LOOP;
1418 
1419 -- Bug 4064253
1420 /*
1421     IF  (x_primary_sty_id.count = 0) THEN
1422        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1423                            p_msg_name     => 'OKL_NO_PDT_FOUND');
1424        RAISE Okl_Api.G_EXCEPTION_ERROR;
1425    END IF;
1426 */
1427 
1428 
1429   ELSE
1430 	 Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1431                          p_msg_name     => 'OKL_NO_PDT_FOUND');
1432      RAISE Okl_Api.G_EXCEPTION_ERROR;
1433   END IF;
1434 
1435   EXCEPTION
1436   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1437      IF cntrct_csr%ISOPEN THEN
1438 	    CLOSE cntrct_csr;
1439 	 END IF;
1440      IF dep_sty_csr%ISOPEN THEN
1441 	    CLOSE dep_sty_csr;
1442 	 END IF;
1443      x_return_status := Okl_Api.G_RET_STS_ERROR ;
1444 
1445   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1446      IF cntrct_csr%ISOPEN THEN
1447 	    CLOSE cntrct_csr;
1448 	 END IF;
1449      IF dep_sty_csr%ISOPEN THEN
1450 	    CLOSE dep_sty_csr;
1451 	 END IF;
1452      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1453 
1454   WHEN OTHERS THEN
1455      IF cntrct_csr%ISOPEN THEN
1456 	    CLOSE cntrct_csr;
1457 	 END IF;
1458      IF dep_sty_csr%ISOPEN THEN
1459 	    CLOSE dep_sty_csr;
1460 	 END IF;
1461      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1462 
1463 END get_dependent_stream_types;
1464 
1465 PROCEDURE get_dependent_stream_type
1466 (
1467  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
1468  p_pdt_id                IN okl_k_headers_full_v.pdt_id%TYPE,
1469  p_primary_sty_id        IN okl_strm_type_b.ID%TYPE,
1470  p_dependent_sty_purpose IN okl_strm_type_b.stream_type_purpose%TYPE,
1471  x_return_status		 OUT NOCOPY VARCHAR2,
1472  x_dependent_sty_id 	 OUT NOCOPY strm_rec_type
1473 )
1474 
1475 IS
1476 
1477 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1478 SELECT pdt_id, start_date
1479 FROM     okl_k_headers_full_v
1480 WHERE id = l_khr_id;
1481 
1482 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1483 SELECT DEPENDENT_STY_ID,PRICING_NAME
1484 FROM   OKL_STRM_TMPT_LINES_UV STL
1485 WHERE PRIMARY_YN = 'N'
1486 AND STL.PDT_ID = l_product_id
1487 AND (STL.START_DATE <= l_contract_start_date)
1488 AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1489 AND	PRIMARY_STY_ID =   p_primary_sty_id
1490 AND DEPENDENT_STY_PURPOSE = p_dependent_sty_purpose
1491 AND PRICING_NAME IS NOT NULL;
1492 
1493   l_product_id 				NUMBER;
1494   l_strm_rec_type strm_rec_type;
1495   l_contract_start_date 	DATE;
1496   l_dependetn_sty_id		NUMBER;
1497   rec_count                 NUMBER := 0;
1498   l_dep_sty_purpose_meaning VARCHAR2(4000);
1499 
1500 BEGIN
1501 
1502   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
1503 
1504 --  DBMS_OUTPUT.PUT_LINE('l_p_khr_id -  ' || p_khr_id);
1505 
1506   OPEN cntrct_csr (p_khr_id);
1507   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1508   CLOSE cntrct_csr;
1509 
1510 --  DBMS_OUTPUT.PUT_LINE('l_pdt_id -  ' || l_product_id);
1511 --  DBMS_OUTPUT.PUT_LINE('l_start_date -  ' || l_contract_start_date);
1512 
1513   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1514 
1515     OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1516     FETCH dep_sty_csr INTO l_strm_rec_type;
1517       IF  dep_sty_csr%NOTFOUND THEN
1518 
1519 -- Bug 4064253
1520 
1521             l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1522             			('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1523 
1524 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1525                           p_msg_name     => 'OKL_NO_DEP_STY_FOUND',
1526                           p_token1        => 'PURPOSE',
1527                           p_token1_value  => l_dep_sty_purpose_meaning);
1528 
1529             RAISE Okl_Api.G_EXCEPTION_ERROR;
1530       END IF;
1531     CLOSE dep_sty_csr;
1532 
1533   ELSE
1534 
1535 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1536                           p_msg_name     => 'OKL_NO_PDT_FOUND');
1537             RAISE Okl_Api.G_EXCEPTION_ERROR;
1538 
1539   END IF;
1540 
1541   x_dependent_sty_id := l_strm_rec_type;
1542 
1543   EXCEPTION
1544   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1545      IF cntrct_csr%ISOPEN THEN
1546 	    CLOSE cntrct_csr;
1547 	 END IF;
1548      IF dep_sty_csr%ISOPEN THEN
1549 	    CLOSE dep_sty_csr;
1550 	 END IF;
1551      x_return_status := Okl_Api.G_RET_STS_ERROR ;
1552 
1553   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1554      IF cntrct_csr%ISOPEN THEN
1555 	    CLOSE cntrct_csr;
1556 	 END IF;
1557      IF dep_sty_csr%ISOPEN THEN
1558 	    CLOSE dep_sty_csr;
1559 	 END IF;
1560      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1561 
1562   WHEN OTHERS THEN
1563      IF cntrct_csr%ISOPEN THEN
1564 	    CLOSE cntrct_csr;
1565 	 END IF;
1566      IF dep_sty_csr%ISOPEN THEN
1567 	    CLOSE dep_sty_csr;
1568 	 END IF;
1569      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1570 
1571 END get_dependent_stream_type;
1572 
1573 PROCEDURE get_dependent_stream_type
1574 (
1575  p_khr_id  		   	     IN okl_k_headers_full_v.id%TYPE,
1576  p_pdt_id                IN okl_k_headers_full_v.pdt_id%TYPE,
1577  p_primary_sty_purpose       IN okl_strm_type_b.stream_type_purpose%TYPE,
1578  p_dependent_sty_purpose     IN okl_strm_type_b.stream_type_purpose%TYPE,
1579  x_return_status		 OUT NOCOPY VARCHAR2,
1580  x_dependent_sty_id 	 OUT NOCOPY strm_rec_type
1581 )
1582 
1583 IS
1584 
1585 CURSOR cntrct_csr (l_khr_id NUMBER)IS
1586 SELECT pdt_id, start_date
1587 FROM     okl_k_headers_full_v
1588 WHERE id = l_khr_id;
1589 
1590 CURSOR dep_sty_csr (l_product_id NUMBER, l_contract_start_date DATE) IS
1591 SELECT DEPENDENT_STY_ID,PRICING_NAME
1592 FROM   OKL_STRM_TMPT_LINES_UV STL
1593 WHERE PRIMARY_YN = 'N'
1594 AND STL.PDT_ID = l_product_id
1595 AND    (STL.START_DATE <= l_contract_start_date)
1596 AND   (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
1597 AND	   PRIMARY_STY_PURPOSE =   p_primary_sty_purpose
1598 AND	   DEPENDENT_STY_PURPOSE =   p_dependent_sty_purpose
1599 AND PRICING_NAME IS NOT NULL;
1600 
1601   l_product_id 				NUMBER;
1602   l_strm_rec_type strm_rec_type;
1603   l_contract_start_date 	DATE;
1604   l_dependetn_sty_id		NUMBER;
1605   rec_count                 NUMBER;
1606   l_dep_sty_purpose_meaning VARCHAR2(4000);
1607 
1608 BEGIN
1609 
1610   x_return_status         := Okl_Api.G_RET_STS_SUCCESS;
1611 
1612 --  DBMS_OUTPUT.PUT_LINE('l_p_khr_id -  ' || p_khr_id);
1613 
1614   OPEN cntrct_csr (p_khr_id);
1615   FETCH cntrct_csr INTO l_product_id, l_contract_start_date;
1616   CLOSE cntrct_csr;
1617 
1618 --  DBMS_OUTPUT.PUT_LINE('l_pdt_id -  ' || l_product_id);
1619 --  DBMS_OUTPUT.PUT_LINE('l_start_date -  ' || l_contract_start_date);
1620 
1621   IF (l_product_id IS NOT NULL) AND (l_contract_start_date IS NOT NULL) THEN
1622 
1623     OPEN dep_sty_csr (l_product_id, l_contract_start_date);
1624     FETCH dep_sty_csr INTO l_strm_rec_type;
1625       IF  dep_sty_csr%NOTFOUND THEN
1626 -- Bug 4064253
1627 
1628             l_dep_sty_purpose_meaning := OKL_ACCOUNTING_UTIL.GET_LOOKUP_MEANING
1629             			('OKL_STREAM_TYPE_PURPOSE', p_dependent_sty_purpose);
1630 
1631 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1632                           p_msg_name     => 'OKL_NO_DEP_STY_FOUND',
1633                           p_token1        => 'PURPOSE',
1634                           p_token1_value  => l_dep_sty_purpose_meaning);
1635 
1636             RAISE Okl_Api.G_EXCEPTION_ERROR;
1637       END IF;
1638     CLOSE dep_sty_csr;
1639 
1640   ELSE
1641 
1642 	        Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
1643                           p_msg_name     => 'OKL_NO_PDT_FOUND');
1644             RAISE Okl_Api.G_EXCEPTION_ERROR;
1645 
1646   END IF;
1647 
1648   x_dependent_sty_id := l_strm_rec_type;
1649 
1650   EXCEPTION
1651   WHEN Okl_Api.G_EXCEPTION_ERROR THEN
1652      IF cntrct_csr%ISOPEN THEN
1653 	    CLOSE cntrct_csr;
1654 	 END IF;
1655      IF dep_sty_csr%ISOPEN THEN
1656 	    CLOSE dep_sty_csr;
1657 	 END IF;
1658      x_return_status := Okl_Api.G_RET_STS_ERROR ;
1659 
1660   WHEN Okl_Api.G_EXCEPTION_UNEXPECTED_ERROR THEN
1661      IF cntrct_csr%ISOPEN THEN
1662 	    CLOSE cntrct_csr;
1663 	 END IF;
1664      IF dep_sty_csr%ISOPEN THEN
1665 	    CLOSE dep_sty_csr;
1666 	 END IF;
1667      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1668 
1669   WHEN OTHERS THEN
1670      IF cntrct_csr%ISOPEN THEN
1671 	    CLOSE cntrct_csr;
1672 	 END IF;
1673      IF dep_sty_csr%ISOPEN THEN
1674 	    CLOSE dep_sty_csr;
1675 	 END IF;
1676      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
1677 
1678 END get_dependent_stream_type;
1679 
1680 -- End code for new procedures of stream type
1681 
1682 -- gboomina BUG#4508077 changes start
1683      -- procedure to update the rvi_amount and delete the primary stream
1684      PROCEDURE update_rvi_amount(p_api_version     IN  NUMBER,
1685                                  p_init_msg_list   IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
1686                                  p_chr_id          IN  NUMBER,
1687                                  p_purpose         IN  VARCHAR2,
1688                                  x_return_status   OUT NOCOPY VARCHAR2,
1689                                  x_msg_count       OUT NOCOPY NUMBER,
1690                                  x_msg_data        OUT NOCOPY VARCHAR2)
1691      IS
1692        -- cursor to fetch the abosrbed fee line with purpose as RVI
1693        CURSOR rvi_fee_csr IS
1694          SELECT KLE.ID ID
1695          FROM OKL_K_LINES KLE, OKC_K_LINES_B CLE, OKC_LINE_STYLES_B LSE
1696          WHERE CLE.CHR_ID = p_chr_id
1697          AND CLE.DNZ_CHR_ID = p_chr_id
1698          AND CLE.ID = KLE.ID
1699          AND CLE.LSE_ID = LSE.ID
1700          AND LSE.LTY_CODE = 'FEE'
1701          AND KLE.FEE_PURPOSE_CODE = 'RVI'
1702          AND KLE.FEE_TYPE = 'ABSORBED';
1703        -- cursor to fetch the fee line details
1704        CURSOR get_fee_dtls_csr(p_line_id NUMBER) IS
1705          SELECT LINE_ID, ITEM_ID, ITEM_OBJECT1_ID1, ITEM_OBJECT1_ID2, LINE_START_DATE, LINE_END_DATE, LINE_AMOUNT
1706          FROM okl_k_fee_lines_uv
1707          WHERE LINE_ID = p_line_id;
1708        -- cursor to fetch the stream element amount
1709        CURSOR get_strmele_csr(p_khr_id NUMBER, p_strm_id NUMBER, p_sty_id NUMBER) IS
1710          SELECT ele.amount
1711          FROM okl_strm_elements ele,
1712               okl_streams str
1713          WHERE ele.stm_id = p_strm_id
1714          AND str.khr_id = p_khr_id
1715          AND str.sty_id = p_sty_id
1716          AND upper(str.say_code) = 'CURR'
1717          AND upper(str.active_yn) = 'Y';
1718 
1719        l_line_id NUMBER;
1720        lx_fee_types_rec okl_maintain_fee_pvt.fee_types_rec_type;
1721        l_fee_types_rec okl_maintain_fee_pvt.fee_types_rec_type;
1722        l_rvi_amount NUMBER;
1723        l_strm_id NUMBER;
1724        l_stmv_rec okl_streams_pub.stmv_rec_type;
1725        l_api_name VARCHAR2(255) := 'update_rvi_amount';
1726      BEGIN
1727        x_return_status := OKL_API.G_RET_STS_SUCCESS;
1728        -- Call start_activity to create savepoint, check compatibility
1729        -- and initialize message list
1730        x_return_status := OKL_API.START_ACTIVITY (
1731                                   l_api_name
1732                                   ,p_init_msg_list
1733                                   ,'_PVT'
1734                                   ,x_return_status);
1735        -- Check if activity started successfully
1736        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1737           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1738        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1739           RAISE OKL_API.G_EXCEPTION_ERROR;
1740        END IF;
1741        l_line_id := NULL;
1742        l_rvi_amount := NULL;
1743        -- get the abosrbed fee line with purpose code as RVI
1744        FOR l_rvi_fee_rec IN rvi_fee_csr
1745        LOOP
1746          l_line_id := l_rvi_fee_rec.ID;
1747        END LOOP;
1748        -- if abosrbed fee line with purpose code as RVI exists
1749        -- populate the fee record
1750        IF l_line_id IS NOT NULL THEN
1751           FOR l_fee_dtls_rec IN get_fee_dtls_csr(p_line_id => l_line_id)
1752           LOOP
1753             l_fee_types_rec.line_id     := l_line_id;
1754             l_fee_types_rec.dnz_chr_id  := p_chr_id;
1755             l_fee_types_rec.fee_type    := 'ABSORBED';
1756             l_fee_types_rec.item_id     := l_fee_dtls_rec.item_id;
1757             l_fee_types_rec.item_id1    := l_fee_dtls_rec.item_object1_id1;
1758             l_fee_types_rec.item_id2    := l_fee_dtls_rec.item_object1_id2;
1759             l_fee_types_rec.effective_from := l_fee_dtls_rec.line_start_date;
1760             l_fee_types_rec.effective_to   := l_fee_dtls_rec.line_end_date;
1761           END LOOP;
1762           -- fetch the residual value insurance amount
1763           -- get the stream header id
1764           FOR l_strm_rec IN strm_csr(p_chr_id,l_line_id,'CURR',p_purpose,l_fee_types_rec.item_id1)
1765           LOOP
1766             l_stmv_rec.id := l_strm_rec.strm_id;
1767             l_strm_id     := l_strm_rec.strm_id;
1768           END LOOP;
1769 
1770           IF l_strm_id IS NOT NULL THEN
1771             -- update the line amount only when the API is called for main product
1772             IF p_purpose = 'ORIGIN' THEN
1773               -- get the amount
1774               FOR l_strmele_rec IN get_strmele_csr(p_chr_id, l_strm_id, l_fee_types_rec.item_id1)
1775               LOOP
1776                 l_rvi_amount := l_strmele_rec.amount;
1777               END LOOP;
1778               -- update the fee line amount when the stream element returns a value
1779               IF l_rvi_amount IS NOT NULL THEN
1780                 l_fee_types_rec.amount    := l_rvi_amount;
1781                 -- update the fee line
1782                 okl_maintain_fee_pvt.update_fee_type(p_api_version   => p_api_version,
1783                                                      p_init_msg_list => OKL_API.G_FALSE,
1784                                                      x_return_status => x_return_status,
1785                                                      x_msg_count     => x_msg_count,
1786                                                      x_msg_data      => x_msg_data,
1787                                                      p_fee_types_rec => l_fee_types_rec,
1788                                                      x_fee_types_rec => lx_fee_types_rec);
1789                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1790                   RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1791                 ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1792                   RAISE OKL_API.G_EXCEPTION_ERROR;
1793                 END IF;
1794               END IF; -- end of stream element check
1795             END IF; -- end of main product check
1796             -- delete the primary stream for all products
1797             okl_streams_pub.delete_streams(p_api_version => p_api_version,
1798                                            p_init_msg_list => OKL_API.G_FALSE,
1799                                            x_return_status => x_return_status,
1800                                            x_msg_count => x_msg_count,
1801                                            x_msg_data => x_msg_data,
1802                                            p_stmv_rec => l_stmv_rec);
1803             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1804                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1805             ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1806                RAISE OKL_API.G_EXCEPTION_ERROR;
1807             END IF;
1808           END IF; -- end of strm id not null check
1809        END IF; -- end of line id not null check
1810        OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data  => x_msg_data);
1811      EXCEPTION
1812            WHEN OKL_API.G_EXCEPTION_ERROR THEN
1813                    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1814                            p_api_name  => l_api_name,
1815                            p_pkg_name  => g_pkg_name,
1816                            p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
1817                            x_msg_count => x_msg_count,
1818                            x_msg_data  => x_msg_data,
1819                            p_api_type  => g_api_type);
1820 
1821         WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
1822                    x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1823                            p_api_name  => l_api_name,
1824                            p_pkg_name  => g_pkg_name,
1825                            p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
1826                            x_msg_count => x_msg_count,
1827                            x_msg_data  => x_msg_data,
1828                            p_api_type  => g_api_type);
1829 
1830            WHEN OTHERS then
1831           x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1832                            p_api_name  => l_api_name,
1833                            p_pkg_name  => g_pkg_name,
1834                            p_exc_name  => 'OTHERS',
1835                            x_msg_count => x_msg_count,
1836                            x_msg_data  => x_msg_data,
1837                            p_api_type  => g_api_type);
1838      END update_rvi_amount;
1839 -- gboomina BUG#4508077 changes end
1840 
1841 --Debuging procedures
1842 -------------------------------------------------------------------------------------------------
1843 -- Start of Commnets
1844 -- Badrinath Kuchibholta
1845 -- Procedure Name       : yield_request
1846 -- Description          : Making of Yield requests
1847 -- Business Rules       : Yields are requested from the pricing engine as needed
1848 -- Parameters           : out yield pl/sql table of recors
1849 -- Version              :
1850 -- End of Commnets
1851 -------------------------------------------------------------------------------------------------
1852   FUNCTION yield_request(x_csm_yields_tbl OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type)
1853   RETURN VARCHAR2 IS
1854     l_prog_name                     VARCHAR2(100) := 'YIELD_REQUEST';
1855     x_return_status                 VARCHAR2(3)   := okl_api.g_ret_sts_success;
1856     l_csm_yields_tbl                okl_create_streams_pub.csm_yields_tbl_type;
1857   BEGIN
1858     -- Pre tax IRR with subsidy
1859     l_csm_yields_tbl(1).yield_name        := 'PTIRR';
1860     l_csm_yields_tbl(1).method            := 'Internal rate-of-return';
1861     l_csm_yields_tbl(1).array_type        := 'PTCF';
1862     l_csm_yields_tbl(1).compounded_method := 'Periodic';
1863     l_csm_yields_tbl(1).nominal_yn        := 'Y';
1864     l_csm_yields_tbl(1).pre_tax_yn        := 'Y';
1865     l_csm_yields_tbl(1).siy_type          := okl_create_streams_pvt.g_siy_type_yield;
1866     -- After tax IRR with subsidy
1867     l_csm_yields_tbl(2).yield_name        := 'NAT';
1868     l_csm_yields_tbl(2).method            := 'Internal rate-of-return';
1869     l_csm_yields_tbl(2).array_type        := 'ATCF';
1870     l_csm_yields_tbl(2).compounded_method := 'Periodic';
1871     l_csm_yields_tbl(2).nominal_yn        := 'Y';
1872     l_csm_yields_tbl(2).pre_tax_yn        := 'Y';
1873     l_csm_yields_tbl(2).siy_type          := okl_create_streams_pvt.g_siy_type_yield;
1874      -- Booking yield with subsidy
1875     l_csm_yields_tbl(3).yield_name        := 'Booking';
1876     l_csm_yields_tbl(3).method            := 'FAS 13 accounting';
1877     l_csm_yields_tbl(3).array_type        := 'Full-term rate and subsidies';
1878     l_csm_yields_tbl(3).compounded_method := 'Periodic';
1879     l_csm_yields_tbl(3).nominal_yn        := 'Y';
1880     l_csm_yields_tbl(3).pre_tax_yn        := 'Y';
1881     l_csm_yields_tbl(3).siy_type          := okl_create_streams_pvt.g_siy_type_yield;
1882     -- Pre tax IRR without subsidy
1883     l_csm_yields_tbl(4).yield_name        := 'PTIRRWS';
1884     l_csm_yields_tbl(4).method            := 'Internal rate-of-return';
1885     l_csm_yields_tbl(4).array_type        := 'PTCF w/o subsidies';
1886     l_csm_yields_tbl(4).compounded_method := 'Periodic';
1887     l_csm_yields_tbl(4).nominal_yn        := 'Y';
1888     l_csm_yields_tbl(4).pre_tax_yn        := 'Y';
1889     l_csm_yields_tbl(4).siy_type          := okl_create_streams_pvt.g_siy_type_yield;
1890     -- After tax IRR without subsidy
1891     l_csm_yields_tbl(5).yield_name        := 'NATWS';
1892     l_csm_yields_tbl(5).method            := 'Internal rate-of-return';
1893     l_csm_yields_tbl(5).array_type        := 'ATCF w/o subsidies';
1894     l_csm_yields_tbl(5).compounded_method := 'Periodic';
1895     l_csm_yields_tbl(5).nominal_yn        := 'Y';
1896     l_csm_yields_tbl(5).pre_tax_yn        := 'N';
1897     l_csm_yields_tbl(5).siy_type          := okl_create_streams_pvt.g_siy_type_yield;
1898     -- Booking yield without subsidy
1899     l_csm_yields_tbl(6).yield_name        := 'BookingWS';
1900     l_csm_yields_tbl(6).method            := 'FAS 13 accounting';
1901     l_csm_yields_tbl(6).array_type        := 'Full-term rate';
1902     l_csm_yields_tbl(6).compounded_method := 'Periodic';
1903     l_csm_yields_tbl(6).nominal_yn        := 'Y';
1904     l_csm_yields_tbl(6).pre_tax_yn        := 'N';
1905     l_csm_yields_tbl(6).siy_type          := okl_create_streams_pvt.g_siy_type_yield;
1906     -- Assign output rec
1907     x_csm_yields_tbl := l_csm_yields_tbl;
1908     RETURN x_return_status;
1909   EXCEPTION
1910     WHEN OTHERS THEN
1911       okl_api.set_message (p_app_name     => G_APP_NAME,
1912                            p_msg_name     => G_DB_ERROR,
1913                            p_token1       => G_PROG_NAME_TOKEN,
1914                            p_token1_value => l_prog_name,
1915                            p_token2       => G_SQLCODE_TOKEN,
1916                            p_token2_value => sqlcode,
1917                            p_token3       => G_SQLERRM_TOKEN,
1918                            p_token3_value => sqlerrm);
1919       x_return_status := okl_api.g_ret_sts_error;
1920       RETURN x_return_status;
1921   END yield_request;
1922 --------------------------------------------------------------------------------
1923 -- Start modification 11i9 bakuchib
1924 -- Start modification Bug#3066346 bakuchib
1925 --------------------------------------------------------------------------------
1926 -- Start of Commnets
1927 -- Badrinath Kuchibholta
1928 -- Procedure Name       : validate_txd_tax_book
1929 -- Description          : Validate the Tax book for an asset number
1930 -- Business Rules       : If there is only a single tax book and it is not
1931 --                        designated as either Federal or State,
1932 --                        We assume it as Federal.
1933 --                        IF there are two tax books and neither is designated
1934 --                        as either Federal or State, We issue an error
1935 --                        during stream generation.
1936 -- Parameters           : p_asset_number
1937 -- Version              : 1.0
1938 -- History              : BAKUCHIB  29-JUL-2003 - 3066346 created
1939 --                      : BAKUCHIB  05-FEB-2004 - 3381853 Modified
1940 -- End of Commnets
1941 --------------------------------------------------------------------------------
1942   FUNCTION validate_txd_tax_book(p_asset_number       IN OKL_TXD_ASSETS_B.ASSET_NUMBER%TYPE,
1943                                  x_fed_only_tax_book  OUT NOCOPY OKL_TXD_ASSETS_B.TAX_BOOK%TYPE,
1944                                  x_fed_only           OUT NOCOPY VARCHAR2)
1945   RETURN VARCHAR2 IS
1946     l_prog_name                   VARCHAR2(100) := 'VAL_TXD_TAX_BOOK';
1947     g_process_error               EXCEPTION;
1948     G_NO_SETUP_TAX_BOOK  CONSTANT VARCHAR2(200) := 'OKL_LLP_TAX_BOOK_MAP';
1949     x_return_status               VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
1950     i                             NUMBER := 0;
1951     lv_tax_book                   OKL_TXD_ASSETS_B.TAX_BOOK%TYPE := NULL;
1952     -- Get the OKL_TXD_ASSETS_B info
1953     CURSOR l_txd_csr(p_asset_num VARCHAR2)
1954     IS
1955     SELECT tax_book
1956     FROM okl_txd_assets_v txd
1957     WHERE txd.asset_number = p_asset_num;
1958     -- Get the types of TAX BOOKS defined in the setup
1959     -- We get first for the Federal or state
1960     CURSOR l_txtrans_csr (p_book  fa_book_controls.book_type_code%TYPE)
1961     IS
1962     SELECT trns.value,
1963            books.book_type_code
1964     FROM okl_sgn_translations trns,
1965          fa_book_controls books
1966     WHERE trns.jtot_object1_code = 'FA_BOOK_CONTROLS'
1967     AND trns.object1_id1 = books.book_type_code
1968     AND books.book_type_code = p_book;
1969     TYPE tax_book_value_rec IS RECORD(
1970       tax_book           okl_txd_assets_b.tax_book%TYPE  := NULL ,
1971       value              okl_sgn_translations.value%TYPE := NULL);
1972     TYPE tax_book_value_tbl IS TABLE OF tax_book_value_rec
1973         INDEX BY BINARY_INTEGER;
1974     lt_tax_book_value_tbl tax_book_value_tbl;
1975   BEGIN
1976     -- We scan thru OKL_TXD_ASSETS_B for tax book
1977     FOR r_txd_csr IN l_txd_csr(p_asset_num => p_asset_number) LOOP
1978       OPEN  l_txtrans_csr(p_book  => r_txd_csr.tax_book);
1979       FETCH l_txtrans_csr INTO lt_tax_book_value_tbl(i).value,
1980                                lt_tax_book_value_tbl(i).tax_book;
1981       IF l_txtrans_csr%NOTFOUND THEN
1982         lt_tax_book_value_tbl(i).tax_book := r_txd_csr.tax_book;
1983       END IF;
1984       CLOSE l_txtrans_csr;
1985       i := i + 1;
1986     END LOOP;
1987     x_fed_only          := 'N';
1988     x_fed_only_tax_book := NULL;
1989     IF lt_tax_book_value_tbl.COUNT = 1 THEN
1990       IF lt_tax_book_value_tbl(lt_tax_book_value_tbl.FIRST).VALUE IS NULL THEN
1991         x_fed_only          := 'Y';
1992         x_fed_only_tax_book := lt_tax_book_value_tbl(lt_tax_book_value_tbl.FIRST).tax_book;
1993         RETURN x_return_status;
1994       END IF;
1995     ELSIF lt_tax_book_value_tbl.COUNT > 1 THEN
1996       FOR j IN lt_tax_book_value_tbl.FIRST..lt_tax_book_value_tbl.LAST LOOP
1997         EXIT WHEN(j = j + 1);
1998         IF lt_tax_book_value_tbl(j).VALUE IS NULL AND
1999            lt_tax_book_value_tbl(j+1).VALUE IS NULL THEN
2000           okl_api.set_message(p_app_name      => G_APP_NAME,
2001                               p_msg_name      => G_NO_SETUP_TAX_BOOK,
2002                               p_token1        => 'TAX_BOOK',
2003                               p_token1_value  => lt_tax_book_value_tbl(j).tax_book);
2004           x_return_status := OKL_API.G_RET_STS_ERROR;
2005           EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
2006         END IF;
2007       END LOOP;
2008     ELSE
2009       x_fed_only          := 'N';
2010       x_fed_only_tax_book := NULL;
2011       RETURN x_return_status;
2012     END IF;
2013     IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
2014       RAISE g_process_error;
2015     END IF;
2016     RETURN x_return_status;
2017   EXCEPTION
2018     WHEN g_process_error THEN
2019       IF l_txtrans_csr%ISOPEN THEN
2020         CLOSE l_txtrans_csr;
2021       END IF;
2022       IF l_txd_csr%ISOPEN THEN
2023         CLOSE l_txd_csr;
2024       END IF;
2025       x_return_status := OKL_API.G_RET_STS_ERROR;
2026       RETURN x_return_status;
2027     WHEN OTHERS THEN
2028       IF l_txtrans_csr%ISOPEN THEN
2029         CLOSE l_txtrans_csr;
2030       END IF;
2031       IF l_txd_csr%ISOPEN THEN
2032         CLOSE l_txd_csr;
2033       END IF;
2034       OKL_API.SET_MESSAGE (p_app_name     => G_APP_NAME,
2035                            p_msg_name     => G_DB_ERROR,
2036                            p_token1       => G_PROG_NAME_TOKEN,
2037                            p_token1_value => l_prog_name,
2038                            p_token2       => G_SQLCODE_TOKEN,
2039                            p_token2_value => sqlcode,
2040                            p_token3       => G_SQLERRM_TOKEN,
2041                            p_token3_value => sqlerrm);
2042       x_return_status := OKL_API.G_RET_STS_ERROR;
2043       RETURN x_return_status;
2044   END validate_txd_tax_book;
2045 -------------------------------------------------------------------------------------------------
2046 -- Start modification 11i10 bakuchib
2047 -- Start modification Bug#3447917 bakuchib
2048 --------------------------------------------------------------------------------
2049 -- Start of Commnets
2050 -- Badrinath Kuchibholta
2051 -- Function Name        : is_rep_pdt
2052 -- Description          : Validate if the original product has a reporting product
2053 -- Business Rules       : If there is a reporting product then we would generated
2054 --                        book depreciation streams for the reporting tax book.
2055 --                        and not generate federal depreciation streams or state
2056 --                        depreciation streams.
2057 -- Parameters           :
2058 -- Version              : 1.0
2059 -- History              : BAKUCHIB  20-FEB-2004 - 3447917 created
2060 -- End of Commnets
2061 --------------------------------------------------------------------------------
2062   -- bug 4194673 fixed by HKPATEL
2063   FUNCTION is_rep_pdt(--p_asset_number IN okl_txd_assets_b.asset_number%TYPE,
2064                       p_corp_book IN VARCHAR2,
2065                       x_mg_tax_yn    OUT NOCOPY VARCHAR2)
2066   RETURN VARCHAR2 IS
2067     l_prog_name                   VARCHAR2(100) := 'IS_REP_PDT';
2068     x_return_status               VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
2069     lv_mg_tax_yn                   VARCHAR2(3) := 'N';
2070 	/*
2071     CURSOR get_rep_tax_csr(p_asset_number okl_txd_assets_b.asset_number%TYPE)
2072     IS
2073     SELECT 'Y'
2074     FROM DUAL
2075     WHERE EXISTS (SELECT 'Y'
2076                   FROM okl_txd_assets_b txd
2077                   WHERE txd.asset_number = p_asset_number
2078                   AND txd.tax_book = fnd_profile.value('OKL_REPORTING_PDT_ASSET_BOOK'));
2079    */
2080    CURSOR get_rep_tax_csr(p_corp_book VARCHAR2)
2081    IS
2082    SELECT 'Y'
2083    FROM   fa_book_controls
2084    WHERE  book_class = 'TAX'
2085    AND    mass_copy_source_book = p_corp_book
2086    AND    book_type_code = OKL_SYSTEM_PARAMS_ALL_PUB.get_system_param_value(OKL_SYSTEM_PARAMS_ALL_PUB.G_RPT_PROD_BOOK_TYPE_CODE);
2087 
2088   BEGIN
2089     --OPEN  get_rep_tax_csr(p_asset_number => p_asset_number);
2090 	OPEN  get_rep_tax_csr(p_corp_book => p_corp_book);
2091     FETCH get_rep_tax_csr INTO lv_mg_tax_yn;
2092     CLOSE get_rep_tax_csr;
2093     x_mg_tax_yn := NVL(lv_mg_tax_yn,'N');
2094     RETURN x_return_status;
2095   EXCEPTION
2096     WHEN OTHERS THEN
2097       IF get_rep_tax_csr%ISOPEN THEN
2098         CLOSE get_rep_tax_csr;
2099       END IF;
2100       x_return_status := OKL_API.G_RET_STS_ERROR;
2101       RETURN x_return_status;
2102   END is_rep_pdt;
2103 -------------------------------------------------------------------------------------------------
2104 -- Start of Commnets
2105 -- Badrinath Kuchibholta
2106 -- Procedure Name       : execute_formula
2107 -- Description          : Execution of Formula Based on Line Status
2108 -- Business Rules       : Execution of the formula will be based on the line status
2109 --                        of the contract, presently we will be considering the TERMINATED
2110 --                        line to compute the forumla since the resultant value will be
2111 --                        included in yield calculations.
2112 -- Parameters           : Standard Parameters with p_khr_id and p_line_id
2113 -- Version              :
2114 -- End of Commnets
2115 -------------------------------------------------------------------------------------------------
2116   PROCEDURE execute_formula(p_api_version   IN  NUMBER,
2117                             p_init_msg_list IN  VARCHAR2,
2118                             x_return_status OUT NOCOPY VARCHAR2,
2119                             x_msg_count     OUT NOCOPY NUMBER,
2120                             x_msg_data      OUT NOCOPY VARCHAR2,
2121                             p_formula_name  IN  okl_formulae_v.name%TYPE,
2122                             p_contract_id   IN  okl_k_headers_v.id%TYPE,
2123                             p_line_id       IN  okl_k_lines_v.id%TYPE,
2124                             x_value         OUT NOCOPY NUMBER)
2125   IS
2126     l_api_name      CONSTANT VARCHAR2(30) := 'EXECUTE_FORMULA';
2127     lv_hdr_ter               VARCHAR2(3) := 'N';
2128     lv_lne_ter               VARCHAR2(3) := 'N';
2129     SUBTYPE ctxt_val_tbl_type IS
2130             okl_execute_formula_pvt.ctxt_val_tbl_type;
2131     l_additional_parameters  ctxt_val_tbl_type;
2132     -- To check if the chr_id has TERMINATED Line
2133     CURSOR l_hdr_ter_csr (p_chr_id NUMBER)
2134     IS
2135     SELECT 'Y'
2136     FROM dual
2137     WHERE EXISTS (SELECT 'Y'
2138                   FROM okc_k_lines_b cle,
2139                        okc_line_styles_b lse
2140                   WHERE cle.dnz_chr_id = p_chr_id
2141                   AND cle.lse_id = lse.id
2142                   AND cle.sts_code = 'TERMINATED'
2143                   AND lse.lty_code = 'FREE_FORM1');
2144     -- To check if the chr_id and line_id is a TERMINATED Line
2145     CURSOR l_lne_ter_csr (p_chr_id NUMBER,
2146                           p_cle_id NUMBER)
2147     IS
2148     SELECT 'Y'
2149     FROM dual
2150     WHERE EXISTS (SELECT 'Y'
2151                   FROM okc_k_lines_b cle,
2152                        okc_line_styles_b lse
2153                   WHERE cle.dnz_chr_id = p_chr_id
2154                   AND cle.id = p_cle_id
2155                   AND cle.lse_id = lse.id
2156                   AND cle.sts_code = 'TERMINATED'
2157                   AND lse.lty_code = 'FREE_FORM1');
2158   BEGIN
2159     x_return_status      := OKL_API.G_RET_STS_SUCCESS;
2160     -- Call start_activity to create savepoint, check compatibility
2161     -- and initialize message list
2162     x_return_status := OKL_API.START_ACTIVITY (
2163                                l_api_name
2164                                ,p_init_msg_list
2165                                ,'_PVT'
2166                                ,x_return_status);
2167     -- Check if activity started successfully
2168     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2169        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2170     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2171        RAISE OKL_API.G_EXCEPTION_ERROR;
2172     END IF;
2173     IF (p_contract_id IS NOT NULL OR
2174        p_contract_id <> okl_api.g_miss_num) AND
2175        (p_line_id IS NULL OR
2176         p_line_id = okl_api.g_miss_num) THEN
2177       OPEN  l_hdr_ter_csr(p_chr_id => p_contract_id);
2178       FETCH l_hdr_ter_csr INTO lv_hdr_ter;
2179       CLOSE l_hdr_ter_csr;
2180       IF lv_hdr_ter = 'Y' THEN
2181         -- We need to set the global formula addtional parameter to Y and reset the
2182         -- same to N after using the formula since we need to consider TERMINATED lines
2183         l_additional_parameters(0).name  := 'TERMINATED_LINES_YN';
2184         l_additional_parameters(0).value := 'Y';
2185         -- Calling the formula Engine with additional parameter
2186         -- so that the terminated lines are included for computing
2187         OKL_EXECUTE_FORMULA_PUB.execute(p_api_version           => p_api_version,
2188                                         p_init_msg_list         => p_init_msg_list,
2189                                         x_return_status         => x_return_status,
2190                                         x_msg_count             => x_msg_count,
2191                                         x_msg_data              => x_msg_data,
2192                                         p_formula_name          => p_formula_name,
2193                                         p_contract_id           => p_contract_id,
2194                                         p_line_id               => NULL,
2195                                         p_additional_parameters => l_additional_parameters,
2196                                         x_value                 => x_value);
2197         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2198           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2199         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2200           RAISE OKL_API.G_EXCEPTION_ERROR;
2201         END IF;
2202         -- We need to set the global formula addtional parameter to Y and reset the
2203         -- same to N after using the formula since we need to consider TERMINATED lines
2204         l_additional_parameters.delete;
2205       ELSIF lv_hdr_ter <> 'Y' THEN
2206         -- Normal calling of the formula engine
2207         OKL_EXECUTE_FORMULA_PUB.execute(p_api_version           => p_api_version,
2208                                         p_init_msg_list         => p_init_msg_list,
2209                                         x_return_status         => x_return_status,
2210                                         x_msg_count             => x_msg_count,
2211                                         x_msg_data              => x_msg_data,
2212                                         p_formula_name          => p_formula_name,
2213                                         p_contract_id           => p_contract_id,
2214                                         p_line_id               => NULL,
2215                                         x_value                 => x_value);
2216         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2217           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2218         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2219           RAISE OKL_API.G_EXCEPTION_ERROR;
2220         END IF;
2221       END IF;
2222     ELSIF (p_contract_id IS NOT NULL OR
2223        p_contract_id <> okl_api.g_miss_num) AND
2224        (p_line_id IS NOT NULL OR
2225         p_line_id <> okl_api.g_miss_num) THEN
2226       OPEN  l_lne_ter_csr(p_chr_id => p_contract_id,
2227                           p_cle_id => p_line_id);
2228       FETCH l_lne_ter_csr INTO lv_lne_ter;
2229       CLOSE l_lne_ter_csr;
2230       IF lv_lne_ter = 'Y' THEN
2231         -- We need to set the global formula addtional parameter to Y and reset the
2232         -- same to N after using the formula since we need to consider TERMINATED lines
2233         l_additional_parameters(0).name  := 'TERMINATED_LINES_YN';
2234         l_additional_parameters(0).value := 'Y';
2235         -- Calling the formula Engine with additional parameter
2236         -- so that the terminated lines are included for computing
2237         OKL_EXECUTE_FORMULA_PUB.execute(p_api_version           => p_api_version,
2238                                         p_init_msg_list         => p_init_msg_list,
2239                                         x_return_status         => x_return_status,
2240                                         x_msg_count             => x_msg_count,
2241                                         x_msg_data              => x_msg_data,
2242                                         p_formula_name          => p_formula_name,
2243                                         p_contract_id           => p_contract_id,
2244                                         p_line_id               => p_line_id,
2245                                         p_additional_parameters => l_additional_parameters,
2246                                         x_value                 => x_value);
2247         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2248           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2249         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2250           RAISE OKL_API.G_EXCEPTION_ERROR;
2251         END IF;
2252         -- We need to set the global formula addtional parameter to Y and reset the
2253         -- same to N after using the formula since we need to consider TERMINATED lines
2254         l_additional_parameters.delete;
2255       ELSIF lv_lne_ter <> 'Y' THEN
2256         -- Normal calling of the formula engine
2257         OKL_EXECUTE_FORMULA_PUB.execute(p_api_version           => p_api_version,
2258                                         p_init_msg_list         => p_init_msg_list,
2259                                         x_return_status         => x_return_status,
2260                                         x_msg_count             => x_msg_count,
2261                                         x_msg_data              => x_msg_data,
2262                                         p_formula_name          => p_formula_name,
2263                                         p_contract_id           => p_contract_id,
2264                                         p_line_id               => p_line_id,
2265                                         x_value                 => x_value);
2266         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2267           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2268         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2269           RAISE OKL_API.G_EXCEPTION_ERROR;
2270         END IF;
2271       END IF;
2272     ELSE
2273       okl_api.set_message(p_app_name      => G_APP_NAME,
2274                           p_msg_name      => G_REQUIRED_VALUE,
2275                           p_token1        => G_COL_NAME_TOKEN,
2276                           p_token1_value  => 'Stub days, Periods');
2277       x_return_status := okl_api.g_ret_sts_error;
2278       RAISE OKL_API.G_EXCEPTION_ERROR;
2279     END IF;
2280     OKL_API.END_ACTIVITY (x_msg_count,
2281                           x_msg_data );
2282   EXCEPTION
2283     WHEN OKL_API.G_EXCEPTION_ERROR then
2284       IF l_hdr_ter_csr%ISOPEN THEN
2285         CLOSE l_hdr_ter_csr;
2286       END IF;
2287       IF l_lne_ter_csr%ISOPEN THEN
2288         CLOSE l_lne_ter_csr;
2289       END IF;
2290       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2291                                 l_api_name,
2292                                G_PKG_NAME,
2293                                'OKL_API.G_RET_STS_ERROR',
2294                                x_msg_count,
2295                                x_msg_data,
2296                                '_PVT');
2297     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2298       IF l_hdr_ter_csr%ISOPEN THEN
2299         CLOSE l_hdr_ter_csr;
2300       END IF;
2301       IF l_lne_ter_csr%ISOPEN THEN
2302         CLOSE l_lne_ter_csr;
2303       END IF;
2304       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2305                                 l_api_name,
2306                                 G_PKG_NAME,
2307                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
2308                                 x_msg_count,
2309                                 x_msg_data,
2310                                 '_PVT');
2311     WHEN OTHERS then
2312       IF l_hdr_ter_csr%ISOPEN THEN
2313         CLOSE l_hdr_ter_csr;
2314       END IF;
2315       IF l_lne_ter_csr%ISOPEN THEN
2316         CLOSE l_lne_ter_csr;
2317       END IF;
2318       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
2319                                 l_api_name,
2320                                 G_PKG_NAME,
2321                                 'OTHERS',
2322                                 x_msg_count,
2323                                 x_msg_data,
2324                                 '_PVT');
2325   END execute_formula;
2326 -------------------------------------------------------------------------------------------------
2327 -- Start of Commnets
2328 -- Badrinath Kuchibholta
2329 -- Procedure Name       : append_perd_exp_tbl
2330 -- Description          : append_perd_exp_tbl
2331 -- Business Rules       : If the start date of the contract and start of the payment level
2332 --                        are different we then append the periodic expenses table
2333 --                        to include a stub.This is done for Fee lines only.
2334 -- Parameters           : Standard Parameters with p_khr_id and p_csm_perd_exp_tbl
2335 -- Version              :
2336 -- End of Commnets
2337 -------------------------------------------------------------------------------------------------
2338   FUNCTION append_perd_exp_tbl(p_khr_id           IN OKC_K_HEADERS_B.ID%TYPE,
2339                                p_csm_perd_exp_tbl IN OUT NOCOPY OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type)
2340   RETURN VARCHAR2 IS
2341     l_csm_perd_exp_tbl     OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type := p_csm_perd_exp_tbl;
2342     m_csm_perd_exp_tbl     OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type;
2343     mx_csm_perd_exp_tbl    OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type;
2344     lx_csm_perd_exp_tbl    OKL_CREATE_STREAMS_PUB.csm_periodic_expenses_tbl_type;
2345     i                      NUMBER := 0;
2346     m                      NUMBER := 0;
2347     n                      NUMBER := 0;
2348     ld_start_date          OKC_K_HEADERS_B.START_DATE%TYPE;
2349     g_process_error        EXCEPTION;
2350     x_return_status        VARCHAR2(3) := OKL_API.G_RET_STS_SUCCESS;
2351     -- Cursor to get the Start of the contract
2352     -- To compare the date Start of the table of Records
2353     CURSOR c_start_date_khr_csr(p_khr_id OKC_K_HEADERS_B.ID%TYPE)
2354     IS
2355     SELECT start_date
2356     FROM okc_k_headers_b
2357     WHERE id = p_khr_id;
2358     -- Since We are now Dealing with fee lines
2359     -- So we look for Fee lines in the Table of Records
2360     CURSOR c_fee_line_csr(p_khr_id OKC_K_HEADERS_B.ID%TYPE)
2361     IS
2362     SELECT cle.id id
2363     FROM okc_k_lines_b cle,
2364          okc_line_styles_b lse
2365     WHERE dnz_chr_id =  p_khr_id
2366     AND cle.lse_id = lse.id
2367     AND lse.lty_code = 'FEE';
2368   BEGIN
2369     IF p_khr_id IS NOT NULL OR
2370        p_khr_id <> OKL_API.G_MISS_NUM THEN
2371       -- Cursor to get the Start of the contract
2372       -- To compare the date Start of the table of Records
2373       OPEN  c_start_date_khr_csr(p_khr_id => p_khr_id);
2374       FETCH c_start_date_khr_csr INTO ld_start_date;
2375       IF c_start_date_khr_csr%NOTFOUND THEN
2376         RAISE g_process_error;
2377       END IF;
2378       CLOSE c_start_date_khr_csr;
2379       IF l_csm_perd_exp_tbl.COUNT > 0 THEN
2380         -- Since We are now Dealing with fee lines
2381         -- So we look for Fee lines in the Table of Records
2382         FOR r_fee_line_csr IN c_fee_line_csr(p_khr_id => p_khr_id) LOOP
2383           -- Now scanning the table of records and build a temp table of
2384           -- records which match the below condition
2385           FOR i IN l_csm_perd_exp_tbl.FIRST..l_csm_perd_exp_tbl.LAST LOOP
2386             IF l_csm_perd_exp_tbl(i).kle_fee_id = r_fee_line_csr.id AND
2387                l_csm_perd_exp_tbl(i).level_index_number = 1  AND
2388                (ld_start_date IS NOT NULL                    OR
2389                ld_start_date <> OKL_API.G_MISS_DATE)         AND
2390                l_csm_perd_exp_tbl(i).date_start <> ld_start_date THEN
2391               m_csm_perd_exp_tbl(i) := l_csm_perd_exp_tbl(i);
2392             END IF;
2393           END LOOP;
2394         END LOOP;
2395         -- If the Temp table of records are there
2396         IF m_csm_perd_exp_tbl.COUNT > 0 THEN
2397           -- Scan each record of the temp table
2398           i :=  m_csm_perd_exp_tbl.FIRST;
2399           LOOP
2400             -- Scan each record of the org table
2401             FOR j IN l_csm_perd_exp_tbl.FIRST..l_csm_perd_exp_tbl.LAST LOOP
2402               IF j = (i + m) THEN
2403                 -- if the record of the org table matches the temp table records.
2404                 -- Then re arrange the table of record index number.
2405                 FOR k IN REVERSE j..l_csm_perd_exp_tbl.LAST LOOP
2406                   l_csm_perd_exp_tbl(k+1) := l_csm_perd_exp_tbl(k);
2407                 END LOOP;
2408                 -- Now after re arrangement we are Modifying the stub record.
2409                 l_csm_perd_exp_tbl(j).level_index_number := 0;
2410                 l_csm_perd_exp_tbl(j).number_of_periods := 1;
2411                 l_csm_perd_exp_tbl(j).lock_level_step := NULL;
2412                 -- Start modification bug#3145540,3145597
2413                 l_csm_perd_exp_tbl(j).advance_or_arrears :=  OKL_CREATE_STREAMS_PUB.G_ARREARS;
2414                 -- End modification bug#3145540,3145597
2415                 l_csm_perd_exp_tbl(j).query_level_yn := NULL;
2416                 l_csm_perd_exp_tbl(j).structure := NULL;
2417                 l_csm_perd_exp_tbl(j).amount := 0;
2418                 l_csm_perd_exp_tbl(j).period := 'T';
2419               END IF;
2420             END LOOP;
2421             EXIT WHEN (i = m_csm_perd_exp_tbl.LAST);
2422             i := m_csm_perd_exp_tbl.NEXT(i);
2423             m := m + 1;
2424           END LOOP;
2425         END IF;
2426         IF l_csm_perd_exp_tbl.COUNT > 0 THEN
2427           -- Since We are now Dealing with fee lines
2428           -- So we look for Fee lines in the Table of Records
2429           FOR r_fee_line_csr IN c_fee_line_csr(p_khr_id => p_khr_id) LOOP
2430             n := 0;
2431             -- We are now re arranging the Level index number so that it
2432             -- should start from 1 instead of 0 .
2433             FOR i IN l_csm_perd_exp_tbl.FIRST..l_csm_perd_exp_tbl.LAST LOOP
2434               IF l_csm_perd_exp_tbl(i).kle_fee_id = r_fee_line_csr.id AND
2435                  l_csm_perd_exp_tbl(i).level_index_number = n AND
2436                  (ld_start_date IS NOT NULL                    OR
2437                  ld_start_date <> OKL_API.G_MISS_DATE)         AND
2438                  l_csm_perd_exp_tbl(i).date_start <> ld_start_date THEN
2439                  n := n + 1;
2440                  l_csm_perd_exp_tbl(i).level_index_number := n;
2441               END IF;
2442             END LOOP;
2443           END LOOP;
2444         END IF;
2445       END IF;
2446     ELSE
2447       RAISE g_process_error;
2448     END IF;
2449     p_csm_perd_exp_tbl := l_csm_perd_exp_tbl;
2450     RETURN x_return_status;
2451   EXCEPTION
2452     WHEN g_process_error THEN
2453       IF c_start_date_khr_csr%ISOPEN THEN
2454         CLOSE c_start_date_khr_csr;
2455       END IF;
2456       IF c_fee_line_csr%ISOPEN THEN
2457         CLOSE c_fee_line_csr;
2458       END IF;
2459       x_return_status := OKL_API.G_RET_STS_ERROR;
2460       RETURN x_return_status;
2461     WHEN OTHERS THEN
2462       IF c_start_date_khr_csr%ISOPEN THEN
2463         CLOSE c_start_date_khr_csr;
2464       END IF;
2465       IF c_fee_line_csr%ISOPEN THEN
2466         CLOSE c_fee_line_csr;
2467       END IF;
2468       x_return_status := OKL_API.G_RET_STS_ERROR;
2469       RETURN x_return_status;
2470   END append_perd_exp_tbl;
2471 -- End modification 11i9 bakuchib
2472   PROCEDURE delete_working_streams(
2473             p_api_version   IN NUMBER,
2474             p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
2475             x_return_status OUT NOCOPY VARCHAR2,
2476             x_msg_count     OUT NOCOPY NUMBER,
2477             x_msg_data      OUT NOCOPY VARCHAR2,
2478             p_chr_id        IN  NUMBER) AS
2479     l_api_name		CONSTANT VARCHAR2(30) := 'DELETE_WKG_STRMS';
2480     l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
2481     l_api_version       NUMBER                := 1.0;
2482 
2483     l_stmv_tbl okl_streams_pub.stmv_tbl_type;
2484     x_stmv_tbl okl_streams_pub.stmv_tbl_type;
2485     l_strms_orig_rec strms_csr%ROWTYPE;
2486     l_strms_rep_rec strms_csr%ROWTYPE;
2487 
2488     i NUMBER;
2489 
2490   Begin
2491 
2492      print( l_api_name, 'begin');
2493      l_return_status := OKL_API.START_ACTIVITY(
2494  			p_api_name      => l_api_name,
2495  			p_pkg_name      => g_pkg_name,
2496  			p_init_msg_list => p_init_msg_list,
2497  			l_api_version   => l_api_version,
2498  			p_api_version   => p_api_version,
2499  			p_api_type      => G_API_TYPE,
2500  			x_return_status => x_return_status);
2501 
2502      -- check if activity started successfully
2503      If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
2504         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2505      ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
2506         raise OKL_API.G_EXCEPTION_ERROR;
2507      End If;
2508 
2509      i := 0;
2510      FOR l_strms_orig_rec in strms_csr ( p_chr_id, 'WORK', 'ORIGIN')
2511      LOOP
2512 
2513          i := i + 1;
2514          print( l_api_name, 'DELETE:'||to_char(l_strms_orig_rec.strm_id));
2515          l_stmv_tbl(i).id := l_strms_orig_rec.STRM_ID;
2516          l_stmv_tbl(i).sty_id := l_strms_orig_rec.STY_ID;
2517          l_stmv_tbl(i).khr_id := p_chr_id;
2518          l_stmv_tbl(i).sgn_code := l_strms_orig_rec.SGN_CODE;
2519          l_stmv_tbl(i).transaction_number := l_strms_orig_rec.TRN_NUM;
2520 
2521      END LOOP;
2522      FOR l_strms_rep_rec in strms_csr ( p_chr_id, 'WORK', 'REPORT')
2523      LOOP
2524 
2525          i := i + 1;
2526          print( l_api_name, 'DELETE:'||to_char(l_strms_rep_rec.strm_id));
2527          l_stmv_tbl(i).id := l_strms_rep_rec.STRM_ID;
2528          l_stmv_tbl(i).sty_id := l_strms_rep_rec.STY_ID;
2529          l_stmv_tbl(i).khr_id := p_chr_id;
2530          l_stmv_tbl(i).sgn_code := l_strms_rep_rec.SGN_CODE;
2531          l_stmv_tbl(i).transaction_number := l_strms_rep_rec.TRN_NUM;
2532 
2533      END LOOP;
2534 
2535      If ( i > 0 ) Then
2536 
2537          Okl_Streams_pub.delete_streams(
2538                           p_api_version => p_api_version,
2539                           p_init_msg_list => p_init_msg_list,
2540                           x_return_status => x_return_status,
2541                           x_msg_count => x_msg_count,
2542                           x_msg_data => x_msg_data,
2543                           p_stmv_tbl => l_stmv_tbl);
2544 
2545          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2546             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2547          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2548             RAISE OKL_API.G_EXCEPTION_ERROR;
2549          END IF;
2550 
2551     End If;
2552 
2553      print( l_api_name, 'end');
2554   EXCEPTION
2555 	when OKL_API.G_EXCEPTION_ERROR then
2556 		l_return_status := OKL_API.HANDLE_EXCEPTIONS(
2557 			p_api_name  => l_api_name,
2558 			p_pkg_name  => g_pkg_name,
2559 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
2560 			x_msg_count => x_msg_count,
2561 			x_msg_data  => x_msg_data,
2562 			p_api_type  => g_api_type);
2563                 x_return_status := l_return_status;
2564 
2565 	when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
2566 		l_return_status := OKL_API.HANDLE_EXCEPTIONS(
2567 			p_api_name  => l_api_name,
2568 			p_pkg_name  => g_pkg_name,
2569 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2570 			x_msg_count => x_msg_count,
2571 			x_msg_data  => x_msg_data,
2572 			p_api_type  => g_api_type);
2573                 x_return_status := l_return_status;
2574 
2575 	when OTHERS then
2576           	l_return_status := OKL_API.HANDLE_EXCEPTIONS(
2577 			p_api_name  => l_api_name,
2578 			p_pkg_name  => g_pkg_name,
2579 			p_exc_name  => 'OTHERS',
2580 			x_msg_count => x_msg_count,
2581 			x_msg_data  => x_msg_data,
2582 			p_api_type  => g_api_type);
2583                 x_return_status := l_return_status;
2584 
2585 
2586   End delete_working_streams;
2587 
2588 ---------------------------------------------------------------------------------------------
2589 -- Procedure adjust_passthrough_streams to handle passthrough streams.
2590 ---------------------------------------------------------------------------------------------
2591 
2592   PROCEDURE adjust_passthrough_streams(
2593             p_api_version     IN  NUMBER,
2594             p_init_msg_list   IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
2595             x_return_status   OUT NOCOPY VARCHAR2,
2596             x_msg_count       OUT NOCOPY NUMBER,
2597             x_msg_data        OUT NOCOPY VARCHAR2,
2598             p_chr_id          IN  VARCHAR2,
2599             p_purpose          IN  VARCHAR2) AS
2600     l_api_name    CONSTANT     VARCHAR2(30) := 'ADJUST_PASSTHROUGH_STREAMS';
2601     i                          BINARY_INTEGER := 0;
2602 --srsreeni Bug 5917582 start
2603     j                          BINARY_INTEGER := 0;
2604 --srsreeni Bug 5917582 end
2605     l_passthru_percent         NUMBER := 0;
2606     --l_sty_id                   NUMBER;
2607 	l_sty_id                    strm_rec_type;
2608     l_sty_name                 VARCHAR2(150);
2609     lx_return_status           VARCHAR2(1);
2610     lx_isAllowed               BOOLEAN;
2611     lx_passStatus              VARCHAR2(30);
2612     lx_failStatus              VARCHAR2(30);
2613     c_kle_id                   NUMBER;
2614     c_sty_id                   NUMBER;
2615     v_adj_amt                  NUMBER;
2616     l_stmv_tbl                 okl_streams_pub.stmv_tbl_type;
2617     x_stmv_tbl                 okl_streams_pub.stmv_tbl_type;
2618     l_selv_tbl                 okl_streams_pvt.selv_tbl_type;
2619     l_pt_tbl                   okl_streams_pub.selv_tbl_type;
2620 --srsreeni Bug 5917582 start
2621     l_pt_tbl_tmp               okl_streams_pub.selv_tbl_type;
2622 --srsreeni Bug 5917582 end
2623     lx_selv_tbl                okl_streams_pvt.selv_tbl_type;
2624     l_stmv_rec                 okl_streams_pub.stmv_rec_type;
2625     lx_stmv_rec                okl_streams_pub.stmv_rec_type;
2626 --srsreeni bug 5869271 start add
2627     l_old_cle_id               okc_k_lines_b.ID%TYPE;
2628     l_old_sty_id               okl_strm_type_b.ID%TYPE;
2629     l_old_str_stmv_rec         okl_streams_pub.stmv_rec_type;
2630     l_old_acr_stmv_rec         okl_streams_pub.stmv_rec_type;
2631     l_last_se_line_number      OKL_STRM_ELEMENTS_V.SE_LINE_NUMBER%TYPE;
2632     l_last_acr_se_line_number  OKL_STRM_ELEMENTS_V.SE_LINE_NUMBER%TYPE;
2633 --srsreeni bug 5869271 end add
2634     l_purpose_code             VARCHAR2(30) := p_purpose;
2635     -- To get the header information
2636     CURSOR c_hdr
2637     IS
2638     SELECT chr.template_yn,
2639            chr.currency_code,
2640            chr.start_date,
2641            khr.deal_type,
2642            khr.term_duration,
2643            NVL(khr.generate_accrual_yn, 'Y')
2644     FROM okc_k_headers_b chr,
2645          okl_k_headers khr
2646     WHERE khr.id = p_chr_id
2647     AND chr.id = khr.id;
2648 
2649     --Added order by rul2.rule_information2 by djanaswa for bug 6007644
2650     -- To get the payment information
2651     CURSOR c_inflows
2652     IS
2653     SELECT rgp.cle_id cle_id,
2654            TO_NUMBER(rul1.object1_id1) sty_id,
2655            FND_DATE.canonical_to_date(rul2.rule_information2) start_date,
2656            TO_NUMBER(rul2.rule_information3) periods,
2657  	-- srsreeni Bug 5917582 start
2658  	   TO_NUMBER(rul2.rule_information7) stub_days,
2659  	   TO_NUMBER(rul2.rule_information8) stub_amount,
2660  	-- srsreeni Bug 5917582 end
2661            rul2.object1_id1 frequency,
2662            rul2.rule_information5 structure,
2663            DECODE(rul2.rule_information10, 'Y', 'ARREARS', 'ADVANCE') advance_arrears,
2664            FND_NUMBER.canonical_to_number(rul2.rule_information6) amount,
2665            lse.lty_code lty_code,
2666            kle.capital_amount capital_amount,
2667            kle.residual_value residual_value
2668     FROM okc_rule_groups_b rgp,
2669          okc_rules_b rul1,
2670          okc_rules_b rul2,
2671          okc_k_lines_b cle,
2672          okl_k_lines kle,
2673          okc_line_styles_b lse
2674     WHERE rul2.dnz_chr_id = p_chr_id
2675     AND  rul2.rule_information_category = 'LASLL'
2676     AND  rgp.RGD_CODE = 'LALEVL'
2677     AND  rul2.rgp_id = rgp.id
2678     AND  TO_NUMBER(rul2.object2_id1) = rul1.id
2679     AND  rgp.cle_id = cle.id
2680     AND  cle.sts_code IN ('PASSED','TERMINATED', 'COMPLETE')
2681     AND  lse.lty_code = 'FEE'
2682     AND  kle.fee_type = 'PASSTHROUGH'
2683     AND  cle.id = kle.id
2684     AND  cle.lse_id = lse.id
2685 --srsreeni bug 5869271 start add
2686     ORDER BY cle_id,sty_id, FND_DATE.canonical_to_date(rul2.rule_information2);
2687 --srsreeni bug 5869271 end add
2688     -- To get the streams information
2689     CURSOR l_stmp_yn_csr(khrid NUMBER, p VARCHAR2) IS
2690     SELECT 'Y' What
2691     FROM dual
2692     WHERE EXISTS(SELECT stm.id  stmid
2693                  FROM   okl_streams stm
2694                  WHERE stm.khr_id = khrid
2695                  --AND stm.say_code = 'CURR'
2696 				 AND stm.say_code = 'WORK'
2697                  AND stm.sgn_code = 'STMP'
2698                  AND NVL(stm.purpose_code, 'ORIGIN') = p
2699                  AND stm.active_yn    = 'N');
2700     -- To get the stream information
2701     CURSOR l_stm_csr(khrid NUMBER, kleid NUMBER, styid NUMBER, p VARCHAR2) IS
2702     SELECT stm.id  stmid
2703     FROM   okl_streams	stm
2704     WHERE stm.khr_id = khrid
2705     AND stm.kle_id = kleid
2706     AND stm.sty_id = styid
2707     AND stm.say_code = 'CURR'
2708     AND nvl(stm.purpose_code, 'ORIGIN') = p
2709     AND stm.active_yn    = 'Y';
2710 
2711 	-- Added for user defined streams HKPATEL
2712 	Cursor dependent_sty_csr (payment_type_id NUMBER, p_purpose VARCHAR2)
2713 	IS
2714 	Select dependent_sty_id,dependent_sty_name
2715 	FROM OKL_STRM_TMPT_LINES_UV where primary_sty_id = payment_type_id
2716 	and pdt_id = (select pdt_id from okl_k_headers where id = p_chr_id)
2717 	and dependent_sty_purpose = p_purpose
2718 	and dependent_sty_id is not null;
2719 
2720 	l_dependent_strm_rec      dependent_sty_csr%ROWTYPE;
2721 	-- Added code ends here
2722  l_rl_rec1                      l_rl_csr1%ROWTYPE;
2723  l_stm_rec                      l_stm_csr%ROWTYPE;
2724  l_stmp_yn_rec                  l_stmp_yn_csr%ROWTYPE;
2725  l_hdr                          c_hdr%ROWTYPE;
2726  l_hdr_rec                      l_hdr_csr%ROWTYPE;
2727  l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
2728  l_pdt_id NUMBER;
2729  l_primary_sty_id NUMBER;
2730 
2731   -- gboomina Bug 4746368 - Added - Start
2732   l_pt_pro_fee_tbl         okl_streams_pub.selv_tbl_type;
2733   l_fee_strm_type_rec  fee_strm_type_csr%ROWTYPE;
2734   -- gboomina Bug 4746368 - Added - End
2735 --srsreeni Bug 5917582 start
2736  l_pt_pro_fee_tbl_tmp     okl_streams_pub.selv_tbl_type;
2737 --srsreeni Bug 5917582 end
2738 
2739     --Added by djanaswa for bug 6007644
2740     l_recurrence_date    DATE := NULL;
2741     l_old_cleId         NUMBER;
2742     l_old_styId         NUMBER;
2743     --end djanaswa
2744 
2745   BEGIN
2746     x_return_status := OKL_API.G_RET_STS_SUCCESS;
2747     -- Call start_activity to create savepoint, check compatibility
2748     -- and initialize message list
2749     x_return_status := OKL_API.START_ACTIVITY (
2750                                l_api_name
2751                                ,p_init_msg_list
2752                                ,'_PVT'
2753                                ,x_return_status);
2754     -- Check if activity started successfully
2755     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2756       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2757     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2758       RAISE OKL_API.G_EXCEPTION_ERROR;
2759     END IF;
2760     OPEN  l_stmp_yn_csr( TO_NUMBER(p_chr_id), p_purpose);
2761     FETCH l_stmp_yn_csr INTO l_stmp_yn_rec;
2762     CLOSE l_stmp_yn_csr;
2763     IF ( NVL(l_stmp_yn_rec.What, 'N') = 'N' ) THEN
2764       RETURN;
2765     END IF;
2766     OPEN  c_hdr;
2767     FETCH c_hdr INTO l_hdr;
2768     CLOSE c_hdr;
2769     l_stmv_tbl.delete;
2770     FOR l_inflow IN c_inflows LOOP
2771       OPEN  l_rl_csr1 ( 'LAPSTH', 'LAPTPR', TO_NUMBER(p_chr_id), l_inflow.cle_id );
2772       FETCH l_rl_csr1 INTO l_rl_rec1;
2773       CLOSE l_rl_csr1;
2774       l_passthru_percent := nvl( l_rl_rec1.rule_information1, 0.0 );
2775 	  /*Commented for bug 4203804
2776       i := 0;
2777       FOR l_stm_rec in l_stm_csr(p_chr_id, l_inflow.cle_id, l_inflow.sty_id, p_purpose) LOOP
2778         i := i + 1;
2779         l_stmv_tbl(i).id	:= l_stm_rec.stmid;
2780       END LOOP;
2781       IF ( i > 0 ) THEN
2782         okl_streams_pub.delete_streams(p_api_version     =>   p_api_version,
2783                                        x_return_status   =>   x_return_status,
2784                                        p_init_msg_list   =>   p_init_msg_list,
2785                                        x_msg_count       =>   x_msg_count,
2786                                        x_msg_data        =>   x_msg_data,
2787                                        p_stmv_tbl        =>   l_stmv_tbl);
2788         IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2789           EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2790         ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2791           EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2792         END IF;
2793       END IF;
2794 	  */
2795 
2796     --Added by djanaswa for bug 6007644
2797       IF((l_inflow.periods IS NULL) AND (l_inflow.stub_days IS NOT NULL)) THEN
2798         --Set the recurrence date to null for stub payment
2799         l_recurrence_date := NULL;
2800       ELSIF(l_recurrence_date IS NULL
2801           OR l_old_cleId <> l_inflow.cle_id
2802           OR l_old_styId <> l_inflow.sty_id) THEN
2803         --Set the recurrence date as periodic payment level start date
2804         l_recurrence_date := l_inflow.start_date;
2805       END IF;
2806       l_old_cleId := l_inflow.cle_id;
2807       l_old_styId := l_inflow.sty_id;
2808       --end djanaswa
2809 
2810 
2811      -- gboomina Bug 4746368 - Start
2812       -- calling get_stream_elements with l_pt_pro_fee_tbl parameter
2813  -- Added parameter p_recurrence_date by djanaswa for bug 6007644
2814       okl_stream_generator_pvt.get_stream_elements(
2815                                p_start_date         =>   l_inflow.start_date,
2816                                p_periods             =>   l_inflow.periods,
2817                                p_frequency           =>   l_inflow.frequency,
2818                                p_structure           =>   l_inflow.structure,
2819                                p_advance_or_arrears  =>   l_inflow.advance_arrears,
2820                                p_amount              =>   l_inflow.amount,
2821 --srsreeni Bug 5917582 start
2822                                --p_stub_days           =>   NULL,
2823                                --p_stub_amount         =>   NULL,
2824                                p_stub_days           =>   l_inflow.stub_days,
2825                                p_stub_amount         =>   l_inflow.stub_amount,
2826 --srsreeni Bug 5917582 end
2827                                p_currency_code       =>   l_hdr.currency_code,
2828                                p_khr_id              =>   p_chr_id,
2829                                p_kle_id              =>   l_inflow.cle_id,
2830                                p_purpose_code        =>   l_purpose_code,
2831                                x_selv_tbl            =>   l_selv_tbl,
2832                                x_pt_tbl              =>   l_pt_tbl,
2833                                x_pt_pro_fee_tbl      =>   l_pt_pro_fee_tbl,
2834                                x_return_status       =>   x_return_status,
2835                                x_msg_count           =>   x_msg_count,
2836                                x_msg_data            =>   x_msg_data,
2837                                p_recurrence_date     =>   l_recurrence_date);
2838       -- gboomina Bug 4746368 - End
2839       IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2840         EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2841       ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2842         EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2843       END IF;
2844 --srsreeni Bug 5917582 start
2845        -- consolidation of tables used for:
2846  	       -- passthrough expense accrual
2847  	       IF (l_pt_tbl.COUNT > 0) THEN
2848  	         i := l_pt_tbl.FIRST;
2849  	         j := 1;
2850  	         IF (l_pt_tbl_tmp.count > 0) THEN
2851  	           j := l_pt_tbl_tmp.LAST + 1;
2852  	         END IF;
2853  	         LOOP
2854  	           l_pt_tbl_tmp(j) := l_pt_tbl(i);
2855  	           l_pt_tbl_tmp(j).se_line_number := j;
2856  	           EXIT WHEN (i = l_pt_tbl.LAST);
2857  	           i := l_pt_tbl.NEXT(i);
2858  	           j := j + 1;
2859  	         END LOOP;
2860  	       END IF;
2861  	       -- processing fee accrual
2862  	       IF (l_pt_pro_fee_tbl.COUNT > 0) THEN
2863  	         i := l_pt_pro_fee_tbl.FIRST;
2864  	         j := 1;
2865  	         IF (l_pt_pro_fee_tbl_tmp.count > 0) THEN
2866  	           j := l_pt_pro_fee_tbl_tmp.LAST + 1;
2867  	         END IF;
2868  	         LOOP
2869  	           l_pt_pro_fee_tbl_tmp(j) := l_pt_pro_fee_tbl(i);
2870  	           l_pt_pro_fee_tbl_tmp(j).se_line_number := j;
2871  	           EXIT WHEN (i = l_pt_pro_fee_tbl.LAST);
2872  	           i := l_pt_pro_fee_tbl.NEXT(i);
2873  	           j := j + 1;
2874  	         END LOOP;
2875  	       END IF;
2876 --srsreeni Bug 5917582 end
2877 	  -- Code commented and added for user defined streams - HKPATEL
2878       -- Payment level streams LASLL stream type
2879 	  -- Put the code for bug 4203804
2880 --srsreeni bug 5869271 start add
2881       IF (l_old_cle_id IS NULL OR (l_old_cle_id <> l_inflow.cle_id OR l_old_sty_id <> l_inflow.sty_id)) THEN
2882 --srsreeni bug 5869271 end add
2883         okl_stream_generator_pvt.get_stream_header(
2884                                p_khr_id      =>   p_chr_id,
2885                                p_kle_id         =>   l_inflow.cle_id,
2886                                p_sty_id         =>   l_inflow.sty_id,
2887                                p_purpose_code   =>   l_purpose_code,
2888                                x_stmv_rec       =>   l_stmv_rec,
2889                                x_return_status  =>   x_return_status);
2890         IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2891           EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2892         ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2893           EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2894         END IF;
2895         --l_stmv_rec.say_code := 'CURR';
2896 	      	l_stmv_rec.say_code := 'WORK';
2897           l_stmv_rec.active_yn := 'Y';
2898           l_stmv_rec.date_working := SYSDATE;
2899         --Added by kthiruva on 09-Feb-2006
2900         --Bug 5029161 - Start of Changes
2901         IF l_selv_tbl.COUNT > 0 THEN
2902            okl_streams_pub.create_streams(p_api_version     =>   p_api_version,
2903                                      p_init_msg_list   =>   p_init_msg_list,
2904                                      x_return_status   =>   x_return_status,
2905                                      x_msg_count       =>   x_msg_count,
2906                                      x_msg_data        =>   x_msg_data,
2907                                      p_stmv_rec        =>   l_stmv_rec,
2908                                      p_selv_tbl        =>   l_selv_tbl,
2909                                      x_stmv_rec        =>   lx_stmv_rec,
2910                                      x_selv_tbl        =>   lx_selv_tbl);
2911           IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2912             EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2913           ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2914             EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2915           END IF;
2916         END IF;
2917         --Bug 5029161 - End of Changes
2918         --srsreeni bug 5869271 start
2919          l_old_str_stmv_rec := lx_stmv_rec;
2920          l_last_se_line_number := l_selv_tbl(l_selv_tbl.LAST).se_line_number;
2921       ELSE
2922          -- populate the foreign key for the stream elements
2923          IF (l_selv_tbl.COUNT > 0) THEN
2924            i:= l_selv_tbl.FIRST;
2925            LOOP
2926              l_selv_tbl(i).stm_id := l_old_str_stmv_rec.id;
2927              l_last_se_line_number := l_last_se_line_number + 1;
2928              l_selv_tbl(i).se_line_number := l_last_se_line_number;
2929              EXIT WHEN(i = l_selv_tbl.LAST);
2930              i := l_selv_tbl.NEXT(i);
2931            END LOOP;
2932            -- populate the detail
2933            okl_streams_pub.create_stream_elements(
2934                                p_api_version   => p_api_version
2935                               ,p_init_msg_list => p_init_msg_list
2936                               ,x_return_status => x_return_status
2937                               ,x_msg_count     => x_msg_count
2938                               ,x_msg_data      => x_msg_data
2939                               ,p_selv_tbl      => l_selv_tbl
2940                               ,x_selv_tbl      => lx_selv_tbl);
2941            IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2942              EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2943            ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2944              EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2945            END IF;
2946          END IF;
2947        END IF;
2948        --srsreeni bug 5869271 end
2949 
2950       okl_stream_generator_pvt.get_accrual_elements(
2951                                p_start_date     =>    l_inflow.start_date,
2952                                p_periods             =>   l_inflow.periods,
2953                                p_frequency           =>   l_inflow.frequency,
2954                                p_structure           =>   l_inflow.structure,
2955                                p_advance_or_arrears  =>   l_inflow.advance_arrears,
2956                                p_amount              =>   l_inflow.amount,
2957 --srsreeni Bug 5917582 start
2958                                --p_stub_days           =>   NULL,
2959                                --p_stub_amount         =>   NULL,
2960                                p_stub_days           =>   l_inflow.stub_days,
2961                                p_stub_amount         =>   l_inflow.stub_amount,
2962 --srsreeni Bug 5917582 end
2963                                p_currency_code       =>   l_hdr.currency_code,
2964                                x_selv_tbl            =>   l_selv_tbl,
2965                                x_return_status       =>   x_return_status);
2966       IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
2967         EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
2968       ELSIF x_return_status = okl_api.g_ret_sts_error THEN
2969         EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
2970       END IF;
2971 
2972 --srsreeni bug 5869271 start add
2973       IF (l_old_cle_id IS NULL OR (l_old_cle_id <> l_inflow.cle_id OR l_old_sty_id <> l_inflow.sty_id)) THEN
2974 --srsreeni bug 5869271 end add
2975 	  -- Code commented and added for user defined streams - HKPATEL
2976 	  IF(g_rep_req_yn = 'Y') THEN
2977 
2978 	    OPEN l_hdr_pdt_csr(p_chr_id);
2979 		FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
2980 		CLOSE l_hdr_pdt_csr;
2981 
2982 	    get_dep_no_prc_stream_type
2983 		(
2984  		  p_khr_id => p_chr_id,
2985  		  p_pdt_id => l_pdt_id_rec.report_pdt_id,
2986  		  p_primary_sty_id => l_inflow.sty_id,
2987  		  p_dependent_sty_purpose => 'PASS_THRU_REV_ACCRUAL',
2988  		  x_return_status => x_return_status,
2989  		  x_dependent_sty_id => l_sty_id
2990 		);
2991 		  IF x_return_status = 'E' THEN
2992 		     x_return_status := 'S';
2993 		  END IF;
2994 
2995 	  ELSE
2996 	    get_dep_no_prc_stream_type
2997 		(
2998  		  p_khr_id => p_chr_id,
2999  		  p_primary_sty_id => l_inflow.sty_id,
3000  		  p_dependent_sty_purpose => 'PASS_THRU_REV_ACCRUAL',
3001  		  x_return_status => x_return_status,
3002  		  x_dependent_sty_id => l_sty_id
3003 		);
3004 		  IF x_return_status = 'E' THEN
3005 		     x_return_status := 'S';
3006 		  END IF;
3007 
3008 	  END IF;
3009 
3010 	  /*
3011       okl_stream_generator_pvt.get_sty_details (
3012                                p_sty_name     => 'PASS THROUGH REVENUE ACCRUAL',
3013                                x_sty_id        => l_sty_id,
3014                                x_sty_name      => l_sty_name,
3015                                x_return_status => x_return_status);
3016       IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3017         EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3018       ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3019         EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3020       END IF;
3021 	  */
3022 	  -- Code commented and added for user defined streams ends here- HKPATEL
3023 	  IF(l_sty_id.id IS NOT NULL) THEN
3024         okl_stream_generator_pvt.get_stream_header(
3025                                p_khr_id        =>   p_chr_id,
3026                                p_kle_id         =>   l_inflow.cle_id,
3027                                p_sty_id         =>   l_sty_id.id,
3028                                p_purpose_code   =>   l_purpose_code,
3029                                x_stmv_rec       =>   l_stmv_rec,
3030                                x_return_status  =>   x_return_status);
3031         IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3032           EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3033         ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3034           EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3035         END IF;
3036         --l_stmv_rec.say_code := 'CURR';
3037 		    l_stmv_rec.say_code := 'WORK';
3038         l_stmv_rec.active_yn := 'Y';
3039         l_stmv_rec.date_working := SYSDATE;
3040         --Added by kthiruva on 09-Feb-2006
3041         --Bug 5029161 - Start of Changes
3042         IF l_selv_tbl.COUNT > 0 THEN
3043           okl_streams_pub.create_streams(p_api_version     =>   p_api_version,
3044                                      p_init_msg_list   =>   p_init_msg_list,
3045                                      x_return_status   =>   x_return_status,
3046                                      x_msg_count       =>   x_msg_count,
3047                                      x_msg_data        =>   x_msg_data,
3048                                      p_stmv_rec        =>   l_stmv_rec,
3049                                      p_selv_tbl        =>   l_selv_tbl,
3050                                      x_stmv_rec        =>   lx_stmv_rec,
3051                                      x_selv_tbl        =>   lx_selv_tbl);
3052           IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3053             EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3054           ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3055             EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3056           END IF;
3057         END IF;
3058          --Bug 5029161 - Start of Changes
3059  	           --srsreeni bug 5869271 start add
3060          l_old_acr_stmv_rec := lx_stmv_rec;
3061          l_last_acr_se_line_number := l_selv_tbl(l_selv_tbl.LAST).se_line_number;
3062         END IF;
3063       ELSE
3064          -- populate the foreign key for the stream elements
3065          IF (l_selv_tbl.COUNT > 0) THEN
3066            i:= l_selv_tbl.FIRST;
3067            LOOP
3068              l_selv_tbl(i).stm_id := l_old_acr_stmv_rec.id;
3069              l_last_acr_se_line_number := l_last_acr_se_line_number + 1;
3070              l_selv_tbl(i).se_line_number := l_last_acr_se_line_number;
3071              EXIT WHEN(i = l_selv_tbl.LAST);
3072              i := l_selv_tbl.NEXT(i);
3073            END LOOP;
3074            -- populate the detail
3075            okl_streams_pub.create_stream_elements(
3076                                p_api_version   => p_api_version
3077                               ,p_init_msg_list => p_init_msg_list
3078                               ,x_return_status => x_return_status
3079                               ,x_msg_count     => x_msg_count
3080                               ,x_msg_data      => x_msg_data
3081                               ,p_selv_tbl      => l_selv_tbl
3082                               ,x_selv_tbl      => lx_selv_tbl);
3083            IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3084              EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3085            ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3086              EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3087            END IF;
3088          END IF;
3089      END IF;
3090       l_old_cle_id := l_inflow.cle_id;
3091       l_old_sty_id := l_inflow.sty_id;
3092      --srsreeni bug 5869271 ends
3093       -- Clear out reusable data structures
3094       l_sty_name  :=  NULL;
3095       l_sty_id    :=  NULL;
3096       l_stmv_rec := NULL;
3097       l_selv_tbl.delete;
3098       lx_stmv_rec := NULL;
3099       lx_selv_tbl.delete;
3100     END LOOP;
3101 --srsreeni Bug 5917582 start
3102 	     l_pt_tbl := l_pt_tbl_tmp;
3103  	     l_pt_pro_fee_tbl := l_pt_pro_fee_tbl_tmp;
3104 --srsreeni Bug 5917582 end
3105 	  -- gboomina - Bug 4746368 - Start
3106    -- moved PASS_THRU_EXP_ACCRUAL stream generation outside the Loop such that PASS_THRU_EXP_ACCRUAL will be dependent on PASS THROUGH FEE purpose.
3107    -------------------------------------------------------------------------------
3108    ----        Code for Generating PASS_THRU_EXP_ACCRUAL Streams              ----
3109    -------------------------------------------------------------------------------
3110 
3111    FOR l_lne_rec in l_line_rec_csr ( p_chr_id, 'FEE' )
3112    LOOP
3113     --Added by kthiruva on 04-Apr-2006
3114     --Perform the below processing only for Passthrough Fees
3115     --Bug 5137824 - Start of Changes
3116     IF (l_lne_rec.fee_type = 'PASSTHROUGH') THEN
3117      OPEN  fee_strm_type_csr  ( l_lne_rec.id, 'FEE' );
3118      FETCH fee_strm_type_csr into l_fee_strm_type_rec;
3119      CLOSE fee_strm_type_csr;
3120 
3121      IF(g_rep_req_yn = 'Y') THEN
3122   	    OPEN l_hdr_pdt_csr(p_chr_id);
3123 		     FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
3124      		CLOSE l_hdr_pdt_csr;
3125 
3126 		     l_pdt_id := l_pdt_id_rec.report_pdt_id;
3127      		l_primary_sty_id := l_fee_strm_type_rec.styp_id;
3128 	      get_dep_no_prc_stream_type
3129 		     (
3130  		       p_khr_id => p_chr_id,
3131       		  p_pdt_id => l_pdt_id_rec.report_pdt_id,
3132       		  p_primary_sty_id => l_fee_strm_type_rec.styp_id,
3133       		  p_dependent_sty_purpose => 'PASS_THRU_EXP_ACCRUAL',
3134       		  x_return_status => x_return_status,
3135       		  x_dependent_sty_id => l_sty_id
3136      		);
3137    		  IF x_return_status = 'E' THEN
3138 		       x_return_status := 'S';
3139    		  END IF;
3140 	    ELSE
3141 	      get_dep_no_prc_stream_type
3142      		(
3143  		      p_khr_id => p_chr_id,
3144      		  p_primary_sty_id => l_fee_strm_type_rec.styp_id,
3145  		      p_dependent_sty_purpose => 'PASS_THRU_EXP_ACCRUAL',
3146       	  x_return_status => x_return_status,
3147      		  x_dependent_sty_id => l_sty_id
3148      		);
3149 		     IF x_return_status = 'E' THEN
3150 		       x_return_status := 'S';
3151 		     END IF;
3152      END IF;
3153 
3154      IF(l_sty_id.id IS NOT NULL) THEN
3155        okl_stream_generator_pvt.get_stream_header(
3156                                p_khr_id      =>   p_chr_id,
3157                                p_kle_id         =>   l_lne_rec.id,
3158                                p_sty_id         =>   l_sty_id.id,
3159                                p_purpose_code   =>   l_purpose_code,
3160                                x_stmv_rec       =>   l_stmv_rec,
3161                                x_return_status  =>   x_return_status);
3162        IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3163          EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3164        ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3165          EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3166        END IF;
3167        l_stmv_rec.say_code := 'WORK';
3168        l_stmv_rec.active_yn := 'Y';
3169        l_stmv_rec.date_working := SYSDATE;
3170 
3171         --Added by kthiruva on 09-Feb-2006
3172         --Bug 5029161 - Start of Changes
3173         IF l_pt_tbl.COUNT > 0 THEN
3174            okl_streams_pub.create_streams(p_api_version     =>   p_api_version,
3175                                       p_init_msg_list   =>   p_init_msg_list,
3176                                       x_return_status   =>   x_return_status,
3177                                       x_msg_count       =>   x_msg_count,
3178                                       x_msg_data        =>   x_msg_data,
3179                                       p_stmv_rec        =>   l_stmv_rec,
3180                                       p_selv_tbl        =>   l_pt_tbl,
3181                                       x_stmv_rec        =>   lx_stmv_rec,
3182                                       x_selv_tbl        =>   lx_selv_tbl);
3183           IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3184             EXIT WHEN (x_return_status = okl_api.g_ret_sts_unexp_error);
3185           ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3186             EXIT WHEN (x_return_status = okl_api.g_ret_sts_error);
3187           END IF;
3188         END IF;
3189         --Bug 5029161 - End of Changes
3190      END IF;
3191 	    -- Clear out reusable data structures
3192      l_sty_name  :=  NULL;
3193      l_sty_id    :=  NULL;
3194      l_stmv_rec := NULL;
3195      l_selv_tbl.delete;
3196      lx_stmv_rec := NULL;
3197      lx_selv_tbl.delete;
3198 
3199     -------------------------------------------------------------------------------
3200     ----        Code for Generating PROCESSING_FEE_ACCRUAL Streams             ----
3201     -------------------------------------------------------------------------------
3202      IF(g_rep_req_yn = 'Y') THEN
3203        OPEN l_hdr_pdt_csr(p_chr_id);
3204     		 FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
3205     		 CLOSE l_hdr_pdt_csr;
3206 
3207     		 l_pdt_id := l_pdt_id_rec.report_pdt_id;
3208      		l_primary_sty_id := l_fee_strm_type_rec.styp_id;
3209 
3210        get_dep_no_prc_stream_type
3211 		     (
3212      		  p_khr_id => p_chr_id,
3213  		      p_pdt_id => l_pdt_id_rec.report_pdt_id,
3214     	 	  p_primary_sty_id => l_fee_strm_type_rec.styp_id,
3215     		   p_dependent_sty_purpose => 'PROCESSING_FEE_ACCRUAL',
3216     		   x_return_status => x_return_status,
3217     		   x_dependent_sty_id => l_sty_id
3218      		);
3219    		  IF x_return_status = 'E' THEN
3220 		       x_return_status := 'S';
3221 		     END IF;
3222 	    ELSE
3223  	     get_dep_no_prc_stream_type
3224 		     (
3225     		   p_khr_id => p_chr_id,
3226     		   p_primary_sty_id => l_fee_strm_type_rec.styp_id,
3227   		     p_dependent_sty_purpose => 'PROCESSING_FEE_ACCRUAL',
3228      		  x_return_status => x_return_status,
3229      		  x_dependent_sty_id => l_sty_id
3230 		     );
3231   		   IF x_return_status = 'E' THEN
3232  		      x_return_status := 'S';
3233 	  	   END IF;
3234   	  END IF;
3235   	  -- Code added and commented ends here - HKPATEL
3236 	    IF(l_sty_id.id IS NOT NULL) THEN
3237        okl_stream_generator_pvt.get_stream_header(
3238                                 p_khr_id         =>   p_chr_id,
3239                                 p_kle_id         =>   l_lne_rec.id,
3240                                 p_sty_id         =>   l_sty_id.id,
3241                                 p_purpose_code   =>   l_purpose_code,
3242                                 x_stmv_rec       =>   l_stmv_rec,
3243                                 x_return_status  =>   x_return_status);
3244        IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3245          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3246        ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3247          RAISE OKL_API.G_EXCEPTION_ERROR;
3248        END IF;
3249        l_stmv_rec.say_code := 'WORK';
3250        l_stmv_rec.active_yn := 'Y';
3251        l_stmv_rec.date_working := SYSDATE;
3252         --Added by kthiruva on 09-Feb-2006
3253         --Bug 5029161 - Start of Changes
3254         IF l_pt_pro_fee_tbl.COUNT > 0 THEN
3255           okl_streams_pub.create_streams(p_api_version     =>   p_api_version,
3256                                       p_init_msg_list   =>   p_init_msg_list,
3257                                       x_return_status   =>   x_return_status,
3258                                       x_msg_count       =>   x_msg_count,
3259                                       x_msg_data        =>   x_msg_data,
3260                                       p_stmv_rec        =>   l_stmv_rec,
3261                                       p_selv_tbl        =>   l_pt_pro_fee_tbl,
3262                                       x_stmv_rec        =>   lx_stmv_rec,
3263                                       x_selv_tbl        =>   lx_selv_tbl);
3264           IF x_return_status = okl_api.g_ret_sts_unexp_error THEN
3265             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3266           ELSIF x_return_status = okl_api.g_ret_sts_error THEN
3267             RAISE OKL_API.G_EXCEPTION_ERROR;
3268           END IF;
3269         END IF;
3270         --Bug 5029161 - End of Changes
3271      END IF;
3272     END IF;
3273     --Bug 5137824 - End of Changes
3274    END LOOP;
3275    -- gboomina Bug 4746368 - End
3276    IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3277      RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3278    ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3279      RAISE OKL_API.G_EXCEPTION_ERROR;
3280    END IF;
3281    OKL_API.END_ACTIVITY (x_msg_count,
3282                           x_msg_data );
3283   EXCEPTION
3284     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3285       IF c_hdr%ISOPEN THEN
3286         CLOSE c_hdr;
3287       END IF;
3288       IF c_inflows%ISOPEN THEN
3289         CLOSE c_hdr;
3290       END IF;
3291       IF l_stmp_yn_csr%ISOPEN THEN
3292         CLOSE l_stmp_yn_csr;
3293       END IF;
3294       IF l_stm_csr%ISOPEN THEN
3295         CLOSE l_stm_csr;
3296       END IF;
3297       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3298                                 l_api_name,
3299                                G_PKG_NAME,
3300                                'OKL_API.G_RET_STS_ERROR',
3301                                x_msg_count,
3302                                x_msg_data,
3303                                '_PVT');
3304     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3305       IF c_hdr%ISOPEN THEN
3306         CLOSE c_hdr;
3307       END IF;
3308       IF c_inflows%ISOPEN THEN
3309         CLOSE c_hdr;
3310       END IF;
3311       IF l_stmp_yn_csr%ISOPEN THEN
3312         CLOSE l_stmp_yn_csr;
3313       END IF;
3314       IF l_stm_csr%ISOPEN THEN
3315         CLOSE l_stm_csr;
3316       END IF;
3317       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3318                                 l_api_name,
3319                                 G_PKG_NAME,
3320                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
3321                                 x_msg_count,
3322                                 x_msg_data,
3323                                 '_PVT');
3324     WHEN OTHERS THEN
3325       IF c_hdr%ISOPEN THEN
3326         CLOSE c_hdr;
3327       END IF;
3328       IF c_inflows%ISOPEN THEN
3329         CLOSE c_hdr;
3330       END IF;
3331       IF l_stmp_yn_csr%ISOPEN THEN
3332         CLOSE l_stmp_yn_csr;
3333       END IF;
3334       IF l_stm_csr%ISOPEN THEN
3335         CLOSE l_stm_csr;
3336       END IF;
3337       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3338                                 l_api_name,
3339                                 G_PKG_NAME,
3340                                 'OTHERS',
3341                                 x_msg_count,
3342                                 x_msg_data,
3343                                 '_PVT');
3344   END adjust_passthrough_streams;
3345 
3346   Procedure alloc_strms_basis_level(
3347             p_api_version   IN NUMBER,
3348             p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3349             x_return_status OUT NOCOPY VARCHAR2,
3350             x_msg_count     OUT NOCOPY NUMBER,
3351             x_msg_data      OUT NOCOPY VARCHAR2,
3352             p_chr_id        IN  NUMBER,
3353             p_sty_id        IN NUMBER,
3354             p_ctrt_cap_amnt IN NUMBER,
3355             p_strmele_tbl   IN strmele_tbl_type) AS
3356 
3357     l_api_name		CONSTANT VARCHAR2(30) := 'ALLOC_STRMS_BASIS_LEVEL';
3358     l_api_version	CONSTANT NUMBER	      := 1;
3359     l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
3360 
3361 
3362     l_ctrt_cap_amnt NUMBER := p_ctrt_cap_amnt;
3363 
3364     l_stmv_rec Okl_Streams_pub.stmv_rec_type;
3365     l_selv_tbl Okl_Streams_pub.selv_tbl_type;
3366     x_stmv_rec Okl_Streams_pub.stmv_rec_type;
3367     x_selv_tbl Okl_Streams_pub.selv_tbl_type;
3368 
3369     i NUMBER;
3370     j NUMBER;
3371     k NUMBER;
3372     TYPE amounts_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3373     amounts amounts_tbl_type;
3374     l_num_per NUMBER;
3375 
3376     l_finline_rec l_line_rec_csr%ROWTYPE;
3377     l_subfee_rec     l_subfee_csr%ROWTYPE;
3378     l_strmele_tbl   strmele_tbl_type := p_strmele_tbl;
3379 
3380   BEGIN
3381 
3382     l_return_status := OKL_API.START_ACTIVITY(
3383 			p_api_name      => l_api_name,
3384 			p_pkg_name      => g_pkg_name,
3385 			p_init_msg_list => p_init_msg_list,
3386 			l_api_version   => l_api_version,
3387 			p_api_version   => p_api_version,
3388 			p_api_type      => G_API_TYPE,
3389 			x_return_status => x_return_status);
3390 
3391     -- check if activity started successfully
3392     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3393        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3394     ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3395        raise OKL_API.G_EXCEPTION_ERROR;
3396     End If;
3397 
3398     FOR l_finline_rec in l_line_rec_csr ( p_chr_id, 'FREE_FORM1')
3399     LOOP
3400 
3401         l_stmv_rec.sty_id := p_sty_id;
3402         l_stmv_rec.khr_id := p_chr_id;
3403         l_stmv_rec.kle_id := l_finline_rec.id;
3404         l_stmv_rec.say_code := 'WORK';
3405         l_stmv_rec.active_yn := 'N';
3406         l_stmv_rec.date_working := sysdate;
3407 
3408         l_stmv_rec.transaction_number := l_strmele_tbl(1).transaction_number;
3409         l_stmv_rec.sgn_code := l_strmele_tbl(1).sgn_code;
3410 
3411         k := 0;
3412         FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_finline_rec.id )
3413         LOOP
3414 
3415             l_num_per  := l_rl_rec1.object1_id1;
3416             k := amounts.COUNT;
3417             FOR j in 1..l_num_per
3418             LOOP
3419                 amounts(j+k) := l_rl_rec1.RULE_INFORMATION6;
3420             END LOOP;
3421 
3422         END LOOP;
3423 
3424         FOR i in 1..l_strmele_tbl.COUNT
3425         LOOP
3426 
3427             l_selv_tbl(i).amount := amounts(i);
3428             l_selv_tbl(i).accrued_yn := l_strmele_tbl(i).accrued_yn;
3429             l_selv_tbl(i).stream_element_date := l_strmele_tbl(i).stream_element_date;
3430             l_selv_tbl(i).date_billed := l_strmele_tbl(i).date_billed;
3431             l_selv_tbl(i).se_line_number := l_strmele_tbl(i).SE_LINE_NUMBER;
3432             l_selv_tbl(i).comments := l_strmele_tbl(i).comments;
3433 
3434         END LOOP;
3435 
3436 
3437 
3438         Okl_Streams_Pub.create_streams(
3439                            p_api_version   => l_api_version
3440                           ,p_init_msg_list => p_init_msg_list
3441                           ,x_return_status => l_return_status
3442                           ,x_msg_count     => x_msg_count
3443                           ,x_msg_data      => x_msg_data
3444                           ,p_stmv_rec      => l_stmv_rec
3445                           ,p_selv_tbl      => l_selv_tbl
3446                           ,x_stmv_rec      => x_stmv_rec
3447                           ,x_selv_tbl      => x_selv_tbl);
3448 
3449        If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3450            raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3451        ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3452            raise OKL_API.G_EXCEPTION_ERROR;
3453        End If;
3454 
3455        l_selv_tbl.DELETE(1, l_selv_tbl.COUNT);
3456        amounts.DELETE(1, amounts.COUNT);
3457        l_stmv_rec := NULL;
3458 
3459 
3460     END LOOP;
3461 
3462 
3463     x_return_status := l_return_status;
3464 
3465     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
3466 
3467   EXCEPTION
3468 	when OKL_API.G_EXCEPTION_ERROR then
3469 		l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3470 			p_api_name  => l_api_name,
3471 			p_pkg_name  => g_pkg_name,
3472 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
3473 			x_msg_count => x_msg_count,
3474 			x_msg_data  => x_msg_data,
3475 			p_api_type  => g_api_type);
3476                 x_return_status := l_return_status;
3477 
3478 	when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3479 		l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3480 			p_api_name  => l_api_name,
3481 			p_pkg_name  => g_pkg_name,
3482 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3483 			x_msg_count => x_msg_count,
3484 			x_msg_data  => x_msg_data,
3485 			p_api_type  => g_api_type);
3486                 x_return_status := l_return_status;
3487                 If( l_strmele_csr%ISOPEN ) Then
3488                     CLOSE l_strmele_csr;
3489                 End If;
3490 
3491 
3492 	when OTHERS then
3493           	l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3494 			p_api_name  => l_api_name,
3495 			p_pkg_name  => g_pkg_name,
3496 			p_exc_name  => 'OTHERS',
3497 			x_msg_count => x_msg_count,
3498 			x_msg_data  => x_msg_data,
3499 			p_api_type  => g_api_type);
3500                 x_return_status := l_return_status;
3501 
3502 
3503   END alloc_strms_basis_level;
3504 
3505 
3506   Procedure alloc_strms_basis_capital(
3507             p_api_version   IN NUMBER,
3508             p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3509             x_return_status OUT NOCOPY VARCHAR2,
3510             x_msg_count     OUT NOCOPY NUMBER,
3511             x_msg_data      OUT NOCOPY VARCHAR2,
3512             p_chr_id        IN  NUMBER,
3513             p_sty_id        IN NUMBER,
3514             p_ctrt_cap_amnt IN NUMBER,
3515             p_strmele_tbl   IN strmele_tbl_type) AS
3516 
3517     l_api_name		CONSTANT VARCHAR2(30) := 'ALLOC_STRMS_BASIS_CAPITAL';
3518     l_api_version	CONSTANT NUMBER	      := 1;
3519     l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
3520 
3521 
3522 
3523     l_finline_rec l_line_rec_csr%ROWTYPE;
3524     l_strmele_tbl   strmele_tbl_type := p_strmele_tbl;
3525     l_subfee_rec     l_subfee_csr%ROWTYPE;
3526 
3527     i NUMBER;
3528     l_line_amnt NUMBER;
3529     l_feeline_amnt NUMBER;
3530     l_superTval NUMBER;
3531     l_alloc_value NUMBER;
3532     l_ctrt_cap_amnt NUMBER := p_ctrt_cap_amnt;
3533 
3534     l_stmv_rec Okl_Streams_pub.stmv_rec_type;
3535     l_selv_tbl Okl_Streams_pub.selv_tbl_type;
3536     x_stmv_rec Okl_Streams_pub.stmv_rec_type;
3537     x_selv_tbl Okl_Streams_pub.selv_tbl_type;
3538 
3539   BEGIN
3540 
3541     l_return_status := OKL_API.START_ACTIVITY(
3542 			p_api_name      => l_api_name,
3543 			p_pkg_name      => g_pkg_name,
3544 			p_init_msg_list => p_init_msg_list,
3545 			l_api_version   => l_api_version,
3546 			p_api_version   => p_api_version,
3547 			p_api_type      => G_API_TYPE,
3548 			x_return_status => x_return_status);
3549 
3550 
3551     -- check if activity started successfully
3552     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3553        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3554     ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3555        raise OKL_API.G_EXCEPTION_ERROR;
3556     End If;
3557 
3558 
3559     FOR l_finline_rec in l_line_rec_csr ( p_chr_id, 'FREE_FORM1')
3560     LOOP
3561 
3562         l_stmv_rec.sty_id := p_sty_id;
3563         l_stmv_rec.khr_id := p_chr_id;
3564         l_stmv_rec.kle_id := l_finline_rec.id;
3565         l_stmv_rec.say_code := 'CURR';
3566         l_stmv_rec.active_yn :=  'Y';
3567         l_stmv_rec.date_current := sysdate;
3568 
3569         l_stmv_rec.transaction_number := l_strmele_tbl(1).transaction_number;
3570         l_stmv_rec.sgn_code := l_strmele_tbl(1).sgn_code;
3571         l_stmv_rec.id := l_strmele_tbl(1).stm_id;
3572 
3573 
3574         l_line_amnt := l_finline_rec.capital_amount;
3575 
3576         OPEN l_subfee_csr( l_finline_rec.id,
3577                            'LINK_FEE_ASSET',
3578                            'OKX_COVASST');
3579         FETCH l_subfee_csr INTO l_subfee_rec;
3580         If( l_subfee_csr%NOTFOUND ) Then
3581             l_feeline_amnt := 0.0;
3582         Else
3583             l_feeline_amnt := l_subfee_rec.capital_amount;
3584         End If;
3585         CLOSE l_subfee_csr;
3586 
3587         FOR i in 1..l_strmele_tbl.COUNT
3588         LOOP
3589             l_superTval := l_strmele_tbl(i).AMOUNT;
3590             l_alloc_value := (l_superTval * ( l_line_amnt + l_feeline_amnt )) / l_ctrt_cap_amnt;
3591 
3592             l_selv_tbl(i).amount := l_alloc_value;
3593             l_selv_tbl(i).accrued_yn := l_strmele_tbl(i).accrued_yn;
3594             l_selv_tbl(i).stream_element_date := l_strmele_tbl(i).stream_element_date;
3595             l_selv_tbl(i).date_billed := l_strmele_tbl(i).date_billed;
3596             l_selv_tbl(i).comments := l_strmele_tbl(i).comments;
3597             l_selv_tbl(i).se_line_number := l_strmele_tbl(i).SE_LINE_NUMBER;
3598 
3599         END LOOP;
3600 
3601 
3602         Okl_Streams_Pub.update_streams(
3603                            p_api_version   => l_api_version
3604                           ,p_init_msg_list => p_init_msg_list
3605                           ,x_return_status => l_return_status
3606                           ,x_msg_count     => x_msg_count
3607                           ,x_msg_data      => x_msg_data
3608                           ,p_stmv_rec      => l_stmv_rec
3609                           ,x_stmv_rec      => x_stmv_rec);
3610 
3611 
3612 
3613         If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3614             raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3615         ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3616             raise OKL_API.G_EXCEPTION_ERROR;
3617         End If;
3618 
3619 
3620 
3621 	FOR i in 1..l_selv_tbl.COUNT
3622         LOOP
3623           l_selv_tbl(i).stm_id := x_stmv_rec.id;
3624         END LOOP;
3625 
3626         Okl_Streams_Pub.create_stream_elements(
3627                            p_api_version   => l_api_version
3628                           ,p_init_msg_list => p_init_msg_list
3629                           ,x_return_status => l_return_status
3630                           ,x_msg_count     => x_msg_count
3631                           ,x_msg_data      => x_msg_data
3632                           ,p_selv_tbl      => l_selv_tbl
3633                           ,x_selv_tbl      => x_selv_tbl);
3634 
3635        If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3636            raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3637        ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3638            raise OKL_API.G_EXCEPTION_ERROR;
3639        End If;
3640 
3641        l_selv_tbl.DELETE(1, l_selv_tbl.COUNT);
3642        l_stmv_rec := NULL;
3643 
3644 
3645     END LOOP;
3646 
3647     x_return_status := l_return_status;
3648 
3649     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
3650 
3651   EXCEPTION
3652 	when OKL_API.G_EXCEPTION_ERROR then
3653 		l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3654 			p_api_name  => l_api_name,
3655 			p_pkg_name  => g_pkg_name,
3656 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
3657 			x_msg_count => x_msg_count,
3658 			x_msg_data  => x_msg_data,
3659 			p_api_type  => g_api_type);
3660                 x_return_status := l_return_status;
3661 
3662 	when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3663 		l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3664 			p_api_name  => l_api_name,
3665 			p_pkg_name  => g_pkg_name,
3666 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3667 			x_msg_count => x_msg_count,
3668 			x_msg_data  => x_msg_data,
3669 			p_api_type  => g_api_type);
3670                 x_return_status := l_return_status;
3671                 If( l_strmele_csr%ISOPEN ) Then
3672                     CLOSE l_strmele_csr;
3673                 End If;
3674 
3675 
3676 	when OTHERS then
3677           	l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3678 			p_api_name  => l_api_name,
3679 			p_pkg_name  => g_pkg_name,
3680 			p_exc_name  => 'OTHERS',
3681 			x_msg_count => x_msg_count,
3682 			x_msg_data  => x_msg_data,
3683 			p_api_type  => g_api_type);
3684                 x_return_status := l_return_status;
3685 
3686 
3687   END alloc_strms_basis_capital;
3688 
3689   Procedure allocate_streams(
3690             p_api_version   IN NUMBER,
3691             p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3692             x_return_status OUT NOCOPY VARCHAR2,
3693             x_msg_count     OUT NOCOPY NUMBER,
3694             x_msg_data      OUT NOCOPY VARCHAR2,
3695             p_chr_id        IN  NUMBER) AS
3696 
3697     l_api_name		CONSTANT VARCHAR2(30) := 'ALLOCATE_STREAMS';
3698     l_api_version	CONSTANT NUMBER	      := 1;
3699     l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
3700     l_ctrt_cap_amnt     NUMBER;
3701     l_strmele_rec l_strmele_csr%ROWTYPE;
3702     l_strmele_tbl   strmele_tbl_type;
3703     i NUMBER;
3704 
3705     Cursor l_strms_csr ( chrId NUMBER, st VARCHAR2 ) IS
3706     Select sty.id sty_id,
3707            sty.name
3708     From okl_streams str,
3709          okl_strm_type_tl sty
3710     Where sty.id = str.sty_id
3711        and str.khr_id = chrId
3712        and sty.name = st
3713        and sty.language = 'US'
3714        and nvl( str.kle_id, 'XXX' ) = 'XXX';
3715 
3716     l_strm_rec l_strms_csr%ROWTYPE;
3717 
3718   BEGIN
3719 
3720     print( l_api_name, 'begin');
3721 
3722     l_return_status := OKL_API.START_ACTIVITY(
3723 			p_api_name      => l_api_name,
3724 			p_pkg_name      => g_pkg_name,
3725 			p_init_msg_list => p_init_msg_list,
3726 			l_api_version   => l_api_version,
3727 			p_api_version   => p_api_version,
3728 			p_api_type      => G_API_TYPE,
3729 			x_return_status => x_return_status);
3730 
3731     -- check if activity started successfully
3732     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3733        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3734     ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3735        raise OKL_API.G_EXCEPTION_ERROR;
3736     End If;
3737 
3738     execute_formula(p_api_version   => l_api_version,
3739                     p_init_msg_list => p_init_msg_list,
3740                     x_return_status => l_return_status,
3741                     x_msg_count     => x_msg_count,
3742                     x_msg_data      => x_msg_data,
3743                     p_formula_name  => 'CONTRACT_CAP_AMNT',
3744                     p_contract_id   => p_chr_id,
3745                     p_line_id       => NULL,
3746                     x_value         => l_ctrt_cap_amnt);
3747     print( l_api_name, 'execute formula', x_return_status);
3748 
3749     -- check if activity started successfully
3750     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
3751        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3752     ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
3753        raise OKL_API.G_EXCEPTION_ERROR;
3754     End If;
3755 
3756     If (l_ctrt_cap_amnt <= 0) Then
3757         okl_api.set_message(
3758            p_app_name => G_APP_NAME,
3759            p_msg_name => 'G_INVALID_CONTRACT_CAP_AMNT');
3760        raise OKL_API.G_EXCEPTION_ERROR;
3761     End If;
3762 
3763 /*
3764     FOR j in 1..n l_strms_csr ( TO_NUMBER(p_chr_id ), 'STREAM TYPE')
3765     LOOP
3766     */
3767 
3768             OPEN  l_strms_csr(  TO_NUMBER(p_chr_id ), 'STREAM TYPE');
3769             FETCH l_strms_csr INTO l_strm_rec;
3770             CLOSE l_strms_csr;
3771 
3772             i := 0;
3773             FOR l_strmele_rec in l_strmele_csr ( p_chr_id, l_strm_rec.sty_id)
3774             LOOP
3775 
3776                 i := i + 1;
3777                 l_strmele_tbl(i).DATE_BILLED := l_strmele_rec.DATE_BILLED;
3778                 l_strmele_tbl(i).STREAM_ELEMENT_DATE := l_strmele_rec.STREAM_ELEMENT_DATE;
3779                 l_strmele_tbl(i).AMOUNT := l_strmele_rec.AMOUNT;
3780                 l_strmele_tbl(i).ACCRUED_YN := l_strmele_rec.ACCRUED_YN;
3781                 l_strmele_tbl(i).comments := l_strmele_rec.comments;
3782                 l_strmele_tbl(i).se_line_number := l_strmele_rec.SE_LINE_NUMBER;
3783                 l_strmele_tbl(i).sgn_code := l_strmele_rec.SGN_CODE;
3784                 l_strmele_tbl(i).stm_id := l_strmele_rec.STM_ID;
3785                 l_strmele_tbl(i).transaction_number := l_strmele_rec.TRANSACTION_NUMBER;
3786 
3787             END LOOP;
3788 
3789 
3790             alloc_strms_basis_capital(
3791                         p_api_version       => p_api_version,
3792                         p_init_msg_list     => p_init_msg_list,
3793                         x_return_status     => l_return_status,
3794                         x_msg_count         => x_msg_count,
3795                         x_msg_data          => x_msg_data,
3796                         p_chr_id            => TO_NUMBER(p_chr_id),
3797                         p_sty_id            => l_strm_rec.sty_id,
3798                         p_ctrt_cap_amnt     => l_ctrt_cap_amnt,
3799                         p_strmele_tbl       => l_strmele_tbl );
3800 
3801             IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3802                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3803             ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
3804                RAISE OKL_API.G_EXCEPTION_ERROR;
3805             END IF;
3806 
3807        l_strmele_tbl.DELETE(1, l_strmele_tbl.COUNT);
3808 
3809 --    END LOOP;
3810 
3811     x_return_status := l_return_status;
3812 
3813     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
3814 
3815   EXCEPTION
3816 	when OKL_API.G_EXCEPTION_ERROR then
3817 		l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3818 			p_api_name  => l_api_name,
3819 			p_pkg_name  => g_pkg_name,
3820 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
3821 			x_msg_count => x_msg_count,
3822 			x_msg_data  => x_msg_data,
3823 			p_api_type  => g_api_type);
3824                 x_return_status := l_return_status;
3825 
3826 	when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
3827 		l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3828 			p_api_name  => l_api_name,
3829 			p_pkg_name  => g_pkg_name,
3830 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3831 			x_msg_count => x_msg_count,
3832 			x_msg_data  => x_msg_data,
3833 			p_api_type  => g_api_type);
3834                 x_return_status := l_return_status;
3835                 If( strm_name_csr%ISOPEN ) Then
3836                     CLOSE strm_name_csr;
3837                 End If;
3838 
3839 	when OTHERS then
3840           	l_return_status := OKL_API.HANDLE_EXCEPTIONS(
3841 			p_api_name  => l_api_name,
3842 			p_pkg_name  => g_pkg_name,
3843 			p_exc_name  => 'OTHERS',
3844 			x_msg_count => x_msg_count,
3845 			x_msg_data  => x_msg_data,
3846 			p_api_type  => g_api_type);
3847                 x_return_status := l_return_status;
3848 
3849   End allocate_streams;
3850 -- Start modification 11i10 bakuchib
3851     PROCEDURE create_interim_rental_streams(p_api_version    IN NUMBER,
3852                                           p_init_msg_list  IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
3853                                           x_return_status  OUT NOCOPY VARCHAR2,
3854                                           x_msg_count      OUT NOCOPY NUMBER,
3855                                           x_msg_data       OUT NOCOPY VARCHAR2,
3856                                           p_chr_id         IN  NUMBER,
3857                                           p_purpose        IN VARCHAR2) AS
3858     l_api_name		CONSTANT VARCHAR2(256) := 'INTERIM_STREAMS';
3859     l_return_status	         VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
3860     i                         NUMBER;
3861     j                         NUMBER;
3862     l_orig_amount             NUMBER;
3863     l_rebook_amount           NUMBER;
3864     l_structure               NUMBER;
3865     error                     VARCHAR2(256);
3866     --styid                     NUMBER;
3867 	styid                     strm_rec_type;
3868     stream_name               VARCHAR2(256);
3869     lv_chr_secure             VARCHAR2(3) := OKL_API.G_FALSE;
3870     ln_secure_amt             NUMBER := 0;
3871     -- get the transaction number
3872     CURSOR l_strm_csr (chrId NUMBER, pp VARCHAR2 )
3873     IS
3874     SELECT DISTINCT str.transaction_number transaction_number
3875     FROM okl_streams str
3876     WHERE str.khr_id = chrId
3877     AND str.say_code = 'CURR'
3878     AND nvl(str.purpose_code, 'ORIGIN') = pp;
3879     -- Billable rents
3880 
3881     -- Bug 4164120 changes start
3882 
3883     CURSOR l_billedrents_csr(chrId NUMBER, kleid NUMBER, p VARCHAR2)
3884     IS
3885     SELECT nvl(sum(ele.AMOUNT),0)
3886     FROM okl_strm_elements ele,
3887          okl_streams str,
3888 	 okl_strm_type_b sty
3889     WHERE str.khr_id = chrId
3890     AND nvl(str.kle_id, -1) = kleid
3891     AND str.sty_id  = sty.id
3892     AND str.say_code = 'CURR'
3893     AND nvl(str.purpose_code, 'ORIGIN') = p
3894     AND sty.stream_type_purpose <> 'REBOOK_BILLING_ADJUSTMENT'
3895     AND ele.stm_id = str.id
3896     AND nvl(ele.date_billed, sysdate+1) < sysdate;
3897 
3898     -- Bug 4164120 changes end
3899 
3900     -- Get the Line info
3901     CURSOR l_line_csr( chrid NUMBER )
3902     IS
3903     SELECT kle.id,
3904            kle.oec,
3905            kle.residual_code,
3906            kle.capital_amount,
3907            kle.delivered_date,
3908            kle.date_funding_required,
3909            kle.residual_grnty_amount,
3910            kle.date_funding,
3911            kle.residual_value,
3912            kle.amount,
3913            kle.price_negotiated,
3914            kle.start_date,
3915            kle.end_date,
3916            kle.orig_system_id1,
3917            kle.initial_direct_cost,
3918            tl.item_description,
3919            tl.name
3920     FROM okl_k_lines_full_v kle,
3921          okc_line_styles_b lse,
3922          okc_k_lines_tl tl,
3923          okc_statuses_b sts
3924     WHERE kle.lse_id = lse.id
3925     AND lse.lty_code in ( 'FREE_FORM1', 'FEE', 'SOLD_SERVICE', 'LINK_SERV_ASSET')--bug# 3343133 (ssiruvol)
3926     AND tl.id = kle.id
3927     AND tl.language = USERENV('LANG')
3928     AND kle.dnz_chr_id = chrid
3929     AND sts.code = kle.sts_code
3930 --Start of bug#3121708 modification BAKUCHIB
3931     AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
3932 --End of bug#3121708 modification BAKUCHIB
3933 
3934     --  Get the Header info
3935     CURSOR l_hdr_csr(  chrId NUMBER )
3936     IS
3937     SELECT chr.orig_system_source_code,
3938            chr.start_date,
3939            chr.authoring_org_id,
3940            chr.inv_organization_id,
3941            khr.deal_type,
3942            pdt.id  pid,
3943            chr.currency_code currency_code,
3944            khr.term_duration term,
3945            chr.orig_system_id1
3946     FROM okc_k_headers_v chr,
3947          okl_k_headers khr,
3948          okl_products_v pdt
3949     WHERE khr.id = chr.id
3950     AND chr.id = chrId
3951     AND khr.pdt_id = pdt.id(+);
3952     -- Get the Stream id
3953     CURSOR get_styid_csr(p_strm_name OKL_STRM_TYPE_TL.NAME%TYPE)
3954     IS
3955     SELECT nvl(tl.id,-1) id,
3956            b.stream_type_subclass
3957     FROM okl_strm_type_tl tl,
3958          okl_strm_type_b b
3959     WHERE tl.language = USERENV('LANG')
3960     AND tl.name = p_strm_name
3961     AND tl.id = b.id;
3962 
3963 	-- Added for user defined streams - HKPATEL
3964 	l_strm_name VARCHAR2(30);
3965 
3966 	-- Added code ends here - HKPATEL
3967 
3968     l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
3969     l_hdr_rec                 l_hdr_csr%ROWTYPE;
3970     l_rl_rec1                 l_rl_csr1%ROWTYPE;
3971     l_line_rec                l_line_csr%ROWTYPE;
3972     l_strm_rec                l_strm_csr%ROWTYPE;
3973     l_styid_rec               get_styid_csr%ROWTYPE;
3974     l_stmv_rec                Okl_Streams_pub.stmv_rec_type;
3975     l_stmv_rec_intm_rentals   Okl_Streams_pub.stmv_rec_type;
3976     l_selv_tbl                Okl_Streams_pub.selv_tbl_type;
3977     l_selv_tbl_intm_rentals   Okl_Streams_pub.selv_tbl_type;
3978     x_stmv_rec                Okl_Streams_pub.stmv_rec_type;
3979     x_selv_tbl                Okl_Streams_pub.selv_tbl_type;
3980     l_stmv_rec_secure         Okl_Streams_pub.stmv_rec_type;
3981     l_selv_tbl_secure         Okl_Streams_pub.selv_tbl_type;
3982     lx_stmv_rec_secure        Okl_Streams_pub.stmv_rec_type;
3983     lx_selv_tbl_secure        Okl_Streams_pub.selv_tbl_type;
3984     lx_inv_agmt_chr_id_tbl    okl_securitization_pvt.inv_agmt_chr_id_tbl_type;
3985   BEGIN
3986     x_return_status := OKL_API.G_RET_STS_SUCCESS;
3987     -- Call start_activity to create savepoint, check compatibility
3988     -- and initialize message list
3989     x_return_status := OKL_API.START_ACTIVITY (
3990                                l_api_name
3991                                ,p_init_msg_list
3992                                ,'_PVT'
3993                                ,x_return_status);
3994     -- Check if activity started successfully
3995     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3996        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3997     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3998        RAISE OKL_API.G_EXCEPTION_ERROR;
3999     END IF;
4000     -- get the stream id
4001 	-- Code added and commented for user defined streams - HKPATEL
4002 	IF(g_rep_req_yn = 'Y') THEN
4003 
4004 	  OPEN l_hdr_pdt_csr(p_chr_id);
4005 	  FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
4006 	  CLOSE l_hdr_pdt_csr;
4007 
4008       get_primary_no_prc_stream_type
4009       (
4010         p_khr_id =>p_chr_id,
4011         p_pdt_id =>l_pdt_id_rec.report_pdt_id,
4012         p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
4013         x_return_status => x_return_status,
4014         x_primary_sty_id =>styid
4015       );
4016 		  IF x_return_status = 'E' THEN
4017 		     x_return_status := 'S';
4018 		  END IF;
4019 
4020 
4021 	ELSE
4022       get_primary_no_prc_stream_type
4023       (
4024         p_khr_id =>p_chr_id,
4025         p_pdt_id =>l_pdt_id_rec.pid,
4026         p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
4027         x_return_status => x_return_status,
4028         x_primary_sty_id =>styid
4029       );
4030 		  IF x_return_status = 'E' THEN
4031 		     x_return_status := 'S';
4032 		  END IF;
4033 
4034 	END IF;
4035 
4036 	/*
4037 	OPEN primary_sty_name_csr(p_chr_id => p_chr_id,
4038 		 				  p_purpose => 'REBOOK_BILLING_ADJUSTMENT');
4039 	FETCH primary_sty_name_csr into l_strm_name;
4040     IF primary_sty_name_csr%NOTFOUND THEN
4041        okl_api.set_message(p_app_name      => G_APP_NAME,
4042                            p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4043                            p_token1        => G_COL_NAME_TOKEN,
4044                            p_token1_value  => 'Stream name');
4045        RAISE OKL_API.G_EXCEPTION_ERROR;
4046     END IF;
4047 	CLOSE primary_sty_name_csr;
4048 
4049 
4050     OPEN  get_styid_csr(p_strm_name => l_strm_name);
4051     FETCH get_styid_csr INTO l_styid_rec;
4052     IF get_styid_csr%NOTFOUND THEN
4053        okl_api.set_message(p_app_name      => G_APP_NAME,
4054                            p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4055                            p_token1        => G_COL_NAME_TOKEN,
4056                            p_token1_value  => 'Stream name');
4057        RAISE OKL_API.G_EXCEPTION_ERROR;
4058     END IF;
4059     CLOSE get_styid_csr;
4060 
4061 
4062 
4063     IF l_styid_rec.id = -1 THEN
4064        okl_api.set_message(p_app_name      => G_APP_NAME,
4065                            p_msg_name      => G_INVALID_VALUE,
4066                            p_token1        => G_COL_NAME_TOKEN,
4067                            p_token1_value  => 'Stream ID');
4068       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4069     END IF;
4070 	-- added code for user defined streams ends here
4071 	*/
4072     -- get the transaction number
4073     OPEN  l_strm_csr (p_chr_id, p_purpose);
4074     FETCH l_strm_csr INTO l_strm_rec;
4075     IF l_strm_csr%NOTFOUND THEN
4076        okl_api.set_message(p_app_name      => G_APP_NAME,
4077                            p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4078                            p_token1        => G_COL_NAME_TOKEN,
4079                            p_token1_value  => 'Chr_id and for '||p_purpose);
4080        RAISE OKL_API.G_EXCEPTION_ERROR;
4081     END IF;
4082     CLOSE l_strm_csr;
4083     -- Get the header info
4084     OPEN  l_hdr_csr (p_chr_id);
4085     FETCH l_hdr_csr INTO l_hdr_rec;
4086     IF l_hdr_csr%NOTFOUND THEN
4087        okl_api.set_message(p_app_name      => G_APP_NAME,
4088                            p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4089                            p_token1        => G_COL_NAME_TOKEN,
4090                            p_token1_value  => 'Chr_id ');
4091        RAISE OKL_API.G_EXCEPTION_ERROR;
4092     END IF;
4093     CLOSE l_hdr_csr;
4094     -- Get the line info
4095     FOR l_line_rec IN l_line_csr (p_chr_id) LOOP
4096       l_stmv_rec_intm_rentals.khr_id := p_chr_id;
4097       l_stmv_rec_intm_rentals.kle_id := l_line_rec.id;
4098       l_stmv_rec_intm_rentals.say_code := 'CURR';
4099       IF (p_purpose = 'REPORT') THEN
4100         l_stmv_rec_intm_rentals.active_yn := 'N';
4101       ELSE
4102         l_stmv_rec_intm_rentals.active_yn := 'Y';
4103       END IF;
4104       l_stmv_rec_intm_rentals.date_current := sysdate;
4105       l_stmv_rec_intm_rentals.transaction_number := l_strm_rec.transaction_number;
4106       l_stmv_rec_intm_rentals.sgn_code := 'MANL';
4107       -- get Billabel Rentals original contract
4108 
4109 
4110 	  OPEN l_hdr_pdt_csr(p_chr_id);
4111       FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
4112 	  CLOSE l_hdr_pdt_csr;
4113 
4114         OPEN  l_billedrents_csr(l_hdr_rec.orig_system_id1, l_line_rec.orig_system_id1, p_purpose );
4115         FETCH l_billedrents_csr INTO l_orig_amount;
4116         IF l_billedrents_csr%NOTFOUND THEN
4117           okl_api.set_message(p_app_name     => G_APP_NAME,
4118                              p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4119                              p_token1        => G_COL_NAME_TOKEN,
4120                              p_token1_value  => 'Orig System Chr_id/Line id and for '||p_purpose);
4121           x_return_status := OKL_API.G_RET_STS_ERROR;
4122           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4123         END IF;
4124         CLOSE l_billedrents_csr;
4125       -- get Billabel Rentals contract id sent as parameter
4126         OPEN  l_billedrents_csr(p_chr_id,l_line_rec.id,p_purpose );
4127         FETCH l_billedrents_csr INTO l_rebook_amount;
4128         IF l_billedrents_csr%NOTFOUND THEN
4129           okl_api.set_message(p_app_name     => G_APP_NAME,
4130                              p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4131                              p_token1        => G_COL_NAME_TOKEN,
4132                              p_token1_value  => 'Chr_id/Line id and for '||p_purpose);
4133           x_return_status := OKL_API.G_RET_STS_ERROR;
4134           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4135         END IF;
4136         CLOSE l_billedrents_csr;
4137 
4138 
4139       l_selv_tbl_intm_rentals(1).amount := l_rebook_amount - l_orig_amount;
4140       l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
4141       l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
4142       l_selv_tbl_intm_rentals(1).se_line_number := 1;
4143       l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Rebooked Rentals';
4144       --bug# 3014721
4145       --l_selv_tbl_intm_rentals(1).date_billed := sysdate;
4146       --l_stmv_rec_intm_rentals.sty_id := l_styid_rec.id;
4147 	  l_stmv_rec_intm_rentals.sty_id := styid.id;
4148       IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
4149         Okl_Streams_Pub.create_streams(
4150                         p_api_version   => p_api_version,
4151                         p_init_msg_list => p_init_msg_list,
4152                         x_return_status => x_return_status,
4153                         x_msg_count     => x_msg_count,
4154                         x_msg_data      => x_msg_data,
4155                         p_stmv_rec      => l_stmv_rec_intm_rentals,
4156                         p_selv_tbl      => l_selv_tbl_intm_rentals,
4157                         x_stmv_rec      => x_stmv_rec,
4158                         x_selv_tbl      => x_selv_tbl);
4159         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4160           EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4161         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4162           EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4163         END IF;
4164       END IF;
4165       -- Check for Original contract is securitized
4166       okl_securitization_pvt.check_khr_securitized(
4167                              p_api_version              => p_api_version,
4168                              p_init_msg_list            => p_init_msg_list,
4169                              x_return_status            => x_return_status,
4170                              x_msg_count                => x_msg_count,
4171                              x_msg_data                 => x_msg_data,
4172                              p_khr_id                   => l_hdr_rec.orig_system_id1,
4173                              p_effective_date           => l_line_rec.start_date,
4174                              p_effective_date_operator  => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
4175                              p_stream_type_subclass     => l_styid_rec.stream_type_subclass,
4176                              x_value                    => lv_chr_secure,
4177                              x_inv_agmt_chr_id_tbl      => lx_inv_agmt_chr_id_tbl);
4178       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4179         EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4180       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4181         EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4182       END IF;
4183       IF lv_chr_secure = OKL_API.G_TRUE THEN
4184         -- get the stream id
4185 		-- code added for user defined stream
4186 	    IF(g_rep_req_yn = 'Y') THEN
4187           get_primary_no_prc_stream_type
4188           (
4189             p_khr_id =>p_chr_id,
4190             p_pdt_id =>l_pdt_id_rec.report_pdt_id,
4191             p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
4192             x_return_status => x_return_status,
4193             x_primary_sty_id =>styid
4194           );
4195 		  IF x_return_status = 'E' THEN
4196 		     x_return_status := 'S';
4197 		  END IF;
4198 
4199 	    ELSE
4200           get_primary_no_prc_stream_type
4201           (
4202             p_khr_id =>p_chr_id,
4203             p_pdt_id =>l_pdt_id_rec.pid,
4204             p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
4205             x_return_status => x_return_status,
4206             x_primary_sty_id =>styid
4207           );
4208 		  IF x_return_status = 'E' THEN
4209 		     x_return_status := 'S';
4210 		  END IF;
4211 
4212 	    END IF;
4213 	/*
4214         --OPEN  get_styid_csr(p_strm_name => 'INVESTOR DISBURSEMENT ADJUSTMENT');
4215 		OPEN  get_styid_csr(p_strm_name => l_strm_name);
4216 
4217 
4218         FETCH get_styid_csr INTO l_styid_rec;
4219         IF get_styid_csr%NOTFOUND THEN
4220           okl_api.set_message(p_app_name      => G_APP_NAME,
4221                               p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4222                               p_token1        => G_COL_NAME_TOKEN,
4223                               p_token1_value  => 'Stream name');
4224           x_return_status := OKL_API.G_RET_STS_ERROR;
4225           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4226         END IF;
4227         CLOSE get_styid_csr;
4228         IF l_styid_rec.id = -1 THEN
4229           okl_api.set_message(p_app_name      => G_APP_NAME,
4230                               p_msg_name      => G_INVALID_VALUE,
4231                               p_token1        => G_COL_NAME_TOKEN,
4232                              p_token1_value  => 'Stream ID');
4233           x_return_status := OKL_API.G_RET_STS_ERROR;
4234           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4235         END IF;
4236 	*/
4237 -- Added code for user defined stream ends here
4238         -- Get the amount
4239 	-- LOOP start.
4240         okl_securitization_pvt.check_kle_securitized(
4241                                p_api_version              => p_api_version,
4242                                p_init_msg_list            => p_init_msg_list,
4243                                x_return_status            => x_return_status,
4244                                x_msg_count                => x_msg_count,
4245                                x_msg_data                 => x_msg_data,
4246                                p_kle_id                   => l_line_rec.orig_system_id1,
4247                                p_effective_date           => l_line_rec.start_date,
4248                                p_effective_date_operator  => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
4249                                p_stream_type_subclass     => l_styid_rec.stream_type_subclass,
4250                                x_value                    => lv_chr_secure,
4251                                x_inv_agmt_chr_id_tbl      => lx_inv_agmt_chr_id_tbl);
4252         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4253           EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4254         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4255           EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4256         END IF;
4257 
4258 --Start of modification Bug#3293300 - BAKUCHIB
4259    FOR i in lx_inv_agmt_chr_id_tbl.FIRST..lx_inv_agmt_chr_id_tbl.LAST LOOP
4260 --End of modification Bug#3293300 - BAKUCHIB
4261         ln_secure_amt := okl_investor_invoice_disb_pvt.get_disb_amt(
4262 	                                               p_ia_id       => lx_inv_agmt_chr_id_tbl(i).khr_id,
4263                                                        p_rbk_khr_id => l_hdr_rec.orig_system_id1,
4264                                                        p_rbk_kle_id => l_line_rec.orig_system_id1);
4265         l_stmv_rec_secure := l_stmv_rec_intm_rentals;
4266         l_selv_tbl_secure := l_selv_tbl_intm_rentals;
4267         --l_stmv_rec_secure.sty_id := l_styid_rec.id;
4268 		l_stmv_rec_secure.sty_id := styid.id;
4269 
4270         l_stmv_rec_secure.source_id := lx_inv_agmt_chr_id_tbl(i).khr_id;
4271         l_stmv_rec_secure.source_table := 'OKL_K_HEADERS';
4272 
4273         l_selv_tbl_secure(1).amount := ln_secure_amt * -1;
4274 
4275         IF l_selv_tbl_secure(1).amount <> 0 THEN
4276 
4277           okl_streams_pub.create_streams(
4278                           p_api_version   => p_api_version,
4279                           p_init_msg_list => p_init_msg_list,
4280                           x_return_status => x_return_status,
4281                           x_msg_count     => x_msg_count,
4282                           x_msg_data      => x_msg_data,
4283                           p_stmv_rec      => l_stmv_rec_secure,
4284                           p_selv_tbl      => l_selv_tbl_secure,
4285                           x_stmv_rec      => lx_stmv_rec_secure,
4286                           x_selv_tbl      => lx_selv_tbl_secure);
4287           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4288             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4289           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4290             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4291           END IF;
4292 
4293         END IF;
4294 
4295         l_selv_tbl_secure.DELETE;
4296         l_selv_tbl_secure := l_selv_tbl;
4297         l_stmv_rec_secure := l_stmv_rec;
4298 
4299   END LOOP;
4300 
4301 	-- LOOP end.
4302       END if;
4303       l_selv_tbl_intm_rentals.DELETE;
4304       l_selv_tbl_intm_rentals := l_selv_tbl;
4305       l_stmv_rec_intm_rentals := l_stmv_rec;
4306     END LOOP;
4307     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4308       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4309     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4310       RAISE OKL_API.G_EXCEPTION_ERROR;
4311     END IF;
4312     -- for the contract header level.
4313     l_stmv_rec_intm_rentals.khr_id := TO_NUMBER(p_chr_id);
4314     l_stmv_rec_intm_rentals.kle_id := NULL;
4315     l_stmv_rec_intm_rentals.say_code := 'CURR';
4316     IF ( p_purpose = 'REPORT') THEN
4317       l_stmv_rec_intm_rentals.active_yn := 'N';
4318     ELSE
4319       l_stmv_rec_intm_rentals.active_yn := 'Y';
4320     END IF;
4321     l_stmv_rec_intm_rentals.date_current := sysdate;
4322     l_stmv_rec_intm_rentals.transaction_number := l_strm_rec.transaction_number;
4323     l_stmv_rec_intm_rentals.sgn_code := 'MANL';
4324     -- Get Billabel rentals
4325 
4326       OPEN  l_billedrents_csr(l_hdr_rec.orig_system_id1, -1, p_purpose );
4327       FETCH l_billedrents_csr INTO l_orig_amount;
4328       IF l_billedrents_csr%NOTFOUND THEN
4329         okl_api.set_message(p_app_name     => G_APP_NAME,
4330                             p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4331                             p_token1        => G_COL_NAME_TOKEN,
4332                             p_token1_value  => 'Orig System Chr_id and for '||p_purpose);
4333         RAISE OKL_API.G_EXCEPTION_ERROR;
4334       END IF;
4335       CLOSE l_billedrents_csr;
4336     -- Get Billabel rentals
4337       OPEN  l_billedrents_csr(TO_NUMBER(p_chr_id),  -1, p_purpose );
4338       FETCH l_billedrents_csr INTO l_rebook_amount;
4339       IF l_billedrents_csr%NOTFOUND THEN
4340         okl_api.set_message(p_app_name     => G_APP_NAME,
4341                             p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4342                             p_token1        => G_COL_NAME_TOKEN,
4343                             p_token1_value  => 'Chr_id and for '||p_purpose);
4344         RAISE OKL_API.G_EXCEPTION_ERROR;
4345       END IF;
4346       CLOSE l_billedrents_csr;
4347 
4348     l_selv_tbl_intm_rentals(1).amount := l_rebook_amount - l_orig_amount;
4349     l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
4350     l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
4351     l_selv_tbl_intm_rentals(1).se_line_number := 1;
4352     l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Rebooked Rentals';
4353     --bug# 3014721
4354     --l_selv_tbl_intm_rentals(1).date_billed := sysdate;
4355     --l_stmv_rec_intm_rentals.sty_id := l_styid_rec.id;
4356 	l_stmv_rec_intm_rentals.sty_id := styid.id;
4357     IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
4358       Okl_Streams_Pub.create_streams(
4359                       p_api_version   => p_api_version,
4360                       p_init_msg_list => p_init_msg_list,
4361                       x_return_status => x_return_status,
4362                       x_msg_count     => x_msg_count,
4363                       x_msg_data      => x_msg_data,
4364                       p_stmv_rec      => l_stmv_rec_intm_rentals,
4365                       p_selv_tbl      => l_selv_tbl_intm_rentals,
4366                       x_stmv_rec      => x_stmv_rec,
4367                       x_selv_tbl      => x_selv_tbl);
4368       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4369         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4370       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4371         RAISE OKL_API.G_EXCEPTION_ERROR;
4372       END IF;
4373     END IF;
4374     l_selv_tbl_intm_rentals.DELETE(1, l_selv_tbl_intm_rentals.LAST);
4375     l_stmv_rec_intm_rentals := NULL;
4376     -- for the contract header level.
4377     OKL_API.END_ACTIVITY (x_msg_count,
4378                           x_msg_data );
4379   EXCEPTION
4380     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4381       IF l_strm_csr%ISOPEN THEN
4382         CLOSE l_strm_csr;
4383       END IF;
4384       IF l_billedrents_csr%ISOPEN THEN
4385         CLOSE l_billedrents_csr;
4386       END IF;
4387       IF l_line_csr%ISOPEN THEN
4388         CLOSE l_line_csr;
4389       END IF;
4390       IF l_hdr_csr%ISOPEN THEN
4391         CLOSE l_hdr_csr;
4392       END IF;
4393       IF get_styid_csr%ISOPEN THEN
4394         CLOSE get_styid_csr;
4395       END IF;
4396       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4397                                 l_api_name,
4398                                G_PKG_NAME,
4399                                'OKL_API.G_RET_STS_ERROR',
4400                                x_msg_count,
4401                                x_msg_data,
4402                                '_PVT');
4403     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4404       IF l_strm_csr%ISOPEN THEN
4405         CLOSE l_strm_csr;
4406       END IF;
4407       IF l_billedrents_csr%ISOPEN THEN
4408         CLOSE l_billedrents_csr;
4409       END IF;
4410       IF l_line_csr%ISOPEN THEN
4411         CLOSE l_line_csr;
4412       END IF;
4413       IF l_hdr_csr%ISOPEN THEN
4414         CLOSE l_hdr_csr;
4415       END IF;
4416       IF get_styid_csr%ISOPEN THEN
4417         CLOSE get_styid_csr;
4418       END IF;
4419       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4420                                 l_api_name,
4421                                 G_PKG_NAME,
4422                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
4423                                 x_msg_count,
4424                                 x_msg_data,
4425                                 '_PVT');
4426     WHEN OTHERS THEN
4427       IF l_strm_csr%ISOPEN THEN
4428         CLOSE l_strm_csr;
4429       END IF;
4430       IF l_billedrents_csr%ISOPEN THEN
4431         CLOSE l_billedrents_csr;
4432       END IF;
4433       IF l_line_csr%ISOPEN THEN
4434         CLOSE l_line_csr;
4435       END IF;
4436       IF l_hdr_csr%ISOPEN THEN
4437         CLOSE l_hdr_csr;
4438       END IF;
4439       IF get_styid_csr%ISOPEN THEN
4440         CLOSE get_styid_csr;
4441       END IF;
4442       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4443                                 l_api_name,
4444                                 G_PKG_NAME,
4445                                 'OTHERS',
4446                                 x_msg_count,
4447                                 x_msg_data,
4448                                 '_PVT');
4449   END create_interim_rental_streams;
4450 
4451 -- Added by HKPATEL for mass rebook fix
4452 PROCEDURE adjust_massrebook_streams(
4453               p_api_version     IN  NUMBER,
4454               p_init_msg_list   IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
4455               x_return_status   OUT NOCOPY VARCHAR2,
4456               x_msg_count       OUT NOCOPY NUMBER,
4457               x_msg_data        OUT NOCOPY VARCHAR2,
4458               p_chr_id          IN  VARCHAR2,
4459               p_purpose          IN  VARCHAR2) AS
4460 
4461        l_api_name		 CONSTANT VARCHAR2(256) := 'ADJUSTMENT_STREAMS';
4462        --styid                    NUMBER;
4463 	   styid                     strm_rec_type;
4464        stream_name               VARCHAR2(256);
4465        lv_chr_secure             VARCHAR2(3) := OKL_API.G_FALSE;
4466        ln_secure_amt             NUMBER := 0;
4467 
4468   -- To check if the contract is MASS REBOOK candidate
4469        CURSOR c_chk_msrbk_csr(p_chr_id NUMBER)
4470        IS
4471        SELECT 'Y'
4472        FROM DUAL
4473        WHERE EXISTS (SELECT 'Y'
4474                      FROM okl_rbk_selected_contract
4475                      WHERE khr_id = p_chr_id
4476                      AND status = 'UNDER REVISION');
4477       -- Billable rents
4478 
4479       -- Bug 4164120 changes start
4480 
4481       CURSOR l_billedrents_csr(p_chr_id  NUMBER,
4482                                p_kle_id  NUMBER,
4483                                p_purpose VARCHAR2)
4484       IS
4485       SELECT	NVL(SUM(ele.AMOUNT),0) amount
4486       FROM	okl_strm_elements ele,
4487 		okl_streams str,
4488 		okl_strm_type_b sty
4489       WHERE	str.khr_id = p_chr_id
4490       AND NVL(str.kle_id, -1) = p_kle_id
4491       AND str.sty_id  = sty.id
4492       AND str.say_code = 'CURR'
4493       AND nvl(str.purpose_code, 'ORIGIN') = p_purpose
4494       AND sty.stream_type_purpose <> 'REBOOK_BILLING_ADJUSTMENT'
4495       AND ele.stm_id = str.id
4496       AND NVL(ele.date_billed, SYSDATE+1) < SYSDATE;
4497 
4498       -- Get billing adjustment stream amount which are not billed
4499       CURSOR l_bill_adjust_csr(p_chr_id  NUMBER,
4500                                p_kle_id  NUMBER,
4501                                p_purpose VARCHAR2)
4502       IS
4503       SELECT NVL(SUM(ele.AMOUNT),0) amount
4504       FROM okl_strm_elements ele,
4505            okl_streams str,
4506            okl_strm_type_b sty
4507       WHERE str.khr_id = p_chr_id
4508       AND NVL(str.kle_id, -1) = p_kle_id
4509       AND str.sty_id  = sty.id
4510       AND str.say_code = 'CURR'
4511       AND nvl(str.purpose_code, 'ORIGIN') = p_purpose
4512       AND sty.stream_type_purpose = 'REBOOK_BILLING_ADJUSTMENT'
4513       AND ele.stm_id = str.id
4514       AND ele.date_billed IS NULL;
4515 
4516       -- Bug 4164120 changes end
4517 
4518       -- Get the Line info
4519       CURSOR l_line_csr( p_chr_id NUMBER )
4520       IS
4521       SELECT kle.id kle_id,
4522              kle.start_date
4523       FROM okc_k_lines_b kle,
4524            okc_line_styles_b lse
4525       WHERE kle.lse_id = lse.id
4526       AND lse.lty_code in ( 'FREE_FORM1', 'FEE', 'SOLD_SERVICE', 'LINK_SERV_ASSET')--bug# 3343133 (ssiruvol)
4527       AND kle.dnz_chr_id = p_chr_id;
4528 
4529       -- Get the Stream id
4530       CURSOR get_styid_csr(p_strm_name OKL_STRM_TYPE_TL.NAME%TYPE)
4531       IS
4532       SELECT nvl(tl.id,-1) id,
4533       b.stream_type_subclass
4534       FROM okl_strm_type_tl tl,
4535       okl_strm_type_b b
4536       WHERE tl.language = USERENV('LANG')
4537       AND tl.name = p_strm_name
4538       AND tl.id = b.id;
4539 
4540 	-- Added for user defined streams - HKPATEL
4541 
4542 	l_strm_name VARCHAR2(30);
4543 
4544 	-- Added code ends here - HKPATEL
4545 
4546 
4547       -- get the transaction number
4548       CURSOR l_trx_num_csr
4549       IS
4550 --      SELECT DISTINCT str.transaction_number transaction_number
4551 --      FROM okl_streams str
4552 --      WHERE str.khr_id = p_chr_id
4553 --      AND str.say_code = 'CURR'
4554 --      AND nvl(str.purpose_code, 'ORIGIN') = p_purpose;
4555       SELECT OKL_SIF_SEQ.NEXTVAL
4556       FROM dual;
4557 
4558       -- Bucket to store the billed amonts
4559       TYPE bill_rec_type IS RECORD (
4560          kle_id     NUMBER := NULL,
4561          billed_amt NUMBER := NULL);
4562       lt_bill_rec             bill_rec_type;
4563       k                       NUMBER := 0;
4564       ln_billed_adj_amt       NUMBER := 0;
4565       ln_transaction_number   NUMBER := 0;
4566       lv_msrbk_yn             VARCHAR2(3) := 'N';
4567       l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
4568       r_line_rec                l_line_csr%ROWTYPE;
4569       l_strm_rec                l_trx_num_csr%ROWTYPE;
4570       l_styid_rec               get_styid_csr%ROWTYPE;
4571       l_stmv_rec                Okl_Streams_pub.stmv_rec_type;
4572       l_stmv_rec_intm_rentals   Okl_Streams_pub.stmv_rec_type;
4573       l_selv_tbl                Okl_Streams_pub.selv_tbl_type;
4574       l_selv_tbl_intm_rentals   Okl_Streams_pub.selv_tbl_type;
4575       x_stmv_rec                Okl_Streams_pub.stmv_rec_type;
4576       x_selv_tbl                Okl_Streams_pub.selv_tbl_type;
4577       l_stmv_rec_secure         Okl_Streams_pub.stmv_rec_type;
4578       l_selv_tbl_secure         Okl_Streams_pub.selv_tbl_type;
4579       lx_stmv_rec_secure        Okl_Streams_pub.stmv_rec_type;
4580       lx_selv_tbl_secure        Okl_Streams_pub.selv_tbl_type;
4581       lx_inv_agmt_chr_id_tbl    okl_securitization_pvt.inv_agmt_chr_id_tbl_type;
4582     Begin
4583       x_return_status := OKL_API.G_RET_STS_SUCCESS;
4584       -- Call start_activity to create savepoint, check compatibility
4585       -- and initialize message list
4586       x_return_status := OKL_API.START_ACTIVITY (
4587   			       l_api_name
4588   			       ,p_init_msg_list
4589   			       ,'_PVT'
4590   			       ,x_return_status);
4591       -- Check if activity started successfully
4592       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4593          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4594       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4595          RAISE OKL_API.G_EXCEPTION_ERROR;
4596       END IF;
4597 
4598 	  OPEN l_hdr_pdt_csr(p_chr_id);
4599 	  FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
4600 	  CLOSE l_hdr_pdt_csr;
4601 
4602       OPEN  c_chk_msrbk_csr(p_chr_id => p_chr_id);
4603       FETCH c_chk_msrbk_csr INTO lv_msrbk_yn;
4604       CLOSE c_chk_msrbk_csr;
4605       IF lv_msrbk_yn = 'Y' THEN
4606 	-- Code added and commented for user defined streams - HKPATEL
4607 	    IF(g_rep_req_yn = 'Y') THEN
4608 
4609           get_primary_no_prc_stream_type
4610          (
4611           p_khr_id =>p_chr_id,
4612           p_pdt_id =>l_pdt_id_rec.report_pdt_id,
4613           p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
4614           x_return_status => x_return_status,
4615           x_primary_sty_id =>styid
4616          );
4617 		  IF x_return_status = 'E' THEN
4618 		     x_return_status := 'S';
4619 		  END IF;
4620 
4621 	    ELSE
4622           get_primary_no_prc_stream_type
4623          (
4624           p_khr_id =>p_chr_id,
4625           p_pdt_id =>l_pdt_id_rec.pid,
4626           p_primary_sty_purpose =>'REBOOK_BILLING_ADJUSTMENT',
4627           x_return_status => x_return_status,
4628           x_primary_sty_id =>styid
4629          );
4630 		  IF x_return_status = 'E' THEN
4631 		     x_return_status := 'S';
4632 		  END IF;
4633 
4634 	    END IF;
4635 	  /*
4636         -- get the stream id
4637         OPEN  get_styid_csr(p_strm_name => l_strm_name);
4638 		--OPEN  get_styid_csr(p_strm_name => 'BILLING ADJUSTMENT');
4639 
4640         FETCH get_styid_csr INTO l_styid_rec;
4641         IF get_styid_csr%NOTFOUND THEN
4642            okl_api.set_message(p_app_name      => G_APP_NAME,
4643   			     p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4644   			     p_token1        => G_COL_NAME_TOKEN,
4645   			     p_token1_value  => 'Stream name');
4646            RAISE OKL_API.G_EXCEPTION_ERROR;
4647         END IF;
4648         CLOSE get_styid_csr;
4649         IF l_styid_rec.id = -1 THEN
4650            okl_api.set_message(p_app_name      => G_APP_NAME,
4651   			     p_msg_name      => G_INVALID_VALUE,
4652   			     p_token1        => G_COL_NAME_TOKEN,
4653   			     p_token1_value  => 'Stream ID');
4654           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4655         END IF;
4656 		*/
4657 		-- Added code for user defined stream ends here
4658         -- Get the line info
4659         FOR r_line_rec IN l_line_csr (p_chr_id) LOOP
4660           l_stmv_rec_intm_rentals.khr_id             := p_chr_id;
4661           l_stmv_rec_intm_rentals.kle_id             := r_line_rec.kle_id;
4662           l_stmv_rec_intm_rentals.say_code := 'WORK';
4663           l_stmv_rec_intm_rentals.date_working := SYSDATE;
4664 
4665           IF (p_purpose = 'REPORT') THEN
4666             l_stmv_rec_intm_rentals.active_yn := 'N';
4667           ELSE
4668             l_stmv_rec_intm_rentals.active_yn := 'Y';
4669           END IF;
4670 
4671           -- to get the transaction number of the contract
4672           OPEN  l_trx_num_csr;
4673           FETCH l_trx_num_csr INTO ln_transaction_number;
4674           CLOSE l_trx_num_csr;
4675           l_stmv_rec_intm_rentals.transaction_number := ln_transaction_number;
4676           l_stmv_rec_intm_rentals.sgn_code           := 'MANL';
4677           l_stmv_rec_intm_rentals.sty_id             := styid.id;
4678           -- Get the billed amount + not billed billing adjustment amount
4679           -- When the billing adjustment streams are billed then
4680           -- we need to take the same into account.
4681             OPEN  l_bill_adjust_csr(p_chr_id  => p_chr_id,
4682                                     p_kle_id  => r_line_rec.kle_id,
4683                                     p_purpose => p_purpose);
4684             FETCH l_bill_adjust_csr INTO ln_billed_adj_amt;
4685             IF l_bill_adjust_csr%NOTFOUND THEN
4686               okl_api.set_message(p_app_name     => G_APP_NAME,
4687                                  p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4688                                  p_token1        => G_COL_NAME_TOKEN,
4689                                  p_token1_value  => 'Chr_id/Line id and for '||p_purpose);
4690               x_return_status := OKL_API.G_RET_STS_ERROR;
4691               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4692             END IF;
4693             CLOSE l_bill_adjust_csr;
4694           -- to get the billed amount of all the rent that have been
4695           -- billed but does not include the billing adjustment stream amount
4696             OPEN  l_billedrents_csr(p_chr_id  => p_chr_id,
4697                                     p_kle_id  => r_line_rec.kle_id,
4698                                     p_purpose => p_purpose);
4699             FETCH l_billedrents_csr INTO lt_bill_rec.billed_amt;
4700             IF l_billedrents_csr%NOTFOUND THEN
4701               okl_api.set_message(p_app_name     => G_APP_NAME,
4702                                  p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4703                                  p_token1        => G_COL_NAME_TOKEN,
4704                                  p_token1_value  => 'Chr_id/Line id and for '||p_purpose);
4705               x_return_status := OKL_API.G_RET_STS_ERROR;
4706               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4707             END IF;
4708             CLOSE l_billedrents_csr;
4709 
4710           l_selv_tbl_intm_rentals(1).amount := (lt_bill_rec.billed_amt) * -1 + ln_billed_adj_amt;
4711           l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
4712           l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
4713           l_selv_tbl_intm_rentals(1).se_line_number := 1;
4714           l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Mass Rebooked Rentals';
4715           IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
4716             Okl_Streams_Pub.create_streams(
4717                             p_api_version   => p_api_version,
4718                             p_init_msg_list => p_init_msg_list,
4719                             x_return_status => x_return_status,
4720                             x_msg_count     => x_msg_count,
4721                             x_msg_data      => x_msg_data,
4722                             p_stmv_rec      => l_stmv_rec_intm_rentals,
4723                             p_selv_tbl      => l_selv_tbl_intm_rentals,
4724                             x_stmv_rec      => x_stmv_rec,
4725                             x_selv_tbl      => x_selv_tbl);
4726             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4727               EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4728             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4729               EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4730             END IF;
4731           END IF;
4732           -- Check for Original contract is securitized
4733           okl_securitization_pvt.check_khr_securitized(
4734                                  p_api_version              => p_api_version,
4735                                  p_init_msg_list            => p_init_msg_list,
4736                                  x_return_status            => x_return_status,
4737                                  x_msg_count                => x_msg_count,
4738                                  x_msg_data                 => x_msg_data,
4739                                  p_khr_id                   => p_chr_id,
4740                                  p_effective_date           => r_line_rec.start_date,
4741                                  p_effective_date_operator  => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
4742                                  p_stream_type_subclass     => l_styid_rec.stream_type_subclass,
4743                                  x_value                    => lv_chr_secure,
4744                                  x_inv_agmt_chr_id_tbl      => lx_inv_agmt_chr_id_tbl);
4745           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4746             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4747           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4748             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4749           END IF;
4750           IF lv_chr_secure = OKL_API.G_TRUE THEN
4751    	        IF(g_rep_req_yn = 'Y') THEN
4752             get_primary_no_prc_stream_type
4753             (
4754               p_khr_id =>p_chr_id,
4755               p_pdt_id =>l_pdt_id_rec.report_pdt_id,
4756               p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
4757               x_return_status => x_return_status,
4758               x_primary_sty_id =>styid
4759             );
4760 		     IF x_return_status = 'E' THEN
4761 		        x_return_status := 'S';
4762 		     END IF;
4763 
4764 
4765 	      ELSE
4766             get_primary_no_prc_stream_type
4767             (
4768               p_khr_id =>p_chr_id,
4769               p_pdt_id =>l_pdt_id_rec.pid,
4770               p_primary_sty_purpose =>'INVESTOR_DISB_ADJUSTMENT',
4771               x_return_status => x_return_status,
4772               x_primary_sty_id =>styid
4773             );
4774 		     IF x_return_status = 'E' THEN
4775 		        x_return_status := 'S';
4776 		     END IF;
4777 
4778 	      END IF;
4779 
4780 /*
4781             --OPEN  get_styid_csr(p_strm_name => 'INVESTOR DISBURSEMENT ADJUSTMENT');
4782 			OPEN  get_styid_csr(p_strm_name => l_strm_name);
4783             FETCH get_styid_csr INTO l_styid_rec;
4784             IF get_styid_csr%NOTFOUND THEN
4785               okl_api.set_message(p_app_name      => G_APP_NAME,
4786                                   p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4787                                   p_token1        => G_COL_NAME_TOKEN,
4788                                   p_token1_value  => 'Stream name');
4789               x_return_status := OKL_API.G_RET_STS_ERROR;
4790               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4791             END IF;
4792             CLOSE get_styid_csr;
4793             IF l_styid_rec.id = -1 THEN
4794               okl_api.set_message(p_app_name      => G_APP_NAME,
4795                                   p_msg_name      => G_INVALID_VALUE,
4796                                   p_token1        => G_COL_NAME_TOKEN,
4797                                  p_token1_value  => 'Stream ID');
4798               x_return_status := OKL_API.G_RET_STS_ERROR;
4799               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
4800             END IF;
4801 */
4802             -- Get the amount
4803   	  -- LOOP start.
4804             okl_securitization_pvt.check_kle_securitized(
4805                                    p_api_version              => p_api_version,
4806                                    p_init_msg_list            => p_init_msg_list,
4807                                    x_return_status            => x_return_status,
4808                                    x_msg_count                => x_msg_count,
4809                                    x_msg_data                 => x_msg_data,
4810                                    p_kle_id                   => r_line_rec.kle_id,
4811                                    p_effective_date           => r_line_rec.start_date,
4812                                    p_effective_date_operator  => okl_securitization_pvt.G_GREATER_THAN_EQUAL_TO,
4813                                    p_stream_type_subclass     => l_styid_rec.stream_type_subclass,
4814                                    x_value                    => lv_chr_secure,
4815                                    x_inv_agmt_chr_id_tbl      => lx_inv_agmt_chr_id_tbl);
4816             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4817               EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4818             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4819               EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4820             END IF;
4821             FOR i in lx_inv_agmt_chr_id_tbl.FIRST..lx_inv_agmt_chr_id_tbl.LAST LOOP
4822               ln_secure_amt := okl_investor_invoice_disb_pvt.get_disb_amt(
4823   	                                                   p_ia_id       => lx_inv_agmt_chr_id_tbl(i).khr_id,
4824                                                              p_rbk_khr_id => p_chr_id,
4825                                                              p_rbk_kle_id => r_line_rec.kle_id);
4826               l_stmv_rec_secure := l_stmv_rec_intm_rentals;
4827               l_selv_tbl_secure := l_selv_tbl_intm_rentals;
4828               l_stmv_rec_secure.sty_id := styid.id;
4829               l_stmv_rec_secure.source_id := lx_inv_agmt_chr_id_tbl(i).khr_id;
4830               l_stmv_rec_secure.source_table := 'OKL_K_HEADERS';
4831               l_selv_tbl_secure(1).amount := ln_secure_amt * -1;
4832               IF l_selv_tbl_secure(1).amount <> 0 THEN
4833                 okl_streams_pub.create_streams(
4834                                 p_api_version   => p_api_version,
4835                                 p_init_msg_list => p_init_msg_list,
4836                                 x_return_status => x_return_status,
4837                                 x_msg_count     => x_msg_count,
4838                                 x_msg_data      => x_msg_data,
4839                                 p_stmv_rec      => l_stmv_rec_secure,
4840                                 p_selv_tbl      => l_selv_tbl_secure,
4841                                 x_stmv_rec      => lx_stmv_rec_secure,
4842                                 x_selv_tbl      => lx_selv_tbl_secure);
4843                 IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4844                   EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
4845                 ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4846                   EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
4847                 END IF;
4848               END IF;
4849               l_selv_tbl_secure.DELETE;
4850               l_selv_tbl_secure := l_selv_tbl;
4851               l_stmv_rec_secure := l_stmv_rec;
4852             END LOOP;
4853           END IF;
4854           l_selv_tbl_intm_rentals.DELETE;
4855           l_selv_tbl_intm_rentals := l_selv_tbl;
4856           l_stmv_rec_intm_rentals := l_stmv_rec;
4857         END LOOP;
4858         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4859            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4860         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4861            RAISE OKL_API.G_EXCEPTION_ERROR;
4862         END IF;
4863         -- generate for the contract lines
4864         l_stmv_rec_intm_rentals.khr_id             := p_chr_id;
4865         l_stmv_rec_intm_rentals.kle_id             := NULL;
4866         l_stmv_rec_intm_rentals.say_code := 'WORK';
4867         IF (p_purpose = 'REPORT') THEN
4868           l_stmv_rec_intm_rentals.active_yn := 'N';
4869         ELSE
4870           l_stmv_rec_intm_rentals.active_yn := 'Y';
4871         END IF;
4872         l_stmv_rec_intm_rentals.date_working       := sysdate;
4873         l_stmv_rec_intm_rentals.transaction_number := ln_transaction_number;
4874         l_stmv_rec_intm_rentals.sgn_code           := 'MANL';
4875         l_stmv_rec_intm_rentals.sty_id             := l_styid_rec.id;
4876         -- Get the billed amount + not billed billing adjustment amount
4877         -- When the billing adjustment streams are billed then
4878         -- we need to take the same into account.
4879           OPEN  l_bill_adjust_csr(p_chr_id  => p_chr_id,
4880                                   p_kle_id  => NULL,
4881                                   p_purpose => p_purpose);
4882           FETCH l_bill_adjust_csr INTO ln_billed_adj_amt;
4883           IF l_bill_adjust_csr%NOTFOUND THEN
4884             okl_api.set_message(p_app_name     => G_APP_NAME,
4885                                p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4886                                p_token1        => G_COL_NAME_TOKEN,
4887                                p_token1_value  => 'Chr_id/Line id and for '||p_purpose);
4888             x_return_status := OKL_API.G_RET_STS_ERROR;
4889             RAISE OKL_API.G_EXCEPTION_ERROR;
4890           END IF;
4891           CLOSE l_bill_adjust_csr;
4892         -- to get the billed amount of all the rent that have been
4893         -- billed but does not include the billing adjustment stream amount
4894           OPEN  l_billedrents_csr(p_chr_id  => p_chr_id,
4895                                   p_kle_id  => NULL,
4896                                   p_purpose => p_purpose);
4897           FETCH l_billedrents_csr INTO lt_bill_rec.billed_amt;
4898           IF l_billedrents_csr%NOTFOUND THEN
4899             okl_api.set_message(p_app_name     => G_APP_NAME,
4900                                 p_msg_name      => G_LLA_NO_MATCHING_RECORD,
4901                                 p_token1        => G_COL_NAME_TOKEN,
4902                                 p_token1_value  => 'Chr_id/Line id and for '||p_purpose);
4903             x_return_status := OKL_API.G_RET_STS_ERROR;
4904             RAISE OKL_API.G_EXCEPTION_ERROR;
4905           END IF;
4906           CLOSE l_billedrents_csr;
4907 
4908         l_selv_tbl_intm_rentals(1).amount := (lt_bill_rec.billed_amt) * -1 + ln_billed_adj_amt;
4909         l_selv_tbl_intm_rentals(1).accrued_yn := 'Y';
4910         l_selv_tbl_intm_rentals(1).stream_element_date := sysdate;
4911         l_selv_tbl_intm_rentals(1).se_line_number := 1;
4912         l_selv_tbl_intm_rentals(1).comments := 'Interim Rentals for a Mass Rebooked Rentals';
4913         IF l_selv_tbl_intm_rentals(1).amount <> 0 THEN
4914           Okl_Streams_Pub.create_streams(
4915                           p_api_version   => p_api_version,
4916                           p_init_msg_list => p_init_msg_list,
4917                           x_return_status => x_return_status,
4918                           x_msg_count     => x_msg_count,
4919                           x_msg_data      => x_msg_data,
4920                           p_stmv_rec      => l_stmv_rec_intm_rentals,
4921                           p_selv_tbl      => l_selv_tbl_intm_rentals,
4922                           x_stmv_rec      => x_stmv_rec,
4923                           x_selv_tbl      => x_selv_tbl);
4924           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4925             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4926           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4927             RAISE OKL_API.G_EXCEPTION_ERROR;
4928           END IF;
4929         END IF;
4930       END IF;
4931       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4932         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4933       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4934         RAISE OKL_API.G_EXCEPTION_ERROR;
4935       END IF;
4936 
4937       OKL_API.END_ACTIVITY (x_msg_count,
4938                             x_msg_data );
4939     EXCEPTION
4940       WHEN OKL_API.G_EXCEPTION_ERROR then
4941         IF c_chk_msrbk_csr%ISOPEN THEN
4942           CLOSE c_chk_msrbk_csr;
4943         END IF;
4944         IF l_billedrents_csr%ISOPEN THEN
4945           CLOSE l_billedrents_csr;
4946         END IF;
4947         IF l_bill_adjust_csr%ISOPEN THEN
4948           CLOSE l_bill_adjust_csr;
4949         END IF;
4950         IF l_line_csr%ISOPEN THEN
4951           CLOSE l_line_csr;
4952         END IF;
4953         IF get_styid_csr%ISOPEN THEN
4954           CLOSE get_styid_csr;
4955         END IF;
4956         IF l_trx_num_csr%ISOPEN THEN
4957           CLOSE l_trx_num_csr;
4958         END IF;
4959         x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4960                                   l_api_name,
4961                                  G_PKG_NAME,
4962                                  'OKL_API.G_RET_STS_ERROR',
4963                                  x_msg_count,
4964                                  x_msg_data,
4965                                  '_PVT');
4966       WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
4967         IF c_chk_msrbk_csr%ISOPEN THEN
4968           CLOSE c_chk_msrbk_csr;
4969         END IF;
4970         IF l_billedrents_csr%ISOPEN THEN
4971           CLOSE l_billedrents_csr;
4972         END IF;
4973         IF l_bill_adjust_csr%ISOPEN THEN
4974           CLOSE l_bill_adjust_csr;
4975         END IF;
4976         IF l_line_csr%ISOPEN THEN
4977           CLOSE l_line_csr;
4978         END IF;
4979         IF get_styid_csr%ISOPEN THEN
4980           CLOSE get_styid_csr;
4981         END IF;
4982         IF l_trx_num_csr%ISOPEN THEN
4983           CLOSE l_trx_num_csr;
4984         END IF;
4985         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4986                                   l_api_name,
4987                                   G_PKG_NAME,
4988                                   'OKL_API.G_RET_STS_UNEXP_ERROR',
4989                                   x_msg_count,
4990                                   x_msg_data,
4991                                   '_PVT');
4992       WHEN OTHERS then
4993         IF c_chk_msrbk_csr%ISOPEN THEN
4994           CLOSE c_chk_msrbk_csr;
4995         END IF;
4996         IF l_billedrents_csr%ISOPEN THEN
4997           CLOSE l_billedrents_csr;
4998         END IF;
4999         IF l_bill_adjust_csr%ISOPEN THEN
5000           CLOSE l_bill_adjust_csr;
5001         END IF;
5002         IF l_line_csr%ISOPEN THEN
5003           CLOSE l_line_csr;
5004         END IF;
5005         IF get_styid_csr%ISOPEN THEN
5006           CLOSE get_styid_csr;
5007         END IF;
5008         IF l_trx_num_csr%ISOPEN THEN
5009           CLOSE l_trx_num_csr;
5010         END IF;
5011         x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
5012                                   l_api_name,
5013                                   G_PKG_NAME,
5014                                   'OTHERS',
5015                                   x_msg_count,
5016                                   x_msg_data,
5017                                   '_PVT');
5018     END adjust_massrebook_streams;
5019 
5020 
5021 -- End modification 11i10 bakuchib
5022 -- Start modification 11i10 bakuchib
5023   procedure create_advance_rental_streams(
5024             p_api_version   IN NUMBER,
5025             p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
5026             x_return_status OUT NOCOPY VARCHAR2,
5027             x_msg_count     OUT NOCOPY NUMBER,
5028             x_msg_data      OUT NOCOPY VARCHAR2,
5029             p_chr_id        IN  NUMBER,
5030             p_purpose    IN VARCHAR2) AS
5031 
5032     l_api_name		CONSTANT VARCHAR2(256) := 'CREATE_ADV_RTL_STRMS';
5033     l_api_version	CONSTANT NUMBER	      := 1;
5034     i                            NUMBER;
5035     j                            NUMBER;
5036     l_amount                     NUMBER;
5037     l_pay_amount                 NUMBER;
5038     l_structure                  NUMBER;
5039     error                        VARCHAR2(256);
5040     --styid                        NUMBER;
5041 	styid                        strm_rec_type;
5042     stream_name                  VARCHAR2(256);
5043     l_stmv_rec                   okl_streams_pub.stmv_rec_type;
5044     l_stmv_rec_adv_rentals       okl_streams_pub.stmv_rec_type;
5045     l_selv_tbl                   okl_streams_pub.selv_tbl_type;
5046     l_selv_tbl_adv_rentals       okl_streams_pub.selv_tbl_type;
5047     x_stmv_rec                   okl_streams_pub.stmv_rec_type;
5048     x_selv_tbl                   okl_streams_pub.selv_tbl_type;
5049 
5050     --Modified for streams performance
5051     -- This cursors fetches all the line id's for the contract whose Rent streams
5052     -- have a structure that is not -1 or 0
5053     --Bug 4346646 - Start of Changes
5054     -- arajagop added disticnt to the cursor below
5055     CURSOR l_struct_csr(chrId NUMBER , styId NUMBER)
5056     IS
5057     SELECT distinct crg.cle_id line_id,
5058            (NVL(crl.rule_information5,-1)) structure
5059     FROM okc_rule_groups_b crg,
5060          okc_rules_b crl,
5061          okc_rules_b crl1
5062     WHERE crl.rgp_id = crg.id
5063     AND crg.rgd_code = 'LALEVL'
5064     AND crl.rule_information_category = 'LASLL'
5065     AND crl1.rule_information_category = 'LASLH'
5066     AND crl.object2_id1 = crl1.id
5067     AND crl1.object1_id1 = styid
5068     AND crg.dnz_chr_id = chrId
5069     AND (NVL(crl.rule_information5,-1)) not in (-1,0);
5070     --Bug 4346646 - End of Changes
5071 
5072     --Added by kthiruva on 04-Jul-2005
5073     --Bug 4414441 - Start of Changes
5074     --This cursor fetches the details of the payment plan the would be used in the Advance Rent Calculation
5075     CURSOR l_payment_csr(chrId NUMBER , styId NUMBER,kleId NUMBER)
5076     IS
5077     SELECT (NVL(crl.rule_information5,-1)) structure,
5078            fnd_date.canonical_to_date(crl.RULE_INFORMATION2) START_DATE,
5079            crl.RULE_INFORMATION3 PERIOD_IN_MONTHS,
5080            crl.RULE_INFORMATION6 AMOUNT,
5081            nvl(crl.RULE_INFORMATION10,'N') ARREARS,
5082            crl.RULE_INFORMATION7 STUB_DAYS,
5083            crl.RULE_INFORMATION8 STUB_AMOUNT,
5084            TUOM.ID1 FREQUENCY,
5085            null END_DATE
5086     FROM okc_rule_groups_b crg,
5087          okc_rules_b crl,
5088          okc_rules_b crl1,
5089          okl_time_units_v tuom
5090     WHERE crl.rgp_id = crg.id
5091     AND crg.rgd_code = 'LALEVL'
5092     AND crl.rule_information_category = 'LASLL'
5093     AND crl1.rule_information_category = 'LASLH'
5094     AND crl.object2_id1 = crl1.id
5095     AND crl1.object1_id1 = styId
5096     AND crg.dnz_chr_id = chrId
5097     AND TUOM.ID1=crl.OBJECT1_ID1
5098     AND (NVL(crl.rule_information5,-1)) not in (-1,0)
5099     AND crg.cle_id = kleId
5100     ORDER BY start_date ASC;
5101    --Bug 4414441 - End of Changes
5102 
5103     CURSOR l_strm_csr (chrId NUMBER,
5104                        kleId NUMBER,
5105                        styId NUMBER,
5106                        status VARCHAR2,
5107                        pp VARCHAR2)
5108     IS
5109     SELECT str.Id,
5110            str.transaction_number,
5111            str.sgn_code sgn_code,
5112            str.khr_id,
5113            str.sty_id,
5114            str.say_code,
5115            str.active_yn,
5116            str.kle_id
5117     FROM okl_streams str
5118     WHERE str.khr_id = chrId
5119     AND str.kle_id = kleId
5120     AND str.say_code = 'WORK'
5121     --Added by kthiruva for Streams Performance Patch
5122     --Bug 4346646 - Start of Changes
5123     AND str.sty_id = styId
5124     --Bug 4346646 -End of Changes
5125     AND nvl( str.purpose_code, 'ORIGIN') = pp;
5126 
5127     CURSOR l_strmele1_csr(stmid NUMBER)
5128     IS
5129     SELECT ele.id,
5130            ele.date_billed,
5131            ele.stream_element_date,
5132            ele.amount,
5133            ele.accrued_yn,
5134            ele.comments,
5135            ele.stm_id stm_id,
5136            ele.se_line_number se_line_number
5137     FROM  okl_strm_elements ele
5138     WHERE ele.stm_id = stmid
5139     ORDER BY ele.stream_element_date;
5140 
5141     CURSOR l_stmp_yn_csr(khrid NUMBER, p VARCHAR2) IS
5142     SELECT count(stm.id) cnt
5143     FROM   okl_streams	stm
5144     WHERE stm.khr_id = khrid
5145     AND stm.say_code = 'WORK'
5146     AND stm.sgn_code = 'STMP'
5147     AND nvl(stm.purpose_code, 'ORIGIN') = p;
5148 
5149     l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
5150     l_struct_rec                 l_struct_csr%ROWTYPE;
5151     l_strm_rec                   l_strm_csr%ROWTYPE;
5152     l_strmele_rec                l_strmele1_csr%ROWTYPE;
5153     l_line_rec                   l_line_rec_csr%ROWTYPE;
5154     l_rl_rec1                    l_rl_csr1%ROWTYPE;
5155     l_stmp_yn_rec                l_stmp_yn_csr%ROWTYPE;
5156     --Added for Streams Perf by kthiruva
5157     --Bug 4346646 - Start of Changes
5158     l_sty_id                     strm_rec_type;
5159     --Bug 4346646 - End of Changes
5160     --Added by kthiruva for Bug 4402229
5161     l_product_id                 NUMBER;
5162     --Added by kthiruva for handling the Advance Rent Streams esp for stub payments
5163     --Bug 4414441 - Start of Changes
5164     l_payment_rec                l_payment_csr%ROWTYPE;
5165     TYPE l_payment_tbl_type IS TABLE OF l_payment_csr%ROWTYPE INDEX BY BINARY_INTEGER;
5166     l_payment_tbl                l_payment_tbl_type;
5167     l_rent_amt_tbl               Okl_Streams_Util.NumberTabTyp;
5168     k                            NUMBER;
5169     l_next_position              NUMBER;
5170     --Bug 4414441 - End of Changes
5171   BEGIN
5172     print( l_api_name, 'begin');
5173     x_return_status := OKL_API.START_ACTIVITY(
5174 			p_api_name      => l_api_name,
5175 			p_pkg_name      => g_pkg_name,
5176 			p_init_msg_list => p_init_msg_list,
5177 			l_api_version   => l_api_version,
5178 			p_api_version   => p_api_version,
5179 			p_api_type      => G_API_TYPE,
5180 			x_return_status => x_return_status);
5181     -- check if activity started successfully
5182     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5183       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5184     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5185        RAISE OKL_API.G_EXCEPTION_ERROR;
5186     End If;
5187 
5188 
5189     OPEN  l_stmp_yn_csr (TO_NUMBER(p_chr_id), p_purpose);
5190     FETCH l_stmp_yn_csr INTO l_stmp_yn_rec;
5191     CLOSE l_stmp_yn_csr;
5192 
5193     --Added by kthiruva on 01-Jun-2005
5194     --Bug 4402229 - Start of Changes
5195     --Fetching the contract details
5196     OPEN l_hdr_pdt_csr(p_chr_id);
5197     FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
5198 	CLOSE l_hdr_pdt_csr;
5199 
5200     IF ( p_purpose = 'ORIGIN') THEN
5201        l_product_id  := l_pdt_id_rec.pid;
5202     ELSIF (p_purpose = 'REPORT') THEN
5203        l_product_id  := l_pdt_id_rec.report_pdt_id;
5204     END IF;
5205 
5206     --Added by kthiruva for Streams Performance
5207     --This call returns the id of the stream type of purpose 'RENT' in the contract's Stream Generation Template.
5208     get_primary_no_prc_stream_type
5209      (
5210       p_khr_id =>p_chr_id,
5211       p_pdt_id =>l_product_id,
5212       p_primary_sty_purpose =>'RENT',
5213       x_return_status => x_return_status,
5214       x_primary_sty_id =>l_sty_id
5215       );
5216     --Bug 4402229 - End of Changes
5217     --Looping through all the contract lines that have a structure payment defined on them
5218     --Initialising the counter variable k
5219 
5220     FOR l_struct_rec IN l_struct_csr(TO_NUMBER(p_chr_id),l_sty_id.id)
5221     LOOP
5222       k := 0;
5223       l_payment_tbl.delete;
5224 
5225         l_structure := TO_NUMBER(l_struct_rec.structure);
5226 
5227         --Added by kthiruva on 04-Jul-2005
5228         --Bug 4414441 - Start of Changes
5229         --Fetching the payment lines
5230         FOR l_payment_rec IN l_payment_csr(chrId => TO_NUMBER(p_chr_id),
5231 		                                   styId => l_sty_id.id,
5232 										   kleId => l_struct_rec.line_id)
5233         LOOP
5234            l_payment_tbl(k) := l_payment_rec;
5235            k  := k + 1;
5236 	END LOOP;
5237 
5238 	--If the structure exists then, the amount for the 1st element has to be copied
5239 	--from the payments table for the Rent Streams
5240     	IF (l_payment_tbl(0).stub_days is not null) AND (l_payment_tbl(0).period_in_months is null)
5241         THEN
5242             l_rent_amt_tbl(0) :=  l_payment_tbl(0).stub_amount;
5243 	ELSE
5244 	    l_rent_amt_tbl(0) :=  l_payment_tbl(0).amount;
5245 	END IF;
5246 
5247         --Fetching the values from the payment definition for the Last n elements where n refers
5248 	--to the structure for Rent Streams
5249 	--To fetch the values of the last n stream elements, we loop through the payment table
5250 	--from LAST to FIRST
5251 
5252 	k := l_payment_tbl.LAST;
5253 	i := 1;
5254 	WHILE (i <= l_structure	)
5255 	LOOP
5256           WHILE (k >= l_payment_tbl.FIRST )
5257 	  LOOP
5258 	    --If the line is a stub payment,then we take the amount as it is and move to the previous line
5259  	    --in the payments table
5260 	    IF (l_payment_tbl(k).stub_days IS NOT NULL) AND (l_payment_tbl(k).period_in_months IS NULL)
5261 	    THEN
5262 	      l_rent_amt_tbl(l_structure - i + 1) := l_payment_tbl(k).stub_amount;
5263 	      k := k - 1;
5264 	      i := i + 1;
5265 	    ELSE
5266               --If the payment is periodic then we take the amount.We then check if the number of periods is
5267               --greater than 1. If so, the same line is used
5268               l_rent_amt_tbl(l_structure - i + 1) :=  l_payment_tbl(k).amount;
5269 	      i := i + 1;
5270    	      IF ( i > l_payment_tbl(k).period_in_months)
5271    	      THEN
5272    	        k := k - 1;
5273    	      END IF;
5274 	    END IF;
5275             --If the amounts of all the advance rent elements are derived then we exit the loop.
5276 	    IF (i > l_structure)
5277 	      THEN
5278 		  EXIT;
5279 	      END IF;
5280 	  END LOOP;
5281         END LOOP;
5282         --Bug 4414441 - End of Changes
5283 
5284         OPEN l_strm_csr (TO_NUMBER(p_chr_id),
5285                          l_struct_rec.line_id,
5286                          l_sty_id.id,
5287                          'WORK',
5288                          p_purpose);
5289         FETCH l_strm_csr into l_strm_rec;
5290         IF l_strm_csr%FOUND THEN
5291           l_stmv_rec.id     := l_strm_rec.id;
5292           -- Start of BUG# 3101439 modification
5293           --l_stmv_rec.active_yn := 'Y';
5294           -- End of BUG# 3101439 modification
5295           l_stmv_rec.date_current := sysdate;
5296           l_stmv_rec_adv_rentals.khr_id := TO_NUMBER(p_chr_id);
5297           l_stmv_rec_adv_rentals.kle_id := l_struct_rec.line_id;
5298           --l_stmv_rec_adv_rentals.say_code := 'CURR';
5299 		        l_stmv_rec_adv_rentals.say_code := 'WORK';
5300           IF (p_purpose = 'REPORT') THEN
5301             -- Start of BUG# 3101439 modification
5302             l_stmv_rec.active_yn := 'N';
5303             -- End of BUG# 3101439 modification
5304             l_stmv_rec_adv_rentals.active_yn := 'N';
5305             l_stmv_rec_adv_rentals.purpose_code := p_purpose;
5306           ELSE
5307             l_stmv_rec_adv_rentals.purpose_code := NULL;
5308             l_stmv_rec_adv_rentals.active_yn := 'N';
5309             -- Start of BUG# 3101439 modification
5310             l_stmv_rec.active_yn := 'N';
5311             -- End of BUG# 3101439 modification
5312           END IF;
5313           l_stmv_rec_adv_rentals.date_working := sysdate;
5314           l_stmv_rec_adv_rentals.transaction_number := l_strm_rec.transaction_number;
5315           l_stmv_rec_adv_rentals.sgn_code := 'MANL';
5316           i := 0;
5317           FOR l_strmele_rec IN l_strmele1_csr ( l_strm_rec.id) LOOP
5318             i := i + 1;
5319             l_selv_tbl(i).id := l_strmele_rec.id;
5320             l_selv_tbl(i).date_billed := l_strmele_rec.date_billed;
5321             l_selv_tbl(i).stream_element_date := l_strmele_rec.stream_element_date;
5322             l_selv_tbl(i).amount := l_strmele_rec.amount;
5323             l_selv_tbl(i).accrued_yn := l_strmele_rec.accrued_yn;
5324             l_selv_tbl(i).comments := l_strmele_rec.comments;
5325             l_selv_tbl(i).se_line_number := l_strmele_rec.se_line_number;
5326             l_selv_tbl(i).stm_id := l_strmele_rec.STM_ID;
5327           END LOOP;
5328           -- arajagop : the following calculation is needed for ESG
5329           -- where the RENT stream itself comes adjusted (8000, 4000, 0) say for a
5330           -- 4000 Advance First and  Last payment
5331           j := 1;
5332           l_pay_amount := 0;
5333           --Added by kthiruva on 04-Jul-2005 for the Advance Rent Fix
5334           --Bug 4414441 - Start of Changes
5335           k := 1;
5336           l_pay_amount := 0;
5337           IF (l_stmp_yn_rec.cnt > 0) THEN
5338             --Assign the value for the first rent stream element from the rent amount table populated
5339             l_selv_tbl(1).amount := l_rent_amt_tbl(0);
5340           END IF;
5341           --Bug 4414441 - End of Changes
5342 
5343           l_selv_tbl_adv_rentals(j).accrued_yn := l_selv_tbl(1).accrued_yn;
5344           l_selv_tbl_adv_rentals(j).stream_element_date := l_selv_tbl(1).stream_element_date;
5345           l_selv_tbl_adv_rentals(j).se_line_number := j; --l_selv_tbl(i).SE_LINE_NUMBER;
5346           l_selv_tbl_adv_rentals(j).comments := l_selv_tbl(1).comments;
5347           FOR i IN (l_selv_tbl.COUNT-l_structure+1)..l_selv_tbl.COUNT LOOP
5348             j := j + 1;
5349             IF (l_stmp_yn_rec.cnt > 0) THEN
5350               --Modified by kthriuva on 04-Jul-2005
5351               --Bug 4414441 - Start of Changes
5352               --Assign the values derived from the payment plan cursor to the last n stream elements for Rent
5353               l_selv_tbl(i).amount := l_rent_amt_tbl(k);
5354               l_selv_tbl_adv_rentals(j).amount := -1.0 * l_rent_amt_tbl(k);
5355               l_pay_amount := l_pay_amount+ l_rent_amt_tbl(k);
5356               k := k + 1;
5357               --Bug 4414441 - End of Changes
5358             ELSE
5359               -- sum up this value and store it for ISG first element
5360               l_pay_amount := l_pay_amount + l_selv_tbl(i).amount;
5361               -- store the same value as negative of the stream element value
5362               l_selv_tbl_adv_rentals(j).amount := -1.0 * l_selv_tbl(i).amount;
5363             END IF;
5364             l_selv_tbl_adv_rentals(j).accrued_yn := l_selv_tbl(i).accrued_yn;
5365             l_selv_tbl_adv_rentals(j).stream_element_date := l_selv_tbl(i).stream_element_date;
5366             l_selv_tbl_adv_rentals(j).date_billed := l_selv_tbl(i).date_billed;
5367             l_selv_tbl_adv_rentals(j).se_line_number := j; --l_selv_tbl(i).se_line_number;
5368             l_selv_tbl_adv_rentals(j).comments := l_selv_tbl(i).comments;
5369           END LOOP;
5370           IF (l_stmp_yn_rec.cnt > 0) THEN
5371             --Added by kthiruva on 04-Jul-2005
5372             --Bug 4414441 - Start of Changes
5373             --Assigning the value of the sum of the last n element amounts to the first advance rent stream
5374             l_selv_tbl_adv_rentals(1).amount := l_pay_amount;
5375             --Bug 4414441 - End of Changes
5376             -- update the rent streams for ESG to reflect uniform rental payment
5377             okl_streams_pub.update_streams(
5378                            p_api_version   => l_api_version
5379                           ,p_init_msg_list => p_init_msg_list
5380                           ,x_return_status => x_return_status
5381                           ,x_msg_count     => x_msg_count
5382                           ,x_msg_data      => x_msg_data
5383                           ,p_stmv_rec      => l_stmv_rec
5384                           ,p_selv_tbl      => l_selv_tbl
5385                           ,x_stmv_rec      => x_stmv_rec
5386                           ,x_selv_tbl      => x_selv_tbl);
5387 
5388             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5389               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5390             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5391               RAISE OKL_API.G_EXCEPTION_ERROR;
5392             END IF;
5393           ELSE
5394              -- FOR ISG store the value for the first element alone
5395              -- as the sum of all the elements based on the structure (1,2,3)
5396              l_selv_tbl_adv_rentals(1).amount := l_pay_amount;
5397           END IF;
5398 
5399           OPEN l_hdr_pdt_csr(p_chr_id);
5400           FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
5401           CLOSE l_hdr_pdt_csr;
5402 
5403           -- get the stream type id based on the type of the product
5404 	      IF(g_rep_req_yn = 'Y') THEN
5405 		    get_dep_no_prc_stream_type
5406 		    (
5407 		      p_khr_id =>p_chr_id,
5408 			  p_pdt_id =>l_pdt_id_rec.report_pdt_id,
5409 		      p_primary_sty_purpose=>'RENT',
5410 		      p_dependent_sty_purpose=>'ADVANCE_RENT',
5411 		      x_return_status => x_return_status,
5412 			  x_dependent_sty_id => styid
5413 			);
5414   	        IF x_return_status = 'E' THEN
5415 			  x_return_status := 'S';
5416 			END IF;
5417 		  ELSE
5418 		    get_dep_no_prc_stream_type
5419 		    (
5420 		      p_khr_id =>p_chr_id,
5421 			  p_pdt_id =>l_pdt_id_rec.pid,
5422 		      p_primary_sty_purpose=>'RENT',
5423 		      p_dependent_sty_purpose=>'ADVANCE_RENT',
5424 		      x_return_status => x_return_status,
5425 			  x_dependent_sty_id => styid
5426 			);
5427             IF x_return_status = 'E' THEN
5428               x_return_status := 'S';
5429 			END IF;
5430 		  END IF;
5431 
5432           l_stmv_rec_adv_rentals.sty_id := styid.id;
5433           okl_streams_pub.create_streams(
5434                            p_api_version   => l_api_version
5435                           ,p_init_msg_list => p_init_msg_list
5436                           ,x_return_status => x_return_status
5437                           ,x_msg_count     => x_msg_count
5438                           ,x_msg_data      => x_msg_data
5439                           ,p_stmv_rec      => l_stmv_rec_adv_rentals
5440                           ,p_selv_tbl      => l_selv_tbl_adv_rentals
5441                           ,x_stmv_rec      => x_stmv_rec
5442                           ,x_selv_tbl      => x_selv_tbl);
5443 
5444           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5445             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5446           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5447             RAISE OKL_API.G_EXCEPTION_ERROR;
5448           END IF;
5449           l_selv_tbl.DELETE(1, l_selv_tbl.COUNT);
5450           l_selv_tbl_adv_rentals.DELETE(1, l_selv_tbl_adv_rentals.COUNT);
5451           l_stmv_rec := NULL;
5452           l_stmv_rec_adv_rentals := NULL;
5453 /* Dont raise any exceptions if you dont find any thing for rent streams ..
5454       ELSE
5455          RAISE OKL_API.G_EXCEPTION_ERROR;
5456 */
5457       END IF;
5458      CLOSE l_Strm_csr;
5459   END LOOP;
5460   --Bug 4346646 - End of Changes
5461 
5462     print( l_api_name, 'end', x_return_status);
5463     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
5464   EXCEPTION
5465     WHEN OKL_API.G_EXCEPTION_ERROR THEN
5466 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5467 			p_api_name  => l_api_name,
5468 			p_pkg_name  => g_pkg_name,
5469 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5470 			x_msg_count => x_msg_count,
5471 			x_msg_data  => x_msg_data,
5472 			p_api_type  => g_api_type);
5473     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5474 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5475 			p_api_name  => l_api_name,
5476 			p_pkg_name  => g_pkg_name,
5477 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5478 			x_msg_count => x_msg_count,
5479 			x_msg_data  => x_msg_data,
5480 			p_api_type  => g_api_type);
5481                 If( strm_name_csr%ISOPEN ) Then
5482                     CLOSE strm_name_csr;
5483                 End If;
5484     WHEN OTHERS THEN
5485           	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5486 			p_api_name  => l_api_name,
5487 			p_pkg_name  => g_pkg_name,
5488 			p_exc_name  => 'OTHERS',
5489 			x_msg_count => x_msg_count,
5490 			x_msg_data  => x_msg_data,
5491 			p_api_type  => g_api_type);
5492   End create_advance_rental_streams;
5493 
5494 -- End modification 11i10 bakuchib
5495 -- Start modification Bug#3121708 bakuchib
5496   Procedure update_contract_yields(
5497             p_api_version     IN  NUMBER,
5498             p_init_msg_list   IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
5499             x_return_status   OUT NOCOPY VARCHAR2,
5500             x_msg_count       OUT NOCOPY NUMBER,
5501             x_msg_data        OUT NOCOPY VARCHAR2,
5502             p_chr_id          IN  VARCHAR2,
5503             p_chr_yields      IN  yields_rec_type) AS
5504 
5505     l_api_name		CONSTANT VARCHAR2(30) := 'UPDATE_CONTRACT_YIELDS';
5506     l_api_version	CONSTANT NUMBER	      := 1;
5507     l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
5508 
5509     pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
5510     pl_khrv_rec okl_contract_pvt.khrv_rec_type;
5511     xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
5512     xl_khrv_rec okl_contract_pub.khrv_rec_type;
5513 
5514     l_trxH_in_rec        Okl_Trx_Contracts_Pvt.tcnv_rec_type;
5515     l_trxH_out_rec       Okl_Trx_Contracts_Pvt.tcnv_rec_type;
5516 
5517     i NUMBER;
5518     l_tcnCode VARCHAR2(256);
5519     l_transaction_type VARCHAR2(256) := 'Miscellaneous';--'Generate Yields';
5520 
5521     l_fnd_rec fnd_lookups_csr%ROWTYPE;
5522     l_trx_rec trx_csr%ROWTYPE;
5523     l_hdr_rec l_hdr_csr%ROWTYPE;
5524 
5525     l_chr_id NUMBER := TO_NUMBER(p_chr_id);
5526     ln_sub_exists      NUMBER := 0;
5527     ln_esg_isg         NUMBER := 0;
5528 
5529     -- Validate weather the stream generation is done thru internal/external stream generation
5530     CURSOR validate_esg_isg (p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE)
5531     IS
5532     SELECT 1
5533     FROM dual
5534     WHERE EXISTS (SELECT 1
5535                   FROM okl_streams
5536                   WHERE khr_id= p_dnz_chr_id
5537                   AND say_code = 'WORK'
5538                   AND sgn_code = 'STMP');
5539     -- Validate the contract has Subsidy line
5540     CURSOR validate_sub_line (p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE)
5541     IS
5542     SELECT 1
5543     FROM dual
5544     WHERE EXISTS (SELECT '1'
5545                   FROM okl_subsidies_b subb,
5546                        okc_k_lines_b cle_fin,
5547                        okc_line_styles_b lse_fin,
5548                        okc_k_lines_b cle,
5549                        okl_k_headers khr,
5550                        okl_k_lines kle,
5551                        okc_line_styles_b lse
5552                   WHERE cle.dnz_chr_id = p_dnz_chr_id
5553                   AND cle.dnz_chr_id = khr.id
5554                   AND khr.deal_type IN ('LEASEDF','LEASEOP','LEASEST','LOAN')
5555                   AND cle.cle_id = cle_fin.id
5556                   AND cle.dnz_chr_id = cle_fin.dnz_chr_id
5557                   AND cle.id = kle.id
5558                   AND cle.lse_id = lse.id
5559                   AND lse.lty_code = 'SUBSIDY'
5560                   AND subb.id = kle.subsidy_id
5561                   AND cle_fin.id = cle.cle_id
5562                   AND cle_fin.lse_id = lse_fin.id
5563                   AND lse_fin.lty_code = 'FREE_FORM1');
5564   begin
5565 
5566     print( l_api_name, 'begin');
5567 
5568     x_return_status := OKL_API.START_ACTIVITY(
5569 			p_api_name      => l_api_name,
5570 			p_pkg_name      => g_pkg_name,
5571 			p_init_msg_list => p_init_msg_list,
5572 			l_api_version   => l_api_version,
5573 			p_api_version   => p_api_version,
5574 			p_api_type      => G_API_TYPE,
5575 			x_return_status => x_return_status);
5576 
5577     -- check if activity started successfully
5578     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5579        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5580     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5581        raise OKL_API.G_EXCEPTION_ERROR;
5582     End If;
5583     OPEN  validate_sub_line(p_dnz_chr_id => l_chr_id);
5584     FETCH validate_sub_line INTO ln_sub_exists;
5585     CLOSE validate_sub_line;
5586 --Start of modifcation BAKUCHIB
5587 -- If the contract has Subsidy line then now we are populating
5588 -- Sub yield record of the okl_k_headers with regular yield's
5589 -- given by super trump/Internal stream generation
5590     OPEN  validate_esg_isg(p_dnz_chr_id => l_chr_id);
5591     FETCH validate_esg_isg INTO ln_esg_isg;
5592     CLOSE validate_esg_isg;
5593     IF ln_sub_exists = 1 THEN
5594       print( l_api_name, ' contract # subsidy ' || to_char( l_chr_id ));
5595       pl_chrv_rec.id     := l_chr_id;
5596       pl_khrv_rec.id     := l_chr_id;
5597       --Start of modifcation Bug#3254058 BAKUCHIB
5598       -- Depending on the value of ln_esg_isg we decide weather stream generated by extrenal/internal
5599       IF ln_esg_isg = 1  THEN
5600         pl_khrv_rec.sub_pre_tax_yield := TRUNC(p_chr_yields.sub_pre_tax_yield*100.00,3);
5601         pl_khrv_rec.sub_after_tax_yield := TRUNC(p_chr_yields.sub_after_tax_yield*100.00,3);
5602         pl_khrv_rec.sub_pre_tax_irr := TRUNC(p_chr_yields.sub_pre_tax_irr*100.00,3);
5603         pl_khrv_rec.sub_after_tax_irr := TRUNC(p_chr_yields.sub_after_tax_irr*100.00,3);
5604         --Bug 4687692 dpsingh
5605 	pl_khrv_rec.sub_impl_interest_rate := TRUNC(p_chr_yields.sub_impl_interest_rate*100.00,3);
5606 	--Bug 4687692 end
5607         pl_khrv_rec.pre_tax_yield := TRUNC(p_chr_yields.pre_tax_yield*100.00,3);
5608         pl_khrv_rec.after_tax_yield := TRUNC(p_chr_yields.after_tax_yield*100.00,3);
5609         pl_khrv_rec.pre_tax_irr := TRUNC(p_chr_yields.pre_tax_irr*100.00,3);
5610         pl_khrv_rec.after_tax_irr := TRUNC(p_chr_yields.after_tax_irr*100.00,3);
5611         pl_khrv_rec.implicit_interest_rate := TRUNC(p_chr_yields.implicit_interest_rate*100.00,3);
5612       ELSIF ln_esg_isg = 0 THEN
5613         pl_khrv_rec.sub_pre_tax_yield := TRUNC(p_chr_yields.sub_pre_tax_yield*100.00,3);
5614         pl_khrv_rec.sub_after_tax_yield := TRUNC(p_chr_yields.sub_after_tax_yield*100.00,3);
5615         pl_khrv_rec.sub_pre_tax_irr := TRUNC(p_chr_yields.sub_pre_tax_irr*100.00,3);
5616         pl_khrv_rec.sub_after_tax_irr := TRUNC(p_chr_yields.sub_after_tax_irr*100.00,3);
5617         pl_khrv_rec.sub_impl_interest_rate := TRUNC(p_chr_yields.sub_impl_interest_rate*100.00,3);
5618         pl_khrv_rec.pre_tax_yield := TRUNC(p_chr_yields.pre_tax_yield*100.00,3);
5619         pl_khrv_rec.after_tax_yield := TRUNC(p_chr_yields.after_tax_yield*100.00,3);
5620         pl_khrv_rec.pre_tax_irr := TRUNC(p_chr_yields.pre_tax_irr*100.00,3);
5621         pl_khrv_rec.after_tax_irr := TRUNC(p_chr_yields.after_tax_irr*100.00,3);
5622         pl_khrv_rec.implicit_interest_rate := TRUNC(p_chr_yields.implicit_interest_rate*100.00,3);
5623       END IF;
5624       --End of modifcation Bug#3254058 BAKUCHIB
5625     ELSIF ln_sub_exists = 0 THEN
5626       print( l_api_name, ' contract # ' || to_char( l_chr_id ));
5627       pl_chrv_rec.id     := l_chr_id;
5628       pl_khrv_rec.id     := l_chr_id;
5629       pl_khrv_rec.pre_tax_yield := TRUNC(p_chr_yields.pre_tax_yield*100.00,3);
5630       pl_khrv_rec.after_tax_yield := TRUNC(p_chr_yields.after_tax_yield*100.00,3);
5631       pl_khrv_rec.pre_tax_irr := TRUNC(p_chr_yields.pre_tax_irr*100.00,3);
5632       pl_khrv_rec.after_tax_irr := TRUNC(p_chr_yields.after_tax_irr*100.00,3);
5633       pl_khrv_rec.implicit_interest_rate := TRUNC(p_chr_yields.implicit_interest_rate*100.00,3);
5634       pl_khrv_rec.sub_pre_tax_yield := NULL;
5635       pl_khrv_rec.sub_after_tax_yield := NULL;
5636       pl_khrv_rec.sub_pre_tax_irr := NULL;
5637       pl_khrv_rec.sub_after_tax_irr := NULL;
5638       pl_khrv_rec.sub_impl_interest_rate := NULL;
5639     END IF;
5640 --End of modifcation BAKUCHIB
5641     okl_contract_pvt.update_contract_header(
5642                  p_api_version       => p_api_version,
5643                  p_init_msg_list     => p_init_msg_list,
5644                  x_return_status     => x_return_status,
5645                  x_msg_count         => x_msg_count,
5646                  x_msg_data          => x_msg_data,
5647                  p_restricted_update => OKL_API.G_FALSE,
5648                  p_chrv_rec          => pl_chrv_rec,
5649                  p_khrv_rec          => pl_khrv_rec,
5650                  p_edit_mode         => 'N',
5651                  x_chrv_rec          => xl_chrv_rec,
5652                  x_khrv_rec          => xl_khrv_rec);
5653 
5654 
5655     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5656        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5657     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5658        raise OKL_API.G_EXCEPTION_ERROR;
5659     End If;
5660 
5661 
5662     print( l_api_name, 'end', x_return_status);
5663 
5664     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
5665 
5666     Exception
5667 	when OKL_API.G_EXCEPTION_ERROR then
5668           IF validate_sub_line%ISOPEN THEN
5669             CLOSE validate_sub_line;
5670           END IF;
5671           IF validate_esg_isg%ISOPEN THEN
5672             CLOSE validate_esg_isg;
5673           END IF;
5674 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5675 			p_api_name  => l_api_name,
5676 			p_pkg_name  => g_pkg_name,
5677 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5678 			x_msg_count => x_msg_count,
5679 			x_msg_data  => x_msg_data,
5680 			p_api_type  => g_api_type);
5681                 IF l_hdr_csr%ISOPEN THEN
5682                     CLOSE l_hdr_csr;
5683                 End If;
5684 
5685 	when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
5686           IF validate_sub_line%ISOPEN THEN
5687             CLOSE validate_sub_line;
5688           END IF;
5689           IF validate_esg_isg%ISOPEN THEN
5690             CLOSE validate_esg_isg;
5691           END IF;
5692 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5693 			p_api_name  => l_api_name,
5694 			p_pkg_name  => g_pkg_name,
5695 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5696 			x_msg_count => x_msg_count,
5697 			x_msg_data  => x_msg_data,
5698 			p_api_type  => g_api_type);
5699 
5700                 IF l_hdr_csr%ISOPEN THEN
5701                     CLOSE l_hdr_csr;
5702                 End If;
5703 
5704 	when OTHERS then
5705           IF validate_sub_line%ISOPEN THEN
5706             CLOSE validate_sub_line;
5707           END IF;
5708           IF validate_esg_isg%ISOPEN THEN
5709             CLOSE validate_esg_isg;
5710           END IF;
5711              	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5712 			p_api_name  => l_api_name,
5713 			p_pkg_name  => g_pkg_name,
5714 			p_exc_name  => 'OTHERS',
5715 			x_msg_count => x_msg_count,
5716 			x_msg_data  => x_msg_data,
5717 			p_api_type  => g_api_type);
5718 
5719                 IF l_hdr_csr%ISOPEN THEN
5720                     CLOSE l_hdr_csr;
5721                 End If;
5722 
5723   end update_contract_yields;
5724 -- Start modification Bug#3121708 bakuchib
5725 -- gboomina BUG#4508077 added p_source_call as a parameter
5726   Procedure adjust_streams(
5727             p_api_version     IN  NUMBER,
5728             p_init_msg_list   IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
5729             x_return_status   OUT NOCOPY VARCHAR2,
5730             x_msg_count       OUT NOCOPY NUMBER,
5731             x_msg_data        OUT NOCOPY VARCHAR2,
5732             p_chr_id          IN  VARCHAR2,
5733             p_purpose          IN  VARCHAR2,
5734 	    p_source_call     IN  VARCHAR2) AS
5735 
5736     l_api_name		CONSTANT VARCHAR2(30) := 'ADJUST_STREAMS';
5737     l_api_version	CONSTANT NUMBER	      := 1;
5738     l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
5739 
5740     pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
5741     pl_khrv_rec okl_contract_pvt.khrv_rec_type;
5742     xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
5743     xl_khrv_rec okl_contract_pub.khrv_rec_type;
5744 
5745     l_trxH_in_rec        Okl_Trx_Contracts_Pvt.tcnv_rec_type;
5746     l_trxH_out_rec       Okl_Trx_Contracts_Pvt.tcnv_rec_type;
5747     l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
5748     l_strm_rec  strm_csr%ROWTYPE;
5749     l_strms_rec strms_csr%ROWTYPE;
5750 
5751     l_stmv_tbl okl_streams_pub.stmv_tbl_type;
5752     x_stmv_tbl okl_streams_pub.stmv_tbl_type;
5753     l_selv_tbl Okl_Streams_pub.selv_tbl_type;
5754     x_selv_tbl Okl_Streams_pub.selv_tbl_type;
5755 
5756     -- Code for bulk update -02/28/2004 - HKPATEL
5757     l_id_tbl okl_streams_util.NumberTabTyp;
5758 	l_say_code_tbl okl_streams_util.Var10TabTyp;
5759 	l_active_yn_tbl okl_streams_util.Var10TabTyp;
5760 	l_date_history_tbl okl_streams_util.DateTabTyp;
5761 	l_date_curr_tbl okl_streams_util.DateTabTyp;
5762 
5763 	-- Code for bulk update ends here -02/28/2004 - HKPATEL
5764 
5765 
5766     i NUMBER;
5767     j NUMBER;
5768     l_tcnCode VARCHAR2(256);
5769     l_transaction_type VARCHAR2(256) := 'Miscellaneous';--'Generate Yields';
5770 
5771     l_fnd_rec fnd_lookups_csr%ROWTYPE;
5772     l_trx_rec trx_csr%ROWTYPE;
5773     l_hdr_rec l_hdr_csr%ROWTYPE;
5774 
5775     l_strm_name_rec  strm_name_csr%ROWTYPE;
5776     l_strm_name VARCHAR2(256);
5777 
5778     l_chr_id NUMBER := TO_NUMBER(p_chr_id);
5779 
5780 --  Changed this cursor for user defined streams
5781     Cursor l_secdep_csr( chrId NUMBER,pdtId NUMBER, pp VARCHAR2 ) is
5782     Select ele.id
5783     From  okl_strm_elements ele,
5784           okl_streams str,
5785           --okl_strm_type_v sty,
5786 		  OKL_STRM_TMPT_LINES_UV sty,
5787           okl_k_lines_full_v kle,
5788           okc_line_styles_b lse,
5789 	  okc_statuses_b sts
5790     Where ele.stm_id = str.id
5791          and str.khr_id = chrId
5792          and str.kle_id = kle.id
5793          and str.sty_id = sty.primary_sty_id
5794          --and sty.name = 'SECURITY DEPOSIT'
5795 		 and sty.primary_sty_purpose = 'SECURITY_DEPOSIT'
5796 		 and sty.pdt_id = pdtId
5797          and str.say_code = 'CURR'
5798          and nvl(str.purpose_code, 'ORIGIN') =  pp
5799          and str.active_yn = 'Y'
5800          and KLE.LSE_ID = LSE.ID
5801          and KLE.fee_type = 'SECDEPOSIT'
5802          and lse.lty_code = 'FEE'
5803          and kle.dnz_chr_id = str.khr_id
5804 	 and sts.code = kle.sts_code
5805 --Start of bug#3121708 modification BAKUCHIB
5806 	 and sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED')
5807 --End of bug#3121708 modification BAKUCHIB
5808          and ele.amount < 0
5809     Order By ele.stream_element_date;
5810 
5811     l_secdep_rec l_secdep_csr%ROWTYPE;
5812 
5813      CURSOR l_stmp_yn_csr(khrid NUMBER, p VARCHAR2) IS
5814      SELECT count(stm.id) cnt
5815      FROM   okl_streams	stm
5816      WHERE stm.khr_id        = khrid
5817         AND stm.say_code     = 'WORK'
5818         AND stm.sgn_code     = 'STMP'
5819         AND nvl(stm.purpose_code, 'ORIGIN') = p;
5820 
5821      l_stmp_yn_rec l_stmp_yn_csr%ROWTYPE;
5822      -- added for bugfix 4034007
5823      CURSOR l_report_deal_csr (product_id number) IS
5824      select value
5825      from okl_pdt_pqy_vals_uv
5826      where name = 'LEASE' and pdt_id = product_id;
5827      l_rep_pdt_deal_type VARCHAR2(10);
5828      l_deal_type VARCHAR2(10);
5829      l_origin_purpose VARCHAR2(10);
5830 
5831 	-- Cursor for rebook enhancement - HKPATEL - 4212626
5832 	l_hist_flag VARCHAR2(1) := 'Y';
5833      CURSOR bill_strm_hist_csr(chrId NUMBER,
5834                                styId NUMBER,
5835                                status VARCHAR2,
5836                                pp VARCHAR2 )
5837      IS
5838 
5839      SELECT 'N'
5840      FROM OKL_STREAMS str
5841      WHERE EXISTS (SELECT ID FROM OKL_STRM_ELEMENTS ele WHERE ele.STM_ID = str.ID AND ele.DATE_BILLED IS NULL )
5842      AND str.KHR_ID = chrId
5843      AND str.STY_ID = styId
5844      AND str.SAY_CODE = status
5845      AND nvl(str.purpose_code, 'ORIGIN') = pp;
5846 	-- Cursor for rebook enhancement ends here - HKPATEL
5847 
5848 
5849 
5850   begin
5851 
5852     --Added by kthiruva for Debugging
5853     write_to_log('Inside procedure adjust_Streams');
5854 
5855     print( l_api_name, 'begin');
5856     x_return_status := OKL_API.START_ACTIVITY(
5857 			p_api_name      => l_api_name,
5858 			p_pkg_name      => g_pkg_name,
5859 			p_init_msg_list => p_init_msg_list,
5860 			l_api_version   => l_api_version,
5861 			p_api_version   => p_api_version,
5862 			p_api_type      => G_API_TYPE,
5863 			x_return_status => x_return_status);
5864     -- check if activity started successfully
5865     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5866        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5867     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5868        raise OKL_API.G_EXCEPTION_ERROR;
5869     End If;
5870     OPEN l_hdr_pdt_csr(p_chr_id);
5871     FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
5872     CLOSE l_hdr_pdt_csr;
5873 
5874     OPEN  l_stmp_yn_csr( TO_NUMBER(p_chr_id), p_purpose);
5875     FETCH l_stmp_yn_csr INTO l_stmp_yn_rec;
5876     CLOSE l_stmp_yn_csr;
5877     If ( l_stmp_yn_rec.cnt > 0 ) Then
5878 
5879         OPEN l_hdr_csr( p_chr_id );
5880         FETCH l_hdr_csr INTO l_hdr_rec;
5881         CLOSE l_hdr_csr;
5882          -- added for bugfix 4034007
5883         if (p_purpose = 'ORIGIN') then
5884             l_origin_purpose := '-99';
5885             l_deal_type := l_hdr_rec.deal_type;
5886         else
5887             l_origin_purpose := p_purpose;
5888 
5889             OPEN l_report_deal_csr( l_hdr_rec.report_pdt_id );
5890             FETCH l_report_deal_csr INTO l_rep_pdt_deal_type;
5891             CLOSE l_report_deal_csr;
5892 
5893             l_deal_type := l_rep_pdt_deal_type;
5894         end if;
5895 
5896      -- gboomina BUG#4508077 start - generating IDC streams only for ISG
5897      IF(p_source_call = 'ISG') THEN
5898         OKL_EXPENSE_STREAMS_PVT.generate_idc(
5899                       p_khr_id         => p_chr_id,
5900                       p_purpose_code   => l_origin_purpose,
5901                       p_currency_code  => l_hdr_rec.currency_code,
5902                       p_start_date     => l_hdr_rec.start_date,
5903                       p_end_date       => l_hdr_rec.end_date,
5904                       p_deal_type      => l_deal_type,
5905                       x_return_status  => x_return_status);
5906         If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5907             raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5908         ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5909             raise OKL_API.G_EXCEPTION_ERROR;
5910         End If;
5911      END IF;
5912      -- gboomina BUG#4508077 end
5913     END IF;
5914     --Added by kthiruva for Debugging
5915     write_To_log('Prior to the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE');
5916     OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE(
5917                                    p_api_version         => p_api_version,
5918                                    p_init_msg_list       => p_init_msg_list,
5919                                    p_khr_id              => p_chr_id,
5920 				   p_purpose_code        => p_purpose,
5921                                    x_return_status       => x_return_status,
5922                                    x_msg_count           => x_msg_count,
5923                                    x_msg_data            => x_msg_data);
5924 
5925     --Added by kthiruva for Debugging
5926     write_to_log('After the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE, return status is :'||x_return_status);
5927     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5928       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5929     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5930       raise OKL_API.G_EXCEPTION_ERROR;
5931     END IF;
5932 
5933     -- Added by HKPATEL for mass rebook fix
5934 	/*
5935 	Commented by HKPATEL for bug 4212626
5936     adjust_massrebook_streams(p_api_version     => p_api_version,
5937                               p_init_msg_list   => p_init_msg_list,
5938                               x_return_status   => x_return_status,
5939                               x_msg_count       => x_msg_count,
5940                               x_msg_data        => x_msg_data,
5941                               p_chr_id          => p_chr_id,
5942                               p_purpose         => p_purpose);
5943     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5944       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5945     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5946       raise OKL_API.G_EXCEPTION_ERROR;
5947     END IF;
5948     */
5949 
5950   -- Code for rebook enhancement - HKPATEL	- 4212626
5951      --Added by kthiruva for Debugging
5952      write_to_log('Prior to the call to create_advance_rental_streams');
5953      create_advance_rental_streams(
5954             p_api_version       => p_api_version,
5955             p_init_msg_list     => p_init_msg_list,
5956             x_return_status     => x_return_status,
5957             x_msg_count         => x_msg_count,
5958             x_msg_data          => x_msg_data,
5959             p_chr_id            => l_chr_id,
5960 	        p_purpose           => p_purpose);
5961 
5962     --Added by kthiruva for Debugging
5963     write_to_log('After the call to create_advance_rental_streams, return status is :'||x_return_status);
5964 
5965     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
5966       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5967     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
5968       raise OKL_API.G_EXCEPTION_ERROR;
5969     END IF;
5970 
5971     --Added by kthiruva for Debugging
5972     write_to_log('Prior to the call to adjust_passthrough_streams ');
5973     adjust_passthrough_streams(
5974                          p_api_version   => p_api_version,
5975                          p_init_msg_list => p_init_msg_list,
5976                          x_return_status => x_return_status,
5977                          x_msg_count     => x_msg_count,
5978                          x_msg_data      => x_msg_data,
5979                          p_chr_id        => p_chr_id,
5980                          p_purpose       => p_purpose);
5981 
5982     --Added by kthiruva for Debugging
5983     write_to_log('After the call to adjust_passthrough_streams, return status is :'||x_return_status);
5984 
5985     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
5986         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
5987     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
5988         RAISE OKL_API.G_EXCEPTION_ERROR;
5989     END IF;
5990 
5991   	--Added by kthiruva for Debugging
5992     write_to_log('Prior to the call to OKL_CONTRACT_REBOOK_PVT.link_streams');
5993 	OKL_CONTRACT_REBOOK_PVT.link_streams(
5994                         p_api_version => p_api_version,
5995                         p_init_msg_list => p_init_msg_list,
5996                         x_return_status => x_return_status,
5997                         x_msg_count => x_msg_count,
5998                         x_msg_data => x_msg_data,
5999                         p_khr_id => p_chr_id);
6000 
6001     --Added by kthiruva for Debugging
6002     write_to_log('After the call to OKL_CONTRACT_REBOOK_PVT.link_streams, return status is :'||x_return_status);
6003 
6004     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6005       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6006     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6007       RAISE OKL_API.G_EXCEPTION_ERROR;
6008     END IF;
6009   -- Code for rebook enhancement ends here - HKPATEL
6010 
6011     i := 0;
6012     FOR  l_strms_rec in strms_csr ( l_chr_id, 'CURR', p_purpose )
6013     LOOP
6014 	-- code change for rebook enhancement - HKPATEL-4212626
6015 	    l_hist_flag := 'Y';
6016         OPEN  strm_name_csr ( l_strms_rec.sty_id );
6017         FETCH strm_name_csr into l_strm_name_rec;
6018 		IF strm_name_csr%NOTFOUND THEN
6019             CLOSE strm_name_csr;
6020             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6021         ELSIF (l_strm_name_rec.name = 'BILLING ADJUSTMENT') THEN
6022 		  OPEN bill_strm_hist_csr(l_chr_id,l_strms_rec.sty_id,'CURR',p_purpose);
6023 		  FETCH bill_strm_hist_csr into l_hist_flag;
6024 		  IF bill_strm_hist_csr%NOTFOUND THEN
6025             CLOSE bill_strm_hist_csr;
6026 		  END IF;
6027 		END IF;
6028         CLOSE strm_name_csr;
6029 
6030 	-- code change for rebook enhancement ends here- HKPATEL
6031 
6032         OPEN  strm_name_csr ( l_strms_rec.sty_id );
6033         FETCH strm_name_csr into l_strm_name_rec;
6034 
6035 		IF strm_name_csr%NOTFOUND THEN
6036             CLOSE strm_name_csr;
6037             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6038 
6039 	ELSIF (l_strm_name_rec.stream_type_purpose NOT IN (
6040                        'INVESTOR_CNTRCT_OBLIGATION_PAY', 'INVESTOR_DISB_ADJUSTMENT',
6041                        'INVESTOR_EVERGREEN_RENT_PAY', 'INVESTOR_INTEREST_INCOME',
6042                        'INVESTOR_INTEREST_PAYABLE', 'INVESTOR_LATE_FEE_PAYABLE',
6043                        'INVESTOR_LATE_INTEREST_PAY', 'INVESTOR_PAYABLE',
6044                        'INVESTOR_PRETAX_INCOME', 'INVESTOR_PRINCIPAL_PAYABLE',
6045                        'INVESTOR_RECEIVABLE', 'INVESTOR_RENTAL_ACCRUAL',
6046                        'INVESTOR_RENT_BUYBACK', 'INVESTOR_RENT_DISB_BASIS',
6047                        'INVESTOR_RENT_PAYABLE', 'INVESTOR_RESIDUAL_BUYBACK',
6048                        'INVESTOR_RESIDUAL_DISB_BASIS', 'INVESTOR_RESIDUAL_PAY',
6049                        'INVESTOR_VARIABLE_INTEREST', 'PV_RENT_SECURITIZED',
6050                        'PV_RV_SECURITIZED')
6051                         -- INVESTOR_CNTRCT_OBLIGATION_PAY' --'INVESTOR_CONTRACT_OBLIGATION_PAYABLE'
6052                        --  ,'INVESTOR_RESIDUAL_PAY' ) --'INVESTOR_RESIDUAL_PAYABLE')
6053 
6054                --Condition added by kthiruva for Bug 4737555 .Streams generated by Interest Calc Prog should not be historised
6055                AND (l_strms_rec.SGN_CODE NOT IN ('INTC','LATE_CALC')) -- bug 6472228
6056                AND l_hist_flag = 'Y') THEN
6057             i := i + 1;
6058             print( l_api_name, 'to HIST STMID:' || to_char(l_strm_rec.strm_id ));
6059 			-- Code commented and added for bulk update by HKPATEL - 02/28/2005
6060 			/*
6061             l_stmv_tbl(i).id := l_strms_rec.STRM_ID;
6062             l_stmv_tbl(i).say_code := 'HIST';
6063             l_stmv_tbl(i).active_yn := 'N';
6064             l_stmv_tbl(i).date_history := sysdate;
6065 			*/
6066 
6067             l_id_tbl(i):= l_strms_rec.STRM_ID;
6068 	        l_say_code_tbl(i) := 'HIST';
6069 			l_active_yn_tbl(i) := 'N';
6070 			l_date_history_tbl(i) := sysdate;
6071 			l_date_curr_tbl(i) := l_strms_rec.date_current;
6072 			-- Code commented and added ends here for bulk update by HKPATEL - 02/28/2005
6073 
6074 
6075         END IF;
6076         CLOSE strm_name_csr;
6077 
6078     END LOOP;
6079     FOR l_strms_rec in strms_csr ( l_chr_id, 'WORK', p_purpose)
6080     LOOP
6081         OPEN  strm_name_csr ( l_strms_rec.sty_id );
6082         FETCH strm_name_csr into l_strm_name_rec;
6083         IF strm_name_csr%NOTFOUND THEN
6084             CLOSE strm_name_csr;
6085             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6086         END IF;
6087         CLOSE strm_name_csr;
6088 		-- Code commented and added for use defined streams
6089         --l_strm_name := l_strm_name_rec.name;
6090 		l_strm_name := l_strm_name_rec.stream_type_purpose;
6091 
6092 
6093         -- Added and commented code ends here.
6094         i := i + 1;
6095         print( l_api_name, 'to CURR STMID:' || to_char(l_strms_rec.strm_id ));
6096 		-- Code for bulk update -02/28/2004 - HKPATEL
6097         l_id_tbl(i):= l_strms_rec.STRM_ID;
6098 	    l_say_code_tbl(i) := 'CURR';
6099 		l_date_curr_tbl(i) := sysdate;
6100 		l_date_history_tbl(i) := NULL;
6101 
6102         --l_stmv_tbl(i).id := l_strms_rec.STRM_ID;
6103         --l_stmv_tbl(i).say_code := 'CURR';
6104 
6105 
6106     	-- Code for bulk update ends here -02/28/2004 - HKPATEL
6107 
6108 -- code added and commented for user defined streams
6109 /*
6110         If (( l_strm_name = 'FEDERAL DEPRECIATION' ) OR
6111             ( l_strm_name = 'STATE DEPRECIATION' ) OR
6112             ( l_strm_name = 'BOOK DEPRECIATION' ))  THEN
6113 */
6114         If (( l_strm_name = 'FEDERAL_DEPRECIATION' ) OR
6115             ( l_strm_name = 'STATE_DEPRECIATION' ) OR
6116             ( l_strm_name = 'BOOK_DEPRECIATION' ))  THEN
6117 
6118             --l_stmv_tbl(i).active_yn := 'N';
6119 			l_active_yn_tbl(i) := 'N';
6120         Else
6121             --l_stmv_tbl(i).active_yn := 'Y';
6122 			l_active_yn_tbl(i) := 'Y';
6123         End If;
6124 
6125         If ( p_purpose = 'REPORT')  THEN
6126             --l_stmv_tbl(i).active_yn := 'N';
6127 			l_active_yn_tbl(i) := 'N';
6128         Else
6129             --l_stmv_tbl(i).active_yn := 'Y';
6130 			l_active_yn_tbl(i) := 'Y';
6131         End If;
6132 
6133         --l_stmv_tbl(i).date_current := sysdate;
6134 
6135 
6136     END LOOP;
6137     If ( l_id_tbl.COUNT > 0 ) Then
6138    /* Commented for Bulk update by HKPATEL -02/18/2005
6139    If ( l_stmv_tbl.COUNT > 0 ) Then
6140         Okl_Streams_pub.update_streams(
6141                          p_api_version => p_api_version,
6142                          p_init_msg_list => p_init_msg_list,
6143                          x_return_status => x_return_status,
6144                          x_msg_count => x_msg_count,
6145                          x_msg_data => x_msg_data,
6146                          p_stmv_tbl => l_stmv_tbl,
6147                          x_stmv_tbl => x_stmv_tbl);
6148     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6149       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6150     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6151       raise OKL_API.G_EXCEPTION_ERROR;
6152     END IF;
6153 	Commented code for Bulk update ends here by HKPATEL -02/18/2005 */
6154 
6155 	-- Bulk update
6156 	BEGIN
6157       --Added by kthiruva for Debugging
6158       write_to_log('Prior to the Historing of Current streams and updation of Work streams to current');
6159 
6160 	  FORALL i IN l_id_tbl.FIRST..l_id_tbl.LAST
6161 		UPDATE OKL_STREAMS
6162 		SET 	say_code = l_say_code_tbl(i),
6163 		active_yn = l_active_yn_tbl(i),
6164 		date_history = l_date_history_tbl(i),
6165 		date_current = l_date_curr_tbl(i)
6166 		WHERE 	ID = l_id_tbl(i);
6167 
6168      --Added by kthiruva for Debugging
6169      write_to_log('Statuses updated successfully');
6170 
6171              -- Added by mansrini for bug 4728636 (G bug 4520466)
6172              IF p_purpose <> 'REPORT' THEN
6173 	       OKL_BILLING_CONTROLLER_PVT.track_next_bill_date(p_chr_id);
6174              END IF;
6175 	     -- end changes
6176      --Added by kthiruva for Debugging
6177      write_to_log('After the call to OKL_BILLING_CONTROLLER_PVT.track_next_bill_date');
6178 
6179 	EXCEPTION
6180 		WHEN OTHERS THEN
6181 		      okl_api.set_message (p_app_name     => G_APP_NAME,
6182                            p_msg_name     => G_DB_ERROR,
6183                            p_token1       => G_PROG_NAME_TOKEN,
6184                            p_token1_value => l_api_name,
6185                            p_token2       => G_SQLCODE_TOKEN,
6186                            p_token2_value => sqlcode,
6187                            p_token3       => G_SQLERRM_TOKEN,
6188                            p_token3_value => sqlerrm);
6189 		   l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
6190 		   raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6191 	END;
6192 
6193 	-- Bulk update ends here
6194 
6195      End If;
6196 	 /* Changed the position of code for bug 4212626
6197      create_advance_rental_streams(
6198             p_api_version       => p_api_version,
6199             p_init_msg_list     => p_init_msg_list,
6200             x_return_status     => x_return_status,
6201             x_msg_count         => x_msg_count,
6202             x_msg_data          => x_msg_data,
6203             p_chr_id            => l_chr_id,
6204 	    p_purpose           => p_purpose);
6205 
6206 
6207     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
6208       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6209     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
6210       raise OKL_API.G_EXCEPTION_ERROR;
6211     END IF;
6212     */
6213      OPEN  l_hdr_csr( l_chr_id);
6214      FETCH l_hdr_csr INTO l_hdr_rec;
6215 
6216      IF l_hdr_csr%NOTFOUND THEN
6217          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6218      Elsif (l_hdr_rec.orig_system_source_code = 'OKL_REBOOK') Then
6219 	   NULL;
6220 	 /* Changed the position of code for bug 4212626
6221          create_interim_rental_streams(
6222                 p_api_version       => p_api_version,
6223                 p_init_msg_list     => p_init_msg_list,
6224                 x_return_status     => x_return_status,
6225                 x_msg_count         => x_msg_count,
6226                 x_msg_data          => x_msg_data,
6227                 p_chr_id            => l_chr_id,
6228                 p_purpose           => p_purpose);
6229 
6230          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6231              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6232          END IF;
6233 	 */
6234      END IF;
6235      CLOSE l_hdr_csr;
6236 
6237 /*
6238  *   get rid of return negative stream value for Security Deposit.
6239  */
6240      l_selv_tbl.delete(1, l_selv_tbl.COUNT );
6241      i := 0;
6242 	 IF(g_rep_req_yn = 'Y') THEN
6243        FOR l_secdep_rec in l_secdep_csr ( p_chr_id,l_pdt_id_rec.report_pdt_id, p_purpose )
6244        LOOP
6245 
6246            i := i + 1;
6247            l_selv_tbl(i).id := l_secdep_rec.ID;
6248 
6249        END LOOP;
6250 	 ELSE
6251        FOR l_secdep_rec in l_secdep_csr ( p_chr_id,l_pdt_id_rec.pid, p_purpose )
6252        LOOP
6253 
6254            i := i + 1;
6255            l_selv_tbl(i).id := l_secdep_rec.ID;
6256 
6257        END LOOP;
6258 
6259 	 END IF;
6260 
6261 
6262      If ( i > 0 ) Then
6263 
6264           Okl_Streams_pub.delete_stream_elements(
6265                      p_api_version => p_api_version,
6266                      p_init_msg_list => p_init_msg_list,
6267                      x_return_status => x_return_status,
6268                      x_msg_count => x_msg_count,
6269                      x_msg_data => x_msg_data,
6270                      p_selv_tbl => l_selv_tbl);
6271 
6272 
6273              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6274                  RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6275              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6276                  RAISE OKL_API.G_EXCEPTION_ERROR;
6277              END IF;
6278       End If;
6279 	 /* Changed the position of code for bug 4212626
6280       adjust_passthrough_streams(
6281                          p_api_version   => p_api_version,
6282                          p_init_msg_list => p_init_msg_list,
6283                          x_return_status => x_return_status,
6284                          x_msg_count     => x_msg_count,
6285                          x_msg_data      => x_msg_data,
6286                          p_chr_id        => p_chr_id,
6287                          p_purpose       => p_purpose);
6288 
6289 
6290        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6291            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6292        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6293            RAISE OKL_API.G_EXCEPTION_ERROR;
6294        END IF;
6295       */
6296        x_return_status := l_return_status;
6297 
6298     print( l_api_name, 'end', x_return_status);
6299 
6300     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
6301 
6302     Exception
6303 	when OKL_API.G_EXCEPTION_ERROR THEN
6304 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6305 			p_api_name  => l_api_name,
6306 			p_pkg_name  => g_pkg_name,
6307 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
6308 			x_msg_count => x_msg_count,
6309 			x_msg_data  => x_msg_data,
6310 			p_api_type  => g_api_type);
6311                 IF l_hdr_csr%ISOPEN THEN
6312                     CLOSE l_hdr_csr;
6313                 End If;
6314 
6315 	when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6316 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6317 			p_api_name  => l_api_name,
6318 			p_pkg_name  => g_pkg_name,
6319 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
6320 			x_msg_count => x_msg_count,
6321 			x_msg_data  => x_msg_data,
6322 			p_api_type  => g_api_type);
6323 
6324                 If ( strm_csr%ISOPEN ) Then
6325                     CLOSE strm_csr;
6326                 End If;
6327 
6328                 IF l_hdr_csr%ISOPEN THEN
6329                     CLOSE l_hdr_csr;
6330                 End If;
6331 
6332 	when OTHERS THEN
6333              	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
6334 			p_api_name  => l_api_name,
6335 			p_pkg_name  => g_pkg_name,
6336 			p_exc_name  => 'OTHERS',
6337 			x_msg_count => x_msg_count,
6338 			x_msg_data  => x_msg_data,
6339 			p_api_type  => g_api_type);
6340 
6341                 IF l_hdr_csr%ISOPEN THEN
6342                     CLOSE l_hdr_csr;
6343                 End If;
6344 
6345   end adjust_streams;
6346    --vdamerla Bug6149951 - Added - Start
6347    -- New procedure to identify and retrieve the khr_id
6348    -- of a original contract if the input contract is REBOOK copy
6349    -- Else input contract is returned as output
6350    PROCEDURE retrive_orig_hdr_id(p_chr_id  IN VARCHAR2
6351                                , x_chr_id OUT NOCOPY VARCHAR2
6352 ) IS
6353         l_orig_chr_id OKC_K_HEADERS_B.ID%TYPE;
6354         cursor c_online_rbk_csr(cp_chr_id in okc_k_headers_b.id%TYPE) is
6355         select ORIG_SYSTEM_ID1
6356         from okc_k_headers_b
6357         where id=cp_chr_id
6358         and trim(ORIG_SYSTEM_SOURCE_CODE)='OKL_REBOOK';
6359 
6360     begin
6361         open c_online_rbk_csr(p_chr_id);
6362         fetch c_online_rbk_csr into l_orig_chr_id;
6363         IF c_online_rbk_csr%FOUND THEN
6364           x_chr_id := l_orig_chr_id;
6365         ELSE
6366           x_chr_id := p_chr_id;
6367         END IF;
6368         close c_online_rbk_csr;
6369 
6370     end retrive_orig_hdr_id;
6371 --vdamerla Bug6149951 - Added - End
6372 
6373    -- srsreeni - Bug#5699923 - Added - Start
6374  	   -- Start of comments
6375  	   -- Procedure Name     : RECREATE_TMT_LN_STRMS
6376  	   -- Description        : Creates Working copy of the CURRENT streams of LOAN Components
6377  	   --                      of TERMINATED LINES. LOAN components refer to
6378  	   --                      lines on a LOAN contract or FINANCED or
6379  	   --                      ROLLOVER Fees.
6380  	   -- Business Rules     : During partial termination, mass rebook re-generates streams of terminated lines.
6381  	   --                      This process has been modified not to generate streams for
6382  	   --                      Loan components. Instead the current streams are copied over.
6383  	   -- Parameters         : p_chr_id      - Contract Identifier
6384  	   --                      p_source_call - Identifies if this is ESG or ISG
6385  	   -- Version            : 1.0 - Introduced as part of Bug#5699923
6386  	   --
6387  	   -- End of comments
6388   PROCEDURE RECREATE_TMT_LN_STRMS(
6389             p_api_version     IN  NUMBER,
6390             p_init_msg_list   IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
6391             x_return_status   OUT NOCOPY VARCHAR2,
6392             x_msg_count       OUT NOCOPY NUMBER,
6393             x_msg_data        OUT NOCOPY VARCHAR2,
6394             p_chr_id          IN  VARCHAR2,
6395 	    p_trx_number      IN  NUMBER,
6396             p_source_call     IN  VARCHAR2 default 'ESG') AS
6397 
6398     -- Declare Variables
6399     l_api_name          CONSTANT VARCHAR2(30) := 'RECREATE_TMT_LN_STRMS';
6400     l_strm_index        NUMBER;
6401     l_sel_index        NUMBER;
6402     l_prev_stm_id       OKL_STREAMS.ID%TYPE;
6403 
6404     -- vdamerla Forward Ported Bug6149951  starts
6405 
6406     l_orig_chr_id       OKC_K_HEADERS_B.ID%TYPE; -- smadhava - Bug# 6149951
6407     l_new_stm_cle_id    OKC_K_LINES_B.ID%TYPE; -- smadhava - Bug# 6149951
6408 
6409     -- vdamerla Forward Ported Bug6149951 ends
6410 
6411     -- Declare records/table types
6412     l_stmv_tbl          okl_streams_pub.stmv_tbl_type;
6413     lx_stmv_tbl         okl_streams_pub.stmv_tbl_type;
6414     l_selv_tbl          okl_streams_pub.selv_tbl_type;
6415     lx_selv_tbl         okl_streams_pub.selv_tbl_type;
6416     -- vdamerla Forward Port
6417     -- Cursor to get fees linked to a terminated Asset
6418     CURSOR c_lnk_fin_rol_trm_fee (cp_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
6419       SELECT LNK_CLE.ID LNK_ID
6420            , FEE_CLE.ID FEE_ID
6421            , LNK_CLE.DATE_TERMINATED
6422         FROM OKC_K_LINES_B     LNK_CLE
6423            , OKC_LINE_STYLES_B LNK_LSE
6424            , OKL_K_LINES       FEE_KLE
6425            , OKC_K_LINES_B     FEE_CLE
6426            , OKC_STATUSES_B    STS
6427        WHERE LNK_CLE.CLE_ID     = FEE_CLE.ID
6428          AND LNK_CLE.DNZ_CHR_ID = cp_chr_id
6429          AND FEE_CLE.DNZ_CHR_ID = cp_chr_id
6430          AND LNK_LSE.ID         = LNK_CLE.LSE_ID
6431          AND LNK_LSE.LTY_CODE   = 'LINK_FEE_ASSET'
6432          AND STS.CODE           = LNK_CLE.STS_CODE
6433          AND STS.STE_CODE       = 'TERMINATED' -- LINKED line is terminated
6434          AND FEE_KLE.ID         = FEE_CLE.ID;
6435          -- vdamerla Forward Ported Bug6149951
6436          --AND FEE_KLE.ID         = FEE_CLE.ID
6437          --AND FEE_KLE.FEE_TYPE   IN (G_FEE_FINANCED,G_FEE_ROLLOVER);
6438 
6439 
6440     -- Cursor to get Terminated Asset lines of a LOAN contract
6441     CURSOR c_tmt_asset_loan (cp_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
6442       SELECT CLE.ID LINE_ID
6443            , CLE.DATE_TERMINATED
6444         FROM OKL_K_HEADERS KHR
6445            , OKC_K_LINES_B CLE
6446            , OKC_LINE_STYLES_B LSE
6447            , OKC_STATUSES_B    STS
6448        WHERE CLE.DNZ_CHR_ID = KHR.ID
6449          AND LSE.ID         = CLE.LSE_ID
6450          AND LSE.LTY_CODE   ='FREE_FORM1'
6451          AND STS.CODE       = CLE.STS_CODE
6452          AND STS.STE_CODE   = 'TERMINATED'
6453          AND KHR.ID         = cp_chr_id
6454         --vdamerla Bug6149951 starts. Need to restrict only LOAN-REVOLVING deal type for a terminated asset
6455         --LOAN and LEASE stream types needs to be copied as they will not be requested for a terminated asset
6456         --         AND KHR.DEAL_TYPE  = 'LOAN' -- only LOAN contracts (exclude REV-LOAN)
6457          AND KHR.DEAL_TYPE  <> 'LOAN-REVOLVING'
6458         --vdamerla Bug6149951 ends
6459          ;
6460 
6461    -- Modified by bkatraga for bug 5704245. Added bind condition for purpose_code
6462    -- Cursor to get Current Streams and elements for a particular line of a contract
6463    -- Modified the cursor by vdamerla for bug 6344223
6464    -- Added ISG generated stream type purposes so that these streams will not be
6465    -- copied over during mass/online rebook. Streams will be regenerated by ISG
6466 
6467    CURSOR c_streams (cp_chr_id OKC_K_HEADERS_B.ID%TYPE
6468             , cp_cle_id OKC_K_LINES_B.ID%TYPE
6469             , cp_date_terminated DATE
6470             , cp_trx_number okl_streams.transaction_number%TYPE) IS
6471      SELECT STM.ID STREAM_ID
6472           , STM.STY_ID
6473           , STM.SGN_CODE
6474           , STM.PURPOSE_CODE
6475           , STM.ACTIVE_YN  -- vdamerla Forward Ported Bug 6082209
6476           , SEL.STREAM_ELEMENT_DATE
6477           , SEL.AMOUNT
6478           , SEL.SE_LINE_NUMBER
6479           , SEL.COMMENTS -- vdamerla Forward Ported Bug 6344223
6480        FROM OKL_STREAMS STM
6481           , OKL_STRM_ELEMENTS SEL
6482           , OKL_STRM_TYPE_B STY -- vdamerla Forward Ported Bug 6082209
6483       WHERE SEL.STM_ID = STM.ID
6484         AND STM.KHR_ID = cp_chr_id
6485         AND STM.KLE_ID = cp_cle_id
6486         AND (nvl(STM.purpose_code,'ORIG') = (select nvl(si.PURPOSE_CODE,'ORIG') from okl_stream_interfaces si
6487                                              where transaction_number = cp_trx_number))
6488         AND STM.SAY_CODE = 'CURR'
6489         -- vdamerla Forward Ported Bug6344223
6490         AND SEL.STREAM_ELEMENT_DATE <= nvl(cp_date_terminated, SEL.STREAM_ELEMENT_DATE)
6491         AND STM.SGN_CODE <> 'INTC'
6492         AND STM.STY_ID = STY.ID
6493         AND STY.stream_type_purpose NOT IN
6494           ('INVESTOR_CNTRCT_OBLIGATION_PAY', 'INVESTOR_DISB_ADJUSTMENT', 'INVESTOR_EVERGREEN_RENT_PAY', 'INVESTOR_INTEREST_INCOME',
6495            'INVESTOR_INTEREST_PAYABLE', 'INVESTOR_LATE_FEE_PAYABLE', 'INVESTOR_LATE_INTEREST_PAY', 'INVESTOR_PAYABLE',
6496            'INVESTOR_PRETAX_INCOME', 'INVESTOR_PRINCIPAL_PAYABLE', 'INVESTOR_RECEIVABLE', 'INVESTOR_RENTAL_ACCRUAL',
6497            'INVESTOR_RENT_BUYBACK', 'INVESTOR_RENT_DISB_BASIS', 'INVESTOR_RENT_PAYABLE', 'INVESTOR_RESIDUAL_BUYBACK',
6498            'INVESTOR_RESIDUAL_DISB_BASIS', 'INVESTOR_RESIDUAL_PAY', 'INVESTOR_VARIABLE_INTEREST', 'PV_RENT_SECURITIZED',
6499            'PV_RV_SECURITIZED', 'ADVANCE_RENT', 'PASS_THROUGH_EVERGREEN_FEE', 'PASS_THROUGH_EVERGREEN_RENT', 'PASS_THROUGH_EVERGREEN_SERVICE',
6500            'PASS_THROUGH_FEE', 'PASS_THROUGH_SERVICE', 'PASS_THRU_EXP_ACCRUAL', 'PASS_THRU_REV_ACCRUAL', 'PASS_THRU_SVC_EXP_ACCRUAL',
6501            'PASS_THRU_SVC_REV_ACCRUAL', 'PV_RV', 'PV_RV_GUARANTEED', 'PV_RV_UNGUARANTEED', 'RESIDUAL_GUARANTEED', 'RESIDUAL_VALUE',
6502            'SECURITY_DEPOSIT', 'SERVICE_EXPENSE', 'SERVICE_FEE_AMORT_SCHEDULE', 'SERVICE_FEE_AUDIT_LETTER', 'SERVICE_FEE_DOCUMENT_REQ',
6503            'SERVICE_FEE_EXCHG_REQUEST', 'SERVICE_FEE_GENERAL', 'SERVICE_FEE_INTEREST_CONV', 'SERVICE_FEE_INVOICE_DEMAND',
6504            'SERVICE_FEE_INVOICE_REPRINT', 'SERVICE_FEE_PMT_CHANGE', 'SERVICE_FEE_REST_REQUEST', 'SERVICE_FEE_TERM_REQUEST',
6505            'SERVICE_FEE_TRANS_REQUEST', 'SERVICE_FEE_VAR_RATE_STMNT', 'SERVICE_FEE_VAT_SCHEDULE', 'SERVICE_INCOME', 'SERVICE_PAYMENT',
6506            'SERVICE_RENEWAL')
6507 
6508         --AND SEL.STREAM_ELEMENT_DATE <= cp_date_terminated
6509         -- vdamerla End Forward Ported Bug6344223
6510         AND STM.SGN_CODE  NOT IN ('INTC','LATE_CALC') -- Bug 6472228
6511        ORDER BY STM.ID  -- to get the stream elements of a stream together
6512        ;
6513 
6514      lnk_fin_rol_trm_fee_rec  c_lnk_fin_rol_trm_fee%ROWTYPE;
6515      tmt_asset_loan_rec       c_tmt_asset_loan%ROWTYPE;
6516      streams_rec              c_streams%ROWTYPE;
6517     --Added by vdamerla for bug 6082209
6518      --Cursor to check whether it is a partial termination mass rebook transaction
6519      CURSOR  l_chk_mass_rbk_csr IS
6520        SELECT '!'
6521          FROM  okc_k_headers_b CHR,
6522                okl_trx_contracts ktrx,
6523                okl_trx_contracts trx
6524         WHERE  CHR.ID         = p_chr_id
6525           AND  ktrx.KHR_ID    =  chr.id
6526           AND  ktrx.tsu_code  = 'ENTERED'
6527           AND  ktrx.rbr_code  IS NOT NULL
6528           AND  ktrx.tcn_type  = 'TRBK'
6529 --rkuttiya added for 12.1.1 Multi GAAP
6530           AND  ktrx.representation_type = 'PRIMARY'
6531 --
6532           AND  ktrx.source_trx_type  = 'TCN'
6533           AND  trx.tcn_type   = 'ALT'
6534           AND  trx.id         = ktrx.source_trx_id
6535           AND  EXISTS (SELECT '1'
6536                          FROM  okl_rbk_selected_contract rbk_khr
6537                         WHERE  rbk_khr.KHR_ID = chr.id
6538                           AND  rbk_khr.STATUS <> 'PROCESSED');
6539 
6540      --Modified by vdamerla for bug 6344223
6541      --This cursor will get the terminated lines of current streams
6542      CURSOR l_get_curr_streams_lines
6543       IS
6544       SELECT distinct stm.kle_id
6545         FROM okl_streams stm,
6546              okc_k_lines_b ln
6547        WHERE stm.khr_id = p_chr_id
6548          AND stm.say_code = 'CURR'
6549          AND stm.kle_id = ln.id
6550          AND ln.STS_CODE = 'TERMINATED'
6551          AND (nvl(stm.purpose_code,'ORIG') = (select nvl(si.PURPOSE_CODE,'ORIG')
6552                                                 from okl_stream_interfaces si
6553                                                where si.transaction_number = p_trx_number));
6554 
6555      --Cursor to get the line terminated date
6556      --Modified by vdamerla for bug 6344223
6557      CURSOR l_get_line_term_date(p_line_id OKC_K_LINES_B.ID%TYPE)
6558       IS
6559       SELECT date_terminated
6560         FROM okc_k_lines_b
6561        WHERE id = p_line_id;
6562 
6563      --To get the streams for which kle_id is null
6564      --Also streams related to Investor and Interest Calc Prog should not be copied over as these streams are not historized
6565      --Modified the cursor by vdamerla for bug 6344223
6566      --Added ISG generated stream type purposes so that these streams will not be
6567      --copied over during mass/online rebook. Streams will be regenerated by ISG
6568      CURSOR c_streams1 (cp_chr_id OKC_K_HEADERS_B.ID%TYPE
6569                         ,cp_trx_number okl_streams.transaction_number%TYPE) IS
6570      SELECT STM.ID STREAM_ID
6571           , STM.STY_ID
6572           , STM.SGN_CODE
6573           , STM.PURPOSE_CODE
6574           , STM.ACTIVE_YN
6575           , SEL.STREAM_ELEMENT_DATE
6576           , SEL.AMOUNT
6577           , SEL.SE_LINE_NUMBER
6578           , SEL.COMMENTS
6579        FROM OKL_STREAMS STM
6580           , OKL_STRM_ELEMENTS SEL
6581           , OKL_STRM_TYPE_B STY
6582       WHERE SEL.STM_ID = STM.ID
6583         AND STM.KHR_ID = cp_chr_id
6584         AND STM.KLE_ID IS NULL
6585         AND (nvl(STM.purpose_code,'ORIG') = (select nvl(si.PURPOSE_CODE,'ORIG') from okl_stream_interfaces si
6586                                              where transaction_number = cp_trx_number))
6587         AND STM.SAY_CODE = 'CURR'
6588         AND STM.SGN_CODE <> 'INTC'
6589         AND STM.STY_ID = STY.ID
6590         AND STY.stream_type_purpose NOT IN
6591                 ('INVESTOR_CNTRCT_OBLIGATION_PAY', 'INVESTOR_DISB_ADJUSTMENT', 'INVESTOR_EVERGREEN_RENT_PAY', 'INVESTOR_INTEREST_INCOME',
6592                  'INVESTOR_INTEREST_PAYABLE', 'INVESTOR_LATE_FEE_PAYABLE', 'INVESTOR_LATE_INTEREST_PAY', 'INVESTOR_PAYABLE',
6593                  'INVESTOR_PRETAX_INCOME', 'INVESTOR_PRINCIPAL_PAYABLE', 'INVESTOR_RECEIVABLE', 'INVESTOR_RENTAL_ACCRUAL',
6594                  'INVESTOR_RENT_BUYBACK', 'INVESTOR_RENT_DISB_BASIS', 'INVESTOR_RENT_PAYABLE', 'INVESTOR_RESIDUAL_BUYBACK',
6595                  'INVESTOR_RESIDUAL_DISB_BASIS', 'INVESTOR_RESIDUAL_PAY', 'INVESTOR_VARIABLE_INTEREST', 'PV_RENT_SECURITIZED',
6596                  'PV_RV_SECURITIZED', 'ADVANCE_RENT', 'PASS_THROUGH_EVERGREEN_FEE', 'PASS_THROUGH_EVERGREEN_RENT', 'PASS_THROUGH_EVERGREEN_SERVICE',
6597                  'PASS_THROUGH_FEE', 'PASS_THROUGH_SERVICE', 'PASS_THRU_EXP_ACCRUAL', 'PASS_THRU_REV_ACCRUAL', 'PASS_THRU_SVC_EXP_ACCRUAL',
6598                  'PASS_THRU_SVC_REV_ACCRUAL', 'PV_RV', 'PV_RV_GUARANTEED', 'PV_RV_UNGUARANTEED', 'RESIDUAL_GUARANTEED', 'RESIDUAL_VALUE',
6599                  'SECURITY_DEPOSIT', 'SERVICE_EXPENSE', 'SERVICE_FEE_AMORT_SCHEDULE', 'SERVICE_FEE_AUDIT_LETTER', 'SERVICE_FEE_DOCUMENT_REQ',
6600                  'SERVICE_FEE_EXCHG_REQUEST', 'SERVICE_FEE_GENERAL', 'SERVICE_FEE_INTEREST_CONV', 'SERVICE_FEE_INVOICE_DEMAND',
6601                  'SERVICE_FEE_INVOICE_REPRINT', 'SERVICE_FEE_PMT_CHANGE', 'SERVICE_FEE_REST_REQUEST', 'SERVICE_FEE_TERM_REQUEST',
6602                  'SERVICE_FEE_TRANS_REQUEST', 'SERVICE_FEE_VAR_RATE_STMNT', 'SERVICE_FEE_VAT_SCHEDULE', 'SERVICE_INCOME', 'SERVICE_PAYMENT',
6603                  'SERVICE_RENEWAL')
6604        ORDER BY STM.ID;  -- to get the stream elements of a stream together
6605 
6606      l_mass_rbk_khr   VARCHAR2(1) DEFAULT '?';
6607      l_terminated_date DATE;
6608      --end vdamerla
6609 
6610      --smadhava - Bug# 6149951 - Added - Start
6611      -- Get Line ID in rebook copy that was copied from LINE the original contract
6612      -- cp_rbk_chr_id is the rebook copy contract
6613      -- cp_ole_id is original contract line ID
6614      CURSOR c_get_orig_line_id (cp_rbk_chr_id IN okc_k_headers_b.id%type
6615                               , cp_ole_id IN OKC_K_LINES_B.ID%TYPE) is
6616        SELECT cle.id new_cle_id
6617         FROM okc_k_lines_b cle
6618             ,okc_k_lines_b ole
6619         WHERE cle.dnz_chr_id=cp_rbk_chr_id
6620           and ole.id = cp_ole_id
6621           and ole.lse_id = cle.lse_id
6622           and ole.id=cle.orig_system_id1;
6623      --smadhava - Bug# 6149951 - Added - End
6624      --Added by vdamerla for bug 6149951
6625      CURSOR c_chk_accrual_sty_on_pdt(cp_pdt_id OKL_PRODUCTS.ID%TYPE,
6626                                      cp_sty_id OKL_STRM_TYPE_B.ID%TYPE) IS
6627      SELECT 'Y'
6628        FROM OKL_STRM_TYPE_B sty,
6629             OKL_PROD_STRM_TYPES psty
6630       WHERE sty.id = psty.sty_id
6631         AND psty.pdt_id = cp_pdt_id
6632         AND psty.accrual_yn = 'Y'
6633 --srsreeni Might need this
6634   AND psty.sty_id=cp_sty_id
6635 --
6636         AND sty.stream_type_purpose NOT IN ('SUBSIDY_INCOME');
6637 
6638      --Cursor to get the purpose code to identify whether it is a regular or reporting product call
6639      CURSOR c_get_purpose_code IS
6640      select nvl(purpose_code,'ORIGIN')
6641        from okl_stream_interfaces
6642       where transaction_number = p_trx_number;
6643 
6644      --To get the regular product id
6645      CURSOR c_get_regular_product_id IS
6646      SELECT pdt_id
6647        FROM okl_k_headers
6648       WHERE id = p_chr_id;
6649 
6650      --To get the reporting product id
6651      CURSOR c_get_report_product_id IS
6652      SELECT pdt.reporting_pdt_id
6653        FROM okl_k_headers khr,
6654             okl_products pdt
6655       WHERE khr.id = p_chr_id
6656         AND khr.pdt_id = pdt.id;
6657 
6658      --To check whether the accrual flag is checked or not
6659      CURSOR check_accrual_previous_csr IS
6660      SELECT NVL(CHK_ACCRUAL_PREVIOUS_MNTH_YN,'N')
6661        FROM OKL_SYSTEM_PARAMS_ALL;
6662 
6663      CURSOR chk_curr_terminated_line(p_kle_id IN OKC_K_LINES_B.ID%TYPE) IS
6664      SELECT 'Y'
6665        FROM okc_k_headers_b CHR,
6666             okl_trx_contracts ktrx,
6667             okl_trx_contracts trx,
6668             okl_txl_quote_lines_b txl
6669       WHERE CHR.ID         = p_chr_id
6670         AND ktrx.KHR_ID    =  chr.id
6671         AND ktrx.tsu_code  = 'ENTERED'
6672         AND ktrx.rbr_code  IS NOT NULL
6673         AND ktrx.tcn_type  = 'TRBK'
6674 --rkuttiya added for 12.1.1 Multi GAAP
6675         AND ktrx.representation_type = 'PRIMARY'
6676 --
6677         AND ktrx.source_trx_type  = 'TCN'
6678         AND trx.tcn_type   = 'ALT'
6679         AND trx.id         = ktrx.source_trx_id
6680         AND TXL.QTE_ID = TRX.QTE_ID
6681         AND TXL.qlt_code = 'AMCFIA'
6682         AND TXL.kle_id = p_kle_id
6683         AND EXISTS (SELECT '1'
6684                       FROM  okl_rbk_selected_contract rbk_khr
6685                      WHERE  rbk_khr.KHR_ID = chr.id
6686                        AND rbk_khr.STATUS <> 'PROCESSED')
6687                        AND TXL.QTE_ID = TRX.QTE_ID;
6688 
6689      l_accrual_previous_mnth_yn VARCHAR2(3);
6690      l_purpose_code okl_stream_interfaces.purpose_code%TYPE;
6691      l_product_id   okl_products.id%TYPE;
6692      l_temp_term_date DATE;
6693      l_chk_accrual_stream VARCHAR2(1);
6694      l_curr_term_flag VARCHAR2(1);
6695      --end vdamerla
6696      -- vdamerla End Forward Ported Bug 6082209
6697 
6698 
6699 
6700   BEGIN
6701 
6702     x_return_status := OKL_API.G_RET_STS_SUCCESS;
6703 
6704     -- Call start_activity to create savepoint, check compatibility
6705     -- and initialize message list
6706     x_return_status := OKL_API.START_ACTIVITY (
6707                                l_api_name
6708                                ,p_init_msg_list
6709                                ,'_PVT'
6710                                ,x_return_status);
6711     -- Check if activity started successfully
6712     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
6713        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
6714     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
6715        RAISE OKL_API.G_EXCEPTION_ERROR;
6716     END IF;
6717 
6718     -- Initialize variables/records
6719     l_strm_index  := 0;
6720     l_sel_index   := 0;
6721     l_prev_stm_id := NULL;
6722 
6723     -- Currently as part of Bug#5668947, logic written for ESG flow
6724     -- If fix is made for ISG, this check can be removed and the logic can be
6725     -- opened to ISG also. The only place where p_source_call will then be useful
6726     -- is in case of determining the transaction_number
6727     IF p_source_call = 'ESG' THEN
6728       --Added by vdamerla for bug 6082209
6729       --check for mass rebook contract
6730       --If termination mass rebook transaction exists, then copy the old streams as
6731       --new streams instead of re-generating them
6732       l_mass_rbk_khr := '?';
6733       OPEN l_chk_mass_rbk_csr;
6734       FETCH l_chk_mass_rbk_csr INTO l_mass_rbk_khr;
6735       CLOSE l_chk_mass_rbk_csr;
6736 
6737       IF l_mass_rbk_khr = '!' THEN
6738 
6739         --Added by vdamerla for bug 6149951
6740         --Check whether the stream type is accrual or not
6741         OPEN c_get_purpose_code;
6742         FETCH c_get_purpose_code INTO l_purpose_code;
6743         CLOSE c_get_purpose_code;
6744 
6745         IF(l_purpose_code = 'ORIGIN') THEN
6746            OPEN c_get_regular_product_id;
6747            FETCH c_get_regular_product_id INTO l_product_id;
6748            CLOSE c_get_regular_product_id;
6749         ELSE
6750            OPEN c_get_report_product_id;
6751            FETCH c_get_report_product_id INTO l_product_id;
6752            CLOSE c_get_report_product_id;
6753         END IF;
6754 
6755         --Check whether the CHECK_ACCRUALS_TILL_PREVIOUS_MONTH flag is checked or not
6756          OPEN check_accrual_previous_csr;
6757          FETCH check_accrual_previous_csr INTO l_accrual_previous_mnth_yn;
6758          CLOSE check_accrual_previous_csr;
6759          --end vdamerla
6760 
6761         FOR curr_rec IN l_get_curr_streams_lines
6762         LOOP
6763             --Modified by vdamerla for bug 6344223
6764             OPEN l_get_line_term_date (p_line_id => curr_rec.kle_id);
6765             FETCH l_get_line_term_date INTO l_terminated_date;
6766             CLOSE l_get_line_term_date;
6767 
6768             --Added by vdamerla for bug 6149951
6769             l_curr_term_flag := NULL;
6770             OPEN chk_curr_terminated_line (p_kle_id => curr_rec.kle_id);
6771             FETCH chk_curr_terminated_line INTO l_curr_term_flag;
6772             CLOSE chk_curr_terminated_line;
6773             --end vdamerla
6774 
6775             FOR streams_rec IN c_streams (p_chr_id
6776                                          ,curr_rec.kle_id
6777                                          ,TRUNC(LAST_DAY(l_terminated_date)) --Added by vdamerla for bug 6149951
6778                                          ,p_trx_number)
6779             LOOP
6780               -- Set the Stream record if this is a new Stream
6781               IF l_prev_stm_id IS NULL OR (l_prev_stm_id <> streams_rec.STREAM_ID) THEN
6782                 l_prev_stm_id := streams_rec.STREAM_ID;
6783                 l_strm_index := l_strm_index + 1;
6784 
6785                 l_stmv_tbl(l_strm_index).khr_id       := p_chr_id;
6786                 l_stmv_tbl(l_strm_index).kle_id       := curr_rec.kle_id;
6787                 l_stmv_tbl(l_strm_index).sty_id       := streams_rec.STY_ID;
6788                 l_stmv_tbl(l_strm_index).sgn_code     := streams_rec.sgn_code;
6789                 l_stmv_tbl(l_strm_index).purpose_code := streams_rec.purpose_code;
6790                 l_stmv_tbl(l_strm_index).say_code     := G_STREAM_ACTIVITY_WORK;
6791                 l_stmv_tbl(l_strm_index).active_yn    := streams_rec.active_yn;
6792                 l_stmv_tbl(l_strm_index).date_working := SYSDATE;
6793 
6794                 --Added by bkatraga for bug 5704245
6795                 l_stmv_tbl(l_strm_index).transaction_number := p_trx_number;
6796                 --end bkatraga
6797                 --Added by vdamerla for bug 6149951
6798                 l_temp_term_date := NULL;
6799                 l_chk_accrual_stream := NULL;
6800                 IF(l_terminated_date IS NOT NULL AND l_curr_term_flag = 'Y') THEN
6801                   OPEN c_chk_accrual_sty_on_pdt(cp_pdt_id => l_product_id,
6802                                                 cp_sty_id => streams_rec.STY_ID);
6803                   FETCH c_chk_accrual_sty_on_pdt INTO l_chk_accrual_stream;
6804                   CLOSE c_chk_accrual_sty_on_pdt;
6805 
6806                   --To check whether the stream is accrual or not
6807                   IF(l_chk_accrual_stream = 'Y') THEN
6808                      IF nvl(l_accrual_previous_mnth_yn,'N') = 'N' THEN
6809                         l_temp_term_date := TRUNC(LAST_DAY(l_terminated_date));
6810                       ELSE
6811                         l_temp_term_date := LAST_DAY(TRUNC(l_terminated_date, 'MONTH')-1);
6812                       END IF;
6813                   ELSE
6814                      l_temp_term_date := TRUNC(l_terminated_date);
6815                   END IF;
6816                 END IF;
6817                 --end bkatraga
6818 
6819               END IF; -- end of check for new stream record
6820 
6821               ----------------------------------------------------
6822               -- Get the Stream Elements
6823               ----------------------------------------------------
6824               --Added if condition by bkatraga for bug 6149951
6825             IF(l_temp_term_date IS NULL
6826                  OR streams_rec.stream_element_date <= l_temp_term_date) THEN
6827               l_sel_index := l_sel_index + 1;
6828               l_selv_tbl(l_sel_index).parent_index := l_strm_index;
6829               l_selv_tbl(l_sel_index).stream_element_date := streams_rec.stream_element_date;
6830               l_selv_tbl(l_sel_index).amount := streams_rec.amount;
6831               l_selv_tbl(l_sel_index).se_line_number := streams_rec.se_line_number;
6832         l_selv_tbl(l_sel_index).comments := streams_rec.comments;
6833       END IF; --Added by vdamerla for bug 6149951
6834 
6835             END LOOP; -- END of FOR for Streams
6836 
6837         END LOOP;
6838 
6839      ELSE
6840      --end bkatraga
6841 
6842        -- srsreeni - Bug# 6149951 - Added - Start
6843        -- Determine if this ESG call is from a rebook copy, if so rebook copies
6844        -- donot have streams to copy from. Hence look at the original contract
6845        retrive_orig_hdr_id(p_chr_id, l_orig_chr_id);
6846        -- srsreeni - Bug# 6149951 - Added - End
6847 
6848       -- vdamerla End Forward Ported Bug6082209
6849 
6850 
6851       -- STEP 1(a)
6852       ----------------------------------------------------
6853       -- Get the FINANCED/ROLLOVER FEE lines attached to
6854       -- TERMINATED Assets
6855       ----------------------------------------------------
6856 
6857       -- vdamerla Forward Ported Bug6082209
6858       FOR lnk_fin_rol_trm_fee_rec IN c_lnk_fin_rol_trm_fee (l_orig_chr_id)
6859       --FOR lnk_fin_rol_trm_fee_rec IN c_lnk_fin_rol_trm_fee (p_chr_id)
6860       -- vdamerla End Forward Ported Bug6082209
6861       LOOP
6862 
6863         -- STEP 1(b)
6864         ----------------------------------------------------
6865         -- Get the CURRENT Streams of fees attached to
6866         -- TERMINATED Asset Lines of the contract.
6867         -- And Create a WORKING COPY.
6868         ----------------------------------------------------
6869         -- vdamerla Forward Ported Bug6082209
6870         FOR streams_rec IN c_streams (l_orig_chr_id
6871         --FOR streams_rec IN c_streams (p_chr_id
6872         -- vdamerla End Forward Ported Bug6082209
6873                                  , lnk_fin_rol_trm_fee_rec.LNK_ID
6874                                  -- vdamerla Forward Port Bug6149951
6875                                  , NULL -- smadhava - Bug# 6149951 -- Blindly copy stream elements
6876                                                                    -- of terminated lines during flows other than partial termination mass rebook of the asset
6877                                -- vdamerla End Forward Port Bug6149951
6878 
6879                                --, TRUNC(lnk_fin_rol_trm_fee_rec.DATE_TERMINATED)
6880                                  , p_trx_number)  --Added by bkatraga for bug 5704245
6881         LOOP
6882           -- Set the Stream record if this is a new Stream
6883           IF l_prev_stm_id IS NULL OR (l_prev_stm_id <> streams_rec.STREAM_ID) THEN
6884             l_prev_stm_id := streams_rec.STREAM_ID;
6885             l_strm_index := l_strm_index + 1;
6886 
6887             -- vdamerla Forward Port Bug6149951
6888 
6889             -- srsreeni - Bug# 6149951 - Added - Start
6890             IF l_orig_chr_id <> p_chr_id THEN
6891               OPEN c_get_orig_line_id(cp_rbk_chr_id => p_chr_id,
6892                                       cp_ole_id     => lnk_fin_rol_trm_fee_rec.LNK_ID);
6893                 FETCH c_get_orig_line_id INTO l_new_stm_cle_id;
6894               CLOSE c_get_orig_line_id;
6895              ELSE
6896                l_new_stm_cle_id := lnk_fin_rol_trm_fee_rec.LNK_ID;
6897              END IF;
6898             -- srsreeni - Bug# 6149951 - Added - End
6899             -- vdamerla End Forward Port Bug6149951
6900 
6901 
6902 
6903             l_stmv_tbl(l_strm_index).khr_id       := p_chr_id;
6904             -- vdamerla  Forward Ported Bug6149951
6905             l_stmv_tbl(l_strm_index).kle_id       := l_new_stm_cle_id;
6906             --l_stmv_tbl(l_strm_index).kle_id       := lnk_fin_rol_trm_fee_rec.LNK_ID;
6907             -- vdamerla  End Forward Ported Bug6149951
6908             l_stmv_tbl(l_strm_index).sty_id       := streams_rec.STY_ID;
6909             l_stmv_tbl(l_strm_index).sgn_code     := streams_rec.sgn_code;
6910             l_stmv_tbl(l_strm_index).purpose_code := streams_rec.purpose_code;
6911             l_stmv_tbl(l_strm_index).say_code     := G_STREAM_ACTIVITY_WORK;
6912             l_stmv_tbl(l_strm_index).active_yn    :=  'N';
6913             l_stmv_tbl(l_strm_index).date_working := SYSDATE;
6914 
6915             --Added by bkatraga for bug 5704245
6916             l_stmv_tbl(l_strm_index).transaction_number := p_trx_number;
6917             --end bkatraga
6918 
6919           END IF; -- end of check for new stream record
6920 
6921           -- STEP 1(c)
6922           ----------------------------------------------------
6923           -- Get the Stream Elements of FINANCED/ROLLOVER fee attached
6924           -- to TERMINATED Asset Lines of the contract.
6925           -- Only Elements ON or BEFORE the TERMINATION DATE of Fee are copied
6926           ----------------------------------------------------
6927           l_sel_index := l_sel_index + 1;
6928           l_selv_tbl(l_sel_index).parent_index := l_strm_index;
6929           l_selv_tbl(l_sel_index).stream_element_date := streams_rec.stream_element_date;
6930           l_selv_tbl(l_sel_index).amount := streams_rec.amount;
6931           l_selv_tbl(l_sel_index).se_line_number := streams_rec.se_line_number;
6932           --Added by vdamerla for bug 6082209
6933              l_selv_tbl(l_sel_index).comments := streams_rec.comments;
6934           --end bkatraga
6935           -- vdamerla End Forward Ported Bug6082209
6936 
6937 
6938         END LOOP; -- END of FOR for Streams
6939       END LOOP; -- END of FOR For FINANCED/ROLLOVER
6940 
6941       -- Reinitialize variables
6942       l_prev_stm_id := NULL;
6943 
6944       -- STEP 2(a)
6945       ----------------------------------------------------
6946       -- Get the TERMINATED Asset lines of contracts
6947       ----------------------------------------------------
6948       -- vdamerla Forward Ported Bug6149951
6949       FOR tmt_asset_loan_rec IN c_tmt_asset_loan (l_orig_chr_id) -- smadhava - Bug# 6149951
6950       --FOR tmt_asset_loan_rec IN c_tmt_asset_loan (p_chr_id)
6951       -- vdamerla End Forward Ported Bug6149951
6952       LOOP
6953 
6954         -- STEP 2(b)
6955         ----------------------------------------------------
6956         -- Get the CURRENT Streams of Asset lines.
6957         -- And Create a WORKING COPY.
6958         ----------------------------------------------------
6959         -- vdamerla Forward Ported Bug6149951
6960         FOR streams_rec IN c_streams (l_orig_chr_id -- smadhava - Bug# 6149951
6961         -- FOR streams_rec IN c_streams (p_chr_id
6962                                  , tmt_asset_loan_rec.LINE_ID
6963                                  , NULL -- smadhava - Bug# 6149951 -- Blindly copy stream elements
6964                                         -- of terminated lines during flows other than partial termination mass rebook of the asset
6965                              --, TRUNC(tmt_asset_loan_rec.DATE_TERMINATED)
6966         -- vdamerla End Forward Ported Bug6149951
6967                                  , p_trx_number)  --Added by bkatraga for bug 5704245
6968         LOOP
6969           -- Set the Stream record if this is a new Stream
6970           IF l_prev_stm_id IS NULL OR (l_prev_stm_id <> streams_rec.STREAM_ID) THEN
6971             l_prev_stm_id := streams_rec.STREAM_ID;
6972             l_strm_index := l_strm_index + 1;
6973             -- vdamerla - Bug# 6149951 - Added - Start
6974             IF l_orig_chr_id <> p_chr_id THEN
6975               OPEN c_get_orig_line_id(cp_rbk_chr_id => p_chr_id,
6976                                       cp_ole_id     => tmt_asset_loan_rec.LINE_ID);
6977                 FETCH c_get_orig_line_id INTO l_new_stm_cle_id;
6978               CLOSE c_get_orig_line_id;
6979              ELSE
6980                l_new_stm_cle_id := tmt_asset_loan_rec.LINE_ID;
6981              END IF;
6982             -- vdamerla End Forward Ported Bug6149951
6983 
6984 
6985 
6986 
6987             l_stmv_tbl(l_strm_index).khr_id       := p_chr_id;
6988             -- vdamerla Forward Ported Bug6149951
6989             l_stmv_tbl(l_strm_index).kle_id       := l_new_stm_cle_id; -- smadhava Bug# 6149951
6990             --l_stmv_tbl(l_strm_index).kle_id       := tmt_asset_loan_rec.LINE_ID;
6991             -- vdamerla End Forward Ported Bug6149951
6992             l_stmv_tbl(l_strm_index).sty_id       := streams_rec.STY_ID;
6993             l_stmv_tbl(l_strm_index).sgn_code     := streams_rec.sgn_code;
6994             l_stmv_tbl(l_strm_index).purpose_code := streams_rec.purpose_code;
6995             l_stmv_tbl(l_strm_index).say_code     := G_STREAM_ACTIVITY_WORK;
6996             l_stmv_tbl(l_strm_index).active_yn    :=  'N';
6997             l_stmv_tbl(l_strm_index).date_working := SYSDATE;
6998 
6999             --Added by bkatraga for bug 5704245
7000             l_stmv_tbl(l_strm_index).transaction_number := p_trx_number;
7001             --end bkatraga
7002 
7003           END IF; -- end of check for new stream record
7004 
7005           -- STEP 2(c)
7006           ----------------------------------------------------
7007           -- Get the Stream Elements of of LOAN Asset lines.
7008           -- Only Elements ON or BEFORE the TERMINATION DATE of lines are copied
7009           ----------------------------------------------------
7010           l_sel_index := l_sel_index + 1;
7011           l_selv_tbl(l_sel_index).parent_index := l_strm_index;
7012           l_selv_tbl(l_sel_index).stream_element_date := streams_rec.stream_element_date;
7013           l_selv_tbl(l_sel_index).amount := streams_rec.amount;
7014           l_selv_tbl(l_sel_index).se_line_number := streams_rec.se_line_number;
7015         --Added by vdamerla for bug 6082209
7016           l_selv_tbl(l_sel_index).comments := streams_rec.comments;
7017         --end bkatraga
7018         -- vdamerla End Forward Ported Bug 6082209
7019 
7020 
7021 
7022         END LOOP; -- END of FOR for Streams
7023       END LOOP; -- END of For loop over Terminated loan assets
7024       END IF; --Added by bkatraga for bug 6082209
7025 
7026       -- STEP 3
7027       IF l_stmv_tbl.COUNT > 0 THEN
7028         -- Call the API to bulk insert data into streams and stream elements
7029          OKL_STREAMS_PUB.CREATE_STREAMS_PERF(p_api_version
7030                                          , p_init_msg_list
7031                                          , x_return_status
7032                                          , x_msg_count
7033                                          , x_msg_data
7034                                          , l_stmv_tbl
7035                                          , l_selv_tbl
7036                                          , lx_stmv_tbl
7037                                          , lx_selv_tbl);
7038          IF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7039            RAISE OKL_API.G_EXCEPTION_ERROR;
7040          ELSIF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
7041            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7042          END IF;
7043       END IF; -- l_stmv_tbl count check
7044 
7045     END IF; -- END IF p_source_call check
7046 
7047     -- End of API
7048     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data  => x_msg_data);
7049   EXCEPTION
7050     WHEN OKL_API.G_EXCEPTION_ERROR THEN
7051       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7052               p_api_name  => l_api_name,
7053               p_pkg_name  => g_pkg_name,
7054               p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
7055               x_msg_count => x_msg_count,
7056               x_msg_data  => x_msg_data,
7057               p_api_type  => g_api_type);
7058     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
7059             x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7060                     p_api_name  => l_api_name,
7061                     p_pkg_name  => g_pkg_name,
7062                     p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
7063                     x_msg_count => x_msg_count,
7064                     x_msg_data  => x_msg_data,
7065                     p_api_type  => g_api_type);
7066      WHEN OTHERS THEN
7067              x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7068                      p_api_name  => l_api_name,
7069                      p_pkg_name  => g_pkg_name,
7070                      p_exc_name  => 'OTHERS',
7071                      x_msg_count => x_msg_count,
7072                      x_msg_data  => x_msg_data,
7073                      p_api_type  => g_api_type);
7074  	   END RECREATE_TMT_LN_STRMS;
7075  	   -- srsreeni - Bug#5699923 - Added - End
7076 
7077 -- Start modification 11i10 bakuchib
7078   Procedure process_streams(
7079             p_api_version     IN  NUMBER,
7080             p_init_msg_list   IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
7081             x_return_status   OUT NOCOPY VARCHAR2,
7082             x_msg_count       OUT NOCOPY NUMBER,
7083             x_msg_data        OUT NOCOPY VARCHAR2,
7084             p_chr_id          IN  VARCHAR2,
7085             p_process_yn      IN  VARCHAR2,
7086             p_chr_yields      IN  yields_rec_type,
7087             p_source_call     IN   VARCHAR2) AS
7088 
7089     l_api_name		CONSTANT VARCHAR2(30) := 'PROCESS_STREAMS';
7090     l_api_version	CONSTANT NUMBER	      := 1;
7091     l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
7092 
7093     pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
7094     pl_khrv_rec okl_contract_pvt.khrv_rec_type;
7095     xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
7096     xl_khrv_rec okl_contract_pub.khrv_rec_type;
7097 
7098     l_chr_yields   yields_rec_type;
7099 
7100     l_trxH_in_rec        Okl_Trx_Contracts_Pvt.tcnv_rec_type;
7101     l_trxH_out_rec       Okl_Trx_Contracts_Pvt.tcnv_rec_type;
7102     -- Code for bulk update -02/18/2004 - HKPATEL
7103     l_id_tbl okl_streams_util.NumberTabTyp;
7104 	-- Code for bulk update ends here -02/18/2004 - HKPATEL
7105 
7106 
7107     Cursor ylds_csr( chrId NUMBER )  IS
7108     Select 'N' exist
7109     from   okl_k_headers_full_v
7110     where id = chrId
7111         and pre_tax_yield is NULL
7112         and after_tax_yield is NULL
7113         and pre_tax_irr is NULL
7114         and after_tax_irr is NULL
7115         and implicit_interest_rate is NULL;
7116     --  get rates and line id for a financed fee
7117     CURSOR get_fin_lne_csr(p_chr_id NUMBER)
7118     IS
7119     SELECT DISTINCT cle.id line_id,
7120                     lev.rate
7121     FROM okl_sif_ret_levels lev,
7122          okl_sif_rets ret,
7123          okl_stream_interfaces sif,
7124          okl_sif_lines line,
7125          okc_k_lines_b cle,
7126          okl_k_lines kle,
7127          okc_line_styles_b lse,
7128          okl_sif_fees fee
7129     WHERE lev.sir_id = ret.id
7130     AND lev.level_type = 'Payment'
7131     AND ret.transaction_number = sif.transaction_number
7132     AND sif.id = line.sif_id
7133     AND line.sif_id = fee.sif_id
7134     AND line.id = fee.sil_id
7135     AND line.kle_id = cle.id
7136     AND cle.lse_id = lse.id
7137     AND lse.lty_code = 'FEE'
7138     AND cle.id = kle.id
7139     AND kle.fee_type = 'FINANCED'
7140     AND fee.fee_index_number = lev.index_number
7141     AND line.sil_type = 'SGN'
7142     AND sif.transaction_number IN (SELECT MAX(transaction_number)
7143                                    FROM okl_stream_interfaces
7144                                    WHERE khr_id = p_chr_id
7145                                    AND purpose_code IS NULL);
7146     --  get payment levels for line
7147     CURSOR get_level_csr(p_chr_id NUMBER,
7148                          p_cle_id NUMBER)
7149     IS
7150     SELECT sll.id sll_id,
7151            slh.id slh_id
7152     FROM okc_rule_groups_b rgp,
7153          okc_rules_b slh,
7154          okc_rules_b sll
7155     WHERE rgp.dnz_chr_id = p_chr_id
7156     AND rgp.rgd_code = 'LALEVL'
7157     AND rgp.cle_id = p_cle_id
7158     AND rgp.id = slh.rgp_id
7159     AND sll.rgp_id = slh.rgp_id
7160     AND sll.dnz_chr_id = slh.dnz_chr_id
7161     AND slh.dnz_chr_id = rgp.dnz_chr_id
7162     AND sll.object2_id1 = slh.id
7163     AND sll.object2_id2 = '#'
7164     AND sll.jtot_object2_code = 'OKL_STRMHDR';
7165     --  validate the contract is reporting product or not
7166     CURSOR validate_pdt_csr(p_chr_id NUMBER)
7167     IS
7168     SELECT 'Y'
7169     FROM DUAL
7170     WHERE EXISTS (SELECT 1
7171                   FROM okl_k_headers khr,
7172                        okl_products_v pdt
7173                   WHERE khr.id = p_chr_id
7174                   AND khr.pdt_id = pdt.id
7175                   AND pdt.reporting_pdt_id IS NOT NULL);
7176     --  Check for reporting streams for non MGAPP prodcut
7177     -- Modified by kthiruva on 17-Nov-2005.
7178     -- Streams having an SGN_CODE = 'INTC' should not be historized
7179     -- Bug 4737555 - Start of Changes
7180     CURSOR non_mg_rep_csr(p_chr_id NUMBER)
7181     IS
7182     SELECT str.id strm_id,
7183            str.kle_id,
7184            str.sty_id sty_id,
7185            str.sgn_code sgn_code,
7186            str.sgn_code alloc_yn,
7187            str.comments alloc_basis,
7188            str.transaction_number trn_num,
7189            str.purpose_code,
7190            str.say_code,
7191            str.active_yn
7192     FROM okl_streams str
7193     WHERE str.khr_id = p_chr_id
7194     AND str.purpose_code = 'REPORT'
7195     AND str.say_code = 'CURR'
7196     AND str.sgn_code NOT IN ('INTC','LATE_CALC') -- bug 6472228
7197     AND (NVL( str.kle_id, -1) = -1 OR
7198          str.kle_id IN (SELECT kle.id
7199                         FROM  okl_k_lines_full_v kle,
7200                               okc_line_styles_b lse,
7201                               okc_statuses_b sts
7202                         WHERE KLE.LSE_ID = LSE.ID
7203                         AND kle.dnz_chr_id = p_chr_id
7204                         AND sts.code = kle.sts_code
7205                         AND lse.lty_code NOT IN ('INSURANCE')));
7206    -- Bug 4737555 - End of Changes
7207 
7208     lv_pdt_no_rep      VARCHAR2(3) := 'N';
7209     j                  NUMBER := 0;
7210     m_stmv_tbl  okl_streams_pub.stmv_tbl_type;
7211     mx_stmv_tbl okl_streams_pub.stmv_tbl_type;
7212     ylds_rec ylds_csr%ROWTYPE;
7213 
7214     l_strm_rec strm_csr%ROWTYPE;
7215     l_stmv_tbl okl_streams_pub.stmv_tbl_type;
7216     x_stmv_tbl okl_streams_pub.stmv_tbl_type;
7217 
7218     i NUMBER;
7219     l_tcnCode VARCHAR2(256);
7220     l_transaction_type VARCHAR2(256) := 'Miscellaneous';--'Generate Yields';
7221 
7222     l_fnd_rec fnd_lookups_csr%ROWTYPE;
7223     l_trx_rec trx_csr%ROWTYPE;
7224     l_hdr_rec l_hdr_csr%ROWTYPE;
7225 
7226     l_strm_name_rec  strm_name_csr%ROWTYPE;
7227     l_strms_orig_rec strms_csr%ROWTYPE;
7228     l_strms_rep_rec strms_csr%ROWTYPE;
7229     l_strm_name VARCHAR2(256);
7230 
7231     l_chr_id NUMBER := TO_NUMBER(p_chr_id);
7232 
7233     l_process_yn VARCHAR2(1) := 'N';
7234     l_orig_yn VARCHAR2(1) := 'N';
7235     l_rep_yn  VARCHAR2(1) := 'N';
7236     l_mgaap_yn  VARCHAR2(1) := 'N';
7237 
7238     c_num VARCHAR2(256);
7239 -- Start of modification for bug#3320656 -- bakuchib
7240 -- Start of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7241     l_rulv_rec               OKL_RULE_PUB.rulv_rec_type;
7242     lx_rulv_rec              OKL_RULE_PUB.rulv_rec_type;
7243     r_rulv_rec               OKL_RULE_PUB.rulv_rec_type;
7244     rx_rulv_rec              OKL_RULE_PUB.rulv_rec_type;
7245 -- End of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7246 -- End of modification for bug#3320656 -- bakuchib
7247     --Added by kthiruva on 11-Aug-2005
7248     --Bug 4541302 - Start of Changes
7249     CURSOR get_stream_req_status_csr(p_khr_id NUMBER)
7250     IS
7251     SELECT * FROM (
7252                     SELECT SIF.SIS_CODE REQUEST_STATUS
7253                     FROM OKL_STREAM_INTERFACES  SIF
7254                     WHERE SIF.KHR_ID = p_khr_id
7255                     AND SIF.PURPOSE_CODE = 'REPORT'
7256                     ORDER BY SIF.TRANSACTION_NUMBER DESC)
7257     WHERE ROWNUM < 2;
7258 
7259     -- To get the reporting request transaction number
7260     CURSOR get_rep_trans_num(p_khr_id NUMBER)
7261     IS
7262     SELECT * FROM (
7263                     SELECT SIF.TRANSACTION_NUMBER TRANSACTION_NUMBER
7264                     FROM OKL_STREAM_INTERFACES  SIF
7265                     WHERE SIF.KHR_ID = p_khr_id
7266                     AND SIF.PURPOSE_CODE = 'REPORT'
7267                     ORDER BY SIF.TRANSACTION_NUMBER DESC)
7268     WHERE ROWNUM < 2;
7269 
7270     l_report_req_status  VARCHAR2(100);
7271     l_message            VARCHAR2(30);
7272     l_status             NUMBER := 0;
7273     l_timeout            NUMBER := 120;
7274     l_alert_name         VARCHAR2(20) := 'REP_PROD_COMPLETE';
7275     l_rep_message        VARCHAR2(30) := 'PROCESSED';
7276     --Bug 4541302 - End of Changes
7277 
7278 
7279   BEGIN
7280     x_return_status := OKL_API.G_RET_STS_SUCCESS;
7281     -- Call start_activity to create savepoint, check compatibility
7282     -- and initialize message list
7283     x_return_status := OKL_API.START_ACTIVITY (
7284                                l_api_name
7285                                ,p_init_msg_list
7286                                ,'_PVT'
7287                                ,x_return_status);
7288     -- Check if activity started successfully
7289     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7290        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7291     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7292        RAISE OKL_API.G_EXCEPTION_ERROR;
7293     END IF;
7294     IF p_process_yn = OKL_API.G_TRUE Then
7295       l_process_yn := 'Y';
7296     END IF;
7297 
7298     --Added by kthiruva for Debug Logging
7299     write_to_log('Just inside process_streams   ');
7300 
7301     FOR get_fin_lne_rec IN get_fin_lne_csr(p_chr_id => p_chr_id) LOOP
7302       FOR get_level_rec IN get_level_csr(p_chr_id => p_chr_id,
7303                                          p_cle_id => get_fin_lne_rec.line_id) LOOP
7304           r_rulv_rec.id                 := get_level_rec.slh_id;
7305           r_rulv_rec.rule_information2  := 'IMPL_INTEREST_RATE';
7306 -- Start of modification for bug#3320656 -- bakuchib
7307 -- Start of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7308           OKL_RULE_PUB.update_rule(
7309 -- End of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7310 -- end of modification for bug#3320656 -- bakuchib
7311                        p_api_version   => p_api_version,
7312                        p_init_msg_list => p_init_msg_list,
7313                        x_return_status => x_return_status,
7314                        x_msg_count     => x_msg_count,
7315                        x_msg_data      => x_msg_data,
7316                        p_rulv_rec      => r_rulv_rec,
7317                        p_edit_mode     => 'N',
7318                        x_rulv_rec      => rx_rulv_rec);
7319           l_rulv_rec.id                 := get_level_rec.sll_id;
7320           l_rulv_rec.rule_information13 := get_fin_lne_rec.rate;
7321 -- Start of modification for bug#3320656 -- bakuchib
7322 -- Start of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7323           OKL_RULE_PUB.update_rule(
7324 -- End of modification for bug#3320656 revoked to OKL_RULE_PUB -- bakuchib
7325 -- end of modification for bug#3320656 -- bakuchib
7326                        p_api_version   => p_api_version,
7327                        p_init_msg_list => p_init_msg_list,
7328                        x_return_status => x_return_status,
7329                        x_msg_count     => x_msg_count,
7330                        x_msg_data      => x_msg_data,
7331                        p_rulv_rec      => l_rulv_rec,
7332                        p_edit_mode     => 'N',
7333                        x_rulv_rec      => lx_rulv_rec);
7334         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7335           EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
7336         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7337           EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
7338         END IF;
7339       END LOOP;
7340       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7341         EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
7342       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7343         EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
7344       END IF;
7345     END LOOP;
7346     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7347       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7348     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7349       RAISE OKL_API.G_EXCEPTION_ERROR;
7350     END IF;
7351     -- getting the header info
7352     OPEN l_hdr_csr( p_chr_id );
7353     FETCH l_hdr_csr INTO l_hdr_rec;
7354     CLOSE l_hdr_csr;
7355     -- Checking if the normal streams which are in working status
7356     OPEN  strms_csr(p_chr_id, 'WORK', 'ORIGIN');
7357     FETCH strms_csr INTO l_strms_orig_rec;
7358     IF strms_csr%FOUND THEN
7359       l_orig_yn := 'Y';
7360     END IF;
7361     CLOSE strms_csr;
7362     -- bug# 2763523
7363     okl_context.set_okc_org_context(l_hdr_rec.authoring_org_id,l_hdr_rec.inv_organization_id);
7364     IF l_hdr_rec.report_pdt_id <> -1 THEN
7365       -- Checking if the Reporting streams which are in working status
7366       OPEN strms_csr(p_chr_id, 'WORK', 'REPORT');
7367       FETCH strms_csr into l_strms_rep_rec;
7368       IF strms_csr%FOUND THEN
7369         l_rep_yn := 'Y';
7370       END IF;
7371       CLOSE strms_csr;
7372       l_mgaap_yn := 'Y';
7373     END IF;
7374     IF ((l_mgaap_yn='N' AND l_process_yn='N') OR
7375         (l_mgaap_yn='Y' AND l_orig_yn='N' AND l_rep_yn='N' AND l_process_yn='N')) Then
7376       RETURN;
7377     END IF;
7378     IF ((l_orig_yn='Y' ) AND (l_process_yn='Y' )) THEN
7379       l_chr_yields.pre_tax_yield           := p_chr_yields.PRE_TAX_YIELD;
7380       l_chr_yields.after_tax_yield         := p_chr_yields.AFTER_TAX_YIELD;
7381       l_chr_yields.pre_tax_irr             := p_chr_yields.PRE_TAX_IRR;
7382       l_chr_yields.after_tax_irr           := p_chr_yields.AFTER_TAX_IRR;
7383       l_chr_yields.implicit_interest_rate  := p_chr_yields.IMPLICIT_INTEREST_RATE;
7384       l_chr_yields.sub_pre_Tax_yield       := p_chr_yields.sub_pre_Tax_yield;
7385       l_chr_yields.sub_after_tax_yield     := p_chr_yields.sub_after_tax_yield;
7386       l_chr_yields.sub_pre_tax_irr         := p_chr_yields.sub_pre_tax_irr;
7387       l_chr_yields.sub_after_tax_irr       := p_chr_yields.sub_after_tax_irr;
7388       l_chr_yields.sub_impl_interest_rate  := p_chr_yields.sub_impl_interest_rate;
7389     END IF;
7390     OPEN ylds_csr(p_chr_id);
7391     FETCH ylds_csr into ylds_rec;
7392     CLOSE ylds_csr;
7393  --Modified by kthiruva on 08-Feb-2005
7394  --Ensure that the reporting producti does not update the contract yields
7395  --Bug 3955561 - Start of Changes
7396   --  IF NOT (l_orig_yn='Y' AND l_rep_yn='Y' AND ylds_rec.exist = 'Y' ) THEN
7397     IF not(l_orig_yn='N' AND l_rep_yn='Y' AND ylds_rec.exist = 'N' ) THEN
7398  --Bug 3955561 - End of Changes
7399         --Added by kthiruva for Logging Purposes
7400         write_to_log('Before the call to update_contract_yields');
7401 
7402         update_contract_yields(
7403                 p_api_version => p_api_version,
7404                 p_init_msg_list => p_init_msg_list,
7405                 x_return_status => x_return_status,
7406                 x_msg_count => x_msg_count,
7407                 x_msg_data => x_msg_data,
7408                 p_chr_id => p_chr_id,
7409                 p_chr_yields => l_chr_yields);
7410 
7411         --Added by kthiruva for Logging Purposes
7412         write_to_log('After the call to update_contract_yields, the return status is :'||x_return_status);
7413 
7414         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7415           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7416         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7417           RAISE OKL_API.G_EXCEPTION_ERROR;
7418         END IF;
7419     END IF;
7420     IF p_source_call = 'ESG' THEN
7421       --Added by kthiruva for Debugging
7422       write_to_log('The source call is ESG');
7423       IF l_mgaap_yn = 'Y' THEN
7424         IF l_process_yn='N' THEN
7425           i := 0;
7426           FOR l_strms_orig_rec in strms_csr ( p_chr_id, 'WORK', 'ORIGIN') LOOP
7427             i := i + 1;
7428             l_stmv_tbl(i).id := l_strms_orig_rec.STRM_ID;
7429             l_stmv_tbl(i).sty_id := l_strms_orig_rec.STY_ID;
7430             l_stmv_tbl(i).khr_id := p_chr_id;
7431             l_stmv_tbl(i).sgn_code := l_strms_orig_rec.SGN_CODE;
7432             l_stmv_tbl(i).transaction_number := l_strms_orig_rec.TRN_NUM;
7433           END LOOP;
7434           FOR l_strms_rep_rec in strms_csr ( p_chr_id, 'WORK', 'REPORT')  LOOP
7435             i := i + 1;
7436             l_stmv_tbl(i).id := l_strms_rep_rec.STRM_ID;
7437             l_stmv_tbl(i).sty_id := l_strms_rep_rec.STY_ID;
7438             l_stmv_tbl(i).khr_id := p_chr_id;
7439             l_stmv_tbl(i).sgn_code := l_strms_rep_rec.SGN_CODE;
7440             l_stmv_tbl(i).transaction_number := l_strms_rep_rec.TRN_NUM;
7441           END LOOP;
7442           IF i > 0 THEN
7443             Okl_Streams_pub.delete_streams(
7444                            p_api_version => p_api_version,
7445                            p_init_msg_list => p_init_msg_list,
7446                            x_return_status => x_return_status,
7447                            x_msg_count => x_msg_count,
7448                            x_msg_data => x_msg_data,
7449                            p_stmv_tbl => l_stmv_tbl);
7450 
7451             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7452               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7453             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7454               RAISE OKL_API.G_EXCEPTION_ERROR;
7455             END IF;
7456           END IF;
7457           RETURN;
7458   -- Start for bug#3388812  modification - BAKUCHIB
7459   --      ELSIF (l_orig_yn <> l_rep_yn ) THEN -- when (orig=Y and rep=N) OR (orig=N and rep=Y)
7460   --        RETURN;
7461   -- End for bug#3388812  modification - BAKUCHIB
7462         ELSIF l_rep_yn='Y' THEN
7463 	-- gboomina BUG#4508077 passing p_source_call as a parameter
7464 
7465           --Added by kthiruva for Debug Purposes
7466           write_to_log('Value of l_rep_yn is Y');
7467           write_to_log('Before the call to Adjust Streams');
7468 
7469           adjust_streams(p_api_version => p_api_version,
7470                          p_init_msg_list => p_init_msg_list,
7471                          x_return_status => x_return_status,
7472                          x_msg_count => x_msg_count,
7473                          x_msg_data => x_msg_data,
7474                          p_chr_id => p_chr_id,
7475                          p_purpose => 'REPORT',
7476 			 p_source_call => p_source_call);
7477 
7478           --Added by kthiruva for Debug Purposes
7479           write_to_log('After the call to adjust_streams, the return status is :'||x_return_status);
7480 
7481           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7482             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7483           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7484             RAISE OKL_API.G_EXCEPTION_ERROR;
7485           END IF;
7486         END IF;
7487       END If;
7488       IF l_orig_yn = 'Y' THEN
7489       -- gboomina BUG#4508077 passing p_source_call as a parameter
7490         --Added by kthiruva for Debug Purposes
7491         write_to_log('Value of l_orig_yn is Y');
7492         write_to_log('Before the call to Adjust Streams');
7493         adjust_streams(p_api_version => p_api_version,
7494                        p_init_msg_list => p_init_msg_list,
7495                        x_return_status => x_return_status,
7496                        x_msg_count => x_msg_count,
7497                        x_msg_data => x_msg_data,
7498                        p_chr_id => p_chr_id,
7499                        p_purpose => 'ORIGIN',
7500 		       p_source_call => p_source_call);
7501 
7502           --Added by kthiruva for Debug Purposes
7503           write_to_log('After the call to adjust_streams, the return status is :'||x_return_status);
7504 
7505         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7506           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7507         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7508           RAISE OKL_API.G_EXCEPTION_ERROR;
7509         END IF;
7510       END IF;
7511     ELSIF p_source_call = 'ISG' THEN
7512       --Added by kthiruva for Debugging
7513       write_to_log('The source call is ISG');
7514 
7515       IF l_mgaap_yn = 'Y' THEN
7516         IF l_process_yn='N' THEN
7517           i := 0;
7518           FOR l_strms_orig_rec in strms_csr ( p_chr_id, 'WORK', 'ORIGIN') LOOP
7519             i := i + 1;
7520             l_stmv_tbl(i).id := l_strms_orig_rec.STRM_ID;
7521             l_stmv_tbl(i).sty_id := l_strms_orig_rec.STY_ID;
7522             l_stmv_tbl(i).khr_id := p_chr_id;
7523             l_stmv_tbl(i).sgn_code := l_strms_orig_rec.SGN_CODE;
7524             l_stmv_tbl(i).transaction_number := l_strms_orig_rec.TRN_NUM;
7525           END LOOP;
7526           FOR l_strms_rep_rec in strms_csr ( p_chr_id, 'WORK', 'REPORT')  LOOP
7527             i := i + 1;
7528             l_stmv_tbl(i).id := l_strms_rep_rec.STRM_ID;
7529             l_stmv_tbl(i).sty_id := l_strms_rep_rec.STY_ID;
7530             l_stmv_tbl(i).khr_id := p_chr_id;
7531             l_stmv_tbl(i).sgn_code := l_strms_rep_rec.SGN_CODE;
7532             l_stmv_tbl(i).transaction_number := l_strms_rep_rec.TRN_NUM;
7533           END LOOP;
7534           IF i > 0 THEN
7535             Okl_Streams_pub.delete_streams(
7536                            p_api_version => p_api_version,
7537                            p_init_msg_list => p_init_msg_list,
7538                            x_return_status => x_return_status,
7539                            x_msg_count => x_msg_count,
7540                            x_msg_data => x_msg_data,
7541                            p_stmv_tbl => l_stmv_tbl);
7542 
7543             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7544               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7545             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7546               RAISE OKL_API.G_EXCEPTION_ERROR;
7547             END IF;
7548           END IF;
7549           RETURN;
7550   -- Start for bug#3388812  modification - BAKUCHIB
7551   --      ELSIF (l_orig_yn <> l_rep_yn ) THEN -- when (orig=Y and rep=N) OR (orig=N and rep=Y)
7552   --        RETURN;
7553   -- End for bug#3388812  modification - BAKUCHIB
7554   -- gboomina BUG#4508077 passing p_source_call as a parameter
7555         ELSIF l_rep_yn='Y' THEN
7556           adjust_streams(p_api_version => p_api_version,
7557                          p_init_msg_list => p_init_msg_list,
7558                          x_return_status => x_return_status,
7559                          x_msg_count => x_msg_count,
7560                          x_msg_data => x_msg_data,
7561                          p_chr_id => p_chr_id,
7562                          p_purpose => 'REPORT',
7563 			 p_source_call => p_source_call);
7564 
7565           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7566             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7567           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7568             RAISE OKL_API.G_EXCEPTION_ERROR;
7569           END IF;
7570          -- gboomina BUG#4508077 passing p_source_call as a parameter
7571           adjust_streams(p_api_version => p_api_version,
7572                          p_init_msg_list => p_init_msg_list,
7573                          x_return_status => x_return_status,
7574                          x_msg_count => x_msg_count,
7575                          x_msg_data => x_msg_data,
7576                          p_chr_id => p_chr_id,
7577                          p_purpose => 'ORIGIN',
7578 			 p_source_call => p_source_call);
7579 
7580           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7581             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7582           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7583             RAISE OKL_API.G_EXCEPTION_ERROR;
7584           END IF;
7585         END IF;
7586       ELSE
7587         write_to_log('Before the call to Adjust Streams');
7588         -- gboomina BUG#4508077 passing p_source_call as a parameter
7589         adjust_streams(p_api_version => p_api_version,
7590                        p_init_msg_list => p_init_msg_list,
7591                        x_return_status => x_return_status,
7592                        x_msg_count => x_msg_count,
7593                        x_msg_data => x_msg_data,
7594                        p_chr_id => p_chr_id,
7595                        p_purpose => 'ORIGIN',
7596            	       p_source_call => p_source_call);
7597 
7598         --Added by kthiruva for Debug Purposes
7599         write_to_log('After the call to adjust_streams, the return status is :'||x_return_status);
7600 
7601         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7602           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7603         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7604           RAISE OKL_API.G_EXCEPTION_ERROR;
7605         END IF;
7606       END If;
7607     END IF;
7608 -- Start for bug#3388812  modification - BAKUCHIB
7609     -- We are explicitly making the non MGAAP streams to History if the product
7610     -- is non MGAPP.
7611     OPEN  validate_pdt_csr(p_chr_id => p_chr_id);
7612     FETCH validate_pdt_csr INTO lv_pdt_no_rep;
7613     CLOSE validate_pdt_csr;
7614     IF lv_pdt_no_rep = 'N' THEN
7615       FOR  non_mg_rep_rec IN  non_mg_rep_csr(p_chr_id => p_chr_id) LOOP
7616         j := j + 1;
7617 		/* Commeneted for Bulk update by HKPATEL -02/28/04
7618         m_stmv_tbl(j).id           := non_mg_rep_rec.strm_id;
7619         m_stmv_tbl(j).say_code     := 'HIST';
7620         m_stmv_tbl(j).active_yn    := 'N';
7621         m_stmv_tbl(j).date_history := sysdate;
7622 		*/
7623 
7624 		l_id_tbl(j)                := non_mg_rep_rec.strm_id;
7625       END LOOP;
7626       IF (l_id_tbl.COUNT > 0) THEN
7627 
7628 		BEGIN
7629           --Added by kthiruva for Debugging
7630           write_to_log('Prior to the call to historing current streams');
7631 	      FORALL i IN l_id_tbl.FIRST..l_id_tbl.LAST
7632 		    UPDATE OKL_STREAMS
7633 		    SET 	say_code = 'HIST',
7634 		    active_yn = 'N',
7635 		    date_history = sysdate
7636 		    WHERE 	ID = l_id_tbl(i);
7637           write_to_log('Streams historised successfully');
7638 
7639 	    EXCEPTION
7640 		    WHEN OTHERS THEN
7641 		          okl_api.set_message (p_app_name     => G_APP_NAME,
7642                                p_msg_name     => G_DB_ERROR,
7643                                p_token1       => G_PROG_NAME_TOKEN,
7644                                p_token1_value => l_api_name,
7645                                p_token2       => G_SQLCODE_TOKEN,
7646                                p_token2_value => sqlcode,
7647                                p_token3       => G_SQLERRM_TOKEN,
7648                                p_token3_value => sqlerrm);
7649 		       l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
7650 		       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7651 	    END;
7652 /*	Commented for Bulk Update - HKPATEL - 02/18/2004
7653       IF (m_stmv_tbl.COUNT > 0) THEN
7654         okl_streams_pub.update_streams(
7655                          p_api_version   => p_api_version,
7656                          p_init_msg_list => p_init_msg_list,
7657                          x_return_status => x_return_status,
7658                          x_msg_count     => x_msg_count,
7659                          x_msg_data      => x_msg_data,
7660                          p_stmv_tbl      => m_stmv_tbl,
7661                          x_stmv_tbl      => mx_stmv_tbl);
7662         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
7663           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7664         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
7665           raise OKL_API.G_EXCEPTION_ERROR;
7666         END IF;
7667 */
7668       END IF;
7669     END IF;
7670     -- gboomina BUG#4508077 changes start
7671        -- for main product
7672        IF l_orig_yn = 'Y' THEN
7673          --Added by kthiruva for Debugging
7674          write_to_log('Value of l_orig_yn = Y');
7675          write_to_log('Prior to the call to update_rvi_amount');
7676 
7677          update_rvi_amount(p_api_version  =>  p_api_version,
7678                            p_init_msg_list => OKL_API.G_FALSE,
7679                            p_chr_id => p_chr_id,
7680                            p_purpose => 'ORIGIN',
7681                            x_return_status => x_return_status,
7682                            x_msg_count => x_msg_count,
7683                            x_msg_data => x_msg_data);
7684 
7685          --Added by kthiruva for Debugging
7686          write_to_log('After the call to Update_rvi_amount, the return status is :'||x_return_status);
7687          -- raise appropriate exceptions depending on the return status
7688          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7689              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7690          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7691              RAISE OKL_API.G_EXCEPTION_ERROR;
7692          END IF;
7693        END IF;
7694        -- for reporting product
7695        IF l_rep_yn = 'Y' THEN
7696          --Added by kthiruva for Debugging
7697          write_to_log('Value of l_rep_yn = Y');
7698          write_to_log('Prior to the call to update_rvi_amount');
7699 
7700          update_rvi_amount(p_api_version  =>  p_api_version,
7701                            p_init_msg_list => OKL_API.G_FALSE,
7702                            p_chr_id => p_chr_id,
7703                            p_purpose => 'REPORT',
7704                            x_return_status => x_return_status,
7705                            x_msg_count => x_msg_count,
7706                            x_msg_data => x_msg_data);
7707 
7708          --Added by kthiruva for Debugging
7709          write_to_log('After the call to Update_rvi_amount, the return status is :'||x_return_status);
7710          -- raise appropriate exceptions depending on the return status
7711          IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7712              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7713          ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7714              RAISE OKL_API.G_EXCEPTION_ERROR;
7715          END IF;
7716        END IF;
7717        -- gboomina BUG#4508077 changes end
7718 -- End for bug#3388812  modification - BAKUCHIB
7719     IF (x_return_status = Okl_Api.G_RET_STS_SUCCESS) THEN
7720       --PAGARG 25-Feb-2005 Bug 4037658 starts
7721       IF (p_source_call = 'ESG') THEN
7722         IF not (l_orig_yn='N' AND l_rep_yn='Y') THEN
7723           --Added by kthiruva on 11-Aug-2005
7724           --Bug 4541302 - Start of Changes
7725           --1)If the regular product has a Multi-GAAP product then, we check to see if the Reporting
7726           --  Product's stream generation request is already completed.
7727 		  --2)If yes, we update the contract status
7728 		  --3)If no and the request is still being processed, we register an alert and wait on the alert.
7729 		  --4)The alert would be signalled by the reporting product once its stream generation request
7730 		  --  is complete.
7731 		  --5)Once the alert is received, the regular product can update the contract status to complete.
7732 		  --6)If the reporting product's stream generation request does not complete, and there is no
7733 		  --  alert signalled, then the contract status is not updated.
7734           IF l_mgaap_yn = 'Y' THEN
7735              --Fetching the request status of the Reporting Product
7736              OPEN get_stream_req_status_csr(p_chr_id);
7737              FETCH get_stream_req_status_csr INTO l_report_req_status;
7738              CLOSE get_stream_req_status_csr;
7739 
7740              --When the reporting request has completed with the below statuses, we do not want to update
7741              --the contract status. We therefore, update l_status to 1.
7742              IF l_report_req_status IN ('PROCESSING_FAILED','PROCESS_ABORTED','SERVER_NA','TIME_OUT') THEN
7743                  l_status := 1;
7744              END IF;
7745 
7746              IF(l_report_req_status NOT IN('PROCESS_COMPLETE', 'PROCESS_COMPLETE_ERRORS','PROCESSING_FAILED'
7747 			                               ,'PROCESS_ABORTED','SERVER_NA','TIME_OUT')) THEN
7748 
7749                  --Fetching the value of the time out variable
7750                  l_timeout := FND_PROFILE.value('OKL_STREAMS_TIME_OUT');
7751                  l_timeout := l_timeout * 60;
7752 
7753                  OPEN get_rep_trans_num(p_chr_id);
7754                  FETCH get_rep_trans_num INTO l_alert_name;
7755                  CLOSE get_rep_trans_num;
7756 
7757                  DBMS_ALERT.REGISTER(l_alert_name);
7758                  DBMS_ALERT.WAITONE(l_alert_name,l_message,l_status,l_timeout);
7759                  DBMS_ALERT.REMOVE(l_alert_name);
7760 
7761                  IF l_status = 1 THEN
7762                     --Fetching the request status of the Reporting Product
7763                     OPEN get_stream_req_status_csr(p_chr_id);
7764                     FETCH get_stream_req_status_csr INTO l_report_req_status;
7765                     CLOSE get_stream_req_status_csr;
7766                  END IF;
7767              END IF;
7768           END IF;
7769 
7770           IF(l_status = 0 OR (l_report_req_status IN('PROCESS_COMPLETE', 'PROCESS_COMPLETE_ERRORS'))) THEN
7771              print( l_api_name, 'updating the status');
7772              --Added by kthiruva for Debugging
7773              write_to_log('Prior to the call to update_contract_status');
7774              okl_contract_status_pub.update_contract_status(
7775                                     l_api_version,
7776                                     p_init_msg_list,
7777                                     x_return_status,
7778                                     x_msg_count,
7779                                     x_msg_data,
7780                                     'COMPLETE',
7781                                     p_chr_id );
7782              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7783                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7784              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7785                RAISE OKL_API.G_EXCEPTION_ERROR;
7786              END IF;
7787              --Added by kthiruva for Debugging
7788              write_to_log('After the call to update_contract_status, return status is :'||x_return_status);
7789 
7790              --call to cascade status on to lines
7791              OKL_CONTRACT_STATUS_PVT.cascade_lease_status(
7792                                     p_api_version     => l_api_version,
7793                                     p_init_msg_list   => p_init_msg_list,
7794                                     x_return_status   => x_return_status,
7795                                     x_msg_count       => x_msg_count,
7796                                     x_msg_data        => x_msg_data,
7797                                     p_chr_id          => l_chr_id);
7798              --Added by kthiruva for Debugging
7799              write_to_log('After the call to cascade_lease_status, return status is :'||x_return_status);
7800 
7801              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7802                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7803              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7804                RAISE OKL_API.G_EXCEPTION_ERROR;
7805              END IF;
7806 --srsreeni Bug6011651 starts
7807 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
7808      p_api_version         => l_api_version,
7809      p_init_msg_list       => p_init_msg_list,
7810      x_return_status       => x_return_status,
7811      x_msg_count           => x_msg_count,
7812      x_msg_data            => x_msg_data,
7813      p_khr_id              => l_chr_id,
7814      p_prog_short_name     => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
7815      p_progress_status     => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
7816              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7817                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7818              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7819                RAISE OKL_API.G_EXCEPTION_ERROR;
7820              END IF;
7821 --srsreeni Bug6011651 ends
7822           END IF;
7823 
7824         ELSE --For the if condition that checks if the request is of the regular product
7825           OPEN get_rep_trans_num(p_chr_id);
7826           FETCH get_rep_trans_num INTO l_alert_name;
7827           CLOSE get_rep_trans_num;
7828 
7829           DBMS_ALERT.SIGNAL(l_alert_name,l_rep_message);
7830           COMMIT;
7831           -- Bug 4541302 - End of Changes
7832         END IF;
7833       ELSE
7834       --PAGARG 25-Feb-2005 Bug 4037658 ends
7835 
7836       print( l_api_name, 'updating the status');
7837       okl_contract_status_pub.update_contract_status(
7838                               l_api_version,
7839                               p_init_msg_list,
7840                               x_return_status,
7841                               x_msg_count,
7842                               x_msg_data,
7843                               'COMPLETE',
7844                               p_chr_id );
7845 
7846              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7847                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7848              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7849                RAISE OKL_API.G_EXCEPTION_ERROR;
7850              END IF;
7851       --call to cascade status on to lines
7852       OKL_CONTRACT_STATUS_PVT.cascade_lease_status
7853             (p_api_version     => l_api_version,
7854              p_init_msg_list   => p_init_msg_list,
7855              x_return_status   => x_return_status,
7856              x_msg_count       => x_msg_count,
7857              x_msg_data        => x_msg_data,
7858              p_chr_id          => l_chr_id);
7859 
7860       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7861         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7862       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7863         RAISE OKL_API.G_EXCEPTION_ERROR;
7864       END IF;
7865 --srsreeni Bug6011651 starts
7866 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
7867      p_api_version         => l_api_version,
7868      p_init_msg_list       => p_init_msg_list,
7869      x_return_status       => x_return_status,
7870      x_msg_count           => x_msg_count,
7871      x_msg_data            => x_msg_data,
7872      p_khr_id              => l_chr_id,
7873      p_prog_short_name     => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
7874      p_progress_status     => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
7875              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7876                RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7877              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7878                RAISE OKL_API.G_EXCEPTION_ERROR;
7879              END IF;
7880 --srsreeni Bug6011651 ends
7881     END IF;
7882     --PAGARG 25-Feb-2005 Bug 4037658 starts
7883     END IF; -- for p_source_call = 'ESG' check
7884 
7885       IF (p_source_call = 'ESG') THEN
7886         IF not (l_orig_yn='N' AND l_rep_yn='Y') THEN
7887           -- rebook contract.
7888           print( l_api_name, 'calling  mass rebook api');
7889           --Added by kthiruva for Debugging
7890           write_to_log('Prior to the call to mass_rebook_after_yield'||x_return_status);
7891 
7892           OKL_MASS_REBOOK_PUB.mass_rebook_after_yield(
7893                   p_api_version      => l_api_version
7894                  ,p_init_msg_list    => p_init_msg_list
7895                  ,x_return_status    => x_return_status
7896                  ,x_msg_count        => x_msg_count
7897                  ,x_msg_data         => x_msg_data
7898                  ,p_chr_id           => l_chr_id);
7899           --Added by kthiruva for Debugging
7900           write_to_log('After the call to mass_rebook_after_yield, return status is '||x_return_status);
7901 
7902           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7903             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7904           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7905             RAISE OKL_API.G_EXCEPTION_ERROR;
7906           END IF;
7907 
7908           -- after yield processing for an imported contract.
7909           print( l_api_name, 'calling  import api');
7910           --Added by kthiruva for Debugging
7911           write_to_log('Prior to the call to contract_after_yield'||x_return_status);
7912           OKL_OPEN_INTERFACE_PVT.contract_after_yield(
7913  	              p_api_version      => l_api_version
7914  	             ,p_init_msg_list    => p_init_msg_list
7915  	             ,x_return_status    => x_return_status
7916  	             ,x_msg_count        => x_msg_count
7917  	             ,x_msg_data         => x_msg_data
7918  	             ,p_chr_id           => l_chr_id);
7919 
7920           --Added by kthiruva for Debugging
7921           write_to_log('After the call to contract_after_yield, return status is '||x_return_status);
7922 
7923           print( l_api_name, 'import api', x_return_status);
7924           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7925             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7926           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7927             RAISE OKL_API.G_EXCEPTION_ERROR;
7928           END IF;
7929         END IF;
7930  	  ELSE -- For Internal Stream generator
7931       --PAGARG 25-Feb-2005 Bug 4037658 ends
7932 
7933 -- rebook contract.
7934     print( l_api_name, 'calling  mass rebook api');
7935     OKL_MASS_REBOOK_PUB.mass_rebook_after_yield(
7936              p_api_version      => l_api_version
7937             ,p_init_msg_list    => p_init_msg_list
7938             ,x_return_status    => x_return_status
7939             ,x_msg_count        => x_msg_count
7940             ,x_msg_data         => x_msg_data
7941             ,p_chr_id           => l_chr_id);
7942 
7943     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7944       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7945     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7946       RAISE OKL_API.G_EXCEPTION_ERROR;
7947     END IF;
7948 
7949 -- after yield processing for an imported contract.
7950     print( l_api_name, 'calling  import api');
7951     OKL_OPEN_INTERFACE_PVT.contract_after_yield(
7952              p_api_version      => l_api_version
7953             ,p_init_msg_list    => p_init_msg_list
7954             ,x_return_status    => x_return_status
7955             ,x_msg_count        => x_msg_count
7956             ,x_msg_data         => x_msg_data
7957             ,p_chr_id           => l_chr_id);
7958 
7959     print( l_api_name, 'import api', x_return_status);
7960     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7961       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7962     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7963       RAISE OKL_API.G_EXCEPTION_ERROR;
7964     END IF;
7965     --PAGARG 25-Feb-2005 Bug 4037658
7966     END IF; -- for p_source_call = 'ESG' check
7967    --Added by vdamerla for bug 6344223
7968     OKL_SPLIT_ASSET_PVT.split_asset_after_yield(
7969              p_api_version      => l_api_version
7970             ,p_init_msg_list    => p_init_msg_list
7971             ,x_return_status    => x_return_status
7972             ,x_msg_count        => x_msg_count
7973             ,x_msg_data         => x_msg_data
7974             ,p_chr_id           => l_chr_id);
7975     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
7976       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
7977     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
7978       RAISE OKL_API.G_EXCEPTION_ERROR;
7979     END IF;
7980     --end vdamerla for bug 6344223
7981 
7982 
7983     print( l_api_name, 'end', x_return_status);
7984     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
7985   EXCEPTION
7986 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
7987 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
7988 			p_api_name  => l_api_name,
7989 			p_pkg_name  => g_pkg_name,
7990 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
7991 			x_msg_count => x_msg_count,
7992 			x_msg_data  => x_msg_data,
7993 			p_api_type  => g_api_type);
7994                 IF l_hdr_csr%ISOPEN THEN
7995                     CLOSE l_hdr_csr;
7996                 End If;
7997                 IF get_fin_lne_csr%ISOPEN THEN
7998                   CLOSE get_fin_lne_csr;
7999                 End If;
8000      WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
8001 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8002 			p_api_name  => l_api_name,
8003 			p_pkg_name  => g_pkg_name,
8004 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8005 			x_msg_count => x_msg_count,
8006 			x_msg_data  => x_msg_data,
8007 			p_api_type  => g_api_type);
8008 
8009                 If ( strms_csr%ISOPEN ) Then
8010                     CLOSE strms_csr;
8011                 End If;
8012 
8013                 IF l_hdr_csr%ISOPEN THEN
8014                     CLOSE l_hdr_csr;
8015                 End If;
8016                 IF get_fin_lne_csr%ISOPEN THEN
8017                   CLOSE get_fin_lne_csr;
8018                 End If;
8019 	when OTHERS then
8020              	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8021 			p_api_name  => l_api_name,
8022 			p_pkg_name  => g_pkg_name,
8023 			p_exc_name  => 'OTHERS',
8024 			x_msg_count => x_msg_count,
8025 			x_msg_data  => x_msg_data,
8026 			p_api_type  => g_api_type);
8027 
8028                 IF l_hdr_csr%ISOPEN THEN
8029                     CLOSE l_hdr_csr;
8030                 End If;
8031                 IF get_fin_lne_csr%ISOPEN THEN
8032                   CLOSE get_fin_lne_csr;
8033                 End If;
8034   end process_streams;
8035 -- End modification 11i10 bakuchib
8036 -- Start modification 11i10 bakuchib
8037   PROCEDURE check_for_mandatory_streams(
8038             p_api_version        IN  NUMBER,
8039             p_init_msg_list      IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
8040             x_return_status      OUT NOCOPY VARCHAR2,
8041             x_msg_count          OUT NOCOPY NUMBER,
8042             x_msg_data           OUT NOCOPY VARCHAR2,
8043             p_chr_id             IN  OKC_K_HEADERS_B.ID%TYPE,
8044             p_deal_type          IN  VARCHAR2,
8045             p_stream_types_tbl   IN  okl_create_streams_pub.csm_stream_types_tbl_type,
8046             x_stream_types_tbl   OUT NOCOPY  okl_create_streams_pub.csm_stream_types_tbl_type) AS
8047     l_api_name          VARCHAR2(256) := 'CHECK_FOR_MD_STRMS';
8048     i                   NUMBER;
8049     styid               NUMBER;
8050     l_return_status     VARCHAR2(1);
8051     j                   NUMBER;
8052     k                   NUMBER :=0;
8053     ln_dummy            NUMBER := 0;
8054     ln_income           NUMBER := 0;
8055     l_strm_name         VARCHAR2(256) := OKL_API.G_MISS_CHAR;
8056     l_blnInclude        VARCHAR2(3) := OKL_API.G_TRUE;
8057     l_blnhasfees        VARCHAR2(3) := OKL_API.G_FALSE;
8058     l_blnhasfin         VARCHAR2(3) := OKL_API.G_FALSE;
8059     TYPE l_streams_tbl_type IS TABLE OF VARCHAR2(256)
8060          INDEX BY BINARY_INTEGER;
8061     TYPE fin_id_tbl_type IS TABLE OF NUMBER
8062          INDEX BY BINARY_INTEGER;
8063     l_streams_tbl       l_streams_tbl_type;
8064     l_fin_id_tbl        fin_id_tbl_type;
8065     l_strm_type_id_tbl okl_strm_type_id_tbl_type;
8066     -- get Stream name
8067     CURSOR strm_name_csr (styid NUMBER)
8068     IS
8069     SELECT tl.name name,
8070            stm.stream_type_class stream_type_class,
8071            tl.description alloc_basis,
8072            stm.capitalize_yn capitalize_yn,
8073            stm.periodic_yn  periodic_yn
8074     FROM okl_strm_type_b stm,
8075          okl_strm_type_tl tl
8076     WHERE tl.id = stm.id
8077     AND tl.language = 'US'
8078     AND stm.id = styid;
8079     --get finance strms
8080    -- nikshah -- Bug # 5484903 Fixed,
8081   -- Removed CURSOR c_finance_strm_csr
8082 
8083     -- Get the stream type id
8084     CURSOR l_strmid_csr (strmName VARCHAR2)
8085     IS
8086     SELECT id styid
8087     FROM okl_strm_type_tl
8088     WHERE LANGUAGE = 'US'
8089     AND NAME = strmName;
8090     -- get the Contract line info
8091     CURSOR l_line_rec_csr(chrid NUMBER)
8092     IS
8093     SELECT cle.id
8094     FROM okc_k_lines_b cle,
8095          okc_line_styles_b lse,
8096          okc_statuses_b sts
8097     WHERE cle.dnz_chr_id = chrid
8098     AND cle.lse_id = lse.id
8099     AND lse.lty_code = 'FREE_FORM1'
8100     AND sts.code = cle.sts_code
8101 --Start of bug#3121708 modification BAKUCHIB
8102     AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED');
8103 --End of bug#3121708 modification BAKUCHIB
8104     -- Get all valid fee lines
8105     CURSOR l_fee_type_csr ( chrId NUMBER, feeId NUMBER ) IS
8106     SELECT kle.fee_type
8107     FROM okl_k_lines kle,
8108          okc_k_lines_b cle,
8109          okc_line_styles_b lse,
8110          okc_statuses_b sts
8111     WHERE cle.lse_id = lse.id
8112     AND lse.lty_code = 'FEE'
8113     AND cle.dnz_chr_id = chrid
8114     AND cle.id = kle.id
8115     AND kle.id = feeId
8116     AND sts.code = cle.sts_code
8117 --Start of bug#3121708 modification BAKUCHIB
8118     AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED');
8119 --End of bug#3121708 modification BAKUCHIB
8120 
8121     -- To check if the chr_id has Financed fee feetype defined
8122     CURSOR l_fin_type_csr (chrId NUMBER)
8123     IS
8124     SELECT cle.id fin_id
8125     FROM okc_k_lines_b cle,
8126          okc_line_styles_b lse,
8127          okl_k_lines kle,
8128          okc_statuses_b sts
8129     WHERE cle.dnz_chr_id = chrId
8130     AND cle.lse_id = lse.id
8131     AND lse.lty_code = 'FEE'
8132     AND cle.id = kle.id
8133     AND sts.code = cle.sts_code
8134     AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
8135     AND kle.fee_type = 'FINANCED';
8136 
8137 	-- Code required for rollover quote- HKPATEL
8138     CURSOR l_rollover_csr(chrId NUMBER)
8139     IS
8140     SELECT cle.id fin_id
8141     FROM okc_k_lines_b cle,
8142          okc_line_styles_b lse,
8143          okl_k_lines kle,
8144          okc_statuses_b sts
8145     WHERE cle.dnz_chr_id = chrId
8146     AND cle.lse_id = lse.id
8147     AND lse.lty_code = 'FEE'
8148     AND cle.id = kle.id
8149     AND sts.code = cle.sts_code
8150     AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
8151     AND kle.fee_type = 'ROLLOVER';
8152 
8153     CURSOR l_link_rollover_csr(cleId NUMBER)
8154     IS
8155     SELECT okc.id kle_id
8156     FROM   okc_k_lines_b okc,
8157        	   okl_k_lines kle ,
8158        	   okc_line_styles_b lse
8159     WHERE  okc.cle_id = cleId
8160     AND    okc.lse_id = lse.id
8161     AND    okc.id = kle.id
8162     AND    lty_code = 'LINK_FEE_ASSET';
8163     -- Code for rollover quotes ends here- HKPATEL
8164 
8165     -- To get the Subsidy Income Accural stream type id
8166     -- and also fetch the sub line id
8167 /*
8168     CURSOR get_sub_line_csr (p_dnz_chr_id okc_k_lines_b.dnz_chr_id%TYPE)
8169     IS
8170     SELECT TO_NUMBER(sgn.value) sty_id,
8171            cle.id
8172     FROM okl_sgn_translations sgn,
8173          okl_strm_type_b sty,
8174          okl_subsidies_v sub,
8175          okl_k_lines kle,
8176          okc_statuses_b sts,
8177          okc_line_styles_b lse,
8178          okc_k_lines_b cle
8179     WHERE cle.dnz_chr_id = p_dnz_chr_id
8180     AND cle.lse_id = lse.id
8181     AND lse.lty_code = 'SUBSIDY'
8182     AND sts.code = cle.sts_code
8183     AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
8184     AND cle.id = kle.id
8185     AND TO_CHAR(kle.sty_id) = sgn.object1_id1
8186     AND sgn.object1_id1 = TO_CHAR(sty.id)
8187     AND sgn.jtot_object1_code = 'OKL_STRMTYP'
8188     AND kle.subsidy_id = sub.id;
8189 */
8190     CURSOR get_sub_line_csr(p_dnz_chr_id IN okc_k_lines_b.dnz_chr_id%TYPE)
8191     IS
8192 	SELECT kle.sty_id,
8193 	       cle.id
8194 --srsreeni Bug5699923 Start
8195 		,sts.ste_code
8196 --srsreeni Bug5699923 End
8197     FROM okl_k_lines kle,
8198 	     okc_k_lines_b cle,
8199 		 okl_subsidies_v sub,
8200 		 okc_statuses_b sts,
8201 		 okc_line_styles_b lse
8202     WHERE cle.dnz_chr_id = p_dnz_chr_id
8203     AND cle.lse_id = lse.id
8204     AND lse.lty_code = 'SUBSIDY'
8205     AND sts.code = cle.sts_code
8206     AND sts.ste_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
8207     AND cle.id = kle.id
8208     AND kle.subsidy_id = sub.id;
8209 
8210 	     -- srsreeni - Bug#5699923 - Added - Start
8211  	     CURSOR c_is_loan_khr(p_chr_id OKC_K_HEADERS_B.ID%TYPE) IS
8212  	       SELECT 'Y'
8213  	         FROM OKL_K_HEADERS
8214  	         WHERE ID = p_chr_id
8215  	           AND DEAL_TYPE = 'LOAN';
8216 
8217  	     l_is_loan_khr VARCHAR2(1) := 'N';
8218  	     -- srsreeni - Bug#569923 - Added - End
8219 
8220     l_fee_type_rec      l_fee_type_csr%ROWTYPE;
8221     l_strm_name_rec     strm_name_csr%ROWTYPE;
8222     l_strmid_rec        l_strmid_csr%ROWTYPE;
8223     r_strmid_rec        l_strmid_csr%ROWTYPE;
8224     m_strmid_rec        l_strmid_csr%ROWTYPE;
8225 
8226 	-- Code added by HKPATEL for user defined streams
8227 	l_flag 					VARCHAR2(3) := 'YES';
8228 
8229 	-- Added code ends here for user defined streams
8230         -- Added by mansrini for Bug 5111058 (Fwd port bug 5061024)
8231            l_pricing_name       VARCHAR2(40);
8232        -- end mansrini
8233 
8234   BEGIN
8235     x_return_status := OKL_API.G_RET_STS_SUCCESS;
8236     -- Call start_activity to create savepoint, check compatibility
8237     -- and initialize message list
8238     x_return_status := OKL_API.START_ACTIVITY (
8239                                l_api_name
8240                                ,p_init_msg_list
8241                                ,'_PVT'
8242                                ,x_return_status);
8243     -- Check if activity started successfully
8244     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8245        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8246     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8247        RAISE OKL_API.G_EXCEPTION_ERROR;
8248     END IF;
8249     l_streams_tbl(1) := 'RENT';
8250     l_streams_tbl(2) := 'PRINCIPAL BALANCE';
8251     l_streams_tbl(3) := 'RATE PARTICIPATION';
8252     l_streams_tbl(4) := 'INTEREST PAYMENT';
8253     l_streams_tbl(5) := 'PRINCIPAL PAYMENT';
8254     l_streams_tbl(6) := 'FAS 91 FEE INCOME';
8255     l_streams_tbl(7) :=  'RENTAL ACCRUAL';
8256     l_streams_tbl(8) := 'FINANCED EXTENSION FEE INCOME';
8257     l_streams_tbl(9) := 'RATE SUBSIDY';
8258     l_streams_tbl(10) := 'PRE-TAX INCOME';
8259     l_streams_tbl(11) := 'RENT';--'PRESENT VALUE RESIDUAL'; --TBC
8260     l_streams_tbl(12) := 'RENT';--'PV GUARANTEE';--TBC
8261     l_streams_tbl(13) := 'RESIDUAL VALUE INSURANCE PREMIUM';
8262     l_streams_tbl(14) := 'GUARANTEED RESIDUAL INSURED'; -- RVI takes care of requesting by default.
8263     l_streams_tbl(15) := 'RENT';--'PRESENT VALUE INSURED RESIDUAL';--TBC
8264     l_streams_tbl(16) := 'RENT';--'UNEARNED INCOME';
8265     l_streams_tbl(17) := 'RENT'; --'DEFERRED INCOME';
8266     l_streams_tbl(18) := 'TERMINATION VALUE';
8267     l_streams_tbl(19) := 'STIP LOSS VALUE';
8268     l_streams_tbl(20) := 'LOAN PAYMENT';
8269     l_streams_tbl(21) := 'FEE INCOME';
8270     l_streams_tbl(22) := 'PERIODIC EXPENSE PAYABLE';
8271     l_streams_tbl(23) := 'INTEREST INCOME';
8272     -- Populating the O/P Stream Type tables with the existing one
8273     IF p_stream_types_tbl.COUNT > 0 THEN
8274       FOR i IN p_stream_types_tbl.FIRST..p_stream_types_tbl.LAST LOOP
8275         x_stream_types_tbl(i).stream_type_id := p_stream_types_tbl(i).stream_type_id;
8276 		x_stream_types_tbl(i).pricing_name   := p_stream_types_tbl(i).pricing_name;
8277         x_stream_types_tbl(i).kle_asset_id := p_stream_types_tbl(i).kle_asset_id;
8278         x_stream_types_tbl(i).kle_fee_id := p_stream_types_tbl(i).kle_fee_id;
8279         IF x_stream_types_tbl(i).kle_fee_id <> OKL_API.G_MISS_NUM AND
8280           l_blnhasfees = OKL_API.G_FALSE THEN
8281           l_blnhasfees := OKL_API.G_TRUE;
8282         END IF;
8283       END LOOP;
8284     END IF;
8285 
8286 	-- Code commented by HKPATEL for user defined stream
8287 	/*
8288     -- Scan through Stream types tables
8289     FOR i IN l_streams_tbl.FIRST..l_streams_tbl.LAST LOOP
8290       j := 1;
8291       -- Validate the Stream type
8292       WHILE (( l_strm_name <> l_streams_tbl(i) ) AND ( j <= x_stream_types_tbl.COUNT))  LOOP
8293         OPEN  strm_name_csr ( x_stream_types_tbl(j).stream_type_id );
8294         FETCH strm_name_csr into l_strm_name_rec;
8295         IF strm_name_csr%NOTFOUND THEN
8296           okl_api.set_message(p_app_name      => G_APP_NAME,
8297                               p_msg_name      => G_LLA_NO_MATCHING_RECORD,
8298                               p_token1        => G_COL_NAME_TOKEN,
8299                               p_token1_value  => 'Stream Type id');
8300           x_return_status := OKL_API.G_RET_STS_ERROR;
8301           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8302         END IF;
8303         CLOSE strm_name_csr;
8304         l_strm_name := l_strm_name_rec.name;
8305         j := j + 1;
8306       END LOOP;
8307       IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
8308         EXIT WHEN (x_return_status <> OKL_API.G_RET_STS_SUCCESS);
8309       END IF;
8310       IF ((j > x_stream_types_tbl.COUNT ) AND ( l_strm_name <> l_streams_tbl(i))) THEN
8311         l_blnInclude := OKL_API.G_FALSE;
8312         -- If the Deal type Containing Lease
8313         IF (INSTR( p_deal_type, 'LEASE') > 0) THEN
8314           -- Then we can include RENT,RENT,RENT,RESIDUAL VALUE INSURANCE PREMIUM
8315           -- RENT,RENT
8316           IF l_streams_tbl(i) = 'RENT' OR
8317              l_streams_tbl(i) = 'RESIDUAL VALUE INSURANCE PREMIUM' THEN
8318             l_blnInclude := OKL_API.G_TRUE;
8319           -- then we can include PRE-TAX INCOME if Deal type is Lease Direct finance
8320           -- then we can include PRE-TAX INCOME if Deal type is Lease Sale Type
8321           ELSIF l_streams_tbl(i) = 'PRE-TAX INCOME' AND
8322                 trim(p_deal_type) IN ('LEASEDF','LEASEST') THEN
8323             l_blnInclude := OKL_API.G_TRUE;
8324           -- Then we can include FINANCED EXTENSION FEE INCOME if the Lease contract has Fee line
8325           ELSIF l_streams_tbl(i) = 'FINANCED EXTENSION FEE INCOME' AND
8326                 l_blnhasfees = OKL_API.G_TRUE THEN
8327             l_blnInclude := OKL_API.G_TRUE;
8328           -- then we can include RENTAL ACCRUAL if Deal type is Lease operating
8329           ELSIF l_streams_tbl(i) = 'RENTAL ACCRUAL' AND
8330                 trim(p_deal_type) = 'LEASEOP' THEN
8331             l_blnInclude := OKL_API.G_TRUE;
8332           END IF;
8333         -- If the Deal type Containing Loan
8334         ELSIF (INSTR(p_deal_type, 'LOAN') > 0) THEN
8335           -- Then we can include PRINCIPAL BALANCE,INTEREST PAYMENT,PRINCIPAL PAYMENT,
8336           -- LOAN PAYMENT, PRE-TAX INCOME
8337           IF l_streams_tbl(i) = 'PRINCIPAL BALANCE' OR
8338              l_streams_tbl(i) = 'INTEREST PAYMENT' OR
8339              l_streams_tbl(i) = 'PRINCIPAL PAYMENT' OR
8340              l_streams_tbl(i) = 'LOAN PAYMENT' OR
8341              l_streams_tbl(i) = 'PRE-TAX INCOME' THEN
8342             l_blnInclude := OKL_API.G_TRUE;
8343           END IF;
8344         END IF;
8345         -- We include the below streams independent of the Deal type but
8346         -- Conditional basis of weather the contact has Fee line
8347         -- RATE PARTICIPATION,FAS 91 FEE INCOME,RATE SUBSIDY,
8348         -- TERMINATION VALUE,STIP LOSS VALUE,FEE INCOME,PERIODIC EXPENSE PAYABLE
8349         IF (l_streams_tbl(i) = 'RATE PARTICIPATION' AND
8350             l_blnhasfees = OKL_API.G_TRUE) OR
8351             (l_streams_tbl(i) = 'RATE SUBSIDY' AND
8352              l_blnhasfees = OKL_API.G_TRUE) OR
8353             (l_streams_tbl(i) = 'FEE INCOME' AND
8354              l_blnhasfees = OKL_API.G_TRUE) OR
8355             (l_streams_tbl(i) = 'FAS 91 FEE INCOME') OR
8356             (l_streams_tbl(i) = 'TERMINATION VALUE') OR
8357             (l_streams_tbl(i) = 'STIP LOSS VALUE') THEN
8358           l_blnInclude := OKL_API.G_TRUE;
8359         -- Start of BUG#2997914 fix
8360         END IF;
8361         -- End of BUG#2997914 fix
8362         -- Handling only fee receivable Streams
8363         IF l_streams_tbl(i) = 'FEE INCOME' AND
8364            l_blnInclude = OKL_API.G_TRUE  THEN
8365           FOR k IN p_stream_types_tbl.FIRST..p_stream_types_tbl.LAST   LOOP
8366             IF p_stream_types_tbl(k).kle_fee_id <> OKL_API.G_MISS_NUM THEN
8367               OPEN  l_fee_type_csr (p_chr_id,
8368                                     p_stream_types_tbl(k).kle_fee_id);
8369               FETCH l_fee_type_csr INTO l_fee_type_rec;
8370               CLOSE l_fee_type_csr;
8371               IF l_fee_type_rec.fee_type IN ('PASSTHROUGH','MISCELLANEOUS') THEN
8372                 l_blnInclude := OKL_API.G_TRUE;
8373                 EXIT;
8374               ELSE
8375                 l_blnInclude := OKL_API.G_FALSE;
8376               END IF;
8377             END IF;
8378           END LOOP;
8379         END IF;
8380         IF (l_blnInclude = OKL_API.G_TRUE) THEN
8381           OPEN  l_strmid_csr(l_streams_tbl(i));
8382           FETCH l_strmid_csr into l_strmid_rec;
8383           IF l_strmid_csr%NOTFOUND THEN
8384             okl_api.set_message(p_app_name      => G_APP_NAME,
8385                                 p_msg_name      => G_LLA_NO_MATCHING_RECORD,
8386                                 p_token1        => G_COL_NAME_TOKEN,
8387                                 p_token1_value  => 'Stream Type');
8388             x_return_status := OKL_API.G_RET_STS_ERROR;
8389             EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
8390           END IF;
8391           CLOSE l_strmid_csr;
8392           styid := l_strmid_rec.styid;
8393           -- Then we can include PRINCIPAL BALANCE,INTEREST PAYMENT,PRINCIPAL PAYMENT,
8394           -- LOAN PAYMENT
8395           -- This will be true for Loan deal type
8396           IF (l_streams_tbl(i) = 'PRINCIPAL BALANCE' OR
8397               l_streams_tbl(i) = 'INTEREST PAYMENT' OR
8398               l_streams_tbl(i) = 'PRE-TAX INCOME' OR
8399               l_streams_tbl(i) = 'PRINCIPAL PAYMENT' OR
8400               l_streams_tbl(i) = 'LOAN PAYMENT') AND
8401               p_deal_type = 'LOAN' THEN
8402             FOR l_line_rec in l_line_rec_csr(p_chr_id) LOOP
8403               x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := styid;
8404               x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_line_rec.id;
8405             END LOOP;
8406 -- Added by dedey, arun, since mandatory sterams are not getting picked up
8407 -- during Lease Contract stream generation
8408 -- starts 06/14/2002
8409           ELSE
8410             x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := styid;
8411 -- end 06/14/2002
8412           END IF;
8413         END IF;
8414       END IF;
8415     END LOOP;
8416     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
8417        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8418     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
8419        RAISE OKL_API.G_EXCEPTION_ERROR;
8420     END IF;
8421 
8422 	--Code commented by HKPATEL for userdefined streams */
8423 /*
8424     IF x_stream_types_tbl.COUNT > 0 THEN
8425       FOR l_fin_type_rec IN l_fin_type_csr(chrId => p_chr_id) LOOP
8426         FOR r_finance_strm_rec IN c_finance_strm_csr LOOP
8427           x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := r_finance_strm_rec.id;
8428           x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_fin_type_rec.fin_id;
8429         END LOOP;
8430         l_blnhasfin := OKL_API.G_TRUE;
8431       END LOOP;
8432       -- Now we get the Subsidy Income Accural stream type id , wil be fetched from
8433       -- Subsidy setup
8434       FOR get_sub_line_rec IN get_sub_line_csr (p_dnz_chr_id => p_chr_id) LOOP
8435         x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := get_sub_line_rec.sty_id;
8436         x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_fee_id := get_sub_line_rec.id;
8437       END LOOP;
8438     END IF;
8439 
8440 	-- Requesting streams for rollover quote- HKPATEL
8441     IF x_stream_types_tbl.COUNT > 0 THEN
8442 	  IF l_link_fee_asset_yn = 'FALSE' THEN
8443         FOR l_rollover_rec IN l_rollover_csr(chrId => p_chr_id) LOOP
8444 		  FOR r_finance_strm_rec IN c_finance_strm_csr LOOP
8445             x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := r_finance_strm_rec.id;
8446             x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_rollover_rec.fin_id;
8447           END LOOP;
8448         END LOOP;
8449 	  ELSIF l_link_fee_asset_yn = 'TRUE' THEN
8450         FOR l_rollover_rec IN l_rollover_csr(chrId => p_chr_id) LOOP
8451 		  FOR l_link_rollover_rec IN l_link_rollover_csr(cleId => l_rollover_rec.fin_id) LOOP
8452 		    FOR r_finance_strm_rec IN c_finance_strm_csr LOOP
8453               x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := r_finance_strm_rec.id;
8454               x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_asset_id := l_link_rollover_rec.kle_id;
8455             END LOOP;
8456 		  END LOOP;
8457 		END LOOP;
8458       END IF;
8459 	END IF;
8460 	-- Stream request for rollover quote ends here - HKPATEL
8461 
8462 */
8463 	     -- srsreeni - Bug#5699923 - Added - Start
8464  	     -- Determine if the contract is a loan contract (rev-loan excluded)
8465  	     OPEN c_is_loan_khr(p_chr_id);
8466  	       FETCH c_is_loan_khr INTO l_is_loan_khr;
8467  	     CLOSE c_is_loan_khr;
8468  	     -- srsreeni - Bug#5699923 - Added - End
8469     IF x_stream_types_tbl.COUNT > 0 THEN
8470       -- Now we get the Subsidy Income Accural stream type id , wil be fetched from
8471       -- Subsidy setup
8472       FOR get_sub_line_rec IN get_sub_line_csr (p_dnz_chr_id => p_chr_id) LOOP
8473          -- srsreeni - Bug#5699923 - Added - Start
8474  	         -- DONOT request SuperTrump to generate streams
8475  	         -- for TERMINATED lines. Fix for Bug#5699923 deals with LOAN
8476  	         -- contracts alone and hence this check is restricted to LOAN
8477            --vdamerla Bug6149951 start commented the following as streams should not be requested for any terminated asset line
8478            --of a contract of any book classification and not just LOAN
8479            --          IF l_is_loan_khr ='Y' AND get_sub_line_rec.ste_code = 'TERMINATED' THEN
8480           IF get_sub_line_rec.ste_code = 'TERMINATED' THEN
8481            --srsreeni Bug6149951 ends
8482  	             NULL; -- Donot request streams if LOAN and line TERMINATED
8483  	           ELSE
8484 	    get_dependent_stream_types
8485         (
8486           p_khr_id => p_chr_id,
8487           p_primary_sty_id => get_sub_line_rec.sty_id,
8488           x_return_status => l_return_status,
8489           x_dependent_sty_id => l_strm_type_id_tbl
8490         );
8491         IF l_return_status = 'E' THEN
8492 		  l_return_status := 'S';
8493 		END IF;
8494 
8495         IF l_strm_type_id_tbl.COUNT > 0 THEN
8496           FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
8497             x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := l_strm_type_id_tbl(i).id;
8498 		    x_stream_types_tbl(x_stream_types_tbl.COUNT).pricing_name := l_strm_type_id_tbl(i).pricing_name;
8499             x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_fee_id := get_sub_line_rec.id;
8500 		  END LOOP;
8501 		END IF;
8502 
8503            -- Added by bkatraga for bug 5061024
8504            -- To generate the primary stream of purpose Subsidy
8505            get_primary_pricing_name
8506            (
8507             p_khr_id => p_chr_id,
8508             p_sty_id => get_sub_line_rec.sty_id,
8509             x_return_status => l_return_status,
8510             x_primary_pricing_name => l_pricing_name
8511            );
8512 
8513            IF l_return_status = 'E' THEN
8514               l_return_status := 'S';
8515            END IF;
8516 
8517            IF l_pricing_name IS NOT NULL THEN
8518               x_stream_types_tbl(x_stream_types_tbl.COUNT+1).stream_type_id := get_sub_line_rec.sty_id;
8519               x_stream_types_tbl(x_stream_types_tbl.COUNT).pricing_name := l_pricing_name;
8520               x_stream_types_tbl(x_stream_types_tbl.COUNT).kle_fee_id := get_sub_line_rec.id;
8521            END IF;
8522            -- end bkatraga for bug 5061024
8523          END IF; -- Check for terminated lines on a LOAN contract
8524  	         -- srsreeni - Bug#5699923 - Added - End
8525 
8526       END LOOP;
8527     END IF;
8528 
8529 	-- Code for user defined streams ends here
8530 
8531 
8532     OKL_API.END_ACTIVITY (x_msg_count,
8533                           x_msg_data );
8534 
8535   EXCEPTION
8536     WHEN OKL_API.G_EXCEPTION_ERROR THEN
8537       IF get_sub_line_csr%ISOPEN THEN
8538         CLOSE get_sub_line_csr;
8539       END IF;
8540       IF strm_name_csr%ISOPEN THEN
8541         CLOSE strm_name_csr;
8542       END IF;
8543       IF l_strmid_csr%ISOPEN THEN
8544         CLOSE l_strmid_csr;
8545       END IF;
8546       IF l_line_rec_csr%ISOPEN THEN
8547         CLOSE l_line_rec_csr;
8548       END IF;
8549       IF l_fee_type_csr%ISOPEN THEN
8550         CLOSE l_fee_type_csr;
8551       END IF;
8552       IF l_fin_type_csr%ISOPEN THEN
8553         CLOSE l_fin_type_csr;
8554       END IF;
8555 
8556       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8557                                 l_api_name,
8558                                G_PKG_NAME,
8559                                'OKL_API.G_RET_STS_ERROR',
8560                                x_msg_count,
8561                                x_msg_data,
8562                                '_PVT');
8563     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
8564       IF get_sub_line_csr%ISOPEN THEN
8565         CLOSE get_sub_line_csr;
8566       END IF;
8567       IF strm_name_csr%ISOPEN THEN
8568         CLOSE strm_name_csr;
8569       END IF;
8570       IF l_strmid_csr%ISOPEN THEN
8571         CLOSE l_strmid_csr;
8572       END IF;
8573       IF l_line_rec_csr%ISOPEN THEN
8574         CLOSE l_line_rec_csr;
8575       END IF;
8576       IF l_fee_type_csr%ISOPEN THEN
8577         CLOSE l_fee_type_csr;
8578       END IF;
8579       IF l_fin_type_csr%ISOPEN THEN
8580         CLOSE l_fin_type_csr;
8581       END IF;
8582       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8583                                 l_api_name,
8584                                 G_PKG_NAME,
8585                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
8586                                 x_msg_count,
8587                                 x_msg_data,
8588                                 '_PVT');
8589     WHEN OTHERS THEN
8590       IF get_sub_line_csr%ISOPEN THEN
8591         CLOSE get_sub_line_csr;
8592       END IF;
8593       IF strm_name_csr%ISOPEN THEN
8594         CLOSE strm_name_csr;
8595       END IF;
8596       IF l_strmid_csr%ISOPEN THEN
8597         CLOSE l_strmid_csr;
8598       END IF;
8599 
8600       IF l_line_rec_csr%ISOPEN THEN
8601         CLOSE l_line_rec_csr;
8602       END IF;
8603       IF l_fee_type_csr%ISOPEN THEN
8604         CLOSE l_fee_type_csr;
8605       END IF;
8606       IF l_fin_type_csr%ISOPEN THEN
8607         CLOSE l_fin_type_csr;
8608       END IF;
8609       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
8610                                 l_api_name,
8611                                 G_PKG_NAME,
8612                                 'OTHERS',
8613                                 x_msg_count,
8614                                 x_msg_data,
8615                                 '_PVT');
8616   END check_for_mandatory_streams;
8617 -- End modification 11i10 bakuchib
8618   Procedure extract_security_deposit( p_api_version IN  NUMBER,
8619                                p_chr_id  IN NUMBER,
8620                                p_deal_type IN VARCHAR2,
8621                                p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
8622                                x_msg_count OUT NOCOPY NUMBER,
8623                                x_msg_data  OUT NOCOPY VARCHAR2,
8624                                x_return_status OUT NOCOPY VARCHAR2,
8625                                px_csm_lease_header IN OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
8626                                px_csm_one_off_fee_tbl  IN  OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
8627                                px_csm_periodic_expenses_tbl IN OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
8628                                px_csm_stream_types_tbl IN OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type)  AS
8629 
8630      l_api_name		CONSTANT VARCHAR2(30) := 'EXTRACT_SECURITY_DEPOSIT';
8631      l_api_version	CONSTANT NUMBER	      := 1;
8632 
8633      l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
8634      x                  NUMBER := 0;
8635 
8636      CURSOR c_deposit_date( chrId NUMBER) IS
8637      SELECT FND_DATE.canonical_to_date(rule_information5) date_returned
8638      FROM   okc_rules_b
8639      WHERE  dnz_chr_id  = chrId
8640          AND  rule_information_category = 'LASDEP';
8641 
8642      l_c_deposit_date c_deposit_date%ROWTYPE;
8643 
8644      cursor l_line_rec_csr1( chrid NUMBER, lnetype VARCHAR2 ) is
8645      select kle.id,
8646            kle.oec,
8647            kle.residual_code,
8648            kle.capital_amount,
8649            kle.delivered_date,
8650            kle.date_funding_required,
8651            kle.residual_grnty_amount,
8652            kle.date_funding,
8653            kle.residual_value,
8654            kle.amount,
8655            kle.price_negotiated,
8656            kle.start_date,
8657            kle.end_date,
8658            kle.orig_system_id1,
8659 	   kle.fee_type,
8660 	   kle.initial_direct_cost,
8661            tl.item_description,
8662            tl.name
8663      from  okl_k_lines_full_v kle,
8664            okc_line_styles_b lse,
8665            okc_k_lines_tl tl,
8666 	   okc_statuses_b sts
8667      where KLE.LSE_ID = LSE.ID
8668           and lse.lty_code = lnetype
8669 	  and tl.id = kle.id
8670           and tl.language = userenv('LANG')
8671           and kle.dnz_chr_id = chrid
8672 	  and kle.fee_type = 'SECDEPOSIT'
8673 	  and sts.code = kle.sts_code
8674 --Start of bug#3121708 modification BAKUCHIB
8675 	  and sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
8676 --End of bug#3121708 modification BAKUCHIB
8677 
8678 
8679 --- sgorantl added for bug#4084201
8680  CURSOR fee_strm_type_csr1 (kleid NUMBER,
8681                             linestyle VARCHAR2 )
8682   IS
8683   SELECT stl.ST_GEN_TMPT_SET_NAME strm_name,
8684          stl.pricing_name pricing_name,
8685          kle.id   line_id,
8686          stl.id   styp_id
8687   FROM OKL_STRM_TMPT_LINES_UV stl,
8688        okc_k_items cim,
8689        okl_k_lines_full_v kle,
8690        okc_line_styles_b ls
8691   WHERE cim.cle_id = kle.id
8692   AND ls.id = kle.lse_id
8693   AND ls.lty_code = 'FEE'
8694   AND cim.object1_id1 = stl.primary_sty_id
8695   AND cim.object1_id2 = '#'
8696   AND kle.id = kleid
8697   AND stl.pricing_name is not null;
8698 --- sgorantl added for bug#4084201 --end
8699 
8700      l_line_rec1           l_line_rec_csr1%ROWTYPE;
8701      l_rl_rec             l_rl_csr%ROWTYPE;
8702      l_rl_rec1            l_rl_csr1%ROWTYPE;
8703      l_rl_rec2            l_rl_csr2%ROWTYPE;
8704      l_fee_strm_type_rec1  fee_strm_type_csr1%ROWTYPE;
8705      l_fee_strm_type_rec  fee_strm_type_csr%ROWTYPE;
8706      l_strm_name_rec      strm_name_csr%ROWTYPE;
8707 
8708      l_hdr_rec l_hdr_csr%ROWTYPE;
8709 
8710      l_level_type NUMBER;
8711      l_strm_name VARCHAR2(200);
8712      i BINARY_INTEGER := 0;
8713      j BINARY_INTEGER := 0;
8714      k BINARY_INTEGER := 0;
8715      l BINARY_INTEGER := 0;
8716      m BINARY_INTEGER := 0;
8717      idx BINARY_INTEGER := 0;
8718 
8719 
8720   Begin
8721 
8722     print( l_api_name, 'begin');
8723 
8724     x_return_status := OKL_API.START_ACTIVITY(
8725 			p_api_name      => l_api_name,
8726 			p_pkg_name      => g_pkg_name,
8727 			p_init_msg_list => p_init_msg_list,
8728 			l_api_version   => l_api_version,
8729 			p_api_version   => p_api_version,
8730 			p_api_type      => G_API_TYPE,
8731 
8732 			x_return_status => x_return_status);
8733 
8734     -- check if ac1tivity started successfully
8735     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
8736        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
8737     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
8738        raise OKL_API.G_EXCEPTION_ERROR;
8739     End If;
8740 
8741     l := px_csm_one_off_fee_tbl.COUNT;
8742     m := px_csm_stream_types_tbl.COUNT;
8743 
8744     FOR l_lne_rec1 in l_line_rec_csr1 ( p_chr_id, 'FEE' )
8745     LOOP
8746 
8747         IF( l_lne_rec1.fee_type = 'SECDEPOSIT' )  THEN
8748           --- sgorantl added for bug#4084201 --end
8749              OPEN  fee_strm_type_csr1  ( l_lne_rec1.id, 'FEE' );
8750              FETCH fee_strm_type_csr1 into l_fee_strm_type_rec1;
8751              CLOSE fee_strm_type_csr1;
8752           IF l_fee_strm_type_rec1.PRICING_NAME IS NOT NULL THEN
8753           --end
8754              OPEN  fee_strm_type_csr  ( l_lne_rec1.id, 'FEE' );
8755              FETCH fee_strm_type_csr into l_fee_strm_type_rec;
8756              CLOSE fee_strm_type_csr;
8757 
8758              l_level_type := l_fee_strm_type_rec.styp_id;
8759              l_strm_name  := l_fee_strm_type_rec.strm_name;
8760 
8761             --px_csm_lease_header.security_deposit_amount := l_lne_rec.amount;
8762             --px_csm_lease_header.date_sec_deposit_collected := l_lne_rec.start_date;
8763 
8764              print( l_api_name, 'requesting sec dep streams');
8765              m := m + 1;
8766              px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
8767              px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec1.id;
8768              --- sgorantl added for bug#4084201
8769              px_csm_stream_types_tbl(m).pricing_name   := l_fee_strm_type_rec1.PRICING_NAME;
8770              --end
8771              l := l + 1;
8772              px_csm_one_off_fee_tbl(l).description       := l_strm_name;
8773              px_csm_one_off_fee_tbl(l).fee_type          := 'SECDEPOSIT';
8774              px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
8775              px_csm_one_off_fee_tbl(l).kle_fee_id        := l_lne_rec1.id;
8776 
8777              OPEN  l_rl_csr1 ( 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_lne_rec1.id );
8778              FETCH l_rl_csr1 INTO l_rl_rec1;
8779              CLOSE l_rl_csr1;
8780              px_csm_one_off_fee_tbl(l).amount            := FND_NUMBER.canonical_to_number(nvl(l_rl_rec1.RULE_INFORMATION6,'0'));
8781              IF(l_rl_rec1.RULE_INFORMATION2 IS NULL or l_rl_rec1.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
8782                px_csm_one_off_fee_tbl(l).date_start        := l_lne_rec1.start_date ;
8783              ELSE
8784               px_csm_one_off_fee_tbl(l).date_start        := FND_DATE.canonical_to_date(l_rl_rec1.RULE_INFORMATION2);
8785              END IF;
8786 
8787              OPEN  c_deposit_date ( TO_NUMBER(p_chr_id) );
8788              FETCH c_deposit_date INTO l_c_deposit_date;
8789 	     CLOSE c_deposit_date;
8790 
8791              OPEN l_hdr_csr( p_chr_id );
8792              FETCH l_hdr_csr INTO l_hdr_rec;
8793              CLOSE l_hdr_csr;
8794 
8795              px_csm_one_off_fee_tbl(l).date_paid         := nvl(l_c_deposit_date.date_returned, l_hdr_rec.end_date);
8796 
8797              print( l_api_name, 'amnt='||to_char(px_csm_one_off_fee_tbl(l).amount)||
8798   	                        'dateStart='||to_char(px_csm_one_off_fee_tbl(l).date_paid));
8799 
8800         End If;
8801       END IF;
8802     END LOOP;
8803 
8804     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
8805 
8806     print( l_api_name, 'end', x_return_status);
8807 
8808     Exception
8809 
8810 	when OKL_API.G_EXCEPTION_ERROR then
8811 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8812 			p_api_name  => l_api_name,
8813 			p_pkg_name  => g_pkg_name,
8814 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
8815 			x_msg_count => x_msg_count,
8816 			x_msg_data  => x_msg_data,
8817 			p_api_type  => g_api_type);
8818 
8819                 If (fee_strm_type_csr1%ISOPEN) Then
8820                     CLOSE fee_strm_type_csr1;
8821                 End If;
8822 
8823 	when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
8824 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8825 
8826 			p_api_name  => l_api_name,
8827 
8828 			p_pkg_name  => g_pkg_name,
8829 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
8830 			x_msg_count => x_msg_count,
8831 			x_msg_data  => x_msg_data,
8832 			p_api_type  => g_api_type);
8833 
8834                 If (fee_strm_type_csr%ISOPEN) Then
8835                     CLOSE fee_strm_type_csr;
8836                 End If;
8837 
8838 	when OTHERS then
8839       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
8840 			p_api_name  => l_api_name,
8841 			p_pkg_name  => g_pkg_name,
8842 			p_exc_name  => 'OTHERS',
8843 			x_msg_count => x_msg_count,
8844 			x_msg_data  => x_msg_data,
8845 			p_api_type  => g_api_type);
8846 
8847                 If (fee_strm_type_csr%ISOPEN) Then
8848                     CLOSE fee_strm_type_csr;
8849                 End If;
8850 
8851                 If (fee_strm_type_csr1%ISOPEN) Then
8852                     CLOSE fee_strm_type_csr1;
8853                 End If;
8854 
8855   end extract_security_deposit;
8856 -- Start modification 11i10 release
8857 --------------------------------------------------------------------------------
8858 -- Start of Commnets
8859 -- Badrinath Kuchibholta
8860 -- Procedure Name       : extract_subsidized_lines
8861 -- Description          : extraction of subsidized lines for amortized
8862 --                        accounting methode code
8863 -- Business Rules       : extraction of subsidized lines for amortized
8864 --                        accounting methode code
8865 -- Parameters           : p_chr_id, p_csm_line_details_tbl and
8866 --                        px_csm_one_off_fee_tbl
8867 -- Version              : 1.0
8868 -- History              : BAKUCHIB  21-oct-2003
8869 --                      : BAKUCHIB  24-FEB-2004
8870 --                      : BAKUCHIB  19-MAR-2004
8871 -- End of Commnets
8872 --------------------------------------------------------------------------------
8873   PROCEDURE extract_subsidized_lines(p_api_version          IN  NUMBER,
8874                                      p_init_msg_list        IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
8875                                      x_return_status        OUT NOCOPY VARCHAR2,
8876                                      x_msg_count            OUT NOCOPY NUMBER,
8877                                      x_msg_data             OUT NOCOPY VARCHAR2,
8878                                      p_chr_id               IN NUMBER,
8879                                      px_csm_one_off_fee_tbl IN  OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type)
8880 
8881   AS
8882     l_api_name		CONSTANT VARCHAR2(30) := 'EXTRACT_SUBSIDIZED_LINES';
8883     l_csm_one_off_fee_tbl    okl_create_streams_pub.csm_one_off_fee_tbl_type := px_csm_one_off_fee_tbl;
8884     i                        BINARY_INTEGER         := 0;
8885     lv_acc_mtd_code          okl_subsidies_b.accounting_method_code%TYPE := NULL;
8886     lv_strm_desc             VARCHAR2(200);
8887     ln_sub_id                okc_k_lines_b.id%TYPE := NULL;
8888     ln_dummy                 NUMBER := 0;
8889     ln_cap_wos               okl_k_lines.capital_amount%TYPE := 0;
8890     ln_cap_amt               okl_k_lines.capital_amount%TYPE := 0;
8891     ln_cap_dis               okl_k_lines.capital_amount%TYPE := 0;
8892     l_asbv_tbl               asbv_tbl_type;
8893 	l_sty_id                 NUMBER;
8894 	l_dep_sty_id             NUMBER;
8895 	l_return_status          VARCHAR2(1);
8896     -- get Asset lines for the contract
8897     CURSOR get_asset_lines_csr (p_chr_id okc_k_lines_b.id%TYPE)
8898     IS
8899     SELECT cle.id,
8900            NVL(kle.date_funding,cle.start_date) date_funding
8901     FROM okc_k_lines_b cle,
8902          okl_k_lines kle,
8903          okc_line_styles_b lse
8904     WHERE cle.dnz_chr_id = p_chr_id
8905     AND cle.sts_code NOT IN ('HOLD', 'EXPIRED', 'CANCELLED','ABANDONED')
8906     AND cle.id = kle.id
8907     AND cle.lse_id = lse.id
8908     AND lse.lty_code = 'FREE_FORM1';
8909     -- get the accouting method to send only Amoritized Subsidy lines
8910     CURSOR get_acc_mth_code (p_line_id OKL_K_LINES.ID%TYPE)
8911     IS
8912     SELECT subb.accounting_method_code,
8913            cle.id
8914     FROM okl_subsidies_b subb,
8915          okc_k_lines_b cle_fin,
8916          okc_line_styles_b lse_fin,
8917          okc_k_lines_b cle,
8918          okl_k_lines kle,
8919          okc_line_styles_b lse
8920     WHERE cle.cle_id = p_line_id
8921     AND cle.id = kle.id
8922     AND cle.lse_id = lse.id
8923     AND lse.lty_code = 'SUBSIDY'
8924     AND subb.id = kle.subsidy_id
8925     AND cle_fin.id = cle.cle_id
8926     AND cle_fin.lse_id = lse_fin.id
8927     AND lse_fin.lty_code = 'FREE_FORM1';
8928     -- Validate the contract has Subsidy line
8929     CURSOR validate_sub_line (p_dnz_chr_id OKC_K_LINES_B.DNZ_CHR_ID%TYPE)
8930     IS
8931     SELECT 1
8932     FROM dual
8933     WHERE EXISTS (SELECT '1'
8934                   FROM okl_subsidies_b subb,
8935                        okc_k_lines_b cle_fin,
8936                        okc_line_styles_b lse_fin,
8937                        okc_k_lines_b cle,
8938                        okl_k_lines kle,
8939                        okc_line_styles_b lse
8940                   WHERE cle.dnz_chr_id = p_dnz_chr_id
8941                   AND cle.cle_id = cle_fin.id
8942                   AND cle.dnz_chr_id = cle_fin.dnz_chr_id
8943                   AND cle.id = kle.id
8944                   AND cle.lse_id = lse.id
8945                   AND lse.lty_code = 'SUBSIDY'
8946                   AND subb.id = kle.subsidy_id
8947                   AND cle_fin.id = cle.cle_id
8948                   AND cle_fin.lse_id = lse_fin.id
8949                   AND lse_fin.lty_code = 'FREE_FORM1');
8950     -- To get the Subsidy Income Accural Description
8951 	-- Changed for bug 4044089 by HKPATEL 12/02/2004
8952     CURSOR get_sub_income_strm_csr (p_dnz_chr_id IN okc_k_lines_b.dnz_chr_id%TYPE,
8953                                     p_sub_cle_id IN okc_k_lines_b.id%TYPE)
8954     IS
8955 
8956 	SELECT kle.sty_id
8957     FROM okl_k_lines kle,
8958 	     okc_k_lines_b cle,
8959 		 okc_line_styles_b lse,
8960          okl_subsidies_v sub
8961 
8962     WHERE cle.dnz_chr_id = p_dnz_chr_id
8963     AND cle.id = p_sub_cle_id
8964     AND cle.lse_id = lse.id
8965     AND lse.lty_code = 'SUBSIDY'
8966     AND cle.id = kle.id
8967     AND kle.subsidy_id = sub.id;
8968 	/*
8969     SELECT sty_inc.code strm_desc
8970     FROM okl_sgn_translations sgn,
8971          okl_strm_type_b sty_inc,
8972          okl_strm_type_b sty,
8973          okl_subsidies_v sub,
8974          okl_k_lines kle,
8975          okc_line_styles_b lse,
8976          okc_k_lines_b cle
8977     WHERE cle.dnz_chr_id = p_dnz_chr_id
8978     AND cle.id = p_sub_cle_id
8979     AND cle.lse_id = lse.id
8980     AND lse.lty_code = 'SUBSIDY'
8981     AND cle.id = kle.id
8982     AND TO_CHAR(kle.sty_id) = sgn.object1_id1
8983     AND sgn.object1_id1 = TO_CHAR(sty.id)
8984     AND TO_CHAR(sty_inc.id) = sgn.value
8985     AND sgn.jtot_object1_code = 'OKL_STRMTYP'
8986     AND kle.subsidy_id = sub.id;
8987 	*/
8988 	-- New code for bug 4044089 by HKPATEL 12/02/2004
8989     CURSOR get_strm_type_code (p_sty_id IN okl_strm_type_b.ID%TYPE)
8990     IS
8991 
8992 	SELECT code
8993     FROM okl_strm_type_b
8994     WHERE id = p_sty_id;
8995 
8996 
8997   BEGIN
8998     x_return_status := OKL_API.G_RET_STS_SUCCESS;
8999     -- Call start_activity to create savepoint, check compatibility
9000     -- and initialize message list
9001     x_return_status := OKL_API.START_ACTIVITY (
9002                                l_api_name
9003                                ,p_init_msg_list
9004                                ,'_PVT'
9005                                ,x_return_status);
9006     -- check if ac1tivity started successfully
9007     IF  (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9008       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9009     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9010       RAISE  OKL_API.G_EXCEPTION_ERROR;
9011     END IF;
9012     OPEN  validate_sub_line (p_dnz_chr_id => p_chr_id );
9013     FETCH validate_sub_line INTO ln_dummy;
9014     CLOSE validate_sub_line;
9015     IF ln_dummy = 1 THEN
9016       IF l_csm_one_off_fee_tbl.COUNT > 0 THEN
9017           -- Get the last record of each one off table
9018         i := l_csm_one_off_fee_tbl.LAST;
9019         -- Now scan thru the CSM line details table for the asset id
9020         -- and then call the OKL_SUBSIDY_PROCESS_PVT to get the total subsidized amount for an asset
9021         FOR get_asset_lines_rec IN get_asset_lines_csr (p_chr_id => p_chr_id) LOOP
9022           IF get_asset_lines_rec.id IS NOT NULL OR
9023              get_asset_lines_rec.id <> OKL_API.G_MISS_NUM THEN
9024             execute_formula(p_api_version   => p_api_version,
9025                             p_init_msg_list => p_init_msg_list,
9026                             x_return_status => x_return_status,
9027                             x_msg_count     => x_msg_count,
9028                             x_msg_data      => x_msg_data,
9029                             p_formula_name  => 'LINE_CAP_AMNT',
9030                             p_contract_id   => p_chr_id,
9031                             p_line_id       => get_asset_lines_rec.id,
9032                             x_value         => ln_cap_amt);
9033             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9034               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9035             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9036               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9037             END IF;
9038             execute_formula(p_api_version   => p_api_version,
9039                             p_init_msg_list => p_init_msg_list,
9040                             x_return_status => x_return_status,
9041                             x_msg_count     => x_msg_count,
9042                             x_msg_data      => x_msg_data,
9043                             p_formula_name  => 'LINE_DISCOUNT',
9044                             p_contract_id   => p_chr_id,
9045                             p_line_id       => get_asset_lines_rec.id,
9046                             x_value         => ln_cap_dis);
9047             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9048               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9049             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9050               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9051             END IF;
9052             -- We are doing the above since we need the cap amt for each line
9053             -- and since the cap amt is inclusive of the discount then
9054             -- we need to exclude the same and then use to send the same to
9055             -- pricing engine since we need to send the subsidyl in %
9056             -- This is applicable to NET accouting method of Subsidy only
9057 
9058             --Modified by kthiruva on 15-Mar-2006
9059             --Bug 4898772 - Start of Changes
9060             --As the subsidy is not being deducted in the formula LINE_CAP_AMNT, it does not have to be added again
9061             ln_cap_wos := ln_cap_amt;
9062             --Bug 4898772 - End of Changes
9063             FOR get_acc_mth_code_rec IN get_acc_mth_code (p_line_id => get_asset_lines_rec.id) LOOP
9064               i := i + 1;
9065               -- Changing the over loaded get_asset_subsidy_amont the tbl version
9066               okl_subsidy_process_pvt.get_asset_subsidy_amount(
9067                                       p_api_version    => p_api_version,
9068                                       p_init_msg_list  => p_init_msg_list,
9069                                       x_return_status  => x_return_status,
9070                                       x_msg_count      => x_msg_count,
9071                                       x_msg_data       => x_msg_data,
9072                                       p_asset_cle_id   => get_asset_lines_rec.id,
9073                                       x_asbv_tbl       => l_asbv_tbl);
9074               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9075                 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9076               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9077                 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9078               END IF;
9079               IF l_asbv_tbl.COUNT > 0 THEN
9080                 FOR k IN l_asbv_tbl.FIRST..l_asbv_tbl.LAST LOOP
9081                   IF get_acc_mth_code_rec.accounting_method_code = 'AMORTIZE' AND
9082                      l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
9083                     l_csm_one_off_fee_tbl(i).amount := l_asbv_tbl(k).amount;
9084                   ELSIF get_acc_mth_code_rec.accounting_method_code = 'NET' AND
9085                      l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
9086                     IF l_asbv_tbl(k).amount < ln_cap_wos THEN
9087                       l_csm_one_off_fee_tbl(i).rate := l_asbv_tbl(k).amount/ln_cap_wos;
9088                     END IF;
9089                   END IF;
9090                 END LOOP;
9091               ELSE
9092                 okl_api.set_message(
9093                         p_app_name      => G_APP_NAME,
9094                         p_msg_name      => G_LLA_NO_MATCHING_RECORD,
9095                         p_token1        => G_COL_NAME_TOKEN,
9096                         p_token1_value  => 'Subsidy Records');
9097                 x_return_status := OKL_API.G_RET_STS_ERROR;
9098                 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9099               END IF;
9100               l_csm_one_off_fee_tbl(i).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
9101               l_csm_one_off_fee_tbl(i).date_paid         := get_asset_lines_rec.date_funding;
9102               l_csm_one_off_fee_tbl(i).kle_asset_id      := get_asset_lines_rec.id;
9103               l_csm_one_off_fee_tbl(i).other_type_id     := get_acc_mth_code_rec.id;
9104               l_csm_one_off_fee_tbl(i).other_type        := G_SFE_TYPE_SUBSIDY;
9105 
9106               OPEN  get_sub_income_strm_csr(p_dnz_chr_id => p_chr_id,
9107                                             p_sub_cle_id => get_acc_mth_code_rec.id);
9108 	          -- Changed for bug 4044089 by HKPATEL 12/02/2004
9109               --FETCH get_sub_income_strm_csr INTO l_csm_one_off_fee_tbl(i).description;
9110 			  FETCH get_sub_income_strm_csr INTO l_sty_id;
9111               IF get_sub_income_strm_csr%NOTFOUND THEN
9112                 OKL_API.set_message(p_app_name      => G_APP_NAME,
9113                                     p_msg_name      => G_REQUIRED_VALUE,
9114                                     p_token1        => G_COL_NAME_TOKEN,
9115                                     p_token1_value  => 'Subsidy Income Stream Description');
9116                 x_return_status := OKL_API.G_RET_STS_ERROR;
9117                 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9118               END IF;
9119               CLOSE get_sub_income_strm_csr;
9120 
9121 	          -- New code for bug 4044089 by HKPATEL 12/02/2004
9122 			  OKL_STREAMS_UTIL.get_dependent_stream_type
9123                                (
9124                                 p_khr_id =>p_chr_id,
9125                                 p_primary_sty_id =>l_sty_id,
9126                                 p_dependent_sty_purpose=>'SUBSIDY_INCOME',
9127                                 x_return_status => l_return_status,
9128                                 x_dependent_sty_id=>l_dep_sty_id
9129 								);
9130               IF l_return_status = 'E' THEN
9131 			    l_return_status := 'S';
9132 			  END IF;
9133 
9134               IF l_dep_sty_id IS NOT NULL THEN
9135 			    l_sty_id := l_dep_sty_id;
9136 			  END IF;
9137 
9138               OPEN  get_strm_type_code(p_sty_id => l_sty_id);
9139               FETCH get_strm_type_code INTO l_csm_one_off_fee_tbl(i).description;
9140 			  CLOSE get_strm_type_code;
9141 	          -- New code for bug 4044089 by HKPATEL 12/02/2004	ends here
9142 
9143             END LOOP;
9144             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9145               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9146             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9147               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9148             END IF;
9149           ELSE
9150             OKL_API.set_message(p_app_name      => G_APP_NAME,
9151                                 p_msg_name      => G_REQUIRED_VALUE,
9152                                 p_token1        => G_COL_NAME_TOKEN,
9153                                 p_token1_value  => 'kle_asset_id');
9154             x_return_status := OKL_API.G_RET_STS_ERROR;
9155             EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9156           END IF;
9157         END LOOP;
9158         IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
9159           RAISE  OKL_API.G_EXCEPTION_ERROR;
9160         END IF;
9161       ELSE
9162         -- Since there are no One off tbl create one
9163         -- Now scan thru the CSM line details table for the asset id
9164         -- and then call the OKL_SUBSIDY_PROCESS_PVT to get the total subsidized amount for an asset
9165         FOR get_asset_lines_rec IN get_asset_lines_csr (p_chr_id => p_chr_id) LOOP
9166           IF get_asset_lines_rec.id IS NOT NULL OR
9167              get_asset_lines_rec.id <> OKL_API.G_MISS_NUM THEN
9168             execute_formula(p_api_version   => p_api_version,
9169                             p_init_msg_list => p_init_msg_list,
9170                             x_return_status => x_return_status,
9171                             x_msg_count     => x_msg_count,
9172                             x_msg_data      => x_msg_data,
9173                             p_formula_name  => 'LINE_CAP_AMNT',
9174                             p_contract_id   => p_chr_id,
9175                             p_line_id       => get_asset_lines_rec.id,
9176                             x_value         => ln_cap_amt);
9177             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9178               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9179             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9180               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9181             END IF;
9182             execute_formula(p_api_version   => p_api_version,
9183                             p_init_msg_list => p_init_msg_list,
9184                             x_return_status => x_return_status,
9185                             x_msg_count     => x_msg_count,
9186                             x_msg_data      => x_msg_data,
9187                             p_formula_name  => 'LINE_DISCOUNT',
9188                             p_contract_id   => p_chr_id,
9189                             p_line_id       => get_asset_lines_rec.id,
9190                             x_value         => ln_cap_dis);
9191             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9192               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9193             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9194               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9195             END IF;
9196             -- We are doing the above since we need the cap amt for each line
9197             -- and since the cap amt is inclusive of the discount then
9198             -- we need to exclude the same and then use to send the same to
9199             -- pricing engine since we need to send the subsidyl in %
9200             -- This is applicable to NET accouting method of Subsidy only
9201 
9202             --Modified by kthiruva on 15-Mar-2006
9203             --Bug 4898772 - Start of Changes
9204             --As the subsidy is not being deducted in the formula LINE_CAP_AMNT, it does not have to be added again
9205             ln_cap_wos := ln_cap_amt;
9206             --Bug 4898772 - End of Changes
9207 
9208             FOR get_acc_mth_code_rec IN get_acc_mth_code (p_line_id => get_asset_lines_rec.id) LOOP
9209               i := i + 1;
9210               -- Changing the over loaded get_asset_subsidy_amont the tbl version
9211               okl_subsidy_process_pvt.get_asset_subsidy_amount(
9212                                       p_api_version    => p_api_version,
9213                                       p_init_msg_list  => p_init_msg_list,
9214                                       x_return_status  => x_return_status,
9215                                       x_msg_count      => x_msg_count,
9216                                       x_msg_data       => x_msg_data,
9217                                       p_asset_cle_id   => get_asset_lines_rec.id,
9218                                       x_asbv_tbl       => l_asbv_tbl);
9219               IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9220                 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9221               ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9222                 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9223               END IF;
9224               IF l_asbv_tbl.COUNT > 0 THEN
9225                 FOR k IN l_asbv_tbl.FIRST..l_asbv_tbl.LAST LOOP
9226                   IF get_acc_mth_code_rec.accounting_method_code = 'AMORTIZE' AND
9227                      l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
9228                     l_csm_one_off_fee_tbl(i).amount := l_asbv_tbl(k).amount;
9229                   ELSIF get_acc_mth_code_rec.accounting_method_code = 'NET' AND
9230                      l_asbv_tbl(k).subsidy_cle_id = get_acc_mth_code_rec.id THEN
9231                     IF l_asbv_tbl(k).amount < ln_cap_wos THEN
9232                       l_csm_one_off_fee_tbl(i).rate := l_asbv_tbl(k).amount/ln_cap_wos;
9233                     END IF;
9234                   END IF;
9235                 END LOOP;
9236               ELSE
9237                 okl_api.set_message(
9238                         p_app_name      => G_APP_NAME,
9239                         p_msg_name      => G_LLA_NO_MATCHING_RECORD,
9240                         p_token1        => G_COL_NAME_TOKEN,
9241                         p_token1_value  => 'Subsidy Records');
9242                 x_return_status := OKL_API.G_RET_STS_ERROR;
9243                 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9244               END IF;
9245               l_csm_one_off_fee_tbl(i).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
9246               l_csm_one_off_fee_tbl(i).date_paid         := get_asset_lines_rec.date_funding;
9247               l_csm_one_off_fee_tbl(i).kle_asset_id      := get_asset_lines_rec.id;
9248               l_csm_one_off_fee_tbl(i).other_type_id     := get_acc_mth_code_rec.id;
9249               l_csm_one_off_fee_tbl(i).other_type        := G_SFE_TYPE_SUBSIDY;
9250               OPEN  get_sub_income_strm_csr(p_dnz_chr_id => p_chr_id,
9251                                             p_sub_cle_id => get_acc_mth_code_rec.id);
9252               --FETCH get_sub_income_strm_csr INTO l_csm_one_off_fee_tbl(i).description;
9253 			  FETCH get_sub_income_strm_csr INTO l_sty_id;
9254               IF get_sub_income_strm_csr%NOTFOUND THEN
9255                 OKL_API.set_message(p_app_name      => G_APP_NAME,
9256                                     p_msg_name      => G_REQUIRED_VALUE,
9257                                     p_token1        => G_COL_NAME_TOKEN,
9258                                     p_token1_value  => 'Subsidy Income Stream Description');
9259                 x_return_status := OKL_API.G_RET_STS_ERROR;
9260                 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9261               END IF;
9262               CLOSE get_sub_income_strm_csr;
9263 	          -- New code for bug 4044089 by HKPATEL 12/02/2004
9264 			  OKL_STREAMS_UTIL.get_dependent_stream_type
9265                                (
9266                                 p_khr_id =>p_chr_id,
9267                                 p_primary_sty_id =>l_sty_id,
9268                                 p_dependent_sty_purpose=>'SUBSIDY_INCOME',
9269                                 x_return_status => l_return_status,
9270                                 x_dependent_sty_id=>l_dep_sty_id
9271 								);
9272               IF l_return_status = 'E' THEN
9273 			    l_return_status := 'S';
9274 			  END IF;
9275 
9276               IF l_dep_sty_id IS NOT NULL THEN
9277 			    l_sty_id := l_dep_sty_id;
9278 			  END IF;
9279 
9280               OPEN  get_strm_type_code(p_sty_id => l_sty_id);
9281               FETCH get_strm_type_code INTO l_csm_one_off_fee_tbl(i).description;
9282 			  CLOSE get_strm_type_code;
9283 	          -- New code for bug 4044089 by HKPATEL 12/02/2004	ends here
9284 
9285             END LOOP;
9286             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
9287               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
9288             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
9289               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9290             END IF;
9291           ELSE
9292             OKL_API.set_message(p_app_name      => G_APP_NAME,
9293                                   p_msg_name      => G_REQUIRED_VALUE,
9294                                   p_token1        => G_COL_NAME_TOKEN,
9295                                   p_token1_value  => 'kle_asset_id');
9296               x_return_status := OKL_API.G_RET_STS_ERROR;
9297               EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
9298           END IF;
9299         END LOOP;
9300         IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
9301           RAISE  OKL_API.G_EXCEPTION_ERROR;
9302         END IF;
9303       END IF;
9304     END IF;
9305     px_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
9306     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
9307                            x_msg_data	 => x_msg_data);
9308   EXCEPTION
9309     WHEN OKL_API.G_EXCEPTION_ERROR THEN
9310       IF get_asset_lines_csr%ISOPEN THEN
9311         CLOSE get_asset_lines_csr;
9312       END IF;
9313       IF get_sub_income_strm_csr%ISOPEN THEN
9314         CLOSE get_sub_income_strm_csr;
9315       END IF;
9316       IF get_acc_mth_code%ISOPEN THEN
9317         CLOSE get_acc_mth_code;
9318       END IF;
9319       IF validate_sub_line%ISOPEN THEN
9320         CLOSE validate_sub_line;
9321       END IF;
9322       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9323                                  p_api_name  => l_api_name,
9324                                  p_pkg_name  => g_pkg_name,
9325                                  p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
9326                                  x_msg_count => x_msg_count,
9327                                  x_msg_data  => x_msg_data,
9328                                  p_api_type  => g_api_type);
9329     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
9330       IF get_asset_lines_csr%ISOPEN THEN
9331         CLOSE get_asset_lines_csr;
9332       END IF;
9333       IF get_sub_income_strm_csr%ISOPEN THEN
9334         CLOSE get_sub_income_strm_csr;
9335       END IF;
9336       IF get_acc_mth_code%ISOPEN THEN
9337         CLOSE get_acc_mth_code;
9338       END IF;
9339       IF validate_sub_line%ISOPEN THEN
9340         CLOSE validate_sub_line;
9341       END IF;
9342       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9343                                  p_api_name  => l_api_name,
9344                                  p_pkg_name  => g_pkg_name,
9345                                  p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
9346                                  x_msg_count => x_msg_count,
9347                                  x_msg_data  => x_msg_data,
9348                                  p_api_type  => g_api_type);
9349     WHEN OTHERS THEN
9350       IF get_asset_lines_csr%ISOPEN THEN
9351         CLOSE get_asset_lines_csr;
9352       END IF;
9353       IF get_sub_income_strm_csr%ISOPEN THEN
9354         CLOSE get_sub_income_strm_csr;
9355       END IF;
9356       IF get_acc_mth_code%ISOPEN THEN
9357         CLOSE get_acc_mth_code;
9358       END IF;
9359       IF validate_sub_line%ISOPEN THEN
9360         CLOSE validate_sub_line;
9361       END IF;
9362       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
9363                                  p_api_name  => l_api_name,
9364                                  p_pkg_name  => g_pkg_name,
9365                                  p_exc_name  => 'OTHERS',
9366                                  x_msg_count => x_msg_count,
9367                                  x_msg_data  => x_msg_data,
9368                                  p_api_type  => g_api_type);
9369   END extract_subsidized_lines;
9370  -- End modification 11i10 release
9371 -- Start modification 11i10 bakuchib
9372   Procedure extract_fee_lines( p_api_version IN  NUMBER,
9373                                p_chr_id  IN NUMBER,
9374                                p_deal_type IN VARCHAR2,
9375                                p_init_msg_list IN VARCHAR2 DEFAULT OKL_API.G_FALSE,
9376                                x_msg_count OUT NOCOPY NUMBER,
9377                                x_msg_data  OUT NOCOPY VARCHAR2,
9378                                x_return_status OUT NOCOPY VARCHAR2,
9379                                px_csm_one_off_fee_tbl  IN  OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
9380                                px_csm_periodic_expenses_tbl IN OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
9381                                px_csm_stream_types_tbl IN OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type)  AS
9382 
9383      l_api_name		CONSTANT VARCHAR2(30) := 'EXTRACT_FEE_LINES';
9384      l_api_version	CONSTANT NUMBER	      := 1;
9385      l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
9386      ln_level_cnt            NUMBER := 0;
9387      l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
9388      l_line_rec           l_line_rec_csr%ROWTYPE;
9389      l_lne_rec            l_line_rec_csr%ROWTYPE;
9390      l_rl_rec             l_rl_csr%ROWTYPE;
9391      r_rl_rec             l_rl_csr%ROWTYPE;
9392      l_rl_rec1            l_rl_csr1%ROWTYPE;
9393      l_rl_rec2            l_rl_csr2%ROWTYPE;
9394      l_rl_rec2_exp        l_rl_csr2%ROWTYPE;
9395      l_fee_strm_type_rec  fee_strm_type_csr%ROWTYPE;
9396      l_strm_name_rec      strm_name_csr%ROWTYPE;
9397 
9398      l_hdr_rec l_hdr_csr%ROWTYPE;
9399 
9400      l_level_type NUMBER;
9401      l_strm_name VARCHAR2(200);
9402      i BINARY_INTEGER := 0;
9403      j BINARY_INTEGER := 0;
9404      k BINARY_INTEGER := 0;
9405      l BINARY_INTEGER := 0;
9406      m BINARY_INTEGER := 0;
9407      idx BINARY_INTEGER := 0;
9408 	 --l_sty_id NUMBER;
9409 	 l_sty_id           strm_rec_type;
9410 	 l_pricing_name                VARCHAR2(40);
9411 
9412      l_passthru_percent NUMBER := 0;
9413      l_fee_type apps.OKL_K_LINES.FEE_TYPE%TYPE;
9414 
9415      --TYPE okl_strm_type_id_tbl_type IS TABLE OF okl_strm_type_b.ID%TYPE
9416      --INDEX BY BINARY_INTEGER;
9417      l_strm_type_id_tbl okl_strm_type_id_tbl_type;
9418 
9419 
9420      px_csm_lease_header okl_create_streams_pub.csm_lease_rec_type;
9421 
9422     /* ER# 5150038 */
9423     /* This cursor is used to fetch the linked asset lines when fees are associated to assets */
9424 	CURSOR l_linked_asset_line_csr (p_chr_d  NUMBER,
9425 	                                p_cle_id NUMBER)
9426 	IS
9427 	SELECT lse.lty_code,
9428 	       kle.fee_type,
9429 	       tl.name,
9430 	       tl.item_description,
9431 	       kle.id,
9432 	       kle.cle_id,
9433 	       kle.oec,
9434 	       kle.residual_code,
9435 	       kle.capital_amount,
9436 	       kle.initial_direct_cost,
9437 	       kle.delivered_date,
9438 	       kle.date_funding_required,
9439 	       kle.residual_grnty_amount,
9440 	       kle.date_funding,
9441 	       kle.residual_value,
9442 	       kle.date_delivery_expected,
9443 	       kle.orig_system_id1 old_line_id,
9444 	       kle.amount,
9445 	       kle.price_negotiated,
9446 	       kle.start_date,
9447 	       kle.end_date,
9448 	       kle.orig_system_id1,
9449 	       sts.ste_code,
9450 	       kle.tradein_amount,
9451 	       kle.date_funding_expected,
9452 	       kle.capital_reduction,
9453 	       kle.capitalize_down_payment_yn
9454 	  FROM okl_k_lines_full_v kle,
9455 	       okc_line_styles_b lse,
9456 	       okc_k_lines_tl tl,
9457 	       okc_statuses_b sts
9458 	 WHERE kle.lse_id = lse.id
9459 	   AND lse.lty_code = 'LINK_FEE_ASSET'
9460 	   AND tl.id = kle.id
9461 	   AND kle.cle_id = p_cle_id
9462 	   AND tl.language = userenv('LANG')
9463 	   AND kle.dnz_chr_id = p_chr_d
9464 	   AND sts.code = kle.sts_code
9465 	   AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
9466 
9467     l_linked_asset_line_rec l_linked_asset_line_csr%ROWTYPE;
9468     l_asset_association BOOLEAN := FALSE;
9469     l_expense_exists BOOLEAN := FALSE;
9470     l_ratio NUMBER := 0.0;
9471 
9472     CURSOR get_strm_name_fin_csr(p_chr_d  NUMBER,
9473                                  p_cle_id NUMBER )
9474     IS
9475     SELECT crl.rule_information2 amount,
9476            styt.name strm_name
9477     FROM okl_strm_type_tl styt,
9478          okc_k_items cim,
9479          okc_rule_groups_b crg,
9480          okc_rules_b crl
9481     WHERE crl.rgp_id = crg.id
9482     AND crg.RGD_CODE = 'LAFEXP'
9483     AND crl.RULE_INFORMATION_CATEGORY = 'LAFEXP'
9484     AND crg.dnz_chr_id = p_chr_d
9485     AND crg.cle_id = p_cle_id
9486     AND cim.dnz_chr_id = crg.dnz_chr_id
9487     AND cim.cle_id = crg.cle_id
9488     AND cim.object1_id1 = TO_CHAR(styt.id)
9489     AND cim.object1_id2 = '#'
9490     AND cim.jtot_object1_code = 'OKL_STRMTYP'
9491     AND styt.language = USERENV('lang');
9492 
9493 	-- Cursor put by HKPATEL for rollover fee associated with asset
9494 	CURSOR link_rollover_csr(cleId NUMBER)
9495 	IS
9496 	SELECT okc.id id,
9497        	   okc.chr_id chr_id,
9498        	   okc.cle_id cle_id,
9499        	   okc.dnz_chr_id dnz_chr_id,
9500        	   kle.capital_amount capital_amount,
9501        	   kle.amount amount,
9502        	   lse.lty_code lty_code
9503 	            -- srsreeni - Bug#5699923 - Added - Start
9504  	          , sts.ste_code
9505  	            -- srsreeni - Bug#5699923 - Added - End
9506 	FROM   okc_k_lines_b okc,
9507        	   okl_k_lines kle ,
9508        	   okc_line_styles_b lse
9509 	  ,okc_statuses_b sts
9510 	WHERE  okc.cle_id = cleId
9511     AND    okc.lse_id = lse.id
9512     AND    okc.id = kle.id
9513     AND    lty_code = 'LINK_FEE_ASSET'
9514     AND    sts.code=okc.sts_code;
9515 
9516     --Start of modification for Bug#3320656 BAKUCHIB Modified
9517     -- to get the absorbed fees amount
9518     -- gboomina BUG#4508077 changes start - selecting the fee purpose and stream type
9519     CURSOR get_strm_name_abs_csr(p_chr_d  NUMBER,
9520                                  p_cle_id NUMBER )
9521     IS
9522     SELECT kle.amount amount,
9523            styt.name strm_name,
9524 	   kle.fee_purpose_code fee_purpose_code,
9525            styt.id sty_id
9526     FROM okl_strm_type_tl styt,
9527          okc_k_items cim,
9528          okc_k_lines_b cle,
9529          okl_k_lines kle
9530     WHERE cle.dnz_chr_id = p_chr_d
9531     AND cle.id = p_cle_id
9532     AND cle.id = kle.id
9533     AND cim.dnz_chr_id = cle.dnz_chr_id
9534     AND cim.cle_id = cle.id
9535     AND cim.object1_id1 = TO_CHAR(styt.id)
9536     AND cim.object1_id2 = '#'
9537     AND cim.jtot_object1_code = 'OKL_STRMTYP'
9538     AND styt.language = USERENV('lang');
9539     --End of modification for Bug#3320656 BAKUCHIB Modified
9540     -- get the self referencing Line based rule information
9541     CURSOR l_rl_income_csr(rlgpId NUMBER,
9542                            rgcode okc_rule_groups_b.rgd_code%TYPE,
9543                            rlcat  okc_rules_b.rule_information_category%TYPE,
9544                            chrId  NUMBER,
9545                             cleId  NUMBER )
9546     IS
9547 --srsreeni Bug5890437 start
9548 -- Start of modification for Bug#3322910 BAKUCHIB Modified
9549     SELECT SUM(TO_NUMBER(NVL(crl.rule_information3,1))) level_cnt
9550 -- End of modification for Bug#3322910 BAKUCHIB Modified
9551 --srsreeni Bug5890437 end
9552     FROM okc_rule_groups_b crg,
9553          okc_rules_b crl
9554     WHERE crl.rgp_id = crg.id
9555     AND crl.object2_id1 = rlgpId
9556     AND crg.rgd_code = rgcode
9557     AND crl.rule_information_category = rlcat
9558     AND crg.dnz_chr_id = chrId
9559     AND crg.cle_id = cleId
9560     ORDER BY FND_DATE.canonical_to_date(crl.rule_information2);
9561 
9562 	-- nikshah -- Bug # 5484903 Fixed
9563         -- Removed CURSOR c_finance_strm_csr (payment_type_id NUMBER, p_chr_id NUMBER)
9564 
9565     --mansrini : Code for VR build
9566     CURSOR  get_day_conv_on_contrct
9567     IS
9568     SELECT
9569 --Added by srsreeni for bug6076113
9570 --            rate_params.days_in_a_year_code,
9571 --            DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
9572             DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
9573             rate_params.days_in_a_year_code
9574 --srsreeni bug6076113 ends
9575     FROM    okl_k_rate_params rate_params
9576     WHERE   khr_id = p_chr_id;
9577 
9578     CURSOR  get_day_conv_on_sgt
9579     IS
9580     SELECT  DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
9581             gts.days_in_yr_code
9582     FROM
9583             okl_k_headers khr,
9584             okl_products_v pdt,
9585             okl_ae_tmpt_sets_v aes,
9586             OKL_ST_GEN_TMPT_SETS gts
9587     WHERE
9588             khr.pdt_id = pdt.id AND
9589             pdt.aes_id = aes.id AND
9590             aes.gts_id = gts.id AND
9591             khr.id  = p_chr_id;
9592 
9593     l_strm_name_fin_rec          get_strm_name_fin_csr%ROWTYPE;
9594     --Start of modification for Bug#3320656 BAKUCHIB Modified
9595     l_strm_name_abs_rec          get_strm_name_abs_csr%ROWTYPE;
9596     l_strmid_rec         l_strmid_csr%ROWTYPE;
9597     --End of modification for Bug#3320656 BAKUCHIB Modified
9598 	   -- Rollover modification by HKPATEL
9599 	   link_rollover_rec    link_rollover_csr%ROWTYPE;
9600    	-- Rollover modification ends here
9601     l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
9602     l_days_in_yr_code  OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
9603 
9604     -- gboomina Bug 4746368 - Added - Start
9605     -- Condition added to the cursor by kthiruva on 09-Feb-2006
9606     --Only disbursement and processing fee details specified in Base Term should be picked
9607     --Bug 4746189 - Start of Changes
9608     Cursor c_pass ( khrId NUMBER, cleId NUMBER) IS
9609     select vDtls.DISBURSEMENT_BASIS,
9610            vDtls.DISBURSEMENT_FIXED_AMOUNT,
9611        	   vDtls.DISBURSEMENT_PERCENT,
9612     	      vDtls.PROCESSING_FEE_BASIS,
9613     	      vDtls.PROCESSING_FEE_FIXED_AMOUNT,
9614        	   vDtls.PROCESSING_FEE_PERCENT
9615     from okl_party_payment_hdr vHdr,
9616          okl_party_payment_dtls vDtls
9617     where vDtls.payment_hdr_id = vHdr.id
9618       and vHdr.CLE_ID = cleId
9619       and vHdr.DNZ_CHR_ID = khrId
9620       and vHdr.PASSTHRU_TERM = 'BASE';
9621     --Bug 4746189 - End of Changes
9622 
9623     r_pass c_pass%ROWTYPE;
9624 
9625     l_disbursement_amount NUMBER;
9626     l_pass_thru_amount NUMBER;
9627     l_pass_thru_pro_fee NUMBER;
9628     -- gboomina Bug 4746368 - Added - End
9629 
9630   Begin
9631     print( l_api_name, 'begin');
9632     x_return_status := OKL_API.START_ACTIVITY(
9633 			p_api_name      => l_api_name,
9634 			p_pkg_name      => g_pkg_name,
9635 			p_init_msg_list => p_init_msg_list,
9636 			l_api_version   => l_api_version,
9637 			p_api_version   => p_api_version,
9638 			p_api_type      => G_API_TYPE,
9639 			x_return_status => x_return_status);
9640     -- check if activity started successfully
9641     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
9642        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9643     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
9644        raise OKL_API.G_EXCEPTION_ERROR;
9645     End If;
9646 
9647     --get day convention info : mansrini
9648     OPEN  get_day_conv_on_contrct;
9649     FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
9650     CLOSE get_day_conv_on_contrct;
9651 
9652 --Added by srsreeni for bug6076113
9653 --    IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
9654     IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
9655 --srsreeni bug6076113 ends
9656     THEN
9657       OPEN  get_day_conv_on_sgt;
9658       FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
9659       CLOSE get_day_conv_on_sgt;
9660     END IF;
9661 
9662 	OPEN l_hdr_pdt_csr(p_chr_id);
9663 	FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
9664 	CLOSE l_hdr_pdt_csr;
9665 
9666     OPEN  l_hdr_csr(p_chr_id);
9667     FETCH l_hdr_csr into l_hdr_rec;
9668     IF l_hdr_csr%NOTFOUND THEN
9669        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
9670     END IF;
9671     CLOSE l_hdr_csr;
9672     i := 0; j := 0;
9673     k := px_csm_periodic_expenses_tbl.COUNT;
9674     l := px_csm_one_off_fee_tbl.COUNT;
9675     m := px_csm_stream_types_tbl.COUNT;
9676     FOR l_lne_rec in l_line_rec_csr ( p_chr_id, 'FEE' ) LOOP
9677 
9678       OPEN  fee_strm_type_csr  ( l_lne_rec.id, 'FEE' );
9679       FETCH fee_strm_type_csr into l_fee_strm_type_rec;
9680       CLOSE fee_strm_type_csr;
9681       l_level_type := l_fee_strm_type_rec.styp_id;
9682       l_strm_name  := l_fee_strm_type_rec.strm_name;
9683       print( l_api_name, 'Fee Line='||l_strm_name);
9684 
9685       l_fee_type := nvl(l_lne_rec.fee_type, 'NOFEETYPE');
9686       If (( l_fee_type = 'PASSTHROUGH' ) AND (l_passthru_percent < 0.0)) Then
9687         okl_api.set_message(
9688                 p_app_name => G_APP_NAME,
9689                 p_msg_name => 'OKL_LLA_NEG_PASSTHRU');
9690         raise OKL_API.G_EXCEPTION_ERROR;
9691    	  End If;
9692 
9693       print( l_api_name, 'fee type'||l_fee_type);
9694       If (( l_fee_strm_type_rec.capitalize_yn = 'Y') OR ( l_fee_type = 'CAPITALIZED' )) Then
9695       /*      The fee amounts are already prorated into
9696        *      asset costs. This is true only for
9697        *      capitalized fees.
9698        */
9699 	       NULL;
9700   	   Elsif ( l_fee_type = 'PASSTHROUGH' ) Then
9701 
9702         /* ER# 5150038 */
9703         /* Getting the linked asset line for the EXPENSE or MISCELLANEOUS fee.
9704          * If there is an asset association, this cursor will return those linked asset association.
9705          * In the case of MISCELLANEOUS fee, only if the relevant payment is also associated to an asset,
9706          * it is considered as an asset association.
9707          */
9708         OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
9709         FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
9710 
9711 		OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
9712 		FETCH l_rl_csr2 INTO l_rl_rec2;
9713 
9714         IF l_linked_asset_line_csr%FOUND AND
9715            l_rl_csr2%FOUND
9716         THEN
9717         	l_asset_association := TRUE;
9718         ELSE
9719         	l_asset_association := FALSE;
9720         END IF;
9721         CLOSE l_linked_asset_line_csr;
9722         CLOSE l_rl_csr2;
9723 
9724 		IF l_asset_association THEN
9725 
9726 			FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id) LOOP
9727 
9728 				/* Calculate the ratio */
9729 				l_ratio := l_linked_asset_line_rec.amount / l_lne_rec.amount;
9730 
9731 				-- gboomina Bug 4746368 - Start
9732 				OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
9733 				FETCH l_rl_csr2 INTO l_rl_rec2;
9734 				IF l_rl_csr2%FOUND THEN
9735 				  idx := 0;
9736 				  FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_linked_asset_line_rec.id ) LOOP
9737 
9738 					  -- instead of l_rl_csr1 cursor, using c_pass cursor to calculate pass thru amount
9739 					  l_disbursement_amount := 0;
9740 					  l_pass_thru_amount := 0;
9741 					  l_pass_thru_pro_fee:= 0;
9742 
9743 					  FOR r_pass in c_pass(TO_NUMBER(p_chr_id), l_lne_rec.id )
9744 					  LOOP
9745 						If ( r_pass.disbursement_basis = 'AMOUNT' ) Then
9746 						  /* Calculate the portion of the disbursement for the current linked asset */
9747 						  l_disbursement_amount := NVL(r_pass.disbursement_fixed_amount,0) * l_ratio;
9748 
9749 						  /* Prorate the disbursement amount into each level amount */
9750 						  IF l_rl_rec.rule_information8 IS NOT NULL THEN
9751 						    l_disbursement_amount := l_disbursement_amount *
9752 						                             TO_NUMBER(l_rl_rec.rule_information8) /
9753 						                             l_linked_asset_line_rec.amount;
9754 						  ELSE
9755 						    l_disbursement_amount := l_disbursement_amount *
9756 						                             TO_NUMBER(l_rl_rec.rule_information6) /
9757 						                             l_linked_asset_line_rec.amount;
9758 						  END IF;
9759 
9760 						Else
9761 						  l_disbursement_amount := NVL(l_rl_rec.RULE_INFORMATION6,0) * NVL(r_pass.disbursement_percent,0) / 100 ;
9762 						End If;
9763 
9764 						If ( r_pass.processing_fee_basis = 'AMOUNT' ) Then
9765 						    /* Calculate the portion of the processing fee for the current linked asset */
9766 							l_pass_thru_pro_fee := NVL(r_pass.processing_fee_fixed_amount,0) * l_ratio;
9767 
9768 						    /* Prorate the disbursement amount into each level amount */
9769 						    IF l_rl_rec.rule_information8 IS NOT NULL THEN
9770 						      l_pass_thru_pro_fee := l_pass_thru_pro_fee *
9771 						                               TO_NUMBER(l_rl_rec.rule_information8) /
9772 						                               l_linked_asset_line_rec.amount;
9773 						    ELSE
9774 						      l_pass_thru_pro_fee := l_pass_thru_pro_fee *
9775 						                             TO_NUMBER(l_rl_rec.rule_information6) /
9776 						                             l_linked_asset_line_rec.amount;
9777 						    END IF;
9778 						Else
9779 						  l_pass_thru_pro_fee := l_disbursement_amount * r_pass.processing_fee_percent/100;
9780 						End If;
9781 						l_pass_thru_amount := l_pass_thru_amount + l_disbursement_amount - l_pass_thru_pro_fee;
9782 					  END LOOP;
9783 					  -- gboomina Bug 4746189 - End
9784 					  IF ( l_pass_thru_amount <> NVL(l_rl_rec.RULE_INFORMATION6,0)) Then
9785 						-- Start of Bug#2757289 modification
9786 						IF (l_rl_rec.rule_information7 IS NOT NULL OR
9787 						   l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
9788 						   (l_rl_rec.rule_information8 IS NOT NULL OR
9789 							l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
9790 						  k := k + 1;
9791 						  idx := idx + 1;
9792 						  px_csm_periodic_expenses_tbl(k).level_index_number := idx;
9793 						  px_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
9794 						  px_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
9795 						  px_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
9796 						  px_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
9797 						  px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
9798 						  px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_linked_asset_line_rec.id;
9799 						  px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
9800 						  px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9801 						  px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
9802 						  px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9803 						  px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9804 
9805 						  IF(l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
9806 							px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
9807 						  END IF;
9808 						  -- End of Bug#2757289 modification
9809 
9810 						  -- Added by kthiruva on 29-Dec-2005.
9811 						  -- The value of the Advance and Arrears flag needs to be obtained from the rule information
9812 						  -- Bug 4915938 - Start of Changes
9813 						  IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
9814 							px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
9815 						  ELSE
9816 							px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9817 						  END IF;
9818 						  -- Bug 4915938 - End of Changes
9819 
9820 						ELSIF (l_rl_rec.rule_information7 IS NULL OR
9821 							   l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
9822 							  (l_rl_rec.rule_information8 IS NULL OR
9823 							   l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
9824 						  k := k + 1;
9825 						  idx := idx + 1;
9826 						  px_csm_periodic_expenses_tbl(k).level_index_number := idx;
9827 						  px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
9828 						  px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
9829 						  px_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
9830 						  px_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
9831 						  -- gboomina Bug 4746368 - Modified amount calculation - Start
9832 						  px_csm_periodic_expenses_tbl(k).amount             := px_csm_periodic_expenses_tbl(k).amount - l_pass_thru_amount;
9833 						  -- gboomina Bug 4746368 - Modified amount calculation - End
9834 						  px_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
9835 						  px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9836 						  px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_linked_asset_line_rec.id;
9837 						  px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
9838 						  px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9839 						  px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9840 
9841 						  IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
9842 							px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
9843 						  END IF;
9844 						  IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
9845 							px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
9846 						  ELSE
9847 							px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9848 						  END IF;
9849 						  IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
9850 							px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
9851 						  ELSE
9852 							px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
9853 						  END IF;
9854 						END IF;
9855 					  END IF;
9856 				  END LOOP;-- end-loop: l_rl_rec
9857 				Else -- this condition is never reached.
9858 				  k := k + 1;
9859 					 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
9860 					 px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
9861 					 px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
9862 					 px_csm_periodic_expenses_tbl(k).period             := 'M';
9863 				  -- gboomina Bug 4746368 - Modified amount calculation - Start
9864 					 px_csm_periodic_expenses_tbl(k).amount             := l_linked_asset_line_rec.amount - l_pass_thru_amount;
9865 				  -- gboomina Bug 4746368 - Modified amount calculation - End
9866 					 px_csm_periodic_expenses_tbl(k).number_of_periods  := 1;
9867 					 px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9868 					 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9869 					 px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_linked_asset_line_rec.id;
9870 				  px_csm_periodic_expenses_tbl(k).date_start         := l_linked_asset_line_rec.start_date;
9871 				  px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
9872 				  px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9873 				  px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9874 
9875 				  print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
9876 								   '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
9877 										 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
9878 				   End If;
9879 				CLOSE l_rl_csr2;
9880 			END LOOP; -- end-for-loop: l_linked_asset_line_rec
9881 		ELSE
9882 			-- gboomina Bug 4746368 - Start
9883 			OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
9884 			FETCH l_rl_csr2 INTO l_rl_rec2;
9885 			IF l_rl_csr2%FOUND THEN
9886 			  idx := 0;
9887 			  FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_lne_rec.id ) LOOP
9888 
9889 			  -- instead of l_rl_csr1 cursor, using c_pass cursor to calculate pass thru amount
9890 			  l_disbursement_amount := 0;
9891 			  l_pass_thru_amount := 0;
9892 			  l_pass_thru_pro_fee:= 0;
9893 
9894 			  FOR r_pass in c_pass(TO_NUMBER(p_chr_id), l_lne_rec.id )
9895 			  LOOP
9896 				If ( r_pass.disbursement_basis = 'AMOUNT' ) Then
9897 				  l_disbursement_amount := NVL(r_pass.disbursement_fixed_amount,0);
9898 				Else
9899 				  l_disbursement_amount := NVL(l_rl_rec.RULE_INFORMATION6,0) * NVL(r_pass.disbursement_percent,0) / 100 ;
9900 				End If;
9901 				If ( r_pass.processing_fee_basis = 'AMOUNT' ) Then
9902 					l_pass_thru_pro_fee := r_pass.processing_fee_fixed_amount;
9903 				Else
9904 				  l_pass_thru_pro_fee := l_disbursement_amount * r_pass.processing_fee_percent/100;
9905 				End If;
9906 				l_pass_thru_amount := l_pass_thru_amount + l_disbursement_amount - l_pass_thru_pro_fee;
9907 			  END LOOP;
9908 			  -- gboomina Bug 4746189 - End
9909 			  IF ( l_pass_thru_amount <> NVL(l_rl_rec.RULE_INFORMATION6,0)) Then
9910 				-- Start of Bug#2757289 modification
9911 				IF (l_rl_rec.rule_information7 IS NOT NULL OR
9912 				   l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
9913 				   (l_rl_rec.rule_information8 IS NOT NULL OR
9914 					l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
9915 				  k := k + 1;
9916 				  idx := idx + 1;
9917 				  px_csm_periodic_expenses_tbl(k).level_index_number := idx;
9918 				  px_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
9919 				  px_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
9920 				  px_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
9921 				  px_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
9922 				  px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
9923 				  px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
9924 				  px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
9925 				  px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9926 				  px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
9927 				  px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9928 				  px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9929 
9930 				  IF(l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
9931 					px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
9932 				  END IF;
9933 				  -- End of Bug#2757289 modification
9934 
9935 				  -- Added by kthiruva on 29-Dec-2005.
9936 				  -- The value of the Advance and Arrears flag needs to be obtained from the rule information
9937 				  -- Bug 4915938 - Start of Changes
9938 				  IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
9939 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
9940 				  ELSE
9941 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9942 				  END IF;
9943 				  -- Bug 4915938 - End of Changes
9944 
9945 				ELSIF (l_rl_rec.rule_information7 IS NULL OR
9946 					   l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
9947 					  (l_rl_rec.rule_information8 IS NULL OR
9948 					   l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
9949 				  k := k + 1;
9950 				  idx := idx + 1;
9951 				  px_csm_periodic_expenses_tbl(k).level_index_number := idx;
9952 				  px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
9953 				  px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
9954 				  px_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
9955 				  px_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
9956 				  -- gboomina Bug 4746368 - Modified amount calculation - Start
9957 				  px_csm_periodic_expenses_tbl(k).amount             := px_csm_periodic_expenses_tbl(k).amount - l_pass_thru_amount;
9958 				  -- gboomina Bug 4746368 - Modified amount calculation - End
9959 				  px_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
9960 				  px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9961 				  px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
9962 				  px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
9963 				  px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9964 				  px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9965 
9966 				  IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
9967 					px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
9968 				  END IF;
9969 				  IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
9970 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
9971 				  ELSE
9972 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9973 				  END IF;
9974 				  IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
9975 					px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
9976 				  ELSE
9977 					px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
9978 				  END IF;
9979 				END IF;
9980 			  END IF;
9981 			  END LOOP;
9982 			Else -- this condition is never reached.
9983 			  k := k + 1;
9984 				 px_csm_periodic_expenses_tbl(k).level_index_number := 1;
9985 				 px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
9986 				 px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
9987 				 px_csm_periodic_expenses_tbl(k).period             := 'M';
9988 			  -- gboomina Bug 4746368 - Modified amount calculation - Start
9989 				 px_csm_periodic_expenses_tbl(k).amount             := l_lne_rec.amount - l_pass_thru_amount;
9990 			  -- gboomina Bug 4746368 - Modified amount calculation - End
9991 				 px_csm_periodic_expenses_tbl(k).number_of_periods  := 1;
9992 				 px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
9993 				 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
9994 				 px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
9995 			  px_csm_periodic_expenses_tbl(k).date_start         := l_lne_rec.start_date;
9996 			  px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
9997 			  px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
9998 			  px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
9999 
10000 			  print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
10001 							   '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
10002 									 'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
10003 			   End If;
10004 			CLOSE l_rl_csr2;
10005 		 END IF; -- end-if l_asset_association
10006        Elsif (( l_fee_type = 'EXPENSE' )OR ( l_fee_type = 'MISCELLANEOUS' )) THEN
10007         /* ER# 5150038 */
10008         /* Getting the linked asset line for the EXPENSE or MISCELLANEOUS fee.
10009          * If there is an asset association, this cursor will return those linked asset association.
10010          * In the case of MISCELLANEOUS fee, only if the relevant payment is also associated to an asset,
10011          * it is considered as an asset association.
10012          */
10013         OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
10014         FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
10015 
10016 		OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
10017 		FETCH l_rl_csr2 INTO l_rl_rec2;
10018 
10019         IF l_linked_asset_line_csr%FOUND AND
10020            ((l_rl_csr2%FOUND AND l_fee_type = 'MISCELLANEOUS') OR
10021             l_fee_type = 'EXPENSE')
10022         THEN
10023         	l_asset_association := TRUE;
10024         ELSE
10025         	l_asset_association := FALSE;
10026         END IF;
10027         CLOSE l_linked_asset_line_csr;
10028         CLOSE l_rl_csr2;
10029 
10030 		OPEN  l_rl_csr2 ( 'LAFEXP', 'LAFEXP', TO_NUMBER(p_chr_id), l_lne_rec.id );
10031 		FETCH l_rl_csr2 INTO l_rl_rec2_exp;
10032 	    IF l_rl_csr2%FOUND THEN
10033 			l_expense_exists := TRUE;
10034 		ELSE
10035 			l_expense_exists := FALSE;
10036 		END IF;
10037 		CLOSE l_rl_csr2;
10038 
10039         IF l_expense_exists THEN
10040 			OPEN  l_rl_csr1 ( 'LAFEXP', 'LAFREQ', TO_NUMBER(p_chr_id), l_lne_rec.id );
10041 			FETCH l_rl_csr1 INTO l_rl_rec1;
10042 			CLOSE l_rl_csr1;
10043 		END IF;
10044 
10045 		IF l_asset_association THEN
10046 			FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id)
10047 			LOOP
10048 			     /* IDC amount needs to be prorated based on the fee amounts allocated to each assets
10049 			      * Hence the formula of the ratio calculation = (fee amounts allocated to each assets) / (total fee amount)
10050 			      * fee amounts allocated to each assets = l_linked_asset_line_rec.amount
10051 			      * total fee amount = l_lne_rec.amount
10052 			      * Hence the IDC amount to be prorated = (IDC amount) * ratio
10053 			      */
10054 			     l_ratio := l_linked_asset_line_rec.amount / l_lne_rec.amount;
10055 
10056 				 If ( nvl(l_lne_rec.initial_direct_cost,0) > 0.0 ) Then
10057 				   l := l + 1;
10058 				   px_csm_one_off_fee_tbl(l).description       := l_fee_strm_type_rec.strm_name;
10059 				   px_csm_one_off_fee_tbl(l).fee_type          := l_fee_type;
10060 				   px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10061 				   px_csm_one_off_fee_tbl(l).amount            := l_lne_rec.initial_direct_cost * l_ratio;
10062 				   px_csm_one_off_fee_tbl(l).date_paid         := l_linked_asset_line_rec.start_date;
10063 				   px_csm_one_off_fee_tbl(l).kle_fee_id        := l_linked_asset_line_rec.id; -- Assign linked fee asset line id
10064 				   -- gboomina BUG#4508077 IDC changes start
10065 				   px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
10066 				   -- gboomina BUG#4508077 IDC changes end
10067 				End If;
10068 				   --Added by kthiruva on 15-Feb-2006
10069 				   -- Streams for the fee need to be retrieved if Pricing Name is setup for the same
10070 				   --Bug 4930293 - Start of Changes
10071 --Added by srsreeni for bug5841892
10072 --				   m := m + 1;
10073 --				   px_csm_stream_types_tbl(m).stream_type_id := l_fee_strm_type_rec.styp_id;
10074 --bug5841892 end of changes
10075         --vdamerla Bug6149951 start
10076         IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
10077 				   get_primary_pricing_name
10078 					(
10079 					 p_khr_id =>p_chr_id,
10080 					 p_sty_id =>l_fee_strm_type_rec.styp_id,
10081 					 x_return_status =>x_return_status,
10082 					 x_primary_pricing_name	=>l_pricing_name
10083 					 );
10084 --Added by srsreeni for bug5841892
10085 			 	if l_pricing_name is not null then
10086 				   m := m + 1;
10087 				   px_csm_stream_types_tbl(m).stream_type_id := l_fee_strm_type_rec.styp_id;
10088 				   px_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
10089 				   px_csm_stream_types_tbl(m).kle_fee_id     := l_linked_asset_line_rec.id; -- Assign linked fee asset line id
10090 				end if;
10091 --bug5841892 end of changes
10092 				   --Bug 4930293 - End of Changes
10093 
10094 			  -- gboomina BUG#4508077 IDC changes start
10095 			  -- get dependent streams for the reporting product
10096 				IF(g_rep_req_yn = 'Y') THEN
10097 
10098 				get_dependent_stream_types
10099 					   (
10100 						p_khr_id => p_chr_id,
10101 						p_pdt_id => l_pdt_id_rec.report_pdt_id,
10102 						p_primary_sty_id => l_fee_strm_type_rec.styp_id,
10103 						x_return_status => x_return_status,
10104 						x_dependent_sty_id => l_strm_type_id_tbl
10105 					   );
10106 					   IF(x_return_status = 'E') THEN
10107 						 x_return_status := 'S';
10108 					   END IF;
10109 				-- get dependent streams for the main product
10110 					 ELSE
10111 					   get_dependent_stream_types
10112 					   (
10113 						p_khr_id => p_chr_id,
10114 						p_primary_sty_id => l_fee_strm_type_rec.styp_id,
10115 						x_return_status => x_return_status,
10116 						x_dependent_sty_id =>  l_strm_type_id_tbl
10117 					   );
10118 					   IF(x_return_status = 'E') THEN
10119 						 x_return_status := 'S';
10120 					   END IF;
10121 
10122 					 END IF; -- end of dependent streams block
10123 			 -- populate the dependent stream types
10124 			 IF l_strm_type_id_tbl.COUNT > 0 THEN
10125 					  FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
10126 						 m := m + 1;
10127 						 --Modified by kthiruva on 21-Oct-2005
10128 						 --Bug 4690770 - Start of Changes
10129 						 --l_strm_type_id_tbl should be referenced, not l_sty_id during the assignments
10130 				 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
10131 				 px_csm_stream_types_tbl(m).pricing_name   := l_strm_type_id_tbl(i).pricing_name;
10132 						 px_csm_stream_types_tbl(m).kle_fee_id     := l_linked_asset_line_rec.id;-- Assign linked fee asset line id
10133 						 --Bug 4690770 - End of Changes
10134 					  END LOOP;
10135 			 END IF; -- end of populate dependent stream types
10136 		 -- gboomina BUG#4508077 IDC changes end
10137      END IF;--vdamerla Bug6149951 ends
10138 
10139 			 IF l_expense_exists THEN
10140 				-- sjalasut, bug 4872258. assumption is now -1 instead of zero. START
10141 				IF  NVL(l_lne_rec.amount,-1) <> NVL(l_lne_rec.initial_direct_cost,-1) THEN
10142 					-- sjalasut, bug 4872258.  assumption is now -1 instead of zero. END
10143 					k := k + 1;
10144 					px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10145 					px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10146 					px_csm_periodic_expenses_tbl(k).description        := l_fee_strm_type_rec.strm_name;
10147 					px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10148 				  	px_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION2,'0'));
10149 					px_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION1, l_hdr_rec.term));
10150 					px_csm_periodic_expenses_tbl(k).amount             := px_csm_periodic_expenses_tbl(k).amount - (NVL(l_lne_rec.initial_direct_cost,0)/px_csm_periodic_expenses_tbl(k).number_of_periods);
10151 					px_csm_periodic_expenses_tbl(k).amount             := px_csm_periodic_expenses_tbl(k).amount * l_ratio;
10152 					px_csm_periodic_expenses_tbl(k).period             := l_rl_rec1.object1_id1;
10153 					px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10154 					px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_linked_asset_line_rec.id;
10155 					px_csm_periodic_expenses_tbl(k).date_start         := l_linked_asset_line_rec.start_date;
10156 					px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10157 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10158 					px_csm_periodic_expenses_tbl(k).days_in_month     := l_days_in_month_code;
10159 					px_csm_periodic_expenses_tbl(k).days_in_year      := l_days_in_yr_code;
10160 				END IF;
10161          	Elsif ( l_fee_type <> 'MISCELLANEOUS' ) Then
10162                 --m := m + 1;
10163                 --px_csm_stream_types_tbl(m).stream_type_id := l_fee_strm_type_rec.styp_id;
10164                 --px_csm_stream_types_tbl(m).kle_fee_id     := l_linked_asset_line_rec.id;
10165 				k := k + 1;
10166 				px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10167 				px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10168 				px_csm_periodic_expenses_tbl(k).description        := l_fee_strm_type_rec.strm_name;
10169 				px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10170 				px_csm_periodic_expenses_tbl(k).amount             := nvl(l_lne_rec.amount,0)-nvl(l_lne_rec.initial_direct_cost,0);
10171 				px_csm_periodic_expenses_tbl(k).amount             := px_csm_periodic_expenses_tbl(k).amount * l_ratio;
10172 				px_csm_periodic_expenses_tbl(k).number_of_periods  := 1;
10173 				px_csm_periodic_expenses_tbl(k).period             := 'M';
10174 				px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10175 				px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_linked_asset_line_rec.id;
10176 				px_csm_periodic_expenses_tbl(k).date_start         := l_linked_asset_line_rec.start_date;
10177                 px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10178                 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10179                 px_csm_periodic_expenses_tbl(k).days_in_month      := l_days_in_month_code;
10180                 px_csm_periodic_expenses_tbl(k).days_in_year       := l_days_in_yr_code;
10181 
10182                 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
10183 		                   '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
10184 				   'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
10185 
10186 		    End If; -- end-if: l_expense_exists
10187 
10188             -- Process payments
10189 			IF ( l_fee_type = 'MISCELLANEOUS' ) Then
10190 				OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
10191 				FETCH l_rl_csr2 INTO l_rl_rec2;
10192 
10193 				IF l_rl_csr2%FOUND THEN
10194 
10195 --Added by srsreeni for bug5841892
10196 --					m := m + 1;
10197 --					px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
10198 --bug5841892 end of changes
10199           -- vdamerla Forward Port Bug6149951
10200           --vdamerla Bug6149951 start
10201         IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
10202 
10203 					get_primary_pricing_name
10204 					(
10205 					 p_khr_id =>p_chr_id,
10206 					 p_sty_id =>l_rl_rec2.object1_id1,
10207 					 x_return_status =>x_return_status,
10208 					 x_primary_pricing_name	=>l_pricing_name
10209 					);
10210 --Added by srsreeni for bug5841892
10211 	            if l_pricing_name is not null then
10212 					m := m + 1;
10213 					px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
10214 					px_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
10215 					px_csm_stream_types_tbl(m).kle_fee_id     := l_linked_asset_line_rec.id;
10216 				end if;
10217 --bug5841892 end of changes
10218 -- vdamerla Forward Port Bug6149951
10219 					--OPEN strm_name_csr( l_rl_rec2.object1_id1);
10220 					--FETCH strm_name_csr INTO l_strm_name_rec;
10221 					--CLOSE strm_name_csr;
10222 
10223 					--l_level_type := l_rl_rec2.object1_id1;
10224 					--l_strm_name := l_strm_name_rec.name;
10225 
10226 --Added by srsreeni for bug5841892
10227 --					px_csm_stream_types_tbl(m).kle_fee_id     := l_linked_asset_line_rec.id;
10228 --bug5841892 end of changes
10229 					--Added by kthiruva on 07-Dec-2005
10230 					--Accrued Fee Income streams are retrieved and requested if defined
10231 					--Bug 3410253 - Start of Changes
10232 					IF(g_rep_req_yn = 'Y') THEN
10233 
10234 						 get_dependent_stream_type
10235 						 (
10236 						  p_khr_id =>p_chr_id,
10237 						  p_pdt_id =>l_pdt_id_rec.report_pdt_id,
10238 						  p_primary_sty_id => l_level_type,
10239 						  p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
10240 						  x_return_status => x_return_status,
10241 						  x_dependent_sty_id =>l_sty_id
10242 						 );
10243 
10244 						 IF(x_return_status = 'E') THEN
10245 							x_return_status := 'S';
10246 						 END IF;
10247 
10248 					ELSE
10249 						 get_dependent_stream_type
10250 						 (
10251 						  p_khr_id => p_chr_id,
10252 						  p_primary_sty_id => l_level_type,
10253 						  p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
10254 						  x_return_status => x_return_status,
10255 						  x_dependent_sty_id =>l_sty_id
10256 						 );
10257 
10258 						 IF x_return_status = 'E' THEN
10259 							x_return_status := 'S';
10260 						 END IF;
10261 					END IF;
10262 
10263 					IF(l_sty_id.id IS NOT NULL) THEN
10264 						m := m + 1;
10265 						px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
10266 						px_csm_stream_types_tbl(m).pricing_name   := l_sty_id.pricing_name;
10267 						px_csm_stream_types_tbl(m).kle_fee_id     := l_linked_asset_line_rec.id;
10268 					END IF;
10269 
10270 					--Bug 3410253 - End of Changes
10271         END IF;--vdamerla Bug6149951 ends
10272 
10273           OPEN strm_name_csr( l_rl_rec2.object1_id1);
10274           FETCH strm_name_csr INTO l_strm_name_rec;
10275           CLOSE strm_name_csr;
10276 
10277           l_level_type := l_rl_rec2.object1_id1;
10278           l_strm_name := l_strm_name_rec.name;
10279 
10280 
10281 					idx := 0;
10282 					FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_linked_asset_line_rec.id ) LOOP
10283 						-- Start of Bug#2757289 modification
10284 						IF (l_rl_rec.rule_information7 IS NOT NULL OR
10285 							l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
10286 						   (l_rl_rec.rule_information8 IS NOT NULL OR
10287 							l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
10288 							k := k + 1;
10289 							idx := idx + 1;
10290 							px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10291 							px_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
10292 							px_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
10293 							px_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
10294 							px_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
10295 							px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
10296 							px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10297 							px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
10298 							px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_linked_asset_line_rec.id;
10299 							px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10300 							px_csm_periodic_expenses_tbl(k).days_in_month	   := l_days_in_month_code;
10301 							px_csm_periodic_expenses_tbl(k).days_in_year	   := l_days_in_yr_code;
10302 
10303 							IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
10304 							  px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
10305 							END IF;
10306 
10307 							-- Added by kthiruva on 29-Dec-2005.
10308 							-- The value of the Advance and Arrears flag needs to be obtained from the rule information
10309 							-- Bug 4915938 - Start of Changes
10310 							IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10311 							  px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10312 							ELSE
10313 							  px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10314 							END IF;
10315 							-- Bug 4915938 - End of Changes
10316 						ELSIF (l_rl_rec.rule_information7 IS NULL OR
10317 							   l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
10318 							  (l_rl_rec.rule_information8 IS NULL OR
10319 							   l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
10320 							-- End of Bug#2757289 modification
10321 							k := k + 1;
10322 							idx := idx + 1;
10323 							px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10324 							px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
10325 							px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10326 							px_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
10327 							px_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
10328 							px_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
10329 							px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
10330 							px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10331 							px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_linked_asset_line_rec.id;
10332 							px_csm_periodic_expenses_tbl(k).days_in_month	   := l_days_in_month_code;
10333 							px_csm_periodic_expenses_tbl(k).days_in_year	   := l_days_in_yr_code;
10334 
10335 							IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
10336 							  px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
10337 							END IF;
10338 							IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10339 							  px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10340 							ELSE
10341 							  px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10342 							END IF;
10343 							IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
10344 							  px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
10345 							ELSE
10346 							  px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
10347 							END IF;
10348 						END IF;
10349 					END LOOP; -- END-FOR-LOOP: l_rl_csr
10350 				Else -- l_rl_csr2%NOTFOUND
10351 --Added by srsreeni for bug5841892
10352 --					m := m + 1;
10353 --					px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10354 --bug5841892 end of changes
10355 --vdamerla Bug6149951 start
10356       IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
10357 					get_primary_pricing_name
10358 					(
10359 					 p_khr_id =>p_chr_id,
10360 					 p_sty_id =>l_level_type,
10361 					 x_return_status =>x_return_status,
10362 					 x_primary_pricing_name	=>l_pricing_name
10363 					);
10364 --Added by srsreeni for bug5841892
10365 				 if l_pricing_name is not null then
10366 					m := m + 1;
10367 					px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10368 					px_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
10369 					px_csm_stream_types_tbl(m).kle_fee_id     := l_linked_asset_line_rec.id;
10370 				 end if;
10371       END IF;--vdamerla Bug6149951 ends
10372 
10373 --bug5841892 end of changes
10374 					k := k + 1;
10375 					px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10376 					px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
10377 					px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10378 					px_csm_periodic_expenses_tbl(k).period             := 'M';
10379 					px_csm_periodic_expenses_tbl(k).amount             := l_linked_asset_line_rec.amount;
10380 					px_csm_periodic_expenses_tbl(k).number_of_periods  := 1;
10381 					px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10382 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10383 					px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_linked_asset_line_rec.id;
10384 					px_csm_periodic_expenses_tbl(k).date_start         := l_linked_asset_line_rec.start_date;
10385 					px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
10386 					px_csm_periodic_expenses_tbl(k).days_in_month      := l_days_in_month_code;
10387 					px_csm_periodic_expenses_tbl(k).days_in_year       := l_days_in_yr_code;
10388 
10389 					print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
10390 							   '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
10391 					   'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
10392 
10393 				End If; -- end-if l_rl_csr2%FOUND
10394 				CLOSE l_rl_csr2;
10395 			End If; -- end-if l_fee_type = 'MISCELLANEOUS'
10396 
10397 		 END LOOP; -- end-loop: l_linked_asset_line_rec
10398 	   ELSE -- No asset association found
10399 			 If ( nvl(l_lne_rec.initial_direct_cost,0) > 0.0 ) Then
10400 			   l := l + 1;
10401 			   px_csm_one_off_fee_tbl(l).description       := l_strm_name;
10402 			   px_csm_one_off_fee_tbl(l).fee_type          := l_fee_type;
10403 			   px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10404 			   px_csm_one_off_fee_tbl(l).amount            := l_lne_rec.initial_direct_cost;
10405 			   px_csm_one_off_fee_tbl(l).date_paid         := l_lne_rec.start_date;
10406 			   px_csm_one_off_fee_tbl(l).kle_fee_id        := l_lne_rec.id;
10407 			   -- gboomina BUG#4508077 IDC changes start
10408 			   px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
10409 			   -- gboomina BUG#4508077 IDC changes end
10410 			End If;
10411 			   --Added by kthiruva on 15-Feb-2006
10412 			   -- Streams for the fee need to be retrieved if Pricing Name is setup for the same
10413 			   --Bug 4930293 - Start of Changes
10414 --Added by srsreeni for bug5841892
10415 --			   m := m + 1;
10416 --			   px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10417 --bug5841892 end of changes
10418 			   get_primary_pricing_name
10419 				(
10420 				 p_khr_id =>p_chr_id,
10421 				 p_sty_id =>l_level_type,
10422 				 x_return_status =>x_return_status,
10423 				 x_primary_pricing_name	=>l_pricing_name
10424 				 );
10425 --Added by srsreeni for bug5841892
10426 			 if l_pricing_name is not null then
10427 			   m := m + 1;
10428 			   px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10429 			   px_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
10430 			   px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec.id;
10431 			 end if;
10432 --bug5841892 end of changes
10433 			   --Bug 4930293 - End of Changes
10434 
10435 			  -- gboomina BUG#4508077 IDC changes start
10436 			  -- get dependent streams for the reporting product
10437 		      IF(g_rep_req_yn = 'Y') THEN
10438 
10439 				   get_dependent_stream_types
10440 				   (
10441 					p_khr_id => p_chr_id,
10442 					p_pdt_id => l_pdt_id_rec.report_pdt_id,
10443 					p_primary_sty_id => l_level_type,
10444 					x_return_status => x_return_status,
10445 					x_dependent_sty_id => l_strm_type_id_tbl
10446 				   );
10447 				   IF(x_return_status = 'E') THEN
10448 					 x_return_status := 'S';
10449 				   END IF;
10450 			  -- get dependent streams for the main product
10451 			  ELSE
10452 				   get_dependent_stream_types
10453 				   (
10454 					p_khr_id => p_chr_id,
10455 					p_primary_sty_id => l_level_type,
10456 					x_return_status => x_return_status,
10457 					x_dependent_sty_id =>  l_strm_type_id_tbl
10458 				   );
10459 				   IF(x_return_status = 'E') THEN
10460 					 x_return_status := 'S';
10461 				   END IF;
10462 
10463 			  END IF; -- end of dependent streams block
10464 
10465 			  -- populate the dependent stream types
10466 			  IF l_strm_type_id_tbl.COUNT > 0 THEN
10467 					  FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
10468 						 m := m + 1;
10469 						 --Modified by kthiruva on 21-Oct-2005
10470 						 --Bug 4690770 - Start of Changes
10471 						 --l_strm_type_id_tbl should be referenced, not l_sty_id during the assignments
10472 				 px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
10473 				 px_csm_stream_types_tbl(m).pricing_name   := l_strm_type_id_tbl(i).pricing_name;
10474 						 px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec.id;
10475 						 --Bug 4690770 - End of Changes
10476 					  END LOOP;
10477 			  -- gboomina BUG#4508077 IDC changes end
10478 			 END IF; -- end of populate dependent stream types
10479 
10480 			 IF l_expense_exists THEN
10481 				-- sjalasut, bug 4872258. assumption is now -1 instead of zero. START
10482 				IF  NVL(l_lne_rec.amount,-1) <> NVL(l_lne_rec.initial_direct_cost,-1) THEN
10483 					-- sjalasut, bug 4872258.  assumption is now -1 instead of zero. END
10484 					k := k + 1;
10485 					px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10486 					px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10487 					px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
10488 					px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10489 				  	px_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION2,'0'));
10490 					px_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec2_exp.RULE_INFORMATION1, l_hdr_rec.term));
10491 					px_csm_periodic_expenses_tbl(k).amount           := px_csm_periodic_expenses_tbl(k).amount - (NVL(l_lne_rec.initial_direct_cost,0)/px_csm_periodic_expenses_tbl(k).number_of_periods);
10492 					px_csm_periodic_expenses_tbl(k).period             := l_rl_rec1.object1_id1;
10493 					px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10494 					px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
10495 					px_csm_periodic_expenses_tbl(k).date_start         := l_lne_rec.start_date;
10496 					px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10497 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10498 					px_csm_periodic_expenses_tbl(k).days_in_month     := l_days_in_month_code;
10499 					px_csm_periodic_expenses_tbl(k).days_in_year      := l_days_in_yr_code;
10500 				END IF;
10501          	Elsif ( l_fee_type <> 'MISCELLANEOUS' ) Then
10502                 --m := m + 1;
10503                 --px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10504       --srsreeni Bug6149951 start
10505       IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
10506           get_primary_pricing_name
10507           (
10508            p_khr_id =>p_chr_id,
10509            p_sty_id =>l_level_type,
10510            x_return_status =>x_return_status,
10511            x_primary_pricing_name =>l_pricing_name
10512           );
10513            IF l_pricing_name IS NOT NULL
10514            THEN
10515            m := m + 1;
10516            px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10517            px_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
10518            px_csm_stream_types_tbl(m).kle_fee_id     := l_linked_asset_line_rec.id;
10519            END IF;
10520        END IF;
10521       --srsreeni Bug6149951 ends
10522                 --px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec.id;
10523 				k := k + 1;
10524 				px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10525 				px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10526 				px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
10527 				px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10528 				px_csm_periodic_expenses_tbl(k).amount             := nvl(l_lne_rec.amount,0)-nvl(l_lne_rec.initial_direct_cost,0);
10529 				px_csm_periodic_expenses_tbl(k).number_of_periods  := 1;
10530 				px_csm_periodic_expenses_tbl(k).period             := 'M';
10531 				px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10532 				px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
10533 				px_csm_periodic_expenses_tbl(k).date_start         := l_lne_rec.start_date;
10534                 px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10535                 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10536                 px_csm_periodic_expenses_tbl(k).days_in_month      := l_days_in_month_code;
10537                 px_csm_periodic_expenses_tbl(k).days_in_year       := l_days_in_yr_code;
10538 
10539                 print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
10540 		                   '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
10541 				   'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
10542 
10543 		    End If; -- end-if: l_expense_exists
10544 
10545 			IF ( l_fee_type = 'MISCELLANEOUS' ) Then
10546 				OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
10547 				FETCH l_rl_csr2 INTO l_rl_rec2;
10548 
10549 				IF l_rl_csr2%FOUND THEN
10550 --Added by srsreeni for bug5841892
10551 --					m := m + 1;
10552 --					px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
10553 --bug5841892 end of changes
10554 					get_primary_pricing_name
10555 					(
10556 					 p_khr_id =>p_chr_id,
10557 					 p_sty_id =>l_rl_rec2.object1_id1,
10558 					 x_return_status =>x_return_status,
10559 					 x_primary_pricing_name	=>l_pricing_name
10560 					);
10561 --Added by srsreeni for bug5841892
10562 					if l_pricing_name is not null then
10563 						m := m + 1;
10564 						px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
10565 						px_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
10566 						px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec.id;
10567 					end if;
10568 --bug5841892 end of changes
10569 					OPEN strm_name_csr( l_rl_rec2.object1_id1);
10570 					FETCH strm_name_csr INTO l_strm_name_rec;
10571 					CLOSE strm_name_csr;
10572 
10573 					l_level_type := l_rl_rec2.object1_id1;
10574 					l_strm_name := l_strm_name_rec.name;
10575 --Added by srsreeni for bug5841892
10576 --					px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec.id;
10577 --bug5841892 end of changes
10578 					--Added by kthiruva on 07-Dec-2005
10579 					--Accrued Fee Income streams are retrieved and requested if defined
10580 					--Bug 3410253 - Start of Changes
10581 					IF(g_rep_req_yn = 'Y') THEN
10582 
10583 						 get_dependent_stream_type
10584 						 (
10585 						  p_khr_id =>p_chr_id,
10586 						  p_pdt_id =>l_pdt_id_rec.report_pdt_id,
10587 						  p_primary_sty_id => l_level_type,
10588 						  p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
10589 						  x_return_status => x_return_status,
10590 						  x_dependent_sty_id =>l_sty_id
10591 						 );
10592 
10593 						 IF(x_return_status = 'E') THEN
10594 							x_return_status := 'S';
10595 						 END IF;
10596 
10597 					ELSE
10598 						 get_dependent_stream_type
10599 						 (
10600 						  p_khr_id => p_chr_id,
10601 						  p_primary_sty_id => l_level_type,
10602 						  p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
10603 						  x_return_status => x_return_status,
10604 						  x_dependent_sty_id =>l_sty_id
10605 						 );
10606 
10607 						 IF x_return_status = 'E' THEN
10608 							x_return_status := 'S';
10609 						 END IF;
10610 					END IF;
10611 
10612 					IF(l_sty_id.id IS NOT NULL) THEN
10613 						m := m + 1;
10614 						px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
10615 						px_csm_stream_types_tbl(m).pricing_name   := l_sty_id.pricing_name;
10616 						px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec.id;
10617 					END IF;
10618 
10619 					--Bug 3410253 - End of Changes
10620 
10621 					idx := 0;
10622 					FOR l_rl_rec in l_rl_csr (l_rl_rec2.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_lne_rec.id ) LOOP
10623 						-- Start of Bug#2757289 modification
10624 						IF (l_rl_rec.rule_information7 IS NOT NULL OR
10625 							l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
10626 						   (l_rl_rec.rule_information8 IS NOT NULL OR
10627 							l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
10628 							k := k + 1;
10629 							idx := idx + 1;
10630 							px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10631 							px_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
10632 							px_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
10633 							px_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
10634 							px_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
10635 							px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
10636 							px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10637 							px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
10638 							px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
10639 							px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10640 							px_csm_periodic_expenses_tbl(k).days_in_month	   := l_days_in_month_code;
10641 							px_csm_periodic_expenses_tbl(k).days_in_year	   := l_days_in_yr_code;
10642 
10643 							IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
10644 							  px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
10645 							END IF;
10646 
10647 							-- Added by kthiruva on 29-Dec-2005.
10648 							-- The value of the Advance and Arrears flag needs to be obtained from the rule information
10649 							-- Bug 4915938 - Start of Changes
10650 							IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10651 							  px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10652 							ELSE
10653 							  px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10654 							END IF;
10655 							-- Bug 4915938 - End of Changes
10656 						ELSIF (l_rl_rec.rule_information7 IS NULL OR
10657 							   l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
10658 							  (l_rl_rec.rule_information8 IS NULL OR
10659 							   l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
10660 							-- End of Bug#2757289 modification
10661 							k := k + 1;
10662 							idx := idx + 1;
10663 							px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10664 							px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
10665 							px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10666 							px_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
10667 							px_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
10668 							px_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
10669 							px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
10670 							px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10671 							px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
10672 							px_csm_periodic_expenses_tbl(k).days_in_month	   := l_days_in_month_code;
10673 							px_csm_periodic_expenses_tbl(k).days_in_year	   := l_days_in_yr_code;
10674 
10675 							IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
10676 							  px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
10677 							END IF;
10678 							IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10679 							  px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10680 							ELSE
10681 							  px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10682 							END IF;
10683 							IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
10684 							  px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
10685 							ELSE
10686 							  px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
10687 							END IF;
10688 						END IF;
10689 					END LOOP; -- END-FOR-LOOP: l_rl_csr
10690 				Else -- l_rl_csr2%NOTFOUND
10691 --Added by srsreeni for bug5841892
10692 --					m := m + 1;
10693 --					px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10694 --bug5841892 end of changes
10695 
10696 					get_primary_pricing_name
10697 					(
10698 					 p_khr_id =>p_chr_id,
10699 					 p_sty_id =>l_level_type,
10700 					 x_return_status =>x_return_status,
10701 					 x_primary_pricing_name	=>l_pricing_name
10702 					);
10703 --Added by srsreeni for bug5841892
10704 				if l_pricing_name is not null then
10705 					m := m + 1;
10706 					px_csm_stream_types_tbl(m).stream_type_id := l_level_type;
10707 					px_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
10708 					px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec.id;
10709 				end if;
10710 
10711 --bug5841892 end of changes
10712 					k := k + 1;
10713 					px_csm_periodic_expenses_tbl(k).level_index_number := 1;
10714 					px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
10715 					px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10716 					px_csm_periodic_expenses_tbl(k).period             := 'M';
10717 					px_csm_periodic_expenses_tbl(k).amount             := l_lne_rec.amount;
10718 					px_csm_periodic_expenses_tbl(k).number_of_periods  := 1;
10719 					px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10720 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10721 					px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
10722 					px_csm_periodic_expenses_tbl(k).date_start         := l_lne_rec.start_date;
10723 					px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
10724 					px_csm_periodic_expenses_tbl(k).days_in_month      := l_days_in_month_code;
10725 					px_csm_periodic_expenses_tbl(k).days_in_year       := l_days_in_yr_code;
10726 
10727 					print( l_api_name, 'amnt='||to_char(px_csm_periodic_expenses_tbl(k).amount)||
10728 							   '#ofPer='||to_char(px_csm_periodic_expenses_tbl(k).number_of_periods)||
10729 					   'dateStart='||to_char(px_csm_periodic_expenses_tbl(k).date_start));
10730 
10731 				End If; -- end-if l_rl_csr2%FOUND
10732 				CLOSE l_rl_csr2;
10733 			End If; -- end-if l_fee_type = 'MISCELLANEOUS'
10734 
10735 		END IF;	-- end-if: l_asset_association
10736 
10737       ELSIF l_fee_type = 'FINANCED' THEN
10738         OPEN  get_strm_name_fin_csr(p_chr_d  => p_chr_id,
10739                                     p_cle_id => l_lne_rec.id);
10740         FETCH get_strm_name_fin_csr INTO l_strm_name_fin_rec;
10741         CLOSE get_strm_name_fin_csr;
10742 
10743         /* ER# 5150038 */
10744         /* Getting the linked asset line for the current financed fee.
10745          * If there is an asset association, this cursor will return those linked asset association.
10746          * Only if the relevant payment is also associated to an asset, then use the amount allocated to
10747          * each asset as funding amount since the number of periods in expense is always 1.
10748          * You don't have to split the expense amount based on a ratio of amount allocated to each assets.
10749          */
10750         OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
10751         FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
10752 
10753 		OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
10754 		FETCH l_rl_csr2 INTO l_rl_rec2;
10755 
10756         IF l_linked_asset_line_csr%FOUND AND
10757            l_rl_csr2%FOUND
10758         THEN
10759         	l_asset_association := TRUE;
10760         ELSE
10761         	l_asset_association := FALSE;
10762         END IF;
10763         CLOSE l_linked_asset_line_csr;
10764         CLOSE l_rl_csr2;
10765 
10766         IF l_asset_association THEN
10767         	FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id) LOOP
10768 				l := l + 1;
10769 				px_csm_one_off_fee_tbl(l).description       := l_strm_name_fin_rec.strm_name;
10770 				px_csm_one_off_fee_tbl(l).fee_type          := l_fee_type;
10771 				px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10772 				px_csm_one_off_fee_tbl(l).amount            := l_linked_asset_line_rec.amount;
10773 				px_csm_one_off_fee_tbl(l).date_paid         := l_linked_asset_line_rec.start_date;
10774 				px_csm_one_off_fee_tbl(l).kle_fee_id        := l_linked_asset_line_rec.id;
10775 
10776 				OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_linked_asset_line_rec.id );
10777 				FETCH l_rl_csr2 INTO l_rl_rec2;
10778 				IF l_rl_csr2%FOUND THEN
10779 				  -- Code added and commented for user defined streams
10780 				  --m := m + 1;
10781 	                                   -- srsreeni - Bug#5699923 - Added - Start
10782  	                                   -- DONOT request SuperTrump to generate streams
10783  	                                   -- for TERMINATED lines
10784  	                                   IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
10785 
10786 				  IF(g_rep_req_yn = 'Y') THEN
10787 
10788 					get_dependent_stream_types
10789 					(
10790 					 p_khr_id =>p_chr_id,
10791 					 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
10792 					 p_primary_sty_id =>l_rl_rec2.object1_id1,
10793 					 x_return_status => x_return_status,
10794 					 x_dependent_sty_id =>l_strm_type_id_tbl
10795 					);
10796 					IF x_return_status = 'E' THEN
10797 						x_return_status := 'S';
10798 					END IF;
10799 
10800 				  ELSE
10801 					get_dependent_stream_types
10802 					(
10803 					 p_khr_id =>p_chr_id,
10804 					 p_primary_sty_id =>l_rl_rec2.object1_id1,
10805 					 x_return_status => x_return_status,
10806 					 x_dependent_sty_id =>l_strm_type_id_tbl
10807 					);
10808 					IF x_return_status = 'E' THEN
10809 						x_return_status := 'S';
10810 					END IF;
10811 				  END IF;
10812 
10813 				  IF l_strm_type_id_tbl.COUNT > 0 THEN
10814 					FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
10815 					  m := m + 1;
10816 
10817 					  px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
10818 					  px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
10819 					  px_csm_stream_types_tbl(m).kle_asset_id   := l_linked_asset_line_rec.id;
10820 					END LOOP;
10821 				  END IF;
10822 	                                   END IF; -- End of check for TERMINATED status
10823  	                                   -- srsreeni - Bug#5699923 - Added - End
10824 
10825 				  OPEN strm_name_csr( l_rl_rec2.object1_id1);
10826 				  FETCH strm_name_csr INTO l_strm_name_rec;
10827 				  CLOSE strm_name_csr;
10828 				  l_level_type := l_rl_rec2.object1_id1;
10829 				  l_strm_name := l_strm_name_rec.name;
10830 				  idx := 0;
10831 				  FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_linked_asset_line_rec.id) LOOP
10832 					-- Start of Bug#2757289 modification
10833 					IF (l_rl_rec.rule_information7 IS NOT NULL OR
10834 						l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
10835 					   (l_rl_rec.rule_information8 IS NOT NULL OR
10836 						l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
10837 					  k := k + 1;
10838 					  idx := idx + 1;
10839 					  px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10840 					  px_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
10841 					  px_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
10842 					  px_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
10843 					  px_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
10844 					  px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
10845 					  px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10846 					  px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
10847 					  px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_linked_asset_line_rec.id;
10848 					  px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10849 					  px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10850 					  px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10851 
10852 					  IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
10853 						px_csm_periodic_expenses_tbl(k).structure  := TO_NUMBER(l_rl_rec.rule_information5);
10854 					  END IF;
10855 					  -- End of Bug#2757289 modification
10856 
10857 					  -- Added by kthiruva on 29-Dec-2005.
10858 					  -- The value of the Advance and Arrears flag needs to be obtained from the rule information
10859 					  -- Bug 4915938 - Start of Changes
10860 					  IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10861 						px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10862 					  ELSE
10863 						px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10864 					  END IF;
10865 					  -- Bug 4915938 - End of Changes
10866 
10867 					ELSIF (l_rl_rec.rule_information7 IS NULL OR
10868 						   l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
10869 						  (l_rl_rec.rule_information8 IS NULL OR
10870 						   l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
10871 					  k := k + 1;
10872 					  idx := idx + 1;
10873 					  px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10874 					  px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
10875 					  px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10876 					  px_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
10877 					  px_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
10878 					  px_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
10879 					  px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10880 					  px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_linked_asset_line_rec.id;
10881 					  px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
10882 					  px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10883 					  px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10884 
10885 					  IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
10886 						px_csm_periodic_expenses_tbl(k).structure  := TO_NUMBER(l_rl_rec.rule_information5);
10887 					  END IF;
10888 					  IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10889 						px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10890 					  ELSE
10891 						px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
10892 					  END IF;
10893 					  IF(l_rl_rec.rule_information2 IS NULL OR
10894 						 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
10895 						px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
10896 					  ELSE
10897 						px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
10898 					  END IF;
10899 					END IF;
10900 				  END LOOP;
10901 
10902 				END IF; -- l_rl_csr2%FOUND
10903 				CLOSE l_rl_csr2;
10904 			END LOOP; -- l_linked_asset_line_csr
10905 		ELSE
10906 			l := l + 1;
10907 			px_csm_one_off_fee_tbl(l).description       := l_strm_name_fin_rec.strm_name;
10908 			px_csm_one_off_fee_tbl(l).fee_type          := l_fee_type;
10909 			px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
10910 			px_csm_one_off_fee_tbl(l).amount            := l_strm_name_fin_rec.amount;
10911 			px_csm_one_off_fee_tbl(l).date_paid         := l_lne_rec.start_date;
10912 			px_csm_one_off_fee_tbl(l).kle_fee_id        := l_lne_rec.id;
10913 
10914 			OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
10915 			FETCH l_rl_csr2 INTO l_rl_rec2;
10916 			IF l_rl_csr2%FOUND THEN
10917 			  -- Code added and commented for user defined streams
10918 			  --m := m + 1;
10919 			  IF(g_rep_req_yn = 'Y') THEN
10920 
10921 				get_dependent_stream_types
10922 				(
10923 				 p_khr_id =>p_chr_id,
10924 				 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
10925 				 p_primary_sty_id =>l_rl_rec2.object1_id1,
10926 				 x_return_status => x_return_status,
10927 				 x_dependent_sty_id =>l_strm_type_id_tbl
10928 				);
10929 				IF x_return_status = 'E' THEN
10930 					x_return_status := 'S';
10931 				END IF;
10932 
10933 			  ELSE
10934 				get_dependent_stream_types
10935 				(
10936 				 p_khr_id =>p_chr_id,
10937 				 p_primary_sty_id =>l_rl_rec2.object1_id1,
10938 				 x_return_status => x_return_status,
10939 				 x_dependent_sty_id =>l_strm_type_id_tbl
10940 				);
10941 				IF x_return_status = 'E' THEN
10942 					x_return_status := 'S';
10943 				END IF;
10944 
10945 			  END IF;
10946 
10947 			  IF l_strm_type_id_tbl.COUNT > 0 THEN
10948 				FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
10949 				  m := m + 1;
10950 
10951 				  px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
10952 				  px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
10953 				  px_csm_stream_types_tbl(m).kle_asset_id   := l_lne_rec.id;
10954 				END LOOP;
10955 			  END IF;
10956 
10957 			  --px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
10958 			  --px_csm_stream_types_tbl(m).kle_asset_id   := l_lne_rec.id;
10959 
10960 			  --Added Code ends here
10961 			  OPEN strm_name_csr( l_rl_rec2.object1_id1);
10962 			  FETCH strm_name_csr INTO l_strm_name_rec;
10963 			  CLOSE strm_name_csr;
10964 			  l_level_type := l_rl_rec2.object1_id1;
10965 			  l_strm_name := l_strm_name_rec.name;
10966 			  idx := 0;
10967 			  FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_lne_rec.id) LOOP
10968 				-- Start of Bug#2757289 modification
10969 				IF (l_rl_rec.rule_information7 IS NOT NULL OR
10970 					l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
10971 				   (l_rl_rec.rule_information8 IS NOT NULL OR
10972 					l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
10973 				  k := k + 1;
10974 				  idx := idx + 1;
10975 				  px_csm_periodic_expenses_tbl(k).level_index_number := idx;
10976 				  px_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
10977 				  px_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
10978 				  px_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
10979 				  px_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
10980 				  px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
10981 				  px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
10982 				  px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
10983 				  px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
10984 				  px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
10985 				  px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
10986 				  px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
10987 
10988 				  IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
10989 					px_csm_periodic_expenses_tbl(k).structure  := TO_NUMBER(l_rl_rec.rule_information5);
10990 				  END IF;
10991 				  -- End of Bug#2757289 modification
10992 
10993 				  -- Added by kthiruva on 29-Dec-2005.
10994 				  -- The value of the Advance and Arrears flag needs to be obtained from the rule information
10995 				  -- Bug 4915938 - Start of Changes
10996 				  IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
10997 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
10998 				  ELSE
10999 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11000 				  END IF;
11001 				  -- Bug 4915938 - End of Changes
11002 
11003 				ELSIF (l_rl_rec.rule_information7 IS NULL OR
11004 					   l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
11005 					  (l_rl_rec.rule_information8 IS NULL OR
11006 					   l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
11007 				  k := k + 1;
11008 				  idx := idx + 1;
11009 				  px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11010 				  px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
11011 				  px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
11012 				  px_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
11013 				  px_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
11014 				  px_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
11015 				  px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11016 				  px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
11017 				  px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
11018 				  px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11019 				  px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11020 
11021 				  IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11022 					px_csm_periodic_expenses_tbl(k).structure  := TO_NUMBER(l_rl_rec.rule_information5);
11023 				  END IF;
11024 				  IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11025 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11026 				  ELSE
11027 					px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11028 				  END IF;
11029 				  IF(l_rl_rec.rule_information2 IS NULL OR
11030 					 l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
11031 					px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
11032 				  ELSE
11033 					px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
11034 				  END IF;
11035 				END IF;
11036 			  END LOOP;
11037 
11038 			END IF; -- l_rl_csr2%FOUND
11039 			CLOSE l_rl_csr2;
11040         END IF; -- l_asset_association
11041 
11042         /* -- End of the process for Funding section considering asset association -- */
11043 
11044 
11045 	-- Code added by HKPATEL 04-AUG-2004 for ROLLOVER QUOTE changes
11046 
11047 	  ELSIF l_fee_type = 'ROLLOVER' THEN
11048         OPEN  get_strm_name_abs_csr(p_chr_d  => p_chr_id,
11049                                     p_cle_id => l_lne_rec.id);
11050         FETCH get_strm_name_abs_csr INTO l_strm_name_abs_rec;
11051         CLOSE get_strm_name_abs_csr;
11052 
11053 		l_link_fee_asset_yn := 'FALSE';
11054 	-- Code for linked asset with rollover fee
11055    	   OPEN  link_rollover_csr(l_lne_rec.id);
11056    	   FETCH link_rollover_csr INTO link_rollover_rec;
11057    	   IF link_rollover_csr%FOUND THEN
11058          OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), link_rollover_rec.id );
11059      	 FETCH l_rl_csr2 INTO l_rl_rec2;
11060      	 IF l_rl_csr2%FOUND THEN
11061        	   l_link_fee_asset_yn := 'TRUE';
11062      	 END IF;
11063      	 CLOSE l_rl_csr2;
11064    	   END IF;
11065    	   CLOSE link_rollover_csr;
11066 
11067 		IF l_link_fee_asset_yn = 'TRUE' THEN
11068 		  FOR link_rollover_rec IN link_rollover_csr(l_lne_rec.id) LOOP
11069 
11070             l := l + 1;
11071             px_csm_one_off_fee_tbl(l).description       := l_strm_name_abs_rec.strm_name;
11072             px_csm_one_off_fee_tbl(l).fee_type          := l_fee_type;
11073             px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11074             px_csm_one_off_fee_tbl(l).amount            := link_rollover_rec.amount;
11075             px_csm_one_off_fee_tbl(l).date_paid         := l_lne_rec.start_date;
11076             px_csm_one_off_fee_tbl(l).kle_fee_id        := link_rollover_rec.id;
11077 
11078             OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), link_rollover_rec.id );
11079             FETCH l_rl_csr2 INTO l_rl_rec2;
11080             IF l_rl_csr2%FOUND THEN
11081             /*m := m + 1;
11082             px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
11083             px_csm_stream_types_tbl(m).kle_asset_id   := link_rollover_rec.id;
11084 			*/
11085 
11086 	             -- srsreeni - Bug#5699923 - Added - Start
11087  	             -- DONOT request SuperTrump to generate streams
11088  	             -- for TERMINATED lines
11089  	             IF link_rollover_rec.STE_CODE <> 'TERMINATED' THEN
11090 		      IF(g_rep_req_yn = 'Y') THEN
11091 
11092 		        get_dependent_stream_types
11093                 (
11094                  p_khr_id =>p_chr_id,
11095                  p_pdt_id =>l_pdt_id_rec.report_pdt_id,
11096                  p_primary_sty_id =>l_rl_rec2.object1_id1,
11097                  x_return_status => x_return_status,
11098                  x_dependent_sty_id =>l_strm_type_id_tbl
11099                 );
11100 		              IF x_return_status = 'E' THEN
11101 		                x_return_status := 'S';
11102 		              END IF;
11103 
11104 		      ELSE
11105 		        get_dependent_stream_types
11106                 (
11107                  p_khr_id =>p_chr_id,
11108                  p_primary_sty_id =>l_rl_rec2.object1_id1,
11109                  x_return_status => x_return_status,
11110                  x_dependent_sty_id =>l_strm_type_id_tbl
11111 		        );
11112 		              IF x_return_status = 'E' THEN
11113 		                x_return_status := 'S';
11114 		              END IF;
11115 
11116 		      END IF;
11117 
11118               IF l_strm_type_id_tbl.COUNT > 0 THEN
11119                 FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
11120 			      m := m + 1;
11121     		      px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
11122     		      px_csm_stream_types_tbl(m).pricing_name   := l_strm_type_id_tbl(i).pricing_name;
11123 				  --smahapat for bug 4100031
11124                   --px_csm_stream_types_tbl(m).kle_asset_id   := l_lne_rec.id;
11125                   px_csm_stream_types_tbl(m).kle_asset_id   := link_rollover_rec.id;
11126 				  -- end change for bug 4100031
11127 			    END LOOP;
11128 		      END IF;
11129              END IF; -- End of check for TERMINATED status
11130  	             -- srsreeni - Bug#5699923 - Added - End
11131 
11132 
11133             OPEN strm_name_csr( l_rl_rec2.object1_id1);
11134             FETCH strm_name_csr INTO l_strm_name_rec;
11135             CLOSE strm_name_csr;
11136             l_level_type := l_rl_rec2.object1_id1;
11137             l_strm_name := l_strm_name_rec.name;
11138             idx := 0;
11139             FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, link_rollover_rec.id) LOOP
11140             -- Start of Bug#2757289 modification
11141               IF (l_rl_rec.rule_information7 IS NOT NULL OR
11142                   l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
11143                  (l_rl_rec.rule_information8 IS NOT NULL OR
11144                   l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
11145                 k := k + 1;
11146                 idx := idx + 1;
11147                 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11148                 px_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
11149                 px_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
11150                 px_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
11151                 px_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
11152                 px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
11153                 px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11154                 px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
11155                 px_csm_periodic_expenses_tbl(k).kle_fee_id         := link_rollover_rec.id;
11156                 px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
11157                 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11158                 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11159 
11160                 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11161                   px_csm_periodic_expenses_tbl(k).structure  := TO_NUMBER(l_rl_rec.rule_information5);
11162                 END IF;
11163               -- End of Bug#2757289 modification
11164 
11165               -- Added by kthiruva on 29-Dec-2005.
11166               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
11167               -- Bug 4915938 - Start of Changes
11168               IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11169                 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11170               ELSE
11171                 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11172               END IF;
11173               -- Bug 4915938 - End of Changes
11174 
11175               ELSIF (l_rl_rec.rule_information7 IS NULL OR
11176                      l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
11177                     (l_rl_rec.rule_information8 IS NULL OR
11178                      l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
11179                 k := k + 1;
11180                 idx := idx + 1;
11181                 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11182                 px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
11183                 px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
11184                 px_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
11185                 px_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
11186                 px_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
11187                 px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11188                 px_csm_periodic_expenses_tbl(k).kle_fee_id         := link_rollover_rec.id;
11189                 px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
11190                 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11191                 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11192 
11193                 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11194                   px_csm_periodic_expenses_tbl(k).structure  := TO_NUMBER(l_rl_rec.rule_information5);
11195                 END IF;
11196                 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11197                   px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11198                 ELSE
11199                   px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11200                 END IF;
11201                 IF(l_rl_rec.rule_information2 IS NULL OR
11202                    l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
11203                   px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
11204                 ELSE
11205                   px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
11206                 END IF;
11207               END IF;
11208             END LOOP;
11209           END IF;
11210         CLOSE l_rl_csr2;
11211       END LOOP;
11212 	END IF;
11213 	-- Code for linked asset ends here
11214 
11215     IF l_link_fee_asset_yn = 'FALSE' THEN
11216 	    l := l + 1;
11217         px_csm_one_off_fee_tbl(l).description       := l_strm_name_abs_rec.strm_name;
11218         px_csm_one_off_fee_tbl(l).fee_type          := l_fee_type;
11219         px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11220         px_csm_one_off_fee_tbl(l).amount            := l_strm_name_abs_rec.amount;
11221         px_csm_one_off_fee_tbl(l).date_paid         := l_lne_rec.start_date;
11222         px_csm_one_off_fee_tbl(l).kle_fee_id        := l_lne_rec.id;
11223         OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
11224         FETCH l_rl_csr2 INTO l_rl_rec2;
11225         IF l_rl_csr2%FOUND THEN
11226 		/*
11227           m := m + 1;
11228           px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
11229           px_csm_stream_types_tbl(m).kle_asset_id   := l_lne_rec.id;
11230 		 */
11231 		  IF(g_rep_req_yn = 'Y') THEN
11232 
11233 		    get_dependent_stream_types
11234             (
11235             p_khr_id =>p_chr_id,
11236             p_pdt_id =>l_pdt_id_rec.report_pdt_id,
11237             p_primary_sty_id =>l_rl_rec2.object1_id1,
11238             x_return_status => x_return_status,
11239             x_dependent_sty_id =>l_strm_type_id_tbl
11240             );
11241 		              IF x_return_status = 'E' THEN
11242 		                x_return_status := 'S';
11243 		              END IF;
11244 
11245 		  ELSE
11246 		   get_dependent_stream_types
11247             (
11248              p_khr_id =>p_chr_id,
11249              p_primary_sty_id =>l_rl_rec2.object1_id1,
11250              x_return_status => x_return_status,
11251              x_dependent_sty_id =>l_strm_type_id_tbl
11252 		    );
11253 		              IF x_return_status = 'E' THEN
11254 		                x_return_status := 'S';
11255 		              END IF;
11256 
11257 		  END IF;
11258 
11259           IF l_strm_type_id_tbl.COUNT > 0 THEN
11260             FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
11261 			  m := m + 1;
11262     		  px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
11263     		  px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
11264               px_csm_stream_types_tbl(m).kle_asset_id   := l_lne_rec.id;
11265 			END LOOP;
11266 		  END IF;
11267 
11268           OPEN strm_name_csr( l_rl_rec2.object1_id1);
11269           FETCH strm_name_csr INTO l_strm_name_rec;
11270           CLOSE strm_name_csr;
11271           l_level_type := l_rl_rec2.object1_id1;
11272           l_strm_name := l_strm_name_rec.name;
11273           idx := 0;
11274           FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_lne_rec.id) LOOP
11275             -- Start of Bug#2757289 modification
11276             IF (l_rl_rec.rule_information7 IS NOT NULL OR
11277                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
11278                (l_rl_rec.rule_information8 IS NOT NULL OR
11279                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
11280               k := k + 1;
11281               idx := idx + 1;
11282               px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11283               px_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
11284               px_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
11285               px_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
11286               px_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
11287               px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
11288               px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11289               px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
11290               px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
11291               px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
11292               px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11293               px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11294 
11295               IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11296                 px_csm_periodic_expenses_tbl(k).structure  := TO_NUMBER(l_rl_rec.rule_information5);
11297               END IF;
11298               -- End of Bug#2757289 modification
11299 
11300               -- Added by kthiruva on 29-Dec-2005.
11301               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
11302               -- Bug 4915938 - Start of Changes
11303               IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11304                 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11305               ELSE
11306                 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11307               END IF;
11308               -- Bug 4915938 - End of Changes
11309 
11310             ELSIF (l_rl_rec.rule_information7 IS NULL OR
11311                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
11312                   (l_rl_rec.rule_information8 IS NULL OR
11313                    l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
11314               k := k + 1;
11315               idx := idx + 1;
11316               px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11317               px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
11318               px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
11319               px_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
11320               px_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
11321               px_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
11322               px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11323               px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
11324               px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
11325               px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11326               px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11327 
11328               IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11329                 px_csm_periodic_expenses_tbl(k).structure  := TO_NUMBER(l_rl_rec.rule_information5);
11330               END IF;
11331               IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11332                 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11333               ELSE
11334                 px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11335               END IF;
11336               IF(l_rl_rec.rule_information2 IS NULL OR
11337                  l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
11338                 px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
11339               ELSE
11340                 px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
11341               END IF;
11342             END IF;
11343           END LOOP;
11344         END IF;
11345         CLOSE l_rl_csr2;
11346 	END IF;
11347 
11348 	--CLOSE link_rollover_csr;
11349 
11350 	-- Code added by HKPATEL 04-AUG-2004 for ROLLOVER QUOTE ends here
11351 
11352       ELSIF l_fee_type = 'ABSORBED' THEN
11353       --Start of modification for Bug#3320656 BAKUCHIB Modified
11354         OPEN  get_strm_name_abs_csr(p_chr_d  => p_chr_id,
11355                                     p_cle_id => l_lne_rec.id);
11356         FETCH get_strm_name_abs_csr INTO l_strm_name_abs_rec;
11357         CLOSE get_strm_name_abs_csr;
11358 
11359         /* ER# 5150038 */
11360         /* Getting the linked asset line for the current absorbed fee.
11361          * If absorbed fee is associated to assets, this cursor will return those linked asset association.
11362          * Use the amount allocated to each asset as one-time fee amount.
11363          * Since no payments are expected for absorbed fee,
11364          * you don't have to check if payment lines are associated to assets.
11365          */
11366         OPEN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id);
11367         FETCH l_linked_asset_line_csr INTO l_linked_asset_line_rec;
11368 
11369         IF l_linked_asset_line_csr%FOUND THEN
11370         	l_asset_association := TRUE;
11371         ELSE
11372         	l_asset_association := FALSE;
11373         END IF;
11374         CLOSE l_linked_asset_line_csr;
11375 
11376         IF l_asset_association THEN
11377         	FOR l_linked_asset_line_rec IN l_linked_asset_line_csr(p_chr_id, l_lne_rec.id) LOOP
11378 				l := l + 1;
11379 				px_csm_one_off_fee_tbl(l).description       := l_strm_name_abs_rec.strm_name;
11380 				px_csm_one_off_fee_tbl(l).fee_type          := l_fee_type;
11381 				px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11382 				px_csm_one_off_fee_tbl(l).amount            := l_linked_asset_line_rec.amount;
11383 				px_csm_one_off_fee_tbl(l).date_paid         := l_linked_asset_line_rec.start_date;
11384 				px_csm_one_off_fee_tbl(l).kle_fee_id        := l_linked_asset_line_rec.id;
11385 
11386 			-- gboomina BUG#4508077 changes start
11387 			   IF('RVI' = l_strm_name_abs_rec.fee_purpose_code) THEN
11388 				 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
11389 				 -- populating the interface table records if pricing name is not null
11390       -- vdamerla Bug6149951
11391       --vdamerla Bug6149951 start
11392          IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
11393 				    get_primary_pricing_name
11394 				    (
11395 				     p_khr_id =>p_chr_id,
11396 				     p_sty_id =>l_strm_name_abs_rec.sty_id,
11397 				     x_return_status =>x_return_status,
11398 				     x_primary_pricing_name  => l_pricing_name
11399 				    );
11400 				    IF l_pricing_name IS NOT NULL THEN
11401 				      m := m + 1;
11402 				      px_csm_stream_types_tbl(m).stream_type_id := l_strm_name_abs_rec.sty_id;
11403 				      px_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
11404 				      px_csm_stream_types_tbl(m).kle_fee_id     := l_linked_asset_line_rec.id;
11405 				    END IF;
11406          -- vdamerla Forward Ported Bug6149951
11407          END IF;
11408 			   --Added by kthiruva on 03-Jan-2005
11409 			   --Dependents on Absorbd Fees need to be requested always
11410 			   --Bug 4918934 - Start of Changes
11411  			   END IF;
11412       -- vdamerla Forward Ported Bug6149951
11413       --srsreeni Bug6149951 start
11414          IF l_linked_asset_line_rec.STE_CODE <> 'TERMINATED' THEN
11415 			   --Bug 4918934 - End of Changes
11416 			   -- get dependent streams for the reporting product
11417 			   IF(g_rep_req_yn = 'Y') THEN
11418 				  get_dependent_stream_types(p_khr_id => p_chr_id,
11419 											 p_pdt_id => l_pdt_id_rec.report_pdt_id,
11420 											 p_primary_sty_id => l_strm_name_abs_rec.sty_id,
11421 											 x_return_status => x_return_status,
11422 											 x_dependent_sty_id => l_strm_type_id_tbl);
11423 				  IF(x_return_status = 'E') THEN
11424 					 x_return_status := 'S';
11425 				  END IF;
11426 			   -- get dependent streams for the main product
11427 			   ELSE
11428 				 get_dependent_stream_types(p_khr_id => p_chr_id,
11429 											p_primary_sty_id => l_strm_name_abs_rec.sty_id,
11430 											x_return_status => x_return_status,
11431 											x_dependent_sty_id => l_strm_type_id_tbl);
11432 				 IF(x_return_status = 'E') THEN
11433 					x_return_status := 'S';
11434 				 END IF;
11435 			   END IF; -- end of dependent streams block
11436 			   -- populate the dependent stream types
11437 			   IF l_strm_type_id_tbl.COUNT > 0 THEN
11438 				  FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
11439 					  m := m + 1;
11440 					  px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
11441 					  px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
11442 					  px_csm_stream_types_tbl(m).kle_fee_id   := l_linked_asset_line_rec.id;
11443 				  END LOOP;
11444 			   END IF; -- end of populate dependent stream types
11445 			   -- gboomina BUG#4508077 changes end
11446          END IF;--vdamerla Bug6149951 ends
11447 
11448 			  --End of modification for Bug#3320656 BAKUCHIB Modified
11449 			  -- gboomina BUG#4598620 changes start
11450 			  -- requesting all ABSORBED fees as IDC fees
11451 				 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
11452 			  -- gboomina BUG#4598620 changes end
11453 			END LOOP; -- l_linked_asset_line_csr
11454 		ELSE
11455 			l := l + 1;
11456 			px_csm_one_off_fee_tbl(l).description       := l_strm_name_abs_rec.strm_name;
11457 			px_csm_one_off_fee_tbl(l).fee_type          := l_fee_type;
11458 			px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
11459 			px_csm_one_off_fee_tbl(l).amount            := l_strm_name_abs_rec.amount;
11460 			px_csm_one_off_fee_tbl(l).date_paid         := l_lne_rec.start_date;
11461 			px_csm_one_off_fee_tbl(l).kle_fee_id        := l_lne_rec.id;
11462 
11463 			-- gboomina BUG#4508077 changes start
11464 			   IF('RVI' = l_strm_name_abs_rec.fee_purpose_code) THEN
11465 				 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
11466 				 -- populating the interface table records if pricing name is not null
11467 				 get_primary_pricing_name
11468 				 (
11469 				  p_khr_id =>p_chr_id,
11470 				  p_sty_id =>l_strm_name_abs_rec.sty_id,
11471 				  x_return_status =>x_return_status,
11472 				  x_primary_pricing_name  => l_pricing_name
11473 				 );
11474 				 IF l_pricing_name IS NOT NULL THEN
11475 				   m := m + 1;
11476 				   px_csm_stream_types_tbl(m).stream_type_id := l_strm_name_abs_rec.sty_id;
11477 				   px_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
11478 				   px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec.id;
11479 				 END IF;
11480 			   --Added by kthiruva on 03-Jan-2005
11481 			   --Dependents on Absorbd Fees need to be requested always
11482 			   --Bug 4918934 - Start of Changes
11483 			   END IF;
11484 			   --Bug 4918934 - End of Changes
11485 			   -- get dependent streams for the reporting product
11486 			   IF(g_rep_req_yn = 'Y') THEN
11487 				  get_dependent_stream_types(p_khr_id => p_chr_id,
11488 											 p_pdt_id => l_pdt_id_rec.report_pdt_id,
11489 											 p_primary_sty_id => l_strm_name_abs_rec.sty_id,
11490 											 x_return_status => x_return_status,
11491 											 x_dependent_sty_id => l_strm_type_id_tbl);
11492 				  IF(x_return_status = 'E') THEN
11493 					 x_return_status := 'S';
11494 				  END IF;
11495 			   -- get dependent streams for the main product
11496 			   ELSE
11497 				 get_dependent_stream_types(p_khr_id => p_chr_id,
11498 											p_primary_sty_id => l_strm_name_abs_rec.sty_id,
11499 											x_return_status => x_return_status,
11500 											x_dependent_sty_id => l_strm_type_id_tbl);
11501 				 IF(x_return_status = 'E') THEN
11502 					x_return_status := 'S';
11503 				 END IF;
11504 			   END IF; -- end of dependent streams block
11505 			   -- populate the dependent stream types
11506 			   IF l_strm_type_id_tbl.COUNT > 0 THEN
11507 				  FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
11508 					  m := m + 1;
11509 					  px_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
11510 					  px_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
11511 					  px_csm_stream_types_tbl(m).kle_fee_id   := l_lne_rec.id;
11512 				  END LOOP;
11513 			   END IF; -- end of populate dependent stream types
11514 			   -- gboomina BUG#4508077 changes end
11515 
11516 			  --End of modification for Bug#3320656 BAKUCHIB Modified
11517 			  -- gboomina BUG#4598620 changes start
11518 			  -- requesting all ABSORBED fees as IDC fees
11519 				 px_csm_one_off_fee_tbl(l).idc_accounting_flag := OKL_CREATE_STREAMS_PUB.G_FND_YES;
11520 			  -- gboomina BUG#4598620 changes end
11521 		END IF; -- l_asset_association
11522 
11523       ELSIF l_fee_type = 'INCOME' THEN
11524         OPEN  l_rl_csr2 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_lne_rec.id );
11525         FETCH l_rl_csr2 INTO l_rl_rec2;
11526         IF l_rl_csr2%FOUND THEN
11527           -- rabhupat BUG#4234441 start
11528           -- populating the interface table records if pricing name is not null
11529           get_primary_pricing_name
11530           (
11531            p_khr_id =>p_chr_id,
11532            p_sty_id =>l_rl_rec2.object1_id1,
11533            x_return_status =>x_return_status,
11534            x_primary_pricing_name       =>l_pricing_name
11535           );
11536           IF l_pricing_name IS NOT NULL THEN
11537           -- rabhupat BUG#4234441 end
11538           m := m + 1;
11539           px_csm_stream_types_tbl(m).stream_type_id := l_rl_rec2.object1_id1;
11540           px_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
11541 
11542           px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec.id;
11543           OPEN strm_name_csr( l_rl_rec2.object1_id1);
11544           FETCH strm_name_csr INTO l_strm_name_rec;
11545           CLOSE strm_name_csr;
11546           l_level_type := l_rl_rec2.object1_id1;
11547           l_strm_name := l_strm_name_rec.name;
11548           -- Bakuchib
11549           -- we need to find the number of payment levels for the income fees to
11550           -- decide weather we should send the one off table of records or
11551           -- Periodic expense table of records
11552           OPEN l_rl_income_csr(rlgpId => l_rl_rec2.slh_id,
11553                                rgcode => 'LALEVL',
11554                                rlcat  => 'LASLL',
11555                                chrId  => p_chr_id,
11556                                cleId  => l_lne_rec.id);
11557           FETCH l_rl_income_csr INTO ln_level_cnt;
11558           CLOSE l_rl_income_csr;
11559           IF ln_level_cnt = 1 THEN
11560             -- Requesting for Amortized Fee Income streams Additionaly
11561 			-- added and commented code for user defined streams
11562 			IF(g_rep_req_yn = 'Y') THEN
11563 
11564               get_dependent_stream_type
11565               (
11566                 p_khr_id =>p_chr_id,
11567                 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
11568 				p_primary_sty_id => l_level_type,
11569                 p_dependent_sty_purpose =>'AMORTIZE_FEE_INCOME',
11570                 x_return_status => x_return_status,
11571                 x_dependent_sty_id =>l_sty_id
11572               );
11573 			   IF(x_return_status = 'E') THEN
11574 			     x_return_status := 'S';
11575 			   END IF;
11576 
11577             ELSE
11578 	          get_dependent_stream_type
11579 	          (
11580  	            p_khr_id => p_chr_id,
11581  	            p_primary_sty_id => l_level_type,
11582 				p_dependent_sty_purpose =>'AMORTIZE_FEE_INCOME',
11583  	            x_return_status => x_return_status,
11584  	            x_dependent_sty_id =>l_sty_id
11585 	          );
11586 			   IF x_return_status = 'E' THEN
11587 			     x_return_status := 'S';
11588 			   END IF;
11589 	        END IF;
11590 
11591 		/*
11592             OPEN  l_strmid_csr('AMORTIZED FEE INCOME');
11593             FETCH l_strmid_csr into l_strmid_rec;
11594             IF l_strmid_csr%NOTFOUND THEN
11595               OKL_API.set_message(p_app_name      => G_APP_NAME,
11596                                   p_msg_name      => G_LLA_NO_MATCHING_RECORD,
11597                                   p_token1        => G_COL_NAME_TOKEN,
11598                                   p_token1_value  => 'AMORTIZED FEE INCOME');
11599               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11600             END IF;
11601             CLOSE l_strmid_csr;
11602 		*/
11603 		-- added and commented code ends here.
11604 		    IF (l_sty_id.id IS NOT NULL) THEN
11605             m := m + 1;
11606             --px_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
11607 			px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
11608 			px_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
11609             px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec.id;
11610 			END IF;
11611             l := l + 1;
11612             OPEN l_rl_csr(rlgpId => l_rl_rec2.slh_id,
11613                                rgcode => 'LALEVL',
11614                                rlcat  => 'LASLL',
11615                                chrId  => p_chr_id,
11616                                cleId  => l_lne_rec.id);
11617             FETCH l_rl_csr INTO r_rl_rec;
11618             CLOSE l_rl_csr;
11619             px_csm_one_off_fee_tbl(l).description       := l_strm_name;
11620             px_csm_one_off_fee_tbl(l).fee_type          := l_fee_type;
11621             px_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
11622             px_csm_one_off_fee_tbl(l).amount            := FND_NUMBER.canonical_to_number(r_rl_rec.rule_information6);
11623             px_csm_one_off_fee_tbl(l).date_paid         := l_lne_rec.start_date;
11624             px_csm_one_off_fee_tbl(l).kle_fee_id        := l_lne_rec.id;
11625 
11626           ELSIF ln_level_cnt > 1 THEN
11627             -- Requesting for Amortized Fee Income streams Additionaly
11628 			-- added and commented code for user defined streams
11629 
11630 			-- Put the rignt stream purpose 'ACCRUED_FEE_INCOME'- hkpatel- 4374085
11631 			IF(g_rep_req_yn = 'Y') THEN
11632 
11633               get_dependent_stream_type
11634               (
11635                 p_khr_id =>p_chr_id,
11636                 p_pdt_id =>l_pdt_id_rec.report_pdt_id,
11637 				p_primary_sty_id => l_level_type,
11638                 p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
11639                 x_return_status => x_return_status,
11640                 x_dependent_sty_id =>l_sty_id
11641               );
11642 			   IF(x_return_status = 'E') THEN
11643 			     x_return_status := 'S';
11644 			   END IF;
11645 
11646             ELSE
11647 	          get_dependent_stream_type
11648 	          (
11649  	            p_khr_id => p_chr_id,
11650  	            p_primary_sty_id => l_level_type,
11651 				p_dependent_sty_purpose =>'ACCRUED_FEE_INCOME',
11652  	            x_return_status => x_return_status,
11653  	            x_dependent_sty_id =>l_sty_id
11654 	          );
11655 			    IF x_return_status = 'E' THEN
11656 				  x_return_status := 'S';
11657 				END IF;
11658 	        END IF;
11659 
11660 			-- End Put the rignt stream purpose 'ACCRUED_FEE_INCOME'- hkpatel- 4374085
11661 /*
11662             OPEN  l_strmid_csr('FEE INCOME');
11663             FETCH l_strmid_csr into l_strmid_rec;
11664             IF l_strmid_csr%NOTFOUND THEN
11665               OKL_API.set_message(p_app_name      => G_APP_NAME,
11666                                   p_msg_name      => G_LLA_NO_MATCHING_RECORD,
11667                                   p_token1        => G_COL_NAME_TOKEN,
11668                                   p_token1_value  => 'FEE INCOME');
11669               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11670             END IF;
11671             CLOSE l_strmid_csr;
11672 */
11673             IF(l_sty_id.id IS NOT NULL) THEN
11674             m := m + 1;
11675             --px_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
11676 			px_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
11677 			px_csm_stream_types_tbl(m).pricing_name   := l_sty_id.pricing_name;
11678             px_csm_stream_types_tbl(m).kle_fee_id     := l_lne_rec.id;
11679 			END IF;
11680             idx := 0;
11681             FOR l_rl_rec IN l_rl_csr (l_rl_rec2.slh_id,'LALEVL','LASLL',p_chr_id, l_lne_rec.id) LOOP
11682               -- Start of Bug#2757289 modification
11683               IF (l_rl_rec.rule_information7 IS NOT NULL OR
11684                   l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
11685                  (l_rl_rec.rule_information8 IS NOT NULL OR
11686                   l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
11687                 k := k + 1;
11688                 idx := idx + 1;
11689                 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11690                 px_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
11691                 px_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
11692                 px_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
11693                 px_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
11694                 px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
11695                 px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11696                 px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
11697                 px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
11698                 px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
11699                 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11700                 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11701 
11702                 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11703                   px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
11704                 END IF;
11705                 -- End of Bug#2757289 modification
11706 
11707                 -- Added by kthiruva on 29-Dec-2005.
11708                 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
11709                 -- Bug 4915938 - Start of Changes
11710                 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11711                   px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11712                 ELSE
11713                   px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11714                 END IF;
11715                 -- Bug 4915938 - End of Changes
11716 
11717               ELSIF (l_rl_rec.rule_information7 IS NULL OR
11718                      l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
11719                     (l_rl_rec.rule_information8 IS NULL OR
11720                      l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
11721                 k := k + 1;
11722                 idx := idx + 1;
11723                 px_csm_periodic_expenses_tbl(k).level_index_number := idx;
11724                 px_csm_periodic_expenses_tbl(k).description        := l_strm_name;
11725                 px_csm_periodic_expenses_tbl(k).fee_type           := l_fee_type;
11726                 px_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
11727                 px_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.rule_information6,'0'));
11728                 px_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.rule_information3, l_hdr_rec.term));
11729                 px_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
11730                 px_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
11731                 px_csm_periodic_expenses_tbl(k).kle_fee_id         := l_lne_rec.id;
11732                 px_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
11733                 px_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
11734 
11735                 IF(l_rl_rec.rule_information5 IS NOT NULL) THEN
11736                     px_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.rule_information5);
11737                 END IF;
11738                 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
11739                   px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
11740                 ELSE
11741                   px_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
11742                 END IF;
11743                 IF(l_rl_rec.rule_information2 IS NULL OR
11744                    l_rl_rec.rule_information2 = OKL_API.G_MISS_CHAR) THEN
11745                   px_csm_periodic_expenses_tbl(k).date_start:=l_hdr_rec.start_date;
11746                 ELSE
11747                   px_csm_periodic_expenses_tbl(k).date_start:=FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
11748                 END IF;
11749               END IF;
11750             END LOOP;
11751            END IF;
11752           -- rabhupat BUG#4234441 start
11753           END IF; -- end of pricing name check
11754           -- rabhupat BUG#4234441 end
11755         END IF;
11756         CLOSE l_rl_csr2;
11757       ElsIF( l_lne_rec.fee_type = 'SECDEPOSIT' )  THEN
11758 
11759             extract_security_deposit( p_api_version => p_api_version,
11760                        p_chr_id => TO_NUMBER(p_chr_id),
11761                        p_deal_type => p_deal_type,
11762                        p_init_msg_list => p_init_msg_list,
11763                        x_return_status => x_return_status,
11764                        x_msg_count => x_msg_count,
11765                        x_msg_data => x_msg_data,
11766                        px_csm_lease_header => px_csm_lease_header,
11767                        px_csm_stream_types_tbl => px_csm_stream_types_tbl,
11768                        px_csm_one_off_fee_tbl => px_csm_one_off_fee_tbl,
11769                        px_csm_periodic_expenses_tbl => px_csm_periodic_expenses_tbl);
11770 
11771             If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
11772                 raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
11773             ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
11774                 raise OKL_API.G_EXCEPTION_ERROR;
11775             End If;
11776 
11777             k := px_csm_periodic_expenses_tbl.COUNT;
11778             l := px_csm_one_off_fee_tbl.COUNT;
11779             m := px_csm_stream_types_tbl.COUNT;
11780 
11781 	Else
11782 
11783             okl_api.set_message(
11784                p_app_name => G_APP_NAME,
11785                p_msg_name => 'OKL_LLA_NO_FEETYPE');
11786            raise OKL_API.G_EXCEPTION_ERROR;
11787 
11788 	End If;
11789 
11790     END LOOP;
11791 
11792     print( l_api_name, 'end', x_return_status);
11793 
11794     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
11795 
11796     Exception
11797 
11798 	when OKL_API.G_EXCEPTION_ERROR THEN
11799 
11800 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11801 
11802 			p_api_name  => l_api_name,
11803 			p_pkg_name  => g_pkg_name,
11804 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
11805 			x_msg_count => x_msg_count,
11806 			x_msg_data  => x_msg_data,
11807 			p_api_type  => g_api_type);
11808 
11809                 If(l_rl_csr1%ISOPEN) Then
11810                     CLOSE l_rl_csr1;
11811                 End If;
11812                 If(l_rl_csr2%ISOPEN) Then
11813                     CLOSE l_rl_csr2;
11814                 End If;
11815 
11816 	when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
11817 
11818 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11819 			p_api_name  => l_api_name,
11820 			p_pkg_name  => g_pkg_name,
11821 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
11822 			x_msg_count => x_msg_count,
11823 			x_msg_data  => x_msg_data,
11824 			p_api_type  => g_api_type);
11825                 If(l_rl_csr1%ISOPEN) Then
11826                     CLOSE l_rl_csr1;
11827                 End If;
11828                 If(l_rl_csr2%ISOPEN) Then
11829                     CLOSE l_rl_csr2;
11830                 End If;
11831 
11832 	when OTHERS THEN
11833 
11834       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
11835 			p_api_name  => l_api_name,
11836 			p_pkg_name  => g_pkg_name,
11837 			p_exc_name  => 'OTHERS',
11838 			x_msg_count => x_msg_count,
11839 			x_msg_data  => x_msg_data,
11840 			p_api_type  => g_api_type);
11841                 If(l_rl_csr1%ISOPEN) Then
11842                     CLOSE l_rl_csr1;
11843                 End If;
11844                 If(l_rl_csr2%ISOPEN) Then
11845                     CLOSE l_rl_csr2;
11846                 End If;
11847 
11848   End extract_fee_lines;
11849 -- End modification 11i10 bakuchib
11850 -- Start modification 11i10 bakuchib
11851   PROCEDURE extract_params_loan_deal(
11852             p_api_version               IN  NUMBER,
11853             p_init_msg_list             IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
11854             p_chr_id                    IN  VARCHAR2,
11855             p_deal_type                 IN  VARCHAR2,
11856             x_return_status             OUT NOCOPY VARCHAR2,
11857             x_msg_count                 OUT NOCOPY NUMBER,
11858             x_msg_data                  OUT NOCOPY VARCHAR2,
11859             x_csm_loan_header           OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
11860             x_csm_loan_lines_tbl        OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
11861             x_csm_loan_levels_tbl       OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
11862             x_csm_one_off_fee_tbl       OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
11863             x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
11864             x_csm_yields_tbl            OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
11865             x_csm_stream_types_tbl      OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type)  AS
11866 
11867     l_api_name		CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN_DEAL';
11868     l_api_version	CONSTANT NUMBER	      := 1;
11869     l_return_status	         VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
11870     l_level_type                 NUMBER;
11871     l_strm_name                  VARCHAR2(200);
11872     i                            BINARY_INTEGER := 0;
11873     j                            BINARY_INTEGER := 0;
11874     k                            BINARY_INTEGER := 0;
11875     l                            BINARY_INTEGER := 0;
11876     m                            BINARY_INTEGER := 0;
11877     idx                          BINARY_INTEGER := 0;
11878     idx_exp                      BINARY_INTEGER := 0;  -- bug6245602
11879     l_basis_percent              NUMBER;
11880     styid                        NUMBER;
11881     l_pricing_name               VARCHAR2(40);
11882     l_salvage                    NUMBER;
11883     l_purchase_option            VARCHAR2(256);
11884     l_deal_type                  VARCHAR2(256);
11885     l_purchase_option_amount     NUMBER;
11886     l_msg_count                  Number;
11887     l_msg_data                   varchar2(2000);
11888     l_chr_id                     Number := TO_NUMBER(p_chr_id);
11889     l_cle_id                     Number;
11890     l_rgd_code                   Varchar2(30) := 'LAPSTH';
11891     l_rdf_code                   Varchar2(30) := 'LASTRM';
11892     l_rdf_name                   Varchar2(80) := 'xxx';
11893     l_id1                        Varchar2(40);
11894     l_id2                        Varchar2(200);
11895     l_name                       Varchar2(200);
11896     l_description                Varchar2(2000);
11897     l_status                     Varchar2(1);
11898     l_start_date                 date;
11899     l_end_date                   date;
11900     l_org_id                     Number;
11901     l_inv_org_id                 Number;
11902     l_book_type_code             Varchar2(15);
11903     l_select                     Varchar2(2000);
11904     l_msg_index_out              Number;
11905     l_total_lending              NUMBER;
11906 
11907 
11908      Cursor l_struct_csr( chrId NUMBER ) is
11909      select distinct(nvl(crl.RULE_INFORMATION5,-1)) structure
11910      from   OKC_RULE_GROUPS_B crg,
11911             OKC_RULES_B crl
11912      where  crl.rgp_id = crg.id
11913             and crg.RGD_CODE = 'LALEVL'
11914             and crl.RULE_INFORMATION_CATEGORY = 'LASLL'
11915             and crg.dnz_chr_id = chrId;
11916 
11917 
11918     l_line_rec                   l_line_rec_csr%ROWTYPE;
11919     l_lne_rec                    l_line_rec_csr%ROWTYPE;
11920     l_hdr_rec                    l_hdr_csr%ROWTYPE;
11921     l_rl_rec                     l_rl_csr%ROWTYPE;
11922     l_hdrrl_rec                  l_hdrrl_csr%ROWTYPE;
11923     l_rl_rec1                    l_rl_csr1%ROWTYPE;
11924     l_tx_rec                     l_tx_csr%ROWTYPE;
11925     l_fee_strm_type_rec          fee_strm_type_csr%ROWTYPE;
11926     l_strm_name_rec              strm_name_csr%ROWTYPE;
11927     l_ib_rec                     ib_csr%ROWTYPE;
11928     l_struct_rec                 l_struct_csr%ROWTYPE;
11929     l_pdt_id_rec                 l_hdr_pdt_csr%ROWTYPE;
11930     l_csm_loan_header            okl_create_streams_pvt.csm_loan_rec_type;
11931     l_csm_loan_levels_tbl        okl_create_streams_pvt.csm_loan_line_tbl_type;
11932     l_csm_one_off_fee_tbl        okl_create_streams_pub.csm_one_off_fee_tbl_type;
11933     l_csm_periodic_expenses_tbl  okl_create_streams_pub.csm_periodic_expenses_tbl_type;
11934     l_csm_yields_tbl             okl_create_streams_pub.csm_yields_tbl_type;
11935     l_csm_stream_types_tbl       okl_create_streams_pub.csm_stream_types_tbl_type;
11936     l_req_stream_types_tbl       okl_create_streams_pub.csm_stream_types_tbl_type;
11937     l_csm_line_details_tbl       okl_create_streams_pvt.csm_loan_level_tbl_type;
11938     l_rents_tbl                  okl_create_streams_pub.csm_periodic_expenses_tbl_type;
11939     l_strm_type_id_tbl okl_strm_type_id_tbl_type;
11940 
11941     --mansrini : Code for VR build
11942     CURSOR  get_day_conv_on_contrct
11943     IS
11944     SELECT
11945 --Added by srsreeni for bug6076113
11946 --            rate_params.days_in_a_year_code,
11947 --            DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
11948             DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
11949             rate_params.days_in_a_year_code
11950 --srsreeni bug6076113 ends
11951     FROM    okl_k_rate_params rate_params
11952     WHERE   khr_id = p_chr_id;
11953 
11954     CURSOR  get_day_conv_on_sgt
11955     IS
11956     SELECT  DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
11957             gts.days_in_yr_code
11958     FROM
11959             okl_k_headers khr,
11960             okl_products_v pdt,
11961             okl_ae_tmpt_sets_v aes,
11962             OKL_ST_GEN_TMPT_SETS gts
11963     WHERE
11964             khr.pdt_id = pdt.id AND
11965             pdt.aes_id = aes.id AND
11966             aes.gts_id = gts.id AND
11967             khr.id  = p_chr_id;
11968 
11969     l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
11970     l_days_in_yr_code  OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
11971 
11972     --Added by kthiruva on 13-Sep-2005 for the VR build
11973     --The base rate defined on the contract is captured when the payment type is Principal
11974     CURSOR get_base_rate_csr(p_chr_id   IN NUMBER,
11975                              p_date     IN DATE)
11976     IS
11977     SELECT PARM.BASE_RATE
11978     FROM OKL_K_RATE_PARAMS parm
11979     WHERE PARM.KHR_ID = p_chr_id
11980     AND PARM.PARAMETER_TYPE_CODE = 'ACTUAL'
11981     AND p_date BETWEEN EFFECTIVE_FROM_DATE AND NVL(EFFECTIVE_TO_DATE,p_date);
11982 
11983     l_base_rate             NUMBER;
11984     l_rent_sty_id           strm_rec_type;
11985     --Added by kthiruva on 22-Nov-2005 for the Down Payment CR
11986     --Bug 4738011 - Start of Changes
11987         l_sty_id           strm_rec_type;
11988     --Bug 4738011 - End of Changes
11989 
11990   BEGIN
11991     --Added by kthiruva for Debugging
11992     write_to_log('Inside procedure extract_params_loan_deal');
11993 
11994     x_return_status := OKL_API.G_RET_STS_SUCCESS;
11995     -- Call start_activity to create savepoint, check compatibility
11996     -- and initialize message list
11997     x_return_status := OKL_API.START_ACTIVITY (
11998                                l_api_name
11999                                ,p_init_msg_list
12000                                ,'_PVT'
12001                                ,x_return_status);
12002     -- Check if activity started successfully
12003     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12004       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12005     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12006       RAISE OKL_API.G_EXCEPTION_ERROR;
12007     END IF;
12008 
12009 	OPEN l_hdr_pdt_csr(p_chr_id);
12010 	FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
12011 	CLOSE l_hdr_pdt_csr;
12012 
12013     --get day convention info : mansrini
12014     OPEN  get_day_conv_on_contrct;
12015     FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
12016     CLOSE get_day_conv_on_contrct;
12017 
12018 --Added by srsreeni for bug6076113
12019 --    IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
12020     IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
12021 --srsreeni bug6076113 ends
12022     THEN
12023       OPEN  get_day_conv_on_sgt;
12024       FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
12025       CLOSE get_day_conv_on_sgt;
12026     END IF;
12027 
12028     --Added by kthiruva for Debugging
12029     write_to_log('Prior to the call to validate_payments');
12030     -- Validate the payments
12031     validate_payments(p_api_version    => p_api_version,
12032                       p_init_msg_list  => p_init_msg_list,
12033                       x_return_status  => x_return_status,
12034                       x_msg_count      => x_msg_count,
12035                       x_msg_data       => x_msg_data,
12036                       p_khr_id         => p_chr_id,
12037                       p_paym_tbl       => l_pay_tbl);
12038     --Added by kthiruva for Debugging
12039     write_to_log('After the call to validate_payments, the return status is :'|| x_return_status);
12040     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12041       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12042     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12043       RAISE OKL_API.G_EXCEPTION_ERROR;
12044     END IF;
12045     i := 0; j := 0; k := 0; l := 0; m := 0;
12046 
12047     -- Header infro
12048     OPEN  l_hdr_csr(p_chr_id);
12049     FETCH l_hdr_csr into l_hdr_rec;
12050     IF l_hdr_csr%NOTFOUND THEN
12051       --Added by kthiruva for Debugging
12052       write_to_log('Cursor l_hdr_csr not found ');
12053       okl_api.set_message(p_app_name      => G_APP_NAME,
12054                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
12055                           p_token1        => G_COL_NAME_TOKEN,
12056                           p_token1_value  => 'Contract id');
12057       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12058     END IF;
12059     CLOSE l_hdr_csr;
12060     l_csm_loan_header.khr_id                     := p_chr_id;
12061     l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
12062     l_csm_loan_header.date_start                 := l_hdr_rec.start_date;
12063     l_csm_loan_header.pdt_id                     := l_hdr_rec.pid;
12064     IF ( p_deal_type IS NULL ) THEN
12065       l_deal_type := l_hdr_rec.deal_type;
12066     ELSE
12067       l_deal_type := p_deal_type;
12068     END IF;
12069     -- Fetching the location of the asset
12070     OPEN  ib_csr(TO_NUMBER(p_chr_id));
12071     FETCH ib_csr into l_ib_rec;
12072     IF ib_csr%NOTFOUND THEN
12073       --Added by kthiruva for Debugging
12074       write_to_log('Cursor ib_csr not found ');
12075       okl_api.set_message(p_app_name      => G_APP_NAME,
12076                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
12077                           p_token1        => G_COL_NAME_TOKEN,
12078                           p_token1_value  => 'Contract id');
12079       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12080     END IF;
12081     CLOSE ib_csr;
12082     l_csm_loan_header.country := l_ib_rec.country;
12083     l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
12084     -- Callling the formual ccontract cap amount
12085     --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
12086     --The Capital Reduction should not be removed from the Funding amount
12087     --Bug 4738011 - Start of Changes
12088 
12089     --Added by kthiruva for Debugging
12090     write_to_log('Prior to the call to execute_formula');
12091 
12092     execute_formula(p_api_version   => p_api_version,
12093                     p_init_msg_list => p_init_msg_list,
12094                     x_return_status => x_return_status,
12095                     x_msg_count     => x_msg_count,
12096                     x_msg_data      => x_msg_data,
12097                     p_formula_name  => 'CONTRACT_CAP_AMNT_LOAN',
12098                     p_contract_id   => p_chr_id,
12099                     p_line_id       => NULL,
12100                     x_value         => l_total_lending);
12101 
12102     --Added by kthiruva for Debugging
12103     write_to_log('After the call to execute_formula, the return status is :'||x_return_status);
12104     --Bug 4738011 - End of Changes
12105     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12106       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12107     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12108       RAISE OKL_API.G_EXCEPTION_ERROR;
12109     END IF;
12110     l_csm_loan_header.total_lending := l_total_lending;
12111     l_csm_loan_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
12112     -- asset infor
12113     FOR l_line_rec IN l_line_rec_csr ( p_chr_id , 'FREE_FORM1') LOOP
12114       i := i + 1;
12115 	  idx := 0;
12116 	  idx_exp := 0;  -- bug6245602
12117       l_csm_loan_levels_tbl(i).kle_loan_id   := l_line_rec.id;
12118       --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
12119       --When the Down payment is not capitalised, the Down payment amount needs to be passed through the Down
12120       --payment tag in the Lending Loans tag of the Outbound XML.
12121       --Bug 4738011 - Start of Changes
12122       IF l_line_rec.capitalize_down_payment_yn = 'N' THEN
12123          l_csm_loan_levels_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
12124          l_csm_loan_levels_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
12125       END IF;
12126       --Bug 4738011 - End of Changes
12127       FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12128         l_level_type := l_rl_rec1.object1_id1;
12129 
12130         OPEN  strm_name_csr ( l_level_type );
12131         FETCH strm_name_csr into l_strm_name_rec;
12132         IF strm_name_csr%NOTFOUND THEN
12133           okl_api.set_message(p_app_name      => G_APP_NAME,
12134                               p_msg_name      => G_LLA_NO_MATCHING_RECORD,
12135                               p_token1        => G_COL_NAME_TOKEN,
12136                               p_token1_value  => 'Contract id');
12137           x_return_status := OKL_API.G_RET_STS_ERROR;
12138           EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
12139         END IF;
12140         CLOSE strm_name_csr;
12141         --l_strm_name := l_strm_name_rec.name;
12142          l_strm_name := l_strm_name_rec.stream_type_purpose;
12143 	             -- srsreeni - Bug#5699923 - Added - Start
12144  	             -- DONOT request SuperTrump to generate streams
12145  	             -- for TERMINATED lines
12146  	             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12147         --Modified by kthiruva for the VR build
12148         --Including PRINCIPAL_PAYMENT Stream in the condition.
12149         --From OKL.H,in addition to Rent, Payment of type Principal can also be defined on assets
12150 --srsreeni Bug6245602 Added DOWN_PAYMENT and ESTIMATED_PROPERTY_TAX
12151         IF( UPPER(TRIM(l_strm_name)) NOT IN ('RENT','PRINCIPAL_PAYMENT','DOWN_PAYMENT','ESTIMATED_PROPERTY_TAX') ) THEN
12152 --srsreeni Bug6245602 ends
12153 --Added by srsreeni for bug5841892
12154 --          m := m + 1;
12155 --          l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12156 --bug5841892 end of changes
12157           get_dependent_pricing_name
12158           (
12159              p_khr_id =>p_chr_id,
12160              p_sty_id =>l_level_type,
12161              x_return_status =>x_return_status,
12162              x_dependent_pricing_name =>l_pricing_name
12163           );
12164 --Added by srsreeni for bug5841892
12165 		if l_pricing_name is not null then
12166           m := m + 1;
12167           l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12168           l_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
12169           l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
12170         end if;
12171 --bug5841892 end of changes
12172 		END IF;
12173         --idx := 0;
12174         --Added by kthiruva on 16-Nov-2005 for the Down Payment CR
12175         --Bug 4738011 - Start of Changes
12176         IF( UPPER(TRIM(l_strm_name)) ='DOWN_PAYMENT' ) THEN
12177 --Added by srsreeni for bug5841892
12178 --           l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12179 --bug5841892 end of changes
12180            get_primary_pricing_name
12181             (
12182              p_khr_id =>p_chr_id,
12183              p_sty_id =>l_level_type,
12184              x_return_status =>x_return_status,
12185              x_primary_pricing_name =>l_pricing_name
12186             );
12187           IF x_return_status = 'E' THEN
12188             x_return_status := 'S';
12189           END IF;
12190 --Added by srsreeni for bug5841892
12191  		if l_pricing_name is not null then
12192  		  m:=m+1; --added to increase the counter
12193           l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12194           l_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
12195           l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
12196         end if;
12197 --bug5841892 end of changes
12198         END IF;
12199         --Bug 4738011 - End of Changes
12200              END IF; -- End of check for TERMINATED status
12201  	             -- srsreeni - Bug#5699923 - Added - End
12202 
12203         IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
12204 	             -- srsreeni - Bug#5699923 - Added - Start
12205  	             -- DONOT request SuperTrump to generate streams
12206  	             -- for TERMINATED lines
12207  	             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12208           IF(g_rep_req_yn = 'Y') THEN
12209             get_dependent_stream_types
12210             (
12211               p_khr_id =>p_chr_id,
12212               p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12213               p_primary_sty_id =>l_level_type,
12214               x_return_status => x_return_status,
12215               x_dependent_sty_id =>l_strm_type_id_tbl
12216             );
12217             IF x_return_status = 'E' THEN
12218               x_return_status := 'S';
12219             END IF;
12220           ELSE
12221             get_dependent_stream_types
12222             (
12223                p_khr_id =>p_chr_id,
12224                p_primary_sty_id =>l_level_type,
12225                x_return_status => x_return_status,
12226                x_dependent_sty_id =>l_strm_type_id_tbl
12227             );
12228             IF x_return_status = 'E' THEN
12229               x_return_status := 'S';
12230             END IF;
12231           END IF;
12232           IF l_strm_type_id_tbl.COUNT > 0 THEN
12233             FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
12234               m := m + 1;
12235               l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
12236               l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
12237               l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
12238             END LOOP;
12239          END IF;
12240              END IF; -- End of check for TERMINATED status
12241  	             -- srsreeni - Bug#5699923 - Added - End
12242           j := j + 1;
12243           idx := idx + 1;
12244           l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
12245           l_csm_line_details_tbl(j).description  := 'Funding';
12246           --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
12247           --The Capital Reduction should not be removed from the Funding amount
12248           --Bug 4738011 - Start of Changes
12249           execute_formula(p_api_version   => p_api_version,
12250                           p_init_msg_list => p_init_msg_list,
12251                           x_return_status => x_return_status,
12252                           x_msg_count     => x_msg_count,
12253                           x_msg_data      => x_msg_data,
12254                           p_formula_name  => 'LINE_CAP_AMNT_LOAN',
12255                           p_contract_id   => p_chr_id,
12256                           p_line_id       => l_line_rec.id,
12257                           x_value         => l_total_lending);
12258           --Bug 4738011 - End of Changes
12259           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12260             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
12261           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12262             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
12263           END IF;
12264           l_csm_line_details_tbl(j).amount       := l_total_lending;
12265           --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
12266           --Bug 4576794 - Start of Changes
12267           --When a funding date is specified on the asset,it needs to be used as the date_start
12268           --When funding date is not specified, we use the contract start date
12269           l_csm_line_details_tbl(j).date_start   := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
12270           --Bug 4576794 - End of Changes
12271           l_csm_line_details_tbl(j).level_index_number := idx;
12272           l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
12273           l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12274           l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
12275 
12276           --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
12277           --If the Down Payment is capitalised then , a new funding line with the opposite sign
12278           --needs to be added
12279           --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
12280           --Bug 4738011 - Start of Changes
12281           IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
12282             j := j + 1;
12283             idx := idx + 1;
12284             l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
12285             l_csm_line_details_tbl(j).description  := 'Funding';
12286             l_csm_line_details_tbl(j).amount       := l_line_rec.capital_reduction * (-1);
12287             l_csm_line_details_tbl(j).date_start   := l_hdr_rec.start_date;
12288             l_csm_line_details_tbl(j).level_index_number := idx;
12289             l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
12290             l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12291             l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
12292 	             -- srsreeni - Bug#5699923 - Added - Start
12293  	             -- DONOT request SuperTrump to generate streams
12294  	             -- for TERMINATED lines
12295  	             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12296 
12297             --Fetching and Requesting the Capital Reduction stream type if it has been defined on
12298             --the Stream Generation Template
12299             get_primary_stream_type
12300             (
12301              p_khr_id => p_chr_id,
12302              p_primary_sty_purpose => 'CAPITAL_REDUCTION',
12303              x_return_status => x_return_status,
12304              x_primary_sty_id =>l_sty_id
12305              );
12306             IF x_return_status = 'E' THEN
12307               x_return_status := 'S';
12308             END IF;
12309             IF (l_sty_id.id IS NOT NULL ) THEN
12310                m := m + 1;
12311                l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
12312                l_csm_stream_types_tbl(m).pricing_name   := l_sty_id.pricing_name;
12313                l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
12314             END IF;
12315           END IF;
12316              END IF; -- End of check for TERMINATED status
12317  	             -- srsreeni - Bug#5699923 - Added - End
12318           --Bug 4738011 - End of Changes
12319 
12320 
12321           FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12322           -- Start of Bug#2757289 modification
12323             IF (l_rl_rec.rule_information7 IS NOT NULL OR
12324                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12325                (l_rl_rec.rule_information8 IS NOT NULL OR
12326                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12327               j := j + 1;
12328               idx := idx + 1;
12329               l_csm_line_details_tbl(j).level_index_number := idx;
12330               l_csm_line_details_tbl(j).amount             := TO_NUMBER(l_rl_rec.rule_information8);
12331               l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
12332               l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
12333               l_csm_line_details_tbl(j).period             := g_stub_rec.period;
12334               l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12335               l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
12336               l_csm_line_details_tbl(j).description        := l_strm_name;
12337               l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12338               l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
12339               --Added by kthiruva on 09-Dec-2005
12340               --This rate column is relevant for rent payments only in the rebook scenarios
12341               --after a reamort
12342               --Bug 4766555 - Start of Changes
12343               l_csm_line_details_tbl(j).rate            := l_rl_rec.rule_information13;
12344               --Bug 4766555 - End of Changes
12345 
12346               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12347                 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12348               ELSE
12349                 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12350               END IF;
12351               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12352                 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12353               END IF;
12354               -- End of Bug#2757289 modification
12355 
12356               -- Added by kthiruva on 29-Dec-2005.
12357               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12358               -- Bug 4915938 - Start of Changes
12359               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12360                 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12361               ELSE
12362                 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12363               END IF;
12364               -- Bug 4915938 - End of Changes
12365 
12366             ELSIF (l_rl_rec.rule_information7 IS NULL OR
12367                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12368                   (l_rl_rec.rule_information8 IS NULL OR
12369                    l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12370               j := j + 1;
12371               idx := idx + 1;
12372               l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
12373               l_csm_line_details_tbl(j).description        := l_strm_name;
12374               l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12375               --Modified by kthiruva on 09-Dec-2005 for the VR build
12376               --Bug 4766555 - Start of Changes
12377               l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12378               --Bug 4766555 - End of Changes
12379               l_csm_line_details_tbl(j).level_index_number := idx;
12380               l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12381               l_csm_line_details_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
12382               l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
12383               l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12384               l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
12385               --Added by kthiruva on 09-Dec-2005
12386               --This rate column is relevant for rent payments only in the rebook scenarios
12387               --after a reamort
12388               --Bug 4766555 - Start of Changes
12389               l_csm_line_details_tbl(j).rate            := l_rl_rec.rule_information13;
12390               --Bug 4766555 - End of Changes
12391 
12392               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12393                 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12394               END IF;
12395               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12396                 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12397               ELSE
12398                 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12399               END IF;
12400               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12401                 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12402               ELSE
12403                 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12404               END IF;
12405             END IF;
12406           END LOOP;
12407         --Code for the new payment type 'PRINCIPAL_PAYMENT' that is allowed for Loan Contracts
12408         --Added by kthiruva on 13-Sep-2005 for the VR Build
12409         --Bug - Start of Changes
12410         ELSIF( UPPER(TRIM(l_strm_name)) = 'PRINCIPAL_PAYMENT' ) THEN
12411           IF(g_rep_req_yn = 'Y') THEN
12412            --Added by kthriuva for VR build
12413            --For payment of type principal, we need to request the dependents
12414            --on Rent. Hence obtaining the stream type id of Rent
12415            get_primary_no_prc_stream_type
12416            (
12417              p_khr_id =>p_chr_id,
12418              p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12419              p_primary_sty_purpose =>'RENT',
12420              x_return_status => x_return_status,
12421              x_primary_sty_id => l_rent_sty_id
12422            );
12423             --kthriuva - End of Changes for VR build
12424           get_dependent_stream_types
12425           (
12426              p_khr_id =>p_chr_id,
12427              p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12428              p_primary_sty_id =>l_rent_sty_id.id,
12429              x_return_status => x_return_status,
12430              x_dependent_sty_id =>l_strm_type_id_tbl
12431           );
12432           IF x_return_status = 'E' THEN
12433             x_return_status := 'S';
12434           END IF;
12435         ELSE
12436             --Added by kthriuva for VR build
12437             --For payment of type principal, we need to request the dependents
12438             --on Rent. Hence obtaining the stream type id of Rent
12439             get_primary_no_prc_stream_type
12440             (
12441              p_khr_id =>p_chr_id,
12442              p_pdt_id =>l_pdt_id_rec.pid,
12443              p_primary_sty_purpose =>'RENT',
12444              x_return_status => x_return_status,
12445              x_primary_sty_id => l_rent_sty_id
12446              );
12447 
12448             --kthriuva - End of Changes for VR build
12449             get_dependent_stream_types
12450             (
12451              p_khr_id =>p_chr_id,
12452              p_primary_sty_id =>l_rent_sty_id.id,
12453              x_return_status => x_return_status,
12454              x_dependent_sty_id =>l_strm_type_id_tbl
12455             );
12456             IF x_return_status = 'E' THEN
12457               x_return_status := 'S';
12458             END IF;
12459         END IF;
12460         --Fetching the base rate
12461         OPEN get_base_rate_csr(p_chr_id => p_chr_id,
12462                                p_date   => l_hdr_rec.start_date);
12463         FETCH get_base_rate_csr INTO l_base_rate;
12464         IF get_base_rate_csr%NOTFOUND THEN
12465           Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
12466                               p_msg_name     => 'OKL_LLAP_BASE_RATE_NOT_DEF');
12467           RAISE Okl_Api.G_EXCEPTION_ERROR;
12468         END IF;
12469         CLOSE get_base_rate_csr;
12470 	             -- srsreeni - Bug#5699923 - Added - Start
12471  	             -- DONOT request SuperTrump to generate streams
12472  	             -- for TERMINATED lines
12473  	             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12474         IF l_strm_type_id_tbl.COUNT > 0 THEN
12475           FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
12476             m := m + 1;
12477             l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
12478             l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
12479             l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
12480           END LOOP;
12481         END IF;
12482              END IF; -- End of check for TERMINATED status
12483  	             -- srsreeni - Bug#5699923 - Added - End
12484           j := j + 1;
12485           idx := idx + 1;
12486           l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
12487           l_csm_line_details_tbl(j).description  := 'Funding';
12488           --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
12489           --The Capital Reduction should not be removed from the Funding amount
12490           --Bug 4738011 - Start of Changes
12491           execute_formula(p_api_version   => p_api_version,
12492                           p_init_msg_list => p_init_msg_list,
12493                           x_return_status => x_return_status,
12494                           x_msg_count     => x_msg_count,
12495                           x_msg_data      => x_msg_data,
12496                           p_formula_name  => 'LINE_CAP_AMNT_LOAN',
12497                           p_contract_id   => p_chr_id,
12498                           p_line_id       => l_line_rec.id,
12499                           x_value         => l_total_lending);
12500           --Bug 4738011 - End of Changes
12501           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12502             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
12503           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12504             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
12505           END IF;
12506           l_csm_line_details_tbl(j).amount       := l_total_lending;
12507           --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
12508           --Bug 4576794 - Start of Changes
12509           --When a funding date is specified on the asset,it needs to be used as the date_start
12510           --When funding date is not specified, we use the contract start date
12511           l_csm_line_details_tbl(j).date_start   := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
12512           --Bug 4576794 - End of Changes
12513           l_csm_line_details_tbl(j).level_index_number := idx;
12514           l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
12515           l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12516           l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
12517 
12518           --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
12519           --If the Down Payment is capitalised then , a new funding line with the opposite sign
12520           --needs to be added
12521           --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
12522           --Bug 4738011 - Start of Changes
12523           IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
12524             j := j + 1;
12525             idx := idx + 1;
12526             l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
12527             l_csm_line_details_tbl(j).description  := 'Funding';
12528             l_csm_line_details_tbl(j).amount       := l_line_rec.capital_reduction * (-1);
12529             l_csm_line_details_tbl(j).date_start   := l_hdr_rec.start_date;
12530             l_csm_line_details_tbl(j).level_index_number := idx;
12531             l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
12532             l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12533             l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
12534 	             -- srsreeni - Bug#5699923 - Added - Start
12535  	             -- DONOT request SuperTrump to generate streams
12536  	             -- for TERMINATED lines
12537  	             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12538 
12539             --Fetching and Requesting the Capital Reduction stream type if it has been defined on
12540             --the Stream Generation Template
12541             get_primary_stream_type
12542             (
12543              p_khr_id => p_chr_id,
12544              p_primary_sty_purpose => 'CAPITAL_REDUCTION',
12545              x_return_status => x_return_status,
12546              x_primary_sty_id =>l_sty_id
12547              );
12548             IF x_return_status = 'E' THEN
12549               x_return_status := 'S';
12550             END IF;
12551             IF (l_sty_id.id IS NOT NULL ) THEN
12552                m := m + 1;
12553                l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
12554                l_csm_stream_types_tbl(m).pricing_name   := l_sty_id.pricing_name;
12555                l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
12556             END IF;
12557 
12558              END IF; -- End of check for TERMINATED status
12559  	             -- srsreeni - Bug#5699923 - Added - End
12560           END IF;
12561           --Bug 4738011 - End of Changes
12562 
12563           FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12564           -- Start of Bug#2757289 modification
12565             IF (l_rl_rec.rule_information7 IS NOT NULL OR
12566                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12567                (l_rl_rec.rule_information8 IS NOT NULL OR
12568                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12569               j := j + 1;
12570               idx := idx + 1;
12571               l_csm_line_details_tbl(j).level_index_number := idx;
12572               l_csm_line_details_tbl(j).amount             := TO_NUMBER(l_rl_rec.rule_information8);
12573               l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
12574               l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
12575               l_csm_line_details_tbl(j).period             := g_stub_rec.period;
12576               l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
12577               l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
12578               l_csm_line_details_tbl(j).description        := l_strm_name;
12579               l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12580               l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
12581               --When the payment type is Principal, the Base Rate specified in the contract needs to be
12582               --captured and passed. This rate is used in calculation of the Interest Payment Streams
12583               --Modified by kthiruva on 09-Dec-2005
12584               --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
12585               --l_base_Rate needs to be used.
12586               --Bug 4766555 - Start of Changes
12587               l_csm_line_details_tbl(j).rate            := nvl(l_rl_rec.rule_information13,l_base_rate);
12588               --Bug 4766555 - End of Changes
12589 
12590               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12591                 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12592               ELSE
12593                 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12594               END IF;
12595 
12596               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12597                 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12598               END IF;
12599 
12600             -- End of Bug#2757289 modification
12601 
12602               -- Added by kthiruva on 29-Dec-2005.
12603               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12604               -- Bug 4915938 - Start of Changes
12605               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12606                 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12607               ELSE
12608                 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12609               END IF;
12610               -- Bug 4915938 - End of Changes
12611 
12612             ELSIF (l_rl_rec.rule_information7 IS NULL OR
12613                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12614                   (l_rl_rec.rule_information8 IS NULL OR
12615                    l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12616               j := j + 1;
12617               idx := idx + 1;
12618               l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
12619               l_csm_line_details_tbl(j).description        := l_strm_name;
12620               l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12621               --Modified by kthiruva on 09-Dec-2005 for the VR build
12622               --Bug 4766555 - Start of Changes
12623               l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12624               --Bug 4766555 - End of Changes
12625               l_csm_line_details_tbl(j).level_index_number := idx;
12626               --Modified by kthiruva on 09-Nov-2005.The level type should be
12627               --set as PRINCIPAL as the payment type is PRINCIPAL_PAYMENT
12628               --Bug 4726209 - Start of Changes
12629               l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
12630               --Bug 4726209 - End of Changes
12631               l_csm_line_details_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
12632               l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
12633               l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
12634               l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
12635               --When the payment type is Principal, the Base Rate specified in the contract needs to be
12636               --captured and passed. This rate is used in calculation of the Interest Payment Streams
12637               --Modified by kthiruva on 09-Dec-2005
12638               --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
12639               --l_base_Rate needs to be used.
12640               --Bug 4766555 - Start of Changes
12641               l_csm_line_details_tbl(j).rate            := nvl(l_rl_rec.rule_information13,l_base_rate);
12642               --Bug 4766555 - End of Changes
12643 
12644               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12645                 l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12646               END IF;
12647               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12648                 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12649               ELSE
12650                 l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12651               END IF;
12652               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12653                 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12654               ELSE
12655                 l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12656               END IF;
12657             END IF;
12658           END LOOP;
12659 
12660         -- Code for Estimated Property Tax Starts Here
12661         ELSIF( UPPER(TRIM(l_strm_name)) = 'ESTIMATED_PROPERTY_TAX' ) THEN
12662 --srsreeni Bug6245602 start. Added logic to request for streams
12663             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
12664            get_primary_pricing_name
12665             (
12666              p_khr_id =>p_chr_id,
12667              p_sty_id =>l_level_type,
12668              x_return_status =>x_return_status,
12669              x_primary_pricing_name =>l_pricing_name
12670             );
12671           IF x_return_status = 'E' THEN
12672             x_return_status := 'S';
12673           END IF;
12674  		if l_pricing_name is not null then
12675  		  m:=m+1; --added to increase the counter
12676           l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
12677           l_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
12678           l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
12679         end if;
12680 --get dependent
12681         IF(g_rep_req_yn = 'Y') THEN
12682           get_dependent_stream_types
12683           (
12684             p_khr_id =>p_chr_id,
12685             p_pdt_id =>l_pdt_id_rec.report_pdt_id,
12686             p_primary_sty_id =>l_level_type,
12687             x_return_status => x_return_status,
12688             x_dependent_sty_id =>l_strm_type_id_tbl
12689           );
12690           IF x_return_status = 'E' THEN
12691             x_return_status := 'S';
12692           END IF;
12693         ELSE
12694           get_dependent_stream_types
12695           (
12696             p_khr_id =>p_chr_id,
12697             p_primary_sty_id =>l_level_type,
12698             x_return_status => x_return_status,
12699             x_dependent_sty_id =>l_strm_type_id_tbl
12700           );
12701           IF x_return_status = 'E' THEN
12702             x_return_status := 'S';
12703           END IF;
12704         END IF;
12705         IF l_strm_type_id_tbl.COUNT > 0 THEN
12706           FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
12707             m := m + 1;
12708             l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
12709             l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
12710             l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
12711           END LOOP;
12712 	end if;
12713         end if;
12714 --srsreeni Bug6245602 end
12715           FOR l_rl_rec in l_rl_csr(l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12716             IF (l_rl_rec.rule_information7 IS NOT NULL OR
12717                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12718                (l_rl_rec.rule_information8 IS NOT NULL OR
12719                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12720               k := k + 1;
12721               -- idx := idx + 1;   bug6245602
12722               idx_exp := idx_exp + 1;  -- bug6245602
12723               l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp;  -- bug6245602
12724               l_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
12725               l_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
12726               l_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
12727               l_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
12728               l_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
12729               l_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12730               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
12731               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
12732               l_csm_periodic_expenses_tbl(k).cash_effect_yn     := 'N';
12733               l_csm_periodic_expenses_tbl(k).tax_effect_yn      := 'N';
12734               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12735               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12736 
12737               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12738                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12739               END If;
12740 
12741               -- Added by kthiruva on 29-Dec-2005.
12742               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12743               -- Bug 4915938 - Start of Changes
12744               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12745                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12746               ELSE
12747                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12748               END IF;
12749               -- Bug 4915938 - End of Changes
12750 
12751             ELSIF (l_rl_rec.rule_information7 IS NULL OR
12752                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12753                   (l_rl_rec.rule_information8 IS NULL OR
12754                    l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12755               k := k + 1;
12756               -- idx := idx + 1;   bug6245602
12757               idx_exp := idx_exp + 1;  -- bug6245602
12758               l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp;  -- bug6245602
12759               l_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12760               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
12761               l_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
12762               l_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12763               l_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
12764               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
12765               l_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
12766               l_csm_periodic_expenses_tbl(k).cash_effect_yn     := 'N';
12767               l_csm_periodic_expenses_tbl(k).tax_effect_yn      := 'N';
12768               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12769               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12770 
12771               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12772                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12773               END If;
12774               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12775                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12776               ELSE
12777                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12778               END IF;
12779               IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
12780                 l_csm_periodic_expenses_tbl(k).date_start  := l_hdr_rec.start_date;
12781               ELSE
12782                 l_csm_periodic_expenses_tbl(k).date_start  := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12783               END IF;
12784             END IF;
12785           END LOOP;
12786           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12787             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
12788           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12789             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
12790           END IF;
12791 
12792         -- Code for Estimated Property Tax Ends Here
12793 
12794         ELSIF (((l_strm_name_rec.periodic_yn = 'Y'  ) AND
12795                 (UPPER(l_strm_name_rec.stream_type_purpose) = 'FEE') AND
12796                 (l_strm_name_rec.capitalize_yn = 'N')) OR
12797                ((l_strm_name_rec.periodic_yn = 'Y'  ) AND
12798       -- code for user defined streams
12799                 --(UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
12800     (UPPER(l_strm_name_rec.stream_type_purpose) <> 'FEE'))) THEN
12801     -- code for use defined streams ends here
12802           FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12803             -- Start of Bug#2757289 modification
12804             IF (l_rl_rec.rule_information7 IS NOT NULL OR
12805                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
12806                (l_rl_rec.rule_information8 IS NOT NULL OR
12807                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
12808               k := k + 1;
12809               -- idx := idx + 1;  bug6245602
12810               idx_exp := idx_exp + 1;  -- bug6245602
12811               l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp;
12812               l_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
12813               l_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
12814               l_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
12815               l_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
12816               l_csm_periodic_expenses_tbl(k).advance_or_arrears := g_stub_rec.advance_or_arrears;
12817               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
12818               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
12819               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12820               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12821 
12822               IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12823                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12824               END IF;
12825               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12826                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12827               ELSE
12828                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12829               END IF;
12830               -- Code for user defined streams
12831      --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
12832      IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
12833      -- code ends here
12834                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
12835               --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) THEN
12836      ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) THEN
12837                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
12838               ELSE
12839                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12840               END If;
12841               -- End of Bug#2757289 modification
12842 
12843               -- Added by kthiruva on 29-Dec-2005.
12844               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
12845               -- Bug 4915938 - Start of Changes
12846               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12847                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12848               ELSE
12849                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12850               END IF;
12851               -- Bug 4915938 - End of Changes
12852 
12853             ELSIF (l_rl_rec.rule_information7 IS NULL OR
12854                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
12855                   (l_rl_rec.rule_information8 IS NULL OR
12856                   l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
12857               k := k + 1;
12858               -- idx := idx + 1;  bug6245602
12859               idx_exp := idx_exp + 1;  -- bug6245602
12860               l_csm_periodic_expenses_tbl(k).level_index_number := idx_exp;
12861               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
12862               l_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
12863               l_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12864               l_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
12865               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
12866               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
12867               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
12868 
12869               IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
12870                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
12871               END IF;
12872               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
12873                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
12874               ELSE
12875                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
12876               END IF;
12877               IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
12878                 l_csm_periodic_expenses_tbl(k).date_start  := l_hdr_rec.start_date;
12879               ELSE
12880                 l_csm_periodic_expenses_tbl(k).date_start  := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12881               END IF;
12882               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
12883                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
12884               ELSE
12885                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12886               END IF;
12887               --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
12888      IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
12889                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
12890               --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) Then
12891      ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) Then
12892                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
12893               ELSE
12894                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
12895               END If;
12896             END IF;
12897           END LOOP;
12898         ELSIf ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) Then
12899           FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
12900             l := l + 1;
12901             l_csm_one_off_fee_tbl(l).description       := l_strm_name_rec.name;
12902             l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
12903      l_csm_one_off_fee_tbl(l).amount            := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
12904             If(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
12905        l_csm_one_off_fee_tbl(l).date_paid         := l_hdr_rec.start_date;
12906             Else
12907        l_csm_one_off_fee_tbl(l).date_paid         := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
12908             End If;
12909             l_csm_one_off_fee_tbl(l).kle_asset_id      := l_line_rec.id;
12910           END LOOP;
12911         END IF;
12912       END LOOP;
12913     END LOOP;
12914     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12915       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12916     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12917       RAISE OKL_API.G_EXCEPTION_ERROR;
12918     End If;
12919     -- Extract fee line
12920     -- Added by kthiruva for Debugging
12921     write_to_log('Before the call to extract_fee_lines');
12922     extract_fee_lines( p_api_version => p_api_version,
12923                        p_chr_id => TO_NUMBER(p_chr_id),
12924                        p_deal_type => l_deal_type,
12925                        p_init_msg_list => p_init_msg_list,
12926                        x_msg_count => x_msg_count,
12927                        x_msg_data => x_msg_data,
12928                        x_return_status => x_return_status,
12929                        px_csm_stream_types_tbl => l_csm_stream_types_tbl,
12930                        px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
12931                        px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
12932     --Added by kthiruva for Debugging
12933     write_to_log('After the call to extract_fee_lines, the return status is :'||x_return_status);
12934 
12935     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
12936         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12937     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
12938         raise OKL_API.G_EXCEPTION_ERROR;
12939     End If;
12940     extract_subsidized_lines(p_api_version => p_api_version,
12941                              p_init_msg_list => p_init_msg_list,
12942                              x_return_status => x_return_status,
12943                              x_msg_count => x_msg_count,
12944                              x_msg_data => x_msg_data,
12945                              p_chr_id => TO_NUMBER(p_chr_id),
12946                              px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
12947     --Added by kthiruva for Debugging
12948     write_to_log('After the call to extract_subsidized_lines, the return status is :'||x_return_status);
12949     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
12950         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12951     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
12952         raise OKL_API.G_EXCEPTION_ERROR;
12953     End If;
12954     check_for_mandatory_streams(
12955             p_api_version        => p_api_version,
12956             p_init_msg_list      => p_init_msg_list,
12957             x_msg_count          => x_msg_count,
12958             x_msg_data           => x_msg_data,
12959             x_return_status      => x_return_status,
12960             p_chr_id             => p_chr_id,
12961             p_deal_type          => l_deal_type,
12962             p_stream_types_tbl   => l_csm_stream_types_tbl,
12963             x_stream_types_tbl   => l_req_stream_types_tbl);
12964     --Added by kthiruva for Debugging
12965     write_to_log('After the call to check_for_mandatory_streams, the return status is :'||x_return_status);
12966 
12967     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
12968         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12969     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
12970         raise OKL_API.G_EXCEPTION_ERROR;
12971     End If;
12972     -- Requesting for yields
12973     x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
12974     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
12975       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
12976     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
12977       RAISE OKL_API.G_EXCEPTION_ERROR;
12978     END IF;
12979 
12980     If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
12981             okl_api.set_message(
12982                p_app_name => G_APP_NAME,
12983                p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
12984            raise OKL_API.G_EXCEPTION_ERROR;
12985     End If;
12986 
12987     x_csm_loan_header := l_csm_loan_header;
12988     x_csm_loan_lines_tbl := l_csm_loan_levels_tbl;
12989     x_csm_loan_levels_tbl  := l_csm_line_details_tbl;
12990     x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
12991     x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
12992     x_csm_yields_tbl := l_csm_yields_tbl;
12993     x_csm_stream_types_tbl := l_req_stream_types_tbl;
12994     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
12995                          x_msg_data  => x_msg_data);
12996   EXCEPTION
12997     WHEN OKL_API.G_EXCEPTION_ERROR THEN
12998       IF l_hdr_csr%ISOPEN THEN
12999         CLOSE l_hdr_csr;
13000       END IF;
13001       IF ib_csr%ISOPEN THEN
13002         CLOSE ib_csr;
13003       END IF;
13004       IF l_line_rec_csr%ISOPEN THEN
13005         CLOSE l_line_rec_csr;
13006       END IF;
13007       IF l_rl_csr1%ISOPEN THEN
13008         CLOSE l_rl_csr1;
13009       END IF;
13010       IF strm_name_csr%ISOPEN THEN
13011         CLOSE strm_name_csr;
13012       END IF;
13013       IF l_rl_csr%ISOPEN THEN
13014         CLOSE l_rl_csr;
13015       END IF;
13016       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
13017                                 l_api_name,
13018                                G_PKG_NAME,
13019                                'OKL_API.G_RET_STS_ERROR',
13020                                x_msg_count,
13021                                x_msg_data,
13022                                '_PVT');
13023     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
13024       IF l_hdr_csr%ISOPEN THEN
13025         CLOSE l_hdr_csr;
13026       END IF;
13027       IF ib_csr%ISOPEN THEN
13028         CLOSE ib_csr;
13029       END IF;
13030       IF l_line_rec_csr%ISOPEN THEN
13031         CLOSE l_line_rec_csr;
13032       END IF;
13033       IF l_rl_csr1%ISOPEN THEN
13034         CLOSE l_rl_csr1;
13035       END IF;
13036       IF strm_name_csr%ISOPEN THEN
13037         CLOSE strm_name_csr;
13038       END IF;
13039       IF l_rl_csr%ISOPEN THEN
13040         CLOSE l_rl_csr;
13041       END IF;
13042       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13043                                 l_api_name,
13044                                 G_PKG_NAME,
13045                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
13046                                 x_msg_count,
13047                                 x_msg_data,
13048                                 '_PVT');
13049     WHEN OTHERS then
13050       IF l_hdr_csr%ISOPEN THEN
13051         CLOSE l_hdr_csr;
13052       END IF;
13053       IF ib_csr%ISOPEN THEN
13054         CLOSE ib_csr;
13055       END IF;
13056       IF l_line_rec_csr%ISOPEN THEN
13057         CLOSE l_line_rec_csr;
13058       END IF;
13059       IF l_rl_csr1%ISOPEN THEN
13060         CLOSE l_rl_csr1;
13061       END IF;
13062       IF strm_name_csr%ISOPEN THEN
13063         CLOSE strm_name_csr;
13064       END IF;
13065       IF l_rl_csr%ISOPEN THEN
13066         CLOSE l_rl_csr;
13067       END IF;
13068       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
13069                                 l_api_name,
13070                                 G_PKG_NAME,
13071                                 'OTHERS',
13072                                 x_msg_count,
13073                                 x_msg_data,
13074                                 '_PVT');
13075   END extract_params_loan_deal;
13076 -- End modification 11i10 bakuchib
13077   PROCEDURE extract_params_loan_paydown(
13078             p_api_version                IN  NUMBER,
13079             p_init_msg_list              IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
13080             p_chr_id                     IN  VARCHAR2,
13081             p_deal_type                  IN  VARCHAR2,
13082 	        p_paydown_type               IN  VARCHAR2,
13083 	        p_paydown_date               IN  DATE,
13084 	        p_paydown_amount             IN  NUMBER,
13085             p_balance_type_code          IN  VARCHAR2,
13086             x_return_status              OUT NOCOPY VARCHAR2,
13087             x_msg_count                  OUT NOCOPY NUMBER,
13088             x_msg_data                   OUT NOCOPY VARCHAR2,
13089             x_csm_loan_header            OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
13090             x_csm_loan_lines_tbl         OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
13091             x_csm_loan_levels_tbl        OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
13092             x_csm_one_off_fee_tbl        OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
13093             x_csm_periodic_expenses_tbl  OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
13094             x_csm_yields_tbl             OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
13095             x_csm_stream_types_tbl       OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
13096 
13097     l_api_name		CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN_PPD';
13098     l_api_version	CONSTANT NUMBER	      := 1;
13099     l_return_status	         VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
13100     l_level_type                 NUMBER;
13101     l_strm_name                  VARCHAR2(200);
13102     i                            BINARY_INTEGER := 0;
13103     j                            BINARY_INTEGER := 0;
13104     k                            BINARY_INTEGER := 0;
13105     l                            BINARY_INTEGER := 0;
13106     m                            BINARY_INTEGER := 0;
13107     idx                          BINARY_INTEGER := 0;
13108     l_basis_percent              NUMBER;
13109     styid                        NUMBER;
13110 	l_pricing_name               VARCHAR2(40);
13111     l_salvage                    NUMBER;
13112     l_purchase_option            VARCHAR2(256);
13113     l_deal_type                  VARCHAR2(256);
13114     l_purchase_option_amount     NUMBER;
13115     l_msg_count                  Number;
13116     l_msg_data                   varchar2(2000);
13117     l_chr_id                     Number := TO_NUMBER(p_chr_id);
13118     l_cle_id                     Number;
13119     l_rgd_code                   Varchar2(30) := 'LAPSTH';
13120     l_rdf_code                   Varchar2(30) := 'LASTRM';
13121     l_rdf_name                   Varchar2(80) := 'xxx';
13122     l_id1                        Varchar2(40);
13123     l_id2                        Varchar2(200);
13124     l_name                       Varchar2(200);
13125     l_description                Varchar2(2000);
13126     l_status                     Varchar2(1);
13127     l_start_date                 date;
13128     l_end_date                   date;
13129     l_org_id                     Number;
13130     l_inv_org_id                 Number;
13131     l_book_type_code             Varchar2(15);
13132     l_select                     Varchar2(2000);
13133     l_msg_index_out              Number;
13134     l_total_lending              NUMBER;
13135 
13136      --Bug 5146545 dpsingh start
13137      l_ic                             VARCHAR2(30);
13138 
13139      Cursor check_fixed_contract(chrId VARCHAR2) is
13140      SELECT
13141      gts.interest_calc_meth_code
13142      FROM
13143      okl_k_headers khr,
13144      okl_products_v pdt,
13145      okl_ae_tmpt_sets_v aes,
13146      OKL_ST_GEN_TMPT_SETS gts
13147      WHERE
13148      khr.pdt_id = pdt.id AND
13149      pdt.aes_id = aes.id AND
13150      aes.gts_id = gts.id AND
13151      khr.id  =chrId;
13152 
13153      Cursor get_iir_value(chrId VARCHAR2) is
13154      SELECT
13155      implicit_interest_rate
13156      FROM
13157      okl_k_headers
13158      WHERE id=chrId;
13159      --Bug 5146545 dpsingh end
13160 
13161 
13162      Cursor l_struct_csr( chrId NUMBER ) is
13163      select distinct(nvl(crl.RULE_INFORMATION5,-1)) structure
13164      from   OKC_RULE_GROUPS_B crg,
13165             OKC_RULES_B crl
13166      where  crl.rgp_id = crg.id
13167             and crg.RGD_CODE = 'LALEVL'
13168             and crl.RULE_INFORMATION_CATEGORY = 'LASLL'
13169             and crg.dnz_chr_id = chrId;
13170 
13171 
13172     l_line_rec                   l_line_rec_csr%ROWTYPE;
13173     l_lne_rec                    l_line_rec_csr%ROWTYPE;
13174     l_hdr_rec                    l_hdr_csr%ROWTYPE;
13175     l_rl_rec                     l_rl_csr%ROWTYPE;
13176     l_hdrrl_rec                  l_hdrrl_csr%ROWTYPE;
13177     l_rl_rec1                    l_rl_csr1%ROWTYPE;
13178     l_tx_rec                     l_tx_csr%ROWTYPE;
13179     l_fee_strm_type_rec          fee_strm_type_csr%ROWTYPE;
13180     l_strm_name_rec              strm_name_csr%ROWTYPE;
13181     l_ib_rec                     ib_csr%ROWTYPE;
13182     l_struct_rec                 l_struct_csr%ROWTYPE;
13183 	l_pdt_id_rec                 l_hdr_pdt_csr%ROWTYPE;
13184     l_csm_loan_header            okl_create_streams_pvt.csm_loan_rec_type;
13185     l_csm_loan_levels_tbl        okl_create_streams_pvt.csm_loan_line_tbl_type;
13186     l_csm_one_off_fee_tbl        okl_create_streams_pub.csm_one_off_fee_tbl_type;
13187     l_csm_periodic_expenses_tbl  okl_create_streams_pub.csm_periodic_expenses_tbl_type;
13188     l_csm_yields_tbl             okl_create_streams_pub.csm_yields_tbl_type;
13189     l_csm_stream_types_tbl       okl_create_streams_pub.csm_stream_types_tbl_type;
13190     l_req_stream_types_tbl       okl_create_streams_pub.csm_stream_types_tbl_type;
13191     l_csm_line_details_tbl       okl_create_streams_pvt.csm_loan_level_tbl_type;
13192     l_rents_tbl                  okl_create_streams_pub.csm_periodic_expenses_tbl_type;
13193     l_strm_type_id_tbl okl_strm_type_id_tbl_type;
13194     --p_deal_type                  okl_st_gen_tmpt_sets.deal_type%TYPE;
13195 
13196     --mansrini : Code for VR build
13197     CURSOR  get_day_conv_on_contrct
13198     IS
13199     SELECT
13200 --Added by srsreeni for bug6076113
13201 --            rate_params.days_in_a_year_code,
13202 --            DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
13203             DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
13204             rate_params.days_in_a_year_code
13205 --srsreeni bug6076113 ends
13206     FROM    okl_k_rate_params rate_params
13207     WHERE   khr_id = p_chr_id;
13208 
13209     CURSOR  get_day_conv_on_sgt
13210     IS
13211     SELECT  DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
13212             gts.days_in_yr_code
13213     FROM
13214             okl_k_headers khr,
13215             okl_products_v pdt,
13216             okl_ae_tmpt_sets_v aes,
13217             OKL_ST_GEN_TMPT_SETS gts
13218     WHERE
13219             khr.pdt_id = pdt.id AND
13220             pdt.aes_id = aes.id AND
13221             aes.gts_id = gts.id AND
13222             khr.id  = p_chr_id;
13223 
13224     l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
13225     l_days_in_yr_code  OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
13226     l_number_periods_remaining okl_sif_fees.number_of_periods%TYPE;
13227     l_number_periods_completed okl_sif_fees.number_of_periods%TYPE;
13228     l_number_periods_completed_cpy okl_sif_fees.number_of_periods%TYPE;
13229     l_variable_rate okl_sif_fees.rate%TYPE;
13230     l_total_oec     okl_k_lines_full_v.oec%TYPE;
13231     --Added by kthiruva for the VR build
13232     l_ppd_assigned    VARCHAR2(1) := 'N';
13233     l_rent_sty_id     strm_rec_type;
13234     l_prev_ppd        NUMBER := 0;
13235 
13236     --This Cursor fetches the Principal Paydown lines existing per asset line
13237     --on the contract
13238     CURSOR get_prev_ppd_csr(rgcode okc_rule_groups_b.rgd_code%TYPE,
13239                             rlcat  okc_rules_b.rule_information_category%TYPE,
13240                             chrId NUMBER,
13241                             cleId NUMBER )
13242     IS
13243     SELECT crl.id slh_id,
13244          crl.object1_id1,
13245          crl.rule_information1,
13246          crl.rule_information2,
13247          crl.rule_information3,
13248          crl.rule_information5,
13249          crl.rule_information6,
13250          crl.rule_information7,
13251          crl.rule_information8,
13252          crl.rule_information13,
13253          crl.rule_information10
13254     FROM okc_rule_groups_b crg,
13255          okc_rules_b crl,
13256          okl_strm_type_v sty
13257     WHERE crl.rgp_id = crg.id
13258     AND crg.rgd_code = rgcode
13259     AND crl.rule_information_category = rlcat
13260     AND crg.dnz_chr_id = chrId
13261     AND crg.cle_id = cleId
13262     AND crl.object1_id1 = sty.id
13263     AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
13264     ORDER BY crl.rule_information1;
13265 
13266     get_prev_ppd_rec        get_prev_ppd_csr%ROWTYPE;
13267 
13268 
13269 FUNCTION get_end_date(
13270     l_start_date      IN  DATE,
13271     p_frequency       IN  VARCHAR2,
13272     p_period          IN  NUMBER,
13273     ---- cklee/mvasudev,06-02-2005,Bug#4392051/okl.h 4437938
13274     p_start_day   IN NUMBER DEFAULT NULL
13275 )
13276     RETURN DATE IS
13277     l_end_date date;
13278     factor number := 0;
13279     BEGIN
13280      if(p_frequency = 'M') then
13281         factor := 1;
13282      elsif(p_frequency = 'Q') then
13283         factor := 3;
13284      elsif(p_frequency = 'S') then
13285         factor := 6;
13286      elsif(p_frequency = 'A') then
13287         factor := 12;
13288      end if;
13289      l_end_date := Okl_Lla_Util_Pvt.calculate_end_date(p_start_date => l_start_date,
13290 	                                                   p_months     =>  factor * NVL(p_period,0),
13291 							   p_start_day => p_start_day);
13292 
13293      return l_end_date;
13294 EXCEPTION
13295     WHEN OTHERS THEN
13296       RETURN null;
13297 END get_end_date;
13298 
13299   BEGIN
13300     x_return_status := OKL_API.G_RET_STS_SUCCESS;
13301     -- Call start_activity to create savepoint, check compatibility
13302     -- and initialize message list
13303     x_return_status := OKL_API.START_ACTIVITY (
13304                                l_api_name
13305                                ,p_init_msg_list
13306                                ,'_PVT'
13307                                ,x_return_status);
13308     -- Check if activity started successfully
13309     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13310       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13311     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13312       RAISE OKL_API.G_EXCEPTION_ERROR;
13313     END IF;
13314 
13315 	OPEN l_hdr_pdt_csr(p_chr_id);
13316 	FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
13317 	CLOSE l_hdr_pdt_csr;
13318 
13319     --get day convention info : mansrini
13320     OPEN  get_day_conv_on_contrct;
13321     FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
13322     CLOSE get_day_conv_on_contrct;
13323 
13324 --Added by srsreeni for bug6076113
13325 --    IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
13326     IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
13327 --srsreeni bug6076113 ends
13328     THEN
13329       OPEN  get_day_conv_on_sgt;
13330       FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
13331       CLOSE get_day_conv_on_sgt;
13332     END IF;
13333     -- Validate the payments
13334     validate_payments(p_api_version    => p_api_version,
13335                       p_init_msg_list  => p_init_msg_list,
13336                       x_return_status  => x_return_status,
13337                       x_msg_count      => x_msg_count,
13338                       x_msg_data       => x_msg_data,
13339                       p_khr_id         => p_chr_id,
13340                       p_paym_tbl       => l_pay_tbl);
13341     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13342       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13343     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13344       RAISE OKL_API.G_EXCEPTION_ERROR;
13345     END IF;
13346     i := 0; j := 0; k := 0; l := 0; m := 0;
13347 	/*
13348     OPEN  l_hdr_pdt_csr(p_chr_id);
13349     FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
13350     CLOSE l_hdr_pdt_csr;
13351 	*/
13352     -- Header infro
13353     OPEN  l_hdr_csr(p_chr_id);
13354     FETCH l_hdr_csr into l_hdr_rec;
13355     IF l_hdr_csr%NOTFOUND THEN
13356       okl_api.set_message(p_app_name      => G_APP_NAME,
13357                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
13358                           p_token1        => G_COL_NAME_TOKEN,
13359                           p_token1_value  => 'Contract id');
13360       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13361     END IF;
13362     CLOSE l_hdr_csr;
13363     l_csm_loan_header.khr_id                     := p_chr_id;
13364     l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
13365     l_csm_loan_header.date_start             := l_hdr_rec.start_date;
13366     l_csm_loan_header.pdt_id                     := l_hdr_rec.pid;
13367     IF ( p_deal_type IS NULL ) THEN
13368       l_deal_type := l_hdr_rec.deal_type;
13369     ELSE
13370       l_deal_type := p_deal_type;
13371     END IF;
13372     -- Fetching the location of the asset
13373     OPEN  ib_csr(TO_NUMBER(p_chr_id));
13374     FETCH ib_csr into l_ib_rec;
13375     IF ib_csr%NOTFOUND THEN
13376       okl_api.set_message(p_app_name      => G_APP_NAME,
13377                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
13378                           p_token1        => G_COL_NAME_TOKEN,
13379                           p_token1_value  => 'Contract id');
13380       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13381     END IF;
13382     CLOSE ib_csr;
13383     l_csm_loan_header.country := l_ib_rec.country;
13384     --The orp code for the Principal Paydown process is used here.
13385     l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_RENEWAL;
13386     -- Callling the formual ccontract cap amount
13387     --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
13388     --The Capital Reduction should not be removed from the Funding amount
13389     --Bug 4738011 - Start of Changes
13390     execute_formula(p_api_version   => p_api_version,
13391                     p_init_msg_list => p_init_msg_list,
13392                     x_return_status => x_return_status,
13393                     x_msg_count     => x_msg_count,
13394                     x_msg_data      => x_msg_data,
13395                     p_formula_name  => 'CONTRACT_CAP_AMNT_LOAN',
13396                     p_contract_id   => p_chr_id,
13397                     p_line_id       => NULL,
13398                     x_value         => l_total_lending);
13399     --Bug 4738011 - End of Changes
13400     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13401       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13402     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13403       RAISE OKL_API.G_EXCEPTION_ERROR;
13404     END IF;
13405     l_csm_loan_header.total_lending := l_total_lending;
13406     l_csm_loan_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
13407 
13408     --kthiruva : for PR proj
13409     --Fetch the total OEC for this contract so that it can be prorated for each asset in
13410     --the following loop
13411     OPEN total_oec_csr(p_chr_id);
13412     FETCH total_oec_csr INTO l_total_oec;
13413     CLOSE total_oec_csr;
13414 
13415     -- asset infor
13416     FOR l_line_rec IN l_line_rec_csr ( p_chr_id , 'FREE_FORM1') LOOP
13417       i := i + 1;
13418 	  idx := 0;
13419       l_csm_loan_levels_tbl(i).kle_loan_id   := l_line_rec.id;
13420       --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
13421       --When the Down payment is not capitalised, the Down payment amount needs to be passed through the Down
13422       --payment tag in the Lending Loans tag of the Outbound XML.
13423       --Bug 4738011 - Start of Changes
13424       IF l_line_rec.capitalize_down_payment_yn = 'N' THEN
13425          l_csm_loan_levels_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
13426          l_csm_loan_levels_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
13427       END IF;
13428       --Bug 4738011 - End of Changes
13429 
13430       FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
13431           --Added by kthiruva on 05-Dec-2005
13432          --Initialising l_first_batch for every asset line
13433          --Bug 4777531 - Start of Changes
13434          l_first_batch := 'N';
13435          l_ppd_assigned := 'N';
13436          --Bug 4777531 - End of Changes
13437 
13438 	l_level_type := l_rl_rec1.object1_id1;
13439 
13440         OPEN  strm_name_csr ( l_level_type );
13441         FETCH strm_name_csr into l_strm_name_rec;
13442         IF strm_name_csr%NOTFOUND THEN
13443           okl_api.set_message(p_app_name      => G_APP_NAME,
13444                               p_msg_name      => G_LLA_NO_MATCHING_RECORD,
13445                               p_token1        => G_COL_NAME_TOKEN,
13446                               p_token1_value  => 'Contract id');
13447           x_return_status := OKL_API.G_RET_STS_ERROR;
13448           EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
13449         END IF;
13450         CLOSE strm_name_csr;
13451 
13452         --Bug 5146545 dpsingh start
13453        OPEN check_fixed_contract(p_chr_id);
13454        FETCH check_fixed_contract INTO l_ic;
13455        CLOSE check_fixed_contract;
13456 
13457        IF l_ic = 'FIXED' THEN
13458           OPEN get_iir_value(p_chr_id);
13459           FETCH get_iir_value INTO l_variable_rate ;
13460           CLOSE get_iir_value;
13461        ELSE
13462         --Added by kthiruva on 04-Oct-2005
13463         --Calling the variable Rate utility to determine the rate that needs to be used to solve for payment
13464         l_variable_rate := OKL_VARIABLE_INT_UTIL_PVT.get_effective_int_rate(
13465                                                                            x_return_status  => l_return_status,
13466                                                                            p_khr_id         => p_chr_id,
13467                                                                            p_effective_date => p_paydown_date);
13468 
13469 
13470         If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
13471           raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
13472         ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
13473           raise OKL_API.G_EXCEPTION_ERROR;
13474         End If;
13475        END IF;
13476        --Bug 5146545 dpsingh end
13477         --l_strm_name := l_strm_name_rec.name;
13478 		l_strm_name := l_strm_name_rec.stream_type_purpose;
13479 	             -- srsreeni - Bug#5699923 - Added - Start
13480  	             -- DONOT request SuperTrump to generate streams
13481  	             -- for TERMINATED lines
13482  	             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
13483 --srsreeni Bug6245602 Added DOWN_PAYMENT and ESTIMATED_PROPERTY_TAX
13484         IF( UPPER(TRIM(l_strm_name)) NOT IN ('RENT','PRINCIPAL_PAYMENT','DOWN_PAYMENT','ESTIMATED_PROPERTY_TAX') ) THEN
13485 --srsreeni Bug6245602 end
13486 --Added by srsreeni for bug5841892
13487 --          m := m + 1;
13488 --          l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
13489 --bug5841892 end of changes
13490 		  get_dependent_pricing_name
13491           (
13492            p_khr_id =>p_chr_id,
13493            p_sty_id =>l_level_type,
13494            x_return_status =>x_return_status,
13495            x_dependent_pricing_name	=>l_pricing_name
13496           );
13497 --Added by srsreeni for bug5841892
13498 		if l_pricing_name is not null then
13499           m := m + 1;
13500           l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
13501           l_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
13502           l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
13503         end if;
13504 --bug5841892 end of changes
13505         END IF;
13506              END IF; -- End of check for TERMINATED status
13507  	             -- srsreeni - Bug#5699923 - Added - End
13508         --idx := 0;
13509         IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
13510 	             -- srsreeni - Bug#5699923 - Added - Start
13511  	             -- DONOT request SuperTrump to generate streams
13512  	             -- for TERMINATED lines
13513  	             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
13514 		  IF(g_rep_req_yn = 'Y') THEN
13515 
13516 		    get_dependent_stream_types
13517             (
13518              p_khr_id =>p_chr_id,
13519              p_pdt_id =>l_pdt_id_rec.report_pdt_id,
13520              p_primary_sty_id =>l_level_type,
13521              x_return_status => x_return_status,
13522              x_dependent_sty_id =>l_strm_type_id_tbl
13523             );
13524 		              IF x_return_status = 'E' THEN
13525 		                x_return_status := 'S';
13526 		              END IF;
13527 
13528 		  ELSE
13529 
13530 		    get_dependent_stream_types
13531             (
13532              p_khr_id =>p_chr_id,
13533              p_primary_sty_id =>l_level_type,
13534              x_return_status => x_return_status,
13535              x_dependent_sty_id =>l_strm_type_id_tbl
13536 		    );
13537 		              IF x_return_status = 'E' THEN
13538 		                x_return_status := 'S';
13539 		              END IF;
13540 
13541 		  END IF;
13542 
13543 
13544           IF l_strm_type_id_tbl.COUNT > 0 THEN
13545             FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
13546 			  m := m + 1;
13547 
13548     		  l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
13549     		  l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
13550               l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
13551 			END LOOP;
13552 		  END IF;
13553              END IF; -- End of check for TERMINATED status
13554  	             -- srsreeni - Bug#5699923 - Added - End
13555 
13556           j := j + 1;
13557           idx := idx + 1;
13558           l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
13559           l_csm_line_details_tbl(j).description  := 'Funding';
13560           --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
13561           --The Capital Reduction should not be removed from the Funding amount
13562           --Bug 4738011 - Start of Changes
13563           execute_formula(p_api_version   => p_api_version,
13564                           p_init_msg_list => p_init_msg_list,
13565                           x_return_status => x_return_status,
13566                           x_msg_count     => x_msg_count,
13567                           x_msg_data      => x_msg_data,
13568                           p_formula_name  => 'LINE_CAP_AMNT_LOAN',
13569                           p_contract_id   => p_chr_id,
13570                           p_line_id       => l_line_rec.id,
13571                           x_value         => l_total_lending);
13572           --Bug 4738011 - End of Changes
13573           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
13574             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
13575           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
13576             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
13577           END IF;
13578           --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
13579           l_ppd_count := 0;
13580           l_ppd_tbl.delete;
13581           --Modified by kthiruva on 26-Sep-2005
13582           --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
13583           FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
13584             FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
13585               IF (l_rl_rec.rule_information7 IS NOT NULL OR
13586                  l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
13587                  (l_rl_rec.rule_information8 IS NOT NULL OR
13588                  l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
13589                    l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
13590                    l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
13591                    l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
13592                    l_ppd_count := l_ppd_count + 1;
13593                END IF;
13594             END LOOP;
13595           END LOOP;
13596           --Adding the current paydown to the ppd_tbl as the current paydown is not yet updated on the contract
13597           l_ppd_tbl(l_ppd_count).paydown_date := p_paydown_date;
13598           --Assigning it to 0 initially the paydown amount per line needs to be derived after proration
13599           l_ppd_tbl(l_ppd_count).paydown_amount := 0;
13600           l_ppd_tbl(l_ppd_count).curr_paydown := 'Y';
13601           --kthiruva : End of Changes
13602 
13603           --Populating the diff_to_next column for all records in the l_ppd_tbl
13604           --The diff_to_next stores the number of days between a paydown and its subsequent paydown
13605           --If there is no subsequent paydown then the diff_to_next column stores a value 0
13606           FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
13607             IF l_ppd_tbl.COUNT = 1 THEN
13608               l_ppd_tbl(k).diff_to_next := 0;
13609             ELSE
13610               IF (k = l_ppd_tbl.LAST) THEN
13611                 l_ppd_tbl(k).diff_to_next := 0;
13612               ELSE
13613                 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
13614               END IF;
13615             END IF;
13616           END LOOP;
13617 
13618           l_csm_line_details_tbl(j).amount       := l_total_lending;
13619           --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
13620           --Bug 4576794 - Start of Changes
13621           --When a funding date is specified on the asset,it needs to be used as the date_start
13622           --When funding date is not specified, we use the contract start date
13623           l_csm_line_details_tbl(j).date_start   := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
13624           --Bug 4576794 - End of Changes
13625 	      l_csm_line_details_tbl(j).level_index_number := idx;
13626 	      l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
13627           l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
13628           l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
13629           l_csm_line_details_tbl(j).rate               := l_variable_rate;
13630 
13631           --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
13632           --If the Down Payment is capitalised then , a new funding line with the opposite sign
13633           --needs to be added
13634           --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
13635           --Bug 4738011 - Start of Changes
13636           IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
13637             j := j + 1;
13638             idx := idx + 1;
13639             l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
13640             l_csm_line_details_tbl(j).description  := 'Funding';
13641             l_csm_line_details_tbl(j).amount       := l_line_rec.capital_reduction * (-1);
13642             l_csm_line_details_tbl(j).date_start   := l_hdr_rec.start_date;
13643             l_csm_line_details_tbl(j).level_index_number := idx;
13644             l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
13645             l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
13646             l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
13647           END IF;
13648           --Bug 4738011 - End of Changes
13649 
13650           FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
13651           -- Start of Bug#2757289 modification
13652 
13653             l_number_periods_remaining :=0;
13654             l_number_periods_completed := 0;
13655             l_number_periods_completed_cpy :=0;
13656             --If the payment is a stub
13657             IF (l_rl_rec.rule_information7 IS NOT NULL OR
13658                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
13659                (l_rl_rec.rule_information8 IS NOT NULL OR
13660                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
13661 
13662                IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
13663                  FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
13664                     --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
13665                     --Modified by kthiruva on 13-Feb-2006
13666                     --Bug 4964710 - Start of Changes
13667                     --============================================================================================
13668                     --Step 1 : If payment is in Arrears created the PPD stub First
13669                     --============================================================================================
13670                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
13671 	                AND l_ppd_tbl(k).paydown_date  < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
13672                         AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
13673 	                     j := j + 1;
13674 	                     idx := idx + 1;
13675 	                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
13676 	                     l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
13677 	                     l_csm_line_details_tbl(j).period             := g_stub_rec.period;
13678 	                     l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
13679 	                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
13680 	                     l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
13681                          IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
13682  	                        l_csm_line_details_tbl(j).amount          := okl_accounting_util.round_amount(p_amount  => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
13683                                                                                                       p_currency_code => l_hdr_rec.currency_code) ;
13684                             --The flag l_ppd_assigned is set to true.
13685                             --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
13686                             l_ppd_assigned                               := 'Y';
13687 	                     ELSE
13688                             l_csm_line_details_tbl(j).amount          := l_ppd_tbl(k).paydown_amount;
13689                          END IF;
13690                          l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
13691 	                     l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
13692 	                     l_csm_line_details_tbl(j).level_index_number := idx;
13693 	                     l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
13694 	                     l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
13695 	                     l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13696 		                 l_csm_line_details_tbl(j).rate               := l_variable_rate;
13697 		                 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
13698 	                        l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13699 	                     ELSE
13700 		                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13701 		                 END IF;
13702 
13703    		                 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13704                             l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13705 		                 END IF;
13706 
13707                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13708                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13709                          ELSE
13710                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13711                          END IF;
13712 
13713                    END IF;
13714                  END LOOP;
13715                  --=====================================================================
13716                  --Step 2 : The payment like for the existing stub is being created here
13717                  --=====================================================================
13718                  --The payment line for the existing stub is created here
13719                  j := j + 1;
13720                  idx := idx + 1;
13721                  l_csm_line_details_tbl(j).level_index_number := idx;
13722                  l_csm_line_details_tbl(j).amount             := TO_NUMBER(l_rl_rec.rule_information8);
13723                  IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
13724                  THEN
13725                     l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
13726                  ELSE
13727                     l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
13728                  END IF;
13729                  l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
13730                  l_csm_line_details_tbl(j).period             := g_stub_rec.period;
13731                  l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
13732                  l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13733                  l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
13734                  l_csm_line_details_tbl(j).description        := l_strm_name;
13735                  l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
13736                  l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
13737    	         l_csm_line_details_tbl(j).rate               := l_variable_rate;
13738 	         l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
13739                  --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
13740                  --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
13741                  --solving for the new payment plan.
13742                  --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
13743                  --both rate and amount
13744                  IF l_ppd_assigned = 'Y' THEN
13745   		            l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
13746                  ELSIF l_ppd_assigned = 'N' THEN
13747                     l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13748                  END IF;
13749 
13750                  IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
13751                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13752                  ELSE
13753                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13754                  END IF;
13755 
13756                  IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13757                    l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13758                  END IF;
13759 
13760                  IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13761                     l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13762                  ELSE
13763                     l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13764                  END IF;
13765                  --=======================================================================================
13766                  --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
13767                  --=======================================================================================
13768                  FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
13769                     --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
13770                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
13771 	                AND l_ppd_tbl(k).paydown_date  < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
13772                         AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
13773 	                     j := j + 1;
13774 	                     idx := idx + 1;
13775 	                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
13776 	                     l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
13777 	                     l_csm_line_details_tbl(j).period             := g_stub_rec.period;
13778 	                     l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
13779 	                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
13780 	                     l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
13781                          IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
13782  	                        l_csm_line_details_tbl(j).amount          := okl_accounting_util.round_amount(p_amount  => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
13783                                                                                                       p_currency_code => l_hdr_rec.currency_code) ;
13784                             --The flag l_ppd_assigned is set to true.
13785                             --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
13786                             l_ppd_assigned                               := 'Y';
13787 	                     ELSE
13788                             l_csm_line_details_tbl(j).amount          := l_ppd_tbl(k).paydown_amount;
13789                          END IF;
13790                          l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
13791                          l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
13792 	                 l_csm_line_details_tbl(j).level_index_number := idx;
13793 	                 l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
13794 	                 l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
13795 	                 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13796 		         l_csm_line_details_tbl(j).rate               := l_variable_rate;
13797 		         IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
13798 	                   l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13799 	                 ELSE
13800 		           l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13801 		         END IF;
13802 
13803    		         IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13804                            l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13805 		         END IF;
13806 
13807                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13808                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13809                          ELSE
13810                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13811                          END IF;
13812 
13813                    END IF;
13814                  END LOOP;
13815                  --Bug 4964710 - End of Changes
13816 
13817                END IF;
13818 -- End of Bug#2757289 modification
13819           /*mansrini Handle PPD for non-stub payments here*/
13820             ELSIF (l_rl_rec.rule_information7 IS NULL OR
13821                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
13822                   (l_rl_rec.rule_information8 IS NULL OR
13823                    l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
13824 
13825                 --When there is no PPD in the range of the periodic payment, the payment is retained as is
13826                 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
13827 	              OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date  > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
13828                   AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
13829 	              OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
13830 
13831          	        j := j + 1;
13832                     idx := idx + 1;
13833                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
13834                     l_csm_line_details_tbl(j).description        := l_strm_name;
13835                     l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
13836                     l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
13837                     l_csm_line_details_tbl(j).level_index_number := idx;
13838                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13839  		            l_csm_line_details_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
13840 
13841                     l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
13842                     l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
13843                     l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
13844                     l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
13845 		            l_csm_line_details_tbl(j).rate               := l_variable_rate;
13846                     --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
13847                     --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
13848                     --solving for the new payment plan.
13849                     --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
13850                     --both rate and amount
13851                     IF l_ppd_assigned = 'Y' THEN
13852   		              l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
13853                     ELSIF l_ppd_assigned = 'N' THEN
13854                       l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13855                     END IF;
13856 
13857                     IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13858                       l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13859                     END IF;
13860 
13861                     IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13862                       l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13863                     ELSE
13864                       l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13865                     END IF;
13866 
13867                     IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
13868                       l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13869                     ELSE
13870                       l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13871                     END IF;
13872 
13873                 ELSE
13874 
13875                   FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
13876                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
13877 	                AND l_ppd_tbl(k).paydown_date  < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN /*chk date cols*/
13878                       --=============================================================
13879                       --Step 1 : Obtaining the number of periods prior to the paydown
13880                       --=============================================================
13881                       l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term))  ;
13882                       --Modified by kthiruva on 12-Dec-2005
13883                       --Instead  of round, the function trunc needs to be used as we want the number
13884                       --of periods elapsed completely
13885                       --Bug 4878162 - Start of Changes
13886                       l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2))  / l_rl_rec.decoded_object1_id1,0);
13887                       --Bug 4878162 - End of Changes
13888 
13889         		      IF l_number_periods_completed = 0 THEN
13890 		                l_number_periods_completed_cpy := 0;
13891   		                l_number_periods_remaining     := l_number_periods_remaining - 1;
13892 		              ELSE
13893 		                l_number_periods_completed_cpy := l_number_periods_completed;
13894                         l_number_periods_remaining  := l_number_periods_remaining  - l_number_periods_completed - 1;
13895                       END IF;
13896                       --======================================================================================
13897                       --Step 2 : Creating the first payment line with the periods preceeding the first paydown
13898                       --         yet to be processed
13899                       --=======================================================================================
13900 
13901 		              IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
13902                      	 j := j + 1;
13903                          idx := idx + 1;
13904                          l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
13905                          l_csm_line_details_tbl(j).description        := l_strm_name;
13906                          l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
13907                          l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
13908                          l_csm_line_details_tbl(j).level_index_number := idx;
13909                          l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13910 
13911                          IF l_number_periods_completed_cpy = 0  THEN
13912    		                    l_csm_line_details_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
13913 		                 ELSE
13914   		                    l_csm_line_details_tbl(j).number_of_periods  := l_number_periods_completed_cpy;
13915 		                 END IF;
13916 
13917                          l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
13918                          l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
13919                          l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
13920                          l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
13921 	                     l_csm_line_details_tbl(j).rate               := l_variable_rate;
13922                          --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
13923                          --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
13924                          --solving for the new payment plan.
13925                          --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
13926                          --both rate and amount
13927                          IF l_ppd_assigned = 'Y' THEN
13928                             l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
13929                          ELSIF l_ppd_assigned = 'N' THEN
13930                             l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13931                          END IF;
13932 
13933                          IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13934                             l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13935                          END IF;
13936 
13937                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
13938                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
13939                          ELSE
13940                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
13941                          END IF;
13942 
13943                          IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
13944                             l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
13945                          ELSE
13946                             l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
13947                          END IF;
13948                          l_first_batch := 'Y';
13949                       END IF;
13950                       --=====================================================================
13951                       --Step 3 : If the payment is in Advance Create the Adjusting stub first
13952                       --=====================================================================
13953                       --If the payment is in Advance, the Adjusting stub needs to be created
13954                       --first followed up the PPD Stub
13955                       --For Payment in Arrears, the PPD stub is creted first followed by the
13956                       --Adjusting Stub
13957                       --Added by kthiruva on 10-Feb-2006
13958                       --Bug 4964710 - Start of Changes
13959                       IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
13960                       THEN
13961                         --Calculating the days between the Paydown date and the due date of the next periodic payment
13962                         l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
13963                         l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
13964 
13965                         --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
13966                         --line for remaining payments are created.
13967                         --If only one PPD is within a period then an adjusting stub is created for the rest
13968                         --of the period and one payment line for the remaining periods until the next paydown date
13969                         IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
13970    		                  j := j + 1;
13971 	                      idx := idx + 1;
13972 	                      l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
13973 	                      l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
13974 	                      l_csm_line_details_tbl(j).period             := g_stub_rec.period;
13975 	                      l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
13976 	                      l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
13977 	                      l_csm_line_details_tbl(j).description        := l_strm_name;
13978                               l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
13979                           --The adjusting stub would end one day before the PPD date
13980 	                      l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
13981                               l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
13982 	                      l_csm_line_details_tbl(j).level_index_number := idx;
13983 	                      l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
13984 	                      l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
13985 		              l_csm_line_details_tbl(j).rate               := l_variable_rate;
13986                           --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
13987                           --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
13988                           --solving for the new payment plan.
13989                           --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
13990                           --both rate and amount
13991                           IF l_ppd_assigned = 'Y' THEN
13992   		            l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
13993                           ELSIF l_ppd_assigned = 'N' THEN
13994                             l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
13995                           END IF;
13996 
13997  		          IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
13998  		            l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
13999 		          END IF;
14000 
14001    		          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14002 		            l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14003 		          ELSE
14004 		            l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14005 		          END IF;
14006 
14007  		          IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14008 		            l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14009 		          ELSE
14010 		            l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14011 		          END IF;
14012                         END IF;
14013                       END IF;
14014                       --Bug 4964710 - End of Changes
14015 
14016                       --=================================
14017                       --Step 4 : Create the paydown stub
14018                       --=================================
14019 
14020   	                   IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
14021                         /*PPD stub*/
14022 	                    j := j + 1;
14023 	                    idx := idx + 1;
14024 	                    l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14025 	                    l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
14026 	                    l_csm_line_details_tbl(j).period             := g_stub_rec.period;
14027 	                    l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14028 	                    l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14029 	                    l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
14030                         --Calculating the prorated paydown amount if it is the current PPD
14031                         IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
14032 	                      l_csm_line_details_tbl(j).amount           :=  okl_accounting_util.round_amount(p_amount  => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
14033                                                                                                           p_currency_code => l_hdr_rec.currency_code) ;
14034                           --The flag l_ppd_assigned is set to true.
14035                           --The flag is used to track whether a payment is appearing after the Prinicpal Paydown stub
14036                           l_ppd_assigned                               := 'Y';
14037                         ELSE
14038                           l_csm_line_details_tbl(j).amount           := l_ppd_tbl(k).paydown_amount;
14039                         END IF;
14040                         IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
14041                         THEN
14042 	                      l_csm_line_details_tbl(j).date_start         := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
14043                         ELSE
14044                           l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
14045                         END IF;
14046 	                    l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14047 	                    l_csm_line_details_tbl(j).level_index_number := idx;
14048 	                    l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14049 	                    l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14050 		                l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14051   		                l_csm_line_details_tbl(j).rate               := l_variable_rate;
14052 
14053 		                IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14054 		                  l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14055 		                END IF;
14056 
14057                         IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14058 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14059 		                ELSE
14060 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14061 		                END IF;
14062 
14063    		                IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14064 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14065 		                ELSE
14066 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14067 		                END IF;
14068                         --===============================================================================
14069                         --Step 5: Check whether Ajusting stub needs to be created and create if necessary
14070                         --================================================================================
14071                         --Added by kthiruva on 10-Feb-2006
14072                         --Bug 4964710 - Start of Changes
14073                         IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
14074                         THEN
14075                           --Calculating the days between the Paydown date and the due date of the next periodic payment
14076                           l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
14077                           l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
14078 
14079                           --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
14080                           --line for remaining payments are created.
14081                           --If only one PPD is within a period then an adjusting stub is created for the rest
14082                           --of the period and one payment line for the remaining periods until the next paydown date
14083                           IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
14084    		                    /*Adjusting stub*/
14085 	                        j := j + 1;
14086 	                        idx := idx + 1;
14087 	                        l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14088 	                        l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
14089 	                        l_csm_line_details_tbl(j).period             := g_stub_rec.period;
14090 	                        l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14091 	                        l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14092 	                        l_csm_line_details_tbl(j).description        := l_strm_name;
14093                             l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14094 	                        l_csm_line_details_tbl(j).date_start         := l_adjusting_stub_date;
14095                             l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14096 	                        l_csm_line_details_tbl(j).level_index_number := idx;
14097 	                        l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14098 	                        l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14099 		                    l_csm_line_details_tbl(j).rate               := l_variable_rate;
14100                             --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14101                             --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14102                             --solving for the new payment plan.
14103                             --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14104                             --both rate and amount
14105                             IF l_ppd_assigned = 'Y' THEN
14106   		                      l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14107                             ELSIF l_ppd_assigned = 'N' THEN
14108                               l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14109                             END IF;
14110 
14111    		                    IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14112  		                      l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14113 		                    END IF;
14114 
14115    		                    IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14116 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14117 		                    ELSE
14118 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14119 		                    END IF;
14120 
14121  		                    IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14122 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14123 		                    ELSE
14124 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14125 		                    END IF;
14126                           END IF;
14127                         END IF;
14128                         --Bug 4964710 - Start of Changes
14129                         --===================================================================================
14130                         --Step 6 : Check whether a payment line for the remaining payments needs to be created
14131                         --===================================================================================
14132 
14133                         --The periods between the end date of the adjusting stub and the next PPD is calculated
14134                         --If number of periods > 0, then a payment line for that many periods needs to be created.
14135                           IF k = l_ppd_tbl.LAST THEN
14136                             l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
14137                           ELSE
14138                             l_period_end_date := l_ppd_tbl(k+1).paydown_date;
14139                           END IF;
14140                           --Modified by kthiruva on 12-Dec-2005
14141                           --Use round  here
14142                           --Bug 4878162 - Start of Changes
14143                           l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start )  / l_rl_rec.decoded_object1_id1,0);
14144                           --Bug 4878162 - End of Changes
14145 
14146                           --Create a payment line only if the number of periods till the next paydown is greater than 0
14147                           IF (l_periods_after_ppd > 0) THEN
14148 		                    /*Remaining amts*/
14149 		                    j := j + 1;
14150 	                        idx := idx + 1;
14151 	                        l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14152 	                        l_csm_line_details_tbl(j).number_of_periods  := l_periods_after_ppd;
14153                             l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
14154 	                        l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14155 	                        l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14156 	                        l_csm_line_details_tbl(j).description        := l_strm_name;
14157                             l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14158 	                        l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14159 	                        l_csm_line_details_tbl(j).level_index_number := idx;
14160 	                        l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14161 	                        l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14162 		                    l_csm_line_details_tbl(j).date_start         := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
14163  		                    l_csm_line_details_tbl(j).rate               := l_variable_rate;
14164                             --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14165                             --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14166                             --solving for the new payment plan.
14167                             --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14168                             --both rate and amount
14169                             IF l_ppd_assigned = 'Y' THEN
14170   		                      l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14171                             ELSIF l_ppd_assigned = 'N' THEN
14172                               l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14173                             END IF;
14174 
14175            		            IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14176 		                      l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14177 		                    END IF;
14178 
14179           	                IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14180 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14181 		                    ELSE
14182 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14183 		                    END IF;
14184 
14185 		                    IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14186 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14187 		                    ELSE
14188 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14189 		                    END IF;
14190                           END IF;--End of condition l_periods_after_ppd >0
14191                       END IF;--The condition that checks the paydown type
14192                     END IF;--The condition check for the date of every PPD in the ppd_tbl
14193                   END LOOP;--loop for l_ppd_tbl
14194                 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
14195             END IF;--The condition checking for Stub or periodic payment
14196           END LOOP;
14197         --Added by kthiruva for VR Build
14198         --When the Payment Type on the loan contract is PRINCIPAL.
14199         ELSIF( UPPER(TRIM(l_strm_name)) = 'PRINCIPAL_PAYMENT' ) THEN
14200 	             -- srsreeni - Bug#5699923 - Added - Start
14201  	             -- DONOT request SuperTrump to generate streams
14202  	             -- for TERMINATED lines
14203  	             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
14204 		  IF(g_rep_req_yn = 'Y') THEN
14205 
14206           --Added by kthriuva for VR build
14207           --For payment of type principal, we need to request the dependents
14208           --on Rent. Hence obtaining the stream type id of Rent
14209            get_primary_no_prc_stream_type
14210             (
14211              p_khr_id =>p_chr_id,
14212              p_pdt_id =>l_pdt_id_rec.report_pdt_id,
14213              p_primary_sty_purpose =>'RENT',
14214              x_return_status => x_return_status,
14215              x_primary_sty_id => l_rent_sty_id
14216              );
14217            --kthriuva - End of Changes for VR build
14218 
14219 		    get_dependent_stream_types
14220             (
14221              p_khr_id =>p_chr_id,
14222              p_pdt_id =>l_pdt_id_rec.report_pdt_id,
14223              p_primary_sty_id =>l_rent_sty_id.id,
14224              x_return_status => x_return_status,
14225              x_dependent_sty_id =>l_strm_type_id_tbl
14226             );
14227 		              IF x_return_status = 'E' THEN
14228 		                x_return_status := 'S';
14229 		              END IF;
14230 
14231 		  ELSE
14232           --Added by kthriuva for VR build
14233           --For payment of type principal, we need to request the dependents
14234           --on Rent. Hence obtaining the stream type id of Rent
14235            get_primary_no_prc_stream_type
14236             (
14237              p_khr_id =>p_chr_id,
14238              p_pdt_id =>l_pdt_id_rec.pid,
14239              p_primary_sty_purpose =>'RENT',
14240              x_return_status => x_return_status,
14241              x_primary_sty_id => l_rent_sty_id
14242              );
14243 
14244            --kthriuva - End of Changes for VR build
14245 		    get_dependent_stream_types
14246             (
14247              p_khr_id =>p_chr_id,
14248              p_primary_sty_id =>l_rent_sty_id.id,
14249              x_return_status => x_return_status,
14250              x_dependent_sty_id =>l_strm_type_id_tbl
14251 		    );
14252 		              IF x_return_status = 'E' THEN
14253 		                x_return_status := 'S';
14254 		              END IF;
14255 
14256 		  END IF;
14257 
14258 
14259           IF l_strm_type_id_tbl.COUNT > 0 THEN
14260             FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
14261 			  m := m + 1;
14262 
14263     		  l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
14264     		  l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
14265               l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
14266 			END LOOP;
14267 		  END IF;
14268              END IF; -- End of check for TERMINATED status
14269  	             -- srsreeni - Bug#5699923 - Added - End
14270 
14271           j := j + 1;
14272           idx := idx + 1;
14273           l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
14274           l_csm_line_details_tbl(j).description  := 'Funding';
14275           --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
14276           --The Capital Reduction should not be removed from the Funding amount
14277           --Bug 4738011 - Start of Changes
14278           execute_formula(p_api_version   => p_api_version,
14279                           p_init_msg_list => p_init_msg_list,
14280                           x_return_status => x_return_status,
14281                           x_msg_count     => x_msg_count,
14282                           x_msg_data      => x_msg_data,
14283                           p_formula_name  => 'LINE_CAP_AMNT_LOAN',
14284                           p_contract_id   => p_chr_id,
14285                           p_line_id       => l_line_rec.id,
14286                           x_value         => l_total_lending);
14287           --Bug 4738011 - End of Changes
14288           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
14289             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
14290           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
14291             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
14292           END IF;
14293           --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
14294           l_ppd_count := 0;
14295           l_ppd_tbl.delete;
14296           --Added by kthiruva on 19-Sep-2005
14297           --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
14298           FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
14299             FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14300               IF (l_rl_rec.rule_information7 IS NOT NULL OR
14301                  l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
14302                  (l_rl_rec.rule_information8 IS NOT NULL OR
14303                  l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
14304                    l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
14305                    l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
14306                    l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
14307                    l_ppd_count := l_ppd_count + 1;
14308                END IF;
14309             END LOOP;
14310           END LOOP;
14311           --Adding the current paydown to the ppd_tbl as the current paydown is not yet updated on the contract
14312           l_ppd_tbl(l_ppd_count).paydown_date := p_paydown_date;
14313           --Assigning it to 0 initially the paydown amount per line needs to be derived after proration
14314           l_ppd_tbl(l_ppd_count).paydown_amount := 0;
14315           l_ppd_tbl(l_ppd_count).curr_paydown := 'Y';
14316           --kthiruva : End of Changes
14317 
14318           --Populating the diff_to_next column for all records in the l_ppd_tbl
14319           --The diff_to_next stores the number of days between a paydown and its subsequent paydown
14320           --If there is no subsequent paydown then the diff_to_next column stores a value 0
14321           FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
14322             IF l_ppd_tbl.COUNT = 1 THEN
14323               l_ppd_tbl(k).diff_to_next := 0;
14324             ELSE
14325               IF (k = l_ppd_tbl.LAST) THEN
14326                 l_ppd_tbl(k).diff_to_next := 0;
14327               ELSE
14328                 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
14329               END IF;
14330             END IF;
14331           END LOOP;
14332 
14333           l_csm_line_details_tbl(j).amount       := l_total_lending;
14334           --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
14335           --Bug 4576794 - Start of Changes
14336           --When a funding date is specified on the asset,it needs to be used as the date_start
14337           --When funding date is not specified, we use the contract start date
14338           l_csm_line_details_tbl(j).date_start   := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
14339           --Bug 4576794 - End of Changes
14340 	      l_csm_line_details_tbl(j).level_index_number := idx;
14341 	      l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
14342           l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14343           l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
14344           l_csm_line_details_tbl(j).rate               := l_variable_rate;
14345 
14346           --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
14347           --If the Down Payment is capitalised then , a new funding line with the opposite sign
14348           --needs to be added
14349           --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
14350           --Bug 4738011 - Start of Changes
14351           IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
14352             j := j + 1;
14353             idx := idx + 1;
14354             l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
14355             l_csm_line_details_tbl(j).description  := 'Funding';
14356             l_csm_line_details_tbl(j).amount       := l_line_rec.capital_reduction * (-1);
14357             l_csm_line_details_tbl(j).date_start   := l_hdr_rec.start_date;
14358             l_csm_line_details_tbl(j).level_index_number := idx;
14359             l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
14360             l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
14361             l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
14362           END IF;
14363           --Bug 4738011 - End of Changes
14364 
14365           FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14366           -- Start of Bug#2757289 modification
14367 
14368             l_number_periods_remaining :=0;
14369             l_number_periods_completed := 0;
14370             l_number_periods_completed_cpy :=0;
14371             --If payment is a stub
14372             IF (l_rl_rec.rule_information7 IS NOT NULL OR
14373                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
14374                (l_rl_rec.rule_information8 IS NOT NULL OR
14375                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
14376                IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
14377                  FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
14378                     --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
14379                     --Modified by kthiruva on 13-Feb-2006
14380                     --Bug 4964710 - Start of Changes
14381                     --============================================================================================
14382                     --Step 1 : If payment is in Arrears created the PPD stub First
14383                     --============================================================================================
14384                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
14385 	                AND l_ppd_tbl(k).paydown_date  < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
14386                     AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
14387                              j := j + 1;
14388 	                     idx := idx + 1;
14389 	                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14390 	                     l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
14391 	                     l_csm_line_details_tbl(j).period             := g_stub_rec.period;
14392 	                     l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14393 	                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14394 	                     l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
14395                              IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
14396  	                        l_csm_line_details_tbl(j).amount          := okl_accounting_util.round_amount(p_amount  => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
14397                                   p_currency_code => l_hdr_rec.currency_code) ;
14398                             --The flag l_ppd_assigned is set to true.
14399                             --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
14400                             l_ppd_assigned                               := 'Y';
14401 	                     ELSE
14402                             l_csm_line_details_tbl(j).amount          := l_ppd_tbl(k).paydown_amount;
14403                          END IF;
14404                          l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
14405 	                     l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14406 	                     l_csm_line_details_tbl(j).level_index_number := idx;
14407 	                     l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14408 	                     l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14409 	                     l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14410 		                 l_csm_line_details_tbl(j).rate               := l_variable_rate;
14411 		                 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14412 	                        l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14413 	                     ELSE
14414 		                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14415 		                 END IF;
14416 
14417    		                 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14418                             l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14419 		                 END IF;
14420 
14421                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14422                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14423                          ELSE
14424                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14425                          END IF;
14426 
14427                    END IF;
14428                  END LOOP;
14429                  --=====================================================================
14430                  --Step 2 : The payment like for the existing stub is being created here
14431                  --=====================================================================
14432                  --The payment line for the existing stub is created here
14433                  j := j + 1;
14434                  idx := idx + 1;
14435                  l_csm_line_details_tbl(j).level_index_number := idx;
14436                  l_csm_line_details_tbl(j).amount             := TO_NUMBER(l_rl_rec.rule_information8);
14437                  IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
14438                  THEN
14439                     l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
14440                  ELSE
14441                     l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
14442                  END IF;
14443                  l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
14444                  l_csm_line_details_tbl(j).period             := g_stub_rec.period;
14445                  l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14446                  l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14447                  l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14448                  l_csm_line_details_tbl(j).description        := l_strm_name;
14449                  l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14450                  l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14451    	             l_csm_line_details_tbl(j).rate               := l_variable_rate;
14452 	             l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14453                  --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14454                  --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14455                  --solving for the new payment plan.
14456                  --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14457                  --both rate and amount
14458                  IF l_ppd_assigned = 'Y' THEN
14459   		            l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14460                  ELSIF l_ppd_assigned = 'N' THEN
14461                     l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14462                  END IF;
14463 
14464                  IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14465                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14466                  ELSE
14467                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14468                  END IF;
14469 
14470                  IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14471                    l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14472                  END IF;
14473 
14474                  IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14475                     l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14476                  ELSE
14477                     l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14478                  END IF;
14479                  --=======================================================================================
14480                  --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
14481                  --=======================================================================================
14482                  FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
14483                     --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
14484                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
14485 	                AND l_ppd_tbl(k).paydown_date  < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
14486                         AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
14487 	                     j := j + 1;
14488 	                     idx := idx + 1;
14489 	                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14490 	                     l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
14491 	                     l_csm_line_details_tbl(j).period             := g_stub_rec.period;
14492 	                     l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14493 	                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14494 	                     l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
14495                          IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
14496  	                        l_csm_line_details_tbl(j).amount          := okl_accounting_util.round_amount(p_amount  => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
14497                                                                                                       p_currency_code => l_hdr_rec.currency_code) ;
14498                             --The flag l_ppd_assigned is set to true.
14499                             --The flag is used to track whether a stub is appearing after the Prinicpal Paydown stub
14500                             l_ppd_assigned                               := 'Y';
14501 	                     ELSE
14502                             l_csm_line_details_tbl(j).amount          := l_ppd_tbl(k).paydown_amount;
14503                          END IF;
14504                          l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
14505                          l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14506 	                     l_csm_line_details_tbl(j).level_index_number := idx;
14507 	                     l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14508 	                     l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14509 	                     l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14510 		                 l_csm_line_details_tbl(j).rate               := l_variable_rate;
14511 		                 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14512 	                        l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14513 	                     ELSE
14514 		                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14515   		                 END IF;
14516 
14517      	  	             IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14518                             l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14519 		                 END IF;
14520 
14521                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14522                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14523                          ELSE
14524                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14525                          END IF;
14526 
14527                     END IF;
14528                  END LOOP;
14529                  --Bug 4964710 - End of Changes
14530                END IF;
14531 -- End of Bug#2757289 modification
14532           /*mansrini Handle PPD for non-stub payments here*/
14533             ELSIF (l_rl_rec.rule_information7 IS NULL OR
14534                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
14535                   (l_rl_rec.rule_information8 IS NULL OR
14536                    l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
14537 
14538                 --When there is no PPD in the range of the periodic payment, the payment is retained as is
14539                 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
14540 	              OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date  > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
14541                   AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
14542 	              OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
14543 
14544          	        j := j + 1;
14545                     idx := idx + 1;
14546                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14547                     l_csm_line_details_tbl(j).description        := l_strm_name;
14548                     l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14549                     l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
14550                     l_csm_line_details_tbl(j).level_index_number := idx;
14551                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14552  		            l_csm_line_details_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
14553 
14554                     l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
14555                     l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14556                     l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14557                     l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14558 		            l_csm_line_details_tbl(j).rate               := l_variable_rate;
14559                     --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14560                     --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14561                     --solving for the new payment plan.
14562                     --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14563                     --both rate and amount
14564                     IF l_ppd_assigned = 'Y' THEN
14565   		              l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14566                     ELSIF l_ppd_assigned = 'N' THEN
14567                       l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14568                     END IF;
14569 
14570                     IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14571                       l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14572                     END IF;
14573 
14574                     IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14575                       l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14576                     ELSE
14577                       l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14578                     END IF;
14579 
14580                     IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14581                       l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14582                     ELSE
14583                       l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14584                     END IF;
14585 
14586                 ELSE
14587 
14588                   FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
14589                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
14590 	                AND l_ppd_tbl(k).paydown_date  < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN
14591                       --=============================================================
14592                       --Step 1 : Obtaining the number of periods prior to the paydown
14593                       --=============================================================
14594                       l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term))  ;
14595                       --Modified by kthiruva on 12-Dec-2005
14596                       --Use trunc instead of round as we need the number of periods elapsed completely
14597                       --Bug 4878162 - Start of Changes
14598                       l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2))  / l_rl_rec.decoded_object1_id1,0);
14599                       --Bug 4878162 - End of Changes
14600 
14601 
14602         		      IF l_number_periods_completed = 0 THEN
14603 		                l_number_periods_completed_cpy := 0;
14604   		                l_number_periods_remaining     := l_number_periods_remaining - 1;
14605 		              ELSE
14606 		                l_number_periods_completed_cpy := l_number_periods_completed;
14607                         l_number_periods_remaining  := l_number_periods_remaining  - l_number_periods_completed - 1;
14608                       END IF;
14609                       --======================================================================================
14610                       --Step 2 : Creating the first payment line with the periods preceeding the first paydown
14611                       --         yet to be processed
14612                       --=======================================================================================
14613 
14614 		             IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
14615                      	 j := j + 1;
14616                          idx := idx + 1;
14617                          l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14618                          l_csm_line_details_tbl(j).description        := l_strm_name;
14619                          l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14620                          l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
14621                          l_csm_line_details_tbl(j).level_index_number := idx;
14622                          l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14623 
14624                          IF l_number_periods_completed_cpy = 0  THEN
14625    		                    l_csm_line_details_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
14626 		                 ELSE
14627   		                    l_csm_line_details_tbl(j).number_of_periods  := l_number_periods_completed_cpy;
14628 		                 END IF;
14629 
14630                          l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
14631                          l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14632                          l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14633                          l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14634 	                     l_csm_line_details_tbl(j).rate               := l_variable_rate;
14635                          --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14636                          --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14637                          --solving for the new payment plan.
14638                          --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14639                          --both rate and amount
14640                          IF l_ppd_assigned = 'Y' THEN
14641                             l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14642                          ELSIF l_ppd_assigned = 'N' THEN
14643                             l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14644                          END IF;
14645 
14646                          IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14647                             l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14648                          END IF;
14649 
14650                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14651                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14652                          ELSE
14653                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14654                          END IF;
14655 
14656                          IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14657                             l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14658                          ELSE
14659                             l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14660                          END IF;
14661                          l_first_batch := 'Y';
14662                       END IF;
14663                       --=====================================================================
14664                       --Step 3 : If the payment is in Advance Create the Adjusting stub first
14665                       --=====================================================================
14666                       --If the payment is in Advance, the Adjusting stub needs to be created
14667                       --first followed up the PPD Stub
14668                       --For Payment in Arrears, the PPD stub is creted first followed by the
14669                       --Adjusting Stub
14670                       --Added by kthiruva on 10-Feb-2006
14671                       --Bug 4964710 - Start of Changes
14672                       IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
14673                       THEN
14674                         --Calculating the days between the Paydown date and the due date of the next periodic payment
14675                         l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1)  ;
14676                         l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
14677 
14678                         --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
14679                         --line for remaining payments are created.
14680                         --If only one PPD is within a period then an adjusting stub is created for the rest
14681                         --of the period and one payment line for the remaining periods until the next paydown date
14682                         IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
14683    		                  j := j + 1;
14684 	                      idx := idx + 1;
14685 	                      l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14686 	                      l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
14687 	                      l_csm_line_details_tbl(j).period             := g_stub_rec.period;
14688 	                      l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14689 	                      l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14690 	                      l_csm_line_details_tbl(j).description        := l_strm_name;
14691                               l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14692                           --The adjusting stub would end one day before the PPD date
14693 	                      l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
14694                           l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14695 	                      l_csm_line_details_tbl(j).level_index_number := idx;
14696 	                      l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14697 	                      l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14698 		                  l_csm_line_details_tbl(j).rate               := l_variable_rate;
14699                           --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14700                           --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14701                           --solving for the new payment plan.
14702                           --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14703                           --both rate and amount
14704                           IF l_ppd_assigned = 'Y' THEN
14705   		                    l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14706                           ELSIF l_ppd_assigned = 'N' THEN
14707                             l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14708                           END IF;
14709 
14710           		          IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14711  		                    l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14712 		                  END IF;
14713 
14714       		              IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14715 		                    l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14716 		                  ELSE
14717 		                    l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14718 		                  END IF;
14719 
14720  		                  IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14721 		                     l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14722 		                  ELSE
14723 		                     l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14724 		                  END IF;
14725                         END IF;
14726                       END IF;
14727                       --Bug 4964710 - End of Changes
14728 
14729                       --=================================
14730                       --Step 4 : Create the paydown stub
14731                       --=================================
14732 
14733   	                   IF p_paydown_type = OKL_CREATE_STREAMS_PVT.G_PAYDOWN_TYPE_PPD THEN
14734                         /*PPD stub*/
14735 	                    j := j + 1;
14736 	                    idx := idx + 1;
14737 	                    l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14738 	                    l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
14739 	                    l_csm_line_details_tbl(j).period             := g_stub_rec.period;
14740 	                    l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14741 	                    l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14742 	                    l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
14743                         --Calculating the prorated paydown amount if it is the current PPD
14744                         IF l_ppd_tbl(k).curr_paydown = 'Y' THEN
14745 	                      l_csm_line_details_tbl(j).amount           :=  okl_accounting_util.round_amount(p_amount  => (l_line_rec.oec/l_total_oec) * p_paydown_amount,
14746                                                                                                           p_currency_code => l_hdr_rec.currency_code) ;
14747                           --The flag l_ppd_assigned is set to true.
14748                           --The flag is used to track whether a payment is appearing after the Prinicpal Paydown stub
14749                           l_ppd_assigned                               := 'Y';
14750                         ELSE
14751                           l_csm_line_details_tbl(j).amount           := l_ppd_tbl(k).paydown_amount;
14752                         END IF;
14753                         IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
14754                         THEN
14755 	                      l_csm_line_details_tbl(j).date_start         := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
14756                         ELSE
14757                           l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
14758                         END IF;
14759 	                    l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14760 	                    l_csm_line_details_tbl(j).level_index_number := idx;
14761 	                    l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14762 	                    l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14763 		                l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14764   		                l_csm_line_details_tbl(j).rate               := l_variable_rate;
14765 
14766                         /*Populate the accrual end date as well*/
14767 	   	                /*Create a stub for principal paydown*/
14768 		                IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14769 		                  l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14770 		                END IF;
14771 
14772                         IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14773 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14774 		                ELSE
14775 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14776 		                END IF;
14777 
14778    		                IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14779 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14780 		                ELSE
14781 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14782 		                END IF;
14783                         --===============================================================================
14784                         --Step 5: Check whether Ajusting stub needs to be created and create if necessary
14785                         --================================================================================
14786                         --Added by kthiruva on 10-Feb-2006
14787                         --Bug 4964710 - Start of Changes
14788                         IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
14789                         THEN
14790                           --Calculating the days between the Paydown date and the due date of the next periodic payment
14791                           l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1)  ;
14792                           l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
14793 
14794                           --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
14795                           --line for remaining payments are created.
14796                           --If only one PPD is within a period then an adjusting stub is created for the rest
14797                           --of the period and one payment line for the remaining periods until the next paydown date
14798                           IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
14799    		                    /*Adjusting stub*/
14800 	                        j := j + 1;
14801 	                        idx := idx + 1;
14802 	                        l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14803 	                        l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
14804 	                        l_csm_line_details_tbl(j).period             := g_stub_rec.period;
14805 	                        l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14806 	                        l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14807 	                        l_csm_line_details_tbl(j).description        := l_strm_name;
14808                             l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14809 	                        l_csm_line_details_tbl(j).date_start         := l_adjusting_stub_date;
14810                             l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14811 	                        l_csm_line_details_tbl(j).level_index_number := idx;
14812 	                        l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14813 	                        l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14814 		                    l_csm_line_details_tbl(j).rate               := l_variable_rate;
14815                             --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14816                             --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14817                             --solving for the new payment plan.
14818                             --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14819                             --both rate and amount
14820                             IF l_ppd_assigned = 'Y' THEN
14821   		                      l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14822                             ELSIF l_ppd_assigned = 'N' THEN
14823                               l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14824                             END IF;
14825 
14826  	  	               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14827   		                  l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14828 		               END IF;
14829 
14830    		               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14831 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14832 		               ELSE
14833 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14834 		               END IF;
14835 
14836    		               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14837 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14838 		               ELSE
14839 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14840 		               END IF;
14841                             END IF;
14842                           END IF;
14843                           --===================================================================================
14844                           --Step 6 : Check whether a payment line for the remaining payments needs to be creted
14845                           --===================================================================================
14846 
14847                           --The periods between the end date of the adjusting stub and the next PPD is calculated
14848                           --If number of periods > 0, then a payment line for that many periods needs to be created.
14849                           IF k = l_ppd_tbl.LAST THEN
14850                             l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
14851                           ELSE
14852                             l_period_end_date := l_ppd_tbl(k+1).paydown_date;
14853                           END IF;
14854                           --Modified by kthiruva on 12-Dec-2005
14855                           --Use round here
14856                           --Bug 4878162 - Start of Changes
14857                           l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start )  / l_rl_rec.decoded_object1_id1,0);
14858                           --Bug 4878162 - Start of Changes
14859                           --Create a payment line only if the number of periods till the next paydown is greater than 0
14860                           IF (l_periods_after_ppd > 0) THEN
14861 		                    /*Remaining amts*/
14862 		                    j := j + 1;
14863 	                        idx := idx + 1;
14864 	                        l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14865 	                        l_csm_line_details_tbl(j).number_of_periods  := l_periods_after_ppd;
14866                             l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
14867 	                        l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
14868 	                        l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
14869 	                        l_csm_line_details_tbl(j).description        := l_strm_name;
14870                             l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14871 	                        l_csm_line_details_tbl(j).balance_type_code  := p_balance_type_code;
14872 	                        l_csm_line_details_tbl(j).level_index_number := idx;
14873 	                        l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
14874 	                        l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
14875 		                    l_csm_line_details_tbl(j).date_start         := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
14876  		                    l_csm_line_details_tbl(j).rate               := l_variable_rate;
14877                             --When l_ppd_assigned is 'Y', the PPD stub has already been created. And therefore
14878                             --for the subsequent stubs we lock only the Rate.The amount is unlocked as we are
14879                             --solving for the new payment plan.
14880                             --When l_ppd_assigned is 'N', the payment is prior to paydown and we therefore lock
14881                             --both rate and amount
14882                             IF l_ppd_assigned = 'Y' THEN
14883   		                      l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_RATE;
14884                             ELSIF l_ppd_assigned = 'N' THEN
14885                               l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_BOTH;
14886                             END IF;
14887 
14888            		            IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14889 		                      l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14890 		                    END IF;
14891 
14892           	                IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14893 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14894 		                    ELSE
14895 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14896 		                    END IF;
14897 
14898 		                    IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14899 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14900 		                    ELSE
14901 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14902 		                    END IF;
14903                           END IF;--End of condition l_periods_after_ppd >0
14904 
14905                       END IF;--The condition that checks the paydown type
14906                     END IF;--The condition check for the date of every PPD in the ppd_tbl
14907                   END LOOP;--loop for l_ppd_tbl
14908                 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
14909             END IF;--The condition checking for Stub or periodic payment
14910           END LOOP;
14911         --Emd of Changes for payment type 'PRINCIPAL_PAYMENT'
14912         ELSIF (((l_strm_name_rec.periodic_yn = 'Y'  ) AND
14913                 (UPPER(l_strm_name_rec.stream_type_purpose) = 'FEE') AND
14914                 (l_strm_name_rec.capitalize_yn = 'N')) OR
14915                ((l_strm_name_rec.periodic_yn = 'Y'  ) AND
14916 			   -- code for user defined streams
14917                 --(UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
14918 				(UPPER(l_strm_name_rec.stream_type_purpose) <> 'FEE'))) THEN
14919 				-- code for use defined streams ends here
14920           FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
14921             -- Start of Bug#2757289 modification
14922             IF (l_rl_rec.rule_information7 IS NOT NULL OR
14923                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
14924                (l_rl_rec.rule_information8 IS NOT NULL OR
14925                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
14926               k := k + 1;
14927               idx := idx + 1;
14928               l_csm_periodic_expenses_tbl(k).level_index_number := idx;
14929               l_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
14930               l_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
14931               l_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
14932               l_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
14933               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
14934               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
14935               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
14936               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
14937 
14938               IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14939                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14940               END IF;
14941               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14942                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14943               ELSE
14944                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
14945               END IF;
14946               -- Code for user defined streams
14947 			  --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
14948 			  IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
14949 			  -- code ends here
14950                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
14951               --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) THEN
14952 			  ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) THEN
14953                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
14954               ELSE
14955                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
14956               END If;
14957               -- End of Bug#2757289 modification
14958 
14959               -- Added by kthiruva on 29-Dec-2005.
14960               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
14961               -- Bug 4915938 - Start of Changes
14962               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14963                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14964               ELSE
14965                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14966               END IF;
14967               -- Bug 4915938 - End of Changes
14968 
14969             ELSIF (l_rl_rec.rule_information7 IS NULL OR
14970                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
14971                   (l_rl_rec.rule_information8 IS NULL OR
14972                   l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
14973               k := k + 1;
14974               idx := idx + 1;
14975               l_csm_periodic_expenses_tbl(k).level_index_number := idx;
14976               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
14977               l_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
14978               l_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
14979               l_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
14980               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
14981               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
14982               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
14983 
14984               IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
14985                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
14986               END IF;
14987              IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
14988                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
14989               ELSE
14990                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
14991               END IF;
14992               IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
14993                 l_csm_periodic_expenses_tbl(k).date_start  := l_hdr_rec.start_date;
14994               ELSE
14995                 l_csm_periodic_expenses_tbl(k).date_start  := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
14996               END IF;
14997               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
14998                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
14999               ELSE
15000                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15001               END IF;
15002               --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
15003 			  IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
15004                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
15005               --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) Then
15006 			  ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) Then
15007                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
15008               ELSE
15009                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
15010               END If;
15011             END IF;
15012           END LOOP;
15013         ELSIf ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) Then
15014           FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
15015             l := l + 1;
15016             l_csm_one_off_fee_tbl(l).description       := l_strm_name_rec.name;
15017             l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15018 	    l_csm_one_off_fee_tbl(l).amount            := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
15019             If(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
15020 	      l_csm_one_off_fee_tbl(l).date_paid         := l_hdr_rec.start_date;
15021             Else
15022 	      l_csm_one_off_fee_tbl(l).date_paid         := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
15023             End If;
15024             l_csm_one_off_fee_tbl(l).kle_asset_id      := l_line_rec.id;
15025           END LOOP;
15026         END IF;
15027       END LOOP;
15028     END LOOP;
15029     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15030       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15031     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15032       RAISE OKL_API.G_EXCEPTION_ERROR;
15033     End If;
15034     -- Extract fee line
15035     extract_fee_lines( p_api_version => p_api_version,
15036                        p_chr_id => TO_NUMBER(p_chr_id),
15037                        p_deal_type => l_deal_type,
15038                        p_init_msg_list => p_init_msg_list,
15039                        x_msg_count => x_msg_count,
15040                        x_msg_data => x_msg_data,
15041                        x_return_status => x_return_status,
15042                        px_csm_stream_types_tbl => l_csm_stream_types_tbl,
15043                        px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
15044                        px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
15045     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15046         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15047     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15048         raise OKL_API.G_EXCEPTION_ERROR;
15049     End If;
15050     extract_subsidized_lines(p_api_version => p_api_version,
15051                              p_init_msg_list => p_init_msg_list,
15052                              x_return_status => x_return_status,
15053                              x_msg_count => x_msg_count,
15054                              x_msg_data => x_msg_data,
15055                              p_chr_id => TO_NUMBER(p_chr_id),
15056                              px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
15057     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15058         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15059     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15060         raise OKL_API.G_EXCEPTION_ERROR;
15061     End If;
15062     check_for_mandatory_streams(
15063             p_api_version        => p_api_version,
15064             p_init_msg_list      => p_init_msg_list,
15065             x_msg_count          => x_msg_count,
15066             x_msg_data           => x_msg_data,
15067             x_return_status      => x_return_status,
15068             p_chr_id             => p_chr_id,
15069             p_deal_type          => l_deal_type,
15070             p_stream_types_tbl   => l_csm_stream_types_tbl,
15071             x_stream_types_tbl   => l_req_stream_types_tbl);
15072     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
15073         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15074     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
15075         raise OKL_API.G_EXCEPTION_ERROR;
15076     End If;
15077     -- Requesting for yields
15078     x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
15079     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15080       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15081     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15082       RAISE OKL_API.G_EXCEPTION_ERROR;
15083     END IF;
15084 
15085     If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
15086             okl_api.set_message(
15087                p_app_name => G_APP_NAME,
15088                p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
15089            raise OKL_API.G_EXCEPTION_ERROR;
15090     End If;
15091 
15092     x_csm_loan_header := l_csm_loan_header;
15093     x_csm_loan_lines_tbl := l_csm_loan_levels_tbl;
15094     x_csm_loan_levels_tbl  := l_csm_line_details_tbl;
15095     x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
15096     x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
15097     x_csm_yields_tbl := l_csm_yields_tbl;
15098     x_csm_stream_types_tbl := l_req_stream_types_tbl;
15099     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
15100                          x_msg_data	 => x_msg_data);
15101   EXCEPTION
15102     WHEN OKL_API.G_EXCEPTION_ERROR THEN
15103       IF l_hdr_csr%ISOPEN THEN
15104         CLOSE l_hdr_csr;
15105       END IF;
15106       IF ib_csr%ISOPEN THEN
15107         CLOSE ib_csr;
15108       END IF;
15109       IF l_line_rec_csr%ISOPEN THEN
15110         CLOSE l_line_rec_csr;
15111       END IF;
15112       IF l_rl_csr1%ISOPEN THEN
15113         CLOSE l_rl_csr1;
15114       END IF;
15115       IF strm_name_csr%ISOPEN THEN
15116         CLOSE strm_name_csr;
15117       END IF;
15118       IF l_rl_csr%ISOPEN THEN
15119         CLOSE l_rl_csr;
15120       END IF;
15121       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
15122                                 l_api_name,
15123                                G_PKG_NAME,
15124                                'OKL_API.G_RET_STS_ERROR',
15125                                x_msg_count,
15126                                x_msg_data,
15127                                '_PVT');
15128     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
15129       IF l_hdr_csr%ISOPEN THEN
15130         CLOSE l_hdr_csr;
15131       END IF;
15132       IF ib_csr%ISOPEN THEN
15133         CLOSE ib_csr;
15134       END IF;
15135       IF l_line_rec_csr%ISOPEN THEN
15136         CLOSE l_line_rec_csr;
15137       END IF;
15138       IF l_rl_csr1%ISOPEN THEN
15139         CLOSE l_rl_csr1;
15140       END IF;
15141       IF strm_name_csr%ISOPEN THEN
15142         CLOSE strm_name_csr;
15143       END IF;
15144       IF l_rl_csr%ISOPEN THEN
15145         CLOSE l_rl_csr;
15146       END IF;
15147       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
15148                                 l_api_name,
15149                                 G_PKG_NAME,
15150                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
15151                                 x_msg_count,
15152                                 x_msg_data,
15153                                 '_PVT');
15154     WHEN OTHERS then
15155       IF l_hdr_csr%ISOPEN THEN
15156         CLOSE l_hdr_csr;
15157       END IF;
15158       IF ib_csr%ISOPEN THEN
15159         CLOSE ib_csr;
15160       END IF;
15161       IF l_line_rec_csr%ISOPEN THEN
15162         CLOSE l_line_rec_csr;
15163       END IF;
15164       IF l_rl_csr1%ISOPEN THEN
15165         CLOSE l_rl_csr1;
15166       END IF;
15167       IF strm_name_csr%ISOPEN THEN
15168         CLOSE strm_name_csr;
15169       END IF;
15170       IF l_rl_csr%ISOPEN THEN
15171         CLOSE l_rl_csr;
15172       END IF;
15173       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
15174                                 l_api_name,
15175                                 G_PKG_NAME,
15176                                 'OTHERS',
15177                                 x_msg_count,
15178                                 x_msg_data,
15179                                 '_PVT');
15180   END extract_params_loan_paydown;
15181 
15182   PROCEDURE extract_params_ppd_rebook(
15183             p_api_version                IN  NUMBER,
15184             p_init_msg_list              IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
15185             p_chr_id                     IN  VARCHAR2,
15186 	        x_return_status              OUT NOCOPY VARCHAR2,
15187             x_msg_count                  OUT NOCOPY NUMBER,
15188             x_msg_data                   OUT NOCOPY VARCHAR2,
15189             x_csm_loan_header            OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
15190             x_csm_loan_lines_tbl         OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
15191             x_csm_loan_levels_tbl        OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
15192             x_csm_one_off_fee_tbl        OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
15193             x_csm_periodic_expenses_tbl  OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
15194             x_csm_yields_tbl             OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
15195             x_csm_stream_types_tbl       OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type) AS
15196 
15197     l_api_name		CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_PPD_REBOOK';
15198     l_api_version	CONSTANT NUMBER	      := 1;
15199     l_return_status	         VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
15200     l_level_type                 NUMBER;
15201     l_strm_name                  VARCHAR2(200);
15202     i                            BINARY_INTEGER := 0;
15203     j                            BINARY_INTEGER := 0;
15204     k                            BINARY_INTEGER := 0;
15205     l                            BINARY_INTEGER := 0;
15206     m                            BINARY_INTEGER := 0;
15207     idx                          BINARY_INTEGER := 0;
15208     l_basis_percent              NUMBER;
15209     styid                        NUMBER;
15210 	l_pricing_name               VARCHAR2(40);
15211     l_salvage                    NUMBER;
15212     l_purchase_option            VARCHAR2(256);
15213     l_deal_type                  VARCHAR2(256);
15214     l_purchase_option_amount     NUMBER;
15215     l_msg_count                  Number;
15216     l_msg_data                   varchar2(2000);
15217     l_chr_id                     Number := TO_NUMBER(p_chr_id);
15218     l_cle_id                     Number;
15219     l_rgd_code                   Varchar2(30) := 'LAPSTH';
15220     l_rdf_code                   Varchar2(30) := 'LASTRM';
15221     l_rdf_name                   Varchar2(80) := 'xxx';
15222     l_id1                        Varchar2(40);
15223     l_id2                        Varchar2(200);
15224     l_name                       Varchar2(200);
15225     l_description                Varchar2(2000);
15226     l_status                     Varchar2(1);
15227     l_start_date                 date;
15228     l_end_date                   date;
15229     l_org_id                     Number;
15230     l_inv_org_id                 Number;
15231     l_book_type_code             Varchar2(15);
15232     l_select                     Varchar2(2000);
15233     l_msg_index_out              Number;
15234     l_total_lending              NUMBER;
15235 
15236 
15237      Cursor l_struct_csr( chrId NUMBER ) is
15238      select distinct(nvl(crl.RULE_INFORMATION5,-1)) structure
15239      from   OKC_RULE_GROUPS_B crg,
15240             OKC_RULES_B crl
15241      where  crl.rgp_id = crg.id
15242             and crg.RGD_CODE = 'LALEVL'
15243             and crl.RULE_INFORMATION_CATEGORY = 'LASLL'
15244             and crg.dnz_chr_id = chrId;
15245 
15246 
15247     l_line_rec                   l_line_rec_csr%ROWTYPE;
15248     l_lne_rec                    l_line_rec_csr%ROWTYPE;
15249     l_hdr_rec                    l_hdr_csr%ROWTYPE;
15250     l_rl_rec                     l_rl_csr%ROWTYPE;
15251     l_hdrrl_rec                  l_hdrrl_csr%ROWTYPE;
15252     l_rl_rec1                    l_rl_csr1%ROWTYPE;
15253     l_tx_rec                     l_tx_csr%ROWTYPE;
15254     l_fee_strm_type_rec          fee_strm_type_csr%ROWTYPE;
15255     l_strm_name_rec              strm_name_csr%ROWTYPE;
15256     l_ib_rec                     ib_csr%ROWTYPE;
15257     l_struct_rec                 l_struct_csr%ROWTYPE;
15258 	l_pdt_id_rec                 l_hdr_pdt_csr%ROWTYPE;
15259     l_csm_loan_header            okl_create_streams_pvt.csm_loan_rec_type;
15260     l_csm_loan_levels_tbl        okl_create_streams_pvt.csm_loan_line_tbl_type;
15261     l_csm_one_off_fee_tbl        okl_create_streams_pub.csm_one_off_fee_tbl_type;
15262     l_csm_periodic_expenses_tbl  okl_create_streams_pub.csm_periodic_expenses_tbl_type;
15263     l_csm_yields_tbl             okl_create_streams_pub.csm_yields_tbl_type;
15264     l_csm_stream_types_tbl       okl_create_streams_pub.csm_stream_types_tbl_type;
15265     l_req_stream_types_tbl       okl_create_streams_pub.csm_stream_types_tbl_type;
15266     l_csm_line_details_tbl       okl_create_streams_pvt.csm_loan_level_tbl_type;
15267     l_rents_tbl                  okl_create_streams_pub.csm_periodic_expenses_tbl_type;
15268     l_strm_type_id_tbl okl_strm_type_id_tbl_type;
15269     --p_deal_type                  okl_st_gen_tmpt_sets.deal_type%TYPE;
15270 
15271     --mansrini : Code for VR build
15272     CURSOR  get_day_conv_on_contrct
15273     IS
15274     SELECT
15275 --Added by srsreeni for bug6076113
15276 --            rate_params.days_in_a_year_code,
15277 --            DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
15278             DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
15279             rate_params.days_in_a_year_code
15280 --srsreeni bug6076113 ends
15281     FROM    okl_k_rate_params rate_params
15282     WHERE   khr_id = p_chr_id;
15283 
15284     CURSOR  get_day_conv_on_sgt
15285     IS
15286     SELECT  DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
15287             gts.days_in_yr_code
15288     FROM
15289             okl_k_headers khr,
15290             okl_products_v pdt,
15291             okl_ae_tmpt_sets_v aes,
15292             OKL_ST_GEN_TMPT_SETS gts
15293     WHERE
15294             khr.pdt_id = pdt.id AND
15295             pdt.aes_id = aes.id AND
15296             aes.gts_id = gts.id AND
15297             khr.id  = p_chr_id;
15298 
15299     l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
15300     l_days_in_yr_code  OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
15301     l_number_periods_remaining okl_sif_fees.number_of_periods%TYPE;
15302     l_number_periods_completed okl_sif_fees.number_of_periods%TYPE;
15303     l_number_periods_completed_cpy okl_sif_fees.number_of_periods%TYPE;
15304     l_variable_rate okl_sif_fees.rate%TYPE;
15305     l_total_oec     okl_k_lines_full_v.oec%TYPE;
15306     --Added by kthiruva for the VR build
15307     l_rent_sty_id     strm_rec_type;
15308     l_prev_ppd        NUMBER := 0;
15309 
15310     --This Cursor fetches the Principal Paydown lines existing per asset line
15311     --on the contract
15312     CURSOR get_prev_ppd_csr(rgcode okc_rule_groups_b.rgd_code%TYPE,
15313                             rlcat  okc_rules_b.rule_information_category%TYPE,
15314                             chrId NUMBER,
15315                             cleId NUMBER )
15316     IS
15317     SELECT crl.id slh_id,
15318          crl.object1_id1,
15319          crl.rule_information1,
15320          crl.rule_information2,
15321          crl.rule_information3,
15322          crl.rule_information5,
15323          crl.rule_information6,
15324          crl.rule_information7,
15325          crl.rule_information8,
15326          crl.rule_information13,
15327          crl.rule_information10
15328     FROM okc_rule_groups_b crg,
15329          okc_rules_b crl,
15330          okl_strm_type_v sty
15331     WHERE crl.rgp_id = crg.id
15332     AND crg.rgd_code = rgcode
15333     AND crl.rule_information_category = rlcat
15334     AND crg.dnz_chr_id = chrId
15335     AND crg.cle_id = cleId
15336     AND crl.object1_id1 = sty.id
15337     AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
15338     ORDER BY crl.rule_information1;
15339 
15340     get_prev_ppd_rec        get_prev_ppd_csr%ROWTYPE;
15341 
15342     --Added by kthiruva on 15-Jun-2006 for Bug 5261952
15343     --The base rate defined on the contract is captured when the payment type is Principal
15344     CURSOR get_base_rate_csr(p_chr_id   IN NUMBER,
15345                              p_date     IN DATE)
15346     IS
15347     SELECT PARM.BASE_RATE
15348     FROM OKL_K_RATE_PARAMS parm
15349     WHERE PARM.KHR_ID = p_chr_id
15350     AND PARM.PARAMETER_TYPE_CODE = 'ACTUAL'
15351     AND p_date BETWEEN EFFECTIVE_FROM_DATE AND NVL(EFFECTIVE_TO_DATE,p_date);
15352 
15353     l_base_rate             NUMBER;
15354 
15355 FUNCTION get_end_date(
15356     l_start_date      IN  DATE,
15357     p_frequency       IN  VARCHAR2,
15358     p_period          IN  NUMBER,
15359     ---- cklee/mvasudev,06-02-2005,Bug#4392051/okl.h 4437938
15360     p_start_day   IN NUMBER DEFAULT NULL
15361 )
15362     RETURN DATE IS
15363     l_end_date date;
15364     factor number := 0;
15365     BEGIN
15366      if(p_frequency = 'M') then
15367         factor := 1;
15368      elsif(p_frequency = 'Q') then
15369         factor := 3;
15370      elsif(p_frequency = 'S') then
15371         factor := 6;
15372      elsif(p_frequency = 'A') then
15373         factor := 12;
15374      end if;
15375      l_end_date := Okl_Lla_Util_Pvt.calculate_end_date(p_start_date => l_start_date,
15376 	                                                   p_months     =>  factor * NVL(p_period,0),
15377 							   p_start_day => p_start_day);
15378 
15379      return l_end_date;
15380 EXCEPTION
15381     WHEN OTHERS THEN
15382       RETURN null;
15383 END get_end_date;
15384 
15385   BEGIN
15386     x_return_status := OKL_API.G_RET_STS_SUCCESS;
15387     -- Call start_activity to create savepoint, check compatibility
15388     -- and initialize message list
15389     x_return_status := OKL_API.START_ACTIVITY (
15390                                l_api_name
15391                                ,p_init_msg_list
15392                                ,'_PVT'
15393                                ,x_return_status);
15394     -- Check if activity started successfully
15395     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15396       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15397     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15398       RAISE OKL_API.G_EXCEPTION_ERROR;
15399     END IF;
15400 
15401 	OPEN l_hdr_pdt_csr(p_chr_id);
15402 	FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
15403 	CLOSE l_hdr_pdt_csr;
15404 
15405     --get day convention info : mansrini
15406     OPEN  get_day_conv_on_contrct;
15407     FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
15408     CLOSE get_day_conv_on_contrct;
15409 
15410 --Added by srsreeni for bug6076113
15411 --    IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
15412     IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
15413 --srsreeni bug6076113 ends
15414     THEN
15415       OPEN  get_day_conv_on_sgt;
15416       FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
15417       CLOSE get_day_conv_on_sgt;
15418     END IF;
15419     -- Validate the payments
15420     validate_payments(p_api_version    => p_api_version,
15421                       p_init_msg_list  => p_init_msg_list,
15422                       x_return_status  => x_return_status,
15423                       x_msg_count      => x_msg_count,
15424                       x_msg_data       => x_msg_data,
15425                       p_khr_id         => p_chr_id,
15426                       p_paym_tbl       => l_pay_tbl);
15427     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15428       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15429     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15430       RAISE OKL_API.G_EXCEPTION_ERROR;
15431     END IF;
15432     i := 0; j := 0; k := 0; l := 0; m := 0;
15433 	/*
15434     OPEN  l_hdr_pdt_csr(p_chr_id);
15435     FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
15436     CLOSE l_hdr_pdt_csr;
15437 	*/
15438     -- Header infro
15439     OPEN  l_hdr_csr(p_chr_id);
15440     FETCH l_hdr_csr into l_hdr_rec;
15441     IF l_hdr_csr%NOTFOUND THEN
15442       okl_api.set_message(p_app_name      => G_APP_NAME,
15443                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
15444                           p_token1        => G_COL_NAME_TOKEN,
15445                           p_token1_value  => 'Contract id');
15446       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15447     END IF;
15448     CLOSE l_hdr_csr;
15449     l_csm_loan_header.khr_id                     := p_chr_id;
15450     l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
15451     l_csm_loan_header.date_start             := l_hdr_rec.start_date;
15452     l_csm_loan_header.pdt_id                     := l_hdr_rec.pid;
15453     l_deal_type := l_hdr_rec.deal_type;
15454     -- Fetching the location of the asset
15455     OPEN  ib_csr(TO_NUMBER(p_chr_id));
15456     FETCH ib_csr into l_ib_rec;
15457     IF ib_csr%NOTFOUND THEN
15458       okl_api.set_message(p_app_name      => G_APP_NAME,
15459                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
15460                           p_token1        => G_COL_NAME_TOKEN,
15461                           p_token1_value  => 'Contract id');
15462       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15463     END IF;
15464     CLOSE ib_csr;
15465     l_csm_loan_header.country := l_ib_rec.country;
15466     --The orp code for the Principal Paydown process is used here.
15467     l_csm_loan_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
15468     -- Callling the formual ccontract cap amount
15469     --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
15470     --The Capital Reduction should not be removed from the Funding amount
15471     --Bug 4738011 - Start of Changes
15472     execute_formula(p_api_version   => p_api_version,
15473                     p_init_msg_list => p_init_msg_list,
15474                     x_return_status => x_return_status,
15475                     x_msg_count     => x_msg_count,
15476                     x_msg_data      => x_msg_data,
15477                     p_formula_name  => 'CONTRACT_CAP_AMNT_LOAN',
15478                     p_contract_id   => p_chr_id,
15479                     p_line_id       => NULL,
15480                     x_value         => l_total_lending);
15481     --Bug 4738011 - End of Changes
15482     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15483       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
15484     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15485       RAISE OKL_API.G_EXCEPTION_ERROR;
15486     END IF;
15487     l_csm_loan_header.total_lending := l_total_lending;
15488     l_csm_loan_header.sif_mode := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
15489 
15490     --kthiruva : for PR proj
15491     --Fetch the total OEC for this contract so that it can be prorated for each asset in
15492     --the following loop
15493     OPEN total_oec_csr(p_chr_id);
15494     FETCH total_oec_csr INTO l_total_oec;
15495     CLOSE total_oec_csr;
15496 
15497     -- asset infor
15498     FOR l_line_rec IN l_line_rec_csr ( p_chr_id , 'FREE_FORM1') LOOP
15499       i := i + 1;
15500 	  idx := 0;
15501       l_csm_loan_levels_tbl(i).kle_loan_id   := l_line_rec.id;
15502       --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
15503       --When the Down payment is not capitalised, the Down payment amount needs to be passed through the Down
15504       --payment tag in the Lending Loans tag of the Outbound XML.
15505       --Bug 4738011 - Start of Changes
15506       IF l_line_rec.capitalize_down_payment_yn = 'N' THEN
15507          l_csm_loan_levels_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
15508          l_csm_loan_levels_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
15509       END IF;
15510       --Bug 4738011 - End of Changes
15511 
15512       FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
15513           --Added by kthiruva on 05-Dec-2005
15514          --Initialising l_first_batch for every asset line
15515          --Bug 4777531 - Start of Changes
15516          l_first_batch := 'N';
15517          --Bug 4777531 - End of Changes
15518 
15519 	     l_level_type := l_rl_rec1.object1_id1;
15520 
15521         OPEN  strm_name_csr ( l_level_type );
15522         FETCH strm_name_csr into l_strm_name_rec;
15523         IF strm_name_csr%NOTFOUND THEN
15524           okl_api.set_message(p_app_name      => G_APP_NAME,
15525                               p_msg_name      => G_LLA_NO_MATCHING_RECORD,
15526                               p_token1        => G_COL_NAME_TOKEN,
15527                               p_token1_value  => 'Contract id');
15528           x_return_status := OKL_API.G_RET_STS_ERROR;
15529           EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
15530         END IF;
15531         CLOSE strm_name_csr;
15532 
15533         --l_strm_name := l_strm_name_rec.name;
15534 		l_strm_name := l_strm_name_rec.stream_type_purpose;
15535 	             -- srsreeni - Bug#5699923 - Added - Start
15536  	             -- DONOT request SuperTrump to generate streams
15537  	             -- for TERMINATED lines
15538  	             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
15539 --srsreeni Bug6245602 Added DOWN_PAYMENT and ESTIMATED_PROPERTY_TAX
15540         IF( UPPER(TRIM(l_strm_name)) NOT IN ('RENT','PRINCIPAL_PAYMENT','DOWN_PAYMENT','ESTIMATED_PROPERTY_TAX') ) THEN
15541 --srsreeni Bug6245602 end
15542 --Added by srsreeni for bug5841892
15543 --          m := m + 1;
15544 --          l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
15545 --bug5841892 end of changes
15546 		  get_dependent_pricing_name
15547           (
15548            p_khr_id =>p_chr_id,
15549            p_sty_id =>l_level_type,
15550            x_return_status =>x_return_status,
15551            x_dependent_pricing_name	=>l_pricing_name
15552           );
15553 --Added by srsreeni for bug5841892
15554 		if l_pricing_name is not null then
15555           m := m + 1;
15556           l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
15557           l_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
15558 
15559           l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
15560 		end if;
15561 --bug5841892 end of changes
15562         END IF;
15563              END IF; -- End of check for TERMINATED status
15564  	             -- srsreeni - Bug#5699923 - Added - End
15565         --idx := 0;
15566         IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
15567 	             -- srsreeni - Bug#5699923 - Added - Start
15568  	             -- DONOT request SuperTrump to generate streams
15569  	             -- for TERMINATED lines
15570  	             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
15571 		  IF(g_rep_req_yn = 'Y') THEN
15572 
15573 		    get_dependent_stream_types
15574             (
15575              p_khr_id =>p_chr_id,
15576              p_pdt_id =>l_pdt_id_rec.report_pdt_id,
15577              p_primary_sty_id =>l_level_type,
15578              x_return_status => x_return_status,
15579              x_dependent_sty_id =>l_strm_type_id_tbl
15580             );
15581 		              IF x_return_status = 'E' THEN
15582 		                x_return_status := 'S';
15583 		              END IF;
15584 
15585 		  ELSE
15586 
15587 		    get_dependent_stream_types
15588             (
15589              p_khr_id =>p_chr_id,
15590              p_primary_sty_id =>l_level_type,
15591              x_return_status => x_return_status,
15592              x_dependent_sty_id =>l_strm_type_id_tbl
15593 		    );
15594 		              IF x_return_status = 'E' THEN
15595 		                x_return_status := 'S';
15596 		              END IF;
15597 
15598 		  END IF;
15599 
15600 
15601           IF l_strm_type_id_tbl.COUNT > 0 THEN
15602             FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
15603 			  m := m + 1;
15604 
15605     		  l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
15606     		  l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
15607               l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
15608 			END LOOP;
15609 		  END IF;
15610              END IF; -- End of check for TERMINATED status
15611  	             -- srsreeni - Bug#5699923 - Added - End
15612 
15613           j := j + 1;
15614           idx := idx + 1;
15615           l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
15616           l_csm_line_details_tbl(j).description  := 'Funding';
15617           --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
15618           --The Capital Reduction should not be removed from the Funding amount
15619           --Bug 4738011 - Start of Changes
15620           execute_formula(p_api_version   => p_api_version,
15621                           p_init_msg_list => p_init_msg_list,
15622                           x_return_status => x_return_status,
15623                           x_msg_count     => x_msg_count,
15624                           x_msg_data      => x_msg_data,
15625                           p_formula_name  => 'LINE_CAP_AMNT_LOAN',
15626                           p_contract_id   => p_chr_id,
15627                           p_line_id       => l_line_rec.id,
15628                           x_value         => l_total_lending);
15629           --Bug 4738011 - End of Changes
15630           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
15631             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
15632           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
15633             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
15634           END IF;
15635           --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
15636           l_ppd_count := 0;
15637           l_ppd_tbl.delete;
15638           --Modified by kthiruva on 26-Sep-2005
15639           --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
15640           FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
15641             FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
15642               IF (l_rl_rec.rule_information7 IS NOT NULL OR
15643                  l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
15644                  (l_rl_rec.rule_information8 IS NOT NULL OR
15645                  l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
15646                    l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
15647                    l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
15648                    l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
15649                    l_ppd_count := l_ppd_count + 1;
15650                END IF;
15651             END LOOP;
15652           END LOOP;
15653 
15654           --Populating the diff_to_next column for all records in the l_ppd_tbl
15655           --The diff_to_next stores the number of days between a paydown and its subsequent paydown
15656           --If there is no subsequent paydown then the diff_to_next column stores a value 0
15657           FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
15658             IF l_ppd_tbl.COUNT = 1 THEN
15659               l_ppd_tbl(k).diff_to_next := 0;
15660             ELSE
15661               IF (k = l_ppd_tbl.LAST) THEN
15662                 l_ppd_tbl(k).diff_to_next := 0;
15663               ELSE
15664                 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
15665               END IF;
15666             END IF;
15667           END LOOP;
15668 
15669           l_csm_line_details_tbl(j).amount       := l_total_lending;
15670           --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
15671           --Bug 4576794 - Start of Changes
15672           --When a funding date is specified on the asset,it needs to be used as the date_start
15673           --When funding date is not specified, we use the contract start date
15674           l_csm_line_details_tbl(j).date_start   := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
15675           --Bug 4576794 - End of Changes
15676 	      l_csm_line_details_tbl(j).level_index_number := idx;
15677 	      l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
15678           l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15679           l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
15680 
15681           --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
15682           --If the Down Payment is capitalised then , a new funding line with the opposite sign
15683           --needs to be added
15684           --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
15685           --Bug 4738011 - Start of Changes
15686           IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
15687             j := j + 1;
15688             idx := idx + 1;
15689             l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
15690             l_csm_line_details_tbl(j).description  := 'Funding';
15691             l_csm_line_details_tbl(j).amount       := l_line_rec.capital_reduction * (-1);
15692             l_csm_line_details_tbl(j).date_start   := l_hdr_rec.start_date;
15693             l_csm_line_details_tbl(j).level_index_number := idx;
15694             l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
15695             l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
15696             l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
15697           END IF;
15698           --Bug 4738011 - End of Changes
15699 
15700           FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
15701           -- Start of Bug#2757289 modification
15702 
15703             l_number_periods_remaining :=0;
15704             l_number_periods_completed := 0;
15705             l_number_periods_completed_cpy :=0;
15706             --If the payment is a stub
15707             IF (l_rl_rec.rule_information7 IS NOT NULL OR
15708                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
15709                (l_rl_rec.rule_information8 IS NOT NULL OR
15710                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
15711 
15712                FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
15713                     --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
15714                     --Modified by kthiruva on 13-Feb-2006
15715                     --Bug 4964710 - Start of Changes
15716                     --============================================================================================
15717                     --Step 1 : If payment is in Arrears created the PPD stub First
15718                     --============================================================================================
15719                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15720 	                AND l_ppd_tbl(k).paydown_date  < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
15721                         AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
15722 	                     j := j + 1;
15723 	                     idx := idx + 1;
15724 	                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
15725 	                     l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
15726 	                     l_csm_line_details_tbl(j).period             := g_stub_rec.period;
15727 	                     l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
15728 	                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
15729 	                     l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
15730                          l_csm_line_details_tbl(j).amount          := l_ppd_tbl(k).paydown_amount;
15731                          l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
15732 	                     l_csm_line_details_tbl(j).level_index_number := idx;
15733 	                     l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
15734 	                     l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
15735                              --This rate column is relevant for rent payments only in the rebook scenarios
15736                              --after a reamort
15737                              l_csm_line_details_tbl(j).rate            := l_rl_rec.rule_information13;
15738 
15739                          --When the cashflow step is a payment line, both amount and rate should not be locked
15740                          -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
15741                          -- we are solving for rate.
15742 	                     l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
15743 		                 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15744 	                        l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15745 	                     ELSE
15746 		                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15747 		                 END IF;
15748 
15749    		                 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15750                             l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15751 		                 END IF;
15752 
15753                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15754                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15755                          ELSE
15756                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15757                          END IF;
15758 
15759                    END IF;
15760                  END LOOP;
15761                  --=====================================================================
15762                  --Step 2 : The payment like for the existing stub is being created here
15763                  --=====================================================================
15764                  --The payment line for the existing stub is created here
15765                  j := j + 1;
15766                  idx := idx + 1;
15767                  l_csm_line_details_tbl(j).level_index_number := idx;
15768                  l_csm_line_details_tbl(j).amount             := TO_NUMBER(l_rl_rec.rule_information8);
15769                  IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
15770                  THEN
15771                     l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
15772                  ELSE
15773                     l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
15774                  END IF;
15775                  l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
15776                  l_csm_line_details_tbl(j).period             := g_stub_rec.period;
15777                  l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
15778                  l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
15779                  l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
15780                  l_csm_line_details_tbl(j).description        := l_strm_name;
15781                  l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
15782                  l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
15783                  --This rate column is relevant for rent payments only in the rebook scenarios
15784                  --after a reamort
15785                  l_csm_line_details_tbl(j).rate            := l_rl_rec.rule_information13;
15786 
15787                  --When the cashflow step is a payment line, both amount and rate should not be locked
15788                  -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
15789                  -- we are solving for rate.
15790   	             l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
15791 
15792                  IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15793                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15794                  ELSE
15795                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15796                  END IF;
15797 
15798                  IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15799                    l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15800                  END IF;
15801 
15802                  IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15803                     l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15804                  ELSE
15805                     l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15806                  END IF;
15807                  --=======================================================================================
15808                  --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
15809                  --=======================================================================================
15810                  FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
15811                     --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
15812                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15813 	                AND l_ppd_tbl(k).paydown_date  < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
15814                         AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
15815 	                     j := j + 1;
15816 	                     idx := idx + 1;
15817 	                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
15818 	                     l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
15819 	                     l_csm_line_details_tbl(j).period             := g_stub_rec.period;
15820 	                     l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
15821 	                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
15822 	                     l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
15823                          l_csm_line_details_tbl(j).amount          := l_ppd_tbl(k).paydown_amount;
15824                          l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
15825 	                 l_csm_line_details_tbl(j).level_index_number := idx;
15826 	                 l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
15827 	                 l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
15828                          --This rate column is relevant for rent payments only in the rebook scenarios
15829                          --after a reamort
15830                          l_csm_line_details_tbl(j).rate            := l_rl_rec.rule_information13;
15831 
15832                      --When the cashflow step is a payment line, both amount and rate should not be locked
15833                      -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
15834                      -- we are solving for rate.
15835 	                 l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
15836 		         IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15837 	                   l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15838 	                 ELSE
15839 		           l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15840 		         END IF;
15841 
15842    		         IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15843                            l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15844 		         END IF;
15845 
15846                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15847                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15848                          ELSE
15849                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15850                          END IF;
15851 
15852                    END IF;
15853                  END LOOP;
15854                  --Bug 4964710 - End of Changes
15855 -- End of Bug#2757289 modification
15856           /*mansrini Handle PPD for non-stub payments here*/
15857             ELSIF (l_rl_rec.rule_information7 IS NULL OR
15858                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
15859                   (l_rl_rec.rule_information8 IS NULL OR
15860                    l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
15861 
15862                 --When there is no PPD in the range of the periodic payment, the payment is retained as is
15863                 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15864 	              OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date  > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
15865                   AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15866 	              OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
15867 
15868          	        j := j + 1;
15869                     idx := idx + 1;
15870                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
15871                     l_csm_line_details_tbl(j).description        := l_strm_name;
15872                     l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
15873                     l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
15874                     l_csm_line_details_tbl(j).level_index_number := idx;
15875                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
15876  		            l_csm_line_details_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
15877 
15878                     l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
15879                     l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
15880                     l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
15881                     --This rate column is relevant for rent payments only in the rebook scenarios
15882                     --after a reamort
15883                     l_csm_line_details_tbl(j).rate            := l_rl_rec.rule_information13;
15884 
15885                     --When the cashflow step is a payment line, both amount and rate should not be locked
15886                     -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
15887                     -- we are solving for rate.
15888                     l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
15889 
15890                     IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15891                       l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15892                     END IF;
15893 
15894                     IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15895                       l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15896                     ELSE
15897                       l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15898                     END IF;
15899 
15900                     IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15901                       l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15902                     ELSE
15903                       l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15904                     END IF;
15905 
15906                 ELSE
15907 
15908                   FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
15909                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
15910 	                AND l_ppd_tbl(k).paydown_date  < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN /*chk date cols*/
15911                       --=============================================================
15912                       --Step 1 : Obtaining the number of periods prior to the paydown
15913                       --=============================================================
15914                       l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term))  ;
15915                       --Modified by kthiruva on 12-Dec-2005
15916                       --Instead  of round, the function trunc needs to be used as we want the number
15917                       --of periods elapsed completely
15918                       --Bug 4878162 - Start of Changes
15919                       l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2))  / l_rl_rec.decoded_object1_id1,0);
15920                       --Bug 4878162 - End of Changes
15921 
15922         		      IF l_number_periods_completed = 0 THEN
15923 		                l_number_periods_completed_cpy := 0;
15924   		                l_number_periods_remaining     := l_number_periods_remaining - 1;
15925 		              ELSE
15926 		                l_number_periods_completed_cpy := l_number_periods_completed;
15927                         l_number_periods_remaining  := l_number_periods_remaining  - l_number_periods_completed - 1;
15928                       END IF;
15929                       --======================================================================================
15930                       --Step 2 : Creating the first payment line with the periods preceeding the first paydown
15931                       --         yet to be processed
15932                       --=======================================================================================
15933 
15934 		              IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
15935                      	 j := j + 1;
15936                          idx := idx + 1;
15937                          l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
15938                          l_csm_line_details_tbl(j).description        := l_strm_name;
15939                          l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
15940                          l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
15941                          l_csm_line_details_tbl(j).level_index_number := idx;
15942                          l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
15943 
15944                          IF l_number_periods_completed_cpy = 0  THEN
15945    		                    l_csm_line_details_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
15946 		                 ELSE
15947   		                    l_csm_line_details_tbl(j).number_of_periods  := l_number_periods_completed_cpy;
15948 		                 END IF;
15949 
15950                          l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
15951                          l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
15952                          l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
15953                          --This rate column is relevant for rent payments only in the rebook scenarios
15954                          --after a reamort
15955                          l_csm_line_details_tbl(j).rate            := l_rl_rec.rule_information13;
15956 
15957                          --When the cashflow step is a payment line, both amount and rate should not be locked
15958                          -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
15959                          -- we are solving for rate.
15960                          l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
15961 
15962                          IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
15963                             l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
15964                          END IF;
15965 
15966                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
15967                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
15968                          ELSE
15969                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
15970                          END IF;
15971 
15972                          IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
15973                             l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
15974                          ELSE
15975                             l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
15976                          END IF;
15977                          l_first_batch := 'Y';
15978                       END IF;
15979                       --=====================================================================
15980                       --Step 3 : If the payment is in Advance Create the Adjusting stub first
15981                       --=====================================================================
15982                       --If the payment is in Advance, the Adjusting stub needs to be created
15983                       --first followed up the PPD Stub
15984                       --For Payment in Arrears, the PPD stub is creted first followed by the
15985                       --Adjusting Stub
15986                       --Added by kthiruva on 10-Feb-2006
15987                       --Bug 4964710 - Start of Changes
15988                       IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
15989                       THEN
15990                         --Calculating the days between the Paydown date and the due date of the next periodic payment
15991                         l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
15992                         l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
15993 
15994                         --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
15995                         --line for remaining payments are created.
15996                         --If only one PPD is within a period then an adjusting stub is created for the rest
15997                         --of the period and one payment line for the remaining periods until the next paydown date
15998                         IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
15999    		                  j := j + 1;
16000 	                      idx := idx + 1;
16001 	                      l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16002 	                      l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
16003 	                      l_csm_line_details_tbl(j).period             := g_stub_rec.period;
16004 	                      l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16005 	                      l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16006 	                      l_csm_line_details_tbl(j).description        := l_strm_name;
16007                               l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16008                           --The adjusting stub would end one day before the PPD date
16009 	                      l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
16010 	                      l_csm_line_details_tbl(j).level_index_number := idx;
16011 	                      l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16012 	                      l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16013                               --This rate column is relevant for rent payments only in the rebook scenarios
16014                               --after a reamort
16015                               l_csm_line_details_tbl(j).rate            := l_rl_rec.rule_information13;
16016 
16017                           --When the cashflow step is a payment line, both amount and rate should not be locked
16018                           -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16019                           -- we are solving for rate.
16020        		              l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
16021 
16022  		          IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16023  		            l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16024 		          END IF;
16025 
16026    		          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16027 		            l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16028 		          ELSE
16029 		            l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16030 		          END IF;
16031 
16032  		          IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16033 		            l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16034 		          ELSE
16035 		            l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16036 		          END IF;
16037                         END IF;
16038                       END IF;
16039                       --Bug 4964710 - End of Changes
16040 
16041                       --=================================
16042                       --Step 4 : Create the paydown stub
16043                       --=================================
16044 
16045   	                     /*PPD stub*/
16046 	                    j := j + 1;
16047 	                    idx := idx + 1;
16048 	                    l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16049 	                    l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
16050 	                    l_csm_line_details_tbl(j).period             := g_stub_rec.period;
16051 	                    l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16052 	                    l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16053 	                    l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
16054                         l_csm_line_details_tbl(j).amount           := l_ppd_tbl(k).paydown_amount;
16055                         IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16056                         THEN
16057 	                      l_csm_line_details_tbl(j).date_start         := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16058                         ELSE
16059                           l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
16060                         END IF;
16061 	                    l_csm_line_details_tbl(j).level_index_number := idx;
16062 	                    l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16063 	                    l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16064                             --This rate column is relevant for rent payments only in the rebook scenarios
16065                             --after a reamort
16066                             l_csm_line_details_tbl(j).rate            := l_rl_rec.rule_information13;
16067 
16068                         --When the cashflow step is a payment line, both amount and rate should not be locked
16069                         -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16070                         -- we are solving for rate.
16071 		                l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
16072 
16073 		                IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16074 		                  l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16075 		                END IF;
16076 
16077                         IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16078 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16079 		                ELSE
16080 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16081 		                END IF;
16082 
16083    		                IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16084 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16085 		                ELSE
16086 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16087 		                END IF;
16088                         --===============================================================================
16089                         --Step 5: Check whether Ajusting stub needs to be created and create if necessary
16090                         --================================================================================
16091                         --Added by kthiruva on 10-Feb-2006
16092                         --Bug 4964710 - Start of Changes
16093                         IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
16094                         THEN
16095                           --Calculating the days between the Paydown date and the due date of the next periodic payment
16096                           l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16097                           l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
16098 
16099                           --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
16100                           --line for remaining payments are created.
16101                           --If only one PPD is within a period then an adjusting stub is created for the rest
16102                           --of the period and one payment line for the remaining periods until the next paydown date
16103                           IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
16104    		                    /*Adjusting stub*/
16105 	                        j := j + 1;
16106 	                        idx := idx + 1;
16107 	                        l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16108 	                        l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
16109 	                        l_csm_line_details_tbl(j).period             := g_stub_rec.period;
16110 	                        l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16111 	                        l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16112 	                        l_csm_line_details_tbl(j).description        := l_strm_name;
16113                             l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16114 	                        l_csm_line_details_tbl(j).date_start         := l_adjusting_stub_date;
16115 	                        l_csm_line_details_tbl(j).level_index_number := idx;
16116 	                        l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16117 	                        l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16118                                 --This rate column is relevant for rent payments only in the rebook scenarios
16119                                 --after a reamort
16120                                 l_csm_line_details_tbl(j).rate            := l_rl_rec.rule_information13;
16121 
16122                             --When the cashflow step is a payment line, both amount and rate should not be locked
16123                             -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16124                             -- we are solving for rate.
16125                             l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
16126 
16127    		                    IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16128  		                      l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16129 		                    END IF;
16130 
16131    		                    IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16132 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16133 		                    ELSE
16134 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16135 		                    END IF;
16136 
16137  		                    IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16138 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16139 		                    ELSE
16140 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16141 		                    END IF;
16142                           END IF;
16143                         END IF;
16144                         --Bug 4964710 - Start of Changes
16145                         --===================================================================================
16146                         --Step 6 : Check whether a payment line for the remaining payments needs to be created
16147                         --===================================================================================
16148 
16149                         --The periods between the end date of the adjusting stub and the next PPD is calculated
16150                         --If number of periods > 0, then a payment line for that many periods needs to be created.
16151                           IF k = l_ppd_tbl.LAST THEN
16152                             l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
16153                           ELSE
16154                             l_period_end_date := l_ppd_tbl(k+1).paydown_date;
16155                           END IF;
16156                           --Modified by kthiruva on 12-Dec-2005
16157                           --Use round here
16158                           --Bug 4878162 - Start of Changes
16159                           l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start )  / l_rl_rec.decoded_object1_id1,0);
16160                           --Bug 4878162 - End of Changes
16161 
16162                           --Create a payment line only if the number of periods till the next paydown is greater than 0
16163                           IF (l_periods_after_ppd > 0) THEN
16164 		                    /*Remaining amts*/
16165 		                    j := j + 1;
16166 	                        idx := idx + 1;
16167 	                        l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16168 	                        l_csm_line_details_tbl(j).number_of_periods  := l_periods_after_ppd;
16169                             l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
16170 	                        l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16171 	                        l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16172 	                        l_csm_line_details_tbl(j).description        := l_strm_name;
16173                             l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16174 	                        l_csm_line_details_tbl(j).level_index_number := idx;
16175 	                        l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16176 	                        l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16177                                 --This rate column is relevant for rent payments only in the rebook scenarios
16178                                 --after a reamort
16179                                 l_csm_line_details_tbl(j).rate            := l_rl_rec.rule_information13;
16180 
16181 		                    l_csm_line_details_tbl(j).date_start         := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
16182                             --When the cashflow step is a payment line, both amount and rate should not be locked
16183                             -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16184                             -- we are solving for rate.
16185   	                        l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
16186 
16187            		            IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16188 		                      l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16189 		                    END IF;
16190 
16191           	                IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16192 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16193 		                    ELSE
16194 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16195 		                    END IF;
16196 
16197 		                    IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16198 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16199 		                    ELSE
16200 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16201 		                    END IF;
16202                           END IF;--End of condition l_periods_after_ppd >0
16203                     END IF;--The condition check for the date of every PPD in the ppd_tbl
16204                   END LOOP;--loop for l_ppd_tbl
16205                 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
16206             END IF;--The condition checking for Stub or periodic payment
16207           END LOOP;
16208         --Added by kthiruva for VR Build
16209         --When the Payment Type on the loan contract is PRINCIPAL.
16210         ELSIF( UPPER(TRIM(l_strm_name)) = 'PRINCIPAL_PAYMENT' ) THEN
16211 	             -- srsreeni - Bug#5699923 - Added - Start
16212  	             -- DONOT request SuperTrump to generate streams
16213  	             -- for TERMINATED lines
16214  	             IF l_line_rec.STE_CODE <> 'TERMINATED' THEN
16215 		  IF(g_rep_req_yn = 'Y') THEN
16216 
16217           --Added by kthriuva for VR build
16218           --For payment of type principal, we need to request the dependents
16219           --on Rent. Hence obtaining the stream type id of Rent
16220            get_primary_no_prc_stream_type
16221             (
16222              p_khr_id =>p_chr_id,
16223              p_pdt_id =>l_pdt_id_rec.report_pdt_id,
16224              p_primary_sty_purpose =>'RENT',
16225              x_return_status => x_return_status,
16226              x_primary_sty_id => l_rent_sty_id
16227              );
16228            --kthriuva - End of Changes for VR build
16229 
16230 		    get_dependent_stream_types
16231             (
16232              p_khr_id =>p_chr_id,
16233              p_pdt_id =>l_pdt_id_rec.report_pdt_id,
16234              p_primary_sty_id =>l_rent_sty_id.id,
16235              x_return_status => x_return_status,
16236              x_dependent_sty_id =>l_strm_type_id_tbl
16237             );
16238 		              IF x_return_status = 'E' THEN
16239 		                x_return_status := 'S';
16240 		              END IF;
16241 
16242 		  ELSE
16243           --Added by kthriuva for VR build
16244           --For payment of type principal, we need to request the dependents
16245           --on Rent. Hence obtaining the stream type id of Rent
16246            get_primary_no_prc_stream_type
16247             (
16248              p_khr_id =>p_chr_id,
16249              p_pdt_id =>l_pdt_id_rec.pid,
16250              p_primary_sty_purpose =>'RENT',
16251              x_return_status => x_return_status,
16252              x_primary_sty_id => l_rent_sty_id
16253              );
16254 
16255            --kthriuva - End of Changes for VR build
16256 		    get_dependent_stream_types
16257             (
16258              p_khr_id =>p_chr_id,
16259              p_primary_sty_id =>l_rent_sty_id.id,
16260              x_return_status => x_return_status,
16261              x_dependent_sty_id =>l_strm_type_id_tbl
16262 		    );
16263 		              IF x_return_status = 'E' THEN
16264 		                x_return_status := 'S';
16265 		              END IF;
16266 
16267 		  END IF;
16268 
16269 
16270           IF l_strm_type_id_tbl.COUNT > 0 THEN
16271             FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
16272 			  m := m + 1;
16273 
16274     		  l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
16275     		  l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
16276               l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
16277 			END LOOP;
16278 		  END IF;
16279              END IF; -- End of check for TERMINATED status
16280  	             -- srsreeni - Bug#5699923 - Added - End
16281         --Fetching the base rate
16282         OPEN get_base_rate_csr(p_chr_id => p_chr_id,
16283                                p_date   => l_hdr_rec.start_date);
16284         FETCH get_base_rate_csr INTO l_base_rate;
16285         IF get_base_rate_csr%NOTFOUND THEN
16286           Okl_Api.SET_MESSAGE(p_app_name     => g_app_name,
16287                               p_msg_name     => 'OKL_LLAP_BASE_RATE_NOT_DEF');
16288           RAISE Okl_Api.G_EXCEPTION_ERROR;
16289         END IF;
16290         CLOSE get_base_rate_csr;
16291 
16292           j := j + 1;
16293           idx := idx + 1;
16294           l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
16295           l_csm_line_details_tbl(j).description  := 'Funding';
16296           --Modified by kthiruva on 24-Nov-2005 for the Down payment CR
16297           --The Capital Reduction should not be removed from the Funding amount
16298           --Bug 4738011 - Start of Changes
16299           execute_formula(p_api_version   => p_api_version,
16300                           p_init_msg_list => p_init_msg_list,
16301                           x_return_status => x_return_status,
16302                           x_msg_count     => x_msg_count,
16303                           x_msg_data      => x_msg_data,
16304                           p_formula_name  => 'LINE_CAP_AMNT_LOAN',
16305                           p_contract_id   => p_chr_id,
16306                           p_line_id       => l_line_rec.id,
16307                           x_value         => l_total_lending);
16308           --Bug 4738011 - End of Changes
16309           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
16310             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
16311           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
16312             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
16313           END IF;
16314           --Initialising l_ppd_count for every asset and deleting the existing l_ppd_Tbl
16315           l_ppd_count := 0;
16316           l_ppd_tbl.delete;
16317           --Added by kthiruva on 19-Sep-2005
16318           --All previous PPDs defined on the contract are fetched and added to a PL/SQL table
16319           FOR get_prev_ppd_rec IN get_prev_ppd_csr('LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id) LOOP
16320             FOR l_rl_rec in l_rl_csr ( get_prev_ppd_rec.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
16321               IF (l_rl_rec.rule_information7 IS NOT NULL OR
16322                  l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
16323                  (l_rl_rec.rule_information8 IS NOT NULL OR
16324                  l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
16325                    l_ppd_tbl(l_ppd_count).paydown_date := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
16326                    l_ppd_tbl(l_ppd_count).paydown_amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION8,'0'));
16327                    l_ppd_tbl(l_ppd_count).curr_paydown := 'N';
16328                    l_ppd_count := l_ppd_count + 1;
16329                END IF;
16330             END LOOP;
16331           END LOOP;
16332 
16333           --Populating the diff_to_next column for all records in the l_ppd_tbl
16334           --The diff_to_next stores the number of days between a paydown and its subsequent paydown
16335           --If there is no subsequent paydown then the diff_to_next column stores a value 0
16336           FOR k in l_ppd_tbl.FIRST.. l_ppd_tbl.LAST LOOP
16337             IF l_ppd_tbl.COUNT = 1 THEN
16338               l_ppd_tbl(k).diff_to_next := 0;
16339             ELSE
16340               IF (k = l_ppd_tbl.LAST) THEN
16341                 l_ppd_tbl(k).diff_to_next := 0;
16342               ELSE
16343                 l_ppd_tbl(k).diff_to_next := l_ppd_tbl(k+1).paydown_date - l_ppd_tbl(k).paydown_date;
16344               END IF;
16345             END IF;
16346           END LOOP;
16347 
16348           l_csm_line_details_tbl(j).amount       := l_total_lending;
16349           --Modified by kthiruva on 2-Sep-2005 for Pricing Enhancements
16350           --Bug 4576794 - Start of Changes
16351           --When a funding date is specified on the asset,it needs to be used as the date_start
16352           --When funding date is not specified, we use the contract start date
16353           l_csm_line_details_tbl(j).date_start   := nvl(l_line_rec.date_funding_expected,l_hdr_rec.start_date);
16354           --Bug 4576794 - End of Changes
16355 	      l_csm_line_details_tbl(j).level_index_number := idx;
16356 	      l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
16357           l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16358           l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
16359 
16360           --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
16361           --If the Down Payment is capitalised then , a new funding line with the opposite sign
16362           --needs to be added
16363           --If the downpayment is billable,the amount needs to be populated in okl_sif_lines
16364           --Bug 4738011 - Start of Changes
16365           IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
16366             j := j + 1;
16367             idx := idx + 1;
16368             l_csm_line_details_tbl(j).kle_loan_id  := l_line_rec.id;
16369             l_csm_line_details_tbl(j).description  := 'Funding';
16370             l_csm_line_details_tbl(j).amount       := l_line_rec.capital_reduction * (-1);
16371             l_csm_line_details_tbl(j).date_start   := l_hdr_rec.start_date;
16372             l_csm_line_details_tbl(j).level_index_number := idx;
16373             l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
16374             l_csm_line_details_tbl(j).days_in_month := l_days_in_month_code;
16375             l_csm_line_details_tbl(j).days_in_year    := l_days_in_yr_code;
16376           END IF;
16377           --Bug 4738011 - End of Changes
16378 
16379           FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
16380           -- Start of Bug#2757289 modification
16381 
16382             l_number_periods_remaining :=0;
16383             l_number_periods_completed := 0;
16384             l_number_periods_completed_cpy :=0;
16385             --If payment is a stub
16386             IF (l_rl_rec.rule_information7 IS NOT NULL OR
16387                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
16388                (l_rl_rec.rule_information8 IS NOT NULL OR
16389                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
16390                  FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
16391                     --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
16392                     --Modified by kthiruva on 13-Feb-2006
16393                     --Bug 4964710 - Start of Changes
16394                     --============================================================================================
16395                     --Step 1 : If payment is in Arrears created the PPD stub First
16396                     --============================================================================================
16397                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16398 	                AND l_ppd_tbl(k).paydown_date  < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
16399                     AND (l_rl_rec.RULE_INFORMATION10 IS NOT NULL) THEN
16400                              j := j + 1;
16401 	                     idx := idx + 1;
16402 	                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16403 	                     l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
16404 	                     l_csm_line_details_tbl(j).period             := g_stub_rec.period;
16405 	                     l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16406 	                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16407 	                     l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
16408                          l_csm_line_details_tbl(j).amount          := l_ppd_tbl(k).paydown_amount;
16409                          l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
16410 	                     l_csm_line_details_tbl(j).level_index_number := idx;
16411 	                     l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16412 	                     l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16413                              --When the payment type is Principal, the Base Rate specified in the contract needs to be
16414                              --captured and passed. This rate is used in calculation of the Interest Payment Streams
16415                              --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16416                              --l_base_Rate needs to be used.
16417                              l_csm_line_details_tbl(j).rate            := nvl(l_rl_rec.rule_information13,l_base_rate);
16418 
16419                          --When the cashflow step is a payment line, both amount and rate should not be locked
16420                          -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16421                          -- we are solving for rate.
16422 	                     l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
16423 		                 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16424 	                        l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16425 	                     ELSE
16426 		                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16427 		                 END IF;
16428 
16429    		                 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16430                             l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16431 		                 END IF;
16432 
16433                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16434                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16435                          ELSE
16436                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16437                          END IF;
16438 
16439                    END IF;
16440                  END LOOP;
16441                  --=====================================================================
16442                  --Step 2 : The payment like for the existing stub is being created here
16443                  --=====================================================================
16444                  --The payment line for the existing stub is created here
16445                  j := j + 1;
16446                  idx := idx + 1;
16447                  l_csm_line_details_tbl(j).level_index_number := idx;
16448                  l_csm_line_details_tbl(j).amount             := TO_NUMBER(l_rl_rec.rule_information8);
16449                  IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16450                  THEN
16451                     l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
16452                  ELSE
16453                     l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
16454                  END IF;
16455                  l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
16456                  l_csm_line_details_tbl(j).period             := g_stub_rec.period;
16457                  l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16458                  l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16459                  l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16460                  l_csm_line_details_tbl(j).description        := l_strm_name;
16461                  l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16462                  l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16463                  --When the payment type is Principal, the Base Rate specified in the contract needs to be
16464                  --captured and passed. This rate is used in calculation of the Interest Payment Streams
16465                  --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16466                  --l_base_Rate needs to be used.
16467                  l_csm_line_details_tbl(j).rate            := nvl(l_rl_rec.rule_information13,l_base_rate);
16468 
16469                  --When the cashflow step is a payment line, both amount and rate should not be locked
16470                  -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16471                  -- we are solving for rate.
16472                  l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
16473 
16474                  IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16475                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16476                  ELSE
16477                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16478                  END IF;
16479 
16480                  IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16481                    l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16482                  END IF;
16483 
16484                  IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16485                     l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16486                  ELSE
16487                     l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16488                  END IF;
16489                  --=======================================================================================
16490                  --Step 3 : IF the Payment is Advance then the PPD stub is created after the existing stub
16491                  --=======================================================================================
16492                  FOR k in l_ppd_tbl.FIRST..l_ppd_tbl.LAST LOOP
16493                     --If the paydown date lies inside the stub's start and end date, create a stub for the paydown
16494                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16495 	                AND l_ppd_tbl(k).paydown_date  < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7)
16496                         AND (l_rl_rec.RULE_INFORMATION10 IS NULL) THEN
16497 	                     j := j + 1;
16498 	                     idx := idx + 1;
16499 	                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16500 	                     l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
16501 	                     l_csm_line_details_tbl(j).period             := g_stub_rec.period;
16502 	                     l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16503 	                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16504 	                     l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
16505                          l_csm_line_details_tbl(j).amount          := l_ppd_tbl(k).paydown_amount;
16506                          l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
16507 	                     l_csm_line_details_tbl(j).level_index_number := idx;
16508 	                     l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16509 	                     l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16510                              --When the payment type is Principal, the Base Rate specified in the contract needs to be
16511                              --captured and passed. This rate is used in calculation of the Interest Payment Streams
16512                              --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16513                              --l_base_Rate needs to be used.
16514                              l_csm_line_details_tbl(j).rate            := nvl(l_rl_rec.rule_information13,l_base_rate);
16515 
16516                          --When the cashflow step is a payment line, both amount and rate should not be locked
16517                          -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16518                          -- we are solving for rate.
16519 	                     l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
16520 		                 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16521 	                        l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16522 	                     ELSE
16523 		                    l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16524   		                 END IF;
16525 
16526      	  	             IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16527                             l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16528 		                 END IF;
16529 
16530                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16531                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16532                          ELSE
16533                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16534                          END IF;
16535 
16536                     END IF;
16537                  END LOOP;
16538                  --Bug 4964710 - End of Changes
16539 -- End of Bug#2757289 modification
16540           /*mansrini Handle PPD for non-stub payments here*/
16541             ELSIF (l_rl_rec.rule_information7 IS NULL OR
16542                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
16543                   (l_rl_rec.rule_information8 IS NULL OR
16544                    l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
16545 
16546                 --When there is no PPD in the range of the periodic payment, the payment is retained as is
16547                 IF (l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16548 	              OR l_ppd_tbl(l_ppd_tbl.FIRST).paydown_date  > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3))
16549                   AND (l_ppd_tbl(l_ppd_tbl.LAST).paydown_date < FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16550 	              OR l_ppd_tbl(l_ppd_tbl.LAST).paydown_date > get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3)) THEN /*chk date cols*/
16551 
16552          	        j := j + 1;
16553                     idx := idx + 1;
16554                     l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16555                     l_csm_line_details_tbl(j).description        := l_strm_name;
16556                     l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16557                     l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
16558                     l_csm_line_details_tbl(j).level_index_number := idx;
16559                     l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16560  		            l_csm_line_details_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
16561 
16562                     l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
16563                     l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16564                     l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16565                     --When the payment type is Principal, the Base Rate specified in the contract needs to be
16566                     --captured and passed. This rate is used in calculation of the Interest Payment Streams
16567                     --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16568                     --l_base_Rate needs to be used.
16569                     l_csm_line_details_tbl(j).rate            := nvl(l_rl_rec.rule_information13,l_base_rate);
16570 
16571                     --When the cashflow step is a payment line, both amount and rate should not be locked
16572                     -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16573                     -- we are solving for rate.
16574   		            l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
16575 
16576                     IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16577                       l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16578                     END IF;
16579 
16580                     IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16581                       l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16582                     ELSE
16583                       l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16584                     END IF;
16585 
16586                     IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16587                       l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16588                     ELSE
16589                       l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16590                     END IF;
16591 
16592                 ELSE
16593 
16594                   FOR k in l_ppd_tbl.FIRST .. l_ppd_tbl.LAST LOOP
16595                     IF l_ppd_tbl(k).paydown_date  >= FND_DATE.canonical_to_date(l_rl_rec.rule_information2)
16596 	                AND l_ppd_tbl(k).paydown_date  < get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) THEN
16597                       --=============================================================
16598                       --Step 1 : Obtaining the number of periods prior to the paydown
16599                       --=============================================================
16600                       l_number_periods_remaining := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term))  ;
16601                       --Modified by kthiruva on 12-Dec-2005
16602                       --Use trunc instead of round as we need the number of periods elapsed completely
16603                       --Bug 4878162 - Start of Changes
16604                       l_number_periods_completed := trunc (months_between(l_ppd_tbl(k).paydown_date, FND_DATE.canonical_to_date(l_rl_rec.rule_information2))  / l_rl_rec.decoded_object1_id1,0);
16605                       --Bug 4878162 - End of Changes
16606 
16607 
16608         		      IF l_number_periods_completed = 0 THEN
16609 		                l_number_periods_completed_cpy := 0;
16610   		                l_number_periods_remaining     := l_number_periods_remaining - 1;
16611 		              ELSE
16612 		                l_number_periods_completed_cpy := l_number_periods_completed;
16613                         l_number_periods_remaining  := l_number_periods_remaining  - l_number_periods_completed - 1;
16614                       END IF;
16615                       --======================================================================================
16616                       --Step 2 : Creating the first payment line with the periods preceeding the first paydown
16617                       --         yet to be processed
16618                       --=======================================================================================
16619 
16620 		             IF (l_first_batch = 'N') AND (NVL(l_number_periods_completed,0) > 0 OR l_csm_line_details_tbl(j).date_start > l_ppd_tbl(k).paydown_date) THEN /*Periods that have been complete before paydown*/
16621                      	 j := j + 1;
16622                          idx := idx + 1;
16623                          l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16624                          l_csm_line_details_tbl(j).description        := l_strm_name;
16625                          l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16626                          l_csm_line_details_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2) ;
16627                          l_csm_line_details_tbl(j).level_index_number := idx;
16628                          l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16629 
16630                          IF l_number_periods_completed_cpy = 0  THEN
16631    		                    l_csm_line_details_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
16632 		                 ELSE
16633   		                    l_csm_line_details_tbl(j).number_of_periods  := l_number_periods_completed_cpy;
16634 		                 END IF;
16635 
16636                          l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
16637                          l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16638                          l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16639                          --When the payment type is Principal, the Base Rate specified in the contract needs to be
16640                          --captured and passed. This rate is used in calculation of the Interest Payment Streams
16641                          --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16642                          --l_base_Rate needs to be used.
16643                          l_csm_line_details_tbl(j).rate            := nvl(l_rl_rec.rule_information13,l_base_rate);
16644 
16645                          --When the cashflow step is a payment line, both amount and rate should not be locked
16646                          -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16647                          -- we are solving for rate.
16648                          l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
16649 
16650                          IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16651                             l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16652                          END IF;
16653 
16654                          IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16655                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16656                          ELSE
16657                             l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16658                          END IF;
16659 
16660                          IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16661                             l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16662                          ELSE
16663                             l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16664                          END IF;
16665                          l_first_batch := 'Y';
16666                       END IF;
16667                       --=====================================================================
16668                       --Step 3 : If the payment is in Advance Create the Adjusting stub first
16669                       --=====================================================================
16670                       --If the payment is in Advance, the Adjusting stub needs to be created
16671                       --first followed up the PPD Stub
16672                       --For Payment in Arrears, the PPD stub is creted first followed by the
16673                       --Adjusting Stub
16674                       --Added by kthiruva on 10-Feb-2006
16675                       --Bug 4964710 - Start of Changes
16676                       IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16677                       THEN
16678                         --Calculating the days between the Paydown date and the due date of the next periodic payment
16679                         l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1)  ;
16680                         l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
16681 
16682                         --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
16683                         --line for remaining payments are created.
16684                         --If only one PPD is within a period then an adjusting stub is created for the rest
16685                         --of the period and one payment line for the remaining periods until the next paydown date
16686                         IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
16687    		                  j := j + 1;
16688 	                      idx := idx + 1;
16689 	                      l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16690 	                      l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
16691 	                      l_csm_line_details_tbl(j).period             := g_stub_rec.period;
16692 	                      l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16693 	                      l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16694 	                      l_csm_line_details_tbl(j).description        := l_strm_name;
16695                               l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16696                           --The adjusting stub would end one day before the PPD date
16697 	                      l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
16698 	                      l_csm_line_details_tbl(j).level_index_number := idx;
16699 	                      l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16700 	                      l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16701                               --When the payment type is Principal, the Base Rate specified in the contract needs to be
16702                               --captured and passed. This rate is used in calculation of the Interest Payment Streams
16703                               --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16704                               --l_base_Rate needs to be used.
16705                               l_csm_line_details_tbl(j).rate            := nvl(l_rl_rec.rule_information13,l_base_rate);
16706 
16707                           --When the cashflow step is a payment line, both amount and rate should not be locked
16708                           -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16709                           -- we are solving for rate.
16710                           l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
16711 
16712           		          IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16713  		                    l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16714 		                  END IF;
16715 
16716       		              IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16717 		                    l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16718 		                  ELSE
16719 		                    l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16720 		                  END IF;
16721 
16722  		                  IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16723 		                     l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16724 		                  ELSE
16725 		                     l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16726 		                  END IF;
16727                         END IF;
16728                       END IF;
16729                       --Bug 4964710 - End of Changes
16730 
16731                       --=================================
16732                       --Step 4 : Create the paydown stub
16733                       --=================================
16734 
16735   	                     /*PPD stub*/
16736 	                    j := j + 1;
16737 	                    idx := idx + 1;
16738 	                    l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16739 	                    l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
16740 	                    l_csm_line_details_tbl(j).period             := g_stub_rec.period;
16741 	                    l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16742 	                    l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16743 	                    l_csm_line_details_tbl(j).description        := 'UNSCHEDULED_PRINCIPAL_PAYMENT';
16744                         l_csm_line_details_tbl(j).amount           := l_ppd_tbl(k).paydown_amount;
16745                         IF (l_rl_rec.RULE_INFORMATION10 IS NULL)
16746                         THEN
16747 	                      l_csm_line_details_tbl(j).date_start         := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1) ;
16748                         ELSE
16749                           l_csm_line_details_tbl(j).date_start         := l_ppd_tbl(k).paydown_date;
16750                         END IF;
16751 	                    l_csm_line_details_tbl(j).level_index_number := idx;
16752 	                    l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16753 	                    l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16754                             --When the payment type is Principal, the Base Rate specified in the contract needs to be
16755                             --captured and passed. This rate is used in calculation of the Interest Payment Streams
16756                             --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16757                             --l_base_Rate needs to be used.
16758                             l_csm_line_details_tbl(j).rate            := nvl(l_rl_rec.rule_information13,l_base_rate);
16759 
16760 
16761                         --When the cashflow step is a payment line, both amount and rate should not be locked
16762                         -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16763                         -- we are solving for rate.
16764 		                l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := OKL_CREATE_STREAMS_PVT.G_LOCK_AMOUNT;
16765 
16766                         /*Populate the accrual end date as well*/
16767 	   	                /*Create a stub for principal paydown*/
16768 		                IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16769 		                  l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16770 		                END IF;
16771 
16772                         IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16773 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16774 		                ELSE
16775 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16776 		                END IF;
16777 
16778    		                IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16779 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16780 		                ELSE
16781 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16782 		                END IF;
16783                         --===============================================================================
16784                         --Step 5: Check whether Ajusting stub needs to be created and create if necessary
16785                         --================================================================================
16786                         --Added by kthiruva on 10-Feb-2006
16787                         --Bug 4964710 - Start of Changes
16788                         IF (l_rl_rec.RULE_INFORMATION10 IS NOT NULL)
16789                         THEN
16790                           --Calculating the days between the Paydown date and the due date of the next periodic payment
16791                           l_adjusting_stub_date := add_months(FND_DATE.canonical_to_date(l_rl_rec.rule_information2), (l_number_periods_completed_cpy+1)*l_rl_rec.decoded_object1_id1)  ;
16792                           l_days_between := l_adjusting_stub_date - l_ppd_tbl(k).paydown_date;
16793 
16794                           --Checking to see if 2 PPD's lie inside a single period.If so, no adjusting stub and
16795                           --line for remaining payments are created.
16796                           --If only one PPD is within a period then an adjusting stub is created for the rest
16797                           --of the period and one payment line for the remaining periods until the next paydown date
16798                           IF (l_ppd_tbl(k).diff_to_next = 0 OR (l_ppd_tbl(k).diff_to_next > l_days_between)) THEN
16799    		                    /*Adjusting stub*/
16800 	                        j := j + 1;
16801 	                        idx := idx + 1;
16802 	                        l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16803 	                        l_csm_line_details_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
16804 	                        l_csm_line_details_tbl(j).period             := g_stub_rec.period;
16805 	                        l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16806 	                        l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16807 	                        l_csm_line_details_tbl(j).description        := l_strm_name;
16808                             l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16809 	                        l_csm_line_details_tbl(j).date_start         := l_adjusting_stub_date;
16810 	                        l_csm_line_details_tbl(j).level_index_number := idx;
16811 	                        l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16812 	                        l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16813                                 --When the payment type is Principal, the Base Rate specified in the contract needs to be
16814                                 --captured and passed. This rate is used in calculation of the Interest Payment Streams
16815                                 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16816                                 --l_base_Rate needs to be used.
16817                                 l_csm_line_details_tbl(j).rate            := nvl(l_rl_rec.rule_information13,l_base_rate);
16818 
16819                             --When the cashflow step is a payment line, both amount and rate should not be locked
16820                             -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16821                             -- we are solving for rate.
16822   	                        l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
16823 
16824  	  	               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16825   		                  l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16826 		               END IF;
16827 
16828    		               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16829 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16830 		               ELSE
16831 		                  l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16832 		               END IF;
16833 
16834    		               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16835 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16836 		               ELSE
16837 		                  l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16838 		               END IF;
16839                             END IF;
16840                           END IF;
16841                           --===================================================================================
16842                           --Step 6 : Check whether a payment line for the remaining payments needs to be creted
16843                           --===================================================================================
16844 
16845                           --The periods between the end date of the adjusting stub and the next PPD is calculated
16846                           --If number of periods > 0, then a payment line for that many periods needs to be created.
16847                           IF k = l_ppd_tbl.LAST THEN
16848                             l_period_end_date := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3);
16849                           ELSE
16850                             l_period_end_date := l_ppd_tbl(k+1).paydown_date;
16851                           END IF;
16852                           --Modified by kthiruva on 12-Dec-2005
16853                           --Use round here
16854                           --Bug 4878162 - Start of Changes
16855                           l_periods_after_ppd := round (months_between(l_period_end_date,l_csm_line_details_tbl(j).date_start )  / l_rl_rec.decoded_object1_id1,0);
16856                           --Bug 4878162 - Start of Changes
16857                           --Create a payment line only if the number of periods till the next paydown is greater than 0
16858                           IF (l_periods_after_ppd > 0) THEN
16859 		                    /*Remaining amts*/
16860 		                    j := j + 1;
16861 	                        idx := idx + 1;
16862 	                        l_csm_line_details_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16863 	                        l_csm_line_details_tbl(j).number_of_periods  := l_periods_after_ppd;
16864                             l_csm_line_details_tbl(j).period             := l_rl_rec.object1_id1;
16865 	                        l_csm_line_details_tbl(j).advance_or_arrears := g_stub_rec.advance_or_arrears;
16866 	                        l_csm_line_details_tbl(j).kle_loan_id        := l_line_rec.id;
16867 	                        l_csm_line_details_tbl(j).description        := l_strm_name;
16868                             l_csm_line_details_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16869 	                        l_csm_line_details_tbl(j).level_index_number := idx;
16870 	                        l_csm_line_details_tbl(j).days_in_month      := l_days_in_month_code;
16871 	                        l_csm_line_details_tbl(j).days_in_year       := l_days_in_yr_code;
16872                                 --When the payment type is Principal, the Base Rate specified in the contract needs to be
16873                                 --captured and passed. This rate is used in calculation of the Interest Payment Streams
16874                                 --During the booking scenario, the SLL lines do not contain the rate info.Therefore,
16875                                 --l_base_Rate needs to be used.
16876                                 l_csm_line_details_tbl(j).rate            := nvl(l_rl_rec.rule_information13,l_base_rate);
16877 
16878 		                    l_csm_line_details_tbl(j).date_start         := get_end_date(FND_DATE.canonical_to_date(l_rl_rec.rule_information2),l_rl_rec.OBJECT1_ID1,l_rl_rec.rule_information3) ;
16879                             --When the cashflow step is a payment line, both amount and rate should not be locked
16880                             -- For the PPD stub, the amount should be locked , but rate should be unlocked, as
16881                             -- we are solving for rate.
16882                             l_csm_line_details_tbl(j).LOCK_LEVEL_STEP    := G_FALSE;
16883 
16884            		            IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16885 		                      l_csm_line_details_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16886 		                    END IF;
16887 
16888           	                IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16889 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16890 		                    ELSE
16891 		                      l_csm_line_details_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16892 		                    END IF;
16893 
16894 		                    IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16895 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16896 		                    ELSE
16897 		                      l_csm_line_details_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16898 		                    END IF;
16899                           END IF;--End of condition l_periods_after_ppd >0
16900 
16901                     END IF;--The condition check for the date of every PPD in the ppd_tbl
16902                   END LOOP;--loop for l_ppd_tbl
16903                 END IF;--The condition checking if there is any PPD inside the date range of the periodic payment
16904             END IF;--The condition checking for Stub or periodic payment
16905           END LOOP;
16906         --Emd of Changes for payment type 'PRINCIPAL_PAYMENT'
16907         ELSIF (((l_strm_name_rec.periodic_yn = 'Y'  ) AND
16908                 (UPPER(l_strm_name_rec.stream_type_purpose) = 'FEE') AND
16909                 (l_strm_name_rec.capitalize_yn = 'N')) OR
16910                ((l_strm_name_rec.periodic_yn = 'Y'  ) AND
16911 			   -- code for user defined streams
16912                 --(UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
16913 				(UPPER(l_strm_name_rec.stream_type_purpose) <> 'FEE'))) THEN
16914 				-- code for use defined streams ends here
16915           FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
16916             -- Start of Bug#2757289 modification
16917             IF (l_rl_rec.rule_information7 IS NOT NULL OR
16918                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
16919                (l_rl_rec.rule_information8 IS NOT NULL OR
16920                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
16921               k := k + 1;
16922               idx := idx + 1;
16923               l_csm_periodic_expenses_tbl(k).level_index_number := idx;
16924               l_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
16925               l_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
16926               l_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
16927               l_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
16928               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
16929               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
16930               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
16931               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
16932 
16933               IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16934                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16935               END IF;
16936               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16937                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16938               ELSE
16939                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16940               END IF;
16941               -- Code for user defined streams
16942 			  --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
16943 			  IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
16944 			  -- code ends here
16945                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
16946               --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) THEN
16947 			  ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) THEN
16948                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
16949               ELSE
16950                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
16951               END If;
16952               -- End of Bug#2757289 modification
16953 
16954               -- Added by kthiruva on 29-Dec-2005.
16955               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
16956               -- Bug 4915938 - Start of Changes
16957               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16958                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16959               ELSE
16960                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16961               END IF;
16962               -- Bug 4915938 - End of Changes
16963 
16964             ELSIF (l_rl_rec.rule_information7 IS NULL OR
16965                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
16966                   (l_rl_rec.rule_information8 IS NULL OR
16967                   l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
16968               k := k + 1;
16969               idx := idx + 1;
16970               l_csm_periodic_expenses_tbl(k).level_index_number := idx;
16971               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
16972               l_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
16973               l_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
16974               l_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
16975               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
16976               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
16977               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
16978 
16979               IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
16980                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
16981               END IF;
16982              IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
16983                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
16984               ELSE
16985                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
16986               END IF;
16987               IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
16988                 l_csm_periodic_expenses_tbl(k).date_start  := l_hdr_rec.start_date;
16989               ELSE
16990                 l_csm_periodic_expenses_tbl(k).date_start  := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
16991               END IF;
16992               IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
16993                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
16994               ELSE
16995                 l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
16996               END IF;
16997               --IF ( UPPER(l_strm_name_rec.name) = 'INTEREST PAYMENT' ) THEN
16998 			  IF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'INTEREST_PAYMENT' ) THEN
16999                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
17000               --ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL PAYMENT' ) Then
17001 			  ELSIF ( UPPER(l_strm_name_rec.stream_type_purpose) = 'PRINCIPAL_PAYMENT' ) Then
17002                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
17003               ELSE
17004                 l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
17005               END If;
17006             END IF;
17007           END LOOP;
17008         ELSIf ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) Then
17009           FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
17010             l := l + 1;
17011             l_csm_one_off_fee_tbl(l).description       := l_strm_name_rec.name;
17012             l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
17013 	    l_csm_one_off_fee_tbl(l).amount            := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
17014             If(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
17015 	      l_csm_one_off_fee_tbl(l).date_paid         := l_hdr_rec.start_date;
17016             Else
17017 	      l_csm_one_off_fee_tbl(l).date_paid         := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
17018             End If;
17019             l_csm_one_off_fee_tbl(l).kle_asset_id      := l_line_rec.id;
17020           END LOOP;
17021         END IF;
17022       END LOOP;
17023     END LOOP;
17024     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17025       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17026     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17027       RAISE OKL_API.G_EXCEPTION_ERROR;
17028     End If;
17029     -- Extract fee line
17030     extract_fee_lines( p_api_version => p_api_version,
17031                        p_chr_id => TO_NUMBER(p_chr_id),
17032                        p_deal_type => l_deal_type,
17033                        p_init_msg_list => p_init_msg_list,
17034                        x_msg_count => x_msg_count,
17035                        x_msg_data => x_msg_data,
17036                        x_return_status => x_return_status,
17037                        px_csm_stream_types_tbl => l_csm_stream_types_tbl,
17038                        px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
17039                        px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
17040     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
17041         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17042     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
17043         raise OKL_API.G_EXCEPTION_ERROR;
17044     End If;
17045     extract_subsidized_lines(p_api_version => p_api_version,
17046                              p_init_msg_list => p_init_msg_list,
17047                              x_return_status => x_return_status,
17048                              x_msg_count => x_msg_count,
17049                              x_msg_data => x_msg_data,
17050                              p_chr_id => TO_NUMBER(p_chr_id),
17051                              px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
17052     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
17053         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17054     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
17055         raise OKL_API.G_EXCEPTION_ERROR;
17056     End If;
17057     check_for_mandatory_streams(
17058             p_api_version        => p_api_version,
17059             p_init_msg_list      => p_init_msg_list,
17060             x_msg_count          => x_msg_count,
17061             x_msg_data           => x_msg_data,
17062             x_return_status      => x_return_status,
17063             p_chr_id             => p_chr_id,
17064             p_deal_type          => l_deal_type,
17065             p_stream_types_tbl   => l_csm_stream_types_tbl,
17066             x_stream_types_tbl   => l_req_stream_types_tbl);
17067     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
17068         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17069     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
17070         raise OKL_API.G_EXCEPTION_ERROR;
17071     End If;
17072     -- Requesting for yields
17073     x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
17074     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17075       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17076     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17077       RAISE OKL_API.G_EXCEPTION_ERROR;
17078     END IF;
17079 
17080     If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17081             okl_api.set_message(
17082                p_app_name => G_APP_NAME,
17083                p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
17084            raise OKL_API.G_EXCEPTION_ERROR;
17085     End If;
17086 
17087     x_csm_loan_header := l_csm_loan_header;
17088     x_csm_loan_lines_tbl := l_csm_loan_levels_tbl;
17089     x_csm_loan_levels_tbl  := l_csm_line_details_tbl;
17090     x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
17091     x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
17092     x_csm_yields_tbl := l_csm_yields_tbl;
17093     x_csm_stream_types_tbl := l_req_stream_types_tbl;
17094     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
17095                          x_msg_data	 => x_msg_data);
17096   EXCEPTION
17097     WHEN OKL_API.G_EXCEPTION_ERROR THEN
17098       IF l_hdr_csr%ISOPEN THEN
17099         CLOSE l_hdr_csr;
17100       END IF;
17101       IF ib_csr%ISOPEN THEN
17102         CLOSE ib_csr;
17103       END IF;
17104       IF l_line_rec_csr%ISOPEN THEN
17105         CLOSE l_line_rec_csr;
17106       END IF;
17107       IF l_rl_csr1%ISOPEN THEN
17108         CLOSE l_rl_csr1;
17109       END IF;
17110       IF strm_name_csr%ISOPEN THEN
17111         CLOSE strm_name_csr;
17112       END IF;
17113       IF l_rl_csr%ISOPEN THEN
17114         CLOSE l_rl_csr;
17115       END IF;
17116       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
17117                                 l_api_name,
17118                                G_PKG_NAME,
17119                                'OKL_API.G_RET_STS_ERROR',
17120                                x_msg_count,
17121                                x_msg_data,
17122                                '_PVT');
17123     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
17124       IF l_hdr_csr%ISOPEN THEN
17125         CLOSE l_hdr_csr;
17126       END IF;
17127       IF ib_csr%ISOPEN THEN
17128         CLOSE ib_csr;
17129       END IF;
17130       IF l_line_rec_csr%ISOPEN THEN
17131         CLOSE l_line_rec_csr;
17132       END IF;
17133       IF l_rl_csr1%ISOPEN THEN
17134         CLOSE l_rl_csr1;
17135       END IF;
17136       IF strm_name_csr%ISOPEN THEN
17137         CLOSE strm_name_csr;
17138       END IF;
17139       IF l_rl_csr%ISOPEN THEN
17140         CLOSE l_rl_csr;
17141       END IF;
17142       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
17143                                 l_api_name,
17144                                 G_PKG_NAME,
17145                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
17146                                 x_msg_count,
17147                                 x_msg_data,
17148                                 '_PVT');
17149     WHEN OTHERS then
17150       IF l_hdr_csr%ISOPEN THEN
17151         CLOSE l_hdr_csr;
17152       END IF;
17153       IF ib_csr%ISOPEN THEN
17154         CLOSE ib_csr;
17155       END IF;
17156       IF l_line_rec_csr%ISOPEN THEN
17157         CLOSE l_line_rec_csr;
17158       END IF;
17159       IF l_rl_csr1%ISOPEN THEN
17160         CLOSE l_rl_csr1;
17161       END IF;
17162       IF strm_name_csr%ISOPEN THEN
17163         CLOSE strm_name_csr;
17164       END IF;
17165       IF l_rl_csr%ISOPEN THEN
17166         CLOSE l_rl_csr;
17167       END IF;
17168       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
17169                                 l_api_name,
17170                                 G_PKG_NAME,
17171                                 'OTHERS',
17172                                 x_msg_count,
17173                                 x_msg_data,
17174                                 '_PVT');
17175   END extract_params_ppd_rebook;
17176 
17177 
17178   Procedure extract_params_loan(
17179             p_api_version     IN  NUMBER,
17180             p_init_msg_list   IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
17181             p_chr_id          IN  VARCHAR2,
17182             x_return_status      OUT NOCOPY VARCHAR2,
17183             x_msg_count          OUT NOCOPY NUMBER,
17184             x_msg_data           OUT NOCOPY VARCHAR2,
17185             x_csm_loan_header           OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
17186             x_csm_loan_lines_tbl        OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
17187             x_csm_loan_levels_tbl       OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
17188             x_csm_one_off_fee_tbl       OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
17189             x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
17190             x_csm_yields_tbl            OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
17191             x_csm_stream_types_tbl      OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type)  AS
17192 
17193     --Added by kthiruva on 18-Apr-2006 for Bug 5161075
17194     --This cursor determines whether there have been any Paydowns on this Contract
17195     CURSOR is_ppd_available_csr(chrId NUMBER)
17196     IS
17197     SELECT count(crl.id)
17198     FROM okc_rule_groups_b crg,
17199          okc_rules_b crl,
17200          okl_strm_type_v sty
17201     WHERE crl.rgp_id = crg.id
17202     AND crg.rgd_code = 'LALEVL'
17203     AND crl.rule_information_category = 'LASLH'
17204     AND crg.dnz_chr_id = chrId
17205     AND crl.object1_id1 = sty.id
17206     AND sty.stream_type_purpose = 'UNSCHEDULED_PRINCIPAL_PAYMENT'
17207     ORDER BY crl.rule_information1;
17208 
17209     --Added by kthiruva on 18-Apr-2006 for Bug 5161075
17210     l_ppd_cnt                   NUMBER := 0;
17211 
17212     l_api_name		CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN';
17213     l_api_version	CONSTANT NUMBER	      := 1;
17214     l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
17215 
17216    Begin
17217 
17218     --Added by kthiruva on 18-Apr-2006
17219     --If there is a PPD defined on the Contract, then make a call to extract_params_ppd_rebook
17220     --else call extract_params_loan
17221     --Bug 5161075- Start of Changes
17222     OPEN is_ppd_available_csr(p_chr_id);
17223     FETCH is_ppd_available_csr INTO l_ppd_cnt;
17224     CLOSE is_ppd_available_csr;
17225 
17226     IF l_ppd_cnt > 0 THEN
17227 
17228           extract_params_ppd_rebook(
17229                     p_api_version,
17230                     p_init_msg_list,
17231                     p_chr_id,
17232                     x_return_status,
17233                     x_msg_count,
17234                     x_msg_data,
17235                     x_csm_loan_header,
17236                     x_csm_loan_lines_tbl,
17237                     x_csm_loan_levels_tbl,
17238                     x_csm_one_off_fee_tbl,
17239                     x_csm_periodic_expenses_tbl,
17240                     x_csm_yields_tbl,
17241                     x_csm_stream_types_tbl);
17242 
17243           --Added by kthiruva for Debugging
17244           write_to_log('After the call to extract_params_ppd_rebook, the return status is :'||x_return_status);
17245           If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17246               okl_api.set_message(
17247                  p_app_name => G_APP_NAME,
17248                  p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
17249               raise OKL_API.G_EXCEPTION_ERROR;
17250           End If;
17251 
17252     ELSE
17253           extract_params_loan_deal(
17254                     p_api_version,
17255                     p_init_msg_list,
17256                     p_chr_id,
17257 		            NULL,
17258                     x_return_status,
17259                     x_msg_count,
17260                     x_msg_data,
17261                     x_csm_loan_header,
17262                     x_csm_loan_lines_tbl,
17263                     x_csm_loan_levels_tbl,
17264                     x_csm_one_off_fee_tbl,
17265                     x_csm_periodic_expenses_tbl,
17266                     x_csm_yields_tbl,
17267                     x_csm_stream_types_tbl);
17268 
17269           --Added by kthiruva for Debugging
17270           write_to_log('After the call to extract_params_loan, the return status is :'||x_return_status);
17271           If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17272               okl_api.set_message(
17273                  p_app_name => G_APP_NAME,
17274                  p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
17275               raise OKL_API.G_EXCEPTION_ERROR;
17276           End If;
17277 
17278     END IF;
17279     print( l_api_name, 'end', x_return_status);
17280   end  extract_params_loan;
17281 
17282   --Added by kthiruva for Bug 5161075
17283   Procedure extract_params_loan_reamort(
17284             p_api_version     IN  NUMBER,
17285             p_init_msg_list   IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
17286             p_chr_id          IN  VARCHAR2,
17287             x_return_status      OUT NOCOPY VARCHAR2,
17288             x_msg_count          OUT NOCOPY NUMBER,
17289             x_msg_data           OUT NOCOPY VARCHAR2,
17290             x_csm_loan_header           OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
17291             x_csm_loan_lines_tbl        OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
17292             x_csm_loan_levels_tbl       OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type,
17293             x_csm_one_off_fee_tbl       OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
17294             x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
17295             x_csm_yields_tbl            OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
17296             x_csm_stream_types_tbl      OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type)  AS
17297 
17298     --Added by kthiruva on 18-Apr-2006 for Bug 5161075
17299     --This cursor determines whether there have been any Paydowns on this Contract
17300     CURSOR is_payment_available_csr(chrId NUMBER,
17301                                     strmPurpose VARCHAR2)
17302     IS
17303     SELECT count(crl.id)
17304     FROM okc_rule_groups_b crg,
17305          okc_rules_b crl,
17306          okl_strm_type_v sty
17307     WHERE crl.rgp_id = crg.id
17308     AND crg.rgd_code = 'LALEVL'
17309     AND crl.rule_information_category = 'LASLH'
17310     AND crg.dnz_chr_id = chrId
17311     AND crl.object1_id1 = sty.id
17312     AND sty.stream_type_purpose = strmPurpose
17313     ORDER BY crl.rule_information1;
17314 
17315     --Added by kthiruva on 18-Apr-2006 for Bug 5161075
17316     l_prin_cnt                   NUMBER := 0;
17317     l_ppd_cnt                    NUMBER := 0;
17318 
17319 
17320     l_api_name		CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LOAN_REAMORT';
17321     l_api_version	CONSTANT NUMBER	      := 1;
17322     l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
17323 
17324    Begin
17325 
17326     --Added by kthiruva on 18-Apr-2006
17327     --If there is a PPD defined on the Contract, then make a call to extract_params_ppd_rebook
17328     --else call extract_params_loan
17329     --Bug 5161075- Start of Changes
17330     OPEN is_payment_available_csr(p_chr_id,
17331                                'PRINCIPAL_PAYMENT');
17332     FETCH is_payment_available_csr INTO l_prin_cnt;
17333     CLOSE is_payment_available_csr;
17334 
17335     --Added by kthiruva on 18-Apr-2006
17336     --If there is a PPD defined on the Contract, then make a call to extract_params_ppd_rebook
17337     --else call extract_params_loan
17338     --Bug 5161075- Start of Changes
17339     OPEN is_payment_available_csr(p_chr_id,
17340                               'UNSCHEDULED_PRINCIPAL_PAYMENT');
17341     FETCH is_payment_available_csr INTO l_ppd_cnt;
17342     CLOSE is_payment_available_csr;
17343 
17344     IF l_prin_cnt > 0   THEN
17345           extract_params_loan_deal(
17346                     p_api_version,
17347                     p_init_msg_list,
17348                     p_chr_id,
17349 		            NULL,
17350                     x_return_status,
17351                     x_msg_count,
17352                     x_msg_data,
17353                     x_csm_loan_header,
17354                     x_csm_loan_lines_tbl,
17355                     x_csm_loan_levels_tbl,
17356                     x_csm_one_off_fee_tbl,
17357                     x_csm_periodic_expenses_tbl,
17358                     x_csm_yields_tbl,
17359                     x_csm_stream_types_tbl);
17360 
17361           --Added by kthiruva for Debugging
17362           write_to_log('After the call to extract_params_loan_deal, the return status is :'||x_return_status);
17363           If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17364               okl_api.set_message(
17365                  p_app_name => G_APP_NAME,
17366                  p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
17367               raise OKL_API.G_EXCEPTION_ERROR;
17368           End If;
17369       ELSE
17370           --Payment type on the contract is Rent
17371           --IF there is a PPD on the contract then call extract_params_loan_deal
17372           --otherwise call extract_params_ppd_rebook
17373           IF l_ppd_cnt = 0 THEN
17374               extract_params_loan_deal(
17375                     p_api_version,
17376                     p_init_msg_list,
17377                     p_chr_id,
17378 		            NULL,
17379                     x_return_status,
17380                     x_msg_count,
17381                     x_msg_data,
17382                     x_csm_loan_header,
17383                     x_csm_loan_lines_tbl,
17384                     x_csm_loan_levels_tbl,
17385                     x_csm_one_off_fee_tbl,
17386                     x_csm_periodic_expenses_tbl,
17387                     x_csm_yields_tbl,
17388                     x_csm_stream_types_tbl);
17389 
17390               --Added by kthiruva for Debugging
17391               write_to_log('After the call to extract_params_loan_deal, the return status is :'||x_return_status);
17392               If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17393                 okl_api.set_message(
17394                    p_app_name => G_APP_NAME,
17395                    p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
17396                 raise OKL_API.G_EXCEPTION_ERROR;
17397               End If;
17398            ELSIF l_ppd_cnt > 0 THEN
17399 
17400               --Payment on the contract is Rent. Therefore the PPD should also be incorporated
17401               --into the payment table that needs to be built to be sent to SuperTrump
17402               extract_params_ppd_rebook(
17403                     p_api_version,
17404                     p_init_msg_list,
17405                     p_chr_id,
17406                     x_return_status,
17407                     x_msg_count,
17408                     x_msg_data,
17409                     x_csm_loan_header,
17410                     x_csm_loan_lines_tbl,
17411                     x_csm_loan_levels_tbl,
17412                     x_csm_one_off_fee_tbl,
17413                     x_csm_periodic_expenses_tbl,
17414                     x_csm_yields_tbl,
17415                     x_csm_stream_types_tbl);
17416 
17417               --Added by kthiruva for Debugging
17418               write_to_log('After the call to extract_params_ppd_rebook, the return status is :'||x_return_status);
17419               If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
17420                   okl_api.set_message(
17421                      p_app_name => G_APP_NAME,
17422                      p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
17423                   raise OKL_API.G_EXCEPTION_ERROR;
17424               End If;
17425            END IF;
17426       END IF;
17427       print( l_api_name, 'end', x_return_status);
17428   end  extract_params_loan_reamort;
17429 
17430 -- Start modification 11i10 bakuchib
17431   PROCEDURE extract_params_lease_deal(
17432             p_api_version               IN  NUMBER,
17433             p_init_msg_list             IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
17434             p_chr_id                    IN  VARCHAR2,
17435             p_deal_type                 IN  VARCHAR2,
17436             x_return_status             OUT NOCOPY VARCHAR2,
17437             x_msg_count                 OUT NOCOPY NUMBER,
17438             x_msg_data                  OUT NOCOPY VARCHAR2,
17439             x_csm_lease_header          OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
17440             x_csm_one_off_fee_tbl       OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
17441             x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
17442             x_csm_yields_tbl            OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
17443             x_req_stream_types_tbl      OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type,
17444             x_csm_line_details_tbl      OUT NOCOPY okl_create_streams_pub.csm_line_details_tbl_type,
17445             x_rents_tbl                 OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type) AS
17446 
17447     l_api_name		CONSTANT  VARCHAR2(30) := 'EXTRACT_PARAMS_LEASE_DEAL';
17448     l_api_version	CONSTANT  NUMBER	      := 1;
17449     l_return_status	          VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
17450     lv_fed_only                   VARCHAR2(3) := 'N';
17451     ln_value                      NUMBER := 0;
17452     lv_fed_only_tax_book          OKL_TXD_ASSETS_B.TAX_BOOK%TYPE := NULL;
17453     lv_mg_tax_yn                  VARCHAR2(3) := 'N';
17454     ln_org_id                     okc_k_headers_b.authoring_org_id%TYPE;
17455     lv_currency_code              okc_k_headers_b.currency_code%TYPE;
17456     l_rnd_basis_percent           NUMBER;
17457     l_level_type                  NUMBER;
17458     l_strm_name                   VARCHAR2(200);
17459     ln_fin_yn                     NUMBER := 0;
17460     i                             BINARY_INTEGER := 0;
17461     j                             BINARY_INTEGER := 0;
17462     k                             BINARY_INTEGER := 0;
17463     l                             BINARY_INTEGER := 0;
17464     m                             BINARY_INTEGER := 0;
17465     idx                           BINARY_INTEGER := 0;
17466     l_basis_percent               NUMBER;
17467     styid                         NUMBER;
17468     l_salvage                     NUMBER;
17469     l_purchase_option             VARCHAR2(256);
17470     l_deal_type                   VARCHAR2(256);
17471     l_purchase_option_amount      NUMBER;
17472     l_msg_count                   Number;
17473     l_msg_data                    varchar2(2000);
17474     l_chr_id                      Number := TO_NUMBER(p_chr_id);
17475     l_cle_id                      Number;
17476     l_rgd_code                    Varchar2(30) := 'LAPSTH';
17477     l_rdf_code                    Varchar2(30) := 'LASTRM';
17478     l_rdf_name                    Varchar2(80) := 'xxx';
17479     l_id1                         Varchar2(40);
17480     l_id2                         Varchar2(200);
17481     l_name                        Varchar2(200);
17482     l_description                 Varchar2(2000);
17483     l_status                      Varchar2(1);
17484     l_start_date                  date;
17485     l_end_date                    date;
17486     l_org_id                      Number;
17487     l_inv_org_id                  Number;
17488     l_book_type_code              Varchar2(15);
17489     l_select                      Varchar2(2000);
17490     l_msg_index_out               Number;
17491     lv_diff_date                  VARCHAR2(3) := 'N';
17492     l_value                       OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17493     l_tradein                     OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17494     l_capreduc                    OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17495     l_feecap                      OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17496     l_capint                      OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17497     l_discount                    OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
17498     l_corp_dep_cost               OKL_TXL_ASSETS_B.DEPRECIATION_COST%TYPE := 0;
17499     l_tax_dep_cost                OKL_TXD_ASSETS_B.COST%TYPE := 0;
17500     l_lease_tax_owner             okc_rules_b.rule_information1%TYPE := NULL;
17501     lx_no_data_found              BOOLEAN;
17502     --  l_sty_id                      NUMBER;
17503     l_sty_id                      strm_rec_type;
17504     l_down_payment_sty_id         strm_rec_type;
17505     l_dummy_sty_id                strm_rec_type;
17506     l_pricing_name                VARCHAR2(40);
17507 
17508     l_dependent_sty_id			  NUMBER;
17509     l_strm_type_id_tbl okl_strm_type_id_tbl_type;
17510     l_sub_amt                  OKL_K_LINES.AMOUNT%TYPE := 0;
17511     l_sub_override_amt         OKL_K_LINES.SUBSIDY_OVERRIDE_AMOUNT%TYPE := 0;
17512 
17513 
17514     -- To check if the chr_id has Financed fee feetype defined
17515     CURSOR l_financed_type_csr (chrId NUMBER)
17516     IS
17517     SELECT 1
17518     FROM dual
17519     WHERE EXISTS (SELECT 1
17520                   FROM okc_k_lines_b cle,
17521                        okc_line_styles_b lse,
17522                        okl_k_lines kle
17523                   WHERE cle.dnz_chr_id = chrId
17524                   AND cle.lse_id = lse.id
17525                   AND lse.lty_code = 'FEE'
17526                   AND cle.id = kle.id
17527                   AND kle.fee_type in ('ROLLOVER', 'FINANCED'));
17528     -- get the currency_code and Authoring_org_id
17529     -- from okc_k_headers_b
17530     CURSOR get_org_id(p_chr_id  okc_k_headers_b.id%TYPE)
17531     IS
17532     SELECT authoring_org_id,
17533            currency_code
17534     FROM okc_k_headers_b
17535     WHERE id = p_chr_id;
17536     -- get the Lease Contract Header info
17537     CURSOR l_hdr_csr_lease(chrId  NUMBER)
17538     IS
17539     SELECT chr.orig_system_source_code,
17540            chr.start_date,
17541            chr.end_date,
17542            chr.template_yn,
17543            chr.authoring_org_id,
17544            khr.expected_delivery_date,
17545            chr.inv_organization_id,
17546            khr.deal_type,
17547            pdt.id  pid,
17548            NVL(pdt.reporting_pdt_id, -1) report_pdt_id,
17549            chr.currency_code currency_code,
17550            khr.term_duration term
17551     FROM okc_k_headers_v chr,
17552          okl_k_headers khr,
17553          okl_products_v pdt
17554     WHERE khr.id = chr.id
17555     AND chr.id = chrId
17556     AND khr.pdt_id = pdt.id(+);
17557     -- get the Lease Header rule information
17558     CURSOR l_hdrrl_csr_lease(rgcode okc_rule_groups_b.rgd_code%TYPE,
17559                              rlcat  okc_rules_b.rule_information_category%TYPE,
17560                              chrId NUMBER)
17561     IS
17562     SELECT crl.object1_id1,
17563            crl.rule_information1,
17564            crl.rule_information2,
17565            crl.rule_information3,
17566            crl.rule_information4,
17567            crl.rule_information5,
17568            crl.rule_information6,
17569            crl.rule_information10,
17570            crl.rule_information13,
17571            crl.rule_information11
17572     FROM okc_rule_groups_b crg,
17573          okc_rules_b crl
17574     WHERE crl.rgp_id = crg.id
17575     AND crg.rgd_code = rgcode
17576     AND crl.rule_information_category = rlcat
17577     AND crg.dnz_chr_id = chrId;
17578     -- get the Lease install based location
17579     CURSOR ib_csr_lease (chrId NUMBER)
17580     IS
17581     SELECT DISTINCT hl.country country
17582     FROM hz_locations hl,
17583          hz_party_sites hps,
17584          hz_party_site_uses hpsu,
17585          okl_txl_itm_insts iti,
17586          okc_line_styles_b lse_ib,
17587          okc_k_lines_b cle_ib
17588     WHERE cle_ib.dnz_chr_id = chrId
17589     AND cle_ib.lse_id = lse_ib.id
17590     AND lse_ib.lty_code = 'INST_ITEM'
17591     AND iti.kle_id = cle_ib.id
17592     AND iti.object_id1_new = hpsu.party_site_use_id
17593     AND iti.object_id2_new = '#'
17594     AND hpsu.party_site_id = hps.party_site_id
17595     AND hps.location_id = hl.location_id;
17596     -- Get the stream type id
17597     CURSOR l_strmid_csr_lease (strmName VARCHAR2)
17598     IS
17599     SELECT id styid
17600     FROM okl_strm_type_tl
17601     WHERE LANGUAGE = 'US'
17602     AND NAME = strmName;
17603     -- get the lease Contract line info
17604     -- Modified by kthiruva on 26-Aug-05
17605     -- Added trade-in amount and expected funding date to the Select clause of the
17606     -- cursor for Pricing Enhancements
17607     CURSOR l_line_rec_csr_lease(chrid NUMBER, lnetype VARCHAR2)
17608     IS
17609     SELECT kle.id,
17610            kle.oec,
17611            kle.residual_code,
17612            kle.capital_amount,
17613            kle.delivered_date,
17614            kle.date_funding_required,
17615            kle.residual_grnty_amount,
17616            kle.date_funding,
17617            kle.date_terminated,
17618            kle.residual_value,
17619            kle.date_delivery_expected,
17620            kle.orig_system_id1 old_line_id,
17621            kle.amount,
17622            kle.price_negotiated,
17623            kle.start_date,
17624            kle.end_date,
17625            kle.orig_system_id1,
17626            kle.fee_type,
17627            kle.initial_direct_cost,
17628            tl.item_description,
17629            tl.name,
17630            sts.ste_code,
17631            --Added for Pricing Enhancements
17632            kle.tradein_amount,
17633            kle.date_funding_expected,
17634            -- Added for Down Payment Enhancement
17635            kle.capital_reduction,
17636            kle.capitalize_down_payment_yn
17637     FROM okl_k_lines_full_v kle,
17638          okc_line_styles_b lse,
17639          okc_k_lines_tl tl,
17640          okc_statuses_b sts
17641     WHERE kle.lse_id = lse.id
17642     AND lse.lty_code = lnetype
17643     AND tl.id = kle.id
17644     AND tl.language = userenv('LANG')
17645     AND kle.dnz_chr_id = chrid
17646     AND sts.code = kle.sts_code
17647     AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
17648     -- get discount amount on the line
17649     CURSOR get_dis_amt_csr_lease(p_chr_id NUMBER, p_cle_id NUMBER)
17650     IS
17651     SELECT kle_sub.amount, kle_sub.SUBSIDY_OVERRIDE_AMOUNT
17652     FROM okl_subsidies_b subb,
17653          okc_k_lines_b cle_fin,
17654          okc_line_styles_b lse_fin,
17655          okc_k_lines_b cle_sub,
17656          okl_k_lines kle_sub,
17657          okc_line_styles_b lse_sub
17658     WHERE cle_fin.id = p_cle_id
17659     AND cle_fin.dnz_chr_id = p_chr_id
17660     AND cle_sub.id = kle_sub.id
17661     AND cle_sub.lse_id = lse_sub.id
17662     AND lse_sub.lty_code = 'SUBSIDY'
17663     AND subb.id = kle_sub.subsidy_id
17664     AND cle_fin.id = cle_sub.cle_id
17665     AND cle_fin.lse_id = lse_fin.id
17666     AND lse_fin.lty_code = 'FREE_FORM1'
17667     AND subb.accounting_method_code = 'NET';
17668     -- get the lease setup values for tax book and coporate book
17669     CURSOR l_txtrans_csr_lease (Book  Varchar2)
17670     IS
17671     SELECT trns.value,
17672            books.book_type_code
17673     FROM okl_sgn_translations trns,
17674          fa_book_controls books
17675     WHERE trns.jtot_object1_code = 'FA_BOOK_CONTROLS'
17676     AND trns.object1_id1 = books.book_type_code
17677     AND books.book_type_code = Book
17678     AND trns.sgn_code = 'STMP';
17679     -- get the lease Line rule information
17680     CURSOR l_slh_csr_lease(rgcode okc_rule_groups_b.rgd_code%TYPE,
17681                      rlcat  okc_rules_b.rule_information_category%TYPE,
17682                      chrId NUMBER,
17683                      cleId NUMBER )
17684     IS
17685     SELECT crl.id slh_id,
17686            crl.object1_id1,
17687            crl.rule_information1,
17688            crl.rule_information2,
17689            crl.rule_information3,
17690            crl.rule_information5,
17691            crl.rule_information6,
17692            crl.rule_information7,
17693            crl.rule_information8,
17694            crl.rule_information13,
17695            crl.rule_information10
17696     FROM okc_rule_groups_b crg,
17697          okc_rules_b crl
17698     WHERE crl.rgp_id = crg.id
17699     AND crg.rgd_code = rgcode
17700     AND crl.rule_information_category = rlcat
17701     AND crg.dnz_chr_id = chrId
17702     AND crg.cle_id = cleId
17703     ORDER BY crl.rule_information1;
17704     -- get Stream name
17705     CURSOR strm_name_csr_lease (styid NUMBER)
17706     IS
17707     SELECT tl.name name,
17708 	       stm.stream_type_purpose stream_type_purpose,
17709            stm.stream_type_class stream_type_class,
17710            tl.description alloc_basis,
17711            stm.capitalize_yn capitalize_yn,
17712            stm.periodic_yn  periodic_yn
17713     FROM okl_strm_type_b stm,
17714          okl_strm_type_tl tl
17715     WHERE tl.id = stm.id
17716     AND tl.language = 'US'
17717     AND stm.id = styid;
17718     -- get the self referencing Line based rule information
17719     CURSOR l_sll_csr_lease(rlgpId NUMBER,
17720                     rgcode okc_rule_groups_b.rgd_code%TYPE,
17721                     rlcat  okc_rules_b.rule_information_category%TYPE,
17722                     chrId  NUMBER,
17723                     cleId  NUMBER )
17724     IS
17725     SELECT crl.object1_id1,
17726            crl.rule_information1,
17727            crl.rule_information2,
17728            crl.rule_information3,
17729            crl.rule_information5,
17730            crl.rule_information6,
17731            crl.rule_information7,
17732            crl.rule_information8,
17733            crl.rule_information13,
17734            crl.rule_information10
17735     FROM okc_rule_groups_b crg,
17736          okc_rules_b crl
17737     WHERE crl.rgp_id = crg.id
17738     AND crl.object2_id1 = rlgpId
17739     AND crg.rgd_code = rgcode
17740     AND crl.rule_information_category = rlcat
17741     AND crg.dnz_chr_id = chrId
17742     AND crg.cle_id = cleId
17743     ORDER BY FND_DATE.canonical_to_date(crl.rule_information2);
17744 
17745     --mansrini : Code for VR build
17746     CURSOR  get_day_conv_on_contrct
17747     IS
17748     SELECT
17749 --Added by srsreeni for bug6076113
17750 --            rate_params.days_in_a_year_code,
17751 --            DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
17752             DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
17753             rate_params.days_in_a_year_code
17754 --srsreeni bug6076113 ends
17755     FROM    okl_k_rate_params rate_params
17756     WHERE   khr_id = p_chr_id;
17757 
17758     CURSOR  get_day_conv_on_sgt
17759     IS
17760     SELECT  DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
17761             gts.days_in_yr_code
17762     FROM
17763             okl_k_headers khr,
17764             okl_products_v pdt,
17765             okl_ae_tmpt_sets_v aes,
17766             OKL_ST_GEN_TMPT_SETS gts
17767     WHERE
17768             khr.pdt_id = pdt.id AND
17769             pdt.aes_id = aes.id AND
17770             aes.gts_id = gts.id AND
17771             khr.id  = p_chr_id;
17772 
17773 
17774     -- Code added by HKPATEL for user defined streams
17775     -- Accrual Streams for Reporting product
17776 
17777     --l_dependent_rep_sty_rec dependent_rep_sty_id_csr%ROWTYPE;
17778 
17779 l_dependent_sty_name VARCHAR2(30);
17780 
17781   -- nikshah -- Bug # 5484903 Fixed,
17782   -- Removed CURSOR primary_sty_id_csr definition
17783 
17784 
17785 	--added by bkatraga for residual streams. Bug 4274539
17786 	l_primary_sty_id  OKL_ST_GEN_TMPT_LNS.PRIMARY_STY_ID%TYPE;
17787 
17788 	--To get the styid for primary stream purpose Residual Value
17789 	CURSOR get_residual_primary_sty_id (l_pdt_id NUMBER, l_contract_start_date DATE)
17790 	IS
17791 	SELECT PRIMARY_STY_ID
17792 	FROM OKL_STRM_TMPT_LINES_UV STL
17793 	WHERE STL.PRIMARY_YN = 'Y'
17794 	AND STL.PDT_ID = l_pdt_id
17795 	AND (STL.START_DATE <= l_contract_start_date)
17796 	AND (STL.END_DATE >= l_contract_start_date OR STL.END_DATE IS NULL)
17797 	AND	PRIMARY_STY_PURPOSE = 'RESIDUAL_VALUE';
17798 	-- end bkatraga
17799 
17800 
17801 	l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
17802 
17803 	-- Added code ends here
17804 
17805 
17806     l_pdtv_rec                    pdtv_rec_type;
17807     lx_pdt_param_rec              pdt_param_rec_type;
17808     l_ast_dtl_tbl                 ast_dtl_tbl_type;
17809     l_csm_lease_header            okl_create_streams_pub.csm_lease_rec_type;
17810     l_csm_one_off_fee_tbl         okl_create_streams_pub.csm_one_off_fee_tbl_type;
17811     l_csm_periodic_expenses_tbl   okl_create_streams_pub.csm_periodic_expenses_tbl_type;
17812     l_csm_yields_tbl              okl_create_streams_pub.csm_yields_tbl_type;
17813     l_csm_stream_types_tbl        okl_create_streams_pub.csm_stream_types_tbl_type;
17814     l_req_stream_types_tbl        okl_create_streams_pub.csm_stream_types_tbl_type;
17815     l_csm_line_details_tbl        okl_create_streams_pub.csm_line_details_tbl_type;
17816     l_rents_tbl                   okl_create_streams_pub.csm_periodic_expenses_tbl_type;
17817     l_line_rec                    l_line_rec_csr_lease%ROWTYPE;
17818     l_hdr_rec                     l_hdr_csr_lease%ROWTYPE;
17819     l_rl_rec                      l_sll_csr_lease%ROWTYPE;
17820     l_hdrrl_rec                   l_hdrrl_csr_lease%ROWTYPE;
17821     l_rl_rec1                     l_slh_csr_lease%ROWTYPE;
17822     l_txtrans_rec                 l_txtrans_csr_lease%ROWTYPE;
17823     l_fee_strm_type_rec           fee_strm_type_csr%ROWTYPE;
17824     l_strm_name_rec               strm_name_csr_lease%ROWTYPE;
17825     l_ib_rec                      ib_csr_lease%ROWTYPE;
17826     l_strmid_rec                  l_strmid_csr_lease%ROWTYPE;
17827     l_adrconv_rec                 l_adrconv_csr%ROWTYPE;
17828     l_days_in_month_code          OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
17829     l_days_in_yr_code 	  OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
17830 
17831     -- Start fix for bug 6858487
17832     l_orig_chr_id       OKC_K_HEADERS_B.ID%TYPE;
17833     l_orig_cle_id       OKC_K_LINES_B.ID%TYPE;
17834 
17835     -- Get Line ID in rebook copy that was copied from LINE the original contract
17836     -- cp_rbk_chr_id is the rebook copy contract
17837     -- cp_ole_id is original contract line ID
17838     CURSOR c_get_orig_line_id (cp_rbk_chr_id IN okc_k_headers_b.id%type
17839                               , cp_ole_id IN OKC_K_LINES_B.ID%TYPE) is
17840        SELECT --cle.id new_cle_id
17841               cle.orig_system_id1
17842         FROM okc_k_lines_b cle
17843             ,okc_k_lines_b ole
17844         WHERE cle.dnz_chr_id=cp_rbk_chr_id
17845           and cle.id = cp_ole_id
17846           and ole.lse_id = cle.lse_id
17847           and ole.id=cle.orig_system_id1;
17848 
17849    -- End fix for bug 6858487
17850 
17851   BEGIN
17852     --Added by kthiruva for Debugging
17853     write_to_log('Inside procedure extract_params_lease_deal');
17854 
17855     x_return_status := OKL_API.G_RET_STS_SUCCESS;
17856     -- Call start_activity to create savepoint, check compatibility
17857     -- and initialize message list
17858     x_return_status := OKL_API.START_ACTIVITY (
17859                                l_api_name
17860                                ,p_init_msg_list
17861                                ,'_PVT'
17862                                ,x_return_status);
17863     -- Check if activity started successfully
17864     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17865       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17866     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17867       RAISE OKL_API.G_EXCEPTION_ERROR;
17868     END IF;
17869     -- Validate the payments
17870     --Added by kthiruva for Debugging
17871     write_to_log('Prior to the call to validate_payments');
17872     validate_payments(p_api_version    => p_api_version,
17873                       p_init_msg_list  => p_init_msg_list,
17874                       x_return_status  => x_return_status,
17875                       x_msg_count      => x_msg_count,
17876                       x_msg_data       => x_msg_data,
17877                       p_khr_id         => p_chr_id,
17878                       p_paym_tbl       => l_pay_tbl);
17879 
17880     --Added by kthiruva for Debugging
17881     write_to_log('After the call to validate_payments, the return status is :'||x_return_status);
17882 
17883     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
17884       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17885     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
17886       RAISE OKL_API.G_EXCEPTION_ERROR;
17887     END IF;
17888     i := 0; j := 0; k := 0; l := 0; m := 0;
17889 
17890     OPEN  l_hdr_pdt_csr(p_chr_id);
17891     FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
17892     CLOSE l_hdr_pdt_csr;
17893 
17894     --get day convention info : mansrini
17895     OPEN  get_day_conv_on_contrct;
17896     FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
17897     CLOSE get_day_conv_on_contrct;
17898 
17899 --Added by srsreeni for bug6076113
17900 --    IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
17901     IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
17902 --srsreeni bug6076113 ends
17903     THEN
17904       OPEN  get_day_conv_on_sgt;
17905       FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
17906       CLOSE get_day_conv_on_sgt;
17907     END IF;
17908 
17909 
17910     -- get header info
17911     OPEN  l_hdr_csr_lease(p_chr_id);
17912     FETCH l_hdr_csr_lease into l_hdr_rec;
17913     IF l_hdr_csr_lease%NOTFOUND THEN
17914       --Added by kthiruva for Debugging
17915       write_to_log('Cursor l_hdr_csr_lease not found');
17916       okl_api.set_message(p_app_name      => G_APP_NAME,
17917                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
17918                           p_token1        => G_COL_NAME_TOKEN,
17919                           p_token1_value  => 'Contract id');
17920       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17921     END IF;
17922     CLOSE l_hdr_csr_lease;
17923     -- get header rule info
17924     OPEN  l_hdrrl_csr_lease('LATOWN', 'LATOWN', TO_NUMBER(p_chr_id));
17925     FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
17926     IF l_hdrrl_csr_lease%NOTFOUND THEN
17927       --Added by kthiruva for Debugging
17928       write_to_log('Cursor l_hdrrl_csr_lease not found');
17929       okl_api.set_message(p_app_name      => G_APP_NAME,
17930                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
17931                           p_token1        => G_COL_NAME_TOKEN,
17932                           p_token1_value  => 'Contract id');
17933       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17934     END IF;
17935     CLOSE l_hdrrl_csr_lease;
17936     l_csm_lease_header.irs_tax_treatment_method := l_hdrrl_rec.RULE_INFORMATION1;
17937     l_lease_tax_owner := l_hdrrl_rec.RULE_INFORMATION1;
17938     IF p_deal_type IS NULL THEN
17939       l_deal_type := l_hdr_rec.deal_type;
17940     ELSE
17941       l_deal_type := p_deal_type;
17942     END IF;
17943     l_csm_lease_header.khr_id                     := p_chr_id;
17944     l_csm_lease_header.date_payments_commencement := l_hdr_rec.start_date;
17945     l_csm_lease_header.fasb_acct_treatment_method := l_deal_type;
17946     l_csm_lease_header.date_delivery              := l_hdr_rec.expected_delivery_date;
17947     l_csm_lease_header.term                       := l_hdr_rec.term;
17948     l_csm_lease_header.pdt_id                     := l_hdr_rec.pid;
17949     -- to send the right sif code
17950     OPEN l_financed_type_csr (chrId => p_chr_id);
17951     FETCH l_financed_type_csr INTO ln_fin_yn;
17952     CLOSE l_financed_type_csr;
17953     IF ln_fin_yn = 1 THEN
17954       l_csm_lease_header.sif_mode  := OKL_CREATE_STREAMS_PUB.G_MODE_BOTH;
17955     ELSIF ln_fin_yn = 0 THEN
17956       l_csm_lease_header.sif_mode  := OKL_CREATE_STREAMS_PUB.G_MODE_LESSOR;
17957     END IF;
17958     -- to get the locatin of the asset
17959     OPEN  ib_csr_lease(TO_NUMBER(p_chr_id));
17960     FETCH ib_csr_lease into l_ib_rec;
17961     IF ib_csr_lease%NOTFOUND THEN
17962       --Added by kthiruva for Debugging
17963       write_to_log('Cursor ib_csr_lease not found');
17964       okl_api.set_message(p_app_name      => G_APP_NAME,
17965                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
17966                           p_token1        => G_COL_NAME_TOKEN,
17967                           p_token1_value  => 'Contract id');
17968       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
17969     END IF;
17970     CLOSE ib_csr_lease;
17971     l_csm_lease_header.country := l_ib_rec.country;
17972     l_csm_lease_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
17973     l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_NO;
17974     -- get header rule info
17975     OPEN  l_hdrrl_csr_lease('LARVIN', 'LARVAU', TO_NUMBER(p_chr_id));
17976     FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
17977     CLOSE l_hdrrl_csr_lease;
17978     IF l_hdrrl_rec.RULE_INFORMATION1 = 'Y' THEN
17979       IF(g_rep_req_yn = 'Y') THEN
17980         get_primary_stream_type(
17981            p_khr_id =>p_chr_id,
17982            p_pdt_id =>l_pdt_id_rec.report_pdt_id,
17983            p_primary_sty_purpose =>'RESIDUAL_VALUE_INSURANCE_PREMIUM',
17984            x_return_status => x_return_status,
17985            x_primary_sty_id =>l_sty_id );
17986         IF x_return_status = 'E' THEN
17987           x_return_status := 'S';
17988         END IF;
17989       ELSE
17990         get_primary_stream_type (
17991           p_khr_id => p_chr_id,
17992           p_primary_sty_purpose => 'RESIDUAL_VALUE_INSURANCE_PREMIUM',
17993           x_return_status => x_return_status,
17994           x_primary_sty_id =>l_sty_id
17995         );
17996         IF x_return_status = 'E' THEN
17997           x_return_status := 'S';
17998         END IF;
17999       END IF;
18000       IF (l_sty_id.id IS NOT NULL) THEN
18001          m := m + 1;
18002          --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
18003          l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18004          l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
18005       END IF;
18006       l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_YES;
18007       -- get header rule info
18008       OPEN  l_hdrrl_csr_lease('LARVIN', 'LARVAM', TO_NUMBER(p_chr_id));
18009       FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
18010       CLOSE l_hdrrl_csr_lease;
18011       l_csm_lease_header.rvi_rate := TO_NUMBER(nvl(l_hdrrl_rec.RULE_INFORMATION4,'0'));
18012     END IF;
18013     -- Purchase option,
18014     OPEN  l_hdrrl_csr_lease('AMTFOC', 'AMBPOC', TO_NUMBER(p_chr_id));
18015     FETCH l_hdrrl_csr_lease into l_hdrrl_rec;
18016     CLOSE l_hdrrl_csr_lease;
18017     l_purchase_option := l_hdrrl_rec.RULE_INFORMATION11;
18018     IF (l_hdrrl_rec.rule_information1 IS NOT NULL OR
18019         l_hdrrl_rec.rule_information1 <> okl_api.g_miss_char) AND
18020         LTRIM(RTRIM(l_hdrrl_rec.rule_information1)) = 'USE_FORMULA' AND
18021         (l_hdrrl_rec.rule_information3 IS NOT NULL OR
18022         l_hdrrl_rec.rule_information3 <> okl_api.g_miss_char) THEN
18023       -- Executing the formula defined
18024       --Added by kthiruva for Debugging
18025       write_to_log('Prior to the call to execute_formula');
18026       execute_formula(p_api_version   => l_api_version,
18027                       p_init_msg_list => p_init_msg_list,
18028                       x_return_status => l_return_status,
18029                       x_msg_count     => x_msg_count,
18030                       x_msg_data      => x_msg_data,
18031                       p_formula_name  => LTRIM(RTRIM(l_hdrrl_rec.rule_information3)),
18032                       p_contract_id   => p_chr_id,
18033                       p_line_id       => NULL,
18034                       x_value         => l_purchase_option_amount);
18035       --Added by kthiruva for Debugging
18036       write_to_log('After the call to execute_formula, the return status is :'||l_return_status);
18037       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18038         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
18039       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18040         RAISE OKL_API.G_EXCEPTION_ERROR;
18041       END IF;
18042     ELSIF (l_hdrrl_rec.rule_information1 IS NOT NULL OR
18043        l_hdrrl_rec.rule_information1 <> okl_api.g_miss_char) AND
18044        LTRIM(RTRIM(l_hdrrl_rec.rule_information1)) = 'USE_FIXED_AMOUNT' AND
18045        (l_hdrrl_rec.rule_information2 IS NOT NULL OR
18046        l_hdrrl_rec.rule_information2 <> okl_api.g_miss_char) THEN
18047       l_purchase_option_amount := TO_NUMBER(l_hdrrl_rec.RULE_INFORMATION2);
18048     ELSE
18049       l_purchase_option := 'NONE';
18050       l_purchase_option_amount := NULL;
18051     END IF;
18052 
18053     -- Added by bkatraga for bug 4194641
18054     IF(l_purchase_option IS NOT NULL AND l_purchase_option = 'FMV') THEN
18055       l_purchase_option_amount := NULL;
18056     END IF;
18057     -- end bkatraga
18058 
18059     -- Added by kthiruva for Stream Performance
18060     -- This cursor was moved outside the loop to improve performance
18061     -- Get the org id
18062     --Bug 4346646 - Start of Changes
18063     OPEN  get_org_id(p_chr_id => p_chr_id);
18064     FETCH get_org_id INTO ln_org_id,
18065                           lv_currency_code;
18066     IF get_org_id%NOTFOUND THEN
18067       --Added by kthiruva for Debugging
18068       write_to_log('Cursor get_org_id not found');
18069       okl_api.set_message(p_app_name      => G_APP_NAME,
18070                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
18071                           p_token1        => G_COL_NAME_TOKEN,
18072                           p_token1_value  => 'Contract id');
18073       x_return_status := OKL_API.G_RET_STS_ERROR;
18074     END IF;
18075     CLOSE get_org_id;
18076     --Bug 4346646 - End of Changes
18077 
18078     -- fetching the line record
18079     --Added by kthiruva for Debugging
18080     write_to_log('Fetching the line details for the contract ');
18081     FOR l_line_rec in l_line_rec_csr_lease ( p_chr_id , 'FREE_FORM1') LOOP
18082       i := i + 1;
18083       l_csm_line_details_tbl(i).kle_asset_id := l_line_rec.id;
18084       l_csm_line_details_tbl(i).state_depre_dmnshing_value_rt := 0; -- TBD
18085       l_csm_line_details_tbl(i).book_depre_dmnshing_value_rt := 0; -- TBD
18086       l_csm_line_details_tbl(i).residual_guarantee_method := l_line_rec.residual_code;
18087       l_csm_line_details_tbl(i).fed_depre_dmnshing_value_rate := 0; -- TBD
18088       l_csm_line_details_tbl(i).purchase_option := l_purchase_option;
18089       l_csm_line_details_tbl(i).purchase_option_amount := l_purchase_option_amount;
18090       IF l_line_rec.ste_code = 'TERMINATED' THEN
18091         l_csm_line_details_tbl(i).residual_date := l_line_rec.date_terminated;
18092       ELSE
18093         l_csm_line_details_tbl(i).residual_date := NULL;
18094       END IF;
18095       IF l_line_rec.residual_value IS NULL THEN
18096         l_csm_line_details_tbl(i).residual_amount := 0;
18097       END IF;   -- Added by gboomina for BUG 4384784
18098       -- calling the asset mangement API
18099       -- to get the residual value of Terminated line
18100       -- Changed the ELSIF to IF by gboomina for BUG 4384784
18101       IF l_line_rec.ste_code = 'TERMINATED' THEN
18102         -- Start fix for bug 6858487
18103         retrive_orig_hdr_id(p_chr_id, l_orig_chr_id);
18104         IF l_orig_chr_id <> p_chr_id THEN
18105            OPEN c_get_orig_line_id(cp_rbk_chr_id => p_chr_id,
18106                                    cp_ole_id     => l_line_rec.id);
18107            FETCH c_get_orig_line_id INTO l_orig_cle_id;
18108            CLOSE c_get_orig_line_id;
18109         ELSE
18110            l_orig_cle_id := l_line_rec.id;
18111         END IF;
18112         l_csm_line_details_tbl(i).residual_amount := okl_am_util_pvt.get_actual_asset_residual(p_khr_id => l_orig_chr_id,
18113                p_kle_id => l_orig_cle_id);
18114 
18115       -- End fix for bug 6858487
18116       -- Changed the ELSE to ELSIF condition by gboomina for BUG 4384784
18117      ELSIF l_line_rec.residual_value IS NOT NULL THEN
18118         l_csm_line_details_tbl(i).residual_amount := l_line_rec.residual_value;
18119       END IF;
18120       IF l_line_rec.delivered_date IS NULL THEN
18121         l_csm_line_details_tbl(i).date_delivery := l_line_rec.start_date;
18122       ELSE
18123         l_csm_line_details_tbl(i).date_delivery := l_line_rec.delivered_date;
18124       END IF;
18125       l_csm_line_details_tbl(i).residual_guarantee_amount := l_line_rec.residual_grnty_amount;
18126       --Modified by kthiruva for Pricing Enhancements
18127       --Currently the funding date defaults to the start date for all asset lines
18128       --The funding date is now a user enterable value and hence date_funding should
18129       --obtain its value from the date_funding_expected column.
18130       l_csm_line_details_tbl(i).date_funding := NVL(l_line_rec.date_funding_expected,l_line_rec.start_date);
18131 
18132       l_csm_line_details_tbl(i).description := l_line_rec.item_description;
18133 
18134       -- we need to set the context since the records in
18135       -- OKL_SYS_ACCT_OPTS table are stored with regards to the context
18136       -- To calculate basis percent for Corp or tax book
18137       -- we need the Line capital amount.
18138       -- Now since new version of the pricing eng
18139       -- NET subsidies , amount of sudsidy is sent to
18140       -- pricing eng as percent so we exclude the discout as below
18141       -- Now we are fetching the line capital amount and not using the
18142       -- formulas.
18143       -- Get line Discount
18144       l_discount := 0;
18145          FOR l_subsidy_rec IN get_dis_amt_csr_lease(p_chr_id => p_chr_id, p_cle_id => l_line_rec.id) LOOP
18146             IF(l_subsidy_rec.SUBSIDY_OVERRIDE_AMOUNT IS NULL) THEN
18147                l_discount := l_discount + NVL(l_subsidy_rec.AMOUNT,0);
18148             ELSE
18149                l_discount := l_discount + l_subsidy_rec.SUBSIDY_OVERRIDE_AMOUNT;
18150             END IF;
18151          END LOOP;
18152 
18153       l_value  := l_line_rec.capital_amount;
18154       ln_value := l_value + NVL(l_discount,0);
18155 
18156       --Made changes by bkatraga for bug 5243586
18157       --Commenting the code below as Trade-in amount is already deducted from the asset cost during authoring itself
18158       /*
18159       --Added by kthiruva for Pricing Enhancements
18160       --If a tradein_amount is defined on an asset, it needs to be deducted from
18161       --the asset cost
18162       IF l_line_rec.tradein_amount is not null THEN
18163         ln_value := ln_value - l_line_rec.tradein_amount;
18164       END IF;
18165       --End of Changes for Pricing Enhancements
18166       */
18167       --end changes by bkatraga
18168 
18169       -- Modified by RGOOTY Bug 4629365: Start
18170       l_csm_line_details_tbl(i).capitalize_down_payment_yn := l_line_rec.capitalize_down_payment_yn;
18171       -- Modified by RGOOTY Bug 4629365: End
18172       --Added by kthiruva on 15-Nov-2005 for the Down Payment CR
18173       --Bug 4738011 - Start of Changes
18174       IF l_line_rec.capitalize_down_payment_yn = 'Y' THEN
18175          l_csm_line_details_tbl(i).down_payment_amount := l_line_rec.capital_reduction;
18176          --If the Down Payment is capitalised then we fetch and request stream of Type Capital Reduction
18177 --vdamerla Bug6149951 starts
18178        IF l_line_rec.ste_code <> 'TERMINATED' THEN
18179 
18180          get_primary_stream_type
18181           (
18182            p_khr_id => p_chr_id,
18183            p_primary_sty_purpose => 'CAPITAL_REDUCTION',
18184            x_return_status => x_return_status,
18185            x_primary_sty_id =>l_sty_id
18186            );
18187          IF x_return_status = 'E' THEN
18188             x_return_status := 'S';
18189          END IF;
18190 
18191          IF (l_sty_id.id IS NOT NULL ) THEN
18192             m := m + 1;
18193             l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18194             l_csm_stream_types_tbl(m).pricing_name   := l_sty_id.pricing_name;
18195             l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
18196          END IF;
18197       END IF;
18198 --vdamerla Bug6149951 ends
18199       END IF;
18200 
18201       --Modified by kthiruva for the Down Payment CR
18202       --Deducting the Capital Reduction is already being done by Authoring.Hence,commenting the code
18203       /*IF l_line_rec.capitalize_down_payment_yn = 'Y' AND l_line_rec.capital_reduction IS NOT NULL THEN
18204           l_csm_line_details_tbl(i).asset_cost := ln_value - l_line_rec.capital_reduction;
18205       ELSE
18206           l_csm_line_details_tbl(i).asset_cost := ln_value;
18207       END IF;*/
18208       l_csm_line_details_tbl(i).asset_cost := ln_value;
18209       --Bug 4738011 - End of Changes
18210 
18211       -- Now we are dealing with corp book and building
18212       -- Book Depreciation Stream info
18213       l_ast_dtl_tbl.delete;
18214       --Added by kthiruva for Debugging
18215       write_To_log('Prior to the call to okl_activate_asset_pvt.get_pricing_parameters');
18216       okl_activate_asset_pvt.get_pricing_parameters(
18217                             p_api_version   => p_api_version,
18218                             p_init_msg_list => p_init_msg_list,
18219                             x_return_status => x_return_status,
18220                             x_msg_count     => x_msg_count,
18221                             x_msg_data      => x_msg_data,
18222                             p_chr_id        => p_chr_id,
18223                             p_cle_id        => l_line_rec.id,
18224                             x_ast_dtl_tbl   => l_ast_dtl_tbl);
18225       --Added by kthiruva for Debugging
18226       write_To_log('After the call to okl_activate_asset_pvt.get_pricing_parameters, return status is :'||x_return_status);
18227       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18228         EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18229       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18230         EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18231       END IF;
18232       -- bug 4194673 fixed by HKPATEL
18233       IF l_ast_dtl_tbl.COUNT > 0 THEN
18234         l_book_type_code := NULL;
18235         FOR j IN l_ast_dtl_tbl.FIRST..l_ast_dtl_tbl.LAST LOOP
18236           IF l_ast_dtl_tbl(j).book_class = 'CORPORATE'  THEN
18237             l_book_type_code := l_ast_dtl_tbl(j).book_type_code;
18238           END IF;
18239         END LOOP;
18240       END IF;
18241 
18242       IF l_ast_dtl_tbl.COUNT > 0 THEN
18243         FOR j IN l_ast_dtl_tbl.FIRST..l_ast_dtl_tbl.LAST LOOP
18244           -- Thru this we will know if the there is reporting product or not
18245           -- and the g_rep_yn flag will let us know that there reporting streams
18246           -- requested so we try to generate the reporting dep streasm based on the
18247           -- the belwo condition.
18248           IF l_hdr_rec.report_pdt_id <> -1 AND
18249               g_rep_req_yn = 'Y' AND
18250               l_ast_dtl_tbl(j).book_class = 'TAX'  THEN
18251             l_pdtv_rec.id := l_hdr_rec.report_pdt_id;
18252             --Added by kthiruva for Debugging
18253             write_to_log('Prior to the call to okl_setupproducts_pvt.getpdt_parameters');
18254             okl_setupproducts_pvt.getpdt_parameters(
18255                                   p_api_version       => p_api_version,
18256                                   p_init_msg_list     => p_init_msg_list,
18257                                   x_return_status     => x_return_status,
18258                                   x_msg_count         => x_msg_count,
18259                                   x_msg_data          => x_msg_data,
18260                                   p_pdtv_rec          => l_pdtv_rec,
18261                                   x_no_data_found     => lx_no_data_found,
18262                                   p_pdt_parameter_rec => lx_pdt_param_rec);
18263 
18264             --Added by kthiruva for Debugging
18265             write_to_log('After the call to okl_setupproducts_pvt.getpdt_parameters, the return status is :'||x_return_status);
18266             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18267               EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18268             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18269               EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18270             END IF;
18271             -- bug 4194673 fixed by HKPATEL
18272             x_return_status := is_rep_pdt(--p_asset_number => l_line_rec.name,
18273                                           p_corp_book    => l_book_type_code,
18274                                           x_mg_tax_yn    => lv_mg_tax_yn);
18275             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18276               EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18277             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18278               EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18279             END IF;
18280             -- If the reporting book is of deal type and if the
18281             -- if there is multi gaap tax book create in okl_txd_assets_b table
18282             -- then we go and generate the book dep streams for the Mg tax book
18283             -- else we do not generate stream for the Multi gaap
18284             IF lx_pdt_param_rec.deal_type = 'LEASEOP' AND
18285                lv_mg_tax_yn = 'Y' THEN
18286               -- Now we are determing the Basis percent for the corp book
18287               -- Basis percent = Depreciable Cost (for each asset defined corp book)
18288               --                / Total Asset Capital Cost
18289               l_basis_percent     := 0;
18290               l_rnd_basis_percent := 0;
18291               l_salvage           := 0;
18292               IF (l_ast_dtl_tbl(j).cost IS NULL OR
18293                 l_ast_dtl_tbl(j).cost = 0 ) THEN
18294                 l_basis_percent := 0;
18295               ELSE
18296                 -- Now we are including Trade In, Capital Reduction, Capitalized Fee,
18297                 -- Capitalized Interest and Discount for getting the corporate depreciation cost
18298                 -- Now since new version of the pricing eng
18299                 -- NET subsidies , amount of sudsidy is sent to
18300                 -- pricing eng as percent so we exclude the discout as below
18301                 --  l_tax_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_tradein,0) - NVL(l_capreduc,0) + NVL(l_feecap,0) + NVL(l_capint,0);
18302                 --Commneted the above by virtue of Authoring API
18303                 -- getting the Actual cost going into /in FA
18304                 l_tax_dep_cost := l_ast_dtl_tbl(j).cost + NVL(l_discount,0);
18305                 l_basis_percent := (NVL(l_tax_dep_cost,0)/ln_value) * 100;
18306               END IF;
18307               IF l_basis_percent <> 0 THEN
18308                 -- Now we round the Basis Percent
18309                 l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
18310                                                                         p_amount  => l_basis_percent);
18311               ELSIF l_basis_percent = 0 THEN
18312                 l_rnd_basis_percent := 0;
18313               END IF;
18314               -- Now we are determing the Salvage value
18315               l_salvage := NVL(l_ast_dtl_tbl(j).salvage_value,0);
18316               IF( l_salvage = 0) Then
18317                 l_salvage := (NVL(l_ast_dtl_tbl(j).percent_salvage_value,0) * ln_value)/100;
18318               END IF;
18319               l_csm_line_details_tbl(i).book_adr_convention  := l_ast_dtl_tbl(j).prorate_convention_code;
18320               l_csm_line_details_tbl(i).book_term            := l_ast_dtl_tbl(j).life_in_months;
18321               l_csm_line_details_tbl(i).book_method          := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
18322               l_csm_line_details_tbl(i).book_salvage         := l_salvage;
18323               l_csm_line_details_tbl(i).date_book            := l_ast_dtl_tbl(j).in_service_date;
18324               l_csm_line_details_tbl(i).book_basis_percent   := l_rnd_basis_percent;
18325               -- AND condition added below by HKPATEL for bug 4194673
18326               IF l_lease_tax_owner = 'LESSOR' AND l_rnd_basis_percent <> 0 THEN
18327                 IF(g_rep_req_yn = 'Y') THEN
18328                   get_primary_stream_type
18329                   (
18330                      p_khr_id =>p_chr_id,
18331                      p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18332                      p_primary_sty_purpose =>'BOOK_DEPRECIATION',
18333                      x_return_status => x_return_status,
18334                      x_primary_sty_id =>l_sty_id
18335                   );
18336                   IF x_return_status = 'E' THEN
18337                     x_return_status := 'S';
18338                   END IF;
18339                 ELSE
18340                   get_primary_stream_type
18341                   (
18342                     p_khr_id => p_chr_id,
18343                     p_primary_sty_purpose => 'BOOK_DEPRECIATION',
18344                     x_return_status => x_return_status,
18345                     x_primary_sty_id =>l_sty_id
18346                   );
18347                   IF x_return_status = 'E' THEN
18348                     x_return_status := 'S';
18349                   END IF;
18350                 END IF;
18351             --vdamerla Bug6149951 starts
18352               IF l_line_rec.ste_code <> 'TERMINATED' THEN
18353                 IF (l_sty_id.id IS NOT NULL ) THEN
18354                   m := m + 1;
18355                   l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18356                   l_csm_stream_types_tbl(m).pricing_name   := l_sty_id.pricing_name;
18357                   l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
18358                 END IF;
18359                END IF;--srsreeni Bug6149951 ends
18360               END IF;
18361             END IF;
18362           ELSIF l_ast_dtl_tbl(j).book_class = 'CORPORATE' AND
18363                 g_rep_req_yn = 'N' THEN
18364             -- Now we are determing the Basis percent for the corp book
18365             -- Basis percent = Depreciable Cost (for each asset defined corp book)
18366             --                / Total Asset Capital Cost
18367             IF (l_ast_dtl_tbl(j).cost IS NULL OR
18368               l_ast_dtl_tbl(j).cost = 0 ) THEN
18369               l_basis_percent := 0;
18370             ELSE
18371               -- Now we are including Trade In, Capital Reduction, Capitalized Fee,
18372               -- Capitalized Interest and Discount for getting the corporate depreciation cost
18373               -- Now since new version of the pricing eng
18374               -- NET subsidies , amount of sudsidy is sent to
18375               -- pricing eng as percent so we exclude the discout as below
18376               -- l_corp_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_tradein,0) - NVL(l_capreduc,0) + NVL(l_feecap,0) + NVL(l_capint,0);
18377               --Commneted the above by virtue of Authoring API
18378               -- getting the Actual cost going into /in FA
18379               l_corp_dep_cost := l_ast_dtl_tbl(j).cost + NVL(l_discount,0);
18380               l_basis_percent := (NVL(l_corp_dep_cost,0) / ln_value) * 100;
18381             END IF;
18382             IF l_basis_percent <> 0 THEN
18383               -- Now we round the Basis Percent
18384               l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
18385                                                                       p_amount  => l_basis_percent);
18386             ELSIF l_basis_percent = 0 THEN
18387               l_rnd_basis_percent := 0;
18388             END IF;
18389             -- Now we are determing the Salvage value
18390             l_salvage := nvl(l_ast_dtl_tbl(j).salvage_value,0);
18391             IF( l_salvage = 0) Then
18392               l_salvage := (NVL(l_ast_dtl_tbl(j).percent_salvage_value,0) * ln_value)/100.00;
18393             END IF;
18394             l_csm_line_details_tbl(i).book_adr_convention  := l_ast_dtl_tbl(j).prorate_convention_code;
18395             l_csm_line_details_tbl(i).book_term            := l_ast_dtl_tbl(j).life_in_months;
18396             l_csm_line_details_tbl(i).book_method          := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
18397             l_csm_line_details_tbl(i).book_salvage         := l_salvage;
18398             l_csm_line_details_tbl(i).date_book            := l_ast_dtl_tbl(j).in_service_date;
18399             l_csm_line_details_tbl(i).book_basis_percent   := l_rnd_basis_percent;
18400             -- AND condition added below by HKPATEL for bug 4194673
18401             IF l_lease_tax_owner = 'LESSOR' AND l_rnd_basis_percent <> 0 THEN
18402 -- vdamerla  Forward Port Bug6149951
18403 --vdamerla Bug6149951 starts
18404       IF l_line_rec.ste_code <> 'TERMINATED' THEN
18405 
18406               IF(g_rep_req_yn = 'Y') THEN
18407                 get_primary_stream_type
18408                 (
18409                    p_khr_id =>p_chr_id,
18410                    p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18411                    p_primary_sty_purpose =>'BOOK_DEPRECIATION',
18412                    x_return_status => x_return_status,
18413                    x_primary_sty_id =>l_sty_id
18414                 );
18415                 IF x_return_status = 'E' THEN
18416                   x_return_status := 'S';
18417                 END IF;
18418               ELSE
18419                 get_primary_stream_type
18420                 (
18421                   p_khr_id => p_chr_id,
18422                   p_primary_sty_purpose => 'BOOK_DEPRECIATION',
18423                   x_return_status => x_return_status,
18424                   x_primary_sty_id =>l_sty_id
18425                 );
18426                 IF x_return_status = 'E' THEN
18427                   x_return_status := 'S';
18428                 END IF;
18429               END IF;
18430               --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
18431               IF (l_sty_id.id IS NOT NULL ) THEN
18432                 m := m + 1;
18433                 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18434                 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
18435                 l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
18436               END IF;
18437       -- vdamerla Forward Port Bug6149951
18438       END IF;--vdamerla Bug6149951 ends
18439             END IF;
18440           ELSIF l_ast_dtl_tbl(j).book_class = 'TAX' AND
18441                 g_rep_req_yn = 'N' THEN
18442             -- Now we are changing the approach for generating Tax book Depreciation streams
18443             -- by the virtue of Bug#3447917 so changes because of bug#3066346 is reverted.
18444             -- We need to validate tax book for a given asset number
18445             -- and also validate if there has been setups done for these
18446             -- tax books
18447             -- Now we are dealing with Tax book and building
18448             -- Federal/State Depreciation Stream info
18449             -- Since there could be more than one tax book we need to loop for each
18450             -- tax book
18451             -- Now we are determing the Basis percent for the Tax book
18452             -- Basis percent = Depreciable Cost (for each asset defined tax book)
18453             --                / Total Asset Capital Cost
18454             -- Intialize the variable
18455             l_basis_percent     := 0;
18456             l_rnd_basis_percent := 0;
18457             l_salvage           := 0;
18458             IF (l_ast_dtl_tbl(j).cost IS NULL OR
18459                 l_ast_dtl_tbl(j).cost = 0) THEN
18460                 l_basis_percent := 0;
18461             ELSE
18462               -- Now we are including Trade In, Capital Reduction, Capitalized Fee,
18463               -- Capitalized Interest and Discount for getting the Tax book cost
18464               -- Now since new version of the pricing eng
18465               -- NET subsidies , amount of sudsidy is sent to
18466               -- pricing eng as percent so we exclude the discout as below
18467               -- l_tax_dep_cost := l_ast_dtl_tbl(j).cost - NVL(l_tradein,0) - NVL(l_capreduc,0) + NVL(l_feecap,0) + NVL(l_capint,0);
18468               --Commneted the above by virtue of Authoring API
18469               -- getting the Actual cost going into /in FA
18470               l_tax_dep_cost := l_ast_dtl_tbl(j).cost + NVL(l_discount,0);
18471               l_basis_percent := (NVL(l_tax_dep_cost,0) / ln_value) * 100;
18472             END IF;
18473             IF l_basis_percent <> 0 THEN
18474               -- Now we round the Basis Percent
18475               l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
18476                                                                       p_amount    => l_basis_percent);
18477             ELSIF l_basis_percent = 0 THEN
18478               l_rnd_basis_percent := 0;
18479             END IF;
18480             -- Now we are determing the Salvage value
18481             l_salvage := nvl(l_ast_dtl_tbl(j).salvage_value,0);
18482             IF( l_salvage = 0) Then
18483               l_salvage := (NVL(l_ast_dtl_tbl(j).percent_salvage_value,0) * ln_value)/100;
18484             END IF;
18485             -- we build both federal and state Depreciation Stream
18486             FOR l_txtrans_rec in l_txtrans_csr_lease (l_ast_dtl_tbl(j).book_type_code) LOOP
18487               IF l_txtrans_rec.value IS NOT NULL AND
18488                  l_txtrans_rec.value = 'FEDERAL' THEN
18489                 l_csm_line_details_tbl(i).fed_depre_adr_conve     := l_ast_dtl_tbl(j).prorate_convention_code;
18490                 l_csm_line_details_tbl(i).fed_depre_term          := l_ast_dtl_tbl(j).life_in_months;
18491                 l_csm_line_details_tbl(i).fed_depre_method        := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
18492                 l_csm_line_details_tbl(i).fed_depre_salvage       := l_salvage;
18493                 l_csm_line_details_tbl(i).date_fed_depre          := l_ast_dtl_tbl(j).in_service_date;
18494                 l_csm_line_details_tbl(i).fed_depre_basis_percent := l_rnd_basis_percent;
18495                 IF l_lease_tax_owner = 'LESSOR' THEN
18496 -- vdamerla Forward Port Bug61130937
18497 --vdamerla Bug61130937 starts
18498     IF l_line_rec.ste_code <> 'TERMINATED' THEN
18499                   IF(g_rep_req_yn = 'Y') THEN
18500                     get_primary_stream_type
18501                     (
18502                       p_khr_id =>p_chr_id,
18503                       p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18504                       p_primary_sty_purpose =>'FEDERAL_DEPRECIATION',
18505                       x_return_status => x_return_status,
18506                       x_primary_sty_id =>l_sty_id
18507                     );
18508                     IF x_return_status = 'E' THEN
18509                       x_return_status := 'S';
18510                     END IF;
18511                   ELSE
18512                     get_primary_stream_type
18513                     (
18514                       p_khr_id => p_chr_id,
18515                       p_primary_sty_purpose => 'FEDERAL_DEPRECIATION',
18516                       x_return_status => x_return_status,
18517                       x_primary_sty_id =>l_sty_id
18518                     );
18519                     IF x_return_status = 'E' THEN
18520                       x_return_status := 'S';
18521                     END IF;
18522                   END IF;
18523                   --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
18524                   IF (l_sty_id.id IS NOT NULL ) THEN
18525                     m := m + 1;
18526                     l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18527                     l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
18528                     l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
18529                   END IF;
18530                   END IF; --vdamerla Bug6149951 ends
18531                 END IF;
18532               ELSIF l_txtrans_rec.value IS NOT NULL AND
18533                     l_txtrans_rec.value = 'STATE' THEN
18534                 l_csm_line_details_tbl(i).state_depre_adr_convent   := l_ast_dtl_tbl(j).prorate_convention_code;
18535                 l_csm_line_details_tbl(i).state_depre_term          := l_ast_dtl_tbl(j).life_in_months;
18536                 l_csm_line_details_tbl(i).state_depre_method        := TO_CHAR(l_ast_dtl_tbl(j).deprn_method_id);
18537                 l_csm_line_details_tbl(i).state_depre_salvage       := l_salvage;
18538                 l_csm_line_details_tbl(i).date_state_depre          := l_ast_dtl_tbl(j).in_service_date;
18539                 l_csm_line_details_tbl(i).state_depre_basis_percent := l_rnd_basis_percent;
18540                 IF l_lease_tax_owner = 'LESSOR' THEN
18541 --vdamerla Bug61130937 starts
18542                 IF l_line_rec.ste_code <> 'TERMINATED' THEN
18543                   IF(g_rep_req_yn = 'Y') THEN
18544                     get_primary_stream_type
18545                     (
18546                       p_khr_id =>p_chr_id,
18547                       p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18548                       p_primary_sty_purpose =>'STATE_DEPRECIATION',
18549                       x_return_status => x_return_status,
18550                       x_primary_sty_id =>l_sty_id
18551                     );
18552                     IF x_return_status = 'E' THEN
18553                       x_return_status := 'S';
18554                     END IF;
18555                   ELSE
18556                     get_primary_stream_type
18557                     (
18558                       p_khr_id => p_chr_id,
18559                       p_primary_sty_purpose => 'STATE_DEPRECIATION',
18560                       x_return_status => x_return_status,
18561                       x_primary_sty_id =>l_sty_id
18562                     );
18563                     IF x_return_status = 'E' THEN
18564                       x_return_status := 'S';
18565                     END IF;
18566                   END IF;
18567                   --l_csm_stream_types_tbl(m).stream_type_id := l_strmid_rec.styid;
18568                   IF (l_sty_id.id IS NOT NULL ) THEN
18569                     m := m + 1;
18570                     l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
18571                     l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
18572                     l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
18573                   END IF;
18574                 END IF;--vdamerla Bug6149951 ends
18575                 END IF;
18576               END IF;
18577             END LOOP;
18578             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18579               EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18580             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18581               EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18582             END IF;
18583           END IF;
18584         END LOOP;
18585       ELSE
18586         okl_api.set_message(p_app_name      => G_APP_NAME,
18587                             p_msg_name      => G_LLA_NO_MATCHING_RECORD,
18588                             p_token1        => G_COL_NAME_TOKEN,
18589                             p_token1_value  => 'Asset Number : '||l_line_rec.name);
18590         x_return_status := OKL_API.G_RET_STS_ERROR;
18591         EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18592       END IF;
18593 
18594 
18595       -- added by bkatraga for residual streams. Bug 4274539
18596       IF(l_line_rec.residual_value IS NOT NULL) THEN
18597         -- To get the primary stream purpose Residual Value id into l_primary_sty_id
18598         OPEN  get_residual_primary_sty_id(l_hdr_rec.pid, l_hdr_rec.start_date);
18599         FETCH get_residual_primary_sty_id INTO l_primary_sty_id;
18600         CLOSE get_residual_primary_sty_id;
18601         -- To check if the product is reporting one or not
18602 --vdamerla Bug61130937 starts
18603        IF l_line_rec.ste_code <> 'TERMINATED' THEN
18604 
18605         IF(g_rep_req_yn = 'Y') THEN
18606           -- To get the dependant stream types of purpose Residual Value which have pricing name defined
18607           get_dependent_stream_types
18608           (
18609              p_khr_id =>p_chr_id,
18610               p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18611              p_primary_sty_id =>l_primary_sty_id,
18612              x_return_status => x_return_status,
18613              x_dependent_sty_id =>l_strm_type_id_tbl
18614           );
18615           IF x_return_status = 'E' THEN
18616             x_return_status := 'S';
18617           END IF;
18618         ELSE
18619           get_dependent_stream_types
18620           (
18621             p_khr_id =>p_chr_id,
18622             p_primary_sty_id =>l_primary_sty_id,
18623             x_return_status => x_return_status,
18624             x_dependent_sty_id =>l_strm_type_id_tbl
18625           );
18626           IF x_return_status = 'E' THEN
18627             x_return_status := 'S';
18628           END IF;
18629         END IF;
18630         -- Populate the dependant stream types
18631         IF l_strm_type_id_tbl.COUNT > 0 THEN
18632           FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
18633             m := m + 1;
18634             l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
18635             l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
18636             l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
18637           END LOOP;
18638         END IF;
18639        END IF;--vdamerla Bug6149951 ends
18640       END IF;
18641       -- end bkatraga
18642       FOR l_rl_rec1 in l_slh_csr_lease ( 'LALEVL', 'LASLH', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
18643         l_level_type := l_rl_rec1.object1_id1;
18644         OPEN  strm_name_csr_lease ( l_level_type );
18645         FETCH strm_name_csr_lease into l_strm_name_rec;
18646         IF strm_name_csr_lease%NOTFOUND THEN
18647           x_return_status := OKL_API.G_RET_STS_ERROR;
18648           EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18649         END IF;
18650         CLOSE strm_name_csr_lease;
18651         l_strm_name := l_strm_name_rec.stream_type_purpose;
18652 --Added by srsreeni for bug5841892
18653 --        m := m + 1;
18654 --        l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
18655 --bug5841892 end of changes
18656 --vdamerla Bug61130937 starts
18657         IF l_line_rec.ste_code <> 'TERMINATED' THEN
18658         get_primary_pricing_name
18659         (
18660           p_khr_id =>p_chr_id,
18661           p_sty_id =>l_level_type,
18662           x_return_status =>x_return_status,
18663           x_primary_pricing_name =>l_pricing_name
18664         );
18665         IF x_return_status = 'E' THEN
18666          x_return_status := 'S';
18667         END IF;
18668 --Added by srsreeni for bug5841892
18669 	if l_pricing_name is not null then
18670         m := m + 1;
18671         l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
18672         l_csm_stream_types_tbl(m).pricing_name   := l_pricing_name;
18673         l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
18674     end if;
18675 --bug5841892 end of changes
18676         --Commented as we want to generate all the dependents of RENT streams
18677         IF(g_rep_req_yn = 'Y') THEN
18678           get_dependent_stream_types
18679           (
18680             p_khr_id =>p_chr_id,
18681             p_pdt_id =>l_pdt_id_rec.report_pdt_id,
18682             p_primary_sty_id =>l_level_type,
18683             x_return_status => x_return_status,
18684             x_dependent_sty_id =>l_strm_type_id_tbl
18685           );
18686           IF x_return_status = 'E' THEN
18687             x_return_status := 'S';
18688           END IF;
18689         ELSE
18690           get_dependent_stream_types
18691           (
18692             p_khr_id =>p_chr_id,
18693             p_primary_sty_id =>l_level_type,
18694             x_return_status => x_return_status,
18695             x_dependent_sty_id =>l_strm_type_id_tbl
18696           );
18697           IF x_return_status = 'E' THEN
18698             x_return_status := 'S';
18699           END IF;
18700         END IF;
18701         IF l_strm_type_id_tbl.COUNT > 0 THEN
18702           FOR i IN l_strm_type_id_tbl.FIRST..l_strm_type_id_tbl.LAST LOOP
18703             m := m + 1;
18704             l_csm_stream_types_tbl(m).stream_type_id := l_strm_type_id_tbl(i).id;
18705             l_csm_stream_types_tbl(m).pricing_name := l_strm_type_id_tbl(i).pricing_name;
18706             l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
18707           END LOOP;
18708         END IF;
18709         END IF;--vdamerla Bug6149951 ends
18710         lv_diff_date := 'N';
18711         idx := 0;
18712         IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
18713           FOR l_rl_rec in l_sll_csr_lease ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
18714             -- Start of Bug#3401024 modification BAKUCHIB
18715             IF FND_DATE.canonical_to_date(l_rl_rec.rule_information2) <> l_hdr_rec.start_date AND
18716                lv_diff_date = 'N' AND
18717                idx = 0 THEN
18718               j := j + 1;
18719               idx := idx + 1;
18720               l_rents_tbl(j).level_index_number := idx;
18721               l_rents_tbl(j).amount             := 0;
18722               l_rents_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
18723               l_rents_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
18724               l_rents_tbl(j).period             := g_stub_rec.period;
18725               l_rents_tbl(j).description        := l_strm_name;
18726               l_rents_tbl(j).kle_asset_id       := l_line_rec.id;
18727               l_rents_tbl(j).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
18728               l_rents_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18729               l_rents_tbl(j).days_in_month := l_days_in_month_code;
18730               l_rents_tbl(j).days_in_year    := l_days_in_yr_code;
18731               -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: Start
18732               IF  l_line_rec.capitalize_down_payment_yn = 'N' AND
18733                  l_line_rec.capital_reduction IS NOT NULL
18734               THEN
18735                 l_rents_tbl(j).down_payment_amount := l_line_rec.capital_reduction;
18736               END IF;
18737               -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: End
18738               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
18739                 l_rents_tbl(j).structure          := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18740               END If;
18741               lv_diff_date := 'Y';
18742               l_rents_tbl(j).rate               := l_rl_rec.rule_information13;
18743 
18744               -- Added by kthiruva on 29-Dec-2005.
18745               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
18746               -- Bug 4915938 - Start of Changes
18747               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18748                 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18749               ELSE
18750                 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18751               END IF;
18752               -- Bug 4915938 - End of Changes
18753 
18754             END IF;
18755             -- End of Bug#3401024 modification BAKUCHIB
18756             -- Start of Bug#2757289 modification
18757             IF (l_rl_rec.rule_information7 IS NOT NULL OR
18758                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
18759                (l_rl_rec.rule_information8 IS NOT NULL OR
18760                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
18761               j := j + 1;
18762               idx := idx + 1;
18763               l_rents_tbl(j).level_index_number := idx;
18764               l_rents_tbl(j).amount             := TO_NUMBER(l_rl_rec.rule_information8);
18765               l_rents_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
18766               l_rents_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
18767               l_rents_tbl(j).period             := g_stub_rec.period;
18768               l_rents_tbl(j).description        := l_strm_name;
18769               l_rents_tbl(j).kle_asset_id       := l_line_rec.id;
18770               l_rents_tbl(j).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
18771               l_rents_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18772               l_rents_tbl(j).days_in_month := l_days_in_month_code;
18773               l_rents_tbl(j).days_in_year    := l_days_in_yr_code;
18774               -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: Start
18775               IF l_line_rec.capitalize_down_payment_yn = 'N' AND
18776                  l_line_rec.capital_reduction IS NOT NULL
18777               THEN
18778                 l_rents_tbl(j).down_payment_amount := l_line_rec.capital_reduction;
18779               END IF;
18780               -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: End
18781               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
18782                 l_rents_tbl(j).structure          := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18783               END If;
18784               l_rents_tbl(j).rate               := l_rl_rec.rule_information13;
18785             -- End of Bug#2757289 modification
18786 
18787               -- Added by kthiruva on 29-Dec-2005.
18788               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
18789               -- Bug 4915938 - Start of Changes
18790               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18791                 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18792               ELSE
18793                 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18794               END IF;
18795               -- Bug 4915938 - End of Changes
18796 
18797             ELSIF (l_rl_rec.rule_information7 IS NULL OR
18798                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
18799                   (l_rl_rec.rule_information8 IS NULL OR
18800                    l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
18801               j := j + 1;
18802               idx := idx + 1;
18803               l_rents_tbl(j).level_index_number := idx;
18804               l_rents_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18805               l_rents_tbl(j).description        := l_strm_name;
18806               l_rents_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
18807               l_rents_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
18808               l_rents_tbl(j).period             := l_rl_rec.object1_id1;
18809               l_rents_tbl(j).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
18810               l_rents_tbl(j).kle_asset_id       := l_line_rec.id;
18811               l_rents_tbl(j).days_in_month := l_days_in_month_code;
18812               l_rents_tbl(j).days_in_year    := l_days_in_yr_code;
18813               -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: Start
18814               IF l_line_rec.capitalize_down_payment_yn = 'N' AND
18815                  l_line_rec.capital_reduction IS NOT NULL
18816               THEN
18817                 l_rents_tbl(j).down_payment_amount := l_line_rec.capital_reduction;
18818               END IF;
18819               -- Added by RGOOTY : ESG Down Payment Enhancements. Bug 4629365: End
18820               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
18821                 l_rents_tbl(j).structure          := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18822               END If;
18823               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18824                 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18825               ELSE
18826                 l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18827               END IF;
18828               IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
18829                 l_rents_tbl(j).date_start  := l_hdr_rec.start_date;
18830               ELSE
18831                 l_rents_tbl(j).date_start  := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
18832               END IF;
18833               l_rents_tbl(j).rate               := l_rl_rec.rule_information13;
18834             END IF;
18835           END LOOP;
18836           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18837             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18838           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18839             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18840           END IF;
18841         -- Code for Estimated Property Tax Starts Here
18842         ELSIF( UPPER(TRIM(l_strm_name)) = 'ESTIMATED_PROPERTY_TAX' ) THEN
18843           FOR l_rl_rec in l_sll_csr_lease (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
18844 
18845             IF FND_DATE.canonical_to_date(l_rl_rec.rule_information2) <> l_hdr_rec.start_date AND
18846                lv_diff_date = 'N' AND
18847                idx = 0 THEN
18848               k := k + 1;
18849               idx := idx + 1;
18850               l_csm_periodic_expenses_tbl(k).level_index_number := idx;
18851               l_csm_periodic_expenses_tbl(k).amount             := 0;
18852               l_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
18853               l_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
18854               l_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
18855               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
18856               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
18857               l_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
18858               l_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18859               l_csm_periodic_expenses_tbl(k).cash_effect_yn     := 'N';
18860               l_csm_periodic_expenses_tbl(k).tax_effect_yn      := 'N';
18861               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
18862               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
18863 
18864               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
18865                 l_csm_periodic_expenses_tbl(k).structure        := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18866               END If;
18867               lv_diff_date := 'Y';
18868 
18869               -- Added by kthiruva on 29-Dec-2005.
18870               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
18871               -- Bug 4915938 - Start of Changes
18872               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18873                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18874               ELSE
18875                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18876               END IF;
18877               -- Bug 4915938 - End of Changes
18878             END IF;
18879 
18880 
18881             IF (l_rl_rec.rule_information7 IS NOT NULL OR
18882                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
18883                (l_rl_rec.rule_information8 IS NOT NULL OR
18884                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
18885               k := k + 1;
18886               idx := idx + 1;
18887               l_csm_periodic_expenses_tbl(k).level_index_number := idx;
18888               l_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
18889               l_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
18890               l_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
18891               l_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
18892               l_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
18893               l_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18894               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
18895               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
18896               l_csm_periodic_expenses_tbl(k).cash_effect_yn     := 'N';
18897               l_csm_periodic_expenses_tbl(k).tax_effect_yn      := 'N';
18898               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
18899               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
18900 
18901               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18902                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18903               END If;
18904 
18905               -- Added by kthiruva on 29-Dec-2005.
18906               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
18907               -- Bug 4915938 - Start of Changes
18908               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18909                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18910               ELSE
18911                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18912               END IF;
18913               -- Bug 4915938 - End of Changes
18914 
18915             ELSIF (l_rl_rec.rule_information7 IS NULL OR
18916                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
18917                   (l_rl_rec.rule_information8 IS NULL OR
18918                    l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
18919               k := k + 1;
18920               idx := idx + 1;
18921               l_csm_periodic_expenses_tbl(k).level_index_number := idx;
18922               l_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18923               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
18924               l_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
18925               l_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
18926               l_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
18927               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
18928               l_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
18929               l_csm_periodic_expenses_tbl(k).cash_effect_yn     := 'N';
18930               l_csm_periodic_expenses_tbl(k).tax_effect_yn      := 'N';
18931               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
18932               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
18933 
18934               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
18935                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18936               END If;
18937               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18938                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18939               ELSE
18940                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18941               END IF;
18942               IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
18943                 l_csm_periodic_expenses_tbl(k).date_start  := l_hdr_rec.start_date;
18944               ELSE
18945                 l_csm_periodic_expenses_tbl(k).date_start  := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
18946               END IF;
18947             END IF;
18948           END LOOP;
18949           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
18950             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
18951           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
18952             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
18953           END IF;
18954 
18955 		-- Code for Estimated Property Tax Ends Here
18956 		ELSIF (((l_strm_name_rec.periodic_yn = 'Y'  ) AND
18957                (UPPER(l_strm_name_rec.name) = 'FEE') AND
18958                (l_strm_name_rec.capitalize_yn = 'N') ) OR
18959               ((l_strm_name_rec.periodic_yn = 'Y'  ) AND (UPPER(l_strm_name_rec.name) <> 'FEE'))) Then
18960           FOR l_rl_rec in l_sll_csr_lease (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
18961                   -- Start of Bug#3401024 modification BAKUCHIB
18962             IF FND_DATE.canonical_to_date(l_rl_rec.rule_information2) <> l_hdr_rec.start_date AND
18963                lv_diff_date = 'N' AND
18964                idx = 0 THEN
18965               k := k + 1;
18966               idx := idx + 1;
18967               l_csm_periodic_expenses_tbl(k).level_index_number := idx;
18968               l_csm_periodic_expenses_tbl(k).amount             := 0;
18969               l_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2);
18970               l_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
18971               l_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
18972               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
18973               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
18974               l_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
18975               l_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
18976               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
18977               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
18978 
18979               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
18980                 l_csm_periodic_expenses_tbl(k).structure        := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
18981               END If;
18982               lv_diff_date := 'Y';
18983 
18984               -- Added by kthiruva on 29-Dec-2005.
18985               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
18986               -- Bug 4915938 - Start of Changes
18987               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
18988                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
18989               ELSE
18990                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
18991               END IF;
18992               -- Bug 4915938 - End of Changes
18993 
18994             END IF;
18995             -- End of Bug#3401024 modification BAKUCHIB
18996             -- Start of Bug#2757289 modification
18997             IF (l_rl_rec.rule_information7 IS NOT NULL OR
18998                 l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
18999                (l_rl_rec.rule_information8 IS NOT NULL OR
19000                 l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
19001               k := k + 1;
19002               idx := idx + 1;
19003               l_csm_periodic_expenses_tbl(k).level_index_number := idx;
19004               l_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
19005               l_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
19006               l_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
19007               l_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
19008               l_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
19009               l_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
19010               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
19011               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
19012               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
19013               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
19014 
19015               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19016                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19017               END If;
19018               -- End of Bug#2757289 modification
19019 
19020               -- Added by kthiruva on 29-Dec-2005.
19021               -- The value of the Advance and Arrears flag needs to be obtained from the rule information
19022               -- Bug 4915938 - Start of Changes
19023               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19024                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19025               ELSE
19026                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19027               END IF;
19028               -- Bug 4915938 - End of Changes
19029 
19030             ELSIF (l_rl_rec.rule_information7 IS NULL OR
19031                    l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
19032                   (l_rl_rec.rule_information8 IS NULL OR
19033                    l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
19034               k := k + 1;
19035               idx := idx + 1;
19036               l_csm_periodic_expenses_tbl(k).level_index_number := idx;
19037               l_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
19038               l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
19039               l_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
19040               l_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
19041               l_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
19042               l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_line_rec.id;
19043               l_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
19044               l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
19045               l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
19046 
19047               IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
19048                 l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
19049               END If;
19050               IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
19051                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
19052               ELSE
19053                 l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
19054               END IF;
19055               IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
19056                 l_csm_periodic_expenses_tbl(k).date_start  := l_hdr_rec.start_date;
19057               ELSE
19058                 l_csm_periodic_expenses_tbl(k).date_start  := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
19059               END IF;
19060             END IF;
19061           END LOOP;
19062           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19063             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
19064           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19065             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
19066           END IF;
19067         ELSIF ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' ) AND
19068                (UPPER(TRIM(l_strm_name)) <> 'DOWN_PAYMENT') ) THEN
19069           FOR l_rl_rec in l_sll_csr_lease (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_line_rec.id ) LOOP
19070             l := l + 1;
19071             l_csm_one_off_fee_tbl(l).description       := l_strm_name_rec.name;
19072             l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
19073             l_csm_one_off_fee_tbl(l).amount            := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
19074             IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
19075               l_csm_one_off_fee_tbl(l).date_paid         := l_hdr_rec.start_date;
19076             ELSE
19077              l_csm_one_off_fee_tbl(l).date_paid         := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
19078             END IF;
19079             l_csm_one_off_fee_tbl(l).kle_asset_id      := l_line_rec.id;
19080           END LOOP;
19081           IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19082             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
19083           ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19084             EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
19085           END IF;
19086         END IF;
19087       END LOOP;
19088       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19089         EXIT WHEN(x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
19090       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19091         EXIT WHEN(x_return_status = OKL_API.G_RET_STS_ERROR);
19092       END IF;
19093     END LOOP;
19094     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19095       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19096     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19097       RAISE OKL_API.G_EXCEPTION_ERROR;
19098     END IF;
19099     --Added for Debugging
19100     write_to_log('Prior to the call to extract_fee_lines');
19101     g_rep_req_yn := 'N';
19102     -- Extract Fee lines
19103     extract_fee_lines( p_api_version => p_api_version,
19104                        p_chr_id => TO_NUMBER(p_chr_id),
19105                        p_deal_type => l_deal_type,
19106                        p_init_msg_list => p_init_msg_list,
19107                        x_return_status => x_return_status,
19108                        x_msg_count => x_msg_count,
19109                        x_msg_data => x_msg_data,
19110                        px_csm_stream_types_tbl => l_csm_stream_types_tbl,
19111                        px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl,
19112                        px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
19113     --Added for Debugging
19114     write_to_log('After the call to extract_fee_lines, the return status is :'|| x_return_status);
19115     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19116       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19117     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19118       RAISE OKL_API.G_EXCEPTION_ERROR;
19119     END IF;
19120     -- Check for mandatory stream for pricing eng
19121     check_for_mandatory_streams(
19122             p_api_version        => p_api_version,
19123             p_init_msg_list      => p_init_msg_list,
19124             x_msg_count          => x_msg_count,
19125             x_msg_data           => x_msg_data,
19126             x_return_status      => x_return_status,
19127             p_chr_id             => p_chr_id,
19128             p_deal_type          => l_deal_type,
19129             p_stream_types_tbl   => l_csm_stream_types_tbl,
19130             x_stream_types_tbl   => l_req_stream_types_tbl);
19131     --Added for Debugging
19132     write_to_log('After the call to check_for_mandatory_streams, the return status is :'||x_return_status);
19133     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19134       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19135     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19136       RAISE OKL_API.G_EXCEPTION_ERROR;
19137     END IF;
19138     -- Requesting for yields
19139     x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
19140     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19141       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19142     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19143       RAISE OKL_API.G_EXCEPTION_ERROR;
19144     END IF;
19145     -- Extract Subsidy line
19146     extract_subsidized_lines(p_api_version => p_api_version,
19147                              p_init_msg_list => p_init_msg_list,
19148                              x_return_status => x_return_status,
19149                              x_msg_count => x_msg_count,
19150                              x_msg_data => x_msg_data,
19151                              p_chr_id => TO_NUMBER(p_chr_id),
19152                              px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
19153     --Added by kthiruva for debugging
19154     write_to_log('After the call to extract_subsidized_lines, the return status is :'||x_return_status);
19155 
19156     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19157       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19158     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19159       RAISE OKL_API.G_EXCEPTION_ERROR;
19160     END IF;
19161     IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
19162       okl_api.set_message(p_app_name => G_APP_NAME,
19163                           p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
19164       RAISE OKL_API.G_EXCEPTION_ERROR;
19165     END IF;
19166     x_csm_lease_header := l_csm_lease_header;
19167     x_csm_one_off_fee_tbl := l_csm_one_off_fee_tbl;
19168     x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
19169     x_csm_yields_tbl := l_csm_yields_tbl;
19170     x_req_stream_types_tbl := l_req_stream_types_tbl;
19171     x_csm_line_details_tbl := l_csm_line_details_tbl;
19172     x_rents_tbl := l_rents_tbl;
19173     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
19174                          x_msg_data  => x_msg_data);
19175   EXCEPTION
19176     WHEN OKL_API.G_EXCEPTION_ERROR then
19177       IF l_hdr_csr_lease%ISOPEN THEN
19178         CLOSE l_hdr_csr_lease;
19179       END IF;
19180       IF l_line_rec_csr_lease%ISOPEN THEN
19181         CLOSE l_line_rec_csr_lease;
19182       END IF;
19183       IF l_hdrrl_csr_lease%ISOPEN THEN
19184         CLOSE l_hdrrl_csr_lease;
19185       END IF;
19186       IF l_financed_type_csr%ISOPEN THEN
19187         CLOSE l_financed_type_csr;
19188       END IF;
19189       IF ib_csr_lease%ISOPEN THEN
19190         CLOSE ib_csr_lease;
19191       END IF;
19192       IF get_org_id%ISOPEN THEN
19193         CLOSE get_org_id;
19194       END IF;
19195       IF l_strmid_csr_lease%ISOPEN THEN
19196         CLOSE l_strmid_csr_lease;
19197       END IF;
19198       IF strm_name_csr_lease%ISOPEN THEN
19199         CLOSE strm_name_csr_lease;
19200       END IF;
19201       IF l_slh_csr_lease%ISOPEN THEN
19202         CLOSE l_slh_csr_lease;
19203       END IF;
19204       IF l_sll_csr_lease%ISOPEN THEN
19205         CLOSE l_sll_csr_lease;
19206       END IF;
19207       IF get_dis_amt_csr_lease%ISOPEN THEN
19208         CLOSE get_dis_amt_csr_lease;
19209       END IF;
19210       IF l_txtrans_csr_lease%ISOPEN THEN
19211         CLOSE l_txtrans_csr_lease;
19212       END IF;
19213       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19214                                 l_api_name,
19215                                G_PKG_NAME,
19216                                'OKL_API.G_RET_STS_ERROR',
19217                                x_msg_count,
19218                                x_msg_data,
19219                                '_PVT');
19220     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
19221       IF l_hdr_csr_lease%ISOPEN THEN
19222         CLOSE l_hdr_csr_lease;
19223       END IF;
19224       IF l_line_rec_csr_lease%ISOPEN THEN
19225         CLOSE l_line_rec_csr_lease;
19226       END IF;
19227       IF l_hdrrl_csr_lease%ISOPEN THEN
19228         CLOSE l_hdrrl_csr_lease;
19229       END IF;
19230       IF l_financed_type_csr%ISOPEN THEN
19231         CLOSE l_financed_type_csr;
19232       END IF;
19233       IF ib_csr_lease%ISOPEN THEN
19234         CLOSE ib_csr_lease;
19235       END IF;
19236       IF get_org_id%ISOPEN THEN
19237         CLOSE get_org_id;
19238       END IF;
19239       IF l_strmid_csr_lease%ISOPEN THEN
19240         CLOSE l_strmid_csr_lease;
19241       END IF;
19242       IF strm_name_csr_lease%ISOPEN THEN
19243         CLOSE strm_name_csr_lease;
19244       END IF;
19245       IF l_slh_csr_lease%ISOPEN THEN
19246         CLOSE l_slh_csr_lease;
19247       END IF;
19248       IF l_sll_csr_lease%ISOPEN THEN
19249         CLOSE l_sll_csr_lease;
19250       END IF;
19251       IF get_dis_amt_csr_lease%ISOPEN THEN
19252         CLOSE get_dis_amt_csr_lease;
19253       END IF;
19254       IF l_txtrans_csr_lease%ISOPEN THEN
19255         CLOSE l_txtrans_csr_lease;
19256       END IF;
19257       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
19258                                 l_api_name,
19259                                 G_PKG_NAME,
19260                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
19261                                 x_msg_count,
19262                                 x_msg_data,
19263                                 '_PVT');
19264     WHEN OTHERS then
19265       IF l_hdr_csr_lease%ISOPEN THEN
19266         CLOSE l_hdr_csr_lease;
19267       END IF;
19268       IF l_line_rec_csr_lease%ISOPEN THEN
19269         CLOSE l_line_rec_csr_lease;
19270       END IF;
19271       IF l_hdrrl_csr_lease%ISOPEN THEN
19272         CLOSE l_hdrrl_csr_lease;
19273       END IF;
19274       IF l_financed_type_csr%ISOPEN THEN
19275         CLOSE l_financed_type_csr;
19276       END IF;
19277       IF ib_csr_lease%ISOPEN THEN
19278         CLOSE ib_csr_lease;
19279       END IF;
19280       IF get_org_id%ISOPEN THEN
19281         CLOSE get_org_id;
19282       END IF;
19283       IF l_strmid_csr_lease%ISOPEN THEN
19284         CLOSE l_strmid_csr_lease;
19285       END IF;
19286       IF strm_name_csr_lease%ISOPEN THEN
19287         CLOSE strm_name_csr_lease;
19288       END IF;
19289       IF l_slh_csr_lease%ISOPEN THEN
19290         CLOSE l_slh_csr_lease;
19291       END IF;
19292       IF l_sll_csr_lease%ISOPEN THEN
19293         CLOSE l_sll_csr_lease;
19294       END IF;
19295       IF get_dis_amt_csr_lease%ISOPEN THEN
19296         CLOSE get_dis_amt_csr_lease;
19297       END IF;
19298       IF l_txtrans_csr_lease%ISOPEN THEN
19299         CLOSE l_txtrans_csr_lease;
19300       END IF;
19301       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
19302                                 l_api_name,
19303                                 G_PKG_NAME,
19304                                 'OTHERS',
19305                                 x_msg_count,
19306                                 x_msg_data,
19307                                 '_PVT');
19308   END extract_params_lease_deal;
19309 -- End modification 11i10 bakuchib
19310   Procedure extract_params_lease(
19311             p_api_version     IN  NUMBER,
19312             p_init_msg_list   IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
19313             p_chr_id          IN  VARCHAR2,
19314             x_return_status      OUT NOCOPY VARCHAR2,
19315             x_msg_count          OUT NOCOPY NUMBER,
19316             x_msg_data           OUT NOCOPY VARCHAR2,
19317             x_csm_lease_header          OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
19318             x_csm_one_off_fee_tbl       OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
19319             x_csm_periodic_expenses_tbl OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
19320             x_csm_yields_tbl            OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
19321             x_req_stream_types_tbl      OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type,
19322             x_csm_line_details_tbl      OUT NOCOPY okl_create_streams_pub.csm_line_details_tbl_type,
19323             x_rents_tbl                 OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type) AS
19324 
19325     l_api_name		CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_LEASE';
19326     l_api_version	CONSTANT NUMBER	      := 1;
19327     l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
19328 
19329   Begin
19330 
19331     print( l_api_name, 'begin');
19332        extract_params_lease_deal(
19333             l_api_version,
19334             p_init_msg_list,
19335             p_chr_id,
19336 	    NULL,
19337             x_return_status,
19338             x_msg_count,
19339             x_msg_data,
19340             x_csm_lease_header,
19341             x_csm_one_off_fee_tbl,
19342             x_csm_periodic_expenses_tbl,
19343             x_csm_yields_tbl,
19344             x_req_stream_types_tbl,
19345             x_csm_line_details_tbl,
19346             x_rents_tbl);
19347     print( l_api_name, 'end', x_return_status);
19348    End extract_params_lease;
19349 
19350   Procedure generate_reporting_streams(
19351             p_api_version        IN  NUMBER,
19352             p_init_msg_list      IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
19353             p_chr_id             IN  VARCHAR2,
19354             p_report_deal_type   IN  VARCHAR2,
19355             p_generation_context IN  VARCHAR2,
19356             p_skip_prc_engine    IN  VARCHAR2,
19357             x_return_status      OUT NOCOPY VARCHAR2,
19358             x_msg_count          OUT NOCOPY NUMBER,
19359             x_msg_data           OUT NOCOPY VARCHAR2,
19360             x_request_id         IN OUT NOCOPY NUMBER,
19361             x_trans_status       OUT NOCOPY VARCHAR2)  AS
19362 
19363     l_api_name		CONSTANT VARCHAR2(30) := 'GEN_REPORT_STREAMS';
19364     l_api_version	CONSTANT NUMBER	      := 1;
19365     l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
19366     l_fnd_rec          fnd_lookups_csr%ROWTYPE;
19367 
19368     l_isStrmGenAllowed BOOLEAN := TRUE;
19369     l_passStatus       VARCHAR2(256);
19370     l_failStatus       VARCHAR2(256);
19371 
19372     l_trxH_in_rec        Okl_Trx_Contracts_Pvt.tcnv_rec_type;
19373     l_trxH_out_rec       Okl_Trx_Contracts_Pvt.tcnv_rec_type;
19374 
19375     l_lines_rec l_line_rec_csr%ROWTYPE;
19376     l_transaction_type VARCHAR2(256):= 'Miscellaneous';--'Generate Yields';
19377     l_request_id NUMBER;
19378 
19379     cursor l_nullrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
19380                      rlcat  OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
19381                      chrId NUMBER,
19382                      cleId NUMBER ) IS
19383     select crl.id
19384     from   OKC_RULE_GROUPS_B crg,
19385            OKC_RULES_B crl
19386     where  crl.rgp_id = crg.id
19387            and crg.RGD_CODE = rgcode
19388            and crl.RULE_INFORMATION_CATEGORY = rlcat
19389            and crl.RULE_INFORMATION2 is null
19390            and crg.dnz_chr_id = chrId
19391            and crg.cle_id = cleId;
19392 
19393     l_nullrl_rec l_nullrl_csr%ROWTYPE;
19394 
19395     l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
19396 
19397     l_Trx_Type_rec Transaction_Type_csr%ROWTYPE;
19398     l_hdr_rec l_hdr_csr%ROWTYPE;
19399 
19400     x_csm_lease_header          okl_create_streams_pub.csm_lease_rec_type;
19401     x_csm_one_off_fee_tbl       okl_create_streams_pub.csm_one_off_fee_tbl_type;
19402     x_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
19403     x_csm_yields_tbl            okl_create_streams_pub.csm_yields_tbl_type;
19404     x_csm_stream_types_tbl      okl_create_streams_pub.csm_stream_types_tbl_type;
19405     x_req_stream_types_tbl      okl_create_streams_pub.csm_stream_types_tbl_type;
19406     x_csm_line_details_tbl      okl_create_streams_pub.csm_line_details_tbl_type;
19407     x_rents_tbl                 okl_create_streams_pub.csm_periodic_expenses_tbl_type;
19408 
19409     x_csm_loan_header           okl_create_streams_pvt.csm_loan_rec_type;
19410     x_csm_lines_details_tbl     okl_create_streams_pvt.csm_loan_level_tbl_type;
19411     x_csm_loan_lines_tbl        okl_create_streams_pvt.csm_loan_line_tbl_type;
19412     x_csm_loan_levels_tbl       okl_create_streams_pvt.csm_loan_level_tbl_type;
19413 
19414   BEGIN
19415 
19416 
19417     print( l_api_name, 'begin');
19418 
19419     x_return_status := OKL_API.G_RET_STS_SUCCESS;
19420 
19421     x_return_status := OKL_API.START_ACTIVITY(
19422 			p_api_name      => l_api_name,
19423 			p_pkg_name      => g_pkg_name,
19424 			p_init_msg_list => p_init_msg_list,
19425 			l_api_version   => l_api_version,
19426 			p_api_version   => p_api_version,
19427 			p_api_type      => G_API_TYPE,
19428 			x_return_status => x_return_status);
19429 
19430     -- check if activity started successfully
19431     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19432        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19433     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19434        raise OKL_API.G_EXCEPTION_ERROR;
19435     End If;
19436 
19437     print( l_api_name, 'Reporting Deal Type='||p_report_deal_type);
19438 
19439     IF (INSTR( p_report_deal_type, 'LEASE') > 0) THEN
19440 
19441         g_rep_req_yn:= 'Y';
19442         extract_params_lease_deal(
19443                    p_api_version,
19444                    p_init_msg_list,
19445                    p_chr_id,
19446 		   p_report_deal_type,
19447                    x_return_status,
19448                    x_msg_count,
19449                    x_msg_data,
19450                    x_csm_lease_header,
19451                    x_csm_one_off_fee_tbl,
19452                    x_csm_periodic_expenses_tbl,
19453                    x_csm_yields_tbl,
19454                    x_req_stream_types_tbl,
19455                    x_csm_line_details_tbl,
19456                    x_rents_tbl);
19457 
19458         If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then  -- Modified 06/14/2002. dedey
19459             okl_api.set_message(
19460                p_app_name => G_APP_NAME,
19461                p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
19462            raise OKL_API.G_EXCEPTION_ERROR;
19463         End If;
19464 
19465         x_csm_lease_header.purpose_code := 'REPORT';
19466         x_csm_lease_header.sif_id := x_request_id;
19467 
19468         okl_create_streams_pub.create_streams_lease_book(
19469                              p_api_version,
19470                              p_init_msg_list,
19471                              p_skip_prc_engine,
19472                              x_csm_lease_header,
19473                              x_csm_one_off_fee_tbl,
19474                              x_csm_periodic_expenses_tbl,
19475                              x_csm_yields_tbl,
19476                              x_req_stream_types_tbl,
19477                              x_csm_line_details_tbl,
19478                              x_rents_tbl,
19479                              l_request_id,
19480                              x_trans_status,
19481                              x_return_status,
19482                              x_msg_count,
19483                              x_msg_data);
19484         -- rabhupat BUG#4259056 start
19485         If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19486         -- rabhupat BUG#4259056 end
19487             okl_api.set_message(
19488                p_app_name => G_APP_NAME,
19489                p_msg_name => 'OKL_LLA_REPSTRMS_REQ_FLD');
19490            raise OKL_API.G_EXCEPTION_ERROR;
19491         End If;
19492 
19493     ELSIF (INSTR(p_report_deal_type, 'LOAN') > 0) THEN
19494 	    -- Reporting loan streams were not getting generated- hkpatel- Bug 4734085
19495         g_rep_req_yn:= 'Y';
19496 
19497 
19498         extract_params_loan(
19499                     p_api_version,
19500                     p_init_msg_list,
19501                     p_chr_id,
19502                     x_return_status,
19503                     x_msg_count,
19504                     x_msg_data,
19505                     x_csm_loan_header,
19506                     x_csm_loan_lines_tbl,
19507                     x_csm_loan_levels_tbl,
19508                     x_csm_one_off_fee_tbl,
19509                     x_csm_periodic_expenses_tbl,
19510                     x_csm_yields_tbl,
19511                     x_csm_stream_types_tbl);
19512 
19513         --Added by kthiruva for Debugging
19514         write_to_log('After the call to extract_params_loan, the return status is :'||x_return_status);
19515         If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19516             okl_api.set_message(
19517                p_app_name => G_APP_NAME,
19518                p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
19519             raise OKL_API.G_EXCEPTION_ERROR;
19520         End If;
19521 
19522         x_csm_loan_header.purpose_code := 'REPORT';
19523         x_csm_loan_header.sif_id := x_request_id;
19524 
19525         okl_create_streams_pub.create_streams_loan_book(
19526                              p_api_version => p_api_version,
19527                              p_init_msg_list => p_init_msg_list,
19528                              p_skip_prc_engine => p_skip_prc_engine,
19529                              p_csm_loan_header => x_csm_loan_header,
19530                              p_csm_loan_lines_tbl => x_csm_loan_lines_tbl,
19531                              p_csm_loan_levels_tbl  => x_csm_loan_levels_tbl,
19532                              p_csm_one_off_fee_tbl => x_csm_one_off_fee_tbl,
19533                              p_csm_periodic_expenses_tbl => x_csm_periodic_expenses_tbl,
19534                              p_csm_yields_tbl => x_csm_yields_tbl,
19535                              p_csm_stream_types_tbl => x_csm_stream_types_tbl,
19536                              x_trans_id => l_request_id,
19537                              x_trans_status => x_trans_status,
19538                              x_return_status => x_return_status,
19539                              x_msg_count => x_msg_count,
19540                              x_msg_data => x_msg_data);
19541 
19542         -- rabhupat BUG#4259056 start
19543         If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19544         -- rabhupat BUG#4259056 end
19545             okl_api.set_message(
19546                p_app_name => G_APP_NAME,
19547                p_msg_name => 'OKL_LLA_REPSTRMS_REQ_FLD');
19548            raise OKL_API.G_EXCEPTION_ERROR;
19549         End If;
19550     ELSE
19551         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19552     END IF;
19553 
19554 
19555     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19556        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19557     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19558        raise OKL_API.G_EXCEPTION_ERROR;
19559     End If;
19560 
19561     print( l_api_name, 'end', x_return_status);
19562     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
19563 
19564     Exception
19565 	when OKL_API.G_EXCEPTION_ERROR then
19566 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19567 			p_api_name  => l_api_name,
19568 			p_pkg_name  => g_pkg_name,
19569 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
19570 			x_msg_count => x_msg_count,
19571 			x_msg_data  => x_msg_data,
19572 			p_api_type  => g_api_type);
19573 
19574 	when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
19575 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19576 			p_api_name  => l_api_name,
19577 			p_pkg_name  => g_pkg_name,
19578 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
19579 			x_msg_count => x_msg_count,
19580 			x_msg_data  => x_msg_data,
19581 			p_api_type  => g_api_type);
19582 
19583 	when OTHERS then
19584       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19585 			p_api_name  => l_api_name,
19586 			p_pkg_name  => g_pkg_name,
19587 			p_exc_name  => 'OTHERS',
19588 			x_msg_count => x_msg_count,
19589 			x_msg_data  => x_msg_data,
19590 			p_api_type  => g_api_type);
19591 
19592   END generate_reporting_streams;
19593 
19594   Procedure generate_streams(
19595             p_api_version        IN  NUMBER,
19596             p_init_msg_list      IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
19597             p_chr_id             IN  VARCHAR2,
19598             p_generation_context IN  VARCHAR2,
19599             p_skip_prc_engine    IN  VARCHAR2,
19600             x_return_status      OUT NOCOPY VARCHAR2,
19601             x_msg_count          OUT NOCOPY NUMBER,
19602             x_msg_data           OUT NOCOPY VARCHAR2,
19603             x_request_id         OUT NOCOPY NUMBER,
19604             x_trans_status       OUT NOCOPY VARCHAR2)  AS
19605 
19606     l_api_name		CONSTANT VARCHAR2(30) := 'MAP_AND_GEN_STREAMS';
19607     l_api_version	CONSTANT NUMBER	      := 1;
19608     l_return_status	VARCHAR2(1)           := OKC_API.G_RET_STS_SUCCESS;
19609     l_fnd_rec          fnd_lookups_csr%ROWTYPE;
19610     lv_stream	        VARCHAR2(200)           := null;
19611 
19612     l_isStrmGenAllowed BOOLEAN := TRUE;
19613     l_passStatus       VARCHAR2(256);
19614     l_failStatus       VARCHAR2(256);
19615 
19616     l_trxH_in_rec        Okl_Trx_Contracts_Pvt.tcnv_rec_type;
19617     l_trxH_out_rec       Okl_Trx_Contracts_Pvt.tcnv_rec_type;
19618 
19619     l_stmv_tbl okl_streams_pub.stmv_tbl_type;
19620     x_stmv_tbl okl_streams_pub.stmv_tbl_type;
19621 
19622     i NUMBER;
19623     l_lines_rec l_line_rec_csr%ROWTYPE;
19624     l_transaction_type VARCHAR2(256):= 'Miscellaneous';--'Generate Yields';
19625 
19626     cursor l_nullrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
19627                      rlcat  OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
19628                      chrId NUMBER ) IS
19629     select crl.id
19630     from   OKC_RULE_GROUPS_B crg,
19631            OKC_RULES_B crl
19632     where  crl.rgp_id = crg.id
19633            and crg.RGD_CODE = rgcode
19634            and crl.RULE_INFORMATION_CATEGORY = rlcat
19635            and nvl(crl.RULE_INFORMATION1, 'XXX' ) = 'XXX'
19636            and nvl(crl.RULE_INFORMATION2, 'XXX' ) = 'XXX'
19637            and nvl(crl.RULE_INFORMATION3, 'XXX' ) = 'XXX'
19638            and nvl(crl.RULE_INFORMATION6, 'XXX' ) = 'XXX'
19639            and crg.dnz_chr_id = chrId;
19640 
19641 
19642 
19643     l_nullrl_rec l_nullrl_csr%ROWTYPE;
19644 
19645     l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
19646 
19647     l_Trx_Type_rec Transaction_Type_csr%ROWTYPE;
19648     l_hdr_rec l_hdr_csr%ROWTYPE;
19649     l_strms_orig_rec strms_csr%ROWTYPE;
19650     l_strms_rep_rec strms_csr%ROWTYPE;
19651 
19652     x_csm_lease_header          okl_create_streams_pub.csm_lease_rec_type;
19653     x_csm_one_off_fee_tbl       okl_create_streams_pub.csm_one_off_fee_tbl_type;
19654     x_csm_periodic_expenses_tbl okl_create_streams_pub.csm_periodic_expenses_tbl_type;
19655     x_csm_yields_tbl            okl_create_streams_pub.csm_yields_tbl_type;
19656     x_csm_stream_types_tbl      okl_create_streams_pub.csm_stream_types_tbl_type;
19657     x_req_stream_types_tbl      okl_create_streams_pub.csm_stream_types_tbl_type;
19658     x_csm_line_details_tbl      okl_create_streams_pub.csm_line_details_tbl_type;
19659     x_rents_tbl                 okl_create_streams_pub.csm_periodic_expenses_tbl_type;
19660 
19661     x_csm_loan_header           okl_create_streams_pvt.csm_loan_rec_type;
19662     x_csm_lines_details_tbl     okl_create_streams_pvt.csm_loan_level_tbl_type;
19663     x_csm_loan_lines_tbl        okl_create_streams_pvt.csm_loan_line_tbl_type;
19664     x_csm_loan_levels_tbl       okl_create_streams_pvt.csm_loan_level_tbl_type;
19665 
19666     p_pdtv_rec                  pdtv_rec_type;
19667     x_pdt_parameter_rec         pdt_param_rec_type;
19668     x_no_data_found             BOOLEAN;
19669 
19670   BEGIN
19671     --Added by kthiruva for Debugging
19672     write_to_log('Inside the call to generate_streams');
19673 
19674     x_return_status := OKL_API.G_RET_STS_SUCCESS;
19675     x_return_status := OKL_API.START_ACTIVITY(
19676 			p_api_name      => l_api_name,
19677 			p_pkg_name      => g_pkg_name,
19678 			p_init_msg_list => p_init_msg_list,
19679 			l_api_version   => l_api_version,
19680 			p_api_version   => p_api_version,
19681 			p_api_type      => G_API_TYPE,
19682 			x_return_status => x_return_status);
19683     -- check if activity started successfully
19684     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19685        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19686     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19687        raise OKL_API.G_EXCEPTION_ERROR;
19688     End If;
19689 
19690 --    2. type of contract lease/loan
19691     OPEN  l_hdr_csr(p_chr_id);
19692     FETCH l_hdr_csr into l_hdr_rec;
19693     IF l_hdr_csr%NOTFOUND THEN
19694         CLOSE l_hdr_csr;
19695         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19696     END IF;
19697     CLOSE l_hdr_csr;
19698 
19699     IF (l_hdr_rec.template_yn = 'Y') Then
19700       x_return_status := OKL_API.G_RET_STS_ERROR;
19701       OKL_API.set_message(
19702                p_app_name      => G_APP_NAME,
19703                p_msg_name      => 'OKL_LLA_NO_STRM_TMPLTC');
19704       return;
19705     END IF;
19706     okl_contract_status_pub.get_contract_status(l_api_version,
19707                                                 p_init_msg_list,
19708                                                 x_return_status,
19709                                                 x_msg_count,
19710                                                 x_msg_data,
19711                                                 l_isStrmGenAllowed,
19712                                                 l_passStatus,
19713                                                 l_failStatus,
19714                                                 OKL_CONTRACT_STATUS_PUB.G_K_STRMGEN,
19715                                                 p_chr_id);
19716     If ( NOT (l_isStrmGenAllowed )) then
19717         x_return_status := OKL_API.G_RET_STS_ERROR;
19718         okl_api.set_message(
19719            p_app_name => G_APP_NAME,
19720            p_msg_name => OKL_CONTRACT_STATUS_PUB.G_CANNOT_GENSTRMS);
19721         return;
19722     ElsIf (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19723        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19724     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19725        raise OKL_API.G_EXCEPTION_ERROR;
19726     End If;
19727 
19728     print( l_api_name, 'Contract Status Check', x_return_status);
19729     FOR l_nullrl_rec in l_nullrl_csr ( 'LALEVL', 'LASLL', p_chr_id )
19730     LOOP
19731 
19732         l_rulv_rec.id := l_nullrl_rec.id;
19733 
19734         OKL_RULE_PUB.delete_rule(
19735                p_api_version   => l_api_version,
19736                p_init_msg_list => p_init_msg_list,
19737                x_return_status => x_return_status,
19738                x_msg_count => x_msg_count,
19739                x_msg_data  => x_msg_data,
19740                p_rulv_rec  => l_rulv_rec );
19741 
19742 
19743         -- check if activity started successfully
19744         If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
19745            raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
19746         ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
19747            raise OKC_API.G_EXCEPTION_ERROR;
19748         End If;
19749 
19750     END LOOP;
19751 
19752      delete_working_streams(
19753             p_api_version   => p_api_version,
19754             p_init_msg_list => p_init_msg_list,
19755             x_return_status => x_return_status,
19756             x_msg_count     => x_msg_count,
19757             x_msg_data      => x_msg_data,
19758 	    p_chr_id        => p_chr_id);
19759 
19760      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19761        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19762      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19763        raise OKL_API.G_EXCEPTION_ERROR;
19764      END IF;
19765 
19766     IF (INSTR( l_hdr_rec.deal_type, 'LEASE') > 0) THEN
19767         --Added by kthiruva for Debugging
19768         write_to_log('Deal Type is Lease');
19769         write_to_log('Prior to the call to extract_params_lease');
19770 
19771         extract_params_lease(
19772                    p_api_version,
19773                    p_init_msg_list,
19774                    p_chr_id,
19775                    x_return_status,
19776                    x_msg_count,
19777                    x_msg_data,
19778                    x_csm_lease_header,
19779                    x_csm_one_off_fee_tbl,
19780                    x_csm_periodic_expenses_tbl,
19781                    x_csm_yields_tbl,
19782                    x_req_stream_types_tbl,
19783                    x_csm_line_details_tbl,
19784                    x_rents_tbl);
19785 
19786         --Added by kthiruva for Debugging
19787         write_to_log('After the call to extract_params_lease, the return status is :'||x_return_status);
19788 
19789         If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then  -- Modified 06/14/2002. dedey
19790             okl_api.set_message(
19791                p_app_name => G_APP_NAME,
19792                p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
19793            raise OKL_API.G_EXCEPTION_ERROR;
19794         End If;
19795 
19796 --        FOR i in 1..x_req_stream_types_tbl.COUNT
19797 --	LOOP
19798 --	    print( l_api_name, ' req strm ' || to_char(x_req_stream_types_tbl(i).stream_type_id) ||
19799 --	                   ' for fee ' || to_char(nvl( x_req_stream_types_tbl(i).kle_fee_id,-1)) );
19800 --	END LOOP;
19801 
19802 
19803         okl_create_streams_pub.create_streams_lease_book(
19804                              p_api_version,
19805                              p_init_msg_list,
19806                              p_skip_prc_engine,
19807                              x_csm_lease_header,
19808                              x_csm_one_off_fee_tbl,
19809                              x_csm_periodic_expenses_tbl,
19810                              x_csm_yields_tbl,
19811                              x_req_stream_types_tbl,
19812                              x_csm_line_details_tbl,
19813                              x_rents_tbl,
19814                              x_request_id,
19815                              x_trans_status,
19816                              x_return_status,
19817                              x_msg_count,
19818                              x_msg_data);
19819 
19820        --Added by kthiruva for Debugging
19821        write_to_log('After the call to create_streams_lease_book, the return status is '||x_return_status);
19822 
19823         If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19824             okl_api.set_message(
19825                p_app_name => G_APP_NAME,
19826                p_msg_name => OKL_CONTRACT_STATUS_PUB.G_GENSTRMS_REQ_FAILED);
19827            raise OKL_API.G_EXCEPTION_ERROR;
19828         End If;
19829 
19830     ELSIF (INSTR(l_hdr_rec.deal_type, 'LOAN') > 0) THEN
19831 
19832         --Added by kthiruva for Debugging
19833         write_to_log('Deal Type is Loan');
19834         write_to_log('Prior to the call to extract_params_loan');
19835         extract_params_loan(
19836                     p_api_version,
19837                     p_init_msg_list,
19838                     p_chr_id,
19839                     x_return_status,
19840                     x_msg_count,
19841                     x_msg_data,
19842                     x_csm_loan_header,
19843                     x_csm_loan_lines_tbl,
19844                     x_csm_loan_levels_tbl,
19845                     x_csm_one_off_fee_tbl,
19846                     x_csm_periodic_expenses_tbl,
19847                     x_csm_yields_tbl,
19848                     x_csm_stream_types_tbl);
19849 
19850         --Added by kthiruva for Debugging
19851         write_to_log('After the call to extract_params_loan, the return status is :'||x_return_status);
19852         If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19853             okl_api.set_message(
19854                p_app_name => G_APP_NAME,
19855                p_msg_name => 'OKL_LLA_GENSTRMS_EXTR_FAILED');
19856             raise OKL_API.G_EXCEPTION_ERROR;
19857         End If;
19858 
19859         okl_create_streams_pub.create_streams_loan_book(
19860                              p_api_version => p_api_version,
19861                              p_init_msg_list => p_init_msg_list,
19862                              p_skip_prc_engine => p_skip_prc_engine,
19863                              p_csm_loan_header => x_csm_loan_header,
19864                              p_csm_loan_lines_tbl => x_csm_loan_lines_tbl,
19865                              p_csm_loan_levels_tbl  => x_csm_loan_levels_tbl,
19866                              p_csm_one_off_fee_tbl => x_csm_one_off_fee_tbl,
19867                              p_csm_periodic_expenses_tbl => x_csm_periodic_expenses_tbl,
19868                              p_csm_yields_tbl => x_csm_yields_tbl,
19869                              p_csm_stream_types_tbl => x_csm_stream_types_tbl,
19870                              x_trans_id => x_request_id,
19871                              x_trans_status => x_trans_status,
19872                              x_return_status => x_return_status,
19873                              x_msg_count => x_msg_count,
19874                              x_msg_data => x_msg_data);
19875 
19876        --Added by kthiruva for Debugging
19877        write_to_log('After the call to create_streams_loan_book, the return status is '||x_return_status);
19878 
19879         If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19880             okl_api.set_message(
19881                p_app_name => G_APP_NAME,
19882                p_msg_name => OKL_CONTRACT_STATUS_PUB.G_GENSTRMS_REQ_FAILED);
19883            raise OKL_API.G_EXCEPTION_ERROR;
19884         End If;
19885     ELSE
19886         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19887     END IF;
19888     If ( l_hdr_rec.report_pdt_id <> -1 ) Then
19889 
19890        --Added for Debugging
19891        write_to_log('Reporting Product is present');
19892        p_pdtv_rec.id := l_hdr_rec.report_pdt_id;
19893 
19894        OKL_SETUPPRODUCTS_PVT.Getpdt_parameters(
19895                     p_api_version       => p_api_version,
19896                     p_init_msg_list     => p_init_msg_list,
19897                     x_return_status     => x_return_status,
19898                     x_msg_count         => x_msg_count,
19899                     x_msg_data          => x_msg_data,
19900                     p_pdtv_rec          => p_pdtv_rec,
19901 		    x_no_data_found     => x_no_data_found,
19902                     p_pdt_parameter_rec => x_pdt_parameter_rec);
19903        --Added by kthiruva for Debugging
19904        write_to_log('After the call to OKL_SETUPPRODUCTS_PVT.Getpdt_parameters, return status is :'||x_return_status);
19905 
19906        IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
19907            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19908        ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
19909            RAISE OKL_API.G_EXCEPTION_ERROR;
19910        END IF;
19911 
19912        --Added by kthiruva for Debugging
19913        write_to_log('Prior to the call to generate_reporting_streams');
19914 
19915        generate_reporting_streams(
19916                p_api_version => p_api_version,
19917                p_init_msg_list => p_init_msg_list,
19918                p_chr_id => p_chr_id,
19919                p_report_deal_type => x_pdt_parameter_rec.deal_type,
19920                p_generation_context => p_generation_context,
19921                p_skip_prc_engine => p_skip_prc_engine,
19922                x_return_status => x_return_status,
19923                x_msg_count => x_msg_count,
19924                x_msg_data => x_msg_data,
19925                x_request_id =>  x_request_id,
19926                x_trans_status => x_trans_status);
19927 
19928        --Added by kthiruva for Debugging
19929        write_to_log('After the call to generate_reporting_streams, return status is :'||x_return_status);
19930        If (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
19931 
19932            okl_api.set_message(
19933                    p_app_name => G_APP_NAME,
19934                    p_msg_name => 'OKL_LLA_REPSTRMS_REQ_FAILED');
19935            raise OKL_API.G_EXCEPTION_ERROR;
19936 
19937        End If;
19938 
19939 
19940     End If;
19941 
19942     If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
19943        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
19944     ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
19945        raise OKL_API.G_EXCEPTION_ERROR;
19946     End If;
19947 
19948     print( l_api_name, 'end', x_return_status);
19949     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
19950 
19951     Exception
19952 	when OKL_API.G_EXCEPTION_ERROR then
19953 --srsreeni bug6011651 starts
19954 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
19955      p_api_version         => p_api_version,
19956      p_init_msg_list       => p_init_msg_list,
19957      x_return_status       => x_return_status,
19958      x_msg_count           => x_msg_count,
19959      x_msg_data            => x_msg_data,
19960      p_khr_id              => p_chr_id,
19961      p_prog_short_name     => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
19962      p_progress_status     => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_ERROR);
19963 --srsreeni bug6011651 ends
19964 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19965 			p_api_name  => l_api_name,
19966 			p_pkg_name  => g_pkg_name,
19967 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
19968 			x_msg_count => x_msg_count,
19969 			x_msg_data  => x_msg_data,
19970 			p_api_type  => g_api_type);
19971 
19972 	when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
19973 --srsreeni bug6011651 starts
19974 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
19975      p_api_version         => p_api_version,
19976      p_init_msg_list       => p_init_msg_list,
19977      x_return_status       => x_return_status,
19978      x_msg_count           => x_msg_count,
19979      x_msg_data            => x_msg_data,
19980      p_khr_id              => p_chr_id,
19981      p_prog_short_name     => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
19982      p_progress_status     => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_ERROR);
19983 --srsreeni bug6011651 ends
19984 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
19985 			p_api_name  => l_api_name,
19986 			p_pkg_name  => g_pkg_name,
19987 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
19988 			x_msg_count => x_msg_count,
19989 			x_msg_data  => x_msg_data,
19990 			p_api_type  => g_api_type);
19991 
19992 	when OTHERS then
19993 --srsreeni bug6011651 starts
19994 OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
19995      p_api_version         => p_api_version,
19996      p_init_msg_list       => p_init_msg_list,
19997      x_return_status       => x_return_status,
19998      x_msg_count           => x_msg_count,
19999      x_msg_data            => x_msg_data,
20000      p_khr_id              => p_chr_id,
20001      p_prog_short_name     => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
20002      p_progress_status     => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_ERROR);
20003 --srsreeni bug6011651 ends
20004       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
20005 			p_api_name  => l_api_name,
20006 			p_pkg_name  => g_pkg_name,
20007 			p_exc_name  => 'OTHERS',
20008 			x_msg_count => x_msg_count,
20009 			x_msg_data  => x_msg_data,
20010 			p_api_type  => g_api_type);
20011 
20012 
20013   END generate_streams;
20014 
20015 
20016   Procedure generate_internal_streams(
20017             p_api_version        IN  NUMBER,
20018             p_init_msg_list      IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
20019             p_chr_id             IN  NUMBER,
20020             p_line_id            IN  NUMBER,
20021             x_return_status      OUT NOCOPY VARCHAR2,
20022             x_msg_count          OUT NOCOPY NUMBER,
20023             x_msg_data           OUT NOCOPY VARCHAR2)  IS
20024 
20025     l_api_name		CONSTANT VARCHAR2(30) := 'GEN_STREAMS';
20026     l_api_version	CONSTANT NUMBER	      := 1.0;
20027     l_return_status	VARCHAR2(1)           := OKC_API.G_RET_STS_SUCCESS;
20028 
20029     l_stmv_rec Okl_Streams_pub.stmv_rec_type;
20030     l_selv_tbl Okl_Streams_pub.selv_tbl_type;
20031     x_stmv_rec Okl_Streams_pub.stmv_rec_type;
20032     x_selv_tbl Okl_Streams_pub.selv_tbl_type;
20033 
20034     cursor l_rl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
20035                      rlcat  OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
20036                      chrId NUMBER,
20037                      cleId NUMBER ) IS
20038     select crl.object1_id1,
20039            crl.RULE_INFORMATION1,
20040            crl.RULE_INFORMATION2,
20041            crl.RULE_INFORMATION3,
20042            crl.RULE_INFORMATION5,
20043            crl.RULE_INFORMATION6,
20044            crl.RULE_INFORMATION10
20045     from   OKC_RULE_GROUPS_B crg,
20046            OKC_RULES_B crl
20047     where  crl.rgp_id = crg.id
20048            and crg.RGD_CODE = rgcode
20049            and crl.RULE_INFORMATION_CATEGORY = rlcat
20050            and crg.dnz_chr_id = chrId
20051            and crg.cle_id = cleId
20052     order by crl.RULE_INFORMATION1;
20053 
20054     l_rl_rec l_rl_csr%ROWTYPE;
20055     l_rl_rec1 l_rl_csr%ROWTYPE;
20056     number_of_periods NUMBER;
20057     start_date        DATE;
20058     amount  NUMBER;
20059     i NUMBER;
20060     j NUMBER;
20061     k NUMBER;
20062     temp NUMBER;
20063 
20064     cursor l_nullrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
20065                      rlcat  OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
20066                      chrId NUMBER,
20067                      cleId NUMBER ) IS
20068     select crl.id
20069     from   OKC_RULE_GROUPS_B crg,
20070            OKC_RULES_B crl
20071     where  crl.rgp_id = crg.id
20072            and crg.RGD_CODE = rgcode
20073            and crl.RULE_INFORMATION_CATEGORY = rlcat
20074            and nvl(crl.RULE_INFORMATION1, 'XXX' ) = 'XXX'
20075            and nvl(crl.RULE_INFORMATION2, 'XXX' ) = 'XXX'
20076            and nvl(crl.RULE_INFORMATION3, 'XXX' ) = 'XXX'
20077            and nvl(crl.RULE_INFORMATION6, 'XXX' ) = 'XXX'
20078            and crg.dnz_chr_id = chrId
20079            and nvl(crg.cle_id, -1) = cleId;
20080 
20081     l_nullrl_rec l_nullrl_csr%ROWTYPE;
20082 
20083     l_rulv_rec OKL_RULE_PUB.rulv_rec_type;
20084 
20085   BEGIN
20086 
20087     x_return_status := OKC_API.START_ACTIVITY(
20088 			p_api_name      => l_api_name,
20089 			p_pkg_name      => g_pkg_name,
20090 			p_init_msg_list => p_init_msg_list,
20091 			l_api_version   => l_api_version,
20092 			p_api_version   => p_api_version,
20093 			p_api_type      => G_API_TYPE,
20094 			x_return_status => x_return_status);
20095 
20096     -- check if activity started successfully
20097     If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
20098        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
20099     ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
20100        raise OKC_API.G_EXCEPTION_ERROR;
20101     End If;
20102 
20103 
20104     FOR l_nullrl_rec in l_nullrl_csr ( 'LALEVL', 'LASLL', p_chr_id, p_line_id )
20105     LOOP
20106 
20107         l_rulv_rec.id := l_nullrl_rec.id;
20108 
20109         OKL_RULE_PUB.delete_rule(
20110                    p_api_version   => l_api_version,
20111                    p_init_msg_list => p_init_msg_list,
20112                    x_return_status => x_return_status,
20113 		   x_msg_count => x_msg_count,
20114 		   x_msg_data  => x_msg_data,
20115                    p_rulv_rec  => l_rulv_rec );
20116 
20117 
20118         -- check if activity started successfully
20119         If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
20120            raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
20121         ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
20122            raise OKC_API.G_EXCEPTION_ERROR;
20123         End If;
20124 
20125     END LOOP;
20126 
20127     FOR l_nullrl_rec in l_nullrl_csr ( 'LALEVL', 'LASLL', p_chr_id, -1 )
20128     LOOP
20129 
20130         l_rulv_rec.id := l_nullrl_rec.id;
20131 
20132         OKL_RULE_PUB.delete_rule(
20133                    p_api_version   => l_api_version,
20134                    p_init_msg_list => p_init_msg_list,
20135                    x_return_status => x_return_status,
20136 		   x_msg_count => x_msg_count,
20137 		   x_msg_data  => x_msg_data,
20138                    p_rulv_rec  => l_rulv_rec );
20139 
20140 
20141         -- check if activity started successfully
20142         If (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
20143            raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
20144         ElSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
20145            raise OKC_API.G_EXCEPTION_ERROR;
20146         End If;
20147 
20148     END LOOP;
20149 
20150     OPEN l_rl_csr ( 'LALEVL', 'LASLH', p_chr_id, p_line_id );
20151     FETCH l_rl_csr INTO l_rl_rec1;
20152     If ( l_rl_csr%NOTFOUND ) Then
20153         raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
20154     End If;
20155     CLOSE l_rl_csr;
20156 
20157     l_stmv_rec.sty_id := TO_NUMBER(l_rl_rec1.object1_id1);
20158     l_stmv_rec.khr_id := p_chr_id;
20159     l_stmv_rec.kle_id := p_line_id;
20160     l_stmv_rec.say_code := 'CURR';
20161     l_stmv_rec.active_yn := 'Y';
20162     l_stmv_rec.date_current := sysdate;
20163 
20164     Select max(transaction_number)+1  into temp
20165     From okl_streams;
20166 
20167     l_stmv_rec.transaction_number := temp;
20168     l_stmv_rec.sgn_code := 'MANL';
20169 
20170     j := 0;
20171     FOR l_rl_rec in l_rl_csr ( 'LALEVL', 'LASLL', p_chr_id, p_line_id )
20172     LOOP
20173 
20174         number_of_periods  := TO_NUMBER(l_rl_rec.RULE_INFORMATION3);
20175         amount := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
20176         start_date := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
20177         k := 0;
20178         FOR i in 1..number_of_periods
20179         LOOP
20180             k := i;
20181             l_selv_tbl(i+j).amount := amount;
20182             l_selv_tbl(i+j).accrued_yn := 'Y';
20183             l_selv_tbl(i+j).stream_element_date := add_months(start_date,i-1);
20184             l_selv_tbl(i+j).date_billed := l_selv_tbl(i+j).stream_element_date;
20185             l_selv_tbl(i+j).se_line_number := i+j;
20186             l_selv_tbl(i+j).comments := 'Streams';
20187 
20188         END LOOP;
20189         j := j + k;
20190 
20191     END LOOP;
20192 
20193     Okl_Streams_Pub.create_streams(
20194                        p_api_version   => l_api_version
20195                       ,p_init_msg_list => p_init_msg_list
20196                       ,x_return_status => l_return_status
20197                       ,x_msg_count     => x_msg_count
20198                       ,x_msg_data      => x_msg_data
20199                       ,p_stmv_rec      => l_stmv_rec
20200                       ,p_selv_tbl      => l_selv_tbl
20201                       ,x_stmv_rec      => x_stmv_rec
20202                       ,x_selv_tbl      => x_selv_tbl);
20203 
20204     If (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20205         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20206     ElSIF (l_return_status = OKL_API.G_RET_STS_ERROR) then
20207         raise OKL_API.G_EXCEPTION_ERROR;
20208     End If;
20209 
20210     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
20211 
20212     Exception
20213 	when OKC_API.G_EXCEPTION_ERROR then
20214 		x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20215 			p_api_name  => l_api_name,
20216 			p_pkg_name  => g_pkg_name,
20217 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
20218 			x_msg_count => x_msg_count,
20219 			x_msg_data  => x_msg_data,
20220 			p_api_type  => g_api_type);
20221 
20222 	when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
20223 		x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20224 			p_api_name  => l_api_name,
20225 			p_pkg_name  => g_pkg_name,
20226 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
20227 			x_msg_count => x_msg_count,
20228 			x_msg_data  => x_msg_data,
20229 			p_api_type  => g_api_type);
20230 
20231 	when OTHERS then
20232       	x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20233 			p_api_name  => l_api_name,
20234 			p_pkg_name  => g_pkg_name,
20235 			p_exc_name  => 'OTHERS',
20236 			x_msg_count => x_msg_count,
20237 			x_msg_data  => x_msg_data,
20238 			p_api_type  => g_api_type);
20239 
20240 
20241   END generate_internal_streams;
20242 
20243   Procedure generate_internal_streams(
20244             p_api_version        IN  NUMBER,
20245             p_init_msg_list      IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
20246             p_chr_id             IN  NUMBER,
20247             x_return_status      OUT NOCOPY VARCHAR2,
20248             x_msg_count          OUT NOCOPY NUMBER,
20249             x_msg_data           OUT NOCOPY VARCHAR2)  IS
20250 
20251     l_api_name		CONSTANT VARCHAR2(30) := 'GEN_STREAMS';
20252     l_api_version	CONSTANT NUMBER	      := 1.0;
20253     l_return_status	VARCHAR2(1)           := OKC_API.G_RET_STS_SUCCESS;
20254 
20255     pl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
20256     pl_khrv_rec okl_contract_pvt.khrv_rec_type;
20257     xl_chrv_rec okl_okc_migration_pvt.chrv_rec_type;
20258     xl_khrv_rec okl_contract_pub.khrv_rec_type;
20259 
20260     l_rents NUMBER;
20261     l_cap_amnt NUMBER;
20262     l_yield NUMBER;
20263 
20264 
20265   BEGIN
20266 
20267     l_return_status := OKC_API.START_ACTIVITY(
20268 			p_api_name      => l_api_name,
20269 			p_pkg_name      => g_pkg_name,
20270 			p_init_msg_list => p_init_msg_list,
20271 			l_api_version   => l_api_version,
20272 			p_api_version   => p_api_version,
20273 			p_api_type      => G_API_TYPE,
20274 			x_return_status => l_return_status);
20275 
20276     -- check if activity started successfully
20277     If (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
20278        raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
20279     ElSIF (l_return_status = OKC_API.G_RET_STS_ERROR) then
20280        raise OKC_API.G_EXCEPTION_ERROR;
20281     End If;
20282         okl_contract_status_pub.update_contract_status(
20283                                        l_api_version,
20284                                        p_init_msg_list,
20285                                        x_return_status,
20286                                        x_msg_count,
20287                                        x_msg_data,
20288                                        'COMPLETE',
20289                                        p_chr_id );
20290 
20291     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20292        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20293     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20294        RAISE OKL_API.G_EXCEPTION_ERROR;
20295     END IF;
20296 
20297       OKL_CONTRACT_STATUS_PVT.cascade_lease_status
20298             (p_api_version     => p_api_version,
20299              p_init_msg_list   => p_init_msg_list,
20300              x_return_status   => x_return_status,
20301              x_msg_count       => x_msg_count,
20302              x_msg_data        => x_msg_data,
20303              p_chr_id          => p_chr_id);
20304 
20305         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20306             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20307         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20308            RAISE OKL_API.G_EXCEPTION_ERROR;
20309         END IF;
20310         ---
20311 
20312     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
20313 
20314     Exception
20315 	when OKC_API.G_EXCEPTION_ERROR then
20316 		x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20317 			p_api_name  => l_api_name,
20318 			p_pkg_name  => g_pkg_name,
20319 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
20320 			x_msg_count => x_msg_count,
20321 			x_msg_data  => x_msg_data,
20322 			p_api_type  => g_api_type);
20323 
20324 	when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
20325 		x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20326 			p_api_name  => l_api_name,
20327 			p_pkg_name  => g_pkg_name,
20328 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
20329 			x_msg_count => x_msg_count,
20330 			x_msg_data  => x_msg_data,
20331 			p_api_type  => g_api_type);
20332 
20333 	when OTHERS then
20334       	x_return_status := OKC_API.HANDLE_EXCEPTIONS(
20335 			p_api_name  => l_api_name,
20336 			p_pkg_name  => g_pkg_name,
20337 			p_exc_name  => 'OTHERS',
20338 			x_msg_count => x_msg_count,
20339 			x_msg_data  => x_msg_data,
20340 			p_api_type  => g_api_type);
20341 
20342 
20343   END generate_internal_streams;
20344 
20345 PROCEDURE GEN_INTR_EXTR_STREAM (
20346                                 p_api_version         IN NUMBER,
20347                                 p_init_msg_list       IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
20348                                 x_return_status       OUT NOCOPY VARCHAR2,
20349                                 x_msg_count           OUT NOCOPY NUMBER,
20350                                 x_msg_data            OUT NOCOPY VARCHAR2,
20351                                 p_khr_id              IN  OKC_K_HEADERS_B.ID%TYPE,
20352                                 p_generation_ctx_code IN  VARCHAR2,
20353                                 x_trx_number          OUT NOCOPY NUMBER,
20354                                 x_trx_status          OUT NOCOPY VARCHAR2
20355                                ) AS
20356 
20357   l_api_name    VARCHAR2(35)    := 'gen_intr_extr_stream';
20358   l_proc_name   VARCHAR2(35)    := 'GEN_INTR_EXTR_STREAM';
20359   l_api_version NUMBER          := 1.0;
20360   l_return_status	VARCHAR2(1)           := OKL_API.G_RET_STS_SUCCESS;
20361 
20362   l_pre_tax_irr NUMBER;
20363 
20364 --  TYPE yields IS TABLE OF yields_rec_type INDEX BY BINARY_INTEGER;
20365 -- Start modification 11i10 bakuchib
20366   p_chr_yields           yields_rec_type;
20367 -- end modification 11i10 bakuchib
20368   lx_contract_rates      OKL_STREAM_GENERATOR_PVT.rate_rec_type;
20369 
20370   l_hdr_rec l_hdr_csr%ROWTYPE;
20371   p_pdtv_rec            pdtv_rec_type;
20372   x_pdt_parameter_rec   pdt_param_rec_type;
20373   x_no_data_found       BOOLEAN;
20374 
20375   l_stmv_tbl okl_streams_pub.stmv_tbl_type;
20376   x_stmv_tbl okl_streams_pub.stmv_tbl_type;
20377   l_selv_tbl Okl_Streams_pub.selv_tbl_type;
20378   x_selv_tbl Okl_Streams_pub.selv_tbl_type;
20379   l_strms_orig_rec strms_csr%ROWTYPE;
20380   l_strms_rep_rec strms_csr%ROWTYPE;
20381   -- Code for bulk update -02/28/2004 - HKPATEL
20382   l_id_tbl okl_streams_util.NumberTabTyp;
20383   -- Code for bulk update ends here -02/28/2004 - HKPATEL
20384 
20385 
20386   i NUMBER;
20387   l_strms_rec strms_csr%ROWTYPE;
20388   l_pricing_engine okl_st_gen_tmpt_sets.pricing_engine%TYPE;
20389 
20390 BEGIN
20391     --Added by kthiruva for Debugging
20392     L_DEBUG_ENABLED := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
20393     write_to_log('Start of Debug Logging for ESG');
20394     write_to_log ('=============================');
20395     print( l_api_name, 'begin');
20396     x_return_status := OKL_API.START_ACTIVITY(
20397                                                p_api_name      => l_api_name,
20398                                                p_pkg_name      => G_PKG_NAME,
20399                                                p_init_msg_list => p_init_msg_list,
20400                                                l_api_version   => l_api_version,
20401                                                p_api_version   => p_api_version,
20402                                                p_api_type      => G_API_TYPE,
20403                                                x_return_status => x_return_status);
20404 
20405      -- check if activity started successfully
20406      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20407        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20408      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20409        raise OKL_API.G_EXCEPTION_ERROR;
20410      END IF;
20411 
20412     print( l_api_name, 'deleting working streams');
20413      delete_working_streams(
20414             p_api_version   => p_api_version,
20415             p_init_msg_list => p_init_msg_list,
20416             x_return_status => x_return_status,
20417             x_msg_count     => x_msg_count,
20418             x_msg_data      => x_msg_data,
20419 	    p_chr_id        => p_khr_id);
20420 
20421      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20422        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20423      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20424        raise OKL_API.G_EXCEPTION_ERROR;
20425      END IF;
20426 
20427      OPEN  l_hdr_csr(p_khr_id);
20428      FETCH l_hdr_csr into l_hdr_rec;
20429      IF l_hdr_csr%NOTFOUND THEN
20430          CLOSE l_hdr_csr;
20431          print( l_api_name, 'header curosr unexpected error');
20432          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20433      END IF;
20434      CLOSE l_hdr_csr;
20435 
20436      IF ( l_hdr_rec.deal_type = 'LOAN-REVOLVING') Then
20437 
20438              --Added by kthiruva for Debugging
20439              write_to_log('The Deal Type is Loan Revolving');
20440              write_to_log('Prior to the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE');
20441 
20442              print( l_api_name, 'generating var int sched');
20443              OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE(
20444                                    p_api_version         => p_api_version,
20445                                    p_init_msg_list       => p_init_msg_list,
20446                                    p_khr_id              => p_khr_id,
20447 				   p_purpose_code        => NULL,
20448                                    x_return_status       => x_return_status,
20449                                    x_msg_count           => x_msg_count,
20450                                    x_msg_data            => x_msg_data);
20451              --Added by kthiruva for Debugging
20452              write_to_log('After the call to OKL_STREAM_GENERATOR_PUB.GEN_VAR_INT_SCHEDULE, return status is :'||x_return_status);
20453 
20454              IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20455                raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20456              ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20457                raise OKL_API.G_EXCEPTION_ERROR;
20458              END IF;
20459 
20460              I := 0;
20461              FOR l_strms_rec in strms_csr ( p_khr_id, 'WORK', 'ORIGIN')
20462              LOOP
20463 
20464                  i := i + 1;
20465 				 /* Commented code for Bulk update by HKPATEL -02/28/2005
20466                  l_stmv_tbl(i).id := l_strms_rec.STRM_ID;
20467                  l_stmv_tbl(i).say_code := 'CURR';
20468                  l_stmv_tbl(i).active_yn := 'Y';
20469                  l_stmv_tbl(i).date_current := sysdate;
20470 				 */
20471 
20472 				 l_id_tbl(i) := l_strms_rec.STRM_ID;
20473 
20474              END LOOP;
20475 
20476              If ( l_id_tbl.COUNT > 0 ) Then
20477 	           BEGIN
20478                  --Added by kthiruva for Debugging
20479                  write_to_log('Updating the Work streams to CURR');
20480 
20481 	             FORALL i IN l_id_tbl.FIRST..l_id_tbl.LAST
20482 		         UPDATE OKL_STREAMS
20483 		         SET 	say_code = 'CURR',
20484 		         active_yn = 'Y',
20485 		         date_current = sysdate
20486 		         WHERE 	ID = l_id_tbl(i);
20487 
20488                  --Added by kthiruva for Debugging
20489                  write_to_log('Streams updated succesfully');
20490                  write_to_log('Prior to the call to OKL_BILLING_CONTROLLER_PVT.track_next_bill_date');
20491                         -- Added by mansrini for bug 4728636 (G bug 4520466 )
20492                         OKL_BILLING_CONTROLLER_PVT.track_next_bill_date(p_khr_id);
20493                         -- end changes
20494                   write_to_log('Aftter the call to OKL_BILLING_CONTROLLER_PVT.track_next_bill_date');
20495 
20496 
20497 	           EXCEPTION
20498 		         WHEN OTHERS THEN
20499 		           okl_api.set_message (p_app_name     => G_APP_NAME,
20500                                         p_msg_name     => G_DB_ERROR,
20501                                         p_token1       => G_PROG_NAME_TOKEN,
20502                                         p_token1_value => l_api_name,
20503                                         p_token2       => G_SQLCODE_TOKEN,
20504                                         p_token2_value => sqlcode,
20505                                         p_token3       => G_SQLERRM_TOKEN,
20506                                         p_token3_value => sqlerrm);
20507 		        l_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
20508 		        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20509 	          END;
20510 			 /* Commented for Bulk update by HKPATEL -02/28/2004
20511              If ( l_stmv_tbl.COUNT > 0 ) Then
20512                  Okl_Streams_pub.update_streams(
20513                                   p_api_version => p_api_version,
20514                                   p_init_msg_list => p_init_msg_list,
20515                                   x_return_status => x_return_status,
20516                                   x_msg_count => x_msg_count,
20517                                   x_msg_data => x_msg_data,
20518                                   p_stmv_tbl => l_stmv_tbl,
20519                                   x_stmv_tbl => x_stmv_tbl);
20520 
20521                  IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20522                     RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20523                  END IF;
20524 			*/
20525 
20526 	      ENd If;
20527 	      --Added by kthiruva on 09-Oct-2007 for Bug 6476425
20528 	      --Updating the contract status to Complete
20529           okl_contract_status_pub.update_contract_status(
20530                                     l_api_version,
20531                                     p_init_msg_list,
20532                                     x_return_status,
20533                                     x_msg_count,
20534                                     x_msg_data,
20535                                     'COMPLETE',
20536                                     p_khr_id );
20537            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20538              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20539            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20540              RAISE OKL_API.G_EXCEPTION_ERROR;
20541            END IF;
20542            --Added by kthiruva for Debugging
20543            write_to_log('After the call to update_contract_status, return status is :'||x_return_status);
20544 
20545            --call to cascade status on to lines
20546            OKL_CONTRACT_STATUS_PVT.cascade_lease_status(
20547                                     p_api_version     => l_api_version,
20548                                     p_init_msg_list   => p_init_msg_list,
20549                                     x_return_status   => x_return_status,
20550                                     x_msg_count       => x_msg_count,
20551                                     x_msg_data        => x_msg_data,
20552                                     p_chr_id          => p_khr_id);
20553            --Added by kthiruva for Debugging
20554            write_to_log('After the call to cascade_lease_status, return status is :'||x_return_status);
20555 
20556            IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20557              RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20558            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20559              RAISE OKL_API.G_EXCEPTION_ERROR;
20560            END IF;
20561 
20562            OKL_BOOK_CONTROLLER_PVT.update_book_controller_trx(
20563                      p_api_version         => l_api_version,
20564                      p_init_msg_list       => p_init_msg_list,
20565                      x_return_status       => x_return_status,
20566                      x_msg_count           => x_msg_count,
20567                      x_msg_data            => x_msg_data,
20568                      p_khr_id              => p_khr_id,
20569                      p_prog_short_name     => OKL_BOOK_CONTROLLER_PVT.G_PRICE_CONTRACT,
20570                      p_progress_status     => OKL_BOOK_CONTROLLER_PVT.G_PROG_STS_COMPLETE);
20571 
20572 		   IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20573               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20574            ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20575               RAISE OKL_API.G_EXCEPTION_ERROR;
20576            END IF;
20577            --Bug 6476425 - End of Changes
20578 
20579 
20580 	 return;
20581 
20582      End If;
20583 
20584 	 OKL_STREAMS_UTIL.get_pricing_engine(
20585 	                                     p_khr_id => p_khr_id,
20586 	                                     x_pricing_engine => l_pricing_engine,
20587 	                                     x_return_status => x_return_status);
20588      --Added by kthiruva for Debugging
20589      write_to_log('The pricing engine is :'||l_pricing_engine);
20590      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20591        raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20592      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20593        raise OKL_API.G_EXCEPTION_ERROR;
20594      END IF;
20595 
20596 
20597      --IF ( fnd_profile.value('OKL_STREAMS_GEN_PATH') = 'EXTERNAL') THEN
20598      IF ( l_pricing_engine  = 'EXTERNAL') THEN
20599 
20600         --
20601         -- Call EXTERNAL Stream genration process
20602         --
20603 
20604         OKL_GENERATE_STREAMS_PUB.GENERATE_STREAMS(
20605                                                   p_api_version         => p_api_version,
20606                                                   p_init_msg_list       => OKL_API.G_FALSE,
20607                                                   p_khr_id              => p_khr_id,
20608                                                   p_generation_ctx_code => p_generation_ctx_code,
20609                                                   x_trx_number          => x_trx_number,
20610                                                   x_trx_status          => x_trx_status,
20611                                                   x_return_status       => x_return_status,
20612                                                   x_msg_count           => x_msg_count,
20613                                                   x_msg_data            => x_msg_data
20614                                                  );
20615 
20616         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20617            raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20618         ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20619            raise OKL_API.G_EXCEPTION_ERROR;
20620         END IF;
20621 
20622      --ELSE -- fnd_profile = INTERNAL or NONE
20623      ELSIF ( l_pricing_engine  = 'INTERNAL') THEN
20624         --
20625         -- Call INTERNAL Stream genration process
20626         --
20627         print( l_api_name, 'generating streams');
20628         /*
20629         OKL_STREAM_GENERATOR_PUB.generate_streams(
20630                                                   p_api_version   => l_api_version,
20631                                                   p_init_msg_list => p_init_msg_list,
20632                                                   p_khr_id        => p_khr_id,
20633                                                   x_pre_tax_irr   => l_pre_tax_irr,
20634                                                   x_return_status => x_return_status,
20635                                                   x_msg_count     => x_msg_count,
20636                                                   x_msg_data      => x_msg_data
20637                                                  );
20638         */
20639         OKL_STREAM_GENERATOR_PUB.generate_streams(
20640                                  p_api_version    => l_api_version,
20641                                  p_init_msg_list  => p_init_msg_list,
20642                                  x_return_status  => x_return_status,
20643                                  x_msg_count      => x_msg_count,
20644                                  x_msg_data       => x_msg_data,
20645                                  p_khr_id         => p_khr_id,
20646                                  x_contract_rates => lx_contract_rates)                                                 ;
20647         -- check if activity started successfully
20648         If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20649            raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20650         ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20651            raise OKL_API.G_EXCEPTION_ERROR;
20652         End If;
20653         p_chr_yields.pre_tax_yield          := lx_contract_rates.pre_tax_yield;
20654         p_chr_yields.pre_tax_irr            := lx_contract_rates.pre_tax_irr;
20655         p_chr_yields.implicit_interest_rate := lx_contract_rates.implicit_interest_rate;
20656         p_chr_yields.sub_impl_interest_rate := lx_contract_rates.sub_impl_interest_rate;
20657         p_chr_yields.sub_pre_tax_irr        := lx_contract_rates.sub_pre_tax_irr;
20658 
20659         -- Added by kthiruva on 10-Aug-2004
20660         -- Bug 3817222 - Start of Changes
20661         If ( l_hdr_rec.report_pdt_id <> -1 ) Then
20662             p_pdtv_rec.id := l_hdr_rec.report_pdt_id;
20663             OKL_SETUPPRODUCTS_PVT.Getpdt_parameters(
20664                     p_api_version       => p_api_version,
20665                     p_init_msg_list     => p_init_msg_list,
20666                     x_return_status     => x_return_status,
20667                     x_msg_count         => x_msg_count,
20668                     x_msg_data          => x_msg_data,
20669                     p_pdtv_rec          => p_pdtv_rec,
20670                     x_no_data_found     => x_no_data_found,
20671                     p_pdt_parameter_rec => x_pdt_parameter_rec);
20672             IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20673                 RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20674             ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
20675                 RAISE OKL_API.G_EXCEPTION_ERROR;
20676             END IF;
20677             OKL_STREAM_GENERATOR_PUB.generate_streams(
20678                                      p_api_version          => l_api_version,
20679                                      p_init_msg_list        => p_init_msg_list,
20680                                      x_return_status        => x_return_status,
20681                                      x_msg_count            => x_msg_count,
20682                                      x_msg_data             => x_msg_data,
20683                                      p_khr_id               => p_khr_id,
20684                                      p_reporting_book_class => x_pdt_parameter_rec.deal_type,
20685                                      x_contract_rates       => lx_contract_rates)                                                 ;
20686             -- check if activity started successfully
20687             If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20688                raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20689             ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20690                raise OKL_API.G_EXCEPTION_ERROR;
20691             End If;
20692 --            p_chr_yields(1).PRE_TAX_IRR := l_pre_tax_irr; -- Not updated though !!! (ssiruvol - 06-FEB-2003)
20693 -- Start modification 11i10 bakuchib
20694 /* Commented by HKPATEL for bug 4040722 - 01-DEC-2004
20695             p_chr_yields.pre_tax_yield          := lx_contract_rates.pre_tax_yield;
20696             p_chr_yields.pre_tax_irr            := lx_contract_rates.pre_tax_irr;
20697             p_chr_yields.implicit_interest_rate := lx_contract_rates.implicit_interest_rate;
20698             p_chr_yields.sub_impl_interest_rate := lx_contract_rates.sub_impl_interest_rate;
20699             p_chr_yields.sub_pre_tax_irr        := lx_contract_rates.sub_pre_tax_irr;
20700 Bug 4040722*/
20701 -- End modification 11i10 bakuchib
20702 
20703             x_trx_number := -1;
20704             x_trx_status := NULL;
20705          End If;
20706          -- Bug 3817222 - End of Changes
20707 
20708         print( l_api_name, 'process streams');
20709         process_streams(
20710                 p_api_version   => l_api_version,
20711                 p_init_msg_list => OKL_API.G_FALSE,
20712                 x_return_status => x_return_status,
20713                 x_msg_count     => x_msg_count,
20714                 x_msg_data      => x_msg_data,
20715                 p_chr_id        => p_khr_id,
20716                 p_process_yn    => OKL_API.G_TRUE,
20717                 p_chr_yields    => p_chr_yields,
20718                 p_source_call   => 'ISG');
20719         -- check if activity started successfully
20720         If (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) then
20721            raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20722         ElSIF (x_return_status = OKL_API.G_RET_STS_ERROR) then
20723            raise OKL_API.G_EXCEPTION_ERROR;
20724         End If;
20725 
20726      END IF; -- fnd_profile
20727 
20728     print( l_api_name, 'end', x_return_status);
20729      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
20730                           x_msg_data    => x_msg_data);
20731 
20732      RETURN;
20733 
20734   EXCEPTION
20735       when OKL_API.G_EXCEPTION_ERROR then
20736          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
20737                         p_api_name  => l_api_name,
20738                         p_pkg_name  => G_PKG_NAME,
20739                         p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
20740                         x_msg_count => x_msg_count,
20741                         x_msg_data  => x_msg_data,
20742                         p_api_type  => G_API_TYPE);
20743 
20744       when OKL_API.G_EXCEPTION_UNEXPECTED_ERROR then
20745          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
20746                         p_api_name  => l_api_name,
20747                         p_pkg_name  => G_PKG_NAME,
20748                         p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
20749                         x_msg_count => x_msg_count,
20750                         x_msg_data  => x_msg_data,
20751                         p_api_type  => G_API_TYPE);
20752 
20753       when OTHERS then
20754          x_return_status := OKL_API.HANDLE_EXCEPTIONS(
20755                         p_api_name  => l_api_name,
20756                         p_pkg_name  => G_PKG_NAME,
20757                         p_exc_name  => 'OTHERS',
20758                         x_msg_count => x_msg_count,
20759                         x_msg_data  => x_msg_data,
20760                         p_api_type  => G_API_TYPE);
20761 
20762   END GEN_INTR_EXTR_STREAM;
20763 -- Start modification 11i10 bakuchib
20764   -------------------------------------------------------------------------------------------------
20765 -- Start of Commnets
20766 -- Badrinath Kuchibholta
20767 -- Procedure Name       : validate_payments
20768 -- Description          : validate sll payments
20769 -- Business Rules       :
20770 -- Parameters           : Standard Parameters with Payment table
20771 -- Version              :
20772 -- End of Commnets
20773 -------------------------------------------------------------------------------------------------
20774   PROCEDURE validate_payments(p_api_version    IN  NUMBER,
20775                               p_init_msg_list  IN  VARCHAR2,
20776                               x_return_status  OUT NOCOPY VARCHAR2,
20777                               x_msg_count      OUT NOCOPY NUMBER,
20778                               x_msg_data       OUT NOCOPY VARCHAR2,
20779                               p_khr_id         IN OKC_K_HEADERS_B.ID%TYPE,
20780                               p_paym_tbl       IN OKL_STREAM_GENERATOR_PVT.payment_tbl_type)
20781     IS
20782     l_api_name      CONSTANT VARCHAR2(30) := 'VALIDATE_PAYMENTS';
20783     G_APP_NAME               VARCHAR2(30) := 'OKL';
20784     l_return_status          VARCHAR2(3)  := OKL_API.G_RET_STS_SUCCESS;
20785     G_RGD_CODE               okc_rule_groups_b.rgd_code%TYPE := 'LALEVL';
20786     G_RUL_SLH_CODE           okc_rules_b.rule_information_category%TYPE := 'LASLH';
20787     G_RUL_SLL_CODE           okc_rules_b.rule_information_category%TYPE := 'LASLL';
20788     G_FEE_TYPE               okl_k_lines.fee_type%TYPE := 'PASSTHROUGH';
20789     -- Messages
20790     G_PAYMENT_OVERLAP_ERROR  VARCHAR2(200) := 'OKL_PAYMENT_OVERLAP_ERROR';
20791     G_PAYMENT_GAP_ERROR      VARCHAR2(200) := 'OKL_PAYMENT_GAP_ERROR';
20792     G_PSTH_PAYMENT_ERROR     VARCHAR2(200) := 'OKL_PSTH_PAYMENT_ERROR';
20793     -- Messages
20794     ln_pasth_cnt             NUMBER := 0;
20795     ln_dummy                 NUMBER := 0;
20796     i                        NUMBER := 0;
20797     j                        NUMBER := 0;
20798     ln_cnt_amt_null          NUMBER := 0;
20799     ln_cnt_amt_not_null      NUMBER := 0;
20800     ln_cnt_rte_null          NUMBER := 0;
20801     ln_cnt_rte_not_null      NUMBER := 0;
20802     ln_tot_cnt               NUMBER := 0;
20803     l_freq                   VARCHAR2(1);
20804     -- Get Passthrough Fee Lines
20805     CURSOR c_get_psth_csr(p_khr_id okl_k_headers.id%TYPE)
20806     IS
20807     SELECT cle.id
20808     FROM okc_k_lines_b cle,
20809          okl_k_lines kle,
20810          okc_line_styles_b lse
20811     WHERE cle.dnz_chr_id = p_khr_id
20812     AND cle.lse_id = lse.id
20813     AND cle.sts_code NOT IN  ('HOLD', 'EXPIRED', 'CANCELLED')
20814     AND lse.lty_code = 'FEE'
20815     AND cle.id = kle.id
20816     AND kle.fee_type = G_FEE_TYPE;
20817     -- Get number of SLH payments for Passthrough fee type
20818     CURSOR c_get_pay_psth_csr(p_khr_id okl_k_headers.id%TYPE,
20819                               p_kle_id okl_k_headers.id%TYPE)
20820     IS
20821     SELECT COUNT(*)
20822     FROM okc_rules_b slh,
20823          okc_rule_groups_b rgp,
20824          okl_k_lines kle
20825     WHERE rgp.dnz_chr_id = p_khr_id
20826     AND kle.id = p_kle_id
20827     AND rgp.rgd_code= G_RGD_CODE
20828     AND rgp.id = slh.rgp_id
20829     AND kle.id = rgp.cle_id
20830     AND kle.fee_type = G_FEE_TYPE
20831     AND slh.rule_information_category = G_RUL_SLH_CODE;
20832 
20833     -- Get all the Top lines for p_khr_id
20834     CURSOR c_get_all_lines_csr(p_khr_id okl_k_headers.id%TYPE)
20835     IS
20836     SELECT cle.id line_id
20837     FROM okc_k_lines_b cle,
20838          okc_line_styles_b lse
20839     WHERE cle.dnz_chr_id = p_khr_id
20840     AND cle.lse_id = lse.id
20841     AND cle.sts_code NOT IN  ('HOLD', 'EXPIRED', 'CANCELLED')
20842     AND lse.lty_code IN ('FREE_FORM1','FEE','SOLD_SERVICE');
20843 
20844     -- Get all the SLH payment lines for Each Khr_id and Line Id
20845     CURSOR c_get_slh_lines_csr(p_khr_id okl_k_headers.id%TYPE,
20846                                p_cle_id okl_k_lines.id%TYPE)
20847     IS
20848     SELECT rul.id slh_id
20849     FROM okc_rule_groups_b rgp,
20850          okc_rules_b rul
20851     WHERE rul.rgp_id = rgp.id
20852     AND rgp.rgd_code = G_RGD_CODE
20853     AND rul.rule_information_category = G_RUL_SLH_CODE
20854     AND rgp.dnz_chr_id = p_khr_id
20855     AND rgp.cle_id = p_cle_id;
20856 
20857     -- Get all the SLL payment lines for Each Khr_id,SLH id and Line Id
20858     CURSOR c_get_sll_lines_csr(p_khr_id okl_k_headers.id%TYPE,
20859                                p_cle_id okl_k_lines.id%TYPE,
20860                                p_slh_id okc_rules_b.id%TYPE)
20861     IS
20862     SELECT FND_DATE.canonical_to_date(sll.rule_information2) start_date,
20863            /* DECODE(SLL.rule_information7,
20864            NULL,(ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1),
20865            TO_NUMBER(SLL.rule_information7),FND_DATE.canonical_to_date(sll.rule_information2)+SLL.rule_information7-1,
20866            (ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1)) end_date,
20867           */
20868           -- Bug 5362566: Start
20869           OKL_LA_PAYMENTS_PVT.get_display_end_date(
20870             sll.RULE_INFORMATION2, sll.RULE_INFORMATION7, sll.OBJECT1_ID1, sll.RULE_INFORMATION3,
20871               okl_la_payments_pvt.get_start_day( sll.id,sll.dnz_chr_id,sll.rgp_id,sll.object2_id1,sll.RULE_INFORMATION2)
20872 			  ,(SELECT end_date FROM okc_k_headers_b WHERE id = rgp.dnz_chr_id ) --Bug#5441811
20873 			 )
20874              END_DATE,
20875           -- Bug 5362566: End
20876 -- Start of BAKUCHIB modification bug#3121708
20877            FND_NUMBER.canonical_to_number(NVL(sll.rule_information6,sll.rule_information8)) amount,
20878 -- End  of BAKUCHIB modification bug#3121708
20879            sll.rule_information13 rate,
20880            nvl(sll.rule_information10,'Y') arrears_yn,
20881            sll.rule_information5 structure
20882     FROM okc_rules_b sll,
20883          okc_rules_b slh,
20884          okc_rule_groups_b rgp
20885     WHERE rgp.dnz_chr_id = p_khr_id
20886     AND rgp.cle_id  = p_cle_id
20887     AND slh.id = p_slh_id
20888     AND rgp.rgd_code = G_RGD_CODE
20889     AND rgp.id = slh.rgp_id
20890     AND slh.rule_information_category = G_RUL_SLH_CODE
20891     AND TO_CHAR(slh.id) = sll.object2_id1
20892     AND sll.rule_information_category = G_RUL_SLL_CODE
20893     --Added by kthiruva for Bug 5130703
20894     AND slh.JTOT_OBJECT1_CODE = 'OKL_STRMTYP'
20895     ORDER BY FND_DATE.canonical_to_date(sll.rule_information2);
20896 
20897     CURSOR c_valid_khr_csr(p_khr_id OKC_K_HEADERS_B.ID%TYPE)
20898     IS
20899     SELECT 1
20900     FROM DUAL
20901     WHERE EXISTS (SELECT 1
20902                   FROM okc_k_headers_b
20903                   WHERE id = p_khr_id);
20904     TYPE sll_date_rec_type IS RECORD (
20905         start_date okc_rules_b.last_update_date%TYPE := okl_api.G_MISS_DATE,
20906         end_date   okc_rules_b.last_update_date%TYPE := okl_api.G_MISS_DATE);
20907     TYPE sll_date_tbl_type IS TABLE OF sll_date_rec_type
20908             INDEX BY BINARY_INTEGER;
20909     lt_sll_date_tbl_type sll_date_tbl_type;
20910     l_paym_tbl           OKL_STREAM_GENERATOR_PVT.payment_tbl_type := p_paym_tbl;
20911   BEGIN
20912     l_return_status := OKL_API.START_ACTIVITY (
20913                                l_api_name
20914                                ,p_init_msg_list
20915                                ,'_PVT'
20916                                ,l_return_status);
20917     -- Check if activity started successfully
20918     IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20919       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20920     ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
20921       RAISE OKL_API.G_EXCEPTION_ERROR;
20922     END IF;
20923     IF (p_khr_id = OKL_API.G_MISS_NUM OR
20924        p_khr_id IS NULL) AND
20925        p_paym_tbl.COUNT = 0 THEN
20926        OKL_API.set_message(p_app_name      => G_APP_NAME,
20927                            p_msg_name      => G_REQUIRED_VALUE,
20928                            p_token1        => G_COL_NAME_TOKEN,
20929                            p_token1_value  => 'khr_id/Payment table');
20930       RAISE OKL_API.G_EXCEPTION_ERROR;
20931     ELSIF p_khr_id <> OKL_API.G_MISS_NUM OR
20932           p_khr_id IS NOT NULL THEN
20933       -- Validating the khr_id
20934       OPEN  c_valid_khr_csr(p_khr_id => p_khr_id);
20935       FETCH c_valid_khr_csr INTO ln_dummy;
20936       IF c_valid_khr_csr%NOTFOUND THEN
20937         OKL_API.set_message(p_app_name      => G_APP_NAME,
20938                             p_msg_name      => G_REQUIRED_VALUE,
20939                             p_token1        => G_COL_NAME_TOKEN,
20940                             p_token1_value  => 'khr_id');
20941         RAISE OKL_API.G_EXCEPTION_ERROR;
20942       END IF;
20943       CLOSE c_valid_khr_csr;
20944       IF ln_dummy <> 1 THEN
20945         OKL_API.set_message(p_app_name      => G_APP_NAME,
20946                             p_msg_name      => G_INVALID_VALUE,
20947                             p_token1        => G_COL_NAME_TOKEN,
20948                             p_token1_value  => 'khr_id');
20949         RAISE OKL_API.G_EXCEPTION_ERROR;
20950       END IF;
20951       -- Checking for Passthrough
20952       FOR r_get_psth_rec IN c_get_psth_csr (p_khr_id => p_khr_id) LOOP
20953         OPEN  c_get_pay_psth_csr(p_khr_id => p_khr_id,
20954                                  p_kle_id => r_get_psth_rec.id);
20955         FETCH c_get_pay_psth_csr INTO ln_pasth_cnt;
20956         CLOSE c_get_pay_psth_csr;
20957         IF ln_pasth_cnt > 1 THEN
20958           OKL_API.set_message(p_app_name      => G_APP_NAME,
20959                               p_msg_name      => G_PSTH_PAYMENT_ERROR,
20960                               p_token1        => 'FEE_TYPE',
20961                               p_token1_value  => G_FEE_TYPE);
20962           l_return_status := OKL_API.G_RET_STS_ERROR;
20963           EXIT WHEN (l_return_status = OKL_API.G_RET_STS_ERROR);
20964         END IF;
20965       END LOOP;
20966       -- Check if activity started successfully
20967       IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
20968         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
20969       ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
20970         RAISE OKL_API.G_EXCEPTION_ERROR;
20971       END IF;
20972       -- Get all the lines
20973       FOR r_get_all_lines_rec IN c_get_all_lines_csr(p_khr_id => p_khr_id) LOOP
20974         -- Get all the SLH payment lines for khr_id and each line_id
20975         FOR r_get_slh_lines_rec IN c_get_slh_lines_csr(p_khr_id => p_khr_id,
20976                                                        p_cle_id => r_get_all_lines_rec.line_id) LOOP
20977           -- Get all the SLL payment lines for Khr_id,line_id and each slh_id
20978           FOR r_get_sll_lines_rec IN c_get_sll_lines_csr(p_khr_id => p_khr_id,
20979                                                          p_cle_id => r_get_all_lines_rec.line_id,
20980                                                          p_slh_id => r_get_slh_lines_rec.slh_id) LOOP
20981             lt_sll_date_tbl_type(i).start_date := r_get_sll_lines_rec.start_date;
20982             lt_sll_date_tbl_type(i).end_date := r_get_sll_lines_rec.end_date;
20983             IF r_get_sll_lines_rec.amount IS NULL THEN
20984               ln_cnt_amt_null := ln_cnt_amt_null + 1;
20985             ELSIF r_get_sll_lines_rec.amount IS NOT NULL THEN
20986               ln_cnt_amt_not_null := ln_cnt_amt_not_null + 1;
20987             END IF;
20988             -- Collecting amount and rate info to validate further
20989             IF r_get_sll_lines_rec.rate IS NULL THEN
20990               ln_cnt_rte_null := ln_cnt_rte_null + 1;
20991             ELSIF r_get_sll_lines_rec.rate IS NOT NULL THEN
20992               ln_cnt_rte_not_null := ln_cnt_rte_not_null + 1;
20993             END IF;
20994             IF r_get_sll_lines_rec.arrears_yn IS NULL OR
20995                r_get_sll_lines_rec.arrears_yn = OKL_API.G_MISS_CHAR THEN
20996               l_return_status := OKL_API.G_RET_STS_ERROR;
20997               IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
20998                 OKL_API.set_message(p_app_name      => G_APP_NAME,
20999                                     p_msg_name      => G_INVALID_VALUE,
21000                                     p_token1        => G_COL_NAME_TOKEN,
21001                                     p_token1_value  => 'Arrear');
21002                 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21003               END IF;
21004             ELSIF (r_get_sll_lines_rec.arrears_yn IS NOT NULL OR
21005                   r_get_sll_lines_rec.arrears_yn <> OKL_API.G_MISS_CHAR) AND
21006                   r_get_sll_lines_rec.arrears_yn = 'N' THEN
21007               IF r_get_sll_lines_rec.STRUCTURE IS NULL OR
21008                  r_get_sll_lines_rec.STRUCTURE = OKL_API.G_MISS_CHAR THEN
21009                 l_return_status := OKL_API.G_RET_STS_ERROR;
21010                 IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21011                   OKL_API.set_message(p_app_name      => G_APP_NAME,
21012                                       p_msg_name      => G_INVALID_VALUE,
21013                                       p_token1        => G_COL_NAME_TOKEN,
21014                                       p_token1_value  => 'Structure');
21015                   EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21016                 END IF;
21017               END IF;
21018             END IF;
21019             i := i + 1;
21020             ln_tot_cnt := ln_tot_cnt + 1;
21021           END LOOP;
21022           IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21023             EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21024           END IF;
21025           -- Validating amounts and rates values
21026           IF ln_cnt_rte_not_null = ln_tot_cnt AND
21027              ln_cnt_amt_null < ln_tot_cnt AND
21028              ln_cnt_amt_null > 1 THEN
21029             l_return_status := OKL_API.G_RET_STS_ERROR;
21030             IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21031               OKL_API.set_message(p_app_name      => G_APP_NAME,
21032                                   p_msg_name      => G_INVALID_VALUE,
21033                                   p_token1        => G_COL_NAME_TOKEN,
21034                                   p_token1_value  => 'payment amounts');
21035               EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21036             END IF;
21037           END IF;
21038           IF ln_cnt_amt_not_null = ln_tot_cnt THEN
21039             IF ln_cnt_rte_not_null < ln_tot_cnt AND
21040                ln_cnt_rte_not_null > 0 THEN
21041               l_return_status := OKL_API.G_RET_STS_ERROR;
21042               IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21043                 OKL_API.set_message(p_app_name      => G_APP_NAME,
21044                                     p_msg_name      => G_INVALID_VALUE,
21045                                     p_token1        => G_COL_NAME_TOKEN,
21046                                     p_token1_value  => 'payment rates');
21047                 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21048               END IF;
21049             END IF;
21050           END IF;
21051           IF ln_cnt_rte_null = ln_tot_cnt AND
21052              ln_cnt_amt_null = ln_tot_cnt THEN
21053             l_return_status := OKL_API.G_RET_STS_ERROR;
21054             IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21055               OKL_API.set_message(p_app_name      => G_APP_NAME,
21056                                   p_msg_name      => G_REQUIRED_VALUE,
21057                                   p_token1        => G_COL_NAME_TOKEN,
21058                                   p_token1_value  => 'payment rate and payment amount');
21059               EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21060             END IF;
21061           END IF;
21062           IF ln_cnt_rte_not_null <> ln_tot_cnt AND
21063              ln_cnt_amt_not_null <> ln_tot_cnt THEN
21064             IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21065               OKL_API.set_message(p_app_name      => G_APP_NAME,
21066                                   p_msg_name      => G_INVALID_VALUE,
21067                                   p_token1        => G_COL_NAME_TOKEN,
21068                                   p_token1_value  => 'payment rates and payment amounts');
21069               EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21070             END IF;
21071           END IF;
21072           ln_cnt_amt_null := 0;
21073           ln_cnt_amt_not_null := 0;
21074           ln_cnt_rte_null := 0;
21075           ln_cnt_rte_not_null := 0;
21076           -- Validate dates either overlapping or having gap
21077           IF lt_sll_date_tbl_type.COUNT > 0 THEN
21078             IF lt_sll_date_tbl_type.LAST > 1 THEN
21079               FOR k IN lt_sll_date_tbl_type.FIRST..lt_sll_date_tbl_type.LAST LOOP
21080                 EXIT WHEN(k = lt_sll_date_tbl_type.LAST);
21081                 IF lt_sll_date_tbl_type(k+1).start_date >= lt_sll_date_tbl_type(k).start_date AND
21082                   lt_sll_date_tbl_type(k+1).start_date <= lt_sll_date_tbl_type(k).end_date THEN
21083                   OKL_API.set_message(p_app_name      => G_APP_NAME,
21084                                       p_msg_name      => G_PAYMENT_OVERLAP_ERROR);
21085                   l_return_status := OKL_API.G_RET_STS_ERROR;
21086                   IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21087                     EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21088                   END IF;
21089                 ELSIF lt_sll_date_tbl_type(k+1).start_date > lt_sll_date_tbl_type(k).end_date + 1 THEN
21090                   OKL_API.set_message(p_app_name      => G_APP_NAME,
21091                                       p_msg_name      => G_PAYMENT_GAP_ERROR);
21092                   l_return_status := OKL_API.G_RET_STS_ERROR;
21093                   IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21094                     EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21095                   END IF;
21096                 END IF;
21097               END LOOP;
21098             END IF;
21099           ELSE
21100             OKL_API.set_message(p_app_name      => G_APP_NAME,
21101                                 p_msg_name      => G_REQUIRED_VALUE,
21102                                 p_token1        => G_COL_NAME_TOKEN,
21103                                 p_token1_value  => 'Payment Line Record');
21104             l_return_status := OKL_API.G_RET_STS_ERROR;
21105             IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21106               EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21107             END IF;
21108           END IF;
21109           IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21110             EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21111           END IF;
21112           lt_sll_date_tbl_type.DELETE;
21113           i := 0;
21114         END LOOP;
21115         IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21116           EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21117         END IF;
21118       END LOOP;
21119       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21120         RAISE OKL_API.G_EXCEPTION_ERROR;
21121       END IF;
21122     ELSIF l_paym_tbl.COUNT > 0 THEN
21123       i := l_paym_tbl.FIRST;
21124       LOOP
21125         IF (l_paym_tbl(i).START_DATE IS NULL OR
21126             l_paym_tbl(i).START_DATE = OKL_API.G_MISS_DATE) OR
21127            (l_paym_tbl(i).frequency IS NULL OR
21128             l_paym_tbl(i).frequency = OKL_API.G_MISS_CHAR) OR
21129            l_paym_tbl(i).frequency NOT IN ('A','S','Q','M') THEN
21130           OKL_API.set_message(p_app_name      => G_APP_NAME,
21131                               p_msg_name      => G_REQUIRED_VALUE,
21132                               p_token1        => G_COL_NAME_TOKEN,
21133                               p_token1_value  => 'Start date, Frequency');
21134           l_return_status := OKL_API.G_RET_STS_ERROR;
21135           EXIT WHEN (l_return_status = OKL_API.G_RET_STS_ERROR);
21136         END IF;
21137         IF l_paym_tbl(i).frequency = 'A' THEN
21138           l_freq := 12;
21139         ELSIF l_paym_tbl(i).frequency = 'S' THEN
21140           l_freq := 6;
21141         ELSIF l_paym_tbl(i).frequency = 'Q' THEN
21142           l_freq := 3;
21143         ELSIF l_paym_tbl(i).frequency = 'M' THEN
21144           l_freq := 1;
21145         END IF;
21146         IF (l_paym_tbl(i).stub_days IS NULL OR
21147             l_paym_tbl(i).stub_days = OKL_API.G_MISS_NUM) AND
21148            (l_paym_tbl(i).periods IS NOT NULL OR
21149             l_paym_tbl(i).periods <> OKL_API.G_MISS_NUM) THEN
21150           lt_sll_date_tbl_type(j).START_DATE := l_paym_tbl(i).START_DATE;
21151           lt_sll_date_tbl_type(j).end_date := ADD_MONTHS(l_paym_tbl(i).START_DATE,(l_paym_tbl(i).periods*l_freq))-1;
21152         ELSIF (l_paym_tbl(i).stub_days IS NOT NULL OR
21153                l_paym_tbl(i).stub_days <> OKL_API.G_MISS_NUM) AND
21154               (l_paym_tbl(i).periods IS NULL OR
21155                l_paym_tbl(i).periods = OKL_API.G_MISS_NUM) THEN
21156           lt_sll_date_tbl_type(j).START_DATE := l_paym_tbl(i).START_DATE;
21157           lt_sll_date_tbl_type(j).end_date := (l_paym_tbl(i).START_DATE+l_paym_tbl(i).stub_days)-1;
21158         ELSIF (l_paym_tbl(i).periods IS NULL OR
21159                l_paym_tbl(i).periods = OKL_API.G_MISS_NUM) AND
21160               (l_paym_tbl(i).stub_days IS NULL OR
21161                l_paym_tbl(i).stub_days = OKL_API.G_MISS_NUM) THEN
21162           OKL_API.set_message(p_app_name      => G_APP_NAME,
21163                               p_msg_name      => G_REQUIRED_VALUE,
21164                               p_token1        => G_COL_NAME_TOKEN,
21165                               p_token1_value  => 'Stub days, Periods');
21166           l_return_status := OKL_API.G_RET_STS_ERROR;
21167           EXIT WHEN (l_return_status = OKL_API.G_RET_STS_ERROR);
21168         END IF;
21169         j := j + 1;
21170         -- Collecting amount and rate info to validate further
21171         IF l_paym_tbl(i).amount IS NULL THEN
21172           ln_cnt_amt_null := ln_cnt_amt_null + 1;
21173         ELSIF l_paym_tbl(i).amount IS NOT NULL THEN
21174           ln_cnt_amt_not_null := ln_cnt_amt_not_null + 1;
21175         END IF;
21176         -- Collecting amount and rate info to validate further
21177         IF l_paym_tbl(i).rate IS NULL THEN
21178           ln_cnt_rte_null := ln_cnt_rte_null + 1;
21179         ELSIF l_paym_tbl(i).rate IS NOT NULL THEN
21180           ln_cnt_rte_not_null := ln_cnt_rte_not_null + 1;
21181         END IF;
21182         l_paym_tbl(i).arrears_yn := nvl(l_paym_tbl(i).arrears_yn,'Y');
21183         IF l_paym_tbl(i).arrears_yn IS NULL OR
21184           l_paym_tbl(i).arrears_yn = OKL_API.G_MISS_CHAR THEN
21185           l_return_status := OKL_API.G_RET_STS_ERROR;
21186           IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21187             OKL_API.set_message(p_app_name      => G_APP_NAME,
21188                                 p_msg_name      => G_INVALID_VALUE,
21189                                 p_token1        => G_COL_NAME_TOKEN,
21190                                 p_token1_value  => 'Arrear');
21191             EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21192           END IF;
21193         ELSIF (l_paym_tbl(i).arrears_yn IS NOT NULL OR
21194               l_paym_tbl(i).arrears_yn <> OKL_API.G_MISS_CHAR) AND
21195               l_paym_tbl(i).arrears_yn = 'N' THEN
21196           IF l_paym_tbl(i).STRUCTURE IS NULL OR
21197              l_paym_tbl(i).STRUCTURE = OKL_API.G_MISS_CHAR THEN
21198             l_return_status := OKL_API.G_RET_STS_ERROR;
21199             IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21200               OKL_API.set_message(p_app_name      => G_APP_NAME,
21201                                   p_msg_name      => G_INVALID_VALUE,
21202                                   p_token1        => G_COL_NAME_TOKEN,
21203                                   p_token1_value  => 'Structure');
21204               EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21205             END IF;
21206           END IF;
21207         END IF;
21208         EXIT WHEN (i = l_paym_tbl.LAST);
21209         i := l_paym_tbl.NEXT(i);
21210       END LOOP;
21211       IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21212         RAISE OKL_API.G_EXCEPTION_ERROR;
21213       END IF;
21214       -- Validating amounts and rates values
21215       IF ln_cnt_rte_not_null = l_paym_tbl.COUNT AND
21216          ln_cnt_amt_null < l_paym_tbl.COUNT AND
21217          ln_cnt_amt_null > 1 THEN
21218         OKL_API.set_message(p_app_name      => G_APP_NAME,
21219                             p_msg_name      => G_INVALID_VALUE,
21220                             p_token1        => G_COL_NAME_TOKEN,
21221                             p_token1_value  => 'payment amounts');
21222         RAISE OKL_API.G_EXCEPTION_ERROR;
21223       END IF;
21224       IF ln_cnt_amt_not_null = l_paym_tbl.COUNT THEN
21225         IF ln_cnt_rte_not_null < l_paym_tbl.COUNT AND
21226            ln_cnt_rte_not_null > 0 THEN
21227           OKL_API.set_message(p_app_name      => G_APP_NAME,
21228                               p_msg_name      => G_INVALID_VALUE,
21229                               p_token1        => G_COL_NAME_TOKEN,
21230                               p_token1_value  => 'payment rates');
21231           RAISE OKL_API.G_EXCEPTION_ERROR;
21232         END IF;
21233       END IF;
21234       IF ln_cnt_rte_null = l_paym_tbl.COUNT AND
21235          ln_cnt_amt_null = l_paym_tbl.COUNT THEN
21236         OKL_API.set_message(p_app_name      => G_APP_NAME,
21237                             p_msg_name      => G_REQUIRED_VALUE,
21238                             p_token1        => G_COL_NAME_TOKEN,
21239                             p_token1_value  => 'payment rate and payment amount');
21240         RAISE OKL_API.G_EXCEPTION_ERROR;
21241       END IF;
21242       IF ln_cnt_rte_not_null <> l_paym_tbl.COUNT AND
21243          ln_cnt_amt_not_null <> l_paym_tbl.COUNT THEN
21244         OKL_API.set_message(p_app_name      => G_APP_NAME,
21245                             p_msg_name      => G_INVALID_VALUE,
21246                             p_token1        => G_COL_NAME_TOKEN,
21247                             p_token1_value  => 'payment rates and payment amounts');
21248         RAISE OKL_API.G_EXCEPTION_ERROR;
21249       END IF;
21250       ln_cnt_amt_null := 0;
21251       ln_cnt_amt_not_null := 0;
21252       ln_cnt_rte_null := 0;
21253       ln_cnt_rte_not_null := 0;
21254       -- Validate dates either overlapping or having gap
21255       IF lt_sll_date_tbl_type.COUNT > 0 THEN
21256         IF lt_sll_date_tbl_type.LAST > 1 THEN
21257           FOR k IN lt_sll_date_tbl_type.FIRST..lt_sll_date_tbl_type.LAST LOOP
21258             EXIT WHEN(k = lt_sll_date_tbl_type.LAST);
21259             IF lt_sll_date_tbl_type(k+1).start_date >= lt_sll_date_tbl_type(k).start_date AND
21260                lt_sll_date_tbl_type(k+1).start_date <= lt_sll_date_tbl_type(k).end_date THEN
21261               OKL_API.set_message(p_app_name      => G_APP_NAME,
21262                                   p_msg_name      => G_PAYMENT_OVERLAP_ERROR);
21263               l_return_status := OKL_API.G_RET_STS_ERROR;
21264               IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21265                 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21266               END IF;
21267             ELSIF lt_sll_date_tbl_type(k+1).start_date > lt_sll_date_tbl_type(k).end_date + 1 THEN
21268               OKL_API.set_message(p_app_name      => G_APP_NAME,
21269                                 p_msg_name      => G_PAYMENT_GAP_ERROR);
21270               l_return_status := OKL_API.G_RET_STS_ERROR;
21271               IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21272                 EXIT WHEN(l_return_status <> OKL_API.G_RET_STS_SUCCESS);
21273               END IF;
21274             END IF;
21275           END LOOP;
21276         END IF;
21277       END IF;
21278     ELSE
21279       OKL_API.set_message(p_app_name      => G_APP_NAME,
21280                           p_msg_name      => G_REQUIRED_VALUE,
21281                           p_token1        => G_COL_NAME_TOKEN,
21282                           p_token1_value  => 'Payment Line Record');
21283       l_return_status := OKL_API.G_RET_STS_ERROR;
21284     END IF;
21285     IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21286       RAISE OKL_API.G_EXCEPTION_ERROR;
21287     END IF;
21288     x_return_status := l_return_status;
21289     OKL_API.END_ACTIVITY (x_msg_count,
21290                           x_msg_data );
21291   EXCEPTION
21292     WHEN OKL_API.G_EXCEPTION_ERROR THEN
21293       IF c_get_sll_lines_csr%ISOPEN THEN
21294         CLOSE c_get_sll_lines_csr;
21295       END IF;
21296       IF c_get_slh_lines_csr%ISOPEN THEN
21297         CLOSE c_get_slh_lines_csr;
21298       END IF;
21299       IF c_get_all_lines_csr%ISOPEN THEN
21300         CLOSE c_get_all_lines_csr;
21301       END IF;
21302       IF c_get_pay_psth_csr%ISOPEN THEN
21303         CLOSE c_get_pay_psth_csr;
21304       END IF;
21305       IF c_valid_khr_csr%ISOPEN THEN
21306         CLOSE c_valid_khr_csr;
21307       END IF;
21308       IF c_get_psth_csr%ISOPEN THEN
21309         CLOSE c_get_psth_csr;
21310       END IF;
21311       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
21312                                 l_api_name,
21313                                G_PKG_NAME,
21314                                'OKL_API.G_RET_STS_ERROR',
21315                                x_msg_count,
21316                                x_msg_data,
21317                                '_PVT');
21318     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
21319       IF c_get_sll_lines_csr%ISOPEN THEN
21320         CLOSE c_get_sll_lines_csr;
21321       END IF;
21322       IF c_get_slh_lines_csr%ISOPEN THEN
21323         CLOSE c_get_slh_lines_csr;
21324       END IF;
21325       IF c_get_all_lines_csr%ISOPEN THEN
21326         CLOSE c_get_all_lines_csr;
21327       END IF;
21328       IF c_get_pay_psth_csr%ISOPEN THEN
21329         CLOSE c_get_pay_psth_csr;
21330       END IF;
21331       IF c_valid_khr_csr%ISOPEN THEN
21332         CLOSE c_valid_khr_csr;
21333       END IF;
21334       IF c_get_psth_csr%ISOPEN THEN
21335         CLOSE c_get_psth_csr;
21336       END IF;
21337       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
21338                                 l_api_name,
21339                                 G_PKG_NAME,
21340                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
21341                                 x_msg_count,
21342                                 x_msg_data,
21343                                 '_PVT');
21344     WHEN OTHERS THEN
21345       IF c_get_sll_lines_csr%ISOPEN THEN
21346         CLOSE c_get_sll_lines_csr;
21347       END IF;
21348       IF c_get_slh_lines_csr%ISOPEN THEN
21349         CLOSE c_get_slh_lines_csr;
21350       END IF;
21351       IF c_get_all_lines_csr%ISOPEN THEN
21352         CLOSE c_get_all_lines_csr;
21353       END IF;
21354       IF c_get_pay_psth_csr%ISOPEN THEN
21355         CLOSE c_get_pay_psth_csr;
21356       END IF;
21357       IF c_valid_khr_csr%ISOPEN THEN
21358         CLOSE c_valid_khr_csr;
21359       END IF;
21360       IF c_get_psth_csr%ISOPEN THEN
21361         CLOSE c_get_psth_csr;
21362       END IF;
21363       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
21364                                 l_api_name,
21365                                 G_PKG_NAME,
21366                                 'OTHERS',
21367                                 x_msg_count,
21368                                 x_msg_data,
21369                                 '_PVT');
21370     END validate_payments;
21371 
21372 -------------------------------------------------------------------------------------------------
21373 -- Start of Commnets
21374 -- Badrinath Kuchibholta
21375 -- Procedure Name       : get_so_asset_oec1
21376 -- Description          : get_so_asset_oec1
21377 -- Business Rules       :
21378 -- Parameters           : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
21379 -- Version              :
21380 -- End of Commnets
21381 -------------------------------------------------------------------------------------------------
21382   PROCEDURE get_so_asset_oec1(p_khr_id        IN NUMBER,
21383                              p_kle_id        IN NUMBER,
21384                              p_subside_yn    IN VARCHAR2,
21385                              x_return_status OUT NOCOPY VARCHAR2,
21386                              x_asset_oec     OUT NOCOPY NUMBER,
21387                              x_start_date    OUT NOCOPY DATE)
21388   IS
21389     l_return_status           VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
21390     l_msg_count               NUMBER;
21391     l_msg_data                VARCHAR2(32767);
21392     G_FORMULA_DIS             OKL_FORMULAE_V.NAME%TYPE := 'LINE_DISCOUNT';
21393     G_AMT_TOKEN     CONSTANT  VARCHAR2(200) := 'AMOUNT';
21394     G_CALC_AMOUNT   CONSTANT  VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
21395     l_api_version             NUMBER := 0;
21396     l_dis_amt                 NUMBER := 0;
21397     l_tot_oec_amt             NUMBER := 0;
21398     CURSOR get_oec_csr (p_khr_id      NUMBER,
21399                         p_kle_id      NUMBER)
21400     IS
21401     SELECT kle_rv.id asset_line_id,
21402            kle_rv.oec oec,
21403            cle_so.START_DATE
21404     FROM okc_k_headers_b chr_rv,
21405          okc_line_styles_b lse_rv,
21406          okl_k_lines kle_rv,
21407          okc_k_lines_b cle_rv,
21408          okc_rules_b rul_rv,
21409          okc_rule_groups_b rgp_rv,
21410          okc_line_styles_b lse_so,
21411          okc_k_lines_b cle_so,
21412          okc_rules_b rul_so,
21413          okc_rule_groups_b rgp_so
21414     WHERE rgp_so.cle_id = p_kle_id
21415     AND rgp_so.dnz_chr_id = p_khr_id
21416     AND rgp_so.rgd_code = 'SOPYSC'
21417     AND rgp_so.dnz_chr_id = rul_so.dnz_chr_id
21418     AND rgp_so.id = rul_so.rgp_id
21419     AND rul_so.rule_information_category = 'SOPMSC'
21420     AND rgp_so.cle_id = cle_so.id
21421     AND cle_so.dnz_chr_id = rul_so.dnz_chr_id
21422     AND cle_so.lse_id = lse_so.id
21423     AND lse_so.lty_code = 'SO_PAYMENT'
21424     AND rul_rv.object1_id1 = to_char(rul_so.id)
21425     AND rul_rv.dnz_chr_id = rul_so.dnz_chr_id
21426     AND rul_rv.rgp_id = rgp_rv.id
21427     AND rgp_rv.rgd_code = 'SOPSAD'
21428     AND rgp_rv.dnz_chr_id = rul_so.dnz_chr_id
21429     AND rgp_rv.cle_id = cle_rv.id
21430     AND cle_rv.lse_id = lse_rv.id
21431     AND lse_rv.lty_code = 'FREE_FORM1'
21432     AND rgp_rv.dnz_chr_id = chr_rv.id
21433     AND chr_rv.START_DATE = cle_rv.START_DATE
21434     AND cle_rv.id = kle_rv.id;
21435   BEGIN
21436     IF p_subside_yn NOT IN ('Y','N') THEN
21437       OKL_API.set_message(p_app_name      => G_APP_NAME,
21438                           p_msg_name      => G_INVALID_VALUE,
21439                           p_token1        => G_COL_NAME_TOKEN,
21440                           p_token1_value  => 'p_subside_yn');
21441       RAISE OKL_API.G_EXCEPTION_ERROR;
21442     END IF;
21443     FOR get_oec_rec IN get_oec_csr(p_khr_id => p_khr_id,
21444                                    p_kle_id => p_kle_id) LOOP
21445       IF p_subside_yn = 'Y' THEN
21446         execute_formula(p_api_version   => l_api_version,
21447                         p_init_msg_list => OKL_API.G_TRUE,
21448                         x_return_status => l_return_status,
21449                         x_msg_count     => l_msg_count,
21450                         x_msg_data      => l_msg_data,
21451                         p_formula_name  => G_FORMULA_DIS,
21452                         p_contract_id   => p_khr_id,
21453                         p_line_id       => get_oec_rec.asset_line_id,
21454                         x_value         => l_dis_amt);
21455         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21456           OKL_API.set_message(p_app_name     => G_APP_NAME,
21457                               p_msg_name     => G_CALC_AMOUNT);
21458           EXIT WHEN(l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
21459         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
21460           OKL_API.set_message(p_app_name     => G_APP_NAME,
21461                               p_msg_name     => G_CALC_AMOUNT);
21462           EXIT WHEN(l_return_status = OKL_API.G_RET_STS_ERROR);
21463         END IF;
21464         l_tot_oec_amt := l_tot_oec_amt + (get_oec_rec.oec - nvl(l_dis_amt,0));
21465       ELSE
21466         l_tot_oec_amt := l_tot_oec_amt + get_oec_rec.oec;
21467       END IF;
21468       x_start_date := get_oec_rec.START_DATE;
21469     END LOOP;
21470     IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21471       RAISE OKL_API.G_EXCEPTION_ERROR;
21472     END IF;
21473     x_asset_oec := l_tot_oec_amt;
21474     IF NVL(x_asset_oec,0) = 0 THEN
21475       OKL_API.set_message(p_app_name      => G_APP_NAME,
21476                           p_msg_name      => G_CALC_AMOUNT);
21477       RAISE OKL_API.G_EXCEPTION_ERROR;
21478     END IF;
21479     x_return_status := l_return_status;
21480   EXCEPTION
21481     WHEN OKL_API.G_EXCEPTION_ERROR THEN
21482       IF get_oec_csr%ISOPEN THEN
21483         CLOSE get_oec_csr;
21484       END IF;
21485       x_return_status := OKL_API.G_RET_STS_ERROR;
21486     WHEN OTHERS THEN
21487       IF get_oec_csr%ISOPEN THEN
21488         CLOSE get_oec_csr;
21489       END IF;
21490       x_return_status := OKL_API.G_RET_STS_ERROR;
21491   END get_so_asset_oec1;
21492 -------------------------------------------------------------------------------------------------
21493 -- Start of Commnets
21494 -- Badrinath Kuchibholta
21495 -- Procedure Name       : get_so_residual_value1
21496 -- Description          : get_so_residual_value1
21497 -- Business Rules       :
21498 -- Parameters           : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
21499 -- Version              :
21500 -- End of Commnets
21501 -------------------------------------------------------------------------------------------------
21502   PROCEDURE get_so_residual_value1(p_khr_id         IN NUMBER,
21503                                   p_kle_id         IN NUMBER,
21504                                   p_subside_yn     IN VARCHAR2,
21505                                   x_return_status  OUT NOCOPY VARCHAR2,
21506                                   x_residual_value OUT NOCOPY NUMBER,
21507                                   x_start_date     OUT NOCOPY DATE)
21508   IS
21509     l_return_status           VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
21510     l_msg_count               NUMBER;
21511     l_msg_data                VARCHAR2(32767);
21512     G_FORMULA_DIS             OKL_FORMULAE_V.NAME%TYPE := 'LINE_DISCOUNT';
21513     G_AMT_TOKEN     CONSTANT  VARCHAR2(200) := 'AMOUNT';
21514     G_CALC_AMOUNT   CONSTANT  VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
21515     l_api_version             NUMBER := 0;
21516     l_dis_amt                 NUMBER := 0;
21517     l_res_val                 NUMBER := 0;
21518     l_tot_res_val             NUMBER := 0;
21519 --start changed by abhsaxen for Bug#6174484
21520     CURSOR get_rvs_csr (p_khr_id     NUMBER,
21521                         p_kle_id     NUMBER)
21522     IS
21523 	SELECT kle_rv.id asset_line_id,
21524 	  kle_rv.oec oec,
21525 	  kle_rv.residual_percentage residual_percent,
21526 	  cle_so.start_date
21527 	FROM okc_k_headers_b chr_rv,
21528 	  okc_line_styles_b lse_rv,
21529 	  okl_k_lines kle_rv,
21530 	  okc_k_lines_b cle_rv,
21531 	  okc_rules_b rul_rv,
21532 	  okc_rule_groups_b rgp_rv,
21533 	  okc_line_styles_b lse_so,
21534 	  okc_k_lines_b cle_so,
21535 	  okc_rules_b rul_so,
21536 	  okc_rule_groups_b rgp_so
21537 	WHERE rgp_so.cle_id = p_kle_id
21538 	 AND rgp_so.dnz_chr_id = p_khr_id
21539 	 AND rgp_so.rgd_code = 'SOPYSC'
21540 	 AND rgp_so.dnz_chr_id = rul_so.dnz_chr_id
21541 	 AND rgp_so.id = rul_so.rgp_id
21542 	 AND rul_so.rule_information_category = 'SOPMSC'
21543 	 AND rgp_so.cle_id = cle_so.id
21544 	 AND cle_so.dnz_chr_id = rul_so.dnz_chr_id
21545 	 AND cle_so.lse_id = lse_so.id
21546 	 AND lse_so.lty_code = 'SO_PAYMENT'
21547 	 AND rul_rv.object1_id1 = to_char(rul_so.id)
21548 	 AND rul_rv.dnz_chr_id = rul_so.dnz_chr_id
21549 	 AND rul_rv.rgp_id = rgp_rv.id
21550 	 AND rgp_rv.rgd_code = 'SOPSAD'
21551 	 AND rgp_rv.dnz_chr_id = cle_rv.dnz_chr_id
21552 	 AND rgp_rv.cle_id = cle_rv.id
21553 	 AND cle_rv.lse_id = lse_rv.id
21554 	 AND lse_rv.lty_code = 'FREE_FORM1'
21555 	 AND rgp_rv.dnz_chr_id = chr_rv.id
21556 	 AND chr_rv.start_date = cle_rv.start_date
21557 	 AND cle_rv.id = kle_rv.id;
21558 --end changed by abhsaxen for Bug#6174484
21559   BEGIN
21560     IF p_subside_yn NOT IN ('Y','N') THEN
21561       OKL_API.set_message(p_app_name      => G_APP_NAME,
21562                           p_msg_name      => G_INVALID_VALUE,
21563                           p_token1        => G_COL_NAME_TOKEN,
21564                           p_token1_value  => 'p_subside_yn');
21565       RAISE OKL_API.G_EXCEPTION_ERROR;
21566     END IF;
21567 
21568     FOR get_rvs_rec IN get_rvs_csr(p_khr_id => p_khr_id,
21569                                    p_kle_id => p_kle_id) LOOP
21570       IF p_subside_yn = 'Y' THEN
21571         execute_formula(p_api_version   => l_api_version,
21572                         p_init_msg_list => OKL_API.G_TRUE,
21573                         x_return_status => l_return_status,
21574                         x_msg_count     => l_msg_count,
21575                         x_msg_data      => l_msg_data,
21576                         p_formula_name  => G_FORMULA_DIS,
21577                         p_contract_id   => p_khr_id,
21578                         p_line_id       => get_rvs_rec.asset_line_id,
21579                         x_value         => l_dis_amt);
21580         IF (l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
21581           OKL_API.set_message(p_app_name     => G_APP_NAME,
21582                               p_msg_name     => G_CALC_AMOUNT);
21583           EXIT WHEN(l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
21584         ELSIF (l_return_status = OKL_API.G_RET_STS_ERROR) THEN
21585           OKL_API.set_message(p_app_name     => G_APP_NAME,
21586                               p_msg_name     => G_CALC_AMOUNT);
21587           EXIT WHEN(l_return_status = OKL_API.G_RET_STS_ERROR);
21588         END IF;
21589         IF get_rvs_rec.residual_percent IS NOT NULL THEN
21590           l_res_val := get_rvs_rec.residual_percent * (get_rvs_rec.oec - nvl(l_dis_amt,0)) /100;
21591           l_tot_res_val := l_tot_res_val + l_res_val;
21592         ELSE
21593           l_tot_res_val := 0;
21594           EXIT;
21595         END IF;
21596       ELSE
21597         IF get_rvs_rec.residual_percent IS NOT NULL THEN
21598           l_res_val := get_rvs_rec.residual_percent * get_rvs_rec.oec /100;
21599           l_tot_res_val := l_tot_res_val + l_res_val;
21600         ELSE
21601           l_tot_res_val := 0;
21602           EXIT;
21603         END IF;
21604       END IF;
21605       x_start_date := get_rvs_rec.START_DATE;
21606     END LOOP;
21607     IF l_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
21608       RAISE OKL_API.G_EXCEPTION_ERROR;
21609     END IF;
21610     x_residual_value := l_tot_res_val;
21611     IF (x_residual_value IS NULL) THEN -- bug# 3381546.
21612       OKL_API.set_message(p_app_name      => G_APP_NAME,
21613                           p_msg_name      => G_INVALID_VALUE,
21614                           p_token1        => G_COL_NAME_TOKEN,
21615                           p_token1_value  => 'Residual Value');
21616       RAISE OKL_API.G_EXCEPTION_ERROR;
21617     END IF;
21618     x_return_status := l_return_status;
21619   EXCEPTION
21620     WHEN OKL_API.G_EXCEPTION_ERROR THEN
21621       IF get_rvs_csr%ISOPEN THEN
21622         CLOSE get_rvs_csr;
21623       END IF;
21624       x_return_status := OKL_API.G_RET_STS_ERROR;
21625     WHEN OTHERS THEN
21626       IF get_rvs_csr%ISOPEN THEN
21627         CLOSE get_rvs_csr;
21628       END IF;
21629       x_return_status := OKL_API.G_RET_STS_ERROR;
21630   END get_so_residual_value1;
21631 
21632 -------------------------------------------------------------------------------------------------
21633 -- Start of Commnets
21634 -- Santhosh Siruvole
21635 -- Procedure Name       : get_so_asset_oec
21636 -- Description          : get_so_asset_oec
21637 -- Business Rules       :
21638 -- Parameters           : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
21639 -- Version              :
21640 -- End of Commnets
21641 -------------------------------------------------------------------------------------------------
21642   PROCEDURE get_so_residual_value(p_khr_id         IN NUMBER,
21643                                   p_kle_id         IN NUMBER,
21644                                   p_subside_yn     IN VARCHAR2,
21645                                   x_return_status  OUT NOCOPY VARCHAR2,
21646                                   x_residual_value OUT NOCOPY NUMBER,
21647                                   x_start_date     OUT NOCOPY DATE)
21648   IS
21649     l_return_status           VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
21650     l_msg_count               NUMBER;
21651     l_msg_data                VARCHAR2(32767);
21652     G_FORMULA_DIS             OKL_FORMULAE_V.NAME%TYPE := 'LINE_CAP_AMNT';
21653     G_AMT_TOKEN     CONSTANT  VARCHAR2(200) := 'AMOUNT';
21654     G_CALC_AMOUNT   CONSTANT  VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
21655     l_api_version             NUMBER := 0;
21656 
21657     Cursor khr_type_csr IS
21658     Select SCS_CODE,
21659            START_DATE
21660     From   okc_K_headers_b chr
21661     Where  chr.id = p_khr_id;
21662 
21663     khr_type_rec khr_type_csr%ROWTYPE;
21664 
21665   Begin
21666 
21667    OPEN khr_type_csr;
21668    FETCH khr_type_csr INTO khr_type_rec;
21669    CLOSE khr_type_csr;
21670 
21671    IF (INSTR( khr_type_rec.scs_code, 'LEASE') > 0) THEN
21672       execute_formula(p_api_version   => 1.0,
21673                       p_init_msg_list => OKL_API.G_TRUE,
21674                       x_return_status => l_return_status,
21675                       x_msg_count     => l_msg_count,
21676                       x_msg_data      => l_msg_data,
21677                       p_formula_name  => 'LINE_RESIDUAL_VALUE',
21678                       p_contract_id   => p_khr_id,
21679                       p_line_id       => p_kle_id,
21680                       x_value         => x_residual_value);
21681       IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
21682         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21683       ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
21684         RAISE  OKL_API.G_EXCEPTION_ERROR;
21685       END IF;
21686 
21687       x_start_date := khr_type_rec.start_date;
21688 
21689    Else
21690 
21691       get_so_residual_value1(p_khr_id        => p_khr_id,
21692                             p_kle_id         => p_kle_id,
21693                             p_subside_yn     => p_subside_yn,
21694                             x_return_status  => x_return_status,
21695                             x_residual_value => x_residual_value,
21696                             x_start_date     => x_start_date);
21697 
21698    End If;
21699 
21700   EXCEPTION
21701     WHEN OKL_API.G_EXCEPTION_ERROR THEN
21702       IF khr_type_csr%ISOPEN THEN
21703         CLOSE khr_type_csr;
21704       END IF;
21705       x_return_status := OKL_API.G_RET_STS_ERROR;
21706     WHEN OTHERS THEN
21707       IF khr_type_csr%ISOPEN THEN
21708         CLOSE khr_type_csr;
21709       END IF;
21710       x_return_status := OKL_API.G_RET_STS_ERROR;
21711 
21712   End get_so_residual_value;
21713 
21714 -------------------------------------------------------------------------------------------------
21715 -- Start of Commnets
21716 -- Santhosh Siruvole
21717 -- Procedure Name       : get_so_asset_oec
21718 -- Description          : get_so_asset_oec
21719 -- Business Rules       :
21720 -- Parameters           : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
21721 -- Version              :
21722 -- End of Commnets
21723 -------------------------------------------------------------------------------------------------
21724   PROCEDURE get_so_asset_oec(p_khr_id        IN NUMBER,
21725                              p_kle_id        IN NUMBER,
21726                              p_subside_yn    IN VARCHAR2,
21727                              x_return_status OUT NOCOPY VARCHAR2,
21728                              x_asset_oec     OUT NOCOPY NUMBER,
21729                              x_start_date    OUT NOCOPY DATE)
21730   IS
21731     l_return_status           VARCHAR2(3):= OKL_API.G_RET_STS_SUCCESS;
21732     l_msg_count               NUMBER;
21733     l_msg_data                VARCHAR2(32767);
21734     G_FORMULA_DIS             OKL_FORMULAE_V.NAME%TYPE := 'LINE_CAP_AMNT';
21735     G_AMT_TOKEN     CONSTANT  VARCHAR2(200) := 'AMOUNT';
21736     G_CALC_AMOUNT   CONSTANT  VARCHAR2(200) := 'OKL_SEC_INVALID_INV_AMOUNT';
21737     l_api_version             NUMBER := 0;
21738 
21739     Cursor khr_type_csr IS
21740     Select SCS_CODE,
21741            START_DATE
21742     From   okc_K_headers_b chr
21743     Where  chr.id = p_khr_id;
21744 
21745     khr_type_rec khr_type_csr%ROWTYPE;
21746 
21747   Begin
21748 
21749    OPEN khr_type_csr;
21750    FETCH khr_type_csr INTO khr_type_rec;
21751    CLOSE khr_type_csr;
21752 
21753    IF (INSTR( khr_type_rec.scs_code, 'LEASE') > 0) THEN
21754       execute_formula(p_api_version   => 1.0,
21755                       p_init_msg_list => OKL_API.G_TRUE,
21756                       x_return_status => l_return_status,
21757                       x_msg_count     => l_msg_count,
21758                       x_msg_data      => l_msg_data,
21759                       p_formula_name  => 'LINE_CAP_AMNT',
21760                       p_contract_id   => p_khr_id,
21761                       p_line_id       => p_kle_id,
21762                       x_value         => x_asset_oec);
21763       IF l_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
21764         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
21765       ELSIF l_return_status = OKL_API.G_RET_STS_ERROR THEN
21766         RAISE  OKL_API.G_EXCEPTION_ERROR;
21767       END IF;
21768 
21769       x_start_date := khr_type_rec.start_date;
21770 
21771    Else
21772 
21773        get_so_asset_oec1(p_khr_id        => p_khr_id,
21774                          p_kle_id        => p_kle_id,
21775                          p_subside_yn    => p_subside_yn,
21776                          x_return_status => x_return_status,
21777                          x_asset_oec     => x_asset_oec,
21778                          x_start_date    => x_start_date);
21779 
21780    End If;
21781 
21782   EXCEPTION
21783     WHEN OKL_API.G_EXCEPTION_ERROR THEN
21784       IF khr_type_csr%ISOPEN THEN
21785         CLOSE khr_type_csr;
21786       END IF;
21787       x_return_status := OKL_API.G_RET_STS_ERROR;
21788     WHEN OTHERS THEN
21789       IF khr_type_csr%ISOPEN THEN
21790         CLOSE khr_type_csr;
21791       END IF;
21792       x_return_status := OKL_API.G_RET_STS_ERROR;
21793 
21794   End get_so_asset_oec;
21795 
21796 -------------------------------------------------------------------------------------------------
21797 -- Start of Commnets
21798 -- Badrinath Kuchibholta
21799 -- Procedure Name       : extract_params_so
21800 -- Description          : extract_params_so
21801 -- Business Rules       :
21802 -- Parameters           : Standard Parameters with p_khr_id, p_kle_id and p_subside_yn
21803 -- Version              :
21804 -- End of Commnets
21805 -------------------------------------------------------------------------------------------------
21806   PROCEDURE extract_params_so(
21807             p_api_version                IN  NUMBER,
21808             p_init_msg_list              IN  VARCHAR2 DEFAULT OKL_API.G_FALSE,
21809             p_chr_id                     IN  OKC_K_HEADERS_B.ID%TYPE,
21810             p_cle_id                     IN  OKC_K_LINES_B.ID%TYPE,
21811             x_return_status              OUT NOCOPY VARCHAR2,
21812             x_msg_count                  OUT NOCOPY NUMBER,
21813             x_msg_data                   OUT NOCOPY VARCHAR2,
21814             x_csm_lease_header           OUT NOCOPY okl_create_streams_pub.csm_lease_rec_type,
21815             x_csm_one_off_fee_tbl        OUT NOCOPY okl_create_streams_pub.csm_one_off_fee_tbl_type,
21816             x_csm_periodic_expenses_tbl  OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
21817             x_csm_yields_tbl             OUT NOCOPY okl_create_streams_pub.csm_yields_tbl_type,
21818             x_req_stream_types_tbl       OUT NOCOPY okl_create_streams_pub.csm_stream_types_tbl_type,
21819             x_csm_line_details_tbl       OUT NOCOPY okl_create_streams_pub.csm_line_details_tbl_type,
21820             x_rents_tbl                  OUT NOCOPY okl_create_streams_pub.csm_periodic_expenses_tbl_type,
21821             x_csm_loan_header            OUT NOCOPY okl_create_streams_pvt.csm_loan_rec_type,
21822             x_csm_loan_lines_tbl         OUT NOCOPY okl_create_streams_pvt.csm_loan_line_tbl_type,
21823             x_csm_loan_levels_tbl        OUT NOCOPY okl_create_streams_pvt.csm_loan_level_tbl_type)
21824   IS
21825     l_api_name               CONSTANT VARCHAR2(30) := 'EXTRACT_PARAMS_SO';
21826     lv_fed_only                       VARCHAR2(3) := 'N';
21827     ln_value                          NUMBER := 0;
21828 -- Start of BAKUCHIB modification bug#3121708
21829     ln_diff_days                      NUMBER := 0;
21830     ld_last_start_date                okc_k_headers_b.start_date%TYPE;
21831     ld_last_end_date                  okc_k_headers_b.start_date%TYPE;
21832     ld_chr_end_date                   okc_k_headers_b.end_date%TYPE;
21833 -- End of BAKUCHIB modification bug#3121708
21834     lv_fed_only_tax_book              OKL_TXD_ASSETS_B.TAX_BOOK%TYPE := NULL;
21835     ln_org_id                         okc_k_headers_b.authoring_org_id%TYPE;
21836     lv_currency_code                  okc_k_headers_b.currency_code%TYPE;
21837     l_rnd_basis_percent               NUMBER;
21838     l_level_type                      NUMBER;
21839     l_strm_name                       VARCHAR2(200);
21840     ln_fin_yn                         NUMBER := 0;
21841     i                                 BINARY_INTEGER := 0;
21842     j                                 BINARY_INTEGER := 0;
21843     k                                 BINARY_INTEGER := 0;
21844     l                                 BINARY_INTEGER := 0;
21845     m                                 BINARY_INTEGER := 0;
21846     idx                               BINARY_INTEGER := 0;
21847     l_basis_percent                   NUMBER;
21848     styid                             NUMBER;
21849 	--l_sty_id                          NUMBER;
21850     l_sty_id                          strm_rec_type;
21851     l_salvage                         NUMBER;
21852     l_purchase_option                 VARCHAR2(256);
21853     l_deal_type                       VARCHAR2(256) := NULL;
21854     l_purchase_option_amount          NUMBER;
21855     l_value                           OKL_K_LINES.CAPITAL_AMOUNT%TYPE;
21856     ld_asset_start_date               DATE;
21857     l_tot_asset_oec                   NUMBER := 0;
21858     l_asset_oec                       NUMBER := 0;
21859     l_cap_fee_amt                     NUMBER := 0;
21860     l_total_lending                   NUMBER := 0;
21861     l_lending                         NUMBER := 0;
21862     l_lne_tot_lend                    NUMBER := 0;
21863     l_tradein                         OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
21864     l_capreduc                        OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
21865     l_feecap                          OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
21866     l_capint                          OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
21867     l_discount                        OKL_K_LINES.CAPITAL_AMOUNT%TYPE := 0;
21868     l_corp_dep_cost                   OKL_TXL_ASSETS_B.DEPRECIATION_COST%TYPE := 0;
21869     l_tax_dep_cost                    OKL_TXD_ASSETS_B.COST%TYPE := 0;
21870     l_lease_tax_owner                 okc_rules_b.rule_information1%TYPE := NULL;
21871     -- get the Contract Header info
21872     CURSOR l_hdr_csr(chrId  NUMBER)
21873     IS
21874     SELECT chr.orig_system_source_code,
21875            chr.start_date,
21876            chr.end_date,
21877            chr.template_yn,
21878            chr.authoring_org_id,
21879            chr.inv_organization_id,
21880            khr.deal_type,
21881            pdt.id  pid,
21882            NVL(pdt.reporting_pdt_id, -1) report_pdt_id,
21883            chr.currency_code currency_code,
21884            khr.term_duration term
21885     FROM okc_k_headers_v chr,
21886          okl_k_headers khr,
21887          okl_products_v pdt
21888     WHERE khr.id = chr.id
21889     AND chr.id = chrId
21890     AND khr.pdt_id = pdt.id(+);
21891     -- get the Header rule information
21892     CURSOR l_hdrrl_csr(rgcode okc_rule_groups_b.rgd_code%TYPE,
21893                        rlcat  okc_rules_b.rule_information_category%TYPE,
21894                        chrId NUMBER)
21895     IS
21896     SELECT crl.object1_id1,
21897            crl.rule_information1,
21898            crl.rule_information2,
21899            crl.rule_information3,
21900            crl.rule_information4,
21901            crl.rule_information5,
21902            crl.rule_information6,
21903            crl.rule_information10,
21904            crl.rule_information13,
21905            crl.rule_information11
21906     FROM okc_rule_groups_b crg,
21907          okc_rules_b crl
21908     WHERE crl.rgp_id = crg.id
21909     AND crg.rgd_code = rgcode
21910     AND crl.rule_information_category = rlcat
21911     AND crg.dnz_chr_id = chrId;
21912     -- get the install based location
21913     CURSOR ib_csr (chrId NUMBER)
21914     IS
21915     SELECT DISTINCT hl.country country
21916     FROM hz_locations hl,
21917          hz_party_sites hps,
21918          hz_party_site_uses hpsu,
21919          okl_txl_itm_insts iti,
21920          okc_line_styles_b lse_ib,
21921          okc_k_lines_b cle_ib
21922     WHERE cle_ib.dnz_chr_id = chrId
21923     AND cle_ib.lse_id = lse_ib.id
21924     AND lse_ib.lty_code = 'INST_ITEM'
21925     AND iti.kle_id = cle_ib.id
21926     AND iti.object_id1_new = hpsu.party_site_use_id
21927     AND iti.object_id2_new = '#'
21928     AND hpsu.party_site_id = hps.party_site_id
21929     AND hps.location_id = hl.location_id;
21930     -- get the Contract line info
21931     CURSOR l_line_rec_csr(chrid NUMBER, lnetype VARCHAR2)
21932     IS
21933     SELECT kle.id,
21934            kle.oec,
21935            kle.residual_code,
21936            kle.capital_amount,
21937            kle.delivered_date,
21938            kle.date_funding_required,
21939            kle.residual_grnty_amount,
21940            kle.residual_code guarantee_type,
21941            kle.date_funding,
21942            kle.residual_value,
21943            kle.amount,
21944            kle.price_negotiated,
21945            kle.start_date,
21946            kle.end_date,
21947            kle.orig_system_id1,
21948            kle.fee_type,
21949            kle.initial_direct_cost,
21950            tl.item_description,
21951            tl.name
21952     FROM okl_k_lines_full_v kle,
21953          okc_line_styles_b lse,
21954          okc_k_lines_tl tl,
21955          okc_statuses_b sts
21956     WHERE kle.lse_id = lse.id
21957     AND lse.lty_code = lnetype
21958     AND tl.id = kle.id
21959     AND tl.language = userenv('LANG')
21960     AND kle.dnz_chr_id = chrid
21961     AND sts.code = kle.sts_code
21962 --Start of bug#3121708 modification BAKUCHIB
21963     AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
21964 --End of bug#3121708 modification BAKUCHIB
21965 
21966     -- get the Contract line info
21967     CURSOR l_so_line_rec_csr(p_chr_id NUMBER, p_cle_id NUMBER)
21968     IS
21969     SELECT kle.id,
21970            kle.oec,
21971            kle.residual_code,
21972            kle.capital_amount,
21973            kle.delivered_date,
21974            kle.date_funding_required,
21975            kle.residual_grnty_amount,
21976            kle.date_funding,
21977            kle.residual_value,
21978            kle.amount,
21979            kle.price_negotiated,
21980            kle.start_date,
21981            kle.end_date,
21982            kle.orig_system_id1,
21983            kle.fee_type,
21984            kle.initial_direct_cost,
21985            tl.item_description,
21986            tl.name
21987     FROM okl_k_lines_full_v kle,
21988          okc_line_styles_b lse,
21989          okc_k_lines_tl tl,
21990          okc_statuses_b sts
21991     WHERE kle.lse_id = lse.id
21992     AND lse.lty_code = 'SO_PAYMENT'
21993     AND kle.id = p_cle_id
21994     AND tl.id = kle.id
21995     AND tl.language = userenv('LANG')
21996     AND kle.dnz_chr_id = p_chr_id
21997     AND sts.code = kle.sts_code
21998 --Start of bug#3121708 modification BAKUCHIB
21999     AND sts.ste_code not in ('HOLD', 'EXPIRED', 'CANCELLED');
22000 --End of bug#3121708 modification BAKUCHIB
22001 
22002     -- get the txl transaction information
22003     CURSOR l_tx_csr(ass VARCHAR2)
22004     IS
22005     SELECT txl.life_in_months,
22006            txl.corporate_book,
22007            txl.deprn_method,
22008            txl.in_service_date,
22009            txl.salvage_value,
22010            txl.percent_salvage_value,
22011            txl.depreciation_cost,
22012            mth.id1,
22013            ct.prorate_convention_code
22014     FROM okl_txl_assets_b txl,
22015          okx_asst_dep_methods_v mth,
22016          okx_ast_ct_bk_dfs_v ct
22017     WHERE mth.method_code = txl.deprn_method
22018     AND mth.life_in_months = txl.life_in_months
22019     AND ct.category_id = txl.depreciation_id
22020     AND ct.book_type_code = txl.corporate_book
22021     AND txl.asset_number = ass
22022 -- Start of Bug#3388812 Modification - BAKUCHIB
22023     AND txl.in_service_date BETWEEN ct.start_dpis AND NVL(ct.end_dpis,txl.in_service_date);
22024 -- End of Bug#3388812  Modification - BAKUCHIB
22025     -- get the txd transaction information
22026     CURSOR l_txd_csr(ass VARCHAR2)
22027     IS
22028     SELECT txd.cost,
22029            txd.deprn_method_tax,
22030            txd.life_in_months_tax,
22031            txd.salvage_value,
22032            txd.tax_book,
22033            mth.id1
22034     FROM okl_txd_assets_v txd,
22035          okx_asst_dep_methods_v mth
22036     WHERE mth.method_code = txd.deprn_method_tax
22037     AND mth.life_in_months = txd.life_in_months_tax
22038     AND txd.asset_number = ass;
22039     -- get the setup values for tax book and coporate book
22040     CURSOR l_txtrans_csr (Book  Varchar2)
22041     IS
22042     SELECT trns.value,
22043            books.book_type_code
22044     FROM okl_sgn_translations trns,
22045          fa_book_controls books
22046     WHERE trns.jtot_object1_code = 'FA_BOOK_CONTROLS'
22047     AND trns.object1_id1 = books.book_type_code
22048     AND trns.sgn_code = 'STMP'
22049     AND books.book_type_code = Book;
22050     -- Get the stream type id
22051     CURSOR l_strmid_csr (strmName VARCHAR2)
22052     IS
22053     SELECT id styid
22054     FROM okl_strm_type_tl
22055     WHERE LANGUAGE = 'US'
22056     AND NAME = strmName;
22057     -- get Stream name
22058     CURSOR strm_name_csr (styid NUMBER)
22059     IS
22060     SELECT tl.name name,
22061            stm.stream_type_class stream_type_class,
22062 		   stm.stream_type_purpose,
22063            tl.description alloc_basis,
22064            stm.capitalize_yn capitalize_yn,
22065            stm.periodic_yn  periodic_yn
22066     FROM okl_strm_type_b stm,
22067          okl_strm_type_tl tl
22068     WHERE tl.id = stm.id
22069     AND tl.language = 'US'
22070     AND stm.id = styid;
22071     -- get the LASLH self referencing Line based rule information
22072     CURSOR l_rl_csr1(rgcode okc_rule_groups_b.rgd_code%TYPE,
22073                      rlcat  okc_rules_b.rule_information_category%TYPE,
22074                      chrId  NUMBER,
22075                      cleId  NUMBER )
22076     IS
22077     SELECT crl.id slh_id,
22078            crl.object1_id1,
22079            crl.rule_information1,
22080            crl.rule_information2,
22081            crl.rule_information3,
22082            crl.rule_information5,
22083            crl.rule_information6,
22084            crl.rule_information7,
22085            crl.rule_information8,
22086            crl.rule_information13,
22087            crl.rule_information10
22088     FROM okc_rule_groups_b crg,
22089          okc_rules_b crl
22090     WHERE crl.rgp_id = crg.id
22091     AND crg.rgd_code = rgcode
22092     AND crl.rule_information_category = rlcat
22093     AND crg.dnz_chr_id = chrId
22094     AND crg.cle_id = cleId
22095     ORDER BY crl.rule_information1;
22096     -- get the LASLL self referencing Line based rule information
22097     CURSOR l_rl_csr(rlgpId NUMBER,
22098                     rgcode okc_rule_groups_b.rgd_code%TYPE,
22099                     rlcat  okc_rules_b.rule_information_category%TYPE,
22100                     chrId  NUMBER,
22101                     cleId  NUMBER )
22102     IS
22103     SELECT crl.object1_id1,
22104            crl.rule_information1,
22105            crl.rule_information2,
22106            crl.rule_information3,
22107            crl.rule_information5,
22108            crl.rule_information6,
22109            crl.rule_information7,
22110            crl.rule_information8,
22111            crl.rule_information13,
22112            crl.rule_information10
22113     FROM okc_rule_groups_b crg,
22114          okc_rules_b crl
22115     WHERE crl.rgp_id = crg.id
22116     AND crl.object2_id1 = rlgpId
22117     AND crg.rgd_code = rgcode
22118     AND crl.rule_information_category = rlcat
22119     AND crg.dnz_chr_id = chrId
22120     AND crg.cle_id = cleId
22121     ORDER BY FND_DATE.canonical_to_date(crl.rule_information2);
22122     -- Get Structure
22123     CURSOR l_struct_csr(chrId NUMBER)
22124     IS
22125     SELECT DISTINCT(nvl(crl.rule_information5,-1)) structure
22126     FROM okc_rule_groups_b crg,
22127          okc_rules_b crl
22128     WHERE crl.rgp_id = crg.id
22129     AND crg.rgd_code = 'LALEVL'
22130     AND crl.rule_information_category = 'LASLL'
22131     AND crg.dnz_chr_id = chrId;
22132     -- To check if the chr_id has Financed fee feetype defined
22133     CURSOR l_financed_type_csr (chrId NUMBER)
22134     IS
22135     SELECT 1
22136     FROM dual
22137     WHERE EXISTS (SELECT 1
22138                   FROM okc_k_lines_b cle,
22139                        okc_line_styles_b lse,
22140                        okl_k_lines kle
22141                   WHERE cle.dnz_chr_id = chrId
22142                   AND cle.lse_id = lse.id
22143                   AND lse.lty_code = 'FEE'
22144                   AND cle.id = kle.id
22145                   AND kle.fee_type  in ('ROLLOVER', 'FINANCED'));
22146     -- get the currency_code and Authoring_org_id
22147     -- from okc_k_headers_b
22148     CURSOR get_org_id(p_chr_id  okc_k_headers_b.id%TYPE)
22149     IS
22150     SELECT authoring_org_id,
22151            currency_code
22152     FROM okc_k_headers_b
22153     WHERE id = p_chr_id;
22154     -- Get Capitalized fees amount for a contract
22155     CURSOR get_cap_fee_amt(p_chr_id  okc_k_headers_b.id%TYPE)
22156     IS
22157     SELECT NVL(kle.amount, 0) total_cap_fee
22158     FROM okl_k_lines kle,
22159          okc_k_lines_b cle,
22160          okc_k_items cim,
22161          okl_strm_type_b sty
22162     WHERE cle.dnz_chr_id = p_chr_id
22163     AND cle.id = kle.id
22164     AND cle.id = cim.cle_id
22165     AND cim.jtot_object1_code = 'OKL_STRMTYP'
22166     AND cim.object1_id1 = to_char(sty.id)
22167     AND sty.capitalize_yn = 'Y';
22168     -- get line oec
22169   -- nikshah -- Bug # 5484903 Fixed,
22170   -- Removed CURSOR get_oec_csr
22171 
22172 -- Start of BAKUCHIB modification bug#3121708
22173     -- Get diff in days between contract end_date
22174     -- and max payment leve(LASLL) end_date
22175     CURSOR c_diff_days_csr(p_chr_id  okc_k_headers_b.id%TYPE,
22176                            p_cle_id  okc_k_lines_b.id%TYPE,
22177                            p_slh_id  okc_rule_groups_b.id%TYPE)
22178     IS
22179     SELECT chrv.end_date chr_end_date,
22180            MAX(FND_DATE.canonical_to_date(sll.rule_information2)) pay_start_date,
22181            MAX(DECODE(SLL.rule_information7,
22182                       NULL,(ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1),
22183                       TO_NUMBER(SLL.rule_information7),FND_DATE.canonical_to_date(sll.rule_information2)+SLL.rule_information7-1,
22184                       (ADD_MONTHS(FND_DATE.canonical_to_date(sll.rule_information2),to_number(SLL.rule_information3)*DECODE(sll.object1_id1, 'M', 1, 'Q', 3, 'S', 6, 'A', 12))-1))) pay_end_date
22185     FROM okc_rules_b sll,
22186          okc_rules_b slh,
22187          okc_rule_groups_b rgp,
22188          okc_k_headers_b chrv
22189     WHERE rgp.dnz_chr_id = p_chr_id
22190     AND rgp.cle_id  = p_cle_id
22191     AND slh.id = p_slh_id
22192     AND rgp.rgd_code =  'LALEVL'
22193     AND rgp.id = slh.rgp_id
22194     AND slh.rule_information_category = 'LASLH'
22195     AND TO_CHAR(slh.id) = sll.object2_id1
22196     AND sll.rule_information_category = 'LASLL'
22197     AND chrv.id = rgp.dnz_chr_id
22198     GROUP BY chrv.end_date;
22199 -- End of BAKUCHIB modification bug#3121708
22200     l_line_rec                        l_line_rec_csr%ROWTYPE;
22201     l_hdr_rec                         l_hdr_csr%ROWTYPE;
22202     l_rl_rec                          l_rl_csr%ROWTYPE;
22203     l_hdrrl_rec                       l_hdrrl_csr%ROWTYPE;
22204     l_rl_rec1                         l_rl_csr1%ROWTYPE;
22205     l_tx_rec                          l_tx_csr%ROWTYPE;
22206     l_txd_rec                         l_txd_csr%ROWTYPE;
22207     l_txtrans_rec                     l_txtrans_csr%ROWTYPE;
22208     l_strm_name_rec                   strm_name_csr%ROWTYPE;
22209     l_ib_rec                          ib_csr%ROWTYPE;
22210     l_strmid_rec                      l_strmid_csr%ROWTYPE;
22211     l_csm_lease_header                okl_create_streams_pub.csm_lease_rec_type;
22212     l_csm_line_details_tbl            okl_create_streams_pub.csm_line_details_tbl_type;
22213     l_rents_tbl                       okl_create_streams_pub.csm_periodic_expenses_tbl_type;
22214     l_csm_periodic_expenses_tbl       okl_create_streams_pub.csm_periodic_expenses_tbl_type;
22215     l_csm_one_off_fee_tbl             okl_create_streams_pub.csm_one_off_fee_tbl_type;
22216     l_csm_stream_types_tbl            okl_create_streams_pub.csm_stream_types_tbl_type;
22217     l_req_stream_types_tbl            okl_create_streams_pub.csm_stream_types_tbl_type;
22218     l_csm_yields_tbl                  okl_create_streams_pub.csm_yields_tbl_type;
22219     l_csm_loan_header                 okl_create_streams_pvt.csm_loan_rec_type;
22220     l_csm_loan_details_tbl            okl_create_streams_pvt.csm_loan_line_tbl_type;
22221     l_csm_loan_levels_tbl             okl_create_streams_pvt.csm_loan_level_tbl_type;
22222 
22223 	l_pdt_id_rec l_hdr_pdt_csr%ROWTYPE;
22224 
22225     --mansrini : Code for VR build
22226     CURSOR  get_day_conv_on_contrct
22227     IS
22228     SELECT
22229 --Added by srsreeni for bug6076113
22230 --            rate_params.days_in_a_year_code,
22231 --            DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code
22232             DECODE(rate_params.days_in_a_month_code,'30','360',rate_params.days_in_a_month_code) days_in_a_month_code,
22233             rate_params.days_in_a_year_code
22234 --srsreeni bug6076113 ends
22235     FROM    okl_k_rate_params rate_params
22236     WHERE   khr_id = p_chr_id;
22237 
22238     CURSOR  get_day_conv_on_sgt
22239     IS
22240     SELECT  DECODE(gts.days_in_month_code,'30','360',gts.days_in_month_code) days_in_month_code,
22241             gts.days_in_yr_code
22242     FROM
22243             okl_k_headers khr,
22244             okl_products_v pdt,
22245             okl_ae_tmpt_sets_v aes,
22246             OKL_ST_GEN_TMPT_SETS gts
22247     WHERE
22248             khr.pdt_id = pdt.id AND
22249             pdt.aes_id = aes.id AND
22250             aes.gts_id = gts.id AND
22251             khr.id  = p_chr_id;
22252 
22253     l_days_in_month_code OKL_ST_GEN_TMPT_SETS.days_in_month_code%type;
22254     l_days_in_yr_code  OKL_ST_GEN_TMPT_SETS.days_in_yr_code%type;
22255 
22256   BEGIN
22257     x_return_status := OKL_API.G_RET_STS_SUCCESS;
22258     -- Call start_activity to create savepoint, check compatibility
22259     -- and initialize message list
22260     x_return_status := OKL_API.START_ACTIVITY (
22261                                l_api_name
22262                                ,p_init_msg_list
22263                                ,'_PVT'
22264                                ,x_return_status);
22265     -- Check if activity started successfully
22266     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
22267       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22268     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
22269       RAISE OKL_API.G_EXCEPTION_ERROR;
22270     END IF;
22271 	-- To get product id
22272     OPEN  l_hdr_pdt_csr(p_chr_id);
22273     FETCH l_hdr_pdt_csr INTO l_pdt_id_rec;
22274     CLOSE l_hdr_pdt_csr;
22275 
22276     -- get Header info
22277     OPEN  l_hdr_csr(p_chr_id);
22278     FETCH l_hdr_csr INTO l_hdr_rec;
22279     IF l_hdr_csr%NOTFOUND THEN
22280       okl_api.set_message(p_app_name      => G_APP_NAME,
22281                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
22282                           p_token1        => G_COL_NAME_TOKEN,
22283                           p_token1_value  => 'Contract id');
22284       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22285     END IF;
22286     CLOSE l_hdr_csr;
22287 
22288     --get day convention info : mansrini
22289     OPEN  get_day_conv_on_contrct;
22290     FETCH get_day_conv_on_contrct INTO l_days_in_month_code,l_days_in_yr_code;
22291     CLOSE get_day_conv_on_contrct;
22292 
22293 --Added by srsreeni for bug6076113
22294 --    IF l_days_in_month_code IS NULL OR l_days_in_month_code IS NULL
22295     IF l_days_in_month_code IS NULL OR l_days_in_yr_code IS NULL
22296 --srsreeni bug6076113 ends
22297     THEN
22298       OPEN  get_day_conv_on_sgt;
22299       FETCH get_day_conv_on_sgt INTO l_days_in_month_code,l_days_in_yr_code;
22300       CLOSE get_day_conv_on_sgt;
22301     END IF;
22302 
22303     -- Validating the Deal type
22304     IF l_hdr_rec.deal_type IS NOT NULL OR
22305        l_hdr_rec.deal_type <> OKL_API.G_MISS_CHAR THEN
22306       l_deal_type := l_hdr_rec.deal_type;
22307     ELSE
22308       okl_api.set_message(p_app_name      => G_APP_NAME,
22309                           p_msg_name      => G_REQUIRED_VALUE,
22310                           p_token1        => G_COL_NAME_TOKEN,
22311                           p_token1_value  => 'Deal_type');
22312       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22313     END IF;
22314     IF l_deal_type IN ('LEASEDF','LEASEOP','LEASEST') THEN
22315       -- Get the Lease owner info
22316       OPEN  l_hdrrl_csr('LATOWN', 'LATOWN',p_chr_id);
22317       FETCH l_hdrrl_csr INTO l_hdrrl_rec;
22318       IF(l_hdrrl_csr%NOTFOUND) THEN
22319         okl_api.set_message(p_app_name      => G_APP_NAME,
22320                             p_msg_name      => G_LLA_NO_MATCHING_RECORD,
22321                             p_token1        => G_COL_NAME_TOKEN,
22322                             p_token1_value  => 'Contract id');
22323           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22324       ELSIF l_hdrrl_csr%FOUND THEN
22325         l_csm_lease_header.irs_tax_treatment_method := l_hdrrl_rec.RULE_INFORMATION1;
22326         -- Start of Bug#3388812 modification - BAKUCHIB
22327         l_lease_tax_owner := l_hdrrl_rec.RULE_INFORMATION1;
22328         -- End of Bug#3388812 modification - BAKUCHIB
22329       END IF;
22330       CLOSE l_hdrrl_csr;
22331       -- Validating the Deal type
22332       IF l_hdr_rec.deal_type IS NOT NULL OR
22333          l_hdr_rec.deal_type <> OKL_API.G_MISS_CHAR THEN
22334         l_deal_type := l_hdr_rec.deal_type;
22335       ELSE
22336         l_csm_lease_header.irs_tax_treatment_method := 'LESSOR';
22337       END IF;
22338       l_csm_lease_header.khr_id                     := p_chr_id;
22339       l_csm_lease_header.date_payments_commencement := l_hdr_rec.start_date;
22340       l_csm_lease_header.fasb_acct_treatment_method := l_deal_type;
22341       l_csm_lease_header.date_delivery              := l_hdr_rec.start_date;
22342       l_csm_lease_header.term                       := l_hdr_rec.term;
22343       l_csm_lease_header.pdt_id                     := l_hdr_rec.pid;
22344       -- Checking if the chr_id is having a financed fee to set
22345       -- the sif_code accordingly
22346       OPEN  l_financed_type_csr (chrId => p_chr_id);
22347       FETCH l_financed_type_csr INTO ln_fin_yn;
22348       CLOSE l_financed_type_csr;
22349       IF ln_fin_yn = 1 THEN
22350         l_csm_lease_header.sif_mode  := OKL_CREATE_STREAMS_PUB.G_MODE_BOTH;
22351       ELSIF ln_fin_yn = 0 THEN
22352         l_csm_lease_header.sif_mode  := OKL_CREATE_STREAMS_PUB.G_MODE_LESSOR;
22353       END IF;
22354       -- Getting the install base location
22355       OPEN  ib_csr(p_chr_id);
22356       FETCH ib_csr INTO l_ib_rec;
22357       IF ib_csr%NOTFOUND THEN
22358         okl_api.set_message(p_app_name      => G_APP_NAME,
22359                             p_msg_name      => G_LLA_NO_MATCHING_RECORD,
22360                             p_token1        => G_COL_NAME_TOKEN,
22361                             p_token1_value  => 'Contract id');
22362          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22363       END IF;
22364       CLOSE ib_csr;
22365       l_csm_lease_header.country := l_ib_rec.country;
22366       l_csm_lease_header.orp_code := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
22367       l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_NO;
22368       -- Fetching the Header rule for Residual value insurance premium
22369       OPEN  l_hdrrl_csr('LARVIN', 'LARVAU', TO_NUMBER(p_chr_id));
22370       FETCH l_hdrrl_csr INTO l_hdrrl_rec;
22371       CLOSE l_hdrrl_csr;
22372       IF l_hdrrl_rec.rule_information1 = 'Y' THEN
22373 	  -- Added and commented by HKPATEL
22374 	    IF(g_rep_req_yn = 'Y') THEN
22375 
22376           get_primary_stream_type
22377           (
22378            p_khr_id =>p_chr_id,
22379            p_pdt_id =>l_pdt_id_rec.report_pdt_id,
22380            p_primary_sty_purpose =>'RESIDUAL_VALUE_INSURANCE_PREMIUM',
22381            x_return_status => x_return_status,
22382            x_primary_sty_id =>l_sty_id
22383           );
22384 
22385 	    ELSE
22386 
22387 	      get_primary_stream_type
22388 	      (
22389  	      p_khr_id => p_chr_id,
22390  	      p_primary_sty_purpose => 'RESIDUAL_VALUE_INSURANCE_PREMIUM',
22391  	      x_return_status => x_return_status,
22392  	      x_primary_sty_id =>l_sty_id
22393 	      );
22394 
22395 	    END IF;
22396 	  /*
22397         SELECT  nvl(id,-1)
22398         INTO styid
22399         FROM okl_strm_type_tl
22400         WHERE LANGUAGE = 'US'
22401         AND name = 'RESIDUAL VALUE INSURANCE PREMIUM';
22402         IF styid = -1 THEN
22403           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22404         END IF;
22405 		*/
22406         m := m + 1;
22407         l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
22408         l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
22409         l_csm_lease_header.rvi_yn := OKL_CREATE_STREAMS_PUB.G_FND_YES;
22410         OPEN  l_hdrrl_csr('LARVIN', 'LARVAM', p_chr_id);
22411         FETCH l_hdrrl_csr INTO l_hdrrl_rec;
22412         CLOSE l_hdrrl_csr;
22413         l_csm_lease_header.rvi_rate := TO_NUMBER(nvl(l_hdrrl_rec.RULE_INFORMATION4,'0'));
22414       END IF;
22415       -- Purchase option,
22416       OPEN  l_hdrrl_csr('AMTFOC', 'AMBPOC', p_chr_id);
22417       FETCH l_hdrrl_csr INTO l_hdrrl_rec;
22418       CLOSE l_hdrrl_csr;
22419       l_purchase_option := l_hdrrl_rec.rule_information11;
22420       IF l_hdrrl_rec.rule_information2 IS NOT NULL THEN
22421         l_purchase_option_amount := TO_NUMBER(nvl(l_hdrrl_rec.rule_information2,'0'));
22422       ELSE
22423         l_purchase_option := 'NONE';
22424       END IF;
22425 
22426       --Modified by kthiruva for Streams Performance
22427       --This cursor was moved outside the loop to increase performance
22428       --Bug 4346646 - Start of Changes
22429       --Fetching the org_id
22430       OPEN  get_org_id(p_chr_id => p_chr_id);
22431       FETCH get_org_id INTO ln_org_id,
22432                             lv_currency_code;
22433       IF get_org_id%NOTFOUND THEN
22434         okl_api.set_message(p_app_name      => G_APP_NAME,
22435                           p_msg_name      => G_LLA_NO_MATCHING_RECORD,
22436                           p_token1        => G_COL_NAME_TOKEN,
22437                           p_token1_value  => 'Contract id');
22438         x_return_status := OKL_API.G_RET_STS_ERROR;
22439       END IF;
22440       CLOSE get_org_id;
22441       --Bug 4346646 - End of Changes
22442 
22443       -- now get record for a asset line
22444       FOR l_line_rec IN l_line_rec_csr (p_chr_id,'FREE_FORM1') LOOP
22445         i := i + 1;
22446         l_csm_line_details_tbl(i).kle_asset_id := l_line_rec.id;
22447         l_csm_line_details_tbl(i).state_depre_dmnshing_value_rt := 0;
22448         l_csm_line_details_tbl(i).book_depre_dmnshing_value_rt := 0;
22449         l_csm_line_details_tbl(i).residual_guarantee_method := l_line_rec.residual_code;
22450         l_csm_line_details_tbl(i).fed_depre_dmnshing_value_rate := 0;
22451         l_csm_line_details_tbl(i).purchase_option := l_purchase_option;
22452         l_csm_line_details_tbl(i).purchase_option_amount := l_purchase_option_amount;
22453 
22454         execute_formula(p_api_version   => p_api_version,
22455                         p_init_msg_list => p_init_msg_list,
22456                         x_return_status => x_return_status,
22457                         x_msg_count     => x_msg_count,
22458                         x_msg_data      => x_msg_data,
22459                         p_formula_name  => 'LINE_CAP_AMNT',
22460                         p_contract_id   => p_chr_id,
22461                         p_line_id       => l_line_rec.id,
22462                         x_value         => l_value);
22463         IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22464           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22465         ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22466           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22467         END IF;
22468         -- Get line Trade in
22469         execute_formula(p_api_version   => p_api_version,
22470                         p_init_msg_list => p_init_msg_list,
22471                         x_return_status => x_return_status,
22472                         x_msg_count     => x_msg_count,
22473                         x_msg_data      => x_msg_data,
22474                         p_formula_name  => 'LINE_TRADEIN',
22475                         p_contract_id   => p_chr_id,
22476                         p_line_id       => l_line_rec.id,
22477                         x_value         => l_tradein);
22478         IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22479           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22480         ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22481           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22482         END IF;
22483         -- Get line cap Reduction
22484         execute_formula(p_api_version   => p_api_version,
22485                         p_init_msg_list => p_init_msg_list,
22486                         x_return_status => x_return_status,
22487                         x_msg_count     => x_msg_count,
22488                         x_msg_data      => x_msg_data,
22489                         p_formula_name  => 'LINE_CAPREDUCTION',
22490                         p_contract_id   => p_chr_id,
22491                         p_line_id       => l_line_rec.id,
22492                         x_value         => l_capreduc);
22493         IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22494           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22495         ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22496           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22497         END IF;
22498         -- Get line Fee Capilitized
22499         execute_formula(p_api_version   => p_api_version,
22500                         p_init_msg_list => p_init_msg_list,
22501                         x_return_status => x_return_status,
22502                         x_msg_count     => x_msg_count,
22503                         x_msg_data      => x_msg_data,
22504                         p_formula_name  => 'LINE_FEESCAPITALIZED',
22505                         p_contract_id   => p_chr_id,
22506                         p_line_id       => l_line_rec.id,
22507                         x_value         => l_feecap);
22508         IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22509           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22510         ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22511           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22512         END IF;
22513         -- Get line Capitalized Interest
22514         execute_formula(p_api_version   => p_api_version,
22515                         p_init_msg_list => p_init_msg_list,
22516                         x_return_status => x_return_status,
22517                         x_msg_count     => x_msg_count,
22518                         x_msg_data      => x_msg_data,
22519                         p_formula_name  => 'LINE_CAPITALIZED_INTEREST',
22520                         p_contract_id   => p_chr_id,
22521                         p_line_id       => l_line_rec.id,
22522                         x_value         => l_capint);
22523         IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22524           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22525         ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22526           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22527         END IF;
22528         -- Get line Discount
22529         execute_formula(p_api_version   => p_api_version,
22530                         p_init_msg_list => p_init_msg_list,
22531                         x_return_status => x_return_status,
22532                         x_msg_count     => x_msg_count,
22533                         x_msg_data      => x_msg_data,
22534                         p_formula_name  => 'LINE_DISCOUNT',
22535                         p_contract_id   => p_chr_id,
22536                         p_line_id       => l_line_rec.id,
22537                         x_value         => l_discount);
22538         IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
22539           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR);
22540         ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
22541           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22542         END IF;
22543         IF l_line_rec.residual_value IS NULL THEN
22544           l_csm_line_details_tbl(i).residual_amount := 0;
22545         ELSE
22546           l_csm_line_details_tbl(i).residual_amount := l_line_rec.residual_value;
22547         END IF;
22548         IF l_line_rec.delivered_date IS NULL THEN
22549           l_csm_line_details_tbl(i).date_delivery := l_line_rec.start_date;
22550         ELSE
22551           l_csm_line_details_tbl(i).date_delivery := l_line_rec.delivered_date;
22552         END IF;
22553         l_csm_line_details_tbl(i).residual_guarantee_amount := l_line_rec.residual_grnty_amount;
22554         IF l_line_rec.residual_grnty_amount IS NOT NULL OR
22555            l_line_rec.residual_grnty_amount <> OKL_API.G_MISS_NUM THEN
22556           l_csm_line_details_tbl(i).guarantee_type := l_line_rec.guarantee_type;
22557         END IF;
22558         --smahapat changed 03/13/04
22559         --cannot support until field populated by authoring since field mandatory
22560         --l_csm_line_details_tbl(i).date_funding := l_line_rec.date_funding;
22561         l_csm_line_details_tbl(i).date_funding := NVL(l_line_rec.date_funding,l_line_rec.start_date);
22562         --smahapat end change 03/13/04
22563         l_csm_line_details_tbl(i).description := l_line_rec.item_description;
22564         -- we need to set the context since the records in
22565         -- OKL_SYS_ACCT_OPTS table are stored with regards to the context
22566         -- To calculate basis percent for Corp or tax book
22567         -- we need the Line capital amount.
22568         -- Now since new version of the pricing eng
22569         -- NET subsidies , amount of sudsidy is sent to
22570         -- pricing eng as percent so we exclude the discout as below
22571         ln_value := l_value + NVL(l_discount,0);
22572         l_csm_line_details_tbl(i).asset_cost := ln_value;
22573         -- Now we are dealing with corp book and building
22574         -- Book Depreciation Stream info
22575         OPEN l_tx_csr(l_line_rec.name );
22576         FETCH l_tx_csr into l_tx_rec;
22577         IF l_tx_csr%NOTFOUND THEN
22578           OKL_API.set_message(p_app_name      => G_APP_NAME,
22579                               p_msg_name      => G_LLA_NO_MATCHING_RECORD,
22580                               p_token1        => G_COL_NAME_TOKEN,
22581                               p_token1_value  => l_line_rec.name);
22582           x_return_status := OKL_API.G_RET_STS_ERROR;
22583           EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22584         END IF;
22585         CLOSE l_tx_csr;
22586         -- Now we are determing the Basis percent for the corp book
22587         -- Basis percent = Depreciable Cost (for each asset defined corp book)
22588         --                / Total Asset Capital Cost
22589         IF (l_tx_rec.depreciation_cost IS NULL OR
22590             TO_NUMBER(l_tx_rec.depreciation_cost) = 0 ) THEN
22591           l_basis_percent := 0;
22592         ELSE
22593 -- Start for bug#3388812  modification - BAKUCHIB
22594           -- Now since new version of the pricing eng
22595           -- NET subsidies , amount of sudsidy is sent to
22596           -- pricing eng as percent so we exclude the discout as below
22597           l_corp_dep_cost := l_tx_rec.depreciation_cost - NVL(l_tradein,0) - NVL(l_capreduc,0) +
22598                              NVL(l_feecap,0) + NVL(l_capint,0);
22599 -- End for bug#3388812  modification - BAKUCHIB
22600           l_basis_percent := TO_NUMBER(nvl(l_corp_dep_cost,'0')) / TO_NUMBER(ln_value );
22601 -- Start for bug#3388812  modification - BAKUCHIB
22602           l_basis_percent := l_basis_percent * 100;
22603 -- End for bug#3388812  modification - BAKUCHIB
22604         END IF;
22605         IF l_basis_percent <> 0 THEN
22606           -- Now we round the Basis Percent
22607           l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
22608                                                                   p_amount  => l_basis_percent);
22609         END IF;
22610         -- Now we are determing the Salvage value
22611         l_salvage := nvl(l_tx_rec.salvage_value,0);
22612         IF l_salvage = 0 THEN
22613           l_salvage := (nvl(l_tx_rec.percent_salvage_value,0) * l_line_rec.oec)/100.00;
22614         END IF;
22615         l_csm_line_details_tbl(i).book_adr_convention  := l_tx_rec.prorate_convention_code;
22616         l_csm_line_details_tbl(i).book_term            := l_tx_rec.life_in_months;
22617         l_csm_line_details_tbl(i).book_method          := to_char(l_tx_rec.id1);
22618         l_csm_line_details_tbl(i).book_salvage         := l_salvage;
22619         l_csm_line_details_tbl(i).date_book            := l_tx_rec.in_service_date;
22620         l_csm_line_details_tbl(i).book_basis_percent   := l_rnd_basis_percent;
22621 
22622         -- Start of Bug#3388812 modification - BAKUCHIB
22623         IF l_lease_tax_owner = 'LESSOR' THEN
22624 		  m := m + 1;
22625         -- End of Bug#3388812 modification - BAKUCHIB
22626 		 -- Code added and commented by HKPATEL
22627           IF(g_rep_req_yn = 'Y') THEN
22628 	         get_primary_stream_type
22629              (
22630                p_khr_id =>p_chr_id,
22631                p_pdt_id =>l_pdt_id_rec.report_pdt_id,
22632                p_primary_sty_purpose =>'BOOK_DEPRECIATION',
22633                x_return_status => x_return_status,
22634                x_primary_sty_id =>l_sty_id
22635              );
22636 
22637           ELSE
22638 
22639 	        get_primary_stream_type
22640 	        (
22641  	          p_khr_id => p_chr_id,
22642  	          p_primary_sty_purpose => 'BOOK_DEPRECIATION',
22643  	          x_return_status => x_return_status,
22644  	          x_primary_sty_id =>l_sty_id
22645 	        );
22646 
22647            END IF;
22648 
22649          /*
22650           OPEN  l_strmid_csr('BOOK DEPRECIATION');
22651           FETCH l_strmid_csr into l_strmid_rec;
22652           IF l_strmid_csr%NOTFOUND THEN
22653             OKL_API.set_message(p_app_name      => G_APP_NAME,
22654                                 p_msg_name      => G_LLA_NO_MATCHING_RECORD,
22655                                 p_token1        => G_COL_NAME_TOKEN,
22656                                 p_token1_value  => 'BOOK DEPRECIATION');
22657             x_return_status := OKL_API.G_RET_STS_ERROR;
22658             EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22659           END IF;
22660           CLOSE l_strmid_csr;
22661 		  */
22662 		  -- Added code ends here - HKPATEL
22663           l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
22664           l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
22665           l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
22666         END IF;
22667 -- Start modification Bug#3447917
22668         -- Now we are changing the approach for generating Tax book Depreciation streams
22669         -- by the virtue of Bug#3447917 so changes because of bug#3066346 is reverted.
22670 -- Start modification Bug#3066346
22671         -- We need to validate tax book for a given asset number
22672         -- and also validate if there has been setups done for these
22673         -- tax books
22674         -- Now we are dealing with Tax book and building
22675         -- Federal/State Depreciation Stream info
22676         -- Since there could be more than one tax book we need to loop for each
22677         -- tax book
22678 -- End modification Bug#3066346
22679 -- End modification Bug#3447917
22680         FOR l_txd_rec IN l_txd_csr(l_line_rec.name) LOOP
22681           -- Now we are determing the Basis percent for the Tax book
22682           -- Basis percent = Depreciable Cost (for each asset defined tax book)
22683           --                / Total Asset Capital Cost
22684           -- Intialize the variable
22685           l_basis_percent     := 0;
22686           l_rnd_basis_percent := 0;
22687           IF (l_txd_rec.cost IS NULL OR
22688              TO_NUMBER(l_txd_rec.cost) = 0) THEN
22689             l_basis_percent := 0;
22690           ELSE
22691 -- Start for bug#3388812  modification - BAKUCHIB
22692             -- Now since new version of the pricing eng
22693             -- NET subsidies , amount of sudsidy is sent to
22694             -- pricing eng as percent so we exclude the discout as below
22695             l_tax_dep_cost := l_txd_rec.cost - NVL(l_tradein,0) - NVL(l_capreduc,0) +
22696                              NVL(l_feecap,0) + NVL(l_capint,0);
22697 -- End for bug#3388812  modification - BAKUCHIB
22698             l_basis_percent := TO_NUMBER(nvl(l_tax_dep_cost,'0')) / TO_NUMBER(ln_value );
22699             l_basis_percent := l_basis_percent * 100.00;
22700           END IF;
22701           IF l_basis_percent <> 0 THEN
22702             -- Now we round the Basis Percent
22703             l_rnd_basis_percent := OKL_ACCOUNTING_UTIL.round_amount(p_currency_code => lv_currency_code,
22704                                                                     p_amount    => l_basis_percent);
22705           END IF;
22706 -- Start modification Bug#3447917
22707 -- Start modification Bug#3066346
22708           -- If we find only setup for one tax book only then
22709           -- we build only federal Depreciation Stream
22710           -- we build both federal and state Depreciation Stream
22711           FOR l_txtrans_rec in l_txtrans_csr (l_txd_rec.tax_book) LOOP
22712             IF l_txtrans_rec.value IS NOT NULL AND
22713                l_txtrans_rec.value = 'FEDERAL' THEN
22714               l_csm_line_details_tbl(i).fed_depre_adr_conve     := l_tx_rec.prorate_convention_code;
22715               l_csm_line_details_tbl(i).fed_depre_term          := l_txd_rec.life_in_months_tax;
22716               l_csm_line_details_tbl(i).fed_depre_method        := to_char(l_txd_rec.id1);
22717               l_csm_line_details_tbl(i).fed_depre_salvage       := l_txd_rec.salvage_value;
22718               l_csm_line_details_tbl(i).date_fed_depre          := l_tx_rec.in_service_date;
22719               l_csm_line_details_tbl(i).fed_depre_basis_percent := l_rnd_basis_percent;
22720 
22721               -- Start of Bug#3388812 modification - BAKUCHIB
22722               IF l_lease_tax_owner = 'LESSOR' THEN
22723               -- End of Bug#3388812 modification - BAKUCHIB
22724                 m := m + 1;
22725 				-- Added code by HKPATEL
22726                 IF(g_rep_req_yn = 'Y') THEN
22727 
22728                   get_primary_stream_type
22729                   (
22730                    p_khr_id =>p_chr_id,
22731                    p_pdt_id =>l_pdt_id_rec.report_pdt_id,
22732                    p_primary_sty_purpose =>'FEDERAL_DEPRECIATION',
22733                    x_return_status => x_return_status,
22734                    x_primary_sty_id =>l_sty_id
22735                   );
22736 
22737                 ELSE
22738 
22739 	              get_primary_stream_type
22740 	              (
22741  	               p_khr_id => p_chr_id,
22742  	               p_primary_sty_purpose => 'FEDERAL_DEPRECIATION',
22743  	               x_return_status => x_return_status,
22744  	               x_primary_sty_id =>l_sty_id
22745 	              );
22746 
22747                 END IF;
22748 				/*
22749                 OPEN  l_strmid_csr('FEDERAL DEPRECIATION');
22750                 FETCH l_strmid_csr into l_strmid_rec;
22751                 IF l_strmid_csr%NOTFOUND THEN
22752                   OKL_API.set_message(p_app_name      => G_APP_NAME,
22753                                       p_msg_name      => G_LLA_NO_MATCHING_RECORD,
22754                                       p_token1        => G_COL_NAME_TOKEN,
22755                                       p_token1_value  => 'FEDERAL DEPRECIATION');
22756                   x_return_status := OKL_API.G_RET_STS_ERROR;
22757                   EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22758                 END IF;
22759                 CLOSE l_strmid_csr;
22760 				*/
22761                 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
22762                 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
22763                 l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
22764               END IF;
22765             ELSIF l_txtrans_rec.value IS NOT NULL AND
22766                   l_txtrans_rec.value = 'STATE' THEN
22767               l_csm_line_details_tbl(i).state_depre_adr_convent   := l_tx_rec.prorate_convention_code;
22768               l_csm_line_details_tbl(i).state_depre_term          := l_txd_rec.life_in_months_tax;
22769               l_csm_line_details_tbl(i).state_depre_method        := to_char(l_txd_rec.id1);
22770               l_csm_line_details_tbl(i).state_depre_salvage       := l_txd_rec.salvage_value;
22771               l_csm_line_details_tbl(i).date_state_depre          := l_tx_rec.in_service_date;
22772               l_csm_line_details_tbl(i).state_depre_basis_percent := l_rnd_basis_percent;
22773 
22774               -- Start of Bug#3388812 modification - BAKUCHIB
22775               IF l_lease_tax_owner = 'LESSOR' THEN
22776               -- End of Bug#3388812 modification - BAKUCHIB
22777                 m := m + 1;
22778 				-- Added code by HKPATEL
22779                   IF(g_rep_req_yn = 'Y') THEN
22780 
22781                     get_primary_stream_type
22782                     (
22783                      p_khr_id =>p_chr_id,
22784                      p_pdt_id =>l_pdt_id_rec.report_pdt_id,
22785                      p_primary_sty_purpose =>'STATE_DEPRECIATION',
22786                      x_return_status => x_return_status,
22787                      x_primary_sty_id =>l_sty_id
22788                     );
22789 
22790                   ELSE
22791 
22792 	                get_primary_stream_type
22793 	                (
22794  	                 p_khr_id => p_chr_id,
22795  	                 p_primary_sty_purpose => 'STATE_DEPRECIATION',
22796  	                 x_return_status => x_return_status,
22797  	                 x_primary_sty_id =>l_sty_id
22798 	                );
22799 
22800                   END IF;
22801 				/*
22802                 OPEN  l_strmid_csr('STATE DEPRECIATION');
22803                 FETCH l_strmid_csr into l_strmid_rec;
22804                 IF l_strmid_csr%NOTFOUND THEN
22805                   OKL_API.set_message(p_app_name      => G_APP_NAME,
22806                                       p_msg_name      => G_LLA_NO_MATCHING_RECORD,
22807                                       p_token1        => G_COL_NAME_TOKEN,
22808                                       p_token1_value  => 'STATE DEPRECIATION');
22809                   x_return_status := OKL_API.G_RET_STS_ERROR;
22810                   EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22811                 END IF;
22812                 CLOSE l_strmid_csr;
22813 				*/
22814                 l_csm_stream_types_tbl(m).stream_type_id := l_sty_id.id;
22815                 l_csm_stream_types_tbl(m).pricing_name := l_sty_id.pricing_name;
22816                 l_csm_stream_types_tbl(m).kle_asset_id   := l_line_rec.id;
22817               END IF;
22818             END IF;
22819           END LOOP;
22820           IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
22821             EXIT WHEN(x_return_status <> OKL_API.G_RET_STS_SUCCESS);
22822           END IF;
22823         END LOOP;
22824         IF x_return_status <> OKL_API.G_RET_STS_SUCCESS THEN
22825           EXIT WHEN(x_return_status <> OKL_API.G_RET_STS_SUCCESS);
22826         END IF;
22827       END LOOP;
22828       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
22829         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
22830       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
22831         RAISE OKL_API.G_EXCEPTION_ERROR;
22832       END IF;
22833       -- WE should deal with so Payment line differently
22834       -- Getting the payment information of the asset
22835       FOR l_so_line_rec IN l_so_line_rec_csr (p_chr_id,p_cle_id) LOOP
22836         FOR l_rl_rec1 IN l_rl_csr1 ( 'LALEVL', 'LASLH',p_chr_id, l_so_line_rec.id ) LOOP
22837           l_level_type := l_rl_rec1.object1_id1;
22838           OPEN  strm_name_csr ( l_level_type );
22839           FETCH strm_name_csr into l_strm_name_rec;
22840           IF strm_name_csr%NOTFOUND THEN
22841             OKL_API.set_message(p_app_name      => G_APP_NAME,
22842                                 p_msg_name      => G_LLA_NO_MATCHING_RECORD,
22843                                 p_token1        => G_COL_NAME_TOKEN,
22844                                 p_token1_value  => 'Stream Id');
22845             x_return_status := OKL_API.G_RET_STS_ERROR;
22846             EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22847           END IF;
22848           CLOSE strm_name_csr;
22849           l_strm_name := l_strm_name_rec.stream_type_purpose;
22850           m := m + 1;
22851           l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
22852           l_csm_stream_types_tbl(m).kle_asset_id   := l_so_line_rec.id;
22853           idx := 0;
22854           IF( UPPER(TRIM(l_strm_name)) = 'RENT' ) THEN
22855             FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_so_line_rec.id ) LOOP
22856               IF (l_rl_rec.rule_information7 IS NOT NULL OR
22857                   l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
22858                  (l_rl_rec.rule_information8 IS NOT NULL OR
22859                   l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
22860                 j := j + 1;
22861                 idx := idx + 1;
22862                 l_rents_tbl(j).level_index_number := idx;
22863                 l_rents_tbl(j).amount             := TO_NUMBER(l_rl_rec.rule_information8);
22864                 l_rents_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
22865                 l_rents_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
22866                 l_rents_tbl(j).period             := g_stub_rec.period;
22867                 l_rents_tbl(j).description        := l_strm_name;
22868   --              l_rents_tbl(j).kle_asset_id       := l_so_line_rec.id;
22869                 l_rents_tbl(j).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
22870                 l_rents_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
22871                 l_rents_tbl(j).days_in_month := l_days_in_month_code;
22872                 l_rents_tbl(j).days_in_year    := l_days_in_yr_code;
22873                 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
22874                   l_rents_tbl(j).structure          := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
22875                 END If;
22876                 l_rents_tbl(j).rate               := l_rl_rec.rule_information13;
22877 
22878                 -- Added by kthiruva on 29-Dec-2005.
22879                 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
22880                 -- Bug 4915938 - Start of Changes
22881                 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
22882                   l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
22883                 ELSE
22884                   l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
22885                 END IF;
22886                 -- Bug 4915938 - End of Changes
22887 
22888               ELSIF (l_rl_rec.rule_information7 IS NULL OR
22889                      l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
22890                     (l_rl_rec.rule_information8 IS NULL OR
22891                      l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
22892                 j := j + 1;
22893                 idx := idx + 1;
22894                 l_rents_tbl(j).level_index_number := idx;
22895                 l_rents_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
22896                 l_rents_tbl(j).description        := l_strm_name;
22897                 l_rents_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
22898                 l_rents_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
22899                 l_rents_tbl(j).period             := l_rl_rec.object1_id1;
22900                 l_rents_tbl(j).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
22901   --              l_rents_tbl(j).kle_asset_id       := l_so_line_rec.id;
22902                 l_rents_tbl(j).days_in_month := l_days_in_month_code;
22903                 l_rents_tbl(j).days_in_year    := l_days_in_yr_code;
22904                 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
22905                   l_rents_tbl(j).structure          := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
22906                 END If;
22907                 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
22908                   l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
22909                 ELSE
22910                   l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
22911                 END IF;
22912                 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) Then
22913                   l_rents_tbl(j).date_start  := l_hdr_rec.start_date;
22914                 ELSE
22915                   l_rents_tbl(j).date_start  := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
22916                 END IF;
22917                 l_rents_tbl(j).rate               := l_rl_rec.rule_information13;
22918               END IF;
22919               -- Now we get difference in days between contract end_date and last payment end_date
22920               -- Start of BAKUCHIB modification bug#3121708
22921               OPEN  c_diff_days_csr(p_chr_id => p_chr_id,
22922                                     p_cle_id => l_so_line_rec.id,
22923                                     p_slh_id => l_rl_rec1.slh_id);
22924               FETCH c_diff_days_csr INTO ld_chr_end_date,
22925                                          ld_last_start_date,
22926                                          ld_last_end_date;
22927               IF c_diff_days_csr%FOUND THEN
22928                 ln_diff_days := ld_chr_end_date - ld_last_end_date;
22929               END IF;
22930               CLOSE c_diff_days_csr;
22931               IF SIGN(ln_diff_days) = -1 THEN
22932                 OKL_API.set_message(p_app_name      => G_APP_NAME,
22933                                     p_msg_name      => G_INVALID_VALUE,
22934                                     p_token1        => G_COL_NAME_TOKEN,
22935                                     p_token1_value  => 'Diffrence End date');
22936                 x_return_status := OKL_API.G_RET_STS_ERROR;
22937                 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
22938               END IF;
22939               -- If there is diff in days then an empty stub will be appended
22940               IF ln_diff_days > 0 AND
22941                  ld_last_start_date = FND_DATE.canonical_to_date(l_rl_rec.rule_information2) THEN
22942                 j := j + 1;
22943                 idx := idx + 1;
22944                 l_rents_tbl(j).level_index_number := idx;
22945                 l_rents_tbl(j).amount             := 0;
22946                 l_rents_tbl(j).date_start         := (ld_last_end_date + 1) + ln_diff_days;
22947                 l_rents_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
22948                 l_rents_tbl(j).period             := g_stub_rec.period;
22949                 l_rents_tbl(j).description        := l_strm_name;
22950                 l_rents_tbl(j).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
22951                 l_rents_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
22952                 l_rents_tbl(j).days_in_month := l_days_in_month_code;
22953                 l_rents_tbl(j).days_in_year    := l_days_in_yr_code;
22954 
22955                 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) Then
22956                   l_rents_tbl(j).structure          := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
22957                 END If;
22958 
22959                 -- Added by kthiruva on 29-Dec-2005.
22960                 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
22961                 -- Bug 4915938 - Start of Changes
22962                 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
22963                   l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
22964                 ELSE
22965                   l_rents_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
22966                 END IF;
22967                 -- Bug 4915938 - End of Changes
22968               END IF;
22969               -- End of BAKUCHIB modification bug#3121708
22970             END LOOP;
22971           ELSIF (((l_strm_name_rec.periodic_yn = 'Y'  ) AND
22972                   (UPPER(l_strm_name_rec.name) = 'FEE') AND
22973                   (l_strm_name_rec.capitalize_yn = 'N') ) OR
22974                  ((l_strm_name_rec.periodic_yn = 'Y'  ) AND
22975                   (UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
22976             FOR l_rl_rec IN l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', p_chr_id, l_so_line_rec.id) LOOP
22977               IF (l_rl_rec.rule_information7 IS NOT NULL OR
22978                   l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
22979                  (l_rl_rec.rule_information8 IS NOT NULL OR
22980                   l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
22981                 k := k + 1;
22982                 idx := idx + 1;
22983                 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
22984                 l_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
22985                 l_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
22986                 l_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
22987                 l_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
22988                 l_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
22989                 l_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
22990                 l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
22991   --              l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_so_line_rec.id;
22992                 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
22993                 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
22994 
22995                 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
22996                   l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
22997                 END If;
22998 
22999                 -- Added by kthiruva on 29-Dec-2005.
23000                 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
23001                 -- Bug 4915938 - Start of Changes
23002                 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23003                   l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23004                 ELSE
23005                   l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23006                 END IF;
23007                 -- Bug 4915938 - End of Changes
23008 
23009               ELSIF (l_rl_rec.rule_information7 IS NULL OR
23010                      l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
23011                     (l_rl_rec.rule_information8 IS NULL OR
23012                      l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
23013                 k := k + 1;
23014                 idx := idx + 1;
23015                 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
23016                 l_csm_periodic_expenses_tbl(k).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23017                 l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
23018                 l_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
23019                 l_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
23020                 l_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
23021   --              l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_so_line_rec.id;
23022                 l_csm_periodic_expenses_tbl(k).income_or_expense  := OKL_CREATE_STREAMS_PUB.G_INCOME;
23023                 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
23024                 l_csm_periodic_expenses_tbl(k).days_in_year    := l_days_in_yr_code;
23025 
23026                 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23027                   l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23028                 END If;
23029                 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23030                   l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23031                 ELSE
23032                   l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23033                 END IF;
23034                 IF(l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
23035                   l_csm_periodic_expenses_tbl(k).date_start  := l_hdr_rec.start_date;
23036                 ELSE
23037                   l_csm_periodic_expenses_tbl(k).date_start  := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
23038                 END IF;
23039               END IF;
23040             END LOOP;
23041           ELSIF ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) THEN
23042             FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL',p_chr_id, l_so_line_rec.id ) LOOP
23043               l := l + 1;
23044               l_csm_one_off_fee_tbl(l).description       := l_strm_name_rec.name;
23045               l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23046               l_csm_one_off_fee_tbl(l).amount            := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
23047               IF (l_rl_rec.RULE_INFORMATION2 IS NULL OR l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
23048                 l_csm_one_off_fee_tbl(l).date_paid         := l_hdr_rec.start_date;
23049               ELSE
23050                 l_csm_one_off_fee_tbl(l).date_paid         := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
23051               END IF;
23052   --            l_csm_one_off_fee_tbl(l).kle_asset_id      := l_so_line_rec.id;
23053             END LOOP;
23054           END IF;
23055         END LOOP;
23056       END LOOP;
23057       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23058         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23059       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23060         RAISE OKL_API.G_EXCEPTION_ERROR;
23061       END IF;
23062       -- Extracting the fee lines
23063       extract_fee_lines( p_api_version                => p_api_version,
23064                          p_chr_id                     => p_chr_id,
23065                          p_deal_type                  => l_deal_type,
23066                          p_init_msg_list              => p_init_msg_list,
23067                          x_return_status              => x_return_status,
23068                          x_msg_count                  => x_msg_count,
23069                          x_msg_data                   => x_msg_data,
23070                          px_csm_stream_types_tbl      => l_csm_stream_types_tbl,
23071                          px_csm_one_off_fee_tbl       => l_csm_one_off_fee_tbl,
23072                          px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
23073       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23074         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23075       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23076         RAISE OKL_API.G_EXCEPTION_ERROR;
23077       END IF;
23078       -- Check for Mandatory streams
23079       check_for_mandatory_streams(
23080               p_api_version        => p_api_version,
23081               p_init_msg_list      => p_init_msg_list,
23082               x_msg_count          => x_msg_count,
23083               x_msg_data           => x_msg_data,
23084               x_return_status      => x_return_status,
23085               p_chr_id             => p_chr_id,
23086               p_deal_type          => l_deal_type,
23087               p_stream_types_tbl   => l_csm_stream_types_tbl,
23088               x_stream_types_tbl   => l_req_stream_types_tbl);
23089       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23090         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23091       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23092         RAISE OKL_API.G_EXCEPTION_ERROR;
23093       END IF;
23094       -- Requesting for yields
23095       x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
23096       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23097         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23098       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23099         RAISE OKL_API.G_EXCEPTION_ERROR;
23100       END IF;
23101       IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
23102         okl_api.set_message(p_app_name => G_APP_NAME,
23103                             p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
23104         RAISE OKL_API.G_EXCEPTION_ERROR;
23105       END IF;
23106       -- Call to extraction SUBSIDY line API
23107       extract_subsidized_lines(p_api_version          => p_api_version,
23108                                p_init_msg_list        => p_init_msg_list,
23109                                x_return_status        => x_return_status,
23110                                x_msg_count            => x_msg_count,
23111                                x_msg_data             => x_msg_data,
23112                                p_chr_id               => p_chr_id,
23113                                px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
23114       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23115         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23116       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23117         RAISE OKL_API.G_EXCEPTION_ERROR;
23118       END IF;
23119       x_csm_lease_header          := l_csm_lease_header;
23120       x_csm_one_off_fee_tbl       := l_csm_one_off_fee_tbl;
23121       x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
23122       x_csm_yields_tbl            := l_csm_yields_tbl;
23123       x_req_stream_types_tbl      := l_req_stream_types_tbl;
23124       x_csm_line_details_tbl      := l_csm_line_details_tbl;
23125       x_rents_tbl                 := l_rents_tbl;
23126       IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
23127         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23128       ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
23129         RAISE OKL_API.G_EXCEPTION_ERROR;
23130       END IF;
23131     ELSIF l_deal_type = 'LOAN' THEN
23132       FOR l_line_rec in l_line_rec_csr ( p_chr_id ,'FREE_FORM1')  LOOP
23133         l_tot_asset_oec := l_tot_asset_oec + l_line_rec.oec;
23134       END LOOP;
23135       OPEN  get_cap_fee_amt(p_chr_id => p_chr_id);
23136       FETCH get_cap_fee_amt INTO l_cap_fee_amt;
23137       CLOSE get_cap_fee_amt;
23138       l_total_lending :=  l_tot_asset_oec + l_cap_fee_amt;
23139 
23140       -- Getting the install base location
23141       OPEN  ib_csr(p_chr_id);
23142       FETCH ib_csr INTO l_ib_rec;
23143       IF ib_csr%NOTFOUND THEN
23144         okl_api.set_message(p_app_name      => G_APP_NAME,
23145                             p_msg_name      => G_LLA_NO_MATCHING_RECORD,
23146                             p_token1        => G_COL_NAME_TOKEN,
23147                             p_token1_value  => 'Contract id');
23148          RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23149       END IF;
23150       CLOSE ib_csr;
23151       l_csm_loan_header.khr_id                     := p_chr_id;
23152       l_csm_loan_header.date_payments_commencement := l_hdr_rec.start_date;
23153       l_csm_loan_header.date_start                 := l_hdr_rec.start_date;
23154       l_csm_loan_header.pdt_id                     := l_hdr_rec.pid;
23155       l_csm_loan_header.country                    := l_ib_rec.country;
23156       l_csm_loan_header.orp_code                   := OKL_CREATE_STREAMS_PUB.G_ORP_CODE_BOOKING;
23157       l_csm_loan_header.total_lending              := l_total_lending;
23158       l_csm_loan_header.sif_mode                   := OKL_CREATE_STREAMS_PUB.G_MODE_LENDER;
23159       FOR l_line_rec in l_line_rec_csr ( p_chr_id , 'FREE_FORM1')  LOOP
23160         i := i + 1;
23161         l_csm_loan_details_tbl(i).kle_loan_id       := l_line_rec.id;
23162       END LOOP;
23163       FOR l_so_line_rec IN l_so_line_rec_csr (p_chr_id,p_cle_id) LOOP
23164         FOR l_rl_rec1 in l_rl_csr1 ( 'LALEVL', 'LASLH', p_chr_id, l_so_line_rec.id ) LOOP
23165           l_level_type := l_rl_rec1.object1_id1;
23166           OPEN  strm_name_csr ( l_level_type );
23167           FETCH strm_name_csr into l_strm_name_rec;
23168           IF strm_name_csr%NOTFOUND THEN
23169             OKL_API.set_message(p_app_name      => G_APP_NAME,
23170                                 p_msg_name      => G_LLA_NO_MATCHING_RECORD,
23171                                 p_token1        => G_COL_NAME_TOKEN,
23172                                 p_token1_value  => 'Stream Id');
23173             x_return_status := OKL_API.G_RET_STS_ERROR;
23174             EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
23175           END IF;
23176           CLOSE strm_name_csr;
23177           l_strm_name := l_strm_name_rec.stream_type_purpose;
23178           IF(UPPER(TRIM(l_strm_name)) <> 'RENT') THEN
23179             m := m + 1;
23180             l_csm_stream_types_tbl(m).stream_type_id := l_level_type;
23181             l_csm_stream_types_tbl(m).kle_asset_id   := l_so_line_rec.id;
23182           END IF;
23183           idx := 0;
23184           IF( UPPER(TRIM(l_strm_name)) = 'RENT') THEN
23185             j := j + 1;
23186             idx := idx + 1;
23187             -- smahapat l_csm_loan_levels_tbl(j).kle_loan_id  := l_so_line_rec.id;
23188             l_csm_loan_levels_tbl(j).description  := 'Funding';
23189             l_csm_loan_levels_tbl(j).amount             := l_total_lending;
23190             l_csm_loan_levels_tbl(j).date_start         := l_hdr_rec.start_date;
23191             l_csm_loan_levels_tbl(j).level_index_number := idx;
23192             l_csm_loan_levels_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_FUNDING;
23193             l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
23194             l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
23195 
23196             FOR l_rl_rec in l_rl_csr ( l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_so_line_rec.id ) LOOP
23197               IF (l_rl_rec.rule_information7 IS NOT NULL OR
23198                   l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
23199                  (l_rl_rec.rule_information8 IS NOT NULL OR
23200                   l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
23201                 j := j + 1;
23202                 idx := idx + 1;
23203                 l_csm_loan_levels_tbl(j).level_index_number := idx;
23204                 l_csm_loan_levels_tbl(j).amount             := TO_NUMBER(l_rl_rec.rule_information8);
23205                 l_csm_loan_levels_tbl(j).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+TO_NUMBER(l_rl_rec.rule_information7);
23206                 l_csm_loan_levels_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
23207                 l_csm_loan_levels_tbl(j).period             := g_stub_rec.period;
23208                 l_csm_loan_levels_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23209                 l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
23210                 l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
23211 
23212                 --smahapat l_csm_loan_levels_tbl(j).kle_loan_id        := l_so_line_rec.id;
23213                 l_csm_loan_levels_tbl(j).description        := l_strm_name;
23214                 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
23215                   l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
23216                 ELSE
23217                   l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23218                 END IF;
23219                 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23220                   l_csm_loan_levels_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23221                 END IF;
23222 
23223                 -- Added by kthiruva on 29-Dec-2005.
23224                 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
23225                 -- Bug 4915938 - Start of Changes
23226                 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23227                   l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23228                 ELSE
23229                   l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23230                 END IF;
23231                 -- Bug 4915938 - End of Changes
23232 
23233               ELSIF (l_rl_rec.rule_information7 IS NULL OR
23234                      l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
23235                     (l_rl_rec.rule_information8 IS NULL OR
23236                      l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
23237                 j := j + 1;
23238                 idx := idx + 1;
23239                 --smahapat l_csm_loan_levels_tbl(j).kle_loan_id        := l_so_line_rec.id;
23240                 l_csm_loan_levels_tbl(j).description        := l_strm_name;
23241                 l_csm_loan_levels_tbl(j).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
23242                 l_csm_loan_levels_tbl(j).date_start         := l_hdr_rec.start_date;
23243                 l_csm_loan_levels_tbl(j).level_index_number := idx;
23244                 l_csm_loan_levels_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23245                 l_csm_loan_levels_tbl(j).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
23246                 l_csm_loan_levels_tbl(j).period             := l_rl_rec.object1_id1;
23247                 l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
23248                 l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
23249 
23250                 IF(l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23251                   l_csm_loan_levels_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23252                 END IF;
23253                 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23254                   l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23255                 ELSE
23256                   l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23257                 END IF;
23258                 IF(l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
23259                   l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
23260                 ELSE
23261                   l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23262                 END IF;
23263               END IF;
23264               -- Now we get difference in days between contract end_date and last payment end_date
23265               -- Start of BAKUCHIB modification bug#3121708
23266               OPEN  c_diff_days_csr(p_chr_id => p_chr_id,
23267                                     p_cle_id => l_so_line_rec.id,
23268                                     p_slh_id => l_rl_rec1.slh_id);
23269               FETCH c_diff_days_csr INTO ld_chr_end_date,
23270                                          ld_last_start_date,
23271                                          ld_last_end_date;
23272               IF c_diff_days_csr%FOUND THEN
23273                 ln_diff_days := ld_chr_end_date - ld_last_end_date;
23274               END IF;
23275               CLOSE c_diff_days_csr;
23276               IF SIGN(ln_diff_days) = -1 THEN
23277                 OKL_API.set_message(p_app_name      => G_APP_NAME,
23278                                     p_msg_name      => G_INVALID_VALUE,
23279                                     p_token1        => G_COL_NAME_TOKEN,
23280                                     p_token1_value  => 'Diffrence End date');
23281                 x_return_status := OKL_API.G_RET_STS_ERROR;
23282                 EXIT WHEN (x_return_status = OKL_API.G_RET_STS_ERROR);
23283               END IF;
23284               -- If there is diff in days then an empty stub will be appended
23285               IF ln_diff_days > 0 AND
23286                  ld_last_start_date = FND_DATE.canonical_to_date(l_rl_rec.rule_information2) THEN
23287                 j := j + 1;
23288                 idx := idx + 1;
23289                 l_csm_loan_levels_tbl(j).level_index_number := idx;
23290                 l_csm_loan_levels_tbl(j).amount             := 0;
23291                 l_csm_loan_levels_tbl(j).date_start         := (ld_last_end_date + 1) + ln_diff_days;
23292                 l_csm_loan_levels_tbl(j).number_of_periods  := g_stub_rec.number_of_periods;
23293                 l_csm_loan_levels_tbl(j).period             := g_stub_rec.period;
23294                 l_csm_loan_levels_tbl(j).description        := l_strm_name;
23295                 l_csm_loan_levels_tbl(j).level_type         := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23296                 l_csm_loan_levels_tbl(j).days_in_month := l_days_in_month_code;
23297                 l_csm_loan_levels_tbl(j).days_in_year := l_days_in_yr_code;
23298 
23299                 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
23300                   l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
23301                 ELSE
23302                   l_csm_loan_levels_tbl(j).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23303                 END IF;
23304                 IF( l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23305                   l_csm_loan_levels_tbl(j).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23306                 END IF;
23307 
23308                 -- Added by kthiruva on 29-Dec-2005.
23309                 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
23310                 -- Bug 4915938 - Start of Changes
23311                 IF ((l_rl_rec.rule_information10 IS NOT NULL) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23312                   l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23313                 ELSE
23314                   l_csm_loan_levels_tbl(j).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23315                 END IF;
23316                 -- Bug 4915938 - End of Changes
23317 
23318               END IF;
23319               -- End of BAKUCHIB modification bug#3121708
23320             END LOOP;
23321           ELSIF (((l_strm_name_rec.periodic_yn = 'Y'  ) AND
23322                   (UPPER(l_strm_name_rec.name) = 'FEE') AND
23323                   (l_strm_name_rec.capitalize_yn = 'N')) OR
23324                  ((l_strm_name_rec.periodic_yn = 'Y'  ) AND
23325                   (UPPER(l_strm_name_rec.name) <> 'FEE'))) THEN
23326             FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_so_line_rec.id ) LOOP
23327               IF (l_rl_rec.rule_information7 IS NOT NULL OR
23328                   l_rl_rec.rule_information7 <> OKL_API.G_MISS_CHAR) AND
23329                  (l_rl_rec.rule_information8 IS NOT NULL OR
23330                   l_rl_rec.rule_information8 <> OKL_API.G_MISS_CHAR) THEN
23331                 k := k + 1;
23332                 idx := idx + 1;
23333                 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
23334                 l_csm_periodic_expenses_tbl(k).amount             := TO_NUMBER(l_rl_rec.rule_information8);
23335                 l_csm_periodic_expenses_tbl(k).date_start         := FND_DATE.canonical_to_date(l_rl_rec.rule_information2)+l_rl_rec.rule_information7;
23336                 l_csm_periodic_expenses_tbl(k).number_of_periods  := g_stub_rec.number_of_periods;
23337                 l_csm_periodic_expenses_tbl(k).period             := g_stub_rec.period;
23338 --                l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_so_line_rec.id;
23339                 l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
23340                 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
23341                 l_csm_periodic_expenses_tbl(k).days_in_year    := l_days_in_yr_code;
23342 
23343                 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23344                   l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23345                 END IF;
23346                 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
23347                   l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
23348                 ELSE
23349                   l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23350                 END IF;
23351                 IF (UPPER(l_strm_name_rec.name) = 'INTEREST_PAYMENT') THEN
23352                   l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
23353                 ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL_PAYMENT' ) THEN
23354                   l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
23355                 ELSE
23356                   l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23357                 END If;
23358 
23359                 --Added by kthiruva on 29-Dec-2005.
23360                 -- The value of the Advance and Arrears flag needs to be obtained from the rule information
23361                 -- Bug 4915938 - Start of Changes
23362                 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23363                   l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23364                 ELSE
23365                   l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23366                 END IF;
23367                 -- Bug 4915938 - End of Changes
23368 
23369               ELSIF (l_rl_rec.rule_information7 IS NULL OR
23370                      l_rl_rec.rule_information7 = OKL_API.G_MISS_CHAR) AND
23371                     (l_rl_rec.rule_information8 IS NULL OR
23372                      l_rl_rec.rule_information8 = OKL_API.G_MISS_CHAR) THEN
23373                 k := k + 1;
23374                 idx := idx + 1;
23375                 l_csm_periodic_expenses_tbl(k).level_index_number := idx;
23376                 l_csm_periodic_expenses_tbl(k).description        := l_strm_name;
23377                 l_csm_periodic_expenses_tbl(k).period             := l_rl_rec.object1_id1;
23378                 l_csm_periodic_expenses_tbl(k).amount             := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
23379                 l_csm_periodic_expenses_tbl(k).number_of_periods  := TO_NUMBER(nvl(l_rl_rec.RULE_INFORMATION3, l_hdr_rec.term));
23380 --                l_csm_periodic_expenses_tbl(k).kle_asset_id       := l_so_line_rec.id;
23381                 l_csm_periodic_expenses_tbl(k).days_in_month := l_days_in_month_code;
23382                 l_csm_periodic_expenses_tbl(k).days_in_year := l_days_in_yr_code;
23383 
23384                 IF (l_rl_rec.RULE_INFORMATION5 IS NOT NULL) THEN
23385                   l_csm_periodic_expenses_tbl(k).structure := TO_NUMBER(l_rl_rec.RULE_INFORMATION5);
23386                 END IF;
23387                 IF (( l_rl_rec.RULE_INFORMATION10 IS NOT NULL ) AND (l_rl_rec.RULE_INFORMATION10 = 'Y')) THEN
23388                   l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ARREARS;
23389                 ELSE
23390                   l_csm_periodic_expenses_tbl(k).advance_or_arrears := OKL_CREATE_STREAMS_PUB.G_ADVANCE;
23391                 END IF;
23392                 IF (l_rl_rec.RULE_INFORMATION2 IS NULL or l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
23393                   l_csm_periodic_expenses_tbl(k).date_start  := l_hdr_rec.start_date;
23394                 ELSE
23395                   l_csm_periodic_expenses_tbl(k).date_start  := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
23396                 END IF;
23397                 IF( l_strm_name_rec.stream_type_class = 'EXPENSE') THEN
23398                   l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_EXPENSE;
23399                 ELSE
23400                   l_csm_periodic_expenses_tbl(k).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23401                 END IF;
23402                 IF ( UPPER(l_strm_name_rec.name) = 'INTEREST_PAYMENT' ) THEN
23403                   l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_INTEREST;
23404                 ELSIF ( UPPER(l_strm_name_rec.name) = 'PRINCIPAL_PAYMENT' ) Then
23405                   l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PRINCIPAL;
23406                 ELSE
23407                   l_csm_periodic_expenses_tbl(k).level_type := OKL_CREATE_STREAMS_PUB.G_SFE_LEVEL_PAYMENT;
23408                 END If;
23409               END IF;
23410             END LOOP;
23411           ELSIF ((UPPER(TRIM(l_strm_name_rec.periodic_yn)) = 'N' )) THEN
23412             FOR l_rl_rec in l_rl_csr (l_rl_rec1.slh_id, 'LALEVL', 'LASLL', TO_NUMBER(p_chr_id), l_so_line_rec.id ) LOOP
23413               l := l + 1;
23414               l_csm_one_off_fee_tbl(l).description       := l_strm_name_rec.name;
23415               l_csm_one_off_fee_tbl(l).income_or_expense := OKL_CREATE_STREAMS_PUB.G_INCOME;
23416               l_csm_one_off_fee_tbl(l).amount            := FND_NUMBER.canonical_to_number(nvl(l_rl_rec.RULE_INFORMATION6,'0'));
23417               IF (l_rl_rec.RULE_INFORMATION2 IS NULL OR
23418                   l_rl_rec.RULE_INFORMATION2 = OKL_API.G_MISS_CHAR) THEN
23419                 l_csm_one_off_fee_tbl(l).date_paid         := l_hdr_rec.start_date;
23420               ELSE
23421                 l_csm_one_off_fee_tbl(l).date_paid         := FND_DATE.canonical_to_date(l_rl_rec.RULE_INFORMATION2);
23422               END IF;
23423 --              l_csm_one_off_fee_tbl(l).kle_asset_id      := l_so_line_rec.id;
23424             END LOOP;
23425           END IF;
23426         END LOOP;
23427       END LOOP;
23428       extract_fee_lines( p_api_version                => p_api_version,
23429                          p_chr_id                     => p_chr_id,
23430                          p_deal_type                  => l_deal_type,
23431                          p_init_msg_list              => p_init_msg_list,
23432                          x_msg_count                  => x_msg_count,
23433                          x_msg_data                   => x_msg_data,
23434                          x_return_status              => x_return_status,
23435                          px_csm_stream_types_tbl      => l_csm_stream_types_tbl,
23436                          px_csm_one_off_fee_tbl       => l_csm_one_off_fee_tbl,
23437                          px_csm_periodic_expenses_tbl => l_csm_periodic_expenses_tbl);
23438       IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
23439         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23440       ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
23441         RAISE OKL_API.G_EXCEPTION_ERROR;
23442       END IF;
23443       extract_subsidized_lines(p_api_version => p_api_version,
23444                                p_init_msg_list => p_init_msg_list,
23445                                x_return_status => x_return_status,
23446                                x_msg_count => x_msg_count,
23447                                x_msg_data => x_msg_data,
23448                                p_chr_id => TO_NUMBER(p_chr_id),
23449                                px_csm_one_off_fee_tbl => l_csm_one_off_fee_tbl);
23450       IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
23451         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23452       ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
23453         RAISE OKL_API.G_EXCEPTION_ERROR;
23454       END IF;
23455       check_for_mandatory_streams(
23456               p_api_version        => p_api_version,
23457               p_init_msg_list      => p_init_msg_list,
23458               x_msg_count          => x_msg_count,
23459               x_msg_data           => x_msg_data,
23460               x_return_status      => x_return_status,
23461               p_chr_id             => p_chr_id,
23462               p_deal_type          => l_deal_type,
23463               p_stream_types_tbl   => l_csm_stream_types_tbl,
23464               x_stream_types_tbl   => l_req_stream_types_tbl);
23465       IF x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR THEN
23466         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23467       ELSIF x_return_status = OKL_API.G_RET_STS_ERROR THEN
23468         RAISE OKL_API.G_EXCEPTION_ERROR;
23469       END IF;
23470       -- Requesting for yields
23471       x_return_status := yield_request(x_csm_yields_tbl => l_csm_yields_tbl);
23472       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
23473         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23474       ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
23475         RAISE OKL_API.G_EXCEPTION_ERROR;
23476       END IF;
23477       IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) then
23478               okl_api.set_message(
23479                       p_app_name => G_APP_NAME,
23480                       p_msg_name => 'OKL_LLA_REPSTRMS_EXTR_FAILED');
23481         RAISE OKL_API.G_EXCEPTION_ERROR;
23482       End If;
23483       x_csm_loan_header           := l_csm_loan_header;
23484       x_csm_loan_lines_tbl        := l_csm_loan_details_tbl;
23485       x_csm_loan_levels_tbl       := l_csm_loan_levels_tbl;
23486       x_csm_one_off_fee_tbl       := l_csm_one_off_fee_tbl;
23487       x_csm_periodic_expenses_tbl := l_csm_periodic_expenses_tbl;
23488       x_csm_yields_tbl            := l_csm_yields_tbl;
23489       x_req_stream_types_tbl      := l_req_stream_types_tbl;
23490     ELSE
23491       okl_api.set_message(p_app_name      => G_APP_NAME,
23492                           p_msg_name      => G_INVALID_VALUE,
23493                           p_token1        => G_COL_NAME_TOKEN,
23494                           p_token1_value  => 'Deal_type');
23495       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
23496     END IF;
23497     OKL_API.END_ACTIVITY (x_msg_count,
23498                           x_msg_data );
23499   EXCEPTION
23500     WHEN OKL_API.G_EXCEPTION_ERROR THEN
23501       IF l_hdr_csr%ISOPEN THEN
23502         CLOSE l_hdr_csr;
23503       END IF;
23504       IF l_hdrrl_csr%ISOPEN THEN
23505         CLOSE l_hdrrl_csr;
23506       END IF;
23507       IF l_financed_type_csr%ISOPEN THEN
23508         CLOSE l_financed_type_csr;
23509       END IF;
23510       IF ib_csr%ISOPEN THEN
23511         CLOSE ib_csr;
23512       END IF;
23513       IF l_line_rec_csr%ISOPEN THEN
23514         CLOSE l_line_rec_csr;
23515       END IF;
23516       IF get_org_id%ISOPEN THEN
23517         CLOSE get_org_id;
23518       END IF;
23519       IF l_tx_csr%ISOPEN THEN
23520         CLOSE l_tx_csr;
23521       END IF;
23522       IF l_strmid_csr%ISOPEN THEN
23523         CLOSE l_strmid_csr;
23524       END IF;
23525       IF l_txd_csr%ISOPEN THEN
23526         CLOSE l_txd_csr;
23527       END IF;
23528       IF l_txtrans_csr%ISOPEN THEN
23529         CLOSE l_txtrans_csr;
23530       END IF;
23531       IF strm_name_csr%ISOPEN THEN
23532         CLOSE strm_name_csr;
23533       END IF;
23534       IF l_rl_csr%ISOPEN THEN
23535         CLOSE l_rl_csr;
23536       END IF;
23537       IF l_rl_csr1%ISOPEN THEN
23538         CLOSE l_rl_csr1;
23539       END IF;
23540       IF l_so_line_rec_csr%ISOPEN THEN
23541         CLOSE l_so_line_rec_csr;
23542       END IF;
23543       IF get_cap_fee_amt%ISOPEN THEN
23544         CLOSE get_cap_fee_amt;
23545       END IF;
23546       IF c_diff_days_csr%ISOPEN THEN
23547         CLOSE c_diff_days_csr;
23548       END IF;
23549       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
23550                                 l_api_name,
23551                                G_PKG_NAME,
23552                                'OKL_API.G_RET_STS_ERROR',
23553                                x_msg_count,
23554                                x_msg_data,
23555                                '_PVT');
23556     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
23557       IF l_hdr_csr%ISOPEN THEN
23558         CLOSE l_hdr_csr;
23559       END IF;
23560       IF l_hdrrl_csr%ISOPEN THEN
23561         CLOSE l_hdrrl_csr;
23562       END IF;
23563       IF l_financed_type_csr%ISOPEN THEN
23564         CLOSE l_financed_type_csr;
23565       END IF;
23566       IF ib_csr%ISOPEN THEN
23567         CLOSE ib_csr;
23568       END IF;
23569       IF l_line_rec_csr%ISOPEN THEN
23570         CLOSE l_line_rec_csr;
23571       END IF;
23572       IF get_org_id%ISOPEN THEN
23573         CLOSE get_org_id;
23574       END IF;
23575       IF l_tx_csr%ISOPEN THEN
23576         CLOSE l_tx_csr;
23577       END IF;
23578       IF l_strmid_csr%ISOPEN THEN
23579         CLOSE l_strmid_csr;
23580       END IF;
23581       IF l_txd_csr%ISOPEN THEN
23582         CLOSE l_txd_csr;
23583       END IF;
23584       IF l_txtrans_csr%ISOPEN THEN
23585         CLOSE l_txtrans_csr;
23586       END IF;
23587       IF strm_name_csr%ISOPEN THEN
23588         CLOSE strm_name_csr;
23589       END IF;
23590       IF l_rl_csr%ISOPEN THEN
23591         CLOSE l_rl_csr;
23592       END IF;
23593       IF l_rl_csr1%ISOPEN THEN
23594         CLOSE l_rl_csr1;
23595       END IF;
23596       IF l_so_line_rec_csr%ISOPEN THEN
23597         CLOSE l_so_line_rec_csr;
23598       END IF;
23599       IF get_cap_fee_amt%ISOPEN THEN
23600         CLOSE get_cap_fee_amt;
23601       END IF;
23602       IF c_diff_days_csr%ISOPEN THEN
23603         CLOSE c_diff_days_csr;
23604       END IF;
23605       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
23606                                 l_api_name,
23607                                 G_PKG_NAME,
23608                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
23609                                 x_msg_count,
23610                                 x_msg_data,
23611                                 '_PVT');
23612     WHEN OTHERS THEN
23613       IF l_hdr_csr%ISOPEN THEN
23614         CLOSE l_hdr_csr;
23615       END IF;
23616       IF l_hdrrl_csr%ISOPEN THEN
23617         CLOSE l_hdrrl_csr;
23618       END IF;
23619       IF l_financed_type_csr%ISOPEN THEN
23620         CLOSE l_financed_type_csr;
23621       END IF;
23622       IF ib_csr%ISOPEN THEN
23623         CLOSE ib_csr;
23624       END IF;
23625       IF l_line_rec_csr%ISOPEN THEN
23626         CLOSE l_line_rec_csr;
23627       END IF;
23628       IF get_org_id%ISOPEN THEN
23629         CLOSE get_org_id;
23630       END IF;
23631       IF l_tx_csr%ISOPEN THEN
23632         CLOSE l_tx_csr;
23633       END IF;
23634       IF l_strmid_csr%ISOPEN THEN
23635         CLOSE l_strmid_csr;
23636       END IF;
23637       IF l_txd_csr%ISOPEN THEN
23638         CLOSE l_txd_csr;
23639       END IF;
23640       IF l_txtrans_csr%ISOPEN THEN
23641         CLOSE l_txtrans_csr;
23642       END IF;
23643       IF strm_name_csr%ISOPEN THEN
23644         CLOSE strm_name_csr;
23645       END IF;
23646       IF l_rl_csr%ISOPEN THEN
23647         CLOSE l_rl_csr;
23648       END IF;
23649       IF l_rl_csr1%ISOPEN THEN
23650         CLOSE l_rl_csr1;
23651       END IF;
23652       IF l_so_line_rec_csr%ISOPEN THEN
23653         CLOSE l_so_line_rec_csr;
23654       END IF;
23655       IF get_cap_fee_amt%ISOPEN THEN
23656         CLOSE get_cap_fee_amt;
23657       END IF;
23658       IF c_diff_days_csr%ISOPEN THEN
23659         CLOSE c_diff_days_csr;
23660       END IF;
23661       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
23662                                 l_api_name,
23663                                 G_PKG_NAME,
23664                                 'OTHERS',
23665                                 x_msg_count,
23666                                 x_msg_data,
23667                                 '_PVT');
23668   END extract_params_so;
23669 
23670 -- End modification 11i10 bakuchib
23671 End OKL_LA_STREAM_PVT;