DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_KRP_PVT

Source


1 PACKAGE BODY OKL_KRP_PVT AS
2 /* $Header: OKLSKRPB.pls 120.18.12010000.2 2008/11/12 20:39:45 cklee 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 G_MISS_NUM	CONSTANT NUMBER := FND_API.G_MISS_NUM;
9 G_MISS_CHAR	CONSTANT VARCHAR2(1) := FND_API.G_MISS_CHAR;
10 G_MISS_DATE	CONSTANT DATE := FND_API.G_MISS_DATE;
11 
12 ---------------------------------------------------------------------------
13   -- Lookup Code Validation
14 ---------------------------------------------------------------------------
15 FUNCTION check_lookup_code(p_lookup_type IN VARCHAR2,
16                             p_lookup_code IN VARCHAR2) RETURN VARCHAR2 IS
17   x_return_status VARCHAR2(1):= Okl_Api.G_RET_STS_SUCCESS;
18   l_sysdate   DATE  := SYSDATE ;
19   l_dummy_var         VARCHAR2(1) := '?';
20   CURSOR l_lookup_code_csr IS
21           SELECT 'X'
22           FROM   fnd_lookups fndlup
23           WHERE  fndlup.lookup_type = p_lookup_type
24           AND    fndlup.lookup_code = p_lookup_code
25           AND    l_sysdate BETWEEN
26                          NVL(fndlup.start_date_active,l_sysdate)
27                          AND NVL(fndlup.end_date_active,l_sysdate);
28  BEGIN
29    OPEN l_lookup_code_csr;
30    FETCH l_lookup_code_csr INTO l_dummy_var;
31    CLOSE l_lookup_code_csr;
32  -- if l_dummy_var still set to default, data was not found
33    IF (l_dummy_var = '?') THEN
34      -- notify caller of an error
35         x_return_status := Okl_Api.G_RET_STS_ERROR;
36    END IF;
37       RETURN (x_return_status);
38   EXCEPTION
39    WHEN OTHERS THEN
40       -- notify caller of an UNEXPECTED error
41      x_return_status := Okl_Api.G_RET_STS_UNEXP_ERROR;
42 	 -- verify that cursor was closed
43       IF l_lookup_code_csr%ISOPEN THEN
44        CLOSE l_lookup_code_csr;
45       END IF;
46       RETURN(x_return_status);
47 END check_lookup_code;
48 
49   ---------------------------------------------------------------------------
50   -- PROCEDURE load_error_tbl
51   ---------------------------------------------------------------------------
52   PROCEDURE load_error_tbl (
53     px_error_rec                   IN OUT NOCOPY OKC_API.ERROR_REC_TYPE,
54     px_error_tbl                   IN OUT NOCOPY OKC_API.ERROR_TBL_TYPE) IS
55 
56     j                              INTEGER := NVL(px_error_tbl.LAST, 0) + 1;
57     last_msg_idx                   INTEGER := FND_MSG_PUB.COUNT_MSG;
58     l_msg_idx                      INTEGER := FND_MSG_PUB.G_NEXT;
59   BEGIN
60     -- FND_MSG_PUB has a small error in it.  If we call FND_MSG_PUB.COUNT_AND_GET before
61     -- we call FND_MSG_PUB.GET, the variable FND_MSG_PUB uses to control the index of the
62     -- message stack gets set to 1.  This makes sense until we call FND_MSG_PUB.GET which
63     -- automatically increments the index by 1, (making it 2), however, when the GET function
64     -- attempts to pull message 2, we get a NO_DATA_FOUND exception because there isn't any
65     -- message 2.  To circumvent this problem, check the amount of messages and compensate.
66     -- Again, this error only occurs when 1 message is on the stack because COUNT_AND_GET
67     -- will only update the index variable when 1 and only 1 message is on the stack.
68     IF (last_msg_idx = 1) THEN
69       l_msg_idx := FND_MSG_PUB.G_FIRST;
70     END IF;
71     LOOP
72       fnd_msg_pub.get(
73             p_msg_index     => l_msg_idx,
74             p_encoded       => fnd_api.g_false,
75             p_data          => px_error_rec.msg_data,
76             p_msg_index_out => px_error_rec.msg_count);
77       px_error_tbl(j) := px_error_rec;
78       j := j + 1;
79     EXIT WHEN (px_error_rec.msg_count = last_msg_idx);
80     END LOOP;
81   END load_error_tbl;
82   ---------------------------------------------------------------------------
83   -- FUNCTION find_highest_exception
84   ---------------------------------------------------------------------------
85   -- Finds the highest exception (G_RET_STS_UNEXP_ERROR)
86   -- in a OKC_API.ERROR_TBL_TYPE, and returns it.
87   FUNCTION find_highest_exception(
88     p_error_tbl                    IN OKC_API.ERROR_TBL_TYPE
89   ) RETURN VARCHAR2 IS
90     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
91     i                              INTEGER := 1;
92   BEGIN
93     IF (p_error_tbl.COUNT > 0) THEN
94       i := p_error_tbl.FIRST;
95       LOOP
96         IF (p_error_tbl(i).error_type <> OKC_API.G_RET_STS_SUCCESS) THEN
97           IF (l_return_status <> OKC_API.G_RET_STS_UNEXP_ERROR) THEN
98             l_return_status := p_error_tbl(i).error_type;
99           END IF;
100         END IF;
101         EXIT WHEN (i = p_error_tbl.LAST);
102         i := p_error_tbl.NEXT(i);
103       END LOOP;
104     END IF;
105     RETURN(l_return_status);
106   END find_highest_exception;
107   ---------------------------------------------------------------------------
108   -- FUNCTION get_seq_id
109   ---------------------------------------------------------------------------
110   FUNCTION get_seq_id RETURN NUMBER IS
111   BEGIN
112     RETURN(okc_p_util.raw_to_number(sys_guid()));
113   END get_seq_id;
114 
115   ---------------------------------------------------------------------------
116   -- PROCEDURE qc
117   ---------------------------------------------------------------------------
118   PROCEDURE qc IS
119   BEGIN
120     null;
121   END qc;
122 
123   ---------------------------------------------------------------------------
124   -- PROCEDURE change_version
125   ---------------------------------------------------------------------------
126   PROCEDURE change_version IS
127   BEGIN
128     null;
129   END change_version;
130 
131   ---------------------------------------------------------------------------
132   -- PROCEDURE api_copy
133   ---------------------------------------------------------------------------
134   PROCEDURE api_copy IS
135   BEGIN
136     null;
137   END api_copy;
138 
139   ---------------------------------------------------------------------------
140   -- FUNCTION get_rec for: OKL_K_RATE_PARAMS_V
141   ---------------------------------------------------------------------------
142   FUNCTION get_rec (
143     p_krpv_rec                     IN krpv_rec_type,
144     x_no_data_found                OUT NOCOPY BOOLEAN
145   ) RETURN krpv_rec_type IS
146     CURSOR okl_k_rate_params_v_u1_csr (p_effective_from_date IN DATE,
147                                        p_khr_id              IN NUMBER,
148                                        p_parameter_type_code IN VARCHAR2) IS
149     SELECT
150             KHR_ID,
151             PARAMETER_TYPE_CODE,
152             EFFECTIVE_FROM_DATE,
153             EFFECTIVE_TO_DATE,
154             INTEREST_INDEX_ID,
155             BASE_RATE,
156             INTEREST_START_DATE,
157             ADDER_RATE,
158             MAXIMUM_RATE,
159             MINIMUM_RATE,
160             PRINCIPAL_BASIS_CODE,
161             DAYS_IN_A_MONTH_CODE,
162             DAYS_IN_A_YEAR_CODE,
163             INTEREST_BASIS_CODE,
164             RATE_DELAY_CODE,
165             RATE_DELAY_FREQUENCY,
166             COMPOUNDING_FREQUENCY_CODE,
167             CALCULATION_FORMULA_ID,
168             CATCHUP_BASIS_CODE,
169             CATCHUP_START_DATE,
170             CATCHUP_SETTLEMENT_CODE,
171             RATE_CHANGE_START_DATE,
172             RATE_CHANGE_FREQUENCY_CODE,
173             RATE_CHANGE_VALUE,
174             CONVERSION_OPTION_CODE,
175             NEXT_CONVERSION_DATE,
176             CONVERSION_TYPE_CODE,
177             ATTRIBUTE_CATEGORY,
178             ATTRIBUTE1,
179             ATTRIBUTE2,
180             ATTRIBUTE3,
181             ATTRIBUTE4,
182             ATTRIBUTE5,
183             ATTRIBUTE6,
184             ATTRIBUTE7,
185             ATTRIBUTE8,
186             ATTRIBUTE9,
187             ATTRIBUTE10,
188             ATTRIBUTE11,
189             ATTRIBUTE12,
190             ATTRIBUTE13,
191             ATTRIBUTE14,
192             ATTRIBUTE15,
193             CREATED_BY,
194             CREATION_DATE,
195             LAST_UPDATED_BY,
196             LAST_UPDATE_DATE,
197             LAST_UPDATE_LOGIN,
198             CATCHUP_FREQUENCY_CODE
199       FROM Okl_K_Rate_Params_V
200      WHERE okl_k_rate_params_v.effective_from_date = p_effective_from_date
201        AND okl_k_rate_params_v.khr_id = p_khr_id
202        AND okl_k_rate_params_v.parameter_type_code = p_parameter_type_code;
203     l_okl_k_rate_params_v_u1       okl_k_rate_params_v_u1_csr%ROWTYPE;
204     l_krpv_rec                     krpv_rec_type;
205   BEGIN
206     x_no_data_found := TRUE;
207     -- Get current database values
208     OPEN okl_k_rate_params_v_u1_csr (p_krpv_rec.effective_from_date,
209                                      p_krpv_rec.khr_id,
210                                      p_krpv_rec.parameter_type_code);
211     FETCH okl_k_rate_params_v_u1_csr INTO
212               l_krpv_rec.khr_id,
213               l_krpv_rec.parameter_type_code,
214               l_krpv_rec.effective_from_date,
215               l_krpv_rec.effective_to_date,
216               l_krpv_rec.interest_index_id,
217               l_krpv_rec.base_rate,
218               l_krpv_rec.interest_start_date,
219               l_krpv_rec.adder_rate,
220               l_krpv_rec.maximum_rate,
221               l_krpv_rec.minimum_rate,
222               l_krpv_rec.principal_basis_code,
223               l_krpv_rec.days_in_a_month_code,
224               l_krpv_rec.days_in_a_year_code,
225               l_krpv_rec.interest_basis_code,
226               l_krpv_rec.rate_delay_code,
227               l_krpv_rec.rate_delay_frequency,
228               l_krpv_rec.compounding_frequency_code,
229               l_krpv_rec.calculation_formula_id,
230               l_krpv_rec.catchup_basis_code,
231               l_krpv_rec.catchup_start_date,
232               l_krpv_rec.catchup_settlement_code,
233               l_krpv_rec.rate_change_start_date,
234               l_krpv_rec.rate_change_frequency_code,
235               l_krpv_rec.rate_change_value,
236               l_krpv_rec.conversion_option_code,
237               l_krpv_rec.next_conversion_date,
238               l_krpv_rec.conversion_type_code,
239               l_krpv_rec.attribute_category,
240               l_krpv_rec.attribute1,
241               l_krpv_rec.attribute2,
242               l_krpv_rec.attribute3,
243               l_krpv_rec.attribute4,
244               l_krpv_rec.attribute5,
245               l_krpv_rec.attribute6,
246               l_krpv_rec.attribute7,
247               l_krpv_rec.attribute8,
248               l_krpv_rec.attribute9,
249               l_krpv_rec.attribute10,
250               l_krpv_rec.attribute11,
251               l_krpv_rec.attribute12,
252               l_krpv_rec.attribute13,
253               l_krpv_rec.attribute14,
254               l_krpv_rec.attribute15,
255               l_krpv_rec.created_by,
256               l_krpv_rec.creation_date,
257               l_krpv_rec.last_updated_by,
258               l_krpv_rec.last_update_date,
259               l_krpv_rec.last_update_login,
260               l_krpv_rec.catchup_frequency_code;
261     x_no_data_found := okl_k_rate_params_v_u1_csr%NOTFOUND;
262     CLOSE okl_k_rate_params_v_u1_csr;
263     RETURN(l_krpv_rec);
264   END get_rec;
265 
266   ------------------------------------------------------------------
267   -- This version of get_rec sets error messages if no data found --
268   ------------------------------------------------------------------
269   FUNCTION get_rec (
270     p_krpv_rec                     IN krpv_rec_type,
271     x_return_status                OUT NOCOPY VARCHAR2
272   ) RETURN krpv_rec_type IS
273     l_krpv_rec                     krpv_rec_type;
274     l_row_notfound                 BOOLEAN := TRUE;
275   BEGIN
276     x_return_status := OKC_API.G_RET_STS_SUCCESS;
277     l_krpv_rec := get_rec(p_krpv_rec, l_row_notfound);
278     IF (l_row_notfound) THEN
279       OKC_API.set_message(OKL_API.G_APP_NAME,G_INVALID_VALUE,G_COL_NAME_TOKEN,'EFFECTIVE_FROM_DATE');
280       OKC_API.set_message(OKL_API.G_APP_NAME,G_INVALID_VALUE,G_COL_NAME_TOKEN,'KHR_ID');
281       OKC_API.set_message(OKL_API.G_APP_NAME,G_INVALID_VALUE,G_COL_NAME_TOKEN,'PARAMETER_TYPE_CODE');
282       x_return_status := OKC_API.G_RET_STS_ERROR;
283     END IF;
284     RETURN(l_krpv_rec);
285   END get_rec;
286   -----------------------------------------------------------
287   -- So we don't have to pass an "l_row_notfound" variable --
288   -----------------------------------------------------------
289   FUNCTION get_rec (
290     p_krpv_rec                     IN krpv_rec_type
291   ) RETURN krpv_rec_type IS
292     l_row_not_found                BOOLEAN := TRUE;
293   BEGIN
294     RETURN(get_rec(p_krpv_rec, l_row_not_found));
295   END get_rec;
296   ---------------------------------------------------------------------------
297   -- FUNCTION get_rec for: OKL_K_RATE_PARAMS
298   ---------------------------------------------------------------------------
299   FUNCTION get_rec (
300     p_krp_rec                      IN krp_rec_type,
301     x_no_data_found                OUT NOCOPY BOOLEAN
302   ) RETURN krp_rec_type IS
303     CURSOR okl_k_rate_params_pk_csr (p_parameter_type_code IN VARCHAR2,
304                                      p_effective_from_date IN DATE,
305                                      p_khr_id              IN NUMBER) IS
306     SELECT
307             KHR_ID,
308             PARAMETER_TYPE_CODE,
309             EFFECTIVE_FROM_DATE,
310             EFFECTIVE_TO_DATE,
311             INTEREST_INDEX_ID,
312             BASE_RATE,
313             INTEREST_START_DATE,
314             ADDER_RATE,
315             MAXIMUM_RATE,
316             MINIMUM_RATE,
317             PRINCIPAL_BASIS_CODE,
318             DAYS_IN_A_MONTH_CODE,
319             DAYS_IN_A_YEAR_CODE,
320             INTEREST_BASIS_CODE,
321             RATE_DELAY_CODE,
322             RATE_DELAY_FREQUENCY,
323             COMPOUNDING_FREQUENCY_CODE,
324             CALCULATION_FORMULA_ID,
325             CATCHUP_BASIS_CODE,
326             CATCHUP_START_DATE,
327             CATCHUP_SETTLEMENT_CODE,
328             RATE_CHANGE_START_DATE,
329             RATE_CHANGE_FREQUENCY_CODE,
330             RATE_CHANGE_VALUE,
331             CONVERSION_OPTION_CODE,
332             NEXT_CONVERSION_DATE,
333             CONVERSION_TYPE_CODE,
334             ATTRIBUTE_CATEGORY,
335             ATTRIBUTE1,
336             ATTRIBUTE2,
337             ATTRIBUTE3,
338             ATTRIBUTE4,
339             ATTRIBUTE5,
340             ATTRIBUTE6,
341             ATTRIBUTE7,
342             ATTRIBUTE8,
343             ATTRIBUTE9,
344             ATTRIBUTE10,
345             ATTRIBUTE11,
346             ATTRIBUTE12,
347             ATTRIBUTE13,
348             ATTRIBUTE14,
349             ATTRIBUTE15,
350             CREATED_BY,
351             CREATION_DATE,
352             LAST_UPDATED_BY,
353             LAST_UPDATE_DATE,
354             LAST_UPDATE_LOGIN,
355             CATCHUP_FREQUENCY_CODE
356       FROM Okl_K_Rate_Params
357      WHERE okl_k_rate_params.parameter_type_code = p_parameter_type_code
358        AND okl_k_rate_params.effective_from_date = p_effective_from_date
359        AND okl_k_rate_params.khr_id = p_khr_id;
360     l_okl_k_rate_params_pk         okl_k_rate_params_pk_csr%ROWTYPE;
361     l_krp_rec                      krp_rec_type;
362   BEGIN
363     x_no_data_found := TRUE;
364     -- Get current database values
365     OPEN okl_k_rate_params_pk_csr (p_krp_rec.parameter_type_code,
366                                    p_krp_rec.effective_from_date,
367                                    p_krp_rec.khr_id);
368     FETCH okl_k_rate_params_pk_csr INTO
369               l_krp_rec.khr_id,
370               l_krp_rec.parameter_type_code,
371               l_krp_rec.effective_from_date,
372               l_krp_rec.effective_to_date,
373               l_krp_rec.interest_index_id,
374               l_krp_rec.base_rate,
375               l_krp_rec.interest_start_date,
376               l_krp_rec.adder_rate,
377               l_krp_rec.maximum_rate,
378               l_krp_rec.minimum_rate,
379               l_krp_rec.principal_basis_code,
380               l_krp_rec.days_in_a_month_code,
381               l_krp_rec.days_in_a_year_code,
382               l_krp_rec.interest_basis_code,
383               l_krp_rec.rate_delay_code,
384               l_krp_rec.rate_delay_frequency,
385               l_krp_rec.compounding_frequency_code,
386               l_krp_rec.calculation_formula_id,
387               l_krp_rec.catchup_basis_code,
388               l_krp_rec.catchup_start_date,
389               l_krp_rec.catchup_settlement_code,
390               l_krp_rec.rate_change_start_date,
391               l_krp_rec.rate_change_frequency_code,
392               l_krp_rec.rate_change_value,
393               l_krp_rec.conversion_option_code,
394               l_krp_rec.next_conversion_date,
395               l_krp_rec.conversion_type_code,
396               l_krp_rec.attribute_category,
397               l_krp_rec.attribute1,
398               l_krp_rec.attribute2,
399               l_krp_rec.attribute3,
400               l_krp_rec.attribute4,
401               l_krp_rec.attribute5,
402               l_krp_rec.attribute6,
403               l_krp_rec.attribute7,
404               l_krp_rec.attribute8,
405               l_krp_rec.attribute9,
406               l_krp_rec.attribute10,
407               l_krp_rec.attribute11,
408               l_krp_rec.attribute12,
409               l_krp_rec.attribute13,
410               l_krp_rec.attribute14,
411               l_krp_rec.attribute15,
412               l_krp_rec.created_by,
413               l_krp_rec.creation_date,
414               l_krp_rec.last_updated_by,
415               l_krp_rec.last_update_date,
416               l_krp_rec.last_update_login,
417               l_krp_rec.catchup_frequency_code;
418     x_no_data_found := okl_k_rate_params_pk_csr%NOTFOUND;
419     CLOSE okl_k_rate_params_pk_csr;
420     RETURN(l_krp_rec);
421   END get_rec;
422 
423   ------------------------------------------------------------------
424   -- This version of get_rec sets error messages if no data found --
425   ------------------------------------------------------------------
426   FUNCTION get_rec (
427     p_krp_rec                      IN krp_rec_type,
428     x_return_status                OUT NOCOPY VARCHAR2
429   ) RETURN krp_rec_type IS
430     l_krp_rec                      krp_rec_type;
431     l_row_notfound                 BOOLEAN := TRUE;
432   BEGIN
433     x_return_status := OKC_API.G_RET_STS_SUCCESS;
434     l_krp_rec := get_rec(p_krp_rec, l_row_notfound);
435     IF (l_row_notfound) THEN
436       OKC_API.set_message(OKL_API.G_APP_NAME,G_INVALID_VALUE,G_COL_NAME_TOKEN,'PARAMETER_TYPE_CODE');
437       OKC_API.set_message(OKL_API.G_APP_NAME,G_INVALID_VALUE,G_COL_NAME_TOKEN,'EFFECTIVE_FROM_DATE');
438       OKC_API.set_message(OKL_API.G_APP_NAME,G_INVALID_VALUE,G_COL_NAME_TOKEN,'KHR_ID');
439       x_return_status := OKC_API.G_RET_STS_ERROR;
440     END IF;
441     RETURN(l_krp_rec);
442   END get_rec;
443   -----------------------------------------------------------
444   -- So we don't have to pass an "l_row_notfound" variable --
445   -----------------------------------------------------------
446   FUNCTION get_rec (
447     p_krp_rec                      IN krp_rec_type
448   ) RETURN krp_rec_type IS
449     l_row_not_found                BOOLEAN := TRUE;
450   BEGIN
451     RETURN(get_rec(p_krp_rec, l_row_not_found));
452   END get_rec;
453   ---------------------------------------------------------------------------
454   -- FUNCTION null_out_defaults for: OKL_K_RATE_PARAMS_V
455   ---------------------------------------------------------------------------
456   FUNCTION null_out_defaults (
457     p_krpv_rec   IN krpv_rec_type
458   ) RETURN krpv_rec_type IS
459     l_krpv_rec                     krpv_rec_type := p_krpv_rec;
460   BEGIN
461     IF (l_krpv_rec.khr_id = OKC_API.G_MISS_NUM ) THEN
462       l_krpv_rec.khr_id := NULL;
463     END IF;
464     IF (l_krpv_rec.parameter_type_code = OKC_API.G_MISS_CHAR ) THEN
465       l_krpv_rec.parameter_type_code := NULL;
466     END IF;
467     IF (l_krpv_rec.effective_from_date = OKC_API.G_MISS_DATE ) THEN
468       l_krpv_rec.effective_from_date := NULL;
469     END IF;
470     IF (l_krpv_rec.effective_to_date = OKC_API.G_MISS_DATE ) THEN
471       l_krpv_rec.effective_to_date := NULL;
472     END IF;
473     IF (l_krpv_rec.interest_index_id = OKC_API.G_MISS_NUM ) THEN
474       l_krpv_rec.interest_index_id := NULL;
475     END IF;
476     IF (l_krpv_rec.base_rate = OKC_API.G_MISS_NUM ) THEN
477       l_krpv_rec.base_rate := NULL;
478     END IF;
479     IF (l_krpv_rec.interest_start_date = OKC_API.G_MISS_DATE ) THEN
480       l_krpv_rec.interest_start_date := NULL;
481     END IF;
482     IF (l_krpv_rec.adder_rate = OKC_API.G_MISS_NUM ) THEN
483       l_krpv_rec.adder_rate := NULL;
484     END IF;
485     IF (l_krpv_rec.maximum_rate = OKC_API.G_MISS_NUM ) THEN
486       l_krpv_rec.maximum_rate := NULL;
487     END IF;
488     IF (l_krpv_rec.minimum_rate = OKC_API.G_MISS_NUM ) THEN
489       l_krpv_rec.minimum_rate := NULL;
490     END IF;
491     IF (l_krpv_rec.principal_basis_code = OKC_API.G_MISS_CHAR ) THEN
492       l_krpv_rec.principal_basis_code := NULL;
493     END IF;
494     IF (l_krpv_rec.days_in_a_month_code = OKC_API.G_MISS_CHAR ) THEN
495       l_krpv_rec.days_in_a_month_code := NULL;
496     END IF;
497     IF (l_krpv_rec.days_in_a_year_code = OKC_API.G_MISS_CHAR ) THEN
498       l_krpv_rec.days_in_a_year_code := NULL;
499     END IF;
500     IF (l_krpv_rec.interest_basis_code = OKC_API.G_MISS_CHAR ) THEN
501       l_krpv_rec.interest_basis_code := NULL;
502     END IF;
503     IF (l_krpv_rec.rate_delay_code = OKC_API.G_MISS_CHAR ) THEN
504       l_krpv_rec.rate_delay_code := NULL;
505     END IF;
506     IF (l_krpv_rec.rate_delay_frequency = OKC_API.G_MISS_NUM ) THEN
507       l_krpv_rec.rate_delay_frequency := NULL;
508     END IF;
509     IF (l_krpv_rec.compounding_frequency_code = OKC_API.G_MISS_CHAR ) THEN
510       l_krpv_rec.compounding_frequency_code := NULL;
511     END IF;
512     IF (l_krpv_rec.calculation_formula_id = OKC_API.G_MISS_NUM ) THEN
513       l_krpv_rec.calculation_formula_id := NULL;
514     END IF;
515     IF (l_krpv_rec.catchup_basis_code = OKC_API.G_MISS_CHAR ) THEN
516       l_krpv_rec.catchup_basis_code := NULL;
517     END IF;
518     IF (l_krpv_rec.catchup_start_date = OKC_API.G_MISS_DATE ) THEN
519       l_krpv_rec.catchup_start_date := NULL;
520     END IF;
521     IF (l_krpv_rec.catchup_settlement_code = OKC_API.G_MISS_CHAR ) THEN
522       l_krpv_rec.catchup_settlement_code := NULL;
523     END IF;
524     IF (l_krpv_rec.rate_change_start_date = OKC_API.G_MISS_DATE ) THEN
525       l_krpv_rec.rate_change_start_date := NULL;
526     END IF;
527     IF (l_krpv_rec.rate_change_frequency_code = OKC_API.G_MISS_CHAR ) THEN
528       l_krpv_rec.rate_change_frequency_code := NULL;
529     END IF;
530     IF (l_krpv_rec.rate_change_value = OKC_API.G_MISS_NUM ) THEN
531       l_krpv_rec.rate_change_value := NULL;
532     END IF;
533     IF (l_krpv_rec.conversion_option_code = OKC_API.G_MISS_CHAR ) THEN
534       l_krpv_rec.conversion_option_code := NULL;
535     END IF;
536     IF (l_krpv_rec.next_conversion_date = OKC_API.G_MISS_DATE ) THEN
537       l_krpv_rec.next_conversion_date := NULL;
538     END IF;
539     IF (l_krpv_rec.conversion_type_code = OKC_API.G_MISS_CHAR ) THEN
540       l_krpv_rec.conversion_type_code := NULL;
541     END IF;
542     IF (l_krpv_rec.attribute_category = OKC_API.G_MISS_CHAR ) THEN
543       l_krpv_rec.attribute_category := NULL;
544     END IF;
545     IF (l_krpv_rec.attribute1 = OKC_API.G_MISS_CHAR ) THEN
546       l_krpv_rec.attribute1 := NULL;
547     END IF;
548     IF (l_krpv_rec.attribute2 = OKC_API.G_MISS_CHAR ) THEN
549       l_krpv_rec.attribute2 := NULL;
550     END IF;
551     IF (l_krpv_rec.attribute3 = OKC_API.G_MISS_CHAR ) THEN
552       l_krpv_rec.attribute3 := NULL;
553     END IF;
554     IF (l_krpv_rec.attribute4 = OKC_API.G_MISS_CHAR ) THEN
555       l_krpv_rec.attribute4 := NULL;
556     END IF;
557     IF (l_krpv_rec.attribute5 = OKC_API.G_MISS_CHAR ) THEN
558       l_krpv_rec.attribute5 := NULL;
559     END IF;
560     IF (l_krpv_rec.attribute6 = OKC_API.G_MISS_CHAR ) THEN
561       l_krpv_rec.attribute6 := NULL;
562     END IF;
563     IF (l_krpv_rec.attribute7 = OKC_API.G_MISS_CHAR ) THEN
564       l_krpv_rec.attribute7 := NULL;
565     END IF;
566     IF (l_krpv_rec.attribute8 = OKC_API.G_MISS_CHAR ) THEN
567       l_krpv_rec.attribute8 := NULL;
568     END IF;
569     IF (l_krpv_rec.attribute9 = OKC_API.G_MISS_CHAR ) THEN
570       l_krpv_rec.attribute9 := NULL;
571     END IF;
572     IF (l_krpv_rec.attribute10 = OKC_API.G_MISS_CHAR ) THEN
573       l_krpv_rec.attribute10 := NULL;
574     END IF;
575     IF (l_krpv_rec.attribute11 = OKC_API.G_MISS_CHAR ) THEN
576       l_krpv_rec.attribute11 := NULL;
577     END IF;
578     IF (l_krpv_rec.attribute12 = OKC_API.G_MISS_CHAR ) THEN
579       l_krpv_rec.attribute12 := NULL;
580     END IF;
581     IF (l_krpv_rec.attribute13 = OKC_API.G_MISS_CHAR ) THEN
582       l_krpv_rec.attribute13 := NULL;
583     END IF;
584     IF (l_krpv_rec.attribute14 = OKC_API.G_MISS_CHAR ) THEN
585       l_krpv_rec.attribute14 := NULL;
586     END IF;
587     IF (l_krpv_rec.attribute15 = OKC_API.G_MISS_CHAR ) THEN
588       l_krpv_rec.attribute15 := NULL;
589     END IF;
590     IF (l_krpv_rec.created_by = OKC_API.G_MISS_NUM ) THEN
591       l_krpv_rec.created_by := NULL;
592     END IF;
593     IF (l_krpv_rec.creation_date = OKC_API.G_MISS_DATE ) THEN
594       l_krpv_rec.creation_date := NULL;
595     END IF;
596     IF (l_krpv_rec.last_updated_by = OKC_API.G_MISS_NUM ) THEN
597       l_krpv_rec.last_updated_by := NULL;
598     END IF;
599     IF (l_krpv_rec.last_update_date = OKC_API.G_MISS_DATE ) THEN
600       l_krpv_rec.last_update_date := NULL;
601     END IF;
602     IF (l_krpv_rec.last_update_login = OKC_API.G_MISS_NUM ) THEN
603       l_krpv_rec.last_update_login := NULL;
604     END IF;
605     IF (l_krpv_rec.catchup_frequency_code = OKC_API.G_MISS_CHAR ) THEN
606       l_krpv_rec.catchup_frequency_code := NULL;
607     END IF;
608     RETURN(l_krpv_rec);
609   END null_out_defaults;
610   -------------------------------------
611   -- Validate_Attributes for: KHR_ID --
612   -------------------------------------
613   PROCEDURE validate_khr_id(
614     x_return_status                OUT NOCOPY VARCHAR2,
615     p_khr_id                       IN NUMBER) IS
616   BEGIN
617     x_return_status := OKC_API.G_RET_STS_SUCCESS;
618     IF (p_khr_id = OKC_API.G_MISS_NUM OR
619         p_khr_id IS NULL)
620     THEN
621       OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'khr_id');
622       x_return_status := OKC_API.G_RET_STS_ERROR;
623       RAISE G_EXCEPTION_HALT_VALIDATION;
624     END IF;
625   EXCEPTION
626     WHEN G_EXCEPTION_HALT_VALIDATION THEN
627       null;
628     WHEN OTHERS THEN
629       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
630                           ,p_msg_name     => G_UNEXPECTED_ERROR
631                           ,p_token1       => G_SQLCODE_TOKEN
632                           ,p_token1_value => SQLCODE
633                           ,p_token2       => G_SQLERRM_TOKEN
634                           ,p_token2_value => SQLERRM);
635       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
636   END validate_khr_id;
637   --------------------------------------------------
638   -- Validate_Attributes for: PARAMETER_TYPE_CODE --
639   --------------------------------------------------
640   PROCEDURE validate_parameter_type_code(
641     x_return_status                OUT NOCOPY VARCHAR2,
642     p_parameter_type_code          IN VARCHAR2) IS
643   BEGIN
644     x_return_status := OKC_API.G_RET_STS_SUCCESS;
645     IF (p_parameter_type_code = OKC_API.G_MISS_CHAR OR
646         p_parameter_type_code IS NULL)
647     THEN
648       OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'parameter_type_code');
649       x_return_status := OKC_API.G_RET_STS_ERROR;
650       RAISE G_EXCEPTION_HALT_VALIDATION;
651     END IF;
652   EXCEPTION
653     WHEN G_EXCEPTION_HALT_VALIDATION THEN
654       null;
655     WHEN OTHERS THEN
656       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
657                           ,p_msg_name     => G_UNEXPECTED_ERROR
658                           ,p_token1       => G_SQLCODE_TOKEN
659                           ,p_token1_value => SQLCODE
660                           ,p_token2       => G_SQLERRM_TOKEN
661                           ,p_token2_value => SQLERRM);
662       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
663   END validate_parameter_type_code;
664   --------------------------------------------------
665   -- Validate_Attributes for: EFFECTIVE_FROM_DATE --
666   --------------------------------------------------
667   PROCEDURE validate_effective_from_date(
668     x_return_status                OUT NOCOPY VARCHAR2,
669     p_effective_from_date          IN DATE) IS
670   BEGIN
671     x_return_status := OKC_API.G_RET_STS_SUCCESS;
672     IF (p_effective_from_date = OKC_API.G_MISS_DATE OR
673         p_effective_from_date IS NULL)
674     THEN
675       OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'effective_from_date');
676       x_return_status := OKC_API.G_RET_STS_ERROR;
677       RAISE G_EXCEPTION_HALT_VALIDATION;
678     END IF;
679   EXCEPTION
680     WHEN G_EXCEPTION_HALT_VALIDATION THEN
681       null;
682     WHEN OTHERS THEN
683       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
684                           ,p_msg_name     => G_UNEXPECTED_ERROR
685                           ,p_token1       => G_SQLCODE_TOKEN
686                           ,p_token1_value => SQLCODE
687                           ,p_token2       => G_SQLERRM_TOKEN
688                           ,p_token2_value => SQLERRM);
689       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
690   END validate_effective_from_date;
691   --------------------------------------------------
692   -- Validate_Attributes for: interest_basis_code --
693   --------------------------------------------------
694   PROCEDURE validate_interest_basis_code(
695     x_return_status                OUT NOCOPY VARCHAR2,
696     p_lookup_code                  IN VARCHAR2) IS
697   BEGIN
698     x_return_status := check_lookup_code('OKL_VAR_INTCALC',
699                                           p_lookup_code);
700   END validate_interest_basis_code;
701 
702   --------------------------------------------------
703   -- Validate_Attributes for: rate_delay_code --
704   --------------------------------------------------
705   PROCEDURE validate_rate_delay_code(
706     x_return_status                OUT NOCOPY VARCHAR2,
707     p_lookup_code                  IN VARCHAR2) IS
708   BEGIN
709     x_return_status := check_lookup_code('OKL_RATE_DELAY_CODE',
710                                           p_lookup_code);
711   END validate_rate_delay_code;
712 
713   --------------------------------------------------
714   -- Validate_Attributes for: rate_change_frequency --
715   --------------------------------------------------
716   PROCEDURE validate_rate_change_frequency(
717     x_return_status                OUT NOCOPY VARCHAR2,
718     p_lookup_code                  IN VARCHAR2) IS
719   BEGIN
720     x_return_status := check_lookup_code('OKL_RATE_CHANGE_FREQUENCY_CODE',
721                                           p_lookup_code);
722   END validate_rate_change_frequency;
723 
724   --------------------------------------------------
725   -- Validate_Attributes for: compounding_frequency_code --
726   --------------------------------------------------
727   PROCEDURE validate_compounding_freq_code(
728     x_return_status                OUT NOCOPY VARCHAR2,
729     p_lookup_code                  IN VARCHAR2) IS
730   BEGIN
731     x_return_status := check_lookup_code('OKL_COMPOUNDING_FREQUENCY_CODE',
732                                           p_lookup_code);
733   END validate_compounding_freq_code;
734 
735   --------------------------------------------------
736   -- Validate_Attributes for: Principal_Basis_Code --
737   --------------------------------------------------
738   PROCEDURE validate_Principal_Basis_Code(
739     x_return_status                OUT NOCOPY VARCHAR2,
740     p_lookup_code                  IN VARCHAR2) IS
741   BEGIN
742     --x_return_status := check_lookup_code('OKL_PRINCIPAL_BASIS_CODE',
743     x_return_status := check_lookup_code('OKL_PRINCIPAL_INTEREST',
744                                           p_lookup_code);
745   END validate_Principal_Basis_Code;
746 
747   --------------------------------------------------
748   -- Validate_Attributes for: Catchup_Basis_Code --
749   --------------------------------------------------
750   PROCEDURE validate_Catchup_Basis_Code(
751     x_return_status                OUT NOCOPY VARCHAR2,
752     p_lookup_code                  IN VARCHAR2) IS
753   BEGIN
754     x_return_status := check_lookup_code('OKL_CATCHUP_BASIS_CODE',
755                                           p_lookup_code);
756   END validate_Catchup_Basis_Code;
757 
758   --------------------------------------------------
759   -- Validate_Attributes for: Catchup_Settlement_Code --
760   --------------------------------------------------
761   PROCEDURE validate_Catchup_Settleme_Code(
762     x_return_status                OUT NOCOPY VARCHAR2,
763     p_lookup_code                  IN VARCHAR2) IS
764   BEGIN
765     x_return_status := check_lookup_code('OKL_CATCHUP_SETTLEMENT_CODE',
766                                           p_lookup_code);
767   END validate_Catchup_Settleme_Code;
768 
769   --------------------------------------------------
770   -- Validate_Attributes for: Conversion_Option_Code --
771   --------------------------------------------------
772   PROCEDURE validate_Conversion_Optio_Code(
773     x_return_status                OUT NOCOPY VARCHAR2,
774     p_lookup_code                  IN VARCHAR2) IS
775   BEGIN
776     x_return_status := OKC_API.G_RET_STS_SUCCESS;
777     IF (p_lookup_code = OKC_API.G_MISS_CHAR OR
778         p_lookup_code IS NULL)
779     THEN
780       OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'Conversion Option Code');
781       x_return_status := OKC_API.G_RET_STS_ERROR;
782       RAISE G_EXCEPTION_HALT_VALIDATION;
783     ELSIF (p_lookup_code <> OKL_API.G_MISS_CHAR AND
784 	   p_lookup_code is NOT NULL) THEN
785       x_return_status := check_lookup_code('OKL_CONVERSION_OPTION_CODE',
786                                             p_lookup_code);
787     END IF;
788   EXCEPTION
789     WHEN G_EXCEPTION_HALT_VALIDATION THEN
790       null;
791     WHEN OTHERS THEN
792       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
793                           ,p_msg_name     => G_UNEXPECTED_ERROR
794                           ,p_token1       => G_SQLCODE_TOKEN
795                           ,p_token1_value => SQLCODE
796                           ,p_token2       => G_SQLERRM_TOKEN
797                           ,p_token2_value => SQLERRM);
798       x_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
799   END validate_Conversion_Optio_Code;
800 
801   --------------------------------------------------
802   -- Validate_Attributes for: Conversion_Type_Code --
803   --------------------------------------------------
804   PROCEDURE validate_Conversion_Type_Code(
805     x_return_status                OUT NOCOPY VARCHAR2,
806     p_lookup_code                  IN VARCHAR2) IS
807   BEGIN
808     x_return_status := check_lookup_code('OKL_CONVERSION_TYPE_CODE',
809                                           p_lookup_code);
810   END validate_Conversion_Type_Code;
811 
812   --------------------------------------------------
813   -- Validate_Attributes for: calculation_formula_id --
814   --------------------------------------------------
815   PROCEDURE validate_calculatio_formula_id(
816     x_return_status                OUT NOCOPY VARCHAR2,
817     p_calculation_formula_id       IN NUMBER) IS
818   CURSOR C1(p_id NUMBER) IS
819   SELECT ID from OKL_FORMULAE_B
820   WHERE  ID = p_id;
821   BEGIN
822     x_return_status := OKL_API.G_RET_STS_ERROR;
823     FOR r IN C1(p_calculation_formula_id)
824     LOOP
825       x_return_status := OKL_API.G_RET_STS_SUCCESS;
826     END LOOP;
827     return;
828 
829     EXCEPTION WHEN OTHERS THEN
830       x_return_status := OKL_API.G_RET_STS_ERROR;
831   END validate_calculatio_formula_id;
832   --------------------------------------------------
833   -- Validate_Attributes for: catchup_frequency_code --
834   --------------------------------------------------
835   PROCEDURE validate_catchup_freq_code(
836     x_return_status                OUT NOCOPY VARCHAR2,
837     p_lookup_code                  IN VARCHAR2) IS
838   BEGIN
839     x_return_status := check_lookup_code('OKL_CATCHUP_FREQUENCY_CODE',
840                                           p_lookup_code);
841   END validate_catchup_freq_code;
842 
843   --------------------------------------------------
844   -- Validate_Attributes for: interest_index_id --
845   --------------------------------------------------
846   PROCEDURE validate_interest_index_id(
847     x_return_status                OUT NOCOPY VARCHAR2,
848     p_interest_index_id            IN NUMBER) IS
849   CURSOR C1(p_id NUMBER) IS
850   SELECT ID from OKL_INDICES
851   WHERE  ID = p_id;
852   BEGIN
853     x_return_status := OKL_API.G_RET_STS_ERROR;
854     FOR r IN C1(p_interest_index_id)
855     LOOP
856       x_return_status := OKL_API.G_RET_STS_SUCCESS;
857     END LOOP;
858     return;
859 
860     EXCEPTION WHEN OTHERS THEN
861       x_return_status := OKL_API.G_RET_STS_ERROR;
862   END validate_interest_index_id;
863 
864   --------------------------------------------------
865   -- Validate_Attributes for: days_in_a_month_code --
866   --------------------------------------------------
867   PROCEDURE validate_days_in_a_month_code(
868     x_return_status                OUT NOCOPY VARCHAR2,
869     p_lookup_code                  IN VARCHAR2) IS
870   BEGIN
871     IF (G_DEBUG_ENABLED = 'Y') THEN
872       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
873     END IF;
874     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
875           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'p_lookup_code=' || p_lookup_code);
876     END IF;
877     x_return_status := check_lookup_code('OKL_MONTH_TYPE',
878                                           p_lookup_code);
879   END validate_days_in_a_month_code;
880 
881   --------------------------------------------------
882   -- Validate_Attributes for: days_in_a_year_code --
883   --------------------------------------------------
884   PROCEDURE validate_days_in_a_year_code(
885     x_return_status                OUT NOCOPY VARCHAR2,
886     p_lookup_code                  IN VARCHAR2) IS
887   BEGIN
888     x_return_status := check_lookup_code('OKL_YEAR_TYPE',
889                                           p_lookup_code);
890   END validate_days_in_a_year_code;
891 
892   ---------------------------------------------------------------------------
893   -- FUNCTION Validate_Attributes
894   ---------------------------------------------------------------------------
895   -------------------------------------------------
896   -- Validate_Attributes for:OKL_K_RATE_PARAMS_V --
897   -------------------------------------------------
898   FUNCTION Validate_Attributes (
899     p_krpv_rec                     IN krpv_rec_type
900   ) RETURN VARCHAR2 IS
901     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
902     x_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
903   BEGIN
904     -----------------------------
905     -- Column Level Validation --
906     -----------------------------
907     -- ***
908     -- khr_id
909     -- ***
910     validate_khr_id(x_return_status, p_krpv_rec.khr_id);
911     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
912       l_return_status := x_return_status;
913       RAISE G_EXCEPTION_HALT_VALIDATION;
914     END IF;
915 
916     -- ***
917     -- parameter_type_code
918     -- ***
919     validate_parameter_type_code(x_return_status, p_krpv_rec.parameter_type_code);
920     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
921       l_return_status := x_return_status;
922       RAISE G_EXCEPTION_HALT_VALIDATION;
923     END IF;
924 
925     -- ***
926     -- effective_from_date
927     -- ***
928     validate_effective_from_date(x_return_status, p_krpv_rec.effective_from_date);
929     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
930       l_return_status := x_return_status;
931       RAISE G_EXCEPTION_HALT_VALIDATION;
932     END IF;
933 
934     RETURN(l_return_status);
935   EXCEPTION
936     WHEN G_EXCEPTION_HALT_VALIDATION THEN
937       RETURN(l_return_status);
938     WHEN OTHERS THEN
939       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
940                           ,p_msg_name     => G_UNEXPECTED_ERROR
941                           ,p_token1       => G_SQLCODE_TOKEN
942                           ,p_token1_value => SQLCODE
943                           ,p_token2       => G_SQLERRM_TOKEN
944                           ,p_token2_value => SQLERRM);
945       l_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
946       RETURN(l_return_status);
947   END Validate_Attributes;
948   ---------------------------------------------------------------------------
949   -- FUNCTION Validate_Attributes, Custom, overloaded
950   ---------------------------------------------------------------------------
951   -------------------------------------------------
952   -- Validate_Attributes for:OKL_K_RATE_PARAMS_V --
953   -------------------------------------------------
954   FUNCTION Validate_Attributes (
955     p_krpv_rec                     IN krpv_rec_type,
956     p_stack_messages               IN VARCHAR2
957   ) RETURN VARCHAR2 IS
958     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
959     x_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
960   BEGIN
961     IF (G_DEBUG_ENABLED = 'Y') THEN
962       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
963     END IF;
964     -----------------------------
965     -- Column Level Validation --
966     -----------------------------
967     -- ***
968     -- khr_id
969     -- ***
970     validate_khr_id(x_return_status, p_krpv_rec.khr_id);
971     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
972       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
973                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
974                           ,p_token1       => 'VALUE'
975                           ,p_token1_value => p_krpv_rec.khr_id
976                           ,p_token2       => 'PARAM'
977                           ,p_token2_value => 'KHR_ID');
978       l_return_status := x_return_status;
979       IF (p_stack_messages = 'N') THEN
980         RAISE G_EXCEPTION_HALT_VALIDATION;
981       END IF;
982     END IF;
983     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
984           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_khr_id');
985     END IF;
986 
987     -- ***
988     -- parameter_type_code
989     -- ***
990     validate_parameter_type_code(x_return_status, p_krpv_rec.parameter_type_code);
991     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
992       l_return_status := x_return_status;
993       IF (p_stack_messages = 'N') THEN
994         RAISE G_EXCEPTION_HALT_VALIDATION;
995       END IF;
996     END IF;
997     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
998           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_parameter_type_code');
999     END IF;
1000 
1001     x_return_status := check_lookup_code('OKL_RATE_PARAM_TYPE_CODE',
1002                                           p_krpv_rec.parameter_type_code);
1003     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1004       -- AKP Todo: Set message (invalid parameter type code)
1005       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1006                           ,p_msg_name     => 'OKL_LA_INVALID_PARAM_TYPE_CODE'
1007                           ,p_token1       => 'CODE'
1008                           ,p_token1_value => p_krpv_rec.parameter_type_code);
1009       l_return_status := x_return_status;
1010       IF (p_stack_messages = 'N') THEN
1011         RAISE G_EXCEPTION_HALT_VALIDATION;
1012       END IF;
1013     END IF;
1014     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1015           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After check_lookup_code');
1016     END IF;
1017 
1018     -- ***
1019     -- effective_from_date
1020     -- ***
1021     validate_effective_from_date(x_return_status, p_krpv_rec.effective_from_date);
1022     IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1023       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1024                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1025                           ,p_token1       => 'VALUE'
1026                           ,p_token1_value => p_krpv_rec.effective_from_date
1027                           ,p_token2       => 'PARAM'
1028                           ,p_token2_value => 'EFFECTIVE_FROM_DATE');
1029       l_return_status := x_return_status;
1030       IF (p_stack_messages = 'N') THEN
1031         RAISE G_EXCEPTION_HALT_VALIDATION;
1032       END IF;
1033     END IF;
1034     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1035           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_effective_from_date');
1036     END IF;
1037 
1038     --- Interest_basis_code
1039     IF (p_krpv_rec.interest_basis_code is NOT NULL AND
1040         p_krpv_rec.interest_basis_code <> G_MISS_CHAR) THEN
1041       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1042               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'interest_basis_code=' || p_krpv_rec.interest_basis_code || ':');
1043       END IF;
1044       validate_interest_basis_code( x_return_status,
1045                                     p_krpv_rec.interest_basis_code);
1046       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1047         l_return_status := x_return_status;
1048         -- AKP Todo: Set message (invalid Interest Calculation basis code)
1049       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1050                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1051                           ,p_token1       => 'VALUE'
1052                           ,p_token1_value => p_krpv_rec.interest_basis_code
1053                           ,p_token2       => 'PARAM'
1054                           ,p_token2_value => 'INTEREST_BASIS_CODE');
1055         l_return_status := x_return_status;
1056         IF (p_stack_messages = 'N') THEN
1057           RAISE G_EXCEPTION_HALT_VALIDATION;
1058         END IF;
1059       END IF;
1060     END IF;
1061 
1062     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1063           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_interest_basis_code');
1064     END IF;
1065     --- Rate_Delay_Code
1066     IF (p_krpv_rec.Rate_Delay_Code is NOT NULL AND
1067         p_krpv_rec.Rate_Delay_Code <> G_MISS_CHAR) THEN
1068       validate_rate_delay_code( x_return_status,
1069                                 p_krpv_rec.Rate_Delay_Code);
1070       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1071         l_return_status := x_return_status;
1072         -- AKP Todo: Set message (invalid Rate Delay code)
1073       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1074                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1075                           ,p_token1       => 'VALUE'
1076                           ,p_token1_value => p_krpv_rec.rate_delay_code
1077                           ,p_token2       => 'PARAM'
1078                           ,p_token2_value => 'RATE_DELAY_CODE');
1079         l_return_status := x_return_status;
1080         IF (p_stack_messages = 'N') THEN
1081           RAISE G_EXCEPTION_HALT_VALIDATION;
1082         END IF;
1083       END IF;
1084     END IF;
1085     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1086           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_rate_delay_code');
1087     END IF;
1088 
1089     --- Compounding_Frequency_Code
1090     IF (p_krpv_rec.Compounding_Frequency_Code is NOT NULL AND
1091         p_krpv_rec.Compounding_Frequency_Code <> G_MISS_CHAR) THEN
1092       validate_compounding_freq_code( x_return_status,
1093                                       p_krpv_rec.Compounding_Frequency_Code);
1094       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1095         l_return_status := x_return_status;
1096         -- AKP Todo: Set message (invalid Compounding_Frequency_Code)
1097       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1098                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1099                           ,p_token1       => 'VALUE'
1100                           ,p_token1_value => p_krpv_rec.compounding_frequency_code
1101                           ,p_token2       => 'PARAM'
1102                           ,p_token2_value => 'COMPOUNDING_FREQUENCY_CODE');
1103         l_return_status := x_return_status;
1104         IF (p_stack_messages = 'N') THEN
1105           RAISE G_EXCEPTION_HALT_VALIDATION;
1106         END IF;
1107       END IF;
1108     END IF;
1109     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1110           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_compounding_freq_code');
1111     END IF;
1112 
1113     --- Rate_Change_Frequency
1114     IF (p_krpv_rec.Rate_Change_Frequency_Code is NOT NULL AND
1115         p_krpv_rec.Rate_Change_Frequency_Code <> G_MISS_CHAR) THEN
1116       validate_rate_change_frequency( x_return_status,
1117                                      p_krpv_rec.Rate_Change_Frequency_Code);
1118       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1119         l_return_status := x_return_status;
1120         -- AKP Todo: Set message (invalid Rate Change Frequency Code)
1121       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1122                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1123                           ,p_token1       => 'VALUE'
1124                           ,p_token1_value => p_krpv_rec.rate_change_frequency_code
1125                           ,p_token2       => 'PARAM'
1126                           ,p_token2_value => 'RATE_CHANGE_FREQUENCY_CODE');
1127         l_return_status := x_return_status;
1128         IF (p_stack_messages = 'N') THEN
1129           RAISE G_EXCEPTION_HALT_VALIDATION;
1130         END IF;
1131       END IF;
1132     END IF;
1133     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1134           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_rate_change_freq');
1135     END IF;
1136 
1137     --- Principal_Basis_Code
1138     IF (p_krpv_rec.Principal_Basis_Code is NOT NULL AND
1139         p_krpv_rec.Principal_Basis_Code <> G_MISS_CHAR) THEN
1140       validate_Principal_Basis_Code(x_return_status,
1141                        p_krpv_rec.Principal_Basis_Code);
1142       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1143         l_return_status := x_return_status;
1144         -- AKP Todo: Set message (invalid Principal_Basis_Code)
1145       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1146                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1147                           ,p_token1       => 'VALUE'
1148                           ,p_token1_value => p_krpv_rec.principal_basis_code
1149                           ,p_token2       => 'PARAM'
1150                           ,p_token2_value => 'PRINCIPAL_BASIS_CODE');
1151         l_return_status := x_return_status;
1152         IF (p_stack_messages = 'N') THEN
1153           --print('Invalid Principal_basis_code...');
1154           RAISE G_EXCEPTION_HALT_VALIDATION;
1155         END IF;
1156       END IF;
1157     END IF;
1158     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1159           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_principal_basis_code');
1160     END IF;
1161 
1162     --- Catchup_Basis_Code
1163     IF (p_krpv_rec.Catchup_Basis_Code is NOT NULL AND
1164         p_krpv_rec.Catchup_Basis_Code <> G_MISS_CHAR) THEN
1165       validate_Catchup_Basis_Code(x_return_status,
1166                        p_krpv_rec.Catchup_Basis_Code);
1167       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1168         l_return_status := x_return_status;
1169         -- AKP Todo: Set message (invalid Catchup_Basis_Code)
1170       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1171                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1172                           ,p_token1       => 'VALUE'
1173                           ,p_token1_value => p_krpv_rec.catchup_basis_code
1174                           ,p_token2       => 'PARAM'
1175                           ,p_token2_value => 'CATCHUP_BASIS_CODE');
1176         l_return_status := x_return_status;
1177         IF (p_stack_messages = 'N') THEN
1178           --print('Invalid Catchupl_basis_code...');
1179           RAISE G_EXCEPTION_HALT_VALIDATION;
1180         END IF;
1181       END IF;
1182     END IF;
1183     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1184           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_catchup_basis_code');
1185     END IF;
1186 
1187     --- Catchup_Settlement_Code
1188     IF (p_krpv_rec.Catchup_Settlement_Code is NOT NULL AND
1189         p_krpv_rec.Catchup_Settlement_Code <> G_MISS_CHAR) THEN
1190       validate_Catchup_Settleme_Code(x_return_status,
1191                        p_krpv_rec.Catchup_Settlement_Code);
1192       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1193         l_return_status := x_return_status;
1194         -- AKP Todo: Set message (invalid Catchup_Settlement_Code)
1195       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1196                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1197                           ,p_token1       => 'VALUE'
1198                           ,p_token1_value => p_krpv_rec.catchup_settlement_code
1199                           ,p_token2       => 'PARAM'
1200                           ,p_token2_value => 'CATCHUP_SETTLEMENT_CODE');
1201         l_return_status := x_return_status;
1202         IF (p_stack_messages = 'N') THEN
1203           --print('Invalid Catchup_settlement_code...');
1204           RAISE G_EXCEPTION_HALT_VALIDATION;
1205         END IF;
1206       END IF;
1207     END IF;
1208     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1209           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_catchup_settlement_code');
1210     END IF;
1211 
1212     --- Conversion_Option_Code
1213     IF (p_krpv_rec.Conversion_Option_Code is NOT NULL AND
1214         p_krpv_rec.Conversion_Option_Code <> G_MISS_CHAR) THEN
1215       validate_Conversion_Optio_Code(x_return_status,
1216                        p_krpv_rec.Conversion_Option_Code);
1217       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1218         l_return_status := x_return_status;
1219         -- AKP Todo: Set message (invalid Conversion_Option_Code)
1220       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1221                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1222                           ,p_token1       => 'VALUE'
1223                           ,p_token1_value => p_krpv_rec.conversion_option_code
1224                           ,p_token2       => 'PARAM'
1225                           ,p_token2_value => 'CONVERSION_OPTION_CODE');
1226         l_return_status := x_return_status;
1227         IF (p_stack_messages = 'N') THEN
1228           --print('Invalid Conversion_option_code...');
1229           RAISE G_EXCEPTION_HALT_VALIDATION;
1230         END IF;
1231       END IF;
1232     END IF;
1233     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1234           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_conversion_option_code');
1235     END IF;
1236 
1237     --- Conversion_Type_Code
1238     IF (p_krpv_rec.Conversion_Type_Code is NOT NULL AND
1239         p_krpv_rec.Conversion_Type_Code <> G_MISS_CHAR) THEN
1240       validate_Conversion_Type_Code(x_return_status,
1241                        p_krpv_rec.Conversion_Type_Code);
1242       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1243         l_return_status := x_return_status;
1244         -- AKP Todo: Set message (invalid Conversion_Type_Code)
1245       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1246                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1247                           ,p_token1       => 'VALUE'
1248                           ,p_token1_value => p_krpv_rec.conversion_type_code
1249                           ,p_token2       => 'PARAM'
1250                           ,p_token2_value => 'CONVERSION_TYPE_CODE');
1251         l_return_status := x_return_status;
1252         IF (p_stack_messages = 'N') THEN
1253           --print('Invalid Conversion_type_code...');
1254           RAISE G_EXCEPTION_HALT_VALIDATION;
1255         END IF;
1256       END IF;
1257     END IF;
1258     --print('After validate_conversion_type_code');
1259 
1260     --- calculation_formula_id
1261     IF (p_krpv_rec.calculation_formula_id is NOT NULL AND
1262         p_krpv_rec.calculation_formula_id <> G_MISS_NUM) THEN
1263       validate_calculatio_formula_id(x_return_status,
1264                        p_krpv_rec.calculation_formula_id);
1265       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1266         l_return_status := x_return_status;
1267       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1268                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1269                           ,p_token1       => 'VALUE'
1270                           ,p_token1_value => p_krpv_rec.calculation_formula_id
1271                           ,p_token2       => 'PARAM'
1272                           ,p_token2_value => 'CALCULATION_FORMULA_ID');
1273         l_return_status := x_return_status;
1274         IF (p_stack_messages = 'N') THEN
1275           RAISE G_EXCEPTION_HALT_VALIDATION;
1276         END IF;
1277       END IF;
1278     END IF;
1279     --print('After validate_calculatio_formula_id');
1280 
1281     --- catchup_frequency_code
1282     IF (p_krpv_rec.catchup_frequency_code is NOT NULL AND
1283         p_krpv_rec.catchup_frequency_code <> G_MISS_CHAR) THEN
1284       validate_catchup_freq_code(x_return_status,
1285                        p_krpv_rec.catchup_frequency_code);
1286       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1287         l_return_status := x_return_status;
1288       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1289                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1290                           ,p_token1       => 'VALUE'
1291                           ,p_token1_value => p_krpv_rec.catchup_frequency_code
1292                           ,p_token2       => 'PARAM'
1293                           ,p_token2_value => 'CATCHUP_FREQUENCY_CODE');
1294         l_return_status := x_return_status;
1295         IF (p_stack_messages = 'N') THEN
1296           RAISE G_EXCEPTION_HALT_VALIDATION;
1297         END IF;
1298       END IF;
1299     END IF;
1300     --print('After validate_catchup_freq_code');
1301 
1302     --- interest_index_id
1303     IF (p_krpv_rec.interest_index_id is NOT NULL AND
1304         p_krpv_rec.interest_index_id <> G_MISS_NUM) THEN
1305       validate_interest_index_id(x_return_status,
1306                        p_krpv_rec.interest_index_id);
1307       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1308         l_return_status := x_return_status;
1309       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1310                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1311                           ,p_token1       => 'VALUE'
1312                           ,p_token1_value => p_krpv_rec.interest_index_id
1313                           ,p_token2       => 'PARAM'
1314                           ,p_token2_value => 'INTEREST_INDEX_ID');
1315         l_return_status := x_return_status;
1316         IF (p_stack_messages = 'N') THEN
1317           RAISE G_EXCEPTION_HALT_VALIDATION;
1318         END IF;
1319       END IF;
1320     END IF;
1321     --print('After validate_interest_index_id');
1322 
1323     --- days_in_a_month_code
1324     IF (p_krpv_rec.days_in_a_month_code is NOT NULL AND
1325         p_krpv_rec.days_in_a_month_code <> G_MISS_CHAR) THEN
1326       validate_days_in_a_month_code(x_return_status,
1327                        p_krpv_rec.days_in_a_month_code);
1328       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1329         l_return_status := x_return_status;
1330       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1331                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1332                           ,p_token1       => 'VALUE'
1333                           ,p_token1_value => p_krpv_rec.days_in_a_month_code
1334                           ,p_token2       => 'PARAM'
1335                           ,p_token2_value => 'DAYS_IN_A_MONTH_CODE');
1336         l_return_status := x_return_status;
1337         IF (p_stack_messages = 'N') THEN
1338           RAISE G_EXCEPTION_HALT_VALIDATION;
1339         END IF;
1340       END IF;
1341     END IF;
1342     --print('After validate_days_in_a_month_code');
1343 
1344     --- days_in_a_year_code
1345     IF (p_krpv_rec.days_in_a_year_code is NOT NULL AND
1346         p_krpv_rec.days_in_a_year_code <> G_MISS_CHAR) THEN
1347       validate_days_in_a_year_code(x_return_status,
1348                        p_krpv_rec.days_in_a_year_code);
1349       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
1350         l_return_status := x_return_status;
1351       OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1352                           ,p_msg_name     => 'OKL_LA_VAR_INVALID_PARAM'
1353                           ,p_token1       => 'VALUE'
1354                           ,p_token1_value => p_krpv_rec.days_in_a_year_code
1355                           ,p_token2       => 'PARAM'
1356                           ,p_token2_value => 'DAYS_IN_A_YEAR_CODE');
1357         l_return_status := x_return_status;
1358         IF (p_stack_messages = 'N') THEN
1359           RAISE G_EXCEPTION_HALT_VALIDATION;
1360         END IF;
1361       END IF;
1362     END IF;
1363     --print('After validate_days_in_a_year_code');
1364 
1365     -- Do extra validation (bug 4722746) here
1366     -- if rate delay code is defined then rate delay frequency is required
1367     IF (p_krpv_rec.Rate_Delay_Code is NOT NULL AND
1368         p_krpv_rec.Rate_Delay_Code <> G_MISS_CHAR) THEN
1369       IF (p_krpv_rec.Rate_Delay_Frequency is NOT NULL AND
1370           p_krpv_rec.Rate_Delay_Frequency <> G_MISS_NUM) THEN
1371         NULL;
1372       ELSE
1373           OKC_API.set_message(p_app_name => OKL_API.G_APP_NAME,
1374                               p_msg_name => G_REQUIRED_VALUE,
1375                               p_token1 => G_COL_NAME_TOKEN,
1376                               p_token1_value => 'Rate Delay Frequency');
1377           l_return_status := OKC_API.G_RET_STS_ERROR;
1378           IF (p_stack_messages = 'N') THEN
1379             RAISE G_EXCEPTION_HALT_VALIDATION;
1380           END IF;
1381       END IF;
1382     ELSE -- Rate delay code is null
1383       IF (p_krpv_rec.Rate_Delay_Frequency is NOT NULL AND
1384           p_krpv_rec.Rate_Delay_Frequency <> G_MISS_NUM) THEN
1385           OKC_API.set_message(p_app_name => OKL_API.G_APP_NAME,
1386                               p_msg_name => G_REQUIRED_VALUE,
1387                               p_token1 => G_COL_NAME_TOKEN,
1388                               p_token1_value => 'Rate Delay');
1389           l_return_status := OKC_API.G_RET_STS_ERROR;
1390           IF (p_stack_messages = 'N') THEN
1391             RAISE G_EXCEPTION_HALT_VALIDATION;
1392           END IF;
1393       END IF;
1394     END IF;
1395 
1396     -- if compounding freq code is defined then formula id is required
1397     IF (p_krpv_rec.compounding_frequency_code is NOT NULL AND
1398         p_krpv_rec.compounding_frequency_code <> G_MISS_CHAR) THEN
1399       IF (p_krpv_rec.calculation_formula_id is NOT NULL AND
1400           p_krpv_rec.calculation_formula_id <> G_MISS_NUM) THEN
1401         NULL;
1402       ELSE
1403           OKC_API.set_message(p_app_name => OKL_API.G_APP_NAME,
1404                               p_msg_name => G_REQUIRED_VALUE,
1405                               p_token1 => G_COL_NAME_TOKEN,
1406                               p_token1_value => 'Formula Name');
1407           l_return_status := OKC_API.G_RET_STS_ERROR;
1408           IF (p_stack_messages = 'N') THEN
1409             RAISE G_EXCEPTION_HALT_VALIDATION;
1410           END IF;
1411       END IF;
1412     END IF;
1413 
1414     -- if rate_change_frequency_code is defined then rate change start date
1415     -- and rate change value are required id is required
1416     IF (p_krpv_rec.rate_change_frequency_code is NOT NULL AND
1417         p_krpv_rec.rate_change_frequency_code <> G_MISS_CHAR) THEN
1418 
1419       IF (p_krpv_rec.rate_change_start_date is NOT NULL AND
1420           p_krpv_rec.rate_change_start_date <> G_MISS_DATE) THEN
1421         NULL;
1422       ELSE
1423           OKC_API.set_message(p_app_name => OKL_API.G_APP_NAME,
1424                               p_msg_name => G_REQUIRED_VALUE,
1425                               p_token1 => G_COL_NAME_TOKEN,
1426                               p_token1_value => 'Rate Change Start Date');
1427           l_return_status := OKC_API.G_RET_STS_ERROR;
1428           IF (p_stack_messages = 'N') THEN
1429             RAISE G_EXCEPTION_HALT_VALIDATION;
1430           END IF;
1431       END IF;
1432 
1433       IF (p_krpv_rec.rate_change_value is NOT NULL AND
1434           p_krpv_rec.rate_change_value <> G_MISS_NUM) THEN
1435         NULL;
1436       ELSE
1437           OKC_API.set_message(p_app_name => OKL_API.G_APP_NAME,
1438                               p_msg_name => G_REQUIRED_VALUE,
1439                               p_token1 => G_COL_NAME_TOKEN,
1440                               p_token1_value => 'Rate Change Value');
1441           l_return_status := OKC_API.G_RET_STS_ERROR;
1442           IF (p_stack_messages = 'N') THEN
1443             RAISE G_EXCEPTION_HALT_VALIDATION;
1444           END IF;
1445       END IF;
1446 
1447     ELSE -- rate change frequency code is null
1448       IF ((p_krpv_rec.rate_change_value is NOT NULL AND
1449           p_krpv_rec.rate_change_value <> G_MISS_NUM) OR
1450           (p_krpv_rec.rate_change_start_date is NOT NULL AND
1451            p_krpv_rec.rate_change_start_date <> G_MISS_DATE) ) THEN
1452           OKC_API.set_message(p_app_name => OKL_API.G_APP_NAME,
1453                               p_msg_name => G_REQUIRED_VALUE,
1454                               p_token1 => G_COL_NAME_TOKEN,
1455                               p_token1_value => 'Rate Change Frequency');
1456           l_return_status := OKC_API.G_RET_STS_ERROR;
1457           IF (p_stack_messages = 'N') THEN
1458             RAISE G_EXCEPTION_HALT_VALIDATION;
1459           END IF;
1460       END IF;
1461 
1462     END IF;
1463 
1464     -- if compounding freq code is defined then formula id is required
1465     IF (p_krpv_rec.conversion_option_code is NOT NULL AND
1466         p_krpv_rec.conversion_option_code <> G_MISS_CHAR) THEN
1467 
1468       IF (p_krpv_rec.next_conversion_date is NOT NULL AND
1469           p_krpv_rec.next_conversion_date <> G_MISS_DATE) THEN
1470         NULL;
1471       ELSE
1472           OKC_API.set_message(p_app_name => OKL_API.G_APP_NAME,
1473                               p_msg_name => G_REQUIRED_VALUE,
1474                               p_token1 => G_COL_NAME_TOKEN,
1475                               p_token1_value => 'Next Conversion Date');
1476           l_return_status := OKC_API.G_RET_STS_ERROR;
1477           IF (p_stack_messages = 'N') THEN
1478             RAISE G_EXCEPTION_HALT_VALIDATION;
1479           END IF;
1480       END IF;
1481 
1482       IF (p_krpv_rec.conversion_type_code is NOT NULL AND
1483           p_krpv_rec.conversion_type_code <> G_MISS_CHAR) THEN
1484         NULL;
1485       ELSE
1486           OKC_API.set_message(p_app_name => OKL_API.G_APP_NAME,
1487                               p_msg_name => G_REQUIRED_VALUE,
1488                               p_token1 => G_COL_NAME_TOKEN,
1489                               p_token1_value => 'Conversion Type');
1490           l_return_status := OKC_API.G_RET_STS_ERROR;
1491           IF (p_stack_messages = 'N') THEN
1492             RAISE G_EXCEPTION_HALT_VALIDATION;
1493           END IF;
1494       END IF;
1495 
1496     ELSE -- conversion option code is null
1497       IF ((p_krpv_rec.conversion_type_code is NOT NULL AND
1498           p_krpv_rec.conversion_type_code <> G_MISS_CHAR) OR
1499          (p_krpv_rec.next_conversion_date is NOT NULL AND
1500           p_krpv_rec.next_conversion_date <> G_MISS_DATE)) THEN
1501 
1502             OKC_API.set_message(p_app_name => OKL_API.G_APP_NAME,
1503                                 p_msg_name => G_REQUIRED_VALUE,
1504                                 p_token1 => G_COL_NAME_TOKEN,
1505                                 p_token1_value => 'Conversion Option Code');
1506             l_return_status := OKC_API.G_RET_STS_ERROR;
1507             IF (p_stack_messages = 'N') THEN
1508               RAISE G_EXCEPTION_HALT_VALIDATION;
1509             END IF;
1510 
1511       END IF;
1512 
1513     END IF;
1514 
1515     IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
1516       RAISE G_EXCEPTION_HALT_VALIDATION;
1517     END IF;
1518 
1519     RETURN(l_return_status);
1520   EXCEPTION
1521     WHEN G_EXCEPTION_HALT_VALIDATION THEN
1522       RETURN(l_return_status);
1523     WHEN OTHERS THEN
1524       OKC_API.SET_MESSAGE( p_app_name     => G_APP_NAME
1525                           ,p_msg_name     => G_UNEXPECTED_ERROR
1526                           ,p_token1       => G_SQLCODE_TOKEN
1527                           ,p_token1_value => SQLCODE
1528                           ,p_token2       => G_SQLERRM_TOKEN
1529                           ,p_token2_value => SQLERRM);
1530       l_return_status := OKC_API.G_RET_STS_UNEXP_ERROR;
1531       RETURN(l_return_status);
1532   END Validate_Attributes;
1533   ---------------------------------------------------------------------------
1534   -- PROCEDURE Validate_Record
1535   ---------------------------------------------------------------------------
1536   ---------------------------------------------
1537   -- Validate Record for:OKL_K_RATE_PARAMS_V --
1538   ---------------------------------------------
1539   FUNCTION Validate_Record (
1540     p_krpv_rec IN krpv_rec_type,
1541     p_db_krpv_rec IN krpv_rec_type
1542   ) RETURN VARCHAR2 IS
1543     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1544   BEGIN
1545     RETURN (l_return_status);
1546   END Validate_Record;
1547   FUNCTION Validate_Record (
1548     p_krpv_rec IN krpv_rec_type
1549   ) RETURN VARCHAR2 IS
1550     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1551     l_db_krpv_rec                  krpv_rec_type := get_rec(p_krpv_rec);
1552   BEGIN
1553     l_return_status := Validate_Record(p_krpv_rec => p_krpv_rec,
1554                                        p_db_krpv_rec => l_db_krpv_rec);
1555     RETURN (l_return_status);
1556   END Validate_Record;
1557 
1558   /* Validate_record : Custom, Overloaded */
1559   FUNCTION Validate_Record (
1560     p_krpv_rec IN krpv_rec_type,
1561     p_stack_messages IN VARCHAR2,
1562     p_deal_type                    IN  VARCHAR2,
1563     p_rev_rec_method               IN  VARCHAR2,
1564     p_int_calc_basis               IN  VARCHAR2
1565   ) RETURN VARCHAR2 IS
1566     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
1567     --l_db_krpv_rec                  krpv_rec_type := get_rec(p_krpv_rec);
1568     l_principal_payment_defined BOOLEAN := FALSE;
1569     l_msg_count NUMBER;
1570     l_msg_data VARCHAR2(2000);
1571     violated_ref_integrity EXCEPTION;
1572     l_msg1_set BOOLEAN := FALSE;
1573     l_msg2_set BOOLEAN := FALSE;
1574   BEGIN
1575     IF (G_DEBUG_ENABLED = 'Y') THEN
1576       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
1577     END IF;
1578     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
1579           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In Validate_Record...');
1580     END IF;
1581     IF (p_deal_type IN ('LEASEDF', 'LEASEOP', 'LEASEST') ) THEN
1582       IF (p_int_calc_basis = 'FIXED' AND p_rev_rec_method = 'STREAMS') THEN
1583 
1584         NULL; -- 4736732 No check required
1585         /*print('Checking Conversion_Option_Code...');
1586         IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
1587         IF (p_krpv_rec.Conversion_Option_Code = OKC_API.G_MISS_CHAR OR
1588             p_krpv_rec.Conversion_Option_Code IS NULL)
1589         THEN
1590           print('Conversion_Option_Code is NULL...');
1591           --OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'Conversion_Option_Code');
1592           OKC_API.set_message(p_app_name => OKL_API.G_APP_NAME,
1593                               p_msg_name => G_REQUIRED_VALUE,
1594                               p_token1 => G_COL_NAME_TOKEN,
1595                               p_token1_value => 'Conversion_Option_Code');
1596           l_return_status := OKC_API.G_RET_STS_ERROR;
1597           IF (p_stack_messages = 'N') THEN
1598             RAISE violated_ref_integrity;
1599           END IF;
1600         END IF;
1601         END IF; */
1602 
1603         /*
1604         print('Checking next_Conversion_Date...' ||p_krpv_rec.Next_Conversion_Date);
1605         IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
1606         IF (p_krpv_rec.Next_Conversion_Date = OKC_API.G_MISS_DATE OR
1607             p_krpv_rec.Next_Conversion_Date IS NULL)
1608         THEN
1609           print('next_Conversion_Date is NULL...');
1610           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'Next_Conversion_Date');
1611           l_return_status := OKC_API.G_RET_STS_ERROR;
1612           IF (p_stack_messages = 'N') THEN
1613             RAISE violated_ref_integrity;
1614           END IF;
1615         END IF;
1616         END IF; */
1617 
1618         /*print('Checking Conversion_Type_Code...');
1619         --print('G_APP_NAME=' || G_APP_NAME);
1620         --print('G_REQUIRED_VALUE=' || G_REQUIRED_VALUE);
1621         --print('G_COL_NAME_TOKEN=' || G_COL_NAME_TOKEN);
1622         IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
1623         IF (p_krpv_rec.Conversion_Type_Code = OKC_API.G_MISS_CHAR OR
1624             p_krpv_rec.Conversion_Type_Code IS NULL)
1625         THEN
1626           print('Conversion_Type_Code is NULL...');
1627           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN, 'Conversion Type Code');
1628           l_return_status := OKC_API.G_RET_STS_ERROR;
1629           IF (p_stack_messages = 'N') THEN
1630             RAISE violated_ref_integrity;
1631           END IF;
1632         END IF;
1633         END IF;*/
1634 
1635       ELSIF (p_int_calc_basis = 'REAMORT' AND p_rev_rec_method ='STREAMS') THEN
1636         IF (p_krpv_rec.Interest_Index_Id = OKC_API.G_MISS_NUM OR
1637             p_krpv_rec.Interest_Index_Id IS NULL)
1638         THEN
1639           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1640                              'Interest Index Id');
1641           l_return_status := OKC_API.G_RET_STS_ERROR;
1642           IF (p_stack_messages = 'N') THEN
1643             RAISE violated_ref_integrity;
1644           END IF;
1645         END IF;
1646 
1647         -- Bug 4907390
1648         /*IF (p_krpv_rec.Base_Rate = OKC_API.G_MISS_NUM OR
1649             p_krpv_rec.Base_Rate IS NULL)
1650         THEN
1651           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1652                              'Base Rate');
1653           l_return_status := OKC_API.G_RET_STS_ERROR;
1654           IF (p_stack_messages = 'N') THEN
1655             RAISE violated_ref_integrity;
1656           END IF;
1657         END IF;*/
1658 
1659         IF (p_krpv_rec.Interest_Start_Date = OKC_API.G_MISS_DATE OR
1660             p_krpv_rec.Interest_Start_Date IS NULL)
1661         THEN
1662           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1663                              'Interest Start Date');
1664           l_return_status := OKC_API.G_RET_STS_ERROR;
1665           IF (p_stack_messages = 'N') THEN
1666             RAISE violated_ref_integrity;
1667           END IF;
1668         END IF;
1669 
1670         IF (p_krpv_rec.Adder_Rate = OKC_API.G_MISS_NUM OR
1671             p_krpv_rec.Adder_Rate IS NULL)
1672         THEN
1673           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1674                              'Adder Rate');
1675           l_return_status := OKC_API.G_RET_STS_ERROR;
1676           IF (p_stack_messages = 'N') THEN
1677             RAISE violated_ref_integrity;
1678           END IF;
1679         END IF;
1680 
1681         IF (p_krpv_rec.Maximum_Rate = OKC_API.G_MISS_NUM OR
1682             p_krpv_rec.Maximum_Rate IS NULL)
1683         THEN
1684           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1685                              'Maximum Rate');
1686           l_return_status := OKC_API.G_RET_STS_ERROR;
1687           IF (p_stack_messages = 'N') THEN
1688             RAISE violated_ref_integrity;
1689           END IF;
1690         END IF;
1691 
1692         IF (p_krpv_rec.Minimum_Rate = OKC_API.G_MISS_NUM OR
1693             p_krpv_rec.Minimum_Rate IS NULL)
1694         THEN
1695           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1696                              'Minimum Rate');
1697           l_return_status := OKC_API.G_RET_STS_ERROR;
1698           IF (p_stack_messages = 'N') THEN
1699             RAISE violated_ref_integrity;
1700           END IF;
1701         END IF;
1702 
1703         IF (p_krpv_rec.Principal_Basis_Code = OKC_API.G_MISS_CHAR OR
1704             p_krpv_rec.Principal_Basis_Code IS NULL)
1705         THEN
1706           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1707                              'Principal Basis Code');
1708           l_return_status := OKC_API.G_RET_STS_ERROR;
1709           IF (p_stack_messages = 'N') THEN
1710             RAISE violated_ref_integrity;
1711           END IF;
1712         ELSIF (p_krpv_rec.Principal_Basis_Code <> OKC_API.G_MISS_CHAR AND
1713                p_krpv_rec.Principal_Basis_Code IS NOT NULL) THEN
1714           IF (p_krpv_rec.Principal_Basis_Code <> 'SCHEDULED') THEN
1715             -- AKP: Todo: Set Proper Message
1716             --(Principal Basis Code is 'SCHEDULED' allowed only)
1717             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1718                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
1719                           ,p_token1       => 'VALUE'
1720                           ,p_token1_value => 'SCHEDULED'
1721                           ,p_token2       => 'CODE0'
1722                           ,p_token2_value => 'PRINCIPAL_BASIS_CODE'
1723                           ,p_token3       => 'CODE1'
1724                           ,p_token3_value => 'REAMORT'
1725                           ,p_token4       => 'CODE2'
1726                           ,p_token4_value => 'STREAMS');
1727             l_return_status := OKC_API.G_RET_STS_ERROR;
1728             IF (p_stack_messages = 'N') THEN
1729               RAISE violated_ref_integrity;
1730             END IF;
1731           END IF;
1732         END IF;
1733 
1734         IF (p_krpv_rec.Days_In_A_Month_Code = OKC_API.G_MISS_CHAR OR
1735             p_krpv_rec.Days_In_A_Month_Code IS NULL)
1736         THEN
1737           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1738                              'Days In A Month Code');
1739           l_return_status := OKC_API.G_RET_STS_ERROR;
1740           IF (p_stack_messages = 'N') THEN
1741             RAISE violated_ref_integrity;
1742           END IF;
1743         ELSIF (p_krpv_rec.Days_In_A_Month_Code <> OKC_API.G_MISS_CHAR AND
1744                p_krpv_rec.Days_In_A_Month_Code IS NOT NULL) THEN
1745           IF (p_krpv_rec.Days_In_A_Month_Code <> '30') THEN
1746             -- AKP: Todo: Set Proper Message
1747             --(Days In A Month Code is '30' allowed only)
1748             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1749                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
1750                           ,p_token1       => 'VALUE'
1751                           ,p_token1_value => '30'
1752                           ,p_token2       => 'CODE0'
1753                           ,p_token2_value => 'DAYS_IN_A_MONTH_CODE'
1754                           ,p_token3       => 'CODE1'
1755                           ,p_token3_value => 'REAMORT'
1756                           ,p_token4       => 'CODE2'
1757                           ,p_token4_value => 'STREAMS');
1758             l_return_status := OKC_API.G_RET_STS_ERROR;
1759             IF (p_stack_messages = 'N') THEN
1760               RAISE violated_ref_integrity;
1761             END IF;
1762           END IF;
1763         END IF;
1764 
1765         IF (p_krpv_rec.Days_In_A_Year_Code = OKC_API.G_MISS_CHAR OR
1766             p_krpv_rec.Days_In_A_Year_Code IS NULL)
1767         THEN
1768           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1769                              'Days In A Year Code');
1770           l_return_status := OKC_API.G_RET_STS_ERROR;
1771           IF (p_stack_messages = 'N') THEN
1772             RAISE violated_ref_integrity;
1773           END IF;
1774         ELSIF (p_krpv_rec.Days_In_A_Year_Code <> OKC_API.G_MISS_CHAR AND
1775                p_krpv_rec.Days_In_A_Year_Code IS NOT NULL) THEN
1776           IF (p_krpv_rec.Days_In_A_Year_Code <> '360') THEN
1777             -- AKP: Todo: Set Proper Message
1778             --(Days In A Year Code is '360' allowed only)
1779             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1780                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
1781                           ,p_token1       => 'VALUE'
1782                           ,p_token1_value => '360'
1783                           ,p_token2       => 'CODE0'
1784                           ,p_token2_value => 'DAYS_IN_A_YEAR_CODE'
1785                           ,p_token3       => 'CODE1'
1786                           ,p_token3_value => 'REAMORT'
1787                           ,p_token4       => 'CODE2'
1788                           ,p_token4_value => 'STREAMS');
1789             l_return_status := OKC_API.G_RET_STS_ERROR;
1790             IF (p_stack_messages = 'N') THEN
1791               RAISE violated_ref_integrity;
1792             END IF;
1793           END IF;
1794         END IF;
1795 
1796         IF (p_krpv_rec.Interest_Basis_Code = OKC_API.G_MISS_CHAR OR
1797             p_krpv_rec.Interest_Basis_Code IS NULL)
1798         THEN
1799           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1800                              'Interest Basis Code');
1801           l_return_status := OKC_API.G_RET_STS_ERROR;
1802           IF (p_stack_messages = 'N') THEN
1803             RAISE violated_ref_integrity;
1804           END IF;
1805         ELSIF (p_krpv_rec.Interest_Basis_Code <> OKC_API.G_MISS_CHAR AND
1806                p_krpv_rec.Interest_Basis_Code IS NOT NULL) THEN
1807           IF (p_krpv_rec.Interest_Basis_Code <> 'SIMPLE') THEN
1808             -- AKP: Todo: Set Proper Message
1809             --(Interest Basis Code is 'SIMPLE' allowed only)
1810             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1811                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
1812                           ,p_token1       => 'VALUE'
1813                           ,p_token1_value => 'SIMPLE'
1814                           ,p_token2       => 'CODE0'
1815                           ,p_token2_value => 'INTEREST_BASIS_CODE'
1816                           ,p_token3       => 'CODE1'
1817                           ,p_token3_value => 'REAMORT'
1818                           ,p_token4       => 'CODE2'
1819                           ,p_token4_value => 'STREAMS');
1820             l_return_status := OKC_API.G_RET_STS_ERROR;
1821             IF (p_stack_messages = 'N') THEN
1822               RAISE violated_ref_integrity;
1823             END IF;
1824           END IF;
1825         END IF;
1826 
1827         /* Bug 4862551. Commented out. No need to have these values:
1828            rate_delay_code, rate_delay_frequency, rate_change_start_date,
1829            rate_change_frequency_code, rate_change_value */
1830         /*
1831         IF (p_krpv_rec.Rate_Delay_Code = OKC_API.G_MISS_CHAR OR
1832             p_krpv_rec.Rate_Delay_Code IS NULL)
1833         THEN
1834           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1835                              'Rate Delay Code');
1836           l_return_status := OKC_API.G_RET_STS_ERROR;
1837           IF (p_stack_messages = 'N') THEN
1838             RAISE violated_ref_integrity;
1839           END IF;
1840         END IF;
1841 
1842         IF (p_krpv_rec.Rate_Delay_Frequency = OKC_API.G_MISS_NUM OR
1843             p_krpv_rec.Rate_Delay_Frequency IS NULL)
1844         THEN
1845           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1846                              'Rate Delay Frequency');
1847           l_return_status := OKC_API.G_RET_STS_ERROR;
1848           IF (p_stack_messages = 'N') THEN
1849             RAISE violated_ref_integrity;
1850           END IF;
1851         END IF;
1852 
1853         IF (p_krpv_rec.Rate_Change_Start_Date = OKC_API.G_MISS_DATE OR
1854             p_krpv_rec.Rate_Change_Start_Date IS NULL)
1855         THEN
1856           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1857                              'Rate Change Start Date');
1858           l_return_status := OKC_API.G_RET_STS_ERROR;
1859           IF (p_stack_messages = 'N') THEN
1860             RAISE violated_ref_integrity;
1861           END IF;
1862         END IF;
1863         */
1864 
1865         IF (p_krpv_rec.Rate_Change_Frequency_Code = OKC_API.G_MISS_CHAR OR
1866             p_krpv_rec.Rate_Change_Frequency_Code IS NULL)
1867         THEN
1868           -- Bug 4862551
1869           /*OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1870                              'Rate Change Frequency Code');
1871           l_return_status := OKC_API.G_RET_STS_ERROR;
1872           IF (p_stack_messages = 'N') THEN
1873             RAISE violated_ref_integrity;
1874           END IF;*/
1875           NULL;
1876         ELSIF (p_krpv_rec.Rate_Change_Frequency_Code <> OKC_API.G_MISS_CHAR AND
1877                p_krpv_rec.Rate_Change_Frequency_Code IS NOT NULL) THEN
1878           IF (p_krpv_rec.Rate_Change_Frequency_Code <> 'BILLING_DATE') THEN
1879             -- AKP: Todo: Set Proper Message
1880             --(Rate Change Frequency Code is 'BILLING_DATE' allowed only)
1881             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
1882                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
1883                           ,p_token1       => 'VALUE'
1884                           ,p_token1_value => 'BILLING_DATE'
1885                           ,p_token2       => 'CODE0'
1886                           ,p_token2_value => 'RATE_CHANGE_FREQUENCY_CODE'
1887                           ,p_token3       => 'CODE1'
1888                           ,p_token3_value => 'REAMORT'
1889                           ,p_token4       => 'CODE2'
1890                           ,p_token4_value => 'STREAMS');
1891             l_return_status := OKC_API.G_RET_STS_ERROR;
1892             IF (p_stack_messages = 'N') THEN
1893               RAISE violated_ref_integrity;
1894             END IF;
1895           END IF;
1896         END IF;
1897 
1898         -- Bug 4862551
1899         /*
1900         IF (p_krpv_rec.Rate_Change_Value = OKC_API.G_MISS_NUM OR
1901             p_krpv_rec.Rate_Change_Value IS NULL)
1902         THEN
1903           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1904                              'Rate Change Value');
1905           l_return_status := OKC_API.G_RET_STS_ERROR;
1906           IF (p_stack_messages = 'N') THEN
1907             RAISE violated_ref_integrity;
1908           END IF;
1909         END IF;
1910         */
1911 
1912         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
1913         IF (p_krpv_rec.Conversion_Option_Code = OKC_API.G_MISS_CHAR OR
1914             p_krpv_rec.Conversion_Option_Code IS NULL)
1915         THEN
1916           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1917                              'Conversion Option Code');
1918           l_return_status := OKC_API.G_RET_STS_ERROR;
1919           IF (p_stack_messages = 'N') THEN
1920             RAISE violated_ref_integrity;
1921           END IF;
1922         END IF;
1923         END IF;*/
1924 
1925         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
1926         IF (p_krpv_rec.Next_Conversion_Date = OKC_API.G_MISS_DATE OR
1927             p_krpv_rec.Next_Conversion_Date IS NULL)
1928         THEN
1929           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1930                              'Next Conversion Date');
1931           l_return_status := OKC_API.G_RET_STS_ERROR;
1932           IF (p_stack_messages = 'N') THEN
1933             RAISE violated_ref_integrity;
1934           END IF;
1935         END IF;
1936         END IF;*/
1937 
1938         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
1939         IF (p_krpv_rec.Conversion_Type_Code = OKC_API.G_MISS_CHAR OR
1940             p_krpv_rec.Conversion_Type_Code IS NULL)
1941         THEN
1942           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1943                              'Conversion Type Code');
1944           l_return_status := OKC_API.G_RET_STS_ERROR;
1945           IF (p_stack_messages = 'N') THEN
1946             RAISE violated_ref_integrity;
1947           END IF;
1948         END IF;
1949         END IF;*/
1950 
1951 
1952       ELSIF (p_int_calc_basis = 'FLOAT_FACTORS' AND p_rev_rec_method ='STREAMS') THEN
1953         -- Bug 4907390
1954         /*IF (p_krpv_rec.Base_Rate = OKC_API.G_MISS_NUM OR
1955             p_krpv_rec.Base_Rate IS NULL)
1956         THEN
1957           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1958                              'Base Rate');
1959           l_return_status := OKC_API.G_RET_STS_ERROR;
1960           IF (p_stack_messages = 'N') THEN
1961             RAISE violated_ref_integrity;
1962           END IF;
1963         END IF; */
1964 
1965         IF (p_krpv_rec.Interest_Start_Date = OKC_API.G_MISS_DATE OR
1966             p_krpv_rec.Interest_Start_Date IS NULL)
1967         THEN
1968           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1969                              'Interest Start Date');
1970           l_return_status := OKC_API.G_RET_STS_ERROR;
1971           IF (p_stack_messages = 'N') THEN
1972             RAISE violated_ref_integrity;
1973           END IF;
1974         END IF;
1975 
1976         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
1977         IF (p_krpv_rec.Conversion_Option_Code = OKC_API.G_MISS_CHAR OR
1978             p_krpv_rec.Conversion_Option_Code IS NULL)
1979         THEN
1980           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1981                              'Conversion Option Code');
1982           l_return_status := OKC_API.G_RET_STS_ERROR;
1983           IF (p_stack_messages = 'N') THEN
1984             RAISE violated_ref_integrity;
1985           END IF;
1986         END IF;
1987         END IF;*/
1988 
1989         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
1990         IF (p_krpv_rec.Next_Conversion_Date = OKC_API.G_MISS_DATE OR
1991             p_krpv_rec.Next_Conversion_Date IS NULL)
1992         THEN
1993           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
1994                              'Next Conversion Date');
1995           l_return_status := OKC_API.G_RET_STS_ERROR;
1996           IF (p_stack_messages = 'N') THEN
1997             RAISE violated_ref_integrity;
1998           END IF;
1999         END IF;
2000         END IF;*/
2001 
2002         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2003         IF (p_krpv_rec.Conversion_Type_Code = OKC_API.G_MISS_CHAR OR
2004             p_krpv_rec.Conversion_Type_Code IS NULL)
2005         THEN
2006           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2007                              'Conversion Type Code');
2008           l_return_status := OKC_API.G_RET_STS_ERROR;
2009           IF (p_stack_messages = 'N') THEN
2010             RAISE violated_ref_integrity;
2011           END IF;
2012         END IF;
2013         END IF;*/
2014 
2015         -- Bug 4753087
2016         IF (p_krpv_rec.Principal_Basis_Code = OKC_API.G_MISS_CHAR OR
2017             p_krpv_rec.Principal_Basis_Code IS NULL)
2018         THEN
2019           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2020                              'Principal Basis Code');
2021           l_return_status := OKC_API.G_RET_STS_ERROR;
2022           IF (p_stack_messages = 'N') THEN
2023             RAISE violated_ref_integrity;
2024           END IF;
2025         ELSIF (p_krpv_rec.Principal_Basis_Code <> OKC_API.G_MISS_CHAR AND
2026                p_krpv_rec.Principal_Basis_Code IS NOT NULL) THEN
2027           IF (p_krpv_rec.Principal_Basis_Code <> 'SCHEDULED') THEN
2028             -- AKP: Todo: Set Proper Message
2029             --(Principal Basis Code is 'SCHEDULED' allowed only)
2030             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
2031                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
2032                           ,p_token1       => 'VALUE'
2033                           ,p_token1_value => 'SCHEDULED'
2034                           ,p_token2       => 'CODE0'
2035                           ,p_token2_value => 'PRINCIPAL_BASIS_CODE'
2036                           ,p_token3       => 'CODE1'
2037                           ,p_token3_value => 'FLOAT_FACTORS'
2038                           ,p_token4       => 'CODE2'
2039                           ,p_token4_value => 'STREAMS');
2040             l_return_status := OKC_API.G_RET_STS_ERROR;
2041             IF (p_stack_messages = 'N') THEN
2042               RAISE violated_ref_integrity;
2043             END IF;
2044           END IF;
2045         END IF;
2046 
2047         -- Bug 4862416: For FLOAT_FACTOR, formula is required
2048         IF (p_krpv_rec.Calculation_Formula_Id = OKC_API.G_MISS_NUM OR
2049             p_krpv_rec.Calculation_Formula_Id IS NULL)
2050         THEN
2051           l_msg2_set := TRUE;
2052           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2053                              'Formula Name');
2054           l_return_status := OKC_API.G_RET_STS_ERROR;
2055           IF (p_stack_messages = 'N') THEN
2056             RAISE violated_ref_integrity;
2057           END IF;
2058         END IF;
2059 
2060       END IF; -- For FIXED and STREAMS
2061 
2062     END IF;  -- For LEASEDF, LEASEOP and LEASEST
2063 
2064     IF (p_deal_type IN ('LOAN')) THEN
2065       IF (p_int_calc_basis = 'FIXED' AND p_rev_rec_method = 'STREAMS') THEN
2066         /* AKP: ToDo: Check Base_Rate for Principal payment type only and not
2067                       for Rent */
2068         IF (p_krpv_rec.Base_Rate = OKC_API.G_MISS_NUM OR
2069             p_krpv_rec.Base_Rate IS NULL)
2070         THEN
2071           OKL_K_RATE_PARAMS_PVT.check_principal_payment(
2072             p_api_version             => 1,
2073             p_init_msg_list           => OKL_API.G_FALSE,
2074             x_return_status           => l_return_status,
2075             x_msg_count               => l_msg_count,
2076             x_msg_data                => l_msg_data,
2077             p_chr_id                  => p_krpv_rec.khr_id,
2078             x_principal_payment_defined => l_principal_payment_defined);
2079           IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) THEN
2080             RAISE violated_ref_integrity;
2081           END IF;
2082 
2083           IF (l_principal_payment_defined) THEN
2084             OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2085                                'Base Rate');
2086             l_return_status := OKC_API.G_RET_STS_ERROR;
2087             IF (p_stack_messages = 'N') THEN
2088               RAISE violated_ref_integrity;
2089             END IF;
2090           END IF;
2091         END IF;
2092 
2093         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2094         IF (p_krpv_rec.Conversion_Option_Code = OKC_API.G_MISS_CHAR OR
2095             p_krpv_rec.Conversion_Option_Code IS NULL)
2096         THEN
2097           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2098                              'Conversion Option Code');
2099           l_return_status := OKC_API.G_RET_STS_ERROR;
2100           IF (p_stack_messages = 'N') THEN
2101             RAISE violated_ref_integrity;
2102           END IF;
2103         END IF;
2104         END IF;*/
2105 
2106         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2107         IF (p_krpv_rec.Next_Conversion_Date = OKC_API.G_MISS_DATE OR
2108             p_krpv_rec.Next_Conversion_Date IS NULL)
2109         THEN
2110           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2111                              'Next Conversion Date');
2112           l_return_status := OKC_API.G_RET_STS_ERROR;
2113           IF (p_stack_messages = 'N') THEN
2114             RAISE violated_ref_integrity;
2115           END IF;
2116         END IF;
2117         END IF;*/
2118 
2119         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2120         IF (p_krpv_rec.Conversion_Type_Code = OKC_API.G_MISS_CHAR OR
2121             p_krpv_rec.Conversion_Type_Code IS NULL)
2122         THEN
2123           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2124                              'Conversion Type Code');
2125           l_return_status := OKC_API.G_RET_STS_ERROR;
2126           IF (p_stack_messages = 'N') THEN
2127             RAISE violated_ref_integrity;
2128           END IF;
2129         END IF;
2130         END IF;*/
2131 
2132 
2133       /* AKP Todo: To check these lookup values correctness */
2134       ELSIF (p_int_calc_basis IN ('FLOAT')
2135              AND p_rev_rec_method = 'ESTIMATED_AND_BILLED') THEN
2136         IF (p_krpv_rec.Interest_Index_Id = OKC_API.G_MISS_NUM OR
2137             p_krpv_rec.Interest_Index_Id IS NULL)
2138         THEN
2139           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2140                              'Interest Index Id');
2141           l_return_status := OKC_API.G_RET_STS_ERROR;
2142           IF (p_stack_messages = 'N') THEN
2143             RAISE violated_ref_integrity;
2144           END IF;
2145         END IF;
2146 
2147         -- Bug 4907390
2148         /*IF (p_krpv_rec.Base_Rate = OKC_API.G_MISS_NUM OR
2149             p_krpv_rec.Base_Rate IS NULL)
2150         THEN
2151           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2152                              'Base Rate');
2153           l_return_status := OKC_API.G_RET_STS_ERROR;
2154           IF (p_stack_messages = 'N') THEN
2155             RAISE violated_ref_integrity;
2156           END IF;
2157         END IF;*/
2158 
2159         IF (p_krpv_rec.Interest_Start_Date = OKC_API.G_MISS_DATE OR
2160             p_krpv_rec.Interest_Start_Date IS NULL)
2161         THEN
2162           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2163                              'Interest Start Date');
2164           l_return_status := OKC_API.G_RET_STS_ERROR;
2165           IF (p_stack_messages = 'N') THEN
2166             RAISE violated_ref_integrity;
2167           END IF;
2168         END IF;
2169 
2170         IF (p_krpv_rec.Adder_Rate = OKC_API.G_MISS_NUM OR
2171             p_krpv_rec.Adder_Rate IS NULL)
2172         THEN
2173           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2174                              'Adder Rate');
2175           l_return_status := OKC_API.G_RET_STS_ERROR;
2176           IF (p_stack_messages = 'N') THEN
2177             RAISE violated_ref_integrity;
2178           END IF;
2179         END IF;
2180 
2181         IF (p_krpv_rec.Maximum_Rate = OKC_API.G_MISS_NUM OR
2182             p_krpv_rec.Maximum_Rate IS NULL)
2183         THEN
2184           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2185                              'Maximum Rate');
2186           l_return_status := OKC_API.G_RET_STS_ERROR;
2187           IF (p_stack_messages = 'N') THEN
2188             RAISE violated_ref_integrity;
2189           END IF;
2190         END IF;
2191 
2192         IF (p_krpv_rec.Minimum_Rate = OKC_API.G_MISS_NUM OR
2193             p_krpv_rec.Minimum_Rate IS NULL)
2194         THEN
2195           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2196                              'Minimum Rate');
2197           l_return_status := OKC_API.G_RET_STS_ERROR;
2198           IF (p_stack_messages = 'N') THEN
2199             RAISE violated_ref_integrity;
2200           END IF;
2201         END IF;
2202 
2203         IF (p_krpv_rec.Principal_Basis_Code = OKC_API.G_MISS_CHAR OR
2204             p_krpv_rec.Principal_Basis_Code IS NULL)
2205         THEN
2206           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2207                              'Principal Basis Code');
2208           l_return_status := OKC_API.G_RET_STS_ERROR;
2209           IF (p_stack_messages = 'N') THEN
2210             RAISE violated_ref_integrity;
2211           END IF;
2212         END IF;
2213 
2214         IF (p_krpv_rec.Days_In_A_Month_Code = OKC_API.G_MISS_CHAR OR
2215             p_krpv_rec.Days_In_A_Month_Code IS NULL)
2216         THEN
2217           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2218                              'Days In A Month Code');
2219           l_return_status := OKC_API.G_RET_STS_ERROR;
2220           IF (p_stack_messages = 'N') THEN
2221             RAISE violated_ref_integrity;
2222           END IF;
2223         END IF;
2224 
2225         IF (p_krpv_rec.Days_In_A_Year_Code = OKC_API.G_MISS_CHAR OR
2226             p_krpv_rec.Days_In_A_Year_Code IS NULL)
2227         THEN
2228           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2229                              'Days In A Year Code');
2230           l_return_status := OKC_API.G_RET_STS_ERROR;
2231           IF (p_stack_messages = 'N') THEN
2232             RAISE violated_ref_integrity;
2233           END IF;
2234         END IF;
2235 
2236         IF (p_krpv_rec.Interest_Basis_Code = OKC_API.G_MISS_CHAR OR
2237             p_krpv_rec.Interest_Basis_Code IS NULL)
2238         THEN
2239           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2240                              'Interest Basis Code');
2241           l_return_status := OKC_API.G_RET_STS_ERROR;
2242           IF (p_stack_messages = 'N') THEN
2243             RAISE violated_ref_integrity;
2244           END IF;
2245         END IF;
2246 
2247         -- Bug 4862551
2248         /*
2249         IF (p_krpv_rec.Rate_Delay_Code = OKC_API.G_MISS_CHAR OR
2250             p_krpv_rec.Rate_Delay_Code IS NULL)
2251         THEN
2252           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2253                              'Rate Delay Code');
2254           l_return_status := OKC_API.G_RET_STS_ERROR;
2255           IF (p_stack_messages = 'N') THEN
2256             RAISE violated_ref_integrity;
2257           END IF;
2258         END IF;
2259 
2260         IF (p_krpv_rec.Rate_Delay_Frequency = OKC_API.G_MISS_NUM OR
2261             p_krpv_rec.Rate_Delay_Frequency IS NULL)
2262         THEN
2263           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2264                              'Rate Delay Frequency');
2265           l_return_status := OKC_API.G_RET_STS_ERROR;
2266           IF (p_stack_messages = 'N') THEN
2267             RAISE violated_ref_integrity;
2268           END IF;
2269         END IF;
2270         */
2271 
2272         -- Bug 4862416
2273         /*IF (p_krpv_rec.Compounding_Frequency_Code = OKC_API.G_MISS_CHAR OR
2274             p_krpv_rec.Compounding_Frequency_Code IS NULL)
2275         THEN
2276           l_msg1_set := TRUE;
2277           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2278                              'Compounding Frequency CODE');
2279           l_return_status := OKC_API.G_RET_STS_ERROR;
2280           IF (p_stack_messages = 'N') THEN
2281             RAISE violated_ref_integrity;
2282           END IF;
2283         END IF;
2284 
2285         IF (p_krpv_rec.Calculation_Formula_Id = OKC_API.G_MISS_NUM OR
2286             p_krpv_rec.Calculation_Formula_Id IS NULL)
2287         THEN
2288           l_msg2_set := TRUE;
2289           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2290                              'Formula Name');
2291           l_return_status := OKC_API.G_RET_STS_ERROR;
2292           IF (p_stack_messages = 'N') THEN
2293             RAISE violated_ref_integrity;
2294           END IF;
2295         END IF; */
2296 
2297         -- Bug 4862551
2298         /*
2299         IF (p_krpv_rec.Rate_Change_Start_Date = OKC_API.G_MISS_DATE OR
2300             p_krpv_rec.Rate_Change_Start_Date IS NULL)
2301         THEN
2302           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2303                              'Rate Change Start Date');
2304           l_return_status := OKC_API.G_RET_STS_ERROR;
2305           IF (p_stack_messages = 'N') THEN
2306             RAISE violated_ref_integrity;
2307           END IF;
2308         END IF;
2309 
2310         IF (p_krpv_rec.Rate_Change_Frequency_Code = OKC_API.G_MISS_CHAR OR
2311             p_krpv_rec.Rate_Change_Frequency_Code IS NULL)
2312         THEN
2313           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2314                              'Rate Change Frequency Code');
2315           l_return_status := OKC_API.G_RET_STS_ERROR;
2316           IF (p_stack_messages = 'N') THEN
2317             RAISE violated_ref_integrity;
2318           END IF;
2319         END IF;
2320 
2321         IF (p_krpv_rec.Rate_Change_Value = OKC_API.G_MISS_NUM OR
2322             p_krpv_rec.Rate_Change_Value IS NULL)
2323         THEN
2324           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2325                              'Rate Change Value');
2326           l_return_status := OKC_API.G_RET_STS_ERROR;
2327           IF (p_stack_messages = 'N') THEN
2328             RAISE violated_ref_integrity;
2329           END IF;
2330         END IF;
2331         */
2332 
2333         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2334         IF (p_krpv_rec.Conversion_Option_Code = OKC_API.G_MISS_CHAR OR
2335             p_krpv_rec.Conversion_Option_Code IS NULL)
2336         THEN
2337           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2338                              'Conversion Option Code');
2339           l_return_status := OKC_API.G_RET_STS_ERROR;
2340           IF (p_stack_messages = 'N') THEN
2341             RAISE violated_ref_integrity;
2342           END IF;
2343         END IF;
2344         END IF;*/
2345 
2346         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2347         IF (p_krpv_rec.Next_Conversion_Date = OKC_API.G_MISS_DATE OR
2348             p_krpv_rec.Next_Conversion_Date IS NULL)
2349         THEN
2350           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2351                              'Next Conversion Date');
2352           l_return_status := OKC_API.G_RET_STS_ERROR;
2353           IF (p_stack_messages = 'N') THEN
2354             RAISE violated_ref_integrity;
2355           END IF;
2356         END IF;
2357         END IF;*/
2358 
2359         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2360         IF (p_krpv_rec.Conversion_Type_Code = OKC_API.G_MISS_CHAR OR
2361             p_krpv_rec.Conversion_Type_Code IS NULL)
2362         THEN
2363           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2364                              'Conversion Type Code');
2365           l_return_status := OKC_API.G_RET_STS_ERROR;
2366           IF (p_stack_messages = 'N') THEN
2367             RAISE violated_ref_integrity;
2368           END IF;
2369         END IF;
2370         END IF;*/
2371 
2372       ELSIF (p_int_calc_basis IN ('FLOAT', 'FIXED')
2373              AND p_rev_rec_method = 'ACTUAL') THEN
2374         IF (p_krpv_rec.Interest_Index_Id = OKC_API.G_MISS_NUM OR
2375             p_krpv_rec.Interest_Index_Id IS NULL)
2376         THEN
2377           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2378                              'Interest Index Id');
2379           l_return_status := OKC_API.G_RET_STS_ERROR;
2380           IF (p_stack_messages = 'N') THEN
2381             RAISE violated_ref_integrity;
2382           END IF;
2383         END IF;
2384 
2385         -- Bug 4907390
2386         /*IF (p_krpv_rec.Base_Rate = OKC_API.G_MISS_NUM OR
2387             p_krpv_rec.Base_Rate IS NULL)
2388         THEN
2389           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2390                              'Base Rate');
2391           l_return_status := OKC_API.G_RET_STS_ERROR;
2392           IF (p_stack_messages = 'N') THEN
2393             RAISE violated_ref_integrity;
2394           END IF;
2395         END IF;*/
2396 
2397         IF (p_krpv_rec.Interest_Start_Date = OKC_API.G_MISS_DATE OR
2398             p_krpv_rec.Interest_Start_Date IS NULL)
2399         THEN
2400           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2401                              'Interest Start Date');
2402           l_return_status := OKC_API.G_RET_STS_ERROR;
2403           IF (p_stack_messages = 'N') THEN
2404             RAISE violated_ref_integrity;
2405           END IF;
2406         END IF;
2407 
2408         IF (p_krpv_rec.Adder_Rate = OKC_API.G_MISS_NUM OR
2409             p_krpv_rec.Adder_Rate IS NULL)
2410         THEN
2411           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2412                              'Adder Rate');
2413           l_return_status := OKC_API.G_RET_STS_ERROR;
2414           IF (p_stack_messages = 'N') THEN
2415             RAISE violated_ref_integrity;
2416           END IF;
2417         END IF;
2418 
2419         IF (p_krpv_rec.Maximum_Rate = OKC_API.G_MISS_NUM OR
2420             p_krpv_rec.Maximum_Rate IS NULL)
2421         THEN
2422           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2423                              'Maximum Rate');
2424           l_return_status := OKC_API.G_RET_STS_ERROR;
2425           IF (p_stack_messages = 'N') THEN
2426             RAISE violated_ref_integrity;
2427           END IF;
2428         END IF;
2429 
2430         IF (p_krpv_rec.Minimum_Rate = OKC_API.G_MISS_NUM OR
2431             p_krpv_rec.Minimum_Rate IS NULL)
2432         THEN
2433           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2434                              'Minimum Rate');
2435           l_return_status := OKC_API.G_RET_STS_ERROR;
2436           IF (p_stack_messages = 'N') THEN
2437             RAISE violated_ref_integrity;
2438           END IF;
2439         END IF;
2440 
2441         IF (p_krpv_rec.Principal_Basis_Code = OKC_API.G_MISS_CHAR OR
2442             p_krpv_rec.Principal_Basis_Code IS NULL)
2443         THEN
2444           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2445                              'Principal Basis Code');
2446           l_return_status := OKC_API.G_RET_STS_ERROR;
2447           IF (p_stack_messages = 'N') THEN
2448             RAISE violated_ref_integrity;
2449           END IF;
2450         ELSIF (p_krpv_rec.Principal_Basis_Code <> OKC_API.G_MISS_CHAR AND
2451                p_krpv_rec.Principal_Basis_Code IS NOT NULL) THEN
2452           IF (p_krpv_rec.Principal_Basis_Code <> 'ACTUAL') THEN
2453             -- AKP: Todo: Set Proper Message
2454             --(Principal Basis Code is 'ACTUAL' allowed only)
2455             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
2456                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
2457                           ,p_token1       => 'VALUE'
2458                           ,p_token1_value => 'ACTUAL'
2459                           ,p_token2       => 'CODE0'
2460                           ,p_token2_value => 'PRINCIPAL_BASIS_CODE'
2461                           ,p_token3       => 'CODE1'
2462                           ,p_token3_value => 'FLOAT'
2463                           ,p_token4       => 'CODE2'
2464                           ,p_token4_value => 'ACTUAL');
2465             l_return_status := OKC_API.G_RET_STS_ERROR;
2466             IF (p_stack_messages = 'N') THEN
2467               RAISE violated_ref_integrity;
2468             END IF;
2469           END IF;
2470         END IF;
2471 
2472         IF (p_krpv_rec.Days_In_A_Month_Code = OKC_API.G_MISS_CHAR OR
2473             p_krpv_rec.Days_In_A_Month_Code IS NULL)
2474         THEN
2475           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2476                              'Days In A Month Code');
2477           l_return_status := OKC_API.G_RET_STS_ERROR;
2478           IF (p_stack_messages = 'N') THEN
2479             RAISE violated_ref_integrity;
2480           END IF;
2481         END IF;
2482 
2483         IF (p_krpv_rec.Days_In_A_Year_Code = OKC_API.G_MISS_CHAR OR
2484             p_krpv_rec.Days_In_A_Year_Code IS NULL)
2485         THEN
2486           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2487                              'Days In A Year Code');
2488           l_return_status := OKC_API.G_RET_STS_ERROR;
2489           IF (p_stack_messages = 'N') THEN
2490             RAISE violated_ref_integrity;
2491           END IF;
2492         END IF;
2493 
2494         IF (p_krpv_rec.Interest_Basis_Code = OKC_API.G_MISS_CHAR OR
2495             p_krpv_rec.Interest_Basis_Code IS NULL)
2496         THEN
2497           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2498                              'Interest Basis Code');
2499           l_return_status := OKC_API.G_RET_STS_ERROR;
2500           IF (p_stack_messages = 'N') THEN
2501             RAISE violated_ref_integrity;
2502           END IF;
2503         END IF;
2504 
2505         -- Bug 4862551
2506         /*
2507         IF (p_krpv_rec.Rate_Delay_Code = OKC_API.G_MISS_CHAR OR
2508             p_krpv_rec.Rate_Delay_Code IS NULL)
2509         THEN
2510           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2511                              'Rate Delay Code');
2512           l_return_status := OKC_API.G_RET_STS_ERROR;
2513           IF (p_stack_messages = 'N') THEN
2514             RAISE violated_ref_integrity;
2515           END IF;
2516         END IF;
2517 
2518         IF (p_krpv_rec.Rate_Delay_Frequency = OKC_API.G_MISS_NUM OR
2519             p_krpv_rec.Rate_Delay_Frequency IS NULL)
2520         THEN
2521           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2522                              'Rate Delay Frequency');
2523           l_return_status := OKC_API.G_RET_STS_ERROR;
2524           IF (p_stack_messages = 'N') THEN
2525             RAISE violated_ref_integrity;
2526           END IF;
2527         END IF;
2528         */
2529 
2530         -- Bug 4862416
2531         /*IF (p_krpv_rec.Compounding_Frequency_Code = OKC_API.G_MISS_CHAR OR
2532             p_krpv_rec.Compounding_Frequency_Code IS NULL)
2533         THEN
2534           l_msg1_set := TRUE;
2535           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2536                              'Compounding Frequency CODE');
2537           l_return_status := OKC_API.G_RET_STS_ERROR;
2538           IF (p_stack_messages = 'N') THEN
2539             RAISE violated_ref_integrity;
2540           END IF;
2541         END IF;
2542 
2543         IF (p_krpv_rec.Calculation_Formula_Id = OKC_API.G_MISS_NUM OR
2544             p_krpv_rec.Calculation_Formula_Id IS NULL)
2545         THEN
2546           l_msg2_set := TRUE;
2547           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2548                              'Formula Name');
2549           l_return_status := OKC_API.G_RET_STS_ERROR;
2550           IF (p_stack_messages = 'N') THEN
2551             RAISE violated_ref_integrity;
2552           END IF;
2553         END IF;*/
2554 
2555         -- Bug 4862551
2556         /*
2557         IF (p_krpv_rec.Rate_Change_Start_Date = OKC_API.G_MISS_DATE OR
2558             p_krpv_rec.Rate_Change_Start_Date IS NULL)
2559         THEN
2560           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2561                              'Rate Change Start Date');
2562           l_return_status := OKC_API.G_RET_STS_ERROR;
2563           IF (p_stack_messages = 'N') THEN
2564             RAISE violated_ref_integrity;
2565           END IF;
2566         END IF;
2567 
2568         IF (p_krpv_rec.Rate_Change_Frequency_Code = OKC_API.G_MISS_CHAR OR
2569             p_krpv_rec.Rate_Change_Frequency_Code IS NULL)
2570         THEN
2571           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2572                              'Rate Change Frequency Code');
2573           l_return_status := OKC_API.G_RET_STS_ERROR;
2574           IF (p_stack_messages = 'N') THEN
2575             RAISE violated_ref_integrity;
2576           END IF;
2577         END IF;
2578 
2579         IF (p_krpv_rec.Rate_Change_Value = OKC_API.G_MISS_NUM OR
2580             p_krpv_rec.Rate_Change_Value IS NULL)
2581         THEN
2582           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2583                              'Rate Change Value');
2584           l_return_status := OKC_API.G_RET_STS_ERROR;
2585           IF (p_stack_messages = 'N') THEN
2586             RAISE violated_ref_integrity;
2587           END IF;
2588         END IF;
2589         */
2590 
2591         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2592         IF (p_krpv_rec.Conversion_Option_Code = OKC_API.G_MISS_CHAR OR
2593             p_krpv_rec.Conversion_Option_Code IS NULL)
2594         THEN
2595           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2596                              'Conversion Option Code');
2597           l_return_status := OKC_API.G_RET_STS_ERROR;
2598           IF (p_stack_messages = 'N') THEN
2599             RAISE violated_ref_integrity;
2600           END IF;
2601         END IF;
2602         END IF;*/
2603 
2604         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2605         IF (p_krpv_rec.Next_Conversion_Date = OKC_API.G_MISS_DATE OR
2606             p_krpv_rec.Next_Conversion_Date IS NULL)
2607         THEN
2608           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2609                              'Next Conversion Date');
2610           l_return_status := OKC_API.G_RET_STS_ERROR;
2611           IF (p_stack_messages = 'N') THEN
2612             RAISE violated_ref_integrity;
2613           END IF;
2614         END IF;
2615         END IF;*/
2616 
2617         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2618         IF (p_krpv_rec.Conversion_Type_Code = OKC_API.G_MISS_CHAR OR
2619             p_krpv_rec.Conversion_Type_Code IS NULL)
2620         THEN
2621           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2622                              'Conversion Type Code');
2623           l_return_status := OKC_API.G_RET_STS_ERROR;
2624           IF (p_stack_messages = 'N') THEN
2625             RAISE violated_ref_integrity;
2626           END IF;
2627         END IF;
2628         END IF;*/
2629 
2630       ELSIF (p_int_calc_basis = 'REAMORT'
2631              AND p_rev_rec_method = 'STREAMS') THEN
2632         IF (p_krpv_rec.Interest_Index_Id = OKC_API.G_MISS_NUM OR
2633             p_krpv_rec.Interest_Index_Id IS NULL)
2634         THEN
2635           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2636                              'Interest Index Id');
2637           l_return_status := OKC_API.G_RET_STS_ERROR;
2638           IF (p_stack_messages = 'N') THEN
2639             RAISE violated_ref_integrity;
2640           END IF;
2641         END IF;
2642 
2643         -- Bug 4907390
2644         /*IF (p_krpv_rec.Base_Rate = OKC_API.G_MISS_NUM OR
2645             p_krpv_rec.Base_Rate IS NULL)
2646         THEN
2647           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2648                              'Base Rate');
2649           l_return_status := OKC_API.G_RET_STS_ERROR;
2650           IF (p_stack_messages = 'N') THEN
2651             RAISE violated_ref_integrity;
2652           END IF;
2653         END IF;*/
2654 
2655         IF (p_krpv_rec.Interest_Start_Date = OKC_API.G_MISS_DATE OR
2656             p_krpv_rec.Interest_Start_Date IS NULL)
2657         THEN
2658           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2659                              'Interest Start Date');
2660           l_return_status := OKC_API.G_RET_STS_ERROR;
2661           IF (p_stack_messages = 'N') THEN
2662             RAISE violated_ref_integrity;
2663           END IF;
2664         END IF;
2665 
2666         IF (p_krpv_rec.Adder_Rate = OKC_API.G_MISS_NUM OR
2667             p_krpv_rec.Adder_Rate IS NULL)
2668         THEN
2669           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2670                              'Adder Rate');
2671           l_return_status := OKC_API.G_RET_STS_ERROR;
2672           IF (p_stack_messages = 'N') THEN
2673             RAISE violated_ref_integrity;
2674           END IF;
2675         END IF;
2676 
2677         IF (p_krpv_rec.Maximum_Rate = OKC_API.G_MISS_NUM OR
2678             p_krpv_rec.Maximum_Rate IS NULL)
2679         THEN
2680           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2681                              'Maximum Rate');
2682           l_return_status := OKC_API.G_RET_STS_ERROR;
2683           IF (p_stack_messages = 'N') THEN
2684             RAISE violated_ref_integrity;
2685           END IF;
2686         END IF;
2687 
2688         IF (p_krpv_rec.Minimum_Rate = OKC_API.G_MISS_NUM OR
2689             p_krpv_rec.Minimum_Rate IS NULL)
2690         THEN
2691           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2692                              'Minimum Rate');
2693           l_return_status := OKC_API.G_RET_STS_ERROR;
2694           IF (p_stack_messages = 'N') THEN
2695             RAISE violated_ref_integrity;
2696           END IF;
2697         END IF;
2698 
2699         IF (p_krpv_rec.Principal_Basis_Code = OKC_API.G_MISS_CHAR OR
2700             p_krpv_rec.Principal_Basis_Code IS NULL)
2701         THEN
2702           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2703                              'Principal Basis Code');
2704           l_return_status := OKC_API.G_RET_STS_ERROR;
2705           IF (p_stack_messages = 'N') THEN
2706             RAISE violated_ref_integrity;
2707           END IF;
2708         ELSIF (p_krpv_rec.Principal_Basis_Code <> OKC_API.G_MISS_CHAR AND
2709                p_krpv_rec.Principal_Basis_Code IS NOT NULL) THEN
2710           IF (p_krpv_rec.Principal_Basis_Code <> 'SCHEDULED') THEN
2711             -- AKP: Todo: Set Proper Message
2712             --(Principal Basis Code is 'SCHEDULED' allowed only)
2713             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
2714                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
2715                           ,p_token1       => 'VALUE'
2716                           ,p_token1_value => 'SCHEDULED'
2717                           ,p_token2       => 'CODE0'
2718                           ,p_token2_value => 'PRINCIPAL_BASIS_CODE'
2719                           ,p_token3       => 'CODE1'
2720                           ,p_token3_value => 'REAMORT'
2721                           ,p_token4       => 'CODE2'
2722                           ,p_token4_value => 'STREAMS');
2723             l_return_status := OKC_API.G_RET_STS_ERROR;
2724             IF (p_stack_messages = 'N') THEN
2725               RAISE violated_ref_integrity;
2726             END IF;
2727           END IF;
2728         END IF;
2729 
2730         IF (p_krpv_rec.Days_In_A_Month_Code = OKC_API.G_MISS_CHAR OR
2731             p_krpv_rec.Days_In_A_Month_Code IS NULL)
2732         THEN
2733           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2734                              'Days In A Month Code');
2735           l_return_status := OKC_API.G_RET_STS_ERROR;
2736           IF (p_stack_messages = 'N') THEN
2737             RAISE violated_ref_integrity;
2738           END IF;
2739         ELSIF (p_krpv_rec.Days_In_A_Month_Code <> OKC_API.G_MISS_CHAR AND
2740                p_krpv_rec.Days_In_A_Month_Code IS NOT NULL) THEN
2741           IF (p_krpv_rec.Days_In_A_Month_Code <> '30') THEN
2742             -- AKP: Todo: Set Proper Message
2743             --(Days In A Month Code is '30' allowed only)
2744             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
2745                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
2746                           ,p_token1       => 'VALUE'
2747                           ,p_token1_value => '30'
2748                           ,p_token2       => 'CODE0'
2749                           ,p_token2_value => 'DAYS_IN_A_MONTH_CODE'
2750                           ,p_token3       => 'CODE1'
2751                           ,p_token3_value => 'REAMORT'
2752                           ,p_token4       => 'CODE2'
2753                           ,p_token4_value => 'STREAMS');
2754             l_return_status := OKC_API.G_RET_STS_ERROR;
2755             IF (p_stack_messages = 'N') THEN
2756               RAISE violated_ref_integrity;
2757             END IF;
2758           END IF;
2759         END IF;
2760 
2761         IF (p_krpv_rec.Days_In_A_Year_Code = OKC_API.G_MISS_CHAR OR
2762             p_krpv_rec.Days_In_A_Year_Code IS NULL)
2763         THEN
2764           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2765                              'Days In A Year Code');
2766           l_return_status := OKC_API.G_RET_STS_ERROR;
2767           IF (p_stack_messages = 'N') THEN
2768             RAISE violated_ref_integrity;
2769           END IF;
2770         ELSIF (p_krpv_rec.Days_In_A_Year_Code <> OKC_API.G_MISS_CHAR AND
2771                p_krpv_rec.Days_In_A_Year_Code IS NOT NULL) THEN
2772           IF (p_krpv_rec.Days_In_A_Year_Code <> '360') THEN
2773             -- AKP: Todo: Set Proper Message
2774             --(Days In A Year Code is '360' allowed only)
2775             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
2776                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
2777                           ,p_token1       => 'VALUE'
2778                           ,p_token1_value => '360'
2779                           ,p_token2       => 'CODE0'
2780                           ,p_token2_value => 'DAYS_IN_A_YEAR_CODE'
2781                           ,p_token3       => 'CODE1'
2782                           ,p_token3_value => 'REAMORT'
2783                           ,p_token4       => 'CODE2'
2784                           ,p_token4_value => 'STREAMS');
2785             l_return_status := OKC_API.G_RET_STS_ERROR;
2786             IF (p_stack_messages = 'N') THEN
2787               RAISE violated_ref_integrity;
2788             END IF;
2789           END IF;
2790         END IF;
2791 
2792         IF (p_krpv_rec.Interest_Basis_Code = OKC_API.G_MISS_CHAR OR
2793             p_krpv_rec.Interest_Basis_Code IS NULL)
2794         THEN
2795           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2796                              'Interest Basis Code');
2797           l_return_status := OKC_API.G_RET_STS_ERROR;
2798           IF (p_stack_messages = 'N') THEN
2799             RAISE violated_ref_integrity;
2800           END IF;
2801         ELSIF (p_krpv_rec.Interest_Basis_Code <> OKC_API.G_MISS_CHAR AND
2802                p_krpv_rec.Interest_Basis_Code IS NOT NULL) THEN
2803           IF (p_krpv_rec.Interest_Basis_Code <> 'SIMPLE') THEN
2804             -- AKP: Todo: Set Proper Message
2805             --(Interest Basis Code is 'SIMPLE' allowed only)
2806             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
2807                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
2808                           ,p_token1       => 'VALUE'
2809                           ,p_token1_value => 'SIMPLE'
2810                           ,p_token2       => 'CODE0'
2811                           ,p_token2_value => 'INTEREST_BASIS_CODE'
2812                           ,p_token3       => 'CODE1'
2813                           ,p_token3_value => 'REAMORT'
2814                           ,p_token4       => 'CODE2'
2815                           ,p_token4_value => 'STREAMS');
2816             l_return_status := OKC_API.G_RET_STS_ERROR;
2817             IF (p_stack_messages = 'N') THEN
2818               RAISE violated_ref_integrity;
2819             END IF;
2820           END IF;
2821         END IF;
2822 
2823         -- Bug 4862551
2824         /*
2825         IF (p_krpv_rec.Rate_Delay_Code = OKC_API.G_MISS_CHAR OR
2826             p_krpv_rec.Rate_Delay_Code IS NULL)
2827         THEN
2828           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2829                              'Rate Delay Code');
2830           l_return_status := OKC_API.G_RET_STS_ERROR;
2831           IF (p_stack_messages = 'N') THEN
2832             RAISE violated_ref_integrity;
2833           END IF;
2834         END IF;
2835 
2836         IF (p_krpv_rec.Rate_Delay_Frequency = OKC_API.G_MISS_NUM OR
2837             p_krpv_rec.Rate_Delay_Frequency IS NULL)
2838         THEN
2839           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2840                              'Rate Delay Frequency');
2841           l_return_status := OKC_API.G_RET_STS_ERROR;
2842           IF (p_stack_messages = 'N') THEN
2843             RAISE violated_ref_integrity;
2844           END IF;
2845         END IF;
2846 
2847         IF (p_krpv_rec.Rate_Change_Start_Date = OKC_API.G_MISS_DATE OR
2848             p_krpv_rec.Rate_Change_Start_Date IS NULL)
2849         THEN
2850           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2851                              'Rate Change Start Date');
2852           l_return_status := OKC_API.G_RET_STS_ERROR;
2853           IF (p_stack_messages = 'N') THEN
2854             RAISE violated_ref_integrity;
2855           END IF;
2856         END IF;
2857         */
2858 
2859         IF (p_krpv_rec.Rate_Change_Frequency_Code = OKC_API.G_MISS_CHAR OR
2860             p_krpv_rec.Rate_Change_Frequency_Code IS NULL)
2861         THEN
2862           -- Bug 4862551
2863           NULL;
2864           /*OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2865                              'Rate Change Frequency Code');
2866           l_return_status := OKC_API.G_RET_STS_ERROR;
2867           IF (p_stack_messages = 'N') THEN
2868             RAISE violated_ref_integrity;
2869           END IF;*/
2870         ELSIF (p_krpv_rec.Rate_Change_Frequency_Code <> OKC_API.G_MISS_CHAR AND
2871                p_krpv_rec.Rate_Change_Frequency_Code IS NOT NULL) THEN
2872           IF (p_krpv_rec.Rate_Change_Frequency_Code <> 'BILLING_DATE') THEN
2873             -- AKP: Todo: Set Proper Message
2874             --(Rate Change Frequency Code is 'BILLING_DATE' allowed only)
2875             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
2876                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
2877                           ,p_token1       => 'VALUE'
2878                           ,p_token1_value => 'BILLING_DATE'
2879                           ,p_token2       => 'CODE0'
2880                           ,p_token2_value => 'RATE_CHANGE_FREQUENCY_CODE'
2881                           ,p_token3       => 'CODE1'
2882                           ,p_token3_value => 'REAMORT'
2883                           ,p_token4       => 'CODE2'
2884                           ,p_token4_value => 'STREAMS');
2885             l_return_status := OKC_API.G_RET_STS_ERROR;
2886             IF (p_stack_messages = 'N') THEN
2887               RAISE violated_ref_integrity;
2888             END IF;
2889           END IF;
2890         END IF;
2891 
2892         -- Bug 4862551
2893         /*
2894         IF (p_krpv_rec.Rate_Change_Value = OKC_API.G_MISS_NUM OR
2895             p_krpv_rec.Rate_Change_Value IS NULL)
2896         THEN
2897           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2898                              'Rate Change Value');
2899           l_return_status := OKC_API.G_RET_STS_ERROR;
2900           IF (p_stack_messages = 'N') THEN
2901             RAISE violated_ref_integrity;
2902           END IF;
2903         END IF;
2904         */
2905 
2906         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2907         IF (p_krpv_rec.Conversion_Option_Code = OKC_API.G_MISS_CHAR OR
2908             p_krpv_rec.Conversion_Option_Code IS NULL)
2909         THEN
2910           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2911                              'Conversion Option Code');
2912           l_return_status := OKC_API.G_RET_STS_ERROR;
2913           IF (p_stack_messages = 'N') THEN
2914             RAISE violated_ref_integrity;
2915           END IF;
2916         END IF;
2917         END IF;*/
2918 
2919         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2920         IF (p_krpv_rec.Next_Conversion_Date = OKC_API.G_MISS_DATE OR
2921             p_krpv_rec.Next_Conversion_Date IS NULL)
2922         THEN
2923           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2924                              'Next Conversion Date');
2925           l_return_status := OKC_API.G_RET_STS_ERROR;
2926           IF (p_stack_messages = 'N') THEN
2927             RAISE violated_ref_integrity;
2928           END IF;
2929         END IF;
2930         END IF;*/
2931 
2932         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
2933         IF (p_krpv_rec.Conversion_Type_Code = OKC_API.G_MISS_CHAR OR
2934             p_krpv_rec.Conversion_Type_Code IS NULL)
2935         THEN
2936           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2937                              'Conversion Type Code');
2938           l_return_status := OKC_API.G_RET_STS_ERROR;
2939           IF (p_stack_messages = 'N') THEN
2940             RAISE violated_ref_integrity;
2941           END IF;
2942         END IF;
2943         END IF;*/
2944 
2945       ELSIF (p_int_calc_basis = 'REAMORT'
2946              AND p_rev_rec_method = 'ACTUAL') THEN
2947         IF (p_krpv_rec.Interest_Index_Id = OKC_API.G_MISS_NUM OR
2948             p_krpv_rec.Interest_Index_Id IS NULL)
2949         THEN
2950           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2951                              'Interest Index Id');
2952           l_return_status := OKC_API.G_RET_STS_ERROR;
2953           IF (p_stack_messages = 'N') THEN
2954             RAISE violated_ref_integrity;
2955           END IF;
2956         END IF;
2957 
2958         -- Bug 4907390
2959         /*IF (p_krpv_rec.Base_Rate = OKC_API.G_MISS_NUM OR
2960             p_krpv_rec.Base_Rate IS NULL)
2961         THEN
2962           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2963                              'Base Rate');
2964           l_return_status := OKC_API.G_RET_STS_ERROR;
2965           IF (p_stack_messages = 'N') THEN
2966             RAISE violated_ref_integrity;
2967           END IF;
2968         END IF;*/
2969 
2970         IF (p_krpv_rec.Interest_Start_Date = OKC_API.G_MISS_DATE OR
2971             p_krpv_rec.Interest_Start_Date IS NULL)
2972         THEN
2973           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2974                              'Interest Start Date');
2975           l_return_status := OKC_API.G_RET_STS_ERROR;
2976           IF (p_stack_messages = 'N') THEN
2977             RAISE violated_ref_integrity;
2978           END IF;
2979         END IF;
2980 
2981         IF (p_krpv_rec.Adder_Rate = OKC_API.G_MISS_NUM OR
2982             p_krpv_rec.Adder_Rate IS NULL)
2983         THEN
2984           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2985                              'Adder Rate');
2986           l_return_status := OKC_API.G_RET_STS_ERROR;
2987           IF (p_stack_messages = 'N') THEN
2988             RAISE violated_ref_integrity;
2989           END IF;
2990         END IF;
2991 
2992         IF (p_krpv_rec.Maximum_Rate = OKC_API.G_MISS_NUM OR
2993             p_krpv_rec.Maximum_Rate IS NULL)
2994         THEN
2995           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
2996                              'Maximum Rate');
2997           l_return_status := OKC_API.G_RET_STS_ERROR;
2998           IF (p_stack_messages = 'N') THEN
2999             RAISE violated_ref_integrity;
3000           END IF;
3001         END IF;
3002 
3003         IF (p_krpv_rec.Minimum_Rate = OKC_API.G_MISS_NUM OR
3004             p_krpv_rec.Minimum_Rate IS NULL)
3005         THEN
3006           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3007                              'Minimum Rate');
3008           l_return_status := OKC_API.G_RET_STS_ERROR;
3009           IF (p_stack_messages = 'N') THEN
3010             RAISE violated_ref_integrity;
3011           END IF;
3012         END IF;
3013 
3014         IF (p_krpv_rec.Principal_Basis_Code = OKC_API.G_MISS_CHAR OR
3015             p_krpv_rec.Principal_Basis_Code IS NULL)
3016         THEN
3017           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3018                              'Principal Basis Code');
3019           l_return_status := OKC_API.G_RET_STS_ERROR;
3020           IF (p_stack_messages = 'N') THEN
3021             RAISE violated_ref_integrity;
3022           END IF;
3023         ELSIF (p_krpv_rec.Principal_Basis_Code <> OKC_API.G_MISS_CHAR AND
3024                p_krpv_rec.Principal_Basis_Code IS NOT NULL) THEN
3025           IF (p_krpv_rec.Principal_Basis_Code <> 'SCHEDULED') THEN -- 4896751
3026           --IF (p_krpv_rec.Principal_Basis_Code <> 'ACTUAL') THEN -- 4753087
3027             -- AKP: Todo: Set Proper Message
3028             --(Principal Basis Code is 'ACTUAL' allowed only) -- 4753087
3029             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
3030                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
3031                           ,p_token1       => 'VALUE'
3032                           --,p_token1_value => 'ACTUAL' -- 4753087
3033                           ,p_token1_value => 'SCHEDULED' -- 4896751
3034                           ,p_token2       => 'CODE0'
3035                           ,p_token2_value => 'PRINCIPAL_BASIS_CODE'
3036                           ,p_token3       => 'CODE1'
3037                           ,p_token3_value => 'REAMORT'
3038                           ,p_token4       => 'CODE2'
3039                           ,p_token4_value => 'ACTUAL');
3040             l_return_status := OKC_API.G_RET_STS_ERROR;
3041             IF (p_stack_messages = 'N') THEN
3042               RAISE violated_ref_integrity;
3043             END IF;
3044           END IF;
3045         END IF;
3046 
3047         IF (p_krpv_rec.Days_In_A_Month_Code = OKC_API.G_MISS_CHAR OR
3048             p_krpv_rec.Days_In_A_Month_Code IS NULL)
3049         THEN
3050           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3051                              'Days In A Month Code');
3052           l_return_status := OKC_API.G_RET_STS_ERROR;
3053           IF (p_stack_messages = 'N') THEN
3054             RAISE violated_ref_integrity;
3055           END IF;
3056         END IF;
3057 
3058         IF (p_krpv_rec.Days_In_A_Year_Code = OKC_API.G_MISS_CHAR OR
3059             p_krpv_rec.Days_In_A_Year_Code IS NULL)
3060         THEN
3061           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3062                              'Days In A Year Code');
3063           l_return_status := OKC_API.G_RET_STS_ERROR;
3064           IF (p_stack_messages = 'N') THEN
3065             RAISE violated_ref_integrity;
3066           END IF;
3067         END IF;
3068 
3069         IF (p_krpv_rec.Interest_Basis_Code = OKC_API.G_MISS_CHAR OR
3070             p_krpv_rec.Interest_Basis_Code IS NULL)
3071         THEN
3072           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3073                              'Interest Basis Code');
3074           l_return_status := OKC_API.G_RET_STS_ERROR;
3075           IF (p_stack_messages = 'N') THEN
3076             RAISE violated_ref_integrity;
3077           END IF;
3078         END IF;
3079 
3080         -- Bug 4862551
3081         /*
3082         IF (p_krpv_rec.Rate_Delay_Code = OKC_API.G_MISS_CHAR OR
3083             p_krpv_rec.Rate_Delay_Code IS NULL)
3084         THEN
3085           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3086                              'Rate Delay Code');
3087           l_return_status := OKC_API.G_RET_STS_ERROR;
3088           IF (p_stack_messages = 'N') THEN
3089             RAISE violated_ref_integrity;
3090           END IF;
3091         END IF;
3092 
3093         IF (p_krpv_rec.Rate_Delay_Frequency = OKC_API.G_MISS_NUM OR
3094             p_krpv_rec.Rate_Delay_Frequency IS NULL)
3095         THEN
3096           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3097                              'Rate Delay Frequency');
3098           l_return_status := OKC_API.G_RET_STS_ERROR;
3099           IF (p_stack_messages = 'N') THEN
3100             RAISE violated_ref_integrity;
3101           END IF;
3102         END IF;
3103         */
3104 
3105         -- Bug 4862416
3106         /*IF (p_krpv_rec.Compounding_Frequency_Code = OKC_API.G_MISS_CHAR OR
3107             p_krpv_rec.Compounding_Frequency_Code IS NULL)
3108         THEN
3109           l_msg1_set := TRUE;
3110           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3111                              'Compounding Frequency Code');
3112           l_return_status := OKC_API.G_RET_STS_ERROR;
3113           IF (p_stack_messages = 'N') THEN
3114             RAISE violated_ref_integrity;
3115           END IF;
3116         END IF;
3117 
3118         IF (p_krpv_rec.Calculation_Formula_Id = OKC_API.G_MISS_NUM OR
3119             p_krpv_rec.Calculation_Formula_Id IS NULL)
3120         THEN
3121           l_msg2_set := TRUE;
3122           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3123                              'Formula Name');
3124           l_return_status := OKC_API.G_RET_STS_ERROR;
3125           IF (p_stack_messages = 'N') THEN
3126             RAISE violated_ref_integrity;
3127           END IF;
3128         END IF;*/
3129 
3130         /*
3131         IF (p_krpv_rec.Rate_Change_Start_Date = OKC_API.G_MISS_DATE OR
3132             p_krpv_rec.Rate_Change_Start_Date IS NULL)
3133         THEN
3134           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3135                              'Rate Change Start Date');
3136           l_return_status := OKC_API.G_RET_STS_ERROR;
3137           IF (p_stack_messages = 'N') THEN
3138             RAISE violated_ref_integrity;
3139           END IF;
3140         END IF;
3141 
3142         IF (p_krpv_rec.Rate_Change_Frequency_Code = OKC_API.G_MISS_CHAR OR
3143             p_krpv_rec.Rate_Change_Frequency_Code IS NULL)
3144         THEN
3145           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3146                              'Rate Change Frequency Code');
3147           l_return_status := OKC_API.G_RET_STS_ERROR;
3148           IF (p_stack_messages = 'N') THEN
3149             RAISE violated_ref_integrity;
3150           END IF;
3151         END IF;
3152 
3153         IF (p_krpv_rec.Rate_Change_Value = OKC_API.G_MISS_NUM OR
3154             p_krpv_rec.Rate_Change_Value IS NULL)
3155         THEN
3156           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3157                              'Rate Change Value');
3158           l_return_status := OKC_API.G_RET_STS_ERROR;
3159           IF (p_stack_messages = 'N') THEN
3160             RAISE violated_ref_integrity;
3161           END IF;
3162         END IF;
3163         */
3164 
3165         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
3166         IF (p_krpv_rec.Conversion_Option_Code = OKC_API.G_MISS_CHAR OR
3167             p_krpv_rec.Conversion_Option_Code IS NULL)
3168         THEN
3169           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3170                              'Conversion Option Code');
3171           l_return_status := OKC_API.G_RET_STS_ERROR;
3172           IF (p_stack_messages = 'N') THEN
3173             RAISE violated_ref_integrity;
3174           END IF;
3175         END IF;
3176         END IF;*/
3177 
3178         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
3179         IF (p_krpv_rec.Next_Conversion_Date = OKC_API.G_MISS_DATE OR
3180             p_krpv_rec.Next_Conversion_Date IS NULL)
3181         THEN
3182           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3183                              'Next Conversion Date');
3184           l_return_status := OKC_API.G_RET_STS_ERROR;
3185           IF (p_stack_messages = 'N') THEN
3186             RAISE violated_ref_integrity;
3187           END IF;
3188         END IF;
3189         END IF;*/
3190 
3191         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
3192         IF (p_krpv_rec.Conversion_Type_Code = OKC_API.G_MISS_CHAR OR
3193             p_krpv_rec.Conversion_Type_Code IS NULL)
3194         THEN
3195           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3196                              'Conversion Type Code');
3197           l_return_status := OKC_API.G_RET_STS_ERROR;
3198           IF (p_stack_messages = 'N') THEN
3199             RAISE violated_ref_integrity;
3200           END IF;
3201         END IF;
3202         END IF;*/
3203 
3204       ELSIF (p_int_calc_basis = 'CATCHUP/CLEANUP'
3205              AND p_rev_rec_method = 'STREAMS') THEN
3206         IF (p_krpv_rec.Interest_Index_Id = OKC_API.G_MISS_NUM OR
3207             p_krpv_rec.Interest_Index_Id IS NULL)
3208         THEN
3209           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3210                              'Interest Index Id');
3211           l_return_status := OKC_API.G_RET_STS_ERROR;
3212           IF (p_stack_messages = 'N') THEN
3213             RAISE violated_ref_integrity;
3214           END IF;
3215         END IF;
3216 
3217         -- Bug 4907390
3218         /*IF (p_krpv_rec.Base_Rate = OKC_API.G_MISS_NUM OR
3219             p_krpv_rec.Base_Rate IS NULL)
3220         THEN
3221           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3222                              'Base Rate');
3223           l_return_status := OKC_API.G_RET_STS_ERROR;
3224           IF (p_stack_messages = 'N') THEN
3225             RAISE violated_ref_integrity;
3226           END IF;
3227         END IF;*/
3228 
3229         IF (p_krpv_rec.Interest_Start_Date = OKC_API.G_MISS_DATE OR
3230             p_krpv_rec.Interest_Start_Date IS NULL)
3231         THEN
3232           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3233                              'Interest Start Date');
3234           l_return_status := OKC_API.G_RET_STS_ERROR;
3235           IF (p_stack_messages = 'N') THEN
3236             RAISE violated_ref_integrity;
3237           END IF;
3238         END IF;
3239 
3240         IF (p_krpv_rec.Adder_Rate = OKC_API.G_MISS_NUM OR
3241             p_krpv_rec.Adder_Rate IS NULL)
3242         THEN
3243           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3244                              'Adder Rate');
3245           l_return_status := OKC_API.G_RET_STS_ERROR;
3246           IF (p_stack_messages = 'N') THEN
3247             RAISE violated_ref_integrity;
3248           END IF;
3249         END IF;
3250 
3251         IF (p_krpv_rec.Maximum_Rate = OKC_API.G_MISS_NUM OR
3252             p_krpv_rec.Maximum_Rate IS NULL)
3253         THEN
3254           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3255                              'Maximum Rate');
3256           l_return_status := OKC_API.G_RET_STS_ERROR;
3257           IF (p_stack_messages = 'N') THEN
3258             RAISE violated_ref_integrity;
3259           END IF;
3260         END IF;
3261 
3262         IF (p_krpv_rec.Minimum_Rate = OKC_API.G_MISS_NUM OR
3263             p_krpv_rec.Minimum_Rate IS NULL)
3264         THEN
3265           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3266                              'Minimum Rate');
3267           l_return_status := OKC_API.G_RET_STS_ERROR;
3268           IF (p_stack_messages = 'N') THEN
3269             RAISE violated_ref_integrity;
3270           END IF;
3271         END IF;
3272 
3273         IF (p_krpv_rec.Principal_Basis_Code = OKC_API.G_MISS_CHAR OR
3274             p_krpv_rec.Principal_Basis_Code IS NULL)
3275         THEN
3276           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3277                              'Principal Basis Code');
3278           l_return_status := OKC_API.G_RET_STS_ERROR;
3279           IF (p_stack_messages = 'N') THEN
3280             RAISE violated_ref_integrity;
3281           END IF;
3282         ELSIF (p_krpv_rec.Principal_Basis_Code <> OKC_API.G_MISS_CHAR AND
3283                p_krpv_rec.Principal_Basis_Code IS NOT NULL) THEN
3284           IF (p_krpv_rec.Principal_Basis_Code <> 'ACTUAL') THEN
3285             -- AKP: Todo: Set Proper Message
3286             --(Principal Basis Code is 'ACTUAL' allowed only)
3287             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
3288                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
3289                           ,p_token1       => 'VALUE'
3290                           ,p_token1_value => 'ACTUAL'
3291                           ,p_token2       => 'CODE0'
3292                           ,p_token2_value => 'PRINCIPAL_BASIS_CODE'
3293                           ,p_token3       => 'CODE1'
3294                           ,p_token3_value => 'CATCHUP/CLEANUP'
3295                           ,p_token4       => 'CODE2'
3296                           ,p_token4_value => 'STREAMS');
3297             l_return_status := OKC_API.G_RET_STS_ERROR;
3298             IF (p_stack_messages = 'N') THEN
3299               RAISE violated_ref_integrity;
3300             END IF;
3301           END IF;
3302         END IF;
3303 
3304         IF (p_krpv_rec.Days_In_A_Month_Code = OKC_API.G_MISS_CHAR OR
3305             p_krpv_rec.Days_In_A_Month_Code IS NULL)
3306         THEN
3307           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3308                              'Days In A Month Code');
3309           l_return_status := OKC_API.G_RET_STS_ERROR;
3310           IF (p_stack_messages = 'N') THEN
3311             RAISE violated_ref_integrity;
3312           END IF;
3313         END IF;
3314 
3315         IF (p_krpv_rec.Days_In_A_Year_Code = OKC_API.G_MISS_CHAR OR
3316             p_krpv_rec.Days_In_A_Year_Code IS NULL)
3317         THEN
3318           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3319                              'Days In A Year Code');
3320           l_return_status := OKC_API.G_RET_STS_ERROR;
3321           IF (p_stack_messages = 'N') THEN
3322             RAISE violated_ref_integrity;
3323           END IF;
3324         END IF;
3325 
3326         IF (p_krpv_rec.Interest_Basis_Code = OKC_API.G_MISS_CHAR OR
3327             p_krpv_rec.Interest_Basis_Code IS NULL)
3328         THEN
3329           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3330                              'Interest Basis Code');
3331           l_return_status := OKC_API.G_RET_STS_ERROR;
3332           IF (p_stack_messages = 'N') THEN
3333             RAISE violated_ref_integrity;
3334           END IF;
3335         END IF;
3336 
3337         -- Bug 4862551
3338         /*
3339         IF (p_krpv_rec.Rate_Delay_Code = OKC_API.G_MISS_CHAR OR
3340             p_krpv_rec.Rate_Delay_Code IS NULL)
3341         THEN
3342           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3343                              'Rate Delay Code');
3344           l_return_status := OKC_API.G_RET_STS_ERROR;
3345           IF (p_stack_messages = 'N') THEN
3346             RAISE violated_ref_integrity;
3347           END IF;
3348         END IF;
3349 
3350         IF (p_krpv_rec.Rate_Delay_Frequency = OKC_API.G_MISS_NUM OR
3351             p_krpv_rec.Rate_Delay_Frequency IS NULL)
3352         THEN
3353           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3354                              'Rate Delay Frequency');
3355           l_return_status := OKC_API.G_RET_STS_ERROR;
3356           IF (p_stack_messages = 'N') THEN
3357             RAISE violated_ref_integrity;
3358           END IF;
3359         END IF;
3360         */
3361 
3362         -- Bug 4862416
3363         /*IF (p_krpv_rec.Compounding_Frequency_Code = OKC_API.G_MISS_CHAR OR
3364             p_krpv_rec.Compounding_Frequency_Code IS NULL)
3365         THEN
3366           l_msg1_set := TRUE;
3367           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3368                              'Compounding Frequency Code');
3369           l_return_status := OKC_API.G_RET_STS_ERROR;
3370           IF (p_stack_messages = 'N') THEN
3371             RAISE violated_ref_integrity;
3372           END IF;
3373         END IF;
3374 
3375         IF (p_krpv_rec.Calculation_Formula_Id = OKC_API.G_MISS_NUM OR
3376             p_krpv_rec.Calculation_Formula_Id IS NULL)
3377         THEN
3378           l_msg2_set := TRUE;
3379           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3380                              'Formula Name');
3381           l_return_status := OKC_API.G_RET_STS_ERROR;
3382           IF (p_stack_messages = 'N') THEN
3383             RAISE violated_ref_integrity;
3384           END IF;
3385         END IF;*/
3386 
3387         IF (p_krpv_rec.Catchup_Basis_Code = OKC_API.G_MISS_CHAR OR
3388             p_krpv_rec.Catchup_Basis_Code IS NULL)
3389         THEN
3390           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3391                              'Catchup Basis Code');
3392           l_return_status := OKC_API.G_RET_STS_ERROR;
3393           IF (p_stack_messages = 'N') THEN
3394             RAISE violated_ref_integrity;
3395           END IF;
3396         ELSIF (p_krpv_rec.Catchup_Basis_Code <> OKC_API.G_MISS_CHAR AND
3397                p_krpv_rec.Catchup_Basis_Code IS NOT NULL) THEN
3398           IF (p_krpv_rec.Catchup_Basis_Code <> 'ACTUAL') THEN
3399             -- AKP: Todo: Set Proper Message
3400             --(Catchup Basis Code is 'ACTUAL' allowed only)
3401             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
3402                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
3403                           ,p_token1       => 'VALUE'
3404                           ,p_token1_value => 'ACTUAL'
3405                           ,p_token2       => 'CODE0'
3406                           ,p_token2_value => 'CATCHUP_BASIS_CODE'
3407                           ,p_token3       => 'CODE1'
3408                           ,p_token3_value => 'CATCHUP/CLEANUP'
3409                           ,p_token4       => 'CODE2'
3410                           ,p_token4_value => 'STREAMS');
3411             l_return_status := OKC_API.G_RET_STS_ERROR;
3412             IF (p_stack_messages = 'N') THEN
3413               RAISE violated_ref_integrity;
3414             END IF;
3415           END IF;
3416         END IF;
3417 
3418         IF (p_krpv_rec.Catchup_Start_Date = OKC_API.G_MISS_DATE OR
3419             p_krpv_rec.Catchup_Start_Date IS NULL)
3420         THEN
3421           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3422                              'Catchup Start Date');
3423           l_return_status := OKC_API.G_RET_STS_ERROR;
3424           IF (p_stack_messages = 'N') THEN
3425             RAISE violated_ref_integrity;
3426           END IF;
3427         END IF;
3428 
3429         IF (p_krpv_rec.Catchup_Settlement_Code = OKC_API.G_MISS_CHAR OR
3430             p_krpv_rec.Catchup_Settlement_Code IS NULL)
3431         THEN
3432           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3433                              'Catchup Settlement Code');
3434           l_return_status := OKC_API.G_RET_STS_ERROR;
3435           IF (p_stack_messages = 'N') THEN
3436             RAISE violated_ref_integrity;
3437           END IF;
3438         END IF;
3439 
3440         -- Bug 4862551
3441         /*
3442         IF (p_krpv_rec.Rate_Change_Start_Date = OKC_API.G_MISS_DATE OR
3443             p_krpv_rec.Rate_Change_Start_Date IS NULL)
3444         THEN
3445           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3446                              'Rate Change Start Date');
3447           l_return_status := OKC_API.G_RET_STS_ERROR;
3448           IF (p_stack_messages = 'N') THEN
3449             RAISE violated_ref_integrity;
3450           END IF;
3451         END IF;
3452 
3453         IF (p_krpv_rec.Rate_Change_Frequency_Code = OKC_API.G_MISS_CHAR OR
3454             p_krpv_rec.Rate_Change_Frequency_Code IS NULL)
3455         THEN
3456           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3457                              'Rate Change Frequency Code');
3458           l_return_status := OKC_API.G_RET_STS_ERROR;
3459           IF (p_stack_messages = 'N') THEN
3460             RAISE violated_ref_integrity;
3461           END IF;
3462         END IF;
3463 
3464         IF (p_krpv_rec.Rate_Change_Value = OKC_API.G_MISS_NUM OR
3465             p_krpv_rec.Rate_Change_Value IS NULL)
3466         THEN
3467           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3468                              'Rate Change Value');
3469           l_return_status := OKC_API.G_RET_STS_ERROR;
3470           IF (p_stack_messages = 'N') THEN
3471             RAISE violated_ref_integrity;
3472           END IF;
3473         END IF;
3474         */
3475 
3476         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
3477         IF (p_krpv_rec.Conversion_Option_Code = OKC_API.G_MISS_CHAR OR
3478             p_krpv_rec.Conversion_Option_Code IS NULL)
3479         THEN
3480           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3481                              'Conversion Option Code');
3482           l_return_status := OKC_API.G_RET_STS_ERROR;
3483           IF (p_stack_messages = 'N') THEN
3484             RAISE violated_ref_integrity;
3485           END IF;
3486         END IF;
3487         END IF;*/
3488 
3489         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
3490         IF (p_krpv_rec.Next_Conversion_Date = OKC_API.G_MISS_DATE OR
3491             p_krpv_rec.Next_Conversion_Date IS NULL)
3492         THEN
3493           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3494                              'Next Conversion Date');
3495           l_return_status := OKC_API.G_RET_STS_ERROR;
3496           IF (p_stack_messages = 'N') THEN
3497             RAISE violated_ref_integrity;
3498           END IF;
3499         END IF;
3500         END IF;*/
3501 
3502         /*IF (p_krpv_rec.parameter_type_code = 'ACTUAL') THEN
3503         IF (p_krpv_rec.Conversion_Type_Code = OKC_API.G_MISS_CHAR OR
3504             p_krpv_rec.Conversion_Type_Code IS NULL)
3505         THEN
3506           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3507                              'Conversion Type Code');
3508           l_return_status := OKC_API.G_RET_STS_ERROR;
3509           IF (p_stack_messages = 'N') THEN
3510             RAISE violated_ref_integrity;
3511           END IF;
3512         END IF;
3513         END IF;*/
3514 
3515       END IF;  /* FIXED and STREAMS */
3516     END IF; /* LOAN */
3517 
3518     IF (p_deal_type IN ('LOAN-REVOLVING')) THEN
3519       IF (p_int_calc_basis IN ('FLOAT') AND
3520           p_rev_rec_method IN ('ESTIMATED_AND_BILLED', 'ACTUAL')) THEN
3521         IF (p_krpv_rec.Interest_Index_Id = OKC_API.G_MISS_NUM OR
3522             p_krpv_rec.Interest_Index_Id IS NULL)
3523         THEN
3524           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3525                              'Interest Index Id');
3526           l_return_status := OKC_API.G_RET_STS_ERROR;
3527           IF (p_stack_messages = 'N') THEN
3528             RAISE violated_ref_integrity;
3529           END IF;
3530         END IF;
3531 
3532         -- Bug 4907390
3533         /*IF (p_krpv_rec.Base_Rate = OKC_API.G_MISS_NUM OR
3534             p_krpv_rec.Base_Rate IS NULL)
3535         THEN
3536           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3537                              'Base Rate');
3538           l_return_status := OKC_API.G_RET_STS_ERROR;
3539           IF (p_stack_messages = 'N') THEN
3540             RAISE violated_ref_integrity;
3541           END IF;
3542         END IF;*/
3543 
3544         IF (p_krpv_rec.Interest_Start_Date = OKC_API.G_MISS_DATE OR
3545             p_krpv_rec.Interest_Start_Date IS NULL)
3546         THEN
3547           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3548                              'Interest Start Date');
3549           l_return_status := OKC_API.G_RET_STS_ERROR;
3550           IF (p_stack_messages = 'N') THEN
3551             RAISE violated_ref_integrity;
3552           END IF;
3553         END IF;
3554 
3555         IF (p_krpv_rec.Adder_Rate = OKC_API.G_MISS_NUM OR
3556             p_krpv_rec.Adder_Rate IS NULL)
3557         THEN
3558           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3559                              'Adder Rate');
3560           l_return_status := OKC_API.G_RET_STS_ERROR;
3561           IF (p_stack_messages = 'N') THEN
3562             RAISE violated_ref_integrity;
3563           END IF;
3564         END IF;
3565 
3566         IF (p_krpv_rec.Maximum_Rate = OKC_API.G_MISS_NUM OR
3567             p_krpv_rec.Maximum_Rate IS NULL)
3568         THEN
3569           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3570                              'Maximum Rate');
3571           l_return_status := OKC_API.G_RET_STS_ERROR;
3572           IF (p_stack_messages = 'N') THEN
3573             RAISE violated_ref_integrity;
3574           END IF;
3575         END IF;
3576 
3577         IF (p_krpv_rec.Minimum_Rate = OKC_API.G_MISS_NUM OR
3578             p_krpv_rec.Minimum_Rate IS NULL)
3579         THEN
3580           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3581                              'Minimum Rate');
3582           l_return_status := OKC_API.G_RET_STS_ERROR;
3583           IF (p_stack_messages = 'N') THEN
3584             RAISE violated_ref_integrity;
3585           END IF;
3586         END IF;
3587 
3588         IF (p_krpv_rec.Principal_Basis_Code = OKC_API.G_MISS_CHAR OR
3589             p_krpv_rec.Principal_Basis_Code IS NULL)
3590         THEN
3591           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3592                              'Principal Basis Code');
3593           l_return_status := OKC_API.G_RET_STS_ERROR;
3594           IF (p_stack_messages = 'N') THEN
3595             RAISE violated_ref_integrity;
3596           END IF;
3597         ELSIF (p_krpv_rec.Principal_Basis_Code <> OKC_API.G_MISS_CHAR AND
3598                p_krpv_rec.Principal_Basis_Code IS NOT NULL) THEN
3599           IF (p_krpv_rec.Principal_Basis_Code <> 'ACTUAL') THEN
3600             -- AKP: Todo: Set Proper Message
3601             --(Principal Basis Code is 'ACTUAL' allowed only)
3602             OKL_API.SET_MESSAGE( p_app_name     => OKL_API.G_APP_NAME
3603                           ,p_msg_name     => 'OKL_LA_APPLICABLE_VALUES'
3604                           ,p_token1       => 'VALUE'
3605                           ,p_token1_value => 'ACTUAL'
3606                           ,p_token2       => 'CODE0'
3607                           ,p_token2_value => 'PRINCIPAL_BASIS_CODE'
3608                           ,p_token3       => 'CODE1'
3609                           ,p_token3_value => 'LOAN-REVOLVING'
3610                           ,p_token4       => 'CODE2'
3611                           ,p_token4_value => 'FLOAT');
3612             l_return_status := OKC_API.G_RET_STS_ERROR;
3613             IF (p_stack_messages = 'N') THEN
3614               RAISE violated_ref_integrity;
3615             END IF;
3616           END IF;
3617         END IF;
3618 
3619         IF (p_krpv_rec.Days_In_A_Month_Code = OKC_API.G_MISS_CHAR OR
3620             p_krpv_rec.Days_In_A_Month_Code IS NULL)
3621         THEN
3622           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3623                              'Days In A Month Code');
3624           l_return_status := OKC_API.G_RET_STS_ERROR;
3625           IF (p_stack_messages = 'N') THEN
3626             RAISE violated_ref_integrity;
3627           END IF;
3628         END IF;
3629 
3630         IF (p_krpv_rec.Days_In_A_Year_Code = OKC_API.G_MISS_CHAR OR
3631             p_krpv_rec.Days_In_A_Year_Code IS NULL)
3632         THEN
3633           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3634                              'Days In A Year Code');
3635           l_return_status := OKC_API.G_RET_STS_ERROR;
3636           IF (p_stack_messages = 'N') THEN
3637             RAISE violated_ref_integrity;
3638           END IF;
3639         END IF;
3640 
3641         IF (p_krpv_rec.Interest_Basis_Code = OKC_API.G_MISS_CHAR OR
3642             p_krpv_rec.Interest_Basis_Code IS NULL)
3643         THEN
3644           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3645                              'Interest Basis Code');
3646           l_return_status := OKC_API.G_RET_STS_ERROR;
3647           IF (p_stack_messages = 'N') THEN
3648             RAISE violated_ref_integrity;
3649           END IF;
3650         END IF;
3651 
3652         -- Bug 4862551
3653         /*
3654         IF (p_krpv_rec.Rate_Delay_Code = OKC_API.G_MISS_CHAR OR
3655             p_krpv_rec.Rate_Delay_Code IS NULL)
3656         THEN
3657           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3658                              'Rate Delay Code');
3659           l_return_status := OKC_API.G_RET_STS_ERROR;
3660           IF (p_stack_messages = 'N') THEN
3661             RAISE violated_ref_integrity;
3662           END IF;
3663         END IF;
3664 
3665         IF (p_krpv_rec.Rate_Delay_Frequency = OKC_API.G_MISS_NUM OR
3666             p_krpv_rec.Rate_Delay_Frequency IS NULL)
3667         THEN
3668           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3669                              'Rate Delay Frequency');
3670           l_return_status := OKC_API.G_RET_STS_ERROR;
3671           IF (p_stack_messages = 'N') THEN
3672             RAISE violated_ref_integrity;
3673           END IF;
3674         END IF;
3675         */
3676 
3677         -- Bug 4862416
3678         /*IF (p_krpv_rec.Compounding_Frequency_Code = OKC_API.G_MISS_CHAR OR
3679             p_krpv_rec.Compounding_Frequency_Code IS NULL)
3680         THEN
3681           l_msg1_set := TRUE;
3682           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3683                              'Compounding Frequency Code');
3684           l_return_status := OKC_API.G_RET_STS_ERROR;
3685           IF (p_stack_messages = 'N') THEN
3686             RAISE violated_ref_integrity;
3687           END IF;
3688         END IF;
3689 
3690         IF (p_krpv_rec.Calculation_Formula_Id = OKC_API.G_MISS_NUM OR
3691             p_krpv_rec.Calculation_Formula_Id IS NULL)
3692         THEN
3693           l_msg2_set := TRUE;
3694           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3695                              'Formula Name');
3696           l_return_status := OKC_API.G_RET_STS_ERROR;
3697           IF (p_stack_messages = 'N') THEN
3698             RAISE violated_ref_integrity;
3699           END IF;
3700         END IF;*/
3701 
3702         -- Bug 4862551
3703         /*
3704         IF (p_krpv_rec.Rate_Change_Start_Date = OKC_API.G_MISS_DATE OR
3705             p_krpv_rec.Rate_Change_Start_Date IS NULL)
3706         THEN
3707           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3708                              'Rate Change Start Date');
3709           l_return_status := OKC_API.G_RET_STS_ERROR;
3710           IF (p_stack_messages = 'N') THEN
3711             RAISE violated_ref_integrity;
3712           END IF;
3713         END IF;
3714 
3715         IF (p_krpv_rec.Rate_Change_Frequency_Code = OKC_API.G_MISS_CHAR OR
3716             p_krpv_rec.Rate_Change_Frequency_Code IS NULL)
3717         THEN
3718           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3719                              'Rate Change Frequency Code');
3720           l_return_status := OKC_API.G_RET_STS_ERROR;
3721           IF (p_stack_messages = 'N') THEN
3722             RAISE violated_ref_integrity;
3723           END IF;
3724         END IF;
3725 
3726         IF (p_krpv_rec.Rate_Change_Value = OKC_API.G_MISS_NUM OR
3727             p_krpv_rec.Rate_Change_Value IS NULL)
3728         THEN
3729           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3730                              'Rate Change Value');
3731           l_return_status := OKC_API.G_RET_STS_ERROR;
3732           IF (p_stack_messages = 'N') THEN
3733             RAISE violated_ref_integrity;
3734           END IF;
3735         END IF;
3736         */
3737 
3738         /*IF (p_krpv_rec.Conversion_Option_Code = OKC_API.G_MISS_CHAR OR
3739             p_krpv_rec.Conversion_Option_Code IS NULL)
3740         THEN
3741           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3742                              'Conversion Option Code');
3743           l_return_status := OKC_API.G_RET_STS_ERROR;
3744           IF (p_stack_messages = 'N') THEN
3745             RAISE violated_ref_integrity;
3746           END IF;
3747         END IF;*/
3748 
3749         /*IF (p_krpv_rec.Next_Conversion_Date = OKC_API.G_MISS_DATE OR
3750             p_krpv_rec.Next_Conversion_Date IS NULL)
3751         THEN
3752           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3753                              'Next Conversion Date');
3754           l_return_status := OKC_API.G_RET_STS_ERROR;
3755           IF (p_stack_messages = 'N') THEN
3756             RAISE violated_ref_integrity;
3757           END IF;
3758         END IF;*/
3759 
3760         /*IF (p_krpv_rec.Conversion_Type_Code = OKC_API.G_MISS_CHAR OR
3761             p_krpv_rec.Conversion_Type_Code IS NULL)
3762         THEN
3763           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3764                              'Conversion Type Code');
3765           l_return_status := OKC_API.G_RET_STS_ERROR;
3766           IF (p_stack_messages = 'N') THEN
3767             RAISE violated_ref_integrity;
3768           END IF;
3769         END IF;*/
3770 
3771       END IF;
3772     END IF;
3773 
3774     -- Bug 4862416: For interest basis code 'COMPOUND', formula is required
3775     -- and compounding_frqeuency_code is required.
3776     IF (p_krpv_rec.Interest_Basis_Code IS NOT NULL AND
3777         p_krpv_rec.Interest_Basis_Code <> OKC_API.G_MISS_CHAR) THEN
3778 
3779       IF (p_krpv_rec.Interest_Basis_Code = 'COMPOUND') THEN
3780 
3781         IF NOT(l_msg1_set) THEN
3782         IF (p_krpv_rec.Compounding_Frequency_Code = OKC_API.G_MISS_CHAR OR
3783             p_krpv_rec.Compounding_Frequency_Code IS NULL)
3784         THEN
3785           l_msg1_set := TRUE;
3786           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3787                              'Compounding Frequency Code');
3788           l_return_status := OKC_API.G_RET_STS_ERROR;
3789           IF (p_stack_messages = 'N') THEN
3790             RAISE violated_ref_integrity;
3791           END IF;
3792         END IF;
3793         END IF;
3794 
3795         IF NOT(l_msg2_set) THEN
3796         IF (p_krpv_rec.Calculation_Formula_Id = OKC_API.G_MISS_NUM OR
3797             p_krpv_rec.Calculation_Formula_Id IS NULL)
3798         THEN
3799           l_msg2_set := TRUE;
3800           OKC_API.set_message(OKL_API.G_APP_NAME, G_REQUIRED_VALUE, G_COL_NAME_TOKEN,
3801                              'Formula Name');
3802           l_return_status := OKC_API.G_RET_STS_ERROR;
3803           IF (p_stack_messages = 'N') THEN
3804             RAISE violated_ref_integrity;
3805           END IF;
3806         END IF;
3807         END IF;
3808 
3809       END IF;
3810 
3811     END IF;
3812 
3813     IF (l_return_status <> OKL_API.G_RET_STS_SUCCESS) AND
3814        (p_stack_messages = 'N') THEN
3815       RAISE violated_ref_integrity;
3816     END IF;
3817 
3818     /* AKP: Todo: IF Payments are in 'Advance' the rate delay should be more
3819        than print lead days. Done in OKLRKRPB.pls */
3820 
3821     RETURN (l_return_status);
3822 
3823     EXCEPTION
3824       WHEN violated_ref_integrity THEN
3825         l_return_status := OKL_API.G_RET_STS_ERROR;
3826         RETURN (l_return_status);
3827   END Validate_Record;
3828 
3829   ---------------------------------------------------------------------------
3830   -- PROCEDURE Migrate
3831   ---------------------------------------------------------------------------
3832   PROCEDURE migrate (
3833     p_from IN krpv_rec_type,
3834     p_to   IN OUT NOCOPY krp_rec_type
3835   ) IS
3836   BEGIN
3837     p_to.khr_id := p_from.khr_id;
3838     p_to.parameter_type_code := p_from.parameter_type_code;
3839     p_to.effective_from_date := p_from.effective_from_date;
3840     p_to.effective_to_date := p_from.effective_to_date;
3841     p_to.interest_index_id := p_from.interest_index_id;
3842     p_to.base_rate := p_from.base_rate;
3843     p_to.interest_start_date := p_from.interest_start_date;
3844     p_to.adder_rate := p_from.adder_rate;
3845     p_to.maximum_rate := p_from.maximum_rate;
3846     p_to.minimum_rate := p_from.minimum_rate;
3847     p_to.principal_basis_code := p_from.principal_basis_code;
3848     p_to.days_in_a_month_code := p_from.days_in_a_month_code;
3849     p_to.days_in_a_year_code := p_from.days_in_a_year_code;
3850     p_to.interest_basis_code := p_from.interest_basis_code;
3851     p_to.rate_delay_code := p_from.rate_delay_code;
3852     p_to.rate_delay_frequency := p_from.rate_delay_frequency;
3853     p_to.compounding_frequency_code := p_from.compounding_frequency_code;
3854     p_to.calculation_formula_id := p_from.calculation_formula_id;
3855     p_to.catchup_basis_code := p_from.catchup_basis_code;
3856     p_to.catchup_start_date := p_from.catchup_start_date;
3857     p_to.catchup_settlement_code := p_from.catchup_settlement_code;
3858     p_to.rate_change_start_date := p_from.rate_change_start_date;
3859     p_to.rate_change_frequency_code := p_from.rate_change_frequency_code;
3860     p_to.rate_change_value := p_from.rate_change_value;
3861     p_to.conversion_option_code := p_from.conversion_option_code;
3862     p_to.next_conversion_date := p_from.next_conversion_date;
3863     p_to.conversion_type_code := p_from.conversion_type_code;
3864     p_to.attribute_category := p_from.attribute_category;
3865     p_to.attribute1 := p_from.attribute1;
3866     p_to.attribute2 := p_from.attribute2;
3867     p_to.attribute3 := p_from.attribute3;
3868     p_to.attribute4 := p_from.attribute4;
3869     p_to.attribute5 := p_from.attribute5;
3870     p_to.attribute6 := p_from.attribute6;
3871     p_to.attribute7 := p_from.attribute7;
3872     p_to.attribute8 := p_from.attribute8;
3873     p_to.attribute9 := p_from.attribute9;
3874     p_to.attribute10 := p_from.attribute10;
3875     p_to.attribute11 := p_from.attribute11;
3876     p_to.attribute12 := p_from.attribute12;
3877     p_to.attribute13 := p_from.attribute13;
3878     p_to.attribute14 := p_from.attribute14;
3879     p_to.attribute15 := p_from.attribute15;
3880     p_to.created_by := p_from.created_by;
3881     p_to.creation_date := p_from.creation_date;
3882     p_to.last_updated_by := p_from.last_updated_by;
3883     p_to.last_update_date := p_from.last_update_date;
3884     p_to.last_update_login := p_from.last_update_login;
3885     p_to.catchup_frequency_code := p_from.catchup_frequency_code;
3886   END migrate;
3887   PROCEDURE migrate (
3888     p_from IN krp_rec_type,
3889     p_to   IN OUT NOCOPY krpv_rec_type
3890   ) IS
3891   BEGIN
3892     p_to.khr_id := p_from.khr_id;
3893     p_to.parameter_type_code := p_from.parameter_type_code;
3894     p_to.effective_from_date := p_from.effective_from_date;
3895     p_to.effective_to_date := p_from.effective_to_date;
3896     p_to.interest_index_id := p_from.interest_index_id;
3897     p_to.base_rate := p_from.base_rate;
3898     p_to.interest_start_date := p_from.interest_start_date;
3899     p_to.adder_rate := p_from.adder_rate;
3900     p_to.maximum_rate := p_from.maximum_rate;
3901     p_to.minimum_rate := p_from.minimum_rate;
3902     p_to.principal_basis_code := p_from.principal_basis_code;
3903     p_to.days_in_a_month_code := p_from.days_in_a_month_code;
3904     p_to.days_in_a_year_code := p_from.days_in_a_year_code;
3905     p_to.interest_basis_code := p_from.interest_basis_code;
3906     p_to.rate_delay_code := p_from.rate_delay_code;
3907     p_to.rate_delay_frequency := p_from.rate_delay_frequency;
3908     p_to.compounding_frequency_code := p_from.compounding_frequency_code;
3909     p_to.calculation_formula_id := p_from.calculation_formula_id;
3910     p_to.catchup_basis_code := p_from.catchup_basis_code;
3911     p_to.catchup_start_date := p_from.catchup_start_date;
3912     p_to.catchup_settlement_code := p_from.catchup_settlement_code;
3913     p_to.rate_change_start_date := p_from.rate_change_start_date;
3914     p_to.rate_change_frequency_code := p_from.rate_change_frequency_code;
3915     p_to.rate_change_value := p_from.rate_change_value;
3916     p_to.conversion_option_code := p_from.conversion_option_code;
3917     p_to.next_conversion_date := p_from.next_conversion_date;
3918     p_to.conversion_type_code := p_from.conversion_type_code;
3919     p_to.attribute_category := p_from.attribute_category;
3920     p_to.attribute1 := p_from.attribute1;
3921     p_to.attribute2 := p_from.attribute2;
3922     p_to.attribute3 := p_from.attribute3;
3923     p_to.attribute4 := p_from.attribute4;
3924     p_to.attribute5 := p_from.attribute5;
3925     p_to.attribute6 := p_from.attribute6;
3926     p_to.attribute7 := p_from.attribute7;
3927     p_to.attribute8 := p_from.attribute8;
3928     p_to.attribute9 := p_from.attribute9;
3929     p_to.attribute10 := p_from.attribute10;
3930     p_to.attribute11 := p_from.attribute11;
3931     p_to.attribute12 := p_from.attribute12;
3932     p_to.attribute13 := p_from.attribute13;
3933     p_to.attribute14 := p_from.attribute14;
3934     p_to.attribute15 := p_from.attribute15;
3935     p_to.created_by := p_from.created_by;
3936     p_to.creation_date := p_from.creation_date;
3937     p_to.last_updated_by := p_from.last_updated_by;
3938     p_to.last_update_date := p_from.last_update_date;
3939     p_to.last_update_login := p_from.last_update_login;
3940     p_to.catchup_frequency_code := p_from.catchup_frequency_code;
3941   END migrate;
3942   ---------------------------------------------------------------------------
3943   -- PROCEDURE validate_row
3944   ---------------------------------------------------------------------------
3945   ------------------------------------------
3946   -- validate_row for:OKL_K_RATE_PARAMS_V --
3947   ------------------------------------------
3948   PROCEDURE validate_row(
3949     p_api_version                  IN NUMBER,
3950     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
3951     x_return_status                OUT NOCOPY VARCHAR2,
3952     x_msg_count                    OUT NOCOPY NUMBER,
3953     x_msg_data                     OUT NOCOPY VARCHAR2,
3954     p_krpv_rec                     IN krpv_rec_type) IS
3955 
3956     l_api_version                  CONSTANT NUMBER := 1;
3957     l_api_name                     CONSTANT VARCHAR2(30) := 'V_validate_row';
3958     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
3959     l_krpv_rec                     krpv_rec_type := p_krpv_rec;
3960     l_krp_rec                      krp_rec_type;
3961     l_krp_rec                      krp_rec_type;
3962   BEGIN
3963     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
3964                                               G_PKG_NAME,
3965                                               p_init_msg_list,
3966                                               l_api_version,
3967                                               p_api_version,
3968                                               '_PVT',
3969                                               x_return_status);
3970     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
3971       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
3972     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
3973       RAISE OKC_API.G_EXCEPTION_ERROR;
3974     END IF;
3975     --- Validate all non-missing attributes (Item Level Validation)
3976     l_return_status := Validate_Attributes(l_krpv_rec);
3977     --- If any errors happen abort API
3978     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
3979       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
3980     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
3981       RAISE OKC_API.G_EXCEPTION_ERROR;
3982     END IF;
3983     l_return_status := Validate_Record(l_krpv_rec);
3984     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
3985       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
3986     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
3987       RAISE OKC_API.G_EXCEPTION_ERROR;
3988     END IF;
3989     x_return_status := l_return_status;
3990   EXCEPTION
3991     WHEN OKC_API.G_EXCEPTION_ERROR THEN
3992       x_return_status := OKC_API.HANDLE_EXCEPTIONS
3993       (
3994         l_api_name,
3995         G_PKG_NAME,
3996         'OKC_API.G_RET_STS_ERROR',
3997         x_msg_count,
3998         x_msg_data,
3999         '_PVT'
4000       );
4001     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4002       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4003       (
4004         l_api_name,
4005         G_PKG_NAME,
4006         'OKC_API.G_RET_STS_UNEXP_ERROR',
4007         x_msg_count,
4008         x_msg_data,
4009         '_PVT'
4010       );
4011     WHEN OTHERS THEN
4012       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4013       (
4014         l_api_name,
4015         G_PKG_NAME,
4016         'OTHERS',
4017         x_msg_count,
4018         x_msg_data,
4019         '_PVT'
4020       );
4021   END validate_row;
4022   -----------------------------------------------------
4023   -- PL/SQL TBL validate_row for:OKL_K_RATE_PARAMS_V --
4024   -----------------------------------------------------
4025   PROCEDURE validate_row(
4026     p_api_version                  IN NUMBER,
4027     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
4028     x_return_status                OUT NOCOPY VARCHAR2,
4029     x_msg_count                    OUT NOCOPY NUMBER,
4030     x_msg_data                     OUT NOCOPY VARCHAR2,
4031     p_krpv_tbl                     IN krpv_tbl_type,
4032     px_error_tbl                   IN OUT NOCOPY OKC_API.ERROR_TBL_TYPE) IS
4033 
4034     l_api_version                  CONSTANT NUMBER := 1;
4035     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_validate_row';
4036     i                              NUMBER := 0;
4037   BEGIN
4038     OKC_API.init_msg_list(p_init_msg_list);
4039     -- Make sure PL/SQL table has records in it before passing
4040     IF (p_krpv_tbl.COUNT > 0) THEN
4041       i := p_krpv_tbl.FIRST;
4042       LOOP
4043         DECLARE
4044           l_error_rec         OKC_API.ERROR_REC_TYPE;
4045         BEGIN
4046           l_error_rec.api_name := l_api_name;
4047           l_error_rec.api_package := G_PKG_NAME;
4048           l_error_rec.idx := i;
4049           validate_row (
4050             p_api_version                  => p_api_version,
4051             p_init_msg_list                => OKC_API.G_FALSE,
4052             x_return_status                => l_error_rec.error_type,
4053             x_msg_count                    => l_error_rec.msg_count,
4054             x_msg_data                     => l_error_rec.msg_data,
4055             p_krpv_rec                     => p_krpv_tbl(i));
4056           IF (l_error_rec.error_type <> OKC_API.G_RET_STS_SUCCESS) THEN
4057             l_error_rec.sqlcode := SQLCODE;
4058             load_error_tbl(l_error_rec, px_error_tbl);
4059           ELSE
4060             x_msg_count := l_error_rec.msg_count;
4061             x_msg_data := l_error_rec.msg_data;
4062           END IF;
4063         EXCEPTION
4064           WHEN OKC_API.G_EXCEPTION_ERROR THEN
4065             l_error_rec.error_type := OKC_API.G_RET_STS_ERROR;
4066             l_error_rec.sqlcode := SQLCODE;
4067             load_error_tbl(l_error_rec, px_error_tbl);
4068           WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4069             l_error_rec.error_type := OKC_API.G_RET_STS_UNEXP_ERROR;
4070             l_error_rec.sqlcode := SQLCODE;
4071             load_error_tbl(l_error_rec, px_error_tbl);
4072           WHEN OTHERS THEN
4073             l_error_rec.error_type := 'OTHERS';
4074             l_error_rec.sqlcode := SQLCODE;
4075             load_error_tbl(l_error_rec, px_error_tbl);
4076         END;
4077         EXIT WHEN (i = p_krpv_tbl.LAST);
4078         i := p_krpv_tbl.NEXT(i);
4079       END LOOP;
4080     END IF;
4081     -- Loop through the error_tbl to find the error with the highest severity
4082     -- and return it.
4083     x_return_status := find_highest_exception(px_error_tbl);
4084     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
4085   EXCEPTION
4086     WHEN OKC_API.G_EXCEPTION_ERROR THEN
4087       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4088       (
4089         l_api_name,
4090         G_PKG_NAME,
4091         'OKC_API.G_RET_STS_ERROR',
4092         x_msg_count,
4093         x_msg_data,
4094         '_PVT'
4095       );
4096     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4097       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4098       (
4099         l_api_name,
4100         G_PKG_NAME,
4101         'OKC_API.G_RET_STS_UNEXP_ERROR',
4102         x_msg_count,
4103         x_msg_data,
4104         '_PVT'
4105       );
4106     WHEN OTHERS THEN
4107       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4108       (
4109         l_api_name,
4110         G_PKG_NAME,
4111         'OTHERS',
4112         x_msg_count,
4113         x_msg_data,
4114         '_PVT'
4115       );
4116   END validate_row;
4117 
4118   -----------------------------------------------------
4119   -- PL/SQL TBL validate_row for:OKL_K_RATE_PARAMS_V --
4120   -----------------------------------------------------
4121   PROCEDURE validate_row(
4122     p_api_version                  IN NUMBER,
4123     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
4124     x_return_status                OUT NOCOPY VARCHAR2,
4125     x_msg_count                    OUT NOCOPY NUMBER,
4126     x_msg_data                     OUT NOCOPY VARCHAR2,
4127     p_krpv_tbl                     IN krpv_tbl_type) IS
4128 
4129     l_api_version                  CONSTANT NUMBER := 1;
4130     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_validate_row';
4131     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
4132     l_error_tbl                    OKC_API.ERROR_TBL_TYPE;
4133   BEGIN
4134     OKC_API.init_msg_list(p_init_msg_list);
4135     -- Make sure PL/SQL table has records in it before passing
4136     IF (p_krpv_tbl.COUNT > 0) THEN
4137       validate_row (
4138         p_api_version                  => p_api_version,
4139         p_init_msg_list                => OKC_API.G_FALSE,
4140         x_return_status                => x_return_status,
4141         x_msg_count                    => x_msg_count,
4142         x_msg_data                     => x_msg_data,
4143         p_krpv_tbl                     => p_krpv_tbl,
4144         px_error_tbl                   => l_error_tbl);
4145     END IF;
4146     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
4147   EXCEPTION
4148     WHEN OKC_API.G_EXCEPTION_ERROR THEN
4149       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4150       (
4151         l_api_name,
4152         G_PKG_NAME,
4153         'OKC_API.G_RET_STS_ERROR',
4154         x_msg_count,
4155         x_msg_data,
4156         '_PVT'
4157       );
4158     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4159       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4160       (
4161         l_api_name,
4162         G_PKG_NAME,
4163         'OKC_API.G_RET_STS_UNEXP_ERROR',
4164         x_msg_count,
4165         x_msg_data,
4166         '_PVT'
4167       );
4168     WHEN OTHERS THEN
4169       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4170       (
4171         l_api_name,
4172         G_PKG_NAME,
4173         'OTHERS',
4174         x_msg_count,
4175         x_msg_data,
4176         '_PVT'
4177       );
4178   END validate_row;
4179 
4180 /* Custom validation routine, overloaded */
4181   PROCEDURE validate_row(
4182     p_api_version                  IN NUMBER,
4183     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
4184     x_return_status                OUT NOCOPY VARCHAR2,
4185     x_msg_count                    OUT NOCOPY NUMBER,
4186     x_msg_data                     OUT NOCOPY VARCHAR2,
4187     p_deal_type                    IN  VARCHAR2,
4188     p_rev_rec_method               IN  VARCHAR2,
4189     p_int_calc_basis               IN  VARCHAR2,
4190     p_krpv_tbl                     IN krpv_tbl_type,
4191     p_stack_messages               IN VARCHAR2 DEFAULT 'N',
4192     p_validate_flag                IN VARCHAR2 DEFAULT 'Y') IS
4193 
4194     l_api_version                  CONSTANT NUMBER := 1;
4195     l_api_name                     CONSTANT VARCHAR2(30) := 'V_validate_row';
4196     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
4197     --l_krpv_rec                     krpv_rec_type := p_krpv_rec;
4198     l_krpv_rec                     krpv_rec_type;
4199     l_krp_rec                      krp_rec_type;
4200     l_krp_rec                      krp_rec_type;
4201 
4202     i NUMBER;
4203   BEGIN
4204     IF (G_DEBUG_ENABLED = 'Y') THEN
4205       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
4206     END IF;
4207     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
4208                                                   G_PKG_NAME,
4209                                                   p_init_msg_list,
4210                                                   l_api_version,
4211                                                   p_api_version,
4212                                                   '_PVT',
4213                                                   x_return_status);
4214     IF (p_stack_messages = 'N') THEN
4215       IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4216         RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4217       ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
4218         RAISE OKC_API.G_EXCEPTION_ERROR;
4219       END IF;
4220     END IF;
4221     IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4222           OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'In validate_row... p_krpv_tbl.count=' || p_krpv_tbl.count);
4223     END IF;
4224     IF (p_krpv_tbl.COUNT > 0) THEN
4225       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4226               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Inside ...');
4227       END IF;
4228       i := p_krpv_tbl.FIRST;
4229       LOOP
4230         l_krpv_rec := p_krpv_tbl(i);
4231 
4232         --- Validate all non-missing attributes (Item Level Validation)
4233         l_return_status := Validate_Attributes(l_krpv_rec, p_stack_messages);
4234         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4235                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_attributes...l_return_status='||l_return_status);
4236         END IF;
4237         IF (p_stack_messages = 'N') THEN
4238           --- If any errors happen abort API
4239           IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4240             RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4241           ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
4242             RAISE OKC_API.G_EXCEPTION_ERROR;
4243           END IF;
4244         END IF;
4245         IF (nvl(p_validate_flag, 'Y') = 'F') THEN
4246         IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4247                   OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'Calling validate_record...');
4248         END IF;
4249           l_return_status := Validate_Record(l_krpv_rec,
4250                                              p_stack_messages,
4251                                              p_deal_type,
4252                                              p_rev_rec_method,
4253                                              p_int_calc_basis);
4254           IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
4255                       OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'After validate_record l_return_status=' || l_return_status);
4256           END IF;
4257           IF (p_stack_messages = 'N') THEN
4258             IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4259               RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4260             ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
4261               RAISE OKC_API.G_EXCEPTION_ERROR;
4262             END IF;
4263           END IF;
4264         END IF;
4265         x_return_status := l_return_status;
4266         EXIT WHEN ( i = p_krpv_tbl.LAST);
4267         i := p_krpv_tbl.NEXT(i);
4268       END LOOP;
4269     END IF;
4270     x_return_status := l_return_status;
4271     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
4272   EXCEPTION
4273     WHEN OKC_API.G_EXCEPTION_ERROR THEN
4274       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4275       (
4276         l_api_name,
4277         G_PKG_NAME,
4278         'OKC_API.G_RET_STS_ERROR',
4279         x_msg_count,
4280         x_msg_data,
4281         '_PVT'
4282       );
4283     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4284       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4285       (
4286         l_api_name,
4287         G_PKG_NAME,
4288         'OKC_API.G_RET_STS_UNEXP_ERROR',
4289         x_msg_count,
4290         x_msg_data,
4291         '_PVT'
4292       );
4293     WHEN OTHERS THEN
4294       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4295       (
4296         l_api_name,
4297         G_PKG_NAME,
4298         'OTHERS',
4299         x_msg_count,
4300         x_msg_data,
4301         '_PVT'
4302       );
4303   END validate_row;
4304 
4305   ---------------------------------------------------------------------------
4306   -- PROCEDURE insert_row
4307   ---------------------------------------------------------------------------
4308   --------------------------------------
4309   -- insert_row for:OKL_K_RATE_PARAMS --
4310   --------------------------------------
4311   PROCEDURE insert_row(
4312     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
4313     x_return_status                OUT NOCOPY VARCHAR2,
4314     x_msg_count                    OUT NOCOPY NUMBER,
4315     x_msg_data                     OUT NOCOPY VARCHAR2,
4316     p_krp_rec                      IN krp_rec_type,
4317     x_krp_rec                      OUT NOCOPY krp_rec_type) IS
4318 
4319     l_api_version                  CONSTANT NUMBER := 1;
4320     l_api_name                     CONSTANT VARCHAR2(30) := 'B_insert_row';
4321     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
4322     l_krp_rec                      krp_rec_type := p_krp_rec;
4323     l_def_krp_rec                  krp_rec_type;
4324     ------------------------------------------
4325     -- Set_Attributes for:OKL_K_RATE_PARAMS --
4326     ------------------------------------------
4327     FUNCTION Set_Attributes (
4328       p_krp_rec IN krp_rec_type,
4329       x_krp_rec OUT NOCOPY krp_rec_type
4330     ) RETURN VARCHAR2 IS
4331       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
4332     BEGIN
4333       x_krp_rec := p_krp_rec;
4334       RETURN(l_return_status);
4335     END Set_Attributes;
4336   BEGIN
4337     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
4338                                               p_init_msg_list,
4339                                               '_PVT',
4340                                               x_return_status);
4341     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4342       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4343     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
4344       RAISE OKC_API.G_EXCEPTION_ERROR;
4345     END IF;
4346     --- Setting item atributes
4347     l_return_status := Set_Attributes(
4348       p_krp_rec,                         -- IN
4349       l_krp_rec);                        -- OUT
4350     --- If any errors happen abort API
4351     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4352       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4353     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
4354       RAISE OKC_API.G_EXCEPTION_ERROR;
4355     END IF;
4356     INSERT INTO OKL_K_RATE_PARAMS(
4357       khr_id,
4358       parameter_type_code,
4359       effective_from_date,
4360       effective_to_date,
4361       interest_index_id,
4362       base_rate,
4363       interest_start_date,
4364       adder_rate,
4365       maximum_rate,
4366       minimum_rate,
4367       principal_basis_code,
4368       days_in_a_month_code,
4369       days_in_a_year_code,
4370       interest_basis_code,
4371       rate_delay_code,
4372       rate_delay_frequency,
4373       compounding_frequency_code,
4374       calculation_formula_id,
4375       catchup_basis_code,
4376       catchup_start_date,
4377       catchup_settlement_code,
4378       rate_change_start_date,
4379       rate_change_frequency_code,
4380       rate_change_value,
4381       conversion_option_code,
4382       next_conversion_date,
4383       conversion_type_code,
4384       attribute_category,
4385       attribute1,
4386       attribute2,
4387       attribute3,
4388       attribute4,
4389       attribute5,
4390       attribute6,
4391       attribute7,
4392       attribute8,
4393       attribute9,
4394       attribute10,
4395       attribute11,
4396       attribute12,
4397       attribute13,
4398       attribute14,
4399       attribute15,
4400       created_by,
4401       creation_date,
4402       last_updated_by,
4403       last_update_date,
4404       last_update_login,
4405       catchup_frequency_code)
4406     VALUES (
4407       l_krp_rec.khr_id,
4408       l_krp_rec.parameter_type_code,
4409       l_krp_rec.effective_from_date,
4410       l_krp_rec.effective_to_date,
4411       l_krp_rec.interest_index_id,
4412       l_krp_rec.base_rate,
4413       l_krp_rec.interest_start_date,
4414       l_krp_rec.adder_rate,
4415       l_krp_rec.maximum_rate,
4416       l_krp_rec.minimum_rate,
4417       l_krp_rec.principal_basis_code,
4418       l_krp_rec.days_in_a_month_code,
4419       l_krp_rec.days_in_a_year_code,
4420       l_krp_rec.interest_basis_code,
4421       l_krp_rec.rate_delay_code,
4422       l_krp_rec.rate_delay_frequency,
4423       l_krp_rec.compounding_frequency_code,
4424       l_krp_rec.calculation_formula_id,
4425       l_krp_rec.catchup_basis_code,
4426       l_krp_rec.catchup_start_date,
4427       l_krp_rec.catchup_settlement_code,
4428       l_krp_rec.rate_change_start_date,
4429       l_krp_rec.rate_change_frequency_code,
4430       l_krp_rec.rate_change_value,
4431       l_krp_rec.conversion_option_code,
4432       l_krp_rec.next_conversion_date,
4433       l_krp_rec.conversion_type_code,
4434       l_krp_rec.attribute_category,
4435       l_krp_rec.attribute1,
4436       l_krp_rec.attribute2,
4437       l_krp_rec.attribute3,
4438       l_krp_rec.attribute4,
4439       l_krp_rec.attribute5,
4440       l_krp_rec.attribute6,
4441       l_krp_rec.attribute7,
4442       l_krp_rec.attribute8,
4443       l_krp_rec.attribute9,
4444       l_krp_rec.attribute10,
4445       l_krp_rec.attribute11,
4446       l_krp_rec.attribute12,
4447       l_krp_rec.attribute13,
4448       l_krp_rec.attribute14,
4449       l_krp_rec.attribute15,
4450       l_krp_rec.created_by,
4451       l_krp_rec.creation_date,
4452       l_krp_rec.last_updated_by,
4453       l_krp_rec.last_update_date,
4454       l_krp_rec.last_update_login,
4455       l_krp_rec.catchup_frequency_code);
4456     -- Set OUT values
4457     x_krp_rec := l_krp_rec;
4458     x_return_status := l_return_status;
4459     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
4460   EXCEPTION
4461     WHEN OKC_API.G_EXCEPTION_ERROR THEN
4462       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4463       (
4464         l_api_name,
4465         G_PKG_NAME,
4466         'OKC_API.G_RET_STS_ERROR',
4467         x_msg_count,
4468         x_msg_data,
4469         '_PVT'
4470       );
4471     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4472       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4473       (
4474         l_api_name,
4475         G_PKG_NAME,
4476         'OKC_API.G_RET_STS_UNEXP_ERROR',
4477         x_msg_count,
4478         x_msg_data,
4479         '_PVT'
4480       );
4481     WHEN OTHERS THEN
4482       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4483       (
4484         l_api_name,
4485         G_PKG_NAME,
4486         'OTHERS',
4487         x_msg_count,
4488         x_msg_data,
4489         '_PVT'
4490       );
4491   END insert_row;
4492   -----------------------------------------
4493   -- insert_row for :OKL_K_RATE_PARAMS_V --
4494   -----------------------------------------
4495   PROCEDURE insert_row(
4496     p_api_version                  IN NUMBER,
4497     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
4498     x_return_status                OUT NOCOPY VARCHAR2,
4499     x_msg_count                    OUT NOCOPY NUMBER,
4500     x_msg_data                     OUT NOCOPY VARCHAR2,
4501     p_krpv_rec                     IN krpv_rec_type,
4502     x_krpv_rec                     OUT NOCOPY krpv_rec_type) IS
4503 
4504     l_api_version                  CONSTANT NUMBER := 1;
4505     l_api_name                     CONSTANT VARCHAR2(30) := 'V_insert_row';
4506     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
4507     l_krpv_rec                     krpv_rec_type := p_krpv_rec;
4508     l_def_krpv_rec                 krpv_rec_type;
4509     l_krp_rec                      krp_rec_type;
4510     lx_krp_rec                     krp_rec_type;
4511     -------------------------------
4512     -- FUNCTION fill_who_columns --
4513     -------------------------------
4514     FUNCTION fill_who_columns (
4515       p_krpv_rec IN krpv_rec_type
4516     ) RETURN krpv_rec_type IS
4517       l_krpv_rec krpv_rec_type := p_krpv_rec;
4518     BEGIN
4519       l_krpv_rec.CREATION_DATE := SYSDATE;
4520       l_krpv_rec.CREATED_BY := FND_GLOBAL.USER_ID;
4521       l_krpv_rec.LAST_UPDATE_DATE := l_krpv_rec.CREATION_DATE;
4522       l_krpv_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
4523       l_krpv_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
4524       RETURN(l_krpv_rec);
4525     END fill_who_columns;
4526     --------------------------------------------
4527     -- Set_Attributes for:OKL_K_RATE_PARAMS_V --
4528     --------------------------------------------
4529     FUNCTION Set_Attributes (
4530       p_krpv_rec IN krpv_rec_type,
4531       x_krpv_rec OUT NOCOPY krpv_rec_type
4532     ) RETURN VARCHAR2 IS
4533       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
4534     BEGIN
4535       x_krpv_rec := p_krpv_rec;
4536       RETURN(l_return_status);
4537     END Set_Attributes;
4538   BEGIN
4539     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
4540                                               G_PKG_NAME,
4541                                               p_init_msg_list,
4542                                               l_api_version,
4543                                               p_api_version,
4544                                               '_PVT',
4545                                               x_return_status);
4546     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4547       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4548     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
4549       RAISE OKC_API.G_EXCEPTION_ERROR;
4550     END IF;
4551     l_krpv_rec := null_out_defaults(p_krpv_rec);
4552     -- Set primary key value
4553     -- Error: Multiple columns make up the Primary Key
4554     --        Cannot assign get_seq_id
4555     -- Setting item attributes
4556     l_return_Status := Set_Attributes(
4557       l_krpv_rec,                        -- IN
4558       l_def_krpv_rec);                   -- OUT
4559     --- If any errors happen abort API
4560     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4561       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4562     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
4563       RAISE OKC_API.G_EXCEPTION_ERROR;
4564     END IF;
4565     l_def_krpv_rec := fill_who_columns(l_def_krpv_rec);
4566     --- Validate all non-missing attributes (Item Level Validation)
4567     l_return_status := Validate_Attributes(l_def_krpv_rec);
4568     --- If any errors happen abort API
4569     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4570       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4571     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
4572       RAISE OKC_API.G_EXCEPTION_ERROR;
4573     END IF;
4574     l_return_status := Validate_Record(l_def_krpv_rec);
4575     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4576       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4577     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
4578       RAISE OKC_API.G_EXCEPTION_ERROR;
4579     END IF;
4580     -----------------------------------------
4581     -- Move VIEW record to "Child" records --
4582     -----------------------------------------
4583     migrate(l_def_krpv_rec, l_krp_rec);
4584     -----------------------------------------------
4585     -- Call the INSERT_ROW for each child record --
4586     -----------------------------------------------
4587     insert_row(
4588       p_init_msg_list,
4589       l_return_status,
4590       x_msg_count,
4591       x_msg_data,
4592       l_krp_rec,
4593       lx_krp_rec
4594     );
4595     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4596       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4597     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
4598       RAISE OKC_API.G_EXCEPTION_ERROR;
4599     END IF;
4600     migrate(lx_krp_rec, l_def_krpv_rec);
4601     -- Set OUT values
4602     x_krpv_rec := l_def_krpv_rec;
4603     x_return_status := l_return_status;
4604     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
4605   EXCEPTION
4606     WHEN OKC_API.G_EXCEPTION_ERROR THEN
4607       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4608       (
4609         l_api_name,
4610         G_PKG_NAME,
4611         'OKC_API.G_RET_STS_ERROR',
4612         x_msg_count,
4613         x_msg_data,
4614         '_PVT'
4615       );
4616     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4617       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4618       (
4619         l_api_name,
4620         G_PKG_NAME,
4621         'OKC_API.G_RET_STS_UNEXP_ERROR',
4622         x_msg_count,
4623         x_msg_data,
4624         '_PVT'
4625       );
4626     WHEN OTHERS THEN
4627       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4628       (
4629         l_api_name,
4630         G_PKG_NAME,
4631         'OTHERS',
4632         x_msg_count,
4633         x_msg_data,
4634         '_PVT'
4635       );
4636   END insert_row;
4637   ----------------------------------------
4638   -- PL/SQL TBL insert_row for:KRPV_TBL --
4639   ----------------------------------------
4640   PROCEDURE insert_row(
4641     p_api_version                  IN NUMBER,
4642     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
4643     x_return_status                OUT NOCOPY VARCHAR2,
4644     x_msg_count                    OUT NOCOPY NUMBER,
4645     x_msg_data                     OUT NOCOPY VARCHAR2,
4646     p_krpv_tbl                     IN krpv_tbl_type,
4647     x_krpv_tbl                     OUT NOCOPY krpv_tbl_type,
4648     px_error_tbl                   IN OUT NOCOPY OKC_API.ERROR_TBL_TYPE) IS
4649 
4650     l_api_version                  CONSTANT NUMBER := 1;
4651     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_insert_row';
4652     i                              NUMBER := 0;
4653   BEGIN
4654     OKC_API.init_msg_list(p_init_msg_list);
4655     -- Make sure PL/SQL table has records in it before passing
4656     IF (p_krpv_tbl.COUNT > 0) THEN
4657       i := p_krpv_tbl.FIRST;
4658       LOOP
4659         DECLARE
4660           l_error_rec         OKC_API.ERROR_REC_TYPE;
4661         BEGIN
4662           l_error_rec.api_name := l_api_name;
4663           l_error_rec.api_package := G_PKG_NAME;
4664           l_error_rec.idx := i;
4665           insert_row (
4666             p_api_version                  => p_api_version,
4667             p_init_msg_list                => OKC_API.G_FALSE,
4668             x_return_status                => l_error_rec.error_type,
4669             x_msg_count                    => l_error_rec.msg_count,
4670             x_msg_data                     => l_error_rec.msg_data,
4671             p_krpv_rec                     => p_krpv_tbl(i),
4672             x_krpv_rec                     => x_krpv_tbl(i));
4673           IF (l_error_rec.error_type <> OKC_API.G_RET_STS_SUCCESS) THEN
4674             l_error_rec.sqlcode := SQLCODE;
4675             load_error_tbl(l_error_rec, px_error_tbl);
4676           ELSE
4677             x_msg_count := l_error_rec.msg_count;
4678             x_msg_data := l_error_rec.msg_data;
4679           END IF;
4680         EXCEPTION
4681           WHEN OKC_API.G_EXCEPTION_ERROR THEN
4682             l_error_rec.error_type := OKC_API.G_RET_STS_ERROR;
4683             l_error_rec.sqlcode := SQLCODE;
4684             load_error_tbl(l_error_rec, px_error_tbl);
4685           WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4686             l_error_rec.error_type := OKC_API.G_RET_STS_UNEXP_ERROR;
4687             l_error_rec.sqlcode := SQLCODE;
4688             load_error_tbl(l_error_rec, px_error_tbl);
4689           WHEN OTHERS THEN
4690             l_error_rec.error_type := 'OTHERS';
4691             l_error_rec.sqlcode := SQLCODE;
4692             load_error_tbl(l_error_rec, px_error_tbl);
4693         END;
4694         EXIT WHEN (i = p_krpv_tbl.LAST);
4695         i := p_krpv_tbl.NEXT(i);
4696       END LOOP;
4697     END IF;
4698     -- Loop through the error_tbl to find the error with the highest severity
4699     -- and return it.
4700     x_return_status := find_highest_exception(px_error_tbl);
4701     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
4702   EXCEPTION
4703     WHEN OKC_API.G_EXCEPTION_ERROR THEN
4704       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4705       (
4706         l_api_name,
4707         G_PKG_NAME,
4708         'OKC_API.G_RET_STS_ERROR',
4709         x_msg_count,
4710         x_msg_data,
4711         '_PVT'
4712       );
4713     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4714       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4715       (
4716         l_api_name,
4717         G_PKG_NAME,
4718         'OKC_API.G_RET_STS_UNEXP_ERROR',
4719         x_msg_count,
4720         x_msg_data,
4721         '_PVT'
4722       );
4723     WHEN OTHERS THEN
4724       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4725       (
4726         l_api_name,
4727         G_PKG_NAME,
4728         'OTHERS',
4729         x_msg_count,
4730         x_msg_data,
4731         '_PVT'
4732       );
4733   END insert_row;
4734 
4735   ----------------------------------------
4736   -- PL/SQL TBL insert_row for:KRPV_TBL --
4737   ----------------------------------------
4738   PROCEDURE insert_row(
4739     p_api_version                  IN NUMBER,
4740     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
4741     x_return_status                OUT NOCOPY VARCHAR2,
4742     x_msg_count                    OUT NOCOPY NUMBER,
4743     x_msg_data                     OUT NOCOPY VARCHAR2,
4744     p_krpv_tbl                     IN krpv_tbl_type,
4745     x_krpv_tbl                     OUT NOCOPY krpv_tbl_type) IS
4746 
4747     l_api_version                  CONSTANT NUMBER := 1;
4748     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_insert_row';
4749     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
4750     l_error_tbl                    OKC_API.ERROR_TBL_TYPE;
4751   BEGIN
4752     OKC_API.init_msg_list(p_init_msg_list);
4753     -- Make sure PL/SQL table has records in it before passing
4754     IF (p_krpv_tbl.COUNT > 0) THEN
4755       insert_row (
4756         p_api_version                  => p_api_version,
4757         p_init_msg_list                => OKC_API.G_FALSE,
4758         x_return_status                => x_return_status,
4759         x_msg_count                    => x_msg_count,
4760         x_msg_data                     => x_msg_data,
4761         p_krpv_tbl                     => p_krpv_tbl,
4762         x_krpv_tbl                     => x_krpv_tbl,
4763         px_error_tbl                   => l_error_tbl);
4764     END IF;
4765     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
4766   EXCEPTION
4767     WHEN OKC_API.G_EXCEPTION_ERROR THEN
4768       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4769       (
4770         l_api_name,
4771         G_PKG_NAME,
4772         'OKC_API.G_RET_STS_ERROR',
4773         x_msg_count,
4774         x_msg_data,
4775         '_PVT'
4776       );
4777     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
4778       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4779       (
4780         l_api_name,
4781         G_PKG_NAME,
4782         'OKC_API.G_RET_STS_UNEXP_ERROR',
4783         x_msg_count,
4784         x_msg_data,
4785         '_PVT'
4786       );
4787     WHEN OTHERS THEN
4788       x_return_status := OKC_API.HANDLE_EXCEPTIONS
4789       (
4790         l_api_name,
4791         G_PKG_NAME,
4792         'OTHERS',
4793         x_msg_count,
4794         x_msg_data,
4795         '_PVT'
4796       );
4797   END insert_row;
4798 
4799   ---------------------------------------------------------------------------
4800   -- PROCEDURE lock_row
4801   ---------------------------------------------------------------------------
4802   ------------------------------------
4803   -- lock_row for:OKL_K_RATE_PARAMS --
4804   ------------------------------------
4805   PROCEDURE lock_row(
4806     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
4807     x_return_status                OUT NOCOPY VARCHAR2,
4808     x_msg_count                    OUT NOCOPY NUMBER,
4809     x_msg_data                     OUT NOCOPY VARCHAR2,
4810     p_krp_rec                      IN krp_rec_type) IS
4811 
4812     E_Resource_Busy                EXCEPTION;
4813     PRAGMA EXCEPTION_INIT(E_Resource_Busy, -00054);
4814     CURSOR lock_csr (p_krp_rec IN krp_rec_type) IS
4815     SELECT *
4816       FROM OKL_K_RATE_PARAMS
4817      WHERE PARAMETER_TYPE_CODE = p_krp_rec.parameter_type_code
4818        AND EFFECTIVE_FROM_DATE = p_krp_rec.effective_from_date
4819        AND KHR_ID = p_krp_rec.khr_id
4820     FOR UPDATE NOWAIT;
4821 
4822     l_api_version                  CONSTANT NUMBER := 1;
4823     l_api_name                     CONSTANT VARCHAR2(30) := 'B_lock_row';
4824     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
4825     l_lock_var                     lock_csr%ROWTYPE;
4826     l_row_notfound                 BOOLEAN := FALSE;
4827     lc_row_notfound                BOOLEAN := FALSE;
4828   BEGIN
4829     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
4830                                               p_init_msg_list,
4831                                               '_PVT',
4832                                               x_return_status);
4833     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
4834       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
4835     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
4836       RAISE OKC_API.G_EXCEPTION_ERROR;
4837     END IF;
4838     BEGIN
4839       OPEN lock_csr(p_krp_rec);
4840       FETCH lock_csr INTO l_lock_var;
4841       l_row_notfound := lock_csr%NOTFOUND;
4842       CLOSE lock_csr;
4843     EXCEPTION
4844       WHEN E_Resource_Busy THEN
4845         IF (lock_csr%ISOPEN) THEN
4846           CLOSE lock_csr;
4847         END IF;
4848         OKC_API.set_message(G_FND_APP,G_FORM_UNABLE_TO_RESERVE_REC);
4849         RAISE APP_EXCEPTIONS.RECORD_LOCK_EXCEPTION;
4850     END;
4851 
4852     IF ( l_row_notfound ) THEN
4853       OKC_API.set_message(G_FND_APP,G_FORM_RECORD_DELETED);
4854       RAISE OKC_API.G_EXCEPTION_ERROR;
4855     ELSE
4856       IF (l_lock_var.khr_id <> p_krp_rec.khr_id) THEN
4857         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4858         RAISE OKC_API.G_EXCEPTION_ERROR;
4859       END IF;
4860       IF (l_lock_var.parameter_type_code <> p_krp_rec.parameter_type_code) THEN
4861         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4862         RAISE OKC_API.G_EXCEPTION_ERROR;
4863       END IF;
4864       IF (l_lock_var.effective_from_date <> p_krp_rec.effective_from_date) THEN
4865         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4866         RAISE OKC_API.G_EXCEPTION_ERROR;
4867       END IF;
4868       IF (l_lock_var.effective_to_date <> p_krp_rec.effective_to_date) THEN
4869         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4870         RAISE OKC_API.G_EXCEPTION_ERROR;
4871       END IF;
4872       IF (l_lock_var.interest_index_id <> p_krp_rec.interest_index_id) THEN
4873         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4874         RAISE OKC_API.G_EXCEPTION_ERROR;
4875       END IF;
4876       IF (l_lock_var.base_rate <> p_krp_rec.base_rate) THEN
4877         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4878         RAISE OKC_API.G_EXCEPTION_ERROR;
4879       END IF;
4880       IF (l_lock_var.interest_start_date <> p_krp_rec.interest_start_date) THEN
4881         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4882         RAISE OKC_API.G_EXCEPTION_ERROR;
4883       END IF;
4884       IF (l_lock_var.adder_rate <> p_krp_rec.adder_rate) THEN
4885         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4886         RAISE OKC_API.G_EXCEPTION_ERROR;
4887       END IF;
4888       IF (l_lock_var.maximum_rate <> p_krp_rec.maximum_rate) THEN
4889         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4890         RAISE OKC_API.G_EXCEPTION_ERROR;
4891       END IF;
4892       IF (l_lock_var.minimum_rate <> p_krp_rec.minimum_rate) THEN
4893         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4894         RAISE OKC_API.G_EXCEPTION_ERROR;
4895       END IF;
4896       IF (l_lock_var.principal_basis_code <> p_krp_rec.principal_basis_code) THEN
4897         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4898         RAISE OKC_API.G_EXCEPTION_ERROR;
4899       END IF;
4900       IF (l_lock_var.days_in_a_month_code <> p_krp_rec.days_in_a_month_code) THEN
4901         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4902         RAISE OKC_API.G_EXCEPTION_ERROR;
4903       END IF;
4904       IF (l_lock_var.days_in_a_year_code <> p_krp_rec.days_in_a_year_code) THEN
4905         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4906         RAISE OKC_API.G_EXCEPTION_ERROR;
4907       END IF;
4908       IF (l_lock_var.interest_basis_code <> p_krp_rec.interest_basis_code) THEN
4909         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4910         RAISE OKC_API.G_EXCEPTION_ERROR;
4911       END IF;
4912       IF (l_lock_var.rate_delay_code <> p_krp_rec.rate_delay_code) THEN
4913         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4914         RAISE OKC_API.G_EXCEPTION_ERROR;
4915       END IF;
4916       IF (l_lock_var.rate_delay_frequency <> p_krp_rec.rate_delay_frequency) THEN
4917         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4918         RAISE OKC_API.G_EXCEPTION_ERROR;
4919       END IF;
4920       IF (l_lock_var.compounding_frequency_code <> p_krp_rec.compounding_frequency_code) THEN
4921         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4922         RAISE OKC_API.G_EXCEPTION_ERROR;
4923       END IF;
4924       IF (l_lock_var.calculation_formula_id <> p_krp_rec.calculation_formula_id) THEN
4925         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4926         RAISE OKC_API.G_EXCEPTION_ERROR;
4927       END IF;
4928       IF (l_lock_var.catchup_basis_code <> p_krp_rec.catchup_basis_code) THEN
4929         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4930         RAISE OKC_API.G_EXCEPTION_ERROR;
4931       END IF;
4932       IF (l_lock_var.catchup_start_date <> p_krp_rec.catchup_start_date) THEN
4933         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4934         RAISE OKC_API.G_EXCEPTION_ERROR;
4935       END IF;
4936       IF (l_lock_var.catchup_settlement_code <> p_krp_rec.catchup_settlement_code) THEN
4937         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4938         RAISE OKC_API.G_EXCEPTION_ERROR;
4939       END IF;
4940       IF (l_lock_var.rate_change_start_date <> p_krp_rec.rate_change_start_date) THEN
4941         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4942         RAISE OKC_API.G_EXCEPTION_ERROR;
4943       END IF;
4944       IF (l_lock_var.rate_change_frequency_code <> p_krp_rec.rate_change_frequency_code) THEN
4945         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4946         RAISE OKC_API.G_EXCEPTION_ERROR;
4947       END IF;
4948       IF (l_lock_var.rate_change_value <> p_krp_rec.rate_change_value) THEN
4949         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4950         RAISE OKC_API.G_EXCEPTION_ERROR;
4951       END IF;
4952       IF (l_lock_var.conversion_option_code <> p_krp_rec.conversion_option_code) THEN
4953         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4954         RAISE OKC_API.G_EXCEPTION_ERROR;
4955       END IF;
4956       IF (l_lock_var.next_conversion_date <> p_krp_rec.next_conversion_date) THEN
4957         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4958         RAISE OKC_API.G_EXCEPTION_ERROR;
4959       END IF;
4960       IF (l_lock_var.conversion_type_code <> p_krp_rec.conversion_type_code) THEN
4961         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4962         RAISE OKC_API.G_EXCEPTION_ERROR;
4963       END IF;
4964       IF (l_lock_var.attribute_category <> p_krp_rec.attribute_category) THEN
4965         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4966         RAISE OKC_API.G_EXCEPTION_ERROR;
4967       END IF;
4968       IF (l_lock_var.attribute1 <> p_krp_rec.attribute1) THEN
4969         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4970         RAISE OKC_API.G_EXCEPTION_ERROR;
4971       END IF;
4972       IF (l_lock_var.attribute2 <> p_krp_rec.attribute2) THEN
4973         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4974         RAISE OKC_API.G_EXCEPTION_ERROR;
4975       END IF;
4976       IF (l_lock_var.attribute3 <> p_krp_rec.attribute3) THEN
4977         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4978         RAISE OKC_API.G_EXCEPTION_ERROR;
4979       END IF;
4980       IF (l_lock_var.attribute4 <> p_krp_rec.attribute4) THEN
4981         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4982         RAISE OKC_API.G_EXCEPTION_ERROR;
4983       END IF;
4984       IF (l_lock_var.attribute5 <> p_krp_rec.attribute5) THEN
4985         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4986         RAISE OKC_API.G_EXCEPTION_ERROR;
4987       END IF;
4988       IF (l_lock_var.attribute6 <> p_krp_rec.attribute6) THEN
4989         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4990         RAISE OKC_API.G_EXCEPTION_ERROR;
4991       END IF;
4992       IF (l_lock_var.attribute7 <> p_krp_rec.attribute7) THEN
4993         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4994         RAISE OKC_API.G_EXCEPTION_ERROR;
4995       END IF;
4996       IF (l_lock_var.attribute8 <> p_krp_rec.attribute8) THEN
4997         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
4998         RAISE OKC_API.G_EXCEPTION_ERROR;
4999       END IF;
5000       IF (l_lock_var.attribute9 <> p_krp_rec.attribute9) THEN
5001         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5002         RAISE OKC_API.G_EXCEPTION_ERROR;
5003       END IF;
5004       IF (l_lock_var.attribute10 <> p_krp_rec.attribute10) THEN
5005         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5006         RAISE OKC_API.G_EXCEPTION_ERROR;
5007       END IF;
5008       IF (l_lock_var.attribute11 <> p_krp_rec.attribute11) THEN
5009         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5010         RAISE OKC_API.G_EXCEPTION_ERROR;
5011       END IF;
5012       IF (l_lock_var.attribute12 <> p_krp_rec.attribute12) THEN
5013         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5014         RAISE OKC_API.G_EXCEPTION_ERROR;
5015       END IF;
5016       IF (l_lock_var.attribute13 <> p_krp_rec.attribute13) THEN
5017         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5018         RAISE OKC_API.G_EXCEPTION_ERROR;
5019       END IF;
5020       IF (l_lock_var.attribute14 <> p_krp_rec.attribute14) THEN
5021         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5022         RAISE OKC_API.G_EXCEPTION_ERROR;
5023       END IF;
5024       IF (l_lock_var.attribute15 <> p_krp_rec.attribute15) THEN
5025         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5026         RAISE OKC_API.G_EXCEPTION_ERROR;
5027       END IF;
5028       IF (l_lock_var.created_by <> p_krp_rec.created_by) THEN
5029         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5030         RAISE OKC_API.G_EXCEPTION_ERROR;
5031       END IF;
5032       IF (l_lock_var.creation_date <> p_krp_rec.creation_date) THEN
5033         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5034         RAISE OKC_API.G_EXCEPTION_ERROR;
5035       END IF;
5036       IF (l_lock_var.last_updated_by <> p_krp_rec.last_updated_by) THEN
5037         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5038         RAISE OKC_API.G_EXCEPTION_ERROR;
5039       END IF;
5040       IF (l_lock_var.last_update_date <> p_krp_rec.last_update_date) THEN
5041         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5042         RAISE OKC_API.G_EXCEPTION_ERROR;
5043       END IF;
5044       IF (l_lock_var.last_update_login <> p_krp_rec.last_update_login) THEN
5045         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5046         RAISE OKC_API.G_EXCEPTION_ERROR;
5047       END IF;
5048       IF (l_lock_var.catchup_frequency_code <> p_krp_rec.catchup_frequency_code) THEN
5049         OKC_API.set_message(G_FND_APP,G_FORM_RECORD_CHANGED);
5050         RAISE OKC_API.G_EXCEPTION_ERROR;
5051       END IF;
5052     END IF;
5053     x_return_status := l_return_status;
5054     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
5055   EXCEPTION
5056     WHEN OKC_API.G_EXCEPTION_ERROR THEN
5057       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5058       (
5059         l_api_name,
5060         G_PKG_NAME,
5061         'OKC_API.G_RET_STS_ERROR',
5062         x_msg_count,
5063         x_msg_data,
5064         '_PVT'
5065       );
5066     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5067       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5068       (
5069         l_api_name,
5070         G_PKG_NAME,
5071         'OKC_API.G_RET_STS_UNEXP_ERROR',
5072         x_msg_count,
5073         x_msg_data,
5074         '_PVT'
5075       );
5076     WHEN OTHERS THEN
5077       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5078       (
5079         l_api_name,
5080         G_PKG_NAME,
5081         'OTHERS',
5082         x_msg_count,
5083         x_msg_data,
5084         '_PVT'
5085       );
5086   END lock_row;
5087   ---------------------------------------
5088   -- lock_row for: OKL_K_RATE_PARAMS_V --
5089   ---------------------------------------
5090   PROCEDURE lock_row(
5091     p_api_version                  IN NUMBER,
5092     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
5093     x_return_status                OUT NOCOPY VARCHAR2,
5094     x_msg_count                    OUT NOCOPY NUMBER,
5095     x_msg_data                     OUT NOCOPY VARCHAR2,
5096     p_krpv_rec                     IN krpv_rec_type) IS
5097 
5098     l_api_version                  CONSTANT NUMBER := 1;
5099     l_api_name                     CONSTANT VARCHAR2(30) := 'V_lock_row';
5100     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5101     l_krp_rec                      krp_rec_type;
5102   BEGIN
5103     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
5104                                               G_PKG_NAME,
5105                                               p_init_msg_list,
5106                                               l_api_version,
5107                                               p_api_version,
5108                                               '_PVT',
5109                                               x_return_status);
5110     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5111       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5112     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
5113       RAISE OKC_API.G_EXCEPTION_ERROR;
5114     END IF;
5115     -----------------------------------------
5116     -- Move VIEW record to "Child" records --
5117     -----------------------------------------
5118     migrate(p_krpv_rec, l_krp_rec);
5119     ---------------------------------------------
5120     -- Call the LOCK_ROW for each child record --
5121     ---------------------------------------------
5122     lock_row(
5123       p_init_msg_list,
5124       l_return_status,
5125       x_msg_count,
5126       x_msg_data,
5127       l_krp_rec
5128     );
5129     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5130       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5131     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
5132       RAISE OKC_API.G_EXCEPTION_ERROR;
5133     END IF;
5134     x_return_status := l_return_status;
5135     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
5136   EXCEPTION
5137     WHEN OKC_API.G_EXCEPTION_ERROR THEN
5138       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5139       (
5140         l_api_name,
5141         G_PKG_NAME,
5142         'OKC_API.G_RET_STS_ERROR',
5143         x_msg_count,
5144         x_msg_data,
5145         '_PVT'
5146       );
5147     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5148       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5149       (
5150         l_api_name,
5151         G_PKG_NAME,
5152         'OKC_API.G_RET_STS_UNEXP_ERROR',
5153         x_msg_count,
5154         x_msg_data,
5155         '_PVT'
5156       );
5157     WHEN OTHERS THEN
5158       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5159       (
5160         l_api_name,
5161         G_PKG_NAME,
5162         'OTHERS',
5163         x_msg_count,
5164         x_msg_data,
5165         '_PVT'
5166       );
5167   END lock_row;
5168   --------------------------------------
5169   -- PL/SQL TBL lock_row for:KRPV_TBL --
5170   --------------------------------------
5171   PROCEDURE lock_row(
5172     p_api_version                  IN NUMBER,
5173     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
5174     x_return_status                OUT NOCOPY VARCHAR2,
5175     x_msg_count                    OUT NOCOPY NUMBER,
5176     x_msg_data                     OUT NOCOPY VARCHAR2,
5177     p_krpv_tbl                     IN krpv_tbl_type,
5178     px_error_tbl                   IN OUT NOCOPY OKC_API.ERROR_TBL_TYPE) IS
5179 
5180     l_api_version                  CONSTANT NUMBER := 1;
5181     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_lock_row';
5182     i                              NUMBER := 0;
5183   BEGIN
5184     OKC_API.init_msg_list(p_init_msg_list);
5185     -- Make sure PL/SQL table has recrods in it before passing
5186     IF (p_krpv_tbl.COUNT > 0) THEN
5187       i := p_krpv_tbl.FIRST;
5188       LOOP
5189         DECLARE
5190           l_error_rec         OKC_API.ERROR_REC_TYPE;
5191         BEGIN
5192           l_error_rec.api_name := l_api_name;
5193           l_error_rec.api_package := G_PKG_NAME;
5194           l_error_rec.idx := i;
5195           lock_row(
5196             p_api_version                  => p_api_version,
5197             p_init_msg_list                => OKC_API.G_FALSE,
5198             x_return_status                => l_error_rec.error_type,
5199             x_msg_count                    => l_error_rec.msg_count,
5200             x_msg_data                     => l_error_rec.msg_data,
5201             p_krpv_rec                     => p_krpv_tbl(i));
5202           IF (l_error_rec.error_type <> OKC_API.G_RET_STS_SUCCESS) THEN
5203             l_error_rec.sqlcode := SQLCODE;
5204             load_error_tbl(l_error_rec, px_error_tbl);
5205           ELSE
5206             x_msg_count := l_error_rec.msg_count;
5207             x_msg_data := l_error_rec.msg_data;
5208           END IF;
5209         EXCEPTION
5210           WHEN OKC_API.G_EXCEPTION_ERROR THEN
5211             l_error_rec.error_type := OKC_API.G_RET_STS_ERROR;
5212             l_error_rec.sqlcode := SQLCODE;
5213             load_error_tbl(l_error_rec, px_error_tbl);
5214           WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5215             l_error_rec.error_type := OKC_API.G_RET_STS_UNEXP_ERROR;
5216             l_error_rec.sqlcode := SQLCODE;
5217             load_error_tbl(l_error_rec, px_error_tbl);
5218           WHEN OTHERS THEN
5219             l_error_rec.error_type := 'OTHERS';
5220             l_error_rec.sqlcode := SQLCODE;
5221             load_error_tbl(l_error_rec, px_error_tbl);
5222         END;
5223         EXIT WHEN (i = p_krpv_tbl.LAST);
5224         i := p_krpv_tbl.NEXT(i);
5225       END LOOP;
5226     END IF;
5227     -- Loop through the error_tbl to find the error with the highest severity
5228     -- and return it.
5229     x_return_status := find_highest_exception(px_error_tbl);
5230     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
5231   EXCEPTION
5232     WHEN OKC_API.G_EXCEPTION_ERROR THEN
5233       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5234       (
5235         l_api_name,
5236         G_PKG_NAME,
5237         'OKC_API.G_RET_STS_ERROR',
5238         x_msg_count,
5239         x_msg_data,
5240         '_PVT'
5241       );
5242     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5243       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5244       (
5245         l_api_name,
5246         G_PKG_NAME,
5247         'OKC_API.G_RET_STS_UNEXP_ERROR',
5248         x_msg_count,
5249         x_msg_data,
5250         '_PVT'
5251       );
5252     WHEN OTHERS THEN
5253       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5254       (
5255         l_api_name,
5256         G_PKG_NAME,
5257         'OTHERS',
5258         x_msg_count,
5259         x_msg_data,
5260         '_PVT'
5261       );
5262   END lock_row;
5263   --------------------------------------
5264   -- PL/SQL TBL lock_row for:KRPV_TBL --
5265   --------------------------------------
5266   PROCEDURE lock_row(
5267     p_api_version                  IN NUMBER,
5268     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
5269     x_return_status                OUT NOCOPY VARCHAR2,
5270     x_msg_count                    OUT NOCOPY NUMBER,
5271     x_msg_data                     OUT NOCOPY VARCHAR2,
5272     p_krpv_tbl                     IN krpv_tbl_type) IS
5273 
5274     l_api_version                  CONSTANT NUMBER := 1;
5275     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_lock_row';
5276     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5277     l_error_tbl                    OKC_API.ERROR_TBL_TYPE;
5278   BEGIN
5279     OKC_API.init_msg_list(p_init_msg_list);
5280     -- Make sure PL/SQL table has recrods in it before passing
5281     IF (p_krpv_tbl.COUNT > 0) THEN
5282       lock_row(
5283         p_api_version                  => p_api_version,
5284         p_init_msg_list                => OKC_API.G_FALSE,
5285         x_return_status                => x_return_status,
5286         x_msg_count                    => x_msg_count,
5287         x_msg_data                     => x_msg_data,
5288         p_krpv_tbl                     => p_krpv_tbl,
5289         px_error_tbl                   => l_error_tbl);
5290     END IF;
5291     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
5292   EXCEPTION
5293     WHEN OKC_API.G_EXCEPTION_ERROR THEN
5294       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5295       (
5296         l_api_name,
5297         G_PKG_NAME,
5298         'OKC_API.G_RET_STS_ERROR',
5299         x_msg_count,
5300         x_msg_data,
5301         '_PVT'
5302       );
5303     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5304       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5305       (
5306         l_api_name,
5307         G_PKG_NAME,
5308         'OKC_API.G_RET_STS_UNEXP_ERROR',
5309         x_msg_count,
5310         x_msg_data,
5311         '_PVT'
5312       );
5313     WHEN OTHERS THEN
5314       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5315       (
5316         l_api_name,
5317         G_PKG_NAME,
5318         'OTHERS',
5319         x_msg_count,
5320         x_msg_data,
5321         '_PVT'
5322       );
5323   END lock_row;
5324   ---------------------------------------------------------------------------
5325   -- PROCEDURE update_row
5326   ---------------------------------------------------------------------------
5327   --------------------------------------
5328   -- update_row for:OKL_K_RATE_PARAMS --
5329   --------------------------------------
5330   PROCEDURE update_row(
5331     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
5332     x_return_status                OUT NOCOPY VARCHAR2,
5333     x_msg_count                    OUT NOCOPY NUMBER,
5334     x_msg_data                     OUT NOCOPY VARCHAR2,
5335     p_krp_rec                      IN krp_rec_type,
5336     x_krp_rec                      OUT NOCOPY krp_rec_type) IS
5337 
5338     l_api_version                  CONSTANT NUMBER := 1;
5339     l_api_name                     CONSTANT VARCHAR2(30) := 'B_update_row';
5340     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5341     l_krp_rec                      krp_rec_type := p_krp_rec;
5342     l_def_krp_rec                  krp_rec_type;
5343     l_row_notfound                 BOOLEAN := TRUE;
5344     ----------------------------------
5345     -- FUNCTION populate_new_record --
5346     ----------------------------------
5347     FUNCTION populate_new_record (
5348       p_krp_rec IN krp_rec_type,
5349       x_krp_rec OUT NOCOPY krp_rec_type
5350     ) RETURN VARCHAR2 IS
5351       l_krp_rec                      krp_rec_type;
5352       l_row_notfound                 BOOLEAN := TRUE;
5353       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5354     BEGIN
5355       x_krp_rec := p_krp_rec;
5356       -- Get current database values
5357       l_krp_rec := get_rec(p_krp_rec, l_return_status);
5358       IF (l_return_status = OKC_API.G_RET_STS_SUCCESS) THEN
5359         IF (x_krp_rec.khr_id = OKC_API.G_MISS_NUM)
5360         THEN
5361           x_krp_rec.khr_id := l_krp_rec.khr_id;
5362         END IF;
5363         IF (x_krp_rec.parameter_type_code = OKC_API.G_MISS_CHAR)
5364         THEN
5365           x_krp_rec.parameter_type_code := l_krp_rec.parameter_type_code;
5366         END IF;
5367         IF (x_krp_rec.effective_from_date = OKC_API.G_MISS_DATE)
5368         THEN
5369           x_krp_rec.effective_from_date := l_krp_rec.effective_from_date;
5370         END IF;
5371         IF (x_krp_rec.effective_to_date = OKC_API.G_MISS_DATE)
5372         THEN
5373           x_krp_rec.effective_to_date := l_krp_rec.effective_to_date;
5374         END IF;
5375         IF (x_krp_rec.interest_index_id = OKC_API.G_MISS_NUM)
5376         THEN
5377           x_krp_rec.interest_index_id := l_krp_rec.interest_index_id;
5378         END IF;
5379         IF (x_krp_rec.base_rate = OKC_API.G_MISS_NUM)
5380         THEN
5381           x_krp_rec.base_rate := l_krp_rec.base_rate;
5382         END IF;
5383         IF (x_krp_rec.interest_start_date = OKC_API.G_MISS_DATE)
5384         THEN
5385           x_krp_rec.interest_start_date := l_krp_rec.interest_start_date;
5386         END IF;
5387         IF (x_krp_rec.adder_rate = OKC_API.G_MISS_NUM)
5388         THEN
5389           x_krp_rec.adder_rate := l_krp_rec.adder_rate;
5390         END IF;
5391         IF (x_krp_rec.maximum_rate = OKC_API.G_MISS_NUM)
5392         THEN
5393           x_krp_rec.maximum_rate := l_krp_rec.maximum_rate;
5394         END IF;
5395         IF (x_krp_rec.minimum_rate = OKC_API.G_MISS_NUM)
5396         THEN
5397           x_krp_rec.minimum_rate := l_krp_rec.minimum_rate;
5398         END IF;
5399         IF (x_krp_rec.principal_basis_code = OKC_API.G_MISS_CHAR)
5400         THEN
5401           x_krp_rec.principal_basis_code := l_krp_rec.principal_basis_code;
5402         END IF;
5403         IF (x_krp_rec.days_in_a_month_code = OKC_API.G_MISS_CHAR)
5404         THEN
5405           x_krp_rec.days_in_a_month_code := l_krp_rec.days_in_a_month_code;
5406         END IF;
5407         IF (x_krp_rec.days_in_a_year_code = OKC_API.G_MISS_CHAR)
5408         THEN
5409           x_krp_rec.days_in_a_year_code := l_krp_rec.days_in_a_year_code;
5410         END IF;
5411         IF (x_krp_rec.interest_basis_code = OKC_API.G_MISS_CHAR)
5412         THEN
5413           x_krp_rec.interest_basis_code := l_krp_rec.interest_basis_code;
5414         END IF;
5415         IF (x_krp_rec.rate_delay_code = OKC_API.G_MISS_CHAR)
5416         THEN
5417           x_krp_rec.rate_delay_code := l_krp_rec.rate_delay_code;
5418         END IF;
5419         IF (x_krp_rec.rate_delay_frequency = OKC_API.G_MISS_NUM)
5420         THEN
5421           x_krp_rec.rate_delay_frequency := l_krp_rec.rate_delay_frequency;
5422         END IF;
5423         IF (x_krp_rec.compounding_frequency_code = OKC_API.G_MISS_CHAR)
5424         THEN
5425           x_krp_rec.compounding_frequency_code := l_krp_rec.compounding_frequency_code;
5426         END IF;
5427         IF (x_krp_rec.calculation_formula_id = OKC_API.G_MISS_NUM)
5428         THEN
5429           x_krp_rec.calculation_formula_id := l_krp_rec.calculation_formula_id;
5430         END IF;
5431         IF (x_krp_rec.catchup_basis_code = OKC_API.G_MISS_CHAR)
5432         THEN
5433           x_krp_rec.catchup_basis_code := l_krp_rec.catchup_basis_code;
5434         END IF;
5435         IF (x_krp_rec.catchup_start_date = OKC_API.G_MISS_DATE)
5436         THEN
5437           x_krp_rec.catchup_start_date := l_krp_rec.catchup_start_date;
5438         END IF;
5439         IF (x_krp_rec.catchup_settlement_code = OKC_API.G_MISS_CHAR)
5440         THEN
5441           x_krp_rec.catchup_settlement_code := l_krp_rec.catchup_settlement_code;
5442         END IF;
5443         IF (x_krp_rec.rate_change_start_date = OKC_API.G_MISS_DATE)
5444         THEN
5445           x_krp_rec.rate_change_start_date := l_krp_rec.rate_change_start_date;
5446         END IF;
5447         IF (x_krp_rec.rate_change_frequency_code = OKC_API.G_MISS_CHAR)
5448         THEN
5449           x_krp_rec.rate_change_frequency_code := l_krp_rec.rate_change_frequency_code;
5450         END IF;
5451         IF (x_krp_rec.rate_change_value = OKC_API.G_MISS_NUM)
5452         THEN
5453           x_krp_rec.rate_change_value := l_krp_rec.rate_change_value;
5454         END IF;
5455         IF (x_krp_rec.conversion_option_code = OKC_API.G_MISS_CHAR)
5456         THEN
5457           x_krp_rec.conversion_option_code := l_krp_rec.conversion_option_code;
5458         END IF;
5459         IF (x_krp_rec.next_conversion_date = OKC_API.G_MISS_DATE)
5460         THEN
5461           x_krp_rec.next_conversion_date := l_krp_rec.next_conversion_date;
5462         END IF;
5463         IF (x_krp_rec.conversion_type_code = OKC_API.G_MISS_CHAR)
5464         THEN
5465           x_krp_rec.conversion_type_code := l_krp_rec.conversion_type_code;
5466         END IF;
5467         IF (x_krp_rec.attribute_category = OKC_API.G_MISS_CHAR)
5468         THEN
5469           x_krp_rec.attribute_category := l_krp_rec.attribute_category;
5470         END IF;
5471         IF (x_krp_rec.attribute1 = OKC_API.G_MISS_CHAR)
5472         THEN
5473           x_krp_rec.attribute1 := l_krp_rec.attribute1;
5474         END IF;
5475         IF (x_krp_rec.attribute2 = OKC_API.G_MISS_CHAR)
5476         THEN
5477           x_krp_rec.attribute2 := l_krp_rec.attribute2;
5478         END IF;
5479         IF (x_krp_rec.attribute3 = OKC_API.G_MISS_CHAR)
5480         THEN
5481           x_krp_rec.attribute3 := l_krp_rec.attribute3;
5482         END IF;
5483         IF (x_krp_rec.attribute4 = OKC_API.G_MISS_CHAR)
5484         THEN
5485           x_krp_rec.attribute4 := l_krp_rec.attribute4;
5486         END IF;
5487         IF (x_krp_rec.attribute5 = OKC_API.G_MISS_CHAR)
5488         THEN
5489           x_krp_rec.attribute5 := l_krp_rec.attribute5;
5490         END IF;
5491         IF (x_krp_rec.attribute6 = OKC_API.G_MISS_CHAR)
5492         THEN
5493           x_krp_rec.attribute6 := l_krp_rec.attribute6;
5494         END IF;
5495         IF (x_krp_rec.attribute7 = OKC_API.G_MISS_CHAR)
5496         THEN
5497           x_krp_rec.attribute7 := l_krp_rec.attribute7;
5498         END IF;
5499         IF (x_krp_rec.attribute8 = OKC_API.G_MISS_CHAR)
5500         THEN
5501           x_krp_rec.attribute8 := l_krp_rec.attribute8;
5502         END IF;
5503         IF (x_krp_rec.attribute9 = OKC_API.G_MISS_CHAR)
5504         THEN
5505           x_krp_rec.attribute9 := l_krp_rec.attribute9;
5506         END IF;
5507         IF (x_krp_rec.attribute10 = OKC_API.G_MISS_CHAR)
5508         THEN
5509           x_krp_rec.attribute10 := l_krp_rec.attribute10;
5510         END IF;
5511         IF (x_krp_rec.attribute11 = OKC_API.G_MISS_CHAR)
5512         THEN
5513           x_krp_rec.attribute11 := l_krp_rec.attribute11;
5514         END IF;
5515         IF (x_krp_rec.attribute12 = OKC_API.G_MISS_CHAR)
5516         THEN
5517           x_krp_rec.attribute12 := l_krp_rec.attribute12;
5518         END IF;
5519         IF (x_krp_rec.attribute13 = OKC_API.G_MISS_CHAR)
5520         THEN
5521           x_krp_rec.attribute13 := l_krp_rec.attribute13;
5522         END IF;
5523         IF (x_krp_rec.attribute14 = OKC_API.G_MISS_CHAR)
5524         THEN
5525           x_krp_rec.attribute14 := l_krp_rec.attribute14;
5526         END IF;
5527         IF (x_krp_rec.attribute15 = OKC_API.G_MISS_CHAR)
5528         THEN
5529           x_krp_rec.attribute15 := l_krp_rec.attribute15;
5530         END IF;
5531         IF (x_krp_rec.created_by = OKC_API.G_MISS_NUM)
5532         THEN
5533           x_krp_rec.created_by := l_krp_rec.created_by;
5534         END IF;
5535         IF (x_krp_rec.creation_date = OKC_API.G_MISS_DATE)
5536         THEN
5537           x_krp_rec.creation_date := l_krp_rec.creation_date;
5538         END IF;
5539         IF (x_krp_rec.last_updated_by = OKC_API.G_MISS_NUM)
5540         THEN
5541           x_krp_rec.last_updated_by := l_krp_rec.last_updated_by;
5542         END IF;
5543         IF (x_krp_rec.last_update_date = OKC_API.G_MISS_DATE)
5544         THEN
5545           x_krp_rec.last_update_date := l_krp_rec.last_update_date;
5546         END IF;
5547         IF (x_krp_rec.last_update_login = OKC_API.G_MISS_NUM)
5548         THEN
5549           x_krp_rec.last_update_login := l_krp_rec.last_update_login;
5550         END IF;
5551         IF (x_krp_rec.catchup_frequency_code = OKC_API.G_MISS_CHAR)
5552         THEN
5553           x_krp_rec.catchup_frequency_code := l_krp_rec.catchup_frequency_code;
5554         END IF;
5555       END IF;
5556       RETURN(l_return_status);
5557     END populate_new_record;
5558     ------------------------------------------
5559     -- Set_Attributes for:OKL_K_RATE_PARAMS --
5560     ------------------------------------------
5561     FUNCTION Set_Attributes (
5562       p_krp_rec IN krp_rec_type,
5563       x_krp_rec OUT NOCOPY krp_rec_type
5564     ) RETURN VARCHAR2 IS
5565       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5566     BEGIN
5567       x_krp_rec := p_krp_rec;
5568       RETURN(l_return_status);
5569     END Set_Attributes;
5570   BEGIN
5571     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
5572                                               p_init_msg_list,
5573                                               '_PVT',
5574                                               x_return_status);
5575     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5576       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5577     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
5578       RAISE OKC_API.G_EXCEPTION_ERROR;
5579     END IF;
5580     --- Setting item attributes
5581     l_return_status := Set_Attributes(
5582       p_krp_rec,                         -- IN
5583       l_krp_rec);                        -- OUT
5584     --- If any errors happen abort API
5585     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5586       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5587     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
5588       RAISE OKC_API.G_EXCEPTION_ERROR;
5589     END IF;
5590     l_return_status := populate_new_record(l_krp_rec, l_def_krp_rec);
5591     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5592       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5593     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
5594       RAISE OKC_API.G_EXCEPTION_ERROR;
5595     END IF;
5596     UPDATE OKL_K_RATE_PARAMS
5597     SET EFFECTIVE_TO_DATE = l_def_krp_rec.effective_to_date,
5598         INTEREST_INDEX_ID = l_def_krp_rec.interest_index_id,
5599         BASE_RATE = l_def_krp_rec.base_rate,
5600         INTEREST_START_DATE = l_def_krp_rec.interest_start_date,
5601         ADDER_RATE = l_def_krp_rec.adder_rate,
5602         MAXIMUM_RATE = l_def_krp_rec.maximum_rate,
5603         MINIMUM_RATE = l_def_krp_rec.minimum_rate,
5604         PRINCIPAL_BASIS_CODE = l_def_krp_rec.principal_basis_code,
5605         DAYS_IN_A_MONTH_CODE = l_def_krp_rec.days_in_a_month_code,
5606         DAYS_IN_A_YEAR_CODE = l_def_krp_rec.days_in_a_year_code,
5607         INTEREST_BASIS_CODE = l_def_krp_rec.interest_basis_code,
5608         RATE_DELAY_CODE = l_def_krp_rec.rate_delay_code,
5609         RATE_DELAY_FREQUENCY = l_def_krp_rec.rate_delay_frequency,
5610         COMPOUNDING_FREQUENCY_CODE = l_def_krp_rec.compounding_frequency_code,
5611         CALCULATION_FORMULA_ID = l_def_krp_rec.calculation_formula_id,
5612         CATCHUP_BASIS_CODE = l_def_krp_rec.catchup_basis_code,
5613         CATCHUP_START_DATE = l_def_krp_rec.catchup_start_date,
5614         CATCHUP_SETTLEMENT_CODE = l_def_krp_rec.catchup_settlement_code,
5615         RATE_CHANGE_START_DATE = l_def_krp_rec.rate_change_start_date,
5616         RATE_CHANGE_FREQUENCY_CODE = l_def_krp_rec.rate_change_frequency_code,
5617         RATE_CHANGE_VALUE = l_def_krp_rec.rate_change_value,
5618         CONVERSION_OPTION_CODE = l_def_krp_rec.conversion_option_code,
5619         NEXT_CONVERSION_DATE = l_def_krp_rec.next_conversion_date,
5620         CONVERSION_TYPE_CODE = l_def_krp_rec.conversion_type_code,
5621         ATTRIBUTE_CATEGORY = l_def_krp_rec.attribute_category,
5622         ATTRIBUTE1 = l_def_krp_rec.attribute1,
5623         ATTRIBUTE2 = l_def_krp_rec.attribute2,
5624         ATTRIBUTE3 = l_def_krp_rec.attribute3,
5625         ATTRIBUTE4 = l_def_krp_rec.attribute4,
5626         ATTRIBUTE5 = l_def_krp_rec.attribute5,
5627         ATTRIBUTE6 = l_def_krp_rec.attribute6,
5628         ATTRIBUTE7 = l_def_krp_rec.attribute7,
5629         ATTRIBUTE8 = l_def_krp_rec.attribute8,
5630         ATTRIBUTE9 = l_def_krp_rec.attribute9,
5631         ATTRIBUTE10 = l_def_krp_rec.attribute10,
5632         ATTRIBUTE11 = l_def_krp_rec.attribute11,
5633         ATTRIBUTE12 = l_def_krp_rec.attribute12,
5634         ATTRIBUTE13 = l_def_krp_rec.attribute13,
5635         ATTRIBUTE14 = l_def_krp_rec.attribute14,
5636         ATTRIBUTE15 = l_def_krp_rec.attribute15,
5637         CREATED_BY = l_def_krp_rec.created_by,
5638         CREATION_DATE = l_def_krp_rec.creation_date,
5639         LAST_UPDATED_BY = l_def_krp_rec.last_updated_by,
5640         LAST_UPDATE_DATE = l_def_krp_rec.last_update_date,
5641         LAST_UPDATE_LOGIN = l_def_krp_rec.last_update_login,
5642         CATCHUP_FREQUENCY_CODE = l_def_krp_rec.catchup_frequency_code
5643     WHERE PARAMETER_TYPE_CODE = l_def_krp_rec.parameter_type_code      AND EFFECTIVE_FROM_DATE = l_def_krp_rec.effective_from_date      AND KHR_ID = l_def_krp_rec.khr_id;
5644 
5645     x_krp_rec := l_krp_rec;
5646     x_return_status := l_return_status;
5647     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
5648   EXCEPTION
5649     WHEN OKC_API.G_EXCEPTION_ERROR THEN
5650       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5651       (
5652         l_api_name,
5653         G_PKG_NAME,
5654         'OKC_API.G_RET_STS_ERROR',
5655         x_msg_count,
5656         x_msg_data,
5657         '_PVT'
5658       );
5659     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
5660       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5661       (
5662         l_api_name,
5663         G_PKG_NAME,
5664         'OKC_API.G_RET_STS_UNEXP_ERROR',
5665         x_msg_count,
5666         x_msg_data,
5667         '_PVT'
5668       );
5669     WHEN OTHERS THEN
5670       x_return_status := OKC_API.HANDLE_EXCEPTIONS
5671       (
5672         l_api_name,
5673         G_PKG_NAME,
5674         'OTHERS',
5675         x_msg_count,
5676         x_msg_data,
5677         '_PVT'
5678       );
5679   END update_row;
5680   ----------------------------------------
5681   -- update_row for:OKL_K_RATE_PARAMS_V --
5682   ----------------------------------------
5683   PROCEDURE update_row(
5684     p_api_version                  IN NUMBER,
5685     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
5686     x_return_status                OUT NOCOPY VARCHAR2,
5687     x_msg_count                    OUT NOCOPY NUMBER,
5688     x_msg_data                     OUT NOCOPY VARCHAR2,
5689     p_krpv_rec                     IN krpv_rec_type,
5690     x_krpv_rec                     OUT NOCOPY krpv_rec_type) IS
5691 
5692     l_api_version                  CONSTANT NUMBER := 1;
5693     l_api_name                     CONSTANT VARCHAR2(30) := 'V_update_row';
5694     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5695     l_krpv_rec                     krpv_rec_type := p_krpv_rec;
5696     l_def_krpv_rec                 krpv_rec_type;
5697     l_db_krpv_rec                  krpv_rec_type;
5698     l_krp_rec                      krp_rec_type;
5699     lx_krp_rec                     krp_rec_type;
5700     -------------------------------
5701     -- FUNCTION fill_who_columns --
5702     -------------------------------
5703     FUNCTION fill_who_columns (
5704       p_krpv_rec IN krpv_rec_type
5705     ) RETURN krpv_rec_type IS
5706       l_krpv_rec krpv_rec_type := p_krpv_rec;
5707     BEGIN
5708       l_krpv_rec.LAST_UPDATE_DATE := SYSDATE;
5709       l_krpv_rec.LAST_UPDATED_BY := FND_GLOBAL.USER_ID;
5710       l_krpv_rec.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
5711       RETURN(l_krpv_rec);
5712     END fill_who_columns;
5713     ----------------------------------
5714     -- FUNCTION populate_new_record --
5715     ----------------------------------
5716     FUNCTION populate_new_record (
5717       p_krpv_rec IN krpv_rec_type,
5718       x_krpv_rec OUT NOCOPY krpv_rec_type
5719     ) RETURN VARCHAR2 IS
5720       l_row_notfound                 BOOLEAN := TRUE;
5721       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5722     BEGIN
5723       x_krpv_rec := p_krpv_rec;
5724       -- Get current database values
5725       -- NOTE: Never assign the OBJECT_VERSION_NUMBER.  Force the user to pass it
5726       --       so it may be verified through LOCK_ROW.
5727       l_db_krpv_rec := get_rec(p_krpv_rec, l_return_status);
5728       IF (l_return_status = OKC_API.G_RET_STS_SUCCESS) THEN
5729         IF (x_krpv_rec.khr_id = OKC_API.G_MISS_NUM)
5730         THEN
5731           x_krpv_rec.khr_id := l_db_krpv_rec.khr_id;
5732         END IF;
5733         IF (x_krpv_rec.parameter_type_code = OKC_API.G_MISS_CHAR)
5734         THEN
5735           x_krpv_rec.parameter_type_code := l_db_krpv_rec.parameter_type_code;
5736         END IF;
5737         IF (x_krpv_rec.effective_from_date = OKC_API.G_MISS_DATE)
5738         THEN
5739           x_krpv_rec.effective_from_date := l_db_krpv_rec.effective_from_date;
5740         END IF;
5741         IF (x_krpv_rec.effective_to_date = OKC_API.G_MISS_DATE)
5742         THEN
5743           x_krpv_rec.effective_to_date := l_db_krpv_rec.effective_to_date;
5744         END IF;
5745         IF (x_krpv_rec.interest_index_id = OKC_API.G_MISS_NUM)
5746         THEN
5747           x_krpv_rec.interest_index_id := l_db_krpv_rec.interest_index_id;
5748         END IF;
5749         IF (x_krpv_rec.base_rate = OKC_API.G_MISS_NUM)
5750         THEN
5751           x_krpv_rec.base_rate := l_db_krpv_rec.base_rate;
5752         END IF;
5753         IF (x_krpv_rec.interest_start_date = OKC_API.G_MISS_DATE)
5754         THEN
5755           x_krpv_rec.interest_start_date := l_db_krpv_rec.interest_start_date;
5756         END IF;
5757         IF (x_krpv_rec.adder_rate = OKC_API.G_MISS_NUM)
5758         THEN
5759           x_krpv_rec.adder_rate := l_db_krpv_rec.adder_rate;
5760         END IF;
5761         IF (x_krpv_rec.maximum_rate = OKC_API.G_MISS_NUM)
5762         THEN
5763           x_krpv_rec.maximum_rate := l_db_krpv_rec.maximum_rate;
5764         END IF;
5765         IF (x_krpv_rec.minimum_rate = OKC_API.G_MISS_NUM)
5766         THEN
5767           x_krpv_rec.minimum_rate := l_db_krpv_rec.minimum_rate;
5768         END IF;
5769         IF (x_krpv_rec.principal_basis_code = OKC_API.G_MISS_CHAR)
5770         THEN
5771           x_krpv_rec.principal_basis_code := l_db_krpv_rec.principal_basis_code;
5772         END IF;
5773         IF (x_krpv_rec.days_in_a_month_code = OKC_API.G_MISS_CHAR)
5774         THEN
5775           x_krpv_rec.days_in_a_month_code := l_db_krpv_rec.days_in_a_month_code;
5776         END IF;
5777         IF (x_krpv_rec.days_in_a_year_code = OKC_API.G_MISS_CHAR)
5778         THEN
5779           x_krpv_rec.days_in_a_year_code := l_db_krpv_rec.days_in_a_year_code;
5780         END IF;
5781         IF (x_krpv_rec.interest_basis_code = OKC_API.G_MISS_CHAR)
5782         THEN
5783           x_krpv_rec.interest_basis_code := l_db_krpv_rec.interest_basis_code;
5784         END IF;
5785         IF (x_krpv_rec.rate_delay_code = OKC_API.G_MISS_CHAR)
5786         THEN
5787           x_krpv_rec.rate_delay_code := l_db_krpv_rec.rate_delay_code;
5788         END IF;
5789         IF (x_krpv_rec.rate_delay_frequency = OKC_API.G_MISS_NUM)
5790         THEN
5791           x_krpv_rec.rate_delay_frequency := l_db_krpv_rec.rate_delay_frequency;
5792         END IF;
5793         IF (x_krpv_rec.compounding_frequency_code = OKC_API.G_MISS_CHAR)
5794         THEN
5795           x_krpv_rec.compounding_frequency_code := l_db_krpv_rec.compounding_frequency_code;
5796         END IF;
5797         IF (x_krpv_rec.calculation_formula_id = OKC_API.G_MISS_NUM)
5798         THEN
5799           x_krpv_rec.calculation_formula_id := l_db_krpv_rec.calculation_formula_id;
5800         END IF;
5801         IF (x_krpv_rec.catchup_basis_code = OKC_API.G_MISS_CHAR)
5802         THEN
5803           x_krpv_rec.catchup_basis_code := l_db_krpv_rec.catchup_basis_code;
5804         END IF;
5805         IF (x_krpv_rec.catchup_start_date = OKC_API.G_MISS_DATE)
5806         THEN
5807           x_krpv_rec.catchup_start_date := l_db_krpv_rec.catchup_start_date;
5808         END IF;
5809         IF (x_krpv_rec.catchup_settlement_code = OKC_API.G_MISS_CHAR)
5810         THEN
5811           x_krpv_rec.catchup_settlement_code := l_db_krpv_rec.catchup_settlement_code;
5812         END IF;
5813         IF (x_krpv_rec.rate_change_start_date = OKC_API.G_MISS_DATE)
5814         THEN
5815           x_krpv_rec.rate_change_start_date := l_db_krpv_rec.rate_change_start_date;
5816         END IF;
5817         IF (x_krpv_rec.rate_change_frequency_code = OKC_API.G_MISS_CHAR)
5818         THEN
5819           x_krpv_rec.rate_change_frequency_code := l_db_krpv_rec.rate_change_frequency_code;
5820         END IF;
5821         IF (x_krpv_rec.rate_change_value = OKC_API.G_MISS_NUM)
5822         THEN
5823           x_krpv_rec.rate_change_value := l_db_krpv_rec.rate_change_value;
5824         END IF;
5825         IF (x_krpv_rec.conversion_option_code = OKC_API.G_MISS_CHAR)
5826         THEN
5827           x_krpv_rec.conversion_option_code := l_db_krpv_rec.conversion_option_code;
5828         END IF;
5829         IF (x_krpv_rec.next_conversion_date = OKC_API.G_MISS_DATE)
5830         THEN
5831           x_krpv_rec.next_conversion_date := l_db_krpv_rec.next_conversion_date;
5832         END IF;
5833         IF (x_krpv_rec.conversion_type_code = OKC_API.G_MISS_CHAR)
5834         THEN
5835           x_krpv_rec.conversion_type_code := l_db_krpv_rec.conversion_type_code;
5836         END IF;
5837         IF (x_krpv_rec.attribute_category = OKC_API.G_MISS_CHAR)
5838         THEN
5839           x_krpv_rec.attribute_category := l_db_krpv_rec.attribute_category;
5840         END IF;
5841         IF (x_krpv_rec.attribute1 = OKC_API.G_MISS_CHAR)
5842         THEN
5843           x_krpv_rec.attribute1 := l_db_krpv_rec.attribute1;
5844         END IF;
5845         IF (x_krpv_rec.attribute2 = OKC_API.G_MISS_CHAR)
5846         THEN
5847           x_krpv_rec.attribute2 := l_db_krpv_rec.attribute2;
5848         END IF;
5849         IF (x_krpv_rec.attribute3 = OKC_API.G_MISS_CHAR)
5850         THEN
5851           x_krpv_rec.attribute3 := l_db_krpv_rec.attribute3;
5852         END IF;
5853         IF (x_krpv_rec.attribute4 = OKC_API.G_MISS_CHAR)
5854         THEN
5855           x_krpv_rec.attribute4 := l_db_krpv_rec.attribute4;
5856         END IF;
5857         IF (x_krpv_rec.attribute5 = OKC_API.G_MISS_CHAR)
5858         THEN
5859           x_krpv_rec.attribute5 := l_db_krpv_rec.attribute5;
5860         END IF;
5861         IF (x_krpv_rec.attribute6 = OKC_API.G_MISS_CHAR)
5862         THEN
5863           x_krpv_rec.attribute6 := l_db_krpv_rec.attribute6;
5864         END IF;
5865         IF (x_krpv_rec.attribute7 = OKC_API.G_MISS_CHAR)
5866         THEN
5867           x_krpv_rec.attribute7 := l_db_krpv_rec.attribute7;
5868         END IF;
5869         IF (x_krpv_rec.attribute8 = OKC_API.G_MISS_CHAR)
5870         THEN
5871           x_krpv_rec.attribute8 := l_db_krpv_rec.attribute8;
5872         END IF;
5873         IF (x_krpv_rec.attribute9 = OKC_API.G_MISS_CHAR)
5874         THEN
5875           x_krpv_rec.attribute9 := l_db_krpv_rec.attribute9;
5876         END IF;
5877         IF (x_krpv_rec.attribute10 = OKC_API.G_MISS_CHAR)
5878         THEN
5879           x_krpv_rec.attribute10 := l_db_krpv_rec.attribute10;
5880         END IF;
5881         IF (x_krpv_rec.attribute11 = OKC_API.G_MISS_CHAR)
5882         THEN
5883           x_krpv_rec.attribute11 := l_db_krpv_rec.attribute11;
5884         END IF;
5885         IF (x_krpv_rec.attribute12 = OKC_API.G_MISS_CHAR)
5886         THEN
5887           x_krpv_rec.attribute12 := l_db_krpv_rec.attribute12;
5888         END IF;
5889         IF (x_krpv_rec.attribute13 = OKC_API.G_MISS_CHAR)
5890         THEN
5891           x_krpv_rec.attribute13 := l_db_krpv_rec.attribute13;
5892         END IF;
5893         IF (x_krpv_rec.attribute14 = OKC_API.G_MISS_CHAR)
5894         THEN
5895           x_krpv_rec.attribute14 := l_db_krpv_rec.attribute14;
5896         END IF;
5897         IF (x_krpv_rec.attribute15 = OKC_API.G_MISS_CHAR)
5898         THEN
5899           x_krpv_rec.attribute15 := l_db_krpv_rec.attribute15;
5900         END IF;
5901         IF (x_krpv_rec.created_by = OKC_API.G_MISS_NUM)
5902         THEN
5903           x_krpv_rec.created_by := l_db_krpv_rec.created_by;
5904         END IF;
5905         IF (x_krpv_rec.creation_date = OKC_API.G_MISS_DATE)
5906         THEN
5907           x_krpv_rec.creation_date := l_db_krpv_rec.creation_date;
5908         END IF;
5909         IF (x_krpv_rec.last_updated_by = OKC_API.G_MISS_NUM)
5910         THEN
5911           x_krpv_rec.last_updated_by := l_db_krpv_rec.last_updated_by;
5912         END IF;
5913         IF (x_krpv_rec.last_update_date = OKC_API.G_MISS_DATE)
5914         THEN
5915           x_krpv_rec.last_update_date := l_db_krpv_rec.last_update_date;
5916         END IF;
5917         IF (x_krpv_rec.last_update_login = OKC_API.G_MISS_NUM)
5918         THEN
5919           x_krpv_rec.last_update_login := l_db_krpv_rec.last_update_login;
5920         END IF;
5921         IF (x_krpv_rec.catchup_frequency_code = OKC_API.G_MISS_CHAR)
5922         THEN
5923           x_krpv_rec.catchup_frequency_code := l_db_krpv_rec.catchup_frequency_code;
5924         END IF;
5925       END IF;
5926       RETURN(l_return_status);
5927     END populate_new_record;
5928     --------------------------------------------
5929     -- Set_Attributes for:OKL_K_RATE_PARAMS_V --
5930     --------------------------------------------
5931     FUNCTION Set_Attributes (
5932       p_krpv_rec IN krpv_rec_type,
5933       x_krpv_rec OUT NOCOPY krpv_rec_type
5934     ) RETURN VARCHAR2 IS
5935       l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
5936     BEGIN
5937       x_krpv_rec := p_krpv_rec;
5938       RETURN(l_return_status);
5939     END Set_Attributes;
5940   BEGIN
5941     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
5942                                               G_PKG_NAME,
5943                                               p_init_msg_list,
5944                                               l_api_version,
5945                                               p_api_version,
5946                                               '_PVT',
5947                                               x_return_status);
5948     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5949       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5950     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
5951       RAISE OKC_API.G_EXCEPTION_ERROR;
5952     END IF;
5953     --- Setting item attributes
5954     l_return_status := Set_Attributes(
5955       p_krpv_rec,                        -- IN
5956       x_krpv_rec);                       -- OUT
5957     --- If any errors happen abort API
5958     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5959       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5960     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
5961       RAISE OKC_API.G_EXCEPTION_ERROR;
5962     END IF;
5963     l_return_status := populate_new_record(l_krpv_rec, l_def_krpv_rec);
5964     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5965       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5966     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
5967       RAISE OKC_API.G_EXCEPTION_ERROR;
5968     END IF;
5969     l_def_krpv_rec := fill_who_columns(l_def_krpv_rec);
5970     --- Validate all non-missing attributes (Item Level Validation)
5971     l_return_status := Validate_Attributes(l_def_krpv_rec);
5972     --- If any errors happen abort API
5973     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5974       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5975     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
5976       RAISE OKC_API.G_EXCEPTION_ERROR;
5977     END IF;
5978     l_return_status := Validate_Record(l_def_krpv_rec, l_db_krpv_rec);
5979     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5980       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5981     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
5982       RAISE OKC_API.G_EXCEPTION_ERROR;
5983     END IF;
5984 /****Commented**********
5985     --avsingh
5986     -- Lock the Record
5987     lock_row(
5988       p_api_version                  => p_api_version,
5989       p_init_msg_list                => p_init_msg_list,
5990       x_return_status                => l_return_status,
5991       x_msg_count                    => x_msg_count,
5992       x_msg_data                     => x_msg_data,
5993       p_krpv_rec                     => p_krpv_rec);
5994     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
5995       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
5996     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
5997       RAISE OKC_API.G_EXCEPTION_ERROR;
5998     END IF;
5999 **************************/
6000     -----------------------------------------
6001     -- Move VIEW record to "Child" records --
6002     -----------------------------------------
6003     migrate(l_def_krpv_rec, l_krp_rec);
6004     -----------------------------------------------
6005     -- Call the UPDATE_ROW for each child record --
6006     -----------------------------------------------
6007     update_row(
6008       p_init_msg_list,
6009       l_return_status,
6010       x_msg_count,
6011       x_msg_data,
6012       l_krp_rec,
6013       lx_krp_rec
6014     );
6015     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
6016       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6017     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
6018       RAISE OKC_API.G_EXCEPTION_ERROR;
6019     END IF;
6020     migrate(lx_krp_rec, l_def_krpv_rec);
6021     x_krpv_rec := l_def_krpv_rec;
6022     x_return_status := l_return_status;
6023     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
6024   EXCEPTION
6025     WHEN OKC_API.G_EXCEPTION_ERROR THEN
6026       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6027       (
6028         l_api_name,
6029         G_PKG_NAME,
6030         'OKC_API.G_RET_STS_ERROR',
6031         x_msg_count,
6032         x_msg_data,
6033         '_PVT'
6034       );
6035     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6036       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6037       (
6038         l_api_name,
6039         G_PKG_NAME,
6040         'OKC_API.G_RET_STS_UNEXP_ERROR',
6041         x_msg_count,
6042         x_msg_data,
6043         '_PVT'
6044       );
6045     WHEN OTHERS THEN
6046       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6047       (
6048         l_api_name,
6049         G_PKG_NAME,
6050         'OTHERS',
6051         x_msg_count,
6052         x_msg_data,
6053         '_PVT'
6054       );
6055   END update_row;
6056   ----------------------------------------
6057   -- PL/SQL TBL update_row for:krpv_tbl --
6058   ----------------------------------------
6059   PROCEDURE update_row(
6060     p_api_version                  IN NUMBER,
6061     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
6062     x_return_status                OUT NOCOPY VARCHAR2,
6063     x_msg_count                    OUT NOCOPY NUMBER,
6064     x_msg_data                     OUT NOCOPY VARCHAR2,
6065     p_krpv_tbl                     IN krpv_tbl_type,
6066     x_krpv_tbl                     OUT NOCOPY krpv_tbl_type,
6067     px_error_tbl                   IN OUT NOCOPY OKC_API.ERROR_TBL_TYPE) IS
6068 
6069     l_api_version                  CONSTANT NUMBER := 1;
6070     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_update_row';
6071     i                              NUMBER := 0;
6072   BEGIN
6073     OKC_API.init_msg_list(p_init_msg_list);
6074     -- Make sure PL/SQL table has records in it before passing
6075     IF (p_krpv_tbl.COUNT > 0) THEN
6076       i := p_krpv_tbl.FIRST;
6077       LOOP
6078         DECLARE
6079           l_error_rec         OKC_API.ERROR_REC_TYPE;
6080         BEGIN
6081           l_error_rec.api_name := l_api_name;
6082           l_error_rec.api_package := G_PKG_NAME;
6083           l_error_rec.idx := i;
6084           update_row (
6085             p_api_version                  => p_api_version,
6086             p_init_msg_list                => OKC_API.G_FALSE,
6087             x_return_status                => l_error_rec.error_type,
6088             x_msg_count                    => l_error_rec.msg_count,
6089             x_msg_data                     => l_error_rec.msg_data,
6090             p_krpv_rec                     => p_krpv_tbl(i),
6091             x_krpv_rec                     => x_krpv_tbl(i));
6092           IF (l_error_rec.error_type <> OKC_API.G_RET_STS_SUCCESS) THEN
6093             l_error_rec.sqlcode := SQLCODE;
6094             load_error_tbl(l_error_rec, px_error_tbl);
6095           ELSE
6096             x_msg_count := l_error_rec.msg_count;
6097             x_msg_data := l_error_rec.msg_data;
6098           END IF;
6099         EXCEPTION
6100           WHEN OKC_API.G_EXCEPTION_ERROR THEN
6101             l_error_rec.error_type := OKC_API.G_RET_STS_ERROR;
6102             l_error_rec.sqlcode := SQLCODE;
6103             load_error_tbl(l_error_rec, px_error_tbl);
6104           WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6105             l_error_rec.error_type := OKC_API.G_RET_STS_UNEXP_ERROR;
6106             l_error_rec.sqlcode := SQLCODE;
6107             load_error_tbl(l_error_rec, px_error_tbl);
6108           WHEN OTHERS THEN
6109             l_error_rec.error_type := 'OTHERS';
6110             l_error_rec.sqlcode := SQLCODE;
6111             load_error_tbl(l_error_rec, px_error_tbl);
6112         END;
6113         EXIT WHEN (i = p_krpv_tbl.LAST);
6114         i := p_krpv_tbl.NEXT(i);
6115       END LOOP;
6116     END IF;
6117     -- Loop through the error_tbl to find the error with the highest severity
6118     -- and return it.
6119     x_return_status := find_highest_exception(px_error_tbl);
6120     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
6121   EXCEPTION
6122     WHEN OKC_API.G_EXCEPTION_ERROR THEN
6123       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6124       (
6125         l_api_name,
6126         G_PKG_NAME,
6127         'OKC_API.G_RET_STS_ERROR',
6128         x_msg_count,
6129         x_msg_data,
6130         '_PVT'
6131       );
6132     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6133       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6134       (
6135         l_api_name,
6136         G_PKG_NAME,
6137         'OKC_API.G_RET_STS_UNEXP_ERROR',
6138         x_msg_count,
6139         x_msg_data,
6140         '_PVT'
6141       );
6142     WHEN OTHERS THEN
6143       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6144       (
6145         l_api_name,
6146         G_PKG_NAME,
6147         'OTHERS',
6148         x_msg_count,
6149         x_msg_data,
6150         '_PVT'
6151       );
6152   END update_row;
6153 
6154   ----------------------------------------
6155   -- PL/SQL TBL update_row for:KRPV_TBL --
6156   ----------------------------------------
6157   PROCEDURE update_row(
6158     p_api_version                  IN NUMBER,
6159     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
6160     x_return_status                OUT NOCOPY VARCHAR2,
6161     x_msg_count                    OUT NOCOPY NUMBER,
6162     x_msg_data                     OUT NOCOPY VARCHAR2,
6163     p_krpv_tbl                     IN krpv_tbl_type,
6164     x_krpv_tbl                     OUT NOCOPY krpv_tbl_type) IS
6165 
6166     l_api_version                  CONSTANT NUMBER := 1;
6167     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_update_row';
6168     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6169     l_error_tbl                    OKC_API.ERROR_TBL_TYPE;
6170   BEGIN
6171     OKC_API.init_msg_list(p_init_msg_list);
6172     -- Make sure PL/SQL table has records in it before passing
6173     IF (p_krpv_tbl.COUNT > 0) THEN
6174       update_row (
6175         p_api_version                  => p_api_version,
6176         p_init_msg_list                => OKC_API.G_FALSE,
6177         x_return_status                => x_return_status,
6178         x_msg_count                    => x_msg_count,
6179         x_msg_data                     => x_msg_data,
6180         p_krpv_tbl                     => p_krpv_tbl,
6181         x_krpv_tbl                     => x_krpv_tbl,
6182         px_error_tbl                   => l_error_tbl);
6183     END IF;
6184     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
6185   EXCEPTION
6186     WHEN OKC_API.G_EXCEPTION_ERROR THEN
6187       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6188       (
6189         l_api_name,
6190         G_PKG_NAME,
6191         'OKC_API.G_RET_STS_ERROR',
6192         x_msg_count,
6193         x_msg_data,
6194         '_PVT'
6195       );
6196     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6197       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6198       (
6199         l_api_name,
6200         G_PKG_NAME,
6201         'OKC_API.G_RET_STS_UNEXP_ERROR',
6202         x_msg_count,
6203         x_msg_data,
6204         '_PVT'
6205       );
6206     WHEN OTHERS THEN
6207       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6208       (
6209         l_api_name,
6210         G_PKG_NAME,
6211         'OTHERS',
6212         x_msg_count,
6213         x_msg_data,
6214         '_PVT'
6215       );
6216   END update_row;
6217 
6218   ---------------------------------------------------------------------------
6219   -- PROCEDURE delete_row
6220   ---------------------------------------------------------------------------
6221   --------------------------------------
6222   -- delete_row for:OKL_K_RATE_PARAMS --
6223   --------------------------------------
6224   PROCEDURE delete_row(
6225     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
6226     x_return_status                OUT NOCOPY VARCHAR2,
6227     x_msg_count                    OUT NOCOPY NUMBER,
6228     x_msg_data                     OUT NOCOPY VARCHAR2,
6229     p_krp_rec                      IN krp_rec_type) IS
6230 
6231     l_api_version                  CONSTANT NUMBER := 1;
6232     l_api_name                     CONSTANT VARCHAR2(30) := 'B_delete_row';
6233     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6234     l_krp_rec                      krp_rec_type := p_krp_rec;
6235     l_row_notfound                 BOOLEAN := TRUE;
6236   BEGIN
6237     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
6238                                               p_init_msg_list,
6239                                               '_PVT',
6240                                               x_return_status);
6241     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
6242       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6243     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
6244       RAISE OKC_API.G_EXCEPTION_ERROR;
6245     END IF;
6246 
6247     DELETE FROM OKL_K_RATE_PARAMS
6248      WHERE PARAMETER_TYPE_CODE = p_krp_rec.parameter_type_code
6249        AND EFFECTIVE_FROM_DATE = p_krp_rec.effective_from_date
6250        AND KHR_ID = p_krp_rec.khr_id;
6251 
6252     x_return_status := l_return_status;
6253     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
6254   EXCEPTION
6255     WHEN OKC_API.G_EXCEPTION_ERROR THEN
6256       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6257       (
6258         l_api_name,
6259         G_PKG_NAME,
6260         'OKC_API.G_RET_STS_ERROR',
6261         x_msg_count,
6262         x_msg_data,
6263         '_PVT'
6264       );
6265     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6266       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6267       (
6268         l_api_name,
6269         G_PKG_NAME,
6270         'OKC_API.G_RET_STS_UNEXP_ERROR',
6271         x_msg_count,
6272         x_msg_data,
6273         '_PVT'
6274       );
6275     WHEN OTHERS THEN
6276       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6277       (
6278         l_api_name,
6279         G_PKG_NAME,
6280         'OTHERS',
6281         x_msg_count,
6282         x_msg_data,
6283         '_PVT'
6284       );
6285   END delete_row;
6286   ----------------------------------------
6287   -- delete_row for:OKL_K_RATE_PARAMS_V --
6288   ----------------------------------------
6289   PROCEDURE delete_row(
6290     p_api_version                  IN NUMBER,
6291     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
6292     x_return_status                OUT NOCOPY VARCHAR2,
6293     x_msg_count                    OUT NOCOPY NUMBER,
6294     x_msg_data                     OUT NOCOPY VARCHAR2,
6295     p_krpv_rec                     IN krpv_rec_type) IS
6296 
6297     l_api_version                  CONSTANT NUMBER := 1;
6298     l_api_name                     CONSTANT VARCHAR2(30) := 'V_delete_row';
6299     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6300     l_krpv_rec                     krpv_rec_type := p_krpv_rec;
6301     l_krp_rec                      krp_rec_type;
6302   BEGIN
6303     l_return_status := OKC_API.START_ACTIVITY(l_api_name,
6304                                               G_PKG_NAME,
6305                                               p_init_msg_list,
6306                                               l_api_version,
6307                                               p_api_version,
6308                                               '_PVT',
6309                                               x_return_status);
6310     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
6311       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6312     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
6313       RAISE OKC_API.G_EXCEPTION_ERROR;
6314     END IF;
6315     -----------------------------------------
6316     -- Move VIEW record to "Child" records --
6317     -----------------------------------------
6318     migrate(l_krpv_rec, l_krp_rec);
6319     -----------------------------------------------
6320     -- Call the DELETE_ROW for each child record --
6321     -----------------------------------------------
6322     delete_row(
6323       p_init_msg_list,
6324       l_return_status,
6325       x_msg_count,
6326       x_msg_data,
6327       l_krp_rec
6328     );
6329     IF (l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) THEN
6330       RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
6331     ELSIF (l_return_status = OKC_API.G_RET_STS_ERROR) THEN
6332       RAISE OKC_API.G_EXCEPTION_ERROR;
6333     END IF;
6334     x_return_status := l_return_status;
6335     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
6336   EXCEPTION
6337     WHEN OKC_API.G_EXCEPTION_ERROR THEN
6338       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6339       (
6340         l_api_name,
6341         G_PKG_NAME,
6342         'OKC_API.G_RET_STS_ERROR',
6343         x_msg_count,
6344         x_msg_data,
6345         '_PVT'
6346       );
6347     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6348       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6349       (
6350         l_api_name,
6351         G_PKG_NAME,
6352         'OKC_API.G_RET_STS_UNEXP_ERROR',
6353         x_msg_count,
6354         x_msg_data,
6355         '_PVT'
6356       );
6357     WHEN OTHERS THEN
6358       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6359       (
6360         l_api_name,
6361         G_PKG_NAME,
6362         'OTHERS',
6363         x_msg_count,
6364         x_msg_data,
6365         '_PVT'
6366       );
6367   END delete_row;
6368   ---------------------------------------------------
6369   -- PL/SQL TBL delete_row for:OKL_K_RATE_PARAMS_V --
6370   ---------------------------------------------------
6371   PROCEDURE delete_row(
6372     p_api_version                  IN NUMBER,
6373     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
6374     x_return_status                OUT NOCOPY VARCHAR2,
6375     x_msg_count                    OUT NOCOPY NUMBER,
6376     x_msg_data                     OUT NOCOPY VARCHAR2,
6377     p_krpv_tbl                     IN krpv_tbl_type,
6378     px_error_tbl                   IN OUT NOCOPY OKC_API.ERROR_TBL_TYPE) IS
6379 
6380     l_api_version                  CONSTANT NUMBER := 1;
6381     l_api_name                     CONSTANT VARCHAR2(30) := 'V_error_tbl_delete_row';
6382     i                              NUMBER := 0;
6383   BEGIN
6384     OKC_API.init_msg_list(p_init_msg_list);
6385     -- Make sure PL/SQL table has records in it before passing
6386     IF (p_krpv_tbl.COUNT > 0) THEN
6387       i := p_krpv_tbl.FIRST;
6388       LOOP
6389         DECLARE
6390           l_error_rec         OKC_API.ERROR_REC_TYPE;
6391         BEGIN
6392           l_error_rec.api_name := l_api_name;
6393           l_error_rec.api_package := G_PKG_NAME;
6394           l_error_rec.idx := i;
6395           delete_row (
6396             p_api_version                  => p_api_version,
6397             p_init_msg_list                => OKC_API.G_FALSE,
6398             x_return_status                => l_error_rec.error_type,
6399             x_msg_count                    => l_error_rec.msg_count,
6400             x_msg_data                     => l_error_rec.msg_data,
6401             p_krpv_rec                     => p_krpv_tbl(i));
6402           IF (l_error_rec.error_type <> OKC_API.G_RET_STS_SUCCESS) THEN
6403             l_error_rec.sqlcode := SQLCODE;
6404             load_error_tbl(l_error_rec, px_error_tbl);
6405           ELSE
6406             x_msg_count := l_error_rec.msg_count;
6407             x_msg_data := l_error_rec.msg_data;
6408           END IF;
6409         EXCEPTION
6410           WHEN OKC_API.G_EXCEPTION_ERROR THEN
6411             l_error_rec.error_type := OKC_API.G_RET_STS_ERROR;
6412             l_error_rec.sqlcode := SQLCODE;
6413             load_error_tbl(l_error_rec, px_error_tbl);
6414           WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6415             l_error_rec.error_type := OKC_API.G_RET_STS_UNEXP_ERROR;
6416             l_error_rec.sqlcode := SQLCODE;
6417             load_error_tbl(l_error_rec, px_error_tbl);
6418           WHEN OTHERS THEN
6419             l_error_rec.error_type := 'OTHERS';
6420             l_error_rec.sqlcode := SQLCODE;
6421             load_error_tbl(l_error_rec, px_error_tbl);
6422         END;
6423         EXIT WHEN (i = p_krpv_tbl.LAST);
6424         i := p_krpv_tbl.NEXT(i);
6425       END LOOP;
6426     END IF;
6427     -- Loop through the error_tbl to find the error with the highest severity
6428     -- and return it.
6429     x_return_status := find_highest_exception(px_error_tbl);
6430     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
6431   EXCEPTION
6432     WHEN OKC_API.G_EXCEPTION_ERROR THEN
6433       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6434       (
6435         l_api_name,
6436         G_PKG_NAME,
6437         'OKC_API.G_RET_STS_ERROR',
6438         x_msg_count,
6439         x_msg_data,
6440         '_PVT'
6441       );
6442     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6443       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6444       (
6445         l_api_name,
6446         G_PKG_NAME,
6447         'OKC_API.G_RET_STS_UNEXP_ERROR',
6448         x_msg_count,
6449         x_msg_data,
6450         '_PVT'
6451       );
6452     WHEN OTHERS THEN
6453       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6454       (
6455         l_api_name,
6456         G_PKG_NAME,
6457         'OTHERS',
6458         x_msg_count,
6459         x_msg_data,
6460         '_PVT'
6461       );
6462   END delete_row;
6463 
6464   ---------------------------------------------------
6465   -- PL/SQL TBL delete_row for:OKL_K_RATE_PARAMS_V --
6466   ---------------------------------------------------
6467   PROCEDURE delete_row(
6468     p_api_version                  IN NUMBER,
6469     p_init_msg_list                IN VARCHAR2 DEFAULT OKC_API.G_FALSE,
6470     x_return_status                OUT NOCOPY VARCHAR2,
6471     x_msg_count                    OUT NOCOPY NUMBER,
6472     x_msg_data                     OUT NOCOPY VARCHAR2,
6473     p_krpv_tbl                     IN krpv_tbl_type) IS
6474 
6475     l_api_version                  CONSTANT NUMBER := 1;
6476     l_api_name                     CONSTANT VARCHAR2(30) := 'V_tbl_delete_row';
6477     l_return_status                VARCHAR2(1) := OKC_API.G_RET_STS_SUCCESS;
6478     l_error_tbl                    OKC_API.ERROR_TBL_TYPE;
6479   BEGIN
6480     OKC_API.init_msg_list(p_init_msg_list);
6481     -- Make sure PL/SQL table has records in it before passing
6482     IF (p_krpv_tbl.COUNT > 0) THEN
6483       delete_row (
6484         p_api_version                  => p_api_version,
6485         p_init_msg_list                => OKC_API.G_FALSE,
6486         x_return_status                => x_return_status,
6487         x_msg_count                    => x_msg_count,
6488         x_msg_data                     => x_msg_data,
6489         p_krpv_tbl                     => p_krpv_tbl,
6490         px_error_tbl                   => l_error_tbl);
6491     END IF;
6492     OKC_API.END_ACTIVITY(x_msg_count, x_msg_data);
6493   EXCEPTION
6494     WHEN OKC_API.G_EXCEPTION_ERROR THEN
6495       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6496       (
6497         l_api_name,
6498         G_PKG_NAME,
6499         'OKC_API.G_RET_STS_ERROR',
6500         x_msg_count,
6501         x_msg_data,
6502         '_PVT'
6503       );
6504     WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
6505       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6506       (
6507         l_api_name,
6508         G_PKG_NAME,
6509         'OKC_API.G_RET_STS_UNEXP_ERROR',
6510         x_msg_count,
6511         x_msg_data,
6512         '_PVT'
6513       );
6514     WHEN OTHERS THEN
6515       x_return_status := OKC_API.HANDLE_EXCEPTIONS
6516       (
6517         l_api_name,
6518         G_PKG_NAME,
6519         'OTHERS',
6520         x_msg_count,
6521         x_msg_data,
6522         '_PVT'
6523       );
6524   END delete_row;
6525 
6526 END OKL_KRP_PVT;