DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKL_PAYMENT_SPLIT_PVT

Source


1 PACKAGE BODY OKL_PAYMENT_SPLIT_PVT AS
2 /* $Header: OKLRPMSB.pls 120.4.12010000.2 2008/11/25 09:26:53 nikshah ship $*/
3 
4     G_MODULE VARCHAR2(255) := 'okl.stream.esg.okl_esg_transport_pvt';
5     G_DEBUG_ENABLED CONSTANT VARCHAR2(10) := OKL_DEBUG_PUB.CHECK_LOG_ENABLED;
6     G_IS_DEBUG_STATEMENT_ON BOOLEAN;
7 
8 -- Global Variables
9    G_INIT_NUMBER NUMBER := -9999;
10    G_PKG_NAME    CONSTANT VARCHAR2(200) := 'OKL_PAYMENT_SPLIT_PVT';
11    G_APP_NAME    CONSTANT VARCHAR2(3)   :=  OKL_API.G_APP_NAME;
12    G_API_TYPE    CONSTANT VARCHAR2(4)   := '_PVT';
13 
14 
15    subtype rgpv_rec_type IS OKL_RULE_PUB.rgpv_rec_type;
16    subtype rulv_rec_type IS OKL_RULE_PUB.rulv_rec_type;
17    subtype rgpv_tbl_type IS OKL_RULE_PUB.rgpv_tbl_type;
18    subtype rulv_tbl_type IS OKL_RULE_PUB.rulv_tbl_type;
19 
20 ------------------------------------------------------------------------------
21 
22 ------------------------------------------------------------------------------
23 -- PROCEDURE Report_Error
24 -- It is a generalized routine to display error on Concurrent Manager Log file
25 -- Calls:
26 -- Called by:
27 ------------------------------------------------------------------------------
28 
29   PROCEDURE Report_Error(
30                          x_msg_count OUT NOCOPY NUMBER,
31                          x_msg_data  OUT NOCOPY VARCHAR2
32                         ) IS
33 
34   x_msg_index_out NUMBER;
35   x_msg_out       VARCHAR2(2000);
36 
37   BEGIN
38 
39     okl_api.end_activity(
40                          X_msg_count => x_msg_count,
41                          X_msg_data  => x_msg_data
42                         );
43 
44     FOR i in 1..x_msg_count
45     LOOP
46       FND_MSG_PUB.GET(
47                       p_msg_index     => i,
48                       p_encoded       => FND_API.G_FALSE,
49                       p_data          => x_msg_data,
50                       p_msg_index_out => x_msg_index_out
51                      );
52 
53     END LOOP;
54     return;
55   EXCEPTION
56     WHEN OTHERS THEN
57       NULL;
58   END Report_Error;
59 
60 ------------------------------------------------------------------------------
61 -- PROCEDURE get_fee_subline_cap_amount
62 --
63 --  This procedure returns Capital Amount from FEE Sub line corresponding
64 --  to Financial Asset Line, passed as parameter
65 --
66 -- Calls:
67 -- Called By:
68 ------------------------------------------------------------------------------
69    PROCEDURE get_fee_subline_cap_amount(
70                                         x_return_status OUT NOCOPY VARCHAR2,
71                                         x_msg_count     OUT NOCOPY NUMBER,
72                                         x_msg_data      OUT NOCOPY VARCHAR2,
73                                         p_fin_line_id   IN  NUMBER,
74                                         x_fee_cap_amt   OUT NOCOPY NUMBER
75                                        ) IS
76 
77    l_proc_name  VARCHAR2(35) := 'GET_FEE_SUBLINE_CAP_AMOUNT';
78    l_cap_amount NUMBER;
79 
80    CURSOR cap_csr (p_fin_line_id NUMBER) IS
81    SELECT SUM(NVL(okl1.capital_amount,0))
82    FROM   okl_k_lines_full_v okl1, -- fee sub line
83           okl_k_lines_full_v okl2, -- fee top line
84           okc_k_items_v item1,
85           okc_k_items_v item2,
86           okl_strmtyp_source_v stream
87    WHERE  item1.object1_id1       = TO_CHAR(p_fin_line_id) -- Bug 3830454
88    AND    item1.jtot_object1_code = 'OKX_COVASST'       -- Bug 3830454
89    AND    stream.capitalize_yn = 'Y'
90    AND    okl1.id              = item1.cle_id
91    AND    okl2.id              = okl1.cle_id
92    AND    okl2.id              = item2.cle_id
93    AND    item2.object1_id1    = stream.id1;
94 
95    BEGIN
96      IF (G_DEBUG_ENABLED = 'Y') THEN
97        G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
98      END IF;
99       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
100               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
101       END IF;
102       x_return_status := OKC_API.G_RET_STS_SUCCESS;
103 
104       l_cap_amount := 0;
105       OPEN cap_csr(p_fin_line_id);
106       FETCH cap_csr INTO l_cap_amount;
107       IF cap_csr%NOTFOUND THEN
108 
109          l_cap_amount := 0;
110       END IF;
111 
112       CLOSE cap_csr;
113 
114       x_fee_cap_amt := l_cap_amount;
115 
116       RETURN;
117    END get_fee_subline_cap_amount;
118 
119 ------------------------------------------------------------------------------
120 -- PROCEDURE get_currency_precision
121 --
122 --  This procedure returns Precision for a currency attached at header level
123 --
124 -- Calls:
125 -- Called By:
126 ------------------------------------------------------------------------------
127    PROCEDURE get_currency_precision (
128                                      x_return_status OUT NOCOPY VARCHAR2,
129                                      p_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE,
130                                      x_precision     OUT NOCOPY FND_CURRENCIES.PRECISION%TYPE
131                                     ) IS
132    CURSOR chr_csr (p_chr_id NUMBER) IS
133    SELECT currency_code
134    FROM   okc_k_headers_v
135    WHERE  id = p_chr_id;
136 
137    CURSOR curr_csr (p_curr_code VARCHAR2) IS
138    SELECT precision
139    FROM   fnd_currencies
140    WHERE  currency_code = p_curr_code;
141 
142    curr_failed     EXCEPTION;
143    l_currency_code FND_CURRENCIES.CURRENCY_CODE%TYPE;
144    l_precision     FND_CURRENCIES.PRECISION%TYPE;
145 
146    BEGIN
147 
148       x_return_status := OKC_API.G_RET_STS_SUCCESS;
149       OPEN chr_csr(p_chr_id);
150       FETCH chr_csr INTO l_currency_code;
151       IF chr_csr%NOTFOUND THEN
152          okl_api.set_message(
153                              G_APP_NAME,
154                              G_LLA_CHR_ID
155                             );
156          RAISE curr_failed;
157       END IF;
158 
159       CLOSE chr_csr;
160 
161       OPEN curr_csr(l_currency_code);
162       FETCH curr_csr INTO l_precision;
163       IF curr_csr%NOTFOUND THEN
164          okl_api.set_message(
165                              G_APP_NAME,
166                              G_INVALID_VALUE,
167                              'COL_NAME',
168                              'CURRENCY CODE'
169                             );
170          RAISE curr_failed;
171       END IF;
172       CLOSE curr_csr;
173 
174       x_precision := l_precision;
175       RETURN;
176 
177    EXCEPTION
178       WHEN curr_failed THEN
179          x_return_status := OKC_API.G_RET_STS_ERROR;
180    END get_currency_precision;
181 
182 ------------------------------------------------------------------------------
183 -- PROCEDURE gen_line_rule
184 --
185 --  This procedure generates line rule (SLH, SLL) after applying the payment
186 --  amount. Calculation = (Rule Payment Amount * Line Capital Amount) /
187 --                         Total Capital Amount
188 --  It returns line level rule information in x_strm_tbl table
189 -- Calls:
190 -- Called By:
191 ------------------------------------------------------------------------------
192    PROCEDURE gen_line_rule(
193                                x_return_status           OUT NOCOPY VARCHAR2,
194                                x_msg_count               OUT NOCOPY NUMBER,
195                                x_msg_data                OUT NOCOPY VARCHAR2,
196                                p_chr_id                  IN  OKC_K_HEADERS_V.ID%TYPE,
197                                p_cle_id                  IN  NUMBER,
198                                p_fin_line_capital_amount IN  NUMBER,
199                                p_tot_capital_amount      IN  NUMBER,
200                                p_precision               IN  FND_CURRENCIES.PRECISION%TYPE,
201                                p_payment_type            IN  VARCHAR2,
202                                p_amount                  IN  NUMBER,
203                                p_period                  IN  NUMBER,
204                                p_start_date              IN  DATE,
205                                p_frequency               IN  VARCHAR2,
206                                p_strm_count              IN  NUMBER,
207                                x_strm_tbl                OUT NOCOPY okl_mass_rebook_pub.strm_lalevl_tbl_type
208                               ) IS
209    l_proc_name VARCHAR2(35) := 'GEN_LINE_RULE';
210 
211    CURSOR strm_csr (p_strm_code VARCHAR2) IS
212    SELECT ID1
213    FROM   okl_strmtyp_source_v
214    WHERE  code = p_strm_code;
215 
216    -- _new indicates the rules that got created under Line as part of payment applications
217    x_new_rgpv_rec      rgpv_rec_type;
218    x_new_slh_rulv_rec  rulv_rec_type;
219 
220    x_slh_rulv_tbl      rulv_tbl_type;
221    x_slh_rule_count    NUMBER;
222 
223    x_sll_rulv_tbl      rulv_tbl_type;
224    x_sll_rule_count    NUMBER;
225 
226    x_rulv_rec          rulv_rec_type;
227 
228    l_rgpv_rec          rgpv_rec_type;
229    l_slh_rulv_rec      rulv_rec_type;
230    l_sll_rulv_rec      rulv_rec_type;
231    l_fee_line_capital_amount NUMBER;
232    l_line_capital_amount     NUMBER;
233    l_rgp_id            NUMBER;
234 
235    l_strm_count        NUMBER := 0;
236    l_strm_id           NUMBER;
237    rule_failed         EXCEPTION;
238 
239    BEGIN
240      IF (G_DEBUG_ENABLED = 'Y') THEN
241        G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
242      END IF;
243       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
244               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
245       END IF;
246 
247       x_return_status := OKC_API.G_RET_STS_SUCCESS;
248 
249       l_strm_count := p_strm_count + 1;
250 
251       --debug_message('gen, srtm_count 1 :'||l_strm_count);
252 
253       l_strm_id := NULL;
254       OPEN strm_csr (p_payment_type);
255       FETCH strm_csr INTO l_strm_id;
256       CLOSE strm_csr;
257 
258       IF (l_strm_id IS NULL) THEN
259          RAISE rule_failed;
260       END IF;
261 
262       -- Populate SLH for this line
263       x_strm_tbl(l_strm_count).chr_id := p_chr_id;
264       x_strm_tbl(l_strm_count).cle_id := p_cle_id;
265 
266       x_strm_tbl(l_strm_count).rule_information_category := 'LASLH';
267       x_strm_tbl(l_strm_count).object1_id1 := l_strm_id;
268       x_strm_tbl(l_strm_count).jtot_object1_code := 'OKL_STRMTYP';
269 
270       -- Now populate SLL for the same line
271       l_strm_count := l_strm_count + 1;
272 
273       x_strm_tbl(l_strm_count).chr_id := p_chr_id;
274       x_strm_tbl(l_strm_count).cle_id := p_cle_id;
275 
276       x_strm_tbl(l_strm_count).rule_information_category := 'LASLL';
277       x_strm_tbl(l_strm_count).object1_id1 := p_frequency; --'M'; -- ???
278       x_strm_tbl(l_strm_count).object1_id2 := '#';
279       --nikshah 25-Nov-2008  bug # 6697542
280       x_strm_tbl(l_strm_count).object2_id2 := '#';
281       --nikshah 25-Nov-2008  bug # 6697542
282       x_strm_tbl(l_strm_count).jtot_object1_code := 'OKL_TUOM';
283       x_strm_tbl(l_strm_count).jtot_object2_code := 'OKL_STRMHDR';
284 
285       x_strm_tbl(l_strm_count).rule_information1 := 10;
286       x_strm_tbl(l_strm_count).rule_information2 := fnd_date.date_to_canonical(p_start_date);
287       x_strm_tbl(l_strm_count).rule_information3 := p_period;
288 
289 
290       --
291       -- Line Capital Amount :=
292       --        Capital amount of this Line +
293       --        Capital amount of corresponding LINK_ASSET_LINE (under FEE LINE)
294       --
295       get_fee_subline_cap_amount(
296                                  x_return_status => x_return_status,
297                                  x_msg_count     => x_msg_count,
298                                  x_msg_data      => x_msg_data,
299                                  p_fin_line_id   => p_cle_id,
300                                  x_fee_cap_amt   => l_fee_line_capital_amount
301                                 );
302       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
303           x_return_status := OKC_API.G_RET_STS_ERROR;
304           raise rule_failed;
305       END IF;
306 
307       l_line_capital_amount := NVL(p_fin_line_capital_amount,0) +
308                                NVL(l_fee_line_capital_amount,0);
309 
310       x_strm_tbl(l_strm_count).rule_information6 :=
311                         ROUND(((p_amount * l_line_capital_amount) /
312                          p_tot_capital_amount),p_precision);
313 
314 
315       --debug_message('Tot line: '||l_strm_count);
316       --debug_message('gen, srtm_count 2 :'||l_strm_count);
317 
318       RETURN;
319 
320    EXCEPTION
321       WHEN rule_failed THEN
322          x_return_status := OKC_API.G_RET_STS_ERROR;
323       WHEN OTHERS THEN
324          okl_api.set_message(
325                              G_APP_NAME,
326                              G_UNEXPECTED_ERROR,
327                              'OKL_SQLCODE',
328                              SQLCODE,
329                              'OKL_SQLERRM',
330                              SQLERRM || ': '||G_PKG_NAME||'.'||l_proc_name
331                             );
332          x_return_status := OKC_API.G_RET_STS_ERROR;
333    END gen_line_rule;
334 
335 ------------------------------------------------------------------------------
336 -- PROCEDURE get_total_capital_amount
337 --
338 --  This procedure return total capital amount for Financial Asset
339 --  and Fee Top Line
340 --
341 -- Calls:
342 -- Called By:
343 ------------------------------------------------------------------------------
344    PROCEDURE get_total_capital_amount(
345                                       x_return_status      OUT NOCOPY VARCHAR2,
346                                       x_msg_count          OUT NOCOPY NUMBER,
347                                       x_msg_data           OUT NOCOPY VARCHAR2,
348                                       p_chr_id             IN  OKC_K_HEADERS_V.ID%TYPE,
349                                       x_tot_capital_amount OUT NOCOPY NUMBER
350                                      ) IS
351    l_proc_name VARCHAR2(35) := 'GET_TOTAL_CAPITAL_AMOUNT';
352 
353    -- Total Capital amount from Financial Asset Top line
354    CURSOR fin_cap_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
355    SELECT SUM(NVL(line.capital_amount,0))
356    FROM   okl_k_lines_full_v line
357    WHERE  line.dnz_chr_id = p_chr_id
358    AND    EXISTS ( SELECT 'Y'
359                    FROM   okc_line_styles_v style
360                    WHERE  line.lse_id    = style.id
361                    AND    style.lty_code = 'FREE_FORM1'
362                   )
363    -- added to handle abandon line
364    AND    NOT EXISTS (
365                       SELECT 'Y'
366 		      FROM   okc_statuses_v okcsts
367 		      WHERE  okcsts.code = line.sts_code
368 		      AND    okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','TERMINATED'));
369 
370    -- Total Capital amount from FEE Top Line
371    CURSOR fee_cap_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
372    SELECT SUM(NVL(line.capital_amount,0))
373    FROM   okl_k_lines_full_v line,
374           okc_line_styles_v  style,
375           okc_k_items_v      item,
376           okl_strmtyp_source_v stream
377    WHERE  style.lty_code       = 'FEE'
378    AND    line.dnz_chr_id      = p_chr_id
379    AND    stream.capitalize_yn = 'Y'
380    AND    line.lse_id          = style.id
381    AND    line.id              = item.cle_id
382    AND    item.object1_id1     = stream.id1
383    -- added to handle abandon line
384    AND    NOT EXISTS (
385                       SELECT 'Y'
386 		      FROM   okc_statuses_v okcsts
387 		      WHERE  okcsts.code = line.sts_code
388 		      AND    okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','TERMINATED'));
389 
390    l_fin_amount   NUMBER;
391    l_fee_amount   NUMBER;
392    cap_failed     EXCEPTION;
393 
394    BEGIN
395      IF (G_DEBUG_ENABLED = 'Y') THEN
396        G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
397      END IF;
398       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
399               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
400       END IF;
401       x_return_status := OKC_API.G_RET_STS_SUCCESS;
402 
403       OPEN fin_cap_csr(p_chr_id);
404       FETCH fin_cap_csr INTO l_fin_amount;
405       IF fin_cap_csr%NOTFOUND THEN
406         RAISE cap_failed;
407       END IF;
408       CLOSE fin_cap_csr;
409 
410       OPEN fee_cap_csr(p_chr_id);
411       FETCH fee_cap_csr INTO l_fee_amount;
412       IF fee_cap_csr%NOTFOUND THEN
413         l_fee_amount := 0;
414       END IF;
415       CLOSE fee_cap_csr;
416 
417       x_tot_capital_amount := NVL(l_fin_amount,0) + NVL(l_fee_amount,0);
418 
419       IF (x_tot_capital_amount = 0) THEN
420          RAISE cap_failed;
421       END IF;
422 
423       RETURN;
424 
425    EXCEPTION
426       WHEN cap_failed THEN
427          IF fin_cap_csr%ISOPEN THEN
428             CLOSE fin_cap_csr;
429          END IF;
430          IF fee_cap_csr%ISOPEN THEN
431             CLOSE fee_cap_csr;
432          END IF;
433          x_return_status := OKC_API.G_RET_STS_ERROR;
434 
435       WHEN OTHERS THEN
436          okl_api.set_message(
437                              G_APP_NAME,
438                              G_UNEXPECTED_ERROR,
439                              'OKL_SQLCODE',
440                              SQLCODE,
441                              'OKL_SQLERRM',
442                              SQLERRM || ': '||G_PKG_NAME||'.'||l_proc_name
443                             );
444         x_return_status := OKC_API.G_RET_STS_ERROR;
445    END get_total_capital_amount;
446 
447 ------------------------------------------------------------------------------
448 -- PROCEDURE generate_line_payments
449 --
450 --  This procedure proportion-ed the payments accross Financial Asset Top Line
451 --  and Fee Top Line. It returns the information in a table. It does not
452 --  create any payment to the contract
453 --
454 -- Calls:
455 -- Called By:
456 ------------------------------------------------------------------------------
457   PROCEDURE generate_line_payments(
458                           p_api_version   IN  NUMBER,
459                           p_init_msg_list IN  VARCHAR2 DEFAULT OKC_API.G_FALSE,
460                           x_return_status OUT NOCOPY VARCHAR2,
461                           x_msg_count     OUT NOCOPY NUMBER,
462                           x_msg_data      OUT NOCOPY VARCHAR2,
463                           p_chr_id        IN  OKC_K_HEADERS_V.ID%TYPE,
464                           p_payment_type  IN  VARCHAR2,
465                           p_amount        IN  NUMBER,
466                           p_start_date    IN  DATE,
467                           p_period        IN  NUMBER,
468                           p_frequency     IN  VARCHAR2,
469                           x_strm_tbl      OUT NOCOPY okl_mass_rebook_pub.strm_lalevl_tbl_type
470                          ) IS
471 
472   l_api_name           VARCHAR2(35)    := 'generate_line_payments';
473   l_proc_name          VARCHAR2(35)    := 'generate_line_payments';
474   l_api_version        CONSTANT NUMBER := 1;
475   l_precision          FND_CURRENCIES.PRECISION%TYPE;
476 
477   CURSOR line_csr (p_chr_id OKC_K_HEADERS_V.ID%TYPE) IS
478   SELECT okl.*
479   FROM   okl_k_lines_full_v okl,
480          okc_line_styles_b ols
481   WHERE  okl.dnz_chr_id = p_chr_id
482   AND    okl.lse_id     = ols.id
483   AND    ols.lty_code   = 'FREE_FORM1'
484   -- added to handle abandon line
485   AND    NOT EXISTS (
486                      SELECT 'Y'
487 	             FROM   okc_statuses_b okcsts
488 	             WHERE  okcsts.code = okl.sts_code
489 	             AND    okcsts.ste_code IN ('EXPIRED','HOLD','CANCELLED','TERMINATED'));
490 
491   CURSOR payment_csr (p_strm_code VARCHAR2) IS
492   SELECT 'Y'
493   FROM   okl_strmtyp_source_v
494   WHERE  code = p_strm_code;
495 
496   CURSOR freq_csr (p_freq_code VARCHAR2) IS
497   SELECT 'Y'
498   FROM   okl_time_units_v
499   WHERE  id1 = p_freq_code;
500 
501 
502   l_del_yn             VARCHAR2(1) := 'N';
503   l_rgpv_tbl           OKL_RULE_PUB.rgpv_tbl_type;
504   l_slh_rulv_tbl       OKL_RULE_PUB.rulv_tbl_type;
505   l_sll_rulv_tbl       OKL_RULE_PUB.rulv_tbl_type;
506 
507   l_rg_count           NUMBER := 0;
508   l_slh_rule_count     NUMBER := 0;
509   l_sll_rule_count     NUMBER := 0;
510 
511   l_rgpv_del_rec       rgpv_rec_type;
512   x_slh_rulv_tbl_out   rulv_tbl_type;
513   x_sll_rulv_tbl_out   rulv_tbl_type;
514 
515   x_slh_count          NUMBER;
516   x_sll_count          NUMBER;
517 
518   l_slh_rulv_del_tbl   rulv_tbl_type;
519   l_sll_rulv_del_tbl   rulv_tbl_type;
520 
521   l_tot_capital_amount NUMBER := 0;
522   l_rule_present       VARCHAR2(1);
523 
524   l_strm_count         NUMBER := 0;
525   l_strm_tbl           okl_mass_rebook_pub.strm_lalevl_tbl_type;
526   l_out_strm_tbl       okl_mass_rebook_pub.strm_lalevl_tbl_type;
527   l_index              NUMBER := 0;
528 
529   l_exists             VARCHAR2(1) := 'N';
530 
531   BEGIN -- main process begins here
532     IF (G_DEBUG_ENABLED = 'Y') THEN
533       G_IS_DEBUG_STATEMENT_ON := OKL_DEBUG_PUB.CHECK_LOG_ON(G_MODULE, FND_LOG.LEVEL_STATEMENT);
534     END IF;
535 
536      x_return_status := OKC_API.G_RET_STS_SUCCESS;
537      IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
538             OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,l_proc_name);
539      END IF;
540      -- call START_ACTIVITY to create savepoint, check compatibility
541       -- and initialize message list
542       x_return_status := OKC_API.START_ACTIVITY(
543 			p_api_name      => l_api_name,
544 			p_pkg_name      => G_PKG_NAME,
545 			p_init_msg_list => p_init_msg_list,
546 			l_api_version   => l_api_version,
547 			p_api_version   => p_api_version,
548 			p_api_type      => G_API_TYPE,
549 			x_return_status => x_return_status);
550 
551       -- check if activity started successfully
552       IF (x_return_status = OKC_API.G_RET_STS_UNEXP_ERROR) then
553          raise OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
554       ELSIF (x_return_status = OKC_API.G_RET_STS_ERROR) then
555          raise OKC_API.G_EXCEPTION_ERROR;
556       END IF;
557 
558       --
559       -- Validate input
560       --
561       IF (p_chr_id IS NULL) THEN
562          okl_api.set_message(
563                     G_APP_NAME,
564                     G_INVALID_VALUE,
565                     'COL_NAME',
566                     'Contract Header ID'
567                    );
568           RAISE OKC_API.G_EXCEPTION_ERROR;
569       END IF;
570 
571       l_exists := 'N';
572       OPEN payment_csr(p_payment_type);
573       FETCH payment_csr INTO l_exists;
574       IF payment_csr%NOTFOUND THEN
575          okl_api.set_message(
576                     G_APP_NAME,
577                     G_INVALID_VALUE,
578                     'COL_NAME',
579                     'Contract Header ID'
580                    );
581           CLOSE payment_csr;
582           RAISE OKC_API.G_EXCEPTION_ERROR;
583       END IF;
584       CLOSE payment_csr;
585 
586       l_exists := 'N';
587       OPEN freq_csr(p_frequency);
588       FETCH freq_csr INTO l_exists;
589       IF freq_csr%NOTFOUND THEN
590          okl_api.set_message(
591                     G_APP_NAME,
592                     G_INVALID_VALUE,
593                     'COL_NAME',
594                     'Payment frequency'
595                    );
596           CLOSE freq_csr;
597           RAISE OKC_API.G_EXCEPTION_ERROR;
598       END IF;
599       CLOSE freq_csr;
600 
601       IF (p_amount IS NULL) THEN
602          okl_api.set_message(
603                     G_APP_NAME,
604                     G_INVALID_VALUE,
605                     'COL_NAME',
606                     'Payment amount'
607                    );
608           RAISE OKC_API.G_EXCEPTION_ERROR;
609       END IF;
610 
611       IF (p_start_date IS NULL) THEN
612          okl_api.set_message(
613                     G_APP_NAME,
614                     G_INVALID_VALUE,
615                     'COL_NAME',
616                     'Payment start date'
617                    );
618           RAISE OKC_API.G_EXCEPTION_ERROR;
619       END IF;
620 
621       IF (p_period IS NULL) THEN
622          okl_api.set_message(
623                     G_APP_NAME,
624                     G_INVALID_VALUE,
625                     'COL_NAME',
626                     'Payment period'
627                    );
628           RAISE OKC_API.G_EXCEPTION_ERROR;
629       END IF;
630 
631 
632       get_total_capital_amount(
633                                x_return_status      => x_return_status,
634                                x_msg_count          => x_msg_count,
635                                x_msg_data           => x_msg_data,
636                                p_chr_id             => p_chr_id,
637                                x_tot_capital_amount => l_tot_capital_amount
638                               );
639 
640       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
641          okl_api.set_message(
642                              G_APP_NAME,
643                              G_CAPITAL_AMT_ERROR
644                             );
645           RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
646       END IF;
647 
648       get_currency_precision(
649                              x_return_status => x_return_status,
650                              p_chr_id        => p_chr_id,
651                              x_precision     => l_precision
652                             );
653       IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
654          RAISE OKC_API.G_EXCEPTION_ERROR;
655       END IF;
656 
657       --debug_message('CAP :'||l_tot_capital_amount);
658       FOR line_rec IN line_csr(p_chr_id)
659       LOOP
660          -- Apply Payment across Lines (Fin Asset and Fee Top Line)
661 
662          l_strm_count := x_strm_tbl.COUNT;
663 
664          gen_line_rule(
665                           x_return_status           => x_return_status,
666                           x_msg_count               => x_msg_count,
667                           x_msg_data                => x_msg_data,
668                           p_chr_id                  => p_chr_id,
669                           p_cle_id                  => line_rec.id,
670                           p_fin_line_capital_amount => line_rec.capital_amount,
671                           p_tot_capital_amount      => l_tot_capital_amount,
672                           p_precision               => l_precision,
673                           p_payment_type            => p_payment_type,
674                           p_amount                  => p_amount,
675                           p_period                  => p_period,
676                           p_start_date              => p_start_date,
677                           p_frequency               => p_frequency,
678                           p_strm_count              => l_strm_count,
679                           x_strm_tbl                => l_strm_tbl
680                          );
681          IF (x_return_status <> OKC_API.G_RET_STS_SUCCESS) THEN
682             RAISE OKC_API.G_EXCEPTION_ERROR;
683          END IF;
684 
685          -- Populate output steam table
686          l_index := NVL(l_out_strm_tbl.LAST,0); -- get the last record
687 
688          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
689                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_strm_count: '||l_index);
690          END IF;
691 
692          FOR i IN 1..l_strm_tbl.COUNT
693          LOOP
694            l_index := l_index + 1;
695            l_out_strm_tbl(l_index) := l_strm_tbl(i);
696          END LOOP;
697          IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
698                     OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'OK after assignment...');
699          END IF;
700 
701       END LOOP;
702 
703       IF (G_IS_DEBUG_STATEMENT_ON = true) THEN
704               OKL_DEBUG_PUB.LOG_DEBUG(FND_LOG.LEVEL_STATEMENT, G_MODULE,'x_strm_count after : '||x_strm_tbl.COUNT);
705       END IF;
706 
707       FOR i IN 1..l_out_strm_tbl.COUNT
708       LOOP
709         x_strm_tbl(i) := l_out_strm_tbl(i);
710       END LOOP;
711 
712     --Call End Activity
713      OKL_API.END_ACTIVITY(x_msg_count   => x_msg_count,
714                           x_msg_data    => x_msg_data);
715 
716 EXCEPTION
717 
718       when OKC_API.G_EXCEPTION_ERROR then
719          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
720 			p_api_name  => l_api_name,
721 			p_pkg_name  => G_PKG_NAME,
722 			p_exc_name  => 'OKC_API.G_RET_STS_ERROR',
723 			x_msg_count => x_msg_count,
724 			x_msg_data  => x_msg_data,
725 			p_api_type  => G_API_TYPE);
726 
727       when OKC_API.G_EXCEPTION_UNEXPECTED_ERROR then
728          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
729 			p_api_name  => l_api_name,
730 			p_pkg_name  => G_PKG_NAME,
731 			p_exc_name  => 'OKC_API.G_RET_STS_UNEXP_ERROR',
732 			x_msg_count => x_msg_count,
733 			x_msg_data  => x_msg_data,
734 			p_api_type  => G_API_TYPE);
735 
736       when OTHERS then
737          x_return_status := OKC_API.HANDLE_EXCEPTIONS(
738 			p_api_name  => l_api_name,
739 			p_pkg_name  => G_PKG_NAME,
740 			p_exc_name  => 'OTHERS',
741 			x_msg_count => x_msg_count,
742 			x_msg_data  => x_msg_data,
743 			p_api_type  => G_API_TYPE);
744 
745   END generate_line_payments;
746 
747 END OKL_PAYMENT_SPLIT_PVT;