DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_K_RATE_PARAMS_PVT

Source


1 PACKAGE BODY OKL_K_RATE_PARAMS_PVT AS
2 /* $Header: OKLRKRPB.pls 120.33.12020000.3 2012/08/28 14:13:27 racheruv ship $ */
3 
4     G_MODULE VARCHAR2(255) := 'okl.stream.esg.okl_esg_transport_pvt';
5     G_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6     G_IS_DEBUG_STATEMENT_ON BOOLEAN;
7 
8   -- GLOBAL VARIABLES
9 G_MISS_NUM	CONSTANT NUMBER := FND_API.G_MISS_NUM;
10 G_MISS_CHAR	CONSTANT VARCHAR2(1) := FND_API.G_MISS_CHAR;
11 G_MISS_DATE	CONSTANT DATE := FND_API.G_MISS_DATE;
12 G_API_TYPE                CONSTANT  VARCHAR2(4) := '_PVT';
13 G_BULK_SIZE               CONSTANT  NUMBER := 10000;
14 G_OKL_LLA_VAR_RATE_ERROR  CONSTANT VARCHAR2(30) := 'OKL_LLA_VAR_RATE_ERROR';
15 G_LEASE_TYPE              CONSTANT VARCHAR2(30) := 'LEASE_TYPE';
16 G_INT_BASIS               CONSTANT VARCHAR2(30) := 'INT_BASIS';
17 G_OKL_LLA_VAR_RATE_MISSING  CONSTANT VARCHAR2(30) := 'OKL_LLA_VAR_RATE_MISSING';
18 G_CONT_ID               CONSTANT VARCHAR2(30) := 'CONT_ID';
19 G_REQUIRED_VALUE CONSTANT VARCHAR2(200) := OKL_API.G_REQUIRED_VALUE;
20 G_COL_NAME_TOKEN CONSTANT VARCHAR2(200) := OKL_API.G_COL_NAME_TOKEN;
21 
22   -- smadhava Bug#4542290 - 22-Aug-2005 - Added - Start
23   G_OKL_LLA_REBOOK_INVALID      CONSTANT VARCHAR2(30) := 'OKL_LLA_REBOOK_INVALID';
24   G_OKL_LLA_RBK_INT_PROC_INVAL  CONSTANT VARCHAR2(30) := 'OKL_LLA_RBK_INT_PROCESS_INVAL';
25   G_OKL_LLA_RBK_DATE_BILL_INVAL CONSTANT VARCHAR2(30) := 'OKL_LLA_RBK_DATE_BILL_INVAL';
26   G_OKL_LLA_RBK_DATE_ACCR_INVAL CONSTANT VARCHAR2(30) := 'OKL_LLA_RBK_DATE_ACCRUE_INVAL';
27 
28   -- Bug# 13831818
29   G_OKL_LLA_RBK_INT_CAL_DT_INV CONSTANT VARCHAR2(30) := 'OKL_LLA_RBK_DATE_INVALID';
30 
31   G_BOOK_CLASS     CONSTANT VARCHAR2(30) := 'BOOK_CLASS';
32   G_INT_CALC_BASIS CONSTANT VARCHAR2(30) := 'INT_CAL';
33   G_STREAM         CONSTANT VARCHAR2(30) := 'STREAM';
34 
35   G_BOOK_CLASS_OP      CONSTANT OKL_PRODUCT_PARAMETERS_V.DEAL_TYPE%TYPE := 'LEASEOP';
36   G_BOOK_CLASS_DF      CONSTANT OKL_PRODUCT_PARAMETERS_V.DEAL_TYPE%TYPE := 'LEASEDF';
37   G_BOOK_CLASS_ST      CONSTANT OKL_PRODUCT_PARAMETERS_V.DEAL_TYPE%TYPE := 'LEASEST';
38   G_BOOK_CLASS_LOAN    CONSTANT OKL_PRODUCT_PARAMETERS_V.DEAL_TYPE%TYPE := 'LOAN';
39   G_BOOK_CLASS_REVLOAN CONSTANT OKL_PRODUCT_PARAMETERS_V.DEAL_TYPE%TYPE := 'LOAN-REVOLVING';
40 
41   G_ICB_FIXED           CONSTANT OKL_PRODUCT_PARAMETERS_V.INTEREST_CALCULATION_BASIS%TYPE := 'FIXED';
42   G_ICB_FLOAT_FACTOR    CONSTANT OKL_PRODUCT_PARAMETERS_V.INTEREST_CALCULATION_BASIS%TYPE := 'FLOAT_FACTORS';
43   G_ICB_FLOAT           CONSTANT OKL_PRODUCT_PARAMETERS_V.INTEREST_CALCULATION_BASIS%TYPE := 'FLOAT';
44   G_ICB_REAMORT         CONSTANT OKL_PRODUCT_PARAMETERS_V.INTEREST_CALCULATION_BASIS%TYPE := 'REAMORT';
45   G_ICB_CATCHUP_CLEANUP CONSTANT OKL_PRODUCT_PARAMETERS_V.INTEREST_CALCULATION_BASIS%TYPE := 'CATCHUP/CLEANUP';
46 
47   G_RRM_EST_ACTUAL CONSTANT OKL_PRODUCT_PARAMETERS_V.REVENUE_RECOGNITION_METHOD%TYPE := 'ESTIMATED_AND_ACTUAL';
48   G_RRM_ACTUAL     CONSTANT OKL_PRODUCT_PARAMETERS_V.REVENUE_RECOGNITION_METHOD%TYPE := 'ACTUAL';
49 
50   G_STRM_RENT           CONSTANT OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE := 'RENT';
51   G_STRM_RENT_ACCRUAL   CONSTANT OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE := 'RENT_ACCRUAL';
52   G_STRM_PRE_TAX        CONSTANT OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE := 'LEASE_INCOME';
53   G_STRM_INT_INCOME     CONSTANT OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE := 'INTEREST_INCOME';
54   G_STRM_LOAN_PAYMENT     CONSTANT OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE := 'LOAN_PAYMENT';
55   G_STRM_VAR_INT_INCOME CONSTANT OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE := 'VARIABLE_INTEREST_INCOME';
56   /* 13394074 */
57   G_STRM_VAR_LOAN_PAYMENT     CONSTANT OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE := 'VARIABLE_LOAN_PAYMENT';
58   G_STRM_VAR_INT CONSTANT OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE := 'VARIABLE_INTEREST';
59   G_STRM_PRINCIPAL_PAYMENT CONSTANT OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE := 'PRINCIPAL_PAYMENT';
60   G_STRM_INTEREST_PAYMENT CONSTANT OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE := 'INTEREST_PAYMENT';
61   G_RRM_EST_BILLED CONSTANT OKL_PRODUCT_PARAMETERS_V.REVENUE_RECOGNITION_METHOD%TYPE := 'ESTIMATED_AND_BILLED';
62   /* 13394074 */
63 
64   G_COL_NAME            CONSTANT VARCHAR2(30) := OKC_API.G_COL_NAME_TOKEN;
65   G_DUE_DATE            CONSTANT VARCHAR2(30) := 'DUE_DATE';
66   -- smadhava Bug#4542290 - 22-Aug-2005 - Added - End
67 
68 
69 procedure print_krpv_rec(p_krpv_rec IN krpv_rec_type) IS
70 begin
71 
72   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
73       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'KHR_ID=' ||   p_krpv_rec.KHR_ID);
74     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'parameter_type_code=' ||   p_krpv_rec.PARAMETER_TYPE_CODE);
75     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'effective_from_date=' ||   p_krpv_rec.EFFECTIVE_FROM_DATE);
76     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'effective_to_date=' ||   p_krpv_rec.EFFECTIVE_TO_DATE);
77     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'interest_index_id= '||   p_krpv_rec.INTEREST_INDEX_ID);
78     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'base_rate=' ||   p_krpv_rec.BASE_RATE);
79     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'interest_start_date=' ||   p_krpv_rec.INTEREST_START_DATE);
80     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'adder_rate='||   p_krpv_rec.ADDER_RATE);
81     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'maximum_rate=' ||   p_krpv_rec.MAXIMUM_RATE);
82     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'minimum_rate=' ||   p_krpv_rec.MINIMUM_RATE);
83     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'principal_basis_code='||   p_krpv_rec.PRINCIPAL_BASIS_CODE);
84     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'days_in_a_month_code='||    p_krpv_rec.DAYS_IN_A_MONTH_CODE);
85     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'days_in_a_year_code='||   p_krpv_rec.DAYS_IN_A_YEAR_CODE);
86     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'interest_basis_code='||   p_krpv_rec.INTEREST_BASIS_CODE);
87     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rate_delay_code='||   p_krpv_rec.RATE_DELAY_CODE);
88     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rate_delay_frequency=' ||   p_krpv_rec.RATE_DELAY_FREQUENCY);
89     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'compounding_frequency_code=' ||   p_krpv_rec.COMPOUNDING_FREQUENCY_CODE);
90     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'calculation_formula_id=' ||   p_krpv_rec.CALCULATION_FORMULA_ID);
91     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'catchup_frequency_code='||    p_krpv_rec.CATCHUP_frequency_code);
92     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'catchup_basis_code='||    p_krpv_rec.CATCHUP_BASIS_CODE);
93     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'catchup_start_date='||   p_krpv_rec.CATCHUP_START_DATE);
94     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'catchup_settlement_code='||   p_krpv_rec.CATCHUP_SETTLEMENT_CODE);
95     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rate_change_start_date='||   p_krpv_rec.RATE_CHANGE_START_DATE);
96     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rate_change_frequency_code=' || p_krpv_rec.RATE_CHANGE_FREQUENCY_CODE);
97     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'rate_change_value=' ||   p_krpv_rec.RATE_CHANGE_VALUE);
98     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'conversion_option_code=' ||   p_krpv_rec.CONVERSION_OPTION_CODE);
99     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'next_conversion_date=' ||   p_krpv_rec.NEXT_CONVERSION_DATE);
100     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'conversion_type_code=' ||   p_krpv_rec.CONVERSION_TYPE_CODE);
101   END IF;
102  /*print('    p_krpv_rec.ATTRIBUTE_CATEGORY,
103   print('   p_krpv_rec.ATTRIBUTE1,
104   print('   p_krpv_rec.ATTRIBUTE2,
105   print('   p_krpv_rec.ATTRIBUTE3,
106   print('   p_krpv_rec.ATTRIBUTE4,
107   print('   p_krpv_rec.ATTRIBUTE5,
108   print('   p_krpv_rec.ATTRIBUTE6,
109   print('   p_krpv_rec.ATTRIBUTE7,
110   print('   p_krpv_rec.ATTRIBUTE8,
111  print('    p_krpv_rec.ATTRIBUTE9,
112   print('   p_krpv_rec.ATTRIBUTE10,
113   print('   p_krpv_rec.ATTRIBUTE11,
114   print('   p_krpv_rec.ATTRIBUTE12,
115   print('   p_krpv_rec.ATTRIBUTE13,
116   print('   p_krpv_rec.ATTRIBUTE14,
117   print('   p_krpv_rec.ATTRIBUTE15,
118   print('   p_krpv_rec.CREATED_BY,
119   print('   p_krpv_rec.CREATION_DATE,
120   print('   p_krpv_rec.LAST_UPDATED_BY,
121   print('   p_krpv_rec.LAST_UPDATE_DATE,
122   print('   p_krpv_rec.LAST_UPDATE_LOGIN */
123 end;
124 
125 FUNCTION interest_processing(p_chr_id IN NUMBER,
126                              x_contract_number OUT NOCOPY VARCHAR2,
127                              x_contract_start_date OUT NOCOPY DATE )
128                             RETURN BOOLEAN IS
129 l_interest_date DATE;
130 l_billable_stream_exists VARCHAR2(1) := 'N';
131 l_orig_system_id1 okc_k_headers_b.orig_system_id1%type;
132 l_orig_system_source_code okc_k_headers_b.orig_system_source_code%type;
133 BEGIN
134   SELECT A.DATE_LAST_INTERIM_INTEREST_CAL,
135          B.CONTRACT_NUMBER,
136          B.START_DATE,
137          B.ORIG_SYSTEM_ID1,
138          B.ORIG_SYSTEM_SOURCE_CODE
139   INTO   l_interest_date,
140          x_contract_number,
141          x_contract_start_date,
142          l_orig_system_id1,
143          l_orig_system_source_code
144   FROM   OKL_K_HEADERS A,
145          OKC_K_HEADERS_B B
146   WHERE  A.ID = p_chr_id
147   AND    A.ID = B.ID;
148   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
149       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_interest_date=' ||l_interest_date);
150   END IF;
151 
152   IF (l_interest_date IS NULL) THEN
153 
154     -- Bug 4905142
155     -- Check if billable streams exists in which case billing has been run
156     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
157           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Yes, l_interest_date is NULL...');
158     END IF;
159     Begin
160       SELECT 'Y'
161       INTO   l_billable_stream_exists
162       FROM OKL_STREAMS A, OKL_STRM_TYPE_B C WHERE A.KHR_ID=p_chr_id
163       AND EXISTS (
164                    SELECT 'X' FROM OKL_STRM_ELEMENTS B
165                    WHERE   B.STM_ID = A.ID
166                    AND     B.DATE_BILLED IS NOT NULL)
167       AND A.STY_ID = C.ID
168       AND C.BILLABLE_YN='Y'
169       AND A.SAY_CODE <> 'HIST'
170       AND ROWNUM < 2;
171 
172       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
173               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_billable_stream_exists=' || l_billable_stream_exists);
174       END IF;
175 
176       Exception when no_data_found then
177 
178       If (l_orig_system_source_code = 'OKL_REBOOK') Then -- 4905142
179       Begin
180         SELECT 'Y'
181         INTO   l_billable_stream_exists
182         FROM OKL_STREAMS A, OKL_STRM_TYPE_B C WHERE A.KHR_ID=l_orig_system_id1
183         AND EXISTS (
184                      SELECT 'X' FROM OKL_STRM_ELEMENTS B
185                      WHERE   B.STM_ID = A.ID
186                      AND     B.DATE_BILLED IS NOT NULL)
187         AND A.STY_ID = C.ID
188         AND C.BILLABLE_YN='Y'
189         AND A.SAY_CODE <> 'HIST'
190         AND ROWNUM < 2;
191 
192         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
193                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'2.l_billable_stream_exists=' || l_billable_stream_exists);
194         END IF;
195         exception when others then
196           l_billable_stream_exists := 'N';
197           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
198                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Exception...sqlcode=' || sqlcode);
199             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Exception...sqlerrm=' || sqlerrm);
200           END IF;
201       End;
202       End If;
203 
204     WHEN OTHERS THEN
205        l_billable_stream_exists := 'N';
206     End;
207 
208     IF (NVL(l_billable_stream_exists,'N') = 'Y') THEN -- 4905142
209       RETURN(TRUE);
210     ELSE
211       RETURN(FALSE);
212     END IF;
213   ELSE
214     RETURN(TRUE);
215   END IF;
216 END;
217 
218 FUNCTION Is_Rebook_Copy (p_chr_id IN NUMBER) return BOOLEAN IS
219    Cursor Rbk_Cpy_Csr(p_chr_id IN Number) is
220    Select orig_system_source_code
221    From   okc_k_headers_b chr
222    --where  chr.orig_system_source_code = 'OKL_REBOOK'
223    where  chr.id = p_chr_id;
224 
225    l_rbk_cpy  BOOLEAN := FALSE;
226    l_orig_system_source_code  okc_k_headers_b.orig_system_source_code%type;
227 Begin
228    Open Rbk_Cpy_Csr(p_chr_id => p_chr_id);
229    Fetch Rbk_Cpy_Csr into l_orig_system_source_code;
230    Close Rbk_Cpy_Csr;
231    IF (nvl(l_orig_system_source_code,'?') = 'OKL_REBOOK') THEN
232     l_rbk_cpy := TRUE;
233    ELSE
234     l_rbk_cpy := FALSE;
235    END IF;
236    Return (l_rbk_cpy);
237 End Is_Rebook_Copy;
238 
239 PROCEDURE get_effective_from_date(
240     p_api_version             IN NUMBER,
241     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
242     x_return_status           OUT NOCOPY VARCHAR2,
243     x_msg_count               OUT NOCOPY NUMBER,
244     x_msg_data                OUT NOCOPY VARCHAR2,
245     p_chr_id                  IN OKC_K_HEADERS_B.ID%TYPE,
246     x_effective_from_date     OUT NOCOPY DATE,
247     x_no_data_found           OUT NOCOPY BOOLEAN) IS
248 CURSOR effective_from_date_csr(p_id NUMBER) IS
249 SELECT MAX(EFFECTIVE_FROM_DATE)
250 FROM   OKL_K_RATE_PARAMS
251 WHERE  KHR_ID = p_id
252 AND    EFFECTIVE_TO_DATE IS NULL;
253 BEGIN
254   x_return_status := OKL_API.G_RET_STS_SUCCESS;
255 
256   OPEN effective_from_date_csr(p_chr_id);
257   FETCH effective_from_date_csr
258   INTO  x_effective_from_date;
259   IF effective_from_date_csr%NOTFOUND THEN
260     x_no_data_found := TRUE;
261   ELSE
262     x_no_data_found := FALSE;
263   END IF;
264   CLOSE effective_from_date_csr;
265   EXCEPTION WHEN OTHERS THEN
266     x_return_status := OKL_API.G_RET_STS_ERROR;
267 END;
268 
269 procedure get_product(
270     p_api_version             IN NUMBER,
271     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
272     x_return_status           OUT NOCOPY VARCHAR2,
273     x_msg_count               OUT NOCOPY NUMBER,
274     x_msg_data                OUT NOCOPY VARCHAR2,
275     p_khr_id                  IN  okc_k_headers_b.id%type,
276     x_pdt_parameter_rec       OUT NOCOPY OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type)
277 IS
278 
279     l_api_name		CONSTANT VARCHAR2(30) := 'get_product';
280     l_api_version	CONSTANT NUMBER	      := 1.0;
281 
282     p_pdtv_rec            OKL_SETUPPRODUCTS_PUB.pdtv_rec_type;
283     --x_pdt_parameter_rec2  OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
284     x_no_data_found       BOOLEAN;
285 
286     CURSOR l_hdr_csr(  chrId NUMBER ) IS
287     SELECT
288 	   CHR.authoring_org_id,
289 	   CHR.inv_organization_id,
290            khr.deal_type,
291            pdt.id  pid,
292 	   NVL(pdt.reporting_pdt_id, -1) report_pdt_id
293     FROM   okc_k_headers_b CHR,
294            okl_k_headers khr,
295            okl_products_v pdt
296     WHERE khr.id = CHR.id
297         AND CHR.id = chrId
298         AND khr.pdt_id = pdt.id;
299 
300     l_hdr_rec l_hdr_csr%ROWTYPE;
301 
302 begin
303     x_return_status := OKL_API.G_RET_STS_SUCCESS;
304     OPEN  l_hdr_csr(p_khr_id);
305     FETCH l_hdr_csr INTO l_hdr_rec;
306     IF l_hdr_csr%NOTFOUND THEN
307         CLOSE l_hdr_csr;
308         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
309     END IF;
310     CLOSE l_hdr_csr;
311 
312     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
313           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In get_product: deal_type=' || l_hdr_rec.deal_type);
314       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'pid=' || l_hdr_rec.pid);
315     END IF;
316 
317     p_pdtv_rec.id := l_hdr_rec.pid;
318 
319     OKL_SETUPPRODUCTS_PUB.Getpdt_parameters(
320                         p_api_version       => p_api_version,
321                         p_init_msg_list     => p_init_msg_list,
322                         x_return_status     => x_return_status,
323                         x_msg_count         => x_msg_count,
324                         x_msg_data          => x_msg_data,
325                         p_pdtv_rec          => p_pdtv_rec,
326 	                x_no_data_found     => x_no_data_found,
327                         p_pdt_parameter_rec => x_pdt_parameter_rec);
328 
329     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
330        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
331     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
332        RAISE OKL_API.G_EXCEPTION_ERROR;
333     ELSIF  NVL(x_pdt_parameter_rec.Name,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR THEN
334        x_return_status := OKL_API.G_RET_STS_ERROR;
335        RAISE OKL_API.G_EXCEPTION_ERROR;
336     END IF;
337     --x_pdt_parameter_rec := x_pdt_parameter_rec2;
338     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
339           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_pdt_parameter_rec.name=' || x_pdt_parameter_rec.name);
340     END IF;
341 EXCEPTION WHEN OTHERS
342   THEN
343     NULL;
344 
345 END;
346 
347 procedure get_product2(
348     p_api_version             IN NUMBER,
349     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
350     x_return_status           OUT NOCOPY VARCHAR2,
351     x_msg_count               OUT NOCOPY NUMBER,
352     x_msg_data                OUT NOCOPY VARCHAR2,
353     p_khr_id                  IN  okc_k_headers_b.id%type,
354     x_product_id              OUT NOCOPY NUMBER,
355     x_pdt_parameter_rec       OUT NOCOPY OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type)
356 IS
357 
358     l_api_name		CONSTANT VARCHAR2(30) := 'get_product2';
359     l_api_version	CONSTANT NUMBER	      := 1.0;
360 
361     p_pdtv_rec            OKL_SETUPPRODUCTS_PUB.pdtv_rec_type;
362     --x_pdt_parameter_rec2  OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
363     x_no_data_found       BOOLEAN;
364 
365     CURSOR l_hdr_csr(  chrId NUMBER ) IS
366     SELECT
367 	   CHR.authoring_org_id,
368 	   CHR.inv_organization_id,
369            khr.deal_type,
370            pdt.id  pid,
371 	   NVL(pdt.reporting_pdt_id, -1) report_pdt_id
372     FROM   okc_k_headers_b CHR,
373            okl_k_headers khr,
374            okl_products_v pdt
375     WHERE khr.id = CHR.id
376         AND CHR.id = chrId
377         AND khr.pdt_id = pdt.id;
378 
379     l_hdr_rec l_hdr_csr%ROWTYPE;
380 
381 begin
382     x_return_status := OKL_API.G_RET_STS_SUCCESS;
383     OPEN  l_hdr_csr(p_khr_id);
384     FETCH l_hdr_csr INTO l_hdr_rec;
385     IF l_hdr_csr%NOTFOUND THEN
386         CLOSE l_hdr_csr;
387         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
388     END IF;
389     CLOSE l_hdr_csr;
390 
391     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
392           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In get_product2: deal_type=' || l_hdr_rec.deal_type);
393       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'pid=' || l_hdr_rec.pid);
394     END IF;
395 
396     p_pdtv_rec.id := l_hdr_rec.pid;
397     x_product_id := l_hdr_rec.pid;
398 
399     OKL_SETUPPRODUCTS_PUB.Getpdt_parameters(
400                         p_api_version       => p_api_version,
401                         p_init_msg_list     => p_init_msg_list,
402                         x_return_status     => x_return_status,
403                         x_msg_count         => x_msg_count,
404                         x_msg_data          => x_msg_data,
405                         p_pdtv_rec          => p_pdtv_rec,
406 	                x_no_data_found     => x_no_data_found,
407                         p_pdt_parameter_rec => x_pdt_parameter_rec);
408 
409     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
410        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
411     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
412        RAISE OKL_API.G_EXCEPTION_ERROR;
413     ELSIF  NVL(x_pdt_parameter_rec.Name,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR THEN
414        x_return_status := OKL_API.G_RET_STS_ERROR;
415        RAISE OKL_API.G_EXCEPTION_ERROR;
416     END IF;
417     --x_pdt_parameter_rec := x_pdt_parameter_rec2;
418     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
419           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_pdt_parameter_rec.name=' || x_pdt_parameter_rec.name);
420     END IF;
421 EXCEPTION WHEN OTHERS
422   THEN
423     NULL;
424 
425 END;
426 
427 PROCEDURE get_rate_rec(p_chr_id IN NUMBER,
428                        p_parameter_type_code IN VARCHAR2,
429                        p_effective_from_date IN DATE,
430                        x_krpv_rec OUT NOCOPY krpv_rec_type,
431                        x_no_data_found OUT NOCOPY BOOLEAN
432                       ) IS
433     CURSOR okl_k_rate_params_v_u1_csr (p_effective_from_date IN DATE,
434                                        p_khr_id              IN NUMBER,
435                                        p_parameter_type_code IN VARCHAR2) IS
436     SELECT
437             KHR_ID,
438             PARAMETER_TYPE_CODE,
439             EFFECTIVE_FROM_DATE,
440             EFFECTIVE_TO_DATE,
441             INTEREST_INDEX_ID,
442             BASE_RATE,
443             INTEREST_START_DATE,
444             ADDER_RATE,
445             MAXIMUM_RATE,
446             MINIMUM_RATE,
447             PRINCIPAL_BASIS_CODE,
448             DAYS_IN_A_MONTH_CODE,
449             DAYS_IN_A_YEAR_CODE,
450             INTEREST_BASIS_CODE,
451             RATE_DELAY_CODE,
452             RATE_DELAY_FREQUENCY,
453             COMPOUNDING_FREQUENCY_CODE,
454             CALCULATION_FORMULA_ID,
455             CATCHUP_BASIS_CODE,
456             CATCHUP_START_DATE,
457             CATCHUP_SETTLEMENT_CODE,
458             RATE_CHANGE_START_DATE,
459             RATE_CHANGE_FREQUENCY_CODE,
460             RATE_CHANGE_VALUE,
461             CONVERSION_OPTION_CODE,
462             NEXT_CONVERSION_DATE,
463             CONVERSION_TYPE_CODE,
464             ATTRIBUTE_CATEGORY,
465             ATTRIBUTE1,
466             ATTRIBUTE2,
467             ATTRIBUTE3,
468             ATTRIBUTE4,
469             ATTRIBUTE5,
470             ATTRIBUTE6,
471             ATTRIBUTE7,
472             ATTRIBUTE8,
473             ATTRIBUTE9,
474             ATTRIBUTE10,
475             ATTRIBUTE11,
476             ATTRIBUTE12,
477             ATTRIBUTE13,
478             ATTRIBUTE14,
479             ATTRIBUTE15,
480             CREATED_BY,
481             CREATION_DATE,
482             LAST_UPDATED_BY,
483             LAST_UPDATE_DATE,
484             LAST_UPDATE_LOGIN
485       FROM Okl_K_Rate_Params_V
486      WHERE effective_from_date = NVL(p_effective_from_date,effective_from_date)
487      AND   khr_id = p_khr_id
488      AND   parameter_type_code = NVL(p_parameter_type_code,parameter_type_code);
489     l_okl_k_rate_params_v_u1       okl_k_rate_params_v_u1_csr%ROWTYPE;
490 BEGIN
491     x_no_data_found := TRUE;
492     -- Get current database values
493     OPEN okl_k_rate_params_v_u1_csr (p_effective_from_date,
494                                      p_chr_id,
495                                      p_parameter_type_code);
496     FETCH okl_k_rate_params_v_u1_csr INTO
497               x_krpv_rec.khr_id,
498               x_krpv_rec.parameter_type_code,
499               x_krpv_rec.effective_from_date,
500               x_krpv_rec.effective_to_date,
501               x_krpv_rec.interest_index_id,
502               x_krpv_rec.base_rate,
503               x_krpv_rec.interest_start_date,
504               x_krpv_rec.adder_rate,
505               x_krpv_rec.maximum_rate,
506               x_krpv_rec.minimum_rate,
507               x_krpv_rec.principal_basis_code,
508               x_krpv_rec.days_in_a_month_code,
509               x_krpv_rec.days_in_a_year_code,
510               x_krpv_rec.interest_basis_code,
511               x_krpv_rec.rate_delay_code,
512               x_krpv_rec.rate_delay_frequency,
513               x_krpv_rec.compounding_frequency_code,
514               x_krpv_rec.calculation_formula_id,
515               x_krpv_rec.catchup_basis_code,
516               x_krpv_rec.catchup_start_date,
517               x_krpv_rec.catchup_settlement_code,
518               x_krpv_rec.rate_change_start_date,
519               x_krpv_rec.rate_change_frequency_code,
520               x_krpv_rec.rate_change_value,
521               x_krpv_rec.conversion_option_code,
522               x_krpv_rec.next_conversion_date,
523               x_krpv_rec.conversion_type_code,
524               x_krpv_rec.attribute_category,
525               x_krpv_rec.attribute1,
526               x_krpv_rec.attribute2,
527               x_krpv_rec.attribute3,
528               x_krpv_rec.attribute4,
529               x_krpv_rec.attribute5,
530               x_krpv_rec.attribute6,
531               x_krpv_rec.attribute7,
532               x_krpv_rec.attribute8,
533               x_krpv_rec.attribute9,
534               x_krpv_rec.attribute10,
535               x_krpv_rec.attribute11,
536               x_krpv_rec.attribute12,
537               x_krpv_rec.attribute13,
538               x_krpv_rec.attribute14,
539               x_krpv_rec.attribute15,
540               x_krpv_rec.created_by,
541               x_krpv_rec.creation_date,
542               x_krpv_rec.last_updated_by,
543               x_krpv_rec.last_update_date,
544               x_krpv_rec.last_update_login;
545     x_no_data_found := okl_k_rate_params_v_u1_csr%NOTFOUND;
546     CLOSE okl_k_rate_params_v_u1_csr;
547     --RETURN(x_krpv_rec);
548 
549 END;
550 
551 --Bug# 7566308
552 PROCEDURE validate_rate_params_rbk(
553     p_api_version             IN NUMBER,
554     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
555     x_return_status           OUT NOCOPY VARCHAR2,
556     x_msg_count               OUT NOCOPY NUMBER,
557     x_msg_data                OUT NOCOPY VARCHAR2,
558     p_krpv_rec                IN krpv_rec_type,
559     p_orig_eff_from_date      IN DATE DEFAULT NULL) IS
560 
561   CURSOR txn_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
562   SELECT a.date_transaction_occurred,
563          b.date_last_interim_interest_cal
564   FROM   okl_trx_contracts a,
565          okl_k_headers b
566   WHERE  a.khr_id_new   = p_chr_id
567   AND    a.tcn_type = 'TRBK'
568   AND    a.tsu_code = 'ENTERED'
569   --rkuttiya added for 12.1.1 Multi GAAP
570   AND    a.representation_type = 'PRIMARY'
571   --
572   AND    a.khr_id_new = b.id;
573 
574     l_api_name		CONSTANT VARCHAR2(30) := 'VALIDATE_RATE_PARAMS_RBK';
575     l_api_version	CONSTANT NUMBER	      := 1.0;
576     l_count NUMBER;
577     l_interest_processing_started BOOLEAN := FALSE;
578     l_contract_number OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
579     l_orig_rate_rec krpv_rec_type;
580     l_no_data BOOLEAN;
581     l_rebook_date DATE;
582     l_pdt_parameter_rec   OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
583     l_deal_type VARCHAR2(30);
584     l_interest_calculation_basis VARCHAR2(30);
585     l_revenue_recognition_method VARCHAR2(30);
586     l_last_interest_calc_date DATE;
587     l_curr_effective_date DATE;
588     l_product_id NUMBER;
589     l_contract_start_date DATE;
590 
591 begin
592     x_return_status := OKL_API.G_RET_STS_SUCCESS;
593 
594     x_return_status := OKL_API.START_ACTIVITY(
595 			p_api_name      => l_api_name,
596 			p_pkg_name      => g_pkg_name,
597 			p_init_msg_list => p_init_msg_list,
598 			l_api_version   => l_api_version,
599 			p_api_version   => p_api_version,
600 			p_api_type      => G_API_TYPE,
601 			x_return_status => x_return_status);
602 
603 
604     get_product2(
605           p_api_version   => p_api_version,
606           p_init_msg_list => p_init_msg_list,
607           x_return_status => x_return_status,
608           x_msg_count     => x_msg_count,
609           x_msg_data      => x_msg_data,
610           p_khr_id        => p_krpv_rec.khr_id,
611           x_product_id    => l_product_id,
612           x_pdt_parameter_rec => l_pdt_parameter_rec);
613 
614     IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
615         RAISE OKL_API.G_EXCEPTION_ERROR;
616     END IF;
617 
618     l_deal_type := l_pdt_parameter_rec.deal_type;
619     l_interest_calculation_basis := l_pdt_parameter_rec.interest_calculation_basis;
620     l_revenue_recognition_method := l_pdt_parameter_rec.revenue_recognition_method;
621 
622     l_interest_processing_started := interest_processing(
623                                      p_krpv_rec.khr_id,
624                                      l_contract_number,
625                                      l_contract_start_date);
626 
627     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
628           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After l_interest_processing_started...');
629     END IF;
630     IF (l_interest_processing_started) THEN
631       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
632               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_interest_processing_started=TRUE');
633       END IF;
634     ELSE
635       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
636               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_interest_processing_started=FALSE');
637       END IF;
638     END IF;
639     get_rate_rec(
640             p_chr_id => p_krpv_rec.khr_id,
641             p_parameter_type_code => p_krpv_rec.parameter_type_code,
642             p_effective_from_date => p_krpv_rec.effective_from_date,
643             x_krpv_rec => l_orig_rate_rec,
644             x_no_data_found => l_no_data);
645     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
646           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_rate_rec...');
647     END IF;
648 
649     -- If validate_rate_params_rbk is called during create flow, then we need to
650     -- check if rate parameters have been changed from the ones on the previous
651     -- open-ended rate
652     IF (l_no_data) AND (p_orig_eff_from_date IS NOT NULL )THEN
653        get_rate_rec(
654             p_chr_id => p_krpv_rec.khr_id,
655             p_parameter_type_code => p_krpv_rec.parameter_type_code,
656             p_effective_from_date => p_orig_eff_from_date,
657             x_krpv_rec => l_orig_rate_rec,
658             x_no_data_found => l_no_data);
659       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
660           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After get_rate_rec 1...');
661       END IF;
662     END IF;
663 
664     IF (l_interest_processing_started) THEN
665       NULL;
666       --get_rate_rec and compare if some values changed which are not allowed
667       IF NOT(l_no_data) THEN
668         IF ((l_orig_rate_rec.BASE_RATE IS NOT NULL AND
669              l_orig_rate_rec.BASE_RATE <> G_MISS_NUM) OR
670             (p_krpv_rec.BASE_RATE IS NOT NULL AND
671              p_krpv_rec.BASE_RATE <> G_MISS_NUM)) AND
672            (l_orig_rate_rec.BASE_RATE <> p_krpv_rec.BASE_RATE) THEN
673           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
674                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_INT_PROC'
675                               ,p_token1       => 'PARAMETER_NAME'
676                               ,p_token1_value => 'BASE_RATE'
677                               ,p_token2       => 'CONTRACT_NUMBER'
678                               ,p_token2_value => l_contract_number);
679           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
680         END IF;
681 
682         IF ((l_orig_rate_rec.INTEREST_START_DATE IS NOT NULL AND
683              l_orig_rate_rec.INTEREST_START_DATE <> G_MISS_DATE) OR
684             (p_krpv_rec.INTEREST_START_DATE IS NOT NULL AND
685              p_krpv_rec.INTEREST_START_DATE <> G_MISS_DATE)) AND
686            (l_orig_rate_rec.INTEREST_START_DATE <> p_krpv_rec.INTEREST_START_DATE) THEN
687           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
688                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_INT_PROC'
689                               ,p_token1       => 'PARAMETER_NAME'
690                               ,p_token1_value => 'INTEREST_START_DATE'
691                               ,p_token2       => 'CONTRACT_NUMBER'
692                               ,p_token2_value => l_contract_number);
693           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
694         END IF;
695 
696         IF ((l_orig_rate_rec.PRINCIPAL_BASIS_CODE IS NOT NULL AND
697              l_orig_rate_rec.PRINCIPAL_BASIS_CODE <> G_MISS_CHAR) OR
698             (p_krpv_rec.PRINCIPAL_BASIS_CODE IS NOT NULL AND
699              p_krpv_rec.PRINCIPAL_BASIS_CODE <> G_MISS_CHAR)) AND
700            (l_orig_rate_rec.PRINCIPAL_BASIS_CODE <> p_krpv_rec.PRINCIPAL_BASIS_CODE) THEN
701           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
702                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_INT_PROC'
703                               ,p_token1       => 'PARAMETER_NAME'
704                               ,p_token1_value => 'PRINCIPAL_BASIS_CODE'
705                               ,p_token2       => 'CONTRACT_NUMBER'
706                               ,p_token2_value => l_contract_number);
707           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
708         END IF;
709 
710         IF ((l_orig_rate_rec.DAYS_IN_A_MONTH_CODE IS NOT NULL AND
711              l_orig_rate_rec.DAYS_IN_A_MONTH_CODE <> G_MISS_CHAR) OR
712             (p_krpv_rec.DAYS_IN_A_MONTH_CODE IS NOT NULL AND
713              p_krpv_rec.DAYS_IN_A_MONTH_CODE <> G_MISS_CHAR)) AND
714            (l_orig_rate_rec.DAYS_IN_A_MONTH_CODE <> p_krpv_rec.DAYS_IN_A_MONTH_CODE) THEN
715           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
716                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_INT_PROC'
717                               ,p_token1       => 'PARAMETER_NAME'
718                               ,p_token1_value => 'DAYS_IN_A_MONTH_CODE'
719                               ,p_token2       => 'CONTRACT_NUMBER'
720                               ,p_token2_value => l_contract_number);
721           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
722         END IF;
723 
724         IF ((l_orig_rate_rec.DAYS_IN_A_YEAR_CODE IS NOT NULL AND
725              l_orig_rate_rec.DAYS_IN_A_YEAR_CODE <> G_MISS_CHAR) OR
726             (p_krpv_rec.DAYS_IN_A_YEAR_CODE IS NOT NULL AND
727              p_krpv_rec.DAYS_IN_A_YEAR_CODE <> G_MISS_CHAR)) AND
728            (l_orig_rate_rec.DAYS_IN_A_YEAR_CODE <> p_krpv_rec.DAYS_IN_A_YEAR_CODE) THEN
729           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
730                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_INT_PROC'
731                               ,p_token1       => 'PARAMETER_NAME'
732                               ,p_token1_value => 'DAYS_IN_A_YEAR_CODE'
733                               ,p_token2       => 'CONTRACT_NUMBER'
734                               ,p_token2_value => l_contract_number);
735           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
736         END IF;
737 
738         IF ((l_orig_rate_rec.CATCHUP_START_DATE IS NOT NULL AND
739              l_orig_rate_rec.CATCHUP_START_DATE <> G_MISS_DATE) OR
740             (p_krpv_rec.CATCHUP_START_DATE IS NOT NULL AND
741              p_krpv_rec.CATCHUP_START_DATE <> G_MISS_DATE)) AND
742            (l_orig_rate_rec.CATCHUP_START_DATE <> p_krpv_rec.CATCHUP_START_DATE) THEN
743           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
744                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_INT_PROC'
745                               ,p_token1       => 'PARAMETER_NAME'
746                               ,p_token1_value => 'CATCHUP_START_DATE'
747                               ,p_token2       => 'CONTRACT_NUMBER'
748                               ,p_token2_value => l_contract_number);
749           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
750         END IF;
751 
752         IF ((l_orig_rate_rec.CATCHUP_SETTLEMENT_CODE IS NOT NULL AND
753              l_orig_rate_rec.CATCHUP_SETTLEMENT_CODE <> G_MISS_CHAR) OR
754             (p_krpv_rec.CATCHUP_SETTLEMENT_CODE IS NOT NULL AND
755              p_krpv_rec.CATCHUP_SETTLEMENT_CODE <> G_MISS_CHAR)) AND
756            (l_orig_rate_rec.CATCHUP_SETTLEMENT_CODE <> p_krpv_rec.CATCHUP_SETTLEMENT_CODE) THEN
757           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
758                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_INT_PROC'
759                               ,p_token1       => 'PARAMETER_NAME'
760                               ,p_token1_value => 'CATCHUP_SETTLEMENT_CODE'
761                               ,p_token2       => 'CONTRACT_NUMBER'
762                               ,p_token2_value => l_contract_number);
763           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
764         END IF;
765 
766         IF ((l_orig_rate_rec.RATE_CHANGE_START_DATE IS NOT NULL AND
767              l_orig_rate_rec.RATE_CHANGE_START_DATE <> G_MISS_DATE) OR
768             (p_krpv_rec.RATE_CHANGE_START_DATE IS NOT NULL AND
769              p_krpv_rec.RATE_CHANGE_START_DATE <> G_MISS_DATE)) AND
770            (l_orig_rate_rec.RATE_CHANGE_START_DATE <> p_krpv_rec.RATE_CHANGE_START_DATE) THEN
771           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
772                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_INT_PROC'
773                               ,p_token1       => 'PARAMETER_NAME'
774                               ,p_token1_value => 'RATE_CHANGE_START_DATE'
775                               ,p_token2       => 'CONTRACT_NUMBER'
776                               ,p_token2_value => l_contract_number);
777           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
778         END IF;
779       END IF;  -- no_data
780     END IF;  -- rebook_copy
781 
782     IF NOT(l_no_data) THEN
783         -- If any of the rates change, then check effective date
784         FOR txn_rec IN txn_csr (p_krpv_rec.khr_id)
785         LOOP
786           l_rebook_date := txn_rec.date_transaction_occurred;
787           l_last_interest_calc_date := txn_rec.date_last_interim_interest_cal;
788         END LOOP;
789         l_curr_effective_date := l_orig_rate_rec.effective_from_date;
790 
791 
792         IF (((l_orig_rate_rec.INTEREST_INDEX_ID IS NOT NULL AND
793               l_orig_rate_rec.INTEREST_INDEX_ID <> G_MISS_NUM) OR
794              (p_krpv_rec.INTEREST_INDEX_ID IS NOT NULL AND
795               p_krpv_rec.INTEREST_INDEX_ID <> G_MISS_NUM)) AND
796             (l_orig_rate_rec.INTEREST_INDEX_ID <> p_krpv_rec.INTEREST_INDEX_ID))
797         OR
798            (((l_orig_rate_rec.ADDER_RATE IS NOT NULL AND
799               l_orig_rate_rec.ADDER_RATE <> G_MISS_NUM) OR
800              (p_krpv_rec.ADDER_RATE IS NOT NULL AND
801               p_krpv_rec.ADDER_RATE <> G_MISS_NUM)) AND
802             (l_orig_rate_rec.ADDER_RATE <> p_krpv_rec.ADDER_RATE))
803         OR
804            (((l_orig_rate_rec.MAXIMUM_RATE IS NOT NULL AND
805               l_orig_rate_rec.MAXIMUM_RATE <> G_MISS_NUM) OR
806              (p_krpv_rec.MAXIMUM_RATE IS NOT NULL AND
807               p_krpv_rec.MAXIMUM_RATE <> G_MISS_NUM)) AND
808             (l_orig_rate_rec.MAXIMUM_RATE <> p_krpv_rec.MAXIMUM_RATE))
809         OR
810            (((l_orig_rate_rec.MINIMUM_RATE IS NOT NULL AND
811               l_orig_rate_rec.MINIMUM_RATE <> G_MISS_NUM) OR
812              (p_krpv_rec.MINIMUM_RATE IS NOT NULL AND
813               p_krpv_rec.MINIMUM_RATE <> G_MISS_NUM)) AND
814             (l_orig_rate_rec.MINIMUM_RATE <> p_krpv_rec.MINIMUM_RATE))
815         OR
816            (((l_orig_rate_rec.INTEREST_BASIS_CODE IS NOT NULL AND
817               l_orig_rate_rec.INTEREST_BASIS_CODE <> G_MISS_CHAR) OR
818              (p_krpv_rec.INTEREST_BASIS_CODE IS NOT NULL AND
819               p_krpv_rec.INTEREST_BASIS_CODE <> G_MISS_CHAR)) AND
820             (l_orig_rate_rec.INTEREST_BASIS_CODE <> p_krpv_rec.INTEREST_BASIS_CODE))
821         OR
822            (((l_orig_rate_rec.RATE_DELAY_CODE IS NOT NULL AND
823               l_orig_rate_rec.RATE_DELAY_CODE <> G_MISS_CHAR) OR
824              (p_krpv_rec.RATE_DELAY_CODE IS NOT NULL AND
825               p_krpv_rec.RATE_DELAY_CODE <> G_MISS_CHAR)) AND
826             (l_orig_rate_rec.RATE_DELAY_CODE <> p_krpv_rec.RATE_DELAY_CODE))
827         OR
828            (((l_orig_rate_rec.RATE_DELAY_FREQUENCY IS NOT NULL AND
829               l_orig_rate_rec.RATE_DELAY_FREQUENCY <> G_MISS_NUM) OR
830              (p_krpv_rec.RATE_DELAY_FREQUENCY IS NOT NULL AND
831               p_krpv_rec.RATE_DELAY_FREQUENCY <> G_MISS_NUM)) AND
832             (l_orig_rate_rec.RATE_DELAY_FREQUENCY <> p_krpv_rec.RATE_DELAY_FREQUENCY))
833         OR
834            (((l_orig_rate_rec.RATE_CHANGE_FREQUENCY_CODE IS NOT NULL AND
835               l_orig_rate_rec.RATE_CHANGE_FREQUENCY_CODE <> G_MISS_CHAR) OR
836              (p_krpv_rec.RATE_CHANGE_FREQUENCY_CODE IS NOT NULL AND
837               p_krpv_rec.RATE_CHANGE_FREQUENCY_CODE <> G_MISS_CHAR)) AND
838             (l_orig_rate_rec.RATE_CHANGE_FREQUENCY_CODE <> p_krpv_rec.RATE_CHANGE_FREQUENCY_CODE))
839         OR
840            (((l_orig_rate_rec.RATE_CHANGE_VALUE IS NOT NULL AND
841               l_orig_rate_rec.RATE_CHANGE_VALUE <> G_MISS_NUM) OR
842              (p_krpv_rec.RATE_CHANGE_VALUE IS NOT NULL AND
843               p_krpv_rec.RATE_CHANGE_VALUE <> G_MISS_NUM)) AND
844             (l_orig_rate_rec.RATE_CHANGE_VALUE <> p_krpv_rec.RATE_CHANGE_VALUE))
845         THEN
846            -- IF any of the above values changed
847           IF (l_deal_type IN ('LEASEOP', 'LEASEDF', 'LEASEST') AND
848               l_interest_calculation_basis IN ('FIXED', 'FLOAT_FACTORS')) THEN
849             IF (p_krpv_rec.EFFECTIVE_FROM_DATE < l_orig_rate_rec.EFFECTIVE_FROM_DATE) THEN
850               OKC_API.SET_MESSAGE(
851                                p_app_name     => G_APP_NAME
852                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_EFF_DATE');
853               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
854             END IF;
855           ELSIF (l_deal_type IN ('LEASEOP', 'LEASEDF', 'LEASEST') AND
856                  l_interest_calculation_basis = 'REAMORT' ) THEN
857             IF (p_krpv_rec.EFFECTIVE_FROM_DATE <= l_rebook_date) OR
858               (p_krpv_rec.EFFECTIVE_FROM_DATE <= l_last_interest_calc_date)
859             THEN
860               OKC_API.SET_MESSAGE(
861                                p_app_name     => G_APP_NAME
862                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_RBK_DATE');
863               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
864             END IF;
865           ELSIF ((l_deal_type = 'LOAN') AND
866                   l_interest_calculation_basis IN
867                     ('FIXED', 'FLOAT', 'CATCHUP/CLEANUP' )) THEN
868             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
869                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_krpv_rec.effective_from_date=' || p_krpv_rec.effective_from_date);
870               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_rate_rec.effective_from_date=' || l_orig_rate_rec.effective_from_date);
871             END IF;
872             IF (p_krpv_rec.EFFECTIVE_FROM_DATE < l_orig_rate_rec.EFFECTIVE_FROM_DATE) THEN
873               OKC_API.SET_MESSAGE(
874                                p_app_name     => G_APP_NAME
875                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_EFF_DATE');
876               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
877             END IF;
878           ELSIF (l_deal_type = 'LOAN' AND
879                  l_interest_calculation_basis = 'REAMORT') THEN
880             IF (p_krpv_rec.EFFECTIVE_FROM_DATE <= l_rebook_date) OR
881               (p_krpv_rec.EFFECTIVE_FROM_DATE <= l_last_interest_calc_date)
882             THEN
883               OKC_API.SET_MESSAGE(
884                                p_app_name     => G_APP_NAME
885                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_RBK_DATE');
886               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
887             END IF;
888           ELSIF (l_deal_type = 'LOAN-REVOLVING' AND
889                  l_interest_calculation_basis = 'FLOAT') THEN
890             IF (p_krpv_rec.EFFECTIVE_FROM_DATE < l_orig_rate_rec.EFFECTIVE_FROM_DATE) THEN
891               OKC_API.SET_MESSAGE(
892                                p_app_name     => G_APP_NAME
893                               ,p_msg_name     => 'OKL_LLA_VAR_RATE_EFF_DATE');
894               RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
895             END IF;
896           END IF;  -- if deal_type
897         END IF; -- if any rate params changed
898 
899     END IF; -- if no_data
900 
901     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
902 
903     EXCEPTION
904 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
905 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
906 			p_api_name  => l_api_name,
907 			p_pkg_name  => g_pkg_name,
908 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
909 			x_msg_count => x_msg_count,
910 			x_msg_data  => x_msg_data,
911 			p_api_type  => g_api_type);
912 
913 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
914 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
915 			p_api_name  => l_api_name,
916 			p_pkg_name  => g_pkg_name,
917 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
918 			x_msg_count => x_msg_count,
919 			x_msg_data  => x_msg_data,
920 			p_api_type  => g_api_type);
921 
922 	WHEN OTHERS THEN
923       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
924 			p_api_name  => l_api_name,
925 			p_pkg_name  => g_pkg_name,
926 			p_exc_name  => 'OTHERS',
927 			x_msg_count => x_msg_count,
928 			x_msg_data  => x_msg_data,
929 			p_api_type  => g_api_type);
930 end;
931 --Bug# 7566308
932 
933   /* This is to be called from contract import and UI*/
934 --Zero
935 PROCEDURE create_k_rate_params(
936     p_api_version                  IN NUMBER,
937     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
938     x_return_status                OUT NOCOPY VARCHAR2,
939     x_msg_count                    OUT NOCOPY NUMBER,
940     x_msg_data                     OUT NOCOPY VARCHAR2,
941     p_krpv_rec                     IN  krpv_rec_type,
942     x_krpv_rec                     OUT NOCOPY krpv_rec_type,
943     p_validate_flag                IN  VARCHAR2 DEFAULT 'Y') IS
944 
945     CURSOR C1(p_id NUMBER) IS
946     SELECT start_date
947     FROM   OKC_K_HEADERS_B
948     WHERE  ID = p_id;
949 
950     CURSOR C2(p_id NUMBER, p_parameter_type_code VARCHAR2) IS
951     SELECT COUNT(1) COUNT1
952     FROM   OKL_K_RATE_PARAMS
953     WHERE  KHR_ID = p_id
954     AND    PARAMETER_TYPE_CODE = p_parameter_type_code
955     AND    EFFECTIVE_TO_DATE IS NULL;
956 
957     l_api_name		CONSTANT VARCHAR2(30) := 'CREATE_K_RATE_PARAMS';
958     l_api_version	CONSTANT NUMBER	      := 1.0;
959 
960     l_krpv_rec krpv_rec_type;
961     --x_krpv_rec krpv_rec_type;
962     l_count NUMBER;
963     l_rate_count NUMBER;
964     l_k_rate_tbl krpv_tbl_type;
965     l_pdt_parameter_rec   OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
966     l_product_id NUMBER;
967     l_contract_start_date DATE;
968 
969     --Bug# 7566308
970     l_rebook_copy BOOLEAN := FALSE;
971 
972     l_effective_from_date DATE;
973     l_orig_system_source_code VARCHAR2(30);
974     l_orig_system_id1 NUMBER;
975     l_orig_effective_from_date DATE;
976     l_last_interest_cal_date DATE;
977 
978     CURSOR get_effective_from_date_csr(
979           p_khr_id NUMBER,
980           p_parameter_type_code VARCHAR2) IS
981     select rate.effective_from_date,
982            contract.orig_system_source_code,
983            lease.date_last_interim_interest_cal,
984            contract.orig_system_id1
985     FROM   OKL_K_RATE_PARAMS rate,
986            OKC_K_HEADERS_B contract,
987            OKL_K_HEADERS lease
988     WHERE  rate.khr_id = p_khr_id
989     AND    rate.parameter_type_code =  p_parameter_type_code
990     AND    rate.effective_to_date is null
991     AND    rate.khr_id = contract.id
992     AND    contract.id = lease.id;
993 
994     --Cursor to query the last billed due date of the stream.
995     CURSOR get_last_billed_due_date(
996            p_chr_id OKC_K_HEADERS_B.ID%TYPE
997          , p_stream_purpose OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE) IS
998     SELECT MAX(STE.STREAM_ELEMENT_DATE) LAST_STREAM_DUE_DATE
999     FROM  OKL_STRM_ELEMENTS STE
1000         , OKL_STREAMS       STM
1001         , OKL_STRM_TYPE_V   STY
1002         , OKL_K_HEADERS     KHR
1003         , OKC_K_HEADERS_B CHR
1004     WHERE STM.ID         = STE.STM_ID
1005       AND STY.ID         = STM.STY_ID
1006       AND KHR.ID         = STM.KHR_ID
1007       AND CHR.ID         = KHR.ID
1008       AND STE.DATE_BILLED IS NOT NULL
1009       AND CHR.ID         = p_chr_id
1010       AND STY.STREAM_TYPE_PURPOSE  = p_stream_purpose;
1011 
1012     l_last_billed_due_date DATE;
1013     --Bug# 7566308
1014 begin
1015 
1016     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1017 
1018     x_return_status := OKL_API.START_ACTIVITY(
1019 			p_api_name      => l_api_name,
1020 			p_pkg_name      => g_pkg_name,
1021 			p_init_msg_list => p_init_msg_list,
1022 			l_api_version   => l_api_version,
1023 			p_api_version   => p_api_version,
1024 			p_api_type      => G_API_TYPE,
1025 			x_return_status => x_return_status);
1026 
1027     --Bug# 7566308
1028     l_rebook_copy := is_rebook_copy(p_krpv_rec.khr_id);
1029     IF (l_rebook_copy) THEN
1030 
1031       l_effective_from_date := null;
1032       FOR r IN get_effective_from_date_csr(p_krpv_rec.khr_id, p_krpv_rec.parameter_type_code)
1033       LOOP
1034         l_effective_from_date := r.effective_from_date;
1035         l_orig_system_source_code := r.orig_system_source_code;
1036         l_last_interest_cal_date := r.date_last_interim_interest_cal;
1037         l_orig_system_id1 := r.orig_system_id1;
1038       END LOOP;
1039 
1040       validate_rate_params_rbk(
1041           p_api_version   => p_api_version,
1042           p_init_msg_list => p_init_msg_list,
1043           x_return_status => x_return_status,
1044           x_msg_count     => x_msg_count,
1045           x_msg_data      => x_msg_data,
1046           p_krpv_rec      => p_krpv_rec,
1047           p_orig_eff_from_date => l_effective_from_date);
1048 
1049       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1050         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1051       ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1052         RAISE OKL_API.G_EXCEPTION_ERROR;
1053       END IF;
1054 
1055     END IF;
1056     --Bug# 7566308
1057 
1058     FOR r IN C1(p_krpv_rec.khr_id)
1059     LOOP
1060       l_contract_start_date := r.start_date;
1061     END LOOP;
1062     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1063           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_contract_start_date=' || l_contract_start_date);
1064     END IF;
1065 
1066     --Bug# 7566308
1067     IF NOT l_rebook_copy THEN
1068       FOR r IN C2(p_krpv_rec.khr_id, p_krpv_rec.parameter_type_code)
1069       LOOP
1070         l_rate_count := r.count1;
1071       END LOOP;
1072 
1073       IF (l_rate_count > 0) THEN
1074         OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
1075                             ,p_msg_name     => 'OKL_LLA_VAR_RATE_EXISTS');
1076         RAISE OKL_API.G_EXCEPTION_ERROR;
1077       END IF;
1078     END IF;
1079     --Bug# 7566308
1080 
1081     l_krpv_rec.khr_id := p_krpv_rec.khr_id;
1082     l_krpv_rec.parameter_type_code := p_krpv_rec.parameter_type_code;
1083     l_krpv_rec.effective_from_date := p_krpv_rec.effective_from_Date;
1084     l_krpv_rec.interest_index_id := p_krpv_rec.interest_index_id;
1085     l_krpv_rec.base_rate := p_krpv_rec.base_rate;
1086     l_krpv_rec.interest_start_date := p_krpv_rec.interest_start_date;
1087     l_krpv_rec.adder_rate := p_krpv_rec.adder_rate;
1088     l_krpv_rec.maximum_rate := p_krpv_rec.maximum_rate;
1089     l_krpv_rec.minimum_rate := p_krpv_rec.minimum_rate;
1090     l_krpv_rec.principal_basis_code := p_krpv_rec.principal_basis_code;
1091     l_krpv_rec.days_in_a_month_code := p_krpv_rec.days_in_a_month_code;
1092     l_krpv_rec.days_in_a_year_code := p_krpv_rec.days_in_a_year_code;
1093     l_krpv_rec.interest_basis_code := p_krpv_rec.interest_basis_code;
1094 
1095     l_krpv_rec.rate_delay_code := p_krpv_rec.rate_delay_code;
1096     l_krpv_rec.rate_delay_frequency := p_krpv_rec.rate_delay_frequency;
1097     l_krpv_rec.compounding_frequency_code := p_krpv_rec.compounding_frequency_code;
1098     l_krpv_rec.calculation_formula_id := p_krpv_rec.calculation_formula_id;
1099     l_krpv_rec.catchup_basis_code := p_krpv_rec.catchup_basis_code;
1100     l_krpv_rec.catchup_start_date := p_krpv_rec.catchup_start_date;
1101     l_krpv_rec.catchup_settlement_code := p_krpv_rec.catchup_settlement_code;
1102     l_krpv_rec.catchup_frequency_code := p_krpv_rec.catchup_frequency_code;
1103     l_krpv_rec.rate_change_start_date := p_krpv_rec.rate_change_start_date;
1104     l_krpv_rec.rate_change_frequency_code := p_krpv_rec.rate_change_frequency_code;
1105     l_krpv_rec.rate_change_value := p_krpv_rec.rate_change_value;
1106 
1107     l_krpv_rec.conversion_option_code := p_krpv_rec.conversion_option_code;
1108     l_krpv_rec.next_conversion_date := p_krpv_rec.next_conversion_date;
1109     l_krpv_rec.conversion_type_code := p_krpv_rec.conversion_type_code;
1110     print_krpv_rec(l_krpv_rec);
1111 
1112     select count(1) into l_count
1113     FROM   OKL_K_RATE_PARAMS
1114     WHERE  KHR_ID = p_krpv_rec.khr_id
1115     AND    EFFECTIVE_FROM_DATE = p_krpv_rec.effective_from_date
1116     AND    PARAMETER_TYPE_CODE = p_krpv_rec.parameter_type_code;
1117 
1118     l_k_rate_tbl(1) := l_krpv_rec;
1119     --Bug# 7440232
1120     IF (p_validate_flag IN ('Y','F')) THEN
1121       get_product2(
1122           p_api_version   => p_api_version,
1123           p_init_msg_list => p_init_msg_list,
1124           x_return_status => x_return_status,
1125           x_msg_count     => x_msg_count,
1126           x_msg_data      => x_msg_data,
1127           p_khr_id        => l_krpv_rec.khr_id,
1128           x_product_id    => l_product_id,
1129           x_pdt_parameter_rec => l_pdt_parameter_rec);
1130 
1131       --Bug# 7440232
1132       validate_k_rate_params(
1133           p_api_version   => p_api_version,
1134           p_init_msg_list => p_init_msg_list,
1135           x_return_status => x_return_status,
1136           x_msg_count     => x_msg_count,
1137           x_msg_data      => x_msg_data,
1138           p_product_id    => l_product_id,
1139           p_k_rate_tbl    => l_k_rate_tbl,
1140           p_validate_flag =>  p_validate_flag);
1141 
1142       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1143         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1144       ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1145         RAISE OKL_API.G_EXCEPTION_ERROR;
1146       END IF;
1147 
1148       -- Bug 4722746
1149       IF (l_pdt_parameter_rec.interest_calculation_basis = 'CATCHUP/CLEANUP'
1150           AND l_pdt_parameter_rec.revenue_recognition_method = 'STREAMS') THEN
1151 
1152         --print('Catchup :1');
1153         IF (l_krpv_rec.catchup_frequency_code is NULL OR
1154             l_krpv_rec.catchup_frequency_code = G_MISS_CHAR) AND
1155            (l_krpv_rec.catchup_start_date is NULL OR
1156             l_krpv_rec.catchup_start_date = G_MISS_DATE) AND
1157            (l_krpv_rec.catchup_settlement_code is NULL OR
1158             l_krpv_rec.catchup_settlement_code = G_MISS_CHAR) AND
1159            (l_krpv_rec.catchup_basis_code is NULL OR
1160             l_krpv_rec.catchup_basis_code = G_MISS_CHAR) THEN
1161           -- All four are null
1162            IF (l_krpv_rec.rate_change_start_date is NULL OR
1163                l_krpv_rec.rate_change_start_date = G_MISS_DATE) AND
1164               (l_krpv_rec.rate_change_value is NULL OR
1165                l_krpv_rec.rate_change_value = G_MISS_NUM) AND
1166               (l_krpv_rec.rate_change_frequency_code is NULL OR
1167                l_krpv_rec.rate_change_frequency_code = G_MISS_CHAR) AND
1168               (l_krpv_rec.compounding_frequency_code is NULL OR
1169                l_krpv_rec.compounding_frequency_code = G_MISS_CHAR) AND
1170               (l_krpv_rec.calculation_formula_id is NULL OR
1171                l_krpv_rec.calculation_formula_id = G_MISS_NUM) AND
1172               (l_krpv_rec.rate_delay_code is NULL OR
1173                l_krpv_rec.rate_delay_code = G_MISS_CHAR) AND
1174               (l_krpv_rec.rate_delay_frequency is NULL OR
1175                l_krpv_rec.rate_delay_frequency = G_MISS_NUM) THEN
1176               NULL;
1177            ELSE
1178              OKC_API.set_message(p_app_name => G_APP_NAME,
1179                                  p_msg_name => G_REQUIRED_VALUE,
1180                                  p_token1 => G_COL_NAME_TOKEN,
1181                                  p_token1_value => 'CATCHUP FREQUENCY');
1182              RAISE OKL_API.G_EXCEPTION_ERROR;
1183            END IF;
1184 
1185         ELSE
1186           -- One of the four is not null
1187           IF (l_krpv_rec.catchup_frequency_code is NOT NULL AND
1188               l_krpv_rec.catchup_frequency_code <> G_MISS_CHAR) THEN
1189             NULL;
1190           ELSE
1191             OKC_API.set_message(p_app_name => G_APP_NAME,
1192                                 p_msg_name => G_REQUIRED_VALUE,
1193                                 p_token1 => G_COL_NAME_TOKEN,
1194                                 p_token1_value => 'Catchup Frequency');
1195             RAISE OKL_API.G_EXCEPTION_ERROR;
1196           END IF;
1197 
1198           --print('Catchup :2');
1199           IF (l_krpv_rec.catchup_start_date is NOT NULL AND
1200               l_krpv_rec.catchup_start_date <> G_MISS_DATE) THEN
1201             NULL;
1202           ELSE
1203             -- Default from contract start date
1204             l_krpv_rec.catchup_start_date := l_contract_start_date;
1205           END IF;
1206 
1207           --print('Catchup :3');
1208           IF (l_krpv_rec.catchup_settlement_code is NOT NULL AND
1209               l_krpv_rec.catchup_settlement_code <> G_MISS_CHAR) THEN
1210             NULL;
1211           ELSE
1212             OKC_API.set_message(p_app_name => G_APP_NAME,
1213                                 p_msg_name => G_REQUIRED_VALUE,
1214                                 p_token1 => G_COL_NAME_TOKEN,
1215                                 p_token1_value => 'Catchup Settlement');
1216             RAISE OKL_API.G_EXCEPTION_ERROR;
1217           END IF;
1218 
1219           --print('Catchup :4');
1220           IF (l_krpv_rec.catchup_basis_code is NOT NULL AND
1221               l_krpv_rec.catchup_basis_code <> G_MISS_CHAR) THEN
1222             NULL;
1223           ELSE
1224             OKC_API.set_message(p_app_name => G_APP_NAME,
1225                                 p_msg_name => G_REQUIRED_VALUE,
1226                                 p_token1 => G_COL_NAME_TOKEN,
1227                                 p_token1_value => 'Catchup Basis');
1228             RAISE OKL_API.G_EXCEPTION_ERROR;
1229           END IF;
1230 
1231 
1232         END IF;
1233 
1234       END IF; -- if STREAMS and CATCHUP/CLEANUP
1235 
1236       --Bug# 7566308
1237       -- Moved validations on adding a new effective dated rate during rebook
1238       -- from copy_k_rate_params to here
1239       -- Start Rebook checks
1240       IF (l_rebook_copy) THEN
1241 
1242         -- Bug 4999888
1243         IF (l_pdt_parameter_rec.interest_calculation_basis = 'FIXED' and l_pdt_parameter_rec.revenue_recognition_method='ACTUAL') THEN
1244           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1245             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'copy:Inside FIXED and ACTUAL...');
1246           END IF;
1247 
1248           OPEN get_last_billed_due_date(l_orig_system_id1, 'LOAN_PAYMENT');
1249           FETCH get_last_billed_due_date
1250           INTO l_last_billed_due_date;
1251           CLOSE get_last_billed_due_date;
1252 
1253           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1254             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_last_billed_due_date=' || l_last_billed_due_date);
1255             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_krpv_rec.effective_from_Date=' || p_krpv_rec.effective_from_Date);
1256           END IF;
1257           IF (l_last_billed_due_date IS NOT NULL AND
1258               p_krpv_rec.effective_from_Date <= l_last_billed_due_date) THEN
1259             OKC_API.set_message(p_app_name => G_APP_NAME,
1260                                 p_msg_name => 'OKL_LLA_VAR_RATE_INT_DATE',
1261                                 p_token1 => 'EFF_DATE',
1262                                 p_token1_value => p_krpv_rec.effective_from_Date,
1263                                 p_token2 => 'INTEREST_DATE',
1264                                 p_token2_value => l_last_billed_due_date);
1265             RAISE OKL_API.G_EXCEPTION_ERROR;
1266           END IF;
1267         END IF;
1268 
1269         -- Bug 4999888
1270         IF (l_pdt_parameter_rec.interest_calculation_basis IN ('FLOAT', 'REAMORT', 'FLOAT_FACTORS', 'CATCHUP/CLEANUP')) THEN
1271           IF (l_last_interest_cal_date IS NOT NULL) THEN
1272             IF (p_krpv_rec.effective_from_Date <= l_last_interest_cal_date) THEN
1273               OKC_API.set_message(p_app_name => G_APP_NAME,
1274                                   p_msg_name => 'OKL_LLA_VAR_RATE_INT_DATE',
1275                                   p_token1 => 'EFF_DATE',
1276                                   p_token1_value => p_krpv_rec.effective_from_Date,
1277                                   p_token2 => 'INTEREST_DATE',
1278                                   p_token2_value => l_last_interest_cal_date);
1279               RAISE OKL_API.G_EXCEPTION_ERROR;
1280             END IF;
1281           END IF;
1282         END IF;
1283       END IF;
1284       -- End Rebook checks
1285       --Bug# 7566308
1286 
1287     END IF; -- if validate_flag
1288 
1289     IF (l_count > 0) THEN
1290       OKL_KRP_PVT.update_row(
1291          p_api_version,
1292          p_init_msg_list,
1293          x_return_status,
1294          x_msg_count,
1295          x_msg_data,
1296          l_krpv_rec,
1297          x_krpv_rec);
1298     ELSE
1299       OKL_KRP_PVT.insert_row(
1300          p_api_version,
1301          p_init_msg_list,
1302          x_return_status,
1303          x_msg_count,
1304          x_msg_data,
1305          l_krpv_rec,
1306          x_krpv_rec);
1307 
1308       --Bug# 7566308
1309       -- End date the previous open-ended rate record
1310       --  when a new effective dated rate is added
1311       IF (l_rebook_copy) THEN
1312         FOR r IN get_effective_from_date_csr(l_orig_system_id1,
1313                                              p_krpv_rec.parameter_type_code)
1314         LOOP
1315           l_orig_effective_from_date := r.effective_from_date;
1316         END LOOP;
1317 
1318         UPDATE  OKL_K_RATE_PARAMS
1319         SET   EFFECTIVE_TO_DATE = p_krpv_rec.effective_from_Date - 1
1320         WHERE KHR_ID = p_krpv_rec.khr_id
1321         AND   PARAMETER_TYPE_CODE = p_krpv_rec.parameter_type_code
1322         AND   EFFECTIVE_FROM_DATE = l_effective_from_date
1323         AND   EFFECTIVE_TO_DATE IS NULL;
1324       END IF;
1325       --Bug# 7566308
1326     END IF;
1327 
1328     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1329       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1330     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1331       RAISE OKL_API.G_EXCEPTION_ERROR;
1332     END IF;
1333 
1334     okl_contract_status_pub.cascade_lease_status_edit
1335                 (p_api_version     => p_api_version,
1336                  p_init_msg_list   => p_init_msg_list,
1337                  x_return_status   => x_return_status,
1338                  x_msg_count       => x_msg_count,
1339                  x_msg_data        => x_msg_data,
1340                  p_chr_id          => l_krpv_rec.khr_id);
1341 
1342     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
1343 	       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1344     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
1345 	       raise OKL_API.G_EXCEPTION_ERROR;
1346     End If;
1347 
1348     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
1349 
1350     EXCEPTION
1351 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
1352 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1353 			p_api_name  => l_api_name,
1354 			p_pkg_name  => g_pkg_name,
1355 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
1356 			x_msg_count => x_msg_count,
1357 			x_msg_data  => x_msg_data,
1358 			p_api_type  => g_api_type);
1359 
1360 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1361 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1362 			p_api_name  => l_api_name,
1363 			p_pkg_name  => g_pkg_name,
1364 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
1365 			x_msg_count => x_msg_count,
1366 			x_msg_data  => x_msg_data,
1367 			p_api_type  => g_api_type);
1368 
1369 	WHEN OTHERS THEN
1370       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1371 			p_api_name  => l_api_name,
1372 			p_pkg_name  => g_pkg_name,
1373 			p_exc_name  => 'OTHERS',
1374 			x_msg_count => x_msg_count,
1375 			x_msg_data  => x_msg_data,
1376 			p_api_type  => g_api_type);
1377 
1378 end;
1379 
1380 -- First
1381 PROCEDURE create_k_rate_params(
1382     p_api_version                  IN NUMBER,
1383     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
1384     x_return_status                OUT NOCOPY VARCHAR2,
1385     x_msg_count                    OUT NOCOPY NUMBER,
1386     x_msg_data                     OUT NOCOPY VARCHAR2,
1387     p_krpr_rec                     IN  krpr_rec_type,
1388     x_krpr_rec                     OUT NOCOPY krpr_rec_type) is
1389 
1390     l_api_name		CONSTANT VARCHAR2(30) := 'CREATE_K_RATE_PARAMS';
1391     l_api_version	CONSTANT NUMBER	      := 1.0;
1392 
1393     l_krpv_rec krpv_rec_type;
1394     x_krpv_rec krpv_rec_type;
1395     l_count NUMBER;
1396 
1397 begin
1398 
1399     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1400 
1401     x_return_status := OKL_API.START_ACTIVITY(
1402 			p_api_name      => l_api_name,
1403 			p_pkg_name      => g_pkg_name,
1404 			p_init_msg_list => p_init_msg_list,
1405 			l_api_version   => l_api_version,
1406 			p_api_version   => p_api_version,
1407 			p_api_type      => G_API_TYPE,
1408 			x_return_status => x_return_status);
1409 
1410 
1411     l_krpv_rec.khr_id := p_krpr_rec.khr_id;
1412     l_krpv_rec.parameter_type_code := p_krpr_rec.parameter_type_code;
1413     l_krpv_rec.effective_from_date := p_krpr_rec.effective_from_Date;
1414     l_krpv_rec.interest_index_id := p_krpr_rec.interest_index_id;
1415     l_krpv_rec.base_rate := p_krpr_rec.base_rate;
1416     l_krpv_rec.interest_start_date := p_krpr_rec.interest_start_date;
1417     l_krpv_rec.adder_rate := p_krpr_rec.adder_rate;
1418     l_krpv_rec.maximum_rate := p_krpr_rec.maximum_rate;
1419     l_krpv_rec.minimum_rate := p_krpr_rec.minimum_rate;
1420     l_krpv_rec.principal_basis_code := p_krpr_rec.principal_basis_code;
1421     l_krpv_rec.days_in_a_month_code := p_krpr_rec.days_in_a_month_code;
1422     l_krpv_rec.days_in_a_year_code := p_krpr_rec.days_in_a_year_code;
1423     l_krpv_rec.interest_basis_code := p_krpr_rec.interest_basis_code;
1424 
1425     select count(1) into l_count
1426     FROM   OKL_K_RATE_PARAMS
1427     WHERE  KHR_ID = p_krpr_rec.khr_id
1428     AND    EFFECTIVE_FROM_DATE = p_krpr_rec.effective_from_date
1429     AND    PARAMETER_TYPE_CODE = p_krpr_rec.parameter_type_code;
1430 
1431     IF (l_count > 0) THEN
1432       OKL_KRP_PVT.update_row(
1433          p_api_version,
1434          p_init_msg_list,
1435          x_return_status,
1436          x_msg_count,
1437          x_msg_data,
1438          l_krpv_rec,
1439          x_krpv_rec);
1440     ELSE
1441       OKL_KRP_PVT.insert_row(
1442          p_api_version,
1443          p_init_msg_list,
1444          x_return_status,
1445          x_msg_count,
1446          x_msg_data,
1447          l_krpv_rec,
1448          x_krpv_rec);
1449     END IF;
1450 
1451     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1452       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1453     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1454       RAISE OKL_API.G_EXCEPTION_ERROR;
1455     END IF;
1456 
1457     x_krpr_rec.khr_id := x_krpv_rec.khr_id;
1458     x_krpr_rec.parameter_type_code := x_krpv_rec.parameter_type_code;
1459     x_krpr_rec.effective_from_date := x_krpv_rec.effective_from_date;
1460     x_krpr_rec.effective_to_date := x_krpv_rec.effective_to_date;
1461     x_krpr_rec.interest_index_id := x_krpv_rec.interest_index_id;
1462     x_krpr_rec.base_rate := x_krpv_rec.base_rate;
1463     x_krpr_rec.interest_start_date := x_krpv_rec.interest_start_date;
1464     x_krpr_rec.adder_rate := x_krpv_rec.adder_rate;
1465     x_krpr_rec.maximum_rate := x_krpv_rec.maximum_rate;
1466     x_krpr_rec.minimum_rate := x_krpv_rec.minimum_rate;
1467     x_krpr_rec.principal_basis_code := x_krpv_rec.principal_basis_code;
1468     x_krpr_rec.days_in_a_month_code := x_krpv_rec.days_in_a_month_code;
1469     x_krpr_rec.days_in_a_year_code := x_krpv_rec.days_in_a_year_code;
1470     x_krpr_rec.interest_basis_code := x_krpv_rec.interest_basis_code;
1471 
1472     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
1473 
1474     EXCEPTION
1475 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
1476 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1477 			p_api_name  => l_api_name,
1478 			p_pkg_name  => g_pkg_name,
1479 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
1480 			x_msg_count => x_msg_count,
1481 			x_msg_data  => x_msg_data,
1482 			p_api_type  => g_api_type);
1483 
1484 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1485 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1486 			p_api_name  => l_api_name,
1487 			p_pkg_name  => g_pkg_name,
1488 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
1489 			x_msg_count => x_msg_count,
1490 			x_msg_data  => x_msg_data,
1491 			p_api_type  => g_api_type);
1492 
1493 	WHEN OTHERS THEN
1494       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1495 			p_api_name  => l_api_name,
1496 			p_pkg_name  => g_pkg_name,
1497 			p_exc_name  => 'OTHERS',
1498 			x_msg_count => x_msg_count,
1499 			x_msg_data  => x_msg_data,
1500 			p_api_type  => g_api_type);
1501 
1502 end;
1503 
1504 -- Second
1505 PROCEDURE create_k_rate_params(
1506     p_api_version                  IN NUMBER,
1507     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
1508     x_return_status                OUT NOCOPY VARCHAR2,
1509     x_msg_count                    OUT NOCOPY NUMBER,
1510     x_msg_data                     OUT NOCOPY VARCHAR2,
1511     p_krpar_rec                    IN  krpar_rec_type,
1512     x_krpar_rec                    OUT NOCOPY krpar_rec_type) IS
1513 
1514     l_api_name		CONSTANT VARCHAR2(30) := 'CREATE_K_RATE_PARAMS';
1515     l_api_version	CONSTANT NUMBER	      := 1.0;
1516     l_krpv_rec krpv_rec_type;
1517     x_krpv_rec krpv_rec_type;
1518     l_count NUMBER;
1519 
1520 begin
1521     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1522 
1523     x_return_status := OKL_API.START_ACTIVITY(
1524 			p_api_name      => l_api_name,
1525 			p_pkg_name      => g_pkg_name,
1526 			p_init_msg_list => p_init_msg_list,
1527 			l_api_version   => l_api_version,
1528 			p_api_version   => p_api_version,
1529 			p_api_type      => G_API_TYPE,
1530 			x_return_status => x_return_status);
1531 
1532     select count(1) into l_count
1533     FROM   OKL_K_RATE_PARAMS
1534     WHERE  KHR_ID = p_krpar_rec.khr_id
1535     AND    EFFECTIVE_FROM_DATE = p_krpar_rec.effective_from_date
1536     AND    PARAMETER_TYPE_CODE = p_krpar_rec.parameter_type_code;
1537 
1538 
1539     l_krpv_rec.khr_id := p_krpar_rec.khr_id;
1540     l_krpv_rec.parameter_type_code := p_krpar_rec.parameter_type_code;
1541     l_krpv_rec.effective_from_date := p_krpar_rec.effective_from_date;
1542     l_krpv_rec.effective_to_date := p_krpar_rec.effective_to_date;
1543     l_krpv_rec.rate_delay_code := p_krpar_rec.rate_delay_code;
1544     l_krpv_rec.rate_delay_frequency := p_krpar_rec.rate_delay_frequency;
1545     l_krpv_rec.compounding_frequency_code := p_krpar_rec.compounding_frequency_code;
1546     l_krpv_rec.calculation_formula_id := p_krpar_rec.calculation_formula_id;
1547     l_krpv_rec.catchup_basis_code := p_krpar_rec.catchup_basis_code;
1548     l_krpv_rec.catchup_start_date := p_krpar_rec.catchup_start_date;
1549     l_krpv_rec.catchup_settlement_code := p_krpar_rec.catchup_settlement_code;
1550     l_krpv_rec.rate_change_start_date := p_krpar_rec.rate_change_start_date;
1551     l_krpv_rec.rate_change_frequency_code := p_krpar_rec.rate_change_frequency_code;
1552     l_krpv_rec.rate_change_value := p_krpar_rec.rate_change_value;
1553     IF (l_count > 0) then
1554       OKL_KRP_PVT.update_row(
1555        p_api_version,
1556        p_init_msg_list,
1557        x_return_status,
1558        x_msg_count,
1559        x_msg_data,
1560        l_krpv_rec,
1561        x_krpv_rec);
1562     ELSE
1563       OKL_KRP_PVT.insert_row(
1564        p_api_version,
1565        p_init_msg_list,
1566        x_return_status,
1567        x_msg_count,
1568        x_msg_data,
1569        l_krpv_rec,
1570        x_krpv_rec);
1571     END IF;
1572 
1573     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1574       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1575     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1576       RAISE OKL_API.G_EXCEPTION_ERROR;
1577     END IF;
1578 
1579     x_krpar_rec.khr_id := x_krpv_rec.khr_id;
1580     x_krpar_rec.parameter_type_code := x_krpv_rec.parameter_type_code;
1581     x_krpar_rec.effective_from_date := x_krpv_rec.effective_from_date;
1582     x_krpar_rec.effective_to_date := x_krpv_rec.effective_to_date;
1583     x_krpar_rec.rate_delay_code := x_krpv_rec.rate_delay_code;
1584     x_krpar_rec.rate_delay_frequency := x_krpv_rec.rate_delay_frequency;
1585     x_krpar_rec.compounding_frequency_code := x_krpv_rec.compounding_frequency_code;
1586     x_krpar_rec.calculation_formula_id := x_krpv_rec.calculation_formula_id;
1587     x_krpar_rec.catchup_basis_code := x_krpv_rec.catchup_basis_code;
1588     x_krpar_rec.catchup_start_date := x_krpv_rec.catchup_start_date;
1589     x_krpar_rec.catchup_settlement_code := x_krpv_rec.catchup_settlement_code;
1590     x_krpar_rec.rate_change_start_date := x_krpv_rec.rate_change_start_date;
1591     x_krpar_rec.rate_change_frequency_code := x_krpv_rec.rate_change_frequency_code;
1592     x_krpar_rec.rate_change_value := x_krpv_rec.rate_change_value;
1593 
1594     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
1595 
1596     EXCEPTION
1597 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
1598 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1599 			p_api_name  => l_api_name,
1600 			p_pkg_name  => g_pkg_name,
1601 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
1602 			x_msg_count => x_msg_count,
1603 			x_msg_data  => x_msg_data,
1604 			p_api_type  => g_api_type);
1605 
1606 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1607 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1608 			p_api_name  => l_api_name,
1609 			p_pkg_name  => g_pkg_name,
1610 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
1611 			x_msg_count => x_msg_count,
1612 			x_msg_data  => x_msg_data,
1613 			p_api_type  => g_api_type);
1614 
1615 	WHEN OTHERS THEN
1616       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1617 			p_api_name  => l_api_name,
1618 			p_pkg_name  => g_pkg_name,
1619 			p_exc_name  => 'OTHERS',
1620 			x_msg_count => x_msg_count,
1621 			x_msg_data  => x_msg_data,
1622 			p_api_type  => g_api_type);
1623 end;
1624 
1625 -- Third
1626 PROCEDURE create_k_rate_params(
1627     p_api_version                  IN NUMBER,
1628     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
1629     x_return_status                OUT NOCOPY VARCHAR2,
1630     x_msg_count                    OUT NOCOPY NUMBER,
1631     x_msg_data                     OUT NOCOPY VARCHAR2,
1632     p_krpc_rec                     IN  krpc_rec_type,
1633     x_krpc_rec                     OUT NOCOPY krpc_rec_type) IS
1634 
1635     l_api_name		CONSTANT VARCHAR2(30) := 'CREATE_K_RATE_PARAMS';
1636     l_api_version	CONSTANT NUMBER	      := 1.0;
1637     l_krpv_rec krpv_rec_type;
1638     x_krpv_rec krpv_rec_type;
1639     l_count NUMBER;
1640 
1641 begin
1642     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1643 
1644     x_return_status := OKL_API.START_ACTIVITY(
1645 			p_api_name      => l_api_name,
1646 			p_pkg_name      => g_pkg_name,
1647 			p_init_msg_list => p_init_msg_list,
1648 			l_api_version   => l_api_version,
1649 			p_api_version   => p_api_version,
1650 			p_api_type      => G_API_TYPE,
1651 			x_return_status => x_return_status);
1652 
1653     select count(1) into l_count
1654     FROM   OKL_K_RATE_PARAMS
1655     WHERE  KHR_ID = p_krpc_rec.khr_id
1656     AND    EFFECTIVE_FROM_DATE = p_krpc_rec.effective_from_date
1657     AND    PARAMETER_TYPE_CODE = p_krpc_rec.parameter_type_code;
1658 
1659     l_krpv_rec.khr_id := p_krpc_rec.khr_id;
1660     l_krpv_rec.parameter_type_code := p_krpc_rec.parameter_type_code;
1661     l_krpv_rec.effective_from_date := p_krpc_rec.effective_from_date;
1662     l_krpv_rec.effective_to_date := p_krpc_rec.effective_to_date;
1663     l_krpv_rec.conversion_option_code := p_krpc_rec.conversion_option_code;
1664     l_krpv_rec.next_conversion_date := p_krpc_rec.next_conversion_date;
1665     l_krpv_rec.conversion_type_code := p_krpc_rec.conversion_type_code;
1666 
1667     IF (l_count > 0) then
1668       OKL_KRP_PVT.update_row(
1669        p_api_version,
1670        p_init_msg_list,
1671        x_return_status,
1672        x_msg_count,
1673        x_msg_data,
1674        l_krpv_rec,
1675        x_krpv_rec);
1676     ELSE
1677       OKL_KRP_PVT.insert_row(
1678        p_api_version,
1679        p_init_msg_list,
1680        x_return_status,
1681        x_msg_count,
1682        x_msg_data,
1683        l_krpv_rec,
1684        x_krpv_rec);
1685     END IF;
1686 
1687     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1688       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1689     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1690       RAISE OKL_API.G_EXCEPTION_ERROR;
1691     END IF;
1692 
1693     x_krpc_rec.khr_id := x_krpv_rec.khr_id;
1694     x_krpc_rec.parameter_type_code := x_krpv_rec.parameter_type_code;
1695     x_krpc_rec.effective_from_date := x_krpv_rec.effective_from_date;
1696     x_krpc_rec.effective_to_date := x_krpv_rec.effective_to_date;
1697     x_krpc_rec.conversion_option_code := x_krpv_rec.conversion_option_code;
1698     x_krpc_rec.next_conversion_date := x_krpv_rec.next_conversion_date;
1699     x_krpc_rec.conversion_type_code := x_krpv_rec.conversion_type_code;
1700 
1701     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
1702 
1703     EXCEPTION
1704 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
1705 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1706 			p_api_name  => l_api_name,
1707 			p_pkg_name  => g_pkg_name,
1708 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
1709 			x_msg_count => x_msg_count,
1710 			x_msg_data  => x_msg_data,
1711 			p_api_type  => g_api_type);
1712 
1713 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1714 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1715 			p_api_name  => l_api_name,
1716 			p_pkg_name  => g_pkg_name,
1717 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
1718 			x_msg_count => x_msg_count,
1719 			x_msg_data  => x_msg_data,
1720 			p_api_type  => g_api_type);
1721 
1722 	WHEN OTHERS THEN
1723       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
1724 			p_api_name  => l_api_name,
1725 			p_pkg_name  => g_pkg_name,
1726 			p_exc_name  => 'OTHERS',
1727 			x_msg_count => x_msg_count,
1728 			x_msg_data  => x_msg_data,
1729 			p_api_type  => g_api_type);
1730 end;
1731 
1732   /* For both UI and contract import */
1733 --Zero
1734 PROCEDURE update_k_rate_params(
1735     p_api_version             IN NUMBER,
1736     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
1737     x_return_status           OUT NOCOPY VARCHAR2,
1738     x_msg_count               OUT NOCOPY NUMBER,
1739     x_msg_data                OUT NOCOPY VARCHAR2,
1740     p_krpv_rec                IN krpv_rec_type,
1741     x_krpv_rec                OUT NOCOPY krpv_rec_type) IS
1742 
1743   CURSOR txn_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
1744   SELECT a.date_transaction_occurred,
1745          b.date_last_interim_interest_cal
1746   FROM   okl_trx_contracts a,
1747          okl_k_headers b
1748   WHERE  a.khr_id_new   = p_chr_id
1749   AND    a.tcn_type = 'TRBK'
1750   AND    a.tsu_code = 'ENTERED'
1751   --rkuttiya added for 12.1.1 Multi GAAP
1752   AND    a.representation_type = 'PRIMARY'
1753   --
1754   AND    a.khr_id_new = b.id;
1755 
1756     l_api_name		CONSTANT VARCHAR2(30) := 'UPDATE_K_RATE_PARAMS';
1757     l_api_version	CONSTANT NUMBER	      := 1.0;
1758     l_krpv_rec krpv_rec_type;
1759     --x_krpv_rec krpv_rec_type;
1760     l_count NUMBER;
1761     l_rebook_copy BOOLEAN := FALSE;
1762     l_interest_processing_started BOOLEAN := FALSE;
1763     l_contract_number OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
1764     l_orig_rate_rec krpv_rec_type;
1765     l_no_data BOOLEAN;
1766     l_rebook_date DATE;
1767     l_pdt_parameter_rec   OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
1768     l_deal_type VARCHAR2(30);
1769     l_interest_calculation_basis VARCHAR2(30);
1770     l_revenue_recognition_method VARCHAR2(30);
1771     l_last_interest_calc_date DATE;
1772     l_curr_effective_date DATE;
1773     l_product_id NUMBER;
1774     l_contract_start_date DATE;
1775     l_krpv_tbl krpv_tbl_type;
1776     --l_k_rate_tbl krpv_tbl_type;
1777 begin
1778     x_return_status := OKL_API.G_RET_STS_SUCCESS;
1779 
1780     x_return_status := OKL_API.START_ACTIVITY(
1781 			p_api_name      => l_api_name,
1782 			p_pkg_name      => g_pkg_name,
1783 			p_init_msg_list => p_init_msg_list,
1784 			l_api_version   => l_api_version,
1785 			p_api_version   => p_api_version,
1786 			p_api_type      => G_API_TYPE,
1787 			x_return_status => x_return_status);
1788 
1789     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1790           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Update_k_rate_params:Printing input p_krpv_rec...');
1791     END IF;
1792     print_krpv_rec(p_krpv_rec);
1793 
1794     get_product2(
1795           p_api_version   => p_api_version,
1796           p_init_msg_list => p_init_msg_list,
1797           x_return_status => x_return_status,
1798           x_msg_count     => x_msg_count,
1799           x_msg_data      => x_msg_data,
1800           p_khr_id        => p_krpv_rec.khr_id,
1801           x_product_id    => l_product_id,
1802           x_pdt_parameter_rec => l_pdt_parameter_rec);
1803 
1804     IF (x_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
1805         RAISE OKL_API.G_EXCEPTION_ERROR;
1806     END IF;
1807 
1808     l_deal_type := l_pdt_parameter_rec.deal_type;
1809     l_interest_calculation_basis := l_pdt_parameter_rec.interest_calculation_basis;
1810     l_revenue_recognition_method := l_pdt_parameter_rec.revenue_recognition_method;
1811 
1812     --Bug# 7566308
1813     l_rebook_copy := is_rebook_copy(p_krpv_rec.khr_id);
1814     IF (l_rebook_copy) THEN
1815       validate_rate_params_rbk(
1816           p_api_version   => p_api_version,
1817           p_init_msg_list => p_init_msg_list,
1818           x_return_status => x_return_status,
1819           x_msg_count     => x_msg_count,
1820           x_msg_data      => x_msg_data,
1821           p_krpv_rec      => p_krpv_rec);
1822 
1823       IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1824         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1825       ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1826         RAISE OKL_API.G_EXCEPTION_ERROR;
1827       END IF;
1828     END IF;
1829     --Bug# 7566308
1830 
1831     l_krpv_rec.khr_id := p_krpv_rec.khr_id;
1832     l_krpv_rec.parameter_type_code := p_krpv_rec.parameter_type_code;
1833     l_krpv_rec.effective_from_date := p_krpv_rec.effective_from_date;
1834     l_krpv_rec.effective_to_date := p_krpv_rec.effective_to_date;
1835     l_krpv_rec.interest_index_id := p_krpv_rec.interest_index_id;
1836     l_krpv_rec.base_rate := p_krpv_rec.base_rate;
1837     l_krpv_rec.interest_start_date := p_krpv_rec.interest_start_date;
1838     l_krpv_rec.adder_rate := p_krpv_rec.adder_rate;
1839     l_krpv_rec.maximum_rate := p_krpv_rec.maximum_rate;
1840     l_krpv_rec.minimum_rate := p_krpv_rec.minimum_rate;
1841     l_krpv_rec.principal_basis_code := p_krpv_rec.principal_basis_code;
1842     l_krpv_rec.days_in_a_month_code := p_krpv_rec.days_in_a_month_code;
1843     l_krpv_rec.days_in_a_year_code := p_krpv_rec.days_in_a_year_code;
1844     l_krpv_rec.interest_basis_code := p_krpv_rec.interest_basis_code;
1845     l_krpv_rec.rate_delay_code := p_krpv_rec.rate_delay_code;
1846     l_krpv_rec.rate_delay_frequency := p_krpv_rec.rate_delay_frequency;
1847     l_krpv_rec.compounding_frequency_code := p_krpv_rec.compounding_frequency_code;
1848     l_krpv_rec.calculation_formula_id := p_krpv_rec.calculation_formula_id;
1849     l_krpv_rec.catchup_basis_code := p_krpv_rec.catchup_basis_code;
1850     l_krpv_rec.catchup_start_date := p_krpv_rec.catchup_start_date;
1851     l_krpv_rec.catchup_settlement_code := p_krpv_rec.catchup_settlement_code;
1852     l_krpv_rec.catchup_frequency_code := p_krpv_rec.catchup_frequency_code;
1853     l_krpv_rec.rate_change_start_date := p_krpv_rec.rate_change_start_date;
1854     l_krpv_rec.rate_change_frequency_code := p_krpv_rec.rate_change_frequency_code;
1855     l_krpv_rec.rate_change_value := p_krpv_rec.rate_change_value;
1856     l_krpv_rec.conversion_option_code := p_krpv_rec.conversion_option_code;
1857     l_krpv_rec.next_conversion_date := p_krpv_rec.next_conversion_date;
1858     l_krpv_rec.conversion_type_code := p_krpv_rec.conversion_type_code;
1859 
1860     l_krpv_tbl(1) := l_krpv_rec;
1861 
1862     /*get_product2(
1863           p_api_version   => p_api_version,
1864           p_init_msg_list => p_init_msg_list,
1865           x_return_status => x_return_status,
1866           x_msg_count     => x_msg_count,
1867           x_msg_data      => x_msg_data,
1868           p_khr_id        => l_krpv_rec.khr_id,
1869           x_product_id    => l_product_id,
1870           x_pdt_parameter_rec => l_pdt_parameter_rec); */
1871 
1872     --Bug# 7440232
1873     validate_k_rate_params(
1874           p_api_version   => p_api_version,
1875           p_init_msg_list => p_init_msg_list,
1876           x_return_status => x_return_status,
1877           x_msg_count     => x_msg_count,
1878           x_msg_data      => x_msg_data,
1879           p_product_id    => l_product_id,
1880           p_k_rate_tbl    => l_krpv_tbl,
1881           p_validate_flag => 'F');
1882 
1883     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
1884         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
1885     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
1886         RAISE OKL_API.G_EXCEPTION_ERROR;
1887     END IF;
1888 
1889       -- Bug 4722746
1890       IF (l_pdt_parameter_rec.interest_calculation_basis = 'CATCHUP/CLEANUP'
1891           AND l_pdt_parameter_rec.revenue_recognition_method = 'STREAMS') THEN
1892 
1893         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1894                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Catchup :5.0');
1895         END IF;
1896         IF (l_krpv_rec.catchup_frequency_code is NULL OR
1897             l_krpv_rec.catchup_frequency_code = G_MISS_CHAR) AND
1898            (l_krpv_rec.catchup_start_date is NULL OR
1899             l_krpv_rec.catchup_start_date = G_MISS_DATE) AND
1900            (l_krpv_rec.catchup_settlement_code is NULL OR
1901             l_krpv_rec.catchup_settlement_code = G_MISS_CHAR) AND
1902            (l_krpv_rec.catchup_basis_code is NULL OR
1903             l_krpv_rec.catchup_basis_code = G_MISS_CHAR) THEN
1904           -- All four are null
1905            IF (l_krpv_rec.rate_change_start_date is NULL OR
1906                l_krpv_rec.rate_change_start_date = G_MISS_DATE) AND
1907               (l_krpv_rec.rate_change_value is NULL OR
1908                l_krpv_rec.rate_change_value = G_MISS_NUM) AND
1909               (l_krpv_rec.rate_change_frequency_code is NULL OR
1910                l_krpv_rec.rate_change_frequency_code = G_MISS_CHAR) AND
1911               (l_krpv_rec.compounding_frequency_code is NULL OR
1912                l_krpv_rec.compounding_frequency_code = G_MISS_CHAR) AND
1913               (l_krpv_rec.calculation_formula_id is NULL OR
1914                l_krpv_rec.calculation_formula_id = G_MISS_NUM) AND
1915               (l_krpv_rec.rate_delay_code is NULL OR
1916                l_krpv_rec.rate_delay_code = G_MISS_CHAR) AND
1917               (l_krpv_rec.rate_delay_frequency is NULL OR
1918                l_krpv_rec.rate_delay_frequency = G_MISS_NUM) THEN
1919               NULL;
1920            ELSE
1921              OKC_API.set_message(p_app_name => G_APP_NAME,
1922                                  p_msg_name => G_REQUIRED_VALUE,
1923                                  p_token1 => G_COL_NAME_TOKEN,
1924                                  p_token1_value => 'CATCHUP FREQUENCY');
1925              RAISE OKL_API.G_EXCEPTION_ERROR;
1926            END IF;
1927 
1928         ELSE
1929           -- One of the four is not null
1930           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1931                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Catchup :5.1');
1932           END IF;
1933           IF (l_krpv_rec.catchup_frequency_code is NOT NULL AND
1934               l_krpv_rec.catchup_frequency_code <> G_MISS_CHAR) THEN
1935             NULL;
1936           ELSE
1937             OKC_API.set_message(p_app_name => G_APP_NAME,
1938                                 p_msg_name => G_REQUIRED_VALUE,
1939                                 p_token1 => G_COL_NAME_TOKEN,
1940                                 p_token1_value => 'Catchup Frequency');
1941             RAISE OKL_API.G_EXCEPTION_ERROR;
1942           END IF;
1943 
1944           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1945                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Catchup :6');
1946           END IF;
1947           IF (l_krpv_rec.catchup_start_date is NOT NULL AND
1948               l_krpv_rec.catchup_start_date <> G_MISS_DATE) THEN
1949             NULL;
1950           ELSE
1951             -- Default from contract start date
1952             l_krpv_rec.catchup_start_date := l_contract_start_date;
1953           END IF;
1954 
1955           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1956                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Catchup :7');
1957           END IF;
1958           IF (l_krpv_rec.catchup_settlement_code is NOT NULL AND
1959               l_krpv_rec.catchup_settlement_code <> G_MISS_CHAR) THEN
1960             NULL;
1961           ELSE
1962             OKC_API.set_message(p_app_name => G_APP_NAME,
1963                                 p_msg_name => G_REQUIRED_VALUE,
1964                                 p_token1 => G_COL_NAME_TOKEN,
1965                                 p_token1_value => 'Catchup Settlement');
1966             RAISE OKL_API.G_EXCEPTION_ERROR;
1967           END IF;
1968 
1969           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1970                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Catchup :8');
1971           END IF;
1972           IF (l_krpv_rec.catchup_basis_code is NOT NULL AND
1973               l_krpv_rec.catchup_basis_code <> G_MISS_CHAR) THEN
1974             NULL;
1975           ELSE
1976             OKC_API.set_message(p_app_name => G_APP_NAME,
1977                                 p_msg_name => G_REQUIRED_VALUE,
1978                                 p_token1 => G_COL_NAME_TOKEN,
1979                                 p_token1_value => 'Catchup Basis');
1980             RAISE OKL_API.G_EXCEPTION_ERROR;
1981           END IF;
1982 
1983 
1984         END IF;
1985 
1986       END IF; -- if STREAMS and CATCHUP/CLEANUP
1987 
1988         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1989                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before calling update_row() ');
1990         END IF;
1991     OKL_KRP_PVT.update_row(
1992        p_api_version,
1993        p_init_msg_list,
1994        x_return_status,
1995        x_msg_count,
1996        x_msg_data,
1997        l_krpv_rec,
1998        x_krpv_rec);
1999 
2000         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2001                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After update_row() finished');
2002         END IF;
2003     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2004       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2005     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2006       RAISE OKL_API.G_EXCEPTION_ERROR;
2007     END IF;
2008 
2009         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2010                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Before calling cascade_lease_status_update...');
2011         END IF;
2012     okl_contract_status_pub.cascade_lease_status_edit
2013                 (p_api_version     => p_api_version,
2014                  p_init_msg_list   => p_init_msg_list,
2015                  x_return_status   => x_return_status,
2016                  x_msg_count       => x_msg_count,
2017                  x_msg_data        => x_msg_data,
2018                  p_chr_id          => l_krpv_rec.khr_id);
2019 
2020     If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
2021 	       raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2022     Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
2023 	       raise OKL_API.G_EXCEPTION_ERROR;
2024     End If;
2025         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2026                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After cascade_lease_status_update finished ...');
2027         END IF;
2028 
2029     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
2030 
2031     EXCEPTION
2032 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
2033 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2034 			p_api_name  => l_api_name,
2035 			p_pkg_name  => g_pkg_name,
2036 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
2037 			x_msg_count => x_msg_count,
2038 			x_msg_data  => x_msg_data,
2039 			p_api_type  => g_api_type);
2040 
2041 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2042 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2043 			p_api_name  => l_api_name,
2044 			p_pkg_name  => g_pkg_name,
2045 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2046 			x_msg_count => x_msg_count,
2047 			x_msg_data  => x_msg_data,
2048 			p_api_type  => g_api_type);
2049 
2050 	WHEN OTHERS THEN
2051       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2052 			p_api_name  => l_api_name,
2053 			p_pkg_name  => g_pkg_name,
2054 			p_exc_name  => 'OTHERS',
2055 			x_msg_count => x_msg_count,
2056 			x_msg_data  => x_msg_data,
2057 			p_api_type  => g_api_type);
2058 end;
2059 
2060 -- First
2061 PROCEDURE update_k_rate_params(
2062     p_api_version             IN NUMBER,
2063     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
2064     x_return_status           OUT NOCOPY VARCHAR2,
2065     x_msg_count               OUT NOCOPY NUMBER,
2066     x_msg_data                OUT NOCOPY VARCHAR2,
2067     p_krpr_rec                IN krpr_rec_type,
2068     x_krpr_rec                OUT NOCOPY krpr_rec_type) IS
2069 
2070     l_api_name		CONSTANT VARCHAR2(30) := 'UPDATE_K_RATE_PARAMS';
2071     l_api_version	CONSTANT NUMBER	      := 1.0;
2072     l_krpv_rec krpv_rec_type;
2073     x_krpv_rec krpv_rec_type;
2074     l_count NUMBER;
2075 
2076 begin
2077     x_return_status := OKL_API.G_RET_STS_SUCCESS;
2078 
2079     x_return_status := OKL_API.START_ACTIVITY(
2080 			p_api_name      => l_api_name,
2081 			p_pkg_name      => g_pkg_name,
2082 			p_init_msg_list => p_init_msg_list,
2083 			l_api_version   => l_api_version,
2084 			p_api_version   => p_api_version,
2085 			p_api_type      => G_API_TYPE,
2086 			x_return_status => x_return_status);
2087 
2088     l_krpv_rec.khr_id := p_krpr_rec.khr_id;
2089     l_krpv_rec.parameter_type_code := p_krpr_rec.parameter_type_code;
2090     l_krpv_rec.effective_from_date := p_krpr_rec.effective_from_date;
2091     l_krpv_rec.effective_to_date := p_krpr_rec.effective_to_date;
2092     l_krpv_rec.interest_index_id := p_krpr_rec.interest_index_id;
2093     l_krpv_rec.base_rate := p_krpr_rec.base_rate;
2094     l_krpv_rec.interest_start_date := p_krpr_rec.interest_start_date;
2095     l_krpv_rec.adder_rate := p_krpr_rec.adder_rate;
2096     l_krpv_rec.maximum_rate := p_krpr_rec.maximum_rate;
2097     l_krpv_rec.minimum_rate := p_krpr_rec.minimum_rate;
2098     l_krpv_rec.principal_basis_code := p_krpr_rec.principal_basis_code;
2099     l_krpv_rec.days_in_a_month_code := p_krpr_rec.days_in_a_month_code;
2100     l_krpv_rec.days_in_a_year_code := p_krpr_rec.days_in_a_year_code;
2101     l_krpv_rec.interest_basis_code := p_krpr_rec.interest_basis_code;
2102 
2103     OKL_KRP_PVT.update_row(
2104        p_api_version,
2105        p_init_msg_list,
2106        x_return_status,
2107        x_msg_count,
2108        x_msg_data,
2109        l_krpv_rec,
2110        x_krpv_rec);
2111 
2112     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2113       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2114     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2115       RAISE OKL_API.G_EXCEPTION_ERROR;
2116     END IF;
2117 
2118     x_krpr_rec.khr_id := x_krpv_rec.khr_id;
2119     x_krpr_rec.parameter_type_code := x_krpv_rec.parameter_type_code;
2120     x_krpr_rec.effective_from_date := x_krpv_rec.effective_from_date;
2121     x_krpr_rec.effective_to_date := x_krpv_rec.effective_to_date;
2122     x_krpr_rec.interest_index_id := x_krpv_rec.interest_index_id;
2123     x_krpr_rec.base_rate := x_krpv_rec.base_rate;
2124     x_krpr_rec.interest_start_date := x_krpv_rec.interest_start_date;
2125     x_krpr_rec.adder_rate := x_krpv_rec.adder_rate;
2126     x_krpr_rec.maximum_rate := x_krpv_rec.maximum_rate;
2127     x_krpr_rec.minimum_rate := x_krpv_rec.minimum_rate;
2128     x_krpr_rec.principal_basis_code := x_krpv_rec.principal_basis_code;
2129     x_krpr_rec.days_in_a_month_code := x_krpv_rec.days_in_a_month_code;
2130     x_krpr_rec.days_in_a_year_code := x_krpv_rec.days_in_a_year_code;
2131     x_krpr_rec.interest_basis_code := x_krpv_rec.interest_basis_code;
2132 
2133     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
2134 
2135     EXCEPTION
2136 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
2137 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2138 			p_api_name  => l_api_name,
2139 			p_pkg_name  => g_pkg_name,
2140 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
2141 			x_msg_count => x_msg_count,
2142 			x_msg_data  => x_msg_data,
2143 			p_api_type  => g_api_type);
2144 
2145 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2146 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2147 			p_api_name  => l_api_name,
2148 			p_pkg_name  => g_pkg_name,
2149 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2150 			x_msg_count => x_msg_count,
2151 			x_msg_data  => x_msg_data,
2152 			p_api_type  => g_api_type);
2153 
2154 	WHEN OTHERS THEN
2155       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2156 			p_api_name  => l_api_name,
2157 			p_pkg_name  => g_pkg_name,
2158 			p_exc_name  => 'OTHERS',
2159 			x_msg_count => x_msg_count,
2160 			x_msg_data  => x_msg_data,
2161 			p_api_type  => g_api_type);
2162 end;
2163 
2164 -- Second
2165 PROCEDURE update_k_rate_params(
2166     p_api_version             IN NUMBER,
2167     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
2168     x_return_status           OUT NOCOPY VARCHAR2,
2169     x_msg_count               OUT NOCOPY NUMBER,
2170     x_msg_data                OUT NOCOPY VARCHAR2,
2171     p_krpar_rec               IN krpar_rec_type,
2172     x_krpar_rec               OUT NOCOPY krpar_rec_type) IS
2173 
2174     l_api_name		CONSTANT VARCHAR2(30) := 'UPDATE_K_RATE_PARAMS';
2175     l_api_version	CONSTANT NUMBER	      := 1.0;
2176     l_krpv_rec krpv_rec_type;
2177     x_krpv_rec krpv_rec_type;
2178     l_count NUMBER;
2179 
2180 begin
2181     x_return_status := OKL_API.G_RET_STS_SUCCESS;
2182 
2183     x_return_status := OKL_API.START_ACTIVITY(
2184 			p_api_name      => l_api_name,
2185 			p_pkg_name      => g_pkg_name,
2186 			p_init_msg_list => p_init_msg_list,
2187 			l_api_version   => l_api_version,
2188 			p_api_version   => p_api_version,
2189 			p_api_type      => G_API_TYPE,
2190 			x_return_status => x_return_status);
2191 
2192     l_krpv_rec.khr_id := p_krpar_rec.khr_id;
2193     l_krpv_rec.parameter_type_code := p_krpar_rec.parameter_type_code;
2194     l_krpv_rec.effective_from_date := p_krpar_rec.effective_from_date;
2195     l_krpv_rec.effective_to_date := p_krpar_rec.effective_to_date;
2196     l_krpv_rec.rate_delay_code := p_krpar_rec.rate_delay_code;
2197     l_krpv_rec.rate_delay_frequency := p_krpar_rec.rate_delay_frequency;
2198     l_krpv_rec.compounding_frequency_code := p_krpar_rec.compounding_frequency_code;
2199     l_krpv_rec.calculation_formula_id := p_krpar_rec.calculation_formula_id;
2200     l_krpv_rec.catchup_basis_code := p_krpar_rec.catchup_basis_code;
2201     l_krpv_rec.catchup_start_date := p_krpar_rec.catchup_start_date;
2202     l_krpv_rec.catchup_settlement_code := p_krpar_rec.catchup_settlement_code;
2203     l_krpv_rec.rate_change_start_date := p_krpar_rec.rate_change_start_date;
2204     l_krpv_rec.rate_change_frequency_code := p_krpar_rec.rate_change_frequency_code;
2205     l_krpv_rec.rate_change_value := p_krpar_rec.rate_change_value;
2206 
2207     OKL_KRP_PVT.update_row(
2208        p_api_version,
2209        p_init_msg_list,
2210        x_return_status,
2211        x_msg_count,
2212        x_msg_data,
2213        l_krpv_rec,
2214        x_krpv_rec);
2215 
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 
2222     x_krpar_rec.khr_id := x_krpv_rec.khr_id;
2223     x_krpar_rec.parameter_type_code := x_krpv_rec.parameter_type_code;
2224     x_krpar_rec.effective_from_date := x_krpv_rec.effective_from_date;
2225     x_krpar_rec.effective_to_date := x_krpv_rec.effective_to_date;
2226     x_krpar_rec.rate_delay_code := x_krpv_rec.rate_delay_code;
2227     x_krpar_rec.rate_delay_frequency := x_krpv_rec.rate_delay_frequency;
2228     x_krpar_rec.compounding_frequency_code := x_krpv_rec.compounding_frequency_code;
2229     x_krpar_rec.calculation_formula_id := x_krpv_rec.calculation_formula_id;
2230     x_krpar_rec.catchup_basis_code := x_krpv_rec.catchup_basis_code;
2231     x_krpar_rec.catchup_start_date := x_krpv_rec.catchup_start_date;
2232     x_krpar_rec.catchup_settlement_code := x_krpv_rec.catchup_settlement_code;
2233     x_krpar_rec.rate_change_start_date := x_krpv_rec.rate_change_start_date;
2234     x_krpar_rec.rate_change_frequency_code := x_krpv_rec.rate_change_frequency_code;
2235     x_krpar_rec.rate_change_value := x_krpv_rec.rate_change_value;
2236 
2237     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
2238 
2239     EXCEPTION
2240 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
2241 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2242 			p_api_name  => l_api_name,
2243 			p_pkg_name  => g_pkg_name,
2244 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
2245 			x_msg_count => x_msg_count,
2246 			x_msg_data  => x_msg_data,
2247 			p_api_type  => g_api_type);
2248 
2249 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2250 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2251 			p_api_name  => l_api_name,
2252 			p_pkg_name  => g_pkg_name,
2253 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2254 			x_msg_count => x_msg_count,
2255 			x_msg_data  => x_msg_data,
2256 			p_api_type  => g_api_type);
2257 
2258 	WHEN OTHERS THEN
2259       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2260 			p_api_name  => l_api_name,
2261 			p_pkg_name  => g_pkg_name,
2262 			p_exc_name  => 'OTHERS',
2263 			x_msg_count => x_msg_count,
2264 			x_msg_data  => x_msg_data,
2265 			p_api_type  => g_api_type);
2266 end;
2267 
2268 -- Third
2269 PROCEDURE update_k_rate_params(
2270     p_api_version             IN NUMBER,
2271     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
2272     x_return_status           OUT NOCOPY VARCHAR2,
2273     x_msg_count               OUT NOCOPY NUMBER,
2274     x_msg_data                OUT NOCOPY VARCHAR2,
2275     p_krpc_rec                IN krpc_rec_type,
2276     x_krpc_rec                OUT NOCOPY krpc_rec_type) IS
2277 
2278     l_api_name		CONSTANT VARCHAR2(30) := 'UPDATE_K_RATE_PARAMS';
2279     l_api_version	CONSTANT NUMBER	      := 1.0;
2280     l_krpv_rec krpv_rec_type;
2281     x_krpv_rec krpv_rec_type;
2282     l_count NUMBER;
2283 
2284 begin
2285     x_return_status := OKL_API.G_RET_STS_SUCCESS;
2286 
2287     x_return_status := OKL_API.START_ACTIVITY(
2288 			p_api_name      => l_api_name,
2289 			p_pkg_name      => g_pkg_name,
2290 			p_init_msg_list => p_init_msg_list,
2291 			l_api_version   => l_api_version,
2292 			p_api_version   => p_api_version,
2293 			p_api_type      => G_API_TYPE,
2294 			x_return_status => x_return_status);
2295 
2296     l_krpv_rec.khr_id := p_krpc_rec.khr_id;
2297     l_krpv_rec.parameter_type_code := p_krpc_rec.parameter_type_code;
2298     l_krpv_rec.effective_from_date := p_krpc_rec.effective_from_date;
2299     l_krpv_rec.effective_to_date := p_krpc_rec.effective_to_date;
2300     l_krpv_rec.conversion_option_code := p_krpc_rec.conversion_option_code;
2301     l_krpv_rec.next_conversion_date := p_krpc_rec.next_conversion_date;
2302     l_krpv_rec.conversion_type_code := p_krpc_rec.conversion_type_code;
2303 
2304     OKL_KRP_PVT.update_row(
2305        p_api_version,
2306        p_init_msg_list,
2307        x_return_status,
2308        x_msg_count,
2309        x_msg_data,
2310        l_krpv_rec,
2311        x_krpv_rec);
2312 
2313     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2314       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2315     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2316       RAISE OKL_API.G_EXCEPTION_ERROR;
2317     END IF;
2318 
2319     x_krpc_rec.khr_id := x_krpv_rec.khr_id;
2320     x_krpc_rec.parameter_type_code := x_krpv_rec.parameter_type_code;
2321     x_krpc_rec.effective_from_date := x_krpv_rec.effective_from_date;
2322     x_krpc_rec.effective_to_date := x_krpv_rec.effective_to_date;
2323     x_krpc_rec.conversion_option_code := x_krpv_rec.conversion_option_code;
2324     x_krpc_rec.next_conversion_date := x_krpv_rec.next_conversion_date;
2325     x_krpc_rec.conversion_type_code := x_krpv_rec.conversion_type_code;
2326 
2327     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
2328 
2329     EXCEPTION
2330 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
2331 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2332 			p_api_name  => l_api_name,
2333 			p_pkg_name  => g_pkg_name,
2334 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
2335 			x_msg_count => x_msg_count,
2336 			x_msg_data  => x_msg_data,
2337 			p_api_type  => g_api_type);
2338 
2339 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2340 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2341 			p_api_name  => l_api_name,
2342 			p_pkg_name  => g_pkg_name,
2343 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2344 			x_msg_count => x_msg_count,
2345 			x_msg_data  => x_msg_data,
2346 			p_api_type  => g_api_type);
2347 
2348 	WHEN OTHERS THEN
2349       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2350 			p_api_name  => l_api_name,
2351 			p_pkg_name  => g_pkg_name,
2352 			p_exc_name  => 'OTHERS',
2353 			x_msg_count => x_msg_count,
2354 			x_msg_data  => x_msg_data,
2355 			p_api_type  => g_api_type);
2356 end;
2357 
2358 PROCEDURE delete_k_rate_params(
2359     p_api_version             IN NUMBER,
2360     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
2361     x_return_status           OUT NOCOPY VARCHAR2,
2362     x_msg_count               OUT NOCOPY NUMBER,
2363     x_msg_data                OUT NOCOPY VARCHAR2,
2364     p_krpdel_tbl              IN krpdel_tbl_type) IS
2365 
2366     l_api_name		CONSTANT VARCHAR2(30) := 'DELETE_K_RATE_PARAMS';
2367     l_api_version	CONSTANT NUMBER	      := 1.0;
2368     l_krpv_rec krpv_rec_type;
2369     l_krpv_rec2 krpv_rec_type;
2370     l_krpv_rec3 krpv_rec_type;
2371 
2372     CURSOR get_effective_to_date_csr(
2373               p_khr_id NUMBER,
2374               p_parameter_type_code VARCHAR2,
2375               p_effective_from_date DATE) IS
2376     select rate.effective_to_date,
2377            contract.sts_code,
2378            contract.orig_system_source_code,
2379            contract.orig_system_id1
2380     FROM   OKL_K_RATE_PARAMS rate,
2381            OKC_K_HEADERS_B contract
2382     WHERE  rate.khr_id = p_khr_id
2383     AND    rate.parameter_type_code =  p_parameter_type_code
2384     AND    rate.effective_from_date = p_effective_from_date
2385     AND    rate.khr_id = contract.id;
2386 
2387     CURSOR get_orig_effective_from_dt_csr(
2388               p_khr_id NUMBER,
2389               p_parameter_type_code VARCHAR2) IS
2390     select rate.effective_from_date
2391     FROM   OKL_K_RATE_PARAMS rate
2392     WHERE  rate.khr_id = p_khr_id
2393     AND    rate.parameter_type_code =  p_parameter_type_code
2394     AND    rate.effective_to_date IS NULL;
2395 
2396     l_all_rate_params_null BOOLEAN;
2397     l_parameter_type_code VARCHAR2(30);
2398     l_effective_to_date DATE;
2399     l_sts_code OKC_K_HEADERS_B.STS_CODE%TYPE;
2400     l_orig_system_source_code OKC_K_HEADERS_B.ORIG_SYSTEM_SOURCE_CODE%TYPE;
2401     l_orig_system_id1 OKC_K_HEADERS_B.ORIG_SYSTEM_ID1%TYPE;
2402     l_orig_effective_from_date DATE;
2403     l_del_count NUMBER := 0; -- Bug 4874280
2404     l_khr_id NUMBER;
2405 begin
2406     x_return_status := OKL_API.G_RET_STS_SUCCESS;
2407 
2408     x_return_status := OKL_API.START_ACTIVITY(
2409 			p_api_name      => l_api_name,
2410 			p_pkg_name      => g_pkg_name,
2411 			p_init_msg_list => p_init_msg_list,
2412 			l_api_version   => l_api_version,
2413 			p_api_version   => p_api_version,
2414 			p_api_type      => G_API_TYPE,
2415 			x_return_status => x_return_status);
2416 
2417     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2418           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In delete_k_rate_params...');
2419     END IF;
2420     IF (p_krpdel_tbl.COUNT > 0) THEN
2421     FOR i in p_krpdel_tbl.FIRST..p_krpdel_tbl.LAST
2422     LOOP
2423       -- AKP: todo (change actual lookup values)
2424       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2425               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Delete:rate_type=' || p_krpdel_tbl(i).rate_type);
2426         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Delete:khr_id=' || p_krpdel_tbl(i).khr_id);
2427         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Delete:effective_from_date=' || p_krpdel_tbl(i).effective_from_date);
2428       END IF;
2429       l_khr_id := p_krpdel_tbl(i).khr_id;
2430       --Bug# 7440232
2431       IF (p_krpdel_tbl(i).rate_type IN ('INTEREST_RATE_PARAMS', 'CONVERSION_BASIS')) THEN
2432         l_parameter_type_code := 'ACTUAL';
2433       --Bug# 7440232
2434       ELSIF (p_krpdel_tbl(i).rate_type IN ('INTEREST_RATE_PARAMS_CONV')) THEN
2435         l_parameter_type_code := 'CONVERSION';
2436       ELSE
2437         OKC_API.set_message(p_app_name => G_APP_NAME,
2438                             p_msg_name => 'OKL_LLA_VAR_RATE_INV_PARAM');
2439         RAISE OKL_API.G_EXCEPTION_ERROR;
2440       END IF;
2441 
2442       FOR r IN get_effective_to_date_csr(
2443                       p_krpdel_tbl(i).khr_id,
2444                       l_parameter_type_code,
2445                       p_krpdel_tbl(i).effective_from_date)
2446       LOOP
2447         l_effective_to_date := r.effective_to_date;
2448         l_sts_code := r.sts_code;
2449         l_orig_system_source_code := r.orig_system_source_code;
2450         l_orig_system_id1 := r.orig_system_id1;
2451       END LOOP;
2452 
2453       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2454               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_system_source_code=' || l_orig_system_source_code);
2455         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_system_id1=' || l_orig_system_id1);
2456       END IF;
2457       IF (l_effective_to_date IS NOT NULL) THEN
2458         OKC_API.set_message(p_app_name => G_APP_NAME,
2459                             p_msg_name => 'OKL_LLA_VAR_RATE_DELETE_ERR');
2460         RAISE OKL_API.G_EXCEPTION_ERROR;
2461       END IF;
2462 
2463       --Bug# 7440232
2464       IF (l_sts_code = 'BOOKED') THEN
2465         OKC_API.set_message(p_app_name => G_APP_NAME,
2466                             p_msg_name => 'OKL_LLA_VAR_RATE_DELETE_ERR1');
2467         RAISE OKL_API.G_EXCEPTION_ERROR;
2468       END IF;
2469 
2470       IF (l_orig_system_source_code = 'OKL_REBOOK') THEN
2471 
2472           FOR r IN get_orig_effective_from_dt_csr(
2473                         --p_krpdel_tbl(i).khr_id,
2474                         l_orig_system_id1,
2475                         l_parameter_type_code)
2476           LOOP
2477             l_orig_effective_from_date := r.effective_from_date;
2478             IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2479                           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_orig_effective_from_date=' || l_orig_effective_from_date);
2480               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'krpdel.effective_from_date=' || p_krpdel_tbl(i).effective_from_date);
2481               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'krpdel.khr_id=' || p_krpdel_tbl(i).khr_id);
2482               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_parameter_type_code=' || l_parameter_type_code);
2483             END IF;
2484           END LOOP;
2485 
2486           --Bug# 7440232
2487           IF (l_orig_effective_from_date =
2488                   p_krpdel_tbl(i).effective_from_date) THEN
2489             OKC_API.set_message(p_app_name => G_APP_NAME,
2490                                 p_msg_name => 'OKL_LLA_VAR_RATE_DELETE_ERR2');
2491             RAISE OKL_API.G_EXCEPTION_ERROR;
2492           END IF;
2493 
2494           /*UPDATE OKL_K_RATE_PARAMS
2495           SET    EFFECTIVE_TO_DATE = NULL
2496           WHERE  KHR_ID = p_krpdel_tbl(i).khr_id
2497           AND    PARAMETER_TYPE_CODE = l_parameter_type_code
2498           AND    EFFECTIVE_TO_DATE = p_krpdel_tbl(i).effective_from_date - 1;*/
2499       END IF;
2500 
2501     SELECT KHR_ID, PARAMETER_TYPE_CODE, EFFECTIVE_FROM_DATE,
2502       EFFECTIVE_TO_DATE, INTEREST_INDEX_ID, BASE_RATE,
2503       INTEREST_START_DATE, ADDER_RATE, MAXIMUM_RATE,
2504       MINIMUM_RATE, PRINCIPAL_BASIS_CODE, DAYS_IN_A_MONTH_CODE,
2505       DAYS_IN_A_YEAR_CODE, INTEREST_BASIS_CODE, RATE_DELAY_CODE,
2506       RATE_DELAY_FREQUENCY, COMPOUNDING_FREQUENCY_CODE, CALCULATION_FORMULA_ID,
2507       CATCHUP_BASIS_CODE, CATCHUP_START_DATE, CATCHUP_SETTLEMENT_CODE,
2508       RATE_CHANGE_START_DATE, RATE_CHANGE_FREQUENCY_CODE, RATE_CHANGE_VALUE,
2509       CONVERSION_OPTION_CODE, NEXT_CONVERSION_DATE, CONVERSION_TYPE_CODE,
2510       ATTRIBUTE_CATEGORY, ATTRIBUTE1, ATTRIBUTE2,
2511       ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5,
2512       ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8,
2513       ATTRIBUTE9, ATTRIBUTE10, ATTRIBUTE11,
2514       ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14,
2515       ATTRIBUTE15, created_by, creation_date,
2516       last_updated_by, last_update_date, last_update_login,
2517       CATCHUP_FREQUENCY_CODE
2518     INTO
2519       l_krpv_rec.KHR_ID, l_krpv_rec.parameter_type_code, l_krpv_rec.effective_from_date,
2520       l_krpv_rec.EFFECTIVE_TO_DATE, l_krpv_rec.INTEREST_INDEX_ID, l_krpv_rec.BASE_RATE,
2521       l_krpv_rec.INTEREST_START_DATE, l_krpv_rec.ADDER_RATE, l_krpv_rec.MAXIMUM_RATE,
2522       l_krpv_rec.MINIMUM_RATE, l_krpv_rec.PRINCIPAL_BASIS_CODE, l_krpv_rec.DAYS_IN_A_MONTH_CODE,
2523       l_krpv_rec.DAYS_IN_A_YEAR_CODE, l_krpv_rec.INTEREST_BASIS_CODE, l_krpv_rec.RATE_DELAY_CODE,
2524       l_krpv_rec.RATE_DELAY_FREQUENCY, l_krpv_rec.COMPOUNDING_FREQUENCY_CODE, l_krpv_rec.CALCULATION_FORMULA_ID,
2525       l_krpv_rec.CATCHUP_BASIS_CODE, l_krpv_rec.CATCHUP_START_DATE, l_krpv_rec.CATCHUP_SETTLEMENT_CODE,
2526       l_krpv_rec.RATE_CHANGE_START_DATE, l_krpv_rec.RATE_CHANGE_FREQUENCY_CODE, l_krpv_rec.RATE_CHANGE_VALUE,
2527       l_krpv_rec.CONVERSION_OPTION_CODE, l_krpv_rec.NEXT_CONVERSION_DATE, l_krpv_rec.CONVERSION_TYPE_CODE,
2528       l_krpv_rec.ATTRIBUTE_CATEGORY, l_krpv_rec.ATTRIBUTE1, l_krpv_rec.ATTRIBUTE2,
2529       l_krpv_rec.ATTRIBUTE3, l_krpv_rec.ATTRIBUTE4, l_krpv_rec.ATTRIBUTE5,
2530       l_krpv_rec.ATTRIBUTE6, l_krpv_rec.ATTRIBUTE7, l_krpv_rec.ATTRIBUTE8,
2531       l_krpv_rec.ATTRIBUTE9, l_krpv_rec.ATTRIBUTE10, l_krpv_rec.ATTRIBUTE11,
2532       l_krpv_rec.ATTRIBUTE12, l_krpv_rec.ATTRIBUTE13, l_krpv_rec.ATTRIBUTE14,
2533       l_krpv_rec.ATTRIBUTE15, l_krpv_rec.CREATED_BY, l_krpv_rec.CREATION_DATE,
2534       l_krpv_rec.LAST_UPDATED_BY, l_krpv_rec.LAST_UPDATE_DATE, l_krpv_rec.LAST_UPDATE_LOGIN,
2535       l_krpv_rec.CATCHUP_FREQUENCY_CODE
2536       FROM OKL_K_RATE_PARAMS
2537       WHERE KHR_ID = p_krpdel_tbl(i).khr_id
2538       AND   parameter_type_code = l_parameter_type_code
2539       AND   effective_from_date = p_krpdel_tbl(i).effective_from_date;
2540 
2541       --Bug# 7440232
2542       IF (p_krpdel_tbl(i).rate_type IN ('INTEREST_RATE_PARAMS', 'INTEREST_RATE_PARAMS_CONV')) THEN
2543         l_krpv_rec.interest_index_id := null;
2544         l_krpv_rec.base_rate := null;
2545         l_krpv_rec.adder_rate := null;
2546         l_krpv_rec.minimum_rate := null;
2547         l_krpv_rec.maximum_rate := null;
2548         l_krpv_rec.principal_basis_code := null;
2549         l_krpv_rec.interest_basis_code := null;
2550         l_krpv_rec.interest_start_date := null;
2551         l_krpv_rec.days_in_a_month_code := null;
2552         l_krpv_rec.days_in_a_year_code := null;
2553 
2554         l_krpv_rec.rate_delay_code := null;
2555         l_krpv_rec.rate_delay_frequency := null;
2556         l_krpv_rec.compounding_frequency_code := null;
2557         l_krpv_rec.calculation_formula_id := null;
2558         l_krpv_rec.catchup_frequency_code := null;
2559         l_krpv_rec.catchup_start_date := null;
2560         l_krpv_rec.catchup_settlement_code := null;
2561         l_krpv_rec.catchup_basis_code := null;
2562         l_krpv_rec.rate_change_frequency_code := null;
2563         l_krpv_rec.rate_change_start_date := null;
2564         l_krpv_rec.rate_change_value := null;
2565 
2566         UPDATE OKL_K_RATE_PARAMS
2567         SET interest_index_id = null,
2568             base_rate = null,
2569             adder_rate = null,
2570             minimum_rate = null,
2571             maximum_rate = null,
2572             principal_basis_code = null,
2573             interest_basis_code = null,
2574             interest_start_date = null,
2575             days_in_a_month_code = null,
2576             days_in_a_year_code = null,
2577             rate_delay_code = null,
2578             rate_delay_frequency = null,
2579             compounding_frequency_code = null,
2580             calculation_formula_id = null,
2581             catchup_frequency_code = null,
2582             catchup_start_date = null,
2583             catchup_settlement_code = null,
2584             catchup_basis_code = null,
2585             rate_change_frequency_code = null,
2586             rate_change_start_date = null,
2587             rate_change_value = null
2588          WHERE KHR_ID = p_krpdel_tbl(i).khr_id
2589          AND   parameter_type_code = l_parameter_type_code
2590          AND   effective_from_date = p_krpdel_tbl(i).effective_from_date;
2591          l_del_count := l_del_count + sql%rowcount;
2592 
2593       ELSIF (p_krpdel_tbl(i).rate_type = 'CONVERSION_BASIS') THEN
2594         l_krpv_rec.conversion_option_code := null;
2595         l_krpv_rec.next_conversion_date := null;
2596         l_krpv_rec.conversion_type_code := null;
2597 
2598         UPDATE OKL_K_RATE_PARAMS
2599         SET    conversion_option_code = null,
2600                next_conversion_date = null,
2601                conversion_type_code = null
2602          WHERE KHR_ID = p_krpdel_tbl(i).khr_id
2603          AND   parameter_type_code = l_parameter_type_code
2604          AND   effective_from_date = p_krpdel_tbl(i).effective_from_date;
2605          l_del_count := l_del_count + sql%rowcount;
2606       END IF;
2607 
2608       -- Check if all null
2609       l_all_rate_params_null := FALSE;
2610       IF (l_krpv_rec.interest_index_id IS NULL AND
2611           l_krpv_rec.base_rate IS NULL AND
2612           l_krpv_rec.adder_rate IS NULL AND
2613           l_krpv_rec.minimum_rate IS NULL AND
2614           l_krpv_rec.maximum_rate IS NULL AND
2615           l_krpv_rec.principal_basis_code IS NULL AND
2616           l_krpv_rec.interest_basis_code IS NULL AND
2617           l_krpv_rec.interest_start_date IS NULL AND
2618           l_krpv_rec.days_in_a_month_code IS NULL AND
2619           l_krpv_rec.days_in_a_year_code IS NULL AND
2620           l_krpv_rec.rate_delay_code IS NULL AND
2621           l_krpv_rec.rate_delay_frequency IS NULL AND
2622           l_krpv_rec.compounding_frequency_code IS NULL AND
2623           l_krpv_rec.calculation_formula_id IS NULL AND
2624           l_krpv_rec.catchup_frequency_code IS NULL AND
2625           l_krpv_rec.catchup_start_date IS NULL AND
2626           l_krpv_rec.catchup_settlement_code IS NULL AND
2627           l_krpv_rec.catchup_basis_code IS NULL AND
2628           l_krpv_rec.rate_change_frequency_code IS NULL AND
2629           l_krpv_rec.rate_change_start_date IS NULL AND
2630           l_krpv_rec.rate_change_value IS NULL AND
2631           l_krpv_rec.conversion_option_code IS NULL AND
2632           l_krpv_rec.next_conversion_date IS NULL AND
2633           l_krpv_rec.conversion_type_code IS NULL) THEN
2634 
2635          l_all_rate_params_null := TRUE;
2636 
2637        END IF;
2638 
2639       IF (l_all_rate_params_null) THEN
2640         l_krpv_rec2.khr_id := p_krpdel_tbl(i).khr_id;
2641         l_krpv_rec2.parameter_type_code := l_parameter_type_code;
2642         l_krpv_rec2.effective_from_date := p_krpdel_tbl(i).effective_from_date;
2643 
2644         OKL_KRP_PVT.delete_row(
2645            p_api_version,
2646            p_init_msg_list,
2647            x_return_status,
2648            x_msg_count,
2649            x_msg_data,
2650            l_krpv_rec2);
2651 
2652         IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2653           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2654         ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2655           RAISE OKL_API.G_EXCEPTION_ERROR;
2656         END IF;
2657 
2658         IF (l_orig_system_source_code = 'OKL_REBOOK') THEN
2659 
2660           /*FOR r IN get_orig_effective_from_dt_csr(
2661                         p_krpdel_tbl(i).khr_id,
2662                         l_parameter_type_code)
2663           LOOP
2664             l_orig_effective_from_date := r.effective_from_date;
2665             print('l_orig_effective_from_date=' || l_orig_effective_from_date);
2666             print('krpdel.effective_from_date=' || p_krpdel_tbl(i).effective_from_date);
2667             print('krpdel.khr_id=' || p_krpdel_tbl(i).khr_id);
2668             print('l_parameter_type_code=' || l_parameter_type_code);
2669           END LOOP;
2670 
2671           IF (l_orig_effective_from_date =
2672                   p_krpdel_tbl(i).effective_from_date) THEN
2673             OKC_API.set_message(p_app_name => G_APP_NAME,
2674                                 p_msg_name => 'OKL_LA_VAR_RATE_DELETE_ERR2');
2675             RAISE OKL_API.G_EXCEPTION_ERROR;
2676           END IF;*/
2677 
2678           UPDATE OKL_K_RATE_PARAMS
2679           SET    EFFECTIVE_TO_DATE = NULL
2680           WHERE  KHR_ID = p_krpdel_tbl(i).khr_id
2681           AND    PARAMETER_TYPE_CODE = l_parameter_type_code
2682           AND    EFFECTIVE_TO_DATE = p_krpdel_tbl(i).effective_from_date - 1;
2683           l_del_count := l_del_count + sql%rowcount;
2684         END IF;
2685 
2686       END IF;
2687       l_krpv_rec := l_krpv_rec3;
2688       l_krpv_rec2 := l_krpv_rec3;
2689 
2690     END LOOP;
2691     END IF;
2692 
2693       -- Bug 4874280
2694       IF (l_del_count > 0) THEN
2695         okl_contract_status_pub.cascade_lease_status_edit
2696                     (p_api_version     => p_api_version,
2697                      p_init_msg_list   => p_init_msg_list,
2698                      x_return_status   => x_return_status,
2699                      x_msg_count       => x_msg_count,
2700                      x_msg_data        => x_msg_data,
2701                      p_chr_id          => l_khr_id);
2702 
2703         If x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR Then
2704   	         raise OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2705         Elsif x_return_status = OKL_API.G_RET_STS_ERROR Then
2706   	         raise OKL_API.G_EXCEPTION_ERROR;
2707         End If;
2708       END IF;
2709 
2710     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
2711 
2712     EXCEPTION
2713 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
2714 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2715 			p_api_name  => l_api_name,
2716 			p_pkg_name  => g_pkg_name,
2717 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
2718 			x_msg_count => x_msg_count,
2719 			x_msg_data  => x_msg_data,
2720 			p_api_type  => g_api_type);
2721 
2722 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
2723 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2724 			p_api_name  => l_api_name,
2725 			p_pkg_name  => g_pkg_name,
2726 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
2727 			x_msg_count => x_msg_count,
2728 			x_msg_data  => x_msg_data,
2729 			p_api_type  => g_api_type);
2730 
2731 	WHEN OTHERS THEN
2732       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
2733 			p_api_name  => l_api_name,
2734 			p_pkg_name  => g_pkg_name,
2735 			p_exc_name  => 'OTHERS',
2736 			x_msg_count => x_msg_count,
2737 			x_msg_data  => x_msg_data,
2738 			p_api_type  => g_api_type);
2739 end;
2740 
2741 /* For QA checker to call  - stack Error messages and no raise exception*/
2742 PROCEDURE validate_k_rate_params(
2743     p_api_version             IN NUMBER,
2744     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
2745     x_return_status           OUT NOCOPY VARCHAR2,
2746     x_msg_count               OUT NOCOPY NUMBER,
2747     x_msg_data                OUT NOCOPY VARCHAR2,
2748     p_khr_id                  IN  okc_k_headers_b.id%type,
2749     p_validate_flag           IN  VARCHAR2 DEFAULT 'Y') IS
2750 
2751     l_api_name		CONSTANT VARCHAR2(30) := 'DELETE_K_RATE_PARAMS';
2752     l_api_version	CONSTANT NUMBER	      := 1.0;
2753 
2754     p_pdtv_rec            OKL_SETUPPRODUCTS_PUB.pdtv_rec_type;
2755     x_pdt_parameter_rec   OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
2756     x_no_data_found       BOOLEAN;
2757     l_k_rate_tbl          krpv_tbl_type;
2758     l_k_rate_tbl2         krpv_tbl_type;
2759     l_rate_counter        NUMBER := 1;
2760 
2761     CURSOR l_hdr_csr(  chrId NUMBER ) IS
2762     SELECT
2763 	   CHR.authoring_org_id,
2764 	   CHR.inv_organization_id,
2765            khr.deal_type,
2766            pdt.id  pid,
2767 	   NVL(pdt.reporting_pdt_id, -1) report_pdt_id
2768     FROM   okc_k_headers_b CHR,
2769            okl_k_headers khr,
2770            okl_products_v pdt
2771     WHERE khr.id = CHR.id
2772         AND CHR.id = chrId
2773         AND khr.pdt_id = pdt.id(+);
2774 
2775     l_hdr_rec l_hdr_csr%ROWTYPE;
2776 
2777     CURSOR csr_get_rate_tbl(p_id NUMBER) IS
2778     SELECT
2779      khr_id
2780     ,parameter_type_code
2781     ,effective_from_date
2782     ,effective_to_date
2783     ,interest_index_id
2784     ,base_rate
2785     ,interest_start_date
2786     ,adder_rate
2787     ,maximum_rate
2788     ,minimum_rate
2789     ,principal_basis_code
2790     ,days_in_a_month_code
2791     ,days_in_a_year_code
2792     ,interest_basis_code
2793     ,rate_delay_code
2794     ,rate_delay_frequency
2795     ,compounding_frequency_code
2796     ,calculation_formula_id
2797     ,catchup_basis_code
2798     ,catchup_start_date
2799     ,catchup_settlement_code
2800     ,rate_change_start_date
2801     ,rate_change_frequency_code
2802     ,rate_change_value
2803     ,conversion_option_code
2804     ,next_conversion_date
2805     ,conversion_type_code
2806     ,attribute_category
2807     ,attribute1
2808     ,attribute2
2809     ,attribute3
2810     ,attribute4
2811     ,attribute5
2812     ,attribute6
2813     ,attribute7
2814     ,attribute8
2815     ,attribute9
2816     ,attribute10
2817     ,attribute11
2818     ,attribute12
2819     ,attribute13
2820     ,attribute14
2821     ,attribute15
2822     ,created_by
2823     ,creation_date
2824     ,last_updated_by
2825     ,last_update_date
2826     ,last_update_login
2827     ,catchup_frequency_code
2828     FROM okl_k_rate_params
2829     WHERE khr_id = p_id;
2830 
2831 l_deal_type VARCHAR2(30);
2832 l_interest_calculation_basis VARCHAR2(30);
2833 l_revenue_recognition_method VARCHAR2(30);
2834 begin
2835     x_return_status := OKL_API.START_ACTIVITY(
2836 			p_api_name      => l_api_name,
2837 			p_pkg_name      => g_pkg_name,
2838 			p_init_msg_list => p_init_msg_list,
2839 			l_api_version   => l_api_version,
2840 			p_api_version   => p_api_version,
2841 			p_api_type      => G_API_TYPE,
2842 			x_return_status => x_return_status);
2843 
2844     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2845           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In validate_k_rate_params QA checker' || to_char(sysdate,'HH24:MI:SS') || ' with p_khr_id= ' || p_khr_id || ' ...');
2846     END IF;
2847     x_return_status := OKL_API.G_RET_STS_SUCCESS;
2848     OPEN  l_hdr_csr(p_khr_id);
2849     FETCH l_hdr_csr INTO l_hdr_rec;
2850     IF l_hdr_csr%NOTFOUND THEN
2851         CLOSE l_hdr_csr;
2852         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2853     END IF;
2854     CLOSE l_hdr_csr;
2855 
2856     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2857           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'deal_type=' || l_hdr_rec.deal_type);
2858       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'pid=' || l_hdr_rec.pid);
2859     END IF;
2860 
2861     p_pdtv_rec.id := l_hdr_rec.pid;
2862     OKL_SETUPPRODUCTS_PUB.Getpdt_parameters(
2863                         p_api_version       => p_api_version,
2864                         p_init_msg_list     => p_init_msg_list,
2865                         x_return_status     => x_return_status,
2866                         x_msg_count         => x_msg_count,
2867                         x_msg_data          => x_msg_data,
2868                         p_pdtv_rec          => p_pdtv_rec,
2869 	                x_no_data_found     => x_no_data_found,
2870                         p_pdt_parameter_rec => x_pdt_parameter_rec);
2871 
2872     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
2873        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
2874     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
2875        RAISE OKL_API.G_EXCEPTION_ERROR;
2876     ELSIF  NVL(x_pdt_parameter_rec.Name,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR THEN
2877        x_return_status := OKL_API.G_RET_STS_ERROR;
2878        RAISE OKL_API.G_EXCEPTION_ERROR;
2879     END IF;
2880 
2881     --print('Product_subclass=' || x_pdt_parameter_rec.product_subclass);
2882     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2883           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Deal_type=' || x_pdt_parameter_rec.Deal_type);
2884     END IF;
2885     --print('Tax_owner=' || x_pdt_parameter_rec.Tax_owner);
2886     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2887           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Revenue_Recognition_Method=' || x_pdt_parameter_rec.Revenue_Recognition_Method);
2888       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Interest_Calculation_Basis=' || x_pdt_parameter_rec.Interest_Calculation_Basis);
2889     END IF;
2890     l_deal_type := x_pdt_parameter_rec.deal_type;
2891     l_interest_calculation_basis := x_pdt_parameter_rec.interest_calculation_basis;
2892     l_revenue_recognition_method := x_pdt_parameter_rec.revenue_recognition_method;
2893 
2894     -- AKP: Todo: Get l_k_rate_tbl from database
2895     Open csr_get_rate_tbl(p_khr_id);
2896     LOOP
2897       Fetch csr_get_rate_tbl BULK COLLECT INTO l_k_rate_tbl2 LIMIT G_BULK_SIZE;
2898       EXIT WHEN l_k_rate_tbl2.COUNT = 0;
2899       FOR i IN l_k_rate_tbl2.FIRST..l_k_rate_tbl2.LAST
2900       LOOP
2901         l_k_rate_tbl(l_rate_counter) := l_k_rate_tbl2(i);
2902         l_rate_counter := l_rate_counter + 1;
2903       END LOOP;
2904     END LOOP;
2905     CLOSE csr_get_rate_tbl;
2906 
2907     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2908           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After csr_get_rate_tbl...');
2909     END IF;
2910     /* IF (((l_deal_type IN ('LEASEOP', 'LEASEDF', 'LEASEST')) AND
2911          (l_interest_calculation_basis IN ('FIXED', 'REAMORT'))) OR
2912         ((l_deal_type = 'LOAN') AND
2913          (l_interest_calculation_basis = 'REAMORT')) ) THEN
2914         IF (l_k_rate_tbl.COUNT > 0) THEN
2915           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
2916                               ,p_msg_name     => G_OKL_LLA_VAR_RATE_ERROR
2917                               ,p_token1       => G_LEASE_TYPE
2918                               ,p_token1_value => 'LEASEOP,LEASEDF,LEASEST'
2919                               ,p_token2       => G_INT_BASIS
2920                               ,p_token2_value => 'FIXED,REAMORT');
2921           RAISE OKL_API.G_EXCEPTION_ERROR;
2922         END IF;
2923     ELS */
2924     IF (((l_deal_type IN ('LEASEOP', 'LEASEDF', 'LEASEST')) AND
2925            (l_interest_calculation_basis IN ( 'FLOAT_FACTORS', 'REAMORT'))) OR
2926           --((l_deal_type = 'LOAN') AND
2927            --(l_interest_calculation_basis IN
2928                     --('FIXED','FLOAT', 'CATCHUP/CLEANUP')))  OR
2929            (l_deal_type = 'LOAN' AND
2930              (l_interest_calculation_basis IN
2931                   ('FLOAT', 'REAMORT', 'CATCHUP/CLEANUP')
2932               OR
2933               (l_interest_calculation_basis='FIXED' AND
2934                l_revenue_recognition_method = 'ACTUAL')  )) OR
2935           ((l_deal_type = 'LOAN-REVOLVING') AND
2936            (l_interest_calculation_basis = 'FLOAT')) ) THEN
2937       IF (l_k_rate_tbl.COUNT < 1) THEN
2938         OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
2939                             ,p_msg_name     => G_OKL_LLA_VAR_RATE_MISSING
2940                             ,p_token1       => G_CONT_ID
2941                             ,p_token1_value => p_khr_id);
2942         RAISE OKL_API.G_EXCEPTION_ERROR;
2943       END IF;
2944 
2945     END IF;
2946 
2947     IF (l_k_rate_tbl.COUNT > 0) THEN
2948     okl_krp_pvt.validate_row(
2949         p_api_version       => p_api_version,
2950         p_init_msg_list     => p_init_msg_list,
2951         x_return_status     => x_return_status,
2952         x_msg_count         => x_msg_count,
2953         x_msg_data          => x_msg_data,
2954         p_deal_type         => x_pdt_parameter_rec.deal_type,
2955         p_rev_rec_method    => x_pdt_parameter_rec.Revenue_recognition_method,
2956         p_int_calc_basis    => x_pdt_parameter_rec.interest_calculation_basis,
2957         p_krpv_tbl          => l_k_rate_tbl,
2958         p_stack_messages    => 'Y',
2959         p_validate_flag     => 'F'
2960     );
2961     END IF;
2962   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2963       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validation_row: x_return_status=' || x_return_status);
2964   END IF;
2965 
2966   -- Bug 4722746
2967       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2968               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_k_rate_tbl.COUNT=' || l_k_rate_tbl.COUNT);
2969       END IF;
2970       IF (l_interest_calculation_basis = 'CATCHUP/CLEANUP'
2971           AND l_revenue_recognition_method = 'STREAMS'
2972           AND l_k_rate_tbl.COUNT > 0 ) THEN
2973 
2974         FOR i IN l_k_rate_tbl.FIRST..l_k_rate_tbl.LAST
2975         LOOP
2976         --print('Catchup :1');
2977         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
2978                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'i=' || i || ':' || l_k_rate_tbl(i).catchup_frequency_code);
2979         END IF;
2980         IF (l_k_rate_tbl(i).catchup_frequency_code is NOT NULL AND
2981             l_k_rate_tbl(i).catchup_frequency_code <> G_MISS_CHAR) THEN
2982           NULL;
2983         ELSE
2984           OKC_API.set_message(p_app_name => G_APP_NAME,
2985                               p_msg_name => G_REQUIRED_VALUE,
2986                               p_token1 => G_COL_NAME_TOKEN,
2987                               p_token1_value => 'Catchup Frequency');
2988           RAISE OKL_API.G_EXCEPTION_ERROR;
2989         END IF;
2990 
2991         --print('Catchup :2');
2992         /*IF (l_k_rate_tbl(i).catchup_start_date is NOT NULL AND
2993             l_k_rate_tbl(i).catchup_start_date <> G_MISS_DATE) THEN
2994           NULL;
2995         ELSE
2996           l_k_rate_tbl(i).catchup_start_date := l_contract_start_date;
2997         END IF;*/
2998 
2999         --print('Catchup :3');
3000         IF (l_k_rate_tbl(i).catchup_settlement_code is NOT NULL AND
3001             l_k_rate_tbl(i).catchup_settlement_code <> G_MISS_CHAR) THEN
3002           NULL;
3003         ELSE
3004           OKC_API.set_message(p_app_name => G_APP_NAME,
3005                               p_msg_name => G_REQUIRED_VALUE,
3006                               p_token1 => G_COL_NAME_TOKEN,
3007                               p_token1_value => 'Catchup Settlement');
3008           RAISE OKL_API.G_EXCEPTION_ERROR;
3009         END IF;
3010 
3011         --print('Catchup :4');
3012         IF (l_k_rate_tbl(i).catchup_basis_code is NOT NULL AND
3013             l_k_rate_tbl(i).catchup_basis_code <> G_MISS_CHAR) THEN
3014           NULL;
3015         ELSE
3016           OKC_API.set_message(p_app_name => G_APP_NAME,
3017                               p_msg_name => G_REQUIRED_VALUE,
3018                               p_token1 => G_COL_NAME_TOKEN,
3019                               p_token1_value => 'Catchup Basis');
3020           RAISE OKL_API.G_EXCEPTION_ERROR;
3021         END IF;
3022         END LOOP;
3023 
3024       END IF;
3025 
3026 
3027   OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
3028 
3029     EXCEPTION
3030 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
3031 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3032 			p_api_name  => l_api_name,
3033 			p_pkg_name  => g_pkg_name,
3034 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
3035 			x_msg_count => x_msg_count,
3036 			x_msg_data  => x_msg_data,
3037 			p_api_type  => g_api_type);
3038 
3039 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3040 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3041 			p_api_name  => l_api_name,
3042 			p_pkg_name  => g_pkg_name,
3043 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
3044 			x_msg_count => x_msg_count,
3045 			x_msg_data  => x_msg_data,
3046 			p_api_type  => g_api_type);
3047 
3048 	WHEN OTHERS THEN
3049       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3050 			p_api_name  => l_api_name,
3051 			p_pkg_name  => g_pkg_name,
3052 			p_exc_name  => 'OTHERS',
3053 			x_msg_count => x_msg_count,
3054 			x_msg_data  => x_msg_data,
3055 			p_api_type  => g_api_type);
3056 end;
3057 
3058 /* For UI/contract import to call */
3059 PROCEDURE validate_k_rate_params(
3060     p_api_version             IN NUMBER,
3061     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
3062     x_return_status           OUT NOCOPY VARCHAR2,
3063     x_msg_count               OUT NOCOPY NUMBER,
3064     x_msg_data                OUT NOCOPY VARCHAR2,
3065     p_product_id              IN  okl_products_v.id%type,
3066     p_k_rate_tbl              IN  krpv_tbl_type,
3067     --Bug# 7440232
3068     p_validate_flag           IN  VARCHAR2 DEFAULT 'Y') IS
3069 
3070     p_pdtv_rec            OKL_SETUPPRODUCTS_PUB.pdtv_rec_type;
3071     x_pdt_parameter_rec   OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
3072     x_no_data_found       BOOLEAN;
3073 
3074     l_pdt_id number;
3075 begin
3076 
3077    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3078         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In validate_k_rate_params from UI/contract import...');
3079    END IF;
3080    /*begin
3081      select id into l_pdt_id
3082      from okl_products_v
3083      where name = p_product_name;
3084    exception when no_data_found then
3085      null;
3086      -- ToDo AKP: Set Message : Product not found. Raise error.
3087    end; */
3088     p_pdtv_rec.id := p_product_id;
3089     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3090           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_product_id=' || to_char(p_product_id));
3091     END IF;
3092     OKL_SETUPPRODUCTS_PUB.Getpdt_parameters(
3093                         p_api_version       => p_api_version,
3094                         p_init_msg_list     => p_init_msg_list,
3095                         x_return_status     => x_return_status,
3096                         x_msg_count         => x_msg_count,
3097                         x_msg_data          => x_msg_data,
3098                         p_pdtv_rec          => p_pdtv_rec,
3099 	                x_no_data_found     => x_no_data_found,
3100                         p_pdt_parameter_rec => x_pdt_parameter_rec);
3101 
3102    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3103         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_return_status=' || x_return_status);
3104      OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'name=' || x_pdt_parameter_rec.name);
3105    END IF;
3106     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3107        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3108     ELSIF ( x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3109        RAISE OKL_API.G_EXCEPTION_ERROR;
3110     /*ELSIF  NVL(x_pdt_parameter_rec.Name,OKL_API.G_MISS_CHAR) = OKL_API.G_MISS_CHAR THEN
3111        x_return_status := OKL_API.G_RET_STS_ERROR;
3112        RAISE OKL_API.G_EXCEPTION_ERROR;*/
3113     END IF;
3114 
3115     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3116           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Deal_type=' || x_pdt_parameter_rec.Deal_type);
3117       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Revenue_Recognition_Method=' || x_pdt_parameter_rec.Revenue_Recognition_Method);
3118       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Interest_Calculation_Basis=' || x_pdt_parameter_rec.Interest_Calculation_Basis);
3119     END IF;
3120 
3121     okl_krp_pvt.validate_row(
3122         p_api_version       => p_api_version,
3123         p_init_msg_list     => p_init_msg_list,
3124         x_return_status     => x_return_status,
3125         x_msg_count         => x_msg_count,
3126         x_msg_data          => x_msg_data,
3127         p_deal_type         => x_pdt_parameter_rec.deal_type,
3128         p_rev_rec_method    => x_pdt_parameter_rec.Revenue_recognition_method,
3129         p_int_calc_basis    => x_pdt_parameter_rec.interest_calculation_basis,
3130         p_krpv_tbl          => p_k_rate_tbl,
3131         --Bug# 7440232
3132         p_stack_messages    => 'Y',
3133         p_validate_flag     => p_validate_flag
3134     );
3135    IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3136         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_row: x_return_status=' || x_return_status);
3137    END IF;
3138 end;
3139 
3140 -- Start of comments
3141 --
3142 -- Procedure Name  : generate_rate_summary
3143 -- Description     : Called through rosetta to generate summary of interest and additional interest
3144 --                   rate parameters for actual and conversion records with
3145 --                   different effectivities.
3146 -- Business Rules  :
3147 -- Parameters      :
3148 -- Version         : 1.0, ramurt Created.
3149 -- End of comments
3150 
3151   Procedure generate_rate_summary(
3152             p_api_version          IN  NUMBER,
3153             p_init_msg_list        IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
3154             x_return_status        OUT NOCOPY VARCHAR2,
3155             x_msg_count            OUT NOCOPY NUMBER,
3156             x_msg_data             OUT NOCOPY VARCHAR2,
3157             p_chr_id               IN  NUMBER,
3158             x_var_par_tbl          OUT NOCOPY var_prm_tbl_type)
3159   AS
3160   l_api_version    CONSTANT NUMBER := 1;
3161   l_api_name       CONSTANT VARCHAR2(30) := 'GENERATE_RATE_SUMMARY';
3162   l_return_value   VARCHAR2(1) := '';
3163 
3164 CURSOR c_int_rate_param IS
3165 SELECT parameter_type_code,
3166        interest_index_id,
3167        base_rate,
3168        interest_start_date,
3169        adder_rate,
3170        maximum_rate,
3171        minimum_rate,
3172        principal_basis_code,
3173        days_in_a_month_code,
3174        days_in_a_year_code,
3175        interest_basis_code,
3176        effective_from_date,
3177        effective_to_date,
3178        rate_delay_code,
3179        rate_delay_frequency,
3180        compounding_frequency_code,
3181        calculation_formula_id,
3182        catchup_basis_code,
3183        catchup_start_date,
3184        catchup_settlement_code,
3185        rate_change_start_date,
3186        rate_change_frequency_code,
3187        rate_change_value,
3188        conversion_option_code,
3189        next_conversion_date,
3190        conversion_type_code
3191 FROM   OKL_K_RATE_PARAMS
3192 WHERE  KHR_ID = p_chr_id
3193 AND    parameter_type_code IN ('ACTUAL', 'CONVERSION')
3194 ORDER BY effective_from_date, parameter_type_code;
3195 
3196 CURSOR fnd_csr(p_lookup_code FND_LOOKUPS.LOOKUP_CODE%TYPE) IS
3197 SELECT meaning
3198 FROM   FND_LOOKUPS
3199 WHERE  lookup_type = 'OKL_VAR_RATE_PARAMS_TYPE'
3200 AND    lookup_code = p_lookup_code
3201 AND    nvl(enabled_flag,'N') = 'Y'
3202 AND    sysdate between nvl(start_date_active,sysdate) and nvl(end_date_active,sysdate);
3203 l_meaning FND_LOOKUPS.MEANING%TYPE;
3204 
3205   i NUMBER;
3206   l_int_rate_exist BOOLEAN;
3207   l_addl_int_rate_exist BOOLEAN;
3208   l_conv_basis_exist BOOLEAN;
3209 
3210   BEGIN
3211     x_return_status := OKL_API.G_RET_STS_SUCCESS;
3212 
3213     x_return_status := OKL_API.START_ACTIVITY(
3214                         p_api_name      => l_api_name,
3215                         p_pkg_name      => g_pkg_name,
3216                         p_init_msg_list => p_init_msg_list,
3217                         l_api_version   => l_api_version,
3218                         p_api_version   => p_api_version,
3219                         p_api_type      => G_API_TYPE,
3220                         x_return_status => x_return_status);
3221 
3222   --dbms_output.put_line('here1');
3223 
3224   i := 0;
3225 
3226   FOR c_int_rate_param_rec IN c_int_rate_param
3227   LOOP
3228     l_int_rate_exist := c_int_rate_param_rec.interest_index_id       IS NOT NULL
3229                         OR c_int_rate_param_rec.base_rate            IS NOT NULL
3230                         OR c_int_rate_param_rec.interest_start_date  IS NOT NULL
3231                         OR c_int_rate_param_rec.adder_rate           IS NOT NULL
3232                         OR c_int_rate_param_rec.maximum_rate         IS NOT NULL
3233                         OR c_int_rate_param_rec.minimum_rate         IS NOT NULL
3234                         OR c_int_rate_param_rec.principal_basis_code IS NOT NULL
3235                         OR c_int_rate_param_rec.days_in_a_month_code IS NOT NULL
3236                         OR c_int_rate_param_rec.days_in_a_year_code  IS NOT NULL
3237                         OR c_int_rate_param_rec.interest_basis_code  IS NOT NULL;
3238 
3239     l_addl_int_rate_exist := c_int_rate_param_rec.rate_delay_code               IS NOT NULL
3240                              OR c_int_rate_param_rec.rate_delay_frequency       IS NOT NULL
3241                              OR c_int_rate_param_rec.compounding_frequency_code IS NOT NULL
3242                              OR c_int_rate_param_rec.calculation_formula_id     IS NOT NULL
3243                              OR c_int_rate_param_rec.catchup_basis_code         IS NOT NULL
3244                              OR c_int_rate_param_rec.catchup_start_date         IS NOT NULL
3245                              OR c_int_rate_param_rec.catchup_settlement_code    IS NOT NULL
3246                              OR c_int_rate_param_rec.rate_change_start_date     IS NOT NULL
3247                              OR c_int_rate_param_rec.rate_change_frequency_code IS NOT NULL
3248                              OR c_int_rate_param_rec.rate_change_value          IS NOT NULL;
3249 
3250     l_conv_basis_exist := c_int_rate_param_rec.conversion_option_code   IS NOT NULL
3251                           OR c_int_rate_param_rec.next_conversion_date  IS NOT NULL
3252                           OR c_int_rate_param_rec.conversion_type_code  IS NOT NULL;
3253 
3254     -- Interest Rate Parameters and Additional Interest Rate Parameters.
3255     IF ( c_int_rate_param_rec.parameter_type_code = 'ACTUAL') THEN
3256       --Bug# 7440232
3257       IF( l_int_rate_exist ) OR ( l_addl_int_rate_exist ) THEN
3258         i := i+1;
3259         OPEN fnd_csr('INTEREST_RATE_PARAMS');
3260         FETCH fnd_csr INTO l_meaning;
3261         CLOSE fnd_csr;
3262         x_var_par_tbl(i).param_identifier_meaning := l_meaning;
3263         x_var_par_tbl(i).param_identifier := 'INTEREST_RATE_PARAMS';
3264         x_var_par_tbl(i).effective_from_date := c_int_rate_param_rec.effective_from_date;
3265         x_var_par_tbl(i).effective_to_date := c_int_rate_param_rec.effective_to_date;
3266         -- gboomina modified for Bug 5876083 - Start
3267         -- Returning Parameter Type Code which is used in the UI
3268         x_var_par_tbl(i).parameter_type_code := c_int_rate_param_rec.parameter_type_code;
3269         -- gboomina modified for Bug 5876083 - End
3270       END IF;
3271 
3272       IF( l_conv_basis_exist ) THEN
3273         i := i+1;
3274         OPEN fnd_csr('CONVERSION_BASIS');
3275         FETCH fnd_csr INTO l_meaning;
3276         CLOSE fnd_csr;
3277         x_var_par_tbl(i).param_identifier_meaning := l_meaning;
3278         x_var_par_tbl(i).param_identifier := 'CONVERSION_BASIS';
3279         x_var_par_tbl(i).effective_from_date := c_int_rate_param_rec.effective_from_date;
3280         x_var_par_tbl(i).effective_to_date := c_int_rate_param_rec.effective_to_date;
3281         -- gboomina modified for Bug 5876083 - Start
3282         -- Returning Parameter Type Code which is used in the UI
3283         x_var_par_tbl(i).parameter_type_code := c_int_rate_param_rec.parameter_type_code;
3284         -- gboomina modified for Bug 5876083 - End
3285       END IF;
3286     END IF;
3287     -- Interest Rate Parameters and Additional Interest Rate Parameters for Conversion
3288     -- and parameters for Conversion Basis.
3289     IF ( c_int_rate_param_rec.parameter_type_code = 'CONVERSION') THEN
3290       --Bug# 7440232
3291       IF( l_int_rate_exist ) OR ( l_addl_int_rate_exist ) THEN
3292         i := i+1;
3293         OPEN fnd_csr('INTEREST_RATE_PARAMS_CONV');
3294         FETCH fnd_csr INTO l_meaning;
3295         CLOSE fnd_csr;
3296         x_var_par_tbl(i).param_identifier_meaning := l_meaning;
3297         x_var_par_tbl(i).param_identifier := 'INTEREST_RATE_PARAMS_CONV';
3298         x_var_par_tbl(i).effective_from_date := c_int_rate_param_rec.effective_from_date;
3299         x_var_par_tbl(i).effective_to_date := c_int_rate_param_rec.effective_to_date;
3300         -- gboomina modified for Bug 5876083 - Start
3301         -- Returning Parameter Type Code which is used in the UI
3302         x_var_par_tbl(i).parameter_type_code := c_int_rate_param_rec.parameter_type_code;
3303         -- gboomina modified for Bug 5876083 - End
3304       END IF;
3305 
3306     END IF;
3307   END LOOP;
3308 
3309 --dbms_output.put_line('here4');
3310     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
3311 
3312   EXCEPTION
3313     WHEN OKL_API.G_EXCEPTION_ERROR THEN
3314       --Close all cursors if open
3315       IF c_int_rate_param%ISOPEN THEN
3316         CLOSE c_int_rate_param;
3317       END IF;
3318       x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3319                                  l_api_name,
3320                                  G_PKG_NAME,
3321                                  'OKL_API.G_RET_STS_ERROR',
3322                                  x_msg_count,
3323                                  x_msg_data,
3324                                  '_PVT');
3325 
3326     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
3327       --Close all cursors if open
3328       IF c_int_rate_param%ISOPEN THEN
3329         CLOSE c_int_rate_param;
3330       END IF;
3331       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3332                                 l_api_name,
3333                                 G_PKG_NAME,
3334                                 'OKL_API.G_RET_STS_UNEXP_ERROR',
3335                                 x_msg_count,
3336                                 x_msg_data,
3337                                 '_PVT');
3338 
3339     WHEN OTHERS THEN
3340       --Close all cursors if open
3341       IF c_int_rate_param%ISOPEN THEN
3342         CLOSE c_int_rate_param;
3343       END IF;
3344       x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
3345                                 l_api_name,
3346                                 G_PKG_NAME,
3347                                 'OTHERS',
3348                                 x_msg_count,
3349                                 x_msg_data,
3350                                 '_PVT');
3351 
3352   END generate_rate_summary;
3353 
3354 -- default_k_rate_params
3355 -- Default the values based on business rules
3356 
3357 PROCEDURE default_k_rate_params(
3358     p_api_version      IN NUMBER,
3359     p_init_msg_list    IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
3360     x_return_status    OUT NOCOPY VARCHAR2,
3361     x_msg_count        OUT NOCOPY NUMBER,
3362     x_msg_data         OUT NOCOPY VARCHAR2,
3363     p_deal_type        IN  okl_product_parameters_v.deal_type%type,
3364     p_rev_rec_method   IN  okl_product_parameters_v.revenue_recognition_method%type,
3365     p_int_calc_basis   IN  okl_product_parameters_v.interest_calculation_basis%type,
3366     p_column_name      IN  VARCHAR2,
3367     p_krpv_rec         IN OUT NOCOPY krpv_rec_type) IS
3368 BEGIN
3369   x_return_status := OKC_API.G_RET_STS_SUCCESS;
3370 
3371   IF (p_column_name = 'PRINCIPAL_BASIS_CODE' OR p_column_name = 'ALL') THEN
3372     IF (p_deal_type IN ('LEASEOP', 'LEASEDF', 'LEASEST') AND
3373        (p_int_calc_basis = 'REAMORT' AND p_rev_rec_method = 'STREAMS')) THEN
3374       p_krpv_rec.PRINCIPAL_BASIS_CODE := 'SCHEDULED';
3375     ELSIF (p_deal_type = 'LOAN' AND
3376            p_int_calc_basis = 'FLOAT' AND p_rev_rec_method = 'ACTUAL') THEN
3377       p_krpv_rec.PRINCIPAL_BASIS_CODE := 'ACTUAL';
3378     ELSIF (p_deal_type = 'LOAN' AND
3379            p_int_calc_basis = 'REAMORT' AND
3380            p_rev_rec_method IN ('STREAMS', 'ACTUAL')) THEN
3381       p_krpv_rec.PRINCIPAL_BASIS_CODE := 'SCHEDULED';
3382     ELSIF (p_deal_type = 'LOAN' AND
3383            p_int_calc_basis = 'CATCHUP/CLEANUP' AND
3384            p_rev_rec_method = 'STREAMS' ) THEN
3385       p_krpv_rec.PRINCIPAL_BASIS_CODE := 'ACTUAL';
3386     ELSIF (p_deal_type = 'LOAN-REVOLVING' AND
3387            p_int_calc_basis = 'FLOAT' AND
3388            p_rev_rec_method IN ( 'ESTIMATED_AND_BILLED', 'ACTUAL' )) THEN
3389       p_krpv_rec.PRINCIPAL_BASIS_CODE := 'ACTUAL';
3390     END IF;
3391 
3392     IF (p_column_name = 'PRINCIPAL_BASIS_CODE') THEN
3393       RETURN;
3394     END IF;
3395   END IF;
3396 
3397   IF (p_column_name = 'DAYS_IN_A_MONTH_CODE' OR p_column_name = 'ALL') THEN
3398     IF (p_deal_type IN ('LEASEOP', 'LEASEDF', 'LEASEST') AND
3399        (p_int_calc_basis = 'REAMORT' AND p_rev_rec_method = 'STREAMS')) THEN
3400       p_krpv_rec.DAYS_IN_A_MONTH_CODE := '30';
3401     ELSIF (p_deal_type = 'LOAN' AND
3402            p_int_calc_basis = 'REAMORT' AND
3403            p_rev_rec_method = 'STREAMS' ) THEN
3404       p_krpv_rec.DAYS_IN_A_MONTH_CODE := '30';
3405     END IF;
3406 
3407     IF (p_column_name = 'DAYS_IN_A_MONTH_CODE' ) THEN
3408       RETURN;
3409     END IF;
3410   END IF;
3411 
3412   IF (p_column_name = 'DAYS_IN_A_YEAR_CODE' OR p_column_name = 'ALL') THEN
3413     IF (p_deal_type IN ('LEASEOP', 'LEASEDF', 'LEASEST') AND
3414        (p_int_calc_basis = 'REAMORT' AND p_rev_rec_method = 'STREAMS')) THEN
3415       p_krpv_rec.DAYS_IN_A_YEAR_CODE := '360';
3416     ELSIF (p_deal_type = 'LOAN' AND
3417            p_int_calc_basis = 'REAMORT' AND
3418            p_rev_rec_method = 'STREAMS' ) THEN
3419       p_krpv_rec.DAYS_IN_A_YEAR_CODE := '360';
3420     END IF;
3421 
3422     IF (p_column_name = 'DAYS_IN_A_YEAR_CODE' ) THEN
3423       RETURN;
3424     END IF;
3425   END IF;
3426 
3427   IF (p_column_name = 'INTEREST_BASIS_CODE' OR p_column_name = 'ALL') THEN
3428     IF (p_deal_type IN ('LEASEOP', 'LEASEDF', 'LEASEST') AND
3429        (p_int_calc_basis = 'REAMORT' AND p_rev_rec_method = 'STREAMS')) THEN
3430       p_krpv_rec.INTEREST_BASIS_CODE := 'SIMPLE';
3431     ELSIF (p_deal_type = 'LOAN' AND
3432            p_int_calc_basis = 'REAMORT' AND
3433            p_rev_rec_method = 'STREAMS' ) THEN
3434       p_krpv_rec.INTEREST_BASIS_CODE := 'SIMPLE';
3435     END IF;
3436 
3437     IF (p_column_name = 'INTEREST_BASIS_CODE') THEN
3438       RETURN;
3439     END IF;
3440   END IF;
3441 
3442   IF (p_column_name = 'RATE_CHANGE_FREQUENCY_CODE' OR p_column_name= 'ALL') THEN
3443     IF (p_deal_type IN ('LEASEOP', 'LEASEDF', 'LEASEST') AND
3444        (p_int_calc_basis = 'REAMORT' AND p_rev_rec_method = 'STREAMS')) THEN
3445       p_krpv_rec.RATE_CHANGE_FREQUENCY_CODE := 'BILLING_DATE';
3446     ELSIF (p_deal_type = 'LOAN' AND
3447            p_int_calc_basis = 'REAMORT' AND
3448            p_rev_rec_method = 'STREAMS' ) THEN
3449       p_krpv_rec.RATE_CHANGE_FREQUENCY_CODE := 'BILLING_DATE';
3450     END IF;
3451 
3452     IF (p_column_name = 'RATE_CHANGE_FREQUENCY_CODE' ) THEN
3453       RETURN;
3454     END IF;
3455   END IF;
3456 
3457   IF (p_column_name = 'CATCHUP_BASIS_CODE' OR p_column_name= 'ALL') THEN
3458     IF (p_deal_type = 'LOAN' AND
3459            p_int_calc_basis = 'CATCHUP/CLEANUP' AND
3460            p_rev_rec_method = 'STREAMS' ) THEN
3461       p_krpv_rec.CATCHUP_BASIS_CODE := 'ACTUAL';
3462     END IF;
3463 
3464     IF (p_column_name = 'CATCHUP_BASIS_CODE' ) THEN
3465       RETURN;
3466     END IF;
3467   END IF;
3468 
3469 END;
3470 
3471 PROCEDURE cascade_contract_start_date(
3472     p_api_version             IN NUMBER,
3473     p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
3474     x_return_status           OUT NOCOPY VARCHAR2,
3475     x_msg_count               OUT NOCOPY NUMBER,
3476     x_msg_data                OUT NOCOPY VARCHAR2,
3477     p_chr_id                  IN OKC_K_HEADERS_B.ID%TYPE,
3478     p_new_start_date          IN DATE) IS
3479 l_effective_from_date DATE;
3480 l_api_name varchar2(30) := 'cascade_cntrct_start_date';
3481 l_api_version number := 1;
3482 l_no_data_found BOOLEAN:= FALSE;
3483 l_krpv_rec krpv_rec_type;
3484 x_krpv_rec krpv_rec_type;
3485 l_pdt_parameter_rec  OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
3486 l_contract_number OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
3487 l_interest_processing_started BOOLEAN;
3488 l_product_id NUMBER;
3489 l_contract_start_date DATE;
3490 
3491 --Bug 4735972
3492 CURSOR rate_csr(p_id NUMBER) IS
3493 SELECT COUNT(1) COUNT1
3494 FROM   OKL_K_RATE_PARAMS
3495 WHERE  KHR_ID = p_id
3496 AND    EFFECTIVE_TO_DATE IS NULL;
3497 l_rate_count NUMBER;
3498 l_catchup_start_date DATE;
3499 
3500 
3501 BEGIN
3502   x_return_status := OKC_API.G_RET_STS_SUCCESS;
3503   x_return_status := OKL_API.START_ACTIVITY(
3504 			p_api_name      => l_api_name,
3505 			p_pkg_name      => g_pkg_name,
3506 			p_init_msg_list => p_init_msg_list,
3507 			l_api_version   => l_api_version,
3508 			p_api_version   => p_api_version,
3509 			p_api_type      => G_API_TYPE,
3510 			x_return_status => x_return_status);
3511 
3512 
3513   --Bug 4735972
3514   FOR r IN rate_csr(p_chr_id)
3515   LOOP
3516     l_rate_count := r.COUNT1;
3517   END LOOP;
3518 
3519   --Bug 4735972
3520   IF (l_rate_count > 0) THEN
3521 
3522     get_product(
3523             p_api_version   => p_api_version,
3524             p_init_msg_list => p_init_msg_list,
3525             x_return_status => x_return_status,
3526             x_msg_count     => x_msg_count,
3527             x_msg_data      => x_msg_data,
3528             p_khr_id        => p_chr_id,
3529             x_pdt_parameter_rec => l_pdt_parameter_rec);
3530 
3531     l_interest_processing_started := interest_processing
3532                                       (p_chr_id,
3533                                        l_contract_number,
3534                                        l_contract_start_date);
3535 
3536     IF (l_interest_processing_started) THEN
3537       -- Parameters RATE_CHANGE_START_DATE can not be updated because
3538       -- Interest Processing has already started for contract CONTRACT_NUMBER.
3539       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
3540                           ,p_msg_name     => 'OKL_LLA_VAR_RATE_INT_PROC'
3541                           ,p_token1       => 'PARAMETER_NAME'
3542                           --,p_token1_value => 'INTEREST_START_DATE'
3543                           ,p_token1_value =>
3544                'INTEREST_START_DATE,RATE_CHANGE_START_DATE,CATCHUP_START_DATE'
3545                           ,p_token2       => 'CONTRACT_NUMBER'
3546                           ,p_token2_value => l_contract_number);
3547       RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3548     END IF;
3549 
3550     IF (l_pdt_parameter_rec.DEAL_TYPE IN ('LEASEOP', 'LEASEDF', 'LEASEST') AND
3551         l_pdt_parameter_rec.interest_calculation_basis IN
3552               ('REAMORT', 'FLOAT_FACTORS')  AND
3553         l_pdt_parameter_rec.revenue_recognition_method ='STREAMS' )  OR
3554        (l_pdt_parameter_rec.DEAL_TYPE IN ('LOAN') AND
3555         l_pdt_parameter_rec.interest_calculation_basis = 'FLOAT'  AND
3556         l_pdt_parameter_rec.revenue_recognition_method IN
3557             ('ESTIMATED_AND_BILLED', 'ACTUAL' ) )                    OR
3558        (l_pdt_parameter_rec.DEAL_TYPE IN ('LOAN') AND
3559         l_pdt_parameter_rec.interest_calculation_basis IN
3560               ('REAMORT', 'CATCHUP/CLEANUP', 'FIXED')  AND
3561         l_pdt_parameter_rec.revenue_recognition_method IN
3562             ('STREAMS', 'ACTUAL' ) )                                 OR
3563        (l_pdt_parameter_rec.DEAL_TYPE IN ('LOAN-REVOLVING') AND
3564         l_pdt_parameter_rec.interest_calculation_basis = 'FLOAT'  AND
3565         l_pdt_parameter_rec.revenue_recognition_method IN
3566             ('ESTIMATED_AND_BILLED', 'ACTUAL' ) )                    THEN
3567 
3568       get_effective_from_date(
3569         p_api_version  ,
3570         p_init_msg_list,
3571         x_return_status,
3572         x_msg_count    ,
3573         x_msg_data     ,
3574         p_chr_id       ,
3575         l_effective_from_date,
3576         l_no_data_found);
3577       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3578         RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3579       END IF;
3580 
3581       IF NOT(l_no_data_found) THEN
3582         l_krpv_rec.khr_id := p_chr_id;
3583         l_krpv_rec.effective_from_date := l_effective_from_date;
3584         --l_krpv_rec.effective_from_date := p_new_start_date;
3585         l_krpv_rec.parameter_type_code := 'ACTUAL';
3586 
3587         l_krpv_rec.interest_start_date := p_new_start_date;
3588         l_krpv_rec.rate_change_start_date := p_new_start_date;
3589 
3590         IF (l_pdt_parameter_rec.DEAL_TYPE = 'LOAN' AND
3591             l_pdt_parameter_rec.interest_calculation_basis =
3592                   'CATCHUP/CLEANUP' AND
3593             l_pdt_parameter_rec.revenue_recognition_method = 'STREAMS' ) THEN
3594           l_krpv_rec.catchup_start_date := p_new_start_date;
3595           l_catchup_start_date := p_new_start_date;
3596         ELSE
3597           l_catchup_start_date := null;
3598         END IF;
3599 
3600         update OKL_K_RATE_PARAMS
3601         SET    interest_start_date = p_new_start_date,
3602                rate_change_start_date = p_new_start_date,
3603                catchup_start_date = nvl(l_catchup_start_date,catchup_start_date)
3604         WHERE  khr_id = p_chr_id
3605         AND    effective_from_date = l_effective_from_date
3606         AND    effective_to_date is NULL;
3607 
3608         /*update_k_rate_params(
3609             p_api_version   => p_api_version,
3610             p_init_msg_list => p_init_msg_list,
3611             x_return_status => x_return_status,
3612             x_msg_count     => x_msg_count,
3613             x_msg_data      => x_msg_data,
3614             p_krpv_rec      => l_krpv_rec,
3615             x_krpv_rec      => x_krpv_rec);
3616             --p_validate_flag => 'Y');
3617         IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
3618           RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3619         END IF; */
3620 
3621         update okl_k_rate_params
3622         set    effective_from_date = p_new_start_date
3623         WHERE  khr_id = p_chr_id
3624         AND    effective_from_date = l_effective_from_date
3625         AND    effective_to_date IS NULL;
3626         --AND    parameter_type_code = 'ACTUAL';
3627 
3628       /*ELSE
3629         update okl_k_rate_params
3630         set    effective_from_date = p_new_start_date
3631         WHERE  khr_id = p_chr_id
3632         AND    effective_from_date = l_effective_from_date
3633         AND    effective_to_date is NULL;
3634         --AND    parameter_type_code = 'ACTUAL'; */
3635 
3636       END IF;
3637 
3638     END IF;
3639 
3640   END IF;
3641 
3642   OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
3643 
3644   EXCEPTION
3645 	WHEN OTHERS THEN
3646 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
3647 			p_api_name  => l_api_name,
3648 			p_pkg_name  => g_pkg_name,
3649 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
3650 			x_msg_count => x_msg_count,
3651 			x_msg_data  => x_msg_data,
3652 			p_api_type  => g_api_type);
3653 
3654 END;
3655 
3656   -- smadhava Bug#4542290 - 22-Aug-2005 - Added - Start
3657   --------------------------------------------------------------------------------
3658   --Start of Comments
3659   --API Name    : Check_Rebook_Allowed
3660   --Description : Process API to check if the rebook transaction can be allowed
3661   --              for the contract.
3662   --              1. Obtain the Product Parameters - Book Classification, Interest
3663   --                 Calculation Basis and Revenue Recognition Method.
3664   --              2. Obtain the due date for various streams accrued and billed.
3665   --              3. Ensure that the rebook date is after the due date of streams
3666   --                 billed/accrued.
3667   -- The valid combinations of Book classification and Interest Calculation Basis:
3668   --  (i)   OPLease/STLease/DFLease and Fixed/Reamort(If interest has not been
3669   --                                    processed before)/Float Factors
3670   --  (ii)  Loan and Fixed/Reamort(If interest has not been processed before)/
3671   --                 Float/ Catchup-Cleanup
3672   --  (iii) Revolving Loan and Float
3673   -- Streams Used to calculate due date:
3674   --   ------------------------------------------------------------------------
3675   --   S.NO BOOK_CLASS  ICB       RRM      ACCRUAL_STREAM           BILL_STREAM
3676   --   ------------------------------------------------------------------------
3677   --     1  LEASEOP    REAMORT              RENT_ACCRUAL             RENT
3678   --     2  LEASEST    REAMORT              LEASE_INCOME             RENT
3679   --     3  LEASEDF    REAMORT              LEASE_INCOME             RENT
3680   --     4  LOAN       REAMORT              INTEREST_INCOME          RENT
3681   --     5  LOAN       FLOAT    ESTIMATED   VARIABLE_INTEREST  VARIABLE_INTEREST
3682   --                            and ACTUAL  _INCOME            _INCOME
3683   --     6  LOAN       FLOAT      ACTUAL    INTEREST_INCOME      LOAN_PAYMENT
3684   --     7  REV_LOAN   FLOAT    ESTIMATED   VARIABLE_INTEREST  VARIABLE_INTEREST
3685   --                            and ACTUAL  _INCOME            _INCOME
3686   --     8  REV_LOAN   FLOAT      ACTUAL    INTEREST_INCOME      LOAN_PAYMENT
3687   --    ------------------------------------------------------------------------
3688   --History     :
3689   --              22-AUG-2005 smadhava Created
3690   --End of Comments
3691   ------------------------------------------------------------------------------
3692   PROCEDURE check_rebook_allowed (
3693     p_api_version             IN         NUMBER,
3694     p_init_msg_list           IN         VARCHAR2 DEFAULT OKC_API.G_FALSE,
3695     x_return_status           OUT NOCOPY VARCHAR2,
3696     x_msg_count               OUT NOCOPY NUMBER,
3697     x_msg_data                OUT NOCOPY VARCHAR2,
3698     p_chr_id                  IN         OKC_K_HEADERS_B.ID%TYPE,
3699     p_rebook_date             IN         DATE) IS
3700 
3701     l_api_name             VARCHAR2(30) := 'check_rebook_allowed';
3702     l_api_version          NUMBER := 1;
3703 
3704     l_contract_number       OKC_K_HEADERS_B.CONTRACT_NUMBER%TYPE;
3705     l_book_class            OKL_PRODUCT_PARAMETERS_V.DEAL_TYPE%TYPE;
3706     l_book_class_meaning    OKL_PRODUCT_PARAMETERS_V.DEAL_TYPE_MEANING%TYPE;
3707     l_interest_calc_basis   OKL_PRODUCT_PARAMETERS_V.INTEREST_CALCULATION_BASIS%TYPE;
3708     l_interest_calc_meaning OKL_PRODUCT_PARAMETERS_V.INTEREST_CALCULATION_MEANING%TYPE;
3709     l_rev_recog_method      OKL_PRODUCT_PARAMETERS_V.REVENUE_RECOGNITION_METHOD%TYPE;
3710     --l_rev_recog_meaning     OKL_PRODUCT_PARAMETERS_V.REVENUE_RECOGNITION_MEANING%TYPE;
3711     l_interest_proc_date    OKL_K_HEADERS.DATE_LAST_INTERIM_INTEREST_CAL%TYPE;
3712     l_stream_name           OKL_STRM_TYPE_V.STYB_PURPOSE_MEANING%TYPE;
3713 
3714     l_last_accrued_due_date DATE;
3715     l_last_billed_due_date  DATE;
3716 
3717     l_pdt_params_rec OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
3718 
3719     -- Get the quality descriptions
3720     CURSOR get_prod_param_values(cp_name OKL_PDT_QUALITYS.NAME%TYPE
3721                                , cp_value OKL_PQY_VALUES.VALUE%TYPE) IS
3722     SELECT
3723          QVE.DESCRIPTION
3724       FROM
3725          OKL_PDT_QUALITYS PQY
3726        , OKL_PQY_VALUES QVE
3727      WHERE
3728           QVE.PQY_ID = PQY.ID
3729       AND PQY.NAME   = cp_name
3730       AND QVE.VALUE  = cp_value;
3731 
3732     -- Get the lookup meanings
3733     CURSOR get_lkp_meaning(cp_lkp_type FND_LOOKUPS.LOOKUP_TYPE%TYPE
3734                          , cp_lkp_code FND_LOOKUPS.LOOKUP_CODE%TYPE) IS
3735     SELECT
3736          FNDLUP.MEANING
3737       FROM
3738           FND_LOOKUPS FNDLUP
3739      WHERE
3740            FNDLUP.LOOKUP_TYPE = cp_lkp_type
3741        AND FNDLUP.LOOKUP_CODE = cp_lkp_code
3742        AND SYSDATE BETWEEN
3743                          NVL(FNDLUP.START_DATE_ACTIVE,SYSDATE)
3744                          AND NVL(FNDLUP.END_DATE_ACTIVE,SYSDATE);
3745 
3746     -- Cursor to query to get the Interest Processed flag
3747     CURSOR get_contract_details(cp_chr_id OKL_K_HEADERS.ID%TYPE) IS
3748       SELECT
3749            CHR.CONTRACT_NUMBER
3750          , KHR.DATE_LAST_INTERIM_INTEREST_CAL INTEREST_PROCESSED_FLAG
3751        FROM
3752             OKL_K_HEADERS     KHR
3753           , OKC_K_HEADERS_B   CHR
3754       WHERE
3755             CHR.ID  = KHR.ID
3756         AND KHR.ID  = cp_chr_id;
3757 
3758      --Cursor to query the last accrued due date of the stream.
3759      --Bug# 9058664: Corrected GROUP BY clause
3760      CURSOR get_last_accrued_due_date(
3761                p_chr_id OKC_K_HEADERS_B.ID%TYPE
3762              , p_stream_purpose OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE) IS
3763        SELECT
3764              MAX(STE.STREAM_ELEMENT_DATE) LAST_STREAM_DUE_DATE
3765            , STY.STYB_PURPOSE_MEANING
3766          FROM
3767             OKL_STRM_ELEMENTS STE
3768           , OKL_STREAMS       STM
3769           , OKL_STRM_TYPE_V   STY
3770           , OKL_K_HEADERS     KHR
3771           , OKC_K_HEADERS_B CHR
3772         WHERE
3773             STM.ID         = STE.STM_ID
3774         AND STY.ID         = STM.STY_ID
3775         AND KHR.ID         = STM.KHR_ID
3776         AND CHR.ID         = KHR.ID
3777         AND STE.ACCRUED_YN ='Y'
3778         AND CHR.ID         = p_chr_id
3779         AND STY.STREAM_TYPE_PURPOSE  = p_stream_purpose
3780         GROUP BY STY.STYB_PURPOSE_MEANING;
3781 
3782      --Cursor to query the last billed due date of the stream.
3783      --Bug# 9058664: Corrected GROUP BY clause
3784      CURSOR get_last_billed_due_date(
3785                p_chr_id OKC_K_HEADERS_B.ID%TYPE
3786              , p_stream_purpose OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE) IS
3787        SELECT
3788            MAX(STE.STREAM_ELEMENT_DATE) LAST_STREAM_DUE_DATE
3789            , STY.STYB_PURPOSE_MEANING
3790          FROM
3791             OKL_STRM_ELEMENTS STE
3792           , OKL_STREAMS       STM
3793           , OKL_STRM_TYPE_V   STY
3794           , OKL_K_HEADERS     KHR
3795           , OKC_K_HEADERS_B CHR
3796         WHERE
3797             STM.ID         = STE.STM_ID
3798         AND STY.ID         = STM.STY_ID
3799         AND KHR.ID         = STM.KHR_ID
3800         AND CHR.ID         = KHR.ID
3801         AND STE.DATE_BILLED IS NOT NULL
3802         AND CHR.ID         = p_chr_id
3803         AND STY.STREAM_TYPE_PURPOSE  = p_stream_purpose
3804         GROUP BY STY.STYB_PURPOSE_MEANING;
3805   l_product_id NUMBER;
3806   -- 4766555
3807   l_mass_rebook_flag varchar2(1) := 'N';
3808 
3809   BEGIN
3810     IF (G_DEBUG_ENABLED = 'Y') THEN
3811       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
3812     END IF;
3813     x_return_status := OKL_API.G_RET_STS_SUCCESS;
3814     -- Call start_activity to create savepoint, check compatibility
3815     -- and initialize message list
3816     x_return_status := OKL_API.START_ACTIVITY (
3817                                l_api_name
3818                                ,p_init_msg_list
3819                                ,'_PVT'
3820                                ,x_return_status);
3821     -- Check if activity started successfully
3822     IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3823        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3824     ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3825        RAISE OKL_API.G_EXCEPTION_ERROR;
3826     END IF;
3827 
3828     --Bug# 13447258: Do not perform Rebook Effective Date validations for Mass Rebooks
3829     -- 4766555
3830     l_mass_rebook_flag := okl_lla_util_pvt.check_mass_rebook_contract(
3831                             p_chr_id => p_chr_id);
3832     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
3833           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'check_rebook_allowed:l_mass_rebook_flag=' || l_mass_rebook_flag);
3834     END IF;
3835 
3836     IF (l_mass_rebook_flag = OKL_API.G_FALSE) THEN
3837 
3838     -- Obtain the contract details - Book classification, Interest Calculation Basis, Revenue Recognition Method, Interest Processed flag
3839     OKL_K_RATE_PARAMS_PVT.get_product(
3840                 p_api_version       => p_api_version,
3841                 p_init_msg_list     => p_init_msg_list,
3842                 x_return_status     => x_return_status,
3843                 x_msg_count         => x_msg_count,
3844                 x_msg_data          => x_msg_data,
3845                 p_khr_id            => p_chr_id,
3846                 x_pdt_parameter_rec => l_pdt_params_rec);
3847 
3848      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
3849        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
3850      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
3851        RAISE OKL_API.G_EXCEPTION_ERROR;
3852      END IF;
3853 
3854     l_book_class          := l_pdt_params_rec.deal_type;
3855     l_interest_calc_basis := l_pdt_params_rec.interest_calculation_basis;
3856     l_rev_recog_method    := l_pdt_params_rec.revenue_recognition_method;
3857 
3858     OPEN get_lkp_meaning('OKL_BOOK_CLASS',l_book_class);
3859       FETCH get_lkp_meaning INTO l_book_class_meaning;
3860     CLOSE get_lkp_meaning;
3861 
3862     OPEN get_prod_param_values('INTEREST_CALCULATION_BASIS',
3863                                                 l_interest_calc_basis);
3864       FETCH get_prod_param_values INTO l_interest_calc_meaning;
3865     CLOSE get_prod_param_values;
3866 
3867     /*
3868     OPEN get_prod_param_values('REVENUE_RECOGNITION_METHOD',
3869                                                 l_rev_recog_method);
3870       FETCH get_prod_param_values INTO l_rev_recog_meaning;
3871     CLOSE get_prod_param_values; */
3872 
3873     OPEN get_contract_details(p_chr_id);
3874       FETCH get_contract_details INTO l_contract_number, l_interest_proc_date;
3875     CLOSE get_contract_details;
3876 
3877 
3878     -- Check the combinations of Book classification,
3879     -- Revenue Recognition Method  Calculation Basis
3880     -- Check for Operating Lease
3881 
3882     IF (l_book_class = G_BOOK_CLASS_OP) THEN
3883       IF (l_interest_calc_basis NOT IN
3884             (G_ICB_FIXED, G_ICB_FLOAT_FACTOR, G_ICB_REAMORT )) THEN
3885         OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
3886                             ,p_msg_name     => G_OKL_LLA_REBOOK_INVALID
3887                             ,p_token1       => G_BOOK_CLASS
3888                             ,p_token1_value => l_book_class_meaning
3889                             ,p_token2       => G_INT_CALC_BASIS
3890                             ,p_token2_value => l_interest_calc_meaning);
3891         RAISE OKL_API.G_EXCEPTION_ERROR;
3892       END IF;
3893 
3894       IF ( l_interest_calc_basis = G_ICB_REAMORT) THEN
3895         -- Donot allow Rebook if  interest has been processed
3896         IF ( l_interest_proc_date IS NOT NULL ) THEN
3897           IF (l_mass_rebook_flag = OKL_API.G_TRUE) THEN -- 4766555
3898             NULL;
3899           ELSE
3900           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
3901                               ,p_msg_name     => G_OKL_LLA_RBK_INT_PROC_INVAL
3902                               ,p_token1       => G_COL_NAME
3903                               ,p_token1_value => l_contract_number);
3904           RAISE OKL_API.G_EXCEPTION_ERROR;
3905           END IF;
3906         ELSE
3907           -- Get the due date of the Rental stream that was last billed
3908           OPEN get_last_billed_due_date(p_chr_id, G_STRM_RENT);
3909             FETCH get_last_billed_due_date
3910             INTO l_last_billed_due_date, l_stream_name;
3911           CLOSE get_last_billed_due_date;
3912           -- Get the due date of the Rental Accrual stream that was last accrued
3913           /* -- Bug 5000110
3914           OPEN get_last_accrued_due_date(p_chr_id, G_STRM_RENT_ACCRUAL);
3915             FETCH get_last_accrued_due_date
3916             INTO l_last_accrued_due_date, l_stream_name;
3917           CLOSE get_last_accrued_due_date; */
3918 
3919           IF ( l_last_billed_due_date IS NOT NULL
3920              AND p_rebook_date <= l_last_billed_due_date) THEN
3921             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
3922                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_BILL_INVAL
3923                                 ,p_token1       => G_STREAM
3924                                 ,p_token1_value => l_stream_name
3925                                 ,p_token2       => G_DUE_DATE
3926                                 ,p_token2_value => l_last_billed_due_date);
3927             RAISE OKL_API.G_EXCEPTION_ERROR;
3928           /*ELSIF ( l_last_accrued_due_date IS NOT NULL
3929                 AND p_rebook_date <= l_last_accrued_due_date) THEN
3930             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
3931                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_ACCR_INVAL
3932                                 ,p_token1       => G_STREAM
3933                                 ,p_token1_value => l_stream_name
3934                                 ,p_token2       => G_DUE_DATE
3935                                 ,p_token2_value => l_last_accrued_due_date);
3936             RAISE OKL_API.G_EXCEPTION_ERROR; */ -- Bug 5000110
3937           END IF; -- end of check for rebook date
3938         END IF; -- end of check for interest rate processed
3939 
3940       END IF; -- end of REAMORT check
3941 
3942     -- Check for Sales Type Lease
3943     ELSIF (l_book_class = G_BOOK_CLASS_ST) THEN
3944       IF (l_interest_calc_basis NOT IN
3945             (G_ICB_FIXED, G_ICB_FLOAT_FACTOR, G_ICB_REAMORT )) THEN
3946         OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
3947                             ,p_msg_name     => G_OKL_LLA_REBOOK_INVALID
3948                             ,p_token1       => G_BOOK_CLASS
3949                             ,p_token1_value => l_book_class_meaning
3950                             ,p_token2       => G_INT_CALC_BASIS
3951                             ,p_token2_value => l_interest_calc_meaning);
3952         RAISE OKL_API.G_EXCEPTION_ERROR;
3953       END IF;
3954       IF ( l_interest_calc_basis = G_ICB_REAMORT) THEN
3955         -- Donot allow Rebook if  interest has been processed
3956         IF ( l_interest_proc_date IS NOT NULL ) THEN
3957           IF (l_mass_rebook_flag = OKL_API.G_TRUE) THEN -- 4766555
3958             NULL;
3959           ELSE
3960           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
3961                               ,p_msg_name     => G_OKL_LLA_RBK_INT_PROC_INVAL
3962                               ,p_token1       => G_COL_NAME
3963                               ,p_token1_value => l_contract_number);
3964           RAISE OKL_API.G_EXCEPTION_ERROR;
3965           END IF;
3966         ELSE
3967           -- Get the due date of the Rental stream that was last billed
3968           OPEN get_last_billed_due_date(p_chr_id, G_STRM_RENT);
3969             FETCH get_last_billed_due_date
3970             INTO l_last_billed_due_date, l_stream_name;
3971           CLOSE get_last_billed_due_date;
3972           -- Get the due date of the Pre-Tax Income stream that was last accrued
3973           -- Bug 5000110
3974           /*
3975           OPEN get_last_accrued_due_date(p_chr_id, G_STRM_PRE_TAX);
3976             FETCH get_last_accrued_due_date
3977             INTO l_last_accrued_due_date, l_stream_name;
3978           CLOSE get_last_accrued_due_date; */
3979 
3980           IF ( l_last_billed_due_date IS NOT NULL AND
3981                p_rebook_date <= l_last_billed_due_date) THEN
3982             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
3983                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_BILL_INVAL
3984                                 ,p_token1       => G_STREAM
3985                                 ,p_token1_value => l_stream_name
3986                                 ,p_token2       => G_DUE_DATE
3987                                 ,p_token2_value => l_last_billed_due_date);
3988             RAISE OKL_API.G_EXCEPTION_ERROR;
3989           /*ELSIF ( l_last_accrued_due_date IS NOT NULL AND
3990                   p_rebook_date <= l_last_accrued_due_date) THEN
3991             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
3992                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_ACCR_INVAL
3993                                 ,p_token1       => G_STREAM
3994                                 ,p_token1_value => l_stream_name
3995                                 ,p_token2       => G_DUE_DATE
3996                                 ,p_token2_value => l_last_accrued_due_date);
3997             RAISE OKL_API.G_EXCEPTION_ERROR; */ -- Bug 5000110
3998           END IF; -- end of check for rebook date
3999         END IF; -- end of check for interest rate processed
4000 
4001       END IF; -- end of REAMORT check
4002 
4003     -- Check for Direct Finance Lease
4004     ELSIF (l_book_class = G_BOOK_CLASS_DF) THEN
4005       IF (l_interest_calc_basis NOT IN
4006              (G_ICB_FIXED, G_ICB_FLOAT_FACTOR, G_ICB_REAMORT )) THEN
4007         OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4008                             ,p_msg_name     => G_OKL_LLA_REBOOK_INVALID
4009                             ,p_token1       => G_BOOK_CLASS
4010                             ,p_token1_value => l_book_class_meaning
4011                             ,p_token2       => G_INT_CALC_BASIS
4012                             ,p_token2_value => l_interest_calc_meaning);
4013         RAISE OKL_API.G_EXCEPTION_ERROR;
4014       END IF;
4015 
4016       IF ( l_interest_calc_basis = G_ICB_REAMORT) THEN
4017         -- Donot allow Rebook if  interest has been processed
4018         IF ( l_interest_proc_date IS NOT NULL ) THEN
4019           IF (l_mass_rebook_flag = OKL_API.G_TRUE) THEN -- 4766555
4020             NULL;
4021           ELSE
4022           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4023                               ,p_msg_name     => G_OKL_LLA_RBK_INT_PROC_INVAL
4024                               ,p_token1       => G_COL_NAME
4025                               ,p_token1_value => l_contract_number);
4026           RAISE OKL_API.G_EXCEPTION_ERROR;
4027           END IF;
4028         ELSE
4029           -- Get the due date of the rent stream that was last billed
4030           OPEN get_last_billed_due_date(p_chr_id, G_STRM_RENT);
4031             FETCH get_last_billed_due_date
4032             INTO l_last_billed_due_date, l_stream_name;
4033           CLOSE get_last_billed_due_date;
4034           -- Get the due date of the Pre-Tax Income stream that was last accrued
4035           -- Bug 5000110
4036           /*
4037           OPEN get_last_accrued_due_date(p_chr_id, G_STRM_PRE_TAX);
4038             FETCH get_last_accrued_due_date
4039             INTO l_last_accrued_due_date, l_stream_name;
4040           CLOSE get_last_accrued_due_date; */
4041 
4042           IF ( l_last_billed_due_date IS NOT NULL AND
4043                p_rebook_date <= l_last_billed_due_date) THEN
4044             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4045                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_BILL_INVAL
4046                                 ,p_token1       => G_STREAM
4047                                 ,p_token1_value => l_stream_name
4048                                 ,p_token2       => G_DUE_DATE
4049                                 ,p_token2_value => l_last_billed_due_date);
4050             RAISE OKL_API.G_EXCEPTION_ERROR;
4051           /*ELSIF ( l_last_accrued_due_date IS NOT NULL AND
4052                   p_rebook_date <= l_last_accrued_due_date) THEN
4053             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4054                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_ACCR_INVAL
4055                                 ,p_token1       => G_STREAM
4056                                 ,p_token1_value => l_stream_name
4057                                 ,p_token2       => G_DUE_DATE
4058                                 ,p_token2_value => l_last_accrued_due_date);
4059             RAISE OKL_API.G_EXCEPTION_ERROR; */ -- Bug 5000110
4060           END IF; -- end of check for rebook date
4061         END IF; -- end of check for interest rate processed
4062 
4063       END IF; -- end of REAMORT check
4064 
4065          -- Check for Loan
4066     ELSIF (l_book_class = G_BOOK_CLASS_LOAN) THEN
4067       IF (l_interest_calc_basis NOT IN
4068           (G_ICB_FIXED, G_ICB_FLOAT, G_ICB_REAMORT, G_ICB_CATCHUP_CLEANUP)) THEN
4069         OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4070                             ,p_msg_name     => G_OKL_LLA_REBOOK_INVALID
4071                             ,p_token1       => G_BOOK_CLASS
4072                             ,p_token1_value => l_book_class_meaning
4073                             ,p_token2       => G_INT_CALC_BASIS
4074                             ,p_token2_value => l_interest_calc_meaning);
4075         RAISE OKL_API.G_EXCEPTION_ERROR;
4076       END IF;
4077 
4078       --Bug# 13831818
4079       IF (l_interest_calc_basis = G_ICB_CATCHUP_CLEANUP) THEN
4080         IF (l_interest_proc_date IS NOT NULL) AND (p_rebook_date <= l_interest_proc_date) THEN
4081 
4082             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4083                                 ,p_msg_name     => G_OKL_LLA_RBK_INT_CAL_DT_INV
4084                                 ,p_token2       => G_DUE_DATE
4085                                 ,p_token2_value => l_interest_proc_date);
4086             RAISE OKL_API.G_EXCEPTION_ERROR;
4087         END IF;
4088       END IF;
4089       --Bug# 13831818
4090 
4091       IF ( l_interest_calc_basis = G_ICB_REAMORT) THEN
4092         IF ( l_interest_proc_date IS NOT NULL ) THEN
4093           IF (l_mass_rebook_flag = OKL_API.G_TRUE) THEN -- 4766555
4094             NULL;
4095           ELSE
4096           OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4097                               ,p_msg_name     => G_OKL_LLA_RBK_INT_PROC_INVAL
4098                               ,p_token1       => G_COL_NAME
4099                               ,p_token1_value => l_contract_number);
4100           RAISE OKL_API.G_EXCEPTION_ERROR;
4101           END IF;
4102         ELSE
4103           /* 13394074
4104           -- Get the due date of the rent stream that was last billed
4105           OPEN get_last_billed_due_date(p_chr_id, G_STRM_RENT);
4106             FETCH get_last_billed_due_date
4107             INTO l_last_billed_due_date, l_stream_name;
4108           CLOSE get_last_billed_due_date;
4109           -- Get the due date of the Interest Income stream that was last accrued
4110           13394074 */
4111           -- Bug 5000110
4112           /*
4113           OPEN get_last_accrued_due_date(p_chr_id, G_STRM_INT_INCOME);
4114             FETCH get_last_accrued_due_date
4115             INTO l_last_accrued_due_date, l_stream_name;
4116           CLOSE get_last_accrued_due_date; */
4117 
4118           /* 13394074
4119           IF ( l_last_billed_due_date IS NOT NULL
4120                AND p_rebook_date <= l_last_billed_due_date) THEN
4121             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4122                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_BILL_INVAL
4123                                 ,p_token1       => G_STREAM
4124                                 ,p_token1_value => l_stream_name
4125                                 ,p_token2       => G_DUE_DATE
4126                                 ,p_token2_value => l_last_billed_due_date);
4127             RAISE OKL_API.G_EXCEPTION_ERROR;
4128           13394074 */
4129           /*ELSIF ( l_last_accrued_due_date IS NOT NULL AND
4130                   p_rebook_date <= l_last_accrued_due_date) THEN
4131             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4132                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_ACCR_INVAL
4133                                 ,p_token1       => G_STREAM
4134                                 ,p_token1_value => l_stream_name
4135                                 ,p_token2       => G_DUE_DATE
4136                                 ,p_token2_value => l_last_accrued_due_date);
4137             RAISE OKL_API.G_EXCEPTION_ERROR; */ -- Bug 5000110
4138           --END IF; -- end of check for rebook date 13394074
4139 
4140             /* 13394074 Start */
4141             IF (l_rev_recog_method = G_RRM_ACTUAL) THEN
4142               -- Get the due date of the loan payment stream last billed
4143               OPEN get_last_billed_due_date(p_chr_id, G_STRM_LOAN_PAYMENT);
4144                 FETCH get_last_billed_due_date
4145                 INTO l_last_billed_due_date, l_stream_name;
4146               CLOSE get_last_billed_due_date;
4147               IF ( l_last_billed_due_date IS NOT NULL
4148                    AND p_rebook_date <= l_last_billed_due_date) THEN
4149                 OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4150                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_BILL_INVAL
4151                                 ,p_token1       => G_STREAM
4152                                 ,p_token1_value => l_stream_name
4153                                 ,p_token2       => G_DUE_DATE
4154                                 ,p_token2_value => l_last_billed_due_date);
4155                 RAISE OKL_API.G_EXCEPTION_ERROR;
4156               END IF;
4157             ELSE
4158               -- Get the due date of the principal payment stream last billed
4159               OPEN get_last_billed_due_date(p_chr_id, G_STRM_PRINCIPAL_PAYMENT);
4160                 FETCH get_last_billed_due_date
4161                 INTO l_last_billed_due_date, l_stream_name;
4162               CLOSE get_last_billed_due_date;
4163               IF ( l_last_billed_due_date IS NOT NULL
4164                    AND p_rebook_date <= l_last_billed_due_date) THEN
4165                 OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4166                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_BILL_INVAL
4167                                 ,p_token1       => G_STREAM
4168                                 ,p_token1_value => l_stream_name
4169                                 ,p_token2       => G_DUE_DATE
4170                                 ,p_token2_value => l_last_billed_due_date);
4171                 RAISE OKL_API.G_EXCEPTION_ERROR;
4172               END IF;
4173 
4174               -- Get the due date of the interest payment stream last billed
4175               OPEN get_last_billed_due_date(p_chr_id, G_STRM_INTEREST_PAYMENT);
4176                 FETCH get_last_billed_due_date
4177                 INTO l_last_billed_due_date, l_stream_name;
4178               CLOSE get_last_billed_due_date;
4179               IF ( l_last_billed_due_date IS NOT NULL
4180                    AND p_rebook_date <= l_last_billed_due_date) THEN
4181                 OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4182                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_BILL_INVAL
4183                                 ,p_token1       => G_STREAM
4184                                 ,p_token1_value => l_stream_name
4185                                 ,p_token2       => G_DUE_DATE
4186                                 ,p_token2_value => l_last_billed_due_date);
4187                 RAISE OKL_API.G_EXCEPTION_ERROR;
4188               END IF;
4189 
4190             END IF;
4191 
4192             /* 13394074 End */
4193 
4194         END IF; -- end of check for interest rate processed
4195 
4196       END IF; -- end of REAMORT check
4197 
4198       IF ( l_interest_calc_basis = G_ICB_FLOAT) THEN
4199         -- Check if the Revenue Recognition Method is Estimated and Actual
4200         --IF ( l_rev_recog_method = G_RRM_EST_ACTUAL) THEN 13394074
4201         IF ( l_rev_recog_method = G_RRM_EST_BILLED) THEN -- 13394074
4202           -- Get the due date of the Variable Interest Income stream that was last billed
4203           --OPEN get_last_billed_due_date(p_chr_id, G_STRM_VAR_INT_INCOME); 13394074
4204           OPEN get_last_billed_due_date(p_chr_id, G_STRM_VAR_INT); -- 13394074
4205             FETCH get_last_billed_due_date
4206             INTO l_last_billed_due_date, l_stream_name;
4207           CLOSE get_last_billed_due_date;
4208           -- Get the due date of the Variable Interest Income stream that was last acrrued
4209           -- Bug 5000110
4210           /*
4211           OPEN get_last_accrued_due_date(p_chr_id, G_STRM_VAR_INT_INCOME);
4212             FETCH get_last_accrued_due_date
4213             INTO l_last_accrued_due_date, l_stream_name;
4214           CLOSE get_last_accrued_due_date; */
4215 
4216           IF ( l_last_billed_due_date IS NOT NULL AND
4217                p_rebook_date <= l_last_billed_due_date) THEN
4218             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4219                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_BILL_INVAL
4220                                 ,p_token1       => G_STREAM
4221                                 ,p_token1_value => l_stream_name
4222                                 ,p_token2       => G_DUE_DATE
4223                                 ,p_token2_value => l_last_billed_due_date);
4224             RAISE OKL_API.G_EXCEPTION_ERROR;
4225           /*ELSIF ( l_last_accrued_due_date IS NOT NULL AND
4226                   p_rebook_date <= l_last_accrued_due_date) THEN
4227             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4228                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_ACCR_INVAL
4229                                 ,p_token1       => G_STREAM
4230                                 ,p_token1_value => l_stream_name
4231                                 ,p_token2       => G_DUE_DATE
4232                                 ,p_token2_value => l_last_accrued_due_date);
4233             RAISE OKL_API.G_EXCEPTION_ERROR; */ -- Bug 5000110
4234           END IF; -- end of check for rebook date
4235         -- Check if the Revenue Recognition Method is Actual
4236         ELSIF ( l_rev_recog_method = G_RRM_ACTUAL) THEN
4237           -- Get the due date of the Variable Loan Payment stream that was last billed
4238           --OPEN get_last_billed_due_date(p_chr_id, G_STRM_LOAN_PAYMENT); 13394074
4239           OPEN get_last_billed_due_date(p_chr_id, G_STRM_VAR_LOAN_PAYMENT); -- 13394074
4240             FETCH get_last_billed_due_date
4241             INTO l_last_billed_due_date, l_stream_name;
4242           CLOSE get_last_billed_due_date;
4243           -- Get the due date of the Interest Income stream that was last accrued
4244           -- Bug 5000110
4245           /*
4246           OPEN get_last_accrued_due_date(p_chr_id, G_STRM_INT_INCOME);
4247             FETCH get_last_accrued_due_date
4248             INTO l_last_accrued_due_date, l_stream_name;
4249           CLOSE get_last_accrued_due_date; */
4250 
4251           IF ( l_last_billed_due_date IS NOT NULL AND
4252                p_rebook_date <= l_last_billed_due_date) THEN
4253             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4254                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_BILL_INVAL
4255                                 ,p_token1       => G_STREAM
4256                                 ,p_token1_value => l_stream_name
4257                                 ,p_token2       => G_DUE_DATE
4258                                 ,p_token2_value => l_last_billed_due_date);
4259             RAISE OKL_API.G_EXCEPTION_ERROR;
4260           /*ELSIF ( l_last_accrued_due_date IS NOT NULL AND
4261                   p_rebook_date <= l_last_accrued_due_date) THEN
4262             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4263                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_ACCR_INVAL
4264                                 ,p_token1       => G_STREAM
4265                                 ,p_token1_value => l_stream_name
4266                                 ,p_token2       => G_DUE_DATE
4267                                 ,p_token2_value => l_last_accrued_due_date);
4268             RAISE OKL_API.G_EXCEPTION_ERROR; */ -- Bug 5000110
4269           END IF; -- end of check for rebook date
4270         END IF; -- end of check for Revenue Recognition Method
4271       END IF; -- end of check for Interest Calculation Basis=FLOAT
4272 
4273     -- Check for Revolving Loans
4274     ELSIF (l_book_class = G_BOOK_CLASS_REVLOAN) THEN
4275       IF (l_interest_calc_basis <> G_ICB_FLOAT) THEN
4276         OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4277                             ,p_msg_name     => G_OKL_LLA_REBOOK_INVALID
4278                             ,p_token1       => G_BOOK_CLASS
4279                             ,p_token1_value => l_book_class_meaning
4280                             ,p_token2       => G_INT_CALC_BASIS
4281                             ,p_token2_value => l_interest_calc_meaning);
4282         RAISE OKL_API.G_EXCEPTION_ERROR;
4283       ELSE
4284         -- Check if the Revenue Recognition Method is Estimated and Actual
4285         --IF ( l_rev_recog_method = G_RRM_EST_ACTUAL) THEN 13394074
4286         IF ( l_rev_recog_method = G_RRM_EST_BILLED) THEN -- 13394074
4287           -- Get the due date of the Variable Interest Income stream that was last billed
4288           --OPEN get_last_billed_due_date(p_chr_id, G_STRM_VAR_INT_INCOME); 13394074
4289           OPEN get_last_billed_due_date(p_chr_id, G_STRM_VAR_INT); -- 13394074
4290             FETCH get_last_billed_due_date
4291             INTO l_last_billed_due_date, l_stream_name;
4292           CLOSE get_last_billed_due_date;
4293           -- Get the due date of the Variable Interest Income stream that was last accrued
4294           -- Bug 5000110
4295           /*
4296           OPEN get_last_accrued_due_date(p_chr_id, G_STRM_VAR_INT_INCOME);
4297             FETCH get_last_accrued_due_date
4298             INTO l_last_accrued_due_date, l_stream_name;
4299           CLOSE get_last_accrued_due_date; */
4300 
4301           IF ( l_last_billed_due_date IS NOT NULL AND
4302                p_rebook_date <= l_last_billed_due_date) THEN
4303             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4304                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_BILL_INVAL
4305                                 ,p_token1       => G_STREAM
4306                                 ,p_token1_value => l_stream_name
4307                                 ,p_token2       => G_DUE_DATE
4308                                 ,p_token2_value => l_last_billed_due_date);
4309             RAISE OKL_API.G_EXCEPTION_ERROR;
4310           /*ELSIF ( l_last_accrued_due_date IS NOT NULL AND
4311                   p_rebook_date <= l_last_accrued_due_date) THEN
4312             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4313                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_ACCR_INVAL
4314                                 ,p_token1       => G_STREAM
4315                                 ,p_token1_value => l_stream_name
4316                                 ,p_token2       => G_DUE_DATE
4317                                 ,p_token2_value => l_last_accrued_due_date);
4318             RAISE OKL_API.G_EXCEPTION_ERROR; */ -- Bug 5000110
4319           END IF; -- end of check for rebook date
4320         -- Check if the Revenue Recognition Method is Actual
4321         ELSIF ( l_rev_recog_method = G_RRM_ACTUAL) THEN
4322           -- Get the due date of the Variable Loan Payment stream that was last billed
4323           --OPEN get_last_billed_due_date(p_chr_id, G_STRM_LOAN_PAYMENT); 13394074
4324           OPEN get_last_billed_due_date(p_chr_id, G_STRM_VAR_LOAN_PAYMENT); -- 13394074
4325             FETCH get_last_billed_due_date
4326             INTO l_last_billed_due_date, l_stream_name;
4327           CLOSE get_last_billed_due_date;
4328           -- Get the due date of the Interest Income stream that was last accrued
4329           -- Bug 5000110
4330           /*
4331           OPEN get_last_accrued_due_date(p_chr_id, G_STRM_INT_INCOME);
4332             FETCH get_last_accrued_due_date
4333             INTO l_last_accrued_due_date, l_stream_name;
4334           CLOSE get_last_accrued_due_date; */
4335 
4336           IF ( l_last_billed_due_date IS NOT NULL AND
4337                p_rebook_date <= l_last_billed_due_date) THEN
4338             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4339                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_BILL_INVAL
4340                                 ,p_token1       => G_STREAM
4341                                 ,p_token1_value => l_stream_name
4342                                 ,p_token2       => G_DUE_DATE
4343                                 ,p_token2_value => l_last_billed_due_date);
4344             RAISE OKL_API.G_EXCEPTION_ERROR;
4345           /*ELSIF ( l_last_accrued_due_date IS NOT NULL AND
4346                   p_rebook_date <= l_last_accrued_due_date) THEN
4347             OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
4348                                 ,p_msg_name     => G_OKL_LLA_RBK_DATE_ACCR_INVAL
4349                                 ,p_token1       => G_STREAM
4350                                 ,p_token1_value => l_stream_name
4351                                 ,p_token2       => G_DUE_DATE
4352                                 ,p_token2_value => l_last_accrued_due_date);
4353             RAISE OKL_API.G_EXCEPTION_ERROR; */ -- Bug 5000110
4354           END IF; -- end of check for rebook date
4355         END IF; -- end of check for Revenue Recognition Method
4356       END IF; -- end of check for Interest Calculation Basis=FLOAT
4357     /*-- Raise an error if the book classification is not valid.
4358          ELSE
4359            RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR; */
4360     END IF;
4361 
4362     END IF;
4363     --Bug# 13447258: End
4364 
4365     OKL_API.END_ACTIVITY (x_msg_count,
4366                          x_msg_data );
4367 
4368   EXCEPTION
4369     WHEN OKL_API.G_EXCEPTION_ERROR THEN
4370     x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4371                                l_api_name,
4372                                G_PKG_NAME,
4373                                'OKL_API.G_RET_STS_ERROR',
4374                                x_msg_count,
4375                                x_msg_data,
4376                                '_PVT');
4377     WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4378     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4379                               l_api_name,
4380                               G_PKG_NAME,
4381                               'OKL_API.G_RET_STS_UNEXP_ERROR',
4382                               x_msg_count,
4383                               x_msg_data,
4384                               '_PVT');
4385     WHEN OTHERS THEN
4386     x_return_status :=OKL_API.HANDLE_EXCEPTIONS(
4387                               l_api_name,
4388                               G_PKG_NAME,
4389                               'OTHERS',
4390                               x_msg_count,
4391                               x_msg_data,
4392                               '_PVT');
4393   END; -- end of procedure Check_Rebook_Allowed
4394 
4395   -- smadhava Bug#4542290 - 22-Aug-2005 - Added - End
4396 
4397 PROCEDURE SYNC_RATE_PARAMS(
4398                      p_orig_contract_id  IN NUMBER,
4399                      p_new_contract_id   IN NUMBER) IS
4400     TYPE l_kkhr_id_type is table of okl_k_rate_params.khr_id%TYPE index by binary_integer;
4401     TYPE l_kparameter_type_code_type is table of okl_k_rate_params.parameter_type_code%TYPE index by binary_integer;
4402     TYPE l_keffective_from_date_type is table of okl_k_rate_params.effective_from_date%TYPE index by binary_integer;
4403     TYPE l_keffective_to_date_type is table of okl_k_rate_params.effective_to_date%TYPE index by binary_integer;
4404     TYPE l_kinterest_index_id_type is table of okl_k_rate_params.interest_index_id%TYPE index by binary_integer;
4405     TYPE l_kbase_rate_type is table of okl_k_rate_params.base_rate%TYPE index by binary_integer;
4406     TYPE l_kinterest_start_date_type is table of okl_k_rate_params.interest_start_date%TYPE index by binary_integer;
4407     TYPE l_kadder_rate_type is table of okl_k_rate_params.adder_rate%TYPE index by binary_integer;
4408     TYPE l_kmaximum_rate_type is table of okl_k_rate_params.maximum_rate%TYPE index by binary_integer;
4409     TYPE l_kminimum_rate_type is table of okl_k_rate_params.minimum_rate%TYPE index by binary_integer;
4410     TYPE l_kprincipal_basis_code_type is table of okl_k_rate_params.principal_basis_code%TYPE index by binary_integer;
4411     TYPE l_kdays_in_a_month_code_type is table of okl_k_rate_params.days_in_a_month_code%TYPE index by binary_integer;
4412     TYPE l_kdays_in_a_year_code_type is table of okl_k_rate_params.days_in_a_year_code%TYPE index by binary_integer;
4413     TYPE l_kinterest_basis_code_type is table of okl_k_rate_params.interest_basis_code%TYPE index by binary_integer;
4414     TYPE l_krate_delay_code_type is table of okl_k_rate_params.rate_delay_code%TYPE index by binary_integer;
4415     TYPE l_krate_delay_frequency_type is table of okl_k_rate_params.rate_delay_frequency%TYPE index by binary_integer;
4416     TYPE l_kcompounding_frequ_code_type is table of okl_k_rate_params.compounding_frequency_code%TYPE index by binary_integer;
4417     TYPE l_kcalculation_formula_id_type is table of okl_k_rate_params.calculation_formula_id%TYPE index by binary_integer;
4418     TYPE l_kcatchup_basis_code_type is table of okl_k_rate_params.catchup_basis_code%TYPE index by binary_integer;
4419     TYPE l_kcatchup_start_date_type is table of okl_k_rate_params.catchup_start_date%TYPE index by binary_integer;
4420     TYPE l_kcatchup_settlemen_code_type is table of okl_k_rate_params.catchup_settlement_code%TYPE index by binary_integer;
4421     TYPE l_krate_change_start_date_type is table of okl_k_rate_params.rate_change_start_date%TYPE index by binary_integer;
4422     TYPE l_krate_change_frequ_code_type is table of okl_k_rate_params.rate_change_frequency_code%TYPE index by binary_integer;
4423     TYPE l_krate_change_value_type is table of okl_k_rate_params.rate_change_value%TYPE index by binary_integer;
4424     TYPE l_kconversion_option_code_type is table of okl_k_rate_params.conversion_option_code%TYPE index by binary_integer;
4425     TYPE l_knext_conversion_date_type is table of okl_k_rate_params.next_conversion_date%TYPE index by binary_integer;
4426     TYPE l_kconversion_type_code_type is table of okl_k_rate_params.conversion_type_code%TYPE index by binary_integer;
4427     TYPE l_kattribute_category_type is table of okl_k_rate_params.attribute_category%TYPE index by binary_integer;
4428     TYPE l_kattribute1_type is table of okl_k_rate_params.attribute1%TYPE index by binary_integer;
4429     TYPE l_kattribute2_type is table of okl_k_rate_params.attribute2%TYPE index by binary_integer;
4430     TYPE l_kattribute3_type is table of okl_k_rate_params.attribute3%TYPE index by binary_integer;
4431     TYPE l_kattribute4_type is table of okl_k_rate_params.attribute4%TYPE index by binary_integer;
4432     TYPE l_kattribute5_type is table of okl_k_rate_params.attribute5%TYPE index by binary_integer;
4433     TYPE l_kattribute6_type is table of okl_k_rate_params.attribute6%TYPE index by binary_integer;
4434     TYPE l_kattribute7_type is table of okl_k_rate_params.attribute7%TYPE index by binary_integer;
4435     TYPE l_kattribute8_type is table of okl_k_rate_params.attribute8%TYPE index by binary_integer;
4436     TYPE l_kattribute9_type is table of okl_k_rate_params.attribute9%TYPE index by binary_integer;
4437     TYPE l_kattribute10_type is table of okl_k_rate_params.attribute10%TYPE index by binary_integer;
4438     TYPE l_kattribute11_type is table of okl_k_rate_params.attribute11%TYPE index by binary_integer;
4439     TYPE l_kattribute12_type is table of okl_k_rate_params.attribute12%TYPE index by binary_integer;
4440     TYPE l_kattribute13_type is table of okl_k_rate_params.attribute13%TYPE index by binary_integer;
4441     TYPE l_kattribute14_type is table of okl_k_rate_params.attribute14%TYPE index by binary_integer;
4442     TYPE l_kattribute15_type is table of okl_k_rate_params.attribute15%TYPE index by binary_integer;
4443     TYPE l_kcatchup_frequency_code_type is table of okl_k_rate_params.catchup_frequency_code%TYPE index by binary_integer;
4444 
4445     l_kkhr_id_tab l_kkhr_id_type;
4446     l_kparameter_type_code_tab l_kparameter_type_code_type;
4447     l_keffective_from_date_tab l_keffective_from_date_type;
4448     l_keffective_to_date_tab l_keffective_to_date_type;
4449     l_kinterest_index_id_tab l_kinterest_index_id_type;
4450     l_kbase_rate_tab l_kbase_rate_type;
4451     l_kinterest_start_date_tab l_kinterest_start_date_type;
4452     l_kadder_rate_tab l_kadder_rate_type;
4453     l_kmaximum_rate_tab l_kmaximum_rate_type;
4454     l_kminimum_rate_tab l_kminimum_rate_type;
4455     l_kprincipal_basis_code_tab l_kprincipal_basis_code_type;
4456     l_kdays_in_a_month_code_tab l_kdays_in_a_month_code_type;
4457     l_kdays_in_a_year_code_tab l_kdays_in_a_year_code_type;
4458     l_kinterest_basis_code_tab l_kinterest_basis_code_type;
4459     l_krate_delay_code_tab l_krate_delay_code_type;
4460     l_krate_delay_frequency_tab l_krate_delay_frequency_type;
4461     l_kcompounding_frequ_code_tab l_kcompounding_frequ_code_type;
4462     l_kcalculation_formula_id_tab l_kcalculation_formula_id_type;
4463     l_kcatchup_basis_code_tab l_kcatchup_basis_code_type;
4464     l_kcatchup_start_date_tab l_kcatchup_start_date_type;
4465     l_kcatchup_settlemen_code_tab l_kcatchup_settlemen_code_type;
4466     l_krate_change_start_date_tab l_krate_change_start_date_type;
4467     l_krate_change_frequ_code_tab l_krate_change_frequ_code_type;
4468     l_krate_change_value_tab l_krate_change_value_type;
4469     l_kconversion_option_code_tab l_kconversion_option_code_type;
4470     l_knext_conversion_date_tab l_knext_conversion_date_type;
4471     l_kconversion_type_code_tab l_kconversion_type_code_type;
4472     l_kattribute_category_tab l_kattribute_category_type;
4473     l_kattribute1_tab l_kattribute1_type;
4474     l_kattribute2_tab l_kattribute2_type;
4475     l_kattribute3_tab l_kattribute3_type;
4476     l_kattribute4_tab l_kattribute4_type;
4477     l_kattribute5_tab l_kattribute5_type;
4478     l_kattribute6_tab l_kattribute6_type;
4479     l_kattribute7_tab l_kattribute7_type;
4480     l_kattribute8_tab l_kattribute8_type;
4481     l_kattribute9_tab l_kattribute9_type;
4482     l_kattribute10_tab l_kattribute10_type;
4483     l_kattribute11_tab l_kattribute11_type;
4484     l_kattribute12_tab l_kattribute12_type;
4485     l_kattribute13_tab l_kattribute13_type;
4486     l_kattribute14_tab l_kattribute14_type;
4487     l_kattribute15_tab l_kattribute15_type;
4488     l_kcatchup_frequency_code_tab l_kcatchup_frequency_code_type;
4489 
4490     l_kkhr_id_tab2 l_kkhr_id_type;
4491     l_kparameter_type_code_tab2 l_kparameter_type_code_type;
4492     l_keffective_from_date_tab2 l_keffective_from_date_type;
4493     l_keffective_to_date_tab2 l_keffective_to_date_type;
4494     l_kinterest_index_id_tab2 l_kinterest_index_id_type;
4495     l_kbase_rate_tab2 l_kbase_rate_type;
4496     l_kinterest_start_date_tab2 l_kinterest_start_date_type;
4497     l_kadder_rate_tab2 l_kadder_rate_type;
4498     l_kmaximum_rate_tab2 l_kmaximum_rate_type;
4499     l_kminimum_rate_tab2 l_kminimum_rate_type;
4500     l_kprincipal_basis_code_tab2 l_kprincipal_basis_code_type;
4501     l_kdays_in_a_month_code_tab2 l_kdays_in_a_month_code_type;
4502     l_kdays_in_a_year_code_tab2 l_kdays_in_a_year_code_type;
4503     l_kinterest_basis_code_tab2 l_kinterest_basis_code_type;
4504     l_krate_delay_code_tab2 l_krate_delay_code_type;
4505     l_krate_delay_frequency_tab2 l_krate_delay_frequency_type;
4506     l_kcompounding_frequ_code_tab2 l_kcompounding_frequ_code_type;
4507     l_kcalculation_formula_id_tab2 l_kcalculation_formula_id_type;
4508     l_kcatchup_basis_code_tab2 l_kcatchup_basis_code_type;
4509     l_kcatchup_start_date_tab2 l_kcatchup_start_date_type;
4510     l_kcatchup_settlemen_code_tab2 l_kcatchup_settlemen_code_type;
4511     l_krate_change_start_date_tab2 l_krate_change_start_date_type;
4512     l_krate_change_frequ_code_tab2 l_krate_change_frequ_code_type;
4513     l_krate_change_value_tab2 l_krate_change_value_type;
4514     l_kconversion_option_code_tab2 l_kconversion_option_code_type;
4515     l_knext_conversion_date_tab2 l_knext_conversion_date_type;
4516     l_kconversion_type_code_tab2 l_kconversion_type_code_type;
4517     l_kattribute_category_tab2 l_kattribute_category_type;
4518     l_kattribute1_tab2 l_kattribute1_type;
4519     l_kattribute2_tab2 l_kattribute2_type;
4520     l_kattribute3_tab2 l_kattribute3_type;
4521     l_kattribute4_tab2 l_kattribute4_type;
4522     l_kattribute5_tab2 l_kattribute5_type;
4523     l_kattribute6_tab2 l_kattribute6_type;
4524     l_kattribute7_tab2 l_kattribute7_type;
4525     l_kattribute8_tab2 l_kattribute8_type;
4526     l_kattribute9_tab2 l_kattribute9_type;
4527     l_kattribute10_tab2 l_kattribute10_type;
4528     l_kattribute11_tab2 l_kattribute11_type;
4529     l_kattribute12_tab2 l_kattribute12_type;
4530     l_kattribute13_tab2 l_kattribute13_type;
4531     l_kattribute14_tab2 l_kattribute14_type;
4532     l_kattribute15_tab2 l_kattribute15_type;
4533     l_kcatchup_frequency_code_tab2 l_kcatchup_frequency_code_type;
4534 
4535     l_k_rate_params_counter number := 1;
4536 
4537 --CURSOR C30(p_id NUMBER, p_date DATE) IS
4538 CURSOR C30(p_id NUMBER) IS
4539 SELECT
4540        a.khr_id, a.parameter_type_code, a.effective_from_date,
4541        a.effective_to_date, a.interest_index_id, a.base_rate,
4542        a.interest_start_date, a.adder_rate, a.maximum_rate,
4543        a.minimum_rate, a.principal_basis_code, a.days_in_a_month_code,
4544        a.days_in_a_year_code, a.interest_basis_code, a.rate_delay_code,
4545        a.rate_delay_frequency, a.compounding_frequency_code, a.calculation_formula_id,
4546        a.catchup_basis_code, a.catchup_start_date, a.catchup_settlement_code,
4547        a.rate_change_start_date, a.rate_change_frequency_code, a.rate_change_value,
4548        a.conversion_option_code, a.next_conversion_date, a.conversion_type_code,
4549        a.attribute_category, a.attribute1, a.attribute2,
4550        a.attribute3, a.attribute4, a.attribute5,
4551        a.attribute6, a.attribute7, a.attribute8,
4552        a.attribute9, a.attribute10, a.attribute11,
4553        a.attribute12, a.attribute13, a.attribute14,
4554        a.attribute15, a.catchup_frequency_code
4555 FROM   OKL_K_RATE_PARAMS a
4556 WHERE  a.khr_id = p_id;
4557 --AND    (effective_to_date is NULL OR
4558 --        effective_to_date = p_date);
4559 
4560 /*CURSOR max_effective_to_date_csr(p_id NUMBER) IS
4561 SELECT max(effective_to_date) effective_to_date
4562 FROM   OKL_K_RATE_PARAMS
4563 WHERE KHR_ID = p_id;
4564 
4565 l_max_effective_to_date DATE;*/
4566 BEGIN
4567   IF (G_DEBUG_ENABLED = 'Y') THEN
4568     G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4569   END IF;
4570   DELETE OKL_K_RATE_PARAMS
4571   WHERE  KHR_ID = p_new_contract_id;
4572   --AND    effective_to_date is NULL;
4573 
4574   /*FOR r IN max_effective_to_date_csr(p_orig_contract_id)
4575   LOOP
4576     l_max_effective_to_date := r.effective_to_date;
4577   END LOOP;*/
4578 
4579   --OPEN C30(p_orig_contract_id, l_max_effective_to_date);
4580   OPEN C30(p_orig_contract_id);
4581   LOOP
4582     FETCH C30 BULK COLLECT INTO
4583      l_kkhr_id_tab2, l_kparameter_type_code_tab2, l_keffective_from_date_tab2,
4584      l_keffective_to_date_tab2, l_kinterest_index_id_tab2, l_kbase_rate_tab2,
4585      l_kinterest_start_date_tab2, l_kadder_rate_tab2, l_kmaximum_rate_tab2,
4586      l_kminimum_rate_tab2, l_kprincipal_basis_code_tab2, l_kdays_in_a_month_code_tab2,
4587      l_kdays_in_a_year_code_tab2, l_kinterest_basis_code_tab2, l_krate_delay_code_tab2,
4588      l_krate_delay_frequency_tab2, l_kcompounding_frequ_code_tab2, l_kcalculation_formula_id_tab2,
4589      l_kcatchup_basis_code_tab2, l_kcatchup_start_date_tab2, l_kcatchup_settlemen_code_tab2,
4590      l_krate_change_start_date_tab2, l_krate_change_frequ_code_tab2, l_krate_change_value_tab2,
4591      l_kconversion_option_code_tab2, l_knext_conversion_date_tab2, l_kconversion_type_code_tab2,
4592      l_kattribute_category_tab2, l_kattribute1_tab2, l_kattribute2_tab2,
4593      l_kattribute3_tab2, l_kattribute4_tab2, l_kattribute5_tab2,
4594      l_kattribute6_tab2, l_kattribute7_tab2, l_kattribute8_tab2,
4595      l_kattribute9_tab2, l_kattribute10_tab2, l_kattribute11_tab2,
4596      l_kattribute12_tab2, l_kattribute13_tab2, l_kattribute14_tab2,
4597      l_kattribute15_tab2, l_kcatchup_frequency_code_tab2
4598     LIMIT G_BULK_SIZE;
4599     EXIT WHEN l_kkhr_id_tab2.COUNT = 0;
4600 
4601     FOR i IN l_kkhr_id_tab2.FIRST..l_kkhr_id_tab2.LAST
4602     LOOP
4603       l_kkhr_id_tab(l_k_rate_params_counter) := l_kkhr_id_tab2(i);
4604       l_kkhr_id_tab(l_k_rate_params_counter) := p_new_contract_id;
4605 
4606       l_kparameter_type_code_tab(l_k_rate_params_counter) := l_kparameter_type_code_tab2(i);
4607       l_keffective_from_date_tab(l_k_rate_params_counter) := l_keffective_from_date_tab2(i);
4608       l_keffective_to_date_tab(l_k_rate_params_counter) := l_keffective_to_date_tab2(i);
4609       l_kinterest_index_id_tab(l_k_rate_params_counter) := l_kinterest_index_id_tab2(i);
4610       l_kbase_rate_tab(l_k_rate_params_counter) := l_kbase_rate_tab2(i);
4611       l_kinterest_start_date_tab(l_k_rate_params_counter) := l_kinterest_start_date_tab2(i);
4612 
4613       l_kadder_rate_tab(l_k_rate_params_counter) := l_kadder_rate_tab2(i);
4614       l_kmaximum_rate_tab(l_k_rate_params_counter) := l_kmaximum_rate_tab2(i);
4615       l_kminimum_rate_tab(l_k_rate_params_counter) := l_kminimum_rate_tab2(i);
4616       l_kprincipal_basis_code_tab(l_k_rate_params_counter) := l_kprincipal_basis_code_tab2(i);
4617       l_kdays_in_a_month_code_tab(l_k_rate_params_counter) := l_kdays_in_a_month_code_tab2(i);
4618       l_kdays_in_a_year_code_tab(l_k_rate_params_counter) := l_kdays_in_a_year_code_tab2(i);
4619       l_kinterest_basis_code_tab(l_k_rate_params_counter) := l_kinterest_basis_code_tab2(i);
4620       l_krate_delay_code_tab(l_k_rate_params_counter) := l_krate_delay_code_tab2(i);
4621       l_krate_delay_frequency_tab(l_k_rate_params_counter) := l_krate_delay_frequency_tab2(i);
4622       l_kcompounding_frequ_code_tab(l_k_rate_params_counter) := l_kcompounding_frequ_code_tab2(i);
4623       l_kcalculation_formula_id_tab(l_k_rate_params_counter) := l_kcalculation_formula_id_tab2(i);
4624       l_kcatchup_basis_code_tab(l_k_rate_params_counter) := l_kcatchup_basis_code_tab2(i);
4625       l_kcatchup_start_date_tab(l_k_rate_params_counter) := l_kcatchup_start_date_tab2(i);
4626 
4627       l_kcatchup_settlemen_code_tab(l_k_rate_params_counter) := l_kcatchup_settlemen_code_tab2(i);
4628       l_krate_change_start_date_tab(l_k_rate_params_counter) := l_krate_change_start_date_tab2(i);
4629 
4630       l_krate_change_frequ_code_tab(l_k_rate_params_counter) := l_krate_change_frequ_code_tab2(i);
4631       l_krate_change_value_tab(l_k_rate_params_counter) := l_krate_change_value_tab2(i);
4632       l_kconversion_option_code_tab(l_k_rate_params_counter) := l_kconversion_option_code_tab2(i);
4633       l_knext_conversion_date_tab(l_k_rate_params_counter) := l_knext_conversion_date_tab2(i);
4634       l_kconversion_type_code_tab(l_k_rate_params_counter) := l_kconversion_type_code_tab2(i);
4635       l_kattribute_category_tab(l_k_rate_params_counter) := l_kattribute_category_tab2(i);
4636       l_kattribute1_tab(l_k_rate_params_counter) := l_kattribute1_tab2(i);
4637       l_kattribute2_tab(l_k_rate_params_counter) := l_kattribute2_tab2(i);
4638       l_kattribute3_tab(l_k_rate_params_counter) := l_kattribute3_tab2(i);
4639       l_kattribute4_tab(l_k_rate_params_counter) := l_kattribute4_tab2(i);
4640       l_kattribute5_tab(l_k_rate_params_counter) := l_kattribute5_tab2(i);
4641       l_kattribute6_tab(l_k_rate_params_counter) := l_kattribute6_tab2(i);
4642       l_kattribute7_tab(l_k_rate_params_counter) := l_kattribute7_tab2(i);
4643       l_kattribute8_tab(l_k_rate_params_counter) := l_kattribute8_tab2(i);
4644       l_kattribute9_tab(l_k_rate_params_counter) := l_kattribute9_tab2(i);
4645       l_kattribute10_tab(l_k_rate_params_counter) := l_kattribute10_tab2(i);
4646       l_kattribute11_tab(l_k_rate_params_counter) := l_kattribute11_tab2(i);
4647       l_kattribute12_tab(l_k_rate_params_counter) := l_kattribute12_tab2(i);
4648       l_kattribute13_tab(l_k_rate_params_counter) := l_kattribute13_tab2(i);
4649       l_kattribute14_tab(l_k_rate_params_counter) := l_kattribute14_tab2(i);
4650       l_kattribute15_tab(l_k_rate_params_counter) := l_kattribute15_tab2(i);
4651       l_kcatchup_frequency_code_tab(l_k_rate_params_counter) := l_kcatchup_frequency_code_tab2(i);
4652 
4653       l_k_rate_params_counter := l_k_rate_params_counter + 1;
4654     END LOOP;
4655   END LOOP;
4656   CLOSE C30;
4657 
4658   IF l_k_rate_params_counter > 1 THEN
4659     FORALL i IN l_kkhr_id_tab.FIRST..l_kkhr_id_tab.LAST
4660       INSERT INTO okl_k_rate_params (
4661        khr_id, parameter_type_code, effective_from_date,
4662        effective_to_date, interest_index_id, base_rate,
4663        interest_start_date, adder_rate, maximum_rate,
4664        minimum_rate, principal_basis_code, days_in_a_month_code,
4665        days_in_a_year_code, interest_basis_code, rate_delay_code,
4666        rate_delay_frequency,compounding_frequency_code, calculation_formula_id,
4667        catchup_basis_code, catchup_start_date, catchup_settlement_code,
4668        rate_change_start_date, rate_change_frequency_code, rate_change_value,
4669        conversion_option_code, next_conversion_date, conversion_type_code,
4670        attribute_category, attribute1, attribute2,
4671        attribute3, attribute4, attribute5,
4672        attribute6, attribute7, attribute8,
4673        attribute9, attribute10, attribute11,
4674        attribute12, attribute13, attribute14,
4675        attribute15, created_by, creation_date,
4676        last_updated_by, last_update_date, last_update_login,
4677        catchup_frequency_code
4678       ) VALUES (
4679        l_kkhr_id_tab(i), l_kparameter_type_code_tab(i), l_keffective_from_date_tab(i),
4680        l_keffective_to_date_tab(i), l_kinterest_index_id_tab(i), l_kbase_rate_tab(i),
4681        l_kinterest_start_date_tab(i), l_kadder_rate_tab(i), l_kmaximum_rate_tab(i),
4682        l_kminimum_rate_tab(i), l_kprincipal_basis_code_tab(i), l_kdays_in_a_month_code_tab(i),
4683        l_kdays_in_a_year_code_tab(i), l_kinterest_basis_code_tab(i), l_krate_delay_code_tab(i),
4684        l_krate_delay_frequency_tab(i), l_kcompounding_frequ_code_tab(i), l_kcalculation_formula_id_tab(i),
4685        l_kcatchup_basis_code_tab(i), l_kcatchup_start_date_tab(i), l_kcatchup_settlemen_code_tab(i),
4686        l_krate_change_start_date_tab(i), l_krate_change_frequ_code_tab(i), l_krate_change_value_tab(i),
4687        l_kconversion_option_code_tab(i), l_knext_conversion_date_tab(i), l_kconversion_type_code_tab(i),
4688        l_kattribute_category_tab(i),l_kattribute1_tab(i), l_kattribute2_tab(i),
4689        l_kattribute3_tab(i), l_kattribute4_tab(i), l_kattribute5_tab(i),
4690        l_kattribute6_tab(i), l_kattribute7_tab(i), l_kattribute8_tab(i),
4691        l_kattribute9_tab(i), l_kattribute10_tab(i), l_kattribute11_tab(i),
4692        l_kattribute12_tab(i), l_kattribute13_tab(i), l_kattribute14_tab(i),
4693        l_kattribute15_tab(i), fnd_global.user_id, SYSDATE,
4694        fnd_global.user_id, SYSDATE, fnd_global.login_id,
4695        l_kcatchup_frequency_code_tab(i)
4696       );
4697   END IF;
4698 
4699 EXCEPTION WHEN OTHERS THEN
4700 
4701   --x_return_status := OKL_API.G_RET_STS_ERROR;
4702     /* DEBUG */
4703   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4704       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'sqlcode=' || SQLCODE || ':sqlerrm=' || SQLERRM);
4705     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Printing copy_var_int_rate_params:l_kkhr_id_tab.count=' || l_kkhr_id_tab.COUNT || ' ...');
4706   END IF;
4707   IF (l_kkhr_id_tab.COUNT > 0) THEN
4708   FOR i IN l_kkhr_id_tab.first..l_kkhr_id_tab.last
4709   LOOP
4710     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4711           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'KHR_ID('||i||')=' || l_kKHR_ID_tab(i));
4712       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'PARAMETER_TYPE_CODE('||i||')=' || l_kPARAMETER_TYPE_CODE_tab(i));
4713       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'EFFECTIVE_FROM_DATE('||i||')=' || l_kEFFECTIVE_FROM_DATE_tab(i));
4714       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'EFFECTIVE_TO_DATE('||i||')=' || l_kEFFECTIVE_TO_DATE_tab(i));
4715       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'INTEREST_INDEX_ID('||i||')=' || l_kINTEREST_INDEX_ID_tab(i));
4716       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'BASE_RATE('||i||')=' || l_kBASE_RATE_tab(i));
4717       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'INTEREST_START_DATE('||i||')=' || l_kINTEREST_START_DATE_tab(i));
4718       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ADDER_RATE('||i||')=' || l_kADDER_RATE_tab(i));
4719       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'MAXIMUM_RATE('||i||')=' || l_kMAXIMUM_RATE_tab(i));
4720       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'MINIMUM_RATE('||i||')=' || l_kMINIMUM_RATE_tab(i));
4721       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'PRINCIPAL_BASIS_CODE('||i||')=' || l_kPRINCIPAL_BASIS_CODE_tab(i));
4722       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'DAYS_IN_A_MONTH_CODE('||i||')=' || l_kDAYS_IN_A_MONTH_CODE_tab(i));
4723       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'DAYS_IN_A_YEAR_CODE('||i||')=' || l_kDAYS_IN_A_YEAR_CODE_tab(i));
4724       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'INTEREST_BASIS_CODE('||i||')=' || l_kINTEREST_BASIS_CODE_tab(i));
4725       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'RATE_DELAY_CODE('||i||')=' || l_kRATE_DELAY_CODE_tab(i));
4726       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'RATE_DELAY_FREQUENCY('||i||')=' || l_kRATE_DELAY_FREQUENCY_tab(i));
4727       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'COMPOUNDING_FREQUENCY_CODE('||i||')=' || l_kCOMPOUNDING_FREQU_CODE_tab(i));
4728       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'CALCULATION_FORMULA_ID('||i||')=' || l_kCALCULATION_FORMULA_ID_tab(i));
4729       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'CATCHUP_BASIS_CODE('||i||')=' || l_kCATCHUP_BASIS_CODE_tab(i));
4730       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'CATCHUP_START_DATE('||i||')=' || l_kCATCHUP_START_DATE_tab(i));
4731       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'CATCHUP_SETTLEMENT_CODE('||i||')=' || l_kCATCHUP_SETTLEMEN_CODE_tab(i));
4732       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'RATE_CHANGE_START_DATE('||i||')=' || l_kRATE_CHANGE_START_DATE_tab(i));
4733       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'RATE_CHANGE_FREQUENCY_CODE('||i||')=' || l_kRATE_CHANGE_FREQU_CODE_tab(i));
4734       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'RATE_CHANGE_VALUE('||i||')=' || l_kRATE_CHANGE_VALUE_tab(i));
4735       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'CONVERSION_OPTION_CODE('||i||')=' || l_kCONVERSION_OPTION_CODE_tab(i));
4736       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'NEXT_CONVERSION_DATE('||i||')=' || l_kNEXT_CONVERSION_DATE_tab(i));
4737       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'CONVERSION_TYPE_CODE('||i||')=' || l_kCONVERSION_TYPE_CODE_tab(i));
4738       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE_CATEGORY('||i||')=' || l_kATTRIBUTE_CATEGORY_tab(i));
4739       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE1('||i||')=' || l_kATTRIBUTE1_tab(i));
4740       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE2('||i||')=' || l_kATTRIBUTE2_tab(i));
4741       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE3('||i||')=' || l_kATTRIBUTE3_tab(i));
4742       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE4('||i||')=' || l_kATTRIBUTE4_tab(i));
4743       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE5('||i||')=' || l_kATTRIBUTE5_tab(i));
4744       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE6('||i||')=' || l_kATTRIBUTE6_tab(i));
4745       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE7('||i||')=' || l_kATTRIBUTE7_tab(i));
4746       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE8('||i||')=' || l_kATTRIBUTE8_tab(i));
4747       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE9('||i||')=' || l_kATTRIBUTE9_tab(i));
4748       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE10('||i||')=' || l_kATTRIBUTE10_tab(i));
4749       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE11('||i||')=' || l_kATTRIBUTE11_tab(i));
4750       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE12('||i||')=' || l_kATTRIBUTE12_tab(i));
4751       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE13('||i||')=' || l_kATTRIBUTE13_tab(i));
4752       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE14('||i||')=' || l_kATTRIBUTE14_tab(i));
4753       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'ATTRIBUTE15('||i||')=' || l_kATTRIBUTE15_tab(i));
4754       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'CATCHUP_FREQUENCY_CODE('||i||')=' || l_kCATCHUP_FREQUENCY_CODE_tab(i));
4755     END IF;
4756   END LOOP;
4757   END IF;
4758 
4759   RAISE OKC_API.G_EXCEPTION_ERROR;
4760 END SYNC_RATE_PARAMS;
4761 
4762 PROCEDURE check_base_rate(
4763                              p_khr_id            IN NUMBER,
4764                              x_base_rate_defined OUT NOCOPY BOOLEAN,
4765                              x_return_status     OUT NOCOPY VARCHAR2) IS
4766 CURSOR base_rate_csr(p_id NUMBER) IS
4767 SELECT base_rate
4768 FROM   OKL_K_RATE_PARAMS
4769 WHERE  KHR_ID = p_id
4770 AND    PARAMETER_TYPE_CODE = 'ACTUAL'
4771 AND    EFFECTIVE_TO_DATE IS NULL;
4772 
4773 l_base_rate NUMBER := NULL;
4774 BEGIN
4775   NULL;
4776   OPEN base_rate_csr(p_khr_id);
4777   FETCH base_rate_csr
4778   INTO  l_base_rate;
4779   CLOSE base_rate_csr;
4780 
4781   IF (l_base_rate IS NULL OR
4782       l_base_rate = OKL_API.G_MISS_NUM) THEN
4783     x_base_rate_defined := FALSE;
4784   ELSE
4785     x_base_rate_defined := TRUE;
4786   END IF;
4787   x_return_status := OKL_API.G_RET_STS_SUCCESS;
4788 
4789   EXCEPTION
4790     WHEN NO_DATA_FOUND THEN -- Bug 4905142
4791       x_base_rate_defined := FALSE;
4792       x_return_status := OKL_API.G_RET_STS_SUCCESS;
4793     WHEN OTHERS THEN
4794       x_return_status := OKL_API.G_RET_STS_ERROR;
4795       x_base_rate_defined := FALSE;
4796 END;
4797 
4798 PROCEDURE check_principal_payment(
4799             p_api_version             IN NUMBER,
4800             p_init_msg_list           IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
4801             x_return_status           OUT NOCOPY VARCHAR2,
4802             x_msg_count               OUT NOCOPY NUMBER,
4803             x_msg_data                OUT NOCOPY VARCHAR2,
4804             p_chr_id                  IN OKC_K_HEADERS_B.ID%TYPE,
4805             x_principal_payment_defined  OUT NOCOPY BOOLEAN) IS
4806 
4807 cursor l_hdrrl_csr( rgcode OKC_RULE_GROUPS_B.RGD_CODE%TYPE,
4808                     rlcat  OKC_RULES_B.RULE_INFORMATION_CATEGORY%TYPE,
4809                     chrId NUMBER) IS
4810     SELECT crl.object1_id1
4811     FROM   OKC_RULE_GROUPS_B crg,
4812            OKC_RULES_B crl
4813     WHERE  crl.rgp_id = crg.id
4814            AND crg.RGD_CODE = rgcode
4815            AND crl.RULE_INFORMATION_CATEGORY = rlcat
4816            AND crg.dnz_chr_id = chrId;
4817 
4818 CURSOR strm_name_csr ( styid NUMBER ) is
4819     SELECT tl.name name,
4820            stm.stream_type_purpose
4821     FROM okl_strm_type_b stm,
4822          OKL_STRM_TYPE_TL tl
4823     WHERE tl.id = stm.id
4824          AND tl.language = 'US'
4825          AND stm.id = styid;
4826 
4827 l_hdrrl_rec l_hdrrl_csr%ROWTYPE;
4828 l_strm_name_rec strm_name_csr%ROWTYPE;
4829 l_api_version NUMBER := 1;
4830 l_api_name VARCHAR2(30) := 'check_principal_payment';
4831 
4832 BEGIN
4833     x_return_status := OKL_API.G_RET_STS_SUCCESS;
4834     x_principal_payment_defined := FALSE;
4835 
4836     x_return_status := OKL_API.START_ACTIVITY(
4837 			p_api_name      => l_api_name,
4838 			p_pkg_name      => g_pkg_name,
4839 			p_init_msg_list => p_init_msg_list,
4840 			l_api_version   => l_api_version,
4841 			p_api_version   => p_api_version,
4842 			p_api_type      => G_API_TYPE,
4843 			x_return_status => x_return_status);
4844 
4845     FOR l_hdrrl_rec in l_hdrrl_csr ( 'LALEVL', 'LASLH', p_chr_id )
4846     LOOP
4847         OPEN  strm_name_csr ( l_hdrrl_rec.object1_id1 );
4848         FETCH strm_name_csr into l_strm_name_rec;
4849         IF strm_name_csr%NOTFOUND THEN
4850             CLOSE strm_name_csr;
4851             RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4852         END IF;
4853         CLOSE strm_name_csr;
4854 
4855         IF ( l_strm_name_rec.stream_type_purpose = 'PRINCIPAL_PAYMENT' ) Then
4856           x_principal_payment_defined := TRUE;
4857         END IF;
4858     END LOOP;
4859 
4860     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
4861 
4862     EXCEPTION
4863 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
4864 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4865 			p_api_name  => l_api_name,
4866 			p_pkg_name  => g_pkg_name,
4867 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
4868 			x_msg_count => x_msg_count,
4869 			x_msg_data  => x_msg_data,
4870 			p_api_type  => g_api_type);
4871 
4872 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4873 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4874 			p_api_name  => l_api_name,
4875 			p_pkg_name  => g_pkg_name,
4876 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
4877 			x_msg_count => x_msg_count,
4878 			x_msg_data  => x_msg_data,
4879 			p_api_type  => g_api_type);
4880 
4881 	WHEN OTHERS THEN
4882       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
4883 			p_api_name  => l_api_name,
4884 			p_pkg_name  => g_pkg_name,
4885 			p_exc_name  => 'OTHERS',
4886 			x_msg_count => x_msg_count,
4887 			x_msg_data  => x_msg_data,
4888 			p_api_type  => g_api_type);
4889 
4890 END;
4891 
4892 FUNCTION get_formula_id(p_name IN VARCHAR2) RETURN NUMBER IS
4893 l_formula_id number := NULL;
4894 begin
4895   IF (p_name is NOT NULL) THEN
4896     --RETURN(NULL);
4897   --ELSE
4898     select id
4899     INTO   l_formula_id
4900     FROM   OKL_FORMULAE_B
4901     WHERE  NAME = p_name;
4902 
4903   END IF;
4904   return(l_formula_id);
4905 end;
4906 
4907 PROCEDURE copy_k_rate_params(
4908     p_api_version                  IN NUMBER,
4909     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
4910     x_return_status                OUT NOCOPY VARCHAR2,
4911     x_msg_count                    OUT NOCOPY NUMBER,
4912     x_msg_data                     OUT NOCOPY VARCHAR2,
4913     p_khr_id                       IN  NUMBER,
4914     p_effective_from_date          IN  DATE,
4915     p_rate_type                    IN  VARCHAR2,
4916     x_krpv_rec                     OUT NOCOPY krpv_rec_type) IS
4917 
4918 l_effective_from_date DATE;
4919 l_parameter_type_code VARCHAR2(30);
4920 l_orig_system_source_code VARCHAR2(30);
4921 l_orig_system_id1 NUMBER;
4922 l_orig_effective_from_date DATE;
4923 l_last_interest_cal_date DATE;
4924 l_api_name varchar2(240) := 'copy_k_rate_params';
4925 l_krpv_rec krpv_rec_type;
4926 
4927 CURSOR get_effective_from_date_csr(
4928           p_khr_id NUMBER,
4929           p_parameter_type_code VARCHAR2) IS
4930 select rate.effective_from_date,
4931        contract.orig_system_source_code,
4932        lease.date_last_interim_interest_cal,
4933        contract.orig_system_id1
4934 FROM   OKL_K_RATE_PARAMS rate,
4935        OKC_K_HEADERS_B contract,
4936        OKL_K_HEADERS lease
4937 WHERE  rate.khr_id = p_khr_id
4938 AND    rate.parameter_type_code =  p_parameter_type_code
4939 AND    rate.effective_to_date is null
4940 AND    rate.khr_id = contract.id
4941 AND    contract.id = lease.id;
4942 
4943 -- Bug 4999888
4944  l_interest_calc_basis OKL_PRODUCT_PARAMETERS_V.INTEREST_CALCULATION_BASIS%TYPE;
4945  l_rev_recog_method OKL_PRODUCT_PARAMETERS_V.REVENUE_RECOGNITION_METHOD%TYPE;
4946  l_pdt_params_rec OKL_SETUPPRODUCTS_PUB.pdt_parameters_rec_type;
4947 
4948      --Cursor to query the last billed due date of the stream.
4949      CURSOR get_last_billed_due_date(
4950                p_chr_id OKC_K_HEADERS_B.ID%TYPE
4951              , p_stream_purpose OKL_STRM_TYPE_V.STREAM_TYPE_PURPOSE%TYPE) IS
4952        SELECT
4953            MAX(STE.STREAM_ELEMENT_DATE) LAST_STREAM_DUE_DATE
4954            --, STY.STYB_PURPOSE_MEANING
4955          FROM
4956             OKL_STRM_ELEMENTS STE
4957           , OKL_STREAMS       STM
4958           , OKL_STRM_TYPE_V   STY
4959           , OKL_K_HEADERS     KHR
4960           , OKC_K_HEADERS_B CHR
4961         WHERE
4962             STM.ID         = STE.STM_ID
4963         AND STY.ID         = STM.STY_ID
4964         AND KHR.ID         = STM.KHR_ID
4965         AND CHR.ID         = KHR.ID
4966         AND STE.DATE_BILLED IS NOT NULL
4967         AND CHR.ID         = p_chr_id
4968         AND STY.STREAM_TYPE_PURPOSE  = p_stream_purpose;
4969         --GROUP BY STY.STREAM_TYPE_PURPOSE;
4970 
4971   l_last_billed_due_date DATE;
4972 BEGIN
4973 
4974     x_return_status := OKL_API.G_RET_STS_SUCCESS;
4975 
4976     x_return_status := OKL_API.START_ACTIVITY(
4977 			p_api_name      => l_api_name,
4978 			p_pkg_name      => g_pkg_name,
4979 			p_init_msg_list => p_init_msg_list,
4980 			l_api_version   => 1,
4981 			p_api_version   => p_api_version,
4982 			p_api_type      => G_API_TYPE,
4983 			x_return_status => x_return_status);
4984 
4985     OKL_K_RATE_PARAMS_PVT.get_product(
4986                 p_api_version       => p_api_version,
4987                 p_init_msg_list     => p_init_msg_list,
4988                 x_return_status     => x_return_status,
4989                 x_msg_count         => x_msg_count,
4990                 x_msg_data          => x_msg_data,
4991                 p_khr_id            => p_khr_id,
4992                 x_pdt_parameter_rec => l_pdt_params_rec);
4993 
4994      IF (x_return_status = OKL_API.G_RET_STS_UNEXP_ERROR) THEN
4995        RAISE OKL_API.G_EXCEPTION_UNEXPECTED_ERROR;
4996      ELSIF (x_return_status = OKL_API.G_RET_STS_ERROR) THEN
4997        RAISE OKL_API.G_EXCEPTION_ERROR;
4998      END IF;
4999 
5000     l_interest_calc_basis := l_pdt_params_rec.interest_calculation_basis;
5001     l_rev_recog_method    := l_pdt_params_rec.revenue_recognition_method;
5002 
5003     -- AKP: todo (change actual lookup values)
5004     IF (p_rate_type IN ('INTEREST_RATE_PARAMS', 'ADDL_INTEREST_RATE_PARAMS', 'CONVERSION_BASIS')) THEN
5005       l_parameter_type_code := 'ACTUAL';
5006     ELSIF (p_rate_type IN ('INTEREST_RATE_PARAMS_CONV', 'ADDL_INTEREST_RATE_PARAMS_CONV')) THEN
5007       l_parameter_type_code := 'CONVERSION';
5008     ELSE
5009       OKC_API.set_message(p_app_name => G_APP_NAME,
5010                           p_msg_name => 'OKL_LLA_VAR_RATE_INV_PARAM');
5011       RAISE OKL_API.G_EXCEPTION_ERROR;
5012     END IF;
5013 
5014     l_effective_from_date := null;
5015     FOR r IN get_effective_from_date_csr(p_khr_id, l_parameter_type_code)
5016     LOOP
5017       l_effective_from_date := r.effective_from_date;
5018       l_orig_system_source_code := r.orig_system_source_code;
5019       l_last_interest_cal_date := r.date_last_interim_interest_cal;
5020       l_orig_system_id1 := r.orig_system_id1;
5021     END LOOP;
5022 
5023     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5024           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'copy:p_khr_id=' || p_khr_id);
5025       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'copy:l_parameter_type_code=' || l_parameter_type_code);
5026       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'copy:l_effective_from_date=' || l_effective_from_date);
5027     END IF;
5028     IF (l_effective_from_date is NULL) THEN
5029       l_krpv_rec.effective_from_date := NULL;
5030       x_krpv_rec := l_krpv_rec;
5031       OKL_API.END_ACTIVITY(x_msg_count => x_msg_count,
5032                            x_msg_data  => x_msg_data);
5033       return;
5034     END IF;
5035 
5036     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5037           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'copy:l_orig_system_source_code=' || l_orig_system_source_code);
5038     END IF;
5039     IF (l_orig_system_source_code <> 'OKL_REBOOK') THEN
5040       OKC_API.set_message(p_app_name => G_APP_NAME,
5041                           p_msg_name => 'OKL_LLA_VAR_RATE_COPY_NA');
5042       RAISE OKL_API.G_EXCEPTION_ERROR;
5043     END IF;
5044 
5045     -- Bug 4999888
5046     IF (l_interest_calc_basis = 'FIXED' and l_rev_recog_method='ACTUAL') THEN
5047       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5048               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'copy:Inside FIXED and ACTUAL...');
5049       END IF;
5050       OPEN get_last_billed_due_date(l_orig_system_id1, 'LOAN_PAYMENT');
5051       FETCH get_last_billed_due_date
5052         INTO l_last_billed_due_date;
5053       CLOSE get_last_billed_due_date;
5054 
5055       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5056               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_last_billed_due_date=' || l_last_billed_due_date);
5057         OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_effective_from_date=' || p_effective_from_date);
5058       END IF;
5059       IF (l_last_billed_due_date IS NOT NULL AND
5060             p_effective_from_date <= l_last_billed_due_date) THEN
5061         OKC_API.set_message(p_app_name => G_APP_NAME,
5062                             p_msg_name => 'OKL_LLA_VAR_RATE_INT_DATE',
5063                             p_token1 => 'EFF_DATE',
5064                             p_token1_value => p_effective_from_date,
5065                             p_token2 => 'INTEREST_DATE',
5066                             p_token2_value => l_last_billed_due_date);
5067         RAISE OKL_API.G_EXCEPTION_ERROR;
5068       END IF;
5069     END IF;
5070 
5071     -- Bug 4999888
5072     IF (l_interest_calc_basis IN
5073          ('FLOAT', 'REAMORT', 'FLOAT_FACTORS', 'CATCHUP/CLEANUP')) THEN
5074     IF (l_last_interest_cal_date IS NOT NULL) THEN
5075       IF (p_effective_from_date <= l_last_interest_cal_date) THEN
5076       OKC_API.set_message(p_app_name => G_APP_NAME,
5077                           p_msg_name => 'OKL_LLA_VAR_RATE_INT_DATE',
5078                           p_token1 => 'EFF_DATE',
5079                           p_token1_value => p_effective_from_date,
5080                           p_token2 => 'INTEREST_DATE',
5081                           p_token2_value => l_last_interest_cal_date);
5082       RAISE OKL_API.G_EXCEPTION_ERROR;
5083       END IF;
5084     END IF;
5085     END IF;
5086 
5087     FOR r IN get_effective_from_date_csr(l_orig_system_id1,
5088                                          l_parameter_type_code)
5089     LOOP
5090       l_orig_effective_from_date := r.effective_from_date;
5091     END LOOP;
5092 
5093     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5094           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'copy:l_orig_system_id1=' || l_orig_system_id1);
5095       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'copy:l_effective_from_date=' || l_effective_from_date);
5096       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'copy:l_orig_effective_from_date=' || l_orig_effective_from_date);
5097     END IF;
5098     IF (l_orig_effective_from_date <> l_effective_from_date) THEN
5099       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5100               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'copy:Yes, inside...');
5101       END IF;
5102       x_return_status := OKL_API.G_RET_STS_ERROR;
5103       OKC_API.set_message(p_app_name => G_APP_NAME,
5104                           p_msg_name => 'OKL_LLA_VAR_RATE_EXISTS');
5105       RAISE OKL_API.G_EXCEPTION_ERROR;
5106     END IF;
5107 
5108     SELECT
5109     KHR_ID, l_parameter_type_code, p_effective_from_date,
5110       EFFECTIVE_TO_DATE, INTEREST_INDEX_ID, BASE_RATE,
5111       INTEREST_START_DATE, ADDER_RATE, MAXIMUM_RATE,
5112       MINIMUM_RATE, PRINCIPAL_BASIS_CODE, DAYS_IN_A_MONTH_CODE,
5113       DAYS_IN_A_YEAR_CODE, INTEREST_BASIS_CODE, RATE_DELAY_CODE,
5114       RATE_DELAY_FREQUENCY, COMPOUNDING_FREQUENCY_CODE, CALCULATION_FORMULA_ID,
5115       CATCHUP_BASIS_CODE, CATCHUP_START_DATE, CATCHUP_SETTLEMENT_CODE,
5116       RATE_CHANGE_START_DATE, RATE_CHANGE_FREQUENCY_CODE, RATE_CHANGE_VALUE,
5117       CONVERSION_OPTION_CODE, NEXT_CONVERSION_DATE, CONVERSION_TYPE_CODE,
5118       ATTRIBUTE_CATEGORY, ATTRIBUTE1, ATTRIBUTE2,
5119       ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5,
5120       ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8,
5121       ATTRIBUTE9, ATTRIBUTE10, ATTRIBUTE11,
5122       ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14,
5123       ATTRIBUTE15, fnd_global.user_id, SYSDATE,
5124       fnd_global.user_id, SYSDATE, fnd_global.user_id,
5125       CATCHUP_FREQUENCY_CODE
5126     INTO
5127       x_krpv_rec.KHR_ID, x_krpv_rec.parameter_type_code, x_krpv_rec.effective_from_date,
5128       x_krpv_rec.EFFECTIVE_TO_DATE, x_krpv_rec.INTEREST_INDEX_ID, x_krpv_rec.BASE_RATE,
5129       x_krpv_rec.INTEREST_START_DATE, x_krpv_rec.ADDER_RATE, x_krpv_rec.MAXIMUM_RATE,
5130       x_krpv_rec.MINIMUM_RATE, x_krpv_rec.PRINCIPAL_BASIS_CODE, x_krpv_rec.DAYS_IN_A_MONTH_CODE,
5131       x_krpv_rec.DAYS_IN_A_YEAR_CODE, x_krpv_rec.INTEREST_BASIS_CODE, x_krpv_rec.RATE_DELAY_CODE,
5132       x_krpv_rec.RATE_DELAY_FREQUENCY, x_krpv_rec.COMPOUNDING_FREQUENCY_CODE, x_krpv_rec.CALCULATION_FORMULA_ID,
5133       x_krpv_rec.CATCHUP_BASIS_CODE, x_krpv_rec.CATCHUP_START_DATE, x_krpv_rec.CATCHUP_SETTLEMENT_CODE,
5134       x_krpv_rec.RATE_CHANGE_START_DATE, x_krpv_rec.RATE_CHANGE_FREQUENCY_CODE, x_krpv_rec.RATE_CHANGE_VALUE,
5135       x_krpv_rec.CONVERSION_OPTION_CODE, x_krpv_rec.NEXT_CONVERSION_DATE, x_krpv_rec.CONVERSION_TYPE_CODE,
5136       x_krpv_rec.ATTRIBUTE_CATEGORY, x_krpv_rec.ATTRIBUTE1, x_krpv_rec.ATTRIBUTE2,
5137       x_krpv_rec.ATTRIBUTE3, x_krpv_rec.ATTRIBUTE4, x_krpv_rec.ATTRIBUTE5,
5138       x_krpv_rec.ATTRIBUTE6, x_krpv_rec.ATTRIBUTE7, x_krpv_rec.ATTRIBUTE8,
5139       x_krpv_rec.ATTRIBUTE9, x_krpv_rec.ATTRIBUTE10, x_krpv_rec.ATTRIBUTE11,
5140       x_krpv_rec.ATTRIBUTE12, x_krpv_rec.ATTRIBUTE13, x_krpv_rec.ATTRIBUTE14,
5141       x_krpv_rec.ATTRIBUTE15, x_krpv_rec.CREATED_BY, x_krpv_rec.CREATION_DATE,
5142       x_krpv_rec.LAST_UPDATED_BY, x_krpv_rec.LAST_UPDATE_DATE, x_krpv_rec.LAST_UPDATE_LOGIN,
5143       x_krpv_rec.CATCHUP_FREQUENCY_CODE
5144     FROM  OKL_K_RATE_PARAMS
5145     WHERE KHR_ID = p_khr_id
5146     AND   PARAMETER_TYPE_CODE = l_parameter_type_code
5147     AND   EFFECTIVE_FROM_DATE = l_effective_from_date
5148     AND   EFFECTIVE_TO_DATE IS NULL;
5149 
5150     INSERT INTO OKL_K_RATE_PARAMS (
5151       KHR_ID, PARAMETER_TYPE_CODE, EFFECTIVE_FROM_DATE,
5152       EFFECTIVE_TO_DATE, INTEREST_INDEX_ID, BASE_RATE,
5153       INTEREST_START_DATE, ADDER_RATE, MAXIMUM_RATE,
5154       MINIMUM_RATE, PRINCIPAL_BASIS_CODE, DAYS_IN_A_MONTH_CODE,
5155       DAYS_IN_A_YEAR_CODE, INTEREST_BASIS_CODE, RATE_DELAY_CODE,
5156       RATE_DELAY_FREQUENCY, COMPOUNDING_FREQUENCY_CODE, CALCULATION_FORMULA_ID,
5157       CATCHUP_BASIS_CODE, CATCHUP_START_DATE, CATCHUP_SETTLEMENT_CODE,
5158       RATE_CHANGE_START_DATE, RATE_CHANGE_FREQUENCY_CODE, RATE_CHANGE_VALUE,
5159       CONVERSION_OPTION_CODE, NEXT_CONVERSION_DATE, CONVERSION_TYPE_CODE,
5160       ATTRIBUTE_CATEGORY, ATTRIBUTE1, ATTRIBUTE2,
5161       ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5,
5162       ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8,
5163       ATTRIBUTE9, ATTRIBUTE10, ATTRIBUTE11,
5164       ATTRIBUTE12, ATTRIBUTE13, ATTRIBUTE14,
5165       ATTRIBUTE15, CREATED_BY, CREATION_DATE,
5166       LAST_UPDATED_BY, LAST_UPDATE_DATE, LAST_UPDATE_LOGIN,
5167       CATCHUP_FREQUENCY_CODE
5168     )
5169     VALUES (
5170       x_krpv_rec.KHR_ID, x_krpv_rec.parameter_type_code, x_krpv_rec.effective_from_date,
5171       x_krpv_rec.EFFECTIVE_TO_DATE, x_krpv_rec.INTEREST_INDEX_ID, x_krpv_rec.BASE_RATE,
5172       x_krpv_rec.INTEREST_START_DATE, x_krpv_rec.ADDER_RATE, x_krpv_rec.MAXIMUM_RATE,
5173       x_krpv_rec.MINIMUM_RATE, x_krpv_rec.PRINCIPAL_BASIS_CODE, x_krpv_rec.DAYS_IN_A_MONTH_CODE,
5174       x_krpv_rec.DAYS_IN_A_YEAR_CODE, x_krpv_rec.INTEREST_BASIS_CODE, x_krpv_rec.RATE_DELAY_CODE,
5175       x_krpv_rec.RATE_DELAY_FREQUENCY, x_krpv_rec.COMPOUNDING_FREQUENCY_CODE, x_krpv_rec.CALCULATION_FORMULA_ID,
5176       x_krpv_rec.CATCHUP_BASIS_CODE, x_krpv_rec.CATCHUP_START_DATE, x_krpv_rec.CATCHUP_SETTLEMENT_CODE,
5177       x_krpv_rec.RATE_CHANGE_START_DATE, x_krpv_rec.RATE_CHANGE_FREQUENCY_CODE, x_krpv_rec.RATE_CHANGE_VALUE,
5178       x_krpv_rec.CONVERSION_OPTION_CODE, x_krpv_rec.NEXT_CONVERSION_DATE, x_krpv_rec.CONVERSION_TYPE_CODE,
5179       x_krpv_rec.ATTRIBUTE_CATEGORY, x_krpv_rec.ATTRIBUTE1, x_krpv_rec.ATTRIBUTE2,
5180       x_krpv_rec.ATTRIBUTE3, x_krpv_rec.ATTRIBUTE4, x_krpv_rec.ATTRIBUTE5,
5181       x_krpv_rec.ATTRIBUTE6, x_krpv_rec.ATTRIBUTE7, x_krpv_rec.ATTRIBUTE8,
5182       x_krpv_rec.ATTRIBUTE9, x_krpv_rec.ATTRIBUTE10, x_krpv_rec.ATTRIBUTE11,
5183       x_krpv_rec.ATTRIBUTE12, x_krpv_rec.ATTRIBUTE13, x_krpv_rec.ATTRIBUTE14,
5184       x_krpv_rec.ATTRIBUTE15, x_krpv_rec.CREATED_BY, x_krpv_rec.CREATION_DATE,
5185       x_krpv_rec.LAST_UPDATED_BY, x_krpv_rec.LAST_UPDATE_DATE, x_krpv_rec.LAST_UPDATE_LOGIN,
5186       x_krpv_rec.CATCHUP_FREQUENCY_CODE);
5187 
5188     UPDATE  OKL_K_RATE_PARAMS
5189     SET   EFFECTIVE_TO_DATE = p_effective_from_date - 1
5190     WHERE KHR_ID = p_khr_id
5191     AND   PARAMETER_TYPE_CODE = l_parameter_type_code
5192     AND   EFFECTIVE_FROM_DATE = l_effective_from_date
5193     AND   EFFECTIVE_TO_DATE IS NULL;
5194 
5195     OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
5196 
5197     EXCEPTION
5198 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
5199 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5200 			p_api_name  => l_api_name,
5201 			p_pkg_name  => g_pkg_name,
5202 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5203 			x_msg_count => x_msg_count,
5204 			x_msg_data  => x_msg_data,
5205 			p_api_type  => g_api_type);
5206 
5207 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5208 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5209 			p_api_name  => l_api_name,
5210 			p_pkg_name  => g_pkg_name,
5211 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5212 			x_msg_count => x_msg_count,
5213 			x_msg_data  => x_msg_data,
5214 			p_api_type  => g_api_type);
5215 
5216 	WHEN OTHERS THEN
5217       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5218 			p_api_name  => l_api_name,
5219 			p_pkg_name  => g_pkg_name,
5220 			p_exc_name  => 'OTHERS',
5221 			x_msg_count => x_msg_count,
5222 			x_msg_data  => x_msg_data,
5223 			p_api_type  => g_api_type);
5224 
5225 END;
5226 
5227 -- Bug 4917614
5228 PROCEDURE SYNC_BASE_RATE(
5229     p_api_version                  IN NUMBER,
5230     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
5231     x_return_status                OUT NOCOPY VARCHAR2,
5232     x_msg_count                    OUT NOCOPY NUMBER,
5233     x_msg_data                     OUT NOCOPY VARCHAR2,
5234     p_khr_id                       IN NUMBER) IS
5235 CURSOR implicit_interest_rate_csr(p_id NUMBER) IS
5236        SELECT IMPLICIT_INTEREST_RATE
5237        FROM   OKL_K_HEADERS
5238        WHERE  ID = p_id;
5239 
5240 l_base_count NUMBER;
5241 l_api_name varchar2(240) := 'sync_base_rate';
5242 l_implicit_interest_rate NUMBER;
5243 BEGIN
5244   NULL;
5245 
5246   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5247       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Sync_base_rate procedure...');
5248   END IF;
5249   x_return_status := OKL_API.START_ACTIVITY(
5250 			p_api_name      => l_api_name,
5251 			p_pkg_name      => g_pkg_name,
5252 			p_init_msg_list => p_init_msg_list,
5253 			l_api_version   => 1,
5254 			p_api_version   => p_api_version,
5255 			p_api_type      => G_API_TYPE,
5256 			x_return_status => x_return_status);
5257 
5258   SELECT COUNT(1)
5259   INTO   l_base_count
5260   FROM   OKL_K_RATE_PARAMS
5261   WHERE  khr_id = p_khr_id
5262   AND    PARAMETER_TYPE_CODE = 'ACTUAL'
5263   AND    EFFECTIVE_TO_DATE IS NULL
5264   AND    BASE_RATE IS NULL;
5265 
5266   IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5267       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_base_count=' || l_base_count);
5268   END IF;
5269   IF (l_base_count > 0) THEN
5270     OPEN implicit_interest_rate_csr(p_khr_id);
5271     FETCH implicit_interest_rate_csr INTO l_implicit_interest_rate;
5272     CLOSE implicit_interest_rate_csr;
5273 
5274     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
5275           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'l_implicit_interest_rate=' || l_implicit_interest_rate);
5276     END IF;
5277     UPDATE OKL_K_RATE_PARAMS
5278     SET    BASE_RATE = l_implicit_interest_rate
5279     WHERE  khr_id = p_khr_id
5280     AND    PARAMETER_TYPE_CODE = 'ACTUAL'
5281     AND    EFFECTIVE_TO_DATE IS NULL
5282     AND    BASE_RATE IS NULL;
5283   END IF;
5284 
5285   OKL_API.END_ACTIVITY(x_msg_count => x_msg_count, x_msg_data	 => x_msg_data);
5286 
5287   EXCEPTION
5288 	WHEN OKL_API.G_EXCEPTION_ERROR THEN
5289 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5290 			p_api_name  => l_api_name,
5291 			p_pkg_name  => g_pkg_name,
5292 			p_exc_name  => 'OKL_API.G_RET_STS_ERROR',
5293 			x_msg_count => x_msg_count,
5294 			x_msg_data  => x_msg_data,
5295 			p_api_type  => g_api_type);
5296 
5297 	WHEN OKL_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5298 		x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5299 			p_api_name  => l_api_name,
5300 			p_pkg_name  => g_pkg_name,
5301 			p_exc_name  => 'OKL_API.G_RET_STS_UNEXP_ERROR',
5302 			x_msg_count => x_msg_count,
5303 			x_msg_data  => x_msg_data,
5304 			p_api_type  => g_api_type);
5305 
5306 	WHEN OTHERS THEN
5307       	x_return_status := OKL_API.HANDLE_EXCEPTIONS(
5308 			p_api_name  => l_api_name,
5309 			p_pkg_name  => g_pkg_name,
5310 			p_exc_name  => 'OTHERS',
5311 			x_msg_count => x_msg_count,
5312 			x_msg_data  => x_msg_data,
5313 			p_api_type  => g_api_type);
5314 
5315 END;
5316 
5317 END OKL_K_RATE_PARAMS_PVT;