DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_AMORT_PVT

Source


1 PACKAGE BODY FA_AMORT_PVT as
2 /* $Header: FAVAMRTB.pls 120.275.12020000.8 2013/03/29 11:30:29 saalampa ship $ */
3 
4 
5 /* Global temporary variables */
6 g_temp_date1                   date;
7 g_temp_date2                   date;
8 g_temp_integer                 BINARY_INTEGER;
9 g_temp_number                  number;
10 g_temp_char30                    varchar2(30);
11 
12 g_release                  number  := fa_cache_pkg.fazarel_release; -- Bug#8605817
13 
14 /* Global constant variables */
15 
16 G_ASSET_TYPE_GROUP             varchar2(5) := 'GROUP';
17 G_TRX_TYPE_TFR_OUT             varchar2(30) := 'TRANSFER OUT';
18 G_TRX_TYPE_TFR_IN              varchar2(30) := 'TRANSFER IN';
19 G_TRX_TYPE_TFR                 varchar2(30) := 'TRANSFER';
20 G_TRX_TYPE_TFR_VOID            varchar2(30) := 'TRANSFER IN/VOID';
21 G_TRX_TYPE_REI                 varchar2(30) := 'REINSTATEMENT';
22 G_TRX_TYPE_FUL_RET             varchar2(30) := 'FULL RETIREMENT';
23 G_TRX_TYPE_PAR_RET             varchar2(30) := 'PARTIAL RETIREMENT';
24 G_TRX_TYPE_GRP_CHG             varchar2(30) := 'GROUP CHANGE';
25 G_TRX_TYPE_REC                 varchar2(30) := 'RECLASS';
26 G_TRX_TYPE_UNIT_ADJ            varchar2(30) := 'UNIT ADJUSTMENT';
27 G_TRX_TYPE_REV                 varchar2(30) := 'REVALUATION';
28 G_TRX_TYPE_TAX                 varchar2(30) := 'TAX';
29 G_TRX_TYPE_ADD_VOID            varchar2(30) := 'ADDITION/VOID'; -- Bug#5074327
30 G_TRX_TYPE_CIP_ADJ             varchar2(30) := 'CIP ADJUSTMENT'; -- Bug#5191200
31 G_TRX_TYPE_ADD                 varchar2(30) := 'ADDITION';
32 G_TRX_TYPE_ADJ                 varchar2(30) := 'ADJUSTMENT';
33 G_TRX_TYPE_CIP_ADD_VOID        varchar2(30) := 'CIP ADDITION/VOID'; -- Bug:6019450
34 G_TRX_TYPE_CIP_ADD             varchar2(30) := 'CIP ADDITION'; -- Bug:6798953
35 
36 /* Global temporary variables for member asset */
37 g_mem_deprn_reserve            NUMBER;
38 g_mem_eofy_reserve             NUMBER;
39 g_mem_ytd_deprn                NUMBER;
40 g_mem_bonus_ytd_deprn          NUMBER;
41 g_mem_bonus_deprn_reserve      NUMBER;
42 g_mem_ytd_impairment           NUMBER;
43 g_mem_impairment_reserve       NUMBER;
44 g_mem_asset_id                 NUMBER;
45 
46 --bug 12739028
47 g_deprn_ch_trx_id              NUMBER;
48 
49 --Bug 5149789
50 FUNCTION check_member_existence (
51                  p_asset_hdr_rec       IN            FA_API_TYPES.asset_hdr_rec_type, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
52 RETURN BOOLEAN;
53 
54 --Bug4938977: Adding a private function.
55 FUNCTION check_dpis_change (
56               p_book_type_code                     VARCHAR2,
57               p_transaction_header_id              NUMBER,
58               p_group_asset_id                     NUMBER,
59               x_asset_fin_rec           OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
60               x_period_counter_out      OUT NOCOPY NUMBER,
61               p_mrc_sob_type_code                  VARCHAR2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
62 RETURN BOOLEAN;
63 
64 -- Bug 8398064
65 -- To identify overlapping retirements, we need fn to convert txn date
66 -- to corresponding deprn period ctr
67 --
68 FUNCTION get_dcal_pc ( pp_book_type_code in varchar2, pp_date in date, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
69   return   number is
70      l_pc number := 0;
71      l_calling_fn varchar2(40) := 'FA_AMORT_PVT.get_dcal_pc';
72 BEGIN
73       SELECT fcp.period_num +( fct.number_per_fiscal_year * ffy.fiscal_year)
74       INTO   l_pc
75       FROM fa_calendar_periods fcp, fa_calendar_types fct, fa_fiscal_year ffy
76       WHERE pp_date BETWEEN fcp.start_date AND fcp.end_date
77       AND   pp_date BETWEEN ffy.start_date AND ffy.end_date
78       AND   fct.calendar_type    = fcp.calendar_type
79       AND   ffy.fiscal_year_name = fa_cache_pkg.fazcbc_record.fiscal_year_name
80       AND   fct.calendar_type    = fa_cache_pkg.fazcbc_record.deprn_calendar;
81 
82       RETURN l_pc;
83 EXCEPTION WHEN OTHERS THEN
84       if (p_log_level_rec.statement_level) then
85          fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'others: '||sqlerrm, p_log_level_rec => p_log_level_rec);
86       end if;
87 
88       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn);
89       return 0;
90 END;
91 -- End Bug 8398064
92 
93 PROCEDURE printBooksSummary(p_asset_id  number,
94                             p_book_type_code varchar2,
95                             p_period_counter number default 0, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) IS
96 
97    CURSOR c_get_books_summary IS
98       select period_counter
99            , cost
100 --           , salvage_value
101            , member_salvage_value
102            , allowed_deprn_limit_amount
103            , adjusted_rate
104            , rate_adjustment_factor
105            , deprn_adjustment_amount
106            , deprn_amount
107            , ytd_deprn
108            , reserve_adjustment_amount
109            , deprn_reserve
110       from   fa_books_summary
111       where  asset_id = p_asset_id
112       and    book_type_code = p_book_type_code
113       and    period_counter >= nvl(p_period_counter, 1);
114 
115 BEGIN
116 
117 --tk_util.debug('period#:      cost:      sal:      art:       raf:      eaj:      exp:       ytd:    rsvadj:       rsv');
118 /*
119 for r_bs in c_get_books_summary loop
120 --tk_util.debug(rpad(to_char(r_bs.period_counter), 7, ' ')||':'||
121               lpad(to_char(r_bs.cost), 10, ' ')||':'||
122               lpad(to_char(r_bs.member_salvage_value), 9, ' ')||':'||
123               lpad(nvl(to_char(r_bs.allowed_deprn_limit_amount), 'null'), 9, ' ')||':'||
124               lpad(to_char(r_bs.adjusted_rate), 9, ' ')||':'||
128               lpad(to_char(r_bs.ytd_deprn), 10, ' ')||':'||
125               lpad(substrb(to_char(r_bs.rate_adjustment_factor), 1, 10), 10, ' ')||':'||
126               lpad(to_char(r_bs.deprn_adjustment_amount), 9, ' ')||':'||
127               lpad(to_char(r_bs.deprn_amount), 9, ' ')||':'||
129               lpad(to_char(r_bs.reserve_adjustment_amount), 10, ' ')||':'||
130               lpad(to_char(r_bs.deprn_reserve), 10, ' ')
131              );
132 end loop;
133 */
134 null;
135 END printBooksSummary;
136 
137 --+==============================================================================
138 -- Function: GetPeriodInfo
139 --
140 --   This function return period information.
141 --   The function should be called when period information is not available in
142 --   fa_deprn_periods, for all other cases, should call fazcdp to obtain period
143 --   information.
144 --+==============================================================================
145 FUNCTION GetPeriodInfo(
146      p_jdate                     NUMBER,
147      p_book_type_code            VARCHAR2,
148      p_mrc_sob_type_code         VARCHAR2,
149      p_set_of_books_id           NUMBER,
150      x_period_rec     OUT NOCOPY FA_API_TYPES.period_rec_type
151      , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return BOOLEAN IS
152 
153   l_calling_fn  VARCHAR2(50) := 'FA_AMORT_PVT.GetPeriodInfo';
154   get_err    EXCEPTION;
155 
156   CURSOR c_get_deprn_period_info IS
157     select period_counter
158          , period_name
159          , period_open_date
160          , period_close_date
161          , calendar_period_open_date
162          , calendar_period_close_date
163          , fiscal_year
164          , period_num
165     from   fa_deprn_periods
166     where  book_type_code = p_book_type_code
167     and    to_date (to_char (p_jdate), 'J') between calendar_period_open_date
168                                                 and calendar_period_close_date;
169 
170   CURSOR c_get_mc_deprn_period_info IS
171     select period_counter
172          , period_name
173          , period_open_date
174          , period_close_date
175          , calendar_period_open_date
176          , calendar_period_close_date
177          , fiscal_year
178          , period_num
179     from   fa_mc_deprn_periods
180     where  set_of_books_id = p_set_of_books_id
181     and    book_type_code = p_book_type_code
182     and    to_date (to_char (p_jdate), 'J') between calendar_period_open_date
183                                                 and calendar_period_close_date;
184 
185   CURSOR c_get_period_info IS
186     select start_date
187          , end_date
188     from   fa_calendar_periods
189     where  calendar_type = fa_cache_pkg.fazcbc_record.deprn_calendar
190     and    to_date (to_char (p_jdate), 'J') between start_date
191                                                 and end_date;
192 
193 BEGIN
194   if (p_log_level_rec.statement_level) then
195      fa_debug_pkg.add(l_calling_fn, 'Begin', p_jdate, p_log_level_rec => p_log_level_rec);
196   end if;
197 
198   if p_mrc_sob_type_code = 'R' then
199      OPEN c_get_mc_deprn_period_info;
200      FETCH c_get_mc_deprn_period_info INTO x_period_rec.period_counter
201                                       , x_period_rec.period_name
202                                       , x_period_rec.period_open_date
203                                       , x_period_rec.period_close_date
204                                       , x_period_rec.calendar_period_open_date
205                                       , x_period_rec.calendar_period_close_date
206                                       , x_period_rec.fiscal_year
207                                       , x_period_rec.period_num;
208 
209      if (c_get_mc_deprn_period_info%NOTFOUND) then
210 
211         if not fa_cache_pkg.fazcct(fa_cache_pkg.fazcbc_record.deprn_calendar, p_log_level_rec => p_log_level_rec) then
212            raise get_err;
213         end if;
214 
215         if not fa_cache_pkg.fazccp(fa_cache_pkg.fazcbc_record.deprn_calendar,
216                                    fa_cache_pkg.fazcbc_record.fiscal_year_name,
217                                    p_jdate,
218                                    x_period_rec.period_num,
219                                    x_period_rec.fiscal_year,
220                                    g_temp_number, p_log_level_rec => p_log_level_rec) then
221            raise get_err;
222         end if;
223 
224         x_period_rec.period_counter := x_period_rec.fiscal_year *
225                             fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR +
226                             x_period_rec.period_num;
227 
228         OPEN c_get_period_info;
229         FETCH c_get_period_info INTO x_period_rec.calendar_period_open_date,
230                                      x_period_rec.calendar_period_close_date;
231         CLOSE c_get_period_info;
232 
233      end if;
234 
235      CLOSE c_get_mc_deprn_period_info;
236 
237   else -- Primary book
238 
239      OPEN c_get_deprn_period_info;
240      FETCH c_get_deprn_period_info INTO x_period_rec.period_counter
241                                       , x_period_rec.period_name
242                                       , x_period_rec.period_open_date
243                                       , x_period_rec.period_close_date
244                                       , x_period_rec.calendar_period_open_date
245                                       , x_period_rec.calendar_period_close_date
246                                       , x_period_rec.fiscal_year
247                                       , x_period_rec.period_num;
248 
249      if (c_get_deprn_period_info%NOTFOUND) then
250 
251         if not fa_cache_pkg.fazcct(fa_cache_pkg.fazcbc_record.deprn_calendar, p_log_level_rec => p_log_level_rec) then
252            raise get_err;
253         end if;
254 
255         if not fa_cache_pkg.fazccp(fa_cache_pkg.fazcbc_record.deprn_calendar,
256                                    fa_cache_pkg.fazcbc_record.fiscal_year_name,
257                                    p_jdate,
258                                    x_period_rec.period_num,
259                                    x_period_rec.fiscal_year,
260                                    g_temp_number, p_log_level_rec => p_log_level_rec) then
261            raise get_err;
262         end if;
263 
264         x_period_rec.period_counter := x_period_rec.fiscal_year *
265                             fa_cache_pkg.fazcct_record.NUMBER_PER_FISCAL_YEAR +
266                             x_period_rec.period_num;
267 
268         OPEN c_get_period_info;
269         FETCH c_get_period_info INTO x_period_rec.calendar_period_open_date,
270                                      x_period_rec.calendar_period_close_date;
271         CLOSE c_get_period_info;
272 
273      end if;
274 
275      CLOSE c_get_deprn_period_info;
276 
277   end if;
278 
279   if (p_log_level_rec.statement_level) then
280      fa_debug_pkg.add(l_calling_fn, 'End', x_period_rec.period_counter||':'||
281                                            x_period_rec.fiscal_year||':'||
282                                            x_period_rec.period_num||':'||
283                                            to_char(x_period_rec.calendar_period_open_date, 'DD-MON-YYYY')||':'||
284                                            to_char(x_period_rec.calendar_period_close_date, 'DD-MON-YYYY'));
285   end if;
286 
287   return TRUE;
288 
289 EXCEPTION
290    WHEN get_err THEN
291       if (p_log_level_rec.statement_level) then
292          fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'get_err', p_log_level_rec => p_log_level_rec);
293       end if;
294 
295       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
296       return false;
297 
298    WHEN others THEN
299       if (p_log_level_rec.statement_level) then
300          fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'others: '||sqlerrm, p_log_level_rec => p_log_level_rec);
301       end if;
302 
303       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
304       return false;
305 
306 END GetPeriodInfo;
307 
308 
309 --+==============================================================================
310 -- Function catchupBooksSummary
311 --
312 --  This function will create missing records from period where last record
313 --  exists up to current period.
314 --+==============================================================================
315 FUNCTION catchupBooksSummary (
316     p_trans_rec              FA_API_TYPES.trans_rec_type,
317     p_asset_hdr_rec          FA_API_TYPES.asset_hdr_rec_type,
318     p_period_rec             FA_API_TYPES.period_rec_type,
319     p_asset_fin_rec_new      FA_API_TYPES.asset_fin_rec_type,
320     p_depreciate_flag_change BOOLEAN,
321     p_disabled_flag_change   BOOLEAN,
322     p_mrc_sob_type_code      VARCHAR2,
323     p_calling_fn             VARCHAR
324 , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
325 
326    l_calling_fn      VARCHAR2(50) := 'FA_AMORT_PVT.catchupBooksSummary';
327 
328    CURSOR c_get_mc_last_period_counter IS
329      select bs.period_counter
330           , bs.calendar_period_close_date
331           , bs.fiscal_year
332           , bs.period_num
333      from   fa_mc_books_summary bs
334      where  bs.asset_id = p_asset_hdr_rec.asset_id
335      and    bs.book_type_code = p_asset_hdr_rec.book_type_code
336      and    bs.set_of_books_id = p_asset_hdr_rec.set_of_books_id
337      order by period_counter desc;
338 
339    CURSOR c_get_last_period_counter IS
340      select bs.period_counter
341           , bs.calendar_period_close_date
342           , bs.fiscal_year
343           , bs.period_num
344      from   fa_books_summary bs
345      where  bs.asset_id = p_asset_hdr_rec.asset_id
346      and    bs.book_type_code = p_asset_hdr_rec.book_type_code
347      order by period_counter desc;
348 
349    --
350    -- Get all possible period information that the group asset needs
351    --
352    CURSOR c_get_period_rec (c_start_date  date) IS
353      select fy.fiscal_year * ct.NUMBER_PER_FISCAL_YEAR + cp.PERIOD_NUM period_counter
354           , cp.start_date calendar_period_open_date
355           , cp.end_date calendar_period_close_date
356           , cp.period_num period_num
357           , fy.fiscal_year fiscal_year
358           , 'N'
359      from   fa_book_controls bc
360           , fa_fiscal_year fy
361           , fa_calendar_types ct
362           , fa_calendar_periods cp
363      where  bc.book_type_code = p_asset_hdr_rec.book_type_code
364      and    bc.deprn_calendar = ct.calendar_type
365      and    bc.fiscal_year_name = fy.fiscal_year_name
366      and    ct.fiscal_year_name = bc.fiscal_year_name
367      and    ct.calendar_type = cp.calendar_type
368      and    cp.start_date between fy.start_date and fy.end_date
369      and    bc.last_period_counter + 1 >= fy.fiscal_year * ct.NUMBER_PER_FISCAL_YEAR + cp.PERIOD_NUM
370      and    cp.end_date >= c_start_date
371      order by period_counter;
372 
373    tbs_period_counter              tab_num15_type;
374    tbs_calendar_period_open_date   tab_date_type;
375    tbs_calendar_period_close_date  tab_date_type;
376    tbs_period_num                  tab_num15_type;
377    tbs_fiscal_year                 tab_num15_type;
378    tbs_reset_adjusted_cost_flag    tab_char1_type;
379 
380    tbs_adjusted_cost               tab_num_type;
381    tbs_eofy_adj_cost               tab_num_type;
382    tbs_eofy_formula_factor         tab_num_type;
383    tbs_eofy_reserve                tab_num_type;
384    tbs_eop_adj_cost                tab_num_type;
385    tbs_eop_formula_factor          tab_num_type;
386    tbs_depreciate_flag             tab_char1_type;
387    tbs_disabled_flag               tab_char1_type;
388    tbs_formula_factor              tab_num_type;
389 
390    tbs_ytd_deprn                   tab_num_type;
391    tbs_bonus_ytd_deprn             tab_num_type;
392    tbs_ytd_impairment              tab_num_type;
393    tbs_ytd_production              tab_num_type;
394    tbs_ytd_reval_deprn_expense     tab_num_type;
395    tbs_ytd_proceeds_of_sale        tab_num_type;
396    tbs_ytd_cost_of_removal         tab_num_type;
397 
398    l_last_period_counter           NUMBER(15);
399    l_last_period_close_date        DATE;
400    l_last_fiscal_year              NUMBER(15);
401    l_last_period_num               NUMBER(15);
402 
403    l_ind                           BINARY_INTEGER;
404 
405 --
406 -- Think about unplan, reserve tr, and ret adj against asset not depreciating
407 --
408 
409 BEGIN
410    if (p_log_level_rec.statement_level) then
411       fa_debug_pkg.add(l_calling_fn||'()+', 'asset_id', p_asset_hdr_rec.asset_id);
412    end if;
413 
414    if p_mrc_sob_type_code = 'R' then
415 
416       OPEN c_get_mc_last_period_counter;
417       FETCH c_get_mc_last_period_counter INTO l_last_period_counter
418                                          , l_last_period_close_date
419                                          , l_last_fiscal_year
420                                          , l_last_period_num;
421       CLOSE c_get_mc_last_period_counter;
422    else
423       OPEN c_get_last_period_counter;
424       FETCH c_get_last_period_counter INTO l_last_period_counter
425                                          , l_last_period_close_date
426                                          , l_last_fiscal_year
427                                          , l_last_period_num;
428       CLOSE c_get_last_period_counter;
429    end if;
430 
431    if (p_log_level_rec.statement_level) then
432       fa_debug_pkg.add(l_calling_fn, 'l_last_period_counter', l_last_period_counter, p_log_level_rec => p_log_level_rec);
433       fa_debug_pkg.add(l_calling_fn, 'l_last_period_close_date', l_last_period_close_date, p_log_level_rec => p_log_level_rec);
434    end if;
435 
436    if (p_period_rec.period_counter = l_last_period_counter) then
437       if (p_log_level_rec.statement_level) then
438          fa_debug_pkg.add(l_calling_fn, 'This asset has record up to current period',l_last_period_counter, p_log_level_rec => p_log_level_rec);
439          fa_debug_pkg.add(l_calling_fn||'()-', 'asset_id', p_asset_hdr_rec.asset_id);
440       end if;
441 
442       return TRUE;
443 
444    end if;
445 
446    --
447    -- This asset needs records up to current period
448    --
449    OPEN c_get_period_rec ((l_last_period_close_date + 1));
450    FETCH c_get_period_rec BULK COLLECT INTO tbs_period_counter
451                                           , tbs_calendar_period_open_date
452                                           , tbs_calendar_period_close_date
453                                           , tbs_period_num
454                                           , tbs_fiscal_year
455                                           , tbs_reset_adjusted_cost_flag
456                                           ;
457    CLOSE c_get_period_rec;
458 
459    if (p_log_level_rec.statement_level) then
460       fa_debug_pkg.add(l_calling_fn, '# of record creating', tbs_period_counter.COUNT, p_log_level_rec => p_log_level_rec);
461    end if;
462 
463    l_ind := p_period_rec.period_counter - l_last_period_counter;
464    FOR i in 1..l_ind LOOP
465       --
466       -- If anything requires table value manipulation for each period
467       -- this is the place. So far, it's been absorved in insert statement.
468       null;
469 
470    END LOOP; -- i in 1..(p_period_rec.period_counter - l_last_period_counter)
471 
472 
473    if (p_log_level_rec.statement_level) then
474       fa_debug_pkg.add(l_calling_fn, 'Insert into', 'FA_BOOKS_SUMMARY', p_log_level_rec => p_log_level_rec);
475    end if;
476    --
477    -- Insert all necessary records from period where DPIS falls into
478    --
479    if p_mrc_sob_type_code = 'R' then
480       FORALL i in tbs_period_counter.FIRST..tbs_period_counter.LAST
481          INSERT INTO FA_MC_BOOKS_SUMMARY(
482                     SET_OF_BOOKS_ID
483                   , ASSET_ID
484                   , BOOK_TYPE_CODE
485                   , PERIOD_COUNTER
486                   , FISCAL_YEAR
487                   , PERIOD_NUM
488                   , CALENDAR_PERIOD_OPEN_DATE
489                   , CALENDAR_PERIOD_CLOSE_DATE
490                   , RESET_ADJUSTED_COST_FLAG
491                   , CHANGE_IN_COST
492                   , CHANGE_IN_ADDITIONS_COST
493                   , CHANGE_IN_ADJUSTMENTS_COST
494                   , CHANGE_IN_RETIREMENTS_COST
495                   , CHANGE_IN_CIP_COST
496                   , COST
497                   , CIP_COST
498                   , SALVAGE_TYPE
499                   , PERCENT_SALVAGE_VALUE
500                   , SALVAGE_VALUE
501                   , MEMBER_SALVAGE_VALUE
502                   , RECOVERABLE_COST
503                   , DEPRN_LIMIT_TYPE
504                   , ALLOWED_DEPRN_LIMIT
505                   , ALLOWED_DEPRN_LIMIT_AMOUNT
506                   , MEMBER_DEPRN_LIMIT_AMOUNT
507                   , ADJUSTED_RECOVERABLE_COST
508                   , ADJUSTED_COST
509                   , DEPRECIATE_FLAG
510                   , DISABLED_FLAG
511                   , DATE_PLACED_IN_SERVICE
512                   , DEPRN_METHOD_CODE
513                   , LIFE_IN_MONTHS
514                   , RATE_ADJUSTMENT_FACTOR
515                   , ADJUSTED_RATE
516                   , FORMULA_FACTOR
517                   , BONUS_RULE
518                   , ADJUSTED_CAPACITY
519                   , PRODUCTION_CAPACITY
520                   , UNIT_OF_MEASURE
521                   , REMAINING_LIFE1
522                   , REMAINING_LIFE2
523                   , UNREVALUED_COST
524                   , REVAL_CEILING
525                   , CEILING_NAME
526                   , REVAL_AMORTIZATION_BASIS
527                   , EOFY_ADJ_COST
528                   , EOFY_FORMULA_FACTOR
529                   , EOFY_RESERVE
530                   , EOP_ADJ_COST
531                   , EOP_FORMULA_FACTOR
532                   , SHORT_FISCAL_YEAR_FLAG
533                   , GROUP_ASSET_ID
534                   , SUPER_GROUP_ID
535                   , OVER_DEPRECIATE_OPTION
536                   , TERMINAL_GAIN_LOSS_AMOUNT
537                   , TERMINAL_GAIN_LOSS_FLAG
538                   , DEPRN_AMOUNT
539                   , YTD_DEPRN
540                   , DEPRN_RESERVE
541                   , BONUS_DEPRN_AMOUNT
542                   , BONUS_YTD_DEPRN
543                   , BONUS_DEPRN_RESERVE
544                   , IMPAIRMENT_AMOUNT
545                   , impairment_reserve
546                   , YTD_IMPAIRMENT
547                   , LTD_PRODUCTION
548                   , YTD_PRODUCTION
549                   , PRODUCTION
550                   , REVAL_AMORTIZATION
551                   , REVAL_DEPRN_EXPENSE
552                   , REVAL_RESERVE
553                   , YTD_REVAL_DEPRN_EXPENSE
554                   , DEPRN_OVERRIDE_FLAG
555                   , SYSTEM_DEPRN_AMOUNT
556                   , YTD_PROCEEDS_OF_SALE
557                   , LTD_PROCEEDS_OF_SALE
558                   , YTD_COST_OF_REMOVAL
559                   , LTD_COST_OF_REMOVAL
560                   , DEPRN_ADJUSTMENT_AMOUNT
561                   , EXPENSE_ADJUSTMENT_AMOUNT
562                   , UNPLANNED_AMOUNT
563                   , RESERVE_ADJUSTMENT_AMOUNT
564                   , CREATION_DATE
565                   , CREATED_BY
566                   , LAST_UPDATE_DATE
567                   , LAST_UPDATED_BY
568                   )
569          SELECT     p_asset_hdr_rec.set_of_books_id
573                   , tbs_fiscal_year(i)
570                   , p_asset_hdr_rec.asset_id
571                   , p_asset_hdr_rec.book_type_code
572                   , tbs_period_counter(i)
574                   , tbs_period_num(i)
575                   , tbs_calendar_period_open_date(i)
576                   , tbs_calendar_period_close_date(i)
577                   , tbs_reset_adjusted_cost_flag(i)
578                   , 0                 --CHANGE_IN_COST
579                   , 0                 --CHANGE_IN_ADDITIONS_COST
580                   , 0                 --CHANGE_IN_ADJUSTMENTS_COST
581                   , 0                 --CHANGE_IN_RETIREMENTS_COST
582                   , 0                 --CHANGE_IN_CIP_COST
583                   , BS.COST
584                   , BS.CIP_COST
585                   , BS.SALVAGE_TYPE
586                   , BS.PERCENT_SALVAGE_VALUE
587                   , BS.SALVAGE_VALUE
588                   , BS.MEMBER_SALVAGE_VALUE
589                   , BS.RECOVERABLE_COST
590                   , BS.DEPRN_LIMIT_TYPE
591                   , BS.ALLOWED_DEPRN_LIMIT
592                   , BS.ALLOWED_DEPRN_LIMIT_AMOUNT
593                   , BS.MEMBER_DEPRN_LIMIT_AMOUNT
594                   , BS.ADJUSTED_RECOVERABLE_COST
595                   , BS.ADJUSTED_COST
596                   , BS.DEPRECIATE_FLAG
597                   , BS.DISABLED_FLAG
598                   , BS.DATE_PLACED_IN_SERVICE
599                   , BS.DEPRN_METHOD_CODE
600                   , BS.LIFE_IN_MONTHS
601                   , BS.RATE_ADJUSTMENT_FACTOR
602                   , BS.ADJUSTED_RATE
603                   , BS.FORMULA_FACTOR
604                   , BS.BONUS_RULE
605                   , BS.ADJUSTED_CAPACITY
606                   , BS.PRODUCTION_CAPACITY
607                   , BS.UNIT_OF_MEASURE
608                   , BS.REMAINING_LIFE1
609                   , BS.REMAINING_LIFE2
610                   , BS.UNREVALUED_COST
611                   , BS.REVAL_CEILING
612                   , BS.CEILING_NAME
613                   , BS.REVAL_AMORTIZATION_BASIS
614                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.EOFY_ADJ_COST, BS.ADJUSTED_COST) --EOFY_ADJ_COST
615                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.EOFY_FORMULA_FACTOR, BS.FORMULA_FACTOR) --EOFY_FORMULA_FACTOR
616                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.EOFY_RESERVE,
617                                            tbs_fiscal_year(i) - 1, BS.DEPRN_RESERVE, 0) --EOFY_RESERVE
618                   , BS.ADJUSTED_COST --EOP_ADJ_COST
619                   , BS.FORMULA_FACTOR --EOP_FORMULA_FACTOR
620                   , BS.SHORT_FISCAL_YEAR_FLAG
621                   , BS.GROUP_ASSET_ID
622                   , BS.SUPER_GROUP_ID
623                   , BS.OVER_DEPRECIATE_OPTION
624                   , 0                 --TERMINAL_GAIN_LOSS_AMOUNT
625                   , 'N'               --TERMINAL_GAIN_LOSS_FLAG
626                   , 0                 --DEPRN_AMOUNT
627                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_DEPRN, 0) --YTD_DEPRN
628                   , BS.DEPRN_RESERVE
629                   , 0                 --BONUS_DEPRN_AMOUNT
630                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.BONUS_YTD_DEPRN, 0) --BONUS_YTD_DEPRN
631                   , BS.BONUS_DEPRN_RESERVE
632                   , 0                 --IMPAIRMENT_AMOUNT
633                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_IMPAIRMENT, 0) --YTD_IMPAIRMENT
634                   , BS.impairment_reserve
635                   , BS.LTD_PRODUCTION
636                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_PRODUCTION, 0) --YTD_PRODUCTION
637                   , null              --PRODUCTION
638                   , 0                 --REVAL_AMORTIZATION
639                   , 0                 --REVAL_DEPRN_EXPENSE
640                   , BS.REVAL_RESERVE
641                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_REVAL_DEPRN_EXPENSE, 0) --YTD_REVAL_DEPRN_EXPENSE
642                   , 'N'                --DEPRN_OVERRIDE_FLAG
643                   , 0                 --SYSTEM_DEPRN_AMOUNT
644                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_PROCEEDS_OF_SALE, 0) --YTD_PROCEEDS_OF_SALE
645                   , BS.LTD_PROCEEDS_OF_SALE
646                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_COST_OF_REMOVAL, 0) --YTD_COST_OF_REMOVAL
647                   , BS.LTD_COST_OF_REMOVAL
648                   , 0                 --DEPRN_ADJUSTMENT_AMOUNT
649                   , 0                 --EXPENSE_ADJUSTMENT_AMOUNT
650                   , 0                 --UNPLANNED_AMOUNT
651                   , 0                 --RESERVE_ADJUSTMENT_AMOUNT
652                   , p_trans_rec.who_info.creation_date
653                   , p_trans_rec.who_info.created_by
654                   , p_trans_rec.who_info.last_update_date
655                   , p_trans_rec.who_info.last_updated_by
656          FROM FA_MC_BOOKS_SUMMARY BS
657          WHERE BS.ASSET_ID = p_asset_hdr_rec.asset_id
658          AND   BS.BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
659          AND   BS.period_counter = l_last_period_counter
660          AND   BS.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
661 
662    else
663       FORALL i in tbs_period_counter.FIRST..tbs_period_counter.LAST
664          INSERT INTO FA_BOOKS_SUMMARY(
665                     ASSET_ID
666                   , BOOK_TYPE_CODE
667                   , PERIOD_COUNTER
668                   , FISCAL_YEAR
669                   , PERIOD_NUM
670                   , CALENDAR_PERIOD_OPEN_DATE
671                   , CALENDAR_PERIOD_CLOSE_DATE
672                   , RESET_ADJUSTED_COST_FLAG
673                   , CHANGE_IN_COST
674                   , CHANGE_IN_ADDITIONS_COST
675                   , CHANGE_IN_ADJUSTMENTS_COST
676                   , CHANGE_IN_RETIREMENTS_COST
677                   , CHANGE_IN_CIP_COST
681                   , PERCENT_SALVAGE_VALUE
678                   , COST
679                   , CIP_COST
680                   , SALVAGE_TYPE
682                   , SALVAGE_VALUE
683                   , MEMBER_SALVAGE_VALUE
684                   , RECOVERABLE_COST
685                   , DEPRN_LIMIT_TYPE
686                   , ALLOWED_DEPRN_LIMIT
687                   , ALLOWED_DEPRN_LIMIT_AMOUNT
688                   , MEMBER_DEPRN_LIMIT_AMOUNT
689                   , ADJUSTED_RECOVERABLE_COST
690                   , ADJUSTED_COST
691                   , DEPRECIATE_FLAG
692                   , DISABLED_FLAG
693                   , DATE_PLACED_IN_SERVICE
694                   , DEPRN_METHOD_CODE
695                   , LIFE_IN_MONTHS
696                   , RATE_ADJUSTMENT_FACTOR
697                   , ADJUSTED_RATE
698                   , FORMULA_FACTOR
699                   , BONUS_RULE
700                   , ADJUSTED_CAPACITY
701                   , PRODUCTION_CAPACITY
702                   , UNIT_OF_MEASURE
703                   , REMAINING_LIFE1
704                   , REMAINING_LIFE2
705                   , UNREVALUED_COST
706                   , REVAL_CEILING
707                   , CEILING_NAME
708                   , REVAL_AMORTIZATION_BASIS
709                   , EOFY_ADJ_COST
710                   , EOFY_FORMULA_FACTOR
711                   , EOFY_RESERVE
712                   , EOP_ADJ_COST
713                   , EOP_FORMULA_FACTOR
714                   , SHORT_FISCAL_YEAR_FLAG
715                   , GROUP_ASSET_ID
716                   , SUPER_GROUP_ID
717                   , OVER_DEPRECIATE_OPTION
718                   , TERMINAL_GAIN_LOSS_AMOUNT
719                   , TERMINAL_GAIN_LOSS_FLAG
720                   , DEPRN_AMOUNT
721                   , YTD_DEPRN
722                   , DEPRN_RESERVE
723                   , BONUS_DEPRN_AMOUNT
724                   , BONUS_YTD_DEPRN
725                   , BONUS_DEPRN_RESERVE
726                   , IMPAIRMENT_AMOUNT
727                   , impairment_reserve
728                   , YTD_IMPAIRMENT
729                   , LTD_PRODUCTION
730                   , YTD_PRODUCTION
731                   , PRODUCTION
732                   , REVAL_AMORTIZATION
733                   , REVAL_DEPRN_EXPENSE
734                   , REVAL_RESERVE
735                   , YTD_REVAL_DEPRN_EXPENSE
736                   , DEPRN_OVERRIDE_FLAG
737                   , SYSTEM_DEPRN_AMOUNT
738                   , YTD_PROCEEDS_OF_SALE
739                   , LTD_PROCEEDS_OF_SALE
740                   , YTD_COST_OF_REMOVAL
741                   , LTD_COST_OF_REMOVAL
742                   , DEPRN_ADJUSTMENT_AMOUNT
743                   , EXPENSE_ADJUSTMENT_AMOUNT
744                   , UNPLANNED_AMOUNT
745                   , RESERVE_ADJUSTMENT_AMOUNT
746                   , CREATION_DATE
747                   , CREATED_BY
748                   , LAST_UPDATE_DATE
749                   , LAST_UPDATED_BY
750                   )
751          SELECT     p_asset_hdr_rec.asset_id
752                   , p_asset_hdr_rec.book_type_code
753                   , tbs_period_counter(i)
754                   , tbs_fiscal_year(i)
755                   , tbs_period_num(i)
756                   , tbs_calendar_period_open_date(i)
757                   , tbs_calendar_period_close_date(i)
758                   , tbs_reset_adjusted_cost_flag(i)
759                   , 0                 --CHANGE_IN_COST
760                   , 0                 --CHANGE_IN_ADDITIONS_COST
761                   , 0                 --CHANGE_IN_ADJUSTMENTS_COST
762                   , 0                 --CHANGE_IN_RETIREMENTS_COST
763                   , 0                 --CHANGE_IN_CIP_COST
764                   , BS.COST
765                   , BS.CIP_COST
766                   , BS.SALVAGE_TYPE
767                   , BS.PERCENT_SALVAGE_VALUE
768                   , BS.SALVAGE_VALUE
769                   , BS.MEMBER_SALVAGE_VALUE
770                   , BS.RECOVERABLE_COST
771                   , BS.DEPRN_LIMIT_TYPE
772                   , BS.ALLOWED_DEPRN_LIMIT
773                   , BS.ALLOWED_DEPRN_LIMIT_AMOUNT
774                   , BS.MEMBER_DEPRN_LIMIT_AMOUNT
775                   , BS.ADJUSTED_RECOVERABLE_COST
776                   , BS.ADJUSTED_COST
777                   , BS.DEPRECIATE_FLAG
778                   , BS.DISABLED_FLAG
779                   , BS.DATE_PLACED_IN_SERVICE
780                   , BS.DEPRN_METHOD_CODE
781                   , BS.LIFE_IN_MONTHS
782                   , BS.RATE_ADJUSTMENT_FACTOR
783                   , BS.ADJUSTED_RATE
784                   , BS.FORMULA_FACTOR
785                   , BS.BONUS_RULE
786                   , BS.ADJUSTED_CAPACITY
787                   , BS.PRODUCTION_CAPACITY
788                   , BS.UNIT_OF_MEASURE
789                   , BS.REMAINING_LIFE1
790                   , BS.REMAINING_LIFE2
791                   , BS.UNREVALUED_COST
792                   , BS.REVAL_CEILING
793                   , BS.CEILING_NAME
794                   , BS.REVAL_AMORTIZATION_BASIS
795                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.EOFY_ADJ_COST, BS.ADJUSTED_COST) --EOFY_ADJ_COST
796                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.EOFY_FORMULA_FACTOR, BS.FORMULA_FACTOR) --EOFY_FORMULA_FACTOR
797                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.EOFY_RESERVE,
798                                            tbs_fiscal_year(i) - 1, BS.DEPRN_RESERVE, 0) --EOFY_RESERVE
799                   , BS.ADJUSTED_COST --EOP_ADJ_COST
800                   , BS.FORMULA_FACTOR --EOP_FORMULA_FACTOR
801                   , BS.SHORT_FISCAL_YEAR_FLAG
802                   , BS.GROUP_ASSET_ID
803                   , BS.SUPER_GROUP_ID
804                   , BS.OVER_DEPRECIATE_OPTION
808                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_DEPRN, 0) --YTD_DEPRN
805                   , 0                 --TERMINAL_GAIN_LOSS_AMOUNT
806                   , 'N'               --TERMINAL_GAIN_LOSS_FLAG
807                   , 0                 --DEPRN_AMOUNT
809                   , BS.DEPRN_RESERVE
810                   , 0                 --BONUS_DEPRN_AMOUNT
811                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.BONUS_YTD_DEPRN, 0) --BONUS_YTD_DEPRN
812                   , BS.BONUS_DEPRN_RESERVE
813                   , 0                 --IMPAIRMENT_AMOUNT
814                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_IMPAIRMENT, 0) --YTD_IMPAIRMENT
815                   , BS.impairment_reserve
816                   , BS.LTD_PRODUCTION
817                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_PRODUCTION, 0) --YTD_PRODUCTION
818                   , null              --PRODUCTION
819                   , 0                 --REVAL_AMORTIZATION
820                   , 0                 --REVAL_DEPRN_EXPENSE
821                   , BS.REVAL_RESERVE
822                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_REVAL_DEPRN_EXPENSE, 0) --YTD_REVAL_DEPRN_EXPENSE
823                   , 'N'                --DEPRN_OVERRIDE_FLAG
824                   , 0                 --SYSTEM_DEPRN_AMOUNT
825                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_PROCEEDS_OF_SALE, 0) --YTD_PROCEEDS_OF_SALE
826                   , BS.LTD_PROCEEDS_OF_SALE
827                   , DECODE(BS.FISCAL_YEAR, tbs_fiscal_year(i), BS.YTD_COST_OF_REMOVAL, 0) --YTD_COST_OF_REMOVAL
828                   , BS.LTD_COST_OF_REMOVAL
829                   , 0                 --DEPRN_ADJUSTMENT_AMOUNT
830                   , 0                 --EXPENSE_ADJUSTMENT_AMOUNT
831                   , 0                 --UNPLANNED_AMOUNT
832                   , 0                 --RESERVE_ADJUSTMENT_AMOUNT
833                   , p_trans_rec.who_info.creation_date
834                   , p_trans_rec.who_info.created_by
835                   , p_trans_rec.who_info.last_update_date
836                   , p_trans_rec.who_info.last_updated_by
837          FROM FA_BOOKS_SUMMARY BS
838          WHERE BS.ASSET_ID = p_asset_hdr_rec.asset_id
839          AND   BS.BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
840          AND   BS.period_counter = l_last_period_counter;
841    end if; --p_mrc_sob_type_code = 'R'
842 
843    if p_depreciate_flag_change then
844 
845       if p_mrc_sob_type_code = 'R' then
846          UPDATE FA_MC_BOOKS_SUMMARY
847          SET    DEPRECIATE_FLAG = p_asset_fin_rec_new.depreciate_flag
848          WHERE  ASSET_ID = p_asset_hdr_rec.asset_id
849          AND    BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
850          AND    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
851       else
852          UPDATE FA_BOOKS_SUMMARY
853          SET    DEPRECIATE_FLAG = p_asset_fin_rec_new.depreciate_flag
854          WHERE  ASSET_ID = p_asset_hdr_rec.asset_id
855          AND    BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code;
856      end if;
857 
858    elsif p_disabled_flag_change then
859 
860       if p_mrc_sob_type_code = 'R' then
861          UPDATE FA_MC_BOOKS_SUMMARY
862          SET    DISABLED_FLAG = p_asset_fin_rec_new.disabled_flag
863          WHERE  ASSET_ID = p_asset_hdr_rec.asset_id
864          AND    BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
865          AND    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
866       else
867          UPDATE FA_BOOKS_SUMMARY
868          SET    DISABLED_FLAG = p_asset_fin_rec_new.disabled_flag
869          WHERE  ASSET_ID = p_asset_hdr_rec.asset_id
870          AND    BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code;
871      end if;
872 
873    end if;
874 
875    if (p_log_level_rec.statement_level) then
876       fa_debug_pkg.add(l_calling_fn||'()-', '# of records inserted', tbs_period_counter.COUNT);
877    end if;
878 
879    return true;
880 
881 EXCEPTION
882    WHEN OTHERS THEN
883       if (p_log_level_rec.statement_level) then
884          fa_debug_pkg.add(l_calling_fn||'(OTHERS)-', 'sqlcode', sqlcode);
885       end if;
886 
887       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
888 
889       return false;
890 
891 END catchupBooksSummary;
892 
893 
894 
895 --+==============================================================================
896 -- Procedure initMemberTable
897 --
898 -- Initialize global variables defined in specification.
899 --+==============================================================================
900 PROCEDURE initMemberTable IS
901 BEGIN
902 
903    --
904    -- Initialize global variables
905    --
906    fa_amort_pvt.tmd_period_counter.delete;
907    fa_amort_pvt.tmd_cost.delete;
908    fa_amort_pvt.tm_cost.delete;
909    fa_amort_pvt.tmd_cip_cost.delete;
910    fa_amort_pvt.tm_cip_cost.delete;
911    fa_amort_pvt.tmd_salvage_value.delete;
912    fa_amort_pvt.tm_salvage_value.delete;
913    fa_amort_pvt.tmd_deprn_limit_amount.delete;
914    fa_amort_pvt.tm_deprn_limit_amount.delete;
915 
916 END initMemberTable;
917 
918 --+==============================================================================
919 -- Procedure InitGlobeVariables
920 --
921 -- Initialize global variables defined in specification.
922 --+==============================================================================
923 PROCEDURE InitGlobeVariables IS
924 BEGIN
925 
926    --
927    -- Initialize global variables
928    --
929    fa_amort_pvt.t_period_counter.delete;
930    fa_amort_pvt.t_fiscal_year.delete;
931    fa_amort_pvt.t_period_num.delete;
932    fa_amort_pvt.t_calendar_period_open_date.delete;
933    fa_amort_pvt.t_calendar_period_close_date.delete;
934    fa_amort_pvt.t_reset_adjusted_cost_flag.delete;
935    fa_amort_pvt.t_change_in_cost.delete;
936    fa_amort_pvt.t_cost.delete;
937    fa_amort_pvt.t_cip_cost.delete;
938    fa_amort_pvt.t_salvage_type.delete;
939    fa_amort_pvt.t_percent_salvage_value.delete;
940    fa_amort_pvt.t_salvage_value.delete;
941    fa_amort_pvt.t_member_salvage_value.delete;
942    fa_amort_pvt.t_recoverable_cost.delete;
943    fa_amort_pvt.t_deprn_limit_type.delete;
944    fa_amort_pvt.t_allowed_deprn_limit.delete;
945    fa_amort_pvt.t_allowed_deprn_limit_amount.delete;
946    fa_amort_pvt.t_member_deprn_limit_amount.delete;
947    fa_amort_pvt.t_adjusted_recoverable_cost.delete;
948    fa_amort_pvt.t_adjusted_cost.delete;
949    fa_amort_pvt.t_depreciate_flag.delete;
950    fa_amort_pvt.t_date_placed_in_service.delete;
951    fa_amort_pvt.t_deprn_method_code.delete;
952    fa_amort_pvt.t_life_in_months.delete;
953    fa_amort_pvt.t_rate_adjustment_factor.delete;
954    fa_amort_pvt.t_adjusted_rate.delete;
955    fa_amort_pvt.t_bonus_rule.delete;
956    fa_amort_pvt.t_adjusted_capacity.delete;
957    fa_amort_pvt.t_production_capacity.delete;
958    fa_amort_pvt.t_unit_of_measure.delete;
959    fa_amort_pvt.t_remaining_life1.delete;
960    fa_amort_pvt.t_remaining_life2.delete;
961    fa_amort_pvt.t_formula_factor.delete;
962    fa_amort_pvt.t_unrevalued_cost.delete;
963    fa_amort_pvt.t_reval_amortization_basis.delete;
964    fa_amort_pvt.t_reval_ceiling.delete;
965    fa_amort_pvt.t_ceiling_name.delete;
966    fa_amort_pvt.t_eofy_adj_cost.delete;
967    fa_amort_pvt.t_eofy_formula_factor.delete;
968    fa_amort_pvt.t_eofy_reserve.delete;
969    fa_amort_pvt.t_eop_adj_cost.delete;
970    fa_amort_pvt.t_eop_formula_factor.delete;
971    fa_amort_pvt.t_short_fiscal_year_flag.delete;
972    fa_amort_pvt.t_group_asset_id.delete;
973    fa_amort_pvt.t_super_group_id.delete;
974    fa_amort_pvt.t_over_depreciate_option.delete;
975    fa_amort_pvt.t_deprn_amount.delete;
976    fa_amort_pvt.t_ytd_deprn.delete;
977    fa_amort_pvt.t_deprn_reserve.delete;
978    fa_amort_pvt.t_bonus_deprn_amount.delete;
979    fa_amort_pvt.t_bonus_ytd_deprn.delete;
980    fa_amort_pvt.t_bonus_deprn_reserve.delete;
981    fa_amort_pvt.t_bonus_rate.delete;
982    fa_amort_pvt.t_impairment_amount.delete;
983    fa_amort_pvt.t_ytd_impairment.delete;
984    fa_amort_pvt.t_impairment_reserve.delete;
985    fa_amort_pvt.t_ltd_production.delete;
986    fa_amort_pvt.t_ytd_production.delete;
987    fa_amort_pvt.t_production.delete;
988    fa_amort_pvt.t_reval_amortization.delete;
989    fa_amort_pvt.t_reval_deprn_expense.delete;
990    fa_amort_pvt.t_reval_reserve.delete;
991    fa_amort_pvt.t_ytd_reval_deprn_expense.delete;
992    fa_amort_pvt.t_deprn_override_flag.delete;
993    fa_amort_pvt.t_system_deprn_amount.delete;
994    fa_amort_pvt.t_system_bonus_deprn_amount.delete;
995    fa_amort_pvt.t_ytd_proceeds_of_sale.delete;
996    fa_amort_pvt.t_ltd_proceeds_of_sale.delete;
997    fa_amort_pvt.t_ytd_cost_of_removal.delete;
998    fa_amort_pvt.t_ltd_cost_of_removal.delete;
999    fa_amort_pvt.t_deprn_adjustment_amount.delete;
1000    fa_amort_pvt.t_expense_adjustment_amount.delete;
1001    fa_amort_pvt.t_reserve_adjustment_amount.delete;
1002 
1003 END InitGlobeVariables;
1004 
1005 --+==============================================================================
1006 -- Function: createGroup
1007 --
1008 -- Description:
1009 --     This function should be called to maintain group asset that has not
1010 --     depreciated or a member asset has not assigned.
1011 --     What this function does is to recreate records in FA_BOOKS_SUMAMRY by
1012 --     deleting all of them and reinsert all of them.
1013 --
1014 --+==============================================================================
1015 FUNCTION createGroup(
1016     p_trans_rec            FA_API_TYPES.trans_rec_type,
1017     p_asset_hdr_rec        FA_API_TYPES.asset_hdr_rec_type,
1018     p_asset_type_rec       FA_API_TYPES.asset_type_rec_type,
1019     p_period_rec           FA_API_TYPES.period_rec_type,
1020     p_asset_fin_rec        FA_API_TYPES.asset_fin_rec_type,
1021     p_asset_deprn_rec      FA_API_TYPES.asset_deprn_rec_type,
1022     p_mrc_sob_type_code    VARCHAR2,
1023     p_calling_fn           VARCHAR
1024 , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return BOOLEAN IS
1025 
1026    l_calling_fn  VARCHAR2(50) := 'FA_AMORT_PVT.createGroup';
1027 
1028    --
1029    -- Get all possible period information that the group asset needs
1030    --
1031    CURSOR c_get_period_rec IS
1032      select fy.fiscal_year * ct.NUMBER_PER_FISCAL_YEAR + cp.PERIOD_NUM period_counter
1033           , cp.start_date calendar_period_open_date
1037           , 'N'
1034           , cp.end_date calendar_period_close_date
1035           , cp.period_num period_num
1036           , fy.fiscal_year fiscal_year
1038      from   fa_fiscal_year fy
1039           , fa_calendar_types ct
1040           , fa_calendar_periods cp
1041      where  ct.calendar_type = fa_cache_pkg.fazcbc_record.deprn_calendar
1042      and    fy.fiscal_year_name = fa_cache_pkg.fazcbc_record.fiscal_year_name
1043      and    ct.fiscal_year_name = fa_cache_pkg.fazcbc_record.fiscal_year_name
1044      and    ct.calendar_type = cp.calendar_type
1045      and    cp.start_date between fy.start_date and fy.end_date
1046      and    fa_cache_pkg.fazcbc_record.last_period_counter + 1 >=
1047                  fy.fiscal_year * ct.NUMBER_PER_FISCAL_YEAR + cp.PERIOD_NUM
1048      and    cp.end_date >= p_asset_fin_rec.date_placed_in_service
1049      order by period_counter;
1050 
1051    tbs_period_counter              tab_num15_type;
1052    tbs_calendar_period_open_date   tab_date_type;
1053    tbs_calendar_period_close_date  tab_date_type;
1054    tbs_period_num                  tab_num15_type;
1055    tbs_fiscal_year                 tab_num15_type;
1056    tbs_reset_adjusted_cost_flag    tab_char1_type;
1057 
1058 BEGIN
1059 
1060    if (p_log_level_rec.statement_level) then
1061       fa_debug_pkg.add(l_calling_fn||'()+', 'asset_id', p_asset_hdr_rec.asset_id);
1062    end if;
1063 
1064    --
1065    -- Delete all records for this group asset to recreate them
1066    --
1067    if p_mrc_sob_type_code = 'R' then
1068       DELETE FROM FA_MC_BOOKS_SUMMARY
1069       WHERE  ASSET_ID = p_asset_hdr_rec.asset_id
1070       AND    BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
1071       AND    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
1072    else
1073       DELETE FROM FA_BOOKS_SUMMARY
1074       WHERE  ASSET_ID = p_asset_hdr_rec.asset_id
1075       AND    BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code;
1076    end if;
1077 
1078    if (p_log_level_rec.statement_level) then
1079       fa_debug_pkg.add(l_calling_fn, 'Construct Period information', '.', p_log_level_rec => p_log_level_rec);
1080    end if;
1081 
1082    --
1083    -- Construct period information part for FA_BOOKS_SUMAMRY
1084    --
1085    OPEN c_get_period_rec;
1086    FETCH c_get_period_rec BULK COLLECT INTO tbs_period_counter
1087                                           , tbs_calendar_period_open_date
1088                                           , tbs_calendar_period_close_date
1089                                           , tbs_period_num
1090                                           , tbs_fiscal_year
1091                                           , tbs_reset_adjusted_cost_flag
1092                                           ;
1093    CLOSE c_get_period_rec;
1094 
1095    if (p_log_level_rec.statement_level) then
1096       fa_debug_pkg.add(l_calling_fn||'()-', '# of records will be inserted',
1097                        tbs_period_counter.COUNT);
1098    end if;
1099 
1100    if (tbs_period_counter.COUNT = 0) then
1101       tbs_period_counter(1) := p_period_rec.period_counter;
1102       tbs_calendar_period_open_date(1) := p_period_rec.calendar_period_open_date;
1103       tbs_calendar_period_close_date(1) := p_period_rec.calendar_period_close_date;
1104       tbs_period_num(1) := p_period_rec.period_num;
1105       tbs_fiscal_year(1) := p_period_rec.fiscal_year;
1106       tbs_reset_adjusted_cost_flag(1) := 'Y';
1107    end if;
1108    --
1109    -- First record always get adjusted cost reset
1110    --
1111    tbs_reset_adjusted_cost_flag(1) := 'Y';
1112 
1113    if (p_log_level_rec.statement_level) then
1114       fa_debug_pkg.add(l_calling_fn, 'Insert into', 'FA_BOOKS_SUMMARY', p_log_level_rec => p_log_level_rec);
1115    end if;
1116    --
1117    -- Insert all necessary records from period where DPIS falls into
1118    --
1119    if p_mrc_sob_type_code = 'R' then
1120       FORALL i in tbs_period_counter.FIRST..tbs_period_counter.LAST
1121          INSERT INTO FA_MC_BOOKS_SUMMARY(
1122                    SET_OF_BOOKS_ID
1123                  , ASSET_ID
1124                  , BOOK_TYPE_CODE
1125                  , PERIOD_COUNTER
1126                  , FISCAL_YEAR
1127                  , PERIOD_NUM
1128                  , CALENDAR_PERIOD_OPEN_DATE
1129                  , CALENDAR_PERIOD_CLOSE_DATE
1130                  , RESET_ADJUSTED_COST_FLAG
1131                  , CHANGE_IN_COST
1132                  , CHANGE_IN_ADDITIONS_COST
1133                  , CHANGE_IN_ADJUSTMENTS_COST
1134                  , CHANGE_IN_RETIREMENTS_COST
1135                  , CHANGE_IN_CIP_COST
1136                  , COST
1137                  , CIP_COST
1138                  , SALVAGE_TYPE
1139                  , PERCENT_SALVAGE_VALUE
1140                  , SALVAGE_VALUE
1141                  , MEMBER_SALVAGE_VALUE
1142                  , RECOVERABLE_COST
1143                  , DEPRN_LIMIT_TYPE
1144                  , ALLOWED_DEPRN_LIMIT
1145                  , ALLOWED_DEPRN_LIMIT_AMOUNT
1146                  , MEMBER_DEPRN_LIMIT_AMOUNT
1147                  , ADJUSTED_RECOVERABLE_COST
1148                  , ADJUSTED_COST
1149                  , DEPRECIATE_FLAG
1150                  , DISABLED_FLAG
1151                  , DATE_PLACED_IN_SERVICE
1152                  , DEPRN_METHOD_CODE
1153                  , LIFE_IN_MONTHS
1154                  , RATE_ADJUSTMENT_FACTOR
1155                  , ADJUSTED_RATE
1156                  , FORMULA_FACTOR
1157                  , BONUS_RULE
1158                  , ADJUSTED_CAPACITY
1159                  , PRODUCTION_CAPACITY
1160                  , UNIT_OF_MEASURE
1161                  , REMAINING_LIFE1
1162                  , REMAINING_LIFE2
1163                  , UNREVALUED_COST
1164                  , REVAL_CEILING
1165                  , CEILING_NAME
1166                  , REVAL_AMORTIZATION_BASIS
1170                  , EOP_ADJ_COST
1167                  , EOFY_ADJ_COST
1168                  , EOFY_FORMULA_FACTOR
1169                  , EOFY_RESERVE
1171                  , EOP_FORMULA_FACTOR
1172                  , SHORT_FISCAL_YEAR_FLAG
1173                  , GROUP_ASSET_ID
1174                  , SUPER_GROUP_ID
1175                  , OVER_DEPRECIATE_OPTION
1176                  , TERMINAL_GAIN_LOSS_AMOUNT
1177                  , TERMINAL_GAIN_LOSS_FLAG
1178                  , DEPRN_AMOUNT
1179                  , YTD_DEPRN
1180                  , DEPRN_RESERVE
1181                  , BONUS_DEPRN_AMOUNT
1182                  , BONUS_YTD_DEPRN
1183                  , BONUS_DEPRN_RESERVE
1184                  , IMPAIRMENT_AMOUNT
1185                  , YTD_IMPAIRMENT
1186                  , impairment_reserve
1187                  , LTD_PRODUCTION
1188                  , YTD_PRODUCTION
1189                  , PRODUCTION
1190                  , REVAL_AMORTIZATION
1191                  , REVAL_DEPRN_EXPENSE
1192                  , REVAL_RESERVE
1193                  , YTD_REVAL_DEPRN_EXPENSE
1194                  , DEPRN_OVERRIDE_FLAG
1195                  , SYSTEM_DEPRN_AMOUNT
1196                  , YTD_PROCEEDS_OF_SALE
1197                  , LTD_PROCEEDS_OF_SALE
1198                  , YTD_COST_OF_REMOVAL
1199                  , LTD_COST_OF_REMOVAL
1200                  , DEPRN_ADJUSTMENT_AMOUNT
1201                  , EXPENSE_ADJUSTMENT_AMOUNT
1202                  , UNPLANNED_AMOUNT
1203                  , RESERVE_ADJUSTMENT_AMOUNT
1204                  , CREATION_DATE
1205                  , CREATED_BY
1206                  , LAST_UPDATE_DATE
1207                  , LAST_UPDATED_BY
1208                             )
1209          VALUES(   p_asset_hdr_rec.set_of_books_id
1210                  , p_asset_hdr_rec.asset_id
1211                  , p_asset_hdr_rec.book_type_code
1212                  , tbs_period_counter(i)
1213                  , tbs_fiscal_year(i)
1214                  , tbs_period_num(i)
1215                  , tbs_calendar_period_open_date(i)
1216                  , tbs_calendar_period_close_date(i)
1217                  , tbs_reset_adjusted_cost_flag(i)
1218                  , 0        --CHANGE_IN_COST
1219                  , 0        --CHANGE_IN_ADDITIONS_COST
1220                  , 0        --CHANGE_IN_ADJUSTMENTS_COST
1221                  , 0        --CHANGE_IN_RETIREMENTS_COST
1222                  , 0        --CHANGE_IN_CIP_COST
1223                  , 0        --COST
1224                  , 0        --CIP_COST
1225                  , p_asset_fin_rec.salvage_type           --SALVAGE_TYPE
1226                  , p_asset_fin_rec.percent_salvage_value  --PERCENT_SALVAGE_VALUE
1227                  , 0        --SALVAGE_VALUE
1228                  , 0        --MEMBER_SALVAGE_VALUE
1229                  , 0        --RECOVERABLE_COST
1230                  , p_asset_fin_rec.deprn_limit_type       --DEPRN_LIMIT_TYPE
1231                  , p_asset_fin_rec.allowed_deprn_limit    --ALLOWED_DEPRN_LIMIT
1232                  , 0        --ALLOWED_DEPRN_LIMIT_AMOUNT
1233                  , 0        --MEMBER_DEPRN_LIMIT_AMOUNT
1234                  , 0        --ADJUSTED_RECOVERABLE_COST
1235                  , 0        --ADJUSTED_COST
1236                  , p_asset_fin_rec.depreciate_flag        --DEPRECIATE_FLAG
1237                  , p_asset_fin_rec.disabled_flag          --DISABLED_FLAG
1238                  , p_asset_fin_rec.date_placed_in_service --DATE_PLACED_IN_SERVICE
1239                  , p_asset_fin_rec.deprn_method_code      --DEPRN_METHOD_CODE
1240                  , p_asset_fin_rec.life_in_months         --LIFE_IN_MONTHS
1241                  , 1        --RATE_ADJUSTMENT_FACTOR
1242                  , p_asset_fin_rec.adjusted_rate          --ADJUSTED_RATE
1243                  , 1        --FORMULA_FACTOR
1244                  , p_asset_fin_rec.bonus_rule             --BONUS_RULE
1245                  , p_asset_fin_rec.adjusted_capacity      --ADJUSTED_CAPACITY
1246                  , p_asset_fin_rec.production_capacity    --PRODUCTION_CAPACITY
1247                  , p_asset_fin_rec.unit_of_measure        --UNIT_OF_MEASURE
1248                  , p_asset_fin_rec.remaining_life1        --REMAINING_LIFE1
1249                  , p_asset_fin_rec.remaining_life2        --REMAINING_LIFE2
1250                  , 0        --UNREVALUED_COST
1251                  , p_asset_fin_rec.reval_ceiling          --REVAL_CEILING
1252                  , p_asset_fin_rec.ceiling_name           --CEILING_NAME
1253                  , 0        --REVAL_AMORTIZATION_BASIS
1254                  , 0        --EOFY_ADJ_COST
1255                  , 1        --EOFY_FORMULA_FACTOR
1256                  , 0        --EOFY_RESERVE
1257                  , 0        --EOP_ADJ_COST
1258                  , 1        --EOP_FORMULA_FACTOR
1259                  , 'NO'     --SHORT_FISCAL_YEAR_FLAG
1260                  , null     --GROUP_ASSET_ID
1261                  , p_asset_fin_rec.super_group_id         --SUPER_GROUP_ID
1262                  , p_asset_fin_rec.over_depreciate_option --OVER_DEPRECIATE_OPTION
1263                  , 0        --TERMINAL_GAIN_LOSS_AMOUNT
1264                  , 'N'      --TERMINAL_GAIN_LOSS_FLAG
1265                  , 0        --DEPRN_AMOUNT
1266                  , 0        --YTD_DEPRN
1267                  , 0        --DEPRN_RESERVE
1268                  , 0        --BONUS_DEPRN_AMOUNT
1269                  , 0        --BONUS_YTD_DEPRN
1270                  , 0        --BONUS_DEPRN_RESERVE
1271                  , 0        --IMPAIRMENT_AMOUNT
1272                  , 0        --YTD_IMPAIRMENT
1273                  , 0        --impairment_reserve
1274                  , null     --LTD_PRODUCTION
1275                  , null     --YTD_PRODUCTION
1276                  , null     --PRODUCTION
1277                  , 0        --REVAL_AMORTIZATION
1278                  , 0        --REVAL_DEPRN_EXPENSE
1279                  , 0        --REVAL_RESERVE
1280                  , 0        --YTD_REVAL_DEPRN_EXPENSE
1281                  , 'N'      --DEPRN_OVERRIDE_FLAG
1282                  , 0        --SYSTEM_DEPRN_AMOUNT
1283                  , 0        --YTD_PROCEEDS_OF_SALE
1284                  , 0        --LTD_PROCEEDS_OF_SALE
1285                  , 0        --YTD_COST_OF_REMOVAL
1286                  , 0        --LTD_COST_OF_REMOVAL
1287                  , 0        --DEPRN_ADJUSTMENT_AMOUNT
1288                  , 0        --EXPENSE_ADJUSTMENT_AMOUNT
1289                  , 0        --UNPLANNED_AMOUNT
1290                  , 0        --RESERVE_ADJUSTMENT_AMOUNT
1291                  , p_trans_rec.who_info.creation_date
1292                  , p_trans_rec.who_info.created_by
1293                  , p_trans_rec.who_info.last_update_date
1294                  , p_trans_rec.who_info.last_updated_by
1295                  );
1296 
1297    else
1298 
1299       FORALL i in tbs_period_counter.FIRST..tbs_period_counter.LAST
1300          INSERT INTO FA_BOOKS_SUMMARY(
1301                    ASSET_ID
1302                  , BOOK_TYPE_CODE
1303                  , PERIOD_COUNTER
1304                  , FISCAL_YEAR
1305                  , PERIOD_NUM
1306                  , CALENDAR_PERIOD_OPEN_DATE
1307                  , CALENDAR_PERIOD_CLOSE_DATE
1308                  , RESET_ADJUSTED_COST_FLAG
1309                  , CHANGE_IN_COST
1310                  , CHANGE_IN_ADDITIONS_COST
1311                  , CHANGE_IN_ADJUSTMENTS_COST
1312                  , CHANGE_IN_RETIREMENTS_COST
1313                  , CHANGE_IN_CIP_COST
1314                  , COST
1315                  , CIP_COST
1316                  , SALVAGE_TYPE
1317                  , PERCENT_SALVAGE_VALUE
1318                  , SALVAGE_VALUE
1319                  , MEMBER_SALVAGE_VALUE
1320                  , RECOVERABLE_COST
1321                  , DEPRN_LIMIT_TYPE
1322                  , ALLOWED_DEPRN_LIMIT
1323                  , ALLOWED_DEPRN_LIMIT_AMOUNT
1324                  , MEMBER_DEPRN_LIMIT_AMOUNT
1325                  , ADJUSTED_RECOVERABLE_COST
1326                  , ADJUSTED_COST
1327                  , DEPRECIATE_FLAG
1328                  , DISABLED_FLAG
1329                  , DATE_PLACED_IN_SERVICE
1330                  , DEPRN_METHOD_CODE
1331                  , LIFE_IN_MONTHS
1332                  , RATE_ADJUSTMENT_FACTOR
1333                  , ADJUSTED_RATE
1334                  , FORMULA_FACTOR
1335                  , BONUS_RULE
1336                  , ADJUSTED_CAPACITY
1337                  , PRODUCTION_CAPACITY
1338                  , UNIT_OF_MEASURE
1339                  , REMAINING_LIFE1
1340                  , REMAINING_LIFE2
1341                  , UNREVALUED_COST
1342                  , REVAL_CEILING
1343                  , CEILING_NAME
1344                  , REVAL_AMORTIZATION_BASIS
1345                  , EOFY_ADJ_COST
1346                  , EOFY_FORMULA_FACTOR
1347                  , EOFY_RESERVE
1348                  , EOP_ADJ_COST
1349                  , EOP_FORMULA_FACTOR
1350                  , SHORT_FISCAL_YEAR_FLAG
1351                  , GROUP_ASSET_ID
1352                  , SUPER_GROUP_ID
1353                  , OVER_DEPRECIATE_OPTION
1354                  , TERMINAL_GAIN_LOSS_AMOUNT
1355                  , TERMINAL_GAIN_LOSS_FLAG
1356                  , DEPRN_AMOUNT
1357                  , YTD_DEPRN
1358                  , DEPRN_RESERVE
1359                  , BONUS_DEPRN_AMOUNT
1360                  , BONUS_YTD_DEPRN
1361                  , BONUS_DEPRN_RESERVE
1362                  , IMPAIRMENT_AMOUNT
1363                  , YTD_IMPAIRMENT
1364                  , impairment_reserve
1365                  , LTD_PRODUCTION
1366                  , YTD_PRODUCTION
1367                  , PRODUCTION
1368                  , REVAL_AMORTIZATION
1372                  , DEPRN_OVERRIDE_FLAG
1369                  , REVAL_DEPRN_EXPENSE
1370                  , REVAL_RESERVE
1371                  , YTD_REVAL_DEPRN_EXPENSE
1373                  , SYSTEM_DEPRN_AMOUNT
1374                  , YTD_PROCEEDS_OF_SALE
1375                  , LTD_PROCEEDS_OF_SALE
1376                  , YTD_COST_OF_REMOVAL
1377                  , LTD_COST_OF_REMOVAL
1378                  , DEPRN_ADJUSTMENT_AMOUNT
1379                  , EXPENSE_ADJUSTMENT_AMOUNT
1380                  , UNPLANNED_AMOUNT
1381                  , RESERVE_ADJUSTMENT_AMOUNT
1382                  , CREATION_DATE
1383                  , CREATED_BY
1384                  , LAST_UPDATE_DATE
1385                  , LAST_UPDATED_BY
1386                  )
1387          VALUES(   p_asset_hdr_rec.asset_id
1388                  , p_asset_hdr_rec.book_type_code
1389                  , tbs_period_counter(i)
1390                  , tbs_fiscal_year(i)
1391                  , tbs_period_num(i)
1392                  , tbs_calendar_period_open_date(i)
1393                  , tbs_calendar_period_close_date(i)
1394                  , tbs_reset_adjusted_cost_flag(i)
1395                  , 0        --CHANGE_IN_COST
1396                  , 0        --CHANGE_IN_ADDITIONS_COST
1397                  , 0        --CHANGE_IN_ADJUSTMENTS_COST
1398                  , 0        --CHANGE_IN_RETIREMENTS_COST
1399                  , 0        --CHANGE_IN_CIP_COST
1400                  , 0        --COST
1401                  , 0        --CIP_COST
1402                  , p_asset_fin_rec.salvage_type           --SALVAGE_TYPE
1403                  , p_asset_fin_rec.percent_salvage_value  --PERCENT_SALVAGE_VALUE
1404                  , 0        --SALVAGE_VALUE
1405                  , 0        --MEMBER_SALVAGE_VALUE
1406                  , 0        --RECOVERABLE_COST
1407                  , p_asset_fin_rec.deprn_limit_type       --DEPRN_LIMIT_TYPE
1408                  , p_asset_fin_rec.allowed_deprn_limit    --ALLOWED_DEPRN_LIMIT
1409                  , 0        --ALLOWED_DEPRN_LIMIT_AMOUNT
1410                  , 0        --MEMBER_DEPRN_LIMIT_AMOUNT
1411                  , 0        --ADJUSTED_RECOVERABLE_COST
1412                  , 0        --ADJUSTED_COST
1413                  , p_asset_fin_rec.depreciate_flag        --DEPRECIATE_FLAG
1414                  , p_asset_fin_rec.disabled_flag          --DISABLED_FLAG
1415                  , p_asset_fin_rec.date_placed_in_service --DATE_PLACED_IN_SERVICE
1416                  , p_asset_fin_rec.deprn_method_code      --DEPRN_METHOD_CODE
1417                  , p_asset_fin_rec.life_in_months         --LIFE_IN_MONTHS
1418                  , 1        --RATE_ADJUSTMENT_FACTOR
1419                  , p_asset_fin_rec.adjusted_rate          --ADJUSTED_RATE
1420                  , 1        --FORMULA_FACTOR
1421                  , p_asset_fin_rec.bonus_rule             --BONUS_RULE
1422                  , p_asset_fin_rec.adjusted_capacity      --ADJUSTED_CAPACITY
1423                  , p_asset_fin_rec.production_capacity    --PRODUCTION_CAPACITY
1424                  , p_asset_fin_rec.unit_of_measure        --UNIT_OF_MEASURE
1425                  , p_asset_fin_rec.remaining_life1        --REMAINING_LIFE1
1426                  , p_asset_fin_rec.remaining_life2        --REMAINING_LIFE2
1427                  , 0        --UNREVALUED_COST
1428                  , p_asset_fin_rec.reval_ceiling          --REVAL_CEILING
1429                  , p_asset_fin_rec.ceiling_name           --CEILING_NAME
1430                  , 0        --REVAL_AMORTIZATION_BASIS
1431                  , 0        --EOFY_ADJ_COST
1432                  , 1        --EOFY_FORMULA_FACTOR
1433                  , 0        --EOFY_RESERVE
1434                  , 0        --EOP_ADJ_COST
1435                  , 1        --EOP_FORMULA_FACTOR
1436                  , 'NO'     --SHORT_FISCAL_YEAR_FLAG
1437                  , null     --GROUP_ASSET_ID
1438                  , p_asset_fin_rec.super_group_id         --SUPER_GROUP_ID
1439                  , p_asset_fin_rec.over_depreciate_option --OVER_DEPRECIATE_OPTION
1440                  , 0        --TERMINAL_GAIN_LOSS_AMOUNT
1441                  , 'N'      --TERMINAL_GAIN_LOSS_FLAG
1442                  , 0        --DEPRN_AMOUNT
1443                  , 0        --YTD_DEPRN
1444                  , 0        --DEPRN_RESERVE
1445                  , 0        --BONUS_DEPRN_AMOUNT
1446                  , 0        --BONUS_YTD_DEPRN
1447                  , 0        --BONUS_DEPRN_RESERVE
1448                  , 0        --IMPAIRMENT_AMOUNT
1449                  , 0        --YTD_IMPAIRMENT
1450                  , 0        --impairment_reserve
1451                  , null     --LTD_PRODUCTION
1452                  , null     --YTD_PRODUCTION
1453                  , null     --PRODUCTION
1454                  , 0        --REVAL_AMORTIZATION
1455                  , 0        --REVAL_DEPRN_EXPENSE
1456                  , 0        --REVAL_RESERVE
1457                  , 0        --YTD_REVAL_DEPRN_EXPENSE
1458                  , 'N'      --DEPRN_OVERRIDE_FLAG
1459                  , 0        --SYSTEM_DEPRN_AMOUNT
1460                  , 0        --YTD_PROCEEDS_OF_SALE
1461                  , 0        --LTD_PROCEEDS_OF_SALE
1462                  , 0        --YTD_COST_OF_REMOVAL
1463                  , 0        --LTD_COST_OF_REMOVAL
1464                  , 0        --DEPRN_ADJUSTMENT_AMOUNT
1465                  , 0        --EXPENSE_ADJUSTMENT_AMOUNT
1466                  , 0        --UNPLANNED_AMOUNT
1467                  , 0        --RESERVE_ADJUSTMENT_AMOUNT
1468                  , p_trans_rec.who_info.creation_date
1469                  , p_trans_rec.who_info.created_by
1470                  , p_trans_rec.who_info.last_update_date
1471                  , p_trans_rec.who_info.last_updated_by
1472                  );
1473    end if; --p_mrc_sob_type_code = 'R'
1474 
1475    printBooksSummary(p_asset_id       => p_asset_hdr_rec.asset_id,
1476                      p_book_type_code => p_asset_hdr_rec.book_type_code,
1477                      p_period_counter => tbs_period_counter(1),
1481       fa_debug_pkg.add(l_calling_fn||'()-', '# of records inserted', tbs_period_counter.COUNT);
1478                      p_log_level_rec  => p_log_level_rec);
1479 
1480    if (p_log_level_rec.statement_level) then
1482    end if;
1483 
1484    return true;
1485 
1486 EXCEPTION
1487    WHEN OTHERS THEN
1488       if (p_log_level_rec.statement_level) then
1489          fa_debug_pkg.add(l_calling_fn||'(OTHERS)-', 'sqlcode', sqlcode);
1490       end if;
1491 
1492       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
1493 
1494       return false;
1495 END createGroup;
1496 
1497 --+==============================================================================
1498 -- Function: buildMemberTable
1499 --
1500 --+==============================================================================
1501 FUNCTION buildMemberTable(
1502      p_trans_rec                          FA_API_TYPES.trans_rec_type,
1503      p_asset_hdr_rec                      FA_API_TYPES.asset_hdr_rec_type,
1504      p_period_rec                         FA_API_TYPES.period_rec_type,
1505      p_date_placed_in_service             DATE,
1506      p_group_asset_id                     NUMBER,
1507      p_reclass_multiplier                 NUMBER,
1508      p_reclass_src_dest                   VARCHAR2,
1509      p_salvage_limit_type                 VARCHAR2,
1510      x_td_period_counter       OUT NOCOPY fa_amort_pvt.tab_num15_type,
1511      x_td_cost                 OUT NOCOPY fa_amort_pvt.tab_num_type,
1512      x_td_cip_cost             OUT NOCOPY fa_amort_pvt.tab_num_type,
1513      x_td_salvage_value        OUT NOCOPY fa_amort_pvt.tab_num_type,
1514      x_td_deprn_limit_amount   OUT NOCOPY fa_amort_pvt.tab_num_type,
1515      x_asset_fin_rec           OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
1516      x_asset_fin_rec_reclass   OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
1517      p_mrc_sob_type_code                  VARCHAR2
1518 , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)return BOOLEAN IS
1519 
1520    l_calling_fn  VARCHAR2(50) := 'FA_AMORT_PVT.buildMemberTable';
1521 
1522    --
1523    -- Get Period and 0s for cost, cip_cost, salvage value,
1524    -- deprn limit amount, percent_salvage_value, and allowed_deprn_limit
1525    -- and nulls for salvage_type and deprn_limit_type for building
1526    -- tables
1527    CURSOR c_get_period_counters (c_date date,
1528                                 c_group_asset_id number) IS
1529       select period_counter,
1530              0, 0, 0, 0, 0, null, 0, null, 0, 0, 0
1531       from   fa_books_summary
1532       where  asset_id = c_group_asset_id
1533       and    book_type_code = p_asset_hdr_rec.book_type_code
1534       and    calendar_period_close_date >= c_date
1535       order by period_counter;
1536 
1537 
1538   CURSOR c_get_member_trx IS
1539     select th.transaction_header_id
1540          , th.transaction_type_code
1541          , th.transaction_subtype
1542          , th.transaction_key
1543          , bs.period_counter
1544     from   fa_transaction_headers th
1545          , fa_books_summary bs
1546          , fa_transaction_headers mth
1547          , fa_books bk
1548     where  mth.transaction_header_id = p_trans_rec.member_transaction_header_id
1549     and    th.asset_id = mth.asset_id
1550     and    th.book_type_code = p_asset_hdr_rec.book_type_code
1551     and    bs.asset_id = p_group_asset_id
1552     and    bs.book_type_code = p_asset_hdr_rec.book_type_code
1553     and    bk.transaction_header_id_in = th.transaction_header_id
1554     and    decode(th.transaction_subtype,
1555                   'EXPENSED', greatest(decode(bk.group_asset_id,
1556                                        null,p_date_placed_in_service,
1557                                             nvl(th.amortization_start_date,
1558                                                 th.transaction_date_entered)), p_date_placed_in_service),
1559                               greatest(nvl(th.amortization_start_date,
1560                                            th.transaction_date_entered), p_date_placed_in_service))
1561                                       between bs.calendar_period_open_date
1562                                           and bs.calendar_period_close_date
1563     and    (th.transaction_type_code not in ('TRANSFER OUT', 'TRANSFER IN',
1564                                             'TRANSFER', 'TRANSFER IN/VOID',
1565                                             'RECLASS', 'UNIT ADJUSTMENT',
1566                                             'REINSTATEMENT')
1567         or  (th.transaction_type_code = 'REINSTATEMENT' and
1568              th.transaction_header_id = p_trans_rec.member_transaction_header_id));
1569 
1570    CURSOR c_get_member_trx_single IS
1571      select mth.transaction_header_id
1572           , mth.transaction_type_code
1573           , mth.transaction_subtype
1574           , mth.transaction_key
1575           , bs.period_counter
1576     from    fa_books_summary bs
1577           , fa_transaction_headers mth
1578           , fa_books bk
1579     where   mth.transaction_header_id = p_trans_rec.member_transaction_header_id
1580     and     bs.asset_id = p_group_asset_id
1581     and     bs.book_type_code = p_asset_hdr_rec.book_type_code
1582     and     bk.transaction_header_id_in = mth.transaction_header_id
1583     and     decode(mth.transaction_subtype,
1584                    'EXPENSED', greatest(decode(bk.group_asset_id,
1585                                         null,p_date_placed_in_service,
1586                                              nvl(mth.amortization_start_date,
1587                                                  mth.transaction_date_entered)), p_date_placed_in_service),
1588                                greatest(nvl(mth.amortization_start_date,
1589                                             mth.transaction_date_entered), p_date_placed_in_service))
1590                                        between bs.calendar_period_open_date
1594                                              'RECLASS', 'UNIT ADJUSTMENT',
1591                                            and bs.calendar_period_close_date
1592     and     (mth.transaction_type_code not in ('TRANSFER OUT', 'TRANSFER IN',
1593                                              'TRANSFER', 'TRANSFER IN/VOID',
1595                                              'REINSTATEMENT')
1596        or    (mth.transaction_type_code = 'REINSTATEMENT' and
1597               mth.transaction_header_id = p_trans_rec.member_transaction_header_id));
1598 
1599    --
1600    -- Cursor to get retirement information using retirement
1601    -- transaction_header_id
1602    --
1603    CURSOR c_get_ret_info (c_transaction_header_id number) IS
1604      select ret.date_retired
1605           , ret.cost_retired
1606           , nvl(ret.reserve_retired, 0)
1607           , ret.proceeds_of_sale
1608           , ret.cost_of_removal
1609      from   fa_retirements ret
1610      where  ret.transaction_header_id_in = c_transaction_header_id
1611      and    ret.transaction_header_id_out is null;
1612 
1613    CURSOR c_get_mc_ret_info (c_transaction_header_id number) IS
1614      select ret.date_retired
1615           , ret.cost_retired
1616           , nvl(ret.reserve_retired, 0)
1617           , ret.proceeds_of_sale
1618           , ret.cost_of_removal
1619      from   fa_mc_retirements ret
1620      where  ret.transaction_header_id_in = c_transaction_header_id
1621      and    ret.transaction_header_id_out is null
1622      and    ret.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
1623 
1624    --bug6912446
1625    -- Following cursors to get retirement period for reinstatement trx
1626    CURSOR c_get_ret_period (c_transaction_header_id number)IS
1627       select bs.period_counter
1628       from   fa_books_summary bs
1629            , fa_retirements rt
1630       where  bs.asset_id = p_group_asset_id
1631       and    bs.book_type_code = p_asset_hdr_rec.book_type_code
1632       and    rt.date_retired between bs.calendar_period_open_date and bs.calendar_period_close_date
1633       and    rt.transaction_header_id_out = c_transaction_header_id;
1634 
1635    CURSOR c_get_mc_ret_period (c_transaction_header_id number)IS
1636       select bs.period_counter
1637       from   fa_mc_books_summary bs
1638            , fa_mc_retirements rt
1639       where  bs.asset_id = p_group_asset_id
1640       and    bs.book_type_code = p_asset_hdr_rec.book_type_code
1641       and    bs.set_of_books_id = p_asset_hdr_rec.set_of_books_id
1642       and    rt.date_retired between bs.calendar_period_open_date and bs.calendar_period_close_date
1643       and    rt.transaction_header_id_out = c_transaction_header_id
1644       and    rt.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
1645 
1646    --End of bug6912446
1647 
1648    --
1649    -- Cursor to get delta information in cost for a given transaction
1650    -- p_reclass_multiplier will be -1 if this is source group asset process.
1651    -- it wil be 1 for all other cases.
1652    --
1653    CURSOR c_get_deltas ( c_transaction_header_id number) IS
1654      select p_reclass_multiplier * (inbk.cost - nvl(outbk.cost, 0))
1655           , p_reclass_multiplier * (nvl(inbk.cip_cost, 0) - nvl(outbk.cip_cost, 0))
1656           , p_reclass_multiplier * (inbk.salvage_value - nvl(outbk.salvage_value, 0))
1657           , p_reclass_multiplier * (nvl(decode(inbk.deprn_limit_type, 'NONE', inbk.salvage_value,
1658                                                inbk.allowed_deprn_limit_amount), 0) -
1659                                     nvl(decode(outbk.deprn_limit_type, 'NONE', outbk.salvage_value,
1660                                                outbk.allowed_deprn_limit_amount), 0)
1661                                    )
1662           , inbk.salvage_type
1663           , outbk.salvage_type
1664           , inbk.percent_salvage_value
1665           , outbk.percent_salvage_value
1666           , inbk.deprn_limit_type
1667           , outbk.deprn_limit_type
1668           , inbk.allowed_deprn_limit
1669           , outbk.allowed_deprn_limit
1670      from   fa_books inbk,
1671             fa_books outbk
1672           , fa_transaction_headers mth
1673      where  mth.transaction_header_id = p_trans_rec.member_transaction_header_id
1674      and    inbk.asset_id = mth.asset_id
1675      and    outbk.asset_id(+) = inbk.asset_id
1676      and    inbk.book_type_code = p_asset_hdr_rec.book_type_code
1677      and    outbk.book_type_code(+) = inbk.book_type_code
1678      and    inbk.transaction_header_id_in = c_transaction_header_id
1679      and    outbk.transaction_header_id_out(+) = inbk.transaction_header_id_in;
1680 
1681    CURSOR c_get_mc_deltas ( c_transaction_header_id number) IS
1682      select p_reclass_multiplier * (inbk.cost - nvl(outbk.cost, 0))
1683           , p_reclass_multiplier * (nvl(inbk.cip_cost, 0) - nvl(outbk.cip_cost, 0))
1684           , p_reclass_multiplier * (inbk.salvage_value - nvl(outbk.salvage_value, 0))
1685           , p_reclass_multiplier *
1686                 (decode(inbk.deprn_limit_type,
1687                            outbk.deprn_limit_type,
1688                               nvl(decode(inbk.deprn_limit_type, 'NONE', inbk.salvage_value,
1689                                                                      inbk.allowed_deprn_limit_amount), 0) -
1690                               nvl(decode(outbk.deprn_limit_type, 'NONE', outbk.salvage_value,
1691                                                                      outbk.allowed_deprn_limit_amount), 0),
1692                               nvl(decode(inbk.deprn_limit_type, 'NONE', inbk.salvage_value,
1693                                                                         inbk.allowed_deprn_limit_amount), 0)))
1694           , inbk.salvage_type
1695           , outbk.salvage_type
1696           , inbk.percent_salvage_value
1697           , outbk.percent_salvage_value
1698           , inbk.deprn_limit_type
1699           , outbk.deprn_limit_type
1700           , inbk.allowed_deprn_limit
1701           , outbk.allowed_deprn_limit
1705      where  mth.transaction_header_id = p_trans_rec.member_transaction_header_id
1702      from   fa_mc_books inbk,
1703             fa_mc_books outbk
1704           , fa_transaction_headers mth
1706      and    inbk.asset_id = mth.asset_id
1707      and    outbk.asset_id(+) = inbk.asset_id
1708      and    inbk.book_type_code = p_asset_hdr_rec.book_type_code
1709      and    outbk.book_type_code(+) = inbk.book_type_code
1710      and    inbk.transaction_header_id_in = c_transaction_header_id
1711      and    outbk.transaction_header_id_out(+) = inbk.transaction_header_id_in
1712      and    inbk.set_of_books_id = p_asset_hdr_rec.set_of_books_id
1713      and    outbk.set_of_books_id(+) = p_asset_hdr_rec.set_of_books_id;
1714 
1715    --
1716    -- Tables to store member information
1717    --
1718    t_transaction_header_id        fa_amort_pvt.tab_num15_type;
1719 
1720    l_dpis_pc                      NUMBER(15); -- Period counter where member's dpis falls in
1721 
1722    tr_transaction_header_id       fa_amort_pvt.tab_num15_type;
1723    tr_transaction_type_code       fa_amort_pvt.tab_char30_type;
1724    tr_transaction_subtype         fa_amort_pvt.tab_char30_type;
1725    tr_transaction_key             fa_amort_pvt.tab_char3_type;
1726    tr_period_counter              fa_amort_pvt.tab_num15_type;
1727 
1728    l_date_retired                 DATE;
1729    l_cost_retired                 NUMBER;
1730    l_reserve_retired              NUMBER;
1731    l_proceeds_of_sale             NUMBER;
1732    l_cost_of_removal              NUMBER;
1733 
1734    l_cost                         NUMBER;
1735    l_cip_cost                     NUMBER;
1736    l_salvage_value                NUMBER;
1737    l_deprn_limit_amount           NUMBER;
1738    l_salvage_type                 VARCHAR2(30);
1739    l_old_salvage_type             VARCHAR2(30);
1740    l_percent_salvage_value        NUMBER;
1741    l_old_percent_salvage_value    NUMBER;
1742    l_deprn_limit_type             VARCHAR2(30);
1743    l_old_deprn_limit_type         VARCHAR2(30);
1744    l_allowed_deprn_limit          NUMBER;
1745    l_old_allowed_deprn_limit      NUMBER;
1746 
1747    t_period_counter               fa_amort_pvt.tab_num15_type;
1748    t_cost                         fa_amort_pvt.tab_num_type;
1749    t_cip_cost                     fa_amort_pvt.tab_num_type;
1750    t_salvage_type                 fa_amort_pvt.tab_char30_type;
1751    t_percent_salvage_value        fa_amort_pvt.tab_num_type;
1752    t_salvage_value                fa_amort_pvt.tab_num_type;
1753    t_deprn_limit_type             fa_amort_pvt.tab_char30_type;
1754    t_allowed_deprn_limit          fa_amort_pvt.tab_num_type;
1755    t_deprn_limit_amount           fa_amort_pvt.tab_num_type;
1756    t_sal_thid                     fa_amort_pvt.tab_num15_type;
1757    t_limit_thid                   fa_amort_pvt.tab_num15_type;
1758 
1759 
1760    l_sal_thid              NUMBER(15) := 0;
1761    l_limit_thid            NUMBER(15) := 0;
1762 
1763    -- Bug4958977: Adding following 4 new variables
1764    l_asset_fin_rec          FA_API_TYPES.asset_fin_rec_type;
1765    l_period_counter         NUMBER;
1766    bld_err                  EXCEPTION;
1767    l_cur_trx_period_counter NUMBER;
1768 
1769    l_ind                   BINARY_INTEGER; -- Index variable
1770    l_temp_num              NUMBER;  -- used for calling fa_round_pkg
1771    ld_ind                  BINARY_INTEGER := 0;
1772    l_reinstated            BOOLEAN;
1773 
1774 
1775 BEGIN
1776 
1777    if (p_log_level_rec.statement_level) then
1778       fa_debug_pkg.add(l_calling_fn||'()+', 'asset_id', p_asset_hdr_rec.asset_id);
1779       fa_debug_pkg.add(l_calling_fn, 'group_asset_id', p_group_asset_id, p_log_level_rec => p_log_level_rec);
1780    end if;
1781 --tk_util.debug('p_reclass_multiplier: '||to_char(p_reclass_multiplier));
1782 
1783    if (p_reclass_src_dest = 'DESTINATION') and
1784       (fa_amort_pvt.tmd_period_counter.COUNT > 0) then
1785       l_ind := p_period_rec.period_counter - (fa_amort_pvt.tmd_period_counter(1) - 1);
1786 
1787       FOR i in l_ind..fa_amort_pvt.tmd_period_counter.COUNT LOOP
1788 --tk_util.debug('i: '||to_char(i));
1789          ld_ind := ld_ind + 1;
1790          x_td_period_counter(ld_ind) := fa_amort_pvt.tmd_period_counter(i);
1791          x_td_cost(ld_ind) := -1 * fa_amort_pvt.tmd_cost(i);
1792          x_td_cip_cost(ld_ind) := -1 * fa_amort_pvt.tmd_cip_cost(i);
1793          x_td_salvage_value(ld_ind) := -1 * fa_amort_pvt.tmd_salvage_value(i);
1794          x_td_deprn_limit_amount(ld_ind) := -1 * fa_amort_pvt.tmd_deprn_limit_amount(i);
1795 --tk_util.debug('fa_amort_pvt.tmd_period_counter(i): '||to_char(fa_amort_pvt.tmd_period_counter(i)));
1796 --tk_util.debug('fa_amort_pvt.tm_cost(i): '||to_char(fa_amort_pvt.tm_cost(i)));
1797 --tk_util.debug('fa_amort_pvt.tmd_cost(i): '||to_char(fa_amort_pvt.tmd_cost(i)));
1798 --tk_util.debug('x_td_cost(ld_ind): '||to_char(x_td_cost(ld_ind)));
1799       END LOOP;
1800 --tk_util.debug('Post loop');
1801       x_asset_fin_rec_reclass.cost := -1 * fa_amort_pvt.tm_cost(l_ind);
1802 --tk_util.debug('x_asset_fin_rec_reclass.cost: '||to_char(x_asset_fin_rec_reclass.cost));
1803       x_asset_fin_rec_reclass.cip_cost := -1 * fa_amort_pvt.tm_cip_cost(l_ind);
1804       x_asset_fin_rec_reclass.salvage_value := -1 * fa_amort_pvt.tm_salvage_value(l_ind);
1805       x_asset_fin_rec_reclass.allowed_deprn_limit_amount :=
1806                                           -1 * fa_amort_pvt.tm_deprn_limit_amount(l_ind);
1807 
1808       if (p_log_level_rec.statement_level) then
1809          fa_debug_pkg.add(l_calling_fn||'()-', '# of rows in delta tables', x_td_cost.COUNT);
1810       end if;
1811 
1812       return TRUE;
1813 
1814    end if;
1815    --
1816    -- Construct member asset table using group's data in FA_BOOKS_SUMMARY
1817    --
1818 --tk_util.debug('c_date: '||to_char(p_date_placed_in_service, 'DD-MON-YYYY'));
1819    OPEN c_get_period_counters (p_date_placed_in_service,
1820                                p_group_asset_id);
1824                                                , fa_amort_pvt.tmd_cost
1821 
1822    FETCH c_get_period_counters BULK COLLECT INTO t_period_counter
1823                                                , t_transaction_header_id
1825                                                , fa_amort_pvt.tmd_cip_cost
1826                                                , fa_amort_pvt.tmd_salvage_value
1827                                                , fa_amort_pvt.tmd_deprn_limit_amount
1828                                                , t_salvage_type
1829                                                , t_percent_salvage_value
1830                                                , t_deprn_limit_type
1831                                                , t_allowed_deprn_limit
1832                                                , t_sal_thid
1833                                                , t_limit_thid;
1834    CLOSE c_get_period_counters;
1835 
1836    if (p_log_level_rec.statement_level) then
1837       fa_debug_pkg.add(l_calling_fn, 'Finish Constructing Memebr Table',
1838                        t_period_counter.COUNT, p_log_level_rec => p_log_level_rec);
1839       fa_debug_pkg.add(l_calling_fn, 'p_trans_rec.transaction_key', p_trans_rec.transaction_key, p_log_level_rec => p_log_level_rec);
1840       fa_debug_pkg.add(l_calling_fn, 'p_salvage_limit_type', p_salvage_limit_type, p_log_level_rec => p_log_level_rec);
1841    end if;
1842 
1843    l_dpis_pc := t_period_counter(1);
1844 
1845    --
1846    -- Get member asset's transactions
1847    --
1848 --tk_util.debug('asset_id: '||to_char(p_asset_hdr_rec.asset_id));
1849 --tk_util.debug('book: '||p_asset_hdr_rec.book_type_code);
1850 --tk_util.debug('p_dpis: '||to_char(p_date_placed_in_service, 'DD-MM-YYYY'));
1851 --tk_util.debug('p_group_asset_id: '||to_char(p_group_asset_id));
1852 
1853    --
1854    -- bug5149789: if we can prevent salvage_type or deprn_limit_type
1855    -- change once the member is added, then we can check against
1856    -- trx key.  Otherwise we need to go with type now.
1857 --   if (p_trans_rec.transaction_key = 'GC') then -- bug5149789
1858    if (p_trans_rec.transaction_key = 'GC') or (p_salvage_limit_type = 'SUM') then
1859       OPEN c_get_member_trx;
1860       FETCH c_get_member_trx BULK COLLECT INTO tr_transaction_header_id
1861                                              , tr_transaction_type_code
1862                                              , tr_transaction_subtype
1863                                              , tr_transaction_key
1864                                              , tr_period_counter
1865                                                ;
1866       CLOSE c_get_member_trx;
1867    else -- bug5149789
1868       --
1869       -- bug5149789
1870       -- Even thought following cursor is using bulk, it should only return
1871       -- one row.  It is using pl/sql table of columns to be consistent.
1872       OPEN c_get_member_trx_single;
1873       FETCH c_get_member_trx_single BULK COLLECT INTO tr_transaction_header_id
1874                                                     , tr_transaction_type_code
1875                                                     , tr_transaction_subtype
1876                                                     , tr_transaction_key
1877                                                     , tr_period_counter
1878                                                      ;
1879       CLOSE c_get_member_trx_single;
1880 
1881    end if; -- bug5149789
1882 
1883    if (p_log_level_rec.statement_level) then
1884       fa_debug_pkg.add(l_calling_fn||'()+', 'Finish Getting Memebr Trxs',
1885                        tr_transaction_header_id.COUNT);
1886    end if;
1887 
1888    --
1889    -- Get Delta information for each transaction and populate delta information.
1890    --
1891    FOR i in 1..tr_transaction_header_id.COUNT LOOP
1892 
1893       --bug6912446
1894       if (tr_transaction_type_code(i) = 'REINSTATEMENT') then
1895          if (p_log_level_rec.statement_level) then
1896             fa_debug_pkg.add(l_calling_fn, 'following period counter may change', tr_period_counter(i));
1897          end if;
1898          if (p_mrc_sob_type_code = 'R') then
1899             OPEN c_get_mc_ret_period(tr_transaction_header_id(i));
1900             FETCH c_get_mc_ret_period INTO tr_period_counter(i);
1901             CLOSE c_get_mc_ret_period;
1902          else
1903             OPEN c_get_ret_period(tr_transaction_header_id(i));
1904             FETCH c_get_ret_period INTO tr_period_counter(i);
1905             CLOSE c_get_ret_period;
1906          end if;
1907          if (p_log_level_rec.statement_level) then
1908             fa_debug_pkg.add(l_calling_fn, 'new tr_period_counter(i)', tr_period_counter(i));
1909          end if;
1910       end if;
1911       --End bug6912446
1912 
1913       --Bug4622110: Following part of code have been uncommented
1914       -- Guess it was coded but not tested so it has never been used before
1915       l_reinstated := FALSE;
1916 
1917       if (p_mrc_sob_type_code = 'R') then
1918          if (tr_transaction_key(i) = 'R') then
1919             OPEN c_get_mc_ret_info(tr_transaction_header_id(i));
1920             FETCH c_get_mc_ret_info INTO l_date_retired
1921                                        , l_cost_retired
1922                                        , l_reserve_retired
1923                                        , l_proceeds_of_sale
1924                                        , l_cost_of_removal;
1925             if c_get_mc_ret_info%NOTFOUND then
1926                l_reinstated := TRUE;
1927             end if;
1928 
1929             CLOSE c_get_mc_ret_info;
1930 
1931          end if;
1932       else
1933          if (tr_transaction_key(i) = 'R') then
1934             OPEN c_get_ret_info(tr_transaction_header_id(i));
1935             FETCH c_get_ret_info INTO l_date_retired
1936                                     , l_cost_retired
1937                                     , l_reserve_retired
1941                l_reinstated := TRUE;
1938                                     , l_proceeds_of_sale
1939                                     , l_cost_of_removal;
1940             if c_get_ret_info%NOTFOUND then
1942             end if;
1943 
1944             CLOSE c_get_ret_info;
1945 
1946          end if;
1947       end if;
1948 
1949       if (not l_reinstated) or
1950          ((l_reinstated) and
1951           (tr_transaction_header_id(i) =
1952                    p_trans_rec.member_transaction_header_id)) then
1953 
1954          if (p_mrc_sob_type_code = 'R') then
1955             OPEN c_get_mc_deltas(tr_transaction_header_id(i));
1956             FETCH c_get_mc_deltas INTO l_cost
1957                                   , l_cip_cost
1958                                   , l_salvage_value
1959                                   , l_deprn_limit_amount
1960                                   , l_salvage_type
1961                                   , l_old_salvage_type
1962                                   , l_percent_salvage_value
1963                                   , l_old_percent_salvage_value
1964                                   , l_deprn_limit_type
1965                                   , l_old_deprn_limit_type
1966                                   , l_allowed_deprn_limit
1967                                   , l_old_allowed_deprn_limit;
1968             CLOSE c_get_mc_deltas;
1969          else
1970             OPEN c_get_deltas(tr_transaction_header_id(i));
1971             FETCH c_get_deltas INTO l_cost
1972                                   , l_cip_cost
1973                                   , l_salvage_value
1974                                   , l_deprn_limit_amount
1975                                   , l_salvage_type
1976                                   , l_old_salvage_type
1977                                   , l_percent_salvage_value
1978                                   , l_old_percent_salvage_value
1979                                   , l_deprn_limit_type
1980                                   , l_old_deprn_limit_type
1981                                   , l_allowed_deprn_limit
1982                                   , l_old_allowed_deprn_limit;
1983             CLOSE c_get_deltas;
1984          end if;
1985 /*
1986 --tk_util.debug('thid:cost:sal:dl: '||to_char(tr_transaction_header_id(i))||':'||
1987                                        to_char(l_cost)||':'||
1988                                        to_char(l_salvage_value)||':'||
1989                                        to_char(l_deprn_limit_amount));
1990 */
1991 
1992          if (tr_transaction_header_id(i) <>
1993                                   p_trans_rec.member_transaction_header_id) then
1994 
1995             -- Fix for 4713623
1996             -- this case happens when dpis of member is changed after ADDITION
1997             -- for example from jan to mar and bs table is only from march
1998             -- In such cases l_ind using tr_period_counter(i) - l_dpis_pc + 1
1999             -- can be negative.
2000             -- the fix handles that any transaction before current dpis
2001             -- is made to look from current dpis period
2002 
2003             if (tr_period_counter(i) < l_dpis_pc) then
2004                l_ind := 1;
2005             else
2006                 l_ind := tr_period_counter(i) - l_dpis_pc + 1;
2007             end if;
2008 
2009             fa_amort_pvt.tmd_cost(l_ind)               :=
2010                                 fa_amort_pvt.tmd_cost(l_ind) + l_cost;
2011             fa_amort_pvt.tmd_cip_cost(l_ind)           :=
2012                                 fa_amort_pvt.tmd_cip_cost(l_ind) + l_cip_cost;
2013             fa_amort_pvt.tmd_salvage_value(l_ind)      :=
2014                                 fa_amort_pvt.tmd_salvage_value(l_ind) +
2015                                 l_salvage_value;
2016             fa_amort_pvt.tmd_deprn_limit_amount(l_ind) :=
2017                                 fa_amort_pvt.tmd_deprn_limit_amount(l_ind) +
2018                                 l_deprn_limit_amount;
2019 
2020             --
2021             -- Following line may be removed.  This is not necessary
2022             -- since introduction of t_sal(limit)_thids.
2023             t_transaction_header_id(l_ind) := tr_transaction_header_id(i);
2024 
2025             --
2026             -- Subsequent retroactive salvage/deprn limit change may override
2027             -- previously entered information. So copy only qualified salvage/
2028             -- deprn limit changes.
2029             --
2030 --tk_util.debug('t_sal_thid(l_ind): '||to_char(t_sal_thid(l_ind)));
2031 --tk_util.debug('tr_transaction_header_id(i): '||to_char(tr_transaction_header_id(i)));
2032 --tk_util.debug('l_percent_salvage_value: '||to_char(l_percent_salvage_value));
2033 --tk_util.debug('l_old_percent_salvage_value: '||to_char(l_old_percent_salvage_value));
2034 --tk_util.debug('l_salvage_type: '||l_salvage_type);
2035 --tk_util.debug('l_salvage_value: '||to_char(l_salvage_value));
2036 
2037             if (t_sal_thid(l_ind) < tr_transaction_header_id(i)) and
2038                ((l_salvage_type <> l_old_salvage_type) or
2039                 (nvl(l_percent_salvage_value, 0) <> nvl(l_old_percent_salvage_value, 0)) or
2040                 (l_salvage_type = 'AMT' and l_salvage_value <> 0)) then
2041 
2042                t_sal_thid(l_ind) := tr_transaction_header_id(i);
2043                t_salvage_type(l_ind)          := l_salvage_type;
2044                t_percent_salvage_value(l_ind) := l_percent_salvage_value;
2045 
2046             end if;
2047 
2048             if (t_limit_thid(l_ind) < tr_transaction_header_id(i)) and
2049                ((l_deprn_limit_type <> l_old_deprn_limit_type) or
2050                 (l_allowed_deprn_limit <> l_old_allowed_deprn_limit) or
2051                 (l_deprn_limit_type = 'AMT' and l_deprn_limit_amount <> 0)) then
2052 
2053                t_limit_thid(l_ind) := tr_transaction_header_id(i);
2054                t_deprn_limit_type(l_ind)      := l_deprn_limit_type;
2058 
2055                t_allowed_deprn_limit(l_ind)   := l_allowed_deprn_limit;
2056 
2057             end if;
2059          else
2060             l_cur_trx_period_counter                   := tr_period_counter(i); -- Bug4958977
2061             x_asset_fin_rec.cost                       := l_cost;
2062             x_asset_fin_rec.cip_cost                   := l_cip_cost;
2063             x_asset_fin_rec.salvage_value              := l_salvage_value;
2064             x_asset_fin_rec.allowed_deprn_limit_amount := l_deprn_limit_amount;
2065             x_asset_fin_rec.salvage_type               := l_salvage_type;
2066             x_asset_fin_rec.percent_salvage_value      := l_percent_salvage_value;
2067             x_asset_fin_rec.deprn_limit_type           := l_deprn_limit_type;
2068             x_asset_fin_rec.allowed_deprn_limit        := l_allowed_deprn_limit;
2069 
2070             -- Bug4958977: Adding following if statements
2071             if (nvl(l_cost, 0) = 0) and
2072                (nvl(l_cip_cost, 0) = 0) and
2073                (nvl(l_salvage_value, 0) = 0) and
2074                (nvl(l_deprn_limit_amount, 0) = 0) then
2075 
2076                if (p_log_level_rec.statement_level) then
2077                   fa_debug_pkg.add(l_calling_fn, 'calling', 'check_dpis_change', p_log_level_rec => p_log_level_rec);
2078                end if;
2079 
2080                if not check_dpis_change (
2081                           p_book_type_code        => p_asset_hdr_rec.book_type_code
2082                         , p_transaction_header_id => tr_transaction_header_id(i)
2083                         , p_group_asset_id        => p_group_asset_id
2084                         , x_asset_fin_rec         => l_asset_fin_rec
2085                         , x_period_counter_out    => l_period_counter
2086                         , p_mrc_sob_type_code     => p_mrc_sob_type_code
2087                         , p_log_level_rec         => p_log_level_rec) then
2088                   if (p_log_level_rec.statement_level) then
2089                      fa_debug_pkg.add(l_calling_fn, 'error calling', 'check_dpis_change', p_log_level_rec => p_log_level_rec);
2090                   end if;
2091                   raise bld_err;
2092                end if;
2093 
2094                if (l_period_counter is not null) then
2095                   x_asset_fin_rec.cost                       := l_asset_fin_rec.cost;
2096                   x_asset_fin_rec.cip_cost                   := l_asset_fin_rec.cip_cost;
2097                   x_asset_fin_rec.salvage_value              := l_asset_fin_rec.salvage_value;
2098                   x_asset_fin_rec.allowed_deprn_limit_amount := l_asset_fin_rec.allowed_deprn_limit_amount;
2099                end if;
2100             end if; -- (nvl(l_cost, 0) = 0) and
2101 
2102             if (p_log_level_rec.statement_level) then
2103                fa_debug_pkg.add(l_calling_fn, 'cost', x_asset_fin_rec.cost, p_log_level_rec => p_log_level_rec);
2104                fa_debug_pkg.add(l_calling_fn, 'cip_cost', x_asset_fin_rec.cip_cost, p_log_level_rec => p_log_level_rec);
2105                fa_debug_pkg.add(l_calling_fn, 'salvage_value', x_asset_fin_rec.salvage_value, p_log_level_rec => p_log_level_rec);
2106                fa_debug_pkg.add(l_calling_fn, 'allowed_deprn_limit_amount',
2107                                 x_asset_fin_rec.allowed_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
2108                fa_debug_pkg.add(l_calling_fn, 'salvage_type', x_asset_fin_rec.salvage_type, p_log_level_rec => p_log_level_rec);
2109                fa_debug_pkg.add(l_calling_fn, 'percent_salvage_value', x_asset_fin_rec.percent_salvage_value, p_log_level_rec => p_log_level_rec);
2110                fa_debug_pkg.add(l_calling_fn, 'deprn_limit_type', x_asset_fin_rec.deprn_limit_type, p_log_level_rec => p_log_level_rec);
2111                fa_debug_pkg.add(l_calling_fn, 'allowed_deprn_limit', x_asset_fin_rec.allowed_deprn_limit, p_log_level_rec => p_log_level_rec);
2112             end if;
2113 
2114          end if; -- (tr_transaction_header_id(i) <>
2115 
2116       end if; -- (not l_reinstated) or
2117 
2118    END LOOP;
2119 
2120    if (p_log_level_rec.statement_level) then
2121       fa_debug_pkg.add(l_calling_fn||'()+', 'Finish Getting Deltas for Each Trx',
2122                        tr_transaction_header_id.COUNT);
2123    end if;
2124 
2125    --
2126    -- if this is not reclass, return delta
2127    -- if this is reclass, return member's from dpis no matter
2128    -- what is reclass date is.
2129    -- if reclass date is not dpis, update won't include upto that period.
2130    -- adjust foall update statement to update necessary period
2131    -- note: in that case, first period for the reclass got some hit
2132    -- of cost, reserve from dpis to the period
2133    --
2134 
2135    if (p_reclass_src_dest is not null) then
2136       l_sal_thid := t_transaction_header_id(1);
2137       l_limit_thid := t_transaction_header_id(1);
2138 
2139       fa_amort_pvt.tmd_period_counter(1) := t_period_counter(1);
2140 
2141       x_td_cost(1) := fa_amort_pvt.tmd_cost(1);
2142       t_cost(1) := fa_amort_pvt.tmd_cost(1);
2143       fa_amort_pvt.tm_cost(1) := fa_amort_pvt.tmd_cost(1);
2144       x_td_cip_cost(1) := fa_amort_pvt.tmd_cip_cost(1);
2145       t_cip_cost(1) := fa_amort_pvt.tmd_cip_cost(1);
2146       fa_amort_pvt.tm_cip_cost(1) := fa_amort_pvt.tmd_cip_cost(1);
2147 
2148 --tk_util.debug('fa_amort_pvt.tmd_period_counter(1): '||to_char(fa_amort_pvt.tmd_period_counter(1)));
2149 --tk_util.debug('fa_amort_pvt.tmd_cost(1): '||to_char(fa_amort_pvt.tmd_cost(1)));
2150 --tk_util.debug('fa_amort_pvt.tmd_cip_cost(1): '||to_char(fa_amort_pvt.tmd_cip_cost(1)));
2151 --tk_util.debug('fa_amort_pvt.tmd_salvage_value(1): '||to_char(fa_amort_pvt.tmd_salvage_value(1)));
2152 
2153       if (t_salvage_type(1) = 'PCT') then
2154          l_temp_num := t_cost(1) * t_percent_salvage_value(1) * sign(t_cost(1));
2155          fa_round_pkg.fa_ceil(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2156          l_temp_num := l_temp_num * sign(t_cost(1));
2157          x_td_salvage_value(1) := l_temp_num;
2161       else
2158          t_salvage_value(1) := l_temp_num;
2159          fa_amort_pvt.tmd_salvage_value(1) := l_temp_num;
2160          fa_amort_pvt.tm_salvage_value(1) := l_temp_num;
2162          x_td_salvage_value(1) := fa_amort_pvt.tmd_salvage_value(1);
2163          t_salvage_value(1) := fa_amort_pvt.tmd_salvage_value(1);
2164          fa_amort_pvt.tmd_salvage_value(1) := fa_amort_pvt.tmd_salvage_value(1);
2165          fa_amort_pvt.tm_salvage_value(1) := fa_amort_pvt.tmd_salvage_value(1);
2166       end if;
2167 --tk_util.debug('x_td_salvage_value(1): '||to_char(x_td_salvage_value(1)));
2168 
2169       if (t_deprn_limit_type(1) = 'PCT') then
2170          l_temp_num := t_cost(1) * (1 - t_allowed_deprn_limit(1)) * sign(t_cost(1));
2171          fa_round_pkg.fa_floor(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2172          l_temp_num := l_temp_num * sign(t_cost(1));
2173          x_td_deprn_limit_amount(1) := l_temp_num;
2174          t_deprn_limit_amount(1) := l_temp_num;
2175          fa_amort_pvt.tmd_deprn_limit_amount(1) := l_temp_num;
2176          fa_amort_pvt.tm_deprn_limit_amount(1) := l_temp_num;
2177       elsif (t_deprn_limit_type(1) = 'NONE') then
2178          x_td_deprn_limit_amount(1) := x_td_salvage_value(1);
2179          t_deprn_limit_amount(1) := x_td_salvage_value(1);
2180          fa_amort_pvt.tmd_deprn_limit_amount(1) := x_td_salvage_value(1);
2181          fa_amort_pvt.tm_deprn_limit_amount(1) := x_td_salvage_value(1);
2182       else
2183          x_td_deprn_limit_amount(1) := fa_amort_pvt.tmd_deprn_limit_amount(1);
2184          t_deprn_limit_amount(1) := fa_amort_pvt.tmd_deprn_limit_amount(1);
2185          fa_amort_pvt.tmd_deprn_limit_amount(1) := fa_amort_pvt.tmd_deprn_limit_amount(1);
2186          fa_amort_pvt.tm_deprn_limit_amount(1) := fa_amort_pvt.tmd_deprn_limit_amount(1);
2187       end if;
2188 
2189       if (p_log_level_rec.statement_level) then
2190          fa_debug_pkg.add(l_calling_fn||'()+', 'Finish Populating First Record',
2191                           x_td_cost(1));
2192       end if;
2193 
2194       FOR i in 2..t_period_counter.COUNT LOOP
2195 
2196          fa_amort_pvt.tmd_period_counter(i) := t_period_counter(i);
2197          x_td_cost(i) := fa_amort_pvt.tmd_cost(i);
2198          t_cost(i) := fa_amort_pvt.tmd_cost(i) + t_cost(i - 1);
2199          fa_amort_pvt.tm_cost(i) := fa_amort_pvt.tmd_cost(i) + t_cost(i - 1);
2200          x_td_cip_cost(i) := fa_amort_pvt.tmd_cip_cost(i);
2201          t_cip_cost(i) := fa_amort_pvt.tmd_cip_cost(i) + t_cip_cost(i - 1);
2202          fa_amort_pvt.tm_cip_cost(i) := fa_amort_pvt.tmd_cip_cost(i) + t_cip_cost(i - 1);
2203 --tk_util.debug('fa_amort_pvt.tmd_period_counter(i): '||to_char(fa_amort_pvt.tmd_period_counter(i)));
2204 --tk_util.debug('fa_amort_pvt.tm_cost(i): '||to_char(fa_amort_pvt.tm_cost(i)));
2205 --tk_util.debug('fa_amort_pvt.tmd_cost(i): '||to_char(fa_amort_pvt.tmd_cost(i)));
2206 --tk_util.debug('x_td_cost(i): '||to_char(x_td_cost(i)));
2207 --tk_util.debug('fa_amort_pvt.tmd_cip_cost(i): '||to_char(fa_amort_pvt.tmd_cip_cost(i)));
2208 --tk_util.debug('fa_amort_pvt.tmd_salvage_value(i): '||to_char(fa_amort_pvt.tmd_salvage_value(i)));
2209 
2210          if (t_sal_thid(i) = 0) or
2211             (l_sal_thid >= t_sal_thid(i)) then
2212             t_salvage_type(i) := t_salvage_type(i - 1);
2213             t_percent_salvage_value(i) := t_percent_salvage_value(i - 1);
2214          end if;
2215 
2216          if (t_limit_thid(i) = 0) or
2217             (l_limit_thid >= t_limit_thid(i)) then
2218             t_deprn_limit_type(i) := t_deprn_limit_type(i - 1);
2219             t_allowed_deprn_limit(i) := t_allowed_deprn_limit(i - 1);
2220          end if;
2221 
2222          if (t_salvage_type(i) = 'PCT') then
2223             l_temp_num := t_cost(i) * t_percent_salvage_value(i) * sign(t_cost(i));
2224             fa_round_pkg.fa_ceil(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2225             l_temp_num := l_temp_num * sign(t_cost(i));
2226             x_td_salvage_value(i) := l_temp_num;
2227             t_salvage_value(i) := l_temp_num - x_td_salvage_value(i - 1);
2228             fa_amort_pvt.tmd_salvage_value(i) := l_temp_num - fa_amort_pvt.tm_salvage_value(i - 1);
2229             fa_amort_pvt.tm_salvage_value(i) := l_temp_num;
2230          else
2231             x_td_salvage_value(i) := fa_amort_pvt.tmd_salvage_value(i);
2232             t_salvage_value(i) := fa_amort_pvt.tmd_salvage_value(i) + t_salvage_value(i - 1);
2233             fa_amort_pvt.tm_salvage_value(i) := fa_amort_pvt.tmd_salvage_value(i) + t_salvage_value(i - 1);
2234          end if;
2235 --tk_util.debug('x_td_salvage_value(i): '||to_char(x_td_salvage_value(i)));
2236 
2237          if (t_deprn_limit_type(i) = 'PCT') then
2238             l_temp_num := t_cost(1) * (1 - t_allowed_deprn_limit(1)) * sign(t_cost(1));
2239             fa_round_pkg.fa_floor(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2240             l_temp_num := l_temp_num * sign(t_cost(i));
2241             t_deprn_limit_amount(i) := l_temp_num;
2242             x_td_deprn_limit_amount(i) := l_temp_num - t_deprn_limit_amount(i - 1);
2243             fa_amort_pvt.tmd_deprn_limit_amount(i) := l_temp_num -
2244                                                        fa_amort_pvt.tm_deprn_limit_amount(i - 1);
2245             fa_amort_pvt.tm_deprn_limit_amount(i) := l_temp_num;
2246          elsif (t_deprn_limit_type(i) = 'NONE') then
2247             t_deprn_limit_amount(i) :=  x_td_salvage_value(i);
2248             x_td_deprn_limit_amount(i) := t_salvage_value(i) - t_deprn_limit_amount(i - 1);
2249             fa_amort_pvt.tmd_deprn_limit_amount(i) := fa_amort_pvt.tm_salvage_value(i) -
2250                                                        fa_amort_pvt.tm_deprn_limit_amount(i - 1);
2251             fa_amort_pvt.tm_deprn_limit_amount(i) := x_td_salvage_value(i);
2252          else
2253             x_td_deprn_limit_amount(i) := fa_amort_pvt.tmd_deprn_limit_amount(i);
2254             t_deprn_limit_amount(i) := fa_amort_pvt.tmd_deprn_limit_amount(i) + t_deprn_limit_amount(i - 1);
2258       END LOOP; -- i in 2..t_period_counter.COUNT
2255             fa_amort_pvt.tm_deprn_limit_amount(i) := fa_amort_pvt.tmd_deprn_limit_amount(i) + t_deprn_limit_amount(i - 1);
2256          end if;
2257   --tk_util.debug('bottom of loop');
2259 --tk_util.debug('End Loop');
2260 
2261       l_ind := p_period_rec.period_counter - t_period_counter(1) + 1;
2262 --tk_util.debug('l_ind: '||to_char(l_ind));
2263 
2264       x_asset_fin_rec_reclass.cost := t_cost(l_ind);
2265       x_asset_fin_rec_reclass.cip_cost := t_cip_cost(l_ind);
2266       if (t_salvage_type(l_ind) = 'PCT') then
2267          x_asset_fin_rec_reclass.salvage_value := x_td_salvage_value(l_ind);
2268       else
2269          x_asset_fin_rec_reclass.salvage_value := t_salvage_value(l_ind);
2270       end if;
2271       if (t_deprn_limit_type(l_ind) = 'PCT') then
2272         x_asset_fin_rec_reclass.allowed_deprn_limit_amount := x_td_deprn_limit_amount(l_ind);
2273       else
2274         x_asset_fin_rec_reclass.allowed_deprn_limit_amount := t_deprn_limit_amount(l_ind);
2275       end if;
2276 
2277 
2278    else
2279 
2280       --
2281       -- Prepare delta for non-group reclass adjustments
2282       --
2283 
2284       l_sal_thid := t_transaction_header_id(1);
2285       l_limit_thid := t_transaction_header_id(1);
2286       t_cost(1) := fa_amort_pvt.tmd_cost(1);
2287       t_cip_cost(1) := fa_amort_pvt.tmd_cip_cost(1);
2288 
2289       if (t_salvage_type(1) = 'PCT') then
2290          l_temp_num := t_cost(1) * t_percent_salvage_value(1);
2291          fa_round_pkg.fa_ceil(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2292          t_salvage_value(1) := l_temp_num;
2293       else
2294          t_salvage_value(1) := fa_amort_pvt.tmd_salvage_value(1);
2295       end if;
2296 
2297 --tk_util.debug('t_percent_salvage_value(1): '||to_char(t_percent_salvage_value(1)));
2298 --tk_util.debug('t_salvage_value(1): '||to_char(t_salvage_value(1)));
2299 
2300       if (t_deprn_limit_type(1) = 'PCT') then
2301          l_temp_num := t_cost(1) * (1 - t_allowed_deprn_limit(1));
2302          fa_round_pkg.fa_floor(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2303          t_deprn_limit_amount(1) := l_temp_num;
2304       elsif (t_deprn_limit_type(1) = 'NONE') then
2305          t_deprn_limit_amount(1) := t_salvage_value(1);
2306       else
2307          t_deprn_limit_amount(1) := fa_amort_pvt.tmd_deprn_limit_amount(1);
2308       end if;
2309 
2310       if (p_log_level_rec.statement_level) then
2311          fa_debug_pkg.add(l_calling_fn||'()+', 'Finish Populating First Record',
2312                           t_cost(1));
2313       end if;
2314 
2315       FOR i in 2..t_period_counter.COUNT LOOP
2316 
2317          t_cost(i) := fa_amort_pvt.tmd_cost(i) + t_cost(i - 1);
2318          t_cip_cost(i) := fa_amort_pvt.tmd_cip_cost(i) + t_cip_cost(i - 1);
2319 
2320             if (t_sal_thid(i) = 0) or
2321                (l_sal_thid >= t_sal_thid(i)) then
2322                t_salvage_type(i) := t_salvage_type(i - 1);
2323                t_percent_salvage_value(i) := t_percent_salvage_value(i - 1);
2324             end if;
2325 
2326             if (t_limit_thid(i) = 0) or
2327                (l_limit_thid >= t_limit_thid(i)) then
2328                t_deprn_limit_type(i) := t_deprn_limit_type(i - 1);
2329                t_allowed_deprn_limit(i) := t_allowed_deprn_limit(i - 1);
2330             end if;
2331 
2332          if (t_salvage_type(i) = 'PCT') then
2333             l_temp_num := t_cost(i) * t_percent_salvage_value(i);
2334             fa_round_pkg.fa_ceil(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2335             t_salvage_value(i) := l_temp_num;
2336          else
2337             t_salvage_value(i) := fa_amort_pvt.tmd_salvage_value(i) +
2338                                                  t_salvage_value(i - 1);
2339          end if;
2340 --tk_util.debug('t_percent_salvage_value('||to_char(i)||'): '||to_char(t_percent_salvage_value(i)));
2341 --tk_util.debug('t_salvage_value('||to_char(i)||'): '||to_char(t_salvage_value(i)));
2342 
2343          if (t_deprn_limit_type(i) = 'PCT') then
2344             l_temp_num := t_cost(i) * (1 - t_allowed_deprn_limit(i));
2345             fa_round_pkg.fa_floor(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2346             t_deprn_limit_amount(i) := l_temp_num;
2347          elsif (t_deprn_limit_type(i) = 'NONE') then
2348             t_deprn_limit_amount(i) := t_salvage_value(i);
2349          else
2350             t_deprn_limit_amount(i) := fa_amort_pvt.tmd_deprn_limit_amount(i) +
2351                                                       t_deprn_limit_amount(i - 1);
2352          end if;
2353 
2354       END LOOP; -- i in 2..t_period_counter.COUNT
2355 
2356       if (p_log_level_rec.statement_level) then
2357          fa_debug_pkg.add(l_calling_fn||'()+', 'Finish Populating All Records',
2358                           t_cost(t_period_counter.COUNT));
2359       end if;
2360 
2361       /* Added if condition for bug 7511470 */
2362       if p_trans_rec.transaction_key = 'MS' then
2363         l_ind := l_cur_trx_period_counter - t_period_counter(1) + 1;
2364       else
2365         l_ind := p_period_rec.period_counter - t_period_counter(1) + 1;
2366       end if;
2367 
2368 --tk_util.debug('x_td_cost(1): '||to_char(x_asset_fin_rec.cost));
2369 --tk_util.debug('l_ind: '||to_char(l_ind));
2370 
2371       --
2372       -- Now Construct delta table to be applied against group table
2373       --
2374       -- Bug4958977: Replacing with following if statement.
2375       -- Original lines are executed if first condition is met
2376 
2377       x_td_period_counter(1) := t_period_counter(l_ind);
2378       if (l_cur_trx_period_counter = x_td_period_counter(1)) then
2379          x_td_cost(1) := x_asset_fin_rec.cost;
2380          x_td_cip_cost(1) := x_asset_fin_rec.cip_cost;
2384       else
2381       elsif (l_period_counter = x_td_period_counter(1)) then
2382          x_td_cost(1)               := (-1 * l_asset_fin_rec.cost);
2383          x_td_cip_cost(1)           := (-1 * l_asset_fin_rec.cip_cost);
2385          x_td_cost(1) := 0;
2386          x_td_cip_cost(1) := 0;
2387       end if;
2388 
2389       -- Bug4958977: Use x_td_xxxx instead of x_asset_fin_rec
2390       t_cost(l_ind) := t_cost(l_ind) + x_td_cost(1);
2391       t_cip_cost(l_ind) := t_cip_cost(l_ind) + x_td_cip_cost(1);
2392 
2393 --tk_util.debug('x_td_period_counter(1): '||                              to_char(x_td_period_counter(1)));
2394 --tk_util.debug('x_td_cost(1): '||                                        to_char(x_td_cost(1)));
2395 --tk_util.debug('t_cost('||to_char(l_ind)||'): '||                        to_char(t_cost(l_ind)));
2396 --tk_util.debug('t_salvage_type('||to_char(l_ind)||'): '||                t_salvage_type(l_ind));
2397 --tk_util.debug('x_asset_fin_rec.percent_salvage_value: '||               to_char(x_asset_fin_rec.percent_salvage_value));
2398 --tk_util.debug('fa_amort_pvt.tmd_salvage_value('||to_char(l_ind)||'): '||to_char(fa_amort_pvt.tmd_salvage_value(l_ind)));
2399 --tk_util.debug('t_salvage_value('||to_char(l_ind)||'): '||               to_char(t_salvage_value(l_ind)));
2400 
2401       if (t_salvage_type(l_ind) = 'PCT') then
2402 --         l_temp_num := t_cost(l_ind) * t_percent_salvage_value(l_ind);
2403          l_temp_num := t_cost(l_ind) * x_asset_fin_rec.percent_salvage_value;
2404          fa_round_pkg.fa_ceil(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2405 
2406          x_td_salvage_value(1) := l_temp_num - t_salvage_value(l_ind);
2407          t_salvage_value(l_ind) := l_temp_num;
2408       else
2409          x_td_salvage_value(1) := x_asset_fin_rec.salvage_value;
2410          t_salvage_value(l_ind) :=  t_salvage_value(l_ind) + x_asset_fin_rec.salvage_value;
2411       end if;
2412 
2413       if (t_deprn_limit_type(l_ind) = 'PCT') then
2414 --         l_temp_num := t_cost(l_ind) * (1 - t_allowed_deprn_limit(l_ind));
2415          l_temp_num := t_cost(l_ind) * (1 - x_asset_fin_rec.allowed_deprn_limit);
2416          fa_round_pkg.fa_floor(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2417          x_td_deprn_limit_amount(1) := l_temp_num - t_deprn_limit_amount(l_ind);
2418 
2419          t_deprn_limit_amount(l_ind) := l_temp_num;
2420       else
2421          x_td_deprn_limit_amount(1) := x_asset_fin_rec.allowed_deprn_limit_amount;
2422          t_deprn_limit_amount(l_ind) := t_deprn_limit_amount(l_ind) +
2423                                         x_asset_fin_rec.allowed_deprn_limit_amount;
2424       end if;
2425 --tk_util.debug('x_td_salvage_value(1): '||to_char(x_td_salvage_value(1)));
2426 --tk_util.debug('x_td_deprn_limit_amount(1): '||to_char(x_td_deprn_limit_amount(1)));
2427 
2428 
2429       FOR i in 2..(t_period_counter.LAST - l_ind + 1)  LOOP
2430          l_ind := l_ind + 1;
2431 
2432 
2433          --Bug4958977: Conditionally populate x_td_cost(cip_cost) instead of populating
2434          -- 0 all the time.  Modified until next debug statement
2435          x_td_period_counter(i) := t_period_counter(l_ind);
2436 
2437          if (l_cur_trx_period_counter = x_td_period_counter(i)) then
2438             x_td_cost(i)      := x_asset_fin_rec.cost;
2439             x_td_cip_cost(i)  := x_asset_fin_rec.cip_cost;
2440             t_cost(l_ind) := t_cost(l_ind) + x_td_cost(i);
2441             t_cip_cost(l_ind) := t_cip_cost(l_ind) + x_td_cip_cost(i);
2442          elsif (l_period_counter = x_td_period_counter(i)) then
2443             x_td_cost(i)      := (-1 * l_asset_fin_rec.cost);
2444             x_td_cip_cost(i)  := (-1 * l_asset_fin_rec.cip_cost);
2445             t_cost(l_ind) := t_cost(l_ind) + x_td_cost(i);
2446             t_cip_cost(l_ind) := t_cip_cost(l_ind) + x_td_cip_cost(i);
2447          else
2448             x_td_cost(i) := 0;
2449             x_td_cip_cost(i) := 0;
2450             /*Bug# 8548876 Modified following assignments*/
2451             t_cost(l_ind) := t_cost(l_ind) + x_asset_fin_rec.cost;
2452             t_cip_cost(l_ind) := t_cip_cost(l_ind) + x_asset_fin_rec.cip_cost;
2453          end if;
2454 
2455         if (p_log_level_rec.statement_level) then
2456            fa_debug_pkg.add(l_calling_fn, 'i', i, p_log_level_rec => p_log_level_rec);
2457            fa_debug_pkg.add(l_calling_fn, 'x_td_period_counter(i)', x_td_period_counter(i));
2458            fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.tmd_salvage_value',
2459                             fa_amort_pvt.tmd_salvage_value(l_ind));
2460            fa_debug_pkg.add(l_calling_fn, 't_salvage_type(l_ind)', t_salvage_type(l_ind));
2461            fa_debug_pkg.add(l_calling_fn, 't_salvage_value', t_salvage_value(l_ind));
2462         end if;
2463 
2464 
2465          if (t_salvage_type(l_ind) = 'PCT') then
2466             l_temp_num := t_cost(l_ind) * x_asset_fin_rec.percent_salvage_value;
2467 
2468             if (p_log_level_rec.statement_level) then
2469                fa_debug_pkg.add(l_calling_fn, 'l_temp_num', l_temp_num, p_log_level_rec => p_log_level_rec);
2470             end if;
2471 
2472             fa_round_pkg.fa_ceil(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2473 
2474             x_td_salvage_value(i) := l_temp_num - t_salvage_value(l_ind);
2475 
2476             t_salvage_value(l_ind) := l_temp_num;
2477          else
2478             x_td_salvage_value(i) := t_salvage_value(l_ind - 1) - t_salvage_value(l_ind);
2479 
2480             t_salvage_value(i) := t_salvage_value(l_ind) + t_salvage_value(l_ind - 1);
2481          end if;
2482 --tk_util.debug('x_td_salvage_value('||to_char(i)||'): '||to_char(x_td_salvage_value(i)));
2483 
2484          if (t_deprn_limit_type(i) = 'PCT') then
2485 --            l_temp_num := t_cost(l_ind) * (1 - t_allowed_deprn_limit(l_ind));
2486             l_temp_num := t_cost(l_ind) * (1 - x_asset_fin_rec.allowed_deprn_limit);
2490 
2487             fa_round_pkg.fa_floor(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
2488 
2489             x_td_deprn_limit_amount(i) := l_temp_num - t_deprn_limit_amount(l_ind);
2491             t_deprn_limit_amount(l_ind) := l_temp_num;
2492          else
2493             x_td_deprn_limit_amount(i) := t_deprn_limit_amount(l_ind - 1) -
2494                                           t_deprn_limit_amount(l_ind);
2495 
2496             t_deprn_limit_amount(l_ind) := t_deprn_limit_amount(l_ind) +
2497                                            t_deprn_limit_amount(l_ind - 1);
2498          end if;
2499 
2500       END LOOP; -- i in 2..t_cost.COUNT
2501 
2502    end if; -- (p_reclass_src_dest is null)
2503 
2504    if (p_log_level_rec.statement_level) then
2505       fa_debug_pkg.add(l_calling_fn||'()-', '# of rows in delta tables', x_td_cost.COUNT);
2506    end if;
2507 
2508    return TRUE;
2509 
2510 EXCEPTION
2511    WHEN bld_err THEN
2512       if (p_log_level_rec.statement_level) then
2513          fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'bld_err', p_log_level_rec => p_log_level_rec);
2514       end if;
2515 
2516       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2517       return false;
2518 
2519    WHEN OTHERS THEN
2520       if (p_log_level_rec.statement_level) then
2521          fa_debug_pkg.add(l_calling_fn||'(OTHERS)-', 'sqlcode', sqlcode);
2522       end if;
2523 
2524       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
2525       return false;
2526 
2527 END buildMemberTable;
2528 
2529 --+==============================================================================
2530 -- Function: CurrentPeriodAdj
2531 --
2532 --
2533 --
2534 --
2535 --
2536 --+==============================================================================
2537 FUNCTION CurrentPeriodAdj(
2538     p_trans_rec                         FA_API_TYPES.trans_rec_type,
2539     p_asset_hdr_rec                     FA_API_TYPES.asset_hdr_rec_type,
2540     p_asset_type_rec                    FA_API_TYPES.asset_type_rec_type,
2541     p_asset_fin_rec_old                 FA_API_TYPES.asset_fin_rec_type,
2542     p_asset_fin_rec_adj                 FA_API_TYPES.asset_fin_rec_type default null,
2543     px_asset_fin_rec_new  IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
2544     p_period_rec                        FA_API_TYPES.period_rec_type,
2545     p_asset_deprn_rec_adj               FA_API_TYPES.asset_deprn_rec_type default null,
2546     p_proceeds_of_sale                  NUMBER default 0,
2547     p_cost_of_removal                   NUMBER default 0,
2548     p_calling_fn                        VARCHAR2,
2549     p_mrc_sob_type_code                 VARCHAR2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
2550 return BOOLEAN is
2551 
2552   l_calling_fn  VARCHAR2(50) := 'FA_AMORT_PVT.CurrentPeriodAdj';
2553 
2554   CURSOR c_get_deltas IS
2555     select inbk.salvage_value - nvl(outbk.salvage_value, 0)
2556          , nvl(inbk.allowed_deprn_limit_amount, 0) -
2557                nvl(outbk.allowed_deprn_limit_amount, 0)
2558     from   fa_books inbk,
2559            fa_books outbk
2560     where  outbk.asset_id(+) = inbk.asset_id
2561     and    outbk.book_type_code(+) = inbk.book_type_code
2562     and    inbk.transaction_header_id_in = p_trans_rec.member_transaction_header_id
2563     and    outbk.transaction_header_id_out(+) = inbk.transaction_header_id_in;
2564 
2565   CURSOR c_get_mc_deltas IS
2566     select inbk.salvage_value - nvl(outbk.salvage_value, 0)
2567          , nvl(inbk.allowed_deprn_limit_amount, 0) -
2568                nvl(outbk.allowed_deprn_limit_amount, 0)
2569     from   fa_mc_books inbk,
2570            fa_mc_books outbk
2571     where  outbk.asset_id(+) = inbk.asset_id
2572     and    outbk.book_type_code(+) = inbk.book_type_code
2573     and    inbk.transaction_header_id_in = p_trans_rec.member_transaction_header_id
2574     and    outbk.transaction_header_id_out(+) = inbk.transaction_header_id_in
2575     and    inbk.set_of_books_id = p_asset_hdr_rec.set_of_books_id
2576     and    outbk.set_of_books_id(+) = p_asset_hdr_rec.set_of_books_id; --Bug 9099329
2577 
2578   --
2579   -- Cursor to get retirement information using retirement
2580   -- transaction_header_id
2581   --
2582   CURSOR c_get_ret_info (c_transaction_header_id number) IS
2583     select ret.proceeds_of_sale
2584          , ret.cost_of_removal
2585          , -1 * nvl(ret.reserve_retired, 0)
2586          , -1 * nbv_retired
2587     from   fa_retirements ret
2588     where  ret.transaction_header_id_in = c_transaction_header_id
2589     and    ret.transaction_header_id_out is null;
2590 
2591   CURSOR c_get_mc_ret_info (c_transaction_header_id number) IS
2592     select ret.proceeds_of_sale
2593          , ret.cost_of_removal
2594          , -1 * nvl(ret.reserve_retired, 0)
2595          , -1 * nbv_retired
2596     from   fa_mc_retirements ret
2597     where  ret.transaction_header_id_in = c_transaction_header_id
2598     and    ret.transaction_header_id_out is null
2599     and    ret.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
2600 
2601   --
2602   -- Cursor to get retirement information using reinsatement
2603   -- transaction_header_id
2604   --
2605   CURSOR c_get_rein_info (c_transaction_header_id number) IS
2606     select -1 * ret.proceeds_of_sale
2607          , -1 * ret.cost_of_removal
2608          ,  nvl(ret.reserve_retired, 0)
2609          ,  nbv_retired
2610     from   fa_retirements ret
2611          , fa_transaction_headers mth
2612     where  mth.transaction_header_id = c_transaction_header_id
2613     and    mth.asset_id = ret.asset_id
2617 
2614     and    mth.book_type_code = p_asset_hdr_rec.book_type_code
2615     and    ret.book_type_code = p_asset_hdr_rec.book_type_code
2616     and    ret.transaction_header_id_out = c_transaction_header_id;
2618   CURSOR c_get_mc_rein_info (c_transaction_header_id number) IS
2619     select -1 * ret.proceeds_of_sale
2620          , -1 * ret.cost_of_removal
2621          ,  nvl(ret.reserve_retired, 0)
2622          ,  nbv_retired
2623     from   fa_mc_retirements ret
2624          , fa_transaction_headers mth
2625     where  mth.transaction_header_id = c_transaction_header_id
2626     and    mth.asset_id = ret.asset_id
2627     and    mth.book_type_code = p_asset_hdr_rec.book_type_code
2628     and    ret.book_type_code = p_asset_hdr_rec.book_type_code
2629     and    ret.transaction_header_id_out = c_transaction_header_id
2630     and    ret.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
2631 
2632    CURSOR c_check_record_exists IS
2633       select bs.period_counter
2634       from   fa_books_summary bs
2635       where  bs.asset_id = p_asset_hdr_rec.asset_id
2636       and    bs.book_type_code = p_asset_hdr_rec.book_type_code
2637       and    bs.period_counter = p_period_rec.period_counter;
2638 
2639    CURSOR c_check_mc_record_exists IS
2640       select bs.period_counter
2641       from   fa_mc_books_summary bs
2642       where  bs.asset_id = p_asset_hdr_rec.asset_id
2643       and    bs.book_type_code = p_asset_hdr_rec.book_type_code
2644       and    bs.period_counter = p_period_rec.period_counter
2645       and    bs.set_of_books_id = p_asset_hdr_rec.set_of_books_id ;
2646 
2647 
2648   l_asset_id                      NUMBER(15);
2649   l_delta_salvage_value           NUMBER;
2650   l_delta_deprn_limit_amount      NUMBER;
2651   l_expense_amount                NUMBER;
2652   l_reserve_amount                NUMBER;
2653   l_unplanned_amount              NUMBER := 0;
2654 
2655   l_proceeds_of_sale              NUMBER;
2656   l_cost_of_removal               NUMBER;
2657   l_reserve_retired               NUMBER;
2658   l_nbv_retired                   NUMBER;
2659 
2660   l_depreciate_flag_change        BOOLEAN := FALSE;
2661   l_disabled_flag_change          BOOLEAN := FALSE;
2662 
2663    l_temp_num                     NUMBER; -- temporary numbers for calculation
2664    l_valid_type_change            BOOLEAN := TRUE;
2665 
2666   adj_err    EXCEPTION;
2667 
2668 BEGIN
2669 
2670    if (p_log_level_rec.statement_level) then
2671       fa_debug_pkg.add(l_calling_fn||'()+', 'asset type', p_asset_type_rec.asset_type);
2672       fa_debug_pkg.add(l_calling_fn, 'member trx id',
2673                        p_trans_rec.member_transaction_header_id, p_log_level_rec => p_log_level_rec);
2674       fa_debug_pkg.add(l_calling_fn, 'trx key',
2675                        p_trans_rec.transaction_key, p_log_level_rec => p_log_level_rec);
2676    end if;
2677 
2678    -- Bug5149789: checking whether member exists or not
2679    -- Call function check_member_existence if either of
2680    -- salvage or deprn limit type is being changed and there is 0 group cost
2681    if (((px_asset_fin_rec_new.salvage_type = 'SUM') and
2682         (px_asset_fin_rec_new.salvage_type <> nvl(p_asset_fin_rec_old.salvage_type,
2683                                                   px_asset_fin_rec_new.salvage_type))) or
2684        ((px_asset_fin_rec_new.deprn_limit_type = 'SUM') and
2685         (px_asset_fin_rec_new.deprn_limit_type <> nvl(p_asset_fin_rec_old.deprn_limit_type,
2686                                                       px_asset_fin_rec_new.deprn_limit_type)))) then
2687 
2688       if (px_asset_fin_rec_new.cost = 0) then
2689 
2690          if not check_member_existence (p_asset_hdr_rec => p_asset_hdr_rec,
2691                                         p_log_level_rec => p_log_level_rec) then
2692             if (p_log_level_rec.statement_level) then
2693                fa_debug_pkg.add(l_calling_fn, 'calling check_member_existence', 'FAILED', p_log_level_rec => p_log_level_rec);
2694             end if;
2695 
2696             l_valid_type_change := FALSE;
2697 
2698          end if;
2699 
2700       else
2701          if (p_log_level_rec.statement_level) then
2702             fa_debug_pkg.add(l_calling_fn, 'Method.deprn_limit type change', 'FAILED', p_log_level_rec => p_log_level_rec);
2703             fa_debug_pkg.add(l_calling_fn, 'cost', px_asset_fin_rec_new.cost, p_log_level_rec => p_log_level_rec);
2704          end if;
2705 
2706          l_valid_type_change := FALSE;
2707 
2708       end if;
2709 
2710       if (not l_valid_type_change) then
2711          if (px_asset_fin_rec_new.salvage_type = 'SUM') then
2712             fa_srvr_msg.add_message(
2713                calling_fn => l_calling_fn,
2714                name       => 'FA_INVALID_PARAMETER',
2715                token1     => 'VALUE',
2716                value1     => px_asset_fin_rec_new.salvage_type,
2717                token2     => 'PARAM',
2718                value2     => 'SALVAGE_TYPE', p_log_level_rec => p_log_level_rec);
2719 
2720          else
2721             fa_srvr_msg.add_message(
2722                calling_fn => l_calling_fn,
2723                name       => 'FA_INVALID_PARAMETER',
2724                token1     => 'VALUE',
2725                value1     => px_asset_fin_rec_new.deprn_limit_type,
2726                token2     => 'PARAM',
2727                value2     => 'DEPRN_LIMIT_TYPE', p_log_level_rec => p_log_level_rec);
2728          end if;
2729 
2730          return false;
2731       end if;
2732 
2733    end if; -- (((px_asset_fin_rec_new.salvage_type = 'SUM') and
2734 
2735    /*Bug#8205561 - To populate fa_books_summary in case of dpis change*/
2736         if (p_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
2737             p_trans_rec.transaction_key = 'GJ' and
2738             p_asset_fin_rec_old.date_placed_in_service <> px_asset_fin_rec_new.date_placed_in_service) then
2742                                p_trans_rec            => p_trans_rec,
2739             -- Group adjustment in period of group addition before
2740             -- depreciation run or first member addition
2741             if not createGroup(
2743                                p_asset_hdr_rec        => p_asset_hdr_rec,
2744                                p_asset_type_rec       => p_asset_type_rec,
2745                                p_period_rec           => p_period_rec,
2746                                p_asset_fin_rec        => px_asset_fin_rec_new,
2747                                p_asset_deprn_rec      => p_asset_deprn_rec_adj,
2748                                p_mrc_sob_type_code    => p_mrc_sob_type_code,
2749                                p_calling_fn           => l_calling_fn
2750                               ,p_log_level_rec => p_log_level_rec) then
2751 
2752                if (p_log_level_rec.statement_level) then
2753                   fa_debug_pkg.add(l_calling_fn, 'calling FA_AMORT_PVT.createGroup', 'FAILED'
2754                                  ,p_log_level_rec => p_log_level_rec);
2755                end if;
2756                raise adj_err;
2757             end if;
2758         end if;
2759    /*Bug#8205561 end */
2760 
2761    if (p_asset_fin_rec_old.depreciate_flag = 'NO') or
2762       (nvl(p_asset_fin_rec_old.disabled_flag, 'N') = 'Y') then
2763 
2764       l_depreciate_flag_change := (p_asset_fin_rec_old.depreciate_flag <>
2765                                    px_asset_fin_rec_new.depreciate_flag);
2766 
2767       l_disabled_flag_change := (nvl(p_asset_fin_rec_old.disabled_flag, 'N') <>
2768                                  nvl(px_asset_fin_rec_new.disabled_flag, 'N'));
2769 
2770       if (not catchupBooksSummary (
2771                        p_trans_rec              => p_trans_rec,
2772                        p_asset_hdr_rec          => p_asset_hdr_rec,
2773                        p_period_rec             => p_period_rec,
2774                        p_asset_fin_rec_new      => px_asset_fin_rec_new,
2775                        p_depreciate_flag_change => l_depreciate_flag_change,
2776                        p_disabled_flag_change   => l_disabled_flag_change,
2777                        p_mrc_sob_type_code      => p_mrc_sob_type_code,
2778                        p_calling_fn             => l_calling_fn,
2779                        p_log_level_rec          => p_log_level_rec)) then
2780 
2781          if (p_log_level_rec.statement_level) then
2782             fa_debug_pkg.add(l_calling_fn, 'Error calling', 'catchupBooksSummary', p_log_level_rec => p_log_level_rec);
2783          end if;
2784 
2785          raise adj_err;
2786 
2787       end if;
2788    elsif (p_asset_fin_rec_old.period_counter_fully_reserved is not null) or
2789          (p_asset_fin_rec_old.period_counter_life_complete is not null) then
2790       l_temp_num := null;
2791 
2792       if (p_mrc_sob_type_code = 'R') then
2793          OPEN c_check_mc_record_exists;
2794          FETCH c_check_mc_record_exists INTO l_temp_num;
2795          CLOSE c_check_mc_record_exists;
2796       else
2797          OPEN c_check_record_exists;
2798          FETCH c_check_record_exists INTO l_temp_num;
2799          CLOSE c_check_record_exists;
2800       end if;
2801 
2802       if l_temp_num is null then
2803          if (not catchupBooksSummary (
2804                        p_trans_rec              => p_trans_rec,
2805                        p_asset_hdr_rec          => p_asset_hdr_rec,
2806                        p_period_rec             => p_period_rec,
2807                        p_asset_fin_rec_new      => px_asset_fin_rec_new,
2808                        p_depreciate_flag_change => l_depreciate_flag_change,
2809                        p_disabled_flag_change   => l_disabled_flag_change,
2810                        p_mrc_sob_type_code      => p_mrc_sob_type_code,
2811                        p_calling_fn             => l_calling_fn,
2812                        p_log_level_rec          => p_log_level_rec)) then
2813 
2814             if (p_log_level_rec.statement_level) then
2815                fa_debug_pkg.add(l_calling_fn, 'Error calling', 'catchupBooksSummary', p_log_level_rec => p_log_level_rec);
2816             end if;
2817 
2818             raise adj_err;
2819 
2820          end if;
2821       end if;
2822    end if;
2823 
2824 /*
2825    --
2826    -- Unplanned Depreciation
2827    --
2828    if (p_trans_rec.transaction_key in ('UA', 'UE')) then
2829       -- Expecting unplanned amount stored in p_asset_deprn_rec_adj.deprn_amount
2830       l_expense_amount := p_asset_deprn_rec_adj.deprn_amount;
2831       l_unplanned_amount := p_asset_deprn_rec_adj.deprn_amount;
2832    elsif (p_trans_rec.transaction_key in ('GV', 'GR')) then
2833      l_reserve_amount := p_asset_deprn_rec_adj.deprn_reserve;
2834    end if;
2835 */
2836    l_expense_amount := nvl(p_asset_deprn_rec_adj.deprn_amount, 0);
2837    l_unplanned_amount := nvl(p_asset_deprn_rec_adj.deprn_amount, 0);
2838    l_reserve_amount := nvl(p_asset_deprn_rec_adj.deprn_reserve, 0);
2839 
2840 --tk_util.debug('p_asset_fin_rec_old.adjusted_capacity: '||to_char(p_asset_fin_rec_old.adjusted_capacity));
2841 --tk_util.debug('p_asset_fin_rec_adj.adjusted_capacity: '||to_char(p_asset_fin_rec_adj.adjusted_capacity));
2842 
2843 /*
2844    if (nvl(px_asset_fin_rec_new.tracking_method, 'NO TRACK') = 'ALLOCATE') and    -- ENERGY
2845       (fa_cache_pkg.fazcdrd_record.rule_name = 'ENERGY PERIOD END BALANCE') and  -- ENERGY
2846       (fa_cache_pkg.fazccmt_record.rate_source_rule = FA_STD_TYPES.FAD_RSR_PROD) then
2847       px_asset_fin_rec_new.adjusted_capacity := nvl(px_asset_fin_rec_new.production_capacity, 0) +
2848                                                 nvl(p_asset_fin_rec_adj.adjusted_capacity, 0);
2849    end if;
2850 */
2851 
2852    if (p_trans_rec.member_transaction_header_id is null) then
2853 
2854 --tk_util.debug('p_asset_fin_rec_adj.cost: '||to_char(p_asset_fin_rec_adj.cost));
2858 --tk_util.debug('p_proceeds_of_sale: '||to_char(p_proceeds_of_sale));
2855 --tk_util.debug('p_asset_fin_rec_adj.cip_cost: '||to_char(p_asset_fin_rec_adj.cip_cost));
2856 --tk_util.debug('l_delta_salvage_value: '||to_char(l_delta_salvage_value));
2857 --tk_util.debug('l_delta_deprn_limit_amount: '||to_char(l_delta_deprn_limit_amount));
2859 --tk_util.debug('p_cost_of_removal: '||to_char(p_cost_of_removal));
2860 --tk_util.debug('l_unplanned_amount: '||to_char(l_unplanned_amount));
2861 --tk_util.debug('l_expense_amount: '||to_char(l_expense_amount));
2862 --tk_util.debug('l_reserve_amount: '||to_char(l_reserve_amount));
2863 
2864       if (p_mrc_sob_type_code = 'R') then
2865 
2866          UPDATE FA_MC_BOOKS_SUMMARY
2867          SET    RESET_ADJUSTED_COST_FLAG   = 'Y'
2868               , SALVAGE_TYPE               = px_asset_fin_rec_new.salvage_type
2869               , PERCENT_SALVAGE_VALUE      = px_asset_fin_rec_new.percent_salvage_value
2870               , SALVAGE_VALUE              = px_asset_fin_rec_new.salvage_value
2871               , RECOVERABLE_COST           = px_asset_fin_rec_new.recoverable_cost
2872               , DEPRN_LIMIT_TYPE           = px_asset_fin_rec_new.deprn_limit_type
2873               , ALLOWED_DEPRN_LIMIT        = px_asset_fin_rec_new.allowed_deprn_limit
2874               , ALLOWED_DEPRN_LIMIT_AMOUNT = px_asset_fin_rec_new.allowed_deprn_limit_amount
2875               , ADJUSTED_RECOVERABLE_COST  = px_asset_fin_rec_new.adjusted_recoverable_cost
2876               , ADJUSTED_COST              = px_asset_fin_rec_new.adjusted_cost
2877               , DEPRECIATE_FLAG            = px_asset_fin_rec_new.depreciate_flag
2878               , DISABLED_FLAG              = px_asset_fin_rec_new.disabled_flag
2879               , DEPRN_METHOD_CODE          = px_asset_fin_rec_new.deprn_method_code
2880               , LIFE_IN_MONTHS             = px_asset_fin_rec_new.life_in_months
2881               , RATE_ADJUSTMENT_FACTOR     = px_asset_fin_rec_new.rate_adjustment_factor
2882               , ADJUSTED_RATE              = px_asset_fin_rec_new.adjusted_rate
2883               , BONUS_RULE                 = px_asset_fin_rec_new.bonus_rule
2884               , ADJUSTED_CAPACITY          = px_asset_fin_rec_new.adjusted_capacity
2885               , PRODUCTION_CAPACITY        = px_asset_fin_rec_new.production_capacity
2886               , UNIT_OF_MEASURE            = px_asset_fin_rec_new.unit_of_measure
2887               , REMAINING_LIFE1            = px_asset_fin_rec_new.remaining_life1
2888               , REMAINING_LIFE2            = px_asset_fin_rec_new.remaining_life2
2889               , FORMULA_FACTOR             = px_asset_fin_rec_new.formula_factor
2890               , CEILING_NAME               = px_asset_fin_rec_new.ceiling_name
2891               , SHORT_FISCAL_YEAR_FLAG     = px_asset_fin_rec_new.short_fiscal_year_flag
2892               , SUPER_GROUP_ID             = px_asset_fin_rec_new.super_group_id
2893               , OVER_DEPRECIATE_OPTION     = px_asset_fin_rec_new.over_depreciate_option
2894               , DEPRN_AMOUNT               = DEPRN_AMOUNT + l_expense_amount
2895               , YTD_DEPRN                  = YTD_DEPRN + l_expense_amount
2896               , DEPRN_RESERVE              = DEPRN_RESERVE + l_expense_amount + l_reserve_amount
2897               , YTD_PROCEEDS_OF_SALE       = nvl(YTD_PROCEEDS_OF_SALE, 0) + p_proceeds_of_sale
2898               , LTD_PROCEEDS_OF_SALE       = nvl(LTD_PROCEEDS_OF_SALE, 0) + p_proceeds_of_sale
2899               , YTD_COST_OF_REMOVAL        = nvl(YTD_COST_OF_REMOVAL, 0) + p_cost_of_removal
2900               , LTD_COST_OF_REMOVAL        = nvl(LTD_COST_OF_REMOVAL, 0) + p_cost_of_removal
2901               , UNPLANNED_AMOUNT           = UNPLANNED_AMOUNT + l_unplanned_amount
2902               , EXPENSE_ADJUSTMENT_AMOUNT  = EXPENSE_ADJUSTMENT_AMOUNT + l_expense_amount
2903               , RESERVE_ADJUSTMENT_AMOUNT  = RESERVE_ADJUSTMENT_AMOUNT + l_reserve_amount
2904               , LAST_UPDATE_DATE           = p_trans_rec.who_info.last_update_date
2905               , LAST_UPDATED_BY            = p_trans_rec.who_info.last_updated_by
2906               , LAST_UPDATE_LOGIN          = p_trans_rec.who_info.last_update_login
2907          WHERE  ASSET_ID = p_asset_hdr_rec.asset_id
2908          AND    BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
2909          AND    PERIOD_COUNTER = p_period_rec.period_counter
2910          AND    SET_OF_BOOKS_ID = p_asset_hdr_rec.set_of_books_id;
2911 
2912       else
2913 
2914          UPDATE FA_BOOKS_SUMMARY
2915          SET    RESET_ADJUSTED_COST_FLAG   = 'Y'
2916               , SALVAGE_TYPE               = px_asset_fin_rec_new.salvage_type
2917               , PERCENT_SALVAGE_VALUE      = px_asset_fin_rec_new.percent_salvage_value
2918               , SALVAGE_VALUE              = px_asset_fin_rec_new.salvage_value
2919               , RECOVERABLE_COST           = px_asset_fin_rec_new.recoverable_cost
2920               , DEPRN_LIMIT_TYPE           = px_asset_fin_rec_new.deprn_limit_type
2921               , ALLOWED_DEPRN_LIMIT        = px_asset_fin_rec_new.allowed_deprn_limit
2922               , ALLOWED_DEPRN_LIMIT_AMOUNT = px_asset_fin_rec_new.allowed_deprn_limit_amount
2923               , ADJUSTED_RECOVERABLE_COST  = px_asset_fin_rec_new.adjusted_recoverable_cost
2924               , ADJUSTED_COST              = px_asset_fin_rec_new.adjusted_cost
2925               , DEPRECIATE_FLAG            = px_asset_fin_rec_new.depreciate_flag
2926               , DISABLED_FLAG              = px_asset_fin_rec_new.disabled_flag
2927               , DEPRN_METHOD_CODE          = px_asset_fin_rec_new.deprn_method_code
2928               , LIFE_IN_MONTHS             = px_asset_fin_rec_new.life_in_months
2929               , RATE_ADJUSTMENT_FACTOR     = px_asset_fin_rec_new.rate_adjustment_factor
2930               , ADJUSTED_RATE              = px_asset_fin_rec_new.adjusted_rate
2931               , BONUS_RULE                 = px_asset_fin_rec_new.bonus_rule
2932               , ADJUSTED_CAPACITY          = px_asset_fin_rec_new.adjusted_capacity
2933               , PRODUCTION_CAPACITY        = px_asset_fin_rec_new.production_capacity
2934               , UNIT_OF_MEASURE            = px_asset_fin_rec_new.unit_of_measure
2935               , REMAINING_LIFE1            = px_asset_fin_rec_new.remaining_life1
2939               , SHORT_FISCAL_YEAR_FLAG     = px_asset_fin_rec_new.short_fiscal_year_flag
2936               , REMAINING_LIFE2            = px_asset_fin_rec_new.remaining_life2
2937               , FORMULA_FACTOR             = px_asset_fin_rec_new.formula_factor
2938               , CEILING_NAME               = px_asset_fin_rec_new.ceiling_name
2940               , SUPER_GROUP_ID             = px_asset_fin_rec_new.super_group_id
2941               , OVER_DEPRECIATE_OPTION     = px_asset_fin_rec_new.over_depreciate_option
2942               , DEPRN_AMOUNT               = DEPRN_AMOUNT + l_expense_amount
2943               , YTD_DEPRN                  = YTD_DEPRN + l_expense_amount
2944               , DEPRN_RESERVE              = DEPRN_RESERVE + l_expense_amount + l_reserve_amount
2945               , YTD_PROCEEDS_OF_SALE       = nvl(YTD_PROCEEDS_OF_SALE, 0) + p_proceeds_of_sale
2946               , LTD_PROCEEDS_OF_SALE       = nvl(LTD_PROCEEDS_OF_SALE, 0) + p_proceeds_of_sale
2947               , YTD_COST_OF_REMOVAL        = nvl(YTD_COST_OF_REMOVAL, 0) + p_cost_of_removal
2948               , LTD_COST_OF_REMOVAL        = nvl(LTD_COST_OF_REMOVAL, 0) + p_cost_of_removal
2949               , UNPLANNED_AMOUNT           = UNPLANNED_AMOUNT + l_unplanned_amount
2950               , EXPENSE_ADJUSTMENT_AMOUNT  = EXPENSE_ADJUSTMENT_AMOUNT + l_expense_amount
2951               , RESERVE_ADJUSTMENT_AMOUNT  = RESERVE_ADJUSTMENT_AMOUNT + l_reserve_amount
2952               , LAST_UPDATE_DATE           = p_trans_rec.who_info.last_update_date
2953               , LAST_UPDATED_BY            = p_trans_rec.who_info.last_updated_by
2954               , LAST_UPDATE_LOGIN          = p_trans_rec.who_info.last_update_login
2955          WHERE  ASSET_ID = p_asset_hdr_rec.asset_id
2956          AND    BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
2957          AND    PERIOD_COUNTER = p_period_rec.period_counter;
2958 
2959       end if;
2960 
2961    else
2962 
2963       if (p_mrc_sob_type_code = 'R') then
2964          OPEN c_get_mc_deltas;
2965          FETCH c_get_mc_deltas INTO l_delta_salvage_value
2966                                , l_delta_deprn_limit_amount;
2967          CLOSE c_get_mc_deltas;
2968       else
2969          OPEN c_get_deltas;
2970          FETCH c_get_deltas INTO l_delta_salvage_value
2971                                , l_delta_deprn_limit_amount;
2972          CLOSE c_get_deltas;
2973       end if;
2974 
2975       --
2976       -- Get Retirement information
2977       --
2978       if (p_trans_rec.transaction_key = 'MR') then
2979          if (p_mrc_sob_type_code = 'R') then
2980             OPEN c_get_mc_ret_info(p_trans_rec.member_transaction_header_id);
2981             FETCH c_get_mc_ret_info INTO l_proceeds_of_sale
2982                                        , l_cost_of_removal
2983                                        , l_reserve_retired
2984                                        , l_nbv_retired;
2985             CLOSE c_get_mc_ret_info;
2986          else
2987             OPEN c_get_ret_info(p_trans_rec.member_transaction_header_id);
2988             FETCH c_get_ret_info INTO l_proceeds_of_sale
2989                                     , l_cost_of_removal
2990                                     , l_reserve_retired
2991                                     , l_nbv_retired;
2992             CLOSE c_get_ret_info;
2993          end if;
2994       elsif (p_trans_rec.transaction_key = 'MS') then
2995          if (p_mrc_sob_type_code = 'R') then
2996             OPEN c_get_mc_rein_info(p_trans_rec.member_transaction_header_id);
2997             FETCH c_get_mc_rein_info INTO l_proceeds_of_sale
2998                                         , l_cost_of_removal
2999                                         , l_reserve_retired
3000                                         , l_nbv_retired;
3001             CLOSE c_get_mc_rein_info;
3002          else
3003             OPEN c_get_rein_info(p_trans_rec.member_transaction_header_id);
3004             FETCH c_get_rein_info INTO l_proceeds_of_sale
3005                                      , l_cost_of_removal
3006                                      , l_reserve_retired
3007                                      , l_nbv_retired;
3008             CLOSE c_get_rein_info;
3009          end if;
3010 
3011          l_reserve_amount := l_reserve_retired;
3012       else
3013          l_proceeds_of_sale := 0;
3014          l_cost_of_removal  := 0;
3015          l_reserve_retired  := 0;
3016          l_nbv_retired      := 0;
3017       end if;
3018 
3019 --tk_util.debug('p_asset_fin_rec_adj.cost: '||to_char(p_asset_fin_rec_adj.cost));
3020 --tk_util.debug('p_asset_fin_rec_adj.cip_cost: '||to_char(p_asset_fin_rec_adj.cip_cost));
3021 --tk_util.debug('l_delta_salvage_value: '||to_char(l_delta_salvage_value));
3022 --tk_util.debug('l_delta_deprn_limit_amount: '||to_char(l_delta_deprn_limit_amount));
3023 --tk_util.debug('p_proceeds_of_sale: '||to_char(l_proceeds_of_sale));
3024 --tk_util.debug('p_cost_of_removal: '||to_char(l_cost_of_removal));
3025 --tk_util.debug('l_unplanned_amount: '||to_char(l_unplanned_amount));
3026 --tk_util.debug('l_expense_amount: '||to_char(l_expense_amount));
3027 --tk_util.debug('l_reserve_amount: '||to_char(l_reserve_amount));
3028 
3029       if (p_mrc_sob_type_code = 'R') then
3030 
3031          UPDATE FA_MC_BOOKS_SUMMARY
3032          SET RESET_ADJUSTED_COST_FLAG   = 'Y'
3033            , CHANGE_IN_COST             = CHANGE_IN_COST + nvl(p_asset_fin_rec_adj.cost, 0)
3034            , CHANGE_IN_CIP_COST         = CHANGE_IN_CIP_COST + nvl(p_asset_fin_rec_adj.cip_cost, 0)
3035            , COST                       = px_asset_fin_rec_new.cost
3036            , CIP_COST                   = px_asset_fin_rec_new.cip_cost
3037            , SALVAGE_VALUE              = px_asset_fin_rec_new.salvage_value
3038            , MEMBER_SALVAGE_VALUE       = MEMBER_SALVAGE_VALUE + nvl(l_delta_salvage_value, 0)
3039            , RECOVERABLE_COST           = px_asset_fin_rec_new.recoverable_cost
3040            , ALLOWED_DEPRN_LIMIT_AMOUNT = px_asset_fin_rec_new.allowed_deprn_limit_amount
3041            , MEMBER_DEPRN_LIMIT_AMOUNT  = MEMBER_DEPRN_LIMIT_AMOUNT +
3045            , ADJUSTED_COST              = px_asset_fin_rec_new.ADJUSTED_COST
3042                                           nvl(l_delta_deprn_limit_amount,
3043                                               decode(MEMBER_DEPRN_LIMIT_AMOUNT, NULL, NUll, 0))
3044            , ADJUSTED_RECOVERABLE_COST  = px_asset_fin_rec_new.adjusted_recoverable_cost
3046            , UNREVALUED_COST            = px_asset_fin_rec_new.UNREVALUED_COST
3047            , REVAL_AMORTIZATION_BASIS   = px_asset_fin_rec_new.REVAL_AMORTIZATION_BASIS
3048            , DEPRN_AMOUNT               = DEPRN_AMOUNT + l_expense_amount
3049            , YTD_DEPRN                  = YTD_DEPRN + l_expense_amount
3050            , DEPRN_RESERVE              = DEPRN_RESERVE + l_expense_amount + l_reserve_amount
3051            , YTD_PROCEEDS_OF_SALE       = nvl(YTD_PROCEEDS_OF_SALE, 0) + l_proceeds_of_sale
3052            , LTD_PROCEEDS_OF_SALE       = nvl(LTD_PROCEEDS_OF_SALE, 0) + l_proceeds_of_sale
3053            , YTD_COST_OF_REMOVAL        = nvl(YTD_COST_OF_REMOVAL, 0) + l_cost_of_removal
3054            , LTD_COST_OF_REMOVAL        = nvl(LTD_COST_OF_REMOVAL, 0) + l_cost_of_removal
3055            , UNPLANNED_AMOUNT           = UNPLANNED_AMOUNT + l_unplanned_amount
3056            , EXPENSE_ADJUSTMENT_AMOUNT  = EXPENSE_ADJUSTMENT_AMOUNT + l_expense_amount
3057            , RESERVE_ADJUSTMENT_AMOUNT  = RESERVE_ADJUSTMENT_AMOUNT + l_reserve_amount
3058            , LAST_UPDATE_DATE           = p_trans_rec.who_info.last_update_date
3059            , LAST_UPDATED_BY            = p_trans_rec.who_info.last_updated_by
3060            , LAST_UPDATE_LOGIN          = p_trans_rec.who_info.last_update_login
3061          WHERE ASSET_ID = p_asset_hdr_rec.asset_id
3062          AND   BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
3063          AND   PERIOD_COUNTER = p_period_rec.period_counter
3064          AND   SET_OF_BOOKS_ID = p_asset_hdr_rec.set_of_books_id;
3065 
3066       else
3067 
3068          UPDATE FA_BOOKS_SUMMARY
3069          SET RESET_ADJUSTED_COST_FLAG   = 'Y'
3070            , CHANGE_IN_COST             = CHANGE_IN_COST + nvl(p_asset_fin_rec_adj.cost, 0)
3071            , CHANGE_IN_CIP_COST         = CHANGE_IN_CIP_COST + nvl(p_asset_fin_rec_adj.cip_cost, 0)
3072            , COST                       = COST + nvl(p_asset_fin_rec_adj.cost, 0)
3073            , CIP_COST                   = CIP_COST + nvl(p_asset_fin_rec_adj.cip_cost, 0)
3074            , SALVAGE_VALUE              = px_asset_fin_rec_new.salvage_value
3075            , MEMBER_SALVAGE_VALUE       = MEMBER_SALVAGE_VALUE + nvl(l_delta_salvage_value, 0)
3076            , RECOVERABLE_COST           = px_asset_fin_rec_new.recoverable_cost
3077            , ALLOWED_DEPRN_LIMIT_AMOUNT = px_asset_fin_rec_new.allowed_deprn_limit_amount
3078            , MEMBER_DEPRN_LIMIT_AMOUNT  = MEMBER_DEPRN_LIMIT_AMOUNT +
3079                                           nvl(l_delta_deprn_limit_amount,
3080                                               decode(MEMBER_DEPRN_LIMIT_AMOUNT, NULL, NUll, 0))
3081            , ADJUSTED_RECOVERABLE_COST  = px_asset_fin_rec_new.adjusted_recoverable_cost
3082            , ADJUSTED_COST              = px_asset_fin_rec_new.ADJUSTED_COST
3083            , UNREVALUED_COST            = px_asset_fin_rec_new.UNREVALUED_COST
3084            , REVAL_AMORTIZATION_BASIS   = px_asset_fin_rec_new.REVAL_AMORTIZATION_BASIS
3085            , DEPRN_AMOUNT               = DEPRN_AMOUNT + l_expense_amount
3086            , YTD_DEPRN                  = YTD_DEPRN + l_expense_amount
3087            , DEPRN_RESERVE              = DEPRN_RESERVE + l_expense_amount + l_reserve_amount
3088            , YTD_PROCEEDS_OF_SALE       = nvl(YTD_PROCEEDS_OF_SALE, 0) + l_proceeds_of_sale
3089            , LTD_PROCEEDS_OF_SALE       = nvl(LTD_PROCEEDS_OF_SALE, 0) + l_proceeds_of_sale
3090            , YTD_COST_OF_REMOVAL        = nvl(YTD_COST_OF_REMOVAL, 0) + l_cost_of_removal
3091            , LTD_COST_OF_REMOVAL        = nvl(LTD_COST_OF_REMOVAL, 0) + l_cost_of_removal
3092            , UNPLANNED_AMOUNT           = UNPLANNED_AMOUNT + l_unplanned_amount
3093            , EXPENSE_ADJUSTMENT_AMOUNT  = EXPENSE_ADJUSTMENT_AMOUNT + l_expense_amount
3094            , RESERVE_ADJUSTMENT_AMOUNT  = RESERVE_ADJUSTMENT_AMOUNT + l_reserve_amount
3095            , LAST_UPDATE_DATE           = p_trans_rec.who_info.last_update_date
3096            , LAST_UPDATED_BY            = p_trans_rec.who_info.last_updated_by
3097            , LAST_UPDATE_LOGIN          = p_trans_rec.who_info.last_update_login
3098          WHERE ASSET_ID = p_asset_hdr_rec.asset_id
3099          AND   BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
3100          AND   PERIOD_COUNTER = p_period_rec.period_counter;
3101 
3102       end if;
3103 
3104    end if;
3105 
3106    printBooksSummary(p_asset_id       => p_asset_hdr_rec.asset_id,
3107                      p_book_type_code => p_asset_hdr_rec.book_type_code,
3108                      p_log_level_rec  => p_log_level_rec);
3109 --                     p_period_counter => p_period_rec.period_counter);
3110 
3111    if (p_log_level_rec.statement_level) then
3112       fa_debug_pkg.add(l_calling_fn||'()-', 'asset id', p_asset_hdr_rec.asset_id);
3113    end if;
3114 
3115    return TRUE;
3116 
3117 EXCEPTION
3118    WHEN adj_err THEN
3119       if (p_log_level_rec.statement_level) then
3120          fa_debug_pkg.add(l_calling_fn||'(adj_err)-', 'sqlcode', sqlcode);
3121       end if;
3122 
3123       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3124       return false;
3125 
3126    WHEN OTHERS THEN
3127 
3128       if (p_log_level_rec.statement_level) then
3129          fa_debug_pkg.add(l_calling_fn||'(OTHERS)-', 'sqlcode', sqlcode);
3130       end if;
3131 
3132       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
3133       return false;
3134 
3135 END CurrentPeriodAdj;
3136 
3137 --+==============================================================================
3138 -- Function: bsRecalculate
3139 --
3140 --   This function calculate catch-up amounts due to backdated
3141 --   amortization transactions.
3142 
3146 --+==============================================================================
3143 --      3.2: Call faxcde to get reserve for adjusted_cost, raf and formula_factor
3144 --      3.3: Call Deprn Basis function to get new adjusted_cost, raf and formula_factor.
3145 --   4: Return catch-up amount.
3147 FUNCTION bsRecalculate(
3148     p_trans_rec           IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
3149     p_asset_hdr_rec                     FA_API_TYPES.asset_hdr_rec_type,
3150     p_asset_type_rec                    FA_API_TYPES.asset_type_rec_type,
3151     p_asset_desc_rec                    FA_API_TYPES.asset_desc_rec_type,
3152     p_asset_fin_rec_old                 FA_API_TYPES.asset_fin_rec_type,
3153     p_asset_fin_rec_adj                 FA_API_TYPES.asset_fin_rec_type default null,
3154     p_period_rec                        FA_API_TYPES.period_rec_type,
3155     px_asset_fin_rec_new  IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
3156     p_asset_deprn_rec                   FA_API_TYPES.asset_deprn_rec_type,
3157     p_asset_deprn_rec_adj               FA_API_TYPES.asset_deprn_rec_type default null,
3158     x_deprn_expense          OUT NOCOPY NUMBER,
3159     x_bonus_expense          OUT NOCOPY NUMBER,
3160     x_impairment_expense     OUT NOCOPY NUMBER,
3161     x_deprn_reserve          OUT NOCOPY NUMBER,
3162     p_running_mode        IN            NUMBER,
3163     p_used_by_revaluation IN            NUMBER,
3164     p_reclassed_asset_id                NUMBER,
3165     p_reclass_src_dest                  VARCHAR2,
3166     p_reclassed_asset_dpis              DATE,
3167     p_update_books_summary              BOOLEAN default FALSE,
3168     p_mrc_sob_type_code                 VARCHAR2,
3169     p_calling_fn                        VARCHAR2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)  RETURN BOOLEAN IS
3170 
3171    l_calling_fn                   VARCHAR2(100) := 'FA_AMORT_PVT.bsRecalculate';
3172 
3173    --
3174    -- This is to get date placed in service using transaction header id
3175    -- Bug4958977: Needed to modify to use older dpis
3176    CURSOR c_get_dpis (c_thid number) IS
3177       select least(inbk.date_placed_in_service, nvl(outbk.date_placed_in_service, inbk.date_placed_in_service))
3178       from   fa_books inbk
3179            , fa_books outbk
3180       where  inbk.transaction_header_id_in = c_thid
3181       and    outbk.transaction_header_id_out(+) = inbk.transaction_header_id_in
3182       and    outbk.asset_id(+) = inbk.asset_id
3183       and    outbk.book_type_code(+) = inbk.book_type_code;
3184 
3185 
3186    --
3187    -- This is to get period counter using FA_BOOKS_SUMMARY table
3188    --
3189    CURSOR c_get_books_summary(c_period_counter number) IS
3190      select
3191             bs.period_counter
3192           , bs.fiscal_year
3193           , bs.period_num
3194           , bs.calendar_period_open_date
3195           , bs.calendar_period_close_date
3196           , bs.reset_adjusted_cost_flag
3197           , bs.change_in_cost
3198           , bs.change_in_cip_cost
3199           , bs.cost
3200           , bs.cip_cost
3201           , bs.salvage_type
3202           , bs.percent_salvage_value
3203           , bs.salvage_value
3204           , bs.member_salvage_value
3205           , bs.recoverable_cost
3206           , bs.deprn_limit_type
3207           , bs.allowed_deprn_limit
3208           , bs.allowed_deprn_limit_amount
3209           , bs.member_deprn_limit_amount
3210           , bs.adjusted_recoverable_cost
3211           , bs.adjusted_cost
3212           , bs.depreciate_flag
3213           , bs.date_placed_in_service
3214           , bs.deprn_method_code
3215           , bs.life_in_months
3216           , bs.rate_adjustment_factor
3217           , bs.adjusted_rate
3218           , bs.bonus_rule
3219           , bs.adjusted_capacity
3220           , bs.production_capacity
3221           , bs.unit_of_measure
3222           , bs.remaining_life1
3223           , bs.remaining_life2
3224           , bs.formula_factor
3225           , bs.unrevalued_cost
3226           , bs.reval_amortization_basis
3227           , bs.reval_ceiling
3228           , bs.ceiling_name
3229           , bs.eofy_adj_cost
3230           , bs.eofy_formula_factor
3231           , bs.eofy_reserve
3232           , bs.eop_adj_cost
3233           , bs.eop_formula_factor
3234           , bs.short_fiscal_year_flag
3235           , bs.group_asset_id
3236           , bs.super_group_id
3237           , bs.over_depreciate_option
3238           , bs.deprn_amount
3239           , bs.ytd_deprn
3240           , bs.deprn_reserve
3241           , bs.bonus_deprn_amount
3242           , bs.bonus_ytd_deprn
3243           , bs.bonus_deprn_reserve
3244           , bs.bonus_rate
3245           , bs.impairment_amount
3246           , bs.ytd_impairment
3247           , bs.impairment_reserve
3248           , bs.ltd_production
3249           , bs.ytd_production
3250           , bs.production
3251           , bs.reval_amortization
3252           , bs.reval_deprn_expense
3253           , bs.reval_reserve
3254           , bs.ytd_reval_deprn_expense
3255           , bs.deprn_override_flag
3256           , bs.system_deprn_amount
3257           , bs.system_bonus_deprn_amount
3258           , bs.ytd_proceeds_of_sale
3259           , bs.ltd_proceeds_of_sale
3260           , bs.ytd_cost_of_removal
3261           , bs.ltd_cost_of_removal
3262           , bs.deprn_adjustment_amount
3263           , bs.expense_adjustment_amount
3264           , bs.reserve_adjustment_amount
3265           , bs.change_in_eofy_reserve
3266           , 0  impairment_amount
3267           , 0  ytd_impairment
3268           , 0  impairment_reserve
3269      from   fa_books_summary bs
3273      order by bs.period_counter;
3270      where  bs.asset_id = p_asset_hdr_rec.asset_id
3271      and    bs.book_type_code = p_asset_hdr_rec.book_type_code
3272      and    bs.period_counter >= c_period_counter
3274 
3275    CURSOR c_get_mc_books_summary(c_period_counter number) IS
3276      select
3277             bs.period_counter
3278           , bs.fiscal_year
3279           , bs.period_num
3280           , bs.calendar_period_open_date
3281           , bs.calendar_period_close_date
3282           , bs.reset_adjusted_cost_flag
3283           , bs.change_in_cost
3284           , bs.change_in_cip_cost
3285           , bs.cost
3286           , bs.cip_cost
3287           , bs.salvage_type
3288           , bs.percent_salvage_value
3289           , bs.salvage_value
3290           , bs.member_salvage_value
3291           , bs.recoverable_cost
3292           , bs.deprn_limit_type
3293           , bs.allowed_deprn_limit
3294           , bs.allowed_deprn_limit_amount
3295           , bs.member_deprn_limit_amount
3296           , bs.adjusted_recoverable_cost
3297           , bs.adjusted_cost
3298           , bs.depreciate_flag
3299           , bs.date_placed_in_service
3300           , bs.deprn_method_code
3301           , bs.life_in_months
3302           , bs.rate_adjustment_factor
3303           , bs.adjusted_rate
3304           , bs.bonus_rule
3305           , bs.adjusted_capacity
3306           , bs.production_capacity
3307           , bs.unit_of_measure
3308           , bs.remaining_life1
3309           , bs.remaining_life2
3310           , bs.formula_factor
3311           , bs.unrevalued_cost
3312           , bs.reval_amortization_basis
3313           , bs.reval_ceiling
3314           , bs.ceiling_name
3315           , bs.eofy_adj_cost
3316           , bs.eofy_formula_factor
3317           , bs.eofy_reserve
3318           , bs.eop_adj_cost
3319           , bs.eop_formula_factor
3320           , bs.short_fiscal_year_flag
3321           , bs.group_asset_id
3322           , bs.super_group_id
3323           , bs.over_depreciate_option
3324           , bs.deprn_amount
3325           , bs.ytd_deprn
3326           , bs.deprn_reserve
3327           , bs.bonus_deprn_amount
3328           , bs.bonus_ytd_deprn
3329           , bs.bonus_deprn_reserve
3330           , bs.bonus_rate
3331           , bs.impairment_amount
3332           , bs.ytd_impairment
3333           , bs.impairment_reserve
3334           , bs.ltd_production
3335           , bs.ytd_production
3336           , bs.production
3337           , bs.reval_amortization
3338           , bs.reval_deprn_expense
3339           , bs.reval_reserve
3340           , bs.ytd_reval_deprn_expense
3341           , bs.deprn_override_flag
3342           , bs.system_deprn_amount
3343           , bs.system_bonus_deprn_amount
3344           , bs.ytd_proceeds_of_sale
3345           , bs.ltd_proceeds_of_sale
3346           , bs.ytd_cost_of_removal
3347           , bs.ltd_cost_of_removal
3348           , deprn_adjustment_amount
3349           , bs.expense_adjustment_amount
3350           , bs.reserve_adjustment_amount
3351           , bs.change_in_eofy_reserve
3352           , 0  impairment_amount
3353           , 0  ytd_impairment
3354           , 0  impairment_reserve
3355      from   fa_mc_books_summary bs
3356      where  bs.asset_id = p_asset_hdr_rec.asset_id
3357      and    bs.book_type_code = p_asset_hdr_rec.book_type_code
3358      and    bs.period_counter >= c_period_counter
3359      and    bs.set_of_books_id = p_asset_hdr_rec.set_of_books_id
3360      order by bs.period_counter;
3361 
3362 
3363    CURSOR c_get_eofy_amts(c_period_counter number) IS
3364      select recoverable_cost
3365           , salvage_value
3366           , deprn_reserve
3367      from   fa_books_summary
3368      where  asset_id = p_asset_hdr_rec.asset_id
3369      and    book_type_code = p_asset_hdr_rec.book_type_code
3370      and    period_counter = c_period_counter;
3371 
3372    CURSOR c_get_mc_eofy_amts(c_period_counter number) IS
3373      select recoverable_cost
3374           , salvage_value
3375           , deprn_reserve
3376      from   fa_mc_books_summary
3377      where  asset_id = p_asset_hdr_rec.asset_id
3378      and    book_type_code = p_asset_hdr_rec.book_type_code
3379      and    period_counter = c_period_counter
3380      and    set_of_books_id = p_asset_hdr_rec.set_of_books_id ;
3381 
3382   --
3383   -- Cursor to get retirement information using reinsatement
3384   -- transaction_header_id
3385   --
3386   CURSOR c_get_rein_info IS
3387     select -1 * ret.proceeds_of_sale
3388          , -1 * ret.cost_of_removal
3389          ,  ret.reserve_retired
3390          ,  nbv_retired
3391          ,  ret.recognize_gain_loss -- Added for bug 8425794 / 8244128
3392          ,  ret.recapture_amount
3393     from   fa_retirements ret
3394          , fa_transaction_headers mth
3395     where  mth.transaction_header_id = p_trans_rec.member_transaction_header_id
3396     and    mth.asset_id = ret.asset_id
3397     and    mth.book_type_code = p_asset_hdr_rec.book_type_code
3398     and    ret.book_type_code = p_asset_hdr_rec.book_type_code
3399     and    ret.transaction_header_id_out = p_trans_rec.member_transaction_header_id;
3400 
3401   CURSOR c_get_mc_rein_info IS
3402     select -1 * ret.proceeds_of_sale
3403          , -1 * ret.cost_of_removal
3404          ,  nvl(ret.reserve_retired, 0)
3405          ,  nbv_retired
3406          ,  ret.recognize_gain_loss -- Added for bug 8425794 / 8244128
3407          ,  ret.recapture_amount
3408     from   fa_mc_retirements ret
3409          , fa_transaction_headers mth
3413     and    ret.book_type_code = p_asset_hdr_rec.book_type_code
3410     where  mth.transaction_header_id = p_trans_rec.member_transaction_header_id
3411     and    mth.asset_id = ret.asset_id
3412     and    mth.book_type_code = p_asset_hdr_rec.book_type_code
3414     and    ret.transaction_header_id_out = p_trans_rec.member_transaction_header_id
3415     and    ret.set_of_books_id = p_asset_hdr_rec.set_of_books_id ;
3416 
3417    CURSOR c_check_record_exists IS
3418       select bs.period_counter
3419       from   fa_books_summary bs
3420       where  bs.asset_id = p_asset_hdr_rec.asset_id
3421       and    bs.book_type_code = p_asset_hdr_rec.book_type_code
3422       and    bs.period_counter = p_period_rec.period_counter;
3423 
3424    CURSOR c_check_mc_record_exists IS
3425       select bs.period_counter
3426       from   fa_mc_books_summary bs
3427       where  bs.asset_id = p_asset_hdr_rec.asset_id
3428       and    bs.book_type_code = p_asset_hdr_rec.book_type_code
3429       and    bs.period_counter = p_period_rec.period_counter
3430       and    bs.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
3431 
3432 /* Following cursor is added by HHIRAGA for tracking */
3433    CURSOR c_get_current_period IS
3434       select dp.period_counter
3435         from fa_deprn_periods dp
3436        where dp.book_type_code = p_asset_hdr_rec.book_type_code
3437          and dp.period_close_date is null;
3438 
3439    CURSOR c_get_current_period_mrc IS
3440       select dp.period_counter
3441         from fa_mc_deprn_periods dp
3442        where dp.book_type_code = p_asset_hdr_rec.book_type_code
3443          and dp.period_close_date is null
3444          and dp.set_of_books_id = p_asset_hdr_rec.set_of_books_id ;
3445 
3446 
3447    l_mem_trx                      BOOLEAN := FALSE; -- FALSE if this is group trx
3448    l_temp_num                     NUMBER; -- temporary numbers for calculation
3449 
3450   l_period_rec                   FA_API_TYPES.period_rec_type;      -- Store period information of
3451                                                                     -- the period where trx date
3452                                                                     -- falls into
3453                                                                     -- the period where trx date
3454                                                                     -- falls into, then
3455                                                                     -- store period info for
3456                                                                     -- each period processed.
3457   l_trx_period_rec               FA_API_TYPES.period_rec_type;      -- Store period information of
3458                                                                     -- the period where trx date
3459                                                                     -- falls into
3460 
3461    l_ind                         BINARY_INTEGER; -- Used to find delta amounts for each period
3462    l_temp_ind                    BINARY_INTEGER; -- Indicate where to start updating FA_BOOKS_SUMMARY
3463    l_old_reserve                  NUMBER;
3464 
3465    --
3466    -- Tables to store member delta information
3467    --
3468    td_period_counter              fa_amort_pvt.tab_num15_type;  -- not used
3469    td_cost                        fa_amort_pvt.tab_num_type;    -- not used
3470    td_cip_cost                    fa_amort_pvt.tab_num_type;    -- not used
3471    td_salvage_value               fa_amort_pvt.tab_num_type;
3472    td_deprn_limit_amount          fa_amort_pvt.tab_num_type;
3473 
3474 
3475    l_transaction_date_entered     date; -- This is used as parameter for c_get_books_summary
3476    l_period_counter               NUMBER(15);
3477 
3478    l_bs_ind                       BINARY_INTEGER := 1;
3479    d                              BINARY_INTEGER := 0; -- index for delta tables
3480    e                              BINARY_INTEGER := 0; -- index for delta tables to look for
3481                                                        -- next period to maintain books summary
3482 
3483 
3484    --
3485    -- Used to populate dpr_in
3486    --
3487    l_fiscal_year                  NUMBER(15);
3488    l_period_num                   NUMBER(15);
3489    l_adjusted_ind                 BINARY_INTEGER;
3490    l_count                        BINARY_INTEGER := 0; -- Stores count of tbs tables
3491 
3492   --+++++ Store data related to each transactions +++++
3493   l_trans_rec                    FA_API_TYPES.trans_rec_type;       -- Not used
3494   l_asset_deprn_rec              FA_API_TYPES.asset_deprn_rec_type; -- For Deprn Basis
3495   l_asset_deprn_rec_raf          FA_API_TYPES.asset_deprn_rec_type; -- For Deprn Basis
3496   l_asset_fin_rec_old            FA_API_TYPES.asset_fin_rec_type;   -- For Deprn Basis
3497   l_asset_fin_rec_new            FA_API_TYPES.asset_fin_rec_type;
3498 
3499   --+++++ Variables for calling buildMemberTable function +++++
3500   l_asset_hdr_rec                FA_API_TYPES.asset_hdr_rec_type;  -- Store member info
3501   t_period_counter               fa_amort_pvt.tab_num15_type;
3502   t_delta_cost                   fa_amort_pvt.tab_num_type;
3503   t_delta_cip_cost               fa_amort_pvt.tab_num_type;
3504   t_delta_salvage_value          fa_amort_pvt.tab_num_type;
3505   t_delta_deprn_limit_amount     fa_amort_pvt.tab_num_type;
3506   l_member_dpis                  DATE;
3507   l_multiplier                   NUMBER := 1;
3508   l_m_asset_fin_rec_adj          FA_API_TYPES.asset_fin_rec_type; -- member's delta info
3509   l_asset_fin_rec_reclass        FA_API_TYPES.asset_fin_rec_type; -- correct fin rec adj for
3510   l_salvage_limit_type           VARCHAR2(30);
3511                                                                   -- reclass
3512 
3513   --+++++ Variables for CURSOR c_get_rein_info +++++
3514   l_nbv_retired                  NUMBER := 0;
3515   l_reserve_retired              NUMBER;
3516   l_proceeds_of_sale             NUMBER := 0;
3517   l_cost_of_removal              NUMBER := 0;
3521 
3518   l_recognize_gain_loss          fa_retirements.recognize_gain_loss%type; -- Added for bug 8425794 / 8244128
3519   l_recapture_amount             NUMBER := 0;
3520 
3522   --+++++++++++++++ For calling faxcde +++++++++++++++
3523   l_dpr_in                       FA_STD_TYPES.dpr_struct;
3524   l_dpr_out                      FA_STD_TYPES.dpr_out_struct;
3525   l_dpr_arr                      FA_STD_TYPES.dpr_arr_type;
3526   l_running_mode                 NUMBER;
3527 
3528   --
3529   -- These are used to store return values from faxcde which
3530   -- may not be used.
3531   --
3532   l_out_deprn_exp                NUMBER;
3533   l_out_reval_exp                NUMBER;
3534   l_out_reval_amo                NUMBER;
3535   l_out_prod                     NUMBER;
3536   l_out_ann_adj_exp              NUMBER;
3537   l_out_ann_adj_reval_exp        NUMBER;
3538   l_out_ann_adj_reval_amo        NUMBER;
3539   l_out_bonus_rate_used          NUMBER;
3540   l_out_full_rsv_flag            BOOLEAN;
3541   l_out_life_comp_flag           BOOLEAN;
3542   l_out_deprn_override_flag      VARCHAR2(1);
3543 
3544 
3545 
3546   --+++++++ variables for old information +++++++
3547   l_eofy_rec_cost                NUMBER; -- This needs to be populated from tbs
3548   l_eofy_sal_val                 NUMBER; -- This needs to be populated from tbs
3549   l_eop_rec_cost                 NUMBER; -- This needs to be populated from tbs
3550   l_eop_sal_val                  NUMBER; -- This needs to be populated from tbs
3551   l_eofy_reserve                 NUMBER;
3552 
3553 
3554   --++++++++ variables for manual override ++++++++
3555   l_rate_source_rule             VARCHAR2(25);
3556   l_deprn_basis_rule             VARCHAR2(25);
3557 
3558   --++++++++ variables for calling catchupBooksSummary ++++++++
3559   l_depreciate_flag_change        BOOLEAN := FALSE;
3560   l_disabled_flag_change          BOOLEAN := FALSE;
3561 
3562   l_gr_asset_deprn_rec            FA_API_TYPES.asset_deprn_rec_type; -- For Reclass
3563   l_gr_ind                        BINARY_INTEGER;
3564 
3565   --+ HHIRAGA added on Oct/Nov in 2003
3566   --++++++++ variables for Trackking Member Feature ++++++++
3567   l_processed_flag               BOOLEAN := FALSE;
3568   l_backup_processed_flag        BOOLEAN := FALSE;
3569   l_raf_processed_flag           BOOLEAN := FALSE;
3570   l_first_process                BOOLEAN := TRUE;
3571   l_current_period_counter       NUMBER;
3572   l_mem_period_counter           NUMBER;
3573 
3574   l_mem_deprn_reserve            NUMBER;
3575   l_mem_eofy_reserve             NUMBER;
3576   l_mem_loop_first               BOOLEAN := TRUE;
3577 
3578   l_mem_ytd_deprn_addition       NUMBER;
3579   l_mem_deprn_reserve_addition   NUMBER;
3580 
3581   l_recalc_start_fy              NUMBER;
3582   l_recalc_start_period_num      NUMBER;
3583   l_recalc_start_period_counter  NUMBER;
3584   l_old_recalc_start_fy          NUMBER;
3585   l_old_recalc_start_period_num  NUMBER;
3586   l_old_recalc_end_fy            NUMBER;
3587   l_old_recalc_end_period_num    NUMBER;
3588   l_no_allocation_for_last       VARCHAR2(1);
3589   l_chk_bs_row_exists            VARCHAR2(1);
3590 
3591    CURSOR c_chk_bs_row_exists IS
3592       select 'Y'
3593         from fa_books_summary
3594        where book_type_code = p_asset_hdr_rec.book_type_code
3595          and group_asset_id = p_asset_hdr_rec.asset_id
3596          and asset_id <> group_asset_id
3597          and period_counter = l_recalc_start_period_counter - 1;
3598 
3599    CURSOR c_get_mem_bs_row IS
3600       select ytd_deprn,deprn_reserve,bonus_ytd_deprn,bonus_deprn_reserve,
3601              eofy_reserve,ytd_impairment,impairment_reserve
3602         from fa_books_summary
3603        where book_type_code = p_asset_hdr_rec.book_type_code
3604          and asset_id = p_reclassed_asset_id
3605          and group_asset_id = p_asset_hdr_rec.asset_id
3606          and period_counter = l_trx_period_rec.period_counter - 1;
3607 
3608    CURSOR c_get_ytd_deprn IS
3609       select ytd_deprn,deprn_reserve
3610         from fa_deprn_summary
3611        where book_type_code = p_asset_hdr_rec.book_type_code
3612          and asset_id = p_reclassed_asset_id
3613          and period_counter = l_mem_period_counter
3614          and deprn_source_code = 'BOOKS';
3615 
3616    --+ MRCsupport
3617    CURSOR c_chk_bs_row_exists_mrc IS
3618       select 'Y'
3619         from fa_mc_books_summary
3620        where book_type_code = p_asset_hdr_rec.book_type_code
3621          and group_asset_id = p_asset_hdr_rec.asset_id
3622          and asset_id <> group_asset_id
3623          and period_counter = l_recalc_start_period_counter - 1
3624          and set_of_books_id = p_asset_hdr_rec.set_of_books_id ;
3625 
3626    CURSOR c_get_mem_bs_row_mrc IS
3627       select ytd_deprn,deprn_reserve,bonus_ytd_deprn,bonus_deprn_reserve,
3628              eofy_reserve, ytd_impairment, impairment_reserve
3629         from fa_mc_books_summary
3630        where book_type_code = p_asset_hdr_rec.book_type_code
3631          and asset_id = p_reclassed_asset_id
3632          and group_asset_id = p_asset_hdr_rec.asset_id
3633          and period_counter = l_trx_period_rec.period_counter - 1
3634          and set_of_books_id = p_asset_hdr_rec.set_of_books_id;
3635 
3636    CURSOR c_get_ytd_deprn_mrc IS
3637       select ytd_deprn,deprn_reserve
3638         from fa_mc_deprn_summary
3639        where book_type_code = p_asset_hdr_rec.book_type_code
3640          and asset_id = p_reclassed_asset_id
3641          and period_counter = l_mem_period_counter
3642          and deprn_source_code = 'BOOKS'
3643          and set_of_books_id = p_asset_hdr_rec.set_of_books_id;
3644 
3645 
3646   --+++++++++++++++++ Exceptions ++++++++++++++++++++++
3647   invalid_trx_to_overlap         EXCEPTION; --This is currently not used but there is a
3651   /*Bug 8765735 - Start*/
3648                                             --section in exception handling for future use.
3649   calc_failed                    EXCEPTION;
3650   l_adj_amt                      number;     ----- bug# 5768759
3652   l_dpr                FA_STD_TYPES.FA_DEPRN_ROW_STRUCT;
3653   l_run_mode           VARCHAR2(20) := 'TRANSACTION';
3654   l_status             BOOLEAN;
3655   /*Bug 8765735 - End*/
3656   l_prev_adj_cost_flag  boolean := false; --bug#15897249
3657 
3658 BEGIN
3659 
3660    if (p_log_level_rec.statement_level) then
3661       fa_debug_pkg.add(l_calling_fn, 'Begin', p_asset_type_rec.asset_type||
3662                                               ':'||p_asset_hdr_rec.asset_id , p_log_level_rec => p_log_level_rec);
3663       fa_debug_pkg.add(l_calling_fn, 'Reclass values', p_reclass_src_dest||
3664                                      ':'||to_char(p_reclassed_asset_id)||':'||
3665                                      to_char(p_reclassed_asset_dpis, 'DD-MON-RR'));
3666       fa_debug_pkg.add(l_calling_fn, 'Begin BSrec sob_id',
3667 p_asset_hdr_rec.set_of_books_id);
3668 
3669 
3670    end if;
3671 
3672    if (p_asset_fin_rec_old.depreciate_flag = 'NO') or
3673       (nvl(p_asset_fin_rec_old.disabled_flag, 'N') = 'Y') then
3674 
3675       l_depreciate_flag_change := (p_asset_fin_rec_old.depreciate_flag <>
3676                                    px_asset_fin_rec_new.depreciate_flag);
3677 
3678       l_disabled_flag_change := (nvl(p_asset_fin_rec_old.disabled_flag, 'N') <>
3679                                  nvl(px_asset_fin_rec_new.disabled_flag, 'N'));
3680 
3681       if (not catchupBooksSummary (
3682                        p_trans_rec              => p_trans_rec,
3683                        p_asset_hdr_rec          => p_asset_hdr_rec,
3684                        p_period_rec             => p_period_rec,
3685                        p_asset_fin_rec_new      => px_asset_fin_rec_new,
3686                        p_depreciate_flag_change => l_depreciate_flag_change,
3687                        p_disabled_flag_change   => l_disabled_flag_change,
3688                        p_mrc_sob_type_code      => p_mrc_sob_type_code,
3689                        p_calling_fn             => l_calling_fn,
3690                        p_log_level_rec          => p_log_level_rec)) then
3691 
3692          if (p_log_level_rec.statement_level) then
3693             fa_debug_pkg.add(l_calling_fn, 'Error calling', 'catchupBooksSummary', p_log_level_rec => p_log_level_rec);
3694          end if;
3695 
3696          raise calc_failed;
3697 
3698       end if;
3699    elsif (p_asset_fin_rec_old.period_counter_fully_reserved is not null) or
3700          (p_asset_fin_rec_old.period_counter_life_complete is not null) then
3701       l_temp_num := null;
3702 
3703       if (p_mrc_sob_type_code = 'R') then
3704          OPEN c_check_mc_record_exists;
3705          FETCH c_check_mc_record_exists INTO l_temp_num;
3706          CLOSE c_check_mc_record_exists;
3707       else
3708          OPEN c_check_record_exists;
3709          FETCH c_check_record_exists INTO l_temp_num;
3710          CLOSE c_check_record_exists;
3711       end if;
3712 
3713       if l_temp_num is null then
3714          if (not catchupBooksSummary (
3715                           p_trans_rec              => p_trans_rec,
3716                           p_asset_hdr_rec          => p_asset_hdr_rec,
3717                           p_period_rec             => p_period_rec,
3718                           p_asset_fin_rec_new      => px_asset_fin_rec_new,
3719                           p_depreciate_flag_change => l_depreciate_flag_change,
3720                           p_disabled_flag_change   => l_disabled_flag_change,
3721                           p_mrc_sob_type_code      => p_mrc_sob_type_code,
3722                           p_calling_fn             => l_calling_fn,
3723                           p_log_level_rec          => p_log_level_rec)) then
3724 
3725             if (p_log_level_rec.statement_level) then
3726                fa_debug_pkg.add(l_calling_fn, 'Error calling', 'catchupBooksSummary', p_log_level_rec => p_log_level_rec);
3727             end if;
3728 
3729             raise calc_failed;
3730 
3731          end if;
3732       end if;
3733    end if;
3734 
3735 
3736    --
3737    -- Initialize global variables
3738    --
3739    InitGlobeVariables;
3740 
3741    x_deprn_reserve := 0;
3742 
3743    l_mem_trx := (p_trans_rec.member_transaction_header_id is not null);
3744 
3745    l_transaction_date_entered := nvl(p_trans_rec.amortization_start_date,
3746                                      p_trans_rec.transaction_date_entered);
3747 
3748    --
3749    -- Get period information of the period where transaction date falls into.
3750    --
3751    if not GetPeriodInfo(to_number(to_char(l_transaction_date_entered, 'J')),
3752                         p_asset_hdr_rec.book_type_code,
3753                         p_mrc_sob_type_code,
3754                         p_asset_hdr_rec.set_of_books_id,
3755                         l_period_rec,
3756                         p_log_level_rec) then
3757 
3758       if (p_log_level_rec.statement_level) then
3759          fa_debug_pkg.add(l_calling_fn, 'Error calling', 'GetPeriodInfo', p_log_level_rec => p_log_level_rec);
3760       end if;
3761 
3762       raise calc_failed;
3763 
3764    end if;
3765 
3766    l_trx_period_rec := l_period_rec;
3767 
3768    if not fa_cache_pkg.fazcct(fa_cache_pkg.fazcbc_record.deprn_calendar, p_log_level_rec => p_log_level_rec) then
3769 
3770       if (p_log_level_rec.statement_level) then
3771          fa_debug_pkg.add(l_calling_fn, 'Error calling', 'fa_cache_pkg.fazcct', p_log_level_rec => p_log_level_rec);
3772       end if;
3773 
3774       raise calc_failed;
3775 
3776    end if;
3777 
3778    if (l_mem_trx) then
3779 
3780       --
3784          l_member_dpis := p_reclassed_asset_dpis;
3781       -- Find member's date placed in service
3782       --
3783       if (p_trans_rec.transaction_key = 'GC') then
3785       else
3786          OPEN c_get_dpis(p_trans_rec.member_transaction_header_id);
3787          FETCH c_get_dpis INTO l_member_dpis;
3788          CLOSE c_get_dpis;
3789       end if;
3790 
3791       -- Bug4958977: Adding following entire if statement
3792       if (p_trans_rec.transaction_key not in ('MR', 'MS', 'GC') and
3793           nvl(p_asset_fin_rec_adj.cost, 0) = 0 and
3794           nvl(p_asset_fin_rec_adj.cip_cost, 0) = 0 and
3795           nvl(p_asset_fin_rec_adj.salvage_value, 0) = 0 and
3796           nvl(p_asset_fin_rec_adj.allowed_deprn_limit_amount, 0) = 0) then
3797 
3798 
3799          --
3800          -- Get period information of the period where transaction date falls into.
3801          --
3802          if not GetPeriodInfo(to_number(to_char(l_member_dpis, 'J')),
3803                         p_asset_hdr_rec.book_type_code,
3804                         p_mrc_sob_type_code,
3805                         p_asset_hdr_rec.set_of_books_id,
3806                         l_period_rec,
3807                         p_log_level_rec) then
3808 
3809             if (p_log_level_rec.statement_level) then
3810                fa_debug_pkg.add(l_calling_fn, 'Error calling', 'GetPeriodInfo', p_log_level_rec => p_log_level_rec);
3811             end if;
3812 
3813             raise calc_failed;
3814 
3815          end if;
3816 
3817          l_trx_period_rec := l_period_rec;
3818 
3819       end if;
3820 
3821       l_asset_hdr_rec := p_asset_hdr_rec;
3822       l_asset_hdr_rec.asset_id := p_reclassed_asset_id;
3823 
3824       if (p_reclass_src_dest = 'SOURCE') then
3825          l_multiplier := -1;
3826       end if;
3827 
3828       --
3829       -- bug5141789: Need to pass this new variable to see if
3830       -- we need to track sum of member salvage value or not.
3831       --
3832       if (px_asset_fin_rec_new.salvage_type = 'SUM' or
3833           px_asset_fin_rec_new.deprn_limit_type = 'SUM') then
3834          l_salvage_limit_type := 'SUM';
3835       else
3836          l_salvage_limit_type := 'PCT';
3837       end if;
3838 
3839       if not buildMemberTable(
3840                   p_trans_rec               => p_trans_rec,
3841                   p_asset_hdr_rec           => l_asset_hdr_rec,
3842                   p_period_rec              => l_period_rec,
3843                   p_date_placed_in_service  => l_member_dpis,
3844                   p_group_asset_id          => p_asset_hdr_rec.asset_id,
3845                   p_reclass_multiplier      => l_multiplier,
3846                   p_reclass_src_dest        => p_reclass_src_dest,
3847                   p_salvage_limit_type      => l_salvage_limit_type,
3848                   x_td_period_counter       => td_period_counter,
3849                   x_td_cost                 => td_cost,
3850                   x_td_cip_cost             => td_cip_cost,
3851                   x_td_salvage_value        => td_salvage_value,
3852                   x_td_deprn_limit_amount   => td_deprn_limit_amount,
3853                   x_asset_fin_rec           => l_m_asset_fin_rec_adj,
3854                   x_asset_fin_rec_reclass   => l_asset_fin_rec_reclass,
3855                   p_mrc_sob_type_code       => p_mrc_sob_type_code,
3856                   p_log_level_rec           => p_log_level_rec) then
3857 
3858          if (p_log_level_rec.statement_level) then
3859             fa_debug_pkg.add(l_calling_fn, 'Error calling', 'buildMemberTable', p_log_level_rec => p_log_level_rec);
3860          end if;
3861 
3862          raise calc_failed;
3863       end if;
3864 
3865       if (p_log_level_rec.statement_level) then
3866          fa_debug_pkg.add(l_calling_fn, '# of rows in delta talbe', td_cost.COUNT, p_log_level_rec => p_log_level_rec);
3867       end if;
3868 
3869    else
3870       if (p_log_level_rec.statement_level) then
3871          fa_debug_pkg.add(l_calling_fn, 'Group Transaction', p_trans_rec.transaction_key, p_log_level_rec => p_log_level_rec);
3872       end if;
3873    end if; -- (l_mem_trx)
3874 
3875    -- NOTE:
3876    -- if reclass NOT from DPIS
3877    -- then create one record to find cost, sal, etc... as of the date.
3878    -- for rest of period, apply delta directly.
3879    -- This means that if reclass from dpis, apply delta directly.
3880    -- if it is from current, use member's latest info.
3881    -- if it is from between dpis and current, then build first row
3882    -- and apply it and then apply rest of records.
3883 
3884    -- HHIRAGA
3885    -- In case this is DESTINATION, group_asset_id in FA_BOOKS_SUMMARY must be updated before starting to
3886    -- processing
3887 
3888    if (p_reclass_src_dest = 'DESTINATION') and
3889       nvl(px_asset_fin_rec_new.tracking_method,'NULL') = 'ALLOCATE' then
3890 
3891       -- Bug 6903588: Initialize global variables
3892       -- similar to what is done in the case of 'SOURCE' below
3893       if (nvl(p_reclassed_asset_id, 0) <> nvl(g_mem_asset_id, 0)) then
3894          g_mem_ytd_deprn := 0;
3895          g_mem_deprn_reserve := 0;
3896          g_mem_bonus_ytd_deprn := 0;
3897          g_mem_bonus_deprn_reserve := 0;
3898          g_mem_ytd_impairment := 0;
3899          g_mem_impairment_reserve := 0;
3900          g_mem_eofy_reserve := 0;
3901       end if;
3902 
3903       begin
3904 
3905         l_mem_period_counter := l_trx_period_rec.period_counter - 1;
3906 
3907         if (p_log_level_rec.statement_level) then
3908             fa_debug_pkg.add(l_calling_fn, 'Insert new row for proceessing','Start', p_log_level_rec => p_log_level_rec);
3909             fa_debug_pkg.add(l_calling_fn, 'Insert row',
3910                       l_asset_hdr_rec.book_type_code||':'||p_reclassed_asset_id||':'||p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
3914                       g_mem_bonus_ytd_deprn||':'||g_mem_bonus_deprn_reserve||':'||g_mem_eofy_reserve, p_log_level_rec => p_log_level_rec);
3911             fa_debug_pkg.add(l_calling_fn, 'Insert row',
3912                       l_mem_period_counter||':'||g_mem_ytd_deprn||':'||g_mem_deprn_reserve, p_log_level_rec => p_log_level_rec);
3913             fa_debug_pkg.add(l_calling_fn, 'Insert row',
3915         end if;
3916 
3917         -- Query YTD and Reserve from FA_DEPRN_SUMMARY for addition
3918         if p_mrc_sob_type_Code <> 'R' then
3919 
3920            update fa_books_summary
3921            set group_Asset_id = p_asset_hdr_rec.asset_id
3922            where asset_id=p_reclassed_asset_id
3923            and period_counter >= l_trx_period_rec.period_counter;
3924 
3925            open c_get_ytd_deprn;
3926            fetch c_get_ytd_deprn into l_mem_ytd_deprn_addition,l_mem_deprn_reserve_addition;
3927            close c_get_ytd_deprn;
3928 
3929            if nvl(g_mem_ytd_deprn,0) = 0 and l_mem_ytd_deprn_addition is not null then
3930               g_mem_ytd_deprn := nvl(l_mem_ytd_deprn_addition,0);
3931            end if;
3932 
3933            if nvl(g_mem_deprn_reserve,0) = 0 and l_mem_deprn_reserve_addition is not null then
3934               g_mem_deprn_reserve := nvl(l_mem_deprn_reserve_addition,0);
3935               g_mem_eofy_reserve := g_mem_deprn_reserve - g_mem_ytd_deprn;
3936            end if;
3937 
3938            insert into fa_books_summary(book_type_code,
3939                                         asset_id,
3940                                         group_asset_id,
3941                                         period_counter,
3942                                         cost,
3943                                         salvage_value,
3944                                         recoverable_cost,
3945                                         adjusted_cost,
3946                                         adjusted_recoverable_cost,
3947                                         deprn_amount,
3948                                         ytd_deprn,
3949                                         deprn_reserve,
3950                                         bonus_ytd_deprn,
3951                                         bonus_deprn_reserve,
3952                                         ytd_impairment,
3953                                         impairment_reserve,
3954                                         eofy_reserve,
3955                                         creation_date,
3956                                         created_by,
3957                                         last_update_date,
3958                                         last_updated_by)
3959             values (l_asset_hdr_rec.book_type_code,
3960                     p_reclassed_asset_id,
3961                     p_asset_hdr_rec.asset_id,
3962                     l_mem_period_counter,
3963                     0,0,0,0,0,0,
3964                     nvl(g_mem_ytd_deprn,0),
3965                     nvl(g_mem_deprn_reserve,0),
3966                     nvl(g_mem_bonus_ytd_deprn,0),
3967                     nvl(g_mem_bonus_deprn_reserve,0),
3968                     nvl(g_mem_ytd_impairment,0),
3969                     nvl(g_mem_impairment_reserve,0),
3970                     nvl(g_mem_eofy_reserve,0),
3971                     p_trans_rec.who_info.creation_date,
3972                     p_trans_rec.who_info.created_by,
3973                     p_trans_rec.who_info.last_update_date,
3974                     p_trans_rec.who_info.last_updated_by);
3975         else -- Reporting
3976 
3977            update fa_mc_books_summary
3978            set group_Asset_id = p_asset_hdr_rec.asset_id
3979            where asset_id=p_reclassed_asset_id
3980            and period_counter >= l_trx_period_rec.period_counter
3981            and set_of_books_id = p_asset_hdr_rec.set_of_books_id;
3982 
3983            open c_get_ytd_deprn_mrc;
3984            fetch c_get_ytd_deprn_mrc into l_mem_ytd_deprn_addition,l_mem_deprn_reserve_addition;
3985            close c_get_ytd_deprn_mrc;
3986 
3987            if nvl(g_mem_ytd_deprn,0) = 0 and l_mem_ytd_deprn_addition is not null then
3988               g_mem_ytd_deprn := nvl(l_mem_ytd_deprn_addition,0);
3989            end if;
3990 
3991            if nvl(g_mem_deprn_reserve,0) = 0 and l_mem_deprn_reserve_addition is not null then
3992               g_mem_deprn_reserve := nvl(l_mem_deprn_reserve_addition,0);
3993               g_mem_eofy_reserve := g_mem_deprn_reserve - g_mem_ytd_deprn;
3994            end if;
3995 
3996            insert into fa_mc_books_summary(set_of_books_id,
3997                                               book_type_code,
3998                                               asset_id,
3999                                               group_asset_id,
4000                                               period_counter,
4001                                               cost,
4002                                               salvage_value,
4003                                               recoverable_cost,
4004                                               adjusted_cost,
4005                                               adjusted_recoverable_cost,
4006                                               deprn_amount,
4007                                               ytd_deprn,
4008                                               deprn_reserve,
4009                                               bonus_ytd_deprn,
4010                                               bonus_deprn_reserve,
4011                                               ytd_impairment,
4012                                               impairment_reserve,
4013                                               eofy_reserve,
4014                                               creation_date,
4015                                               created_by,
4016                                               last_update_date,
4017                                               last_updated_by)
4018            values (l_asset_hdr_rec.set_of_books_id,
4019                    l_asset_hdr_rec.book_type_code,
4023                    0,0,0,0,0,0,
4020                    p_reclassed_asset_id,
4021                    p_asset_hdr_rec.asset_id,
4022                    l_mem_period_counter,
4024                    nvl(g_mem_ytd_deprn,0),
4025                    nvl(g_mem_deprn_reserve,0),
4026                    nvl(g_mem_bonus_ytd_deprn,0),
4027                    nvl(g_mem_bonus_deprn_reserve,0),
4028                    nvl(g_mem_ytd_impairment,0),
4029                    nvl(g_mem_impairment_reserve,0),
4030                    nvl(g_mem_eofy_reserve,0),
4031                    p_trans_rec.who_info.creation_date,
4032                    p_trans_rec.who_info.created_by,
4033                    p_trans_rec.who_info.last_update_date,
4034                    p_trans_rec.who_info.last_updated_by);
4035 
4036         end if;
4037 
4038         if (p_log_level_rec.statement_level) then
4039            fa_debug_pkg.add(l_calling_fn, 'Inserted rows','Without Error', p_log_level_rec => p_log_level_rec);
4040         end if;
4041 
4042       exception
4043          when others then
4044           if (p_log_level_rec.statement_level) then
4045             fa_debug_pkg.add(l_calling_fn, 'Insert new row for proceessing','Error', p_log_level_rec => p_log_level_rec);
4046           end if;
4047            null;
4048       end;
4049    end if;
4050 
4051    if (p_reclass_src_dest = 'SOURCE') then
4052 
4053      --+ HHIRAGA added on Oct/Nov in 2003
4054      --
4055      -- If this processing is for Group Asset whose tracking method is
4056      -- setup and user specified reclassification date (amort date) is
4057      -- in the current open period, system don't need to recalculate from
4058      -- DPIS of the member asset to reclassify but jut get stored reserve,
4059      -- YTD Depreciation and EOFY Reserve from table using populate_member_reserve function
4060      -- defined in FA_TRACK_MEMBER_PVT.
4061      --
4062      -- Initialize global variables
4063      g_mem_asset_id  := nvl(p_reclassed_asset_id, 0);
4064      g_mem_ytd_deprn := 0;
4065      g_mem_deprn_reserve := 0;
4066      g_mem_bonus_ytd_deprn := 0;
4067      g_mem_bonus_deprn_reserve := 0;
4068      g_mem_ytd_impairment := 0;
4069      g_mem_impairment_reserve := 0;
4070      g_mem_eofy_reserve := 0;
4071 
4072      -- Query current open period counter
4073      if p_mrc_sob_type_code <> 'R' then
4074          open c_get_current_period;
4075          fetch c_get_current_period into l_current_period_counter;
4076          close c_get_current_period;
4077 
4078         if nvl(px_asset_fin_rec_new.tracking_method,'NULL') = 'ALLOCATE' then
4079           if (p_log_level_rec.statement_level) then
4080             fa_debug_pkg.add(l_calling_fn, 'l_trx_period_rec.period_counter', l_trx_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
4081             fa_debug_pkg.add(l_calling_fn, 'p_Asset_hdr_rec.book_type_code', p_Asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
4082             fa_debug_pkg.add(l_calling_fn, 'p_reclassed_asset_id', p_reclassed_asset_id, p_log_level_rec => p_log_level_rec);
4083             fa_debug_pkg.add(l_calling_fn, 'p_asset_hdr_rec.asset_id', p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
4084           end if;
4085            open c_get_mem_bs_row;
4086            fetch c_get_mem_bs_row into g_mem_ytd_deprn,g_mem_deprn_reserve,
4087                                             g_mem_bonus_ytd_deprn,g_mem_bonus_deprn_reserve,g_mem_eofy_reserve,
4088                                        g_mem_ytd_impairment,g_mem_impairment_reserve;
4089 
4090                 close c_get_mem_bs_row;
4091            /*Bug 8765735 and 8814747 - Start*/
4092            if (fa_cache_pkg.fazcdbr_record.rule_name = 'ENERGY PERIOD END BALANCE') then
4093            l_dpr.asset_id   := p_reclassed_asset_id;
4094            l_dpr.book       := p_asset_hdr_rec.book_type_code;
4095            l_dpr.period_ctr := l_trx_period_rec.period_counter;
4096            l_dpr.dist_id    := 0;
4097            l_dpr.mrc_sob_type_code := p_mrc_sob_type_code;
4098 
4099            l_run_mode := 'STANDARD';
4100 
4101            fa_query_balances_pkg.query_balances_int(
4102                                       X_DPR_ROW               => l_dpr,
4103                                       X_RUN_MODE              => l_run_mode,
4104                                       X_DEBUG                 => FALSE,
4105                                       X_SUCCESS               => l_status,
4106                                       X_CALLING_FN            => l_calling_fn,
4107                                       X_TRANSACTION_HEADER_ID => -1
4108                                       ,p_log_level_rec => p_log_level_rec);
4109            g_mem_ytd_deprn := l_dpr.ytd_deprn;
4110            g_mem_deprn_reserve := l_dpr.deprn_rsv;
4111            g_mem_bonus_ytd_deprn := l_dpr.bonus_ytd_deprn;
4112            g_mem_bonus_deprn_reserve := l_dpr.bonus_deprn_rsv;
4113            end if;
4114            /*Bug 8765735 and 8814747- End*/
4115         end if;
4116      else
4117          open c_get_current_period_mrc;
4118          fetch c_get_current_period_mrc into l_current_period_counter;
4119          close c_get_current_period_mrc;
4120 
4121         if nvl(px_asset_fin_rec_new.tracking_method,'NULL') = 'ALLOCATE' then
4122           if (p_log_level_rec.statement_level) then
4123             fa_debug_pkg.add(l_calling_fn, 'l_trx_period_rec.period_counter', l_trx_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
4124             fa_debug_pkg.add(l_calling_fn, 'p_Asset_hdr_rec.book_type_code', p_Asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
4125             fa_debug_pkg.add(l_calling_fn, 'p_reclassed_asset_id', p_reclassed_asset_id, p_log_level_rec => p_log_level_rec);
4129            fetch c_get_mem_bs_row_mrc into g_mem_ytd_deprn,g_mem_deprn_reserve,
4126             fa_debug_pkg.add(l_calling_fn, 'p_asset_hdr_rec.asset_id', p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
4127           end if;
4128            open c_get_mem_bs_row_mrc;
4130                                                 g_mem_bonus_ytd_deprn,g_mem_bonus_deprn_reserve,g_mem_eofy_reserve,
4131                                            g_mem_ytd_impairment,g_mem_impairment_reserve;
4132 
4133            close c_get_mem_bs_row_mrc;
4134            /*Bug 8765735 and 8814747 - Start*/
4135            if (fa_cache_pkg.fazcdbr_record.rule_name = 'ENERGY PERIOD END BALANCE') then
4136            l_dpr.asset_id   := p_reclassed_asset_id;
4137            l_dpr.book       := p_asset_hdr_rec.book_type_code;
4138            l_dpr.period_ctr := l_trx_period_rec.period_counter;
4139            l_dpr.dist_id    := 0;
4140            l_dpr.mrc_sob_type_code := p_mrc_sob_type_code;
4141            l_dpr.set_of_books_id := p_asset_hdr_rec.set_of_books_id; /*9090184 */
4142 
4143                 l_run_mode := 'STANDARD';
4144 
4145                 fa_query_balances_pkg.query_balances_int(
4146                                       X_DPR_ROW               => l_dpr,
4147                                       X_RUN_MODE              => l_run_mode,
4148                                       X_DEBUG                 => FALSE,
4149                                       X_SUCCESS               => l_status,
4150                                       X_CALLING_FN            => l_calling_fn,
4151                                       X_TRANSACTION_HEADER_ID => -1
4152                                       ,p_log_level_rec => p_log_level_rec);
4153            g_mem_ytd_deprn := l_dpr.ytd_deprn;
4154            g_mem_deprn_reserve := l_dpr.deprn_rsv;
4155            g_mem_bonus_ytd_deprn := l_dpr.bonus_ytd_deprn;
4156            g_mem_bonus_deprn_reserve := l_dpr.bonus_deprn_rsv;
4157            end if;
4158            /*Bug 8765735 and 8814747- End*/
4159         end if;
4160      end if;
4161 
4162      if nvl(px_asset_fin_rec_new.tracking_method,'NULL') = 'CALCULATE' and
4163         l_trx_period_rec.period_counter = l_current_period_counter then
4164 
4165         -- Call populate_member_reserve
4166         if not FA_TRACK_MEMBER_PVT.populate_member_reserve
4167                               (p_trans_rec => p_trans_rec,
4168                                p_asset_hdr_rec => p_asset_hdr_rec,
4169                                p_asset_fin_rec_new => px_asset_fin_rec_new,
4170                                p_mrc_sob_type_code => p_mrc_sob_type_code,
4171                                x_deprn_reserve => l_mem_deprn_reserve,
4172                                x_eofy_reserve => l_mem_eofy_reserve, p_log_level_rec => p_log_level_rec) then
4173           if (p_log_level_rec.statement_level) then
4174             fa_debug_pkg.add(l_calling_fn, 'Error calling', 'populate_member_reserve', p_log_level_rec => p_log_level_rec);
4175           end if;
4176 
4177           raise calc_failed;
4178         end if;
4179 
4180         if (p_log_level_rec.statement_level) then
4181           fa_debug_pkg.add(l_calling_fn, '++ This is after POPULATE_MEMBER_RESERVE ++', '+++++', p_log_level_rec => p_log_level_rec);
4182           fa_debug_pkg.add(l_calling_fn, 'x_deprn_reserve', l_mem_deprn_reserve, p_log_level_rec => p_log_level_rec);
4183           fa_debug_pkg.add(l_calling_fn, 'x_eofy_reserve', l_mem_eofy_reserve, p_log_level_rec => p_log_level_rec);
4184         end if;
4185 
4186         --
4187         -- Get period information of the period from member dpis
4188         --
4189         if not GetPeriodInfo(to_number(to_char(l_transaction_date_entered, 'J')),
4190                              p_asset_hdr_rec.book_type_code,
4191                              p_mrc_sob_type_code,
4192                              p_asset_hdr_rec.set_of_books_id,
4193                              l_period_rec,
4194                              p_log_level_rec) then
4195 
4196           if (p_log_level_rec.statement_level) then
4197             fa_debug_pkg.add(l_calling_fn, 'Error calling', 'GetPeriodInfo', p_log_level_rec => p_log_level_rec);
4198           end if;
4199 
4200           raise calc_failed;
4201 
4202         end if;
4203 
4204       elsif nvl(px_asset_fin_rec_new.tracking_method,'NULL') = 'ALLOCATE' and
4205             g_mem_deprn_reserve is not null then
4206 
4207             l_mem_deprn_reserve := g_mem_deprn_reserve;
4208             l_mem_eofy_reserve := nvl(g_mem_eofy_reserve,0);
4209 
4210             l_mem_loop_first := TRUE;
4211 
4212             If (p_log_level_rec.statement_level) then
4213               fa_debug_pkg.add(l_calling_fn, '++ This is a case for ALLOCATE and reclass in source group ++', '+++++', p_log_level_rec => p_log_level_rec);
4214               fa_debug_pkg.add(l_calling_fn, 'x_deprn_reserve', g_mem_deprn_reserve, p_log_level_rec => p_log_level_rec);
4215               fa_debug_pkg.add(l_calling_fn, 'x_eofy_reserve', g_mem_eofy_reserve, p_log_level_rec => p_log_level_rec);
4216             end if;
4217             /*115.211.211 branch to mainline porting - strats*/
4218             if (fa_cache_pkg.fazcdbr_record.rule_name <> 'ENERGY PERIOD END BALANCE') then
4219                if not GetPeriodInfo(to_number(to_char(p_reclassed_asset_dpis, 'J')),
4220                                     p_asset_hdr_rec.book_type_code,
4221                                     p_mrc_sob_type_code,
4222                                     p_asset_hdr_rec.set_of_books_id,
4223                                     l_period_rec,
4224                                     p_log_level_rec) then
4225 
4226                   if (p_log_level_rec.statement_level) then
4227                      fa_debug_pkg.add(l_calling_fn, 'Error calling', 'GetPeriodInfo', p_log_level_rec => p_log_level_rec);
4228                   end if;
4229 
4230                   raise calc_failed;
4231 
4232                end if;
4233 
4234                l_transaction_date_entered := p_reclassed_asset_dpis;
4238 
4235             end if;
4236             /*115.211.211 branch to mainline porting - ends*/
4237 
4239       else -- Tracking is not used or period is not current period
4240 
4241       -- If this reclass is for source, group's books summary needs
4242       -- to be adjusted previously added period.
4243       -- If this is first time reclass out, it needs to be adjusted
4244       -- from dpis of the member asset.  If not, period which this member
4245       -- became member needs to be addjusted until now.
4246       -- In here, the date needs to be determined.
4247       -- If this is for dest, trx date is the date that this member
4248       -- becomes the dest group's member.
4249       --
4250       -- Get period information of the period from member dpis
4251       --
4252       if not GetPeriodInfo(to_number(to_char(p_reclassed_asset_dpis, 'J')),
4253                            p_asset_hdr_rec.book_type_code,
4254                            p_mrc_sob_type_code,
4255                            p_asset_hdr_rec.set_of_books_id,
4256                            l_period_rec,
4257                            p_log_level_rec) then
4258 
4259          if (p_log_level_rec.statement_level) then
4260             fa_debug_pkg.add(l_calling_fn, 'Error calling', 'GetPeriodInfo', p_log_level_rec => p_log_level_rec);
4261          end if;
4262 
4263          raise calc_failed;
4264 
4265       end if;
4266 
4267       l_transaction_date_entered := p_reclassed_asset_dpis;
4268 
4269      end if; -- HHIRAGA if-statement
4270 
4271    end if;
4272 
4273 /*****************
4274    This part of code will be removed by adding new column change_in_eofy_reserve
4275  *****************
4276    --
4277    -- Setting period counter which is used to determine from which period
4278    -- is fa_books_summary records needed to be updated.
4279    -- If there is eofy_reserve in fin_rec_adj, need to get record from
4280    -- previous eofy record to reflect the amount and recalculate.
4281    --
4282 --tk_util.debug('p_asset_fin_rec_adj.eofy_reserve: '||to_char(p_asset_fin_rec_adj.eofy_reserve));
4283 
4284    if (nvl(p_asset_fin_rec_adj.eofy_reserve, 0) <> 0) then
4285       --
4286       -- In case of trx w/ some eofy_reserve
4287       --   Update reserve_adjustment_amount by adj.eofy_reserve and reserve of the last eofy record,
4288       --   Update current fiscal years records' eofy_reserve
4289       --   Update current period's reserve_adjustment_amount with adj.reserve - adj.eofy_reserve
4290       -- This is why it needs to get extra periods(records before amortization start date) records
4291 
4292       l_period_counter := (l_period_rec.period_counter - l_period_rec.period_num);
4293    else
4294       l_period_counter := l_period_rec.period_counter - 1;
4295    end if; -- (p_asset_fin_rec_adj.eofy_reserve is not null)
4296 */
4297 
4298    l_period_counter := l_period_rec.period_counter - 1;
4299 
4300    if (p_log_level_rec.statement_level) then
4301       fa_debug_pkg.add(l_calling_fn, 'Starting Period',
4302                        l_period_counter, p_log_level_rec => p_log_level_rec);
4303    end if;
4304 
4305    if (p_mrc_sob_type_code = 'R') then
4306 
4307       OPEN c_get_mc_books_summary (l_period_counter);
4308       FETCH c_get_mc_books_summary BULK COLLECT INTO
4309                fa_amort_pvt.t_period_counter
4310              , fa_amort_pvt.t_fiscal_year
4311              , fa_amort_pvt.t_period_num
4312              , fa_amort_pvt.t_calendar_period_open_date
4313              , fa_amort_pvt.t_calendar_period_close_date
4314              , fa_amort_pvt.t_reset_adjusted_cost_flag
4315              , fa_amort_pvt.t_change_in_cost
4316              , fa_amort_pvt.t_change_in_cip_cost
4317              , fa_amort_pvt.t_cost
4318              , fa_amort_pvt.t_cip_cost
4319              , fa_amort_pvt.t_salvage_type
4320              , fa_amort_pvt.t_percent_salvage_value
4321              , fa_amort_pvt.t_salvage_value
4322              , fa_amort_pvt.t_member_salvage_value
4323              , fa_amort_pvt.t_recoverable_cost
4324              , fa_amort_pvt.t_deprn_limit_type
4325              , fa_amort_pvt.t_allowed_deprn_limit
4326              , fa_amort_pvt.t_allowed_deprn_limit_amount
4327              , fa_amort_pvt.t_member_deprn_limit_amount
4328              , fa_amort_pvt.t_adjusted_recoverable_cost
4329              , fa_amort_pvt.t_adjusted_cost
4330              , fa_amort_pvt.t_depreciate_flag
4331              , fa_amort_pvt.t_date_placed_in_service
4332              , fa_amort_pvt.t_deprn_method_code
4333              , fa_amort_pvt.t_life_in_months
4334              , fa_amort_pvt.t_rate_adjustment_factor
4335              , fa_amort_pvt.t_adjusted_rate
4336              , fa_amort_pvt.t_bonus_rule
4337              , fa_amort_pvt.t_adjusted_capacity
4338              , fa_amort_pvt.t_production_capacity
4339              , fa_amort_pvt.t_unit_of_measure
4340              , fa_amort_pvt.t_remaining_life1
4341              , fa_amort_pvt.t_remaining_life2
4342              , fa_amort_pvt.t_formula_factor
4343              , fa_amort_pvt.t_unrevalued_cost
4344              , fa_amort_pvt.t_reval_amortization_basis
4345              , fa_amort_pvt.t_reval_ceiling
4346              , fa_amort_pvt.t_ceiling_name
4347              , fa_amort_pvt.t_eofy_adj_cost
4348              , fa_amort_pvt.t_eofy_formula_factor
4349              , fa_amort_pvt.t_eofy_reserve
4350              , fa_amort_pvt.t_eop_adj_cost
4351              , fa_amort_pvt.t_eop_formula_factor
4352              , fa_amort_pvt.t_short_fiscal_year_flag
4353              , fa_amort_pvt.t_group_asset_id
4354              , fa_amort_pvt.t_super_group_id
4355              , fa_amort_pvt.t_over_depreciate_option
4356              , fa_amort_pvt.t_deprn_amount
4357              , fa_amort_pvt.t_ytd_deprn
4358              , fa_amort_pvt.t_deprn_reserve
4359              , fa_amort_pvt.t_bonus_deprn_amount
4363              , fa_amort_pvt.t_impairment_amount
4360              , fa_amort_pvt.t_bonus_ytd_deprn
4361              , fa_amort_pvt.t_bonus_deprn_reserve
4362              , fa_amort_pvt.t_bonus_rate
4364              , fa_amort_pvt.t_ytd_impairment
4365              , fa_amort_pvt.t_impairment_reserve
4366              , fa_amort_pvt.t_ltd_production
4367              , fa_amort_pvt.t_ytd_production
4368              , fa_amort_pvt.t_production
4369              , fa_amort_pvt.t_reval_amortization
4370              , fa_amort_pvt.t_reval_deprn_expense
4371              , fa_amort_pvt.t_reval_reserve
4372              , fa_amort_pvt.t_ytd_reval_deprn_expense
4373              , fa_amort_pvt.t_deprn_override_flag
4374              , fa_amort_pvt.t_system_deprn_amount
4375              , fa_amort_pvt.t_system_bonus_deprn_amount
4376              , fa_amort_pvt.t_ytd_proceeds_of_sale
4377              , fa_amort_pvt.t_ltd_proceeds_of_sale
4378              , fa_amort_pvt.t_ytd_cost_of_removal
4379              , fa_amort_pvt.t_ltd_cost_of_removal
4380              , fa_amort_pvt.t_deprn_adjustment_amount
4381              , fa_amort_pvt.t_expense_adjustment_amount
4382              , fa_amort_pvt.t_reserve_adjustment_amount
4383              , fa_amort_pvt.t_change_in_eofy_reserve
4384              , fa_amort_pvt.t_impairment_amount
4385              , fa_amort_pvt.t_ytd_impairment
4386              , fa_amort_pvt.t_impairment_reserve
4387              ;
4388 
4389       CLOSE c_get_mc_books_summary;
4390 
4391    else
4392 
4393       OPEN c_get_books_summary (l_period_counter);
4394       FETCH c_get_books_summary BULK COLLECT INTO
4395                fa_amort_pvt.t_period_counter
4396              , fa_amort_pvt.t_fiscal_year
4397              , fa_amort_pvt.t_period_num
4398              , fa_amort_pvt.t_calendar_period_open_date
4399              , fa_amort_pvt.t_calendar_period_close_date
4400              , fa_amort_pvt.t_reset_adjusted_cost_flag
4401              , fa_amort_pvt.t_change_in_cost
4402              , fa_amort_pvt.t_change_in_cip_cost
4403              , fa_amort_pvt.t_cost
4404              , fa_amort_pvt.t_cip_cost
4408              , fa_amort_pvt.t_member_salvage_value
4405              , fa_amort_pvt.t_salvage_type
4406              , fa_amort_pvt.t_percent_salvage_value
4407              , fa_amort_pvt.t_salvage_value
4409              , fa_amort_pvt.t_recoverable_cost
4410              , fa_amort_pvt.t_deprn_limit_type
4411              , fa_amort_pvt.t_allowed_deprn_limit
4412              , fa_amort_pvt.t_allowed_deprn_limit_amount
4413              , fa_amort_pvt.t_member_deprn_limit_amount
4414              , fa_amort_pvt.t_adjusted_recoverable_cost
4415              , fa_amort_pvt.t_adjusted_cost
4416              , fa_amort_pvt.t_depreciate_flag
4417              , fa_amort_pvt.t_date_placed_in_service
4418              , fa_amort_pvt.t_deprn_method_code
4419              , fa_amort_pvt.t_life_in_months
4420              , fa_amort_pvt.t_rate_adjustment_factor
4421              , fa_amort_pvt.t_adjusted_rate
4422              , fa_amort_pvt.t_bonus_rule
4423              , fa_amort_pvt.t_adjusted_capacity
4424              , fa_amort_pvt.t_production_capacity
4425              , fa_amort_pvt.t_unit_of_measure
4426              , fa_amort_pvt.t_remaining_life1
4427              , fa_amort_pvt.t_remaining_life2
4428              , fa_amort_pvt.t_formula_factor
4429              , fa_amort_pvt.t_unrevalued_cost
4430              , fa_amort_pvt.t_reval_amortization_basis
4431              , fa_amort_pvt.t_reval_ceiling
4432              , fa_amort_pvt.t_ceiling_name
4433              , fa_amort_pvt.t_eofy_adj_cost
4434              , fa_amort_pvt.t_eofy_formula_factor
4435              , fa_amort_pvt.t_eofy_reserve
4436              , fa_amort_pvt.t_eop_adj_cost
4437              , fa_amort_pvt.t_eop_formula_factor
4438              , fa_amort_pvt.t_short_fiscal_year_flag
4439              , fa_amort_pvt.t_group_asset_id
4440              , fa_amort_pvt.t_super_group_id
4441              , fa_amort_pvt.t_over_depreciate_option
4442              , fa_amort_pvt.t_deprn_amount
4443              , fa_amort_pvt.t_ytd_deprn
4444              , fa_amort_pvt.t_deprn_reserve
4445              , fa_amort_pvt.t_bonus_deprn_amount
4446              , fa_amort_pvt.t_bonus_ytd_deprn
4447              , fa_amort_pvt.t_bonus_deprn_reserve
4448              , fa_amort_pvt.t_bonus_rate
4449              , fa_amort_pvt.t_impairment_amount
4450              , fa_amort_pvt.t_ytd_impairment
4451              , fa_amort_pvt.t_impairment_reserve
4452              , fa_amort_pvt.t_ltd_production
4453              , fa_amort_pvt.t_ytd_production
4454              , fa_amort_pvt.t_production
4455              , fa_amort_pvt.t_reval_amortization
4456              , fa_amort_pvt.t_reval_deprn_expense
4457              , fa_amort_pvt.t_reval_reserve
4458              , fa_amort_pvt.t_ytd_reval_deprn_expense
4462              , fa_amort_pvt.t_ytd_proceeds_of_sale
4459              , fa_amort_pvt.t_deprn_override_flag
4460              , fa_amort_pvt.t_system_deprn_amount
4461              , fa_amort_pvt.t_system_bonus_deprn_amount
4463              , fa_amort_pvt.t_ltd_proceeds_of_sale
4464              , fa_amort_pvt.t_ytd_cost_of_removal
4465              , fa_amort_pvt.t_ltd_cost_of_removal
4466              , fa_amort_pvt.t_deprn_adjustment_amount
4467              , fa_amort_pvt.t_expense_adjustment_amount
4468              , fa_amort_pvt.t_reserve_adjustment_amount
4469              , fa_amort_pvt.t_change_in_eofy_reserve
4470              , fa_amort_pvt.t_impairment_amount
4471              , fa_amort_pvt.t_ytd_impairment
4472              , fa_amort_pvt.t_impairment_reserve
4473              ;
4474 
4475       CLOSE c_get_books_summary;
4476 
4477    end if;
4478 
4479 --tk_util.debug('period# :      cost:   adjcost:       exp:      eofy:     rsvaj:       rsv:      dlmt:      arec');
4480 /*
4481 for i in fa_amort_pvt.t_cost.FIRST..fa_amort_pvt.t_cost.LAST loop
4482 --tk_util.debug(rpad(to_char(fa_amort_pvt.t_period_counter(i)), 8, ' ')||':'||
4483               lpad(to_char(fa_amort_pvt.t_cost(i)), 10, ' ')||':'||
4484               lpad(to_char(fa_amort_pvt.t_adjusted_cost(i)), 10, ' ')||':'||
4485               lpad(to_char(fa_amort_pvt.t_deprn_amount(i)), 10, ' ')||':'||
4486               lpad(to_char(fa_amort_pvt.t_eofy_reserve(i)), 10, ' ')||':'||
4487               lpad(to_char(fa_amort_pvt.t_reserve_adjustment_amount(i)), 10, ' ')||':'||
4488               lpad(to_char(fa_amort_pvt.t_deprn_reserve(i)), 10, ' ')||':'||
4489               lpad(nvl(to_char(fa_amort_pvt.t_allowed_deprn_limit_amount(i)), 'null'), 5, ' ')||':'||
4490               lpad(to_char(fa_amort_pvt.t_adjusted_recoverable_cost(i)), 10, ' ')
4491              );
4492 end loop;
4493 */
4494    l_count := fa_amort_pvt.t_period_counter.COUNT;
4495 
4496    if (p_log_level_rec.statement_level) then
4497       fa_debug_pkg.add(l_calling_fn, 'Number of period fetched', l_count, p_log_level_rec => p_log_level_rec);
4498    end if;
4499 
4500    if (l_count = 1) then
4501       --
4502       -- Get eofy information from fa_books_summary_table
4503       --
4504       if (p_mrc_sob_type_code = 'R') then
4505          OPEN c_get_mc_eofy_amts(fa_amort_pvt.t_period_counter(1) - fa_amort_pvt.t_period_num(1));
4506          FETCH c_get_mc_eofy_amts INTO l_eofy_rec_cost
4507                                   , l_eofy_sal_val
4508                                   , l_eofy_reserve;
4509          if c_get_mc_eofy_amts%NOTFOUND then
4510             CLOSE c_get_mc_eofy_amts;
4511             l_eofy_rec_cost := 0;
4512             l_eofy_sal_val := 0;
4513             l_eofy_reserve := 0;
4514          else
4515             CLOSE c_get_mc_eofy_amts;
4516          end if;
4517       else
4518          OPEN c_get_eofy_amts(fa_amort_pvt.t_period_counter(1) - fa_amort_pvt.t_period_num(1));
4519          FETCH c_get_eofy_amts INTO l_eofy_rec_cost
4520                                   , l_eofy_sal_val
4521                                   , l_eofy_reserve;
4522          if c_get_eofy_amts%NOTFOUND then
4523             CLOSE c_get_eofy_amts;
4524             l_eofy_rec_cost := 0;
4525             l_eofy_sal_val := 0;
4526             l_eofy_reserve := 0;
4527          else
4528             CLOSE c_get_eofy_amts;
4529          end if;
4530       end if;
4531 
4532    else
4533       --
4534       -- Get eofy information from fa_books_summary_table
4535       --
4536       if (p_mrc_sob_type_code = 'R') then
4537          OPEN c_get_mc_eofy_amts(fa_amort_pvt.t_period_counter(2) - fa_amort_pvt.t_period_num(2));
4538          FETCH c_get_mc_eofy_amts INTO l_eofy_rec_cost
4539                                   , l_eofy_sal_val
4540                                   , l_eofy_reserve;
4541          if c_get_mc_eofy_amts%NOTFOUND then
4542             CLOSE c_get_mc_eofy_amts;
4543             l_eofy_rec_cost := 0;
4544             l_eofy_sal_val := 0;
4545             l_eofy_reserve := 0;
4546          else
4547             CLOSE c_get_mc_eofy_amts;
4548          end if;
4549       else
4550          OPEN c_get_eofy_amts(fa_amort_pvt.t_period_counter(2) - fa_amort_pvt.t_period_num(2));
4551          FETCH c_get_eofy_amts INTO l_eofy_rec_cost
4552                                   , l_eofy_sal_val
4553                                   , l_eofy_reserve;
4554          if c_get_eofy_amts%NOTFOUND then
4555             CLOSE c_get_eofy_amts;
4556             l_eofy_rec_cost := 0;
4557             l_eofy_sal_val := 0;
4558             l_eofy_reserve := 0;
4559          else
4560             CLOSE c_get_eofy_amts;
4561          end if;
4562       end if;
4563 
4564    end if; -- (l_count = 1)
4565 
4566       if (p_log_level_rec.statement_level) then
4567          fa_debug_pkg.add(l_calling_fn, 'l_eofy_reserve', l_eofy_reserve, p_log_level_rec => p_log_level_rec);
4568       end if;
4569 
4570 /*** REMOVED
4571    end if;
4572  ***/
4573 
4574    --
4575    -- At this point, l_bs_ind holds indicator for previous period of the period
4576    -- where amortization start date falls in.
4577    --
4578 --tk_util.debug('l_transaction_date_entered: '||to_char(l_transaction_date_entered, 'DD-MON-YYYY'));
4579 --tk_util.debug('close date: '||to_char(fa_amort_pvt.t_calendar_period_close_date(l_bs_ind),  'DD-MON-YYYY'));
4580 --tk_util.debug('count: '||to_char(fa_amort_pvt.t_period_counter.COUNT));
4581 
4582    if (fa_amort_pvt.t_period_counter.COUNT > 1) and
4583       (l_transaction_date_entered >
4584        fa_amort_pvt.t_calendar_period_close_date(l_bs_ind))then
4585       l_bs_ind := l_bs_ind + 1;
4586    end if;
4587 --tk_util.debug('l_bs_ind: '||to_char(l_bs_ind));
4588 
4589    if (p_log_level_rec.statement_level) then
4590       fa_debug_pkg.add(l_calling_fn, 'Populating local fin_rec_old',
4594    l_asset_fin_rec_old.cost := fa_amort_pvt.t_cost(l_bs_ind);
4591                        fa_amort_pvt.t_cost(l_bs_ind));
4592    end if;
4593 
4595    l_asset_fin_rec_old.formula_factor := fa_amort_pvt.t_formula_factor(l_bs_ind);
4596 
4597    l_asset_fin_rec_old.rate_adjustment_factor := fa_amort_pvt.t_rate_adjustment_factor(l_bs_ind);
4598    l_asset_fin_rec_old.adjusted_cost := fa_amort_pvt.t_adjusted_cost(l_bs_ind);
4599    l_asset_fin_rec_old.salvage_value := fa_amort_pvt.t_salvage_value(l_bs_ind);
4600    l_asset_fin_rec_old.recoverable_cost := fa_amort_pvt.t_recoverable_cost(l_bs_ind);
4601 
4602 
4603    l_asset_fin_rec_old.deprn_method_code := fa_amort_pvt.t_deprn_method_code(l_bs_ind);
4604    l_asset_fin_rec_old.life_in_months := fa_amort_pvt.t_life_in_months(l_bs_ind);
4605    l_asset_fin_rec_old.group_asset_id := fa_amort_pvt.t_group_asset_id(l_bs_ind);
4606    l_asset_fin_rec_old.depreciate_flag := fa_amort_pvt.t_depreciate_flag(l_bs_ind);
4607    l_asset_fin_rec_old.recognize_gain_loss := px_asset_fin_rec_new.recognize_gain_loss;
4608    l_asset_fin_rec_old.tracking_method := px_asset_fin_rec_new.tracking_method;
4609 
4610    l_asset_fin_rec_old.allocate_to_fully_rsv_flag := px_asset_fin_rec_new.allocate_to_fully_rsv_flag;
4611    l_asset_fin_rec_old.allocate_to_fully_ret_flag := px_asset_fin_rec_new.allocate_to_fully_ret_flag;
4612    l_asset_fin_rec_old.excess_allocation_option := px_asset_fin_rec_new.excess_allocation_option;
4613    l_asset_fin_rec_old.depreciation_option := px_asset_fin_rec_new.depreciation_option;
4614    l_asset_fin_rec_old.member_rollup_flag := px_asset_fin_rec_new.member_rollup_flag;
4615 
4616    l_asset_fin_rec_new.reduction_rate := px_asset_fin_rec_new.reduction_rate;
4617    l_asset_fin_rec_new.recognize_gain_loss := l_asset_fin_rec_old.recognize_gain_loss;
4618    l_asset_fin_rec_new.tracking_method := l_asset_fin_rec_old.tracking_method;
4619    l_asset_fin_rec_new.allocate_to_fully_rsv_flag := l_asset_fin_rec_old.allocate_to_fully_rsv_flag;
4620    l_asset_fin_rec_new.allocate_to_fully_ret_flag := l_asset_fin_rec_old.allocate_to_fully_ret_flag;
4621    l_asset_fin_rec_new.excess_allocation_option := l_asset_fin_rec_old.excess_allocation_option;
4622    l_asset_fin_rec_new.depreciation_option := l_asset_fin_rec_old.depreciation_option;
4623    l_asset_fin_rec_new.member_rollup_flag := l_asset_fin_rec_old.member_rollup_flag;
4624    --Bug3286560: This will be old adj cost in deprn basis function
4625    l_asset_fin_rec_new.adjusted_cost := fa_amort_pvt.t_adjusted_cost(l_bs_ind);
4626    -- Bug 4700524: first time in loop fin_rec_old.cost needs to be old cost
4627    l_asset_fin_rec_new.cost := fa_amort_pvt.t_cost(l_bs_ind);
4628 
4629    --
4630    -- Setting reset_adjusted_cost_flag
4631    -- If this is source group, it is not always first period of recalculation because
4632    -- pl/sql table always has data from member's dpis
4633    -- Also find value for l_temp_ind and it will be used to update table at the end.
4634    --
4635    if (p_reclass_src_dest = 'SOURCE') then
4636 
4637       l_temp_ind := l_bs_ind + l_trx_period_rec.period_counter - fa_amort_pvt.t_period_counter(l_bs_ind);
4638       fa_amort_pvt.t_reset_adjusted_cost_flag(l_temp_ind) := 'Y';
4639 
4640 --tk_util.debug('l_temp_ind: '||to_char(l_temp_ind));
4641 --tk_util.debug('period counter: '||to_char(fa_amort_pvt.t_period_counter(l_temp_ind)));
4642 
4643       --
4644       -- Store old reserve so that it can be used to determine how much reserve needs to be
4645       -- taken out from srouce group at reclassed period.
4646       --
4647       if (l_temp_ind = 1) then
4648          l_old_reserve := 0;
4649       else
4650          /*Bug# 8548876 -uncommented changes done for 5768759*/
4651          l_old_reserve := fa_amort_pvt.t_deprn_reserve(l_temp_ind - 1);
4652       end if;
4653 
4654    else
4655       l_temp_ind := l_bs_ind;
4656 
4657       if (p_reclass_src_dest is not null) then
4658          fa_amort_pvt.t_reset_adjusted_cost_flag(l_bs_ind) := 'Y';
4659       end if;
4660 
4661 --   else
4662 --      fa_amort_pvt.t_reset_adjusted_cost_flag(l_bs_ind) := 'Y';
4663 --      l_temp_ind := l_bs_ind;
4664    end if;
4665 
4666    if (p_trans_rec.transaction_key = 'MS') then
4667       if (p_mrc_sob_type_code = 'R') then
4668          OPEN c_get_mc_rein_info;
4669          FETCH c_get_mc_rein_info INTO l_proceeds_of_sale
4670                                   , l_cost_of_removal
4671                                   , l_reserve_retired
4672                                   , l_nbv_retired
4673                                   , l_recognize_gain_loss -- Added for bug 8425794 / 8244128
4674                                   , l_recapture_amount;
4675          CLOSE c_get_mc_rein_info;
4676       else
4677          OPEN c_get_rein_info;
4678          FETCH c_get_rein_info INTO l_proceeds_of_sale
4679                                   , l_cost_of_removal
4680                                   , l_reserve_retired
4681                                   , l_nbv_retired
4682                                   , l_recognize_gain_loss -- Added for bug 8425794 / 8244128
4683                                   , l_recapture_amount;
4684          CLOSE c_get_rein_info;
4685       end if;
4686 
4687       if (l_reserve_retired is null) and
4688          (l_recognize_gain_loss = 'NO') then
4689          l_reserve_retired := px_asset_fin_rec_new.cost - p_asset_fin_rec_old.cost;
4690       elsif (l_reserve_retired is null) then -- Added for bug 8425794 / 8244128
4691          l_reserve_retired := 0;
4692       end if;
4693 
4694       --bug6912446
4695       -- Lifting below to calculate reserve retired for all ALLOCATE and DO NOT RECOGNIZE CASE
4696       if (p_asset_fin_rec_old.tracking_method = 'ALLOCATE') and
4697          (l_recognize_gain_loss = 'NO') then
4698          -- l_proceeds_of_sale and l_cost_of_removal has -1 multiplied in cursor c_get_rein_info
4699          -- so that it can be added whether the trx is ret or rein later when maintaining
4700          -- ytd and ltd for books summary table.
4704       if (p_log_level_rec.statement_level) then
4701          l_reserve_retired := p_asset_fin_rec_adj.cost + l_proceeds_of_sale - l_cost_of_removal + nvl(l_recapture_amount,0);
4702       end if;
4703 
4705          fa_debug_pkg.add(l_calling_fn, 'This is Reinstatement', l_reserve_retired, p_log_level_rec => p_log_level_rec);
4706       end if;
4707 
4708    else
4709       l_reserve_retired := 0;
4710    end if;
4711 
4712 
4713    --
4714    -- Need to find out how unplanned expense is passed to here
4715    --
4716    fa_amort_pvt.t_expense_adjustment_amount(l_bs_ind) :=
4717                       fa_amort_pvt.t_expense_adjustment_amount(l_bs_ind) +
4718                       nvl(p_asset_deprn_rec_adj.deprn_amount, 0);
4719 
4720    fa_amort_pvt.t_reserve_adjustment_amount(l_bs_ind) :=
4721                       fa_amort_pvt.t_reserve_adjustment_amount(l_bs_ind) +
4722                       nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) + l_reserve_retired;
4723 --                      nvl(p_asset_deprn_rec_adj.deprn_reserve, 0);
4724 --                      (nvl(p_asset_deprn_rec_adj.deprn_reserve, 0) -
4725 --                       nvl(p_asset_fin_rec_adj.eofy_reserve, 0)) +
4726 
4727 
4728 
4729    fa_amort_pvt.t_change_in_eofy_reserve(l_bs_ind) :=
4730                         nvl(fa_amort_pvt.t_change_in_eofy_reserve(l_bs_ind), 0) +
4731                         nvl(p_asset_fin_rec_adj.eofy_reserve, 0);
4732 
4733 
4734    --Bug7487450: Modified "> 2" with "> 1" as it was not setting correct amount
4735    --            for reserve if there are only two period.
4736    if (p_reclass_src_dest = 'SOURCE') then
4737       if (l_trx_period_rec.period_counter > fa_amort_pvt.t_period_counter(1)) and
4738          (l_trx_period_rec.period_counter >= fa_amort_pvt.t_period_counter(l_bs_ind)) and
4739          (fa_amort_pvt.t_period_counter.COUNT > 1) then
4740 
4741 --tk_util.debug('last period counter: '||to_char(fa_amort_pvt.t_period_counter(fa_amort_pvt.t_period_counter.LAST)));
4742 --tk_util.debug('l_trx_period_rec.period_counter: '||to_char(l_trx_period_rec.period_counter));
4743 
4744          l_gr_ind := fa_amort_pvt.t_period_counter.COUNT -
4745                      (fa_amort_pvt.t_period_counter(fa_amort_pvt.t_period_counter.LAST) -
4746                       (l_trx_period_rec.period_counter - 1));
4747 
4748 --tk_util.debug('l_gr_ind: '||to_char(l_gr_ind));
4749 --tk_util.debug('ytd: '||to_char(fa_amort_pvt.t_ytd_deprn(l_gr_ind)));
4750 
4751             l_gr_asset_deprn_rec.deprn_amount        := fa_amort_pvt.t_deprn_amount(l_gr_ind);
4752             l_gr_asset_deprn_rec.ytd_deprn           := fa_amort_pvt.t_ytd_deprn(l_gr_ind);
4753             l_gr_asset_deprn_rec.deprn_reserve       := fa_amort_pvt.t_deprn_reserve(l_gr_ind);
4754             l_gr_asset_deprn_rec.bonus_deprn_amount  := fa_amort_pvt.t_bonus_deprn_amount(l_gr_ind);
4755             l_gr_asset_deprn_rec.bonus_ytd_deprn     := fa_amort_pvt.t_bonus_ytd_deprn(l_gr_ind);
4756             l_gr_asset_deprn_rec.bonus_deprn_reserve := fa_amort_pvt.t_bonus_deprn_reserve(l_gr_ind);
4757             l_gr_asset_deprn_rec.impairment_amount   := fa_amort_pvt.t_impairment_amount(l_gr_ind);
4758             l_gr_asset_deprn_rec.ytd_impairment      := fa_amort_pvt.t_ytd_impairment(l_gr_ind);
4759             l_gr_asset_deprn_rec.impairment_reserve  := fa_amort_pvt.t_impairment_reserve(l_gr_ind);
4760             l_gr_asset_deprn_rec.ltd_production      := fa_amort_pvt.t_ltd_production(l_gr_ind);
4761             l_gr_asset_deprn_rec.ytd_production      := fa_amort_pvt.t_ytd_production(l_gr_ind);
4762             l_gr_asset_deprn_rec.production          := fa_amort_pvt.t_production(l_gr_ind);
4763             l_gr_asset_deprn_rec.reval_amortization  := fa_amort_pvt.t_reval_amortization(l_gr_ind);
4764             l_gr_asset_deprn_rec.reval_deprn_expense := fa_amort_pvt.t_reval_deprn_expense(l_gr_ind);
4765             l_gr_asset_deprn_rec.reval_deprn_reserve := fa_amort_pvt.t_reval_reserve(l_gr_ind);
4766             l_gr_asset_deprn_rec.reval_ytd_deprn     := fa_amort_pvt.t_ytd_reval_deprn_expense(l_gr_ind);
4767       else
4768             l_gr_asset_deprn_rec.deprn_amount        := 0;
4769             l_gr_asset_deprn_rec.ytd_deprn           := 0;
4770             l_gr_asset_deprn_rec.deprn_reserve       := 0;
4771             l_gr_asset_deprn_rec.bonus_deprn_amount  := 0;
4772             l_gr_asset_deprn_rec.bonus_ytd_deprn     := 0;
4773             l_gr_asset_deprn_rec.bonus_deprn_reserve := 0;
4774             l_gr_asset_deprn_rec.impairment_amount   := 0;
4775             l_gr_asset_deprn_rec.ytd_impairment      := 0;
4776             l_gr_asset_deprn_rec.impairment_reserve      := 0;
4777             l_gr_asset_deprn_rec.ltd_production      := 0;
4778             l_gr_asset_deprn_rec.ytd_production      := 0;
4779             l_gr_asset_deprn_rec.production          := 0;
4780             l_gr_asset_deprn_rec.reval_amortization  := 0;
4781             l_gr_asset_deprn_rec.reval_deprn_expense := 0;
4782             l_gr_asset_deprn_rec.reval_deprn_reserve := 0;
4783             l_gr_asset_deprn_rec.reval_ytd_deprn     := 0;
4784       end if;
4785    end if;
4786 
4787 
4788    d := 0;
4789 
4790 --tk_util.debug('period# :      cost:   adjcost:       exp:      eofy:     rsvaj:       rsv:      dlmt:      arec');
4791 /*
4792 for i in fa_amort_pvt.t_cost.FIRST..fa_amort_pvt.t_cost.LAST loop
4793 --tk_util.debug(rpad(to_char(fa_amort_pvt.t_period_counter(i)), 8, ' ')||':'||
4794               lpad(to_char(fa_amort_pvt.t_cost(i)), 10, ' ')||':'||
4795               lpad(to_char(fa_amort_pvt.t_adjusted_cost(i)), 10, ' ')||':'||
4796               lpad(to_char(fa_amort_pvt.t_deprn_amount(i)), 10, ' ')||':'||
4797               lpad(to_char(fa_amort_pvt.t_eofy_reserve(i)), 10, ' ')||':'||
4798               lpad(to_char(fa_amort_pvt.t_reserve_adjustment_amount(i)), 10, ' ')||':'||
4799               lpad(to_char(fa_amort_pvt.t_deprn_reserve(i)), 10, ' ')||':'||
4800               lpad(nvl(to_char(fa_amort_pvt.t_allowed_deprn_limit_amount(i)), 'null'), 5, ' ')||':'||
4801               lpad(to_char(fa_amort_pvt.t_adjusted_recoverable_cost(i)), 10, ' ')
4802              );
4806                -- Update FA_BOOKS_SUMMARY
4803 end loop;
4804 */
4805                --
4807                --
4808 
4809    -- *********************** --
4810    --  Main Loop Starts Here  --
4811    -- *********************** --
4812    FOR i IN l_bs_ind..l_count LOOP
4813       d := d + 1;
4814 
4815       if (p_log_level_rec.statement_level) then
4816          fa_debug_pkg.add(l_calling_fn, 'Processing period',
4817                           fa_amort_pvt.t_period_counter(i));
4818       end if;
4819 
4820       if i <> 1 then
4821          l_asset_fin_rec_old := l_asset_fin_rec_new;
4822       end if;
4823 
4824       --
4825       -- Populate l_period_rec for deprn basis
4826       --
4827       l_period_rec.period_counter := fa_amort_pvt.t_period_counter(i);
4828       l_period_rec.fiscal_year := fa_amort_pvt.t_fiscal_year(i);
4829       l_period_rec.period_num := fa_amort_pvt.t_period_num(i);
4830 
4831 --tk_util.debug('fa_amort_pvt.t_cost: '||to_char(fa_amort_pvt.t_cost(i)));
4832       l_prev_adj_cost_flag := false; --bug#15897249
4833       if (l_mem_trx) then
4834 
4835 --tk_util.debug('td_cost('||to_char(d)||'): '||to_char(td_cost(d)));
4836 --tk_util.debug('l_trx_period_rec.period_counter: '||to_char(l_trx_period_rec.period_counter));
4837         if (p_log_level_rec.statement_level) then
4838            fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_change_in_cost(i)' , fa_amort_pvt.t_change_in_cost(i), p_log_level_rec);
4839            fa_debug_pkg.add(l_calling_fn, 'td_cost(d)' , td_cost(d), p_log_level_rec);
4840            fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_reclass.cost' , l_asset_fin_rec_reclass.cost, p_log_level_rec);
4841         end if;
4842 
4843         if (p_reclass_src_dest = 'DESTINATION') and
4844            (l_trx_period_rec.period_counter = fa_amort_pvt.t_period_counter(i)) then
4845 
4846 --tk_util.debug('GROUP RECLASS: '||to_char(fa_amort_pvt.t_period_counter(i)));
4847 
4848            fa_amort_pvt.t_change_in_cost(i) := fa_amort_pvt.t_change_in_cost(i) + l_asset_fin_rec_reclass.cost;
4849            fa_amort_pvt.t_change_in_cip_cost(i) := fa_amort_pvt.t_change_in_cip_cost(i) +
4850                                             l_asset_fin_rec_reclass.cip_cost;
4851         else
4852 --tk_util.debug('fa_amort_pvt.t_change_in_cost('||to_char(d)||'): '|| to_char(fa_amort_pvt.t_change_in_cost(i)));
4853 
4854            fa_amort_pvt.t_change_in_cost(i) := fa_amort_pvt.t_change_in_cost(i) + td_cost(d);
4855            fa_amort_pvt.t_change_in_cip_cost(i) := fa_amort_pvt.t_change_in_cip_cost(i) + td_cip_cost(d);
4856 
4857         end if;
4858 
4859 --tk_util.debug('fa_amort_pvt.t_change_in_cost('||to_char(i)||'): '|| to_char(fa_amort_pvt.t_change_in_cost(i)));
4860 --tk_util.debug('td_salvage_value('||to_char(d)||'): '|| to_char(td_salvage_value(d)));
4861 
4862          if (p_reclass_src_dest = 'SOURCE') and (l_trx_period_rec.period_counter = fa_amort_pvt.t_period_counter(i)
4863              and (nvl(fa_cache_pkg.fazcdbr_record.rule_name,'ZZ') = 'ENERGY PERIOD END BALANCE')
4864              ) then
4865             fa_amort_pvt.t_change_in_cost(i) := fa_amort_pvt.t_change_in_cost(i) +
4866                                                 (l_asset_fin_rec_reclass.cost - td_cost(d));
4867             fa_amort_pvt.t_change_in_cip_cost(i) := fa_amort_pvt.t_change_in_cip_cost(i) +
4868                                                     (l_asset_fin_rec_reclass.cip_cost - td_cip_cost(d));
4869             --tk_util.debug('Synchronizing change_in_cost: '||to_char(fa_amort_pvt.t_change_in_cost(i)));
4870          end if;
4871 
4872          if (i = 1) then
4873             fa_amort_pvt.t_cost(i) := fa_amort_pvt.t_change_in_cost(i);
4874             fa_amort_pvt.t_cip_cost(i) := fa_amort_pvt.t_change_in_cip_cost(i);
4875 
4876             if (p_reclass_src_dest is not null) and
4877                (l_trx_period_rec.period_counter = fa_amort_pvt.t_period_counter(i)) then
4878                fa_amort_pvt.t_member_salvage_value(i) := fa_amort_pvt.t_member_salvage_value(i) +
4879                                                          l_asset_fin_rec_reclass.salvage_value;
4880                fa_amort_pvt.t_member_deprn_limit_amount(i) := fa_amort_pvt.t_member_deprn_limit_amount(i) +
4881                                                               l_asset_fin_rec_reclass.allowed_deprn_limit_amount;
4882             else
4883                fa_amort_pvt.t_member_salvage_value(i) := fa_amort_pvt.t_member_salvage_value(i) +
4884                                                          td_salvage_value(d);
4885                fa_amort_pvt.t_member_deprn_limit_amount(i) := fa_amort_pvt.t_member_deprn_limit_amount(i) +
4886                                                               td_deprn_limit_amount(d);
4887             end if;
4888 
4889             fa_amort_pvt.t_rate_adjustment_factor(i) := 1;
4890          else
4891             --bug6903588: Need to back out this fix as it was distructing the testcase for this bug
4892             -- Cannot reproduce during the test.
4893             if (p_log_level_rec.statement_level) then
4894                      fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_cost(i - 1)' , fa_amort_pvt.t_cost(i - 1), p_log_level_rec);
4895                      fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_change_in_cost(i)' , fa_amort_pvt.t_change_in_cost(i), p_log_level_rec);
4896                  end if;
4897             fa_amort_pvt.t_cost(i) := fa_amort_pvt.t_cost(i - 1) + fa_amort_pvt.t_change_in_cost(i);
4898             fa_amort_pvt.t_cip_cost(i) := fa_amort_pvt.t_cip_cost(i - 1) + fa_amort_pvt.t_change_in_cip_cost(i);
4899 
4900 
4901             if (p_reclass_src_dest is not null) and
4902                (l_trx_period_rec.period_counter = fa_amort_pvt.t_period_counter(i)) then
4903                fa_amort_pvt.t_member_salvage_value(i) := fa_amort_pvt.t_member_salvage_value(i) +
4904                                                          l_asset_fin_rec_reclass.salvage_value;
4905                fa_amort_pvt.t_member_deprn_limit_amount(i) := fa_amort_pvt.t_member_deprn_limit_amount(i) +
4909                                                          td_salvage_value(d);
4906                                                               l_asset_fin_rec_reclass.allowed_deprn_limit_amount;
4907             else
4908                fa_amort_pvt.t_member_salvage_value(i) := fa_amort_pvt.t_member_salvage_value(i) +
4910                fa_amort_pvt.t_member_deprn_limit_amount(i) := fa_amort_pvt.t_member_deprn_limit_amount(i) +
4911                                                               td_deprn_limit_amount(d);
4912             end if;
4913 
4914             fa_amort_pvt.t_rate_adjustment_factor(i) := fa_amort_pvt.t_rate_adjustment_factor(i - 1);
4915          end if;
4916          if (p_reclass_src_dest = 'SOURCE') and (l_trx_period_rec.period_counter = fa_amort_pvt.t_period_counter(i)
4917              and (nvl(fa_cache_pkg.fazcdbr_record.rule_name,'ZZ') <> 'ENERGY PERIOD END BALANCE')
4918             ) then
4919             fa_amort_pvt.t_change_in_cost(i) := fa_amort_pvt.t_change_in_cost(i) +
4920                                                 (l_asset_fin_rec_reclass.cost - td_cost(d));
4921             fa_amort_pvt.t_change_in_cip_cost(i) := fa_amort_pvt.t_change_in_cip_cost(i) +
4922                                                     (l_asset_fin_rec_reclass.cip_cost - td_cip_cost(d));
4923             --tk_util.debug('Synchronizing change_in_cost: '||to_char(fa_amort_pvt.t_change_in_cost(i)));
4924          end if;
4925        end if;
4926 
4927 --tk_util.debug('fa_amort_pvt.t_member_salvage_value('||to_char(i)||'): '|| to_char(fa_amort_pvt.t_member_salvage_value(i)));
4928 --tk_util.debug('fa_amort_pvt.t_cost('||to_char(d)||'): '|| to_char(fa_amort_pvt.t_cost(i)));
4929 
4930       --
4931       -- Apply delta to books sumamry global variables
4932       --
4933       fa_amort_pvt.t_salvage_type(i) := nvl(p_asset_fin_rec_adj.salvage_type,
4934                                              fa_amort_pvt.t_salvage_type(i));
4935       fa_amort_pvt.t_deprn_limit_type(i) := nvl(p_asset_fin_rec_adj.deprn_limit_type,
4936                                                  fa_amort_pvt.t_deprn_limit_type(i));
4937 
4938       if (px_asset_fin_rec_new.depreciate_flag <>
4939           p_asset_fin_rec_old.depreciate_flag) then
4940          fa_amort_pvt.t_depreciate_flag(i) := px_asset_fin_rec_new.depreciate_flag;
4941       end if;
4942 
4943       if (nvl(p_asset_fin_rec_old.deprn_method_code,
4944               px_asset_fin_rec_new.deprn_method_code) <> px_asset_fin_rec_new.deprn_method_code) then
4945          fa_amort_pvt.t_deprn_method_code(i) := px_asset_fin_rec_new.deprn_method_code;
4946          fa_amort_pvt.t_life_in_months(i) := px_asset_fin_rec_new.life_in_months;
4947          fa_amort_pvt.t_adjusted_rate(i) := px_asset_fin_rec_new.adjusted_rate;
4948 --tk_util.debug('1 adjusted_rate: '||to_char(fa_amort_pvt.t_adjusted_rate(i)));
4949       else
4950          fa_amort_pvt.t_life_in_months(i) := nvl(p_asset_fin_rec_adj.life_in_months,
4951                                                   fa_amort_pvt.t_life_in_months(i));
4952          fa_amort_pvt.t_adjusted_rate(i) := nvl(p_asset_fin_rec_adj.adjusted_rate,
4953                                                  fa_amort_pvt.t_adjusted_rate(i));
4954 --tk_util.debug('adj adjusted_rate: '||to_char(p_asset_fin_rec_adj.adjusted_rate));
4955 --tk_util.debug('2 adjusted_rate: '||to_char(fa_amort_pvt.t_adjusted_rate(i)));
4956       end if;
4957 
4958       fa_amort_pvt.t_bonus_rule(i) := nvl(p_asset_fin_rec_adj.bonus_rule,
4959                                            fa_amort_pvt.t_bonus_rule(i));
4960       --   fa_amort_pvt.t_adjusted_capacity(i) :=
4961       fa_amort_pvt.t_production_capacity(i) := nvl(fa_amort_pvt.t_production_capacity(i), 0) +
4962                                                 nvl(p_asset_fin_rec_adj.production_capacity, 0);
4963       fa_amort_pvt.t_unit_of_measure(i) := nvl(p_asset_fin_rec_adj.unit_of_measure,
4964                                             fa_amort_pvt.t_unit_of_measure(i));
4965       --
4966       -- I don't know what to store in these columns
4967       --
4968 --   fa_amort_pvt.t_remaining_life1(i) :=
4969 --   fa_amort_pvt.t_remaining_life2(i) :=
4970 
4971       fa_amort_pvt.t_ceiling_name(i) := nvl(p_asset_fin_rec_adj.ceiling_name,
4972                                               fa_amort_pvt.t_ceiling_name(i));
4973 
4974       if (p_asset_fin_rec_old.group_asset_id = px_asset_fin_rec_new.group_asset_id) then
4975          null;
4976       else
4977          fa_amort_pvt.t_group_asset_id(i) := px_asset_fin_rec_new.group_asset_id;
4978       end if;
4979 
4980       if (nvl(p_asset_fin_rec_old.super_group_id, 0) = nvl(px_asset_fin_rec_new.super_group_id, 0)) then
4981          null;
4982       else
4983          fa_amort_pvt.t_super_group_id(i) := px_asset_fin_rec_new.super_group_id;
4984       end if;
4985 
4986       fa_amort_pvt.t_over_depreciate_option(i) := nvl(p_asset_fin_rec_adj.over_depreciate_option,
4987                                                        fa_amort_pvt.t_over_depreciate_option(i));
4988 
4989       if (nvl(p_asset_fin_rec_old.salvage_type,
4990               px_asset_fin_rec_new.salvage_type) = px_asset_fin_rec_new.salvage_type) then
4991          fa_amort_pvt.t_percent_salvage_value(i) := fa_amort_pvt.t_percent_salvage_value(i) +
4992                                                      nvl(p_asset_fin_rec_adj.percent_salvage_value, 0);
4993       else
4994          fa_amort_pvt.t_percent_salvage_value(i) := nvl(px_asset_fin_rec_new.percent_salvage_value, 0);
4995       end if;
4996 
4997       if (nvl(p_asset_fin_rec_old.deprn_limit_type,
4998          px_asset_fin_rec_new.deprn_limit_type) = px_asset_fin_rec_new.deprn_limit_type) then
4999          fa_amort_pvt.t_allowed_deprn_limit(i) := fa_amort_pvt.t_allowed_deprn_limit(i) +
5000                                                    nvl(p_asset_fin_rec_adj.allowed_deprn_limit, 0);
5001       else
5002          fa_amort_pvt.t_allowed_deprn_limit(i) := nvl(px_asset_fin_rec_new.allowed_deprn_limit, 0);
5003       end if;
5004 
5005       if (fa_amort_pvt.t_salvage_type(i) = 'PCT') then
5009       else -- case of SUM
5006          l_temp_num := fa_amort_pvt.t_cost(i) * fa_amort_pvt.t_percent_salvage_value(i);
5007          fa_round_pkg.fa_ceil(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
5008          fa_amort_pvt.t_salvage_value(i) := l_temp_num;
5010          fa_amort_pvt.t_salvage_value(i) := fa_amort_pvt.t_member_salvage_value(i);
5011       end if;
5012 
5013       if (fa_amort_pvt.t_deprn_limit_type(i) = 'PCT') then
5014          l_temp_num := fa_amort_pvt.t_cost(i) * (1 -  fa_amort_pvt.t_allowed_deprn_limit(i));
5015          fa_round_pkg.fa_floor(l_temp_num, p_asset_hdr_rec.book_type_code, p_log_level_rec => p_log_level_rec);
5016          fa_amort_pvt.t_allowed_deprn_limit_amount(i) := l_temp_num;
5017       elsif(fa_amort_pvt.t_deprn_limit_type(i) = 'SUM') then
5018          fa_amort_pvt.t_allowed_deprn_limit_amount(i) := fa_amort_pvt.t_member_deprn_limit_amount(i);
5019       else  -- case of 'NONE'
5020          fa_amort_pvt.t_allowed_deprn_limit_amount(i) := null;
5021       end if;
5022 
5023       if (p_log_level_rec.statement_level) then
5024          fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_salvage_type('||to_char(i)||')',
5025                           fa_amort_pvt.t_salvage_type(i));
5026          fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_percent_salvage_value('||to_char(i)||')',
5027                           fa_amort_pvt.t_percent_salvage_value(i));
5028          fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_salvage_value('||to_char(i)||')',
5029                           fa_amort_pvt.t_salvage_value(i));
5030          fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_member_salvage_value('||to_char(i)||')',
5031                           fa_amort_pvt.t_member_salvage_value(i));
5032          fa_debug_pkg.add(l_calling_fn,
5033                           'fa_amort_pvt.t_deprn_limit_type('||to_char(i)||')',
5034                           fa_amort_pvt.t_deprn_limit_type(i));
5035          fa_debug_pkg.add(l_calling_fn,
5039                           'fa_amort_pvt.t_allowed_deprn_limit_amount('||to_char(i)||')',
5036                           'fa_amort_pvt.t_allowed_deprn_limit('||to_char(i)||')',
5037                           fa_amort_pvt.t_allowed_deprn_limit(i));
5038          fa_debug_pkg.add(l_calling_fn,
5040                           fa_amort_pvt.t_allowed_deprn_limit_amount(i));
5041          fa_debug_pkg.add(l_calling_fn,
5042                           'fa_amort_pvt.t_member_deprn_limit_amount('||to_char(i)||')',
5043                           fa_amort_pvt.t_member_deprn_limit_amount(i));
5044       end if;
5045 
5046       l_prev_adj_cost_flag := FALSE; --bug#15897249
5047       --
5048       -- At this point, all attributes to determine whether resetting adjusted cost is necessary
5049       -- or not. Here is the list of the attributes
5050       --  change_in_cost, change_in_cip_cost, member_salvage_value, member_deprn_limit_amount,
5051       --  percent_salvage_value, allowed_deprn_limit, salvage_value, allowed_deprn_limit_amount
5055       if (i = 1) or
5052       --  deprn_method_code, adjusted_rate, bonus_rule
5053       -- If this is destination asset for reclass transaction, this place is too late to
5054       -- set reset_adjusted_cost_flag
5056          (fa_amort_pvt.t_change_in_cost(i) <> 0) or
5057          (fa_amort_pvt.t_change_in_cip_cost(i) <> 0) then
5058          fa_amort_pvt.t_reset_adjusted_cost_flag(i) := 'Y';
5059 --tk_util.debug('tktk1');
5060       elsif (nvl(fa_amort_pvt.t_percent_salvage_value(i), 0) <> nvl(fa_amort_pvt.t_percent_salvage_value(i-1),0)) or
5061             (nvl(fa_amort_pvt.t_allowed_deprn_limit(i), 0) <> nvl(fa_amort_pvt.t_allowed_deprn_limit(i-1), 0)) or
5062             (fa_amort_pvt.t_salvage_value(i) <> fa_amort_pvt.t_salvage_value(i-1)) or
5063             (nvl(fa_amort_pvt.t_allowed_deprn_limit_amount(i), 0) <>
5064                                          nvl(fa_amort_pvt.t_allowed_deprn_limit_amount(i-1), 0)) or
5065             (fa_amort_pvt.t_deprn_method_code(i) <> fa_amort_pvt.t_deprn_method_code(i-1)) or
5066             (nvl(fa_amort_pvt.t_adjusted_rate(i), 0) <> nvl(fa_amort_pvt.t_adjusted_rate(i-1), 0)) or
5067             (nvl(fa_amort_pvt.t_bonus_rule(i), 'NULL') <> nvl(fa_amort_pvt.t_bonus_rule(i-1), 'NULL') or
5068             (fa_amort_pvt.t_expense_adjustment_amount(i) <> 0) or
5069             (fa_amort_pvt.t_reserve_adjustment_amount(i) <> 0)) then
5070 
5071          fa_amort_pvt.t_reset_adjusted_cost_flag(i) := 'Y';
5072 
5073          if (p_log_level_rec.statement_level) then
5074             fa_debug_pkg.add('tk','1',fa_amort_pvt.t_member_salvage_value(i-1));
5075             fa_debug_pkg.add('tk','2', fa_amort_pvt.t_member_deprn_limit_amount(i-1));
5076             fa_debug_pkg.add('tk','3', fa_amort_pvt.t_percent_salvage_value(i-1));
5077             fa_debug_pkg.add('tk','4', fa_amort_pvt.t_allowed_deprn_limit(i-1));
5078             fa_debug_pkg.add('tk','5', fa_amort_pvt.t_salvage_value(i-1));
5079             fa_debug_pkg.add('tk','6', fa_amort_pvt.t_allowed_deprn_limit_amount(i-1));
5080             fa_debug_pkg.add('tk','7', fa_amort_pvt.t_deprn_method_code(i-1));
5081             fa_debug_pkg.add('tk','8', fa_amort_pvt.t_adjusted_rate(i-1));
5082             fa_debug_pkg.add('tk','9', fa_amort_pvt.t_bonus_rule(i-1));
5083             fa_debug_pkg.add('tk','0', fa_amort_pvt.t_expense_adjustment_amount(i-1));
5084             fa_debug_pkg.add('tk','1', fa_amort_pvt.t_reserve_adjustment_amount(i-1));
5085          end if;
5086 
5087       elsif ((p_reclass_src_dest is not null) and
5088          --bug3872075: Need group's change_in_cost etc instead of delta
5089          --(td_cost(d) is not null)) then
5090             ((nvl(fa_amort_pvt.t_change_in_cost(i), 0) <> 0) or
5091             (nvl(fa_amort_pvt.t_change_in_cip_cost(i), 0) <> 0))) then
5092 
5093          fa_amort_pvt.t_reset_adjusted_cost_flag(i) := 'Y';
5094 
5095          if (p_log_level_rec.statement_level) then
5096             fa_debug_pkg.add(l_calling_fn, 'Reclass trx and still change in', 'COST', p_log_level_rec => p_log_level_rec);
5097          end if;
5098 
5099       else
5100          if (p_log_level_rec.statement_level) then
5101             fa_debug_pkg.add(l_calling_fn, 'Setting reset adj cost flag to ', 'N', p_log_level_rec => p_log_level_rec);
5102             fa_debug_pkg.add(l_calling_fn, 'Resetting adjusted cost', 'Not Required', p_log_level_rec => p_log_level_rec);
5103          end if;
5104 
5105          fa_amort_pvt.t_reset_adjusted_cost_flag(i) := 'N';
5106 
5107          if (i = 2)  then
5108             if (  fa_amort_pvt.t_period_num(i) = 1) and
5109 
5110                (nvl(fa_cache_pkg.fazcdrd_record.use_eofy_reserve_flag, 'N') = 'Y') or
5111                (  (nvl(fa_amort_pvt.t_change_in_cost(i), 0) <> 0) or
5112                   (nvl(fa_amort_pvt.t_change_in_cip_cost(i), 0) <> 0)) then
5113 
5114                fa_amort_pvt.t_reset_adjusted_cost_flag(i) := 'Y';
5115                if (p_log_level_rec.statement_level) then
5116                   fa_debug_pkg.add(l_calling_fn, 'There is still something changed', 'Resetting adj cost required', p_log_level_rec => p_log_level_rec);
5117                   fa_debug_pkg.add(l_calling_fn, 'Resetting adjusted cost', 'Still  Required', p_log_level_rec => p_log_level_rec);
5118                end if;
5119             elsif (nvl(fa_cache_pkg.fazcdrd_record.period_update_flag,'N') = 'Y') then -- Added for bug 8425794 / 8244128
5120                fa_amort_pvt.t_reset_adjusted_cost_flag(i) := 'Y';
5121                if (p_log_level_rec.statement_level) then
5122                   fa_debug_pkg.add(l_calling_fn, 'There is still something changed', 'Resetting adj cost required', p_log_level_rec => p_log_level_rec);
5123                   fa_debug_pkg.add(l_calling_fn, 'Resetting adjusted cost', 'Still  Required', p_log_level_rec => p_log_level_rec);
5124                end if;
5125             else
5126                fa_amort_pvt.t_adjusted_cost(i) := fa_amort_pvt.t_adjusted_cost(i-1);
5127                -- Bug5732277: Adding following to reflect adjusted_cost
5128                l_asset_fin_rec_new.adjusted_cost := fa_amort_pvt.t_adjusted_cost(i);
5129                l_prev_adj_cost_flag := TRUE; --bug#15897249
5130 
5131                if (p_log_level_rec.statement_level) then
5132                   fa_debug_pkg.add(l_calling_fn, 'Inheriting adj cost from', 'Previous Period', p_log_level_rec => p_log_level_rec);
5133                end if;
5134 
5135             end if;
5136 
5137          elsif (i = 1) then
5138             fa_amort_pvt.t_adjusted_cost(i) := 0;
5139             -- Bug5732277: Adding following to reflect adjusted_cost
5140             l_asset_fin_rec_new.adjusted_cost := fa_amort_pvt.t_adjusted_cost(i);
5141 
5142             if (p_log_level_rec.statement_level) then
5143                fa_debug_pkg.add(l_calling_fn, 'Resetting adjusted cost with ', '0', p_log_level_rec => p_log_level_rec);
5144             end if;
5145          end if;
5146 
5147          if (p_log_level_rec.statement_level) then
5151 
5148             fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_adjusted_cost('||to_char(i)||')', fa_amort_pvt.t_adjusted_cost(i));
5149             fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.adjusted_cost', l_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
5150          end if;
5152       end if; -- (i = 1) or
5153 
5154       fa_amort_pvt.t_recoverable_cost(i) := fa_amort_pvt.t_cost(i) - fa_amort_pvt.t_salvage_value(i);
5155       fa_amort_pvt.t_adjusted_recoverable_cost(i) := fa_amort_pvt.t_cost(i) -
5156                                                       nvl(fa_amort_pvt.t_allowed_deprn_limit_amount(i),
5157                                                           fa_amort_pvt.t_salvage_value(i));
5158 
5159       fa_amort_pvt.t_date_placed_in_service(i) := nvl(p_asset_fin_rec_adj.date_placed_in_service,
5160                                                        fa_amort_pvt.t_date_placed_in_service(i));
5161 
5162 
5163       fa_amort_pvt.t_ytd_proceeds_of_sale(i) := fa_amort_pvt.t_ytd_proceeds_of_sale(i) +
5164                                                  nvl(p_asset_fin_rec_adj.ytd_proceeds, 0) +
5165                                                  l_proceeds_of_sale;
5166 
5167       fa_amort_pvt.t_ltd_proceeds_of_sale(i) := fa_amort_pvt.t_ltd_proceeds_of_sale(i) +
5168                                                  nvl(p_asset_fin_rec_adj.ltd_proceeds, 0) +
5169                                                  l_proceeds_of_sale;
5170 
5171       --
5172       -- Not Yet Implemented
5173       --
5174       fa_amort_pvt.t_ytd_cost_of_removal(i) := fa_amort_pvt.t_ytd_cost_of_removal(i) +
5175                                                 nvl(p_asset_fin_rec_adj.ltd_cost_of_removal , 0) +
5176                                                 l_cost_of_removal;
5177 
5178       fa_amort_pvt.t_ltd_cost_of_removal(i) := fa_amort_pvt.t_ltd_cost_of_removal(i) +
5179                                                 nvl(p_asset_fin_rec_adj.ltd_cost_of_removal , 0) +
5180                                                 l_cost_of_removal;
5181 
5182 
5183       fa_amort_pvt.t_unrevalued_cost(i) := fa_amort_pvt.t_unrevalued_cost(i) +
5184                                             nvl(p_asset_fin_rec_adj.unrevalued_cost, 0);
5185 
5186       fa_amort_pvt.t_reval_amortization_basis(i) := fa_amort_pvt.t_reval_amortization_basis(i) +
5187                                                      nvl(p_asset_fin_rec_adj.reval_amortization_basis, 0);
5188 
5189 
5190       if (p_log_level_rec.statement_level) then
5191          fa_debug_pkg.add(l_calling_fn, 'Finish Populating Global Variables', ' ', p_log_level_rec => p_log_level_rec);
5192       end if;
5193 
5194       --   fa_amort_pvt.t_reval_ceiling(i) :=
5195 
5196       --   fa_amort_pvt.t_eofy_adj_cost(i) -- Unchanged
5197       --   fa_amort_pvt.t_eofy_formula_factor(i) Unchanged
5198       --   fa_amort_pvt.t_eofy_reserve(i) Unchanged
5199       if (i = 1) then
5200          fa_amort_pvt.t_eop_adj_cost(i)            := 0;
5201          fa_amort_pvt.t_eop_formula_factor(i)      := 1;
5202 
5203          fa_amort_pvt.t_eofy_adj_cost(i)           := 0;
5204          fa_amort_pvt.t_eofy_formula_factor(i)     := 1;
5205          fa_amort_pvt.t_eofy_reserve (i)           := nvl(fa_amort_pvt.t_change_in_eofy_reserve(i), 0);
5206 
5207       else
5208          fa_amort_pvt.t_eop_adj_cost(i)            := fa_amort_pvt.t_adjusted_cost(i - 1);
5209          fa_amort_pvt.t_eop_formula_factor(i)      := fa_amort_pvt.t_formula_factor(i - 1);
5210 
5211          if (fa_amort_pvt.t_period_num(i) = 1) then
5212             fa_amort_pvt.t_eofy_adj_cost(i)       := fa_amort_pvt.t_adjusted_cost(i - 1);
5213             fa_amort_pvt.t_eofy_formula_factor(i) := fa_amort_pvt.t_formula_factor(i - 1);
5214             fa_amort_pvt.t_eofy_reserve (i)       := fa_amort_pvt.t_deprn_reserve(i - 1) +
5215                                                      nvl(fa_amort_pvt.t_change_in_eofy_reserve(i), 0);
5216          else
5217             fa_amort_pvt.t_eofy_adj_cost(i)       := fa_amort_pvt.t_eofy_adj_cost(i - 1);
5218             fa_amort_pvt.t_eofy_formula_factor(i) := fa_amort_pvt.t_eofy_formula_factor(i - 1);
5219             fa_amort_pvt.t_eofy_reserve (i)       := fa_amort_pvt.t_eofy_reserve(i - 1) +
5220                                                      nvl(fa_amort_pvt.t_change_in_eofy_reserve(i), 0);
5221          end if;
5222 
5223       end if;
5224 
5225 
5226 --tk_util.debug('l_bs_ind: '||to_char(l_bs_ind));
5227 --tk_util.debug('l_asset_deprn_rec.deprn_reserve: '||to_char(l_asset_deprn_rec.deprn_reserve));
5228    --
5229    -- Proceed if the period being processed is not current period and depreciation
5230    -- has not been recalculated yet, or
5231    -- This is current period but has some transaction entered and requires to recalculate
5232    -- adjusted_cost.
5233    -- Bug7487450: following need to be true  if deprn basis is period update for cur period
5234    --
5235    --Bug11886090: Adding this instead of adding below condition to let process goes in subsequent
5236    -- if statement below
5237    -- This basically takes care backing out catch-up taken at the time of retirement
5238    -- during reinstatement if retirement happened in current open period
5239    if fa_amort_pvt.t_period_counter(i) = p_period_rec.period_counter and
5240       fa_amort_pvt.t_reset_adjusted_cost_flag(i) = 'N' and
5241       p_trans_rec.transaction_key = 'MS' and
5242       nvl(p_asset_deprn_rec_adj.deprn_amount, 0)  <> 0 then
5243       fa_amort_pvt.t_deprn_amount(i) := fa_amort_pvt.t_expense_adjustment_amount(i);
5244       if (p_log_level_rec.statement_level) then
5245          fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_deprn_amount('||to_char(i)||')', fa_amort_pvt.t_deprn_amount(i), p_log_level_rec);
5246       end if;
5247    end if;
5248 
5249    if ((l_bs_ind <= i) and
5250        (fa_amort_pvt.t_period_counter(i) < p_period_rec.period_counter)) or
5251       ((fa_amort_pvt.t_period_counter(i) = p_period_rec.period_counter) and
5252        (   (fa_amort_pvt.t_reset_adjusted_cost_flag(i) = 'Y') or
5253         nvl(fa_cache_pkg.fazcdrd_record.period_update_flag,'N') = 'Y'   )     )    then
5254 
5255 --tk_util.debug('fa_amort_pvt.t_expense_adjustment_amount('||to_char(i)||'): '||to_char(fa_amort_pvt.t_expense_adjustment_amount(i)));
5256       fa_amort_pvt.t_deprn_amount(i) := fa_amort_pvt.t_expense_adjustment_amount(i);
5257 --tk_util.debug('l_trx_period_rec.period_counter: '||to_char(l_trx_period_rec.period_counter));
5258 --tk_util.debug('fa_amort_pvt.t_period_counter(i): '||to_char(fa_amort_pvt.t_period_counter(i)));
5259 
5260       if (p_reclass_src_dest = 'SOURCE') and
5261          (l_trx_period_rec.period_counter = fa_amort_pvt.t_period_counter(i)) then
5262          if (i = 1) then
5263            null;
5264          else
5265 
5266            -- HHIRAGA Added code for current period reclass under tracking
5267            if (p_log_level_rec.statement_level) then
5271            end if;
5268              fa_debug_pkg.add(l_calling_fn, 'HHIRAGA Debug: tracking_method', px_asset_fin_rec_new.tracking_method, p_log_level_rec => p_log_level_rec);
5269              fa_debug_pkg.add(l_calling_fn, 'HHIRAGA Debug: l_trx_period_rec.period_counter', l_trx_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
5270              fa_debug_pkg.add(l_calling_fn, 'HHIRAGA Debug: l_current_period_counter', l_current_period_counter, p_log_level_rec => p_log_level_rec);
5272 
5273            if nvl(px_asset_fin_rec_new.tracking_method,'NULL') = 'CALCULATE' and
5274               l_trx_period_rec.period_counter = l_current_period_counter then
5275 
5276               --115.211.211 branch to mainline porting starts
5277               --Bug6987743: member reserve should be taken out is passed form
5278               -- outside (source is fa_trx_references
5279               -- Reserve adjustment  amount has already been maintained before this line.
5280               --    x_deprn_reserve := (-1)*l_mem_deprn_reserve;
5281 
5282               x_deprn_reserve := (fa_amort_pvt.t_deprn_reserve(i - 1) - l_old_reserve);
5283               --115.211.211 branch to mainline porting ends
5284               fa_amort_pvt.t_reserve_adjustment_amount(i) :=
5285                  fa_amort_pvt.t_reserve_adjustment_amount(i) + x_deprn_reserve;
5286 
5287               fa_amort_pvt.t_eofy_reserve(i) := fa_amort_pvt.t_eofy_reserve(i) - l_mem_eofy_reserve;
5288               fa_amort_pvt.t_change_in_eofy_reserve(i) := (-1)* l_mem_eofy_reserve;
5289 
5290               if (p_log_level_rec.statement_level) then
5291                 fa_debug_pkg.add(l_calling_fn, 'HHIRAGA Debug: x_deprn_reserve', x_deprn_reserve, p_log_level_rec => p_log_level_rec);
5292                 fa_debug_pkg.add(l_calling_fn, 'HHIRAGA Debug: reserve_adjustment_amount',
5293                                                            fa_amort_pvt.t_reserve_adjustment_amount(i));
5294               end if;
5295 
5296            elsif nvl(px_asset_fin_rec_new.tracking_method,'NULL') = 'ALLOCATE' and
5297               (l_mem_loop_first) then
5298 
5299               --115.211.211 branch to mainline porting starts
5300               --Bug6987743: member reserve should be taken out is passed form
5301               -- outside (source is fa_trx_references
5302               -- Reserve adjustment  amount has already been maintained before this line.
5303 
5304               if (fa_cache_pkg.fazcdbr_record.rule_name = 'ENERGY PERIOD END BALANCE') then
5305                   x_deprn_reserve := (-1)*l_mem_deprn_reserve;
5306               else
5307                   x_deprn_reserve := (fa_amort_pvt.t_deprn_reserve(i - 1) - l_old_reserve);
5308               end if;
5309               --115.211.211 branch to mainline porting ends
5310               fa_amort_pvt.t_reserve_adjustment_amount(i) :=
5311                  fa_amort_pvt.t_reserve_adjustment_amount(i) + x_deprn_reserve;
5312 
5313               fa_amort_pvt.t_eofy_reserve(i) := fa_amort_pvt.t_eofy_reserve(i) - l_mem_eofy_reserve;
5314               fa_amort_pvt.t_change_in_eofy_reserve(i) := (-1)* l_mem_eofy_reserve;
5315               l_mem_loop_first := FALSE;
5316 
5317               if (p_log_level_rec.statement_level) then
5318                 fa_debug_pkg.add(l_calling_fn, 'HHIRAGA Debug: x_deprn_reserve', x_deprn_reserve, p_log_level_rec => p_log_level_rec);
5319                 fa_debug_pkg.add(l_calling_fn, 'HHIRAGA Debug: reserve_adjustment_amount',
5320                                                            fa_amort_pvt.t_reserve_adjustment_amount(i));
5321                 fa_debug_pkg.add(l_calling_fn, 'HHIRAGA Debug: eofy_reserve',
5322                                                            fa_amort_pvt.t_eofy_reserve(i));
5323               end if;
5324 
5325            else
5326 /* commented due to bug# 5601379
5327             fa_amort_pvt.t_reserve_adjustment_amount(i) :=
5328                  fa_amort_pvt.t_reserve_adjustment_amount(i) +
5329                  (fa_amort_pvt.t_deprn_reserve(i - 1) - l_old_reserve);        */
5330 --tk_util.debug('l_old_reserve: '||to_char(l_old_reserve));
5331 --tk_util.debug('t_deprn_reserve: '||to_char(fa_amort_pvt.t_deprn_reserve(i - 1)));
5332             x_deprn_reserve := (fa_amort_pvt.t_deprn_reserve(i - 1) - l_old_reserve);
5333 
5334            end if; -- End of HHIRAGA if-statement
5335 
5336             -- Bug7005716: Need to set previous periods amount back even in the period in loop is current period
5337             -- Bug3537474: Don't need to reset previous deprn info because this reclass is
5338             -- happens in period of member addition
5339             --
5340             -- Bug4328772:
5341             -- Commenting out following condition and replacing with a condition with the line below
5345                fa_amort_pvt.t_deprn_reserve(i - 1)           := l_gr_asset_deprn_rec.deprn_reserve;
5342 --            if (p_reclassed_asset_dpis < fa_amort_pvt.t_calendar_period_open_date(l_count)) then
5343             if (l_trx_period_rec.period_counter <= fa_amort_pvt.t_period_counter(l_count)) then --115.211.211 branch to mainline porting
5344                fa_amort_pvt.t_ytd_deprn(i - 1)               := l_gr_asset_deprn_rec.ytd_deprn;
5346                fa_amort_pvt.t_bonus_ytd_deprn(i - 1)         := l_gr_asset_deprn_rec.bonus_ytd_deprn;
5347                fa_amort_pvt.t_bonus_deprn_reserve(i - 1)     := l_gr_asset_deprn_rec.bonus_deprn_reserve;
5348                fa_amort_pvt.t_ytd_impairment(i - 1)         := l_gr_asset_deprn_rec.ytd_impairment;
5349                fa_amort_pvt.t_impairment_reserve(i - 1)     := l_gr_asset_deprn_rec.impairment_reserve;
5350                fa_amort_pvt.t_ltd_production(i - 1)          := l_gr_asset_deprn_rec.ltd_production;
5351                fa_amort_pvt.t_ytd_production(i - 1)          := l_gr_asset_deprn_rec.ytd_production;
5352                fa_amort_pvt.t_ytd_reval_deprn_expense(i - 1) := l_gr_asset_deprn_rec.reval_ytd_deprn;
5353                fa_amort_pvt.t_reval_reserve(i - 1)           := l_gr_asset_deprn_rec.reval_deprn_reserve;
5354             end if;
5355          end if; -- (i = 1)
5356       end if; -- (p_reclass_src_dest = 'SOURCE') and
5357 
5358       if (i = 1) then
5359          l_eop_rec_cost := 0;
5360          l_eop_sal_val := 0;
5361          fa_amort_pvt.t_ytd_deprn(i)               := fa_amort_pvt.t_deprn_amount(i);
5362          fa_amort_pvt.t_deprn_reserve(i)           := fa_amort_pvt.t_deprn_amount(i) +
5363                                                        fa_amort_pvt.t_reserve_adjustment_amount(i);
5364          fa_amort_pvt.t_bonus_ytd_deprn(i)         := 0;
5365          fa_amort_pvt.t_bonus_deprn_reserve(i)     := 0;
5366          fa_amort_pvt.t_ytd_impairment(i)          := 0;
5367          fa_amort_pvt.t_impairment_reserve(i)      := 0;
5368          fa_amort_pvt.t_ltd_production(i)          := 0;
5369          fa_amort_pvt.t_ytd_production(i)          := 0;
5370          fa_amort_pvt.t_ytd_reval_deprn_expense(i) := 0;
5371          fa_amort_pvt.t_reval_reserve(i)           := 0;
5372       else
5373          l_eop_rec_cost := fa_amort_pvt.t_recoverable_cost(i - 1);
5374          l_eop_sal_val := fa_amort_pvt.t_salvage_value(i - 1);
5375          if (fa_amort_pvt.t_period_num(i) = 1) then
5376             fa_amort_pvt.t_ytd_deprn(i)               := fa_amort_pvt.t_deprn_amount(i);
5377             fa_amort_pvt.t_bonus_ytd_deprn(i)         := 0;
5378             fa_amort_pvt.t_ytd_impairment(i)          := 0;
5379             fa_amort_pvt.t_ytd_production(i)          := 0;
5380             fa_amort_pvt.t_ytd_reval_deprn_expense(i) := 0;
5381          else
5382             fa_amort_pvt.t_ytd_deprn(i)               := fa_amort_pvt.t_deprn_amount(i) +
5383                                                           fa_amort_pvt.t_ytd_deprn(i - 1);
5384             fa_amort_pvt.t_bonus_ytd_deprn(i)         := fa_amort_pvt.t_bonus_ytd_deprn(i - 1);
5388 
5385             fa_amort_pvt.t_ytd_impairment(i)          := fa_amort_pvt.t_ytd_impairment(i - 1);
5386             fa_amort_pvt.t_ytd_production(i)          := fa_amort_pvt.t_ltd_production(i - 1);
5387          fa_amort_pvt.t_ytd_reval_deprn_expense(i) := fa_amort_pvt.t_ytd_reval_deprn_expense(i - 1);
5389          end if;
5390 --tk_util.debug('fa_amort_pvt.t_deprn_reserve(i - 1): '||to_char(fa_amort_pvt.t_deprn_reserve(i - 1)));
5391          fa_amort_pvt.t_deprn_reserve(i)           := fa_amort_pvt.t_deprn_amount(i) +
5392                                                        fa_amort_pvt.t_reserve_adjustment_amount(i) +
5393                                                        fa_amort_pvt.t_deprn_reserve(i - 1);
5394          fa_amort_pvt.t_bonus_deprn_reserve(i)     := fa_amort_pvt.t_bonus_deprn_reserve(i - 1);
5395          fa_amort_pvt.t_impairment_reserve(i)      := fa_amort_pvt.t_impairment_reserve(i - 1);
5396          fa_amort_pvt.t_ltd_production(i)          := fa_amort_pvt.t_ltd_production(i - 1);
5397          fa_amort_pvt.t_reval_reserve(i)           := fa_amort_pvt.t_reval_reserve(i - 1);
5398 
5399       end if;
5400 
5401 /* TEST BY HH */
5402                if (p_log_level_rec.statement_level) then
5403                   fa_debug_pkg.add(l_calling_fn, 'HH CHECK i =',
5404                                    i || 'at Line Number from 4555', p_log_level_rec => p_log_level_rec);
5405                   fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_deprn_amount(i)',
5406                                    fa_amort_pvt.t_deprn_amount(i));
5407                   if (i > 1) then
5408                      fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_deprn_reserve(i - 1)',
5409                                       fa_amort_pvt.t_deprn_reserve(i - 1));
5410                   end if;
5411                   fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_reserve_adjustment_amount(i)',
5412                                    fa_amort_pvt.t_reserve_adjustment_amount(i));
5413                   fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_deprn_reserve(i)',
5414                                    fa_amort_pvt.t_deprn_reserve(i));
5415 
5416                end if;
5417 /* End of TEST BY HH */
5418 
5419 
5420          --
5421          -- Populate l_asset_deprn_rec with previous period information
5422          --
5423 --         l_asset_deprn_rec := p_asset_deprn_rec;
5424 
5425          if (i = 1) then
5426             l_asset_deprn_rec.deprn_amount        := 0;
5427             l_asset_deprn_rec.ytd_deprn           := 0;
5428              l_asset_deprn_rec.deprn_reserve       := fa_amort_pvt.t_reserve_adjustment_amount(i) + fa_amort_pvt.t_expense_adjustment_amount(i); --Bug 8765715
5429             l_asset_deprn_rec.bonus_deprn_amount  := 0;
5430             l_asset_deprn_rec.bonus_ytd_deprn     := 0;
5431             l_asset_deprn_rec.bonus_deprn_reserve := 0;
5432             l_asset_deprn_rec.impairment_amount   := 0;
5433             l_asset_deprn_rec.ytd_impairment      := 0;
5434             l_asset_deprn_rec.impairment_reserve      := 0;
5435             l_asset_deprn_rec.ltd_production      := 0;
5436             l_asset_deprn_rec.ytd_production      := 0;
5437             l_asset_deprn_rec.production          := 0;
5438             l_asset_deprn_rec.reval_amortization  := 0;
5439             l_asset_deprn_rec.reval_deprn_expense := 0;
5440             l_asset_deprn_rec.reval_deprn_reserve := 0;
5441             l_asset_deprn_rec.reval_ytd_deprn     := 0;
5442          else
5443             l_asset_deprn_rec.deprn_amount        := fa_amort_pvt.t_deprn_amount(i);
5444             l_asset_deprn_rec.ytd_deprn           := fa_amort_pvt.t_ytd_deprn(i);
5445             l_asset_deprn_rec.deprn_reserve       := fa_amort_pvt.t_deprn_reserve(i);
5446             l_asset_deprn_rec.bonus_deprn_amount  := fa_amort_pvt.t_bonus_deprn_amount(i);
5447             l_asset_deprn_rec.bonus_ytd_deprn     := fa_amort_pvt.t_bonus_ytd_deprn(i);
5448             l_asset_deprn_rec.bonus_deprn_reserve := fa_amort_pvt.t_bonus_deprn_reserve(i);
5449             l_asset_deprn_rec.impairment_amount   := fa_amort_pvt.t_impairment_amount(i);
5450             l_asset_deprn_rec.ytd_impairment      := fa_amort_pvt.t_ytd_impairment(i);
5451             l_asset_deprn_rec.impairment_reserve      := fa_amort_pvt.t_impairment_reserve(i);
5452             l_asset_deprn_rec.ltd_production      := fa_amort_pvt.t_ltd_production(i);
5453             l_asset_deprn_rec.ytd_production      := fa_amort_pvt.t_ytd_production(i);
5454             l_asset_deprn_rec.production          := fa_amort_pvt.t_production(i);
5455             l_asset_deprn_rec.reval_amortization  := fa_amort_pvt.t_reval_amortization(i);
5456             l_asset_deprn_rec.reval_deprn_expense := fa_amort_pvt.t_reval_deprn_expense(i);
5457             l_asset_deprn_rec.reval_deprn_reserve := fa_amort_pvt.t_reval_reserve(i);
5458             l_asset_deprn_rec.reval_ytd_deprn     := fa_amort_pvt.t_ytd_reval_deprn_expense(i);
5459          end if;
5460 
5461          --
5462          -- Populate l_asset_fin_rec_new
5463          --
5464          l_asset_fin_rec_new.cost := fa_amort_pvt.t_cost(i);
5465          l_asset_fin_rec_new.salvage_value := fa_amort_pvt.t_salvage_value(i);
5466          l_asset_fin_rec_new.recoverable_cost := fa_amort_pvt.t_recoverable_cost(i);
5467          l_asset_fin_rec_new.deprn_method_code := fa_amort_pvt.t_deprn_method_code(i);
5468          l_asset_fin_rec_new.life_in_months := fa_amort_pvt.t_life_in_months(i);
5469          l_asset_fin_rec_new.group_asset_id := fa_amort_pvt.t_group_asset_id(i);
5470          l_asset_fin_rec_new.depreciate_flag := fa_amort_pvt.t_depreciate_flag(i);
5471          l_asset_fin_rec_new.eofy_reserve := fa_amort_pvt.t_eofy_reserve(i);
5472          l_asset_fin_rec_new.rate_adjustment_factor := fa_amort_pvt.t_rate_adjustment_factor(i);
5473          l_asset_fin_rec_new.formula_factor := fa_amort_pvt.t_formula_factor(i);
5474          l_asset_fin_rec_new.super_group_id := fa_amort_pvt.t_super_group_id(i);
5478          l_dpr_in.calendar_type := fa_cache_pkg.fazcbc_record.deprn_calendar;
5475          l_asset_fin_rec_new.adjusted_capacity := fa_amort_pvt.t_adjusted_capacity(i); --Bug 8477192
5476 
5477          l_dpr_in.asset_num := p_asset_desc_rec.asset_number;
5479          l_dpr_in.book := p_asset_hdr_rec.book_type_code;
5480          l_dpr_in.asset_id := p_asset_hdr_rec.asset_id;
5481 
5485          l_dpr_in.adj_rate := fa_amort_pvt.t_adjusted_rate(i);
5482          l_dpr_in.adj_cost := fa_amort_pvt.t_recoverable_cost(i);
5483          l_dpr_in.rec_cost := fa_amort_pvt.t_recoverable_cost(i);
5484          l_dpr_in.reval_amo_basis := fa_amort_pvt.t_reval_amortization_basis(i);
5486          l_dpr_in.rate_adj_factor := 1;
5487          l_dpr_in.capacity := fa_amort_pvt.t_production_capacity(i);
5488          l_dpr_in.adj_capacity := fa_amort_pvt.t_adjusted_capacity(i);
5489          l_dpr_in.ltd_prod := 0;
5490          l_dpr_in.ytd_deprn := 0;    -- This needs to be 0 for this faxcde call
5491          l_dpr_in.deprn_rsv := 0;
5492          l_dpr_in.reval_rsv := l_asset_deprn_rec.reval_deprn_reserve;
5493          l_dpr_in.bonus_deprn_exp := l_asset_deprn_rec.bonus_deprn_amount;
5494          l_dpr_in.bonus_ytd_deprn := l_asset_deprn_rec.bonus_ytd_deprn;
5495          l_dpr_in.bonus_deprn_rsv := l_asset_deprn_rec.bonus_deprn_reserve;
5496          l_dpr_in.impairment_exp := l_asset_deprn_rec.impairment_amount;
5497          l_dpr_in.ytd_impairment := l_asset_deprn_rec.ytd_impairment;
5498          l_dpr_in.impairment_rsv := l_asset_deprn_rec.impairment_reserve;
5499          l_dpr_in.prior_fy_bonus_exp := l_asset_deprn_rec.prior_fy_bonus_expense;
5500          l_dpr_in.impairment_exp := l_asset_deprn_rec.impairment_amount;
5501          l_dpr_in.ytd_impairment := l_asset_deprn_rec.ytd_impairment;
5502          l_dpr_in.impairment_rsv := l_asset_deprn_rec.impairment_reserve;
5503 
5504          l_dpr_in.ceil_name := fa_amort_pvt.t_ceiling_name(i);
5505          l_dpr_in.bonus_rule := fa_amort_pvt.t_bonus_rule(i);
5506          l_dpr_in.method_code := fa_amort_pvt.t_deprn_method_code(i);
5507          l_dpr_in.jdate_in_service :=
5508                 to_number(to_char(fa_amort_pvt.t_date_placed_in_service(i), 'J'));
5509          --
5510          -- Use dpis as prorate and deprn start date
5511          -- This is ok since this code is only for group now
5512          -- Need to pass actual prorate/deprn start date if this code is open for standalone assets
5513          --
5514          l_dpr_in.prorate_jdate := to_number(to_char(fa_amort_pvt.t_date_placed_in_service(i), 'J'));
5515          l_dpr_in.deprn_start_jdate :=
5516                 to_number(to_char(fa_amort_pvt.t_date_placed_in_service(i), 'J'));
5517          l_dpr_in.prorate_date := fa_amort_pvt.t_date_placed_in_service(i);
5518          l_dpr_in.orig_deprn_start_date := fa_amort_pvt.t_date_placed_in_service(i);
5519 
5520 
5521          l_dpr_in.jdate_retired := 0; -- don't know this is correct or not
5522          l_dpr_in.ret_prorate_jdate := 0; -- don't know this is correct or not
5523          l_dpr_in.life := fa_amort_pvt.t_life_in_months(i);
5524 
5525          l_dpr_in.rsv_known_flag := TRUE;
5526          l_dpr_in.salvage_value := fa_amort_pvt.t_salvage_value(i);
5527 
5528          l_dpr_in.adj_rec_cost := fa_amort_pvt.t_adjusted_recoverable_cost(i);
5529          l_dpr_in.prior_fy_exp := 0;                 -- This needs to be 0 for this faxcde call
5530 
5531          l_dpr_in.short_fiscal_year_flag := fa_amort_pvt.t_short_fiscal_year_flag(i);
5532 
5533          l_dpr_in.old_adj_cost := fa_amort_pvt.t_adjusted_cost(i);
5534          l_dpr_in.formula_factor := fa_amort_pvt.t_formula_factor(i);
5535 
5536          l_dpr_in.super_group_id := fa_amort_pvt.t_super_group_id(i);
5537          l_dpr_in.over_depreciate_option := fa_amort_pvt.t_over_depreciate_option(i);
5538 
5539          --
5540          -- These values are not stored in Books_Summary since these value won't be
5541          -- Changed over periods.
5542          --
5543          l_dpr_in.tracking_method := px_asset_fin_rec_new.tracking_method;
5544          l_dpr_in.allocate_to_fully_ret_flag := px_asset_fin_rec_new.allocate_to_fully_ret_flag;
5545          l_dpr_in.allocate_to_fully_rsv_flag := px_asset_fin_rec_new.allocate_to_fully_rsv_flag;
5546          l_dpr_in.excess_allocation_option := px_asset_fin_rec_new.excess_allocation_option;
5547          l_dpr_in.depreciation_option := px_asset_fin_rec_new.depreciation_option;
5548          l_dpr_in.member_rollup_flag := px_asset_fin_rec_new.member_rollup_flag;
5549          l_dpr_in.mrc_sob_type_code := p_mrc_sob_type_code;
5550          l_dpr_in.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
5551 
5552          --
5553          -- There is no plane to store following variables in books summary now
5554          -- so copy value from fin_rec_new
5558 
5555          l_dpr_in.pc_life_end := px_asset_fin_rec_new.period_counter_life_complete;
5556          l_dpr_in.conversion_date := px_asset_fin_rec_new.conversion_date;
5557 
5559          --
5560          -- Following may needed to be added and implemented in Books Summary
5561          -- 'ADJ' for now
5562          --
5563          l_dpr_in.deprn_rounding_flag := 'ADJ';
5564 
5565 
5566          l_dpr_in.deprn_override_flag := p_trans_rec.deprn_override_flag;
5567          l_dpr_in.used_by_adjustment := TRUE;
5568 
5569 
5570          --
5571          -- Not for what-if yet
5572          --
5573          l_running_mode := fa_std_types.FA_DPR_NORMAL;
5574 
5575 
5576          if (not fa_cache_pkg.fazccmt(
5577                  fa_amort_pvt.t_deprn_method_code(i),
5578                  fa_amort_pvt.t_life_in_months(i),
5579                  p_log_level_rec)) then
5580             if (p_log_level_rec.statement_level) then
5581             fa_debug_pkg.add(l_calling_fn, 'Error calling',
5582                        'fa_cache_pkg.fazccmt', p_log_level_rec => p_log_level_rec);
5583             end if;
5584 
5585             raise calc_failed;
5586          end if;
5587 
5588          if i = 1 then
5589             if not fa_cache_pkg.fazccp(fa_cache_pkg.fazcbc_record.prorate_calendar,
5590                                        fa_cache_pkg.fazcbc_record.fiscal_year_name,
5591                                        l_dpr_in.prorate_jdate,
5592                                        g_temp_number,
5593                                        l_dpr_in.y_begin,
5594                                        g_temp_integer, p_log_level_rec => p_log_level_rec) then
5595                if (p_log_level_rec.statement_level) then
5596                   fa_debug_pkg.add(l_calling_fn, 'Error calling',
5597                                    'fa_cache_pkg.fazccp', p_log_level_rec => p_log_level_rec);
5598                   fa_debug_pkg.add(l_calling_fn, 'fa_cache_pkg.fazcbc_record.prorate_calendar',
5599                                    fa_cache_pkg.fazcbc_record.prorate_calendar, p_log_level_rec => p_log_level_rec);
5600                   fa_debug_pkg.add(l_calling_fn, 'fa_cache_pkg.fazcbc_record.fiscal_year_name',
5601                                    fa_cache_pkg.fazcbc_record.fiscal_year_name, p_log_level_rec => p_log_level_rec);
5602 
5603                end if;
5604 
5605                raise calc_failed;
5606             end if;
5607          end if;
5608 
5609          --
5610          -- Skip faxcde call for raf
5614          -- Bug7487450: Skip hypo reserve calculation if it is UOP
5611          -- If rate source rule is FLAT and depreciable basis is Cost
5612          -- Bug4778244 Added the NVL to avoid condition if(not(null or false)) which will
5613          -- always return NULL in place of FALSE, which is incorrect
5615          if (not (nvl(fa_cache_pkg.fazccmt_record.rate_source_rule, ' ') = fa_std_types.FAD_RSR_PROD)) and
5616             (not (nvl(fa_cache_pkg.fazcdrd_record.subtract_ytd_flag,'N') = 'Y')) and /*bug#15897249 */
5617             (not((nvl(fa_cache_pkg.fazccmt_record.rate_source_rule, ' ') = fa_std_types.FAD_RSR_FLAT) and
5618                  (nvl(fa_cache_pkg.fazccmt_record.deprn_basis_rule,' ') = fa_std_types.FAD_DBR_COST) and
5619                  (nvl(fa_cache_pkg.fazcdbr_record.rule_name, ' ')  in ('PERIOD END BALANCE',
5620                                                                        'PERIOD END AVERAGE',
5621                                                                        'USE RECOVERABLE COST',
5622                                                                        'BEGINNING PERIOD')))) then
5623 
5624          if (fa_amort_pvt.t_reset_adjusted_cost_flag(i) = 'Y') or
5625                      nvl(fa_cache_pkg.fazcdrd_record.period_update_flag,'N') = 'Y' then
5626             if not fa_cache_pkg.fazccp(fa_cache_pkg.fazcbc_record.prorate_calendar,
5627                                        fa_cache_pkg.fazcbc_record.fiscal_year_name,
5628                                        l_dpr_in.prorate_jdate,
5629                                        g_temp_number,
5630                                        l_dpr_in.y_begin,
5631                                        g_temp_integer, p_log_level_rec => p_log_level_rec) then
5632                if (p_log_level_rec.statement_level) then
5633                   fa_debug_pkg.add(l_calling_fn, 'Error calling',
5634                                    'fa_cache_pkg.fazccp', p_log_level_rec => p_log_level_rec);
5635                   fa_debug_pkg.add(l_calling_fn, 'fa_cache_pkg.fazcbc_record.prorate_calendar',
5636                                    fa_cache_pkg.fazcbc_record.prorate_calendar, p_log_level_rec => p_log_level_rec);
5637                   fa_debug_pkg.add(l_calling_fn, 'fa_cache_pkg.fazcbc_record.fiscal_year_name',
5641 
5638                                    fa_cache_pkg.fazcbc_record.fiscal_year_name, p_log_level_rec => p_log_level_rec);
5639 
5640                end if;
5642                raise calc_failed;
5643             end if;
5644 
5645             l_dpr_in.p_cl_begin := 1;
5646 
5647             if (fa_amort_pvt.t_period_num(i) = 1) then
5648                l_dpr_in.y_end := fa_amort_pvt.t_fiscal_year(i) - 1;
5649                l_dpr_in.p_cl_end := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
5650             else
5651                l_dpr_in.y_end := fa_amort_pvt.t_fiscal_year(i);
5652                l_dpr_in.p_cl_end := fa_amort_pvt.t_period_num(i) - 1;
5653             end if;
5654 
5655             l_dpr_in.rate_adj_factor := 1;
5656 
5657             -- manual override
5658             if fa_cache_pkg.fa_deprn_override_enabled then
5659 
5660                l_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
5661                l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
5662 
5663                -- update override status only if satisfies condintion,
5664                -- otherwise do not update status when calculating RAF
5665                -- 1. formula; or
5666                -- 2. (calc or table) and cost
5667 
5668                l_dpr_in.update_override_status :=
5669                   ((l_rate_source_rule = fa_std_types.FAD_RSR_FORMULA)
5670                   OR (((l_rate_source_rule = fa_std_types.FAD_RSR_CALC)
5671                   OR (l_rate_source_rule = fa_std_types.FAD_RSR_TABLE))
5672                   AND (l_deprn_basis_rule = fa_std_types.FAD_DBR_COST)));
5673             end if;
5674 
5675             --* HHIRAGA modified on Oct/Nov in 2003.
5676             -- Changed parameter to period counter when the recalculation of
5677             -- RAF needs.
5678             -- This function will populates all member assets to be used to
5679             -- hypothetical allocation internally.
5680             --
5681             --+++++++ Call Tracking Function to populate Member in case ALLOCATE ++++++
5682             if p_asset_type_rec.asset_type = 'GROUP' and
5683                nvl(l_dpr_in.tracking_method,'OTHER') = 'ALLOCATE' then
5684 
5685                l_raf_processed_flag := TRUE;
5686                l_dpr_in.tracking_method := NULL;
5687 
5688 /*
5689                if not FA_TRACK_MEMBER_PVT.get_member_at_start(
5690                        p_period_rec => l_period_rec,
5691                        p_trans_rec => p_trans_rec,
5692                        p_asset_hdr_rec => p_asset_hdr_rec,
5693                        p_asset_fin_rec => px_asset_fin_rec_new,
5694                        p_dpr_in => l_dpr_in,
5695                        p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
5696                   if (p_log_level_rec.statement_level) then
5697                     fa_debug_pkg.add(l_calling_fn, 'Error calling', 'FA_TRACK_MEMBER_PVT.get_member_at_start',  p_log_level_rec => p_log_level_rec);
5698                   end if;
5699 
5700                   raise calc_failed;
5701 
5702                end if;
5703 */
5704             end if; -- nvl(l_dpr_in.tracking_method,'OTHER') = 'ALLOCATE'
5705 
5706             if (p_log_level_rec.statement_level) then
5707                fa_debug_pkg.add(l_calling_fn, '====== ', '==============================', p_log_level_rec => p_log_level_rec);
5708                fa_debug_pkg.add(l_calling_fn, ' Call ', 'FA_CDE_PKG.faxcde', p_log_level_rec => p_log_level_rec);
5709             end if;
5710 
5711             --+++++++ Call Depreciation engine for rate adjustment factor +++++++
5712             if not FA_CDE_PKG.faxcde(l_dpr_in,
5713                                      l_dpr_arr,
5714                                      l_dpr_out,
5715                                      l_running_mode, p_log_level_rec => p_log_level_rec) then
5716                if (p_log_level_rec.statement_level) then
5717                   fa_debug_pkg.add(l_calling_fn, 'Error calling',
5718                        'FA_CDE_PKG.faxcde', p_log_level_rec => p_log_level_rec);
5719                end if;
5720 
5721                raise calc_failed;
5722             end if;
5723 
5724             if (p_log_level_rec.statement_level) then
5725                fa_debug_pkg.add(l_calling_fn, 'l_dpr_out.new_deprn_rsv',
5726                           l_dpr_out.new_deprn_rsv, p_log_level_rec => p_log_level_rec);
5727                fa_debug_pkg.add(l_calling_fn, '====== ', '==============================', p_log_level_rec => p_log_level_rec);
5728             end if;
5729 
5730             -- manual override
5731             if fa_cache_pkg.fa_deprn_override_enabled then
5732                if l_dpr_in.update_override_status then
5736                end if;
5733                   p_trans_rec.deprn_override_flag := l_dpr_out.deprn_override_flag;
5734                else
5735                   p_trans_rec.deprn_override_flag := fa_std_types.FA_NO_OVERRIDE;
5737             end if;
5738 
5739             l_asset_fin_rec_new.adjusted_cost := l_dpr_out.new_adj_cost;
5740             l_asset_fin_rec_new.reval_amortization_basis := l_dpr_out.new_reval_amo_basis;
5741             l_asset_deprn_rec_raf.deprn_reserve := l_dpr_out.new_deprn_rsv;
5742             l_asset_deprn_rec_raf.reval_deprn_reserve := l_dpr_out.new_reval_rsv;
5743             l_asset_fin_rec_new.adjusted_capacity := l_asset_fin_rec_new.production_capacity -
5744                                    l_dpr_out.new_ltd_prod;
5745             l_asset_deprn_rec_raf.ltd_production := l_dpr_out.new_ltd_prod;
5746             l_asset_deprn_rec_raf.prior_fy_expense := l_dpr_out.new_prior_fy_exp;
5747             l_asset_deprn_rec_raf.bonus_deprn_amount := l_dpr_out.bonus_deprn_exp;
5748             l_asset_deprn_rec_raf.bonus_deprn_reserve := l_dpr_out.new_bonus_deprn_rsv;
5749             l_asset_deprn_rec_raf.impairment_amount := l_dpr_out.impairment_exp;
5750             l_asset_deprn_rec_raf.impairment_reserve := l_dpr_out.new_impairment_rsv;
5751             l_asset_deprn_rec_raf.prior_fy_bonus_expense := l_dpr_out.new_prior_fy_bonus_exp;
5752 
5753             -- HHIRAGA
5754             --++++++++ Tracking=ALLOCATE case ++++++++++++++
5755             if (l_raf_processed_flag) then
5756                l_dpr_in.tracking_method := 'ALLOCATE';
5757                l_raf_processed_flag := FALSE;
5758             end if;
5759 
5760             if nvl(l_dpr_in.tracking_method,'OTHER') = 'ALLOCATE' then
5761 
5762                fa_track_member_pvt.p_track_member_table.delete;
5763                fa_track_member_pvt.p_track_mem_index_table.delete;
5764 
5765                if (p_log_level_rec.statement_level) then
5766                   fa_debug_pkg.add(l_calling_fn, 'fa_track_member_pvt.p_track_member_table',
5767                                'deleted',  p_log_level_rec => p_log_level_rec);
5768                end if;
5769             end if;
5770          end if;
5771 
5772          else
5773             --bug#15897249 added if condition
5774             if ((not l_prev_adj_cost_flag) or (fa_amort_pvt.t_reset_adjusted_cost_flag(i) = 'Y') or
5775                 nvl(fa_cache_pkg.fazcdrd_record.period_update_flag,'N') = 'Y' or
5776                 l_asset_fin_rec_new.adjusted_cost is null
5777                 ) then
5778                l_asset_fin_rec_new.adjusted_cost := l_asset_fin_rec_new.recoverable_cost;
5779             end if;
5780          end if; ---- skip faxcde call for raf
5781 
5782 
5783          if (p_log_level_rec.statement_level) then
5784             fa_debug_pkg.add(l_calling_fn, '====== ', '==============================', p_log_level_rec => p_log_level_rec);
5785             fa_debug_pkg.add(l_calling_fn, ' Call ',
5786                        'FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS', p_log_level_rec => p_log_level_rec);
5787             fa_debug_pkg.add(l_calling_fn, 'p_trans_rec.transaction_type_code',
5788                        p_trans_rec.transaction_type_code, p_log_level_rec => p_log_level_rec);
5789             fa_debug_pkg.add(l_calling_fn, 'l_trans_rec.transaction_type_code',
5790                        l_trans_rec.transaction_type_code, p_log_level_rec => p_log_level_rec);
5791             fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.eofy_reserve',
5792                        l_asset_fin_rec_new.eofy_reserve, p_log_level_rec => p_log_level_rec);
5793             fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec.deprn_reserve',
5794                        l_asset_deprn_rec.deprn_reserve, p_log_level_rec => p_log_level_rec);
5795             fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec.bonus_deprn_reserve',
5796                        l_asset_deprn_rec.bonus_deprn_reserve, p_log_level_rec => p_log_level_rec);
5797          end if;
5798 
5799             --* HHIRAGA modified on OCT/NOV in 2003
5800             -- Prepare memory table to be able to process depreciation recalculation
5801             -- This function should be called only when memory table has not been populated.
5802             -- if l_processed_flag is FALSE, process this preparation function
5803             if p_asset_type_rec.asset_type = 'GROUP' and
5804                nvl(l_dpr_in.tracking_method,'OTHER') = 'ALLOCATE' then
5805 
5806                l_no_allocation_for_last := 'Y';
5807                if (fa_amort_pvt.t_reset_adjusted_cost_flag(i) = 'Y') and
5808                   (not (l_first_process)
5809                   and p_trans_rec.transaction_type_code = 'GROUP ADDITION') then
5810 
5811                  l_no_allocation_for_last := 'N';
5812                  if fa_amort_pvt.t_period_num(i) = 1 then
5813                    l_recalc_start_fy := fa_amort_pvt.t_fiscal_year(i) - 1;
5814                    l_recalc_start_period_num := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
5815                  else
5816                    l_recalc_start_fy := fa_amort_pvt.t_fiscal_year(i);
5817                    l_recalc_start_period_num := fa_amort_pvt.t_period_num(i) - 1;
5818                  end if;
5819 
5820                  if (p_log_level_rec.statement_level) then
5821                    fa_debug_pkg.add(l_calling_fn, '++++ Call ++++', 'FA_TRACK_MEMBER_PVT.POPULATE_MEMBER_ASSETS_TABLE',  p_log_level_rec => p_log_level_rec);
5822                    fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_reset_adjusted_cost_flag(i)',
5823                                                               fa_amort_pvt.t_reset_adjusted_cost_flag(i));
5827                    fa_debug_pkg.add(l_calling_fn, 'l_old_recalc_end_period_num', l_old_recalc_end_period_num, p_log_level_rec => p_log_level_rec);
5824                    fa_debug_pkg.add(l_calling_fn, 'l_recalc_start_fy', l_recalc_start_fy, p_log_level_rec => p_log_level_rec);
5825                    fa_debug_pkg.add(l_calling_fn, 'l_recalc_start_period_num', l_recalc_start_period_num, p_log_level_rec => p_log_level_rec);
5826                    fa_debug_pkg.add(l_calling_fn, 'l_old_recalc_end_fy', l_old_recalc_end_fy, p_log_level_rec => p_log_level_rec);
5828                  end if;
5829 
5830                  if (nvl(l_old_recalc_end_fy,l_recalc_start_fy) = l_recalc_start_fy and
5831                      nvl(l_old_recalc_end_period_num,l_recalc_start_period_num+1) <> l_recalc_start_period_num) then
5832                    l_backup_processed_flag := FALSE;
5833                  elsif (l_backup_processed_flag) then
5834                    l_recalc_start_fy := fa_amort_pvt.t_fiscal_year(i);
5835                    l_recalc_start_period_num := fa_amort_pvt.t_period_num(i);
5836                  end if;
5837 
5838                else
5839 
5840                    l_recalc_start_fy := fa_amort_pvt.t_fiscal_year(i);
5841                    l_recalc_start_period_num := fa_amort_pvt.t_period_num(i);
5842 
5843                    l_processed_flag := TRUE;
5844                    fa_track_member_pvt.l_process_deprn_for_member := 'NO';
5845 /*
5849 
5846                    l_asset_fin_rec_new.tracking_method := NULL;
5847                    l_asset_fin_rec_old.tracking_method := NULL;
5848 */
5850                   if (p_log_level_rec.statement_level) then
5851                      fa_debug_pkg.add(l_calling_fn, '++++ Call ++++', 'FA_TRACK_MEMBER_PVT.POPULATE_MEMBER_ASSETS_TABLE',  p_log_level_rec => p_log_level_rec);
5852                      fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_reset_adjusted_cost_flag(i)',
5853                                                                fa_amort_pvt.t_reset_adjusted_cost_flag(i));
5854                      fa_debug_pkg.add(l_calling_fn, 'l_recalc_start_fy', l_recalc_start_fy, p_log_level_rec => p_log_level_rec);
5855                      fa_debug_pkg.add(l_calling_fn, 'l_recalc_start_period_num', l_recalc_start_period_num, p_log_level_rec => p_log_level_rec);
5856                      fa_debug_pkg.add(l_calling_fn, 'l_old_recalc_end_fy', l_old_recalc_end_fy, p_log_level_rec => p_log_level_rec);
5857                      fa_debug_pkg.add(l_calling_fn, 'l_old_recalc_end_period_num', l_old_recalc_end_period_num, p_log_level_rec => p_log_level_rec);
5858                   end if;
5859 
5860                  if l_old_recalc_end_fy is not NULL and l_old_recalc_end_period_num is not NULL then
5861                    if l_old_recalc_end_period_num = fa_cache_pkg.fazcct_record.number_per_fiscal_year then
5862                      l_old_recalc_end_fy := l_old_recalc_end_fy + 1;
5863                      l_old_recalc_end_period_num := 1;
5864                    else
5865                      l_old_recalc_end_period_num := l_old_recalc_end_period_num + 1;
5866                    end if;
5867                  end if;
5868 
5869                  if (nvl(l_old_recalc_end_fy,l_recalc_start_fy) = l_recalc_start_fy and
5870                      nvl(l_old_recalc_end_period_num,l_recalc_start_period_num+1) <> l_recalc_start_period_num) then
5871                    l_backup_processed_flag := FALSE;
5872                  end if;
5873 
5874                end if;
5875 
5876                --* Calcualte recalc_start_period_counter
5877                if (l_first_process) then
5878                   l_recalc_start_period_counter := l_recalc_start_fy*(fa_cache_pkg.fazcct_record.number_per_fiscal_year)
5879                                                                                          + l_recalc_start_period_num;
5880 
5881                   if p_mrc_sob_type_code <> 'R' then
5882                     open c_chk_bs_row_exists;
5883                     fetch c_chk_bs_row_exists into l_chk_bs_row_exists;
5884                     if c_chk_bs_row_exists%FOUND then
5885                       if not FA_TRACK_MEMBER_PVT.POPULATE_MEMBER_ASSETS_TABLE
5886                                          (p_trans_rec=>p_trans_rec,
5887                                           p_asset_hdr_rec => p_asset_hdr_rec,
5888                                           p_asset_fin_rec_new => px_asset_fin_rec_new,
5889                                           p_populate_for_recalc_period => 'T',
5890                                           p_amort_start_date => l_transaction_date_entered,
5891                                           p_recalc_start_fy => l_recalc_start_fy,
5892                                           p_recalc_start_period_num => l_recalc_start_period_num,
5893                                           p_no_allocation_for_last => l_no_allocation_for_last,
5894                                           p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
5895                         if (p_log_level_rec.statement_level) then
5896                           fa_debug_pkg.add(l_calling_fn, 'Error calling', 'POPULATE_MEMBER_ASSETS_TABLE', p_log_level_rec => p_log_level_rec);
5897                         end if;
5898                         raise calc_failed;
5899                       end if;
5900                     else
5901                       if not FA_TRACK_MEMBER_PVT.POPULATE_MEMBER_ASSETS_TABLE
5902                                          (p_trans_rec=>p_trans_rec,
5903                                           p_asset_hdr_rec => p_asset_hdr_rec,
5904                                           p_asset_fin_rec_new => px_asset_fin_rec_new,
5905                                           p_amort_start_date => l_transaction_date_entered,
5906                                           p_recalc_start_fy => l_recalc_start_fy,
5907                                           p_recalc_start_period_num => l_recalc_start_period_num,
5908                                           p_no_allocation_for_last => l_no_allocation_for_last,
5909                                           p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
5910                         if (p_log_level_rec.statement_level) then
5911                           fa_debug_pkg.add(l_calling_fn, 'Error calling', 'POPULATE_MEMBER_ASSETS_TABLE', p_log_level_rec => p_log_level_rec);
5912                         end if;
5913                         raise calc_failed;
5914                       end if;
5915                     end if;
5916                     close c_chk_bs_row_exists;
5917 
5918                   else -- MRC
5919 
5920                     open c_chk_bs_row_exists_mrc;
5921                     fetch c_chk_bs_row_exists_mrc into l_chk_bs_row_exists;
5922                     if c_chk_bs_row_exists_mrc%FOUND then
5923                       if not FA_TRACK_MEMBER_PVT.POPULATE_MEMBER_ASSETS_TABLE
5924                                          (p_trans_rec=>p_trans_rec,
5925                                           p_asset_hdr_rec => p_asset_hdr_rec,
5926                                           p_asset_fin_rec_new => px_asset_fin_rec_new,
5927                                           p_populate_for_recalc_period => 'T',
5928                                           p_amort_start_date => l_transaction_date_entered,
5929                                           p_recalc_start_fy => l_recalc_start_fy,
5930                                           p_recalc_start_period_num => l_recalc_start_period_num,
5934                           fa_debug_pkg.add(l_calling_fn, 'Error calling', 'POPULATE_MEMBER_ASSETS_TABLE', p_log_level_rec => p_log_level_rec);
5931                                           p_no_allocation_for_last => l_no_allocation_for_last,
5932                                           p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
5933                         if (p_log_level_rec.statement_level) then
5935                         end if;
5936                         raise calc_failed;
5937                       end if;
5938                     else
5939                       if not FA_TRACK_MEMBER_PVT.POPULATE_MEMBER_ASSETS_TABLE
5940                                          (p_trans_rec=>p_trans_rec,
5941                                           p_asset_hdr_rec => p_asset_hdr_rec,
5942                                           p_asset_fin_rec_new => px_asset_fin_rec_new,
5943                                           p_amort_start_date => l_transaction_date_entered,
5944                                           p_recalc_start_fy => l_recalc_start_fy,
5945                                           p_recalc_start_period_num => l_recalc_start_period_num,
5946                                           p_no_allocation_for_last => l_no_allocation_for_last,
5947                                           p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
5948                         if (p_log_level_rec.statement_level) then
5949                           fa_debug_pkg.add(l_calling_fn, 'Error calling', 'POPULATE_MEMBER_ASSETS_TABLE', p_log_level_rec => p_log_level_rec);
5950                         end if;
5951                         raise calc_failed;
5952                       end if;
5953                     end if;
5954                     close c_chk_bs_row_exists_mrc;
5955                    end if; -- MRC or Primary
5956                   l_old_recalc_start_fy := l_recalc_start_fy;
5957                   l_old_recalc_start_period_num := l_recalc_start_period_num;
5958 
5959                else
5960 
5961                  l_old_recalc_start_fy := l_recalc_start_fy;
5962                  l_old_recalc_start_period_num := l_recalc_start_period_num;
5963 
5964                  if not (l_backup_processed_flag) then
5965                    if not FA_TRACK_MEMBER_PVT.POPULATE_MEMBER_ASSETS_TABLE
5966                                          (p_trans_rec=>p_trans_rec,
5967                       p_asset_hdr_rec => p_asset_hdr_rec,
5968                                           p_asset_fin_rec_new => px_asset_fin_rec_new,
5969                                           p_amort_start_date => l_transaction_date_entered,
5970                                           p_recalc_start_fy => l_recalc_start_fy,
5971                                           p_recalc_start_period_num => l_recalc_start_period_num,
5972                                           p_no_allocation_for_last => l_no_allocation_for_last,
5973                                           p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
5974                      if (p_log_level_rec.statement_level) then
5975                        fa_debug_pkg.add(l_calling_fn, 'Error calling', 'POPULATE_MEMBER_ASSETS_TABLE', p_log_level_rec => p_log_level_rec);
5976                      end if;
5977                      raise calc_failed;
5978                    end if;
5979 
5980                  else
5981 
5982                    if (p_log_level_rec.statement_level) then
5983                      fa_debug_pkg.add(l_calling_fn, '##### bakcup table counter #####',
5984                                 fa_track_member_pvt.p_track_member_table_for_deprn.COUNT,  p_log_level_rec => p_log_level_rec);
5985                    end if;
5986 
5987                    if not FA_TRACK_MEMBER_PVT.copy_member_table(p_backup_restore => 'RESTORE', p_log_level_rec => p_log_level_rec) then
5988                      if (p_log_level_rec.statement_level) then
5989                        fa_debug_pkg.add(l_calling_fn, 'Error calling', 'COPY_MEMBER_TABLE', p_log_level_rec => p_log_level_rec);
5990                      end if;
5991                      raise calc_failed;
5992                    end if;
5993 
5994                    --* Calculate only for this period
5995                    if not FA_TRACK_MEMBER_PVT.POPULATE_MEMBER_ASSETS_TABLE
5996                                          (p_trans_rec=>p_trans_rec,
5997                       p_asset_hdr_rec => p_asset_hdr_rec,
5998                                           p_asset_fin_rec_new => px_asset_fin_rec_new,
5999                                           p_populate_for_recalc_period => 'Y',
6000                                           p_amort_start_date => l_transaction_date_entered,
6001                                           p_recalc_start_fy => l_recalc_start_fy,
6002                                           p_recalc_start_period_num => l_recalc_start_period_num,
6003                                           p_no_allocation_for_last => 'Y',
6004                                           p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
6005                    if (p_log_level_rec.statement_level) then
6006                      fa_debug_pkg.add(l_calling_fn, 'Error calling', 'POPULATE_MEMBER_ASSETS_TABLE', p_log_level_rec => p_log_level_rec);
6007                    end if;
6008                    raise calc_failed;
6009                  end if;
6010 
6011                  l_processed_flag := TRUE;
6012                  fa_track_member_pvt.l_process_deprn_for_member := 'NO';
6013 
6014                end if; -- IF not (l_backup_processed_flag)
6015 
6016              end if;  -- l_first_process_flag
6017 
6018              if (l_first_process) then
6019                l_first_process := FALSE;
6020              end if;
6021 
6022 
6023             end if; -- HHIRAGA if-statement
6024 
6025    --
6026    -- From old fin rec followings are necessary
6027    -- formula_factor
6028    -- rate_adjustment_factor
6029    -- adjusted_cost
6030    -- cost
6031    --
6032    -- From new fin rec followings are necessary
6036    -- depreciate_flag
6033    -- Method
6034    -- life
6035    -- group asset id
6037    -- cost
6038    -- salvage_value
6039    -- recoverable_cost
6040    -- reduction_rate
6041    -- eofy_reserve
6042    -- recognize_gain_loss
6043    -- tracking_method
6044    -- allocate_to_fully_rsv_flag
6045    -- allocate_to_fully_ret_flag
6046    -- excess_allocation_option
6047    -- depreciation_option
6048    -- member_rollup_flag
6049 
6050       if (fa_cache_pkg.fazcdbr_record.rule_name = 'ENERGY PERIOD END BALANCE') and
6051          (p_asset_fin_rec_old.tracking_method = 'ALLOCATE') and
6052          (p_trans_rec.transaction_key = 'MS') then
6053          l_reserve_retired := 0;
6054       end if;
6055 
6056          --
6057          -- reset_adjusted_cost_flag can be no or null in case
6058          -- this is reclass source group.
6059          -- otherwise, deprn basis rule function gets called all the time
6060          -- if process reaches here.
6061          -- Bug7487450: need to call below if deprn basis is period update
6062          --
6063          if (fa_amort_pvt.t_reset_adjusted_cost_flag(i) = 'Y') or
6064             nvl(fa_cache_pkg.fazcdrd_record.period_update_flag,'N') = 'Y' then
6065             if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
6066                                 (p_event_type             => 'AMORT_ADJ',
6067                                  p_asset_fin_rec_new      => l_asset_fin_rec_new,
6068                                  p_asset_fin_rec_old      => l_asset_fin_rec_old,
6069                                  p_asset_hdr_rec          => p_asset_hdr_rec,
6070                                  p_asset_type_rec         => p_asset_type_rec,
6071                                  p_asset_deprn_rec        => l_asset_deprn_rec,
6072                                  p_trans_rec              => p_trans_rec,
6073                                  p_trans_rec_adj          => l_trans_rec,
6074                                  p_period_rec             => l_period_rec,
6075                                  p_current_total_rsv      => l_asset_deprn_rec.deprn_reserve,
6076                                  p_current_rsv            => l_asset_deprn_rec.deprn_reserve -
6077                                                              nvl(l_asset_deprn_rec.bonus_deprn_reserve, 0) - nvl(l_asset_deprn_rec.impairment_reserve, 0),
6078                                  p_current_total_ytd      => l_asset_deprn_rec.ytd_deprn,
6079                                  p_adj_reserve            => p_asset_deprn_rec_adj.deprn_reserve,
6080                                  p_reserve_retired        => l_reserve_retired,
6081                                  p_hyp_basis              => l_asset_fin_rec_new.adjusted_cost,
6082                                  p_hyp_total_rsv          => l_asset_deprn_rec_raf.deprn_reserve,
6083                                  p_hyp_rsv                => l_asset_deprn_rec_raf.deprn_reserve -
6084                                                              nvl(l_asset_deprn_rec_raf.bonus_deprn_reserve, 0) - nvl(l_asset_deprn_rec_raf.impairment_reserve,0),
6085                                  p_eofy_recoverable_cost  => l_eofy_rec_cost,
6086                                  p_eop_recoverable_cost   => l_eop_rec_cost,
6087                                  p_eofy_salvage_value     => l_eofy_sal_val,
6088                                  p_eop_salvage_value      => l_eop_sal_val,
6089                                  p_mrc_sob_type_code      => p_mrc_sob_type_code,
6090                                  p_used_by_adjustment     => 'ADJUSTMENT',
6091                                  px_new_adjusted_cost     => l_asset_fin_rec_new.adjusted_cost,
6092                                  px_new_raf               => l_asset_fin_rec_new.rate_adjustment_factor,
6093                                  px_new_formula_factor    => l_asset_fin_rec_new.formula_factor,
6094                                  p_log_level_rec       => p_log_level_rec)) then
6095                if (p_log_level_rec.statement_level) then
6096                   fa_debug_pkg.add(l_calling_fn, 'Error calling',
6097                                    'FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS', p_log_level_rec => p_log_level_rec);
6098                end if;
6099 
6100                raise calc_failed;
6101             end if;
6102 
6103             fa_amort_pvt.t_adjusted_cost(i) := l_asset_fin_rec_new.adjusted_cost;
6104             fa_amort_pvt.t_rate_adjustment_factor(i) := l_asset_fin_rec_new.rate_adjustment_factor;
6105             fa_amort_pvt.t_formula_factor(i) := l_asset_fin_rec_new.formula_factor;
6106 
6107             if (p_log_level_rec.statement_level) then
6108                fa_debug_pkg.add(l_calling_fn, 'Returned values from ',
6109                                 'FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS', p_log_level_rec => p_log_level_rec);
6110                fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.adjusted_cost',
6111                                 l_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
6112                fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.rate_adjustment_factor',
6113                                 l_asset_fin_rec_new.rate_adjustment_factor, p_log_level_rec => p_log_level_rec);
6114                fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.formula_factor',
6115                                 l_asset_fin_rec_new.formula_factor, p_log_level_rec => p_log_level_rec);
6116                fa_debug_pkg.add(l_calling_fn, '====== ', '==============================', p_log_level_rec => p_log_level_rec);
6117             end if;
6118          else
6119             --
6120             -- Adjusted_cost and formula_factor are setup in last faxcde call so skipping
6121             -- deprn basis call should require no action
6122             --
6123             fa_amort_pvt.t_rate_adjustment_factor(i) := fa_amort_pvt.t_rate_adjustment_factor(i-1);
6124          end if;
6125 
6126          --* HHIRAGA - Tracking Test
6127 
6128          if (l_processed_flag) then
6129            fa_track_member_pvt.l_process_deprn_for_member := 'YES';
6130            l_processed_flag := FALSE;
6134          -- Now this is current period, so don't need to run depreciation
6131          end if;
6132 
6133          --
6135          --
6136 --tk_util.debug('l_count - l_bs_ind + 1: '||to_char(l_count - l_bs_ind + 1)||':'||to_char(i));
6137 
6138          if (fa_amort_pvt.t_period_counter(i) = p_period_rec.period_counter) then
6139 
6140 --tk_util.debug('Exit');
6141             EXIT;
6142          end if;
6143 
6144          --
6145          -- Run Depreciation if:
6146          --  - next available transaction (in table) is NOT the same period
6147          --  - This is the last transaction to recalculate which is not in
6148          --    current period.
6149          --  - This is the last trnsaction because of the limit specified
6150          --    at BULK fetch above. (Inside of following if clause, try to get
6151          --    next transaction from database and determine if depreciation needs
6152          --    to be called or not.
6153          --
6154 --tk_util.debug('l_period_rec.period_counter: '||to_char(l_period_rec.period_counter));
6155 --tk_util.debug('fa_amort_pvt.t_period_counter: '||to_char(fa_amort_pvt.t_period_counter(i)));
6156 
6157 --         if (p_period_rec.period_counter <> fa_amort_pvt.t_period_counter(i)) or
6158 --            (px_asset_fin_rec_new.depreciate_flag = 'NO' or
6159 --             px_asset_fin_rec_new.disabled_flag = 'Y') then
6160 
6161          if (p_period_rec.period_counter <> fa_amort_pvt.t_period_counter(i)) and
6162             (not (fa_amort_pvt.t_depreciate_flag(i) = 'NO' or
6163                   nvl(px_asset_fin_rec_new.disabled_flag, 'N') = 'Y')) then
6164 
6165             if (p_log_level_rec.statement_level) then
6166                fa_debug_pkg.add(l_calling_fn, 'Run Depreciation ', i, p_log_level_rec => p_log_level_rec);
6167                fa_debug_pkg.add(l_calling_fn, 'l_period_rec.period_counter',
6168                                 l_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
6169                fa_debug_pkg.add(l_calling_fn, 'p_period_rec.period_counter',
6170                                 p_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
6171             end if;
6172 
6173             -- look for next period which requires adjusted_cost reset.
6174             -- Find out the period and run depreciation a period before the
6175             -- found period.  If there isn't one, run depreciation until the end
6176             l_adjusted_ind := 0;
6177 
6178 --tk_util.debug('i and count: '||to_char(i)||':'||to_char(l_count));
6179 
6180             --
6181             -- In case of destination asset for reclass transaction, this loop needs to find
6182             -- the period which will have t_reset_adjusted_cost_flag = 'Y' but not reflected
6183             -- yet.
6184             e := d;
6185             if (p_reclass_src_dest = 'DESTINATION') then
6186                FOR j in (i + 1)..(l_count) LOOP
6187                   l_adjusted_ind := l_adjusted_ind + 1;
6188                   e := e + 1;
6189 
6190 --tk_util.debug('reset_adjusted_cost_flag: '||fa_amort_pvt.t_reset_adjusted_cost_flag(j));
6191 --tk_util.debug('cost(e):salvage_value(e):cip_cost(e):deprn_limit_amount(e):'||to_char(td_cost(e))||':'||to_char(td_salvage_value(e))||':'||to_char(td_cip_cost(e))||':'||to_char(td_deprn_limit_amount(e)));
6192 
6193                   --
6194                   -- Needed to use (e - 1) for sal and limit because delta table
6195                   -- contains actual amounts for these values since there is no chagne
6196                   -- in columns for these values.
6197                   --
6198                   if (fa_amort_pvt.t_reset_adjusted_cost_flag(j) = 'Y') or
6199                      (j = (l_count)) or
6200                      (td_cost(e) <> 0) or
6201                      ((td_salvage_value(e) - td_salvage_value(e - 1)) <> 0) or
6202                      (td_cip_cost(e) <> 0) or
6203                      ((td_deprn_limit_amount(e) - td_deprn_limit_amount(e - 1)) <> 0) then
6204 
6205                      if (fa_amort_pvt.t_period_num(j) = 1) then
6206                         l_fiscal_year := fa_amort_pvt.t_fiscal_year(j) - 1;
6207                         l_period_num := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
6208                      else
6209                         l_fiscal_year := fa_amort_pvt.t_fiscal_year(j);
6210                         l_period_num := fa_amort_pvt.t_period_num(j) - 1;
6211                      end if;
6212 
6213                      l_period_counter := fa_amort_pvt.t_period_counter(j) - 1;
6214                      EXIT;
6215                   end if;
6216 
6217                END LOOP;
6218             else
6219                FOR j in (i + 1)..(l_count) LOOP
6220                   l_adjusted_ind := l_adjusted_ind + 1;
6221 
6222 --tk_util.debug('reset_adjusted_cost_flag: '||fa_amort_pvt.t_reset_adjusted_cost_flag(j));
6223 
6224                   if (fa_amort_pvt.t_reset_adjusted_cost_flag(j) = 'Y') or
6225                      (j = (l_count)) then
6226                      if (fa_amort_pvt.t_period_num(j) = 1) then
6227                         l_fiscal_year := fa_amort_pvt.t_fiscal_year(j) - 1;
6228                         l_period_num := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
6229                      else
6230                         l_fiscal_year := fa_amort_pvt.t_fiscal_year(j);
6231                         l_period_num := fa_amort_pvt.t_period_num(j) - 1;
6232                      end if;
6233 
6234                      l_period_counter := fa_amort_pvt.t_period_counter(j) - 1;
6235                      EXIT;
6236                   end if;
6237 
6238                END LOOP;
6239             end if;
6240 --tk_util.debug('fy:pn: '||to_char(l_fiscal_year)||':'||to_char(l_period_num));
6241 
6242             --
6243             -- Prepare Running Depreciation
6244             --
6245             l_dpr_in.y_begin := fa_amort_pvt.t_fiscal_year(i);
6246             l_dpr_in.p_cl_begin := fa_amort_pvt.t_period_num(i);
6250             -- HHIRAGA set loop ended period
6247             l_dpr_in.y_end := l_fiscal_year;
6248             l_dpr_in.p_cl_end := l_period_num;
6249 
6251             l_old_recalc_end_fy := l_dpr_in.y_end;
6252             l_old_recalc_end_period_num := l_dpr_in.p_cl_end;
6253             --
6254 
6255             if (p_log_level_rec.statement_level) then
6256                fa_debug_pkg.add(l_calling_fn, 'Depreciation starts from period of ', l_dpr_in.p_cl_begin, p_log_level_rec => p_log_level_rec);
6257                fa_debug_pkg.add(l_calling_fn, 'and year of ', l_dpr_in.y_begin, p_log_level_rec => p_log_level_rec);
6258                fa_debug_pkg.add(l_calling_fn, 'Depreciation will end at period of ', l_dpr_in.p_cl_end, p_log_level_rec => p_log_level_rec);
6259                fa_debug_pkg.add(l_calling_fn, 'and year of ', l_dpr_in.y_end, p_log_level_rec => p_log_level_rec);
6260             end if;
6261 
6262             if (fa_amort_pvt.t_period_num(i) <> 1) then
6263                l_dpr_in.deprn_rounding_flag := 'ADJ';
6264             end if;
6265 
6266             l_dpr_in.prior_fy_exp := l_asset_deprn_rec.prior_fy_expense;
6267             l_dpr_in.ytd_deprn := l_asset_deprn_rec.ytd_deprn;
6268             l_dpr_in.deprn_rsv := l_asset_deprn_rec.deprn_reserve;
6269             l_dpr_in.adj_cost := l_asset_fin_rec_new.adjusted_cost;
6270             l_dpr_in.eofy_reserve := l_asset_fin_rec_new.eofy_reserve;
6271             l_dpr_in.rate_adj_factor := l_asset_fin_rec_new.rate_adjustment_factor;
6272             l_dpr_in.formula_factor := l_asset_fin_rec_new.formula_factor;
6273             l_dpr_in.super_group_id := l_asset_fin_rec_new.super_group_id;
6274 --tk_util.debug('l_dpr_in.super_group_id: '||to_char(l_dpr_in.super_group_id));
6275             l_dpr_in.cost := l_asset_fin_rec_new.cost;
6276 
6277            l_dpr_in.mrc_sob_type_code := p_mrc_sob_type_code;
6278            l_dpr_in.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
6279 
6280             -- manual override
6281             if fa_cache_pkg.fa_deprn_override_enabled then
6282                l_dpr_in.update_override_status := TRUE;
6283             end if;
6284 
6285             --
6286             -- Running Depreciation
6287             --
6288    --tk_util.debug('i: '||to_char(i));
6289 
6290             if not FA_CDE_PKG.faxcde(l_dpr_in,
6291                                      l_dpr_arr,
6292                                      l_dpr_out,
6293                                      l_running_mode,
6294                                      i, p_log_level_rec => p_log_level_rec) then
6295                if (p_log_level_rec.statement_level) then
6296                   fa_debug_pkg.add(l_calling_fn, 'Error calling',
6297                                    'FA_CDE_PKG.faxcde', p_log_level_rec => p_log_level_rec);
6298                end if;
6299 
6300                raise calc_failed;
6301             end if;
6302 
6303             if (p_log_level_rec.statement_level) then
6304                fa_debug_pkg.add(l_calling_fn, 'l_dpr_out.new_ytd_deprn',
6305                                 l_dpr_out.new_ytd_deprn, p_log_level_rec => p_log_level_rec);
6306                fa_debug_pkg.add(l_calling_fn, 'l_dpr_out.new_deprn_rsv',
6307                                 l_dpr_out.new_deprn_rsv, p_log_level_rec => p_log_level_rec);
6308             end if;
6309 
6310             -- manual override
6311             if fa_cache_pkg.fa_deprn_override_enabled then
6312                p_trans_rec.deprn_override_flag := l_dpr_out.deprn_override_flag;
6313             end if;
6314 
6315             if (l_asset_fin_rec_new.adjusted_cost <> 0) or
6316                (l_dpr_out.new_adj_cost <> 0) then
6317                l_asset_fin_rec_new.reval_amortization_basis := l_dpr_out.new_reval_amo_basis;
6318                l_asset_deprn_rec.deprn_reserve := l_dpr_out.new_deprn_rsv;
6319                l_asset_deprn_rec.ytd_deprn := l_dpr_out.new_ytd_deprn;
6320                l_asset_deprn_rec.reval_deprn_reserve := l_dpr_out.new_reval_rsv;
6321                l_asset_fin_rec_new.adjusted_capacity := l_dpr_out.new_adj_capacity;
6322                l_asset_deprn_rec.ltd_production := l_dpr_out.new_ltd_prod;
6323                l_asset_fin_rec_new.eofy_reserve := l_dpr_out.new_eofy_reserve;
6324 
6325                l_asset_deprn_rec.prior_fy_expense := l_dpr_out.new_prior_fy_exp;
6326                l_asset_deprn_rec.bonus_deprn_amount := l_dpr_out.bonus_deprn_exp;
6327                l_asset_deprn_rec.bonus_deprn_reserve := l_dpr_out.new_bonus_deprn_rsv;
6328                l_asset_deprn_rec.prior_fy_bonus_expense := l_dpr_out.new_prior_fy_bonus_exp;
6329                l_asset_deprn_rec.impairment_amount := l_dpr_out.impairment_exp;
6330                l_asset_deprn_rec.impairment_reserve := l_dpr_out.new_impairment_rsv;
6331 
6332             end if;
6333 
6334             --++++++ Put adjusted cost back ++++++
6335             l_asset_fin_rec_new.adjusted_cost := l_dpr_out.new_adj_cost;
6336             l_asset_fin_rec_new.adjusted_cost := l_dpr_out.new_adj_cost;
6337 
6338             l_out_deprn_exp := l_dpr_out.deprn_exp;
6339             l_out_reval_exp := l_dpr_out.reval_exp;
6340             l_out_reval_amo := l_dpr_out.reval_amo;
6341             l_out_prod := l_dpr_out.prod;
6342             l_out_ann_adj_exp := l_dpr_out.ann_adj_exp;
6343             l_out_ann_adj_reval_exp := l_dpr_out.ann_adj_reval_exp;
6344             l_out_ann_adj_reval_amo := l_dpr_out.ann_adj_reval_amo;
6345             l_out_bonus_rate_used := l_dpr_out.bonus_rate_used;
6346             l_out_full_rsv_flag := l_dpr_out.full_rsv_flag;
6347             l_out_life_comp_flag := l_dpr_out.life_comp_flag;
6348             l_out_deprn_override_flag := l_dpr_out.deprn_override_flag;
6349 
6350             l_eop_rec_cost := l_asset_fin_rec_new.recoverable_cost;
6351             l_eop_sal_val := l_asset_fin_rec_new.salvage_value;
6352 
6353             -- HHIRAGA
6354             --+++++++++ Call member level maintenance for tracking +++++++
6358                                                           p_dpr_in => l_dpr_in,
6355             if nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE' then
6356 
6357                if not FA_TRACK_MEMBER_PVT.member_eofy_rsv(p_asset_hdr_rec => p_asset_hdr_rec,
6359                                                           p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
6360                   if (p_log_level_rec.statement_level) then
6361                      fa_debug_pkg.add(l_calling_fn, 'Error calling',
6362                                       'FA_TRACK_MEMBER_PVT.member_eofy_rsv',  p_log_level_rec => p_log_level_rec);
6363                   end if;
6364 
6365                   raise calc_failed;
6366 
6367                end if;
6368 
6369               if (p_log_level_rec.statement_level) then
6370                  fa_debug_pkg.add(l_calling_fn, '###### Copy to backup #######',
6371                                  fa_track_member_pvt.p_track_member_table.COUNT,  p_log_level_rec => p_log_level_rec);
6372               end if;
6373 
6374                if (p_log_level_rec.statement_level) then
6375                  fa_debug_pkg.add(l_calling_fn, '##### bakcup table counter #####',
6376                                 fa_track_member_pvt.p_track_member_table_for_deprn.COUNT,  p_log_level_rec => p_log_level_rec);
6377                end if;
6378 
6379                  if not FA_TRACK_MEMBER_PVT.copy_member_table(p_backup_restore => 'BACKUP',
6380                                                               p_current_fiscal_year => l_dpr_in.y_begin,
6381                                                               p_current_period_num => l_dpr_in.p_cl_begin, p_log_level_rec => p_log_level_rec) then
6382                    if (p_log_level_rec.statement_level) then
6383                      fa_debug_pkg.add(l_calling_fn, 'Error calling', 'COPY_MEMBER_TABLE', p_log_level_rec => p_log_level_rec);
6384                    end if;
6385                    raise calc_failed;
6386                  end if;
6387               l_backup_processed_flag := TRUE;
6388 
6389               if (p_log_level_rec.statement_level) then
6390                  fa_debug_pkg.add(l_calling_fn, '++++ FA_TRACK_MEMBER_PVT.MEMBER_EOFY_RSV +++', '++++',  p_log_level_rec => p_log_level_rec);
6391                  fa_debug_pkg.add(l_calling_fn, 'Copied p_track_member_table to bakcup area', '++++', p_log_level_rec => p_log_level_rec);
6392               end if;
6393 
6394             end if; -- nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE'
6395             -- End of HHIRAGA
6396 
6397             if (p_log_level_rec.statement_level) then
6398                fa_debug_pkg.add('    '||l_calling_fn, 'ytd_deprn', l_asset_deprn_rec.ytd_deprn, p_log_level_rec => p_log_level_rec);
6399                fa_debug_pkg.add('    '||l_calling_fn, 'deprn_reserve', l_asset_deprn_rec.deprn_reserve, p_log_level_rec => p_log_level_rec);
6400             end if;
6401 
6402 --tk_util.debug('l_adjusted_ind: '||to_char(l_adjusted_ind));
6403             l_bs_ind := l_bs_ind + l_adjusted_ind;
6404 
6405          else
6406 
6407             l_asset_deprn_rec.ytd_deprn := fa_amort_pvt.t_ytd_deprn(i);
6408             l_asset_deprn_rec.deprn_reserve := fa_amort_pvt.t_deprn_reserve(i);
6409             l_asset_deprn_rec.bonus_ytd_deprn := fa_amort_pvt.t_bonus_ytd_deprn(i);
6410             l_asset_deprn_rec.bonus_deprn_reserve := fa_amort_pvt.t_bonus_deprn_reserve(i);
6411 
6412             l_asset_deprn_rec.ytd_impairment := fa_amort_pvt.t_ytd_impairment(i);
6413             l_asset_deprn_rec.impairment_reserve := fa_amort_pvt.t_impairment_reserve(i);
6414 
6415 
6416             if (p_log_level_rec.statement_level) then
6417                fa_debug_pkg.add('    '||l_calling_fn, 'Depreciation is ', 'SKIPPED' , p_log_level_rec => p_log_level_rec);
6418             end if;
6419 
6420          end if; -- (l_period_rec.period_counter <> fa_amort_pvt.t_period_counter(i)) or
6421 
6422       else
6423          if (i = 1) then
6424             fa_amort_pvt.t_ytd_deprn(i)               := fa_amort_pvt.t_deprn_amount(i);
6425             fa_amort_pvt.t_deprn_reserve(i)           := fa_amort_pvt.t_deprn_amount(i) +
6426                                                           fa_amort_pvt.t_reserve_adjustment_amount(i);
6427             fa_amort_pvt.t_bonus_ytd_deprn(i)         := 0;
6428             fa_amort_pvt.t_bonus_deprn_reserve(i)     := 0;
6429             fa_amort_pvt.t_ytd_impairment(i)          := 0;
6430             fa_amort_pvt.t_impairment_reserve(i)      := 0;
6431             fa_amort_pvt.t_ltd_production(i)          := 0;
6432             fa_amort_pvt.t_ytd_production(i)          := 0;
6433             fa_amort_pvt.t_ytd_reval_deprn_expense(i) := 0;
6434             fa_amort_pvt.t_reval_reserve(i)           := 0;
6435          else
6439                fa_amort_pvt.t_ytd_impairment(i)         := 0;
6436             if (fa_amort_pvt.t_period_num(i) = 1) then
6437                fa_amort_pvt.t_ytd_deprn(i)               := fa_amort_pvt.t_deprn_amount(i);
6438                fa_amort_pvt.t_bonus_ytd_deprn(i)         := 0;
6440                fa_amort_pvt.t_ytd_production(i)          := 0;
6441                fa_amort_pvt.t_ytd_reval_deprn_expense(i) := 0;
6442             else
6443                fa_amort_pvt.t_ytd_deprn(i)               := fa_amort_pvt.t_deprn_amount(i) +
6444                                                              fa_amort_pvt.t_ytd_deprn(i - 1);
6445                fa_amort_pvt.t_bonus_ytd_deprn(i)         := fa_amort_pvt.t_bonus_ytd_deprn(i - 1);
6446                fa_amort_pvt.t_ytd_impairment(i)          := fa_amort_pvt.t_ytd_impairment(i - 1);
6447                fa_amort_pvt.t_ytd_production(i)          := fa_amort_pvt.t_ltd_production(i - 1);
6448             fa_amort_pvt.t_ytd_reval_deprn_expense(i) := fa_amort_pvt.t_ytd_reval_deprn_expense(i - 1);
6449 
6450             end if;
6451 --tk_util.debug('fa_amort_pvt.t_deprn_reserve(i - 1): '||to_char(fa_amort_pvt.t_deprn_reserve(i - 1)));
6452             fa_amort_pvt.t_deprn_reserve(i)           := fa_amort_pvt.t_deprn_amount(i) +
6453                                                           fa_amort_pvt.t_reserve_adjustment_amount(i) +
6454                                                           fa_amort_pvt.t_deprn_reserve(i - 1);
6455             fa_amort_pvt.t_bonus_deprn_reserve(i)     := fa_amort_pvt.t_bonus_deprn_reserve(i - 1);
6456             fa_amort_pvt.t_impairment_reserve(i)      := fa_amort_pvt.t_impairment_reserve(i - 1);
6457             fa_amort_pvt.t_ltd_production(i)          := fa_amort_pvt.t_ltd_production(i - 1);
6458             fa_amort_pvt.t_reval_reserve(i)           := fa_amort_pvt.t_reval_reserve(i - 1);
6459 
6460          end if;
6461 
6462          --
6463          -- This is necessary to call FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS.
6464          --
6465          l_asset_fin_rec_new.cost := fa_amort_pvt.t_cost(i);
6466          l_asset_fin_rec_new.salvage_value := fa_amort_pvt.t_salvage_value(i);
6467          l_asset_fin_rec_new.recoverable_cost := fa_amort_pvt.t_recoverable_cost(i);
6468          l_asset_fin_rec_new.deprn_method_code := fa_amort_pvt.t_deprn_method_code(i);
6469          l_asset_fin_rec_new.life_in_months := fa_amort_pvt.t_life_in_months(i);
6470          l_asset_fin_rec_new.group_asset_id := fa_amort_pvt.t_group_asset_id(i);
6471          l_asset_fin_rec_new.depreciate_flag := fa_amort_pvt.t_depreciate_flag(i);
6472          l_asset_fin_rec_new.eofy_reserve := fa_amort_pvt.t_eofy_reserve(i);
6473          l_asset_fin_rec_new.rate_adjustment_factor := fa_amort_pvt.t_rate_adjustment_factor(i);
6474          l_asset_fin_rec_new.formula_factor := fa_amort_pvt.t_formula_factor(i);
6475          l_asset_fin_rec_new.super_group_id := fa_amort_pvt.t_super_group_id(i);
6476 
6477       end if; -- (l_bs_ind <= i)
6478 
6479    END LOOP; -- FOR i IN 1..l_count LOOP
6480 
6481    --
6482    -- Need to reset eofy and eop rec cost and salvage value
6483    -- for deprn basis call
6484    --
6485    if (l_count > fa_cache_pkg.fazcct_record.number_per_fiscal_year) then
6486       l_eofy_rec_cost := fa_amort_pvt.t_recoverable_cost(l_count - fa_amort_pvt.t_period_num(l_count));
6487       l_eofy_sal_val  := fa_amort_pvt.t_salvage_value(l_count - fa_amort_pvt.t_period_num(l_count));
6488 
6489       if (l_count > 1) then
6490          l_eop_rec_cost := fa_amort_pvt.t_recoverable_cost(l_count - 1);
6491          l_eop_sal_val  := fa_amort_pvt.t_salvage_value(l_count - 1);
6492       end if;
6493    end if;
6494 
6495    -- Call Depreciable Basis Rule for Formula/NBV Basis
6496    if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
6497                   (p_event_type             => 'AMORT_ADJ3',
6498                    p_asset_fin_rec_new      => l_asset_fin_rec_new,
6499                    p_asset_fin_rec_old      => l_asset_fin_rec_new,
6500                    p_asset_hdr_rec          => p_asset_hdr_rec,
6501                    p_asset_type_rec         => p_asset_type_rec,
6502                    p_asset_deprn_rec        => l_asset_deprn_rec,
6503                    p_trans_rec              => p_trans_rec,
6504                    p_period_rec             => l_period_rec,
6505                    p_adjusted_cost          => l_asset_fin_rec_new.adjusted_cost,
6506                    p_current_total_rsv      => l_asset_deprn_rec.deprn_reserve,
6507                    p_adj_reserve            => p_asset_deprn_rec_adj.deprn_reserve,
6508                    p_current_rsv            => l_asset_deprn_rec.deprn_reserve -
6509                                                l_asset_deprn_rec.bonus_deprn_reserve -
6510                                                nvl(l_asset_deprn_rec.impairment_reserve,0),
6511                    p_current_total_ytd      => l_asset_deprn_rec.ytd_deprn,
6512                    p_hyp_basis              => l_asset_fin_rec_new.adjusted_cost,
6513                    p_hyp_total_rsv          => l_asset_deprn_rec_raf.deprn_reserve,
6514                    p_hyp_rsv                => l_asset_deprn_rec_raf.deprn_reserve -
6515                                                l_asset_deprn_rec_raf.bonus_deprn_reserve -
6516                                                nvl(l_asset_deprn_rec_raf.impairment_reserve,0),
6517                    p_eofy_recoverable_cost  => l_eofy_rec_cost,
6518                    p_eop_recoverable_cost   => l_eop_rec_cost,
6519                    p_eofy_salvage_value     => l_eofy_sal_val,
6520                    p_eop_salvage_value      => l_eop_sal_val,
6521                    p_mrc_sob_type_code      => p_mrc_sob_type_code,
6522                    p_used_by_adjustment     => 'ADJUSTMENT',
6523                    px_new_adjusted_cost     => l_asset_fin_rec_new.adjusted_cost,
6527       if (p_log_level_rec.statement_level) then
6524                    px_new_raf               => l_asset_fin_rec_new.rate_adjustment_factor,
6525                    px_new_formula_factor    => l_asset_fin_rec_new.formula_factor,
6526                    p_log_level_rec          => p_log_level_rec)) then
6528          fa_debug_pkg.add(l_calling_fn, 'Error calling',
6529                           'FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS', p_log_level_rec => p_log_level_rec);
6530       end if;
6531 
6532       raise calc_failed;
6533    end if; -- (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
6534 
6535    if (p_log_level_rec.statement_level) then
6536       fa_debug_pkg.add(l_calling_fn, 'Returned values from ',
6537                                      'FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS AMORT_ADJ3', p_log_level_rec => p_log_level_rec);
6538       fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.adjusted_cost',
6539                                      l_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
6540       fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.rate_adjustment_factor',
6541                                      l_asset_fin_rec_new.rate_adjustment_factor, p_log_level_rec => p_log_level_rec);
6542       fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.formula_factor',
6543                                      l_asset_fin_rec_new.formula_factor, p_log_level_rec => p_log_level_rec);
6544    end if;
6545 
6546    px_asset_fin_rec_new.cost := fa_amort_pvt.t_cost(l_count);
6547    px_asset_fin_rec_new.recoverable_cost:= fa_amort_pvt.t_recoverable_cost(l_count);
6548    px_asset_fin_rec_new.adjusted_recoverable_cost:=
6549                                   fa_amort_pvt.t_adjusted_recoverable_cost(l_count);
6550    px_asset_fin_rec_new.salvage_value := fa_amort_pvt.t_salvage_value(l_count);
6551    px_asset_fin_rec_new.allowed_deprn_limit_amount :=
6552                                   fa_amort_pvt.t_allowed_deprn_limit_amount(l_count);
6553    px_asset_fin_rec_new.percent_salvage_value := fa_amort_pvt.t_percent_salvage_value(l_count);
6557 --   px_asset_fin_rec_new.unrevalued_cost := fa_amort_pvt.t_unrevalued_cost(l_count);
6554    px_asset_fin_rec_new.allowed_deprn_limit := fa_amort_pvt.t_allowed_deprn_limit(l_count);
6555 
6556    -- For now, this won't be touched.
6558 
6559    px_asset_fin_rec_new.production_capacity := fa_amort_pvt.t_production_capacity(l_count);
6560    px_asset_fin_rec_new.reval_ceiling := fa_amort_pvt.t_reval_ceiling(l_count);
6561 --   px_asset_fin_rec_new.adjusted_cost := fa_amort_pvt.t_adjusted_cost(l_count);
6562    px_asset_fin_rec_new.adjusted_cost := l_asset_fin_rec_new.adjusted_cost;
6563 --   px_asset_fin_rec_new.rate_adjustment_factor := fa_amort_pvt.t_rate_adjustment_factor(l_count);
6564    px_asset_fin_rec_new.rate_adjustment_factor := l_asset_fin_rec_new.rate_adjustment_factor;
6565    px_asset_fin_rec_new.reval_amortization_basis :=
6566                                   fa_amort_pvt.t_reval_amortization_basis(l_count);
6567    px_asset_fin_rec_new.adjusted_capacity := fa_amort_pvt.t_adjusted_capacity(l_count);
6568 --   px_asset_fin_rec_new.formula_factor := fa_amort_pvt.t_formula_factor(l_count);
6569    px_asset_fin_rec_new.formula_factor := l_asset_fin_rec_new.formula_factor;
6570    px_asset_fin_rec_new.eofy_reserve := fa_amort_pvt.t_eofy_reserve(l_count);
6571 
6572    --
6573    -- When returning catch up expenses, amounts in p_asset_deprn_rec_adj need to be
6574    -- excluded because it was included at beginning to find correct catchup but
6575    -- these amounts cannot be expensed in this period.
6576    --
6577 --   if (px_asset_fin_rec_new.depreciate_flag = 'NO') or
6578 --      (px_asset_fin_rec_new.disabled_flag = 'Y') then
6579    if (px_asset_fin_rec_new.disabled_flag = 'Y') then
6580       x_deprn_expense := 0;
6581       x_bonus_expense := 0;
6582       x_impairment_expense := 0;
6583    else
6584       --Bug8425794 / 8244128: In case of reinstatement, p_asset_deprn_rec_adj.deprn_reserve
6585       --            is only used to back out reserve retired from fabs.rsv_adj column
6586       --            but when calculating difference between old reserve and new reserve
6587       --            should not be used(double counted).
6588       if (l_asset_deprn_rec.deprn_reserve = p_asset_deprn_rec.deprn_reserve) or (p_trans_rec.transaction_key = 'MS') then
6589          x_deprn_expense := l_asset_deprn_rec.deprn_reserve - p_asset_deprn_rec.deprn_reserve;
6590          x_bonus_expense := l_asset_deprn_rec.bonus_deprn_reserve - p_asset_deprn_rec.bonus_deprn_reserve;
6591       elsif (p_reclass_src_dest = 'SOURCE') then
6592          x_deprn_expense := l_asset_deprn_rec.deprn_reserve - p_asset_deprn_rec.deprn_reserve - x_deprn_reserve;
6593          x_bonus_expense := l_asset_deprn_rec.bonus_deprn_reserve - p_asset_deprn_rec.bonus_deprn_reserve - nvl(p_asset_deprn_rec_adj.bonus_deprn_reserve, 0);
6594       else
6595          x_deprn_expense := l_asset_deprn_rec.deprn_reserve - p_asset_deprn_rec.deprn_reserve - x_deprn_reserve - nvl(p_asset_deprn_rec_adj.deprn_reserve, 0);
6596          x_bonus_expense := l_asset_deprn_rec.bonus_deprn_reserve - p_asset_deprn_rec.bonus_deprn_reserve - nvl(p_asset_deprn_rec_adj.bonus_deprn_reserve, 0);
6597       end if;
6598       x_impairment_expense := nvl(l_asset_deprn_rec.impairment_reserve,0) - nvl(p_asset_deprn_rec.impairment_reserve,0) - nvl(p_asset_deprn_rec_adj.impairment_reserve,0);
6599    end if;
6600 
6601    if (p_log_level_rec.statement_level) then
6602       fa_debug_pkg.add(l_calling_fn, 'x_deprn_reserve', x_deprn_reserve, p_log_level_rec => p_log_level_rec);
6603       fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec.deprn_reserve', l_asset_deprn_rec.deprn_reserve, p_log_level_rec => p_log_level_rec);
6604       fa_debug_pkg.add(l_calling_fn, 'p_asset_deprn_rec.deprn_reserve', p_asset_deprn_rec.deprn_reserve, p_log_level_rec => p_log_level_rec);
6605       fa_debug_pkg.add(l_calling_fn, 'p_asset_deprn_rec_adj.deprn_reserve', p_asset_deprn_rec_adj.deprn_reserve, p_log_level_rec => p_log_level_rec);
6606       fa_debug_pkg.add(l_calling_fn, 'fa_amort_pvt.t_deprn_reserve('||to_char(l_count)||')',
6607                        fa_amort_pvt.t_deprn_reserve(l_count));
6608    end if;
6609 
6610    -- HHIRAGA
6611    --+++++++++ Call member level maintenance for tracking +++++++
6612    if nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE' then
6613 
6614       if not FA_TRACK_MEMBER_PVT.update_member_books(p_trans_rec=> p_trans_rec,
6615                                      p_asset_hdr_rec => p_asset_hdr_rec,
6616                                      p_dpr_in => l_dpr_in,
6617                                      p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
6618          if (p_log_level_rec.statement_level) then
6619             fa_debug_pkg.add(l_calling_fn, 'Error calling',
6620                              'FA_TRACK_MEMBER_PVT.update_member_books',  p_log_level_rec => p_log_level_rec);
6621          end if;
6622 
6623          raise calc_failed;
6624       end if;
6625 
6626       fa_track_member_pvt.p_track_member_eofy_table.delete;
6627 
6628       if (p_log_level_rec.statement_level) then
6629          fa_debug_pkg.add(l_calling_fn, 'fa_track_member_pvt.p_track_member_eofy_table',
6630                                         'deleted',  p_log_level_rec => p_log_level_rec);
6631       end if;
6632 
6633       if (p_log_level_rec.statement_level) then
6634          for i in 1.. fa_track_member_pvt.p_track_member_table.count loop
6635             fa_debug_pkg.add('HH DEBUG**', 'all records in p_track_member_table', i);
6636             if not fa_track_member_pvt.display_debug_message2(i, 'HH DEBUG**', p_log_leveL_rec) then
6637                null;
6638             end if;
6639          end loop;
6640       end if;
6641 
6642    end if; -- nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE'
6643    -- End of HHIRAGA
6644    -- HHIRAGA
6645    --+++++++++ Call member level maintenance for tracking +++++++
6646    if nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE' then
6647 
6648       if not FA_TRACK_MEMBER_PVT.create_update_bs_table(p_trans_rec => p_trans_rec,
6652                                      p_sob_id            => p_asset_hdr_rec.set_of_books_id, --Bug 8941132
6649                                      p_book_type_code => p_asset_hdr_rec.book_type_code,
6650                                      p_group_asset_id => p_asset_hdr_rec.asset_id,
6651                                      p_mrc_sob_type_code => p_mrc_sob_type_code, --Bug 8941132
6653                                      p_calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec) then
6654          if (p_log_level_rec.statement_level) then
6655             fa_debug_pkg.add(l_calling_fn, 'Error calling',
6656                              'FA_TRACK_MEMBER_PVT.create_update_bs_table',  p_log_level_rec => p_log_level_rec);
6657          end if;
6658 
6659          raise calc_failed;
6660       end if;
6661 
6662    end if; -- nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE'
6663    -- End of HHIRAGA
6664 
6665    if (p_update_books_summary) then
6666                --
6667                -- Update FA_BOOKS_SUMMARY
6668                --
6669 --tk_util.debug('period# :      cost:    chcost:      msal:       exp:       ytd:       rsv:       rsv');
6670 --tk_util.debug('period# :      cost:   adjcost:       exp:      eofy:     rsvaj:       rsv:      dlmt:      arec');
6671 /*
6672 for i in fa_amort_pvt.t_cost.FIRST..fa_amort_pvt.t_cost.LAST loop
6673 --tk_util.debug(rpad(to_char(fa_amort_pvt.t_period_counter(i)), 8, ' ')||':'||
6674               lpad(to_char(fa_amort_pvt.t_cost(i)), 10, ' ')||':'||
6675 --              lpad(substrb(to_char(fa_amort_pvt.t_rate_adjustment_factor(i)), 1, 10), 10, ' ')||':'||
6676 --              fa_amort_pvt.t_reset_adjusted_cost_flag(i)||':'||
6677 --              lpad(to_char(fa_amort_pvt.t_change_in_cost(i)), 10, ' ')||':'||
6678               lpad(to_char(fa_amort_pvt.t_adjusted_cost(i)), 10, ' ')||':'||
6679 --              lpad(to_char(fa_amort_pvt.t_salvage_value(i)), 10, ' ')||':'||
6680 --              lpad(to_char(fa_amort_pvt.t_member_salvage_value(i)), 10, ' ')||':'||
6681 --              lpad(to_char(fa_amort_pvt.t_deprn_adjustment_amount(i)), 10, ' ')||':'||
6682               lpad(to_char(fa_amort_pvt.t_deprn_amount(i)), 10, ' ')||':'||
6683               lpad(to_char(fa_amort_pvt.t_ytd_deprn(i)), 10, ' ')||':'||
6684 --              lpad(to_char(fa_amort_pvt.t_eofy_reserve(i)), 10, ' ')||':'||
6685               lpad(to_char(fa_amort_pvt.t_reserve_adjustment_amount(i)), 10, ' ')||':'||
6686               lpad(to_char(fa_amort_pvt.t_deprn_reserve(i)), 10, ' ')||':'||
6687 --              lpad(nvl(to_char(fa_amort_pvt.t_allowed_deprn_limit_amount(i)), 'null'), 5, ' ')||':'||
6688               lpad(to_char(fa_amort_pvt.t_adjusted_recoverable_cost(i)), 10, ' ')
6689              );
6690 end loop;
6691 */
6692       if (p_mrc_sob_type_code = 'R') then
6693                FORALL i in l_temp_ind..fa_amort_pvt.t_cost.LAST
6694                   UPDATE FA_MC_BOOKS_SUMMARY
6695                   SET RESET_ADJUSTED_COST_FLAG   = fa_amort_pvt.t_reset_adjusted_cost_flag(i)
6696                     , CHANGE_IN_COST             = fa_amort_pvt.t_change_in_cost(i)
6697                     , CHANGE_IN_CIP_COST         = fa_amort_pvt.t_change_in_cip_cost(i)
6698                     , COST                       = fa_amort_pvt.t_cost(i)
6699                     , CIP_COST                   = fa_amort_pvt.t_cip_cost(i)
6700                     , SALVAGE_TYPE               = fa_amort_pvt.t_salvage_type(i)
6701                     , PERCENT_SALVAGE_VALUE      = fa_amort_pvt.t_percent_salvage_value(i)
6702                     , SALVAGE_VALUE              = fa_amort_pvt.t_salvage_value(i)
6703                     , MEMBER_SALVAGE_VALUE       = fa_amort_pvt.t_member_salvage_value(i)
6704                     , RECOVERABLE_COST           = fa_amort_pvt.t_recoverable_cost(i)
6705                     , DEPRN_LIMIT_TYPE           = fa_amort_pvt.t_deprn_limit_type(i)
6706                     , ALLOWED_DEPRN_LIMIT        = fa_amort_pvt.t_allowed_deprn_limit(i)
6707                     , ALLOWED_DEPRN_LIMIT_AMOUNT = fa_amort_pvt.t_allowed_deprn_limit_amount(i)
6708                     , MEMBER_DEPRN_LIMIT_AMOUNT  = fa_amort_pvt.t_member_deprn_limit_amount(i)
6709                     , ADJUSTED_RECOVERABLE_COST  = fa_amort_pvt.t_adjusted_recoverable_cost(i)
6710                     , ADJUSTED_COST              = fa_amort_pvt.t_adjusted_cost(i)
6711                     , DEPRECIATE_FLAG            = fa_amort_pvt.t_depreciate_flag(i)
6712                     , DEPRN_METHOD_CODE          = fa_amort_pvt.t_deprn_method_code(i)
6713                     , LIFE_IN_MONTHS             = fa_amort_pvt.t_life_in_months(i)
6714                     , RATE_ADJUSTMENT_FACTOR     = fa_amort_pvt.t_rate_adjustment_factor(i)
6715                     , ADJUSTED_RATE              = fa_amort_pvt.t_adjusted_rate(i)
6716                     , BONUS_RULE                 = fa_amort_pvt.t_bonus_rule(i)
6717                     , ADJUSTED_CAPACITY          = fa_amort_pvt.t_adjusted_capacity(i)
6718                     , PRODUCTION_CAPACITY        = fa_amort_pvt.t_production_capacity(i)
6719                     , UNIT_OF_MEASURE            = fa_amort_pvt.t_unit_of_measure(i)
6720                     , REMAINING_LIFE1            = fa_amort_pvt.t_remaining_life1(i)
6721                     , REMAINING_LIFE2            = fa_amort_pvt.t_remaining_life2(i)
6722                     , FORMULA_FACTOR             = fa_amort_pvt.t_formula_factor(i)
6723                     , UNREVALUED_COST            = fa_amort_pvt.t_unrevalued_cost(i)
6724                     , REVAL_AMORTIZATION_BASIS   = fa_amort_pvt.t_reval_amortization_basis(i)
6725                     , REVAL_CEILING              = fa_amort_pvt.t_reval_ceiling(i)
6726                     , CEILING_NAME               = fa_amort_pvt.t_ceiling_name(i)
6727                     , EOFY_ADJ_COST              = fa_amort_pvt.t_eofy_adj_cost(i)
6728                     , EOFY_FORMULA_FACTOR        = fa_amort_pvt.t_eofy_formula_factor(i)
6729                     , EOFY_RESERVE               = fa_amort_pvt.t_eofy_reserve(i)
6730                     , EOP_ADJ_COST               = fa_amort_pvt.t_eop_adj_cost(i)
6731                     , EOP_FORMULA_FACTOR         = fa_amort_pvt.t_eop_formula_factor(i)
6735                     , OVER_DEPRECIATE_OPTION     = fa_amort_pvt.t_over_depreciate_option(i)
6732                     , SHORT_FISCAL_YEAR_FLAG     = fa_amort_pvt.t_short_fiscal_year_flag(i)
6733                     , GROUP_ASSET_ID             = fa_amort_pvt.t_group_asset_id(i)
6734                     , SUPER_GROUP_ID             = fa_amort_pvt.t_super_group_id(i)
6736                     , DEPRN_AMOUNT               = fa_amort_pvt.t_deprn_amount(i)
6737                     , YTD_DEPRN                  = fa_amort_pvt.t_ytd_deprn(i)
6738                     , DEPRN_RESERVE              = fa_amort_pvt.t_deprn_reserve(i)
6739                     , BONUS_DEPRN_AMOUNT         = fa_amort_pvt.t_bonus_deprn_amount(i)
6740                     , BONUS_YTD_DEPRN            = fa_amort_pvt.t_bonus_ytd_deprn(i)
6741                     , BONUS_DEPRN_RESERVE        = fa_amort_pvt.t_bonus_deprn_reserve(i)
6742                     , BONUS_RATE                 = fa_amort_pvt.t_bonus_rate(i)
6743                     , IMPAIRMENT_AMOUNT          = fa_amort_pvt.t_impairment_amount(i)
6744                     , YTD_IMPAIRMENT             = fa_amort_pvt.t_ytd_impairment(i)
6745                     , impairment_reserve             = fa_amort_pvt.t_impairment_reserve(i)
6746                     , LTD_PRODUCTION             = fa_amort_pvt.t_ltd_production(i)
6747                     , YTD_PRODUCTION             = fa_amort_pvt.t_ytd_production(i)
6748                     , PRODUCTION                 = fa_amort_pvt.t_production(i)
6749                     , REVAL_AMORTIZATION         = fa_amort_pvt.t_reval_amortization(i)
6750                     , REVAL_DEPRN_EXPENSE        = fa_amort_pvt.t_reval_deprn_expense(i)
6751                     , REVAL_RESERVE              = fa_amort_pvt.t_reval_reserve(i)
6752                     , YTD_REVAL_DEPRN_EXPENSE    = fa_amort_pvt.t_ytd_reval_deprn_expense(i)
6753                     , DEPRN_OVERRIDE_FLAG        = fa_amort_pvt.t_deprn_override_flag(i)
6754                     , SYSTEM_DEPRN_AMOUNT        = fa_amort_pvt.t_system_deprn_amount(i)
6755                     , SYSTEM_BONUS_DEPRN_AMOUNT  = fa_amort_pvt.t_system_bonus_deprn_amount(i)
6756                     , YTD_PROCEEDS_OF_SALE       = fa_amort_pvt.t_ytd_proceeds_of_sale(i)
6757                     , LTD_PROCEEDS_OF_SALE       = fa_amort_pvt.t_ltd_proceeds_of_sale(i)
6758                     , YTD_COST_OF_REMOVAL        = fa_amort_pvt.t_ytd_cost_of_removal(i)
6759                     , LTD_COST_OF_REMOVAL        = fa_amort_pvt.t_ltd_cost_of_removal(i)
6760                     , DEPRN_ADJUSTMENT_AMOUNT    = fa_amort_pvt.t_deprn_adjustment_amount(i)
6761                     , EXPENSE_ADJUSTMENT_AMOUNT  = fa_amort_pvt.t_expense_adjustment_amount(i)
6762                     , RESERVE_ADJUSTMENT_AMOUNT  = fa_amort_pvt.t_reserve_adjustment_amount(i)
6763                     , CHANGE_IN_EOFY_RESERVE     = fa_amort_pvt.t_change_in_eofy_reserve(i)
6764                     , LAST_UPDATE_DATE           = p_trans_rec.who_info.last_update_date
6765                     , LAST_UPDATED_BY            = p_trans_rec.who_info.last_updated_by
6766                     , LAST_UPDATE_LOGIN          = p_trans_rec.who_info.last_update_login
6767                   WHERE ASSET_ID = p_asset_hdr_rec.asset_id
6768                   AND   BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
6769                   AND   PERIOD_COUNTER = fa_amort_pvt.t_period_counter(i)
6770                   AND   SET_OF_BOOKS_ID = p_asset_hdr_rec.set_of_books_id;
6771 
6772       else
6773                FORALL i in l_temp_ind..fa_amort_pvt.t_cost.LAST
6774                   UPDATE FA_BOOKS_SUMMARY
6775                   SET RESET_ADJUSTED_COST_FLAG   = fa_amort_pvt.t_reset_adjusted_cost_flag(i)
6776                     , CHANGE_IN_COST             = fa_amort_pvt.t_change_in_cost(i)
6777                     , CHANGE_IN_CIP_COST         = fa_amort_pvt.t_change_in_cip_cost(i)
6778                     , COST                       = fa_amort_pvt.t_cost(i)
6779                     , CIP_COST                   = fa_amort_pvt.t_cip_cost(i)
6780                     , SALVAGE_TYPE               = fa_amort_pvt.t_salvage_type(i)
6781                     , PERCENT_SALVAGE_VALUE      = fa_amort_pvt.t_percent_salvage_value(i)
6782                     , SALVAGE_VALUE              = fa_amort_pvt.t_salvage_value(i)
6783                     , MEMBER_SALVAGE_VALUE       = fa_amort_pvt.t_member_salvage_value(i)
6784                     , RECOVERABLE_COST           = fa_amort_pvt.t_recoverable_cost(i)
6785                     , DEPRN_LIMIT_TYPE           = fa_amort_pvt.t_deprn_limit_type(i)
6786                     , ALLOWED_DEPRN_LIMIT        = fa_amort_pvt.t_allowed_deprn_limit(i)
6787                     , ALLOWED_DEPRN_LIMIT_AMOUNT = fa_amort_pvt.t_allowed_deprn_limit_amount(i)
6788                     , MEMBER_DEPRN_LIMIT_AMOUNT  = fa_amort_pvt.t_member_deprn_limit_amount(i)
6789                     , ADJUSTED_RECOVERABLE_COST  = fa_amort_pvt.t_adjusted_recoverable_cost(i)
6790                     , ADJUSTED_COST              = fa_amort_pvt.t_adjusted_cost(i)
6791                     , DEPRECIATE_FLAG            = fa_amort_pvt.t_depreciate_flag(i)
6792                     , DEPRN_METHOD_CODE          = fa_amort_pvt.t_deprn_method_code(i)
6793                     , LIFE_IN_MONTHS             = fa_amort_pvt.t_life_in_months(i)
6794                     , RATE_ADJUSTMENT_FACTOR     = fa_amort_pvt.t_rate_adjustment_factor(i)
6795                     , ADJUSTED_RATE              = fa_amort_pvt.t_adjusted_rate(i)
6796                     , BONUS_RULE                 = fa_amort_pvt.t_bonus_rule(i)
6797                     , ADJUSTED_CAPACITY          = fa_amort_pvt.t_adjusted_capacity(i)
6798                     , PRODUCTION_CAPACITY        = fa_amort_pvt.t_production_capacity(i)
6799                     , UNIT_OF_MEASURE            = fa_amort_pvt.t_unit_of_measure(i)
6800                     , REMAINING_LIFE1            = fa_amort_pvt.t_remaining_life1(i)
6801                     , REMAINING_LIFE2            = fa_amort_pvt.t_remaining_life2(i)
6802                     , FORMULA_FACTOR             = fa_amort_pvt.t_formula_factor(i)
6803                     , UNREVALUED_COST            = fa_amort_pvt.t_unrevalued_cost(i)
6804                     , REVAL_AMORTIZATION_BASIS   = fa_amort_pvt.t_reval_amortization_basis(i)
6805                     , REVAL_CEILING              = fa_amort_pvt.t_reval_ceiling(i)
6809                     , EOFY_RESERVE               = fa_amort_pvt.t_eofy_reserve(i)
6806                     , CEILING_NAME               = fa_amort_pvt.t_ceiling_name(i)
6807                     , EOFY_ADJ_COST              = fa_amort_pvt.t_eofy_adj_cost(i)
6808                     , EOFY_FORMULA_FACTOR        = fa_amort_pvt.t_eofy_formula_factor(i)
6810                     , EOP_ADJ_COST               = fa_amort_pvt.t_eop_adj_cost(i)
6811                     , EOP_FORMULA_FACTOR         = fa_amort_pvt.t_eop_formula_factor(i)
6812                     , SHORT_FISCAL_YEAR_FLAG     = fa_amort_pvt.t_short_fiscal_year_flag(i)
6813                     , GROUP_ASSET_ID             = fa_amort_pvt.t_group_asset_id(i)
6814                     , SUPER_GROUP_ID             = fa_amort_pvt.t_super_group_id(i)
6815                     , OVER_DEPRECIATE_OPTION     = fa_amort_pvt.t_over_depreciate_option(i)
6816                     , DEPRN_AMOUNT               = fa_amort_pvt.t_deprn_amount(i)
6817                     , YTD_DEPRN                  = fa_amort_pvt.t_ytd_deprn(i)
6818                     , DEPRN_RESERVE              = fa_amort_pvt.t_deprn_reserve(i)
6819                     , BONUS_DEPRN_AMOUNT         = fa_amort_pvt.t_bonus_deprn_amount(i)
6820                     , BONUS_YTD_DEPRN            = fa_amort_pvt.t_bonus_ytd_deprn(i)
6821                     , BONUS_DEPRN_RESERVE        = fa_amort_pvt.t_bonus_deprn_reserve(i)
6822                     , BONUS_RATE                 = fa_amort_pvt.t_bonus_rate(i)
6823                     , IMPAIRMENT_AMOUNT          = fa_amort_pvt.t_impairment_amount(i)
6824                     , YTD_IMPAIRMENT             = fa_amort_pvt.t_ytd_impairment(i)
6825                     , impairment_reserve             = fa_amort_pvt.t_impairment_reserve(i)
6826                     , LTD_PRODUCTION             = fa_amort_pvt.t_ltd_production(i)
6827                     , YTD_PRODUCTION             = fa_amort_pvt.t_ytd_production(i)
6828                     , PRODUCTION                 = fa_amort_pvt.t_production(i)
6829                     , REVAL_AMORTIZATION         = fa_amort_pvt.t_reval_amortization(i)
6830                     , REVAL_DEPRN_EXPENSE        = fa_amort_pvt.t_reval_deprn_expense(i)
6831                     , REVAL_RESERVE              = fa_amort_pvt.t_reval_reserve(i)
6832                     , YTD_REVAL_DEPRN_EXPENSE    = fa_amort_pvt.t_ytd_reval_deprn_expense(i)
6833                     , DEPRN_OVERRIDE_FLAG        = fa_amort_pvt.t_deprn_override_flag(i)
6834                     , SYSTEM_DEPRN_AMOUNT        = fa_amort_pvt.t_system_deprn_amount(i)
6835                     , SYSTEM_BONUS_DEPRN_AMOUNT  = fa_amort_pvt.t_system_bonus_deprn_amount(i)
6836                     , YTD_PROCEEDS_OF_SALE       = fa_amort_pvt.t_ytd_proceeds_of_sale(i)
6837                     , LTD_PROCEEDS_OF_SALE       = fa_amort_pvt.t_ltd_proceeds_of_sale(i)
6838                     , YTD_COST_OF_REMOVAL        = fa_amort_pvt.t_ytd_cost_of_removal(i)
6839                     , LTD_COST_OF_REMOVAL        = fa_amort_pvt.t_ltd_cost_of_removal(i)
6840                     , DEPRN_ADJUSTMENT_AMOUNT    = fa_amort_pvt.t_deprn_adjustment_amount(i)
6841                     , EXPENSE_ADJUSTMENT_AMOUNT  = fa_amort_pvt.t_expense_adjustment_amount(i)
6842                     , RESERVE_ADJUSTMENT_AMOUNT  = fa_amort_pvt.t_reserve_adjustment_amount(i)
6843                     , CHANGE_IN_EOFY_RESERVE     = fa_amort_pvt.t_change_in_eofy_reserve(i)
6844                     , LAST_UPDATE_DATE           = p_trans_rec.who_info.last_update_date
6845                     , LAST_UPDATED_BY            = p_trans_rec.who_info.last_updated_by
6846                     , LAST_UPDATE_LOGIN          = p_trans_rec.who_info.last_update_login
6847                   WHERE ASSET_ID = p_asset_hdr_rec.asset_id
6848                   AND   BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
6849                   AND   PERIOD_COUNTER = fa_amort_pvt.t_period_counter(i);
6850       end if;
6851 
6852    end if; -- (p_update_books_summary)
6853 
6854    --
6855    -- Initialize global variables
6856    --
6857    InitGlobeVariables;
6858 
6859    if (p_log_level_rec.statement_level) then
6860       fa_debug_pkg.add(l_calling_fn, 'End',
6861                        x_deprn_expense||':'||x_bonus_expense||':'||x_deprn_reserve, p_log_level_rec => p_log_level_rec);
6862    end if;
6863 
6864    return true;
6865 
6866 EXCEPTION
6867   WHEN invalid_trx_to_overlap THEN
6868     --
6869     -- Initialize global variables
6870     --
6871     InitGlobeVariables;
6872 
6873     if (p_log_level_rec.statement_level) then
6874        fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'invalid_trx_to_overlap', p_log_level_rec => p_log_level_rec);
6875     end if;
6876 
6877     fa_srvr_msg.add_message(calling_fn => l_calling_fn,
6878                             name       => 'FA_INVALID_TRX_TO_OVERLAP', p_log_level_rec => p_log_level_rec);
6879     return false;
6880   WHEN calc_failed THEN
6881     --
6882     -- Initialize global variables
6883     --
6884     InitGlobeVariables;
6885 
6886     if (p_log_level_rec.statement_level) then
6887        fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'calc_failed', p_log_level_rec => p_log_level_rec);
6888     end if;
6889 
6890     fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
6891     return false;
6892 
6893   WHEN OTHERS THEN
6894     --
6895     -- Initialize global variables
6896     --
6897     InitGlobeVariables;
6898 
6899     if (p_log_level_rec.statement_level) then
6900        fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'others: '||sqlerrm, p_log_level_rec => p_log_level_rec);
6901     end if;
6902 
6903     fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
6904     raise;
6905 END bsRecalculate;
6906 
6907 --+==============================================================================
6908 -- Procedure: populate_fin_rec
6909 --
6910 --   This procedure popualte asset_fin_rec_adj in case it is not provided.
6911 --
6912 --+==============================================================================
6916              p_asset_fin_rec_adj             FA_API_TYPES.asset_fin_rec_type default null,
6913 PROCEDURE populate_fin_rec(
6914              p_trans_rec                     FA_API_TYPES.trans_rec_type,
6915              p_asset_fin_rec_old             FA_API_TYPES.asset_fin_rec_type,
6917              p_asset_fin_rec_new             FA_API_TYPES.asset_fin_rec_type,
6918              x_asset_fin_rec_adj  OUT NOCOPY FA_API_TYPES.asset_fin_rec_type, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) IS
6919 
6920 BEGIN
6921 /*
6922    if (nvl(p_asset_fin_rec_old.cost, 0) = nvl(p_asset_fin_rec_new.cost, 0) and
6923        p_asset_fin_rec_adj.cost is null) and
6924       (nvl(p_asset_fin_rec_old.cip_cost, 0) = nvl(p_asset_fin_rec_new.cip_cost, 0) and
6925        p_asset_fin_rec_adj.cip_cost is null) and
6926       (nvl(p_asset_fin_rec_old.salvage_type, 'NULL') = nvl(p_asset_fin_rec_new.salvage_type, 'NULL') and
6927        p_asset_fin_rec_adj.salvage_type is NULL) and
6928       (p_asset_fin_rec_adj.percent_salvage_value is null) and
6929       (nvl(p_asset_fin_rec_old.salvage_value, 0) = nvl(p_asset_fin_rec_new.salvage_value, 0) and
6930        p_asset_fin_rec_adj.salvage_value is null) and
6931       (p_asset_fin_rec_adj.recoverable_cost is null) and
6932       (p_asset_fin_rec_adj.adjusted_recoverable_cost is null) and
6933       (nvl(p_asset_fin_rec_old.deprn_limit_type, 'NULL') = nvl(p_asset_fin_rec_new.deprn_limit_type, 'NULL') and
6934        p_asset_fin_rec_adj.deprn_limit_type is null) and
6935       (p_asset_fin_rec_adj.allowed_deprn_limit is null) and
6936       (nvl(p_asset_fin_rec_old.allowed_deprn_limit_amount, 0) = nvl(p_asset_fin_rec_new.allowed_deprn_limit_amount, 0) and
6937        p_asset_fin_rec_adj.allowed_deprn_limit_amount is null) and
6938       (p_asset_fin_rec_adj.production_capacity is null) and
6939       (p_asset_fin_rec_adj.reval_ceiling is null) and
6940       (p_asset_fin_rec_adj.unrevalued_cost is null) and
6941       (p_asset_fin_rec_adj.deprn_method_code is null) and
6942       (p_asset_fin_rec_adj.basic_rate is null) and
6943       (p_asset_fin_rec_adj.adjusted_rate is null) and
6944       (p_asset_fin_rec_adj.life_in_months is null) and
6945       (p_asset_fin_rec_adj.date_placed_in_service is null) and
6946       (p_asset_fin_rec_adj.prorate_date is null) and
6947       (p_asset_fin_rec_adj.bonus_rule is null) then
6948 */
6949    if (p_asset_fin_rec_adj.cost is null) and
6950       (p_asset_fin_rec_adj.cip_cost is null) and
6951       (p_asset_fin_rec_adj.salvage_type is null) and
6952       (p_asset_fin_rec_adj.percent_salvage_value is null) and
6953       (p_asset_fin_rec_adj.salvage_value is null) and
6954       (p_asset_fin_rec_adj.recoverable_cost is null) and
6955       (p_asset_fin_rec_adj.adjusted_recoverable_cost is null) and
6956       (p_asset_fin_rec_adj.deprn_limit_type is null) and
6957       (p_asset_fin_rec_adj.allowed_deprn_limit is null) and
6958       (p_asset_fin_rec_adj.allowed_deprn_limit_amount is null) and
6959       (p_asset_fin_rec_adj.production_capacity is null) and
6960       (p_asset_fin_rec_adj.reval_ceiling is null) and
6961       (p_asset_fin_rec_adj.unrevalued_cost is null) and
6962       (p_asset_fin_rec_adj.deprn_method_code is null) and
6963       (p_asset_fin_rec_adj.basic_rate is null) and
6964       (p_asset_fin_rec_adj.adjusted_rate is null) and
6965       (p_asset_fin_rec_adj.life_in_months is null) and
6966       (p_asset_fin_rec_adj.date_placed_in_service is null) and
6967       (p_asset_fin_rec_adj.prorate_date is null) and
6968       (p_asset_fin_rec_adj.bonus_rule is null) then
6969 --tk_util.debug('Fin Adj is NULL!!!!!!');
6970       x_asset_fin_rec_adj := p_asset_fin_rec_new;
6971 
6972 if  p_trans_rec.transaction_type_code <> 'ADDITION' then
6973 
6974       if (p_asset_fin_rec_adj.cost is not null) then
6975          x_asset_fin_rec_adj.cost :=p_asset_fin_rec_adj.cost;
6976       else
6977          x_asset_fin_rec_adj.cost := nvl(p_asset_fin_rec_new.cost, 0) -
6978                                      nvl(p_asset_fin_rec_old.cost, 0);
6979       end if;
6980 
6981       if (p_asset_fin_rec_adj.cip_cost is not null) then
6982          x_asset_fin_rec_adj.cip_cost := p_asset_fin_rec_adj.cip_cost;
6983       elsif (p_asset_fin_rec_new.cip_cost is not null) then
6984          x_asset_fin_rec_adj.cip_cost := nvl(p_asset_fin_rec_new.cip_cost, 0) -
6985                                         nvl(p_asset_fin_rec_old.cip_cost, 0);
6986       end if;
6987 
6988       if (p_asset_fin_rec_adj.salvage_value is not null) then
6989          x_asset_fin_rec_adj.salvage_value := p_asset_fin_rec_adj.salvage_value;
6990       elsif (p_asset_fin_rec_new.salvage_value is not null) then
6991          x_asset_fin_rec_adj.salvage_value := nvl(p_asset_fin_rec_new.salvage_value, 0) -
6992                                               nvl(p_asset_fin_rec_old.salvage_value, 0);
6993       end if;
6994 
6995       if (p_asset_fin_rec_adj.recoverable_cost is not null) then
6996          x_asset_fin_rec_adj.recoverable_cost :=
6997                                               p_asset_fin_rec_adj.recoverable_cost;
6998       elsif (p_asset_fin_rec_new.recoverable_cost is not null) then
6999          x_asset_fin_rec_adj.recoverable_cost :=
7000                                               nvl(p_asset_fin_rec_new.recoverable_cost, 0) -
7001                                               nvl(p_asset_fin_rec_old.recoverable_cost, 0);
7002       end if;
7003 
7004       if (p_asset_fin_rec_adj.adjusted_recoverable_cost is not null) then
7005          x_asset_fin_rec_adj.adjusted_recoverable_cost :=
7006                                      p_asset_fin_rec_adj.adjusted_recoverable_cost;
7007       elsif (p_asset_fin_rec_new.adjusted_recoverable_cost is not null) then
7008          x_asset_fin_rec_adj.adjusted_recoverable_cost :=
7009                                      nvl(p_asset_fin_rec_new.adjusted_recoverable_cost, 0) -
7010                                      nvl(p_asset_fin_rec_old.adjusted_recoverable_cost, 0);
7011       end if;
7012 
7013       if (p_asset_fin_rec_adj.original_cost is not null) then
7017                                                  nvl(p_asset_fin_rec_old.original_cost, 0);
7014             x_asset_fin_rec_adj.original_cost := p_asset_fin_rec_adj.original_cost;
7015       elsif (p_asset_fin_rec_new.original_cost is not null) then
7016             x_asset_fin_rec_adj.original_cost := nvl(p_asset_fin_rec_new.original_cost, 0) -
7018       end if;
7019 
7020       if (p_asset_fin_rec_adj.production_capacity is not null) then
7021          x_asset_fin_rec_adj.production_capacity :=
7022                                      p_asset_fin_rec_adj.production_capacity;
7023       elsif (p_asset_fin_rec_new.production_capacity is not null) then
7024          x_asset_fin_rec_adj.production_capacity :=
7025                                      nvl(p_asset_fin_rec_new.production_capacity, 0) -
7026                                      nvl(p_asset_fin_rec_old.production_capacity, 0);
7027       end if;
7028 
7029       if (p_asset_fin_rec_adj.reval_ceiling is not null) then
7030          x_asset_fin_rec_adj.reval_ceiling :=
7031                                      p_asset_fin_rec_adj.reval_ceiling;
7032       elsif (p_asset_fin_rec_new.reval_ceiling is not null) then
7033          x_asset_fin_rec_adj.reval_ceiling :=
7034                                      nvl(p_asset_fin_rec_new.reval_ceiling, 0) -
7035                                      nvl(p_asset_fin_rec_old.reval_ceiling, 0);
7036       end if;
7037 
7038 
7039       if (p_asset_fin_rec_adj.unrevalued_cost is not null) then
7040          x_asset_fin_rec_adj.unrevalued_cost :=
7041                                      p_asset_fin_rec_adj.unrevalued_cost;
7042       elsif (p_asset_fin_rec_new.unrevalued_cost is not null) then
7043          x_asset_fin_rec_adj.unrevalued_cost :=
7044                                      nvl(p_asset_fin_rec_new.unrevalued_cost, 0) -
7045                                      nvl(p_asset_fin_rec_old.unrevalued_cost, 0);
7046       end if;
7047 
7048       if (p_asset_fin_rec_new.salvage_type = 'PCT') then
7049          x_asset_fin_rec_adj.percent_salvage_value := nvl(p_asset_fin_rec_new.percent_salvage_value, 0) -
7050                                                       nvl(p_asset_fin_rec_old.percent_salvage_value, 0);
7051       else
7052          x_asset_fin_rec_adj.percent_salvage_value := to_number(null);
7053       end if;
7054 
7055       if (x_asset_fin_rec_adj.deprn_limit_type = 'NONE') then
7056          x_asset_fin_rec_adj.deprn_limit_type := 'NONE';
7057          x_asset_fin_rec_adj.allowed_deprn_limit := to_number(null);
7058          x_asset_fin_rec_adj.allowed_deprn_limit_amount := to_number(null);
7059       elsif (p_asset_fin_rec_new.deprn_limit_type <>
7060              p_asset_fin_rec_old.deprn_limit_type) then
7061          x_asset_fin_rec_adj.deprn_limit_type := p_asset_fin_rec_new.deprn_limit_type;
7062          x_asset_fin_rec_adj.allowed_deprn_limit := p_asset_fin_rec_new.allowed_deprn_limit;
7063          x_asset_fin_rec_adj.allowed_deprn_limit_amount :=
7064                                               p_asset_fin_rec_new.allowed_deprn_limit_amount;
7065       else
7066          x_asset_fin_rec_adj.allowed_deprn_limit := p_asset_fin_rec_new.allowed_deprn_limit -
7067                                                     p_asset_fin_rec_old.allowed_deprn_limit;
7068          x_asset_fin_rec_adj.allowed_deprn_limit_amount :=
7069                                               p_asset_fin_rec_new.allowed_deprn_limit_amount -
7070                                               p_asset_fin_rec_old.allowed_deprn_limit_amount;
7071       end if;
7072 
7073 end if;
7074 
7075       x_asset_fin_rec_adj.eofy_reserve := null;
7076 
7077       if p_asset_fin_rec_old.deprn_method_code = p_asset_fin_rec_new.deprn_method_code and
7078          nvl(p_asset_fin_rec_old.life_in_months, 0) =
7079                                 nvl(p_asset_fin_rec_new.life_in_months, 0) and
7080          nvl(p_asset_fin_rec_old.basic_rate, 0) =
7081                                 nvl(p_asset_fin_rec_new.basic_rate, 0) and
7082          nvl(p_asset_fin_rec_old.adjusted_rate, 0) =
7083                                 nvl(p_asset_fin_rec_new.adjusted_rate, 0) and
7084          nvl(p_asset_fin_rec_old.production_capacity, 0) =
7085                                 nvl(p_asset_fin_rec_new.production_capacity, 0) and
7086          p_trans_rec.transaction_type_code <> 'ADDITION' then
7087 
7088          x_asset_fin_rec_adj.deprn_method_code := null;
7089          x_asset_fin_rec_adj.life_in_months := to_number(null);
7090          x_asset_fin_rec_adj.basic_rate := to_number(null);
7091          x_asset_fin_rec_adj.adjusted_rate := to_number(null);
7092          x_asset_fin_rec_adj.production_capacity := to_number(null);
7093       end if;
7094 
7095    else
7096 --tk_util.debug('Fin Adj is NOT null');
7097       x_asset_fin_rec_adj := p_asset_fin_rec_adj;
7098 
7099       -- Bug3041716
7100       -- New faxama is expecting delta information so method information only needs to
7101       -- be populated only if there is a change in method related values
7102       --
7103       if p_asset_fin_rec_old.deprn_method_code = p_asset_fin_rec_new.deprn_method_code and
7104          nvl(p_asset_fin_rec_old.life_in_months, 0) =
7105                                 nvl(p_asset_fin_rec_new.life_in_months, 0) and
7106          nvl(p_asset_fin_rec_old.basic_rate, 0) =
7107                                 nvl(p_asset_fin_rec_new.basic_rate, 0) and
7108          nvl(p_asset_fin_rec_old.adjusted_rate, 0) =
7109                                 nvl(p_asset_fin_rec_new.adjusted_rate, 0) and
7110          nvl(p_asset_fin_rec_old.production_capacity, 0) =
7111                                 nvl(p_asset_fin_rec_new.production_capacity, 0) then
7112 
7113          x_asset_fin_rec_adj.deprn_method_code := null;
7114          x_asset_fin_rec_adj.life_in_months := to_number(null);
7115          x_asset_fin_rec_adj.basic_rate := to_number(null);
7116          x_asset_fin_rec_adj.adjusted_rate := to_number(null);
7117          x_asset_fin_rec_adj.production_capacity := to_number(null);
7118       end if;
7119 
7120    end if;
7124 END populate_fin_rec;
7121 
7122 
7123 
7125 
7126 ---------------------------------------------------------------------------
7127 
7128 FUNCTION faxama
7129          (px_trans_rec           IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
7130           p_asset_hdr_rec                      FA_API_TYPES.asset_hdr_rec_type,
7131           p_asset_desc_rec                     FA_API_TYPES.asset_desc_rec_type,
7132           p_asset_cat_rec                      FA_API_TYPES.asset_cat_rec_type,
7133           p_asset_type_rec                     FA_API_TYPES.asset_type_rec_type,
7134           p_asset_fin_rec_old                  FA_API_TYPES.asset_fin_rec_type,
7135           p_asset_fin_rec_adj                  FA_API_TYPES.asset_fin_rec_type default null,
7136           px_asset_fin_rec_new   IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
7137           p_asset_deprn_rec                    FA_API_TYPES.asset_deprn_rec_type,
7138           p_asset_deprn_rec_adj                FA_API_TYPES.asset_deprn_rec_type default null,
7139           p_period_rec                         FA_API_TYPES.period_rec_type,
7140           p_mrc_sob_type_code                  VARCHAR2,
7141           p_running_mode                       NUMBER,
7142           p_used_by_revaluation                NUMBER,
7143           p_reclassed_asset_id                 NUMBER default null,
7144           p_reclass_src_dest                   VARCHAR2 default null,
7145           p_reclassed_asset_dpis               DATE default null,
7146           p_update_books_summary               BOOLEAN default FALSE,
7147           p_proceeds_of_sale                   NUMBER default 0,
7148           p_cost_of_removal                    NUMBER default 0,
7149           x_deprn_exp               OUT NOCOPY NUMBER,
7150           x_bonus_deprn_exp         OUT NOCOPY NUMBER,
7151           x_impairment_exp          OUT NOCOPY NUMBER,
7152           x_deprn_rsv               OUT NOCOPY NUMBER
7153          , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean IS
7154 
7155    l_calling_fn           varchar2(50) := 'newFA_AMORT_PVT.faxama';
7156    l_reval_deprn_rsv_adj  number :=0;
7157    l_afn_zero             number:=0;
7158 
7159    l_asset_fin_rec_adj    FA_API_TYPES.asset_fin_rec_type;
7160 
7161    -- Bug4958977: Adding following cursor and 2 new variables
7162    CURSOR c_check_dpis_change is
7163        select inbk.transaction_header_id_in
7164        from   fa_books inbk
7165             , fa_books outbk
7166        where  inbk.transaction_header_id_in   = px_trans_rec.member_transaction_header_id
7167        and    outbk.asset_id                  = inbk.asset_id
7168        and    outbk.book_type_code            = p_asset_hdr_rec.book_type_code
7169        and    outbk.transaction_header_id_out = px_trans_rec.member_transaction_header_id
7170        and    inbk.cost                       = outbk.cost
7171        and    nvl(inbk.salvage_value, 0)              = nvl(outbk.salvage_value, 0)
7172        and    nvl(inbk.allowed_deprn_limit_amount, 0) = nvl(outbk.allowed_deprn_limit_amount, 0)
7173        and    inbk.date_placed_in_service     <> outbk.date_placed_in_service;
7174 
7175    l_temp_thid          number;
7176    l_call_bs            BOOLEAN := FALSE;
7177 
7178    l_valid_type_change  BOOLEAN := TRUE; -- bug5149789
7179 
7180    calc_err             EXCEPTION;
7181 
7182 /*
7183    err number;
7184 
7185    cursor c_get_profiler is
7186      select runid,
7187             run_date,
7188             run_comment
7189      from plsql_profiler_runs;
7190 */
7191 
7192 begin <<faxama>>
7193 --tk_util.debug('-');
7194 --tk_util.debug('-');
7195 --tk_util.debug('-');
7196 --tk_util.debug('-+++++-');
7197    if (p_log_level_rec.statement_level) then
7198       fa_debug_pkg.add(l_calling_fn, 'Begin', p_asset_type_rec.asset_type||':'||
7199                                               p_asset_hdr_rec.asset_id||':'||
7200                                               to_char(px_trans_rec.transaction_header_id));
7201       fa_debug_pkg.add(l_calling_fn, 'Begin sob_id', p_asset_hdr_rec.set_of_books_id);
7202 
7203    end if;
7204 
7205 
7206 --   err:=DBMS_PROFILER.START_PROFILER ('faxama:'||to_char(sysdate,'dd-Mon-YYYY hh:mi:ss'));
7207 
7208    X_deprn_exp       := 0;
7209    X_bonus_deprn_exp := 0;
7210    x_impairment_exp  := 0;
7211 
7212    if (p_asset_type_rec.asset_type='CIP') then
7213       FA_SRVR_MSG.ADD_MESSAGE
7214             (CALLING_FN => 'FA_AMORT_PKG.faxama',
7215              NAME       => 'FA_AMT_CIP_NOT_ALLOWED',
7216              TOKEN1     => 'TYPE',
7217              VALUE1     => 'Amortized',  p_log_level_rec => p_log_level_rec);
7218       return FALSE;
7219    end if;
7220 
7221 --tk_util.DumpTrxRec(px_trans_rec, 'px_trans_rec');
7222 --tk_util.DumpFinRec(p_asset_fin_rec_old, 'old fin_rec');
7223 --tk_util.DumpFinRec(p_asset_fin_rec_adj, 'adj fin_rec');
7224 --tk_util.DumpFinRec(px_asset_fin_rec_new, 'new_fin_rec');
7225 --tk_util.DumpDeprnRec(p_asset_deprn_rec, 'old deprn');
7226 --tk_util.DumpDeprnRec(p_asset_deprn_rec_adj, 'adj deprn');
7227 
7228    -- Bug5149789: checking whether member exists or not
7229    -- Call function check_member_existence if either of
7230    -- salvage or deprn limit type is being changed and there is 0 group cost
7231    if (((px_asset_fin_rec_new.salvage_type = 'SUM') and
7232         (px_asset_fin_rec_new.salvage_type <> nvl(p_asset_fin_rec_old.salvage_type,
7233                                                   px_asset_fin_rec_new.salvage_type))) or
7234        ((px_asset_fin_rec_new.deprn_limit_type = 'SUM') and
7235         (px_asset_fin_rec_new.deprn_limit_type <> nvl(p_asset_fin_rec_old.deprn_limit_type,
7236                                                       px_asset_fin_rec_new.deprn_limit_type)))) then
7237 
7238       if (px_asset_fin_rec_new.cost = 0) then
7239 
7240          if not check_member_existence (p_asset_hdr_rec => p_asset_hdr_rec,
7244             end if;
7241                                         p_log_level_rec => p_log_level_rec) then
7242             if (p_log_level_rec.statement_level) then
7243                fa_debug_pkg.add(l_calling_fn, 'calling check_member_existence', 'FAILED', p_log_level_rec => p_log_level_rec);
7245 
7246             l_valid_type_change := FALSE;
7247 
7248          end if;
7249 
7250       else
7251          if (p_log_level_rec.statement_level) then
7252             fa_debug_pkg.add(l_calling_fn, 'Method.deprn_limit type change', 'FAILED', p_log_level_rec => p_log_level_rec);
7253             fa_debug_pkg.add(l_calling_fn, 'cost', px_asset_fin_rec_new.cost, p_log_level_rec => p_log_level_rec);
7254          end if;
7255 
7256          l_valid_type_change := FALSE;
7257 
7258       end if;
7259 
7260       if (not l_valid_type_change) then
7261          if (px_asset_fin_rec_new.salvage_type = 'SUM') then
7262             fa_srvr_msg.add_message(
7263                calling_fn => l_calling_fn,
7264                name       => 'FA_INVALID_PARAMETER',
7265                token1     => 'VALUE',
7266                value1     => px_asset_fin_rec_new.salvage_type,
7267                token2     => 'PARAM',
7268                value2     => 'SALVAGE_TYPE', p_log_level_rec => p_log_level_rec);
7269 
7270          else
7271             fa_srvr_msg.add_message(
7272                calling_fn => l_calling_fn,
7273                name       => 'FA_INVALID_PARAMETER',
7274                token1     => 'VALUE',
7275                value1     => px_asset_fin_rec_new.deprn_limit_type,
7276                token2     => 'PARAM',
7277                value2     => 'DEPRN_LIMIT_TYPE', p_log_level_rec => p_log_level_rec);
7278          end if;
7279 
7280          return false;
7281       end if;
7282 
7283    end if; -- (((px_asset_fin_rec_new.salvage_type = 'SUM') and
7284 
7285    if ((px_trans_rec.transaction_type_code = 'GROUP ADDITION' and
7286        nvl(p_asset_deprn_rec.deprn_reserve, 0) = 0) and
7287       (px_trans_rec.transaction_key not in( 'MA','MJ','MC','MV','MD','MN'))
7288      and (px_asset_fin_rec_new.cost = 0 and px_asset_fin_rec_new.cip_cost = 0) -- Necessary??
7289         or ( px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT' and
7290              px_trans_rec.transaction_key = 'GJ' and
7291              p_asset_fin_rec_old.date_placed_in_service <> px_asset_fin_rec_new.date_placed_in_service))
7292      then
7293      -- Group Addition or adjustment in period of group addition before
7294      -- depreciation run or first member addition
7295 
7296       if not createGroup(
7297                          p_trans_rec            => px_trans_rec,
7298                          p_asset_hdr_rec        => p_asset_hdr_rec,
7299                          p_asset_type_rec       => p_asset_type_rec,
7300                          p_period_rec           => p_period_rec,
7301                          p_asset_fin_rec        => px_asset_fin_rec_new,
7302                          p_asset_deprn_rec      => p_asset_deprn_rec_adj,
7303                          p_mrc_sob_type_code    => p_mrc_sob_type_code,
7304                          p_calling_fn           => l_calling_fn,
7305                          p_log_level_rec        => p_log_level_rec) then
7306 
7307          if (p_log_level_rec.statement_level) then
7308             fa_debug_pkg.add('calc_fin_info', 'calling FA_AMORT_PVT.createGroup', 'FAILED',  p_log_level_rec => p_log_level_rec);
7309          end if;
7310 
7311          return (FALSE);
7312 
7313       end if;
7314 
7315       return true;
7316    elsif (px_trans_rec.transaction_type_code = 'ADDITION' or
7317           px_trans_rec.transaction_type_code = 'CIP ADDITION' or
7318            px_trans_rec.transaction_type_code = 'ADJUSTMENT' or
7319           px_trans_rec.transaction_type_code = 'CIP ADJUSTMENT') and
7320          (p_asset_fin_rec_old.group_asset_id is not null or
7321           px_asset_fin_rec_new.group_asset_id is not null)
7322       and (nvl(px_trans_rec.amortization_start_date,
7323                px_trans_rec.transaction_date_entered) <
7324            p_period_rec.calendar_period_open_date)
7325       then
7326       -- Member addition and adjustment that has impact to the group
7327 
7328          if (p_log_level_rec.statement_level) then
7329             fa_debug_pkg.add('calc_fin_info', 'calling FA_AMORT_PVT.maintainGroup', 'FAILED',  p_log_level_rec => p_log_level_rec);
7330          end if;
7331 
7332    end if;
7333 
7334 
7335    populate_fin_rec(
7336              p_trans_rec          => px_trans_rec,
7337              p_asset_fin_rec_old  => p_asset_fin_rec_old,
7338              p_asset_fin_rec_adj  => p_asset_fin_rec_adj,
7339              p_asset_fin_rec_new  => px_asset_fin_rec_new,
7340              x_asset_fin_rec_adj  => l_asset_fin_rec_adj,
7341              p_log_level_rec      => p_log_level_rec);
7342 
7343    -- Bug4958977: Adding following entire if statement
7344    -- trx could be dpis change if following conditions are met
7345    -- even though trx date is in current period
7346 --tk_util.DumpFinRec(p_asset_fin_rec_adj, 'adj fin_rec');
7347    if (px_trans_rec.transaction_key = 'MJ' and
7348        nvl(p_asset_fin_rec_adj.cost, 0) = 0 and
7349        nvl(p_asset_fin_rec_adj.cip_cost, 0) = 0 and
7350        nvl(p_asset_fin_rec_adj.salvage_value, 0) = 0 and
7351        nvl(p_asset_fin_rec_adj.allowed_deprn_limit_amount, 0) = 0) and
7352       (nvl(px_trans_rec.amortization_start_date,
7353            px_trans_rec.transaction_date_entered) >=
7354                   p_period_rec.calendar_period_open_date) then
7355 
7356       if (p_log_level_rec.statement_level) then
7357          fa_debug_pkg.add(l_calling_fn, 'could be dpis change', 'cont', p_log_level_rec => p_log_level_rec);
7358       end if;
7359 
7360       OPEN c_check_dpis_change;
7361       FETCH c_check_dpis_change INTO l_temp_thid;
7362       CLOSE c_check_dpis_change;
7363 
7367 
7364       if (p_log_level_rec.statement_level) then
7365          fa_debug_pkg.add(l_calling_fn, 'temp_thid', l_temp_thid, p_log_level_rec => p_log_level_rec);
7366       end if;
7368       if (l_temp_thid is not null) then
7369          l_call_bs := TRUE;
7370       else
7371          l_call_bs := FALSE;
7372       end if;
7373    end if;
7374 
7375    -- Bug4037112: Change for ATT 0 cost change
7376    X_deprn_rsv := 0;
7377 
7378    if (not l_call_bs) and
7379       (px_trans_rec.transaction_type_code = 'GROUP ADJUSTMENT') and
7380       (nvl(px_asset_fin_rec_new.tracking_method, 'NULL') <> 'CALCULATE') and
7381       (nvl(l_asset_fin_rec_adj.cost, 0) = 0) and
7382       ((px_trans_rec.transaction_key = 'MA')
7383           or
7384        (px_trans_rec.transaction_key = 'MJ' and
7385         (px_asset_fin_rec_new.salvage_type not in ('SUM', 'AMT')) and
7386         (px_asset_fin_rec_new.deprn_limit_type not in ('SUM', 'AMT')))
7387          ) then
7388 
7389       -- Bug4958977: Need to check possibility of dpis change.
7390       -- This time, possible that dpis is changed from current to old
7391       -- date.
7392       if (p_log_level_rec.statement_level) then
7393          fa_debug_pkg.add(l_calling_fn, 'could be dpis change(cur to old)', 'cont');
7394       end if;
7395 
7396       OPEN c_check_dpis_change;
7397       FETCH c_check_dpis_change INTO l_temp_thid;
7398       CLOSE c_check_dpis_change;
7399 
7400       if (p_log_level_rec.statement_level) then
7401          fa_debug_pkg.add(l_calling_fn, 'temp_thid', l_temp_thid, p_log_level_rec => p_log_level_rec);
7402       end if;
7403 
7404       if (l_temp_thid is not null) then
7405          l_call_bs := TRUE;
7406       else
7407          l_call_bs := FALSE;
7408       end if;
7409 
7410       if (not l_call_bs) then
7411          -- No Need to Maintain FA_BOOKS_SUMMARY Table
7412          return true;
7413       end if;
7414    end if;
7415 
7416 
7417    if (p_asset_type_rec.asset_type = 'GROUP') then
7418       if (nvl(px_trans_rec.amortization_start_date,
7419               px_trans_rec.transaction_date_entered) >=
7420           p_period_rec.calendar_period_open_date) and
7421          (px_trans_rec.transaction_key not in ('MR', 'MS', 'GC')) and (not l_call_bs) then
7422 
7423          if (not  CurrentPeriodAdj(
7424                     p_trans_rec           => px_trans_rec,
7425                     p_asset_hdr_rec       => p_asset_hdr_rec,
7426                     p_asset_type_rec      => p_asset_type_rec,
7427                     p_asset_fin_rec_adj   => l_asset_fin_rec_adj,
7428                     p_asset_fin_rec_old   => p_asset_fin_rec_old,
7429                     px_asset_fin_rec_new  => px_asset_fin_rec_new,
7430                     p_period_rec          => p_period_rec,
7431                     p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
7432                     p_proceeds_of_sale    => nvl(p_proceeds_of_sale, 0),
7433                     p_cost_of_removal     => nvl(p_cost_of_removal, 0),
7434                     p_calling_fn          => l_calling_fn,
7435                     p_mrc_sob_type_code   => p_mrc_sob_type_code,
7436                     p_log_level_rec       => p_log_level_rec)) then
7437             raise calc_err;
7438          end if;
7439 
7440       else
7441 
7442          if (l_asset_fin_rec_adj.eofy_reserve is null) and
7443             (p_asset_deprn_rec_adj.deprn_reserve is not null) and
7444             (p_asset_deprn_rec_adj.ytd_deprn is not null) then
7445             l_asset_fin_rec_adj.eofy_reserve :=
7446                   p_asset_deprn_rec_adj.deprn_reserve - p_asset_deprn_rec_adj.ytd_deprn;
7447          end if;
7448 
7449 
7450          if (not bsRecalculate(
7451                    p_trans_rec            => px_trans_rec,
7452                    p_asset_hdr_rec        => p_asset_hdr_rec,
7453                    p_asset_type_rec       => p_asset_type_rec,
7454                    p_asset_desc_rec       => p_asset_desc_rec,
7455                    p_asset_fin_rec_old    => p_asset_fin_rec_old,
7456                    p_asset_fin_rec_adj    => l_asset_fin_rec_adj,
7457                    p_period_rec           => p_period_rec,
7458                    px_asset_fin_rec_new   => px_asset_fin_rec_new,
7459                    p_asset_deprn_rec      => p_asset_deprn_rec,
7460                    p_asset_deprn_rec_adj  => p_asset_deprn_rec_adj,
7461                    x_deprn_expense        => x_deprn_exp,
7462                    x_bonus_expense        => x_bonus_deprn_exp,
7463                    x_impairment_expense   => x_impairment_exp,
7464                    x_deprn_reserve        => x_deprn_rsv,
7465                    p_running_mode         => p_running_mode,
7466                    p_used_by_revaluation  => p_used_by_revaluation,
7467                    p_reclassed_asset_id   => p_reclassed_asset_id,
7468                    p_reclass_src_dest     => p_reclass_src_dest,
7469                    p_reclassed_asset_dpis => p_reclassed_asset_dpis,
7470                    p_update_books_summary => p_update_books_summary,
7471                    p_mrc_sob_type_code    => p_mrc_sob_type_code,
7472                    p_calling_fn           => l_calling_fn,
7473                     p_log_level_rec       => p_log_level_rec)) then
7474             raise calc_err;
7475          end if;
7476       end if; -- (nvl(px_trans_rec.amortization_start_date,
7477    end if; -- (p_asset_type_rec.asset_type = 'GROUP')
7478 
7479 --tk_util.DumpFinRec(px_asset_fin_rec_new, 'Nfaxama');
7480 
7481    if (p_log_level_rec.statement_level) then
7482       fa_debug_pkg.add(l_calling_fn, 'End', p_asset_type_rec.asset_type||':'||p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
7483    end if;
7484 --tk_util.debug('-+++++-');
7485 --tk_util.debug('-');
7486 --tk_util.debug('-');
7487 --tk_util.debug('-');
7488 --tk_util.debug('-');
7489 --tk_util.debug('-');
7490 
7494 for r_get_profiler in c_get_profiler loop
7491 --   err:=DBMS_PROFILER.STOP_PROFILER;
7492 
7493 /*
7495 null;
7496 --tk_util.debug('runid: '||to_char(r_get_profiler.runid));
7497 --tk_util.debug('run_date: '||to_char(r_get_profiler.run_date, 'DD-MON-YYYY HH24:MI:SS'));
7498 --tk_util.debug('run_comment: '||r_get_profiler.run_comment);
7499 end loop;
7500 */
7501 
7502    return TRUE;
7503 
7504 exception
7505    when calc_err then
7506         if (p_log_level_rec.statement_level) then
7507            fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'calc_err', p_log_level_rec => p_log_level_rec);
7508         end if;
7509 
7510         FA_SRVR_MSG.ADD_SQL_ERROR(CALLING_FN => l_calling_fn, p_log_level_rec => p_log_level_rec);
7511         return false;
7512 
7513    when others then
7514         if (p_log_level_rec.statement_level) then
7515           fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'others: '||sqlerrm, p_log_level_rec => p_log_level_rec);
7516         end if;
7517 
7518         FA_SRVR_MSG.ADD_SQL_ERROR(CALLING_FN => l_calling_fn, p_log_level_rec => p_log_level_rec);
7519         return  FALSE;
7520 end faxama;
7521 
7522 
7523 --+==============================================================================
7524 -- Function: GetExpRsv
7525 --
7526 --   This function return expense or reserve amounts incurred due to some
7527 --   transaction such as unplanned, reserve transfer and retirement adjustment.
7528 --
7529 --   Transaction                   Transaction_Key
7530 --  ----------------------         ---------------
7531 --  Retirement Adjustment          GR
7532 --  Reserve Transfer               GV
7533 --  Unplanned Depreciation         UA or UE
7534 --
7535 --+==============================================================================
7536 FUNCTION GetExpRsv(
7537      p_trans_rec                        FA_API_TYPES.trans_rec_type,
7538      p_asset_hdr_rec                    FA_API_TYPES.asset_hdr_rec_type,
7539      p_period_rec                       FA_API_TYPES.period_rec_type,
7540      p_mrc_sob_type_code                VARCHAR2,
7541      x_exp_rsv_amount       OUT NOCOPY  NUMBER
7542      , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return BOOLEAN IS
7543 
7544   l_calling_fn     VARCHAR2(50) := 'FA_AMORT_PVT.GetExpRsv';
7545 
7546   --
7547   -- This cursor doesn't include period counter created as condition
7548   -- because it is not certain that prior period unplanned is allowed
7549   -- and if it is allowed, whether fa_adjsutments stores period_counter
7550   -- created as the period of amortization start date or not.
7551   -- If period counter created is the period of amortization start date,
7552   -- then period counter can be used as a one of condition.
7553   --
7554   CURSOR c_get_exp_amount IS
7555     select
7556             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7557                            'EXPENSE',
7558                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7559                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7560                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7561                 0)
7562     from   fa_adjustments adj
7563     where adj.transaction_header_id = p_trans_rec.transaction_header_id
7564     and   adj.asset_id = p_asset_hdr_rec.asset_id
7565     and   adj.book_type_code = p_asset_hdr_rec.book_type_code;
7566 
7567   CURSOR c_get_mc_exp_amount IS
7568     select
7569             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7570                            'EXPENSE',
7571                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7572                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7573                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7574                 0)
7575     from   fa_mc_adjustments adj
7576     where adj.transaction_header_id = p_trans_rec.transaction_header_id
7577     and   adj.asset_id = p_asset_hdr_rec.asset_id
7578     and   adj.book_type_code = p_asset_hdr_rec.book_type_code
7579     and   adj.set_of_books_id = p_asset_hdr_rec.set_of_books_id;
7580 
7581 
7582 BEGIN
7583 
7584    --
7585    -- Case of Unplanned Depreciation
7586    --
7587    if (p_mrc_sob_type_code = 'R') then
7588       OPEN c_get_mc_exp_amount;
7589       FETCH c_get_mc_exp_amount INTO x_exp_rsv_amount;
7590       CLOSE c_get_mc_exp_amount;
7591    else
7592       OPEN c_get_exp_amount;
7593       FETCH c_get_exp_amount INTO x_exp_rsv_amount;
7594       CLOSE c_get_exp_amount;
7595    end if;
7596 
7597    if (p_log_level_rec.statement_level) then
7598       fa_debug_pkg.add(l_calling_fn, 'Found Expense:'||p_trans_rec.transaction_key, x_exp_rsv_amount, p_log_level_rec => p_log_level_rec);
7599    end if;
7600 
7601 
7602    return true;
7603 
7604 EXCEPTION
7605    WHEN others THEN
7606       if (p_log_level_rec.statement_level) then
7607          fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'others: '||sqlerrm, p_log_level_rec => p_log_level_rec);
7608       end if;
7609 
7610       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
7611       return false;
7612 
7613 END GetExpRsv;
7614 
7615 --+==============================================================================
7616 -- Function: GetDeprnRec
7617 --
7618 --   The function returns FA_API_TYPES.asset_deprn_rec_type.
7619 --   This will be the starting point for recalculating depreciation.
7620 --
7621 --+==============================================================================
7622 FUNCTION GetDeprnRec (
7623      p_trans_rec                        FA_API_TYPES.trans_rec_type,
7624      p_asset_hdr_rec                    FA_API_TYPES.asset_hdr_rec_type,
7625      p_period_rec                       FA_API_TYPES.period_rec_type,
7626      p_incoming_trx_type_code           VARCHAR2 default 'NULL',
7630 
7627      x_asset_deprn_rec       OUT NOCOPY FA_API_TYPES.asset_deprn_rec_type,
7628      p_mrc_sob_type_code                VARCHAR2,
7629      p_unplanned_exp      IN OUT NOCOPY NUMBER, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
7631   CURSOR c_check_period IS
7632     select 'Y'
7633     from   fa_deprn_summary
7634     where  asset_id = p_asset_hdr_rec.asset_id
7635     and    book_type_code = p_asset_hdr_rec.book_type_code
7636     and    period_counter <= p_period_rec.period_counter;
7637 /*
7638     from   fa_deprn_periods
7639     where  book_type_code = p_asset_hdr_rec.book_type_code
7640     and    period_counter = p_period_rec.period_counter;
7641 */
7642 
7643   -- Return values if year of first transaction is the same year as addition happened.
7644   CURSOR c_get_eofy_rsv IS
7645     select ds.deprn_reserve - ds.ytd_deprn
7646          , ds.bonus_deprn_reserve - ds.bonus_ytd_deprn
7647          , ds.impairment_reserve - ds.ytd_impairment
7648          , ds.ltd_production - ds.ytd_production
7649          , ds.reval_reserve - ds.ytd_reval_deprn_expense
7650     from   fa_fiscal_year fy
7651          , fa_deprn_summary ds
7652          , fa_deprn_periods dp
7653     where  ds.asset_id = p_asset_hdr_rec.asset_id
7654     and    ds.book_type_code = p_asset_hdr_rec.book_type_code
7655     and    ds.deprn_source_code = 'BOOKS'
7656     and    dp.book_type_code = p_asset_hdr_rec.book_type_code
7657     and    dp.period_counter = ds.period_counter + 1 --Bug6987743: add one
7658     and    fy.fiscal_year_name = fa_cache_pkg.fazcbc_record.fiscal_year_name
7659     and    fy.fiscal_year = (dp.period_counter - dp.period_num)/fa_cache_pkg.fazcct_record.number_per_fiscal_year
7663   CURSOR c_get_books_rsv IS
7660     and    fy.fiscal_year = (p_period_rec.period_counter + 1 - p_period_rec.period_num)/
7661                                  fa_cache_pkg.fazcct_record.number_per_fiscal_year;
7662 
7664       select ds.deprn_reserve
7665          , ds.bonus_deprn_reserve
7666          , ds.impairment_reserve
7667          , ds.ltd_production
7668          , ds.reval_reserve
7669       from  fa_deprn_summary ds, fa_deprn_periods dp
7670             ,
7671             (select (fy.fiscal_year * ct.NUMBER_PER_FISCAL_YEAR + cp.PERIOD_NUM)
7672                     add_amort_period
7673                from fa_calendar_periods cp,
7674                     fa_book_controls bc,
7675                     fa_fiscal_year fy,
7676                     fa_calendar_types ct,
7677                     fa_transaction_headers th
7678                WHERE th.book_type_code = p_asset_hdr_rec.book_type_code
7679                and   th.asset_id = p_asset_hdr_rec.asset_id
7680                and   bc.book_type_code = th.book_type_code
7681                and   bc.deprn_calendar = ct.calendar_type
7682                and   bc.fiscal_year_name = fy.fiscal_year_name
7683                and   ct.fiscal_year_name = bc.fiscal_year_name
7684                and   ct.calendar_type = cp.calendar_type
7685                and   cp.start_date between fy.start_date and fy.end_date
7686                and   th.amortization_start_date between cp.start_date and cp.end_date
7687                and   th.transaction_type_code = 'ADDITION'
7688             ) ilv
7689          where  ds.book_type_code = p_asset_hdr_rec.book_type_code
7690          and    ds.asset_id = p_asset_hdr_rec.asset_id
7691          and    ds.deprn_source_code = 'BOOKS'
7692          and    dp.period_counter = ds.period_counter+1
7693          and    dp.book_type_code = ds.book_type_code
7694          and    nvl(add_amort_period,ds.period_counter) <= p_period_rec.period_counter+1;
7695 
7696   CURSOR c_get_adjs IS
7697      SELECT NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7698                            'RESERVE',
7699                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7700                               'DR', ADJ.ADJUSTMENT_AMOUNT,
7701                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7702                 0),
7703             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7704                            'EXPENSE',
7705                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7706                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7707                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7708                 0),
7709             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7710                            'BONUS RESERVE',
7711                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7712                               'DR', ADJ.ADJUSTMENT_AMOUNT,
7713                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7717                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7714                 0),
7715             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7716                            'BONUS EXPENSE',
7718                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7719                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7720                 0),
7721             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7722                            'IMPAIR RESERVE',
7723                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7724                               'DR', ADJ.ADJUSTMENT_AMOUNT,
7725                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7726                 0),
7727             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7728                            'IMPAIR EXPENSE',
7729                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7730                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7731                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7732                 0),
7733             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7734                            'DEPRN ADJUST',
7735                            DECODE(fa_cache_pkg.fazcbc_record.book_class,'TAX',
7736                                   DECODE(ADJ.DEBIT_CREDIT_FLAG,
7737                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7738                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT)))),
7739                 0),
7740             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7741                            'REVAL EXPENSE',
7742                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7743                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7744                               'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7745                 0),
7746             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7747                            'REVAL AMORT',
7748                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7749                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7750                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7751                 0),
7752             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7753                        'REVAL RESERVE',
7754                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7755                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7756                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7757                 0),
7758             NVL(SUM(DECODE(ADJ.SOURCE_TYPE_CODE,
7759                             'REVALUATION',
7760                               DECODE(ADJ.ADJUSTMENT_TYPE,
7761                                       'EXPENSE',
7762                                         DECODE(ADJ.DEBIT_CREDIT_FLAG,
7763                                                 'DR', ADJ.ADJUSTMENT_AMOUNT,
7764                                                 'CR', -1*ADJ.ADJUSTMENT_AMOUNT)))), 0),
7765             NVL(SUM(DECODE(TH.TRANSACTION_KEY,
7766                            'UE',
7767                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7768                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7769                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT),
7770                            'UA',
7771                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7772                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7773                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT)
7774                                 )),
7775                 0)
7776      FROM   FA_ADJUSTMENTS ADJ,
7777             FA_TRANSACTION_HEADERS TH
7778      WHERE  TH.ASSET_ID = p_asset_hdr_rec.asset_id
7779      AND    TH.BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
7780      AND    TH.TRANSACTION_HEADER_ID <> p_trans_rec.transaction_header_id
7781      AND    TH.TRANSACTION_DATE_ENTERED <= p_trans_rec.transaction_date_entered
7782      AND    TH.DATE_EFFECTIVE < p_trans_rec.who_info.creation_date
7783      AND    TH.DATE_EFFECTIVE BETWEEN nvl(p_period_rec.period_open_date, TH.DATE_EFFECTIVE)
7784                                   AND nvl(p_period_rec.period_close_date, TH.DATE_EFFECTIVE)
7785      AND    TH.TRANSACTION_HEADER_ID = ADJ.TRANSACTION_HEADER_ID
7786      AND    ADJ.ASSET_ID =  p_asset_hdr_rec.asset_id
7787      AND    ADJ.BOOK_TYPE_CODE =  p_asset_hdr_rec.book_type_code
7788      --
7789      -- Bug3387996: next condition is nevessary to get adj amount only for this period
7790      -- Bug4741374: period_counter+1 is required to get the rsv from period of addition
7791      AND ADJ.PERIOD_COUNTER_CREATED = p_period_rec.period_counter + 1
7792      AND    ADJ.ADJUSTMENT_TYPE in ('RESERVE', 'EXPENSE')
7793      AND not exists ( select 1 from
7794                       fa_retirements ret,
7795                       fa_conventions con
7796                       where  th.transaction_type_code in (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET)
7797                       and    ret.transaction_header_id_in = th.transaction_header_id
7798                       and    ret.asset_id = p_asset_hdr_rec.asset_id
7799                       and    ret.book_type_code = p_asset_hdr_rec.book_type_code
7800                       and    ret.RETIREMENT_PRORATE_CONVENTION = con.PRORATE_CONVENTION_CODE
7801                       and    ret.date_retired between con.start_date and con.end_date
7802                       and    con.prorate_date > p_trans_rec.transaction_date_entered); -- Bug6899375 Added the not exists condition
7803 
7804   CURSOR c_get_mc_adjs IS
7805      SELECT NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7806                            'RESERVE',
7807                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7808                               'DR', ADJ.ADJUSTMENT_AMOUNT,
7809                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7810                 0),
7811             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7812                            'EXPENSE',
7813                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7814                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7815                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7816                 0),
7817             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7821                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7818                            'BONUS RESERVE',
7819                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7820                               'DR', ADJ.ADJUSTMENT_AMOUNT,
7822                 0),
7823             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7824                            'BONUS EXPENSE',
7825                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7826                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7827                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7828                 0),
7829             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7830                            'IMPAIR RESERVE',
7831                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7832                               'DR', ADJ.ADJUSTMENT_AMOUNT,
7833                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7834                 0),
7835             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7836                            'IMPAIR EXPENSE',
7837                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7838                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7839                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7840                 0),
7841             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7842                            'DEPRN ADJUST',
7843                            DECODE(fa_cache_pkg.fazcbc_record.book_class,'TAX',
7844                                   DECODE(ADJ.DEBIT_CREDIT_FLAG,
7845                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7846                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT)))),
7847                 0),
7848             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7849                            'REVAL EXPENSE',
7850                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7851                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7852                               'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7853                 0),
7854             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7855                            'REVAL AMORT',
7856                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7857                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7858                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7859                 0),
7860             NVL(SUM(DECODE(ADJ.ADJUSTMENT_TYPE,
7861                        'REVAL RESERVE',
7862                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7863                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7864                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT))),
7865                 0),
7866             NVL(SUM(DECODE(ADJ.SOURCE_TYPE_CODE,
7867                             'REVALUATION',
7868                               DECODE(ADJ.ADJUSTMENT_TYPE,
7869                                       'EXPENSE',
7870                                         DECODE(ADJ.DEBIT_CREDIT_FLAG,
7871                                                 'DR', ADJ.ADJUSTMENT_AMOUNT,
7872                                                 'CR', -1*ADJ.ADJUSTMENT_AMOUNT)))), 0),
7873             NVL(SUM(DECODE(TH.TRANSACTION_KEY,
7874                            'UE',
7875                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7876                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7877                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT),
7878                            'UA',
7879                            DECODE(ADJ.DEBIT_CREDIT_FLAG,
7880                                   'DR', ADJ.ADJUSTMENT_AMOUNT,
7881                                   'CR', -1 * ADJ.ADJUSTMENT_AMOUNT)
7882                                 )),
7883                 0)
7884      FROM   FA_MC_ADJUSTMENTS ADJ,
7885             FA_TRANSACTION_HEADERS TH
7886      WHERE  TH.ASSET_ID = p_asset_hdr_rec.asset_id
7887      AND    TH.BOOK_TYPE_CODE = p_asset_hdr_rec.book_type_code
7888      AND    TH.TRANSACTION_HEADER_ID <> p_trans_rec.transaction_header_id
7889      AND    TH.TRANSACTION_DATE_ENTERED <= p_trans_rec.transaction_date_entered
7890      AND    TH.DATE_EFFECTIVE < p_trans_rec.who_info.creation_date
7891      AND    TH.DATE_EFFECTIVE BETWEEN nvl(p_period_rec.period_open_date, TH.DATE_EFFECTIVE)
7892                                   AND nvl(p_period_rec.period_close_date, TH.DATE_EFFECTIVE)
7893      AND    TH.TRANSACTION_HEADER_ID = ADJ.TRANSACTION_HEADER_ID
7894      AND    ADJ.ASSET_ID =  p_asset_hdr_rec.asset_id
7895      AND    ADJ.BOOK_TYPE_CODE =  p_asset_hdr_rec.book_type_code
7896      --
7897      -- Bug3387996: next condition is nevessary to get adj amount only for this period
7898      -- Bug4741374: period_counter+1 is required to get the rsv from period of addition
7899      AND ADJ.PERIOD_COUNTER_CREATED = p_period_rec.period_counter + 1
7900      AND ADJ.ADJUSTMENT_TYPE in ('RESERVE', 'EXPENSE')
7901      AND ADJ.SET_OF_BOOKS_ID = p_asset_hdr_rec.set_of_books_id
7902      AND not exists ( select 1 from
7903                       fa_retirements ret,
7907                       and    ret.asset_id = p_asset_hdr_rec.asset_id
7904                       fa_conventions con
7905                       where  th.transaction_type_code in (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET)
7906                       and    ret.transaction_header_id_in = th.transaction_header_id
7908                       and    ret.book_type_code = p_asset_hdr_rec.book_type_code
7909                       and    ret.RETIREMENT_PRORATE_CONVENTION = con.PRORATE_CONVENTION_CODE
7910                       and    ret.date_retired between con.start_date and con.end_date
7911                       and    con.prorate_date > p_trans_rec.transaction_date_entered); -- Bug6899375 Added the not exists condition
7912 
7913 
7914   l_calling_fn         VARCHAR2(100) := 'FA_AMORT_PVT.GetDeprnRec';
7915   l_dpr                FA_STD_TYPES.FA_DEPRN_ROW_STRUCT;
7916   l_run_mode           VARCHAR2(20) := 'TRANSACTION';
7917   l_status             BOOLEAN;
7918 
7919   l_deprn_rsv          number;
7920   l_deprn_exp          number;
7921   l_bonus_deprn_rsv    number;
7922   l_bonus_deprn_amount number;
7923   l_impairment_rsv     number;
7924   l_impairment_amount  number;
7925   l_deprn_adjust_exp   number;
7926   l_reval_deprn_exp    number;
7927   l_reval_amo          number;
7928   l_reval_rsv          number;
7929   l_reval_exp          number;
7930 
7931   l_unplanned_exp       number;
7932   l_period_exists      VARCHAR2(1) := 'N';
7933   l_find_eofy_reserve  VARCHAR2(1) := 'Y';
7934   error_found   EXCEPTION;
7935 
7936 BEGIN
7937   if (p_log_level_rec.statement_level) then
7938      fa_debug_pkg.add(l_calling_fn, 'Begin', p_trans_rec.transaction_type_code||':'||
7939                       p_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
7940   end if;
7941 
7942 
7943   OPEN c_check_period;
7944   FETCH c_check_period INTO l_period_exists;
7945 
7946   if (c_check_period%NOTFOUND) then
7947      l_period_exists := 'N';
7948   end if;
7949 
7950   CLOSE c_check_period;
7951 
7952 --tk_util.debug('l_period_exists: '||l_period_exists);
7953 
7954   if (l_period_exists = 'Y') and (p_incoming_trx_type_code not like  '%ADDITION') then
7955 
7956      l_dpr.asset_id   := p_asset_hdr_rec.asset_id;
7957      l_dpr.book       := p_asset_hdr_rec.book_type_code;
7958      l_dpr.period_ctr := p_period_rec.period_counter;
7959      l_dpr.dist_id    := 0;
7960      l_dpr.mrc_sob_type_code := p_mrc_sob_type_code;
7961      l_dpr.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
7962 
7963      l_run_mode := 'STANDARD';
7964 
7965      fa_query_balances_pkg.query_balances_int(
7966                              X_DPR_ROW               => l_dpr,
7967                              X_RUN_MODE              => l_run_mode,
7968                              X_DEBUG                 => FALSE,
7969                              X_SUCCESS               => l_status,
7970                              X_CALLING_FN            => l_calling_fn,
7971                              X_TRANSACTION_HEADER_ID => -1, p_log_level_rec => p_log_level_rec);
7972 
7973      if (NOT l_status) then
7974 
7975         if (p_log_level_rec.statement_level) then
7976            fa_debug_pkg.add(l_calling_fn, 'ERROR',
7977                             'Calling fa_query_balances_pkg.query_balances_int', p_log_level_rec => p_log_level_rec);
7978         end if;
7979 
7980         raise error_found;
7981      end if;
7982 
7983 --     x_asset_deprn_rec.deprn_amount             := l_dpr.deprn_exp;
7984      x_asset_deprn_rec.deprn_amount             := 0; -- This needs to be 0 because this should only include
7985                                                       -- current period(period that starts recalculate) amounts
7986      x_asset_deprn_rec.ytd_deprn                := l_dpr.ytd_deprn;
7987      x_asset_deprn_rec.deprn_reserve            := l_dpr.deprn_rsv;
7988      x_asset_deprn_rec.prior_fy_expense         := l_dpr.prior_fy_exp;
7989 --     x_asset_deprn_rec.bonus_deprn_amount       := l_dpr.bonus_deprn_amount;
7990      x_asset_deprn_rec.bonus_deprn_amount       := 0; -- This needs to be 0 because this should only include
7991                                                       -- current period(period that starts recalculate) amounts
7992      x_asset_deprn_rec.bonus_ytd_deprn          := l_dpr.bonus_ytd_deprn;
7993      x_asset_deprn_rec.bonus_deprn_reserve      := l_dpr.bonus_deprn_rsv;
7994      x_asset_deprn_rec.prior_fy_bonus_expense   := l_dpr.prior_fy_bonus_exp;
7995      x_asset_deprn_rec.impairment_amount        := 0;
7996      x_asset_deprn_rec.ytd_impairment           := l_dpr.ytd_impairment;
7997      x_asset_deprn_rec.impairment_reserve           := l_dpr.impairment_rsv;
7998      x_asset_deprn_rec.reval_amortization       := l_dpr.reval_amo;
8002      x_asset_deprn_rec.reval_deprn_reserve      := l_dpr.reval_rsv;
7999      x_asset_deprn_rec.reval_amortization_basis := l_dpr.reval_amo_basis;
8000      x_asset_deprn_rec.reval_deprn_expense      := l_dpr.reval_deprn_exp;
8001      x_asset_deprn_rec.reval_ytd_deprn          := l_dpr.ytd_reval_deprn_exp;
8003      x_asset_deprn_rec.production               := l_dpr.prod;
8004      x_asset_deprn_rec.ytd_production           := l_dpr.ytd_prod;
8005      x_asset_deprn_rec.ltd_production           := l_dpr.ltd_prod;
8006      x_asset_deprn_rec.impairment_reserve           := l_dpr.impairment_rsv;
8007      x_asset_deprn_rec.ytd_impairment           := l_dpr.ytd_impairment;
8008      x_asset_deprn_rec.impairment_amount        := l_dpr.impairment_amount;
8009 
8010 
8011   else
8012 --tk_util.debug('No deprn info in db');
8013      if (p_incoming_trx_type_code like  '%ADDITION') then
8014 
8015         x_asset_deprn_rec.deprn_reserve            := 0;
8016         x_asset_deprn_rec.bonus_deprn_reserve      := 0;
8017         x_asset_deprn_rec.impairment_reserve           := 0;
8018         x_asset_deprn_rec.ltd_production           := 0;
8019         x_asset_deprn_rec.reval_deprn_reserve      := 0;
8020 
8021      else
8022 
8023 --tk_util.debug('Get deprn info from BOOKS  row');
8024         OPEN c_get_eofy_rsv;
8025         FETCH c_get_eofy_rsv INTO x_asset_deprn_rec.deprn_reserve
8026                             , x_asset_deprn_rec.bonus_deprn_reserve
8027                             , x_asset_deprn_rec.impairment_reserve
8028                             , x_asset_deprn_rec.ltd_production
8029                             , x_asset_deprn_rec.reval_deprn_reserve;
8030         CLOSE c_get_eofy_rsv;
8031         if (x_asset_deprn_rec.deprn_reserve is null) then
8032            -- Bug 10081147 : c_get_eofy_rsv did not fetch any row
8033            OPEN c_get_books_rsv;
8034            FETCH c_get_books_rsv INTO x_asset_deprn_rec.deprn_reserve
8035                                , x_asset_deprn_rec.bonus_deprn_reserve
8036                                , x_asset_deprn_rec.impairment_reserve
8037                                , x_asset_deprn_rec.ltd_production
8038                                , x_asset_deprn_rec.reval_deprn_reserve;
8039            CLOSE c_get_books_rsv;
8040         end if;
8041         if (x_asset_deprn_rec.deprn_reserve is null) then
8042            -- Bug 10081147 : c_get_books_rsv did not fetch any row
8043            x_asset_deprn_rec.deprn_reserve            := 0;
8044            x_asset_deprn_rec.bonus_deprn_reserve      := 0;
8045            x_asset_deprn_rec.impairment_reserve       := 0;
8046            x_asset_deprn_rec.ltd_production           := 0;
8047            x_asset_deprn_rec.reval_deprn_reserve      := 0;
8048         end if;
8049 
8050      end if;
8051 
8052      x_asset_deprn_rec.deprn_amount             := 0;
8053      x_asset_deprn_rec.ytd_deprn                := 0;
8054      x_asset_deprn_rec.prior_fy_expense         := 0;
8055      x_asset_deprn_rec.bonus_deprn_amount       := 0;
8056      x_asset_deprn_rec.impairment_amount        := 0;
8057      x_asset_deprn_rec.bonus_ytd_deprn          := 0;
8058      x_asset_deprn_rec.prior_fy_bonus_expense   := 0;
8059      x_asset_deprn_rec.ytd_impairment           := 0;
8060      x_asset_deprn_rec.reval_amortization       := 0;
8061      x_asset_deprn_rec.reval_amortization_basis := 0;
8062      x_asset_deprn_rec.reval_ytd_deprn          := 0;
8063      x_asset_deprn_rec.reval_deprn_reserve      := 0;
8064      x_asset_deprn_rec.production               := 0;
8065      x_asset_deprn_rec.ytd_production           := 0;
8066 
8067 
8068   end if;
8069 --tk_util.DumpDeprnRec(x_asset_deprn_rec, 'GDS');
8070 
8071   if (p_mrc_sob_type_code = 'R') then
8072      OPEN c_get_mc_adjs;
8073      FETCH c_get_mc_adjs INTO l_deprn_rsv,
8074                               l_deprn_exp,
8075                               l_bonus_deprn_rsv,
8076                               l_bonus_deprn_amount,
8077                               l_impairment_rsv,
8078                               l_impairment_amount,
8079                               l_deprn_adjust_exp,
8080                               l_reval_deprn_exp,
8081                               l_reval_amo,
8082                               l_reval_rsv,
8083                               l_reval_exp,
8084                               l_unplanned_exp;
8085      CLOSE c_get_mc_adjs;
8086   else
8087      OPEN c_get_adjs;
8088      FETCH c_get_adjs INTO l_deprn_rsv,
8089                            l_deprn_exp,
8090                            l_bonus_deprn_rsv,
8091                            l_bonus_deprn_amount,
8092                            l_impairment_rsv,
8093                            l_impairment_amount,
8094                            l_deprn_adjust_exp,
8095                            l_reval_deprn_exp,
8096                            l_reval_amo,
8097                            l_reval_rsv,
8098                            l_reval_exp,
8099                            l_unplanned_exp;
8100      CLOSE c_get_adjs;
8101    end if;
8102 
8103   if (l_deprn_exp <> 0) then
8104      x_asset_deprn_rec.deprn_amount  := x_asset_deprn_rec.deprn_amount + l_deprn_exp;
8105      x_asset_deprn_rec.ytd_deprn     := x_asset_deprn_rec.ytd_deprn + l_deprn_exp;
8106      x_asset_deprn_rec.deprn_reserve := x_asset_deprn_rec.deprn_reserve  + l_deprn_exp -
8107                                         l_reval_exp;
8108   end if;
8109 
8110   if (l_bonus_deprn_amount <> 0) then
8111      x_asset_deprn_rec.bonus_deprn_amount  := x_asset_deprn_rec.bonus_deprn_amount +
8112                                               l_bonus_deprn_amount;
8113      x_asset_deprn_rec.bonus_ytd_deprn     := x_asset_deprn_rec.bonus_ytd_deprn +
8114                                               l_bonus_deprn_amount;
8115      x_asset_deprn_rec.bonus_deprn_reserve := x_asset_deprn_rec.bonus_deprn_reserve +
8116                                               l_bonus_deprn_amount;
8120      x_asset_deprn_rec.impairment_amount  := x_asset_deprn_rec.impairment_amount +
8117   end if;
8118 
8119   if (l_impairment_amount <> 0) then
8121                                              l_impairment_amount;
8122      x_asset_deprn_rec.ytd_impairment     := x_asset_deprn_rec.ytd_impairment +
8123                                              l_impairment_amount;
8124      x_asset_deprn_rec.impairment_reserve     := x_asset_deprn_rec.impairment_reserve +
8125                                              l_impairment_amount;
8126   end if;
8127 
8128   if (l_deprn_rsv <> 0) then
8129     x_asset_deprn_rec.deprn_reserve := x_asset_deprn_rec.deprn_reserve - l_deprn_rsv;
8130   end if;
8131 
8132 --tk_util.DumpDeprnRec(x_asset_deprn_rec, 'GDA');
8133    p_unplanned_exp := l_unplanned_exp;
8134 
8135    if (p_log_level_rec.statement_level) then
8136       fa_debug_pkg.add(l_calling_fn, 'End', x_asset_deprn_rec.deprn_reserve, p_log_level_rec => p_log_level_rec);
8137    end if;
8138 
8139    return true;
8140 
8141 EXCEPTION
8142   when error_found then
8143      if (p_log_level_rec.statement_level) then
8144         fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'error_found', p_log_level_rec => p_log_level_rec);
8145      end if;
8146 
8147      fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
8148      return false;
8149 
8150   when others then
8151      if (p_log_level_rec.statement_level) then
8152         fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'others: '||sqlerrm, p_log_level_rec => p_log_level_rec);
8153      end if;
8154 
8155      fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
8156      return false;
8157 
8158 END GetDeprnRec;
8159 
8160 --+==============================================================================
8161 -- Function: GetEofyReserve
8162 --
8163 --+==============================================================================
8164 FUNCTION GetEofyReserve(
8165      p_trans_rec                            FA_API_TYPES.trans_rec_type,
8166      p_trans_rec_cur                        FA_API_TYPES.trans_rec_type,
8167      p_asset_hdr_rec                        FA_API_TYPES.asset_hdr_rec_type,
8168      p_asset_type_rec                       FA_API_TYPES.asset_type_rec_type,
8169      p_period_rec                           FA_API_TYPES.period_rec_type,
8170      x_eofy_reserve              OUT NOCOPY NUMBER,
8171      x_transaction_header_id     OUT NOCOPY NUMBER,
8172      x_transaction_date_entered  OUT NOCOPY DATE,
8173      x_date_effective            OUT NOCOPY DATE,
8174      x_transaction_type_code     OUT NOCOPY VARCHAR2,
8175      p_mrc_sob_type_code                    VARCHAR2,
8176      p_calling_fn                           VARCHAR2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return BOOLEAN IS
8177 
8178   l_calling_fn  VARCHAR2(50) := 'FA_AMORT_PVT.GetEofyReserve';
8179   get_err    EXCEPTION;
8180 
8181   --
8182   -- Find transaction which is
8183   --   Entered in the same fiscal year as given transaction date
8184   --   The transaction has transaction_date ealier than the fiscal year start date
8185   -- In this case, Recalculation needs to go back more to recalculate because
8186   -- it is impossible to find eofy_reserve from fa_deprn_summary
8187   -- Bug 5654286 Excluded ADDITION/VOID transaction
8188   CURSOR c_get_other_trx IS
8189     select th.transaction_header_id    transaction_header_id,
8190            nvl(th.amortization_start_date, th.transaction_date_entered) transaction_date_entered,
8191            th.date_effective date_effective,
8192            th.transaction_type_code transaction_type_code
8193     from
8194            fa_transaction_headers th,
8195            fa_deprn_periods dp,
8196            fa_book_controls bc,
8197            fa_fiscal_year fy
8198     where  th.asset_id                  = p_asset_hdr_rec.asset_id
8199     and    th.book_type_code            = p_asset_hdr_rec.book_type_code
8200     and    bc.book_type_code            = p_asset_hdr_rec.book_type_code
8201     and    bc.fiscal_year_name          = fy.fiscal_year_name
8202     and    dp.book_type_code            = p_asset_hdr_rec.book_type_code
8203     and    dp.fiscal_year               = fy.fiscal_year
8204     and    dp.calendar_period_open_date = fy.start_date
8205     and    p_trans_rec.transaction_date_entered
8206                       between fy.start_date and end_date
8207     and    th.date_effective           >= dp.period_open_date
8208     and    th.transaction_date_entered < dp.calendar_period_open_date
8209     and    th.transaction_header_id    < p_trans_rec.transaction_header_id
8210     and    th.transaction_type_code not in (G_TRX_TYPE_TFR_OUT, G_TRX_TYPE_TFR_IN,
8211                                             G_TRX_TYPE_TFR, G_TRX_TYPE_TFR_VOID,
8212                                             G_TRX_TYPE_REC, G_TRX_TYPE_UNIT_ADJ,
8213                                             G_TRX_TYPE_TFR_VOID)
8214     and    not exists (select 1
8215 from fa_deprn_summary ds
8216    , fa_deprn_periods dp2
8217 where ds.asset_id = p_asset_hdr_rec.asset_id
8218 and   ds.book_type_code            = p_asset_hdr_rec.book_type_code
8219 and   dp.book_type_code =  p_asset_hdr_rec.book_type_code
8220 and   dp.fiscal_year = fy.fiscal_year
8221 and   ds.period_counter = dp2.period_counter -1
8222 and   ds.deprn_source_code = 'BOOKS'
8223 and   ds.deprn_reserve <> 0
8224 and   th.date_effective between dp2.period_open_date and dp2.period_close_date
8225 and   th.transaction_type_code    in (G_TRX_TYPE_ADD, G_TRX_TYPE_ADD_VOID))
8226 ;
8227 
8228   CURSOR c_get_ret_trx IS
8229     select nvl(sum(ret.reserve_retired), 0),
8230            nvl(sum(ret.eofy_reserve), 0)
8231     from   fa_retirements ret,
8232            fa_transaction_headers mth,
8233            fa_transaction_headers gth,
8234            fa_book_controls bc,
8235            fa_fiscal_year fy
8236     where  gth.asset_id                     = p_asset_hdr_rec.asset_id
8240     and    ret.date_retired between fy.start_date
8237     and    gth.book_type_code               = p_asset_hdr_rec.book_type_code
8238     and    bc.book_type_code                = p_asset_hdr_rec.book_type_code
8239     and    bc.fiscal_year_name              = fy.fiscal_year_name
8241                                 and p_trans_rec.transaction_date_entered
8242     and    gth.member_transaction_header_id = mth.transaction_header_id
8243     and    mth.book_type_code               = p_asset_hdr_rec.book_type_code
8244     and    mth.transaction_header_id        = ret.transaction_header_id_in
8245     and    mth.asset_id                     = ret.asset_id
8246     and    gth.member_transaction_header_id = ret.transaction_header_id_in
8247     and    ret.book_type_code               = p_asset_hdr_rec.book_type_code
8248     and    ret.transaction_header_id_out is null
8249     and    fy.start_date =
8250               (select fy.start_date
8251                  from fa_fiscal_year fy,
8252                       fa_book_controls bc
8253                 where bc.book_type_code = p_asset_hdr_rec.book_type_code
8254                   and bc.fiscal_year_name  = fy.fiscal_year_name
8255                   and fy.start_date <= p_trans_rec.transaction_date_entered
8256                   and fy.end_date >= p_trans_rec.transaction_date_entered
8257               );
8258 
8259   CURSOR c_get_mc_ret_trx IS
8260     select nvl(sum(ret.reserve_retired), 0),
8261            nvl(sum(ret.eofy_reserve), 0)
8262     from   fa_mc_retirements ret,
8263            fa_transaction_headers mth,
8264            fa_transaction_headers gth,
8265            fa_mc_book_controls mbc,
8266            fa_book_controls bc,
8267            fa_fiscal_year fy
8268     where  gth.asset_id                     = p_asset_hdr_rec.asset_id
8269     and    gth.book_type_code               = p_asset_hdr_rec.book_type_code
8270     and    bc.book_type_code                = p_asset_hdr_rec.book_type_code
8271     and    mbc.book_type_code               = p_asset_hdr_rec.book_type_code
8272     and    mbc.set_of_books_id              = p_asset_hdr_rec.set_of_books_id
8273     and    bc.fiscal_year_name              = fy.fiscal_year_name
8274     and    ret.date_retired between fy.start_date
8275                                 and p_trans_rec.transaction_date_entered
8276     and    gth.member_transaction_header_id = mth.transaction_header_id
8277     and    mth.book_type_code               = p_asset_hdr_rec.book_type_code
8278     and    mth.transaction_header_id        = ret.transaction_header_id_in
8279     and    mth.asset_id                     = ret.asset_id
8280     and    gth.member_transaction_header_id = ret.transaction_header_id_in
8281     and    ret.book_type_code               = p_asset_hdr_rec.book_type_code
8282     and    ret.transaction_header_id_out is null
8283     and    ret.set_of_books_id               = p_asset_hdr_rec.set_of_books_id
8284     and    fy.start_date =
8285               (select fy.start_date
8286                  from fa_fiscal_year fy,
8287                       fa_mc_book_controls bc
8288                 where bc.book_type_code = p_asset_hdr_rec.book_type_code
8289                   and bc.set_of_books_id = p_asset_hdr_rec.set_of_books_id
8290                   and bc.fiscal_year_name  = fy.fiscal_year_name
8291                   and fy.start_date <= p_trans_rec.transaction_date_entered
8292                   and fy.end_date >= p_trans_rec.transaction_date_entered
8293               );
8294 
8295   CURSOR c_get_ret_trx2 IS
8296     select nvl(sum(ret.reserve_retired), 0),
8297            nvl(sum(ret.eofy_reserve), 0)
8298     from   fa_retirements ret,
8299            fa_transaction_headers th,
8300            fa_book_controls bc,
8301            fa_fiscal_year fy
8302     where  th.asset_id                     = p_asset_hdr_rec.asset_id
8303     and    th.book_type_code               = p_asset_hdr_rec.book_type_code
8304     and    bc.book_type_code               = p_asset_hdr_rec.book_type_code
8305     and    bc.fiscal_year_name             = fy.fiscal_year_name
8306     and    ret.date_retired between fy.start_date
8307                                 and p_trans_rec.transaction_date_entered
8308     and    th.transaction_header_id        = ret.transaction_header_id_in
8309     and    th.asset_id                     = ret.asset_id
8310     and    ret.book_type_code              = p_asset_hdr_rec.book_type_code
8311     and    ret.transaction_header_id_out is null;
8312 
8313 --  CURSOR c_get_mc_ret_trx2 IS
8314 
8315   CURSOR c_get_deprn_period IS
8316     select period_counter - 1
8317          , period_open_date
8318          , period_close_date
8319          , period_num
8320     from   fa_deprn_periods
8321     where  book_type_code = p_asset_hdr_rec.book_type_code
8322     and    p_trans_rec.transaction_date_entered between
8323              calendar_period_open_date and calendar_period_close_date;
8324 
8325   -- Get the transaction before the member addition's transaction which member is reclassed
8326   -- on same fiscal year.
8327 
8328   CURSOR c_get_other_trx2 IS
8329     select th.transaction_header_id    transaction_header_id,
8330            nvl(th.amortization_start_date, th.transaction_date_entered) transaction_date_entered,
8331            th.date_effective date_effective,
8332            th.transaction_type_code transaction_type_code
8333     from   fa_transaction_headers th
8334     where  th.asset_id              = p_asset_hdr_rec.asset_id
8335     and    th.book_type_code        = p_asset_hdr_rec.book_type_code
8336     and    th.transaction_header_id =
8337        -- Get the latest trasnaction of reclassed member asset on group asset
8338       (select max(th.transaction_header_id)
8339        from   fa_transaction_headers th
8340        where  th.asset_id              =p_asset_hdr_rec.asset_id
8341        and    th.book_type_code        = p_asset_hdr_rec.book_type_code
8342        and    th.transaction_type_code not in (G_TRX_TYPE_TFR_OUT, G_TRX_TYPE_TFR_IN,
8343                                                G_TRX_TYPE_TFR, G_TRX_TYPE_TFR_VOID,
8347           -- Get first transaction of reclassed member asset on group asset
8344                                                G_TRX_TYPE_REC, G_TRX_TYPE_UNIT_ADJ,
8345                                                G_TRX_TYPE_TFR_VOID)
8346        and   th.transaction_header_id <
8348          (select min(th.transaction_header_id)
8349           from   fa_transaction_headers th
8350           where  th.book_type_code  = p_asset_hdr_rec.book_type_code
8351           and    th.asset_id        = p_asset_hdr_rec.asset_id
8352           and    th.member_transaction_header_id in
8353              -- Get reclassed member's all transaction headers
8354             (select th.transaction_header_id
8355              from   fa_transaction_headers th
8356              where  th.book_type_code        = p_asset_hdr_rec.book_type_code
8357              and    th.asset_id in
8358                 -- Get reclassed member's asset_id
8359                (select th.asset_id
8360                 from   fa_transaction_headers th
8361                 where  th.book_type_code  = p_asset_hdr_rec.book_type_code
8362                 and    transaction_header_id in
8363                    -- Get reclassed transaction after this transaction's fiscal year
8364                   (select th.member_transaction_header_id
8365                    from   fa_transaction_headers th,
8366                           fa_deprn_periods dp,
8367                           fa_fiscal_year   fy,
8368                           fa_book_controls bc
8369                    where  th.asset_id           = p_asset_hdr_rec.asset_id
8370                    and    th.book_type_code     = p_asset_hdr_rec.book_type_code
8371                    and    dp.book_type_code     = p_asset_hdr_rec.book_type_code
8372                    and    dp.book_type_code = bc.book_type_code
8373                    and    bc.fiscal_year_name = fy.fiscal_year_name
8374                    and    p_trans_rec.transaction_date_entered
8375                                   between fy.start_date and fy.end_date
8376                    and    dp.fiscal_year= fy.fiscal_year
8377                    and    dp.period_num =1
8378                    and    th.date_effective >= dp.period_open_date
8379                    and    th.trx_reference_id is not null
8380                    and    th.member_transaction_header_id is not null
8381                    and    th.transaction_header_id    < p_trans_rec.transaction_header_id
8382 
8383     )))));
8384 
8385 
8386   CURSOR c_cur_eofy_reserve IS
8387     select nvl(bk.eofy_reserve,0)
8388     from   FA_BOOKS bk
8389     where  asset_id       = p_asset_hdr_rec.asset_id
8390     and    book_type_code = p_asset_hdr_rec.book_type_code
8391     and    transaction_header_id_out is null;
8392 
8393 
8394   l_transaction_header_id     NUMBER;
8395   l_transaction_date_entered  DATE;
8396   l_date_effective            DATE;
8397   l_transaction_type_code     VARCHAR2(30);
8398 
8399   l_period_rec                FA_API_TYPES.period_rec_type;
8400   l_asset_deprn_rec           FA_API_TYPES.asset_deprn_rec_type;
8401 
8402   l_unplanned_exp             NUMBER := 0;
8403   l_reserve_retired           NUMBER := 0;
8404   l_eofy_reserve_retired      NUMBER := 0;
8405 
8406 BEGIN
8407 
8408   if (p_log_level_rec.statement_level) then
8409      fa_debug_pkg.add('====='||l_calling_fn||'=====', 'Begin', to_char(p_trans_rec.transaction_header_id)||'=====');
8410   end if;
8411 
8412   if p_trans_rec_cur.transaction_header_id = p_trans_rec.transaction_header_id
8413        and p_trans_rec.transaction_date_entered between
8414              p_period_rec.calendar_period_open_date and p_period_rec.calendar_period_close_date
8415   then
8416       -- At current open period's transaction, get eofy_reserve from FA_BOOKS.
8417 
8418       x_transaction_header_id    := to_number(null);
8419       x_transaction_date_entered := null;
8420       x_date_effective           := null;
8421 
8422       OPEN c_cur_eofy_reserve;
8423       FETCH c_cur_eofy_reserve into x_eofy_reserve;
8424       CLOSE c_cur_eofy_reserve;
8425 
8426       if (p_log_level_rec.statement_level) then
8427          fa_debug_pkg.add(l_calling_fn, 'Can determine current eofy reserve from db ', x_eofy_reserve, p_log_level_rec => p_log_level_rec);
8428       end if;
8429 
8430   else
8431 
8432     OPEN c_get_other_trx;
8433     FETCH c_get_other_trx INTO l_transaction_header_id, l_transaction_date_entered,
8434                              l_date_effective, l_transaction_type_code;
8435 
8436 --tk_util.debug('l_transaction_header_id: '||to_char(l_transaction_header_id));
8437 
8438     if (c_get_other_trx%NOTFOUND) then
8439 --tk_util.debug('c_get_other_trx not found');
8440       OPEN c_get_other_trx2;
8441       FETCH c_get_other_trx2 INTO l_transaction_header_id, l_transaction_date_entered,
8442                              l_date_effective, l_transaction_type_code;
8443     end if;
8444 
8445     if (c_get_other_trx%NOTFOUND and c_get_other_trx2%NOTFOUND) then
8446 
8447        x_transaction_header_id    := to_number(null);
8448        x_transaction_date_entered := null;
8449        x_date_effective           := null;
8450 
8451 
8452         OPEN c_get_deprn_period;
8453         FETCH c_get_deprn_period INTO l_period_rec.period_counter,
8454                                       l_period_rec.period_open_date,
8455                                       l_period_rec.period_close_date,
8456                                       l_period_rec.period_num;
8457 
8458         if (c_get_deprn_period%NOTFOUND) then
8459            CLOSE c_get_deprn_period;
8460 
8461            x_eofy_reserve := 0;
8462 
8463            if (p_log_level_rec.statement_level) then
8464               fa_debug_pkg.add(l_calling_fn, 'This must be addition so eofy reserve ', x_eofy_reserve, p_log_level_rec => p_log_level_rec);
8465            end if;
8466         else
8467           CLOSE c_get_deprn_period;
8468 
8472                     p_period_rec            => l_period_rec,
8469            if not GetDeprnRec (
8470                     p_trans_rec             => p_trans_rec,
8471                     p_asset_hdr_rec         => p_asset_hdr_rec,
8473                     x_asset_deprn_rec       => l_asset_deprn_rec,
8474                     p_mrc_sob_type_code     => p_mrc_sob_type_code,
8475                     p_unplanned_exp         => l_unplanned_exp,
8476                     p_log_level_rec       => p_log_level_rec) then
8477 
8478              if (p_log_level_rec.statement_level) then
8479                 fa_debug_pkg.add(l_calling_fn, 'Error calling',
8480                                  'GetDeprnRec', p_log_level_rec => p_log_level_rec);
8481              end if;
8482 
8483              raise get_err;
8484            end if;
8485 
8486            if (p_mrc_sob_type_code = 'R') then
8487               OPEN c_get_mc_ret_trx;
8488               FETCH c_get_mc_ret_trx INTO l_reserve_retired, l_eofy_reserve_retired;
8489               CLOSE c_get_mc_ret_trx;
8490            else
8491               OPEN c_get_ret_trx;
8492               FETCH c_get_ret_trx INTO l_reserve_retired, l_eofy_reserve_retired;
8493               CLOSE c_get_ret_trx;
8494            end if;
8495 
8496            if (p_log_level_rec.statement_level) then
8497               fa_debug_pkg.add(l_calling_fn, 'Sum of Reserve Retired',
8498                                l_reserve_retired, p_log_level_rec => p_log_level_rec);
8499               fa_debug_pkg.add(l_calling_fn, 'Sum of Eofy Reserve Retired',
8500                                l_eofy_reserve_retired, p_log_level_rec => p_log_level_rec);
8501               fa_debug_pkg.add(l_calling_fn, 'l_unplanned_exp ', l_unplanned_exp, p_log_level_rec => p_log_level_rec);
8502            end if;
8503 
8504            if (l_period_rec.period_num = 1) then
8505               x_eofy_reserve := l_asset_deprn_rec.deprn_reserve
8506                                 + l_reserve_retired
8507                                 - l_eofy_reserve_retired
8508                                 - l_unplanned_exp;
8509            else
8510               x_eofy_reserve := l_asset_deprn_rec.deprn_reserve
8511                                 + l_reserve_retired
8512                                 - l_asset_deprn_rec.ytd_deprn
8513                                 - l_eofy_reserve_retired;
8514                              -- - l_unplanned_exp; /* Commented for bug#7246137 */
8515            end if;
8516 
8517            if (p_log_level_rec.statement_level) then
8518               fa_debug_pkg.add(l_calling_fn, 'Can determine eofy reserve from db ', x_eofy_reserve, p_log_level_rec => p_log_level_rec);
8519            end if;
8520 
8521         end if;
8522 
8523     else  -- c_get_other_trx/2 FOUND
8524 
8525        x_eofy_reserve             := to_number(null);
8526        x_transaction_header_id    := l_transaction_header_id;
8527        x_transaction_date_entered := l_transaction_date_entered;
8528        x_date_effective           := l_date_effective;
8529        x_transaction_type_code    := l_transaction_type_code;
8530 
8531        if (p_log_level_rec.statement_level) then
8532           fa_debug_pkg.add(l_calling_fn, 'Need to go earlier trx',
8533                                        to_char(x_transaction_header_id)||':'||
8534                                        to_char(x_transaction_date_entered, 'DD-MON-RR HH24:MI:SS')||':'||
8535                                        to_char(x_date_effective, 'DD-MON-RR HH24:MI:SS'));
8536        end if;
8537 
8538     end if;  -- End of c_get_other_trx/2 NOTFOUND
8539 
8540     CLOSE c_get_other_trx;
8541     IF c_get_other_trx2%ISOPEN then
8542       CLOSE c_get_other_trx2;
8543     end if;
8544 
8545   end if; -- End of current period transaction or not
8546 
8547   fa_debug_pkg.add('====='||l_calling_fn||'=====', 'End', '=====', p_log_level_rec => p_log_level_rec);
8548 
8549   return TRUE;
8550 
8551 EXCEPTION
8552    WHEN get_err THEN
8553       if (p_log_level_rec.statement_level) then
8554          fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'get_err', p_log_level_rec => p_log_level_rec);
8555       end if;
8556 
8557       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
8558       return false;
8559 
8560    WHEN others THEN
8561       if (p_log_level_rec.statement_level) then
8562          fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'others: '||sqlerrm, p_log_level_rec => p_log_level_rec);
8563       end if;
8564 
8565       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
8566       return false;
8567 
8568 END GetEofyReserve;
8569 
8570 --+==============================================================================
8571 -- Function:  GetFinAdjRec
8572 --
8573 --
8574 --
8575 --
8576 --
8577 --+==============================================================================
8578 FUNCTION GetFinAdjRec(
8579      p_asset_hdr_rec                         FA_API_TYPES.asset_hdr_rec_type,
8580      p_reclass_src_dest                      VARCHAR2,
8581      p_transaction_date_entered              DATE,
8582      x_asset_fin_rec_adj          OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
8583      p_mrc_sob_type_code                     VARCHAR2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
8584 return BOOLEAN is
8585 
8586   l_calling_fn  VARCHAR2(50) := 'FA_AMORT_PVT.GetFinAdjRec';
8587   get_err    EXCEPTION;
8588 
8589   CURSOR c_get_fin_adj_rec IS
8590     select decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(inbk.cost - nvl(outbk.cost, 0))
8591          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(inbk.salvage_value - nvl(outbk.salvage_value, 0))
8592          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(decode(inbk.production_capacity,
8593                       null, decode(outbk.production_capacity,
8597                             nvl(outbk.production_capacity, 0)))
8594                                    null, null,
8595                                          outbk.production_capacity),
8596                             nvl(inbk.production_capacity, 0) -
8598          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(decode(inbk.reval_amortization_basis,
8599                   null, decode(outbk.reval_amortization_basis,
8600                                null, null,
8601                                      outbk.reval_amortization_basis),
8602                         nvl(inbk.reval_amortization_basis, 0) -
8603                         nvl(outbk.reval_amortization_basis, 0)))
8604          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(decode(inbk.reval_ceiling,
8605                       null, decode(outbk.reval_ceiling,
8606                                    null, null,
8607                                          outbk.reval_ceiling),
8608                             nvl(inbk.reval_ceiling, 0) - nvl(outbk.reval_ceiling, 0)))
8609          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(inbk.unrevalued_cost - nvl(outbk.unrevalued_cost, 0))
8610          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(nvl(inbk.allowed_deprn_limit_amount, 0) -
8611                nvl(outbk.allowed_deprn_limit_amount, 0))
8612          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(nvl(inbk.cip_cost, 0) - nvl(outbk.cip_cost, 0))
8613     from   fa_transaction_headers th,
8614            fa_books inbk,
8615            fa_books outbk
8616     where  inbk.asset_id = p_asset_hdr_rec.asset_id
8617     and    inbk.book_type_code = p_asset_hdr_rec.book_type_code
8618     and    outbk.asset_id(+) = p_asset_hdr_rec.asset_id
8619     and    outbk.book_type_code(+) = p_asset_hdr_rec.book_type_code
8620     and    inbk.transaction_header_id_in = th.transaction_header_id
8621     and    outbk.transaction_header_id_out(+) = th.transaction_header_id
8622     and    th.asset_id = p_asset_hdr_rec.asset_id
8623     and    th.book_type_code = p_asset_hdr_rec.book_type_code
8624     and    th.transaction_type_code not in (G_TRX_TYPE_TFR_OUT, G_TRX_TYPE_TFR_IN,
8625                                                G_TRX_TYPE_TFR, G_TRX_TYPE_TFR_VOID,
8626                                                G_TRX_TYPE_REC, G_TRX_TYPE_UNIT_ADJ,
8627                                                G_TRX_TYPE_TFR_VOID)
8628     and    nvl(th.amortization_start_date,
8629                th.transaction_date_entered) <= p_transaction_date_entered
8630     and    not exists(select 'Exclude This Retirement'
8631                       from   fa_retirements ret,
8632                              fa_transaction_headers reith
8633                       where  ret.transaction_header_id_in = th.transaction_header_id
8634                       and    ret.transaction_header_id_out = reith.transaction_header_id
8635                       and    nvl(reith.amortization_start_date,
8636                               reith.transaction_date_entered) <= p_transaction_date_entered)
8637     order by transaction_date_entered;
8638 
8639   CURSOR c_get_mc_fin_adj_rec IS
8640     select decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(inbk.cost - nvl(outbk.cost, 0))
8641          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(inbk.salvage_value - nvl(outbk.salvage_value, 0))
8642          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(decode(inbk.production_capacity,
8643                       null, decode(outbk.production_capacity,
8644                                    null, null,
8645                                          outbk.production_capacity),
8646                             nvl(inbk.production_capacity, 0) -
8647                             nvl(outbk.production_capacity, 0)))
8648          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(decode(inbk.reval_amortization_basis,
8649                   null, decode(outbk.reval_amortization_basis,
8650                                null, null,
8651                                      outbk.reval_amortization_basis),
8652                         nvl(inbk.reval_amortization_basis, 0) -
8653                         nvl(outbk.reval_amortization_basis, 0)))
8654          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(decode(inbk.reval_ceiling,
8655                       null, decode(outbk.reval_ceiling,
8656                                    null, null,
8657                                          outbk.reval_ceiling),
8658                             nvl(inbk.reval_ceiling, 0) - nvl(outbk.reval_ceiling, 0)))
8659          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(inbk.unrevalued_cost - nvl(outbk.unrevalued_cost, 0))
8660          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(nvl(inbk.allowed_deprn_limit_amount, 0) -
8661                nvl(outbk.allowed_deprn_limit_amount, 0))
8662          , decode(p_reclass_src_dest, 'SOURCE', -1, 1) * sum(nvl(inbk.cip_cost, 0) - nvl(outbk.cip_cost, 0))
8663     from   fa_transaction_headers th,
8664            fa_mc_books inbk,
8665            fa_mc_books outbk
8666     where  inbk.asset_id = p_asset_hdr_rec.asset_id
8667     and    inbk.book_type_code = p_asset_hdr_rec.book_type_code
8668     and    inbk.set_of_books_id = p_asset_hdr_rec.set_of_books_id
8669     and    outbk.asset_id(+) = p_asset_hdr_rec.asset_id
8670     and    outbk.book_type_code(+) = p_asset_hdr_rec.book_type_code
8671     and    outbk.set_of_books_id = p_asset_hdr_rec.set_of_books_id
8672     and    inbk.transaction_header_id_in = th.transaction_header_id
8673     and    outbk.transaction_header_id_out(+) = th.transaction_header_id
8674     and    th.asset_id = p_asset_hdr_rec.asset_id
8675     and    th.book_type_code = p_asset_hdr_rec.book_type_code
8676     and    th.transaction_type_code not in (G_TRX_TYPE_TFR_OUT, G_TRX_TYPE_TFR_IN,
8677                                                G_TRX_TYPE_TFR, G_TRX_TYPE_TFR_VOID,
8678                                                G_TRX_TYPE_REC, G_TRX_TYPE_UNIT_ADJ,
8679                                                G_TRX_TYPE_TFR_VOID)
8680     and    nvl(th.amortization_start_date,
8681                th.transaction_date_entered) <= p_transaction_date_entered
8682     and    not exists(select 'Exclude This Retirement'
8686                       and    ret.transaction_header_id_out = reith.transaction_header_id
8683                       from   fa_mc_retirements ret,
8684                              fa_transaction_headers reith
8685                       where  ret.transaction_header_id_in = th.transaction_header_id
8687                       and    ret.set_of_books_id = p_asset_hdr_rec.set_of_books_id
8688                       and    nvl(reith.amortization_start_date,
8689                               reith.transaction_date_entered) <= p_transaction_date_entered)
8690     order by transaction_date_entered;
8691 
8692 
8693 BEGIN
8694 
8695    if (p_log_level_rec.statement_level) then
8696       fa_debug_pkg.add(l_calling_fn, 'Begin',
8697                        to_char(p_asset_hdr_rec.asset_id)||':'||
8698                        to_char(p_transaction_date_entered, 'DD-MON-YYYY'));
8699    end if;
8700 
8701    if (p_mrc_sob_type_code = 'R') then
8702       OPEN c_get_mc_fin_adj_rec;
8703       FETCH c_get_mc_fin_adj_rec INTO x_asset_fin_rec_adj.cost
8704                                     , x_asset_fin_rec_adj.salvage_value
8705                                     , x_asset_fin_rec_adj.production_capacity
8706                                     , x_asset_fin_rec_adj.reval_amortization_basis
8707                                     , x_asset_fin_rec_adj.reval_ceiling
8708                                     , x_asset_fin_rec_adj.unrevalued_cost
8709                                     , x_asset_fin_rec_adj.allowed_deprn_limit_amount
8710                                     , x_asset_fin_rec_adj.cip_cost;
8711       CLOSE c_get_mc_fin_adj_rec;
8712    else
8713       OPEN c_get_fin_adj_rec;
8714       FETCH c_get_fin_adj_rec INTO x_asset_fin_rec_adj.cost
8715                                  , x_asset_fin_rec_adj.salvage_value
8716                                  , x_asset_fin_rec_adj.production_capacity
8717                                  , x_asset_fin_rec_adj.reval_amortization_basis
8718                                  , x_asset_fin_rec_adj.reval_ceiling
8719                                  , x_asset_fin_rec_adj.unrevalued_cost
8720                                  , x_asset_fin_rec_adj.allowed_deprn_limit_amount
8721                                  , x_asset_fin_rec_adj.cip_cost;
8722       CLOSE c_get_fin_adj_rec;
8723    end if;
8724 
8725    if (p_log_level_rec.statement_level) then
8726       fa_debug_pkg.add(l_calling_fn, 'End',
8727                        to_char(x_asset_fin_rec_adj.cost)||':'||
8728                        to_char(x_asset_fin_rec_adj.salvage_value)||':'||
8729                        to_char(x_asset_fin_rec_adj.production_capacity)||':'||
8730                        to_char(x_asset_fin_rec_adj.reval_amortization_basis)||':'||
8731                        to_char(x_asset_fin_rec_adj.reval_ceiling)||':'||
8732                        to_char(x_asset_fin_rec_adj.unrevalued_cost)||':'||
8733                        to_char(x_asset_fin_rec_adj.allowed_deprn_limit_amount)||':'||
8734                        to_char(x_asset_fin_rec_adj.cip_cost));
8735    end if;
8736 
8737    return true;
8738 
8739 EXCEPTION
8740    WHEN get_err THEN
8741       if (p_log_level_rec.statement_level) then
8742          fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'get_err', p_log_level_rec => p_log_level_rec);
8743       end if;
8744 
8745       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
8746       return false;
8747 
8748    WHEN others THEN
8749       if (p_log_level_rec.statement_level) then
8750          fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'others: '||sqlerrm, p_log_level_rec => p_log_level_rec);
8751       end if;
8752 
8753       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
8754       return false;
8755 END GetFinAdjRec;
8756 
8757 --+==============================================================================
8758 -- Function:  GetFinRec
8759 --
8760 --
8761 --
8762 --
8763 --
8764 --+==============================================================================
8765 FUNCTION GetFinRec(
8766      p_trans_rec                  IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
8767      p_asset_hdr_rec                            FA_API_TYPES.asset_hdr_rec_type,
8768      p_asset_type_rec                           FA_API_TYPES.asset_type_rec_type,
8769      px_asset_fin_rec             IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
8770      p_asset_fin_rec_adj                        FA_API_TYPES.asset_fin_rec_type,
8771      p_asset_fin_rec_new                        FA_API_TYPES.asset_fin_rec_type,
8772      x_asset_fin_rec_new             OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
8773      p_init_transaction_header_id               FA_TRANSACTION_HEADERS.TRANSACTION_HEADER_ID%TYPE,
8774      p_use_fin_rec_adj                          BOOLEAN,
8775      p_use_new_deprn_rule                       BOOLEAN,
8776      p_process_this_trx                         BOOLEAN,
8777      x_dpis_change                   OUT NOCOPY BOOLEAN,
8778      p_mrc_sob_type_code                        VARCHAR2
8779 ,p_log_level_rec       IN     fa_api_types.log_level_rec_type default null
8780 ) return BOOLEAN IS
8781 
8782   Cursor c_get_init_bk IS
8783     select date_placed_in_service
8784          , deprn_start_date
8785          , deprn_method_code
8786          , life_in_months
8787          , rate_adjustment_factor
8788          , adjusted_cost
8789          , cost
8790          , original_cost
8791          , salvage_value
8792          , prorate_convention_code
8793          , prorate_date
8794          , cost_change_flag
8795          , adjustment_required_status
8796          , capitalize_flag
8797          , retirement_pending_flag
8798          , depreciate_flag
8799          , itc_amount_id
8800          , itc_amount
8801          , retirement_id
8802          , tax_request_id
8803          , itc_basis
8804          , basic_rate
8808          , recoverable_cost
8805          , adjusted_rate
8806          , bonus_rule
8807          , ceiling_name
8809          , adjusted_capacity
8810          , fully_rsvd_revals_counter
8811          , idled_flag
8812          , period_counter_capitalized
8813          , period_counter_fully_reserved
8814          , period_counter_fully_retired
8815          , production_capacity
8816          , reval_amortization_basis
8817          , reval_ceiling
8818          , unit_of_measure
8819          , unrevalued_cost
8820          , annual_deprn_rounding_flag
8821          , percent_salvage_value
8822          , allowed_deprn_limit
8823          , allowed_deprn_limit_amount
8824          , period_counter_life_complete
8825          , adjusted_recoverable_cost
8826          , annual_rounding_flag
8827          , eofy_adj_cost
8828          , eofy_formula_factor
8829          , short_fiscal_year_flag
8830          , conversion_date
8831          , ORIGINAL_DEPRN_START_DATE
8832          , remaining_life1
8833          , remaining_life2
8834          , group_asset_id
8835          , old_adjusted_cost
8836          , formula_factor
8837          , salvage_type
8838          , deprn_limit_type
8839          , over_depreciate_option
8840          , super_group_id
8841          , reduction_rate
8842          , reduce_addition_flag
8843          , reduce_adjustment_flag
8844          , reduce_retirement_flag
8845          , recognize_gain_loss
8846          , recapture_reserve_flag
8847          , limit_proceeds_flag
8848          , terminal_gain_loss
8849          , tracking_method
8850          , exclude_fully_rsv_flag
8851          , excess_allocation_option
8852          , depreciation_option
8853          , member_rollup_flag
8854          , ytd_proceeds
8855          , ltd_proceeds
8856          , allocate_to_fully_rsv_flag
8857          , allocate_to_fully_ret_flag
8858          , cip_cost
8859          , terminal_gain_loss_amount
8860          , ltd_cost_of_removal
8861          , prior_eofy_reserve
8862          , eofy_reserve
8863          , eop_adj_cost
8864          , eop_formula_factor
8865          , global_attribute1
8866          , global_attribute2
8867          , global_attribute3
8868          , global_attribute4
8869          , global_attribute5
8870          , global_attribute6
8871          , global_attribute7
8872          , global_attribute8
8873          , global_attribute9
8874          , global_attribute10
8875          , global_attribute11
8876          , global_attribute12
8877          , global_attribute13
8878          , global_attribute14
8879          , global_attribute15
8880          , global_attribute16
8881          , global_attribute17
8882          , global_attribute18
8883          , global_attribute19
8884          , global_attribute20
8885          , global_attribute_category
8886          , nbv_at_switch
8887          , prior_deprn_limit_type
8888          , prior_deprn_limit_amount
8889          , prior_deprn_limit
8890          , prior_deprn_method
8891          , prior_life_in_months
8892          , prior_basic_rate
8893          , prior_adjusted_rate
8894     from   fa_books
8895     where  asset_id                   = p_asset_hdr_rec.asset_id
8896     and    book_type_code             = p_asset_hdr_rec.book_type_code
8897     and    (transaction_header_id_out = p_trans_rec.transaction_header_id
8898         or  (transaction_header_id_in < p_trans_rec.transaction_header_id and
8899              transaction_header_id_out is null))
8900     order by transaction_header_id_in desc;
8901 
8902 
8903   Cursor c_get_init_bk_winit IS
8904     select date_placed_in_service
8905          , deprn_start_date
8906          , deprn_method_code
8907          , life_in_months
8908          , rate_adjustment_factor
8909          , adjusted_cost
8910          , cost
8911          , original_cost
8912          , salvage_value
8913          , prorate_convention_code
8914          , prorate_date
8915          , cost_change_flag
8916          , adjustment_required_status
8917          , capitalize_flag
8918          , retirement_pending_flag
8919          , depreciate_flag
8920          , itc_amount_id
8921          , itc_amount
8922          , retirement_id
8923          , tax_request_id
8924          , itc_basis
8925          , basic_rate
8926          , adjusted_rate
8927          , bonus_rule
8928          , ceiling_name
8929          , recoverable_cost
8930          , adjusted_capacity
8931          , fully_rsvd_revals_counter
8932          , idled_flag
8933          , period_counter_capitalized
8934          , period_counter_fully_reserved
8935          , period_counter_fully_retired
8936          , production_capacity
8937          , reval_amortization_basis
8938          , reval_ceiling
8939          , unit_of_measure
8940          , unrevalued_cost
8941          , annual_deprn_rounding_flag
8942          , percent_salvage_value
8943          , allowed_deprn_limit
8944          , allowed_deprn_limit_amount
8945          , period_counter_life_complete
8946          , adjusted_recoverable_cost
8947          , annual_rounding_flag
8948          , eofy_adj_cost
8949          , eofy_formula_factor
8950          , short_fiscal_year_flag
8951          , conversion_date
8952          , ORIGINAL_DEPRN_START_DATE
8953          , remaining_life1
8954          , remaining_life2
8955          , group_asset_id
8956          , old_adjusted_cost
8957          , formula_factor
8958          , salvage_type
8959          , deprn_limit_type
8960          , over_depreciate_option
8961          , super_group_id
8962          , reduction_rate
8963          , reduce_addition_flag
8967          , recapture_reserve_flag
8964          , reduce_adjustment_flag
8965          , reduce_retirement_flag
8966          , recognize_gain_loss
8968          , limit_proceeds_flag
8969          , terminal_gain_loss
8970          , tracking_method
8971          , exclude_fully_rsv_flag
8972          , excess_allocation_option
8973          , depreciation_option
8974          , member_rollup_flag
8975          , ytd_proceeds
8976          , ltd_proceeds
8977          , allocate_to_fully_rsv_flag
8978          , allocate_to_fully_ret_flag
8979          , cip_cost
8980          , terminal_gain_loss_amount
8981          , ltd_cost_of_removal
8982          , prior_eofy_reserve
8983          , eofy_reserve
8984          , eop_adj_cost
8985          , eop_formula_factor
8986          , global_attribute1
8987          , global_attribute2
8988          , global_attribute3
8989          , global_attribute4
8990          , global_attribute5
8991          , global_attribute6
8992          , global_attribute7
8993          , global_attribute8
8994          , global_attribute9
8995          , global_attribute10
8996          , global_attribute11
8997          , global_attribute12
8998          , global_attribute13
8999          , global_attribute14
9000          , global_attribute15
9001          , global_attribute16
9002          , global_attribute17
9003          , global_attribute18
9004          , global_attribute19
9005          , global_attribute20
9006          , global_attribute_category
9007          , nbv_at_switch
9008          , prior_deprn_limit_type
9009          , prior_deprn_limit_amount
9010          , prior_deprn_limit
9011          , prior_deprn_method
9012          , prior_life_in_months
9013          , prior_basic_rate
9014          , prior_adjusted_rate
9015     from   fa_books
9016     where  asset_id                   = p_asset_hdr_rec.asset_id
9017     and    book_type_code             = p_asset_hdr_rec.book_type_code
9018     and    (transaction_header_id_out = p_init_transaction_header_id
9019         or  (p_init_transaction_header_id > transaction_header_id_in and
9020              transaction_header_id_in < p_trans_rec.transaction_header_id and
9021              transaction_header_id_out is null))
9022     order by transaction_header_id_in desc;
9023 
9024   Cursor c_get_init_mcbk IS
9025     select date_placed_in_service
9026          , deprn_start_date
9027          , deprn_method_code
9028          , life_in_months
9029          , rate_adjustment_factor
9030          , adjusted_cost
9031          , cost
9032          , original_cost
9033          , salvage_value
9034          , prorate_convention_code
9035          , prorate_date
9036          , cost_change_flag
9037          , adjustment_required_status
9038          , capitalize_flag
9039          , retirement_pending_flag
9040          , depreciate_flag
9041          , itc_amount_id
9042          , itc_amount
9043          , retirement_id
9044          , tax_request_id
9045          , itc_basis
9046          , basic_rate
9047          , adjusted_rate
9048          , bonus_rule
9049          , ceiling_name
9050          , recoverable_cost
9051          , adjusted_capacity
9052          , fully_rsvd_revals_counter
9053          , idled_flag
9054          , period_counter_capitalized
9055          , period_counter_fully_reserved
9056          , period_counter_fully_retired
9057          , production_capacity
9058          , reval_amortization_basis
9059          , reval_ceiling
9060          , unit_of_measure
9061          , unrevalued_cost
9062          , annual_deprn_rounding_flag
9063          , percent_salvage_value
9064          , allowed_deprn_limit
9065          , allowed_deprn_limit_amount
9066          , period_counter_life_complete
9067          , adjusted_recoverable_cost
9068          , annual_rounding_flag
9069          , eofy_adj_cost
9070          , eofy_formula_factor
9071          , short_fiscal_year_flag
9072          , conversion_date
9073          , ORIGINAL_DEPRN_START_DATE
9074          , remaining_life1
9075          , remaining_life2
9076          , group_asset_id
9077          , old_adjusted_cost
9078          , formula_factor
9079          , salvage_type
9080          , deprn_limit_type
9081          , over_depreciate_option
9082          , super_group_id
9083          , reduction_rate
9084          , reduce_addition_flag
9085          , reduce_adjustment_flag
9086          , reduce_retirement_flag
9087          , recognize_gain_loss
9088          , recapture_reserve_flag
9089          , limit_proceeds_flag
9090          , terminal_gain_loss
9091          , tracking_method
9092          , exclude_fully_rsv_flag
9093          , excess_allocation_option
9094          , depreciation_option
9095          , member_rollup_flag
9096          , ytd_proceeds
9097          , ltd_proceeds
9098          , allocate_to_fully_rsv_flag
9099          , allocate_to_fully_ret_flag
9100          , cip_cost
9101          , terminal_gain_loss_amount
9102          , ltd_cost_of_removal
9103          , prior_eofy_reserve
9104          , eofy_reserve
9105          , eop_adj_cost
9106          , eop_formula_factor
9107          , global_attribute1
9108          , global_attribute2
9109          , global_attribute3
9110          , global_attribute4
9111          , global_attribute5
9112          , global_attribute6
9113          , global_attribute7
9114          , global_attribute8
9115          , global_attribute9
9116          , global_attribute10
9117          , global_attribute11
9118          , global_attribute12
9119          , global_attribute13
9120          , global_attribute14
9121          , global_attribute15
9125          , global_attribute19
9122          , global_attribute16
9123          , global_attribute17
9124          , global_attribute18
9126          , global_attribute20
9127          , global_attribute_category
9128     from   fa_mc_books
9129     where  asset_id                  = p_asset_hdr_rec.asset_id
9130     and    set_of_books_id           = p_asset_hdr_rec.set_of_books_id
9131     and    book_type_code            = p_asset_hdr_rec.book_type_code
9132     and    (transaction_header_id_out = p_trans_rec.transaction_header_id
9133         or  (transaction_header_id_in < p_trans_rec.transaction_header_id and
9134              transaction_header_id_out is null))
9135     order by transaction_header_id_in desc;
9136 
9137   Cursor c_get_init_mcbk_winit IS
9138     select date_placed_in_service
9139          , deprn_start_date
9140          , deprn_method_code
9141          , life_in_months
9142          , rate_adjustment_factor
9143          , adjusted_cost
9144          , cost
9145          , original_cost
9146          , salvage_value
9147          , prorate_convention_code
9148          , prorate_date
9149          , cost_change_flag
9150          , adjustment_required_status
9151          , capitalize_flag
9152          , retirement_pending_flag
9153          , depreciate_flag
9154          , itc_amount_id
9155          , itc_amount
9156          , retirement_id
9157          , tax_request_id
9158          , itc_basis
9159          , basic_rate
9160          , adjusted_rate
9161          , bonus_rule
9162          , ceiling_name
9163          , recoverable_cost
9164          , adjusted_capacity
9165          , fully_rsvd_revals_counter
9166          , idled_flag
9167          , period_counter_capitalized
9168          , period_counter_fully_reserved
9169          , period_counter_fully_retired
9170          , production_capacity
9171          , reval_amortization_basis
9172          , reval_ceiling
9173          , unit_of_measure
9174          , unrevalued_cost
9175          , annual_deprn_rounding_flag
9176          , percent_salvage_value
9177          , allowed_deprn_limit
9178          , allowed_deprn_limit_amount
9179          , period_counter_life_complete
9180          , adjusted_recoverable_cost
9181          , annual_rounding_flag
9182          , eofy_adj_cost
9183          , eofy_formula_factor
9184          , short_fiscal_year_flag
9185          , conversion_date
9186          , ORIGINAL_DEPRN_START_DATE
9187          , remaining_life1
9188          , remaining_life2
9189          , group_asset_id
9190          , old_adjusted_cost
9191          , formula_factor
9192          , salvage_type
9193          , deprn_limit_type
9194          , over_depreciate_option
9195          , super_group_id
9196          , reduction_rate
9197          , reduce_addition_flag
9198          , reduce_adjustment_flag
9199          , reduce_retirement_flag
9200          , recognize_gain_loss
9201          , recapture_reserve_flag
9202          , limit_proceeds_flag
9203          , terminal_gain_loss
9204          , tracking_method
9205          , exclude_fully_rsv_flag
9206          , excess_allocation_option
9207          , depreciation_option
9208          , member_rollup_flag
9209          , ytd_proceeds
9210          , ltd_proceeds
9211          , allocate_to_fully_rsv_flag
9212          , allocate_to_fully_ret_flag
9213          , cip_cost
9214          , terminal_gain_loss_amount
9215          , ltd_cost_of_removal
9216          , prior_eofy_reserve
9217          , eofy_reserve
9218          , eop_adj_cost
9219          , eop_formula_factor
9220          , global_attribute1
9221          , global_attribute2
9222          , global_attribute3
9223          , global_attribute4
9224          , global_attribute5
9225          , global_attribute6
9226          , global_attribute7
9227          , global_attribute8
9228          , global_attribute9
9229          , global_attribute10
9230          , global_attribute11
9231          , global_attribute12
9232          , global_attribute13
9233          , global_attribute14
9234          , global_attribute15
9235          , global_attribute16
9236          , global_attribute17
9237          , global_attribute18
9238          , global_attribute19
9239          , global_attribute20
9240          , global_attribute_category
9241     from   fa_mc_books
9242     where  set_of_books_id           = p_asset_hdr_rec.set_of_books_id
9243     and    asset_id                  = p_asset_hdr_rec.asset_id
9244     and    book_type_code            = p_asset_hdr_rec.book_type_code
9245     and    (transaction_header_id_out = p_init_transaction_header_id
9246         or  (p_init_transaction_header_id > transaction_header_id_in and
9247              transaction_header_id_in < p_trans_rec.transaction_header_id and
9248              transaction_header_id_out is null))
9249     order by transaction_header_id_in desc;
9250 
9251  /* Bug 4043619 : Modified the cursor for salvage_value, allow_deprn_limit and allow_deprn_limit_adjusted. */
9252  /* Bug 5384014 : Modified the cursor so that it returns the deprn_method_code correctly for assets
9253                   using depreciation method 'Units of production in hours' */
9254  /* Bug 6863138 : Need to calculate new deprn_limit values instead of delta */
9255 
9256   Cursor c_get_bk (c_asset_id              number,
9257                    c_transaction_header_id number) IS
9258     select inbk.date_placed_in_service
9259          , inbk.deprn_start_date
9260          , decode(inbk.deprn_method_code,
9261                      outbk.deprn_method_code,
9262                         decode(inbk.life_in_months,
9263                                   outbk.life_in_months,
9264                                       decode(inbk.basic_rate,
9268                                                                 decode(inbk.production_capacity,
9265                                                 outbk.basic_rate,
9266                                                    decode(inbk.adjusted_rate,
9267                                                              outbk.adjusted_rate,
9269                                                                          outbk.production_capacity,
9270                                                                                     null,
9271                                                                                     inbk.deprn_method_code),
9272                                                                 inbk.deprn_method_code),
9273                                                    inbk.deprn_method_code),
9274                                       inbk.deprn_method_code),
9275                         inbk.deprn_method_code)
9276          , decode(inbk.deprn_method_code,
9277                      outbk.deprn_method_code,
9278                         decode(inbk.life_in_months,
9279                                 outbk.life_in_months, null,
9280                                                       inbk.life_in_months),
9281                         inbk.life_in_months)
9282          , inbk.rate_adjustment_factor
9283          , inbk.adjusted_cost
9284          , inbk.cost - nvl(outbk.cost, 0)
9285          , inbk.original_cost
9286          , decode(inbk.salvage_type,
9287                   'PCT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9288                               'PCT',inbk.salvage_value - nvl(outbk.salvage_value, 0),
9289                               'AMT',nvl(inbk.salvage_value, 0)),
9290                   'AMT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9291                                'AMT',inbk.salvage_value - nvl(outbk.salvage_value, 0),
9292                                'PCT',nvl(inbk.salvage_value, 0)))
9293          , inbk.prorate_convention_code
9294          , inbk.prorate_date
9295          , inbk.cost_change_flag
9296          , inbk.adjustment_required_status
9297          , inbk.capitalize_flag
9298          , inbk.retirement_pending_flag
9299          , inbk.depreciate_flag
9300          , inbk.itc_amount_id
9301          , inbk.itc_amount
9302          , inbk.retirement_id
9303          , inbk.tax_request_id
9304          , inbk.itc_basis
9305 --bug fix 5718524
9306          , decode(inbk.deprn_method_code,
9307                      outbk.deprn_method_code,
9308                             decode(inbk.basic_rate,
9309                                     outbk.basic_rate,  decode(inbk.adjusted_rate,
9310                                                               outbk.adjusted_rate, null,
9311                                                               inbk.basic_rate),
9312                                                       inbk.basic_rate),
9313                             inbk.basic_rate)
9314          , decode(inbk.deprn_method_code,
9315                      outbk.deprn_method_code,
9316                             decode(inbk.adjusted_rate,
9317                                     outbk.adjusted_rate,  decode(inbk.basic_rate,
9318                                                               outbk.basic_rate, null,
9319                                                               inbk.adjusted_rate),
9320                                                          inbk.adjusted_rate),
9321                             inbk.adjusted_rate)
9322          , inbk.bonus_rule
9323          , inbk.ceiling_name
9324          , inbk.recoverable_cost
9325          , inbk.adjusted_capacity
9326          , decode(inbk.fully_rsvd_revals_counter,
9327                   null, decode(outbk.fully_rsvd_revals_counter,
9328                                null, null,
9329                                      outbk.fully_rsvd_revals_counter),
9330                         nvl(inbk.fully_rsvd_revals_counter, 0) -
9331                         nvl(outbk.fully_rsvd_revals_counter, 0))
9332          , inbk.idled_flag
9333          , inbk.period_counter_capitalized
9334          , inbk.period_counter_fully_reserved
9335          , inbk.period_counter_fully_retired
9336          , decode(inbk.production_capacity,
9337                   null, decode(outbk.production_capacity,
9338                                null, null,
9339                                      outbk.production_capacity),
9340                         nvl(inbk.production_capacity, 0) - nvl(outbk.production_capacity, 0))
9341          , decode(inbk.reval_amortization_basis,
9342                   null, decode(outbk.reval_amortization_basis,
9343                                null, null,
9344                                      outbk.reval_amortization_basis),
9345                         nvl(inbk.reval_amortization_basis, 0) -
9346                         nvl(outbk.reval_amortization_basis, 0))
9347          , decode(inbk.reval_ceiling,
9348                   null, decode(outbk.reval_ceiling,
9349                                null, null,
9350                                      outbk.reval_ceiling),
9351                         nvl(inbk.reval_ceiling, 0) - nvl(outbk.reval_ceiling, 0))
9352          , inbk.unit_of_measure
9353          , inbk.unrevalued_cost - nvl(outbk.unrevalued_cost, 0)
9354          , inbk.annual_deprn_rounding_flag
9355          , decode(inbk.salvage_type,
9356                   'PCT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9357                               'PCT',nvl(inbk.percent_salvage_value, 0)  - nvl(outbk.percent_salvage_value, 0),
9358                               'AMT',nvl(inbk.percent_salvage_value, 0)),
9359                   'AMT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9360                                'AMT',nvl(inbk.percent_salvage_value, 0)  - nvl(outbk.percent_salvage_value, 0),
9361                                'PCT',nvl(inbk.percent_salvage_value, 0)))
9362          ,decode(p_trans_rec.calling_interface, 'FAXASSET',decode(inbk.deprn_limit_type,
9363                                                         'PCT', nvl(inbk.allowed_deprn_limit, 0),
9367                                                                       'PCT',nvl(inbk.allowed_deprn_limit, 0) - nvl(outbk.allowed_deprn_limit, 0),
9364                                                         'AMT', nvl(inbk.allowed_deprn_limit, 0)),
9365                                               decode(inbk.deprn_limit_type,
9366                                                           'PCT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9368                                                                       'AMT',nvl(inbk.allowed_deprn_limit, 0)),
9369                                                           'AMT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9370                                                                        'AMT',nvl(inbk.allowed_deprn_limit, 0) - nvl(outbk.allowed_deprn_limit, 0),
9371                                                                        'PCT',nvl(inbk.allowed_deprn_limit, 0)))) --Bug7196658
9372 
9373          , decode(p_trans_rec.calling_interface, 'FAXASSET',decode(inbk.deprn_limit_type,
9374                                                           'PCT', nvl(inbk.allowed_deprn_limit_amount, 0),
9375                                                           'AMT', nvl(inbk.allowed_deprn_limit_amount, 0)),
9376                                                  decode(inbk.deprn_limit_type,
9377                                                           'PCT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9378                                                                       'PCT',nvl(inbk.allowed_deprn_limit_amount, 0) - nvl(outbk.allowed_deprn_limit_amount, 0),
9379                                                                       'AMT',nvl(inbk.allowed_deprn_limit_amount, 0)),
9380                                                           'AMT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9381                                                                        'AMT',nvl(inbk.allowed_deprn_limit_amount, 0) - nvl(outbk.allowed_deprn_limit_amount, 0),
9382                                                                        'PCT',nvl(inbk.allowed_deprn_limit_amount, 0)))) --Bug7196658
9383          , inbk.period_counter_life_complete
9384          , inbk.adjusted_recoverable_cost
9385          , inbk.annual_rounding_flag
9386          , inbk.eofy_adj_cost
9387          , inbk.eofy_formula_factor
9388          , inbk.short_fiscal_year_flag
9389          , inbk.conversion_date
9390          , inbk.ORIGINAL_DEPRN_START_DATE
9391          , inbk.remaining_life1
9392          , inbk.remaining_life2
9393          , inbk.group_asset_id
9394          , inbk.old_adjusted_cost
9395          , inbk.formula_factor
9396          , inbk.salvage_type
9397          , inbk.deprn_limit_type
9398          , inbk.over_depreciate_option
9399          , decode(inbk.super_group_id, outbk.super_group_id, null, inbk.super_group_id)
9400          , decode(inbk.reduction_rate,
9401                   null, decode(outbk.reduction_rate,
9402                                null, null,
9403                                      outbk.reduction_rate),
9404                         nvl(inbk.reduction_rate, 0) - nvl(outbk.reduction_rate, 0))
9405          , inbk.reduce_addition_flag
9406          , inbk.reduce_adjustment_flag
9407          , inbk.reduce_retirement_flag
9408          , inbk.recognize_gain_loss
9409          , inbk.recapture_reserve_flag
9410          , inbk.limit_proceeds_flag
9411          , inbk.terminal_gain_loss
9412          , inbk.tracking_method
9413          , inbk.exclude_fully_rsv_flag
9414          , inbk.excess_allocation_option
9415          , inbk.depreciation_option
9416          , inbk.member_rollup_flag
9417          , inbk.ytd_proceeds
9418          , inbk.ltd_proceeds
9419          , inbk.allocate_to_fully_rsv_flag
9420          , inbk.allocate_to_fully_ret_flag
9421          , nvl(inbk.cip_cost, 0) - nvl(outbk.cip_cost, 0)
9422          , inbk.terminal_gain_loss_amount
9423          , inbk.ltd_cost_of_removal
9424          , inbk.prior_eofy_reserve
9425          , nvl(inbk.eofy_reserve, 0) - nvl(outbk.eofy_reserve, 0)
9426          , inbk.eop_adj_cost
9427          , inbk.eop_formula_factor
9428          , inbk.global_attribute1
9429          , inbk.global_attribute2
9430          , inbk.global_attribute3
9431          , inbk.global_attribute4
9432          , inbk.global_attribute5
9433          , inbk.global_attribute6
9434          , inbk.global_attribute7
9435          , inbk.global_attribute8
9436          , inbk.global_attribute9
9437          , inbk.global_attribute10
9438          , inbk.global_attribute11
9439          , inbk.global_attribute12
9440          , inbk.global_attribute13
9441          , inbk.global_attribute14
9442          , inbk.global_attribute15
9443          , inbk.global_attribute16
9444          , inbk.global_attribute17
9445          , inbk.global_attribute18
9446          , inbk.global_attribute19
9447          , inbk.global_attribute20
9448          , inbk.global_attribute_category
9449          , inbk.nbv_at_switch
9450          , inbk.prior_deprn_limit_type
9451          , inbk.prior_deprn_limit_amount
9452          , inbk.prior_deprn_limit
9453          , inbk.prior_deprn_method
9454          , inbk.prior_life_in_months
9455          , inbk.prior_basic_rate
9456          , inbk.prior_adjusted_rate
9457     from   fa_books inbk,
9458            fa_books outbk
9459     where  inbk.asset_id = c_asset_id
9460     and    inbk.asset_id = outbk.asset_id(+)
9461     and    inbk.book_type_code = p_asset_hdr_rec.book_type_code
9462     and    inbk.book_type_code = outbk.book_type_code(+)
9463     and    inbk.transaction_header_id_in = c_transaction_header_id
9464     and    inbk.transaction_header_id_in = outbk.transaction_header_id_out(+);
9465 
9466 /* Bug 4043619 : Modified the mrc cursor for salvage_value, allow_deprn_limit and allow_deprn_limit_adjusted. */
9467 /* Bug 5384014 : Modified the mrc cursor so that it returns the deprn_method_code correctly for assets
9468                   using depreciation method 'Units of production in hours' */
9472                    c_transaction_header_id number) IS
9469 /* Bug 6863138 : Need to calculate new deprn_limit values instead of delta */
9470 
9471   Cursor c_get_mcbk (c_asset_id              number,
9473     select inbk.date_placed_in_service
9474          , inbk.deprn_start_date
9475          , decode(inbk.deprn_method_code,
9476                      outbk.deprn_method_code,
9477                         decode(inbk.life_in_months,
9478                                   outbk.life_in_months,
9479                                       decode(inbk.basic_rate,
9480                                                 outbk.basic_rate,
9481                                                    decode(inbk.adjusted_rate,
9482                                                              outbk.adjusted_rate,
9483                                                                 decode(inbk.production_capacity,
9484                                                                          outbk.production_capacity,
9485                                                                                     null,
9486                                                                                     inbk.deprn_method_code),
9487                                                                 inbk.deprn_method_code),
9488                                                    inbk.deprn_method_code),
9489                                       inbk.deprn_method_code),
9490                         inbk.deprn_method_code)
9491          , decode(inbk.deprn_method_code,
9492                      outbk.deprn_method_code, decode(inbk.life_in_months,
9493                                                         outbk.life_in_months, null,
9494                                                                             inbk.life_in_months),
9495                                               inbk.life_in_months)
9496          , inbk.rate_adjustment_factor
9497          , inbk.adjusted_cost
9498          , inbk.cost - nvl(outbk.cost, 0)
9499          , inbk.original_cost
9500          , decode(inbk.salvage_type,
9501                   'PCT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9502                               'PCT',inbk.salvage_value - nvl(outbk.salvage_value, 0),
9503                               'AMT',nvl(inbk.salvage_value, 0)),
9504                   'AMT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9505                                'AMT',inbk.salvage_value - nvl(outbk.salvage_value, 0),
9506                                'PCT',nvl(inbk.salvage_value, 0)))
9507          , inbk.prorate_convention_code
9508          , inbk.prorate_date
9509          , inbk.cost_change_flag
9510          , inbk.adjustment_required_status
9511          , inbk.capitalize_flag
9512          , inbk.retirement_pending_flag
9513          , inbk.depreciate_flag
9514          , inbk.itc_amount_id
9515          , inbk.itc_amount
9516          , inbk.retirement_id
9517          , inbk.tax_request_id
9518          , inbk.itc_basis
9519          , decode(inbk.deprn_method_code,
9520                      outbk.deprn_method_code, decode(inbk.basic_rate,
9521                                                         outbk.basic_rate, decode(inbk.adjusted_rate,
9522                                                                                  outbk.adjusted_rate, null,
9523                                                                                  inbk.basic_rate),
9524                                                                         inbk.basic_rate),
9525                                               inbk.basic_rate)
9526          , decode(inbk.deprn_method_code,
9527                      outbk.deprn_method_code, decode(inbk.adjusted_rate,
9528                                                         outbk.adjusted_rate, decode(inbk.basic_rate,
9529                                                                                     outbk.basic_rate, null,
9530                                                                                     inbk.adjusted_rate),
9531                                                                            inbk.adjusted_rate),
9532                                               inbk.adjusted_rate)
9533          , inbk.bonus_rule
9534          , inbk.ceiling_name
9535          , inbk.recoverable_cost
9536          , inbk.adjusted_capacity
9537          , decode(inbk.fully_rsvd_revals_counter,
9538                   null, decode(outbk.fully_rsvd_revals_counter,
9539                                null, null,
9540                                      outbk.fully_rsvd_revals_counter),
9541                         nvl(inbk.fully_rsvd_revals_counter, 0) -
9542                         nvl(outbk.fully_rsvd_revals_counter, 0))
9543          , inbk.idled_flag
9544          , inbk.period_counter_capitalized
9545          , inbk.period_counter_fully_reserved
9546          , inbk.period_counter_fully_retired
9547          , decode(inbk.production_capacity,
9548                   null, decode(outbk.production_capacity,
9549                                null, null,
9550                                      outbk.production_capacity),
9551                         nvl(inbk.production_capacity, 0) - nvl(outbk.production_capacity, 0))
9552          , decode(inbk.reval_amortization_basis,
9553                   null, decode(outbk.reval_amortization_basis,
9554                                null, null,
9555                                      outbk.reval_amortization_basis),
9556                         nvl(inbk.reval_amortization_basis, 0) -
9557                         nvl(outbk.reval_amortization_basis, 0))
9558          , decode(inbk.reval_ceiling,
9559                   null, decode(outbk.reval_ceiling,
9560                                null, null,
9561                                      outbk.reval_ceiling),
9562                         nvl(inbk.reval_ceiling, 0) - nvl(outbk.reval_ceiling, 0))
9563          , inbk.unit_of_measure
9564          , inbk.unrevalued_cost - nvl(outbk.unrevalued_cost, 0)
9565          , inbk.annual_deprn_rounding_flag
9566          , decode(inbk.salvage_type,
9570                   'AMT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9567                   'PCT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9568                               'PCT',nvl(inbk.percent_salvage_value, 0)  - nvl(outbk.percent_salvage_value, 0),
9569                               'AMT',nvl(inbk.percent_salvage_value, 0)),
9571                                'AMT',nvl(inbk.percent_salvage_value, 0)  - nvl(outbk.percent_salvage_value, 0),
9572                                'PCT',nvl(inbk.percent_salvage_value, 0)))
9573          ,decode(p_trans_rec.calling_interface, 'FAXASSET',decode(inbk.deprn_limit_type,
9574                                                         'PCT', nvl(inbk.allowed_deprn_limit, 0),
9575                                                         'AMT', nvl(inbk.allowed_deprn_limit, 0)),
9576                                               decode(inbk.deprn_limit_type,
9577                                                           'PCT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9578                                                                       'PCT',nvl(inbk.allowed_deprn_limit, 0) - nvl(outbk.allowed_deprn_limit, 0),
9579                                                                       'AMT',nvl(inbk.allowed_deprn_limit, 0)),
9580                                                           'AMT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9581                                                                        'AMT',nvl(inbk.allowed_deprn_limit, 0) - nvl(outbk.allowed_deprn_limit, 0),
9582                                                                        'PCT',nvl(inbk.allowed_deprn_limit, 0)))) --Bug7196658
9583 
9584          , decode(p_trans_rec.calling_interface, 'FAXASSET',decode(inbk.deprn_limit_type,
9585                                                           'PCT', nvl(inbk.allowed_deprn_limit_amount, 0),
9586                                                           'AMT', nvl(inbk.allowed_deprn_limit_amount, 0)),
9587                                                  decode(inbk.deprn_limit_type,
9588                                                           'PCT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9589                                                                       'PCT',nvl(inbk.allowed_deprn_limit_amount, 0) - nvl(outbk.allowed_deprn_limit_amount, 0),
9590                                                                       'AMT',nvl(inbk.allowed_deprn_limit_amount, 0)),
9591                                                           'AMT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9592                                                                        'AMT',nvl(inbk.allowed_deprn_limit_amount, 0) - nvl(outbk.allowed_deprn_limit_amount, 0),
9593                                                                        'PCT',nvl(inbk.allowed_deprn_limit_amount, 0)))) --Bug7196658
9594          , inbk.period_counter_life_complete
9595          , inbk.adjusted_recoverable_cost
9596          , inbk.annual_rounding_flag
9597          , inbk.eofy_adj_cost
9598          , inbk.eofy_formula_factor
9599          , inbk.short_fiscal_year_flag
9600          , inbk.conversion_date
9601          , inbk.ORIGINAL_DEPRN_START_DATE
9602          , inbk.remaining_life1
9603          , inbk.remaining_life2
9604          , inbk.group_asset_id
9605          , inbk.old_adjusted_cost
9606          , inbk.formula_factor
9607          , inbk.salvage_type
9608          , inbk.deprn_limit_type
9609          , inbk.over_depreciate_option
9610          , decode(inbk.super_group_id, outbk.super_group_id, null, inbk.super_group_id)
9611          , decode(inbk.reduction_rate,
9612                   null, decode(outbk.reduction_rate,
9613                                null, null,
9614                                      outbk.reduction_rate),
9615                         nvl(inbk.reduction_rate, 0) - nvl(outbk.reduction_rate, 0))
9616          , inbk.reduce_addition_flag
9617          , inbk.reduce_adjustment_flag
9618          , inbk.reduce_retirement_flag
9619          , inbk.recognize_gain_loss
9620          , inbk.recapture_reserve_flag
9621          , inbk.limit_proceeds_flag
9622          , inbk.terminal_gain_loss
9623          , inbk.tracking_method
9624          , inbk.exclude_fully_rsv_flag
9625          , inbk.excess_allocation_option
9626          , inbk.depreciation_option
9627          , inbk.member_rollup_flag
9628          , inbk.ytd_proceeds
9629          , inbk.ltd_proceeds
9630          , inbk.allocate_to_fully_rsv_flag
9631          , inbk.allocate_to_fully_ret_flag
9632          , nvl(inbk.cip_cost, 0) - nvl(outbk.cip_cost, 0)
9633          , inbk.terminal_gain_loss_amount
9634          , inbk.ltd_cost_of_removal
9635          , inbk.prior_eofy_reserve
9636          , nvl(inbk.eofy_reserve, 0) - nvl(outbk.eofy_reserve, 0)
9637          , inbk.eop_adj_cost
9638          , inbk.eop_formula_factor
9639          , inbk.global_attribute1
9640          , inbk.global_attribute2
9641          , inbk.global_attribute3
9642          , inbk.global_attribute4
9643          , inbk.global_attribute5
9644          , inbk.global_attribute6
9645          , inbk.global_attribute7
9646          , inbk.global_attribute8
9647          , inbk.global_attribute9
9648          , inbk.global_attribute10
9649          , inbk.global_attribute11
9650          , inbk.global_attribute12
9651          , inbk.global_attribute13
9652          , inbk.global_attribute14
9653          , inbk.global_attribute15
9654          , inbk.global_attribute16
9655          , inbk.global_attribute17
9656          , inbk.global_attribute18
9657          , inbk.global_attribute19
9658          , inbk.global_attribute20
9659          , inbk.global_attribute_category
9660     from   fa_mc_books inbk,
9661            fa_mc_books outbk
9662     where  inbk.asset_id = c_asset_id
9663     and    inbk.asset_id = outbk.asset_id(+)
9664     and    inbk.book_type_code = p_asset_hdr_rec.book_type_code
9665     and    inbk.book_type_code = outbk.book_type_code(+)
9666     and    inbk.transaction_header_id_in = c_transaction_header_id
9670 
9667     and    inbk.transaction_header_id_in = outbk.transaction_header_id_out(+)
9668     and    inbk.set_of_books_id = p_asset_hdr_rec.set_of_books_id
9669     and    outbk.set_of_books_id(+) = p_asset_hdr_rec.set_of_books_id;
9671 /* Bug 4043619 : Modified the cursor for salvage_value, allow_deprn_limit and allow_deprn_limit_adjusted. */
9672 
9673   -- In case px_asset_fin_rec is null
9674   Cursor c_get_bk2 (c_asset_id              number,
9675                         c_transaction_header_id number) IS
9676     select inbk.date_placed_in_service
9677          , inbk.deprn_start_date
9678          , inbk.deprn_method_code
9679          , inbk.life_in_months
9680          , inbk.rate_adjustment_factor
9681          , inbk.adjusted_cost
9682          , inbk.cost - nvl(outbk.cost, 0)
9683          , inbk.original_cost
9684          , decode(inbk.salvage_type,
9685                   'PCT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9686                               'PCT',inbk.salvage_value - nvl(outbk.salvage_value, 0),
9687                               'AMT',nvl(inbk.salvage_value, 0)),
9688                   'AMT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9689                                'AMT',inbk.salvage_value - nvl(outbk.salvage_value, 0),
9690                                'PCT',nvl(inbk.salvage_value, 0)))
9691          , inbk.prorate_convention_code
9692          , inbk.prorate_date
9693          , inbk.cost_change_flag
9694          , inbk.adjustment_required_status
9695          , inbk.capitalize_flag
9696          , inbk.retirement_pending_flag
9697          , inbk.depreciate_flag
9698          , inbk.itc_amount_id
9699          , inbk.itc_amount
9700          , inbk.retirement_id
9704          , inbk.adjusted_rate
9701          , inbk.tax_request_id
9702          , inbk.itc_basis
9703          , inbk.basic_rate
9705          , inbk.bonus_rule
9706          , inbk.ceiling_name
9707          , inbk.recoverable_cost
9708          , inbk.adjusted_capacity
9709          , decode(inbk.fully_rsvd_revals_counter,
9710                   null, decode(outbk.fully_rsvd_revals_counter,
9711                                null, null,
9712                                      outbk.fully_rsvd_revals_counter),
9713                         nvl(inbk.fully_rsvd_revals_counter, 0) -
9714                         nvl(outbk.fully_rsvd_revals_counter, 0))
9715          , inbk.idled_flag
9716          , inbk.period_counter_capitalized
9717          , inbk.period_counter_fully_reserved
9718          , inbk.period_counter_fully_retired
9719          , decode(inbk.production_capacity,
9720                   null, decode(outbk.production_capacity,
9721                                null, null,
9722                                      outbk.production_capacity),
9723                         nvl(inbk.production_capacity, 0) - nvl(outbk.production_capacity, 0))
9724          , decode(inbk.reval_amortization_basis,
9725                   null, decode(outbk.reval_amortization_basis,
9726                                null, null,
9727                                      outbk.reval_amortization_basis),
9728                         nvl(inbk.reval_amortization_basis, 0) -
9729                         nvl(outbk.reval_amortization_basis, 0))
9730          , decode(inbk.reval_ceiling,
9731                   null, decode(outbk.reval_ceiling,
9732                                null, null,
9733                                      outbk.reval_ceiling),
9734                         nvl(inbk.reval_ceiling, 0) - nvl(outbk.reval_ceiling, 0))
9735          , inbk.unit_of_measure
9736          , inbk.unrevalued_cost - nvl(outbk.unrevalued_cost, 0)
9737          , inbk.annual_deprn_rounding_flag
9738          , decode(inbk.salvage_type,
9739                   'PCT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9740                               'PCT',nvl(inbk.percent_salvage_value, 0)  - nvl(outbk.percent_salvage_value, 0),
9741                               'AMT',nvl(inbk.percent_salvage_value, 0)),
9742                   'AMT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9743                                'AMT',nvl(inbk.percent_salvage_value, 0)  - nvl(outbk.percent_salvage_value, 0),
9744                                'PCT',nvl(inbk.percent_salvage_value, 0)))
9745          , decode(inbk.deprn_limit_type,
9746                   'PCT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9747                               'PCT',nvl(inbk.allowed_deprn_limit, 0) - nvl(outbk.allowed_deprn_limit, 0),
9748                               'AMT',nvl(inbk.allowed_deprn_limit, 0)),
9749                   'AMT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9750                                'AMT',nvl(inbk.allowed_deprn_limit, 0) - nvl(outbk.allowed_deprn_limit, 0),
9751                                'PCT',nvl(inbk.allowed_deprn_limit, 0)))
9755                               'AMT',nvl(inbk.allowed_deprn_limit_amount, 0)),
9752         , decode(inbk.deprn_limit_type,
9753                   'PCT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9754                               'PCT',nvl(inbk.allowed_deprn_limit_amount, 0) - nvl(outbk.allowed_deprn_limit_amount, 0),
9756                   'AMT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9757                                'AMT',nvl(inbk.allowed_deprn_limit_amount, 0) - nvl(outbk.allowed_deprn_limit_amount, 0),
9758                                'PCT',nvl(inbk.allowed_deprn_limit_amount, 0)))
9759          , inbk.period_counter_life_complete
9760          , inbk.adjusted_recoverable_cost
9761          , inbk.annual_rounding_flag
9762          , inbk.eofy_adj_cost
9763          , inbk.eofy_formula_factor
9764          , inbk.short_fiscal_year_flag
9765          , inbk.conversion_date
9766          , inbk.ORIGINAL_DEPRN_START_DATE
9767          , inbk.remaining_life1
9768          , inbk.remaining_life2
9769          , inbk.group_asset_id
9770          , inbk.old_adjusted_cost
9771          , inbk.formula_factor
9772          , inbk.salvage_type
9773          , inbk.deprn_limit_type
9774          , inbk.over_depreciate_option
9775          , decode(inbk.super_group_id, outbk.super_group_id, null, inbk.super_group_id)
9776          , decode(inbk.reduction_rate,
9777                   null, decode(outbk.reduction_rate,
9778                                null, null,
9779                                      outbk.reduction_rate),
9780                         nvl(inbk.reduction_rate, 0) - nvl(outbk.reduction_rate, 0))
9781          , inbk.reduce_addition_flag
9782          , inbk.reduce_adjustment_flag
9783          , inbk.reduce_retirement_flag
9784          , inbk.recognize_gain_loss
9785          , inbk.recapture_reserve_flag
9786          , inbk.limit_proceeds_flag
9787          , inbk.terminal_gain_loss
9788          , inbk.tracking_method
9789          , inbk.exclude_fully_rsv_flag
9790          , inbk.excess_allocation_option
9791          , inbk.depreciation_option
9792          , inbk.member_rollup_flag
9793          , inbk.ytd_proceeds
9794          , inbk.ltd_proceeds
9795          , inbk.allocate_to_fully_rsv_flag
9796          , inbk.allocate_to_fully_ret_flag
9797          , nvl(inbk.cip_cost, 0) - nvl(outbk.cip_cost, 0)
9798          , inbk.terminal_gain_loss_amount
9799          , inbk.ltd_cost_of_removal
9800          , inbk.prior_eofy_reserve
9801          , nvl(inbk.eofy_reserve, 0) - nvl(outbk.eofy_reserve, 0)
9802          , inbk.eop_adj_cost
9803          , inbk.eop_formula_factor
9804          , inbk.global_attribute1
9805          , inbk.global_attribute2
9806          , inbk.global_attribute3
9807          , inbk.global_attribute4
9808          , inbk.global_attribute5
9809          , inbk.global_attribute6
9810          , inbk.global_attribute7
9811          , inbk.global_attribute8
9812          , inbk.global_attribute9
9813          , inbk.global_attribute10
9814          , inbk.global_attribute11
9815          , inbk.global_attribute12
9816          , inbk.global_attribute13
9817          , inbk.global_attribute14
9818          , inbk.global_attribute15
9819          , inbk.global_attribute16
9820          , inbk.global_attribute17
9821          , inbk.global_attribute18
9822          , inbk.global_attribute19
9823          , inbk.global_attribute20
9824          , inbk.global_attribute_category
9825          , inbk.nbv_at_switch
9826          , inbk.prior_deprn_limit_type
9827          , inbk.prior_deprn_limit_amount
9828          , inbk.prior_deprn_limit
9829          , inbk.prior_deprn_method
9830          , inbk.prior_life_in_months
9831          , inbk.prior_basic_rate
9832          , inbk.prior_adjusted_rate
9833     from   fa_books inbk,
9834            fa_books outbk
9835     where  inbk.asset_id = c_asset_id
9836     and    inbk.asset_id = outbk.asset_id(+)
9837     and    inbk.book_type_code = p_asset_hdr_rec.book_type_code
9838     and    inbk.book_type_code = outbk.book_type_code(+)
9839     and    inbk.transaction_header_id_in = c_transaction_header_id
9840     and    inbk.transaction_header_id_in = outbk.transaction_header_id_out(+);
9841 
9842 
9843 /* Bug 4043619 : Modified the mrc cursor for salvage_value, allow_deprn_limit and allow_deprn_limit_adjusted. */
9844 
9845   -- In case px_asset_fin_rec is null
9846   Cursor c_get_mcbk2 (c_asset_id              number,
9847                    c_transaction_header_id number) IS
9848     select inbk.date_placed_in_service
9849          , inbk.deprn_start_date
9850          , inbk.deprn_method_code
9851          , inbk.life_in_months
9852          , inbk.rate_adjustment_factor
9853          , inbk.adjusted_cost
9854          , inbk.cost - nvl(outbk.cost, 0)
9855          , inbk.original_cost
9856          , decode(inbk.salvage_type,
9857                   'PCT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9858                               'PCT',inbk.salvage_value - nvl(outbk.salvage_value, 0),
9859                               'AMT',nvl(inbk.salvage_value, 0)),
9860                   'AMT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9861                                'AMT',inbk.salvage_value - nvl(outbk.salvage_value, 0),
9862                                'PCT',nvl(inbk.salvage_value, 0)))
9863          , inbk.prorate_convention_code
9864          , inbk.prorate_date
9865          , inbk.cost_change_flag
9866          , inbk.adjustment_required_status
9867          , inbk.capitalize_flag
9868          , inbk.retirement_pending_flag
9869          , inbk.depreciate_flag
9870          , inbk.itc_amount_id
9871          , inbk.itc_amount
9872          , inbk.retirement_id
9873          , inbk.tax_request_id
9874          , inbk.itc_basis
9875          , inbk.basic_rate
9876          , inbk.adjusted_rate
9877          , inbk.bonus_rule
9878          , inbk.ceiling_name
9882                   null, decode(outbk.fully_rsvd_revals_counter,
9879          , inbk.recoverable_cost
9880          , inbk.adjusted_capacity
9881          , decode(inbk.fully_rsvd_revals_counter,
9883                                null, null,
9884                                      outbk.fully_rsvd_revals_counter),
9885                         nvl(inbk.fully_rsvd_revals_counter, 0) -
9886                         nvl(outbk.fully_rsvd_revals_counter, 0))
9887          , inbk.idled_flag
9888          , inbk.period_counter_capitalized
9889          , inbk.period_counter_fully_reserved
9890          , inbk.period_counter_fully_retired
9891          , decode(inbk.production_capacity,
9892                   null, decode(outbk.production_capacity,
9893                                null, null,
9894                                      outbk.production_capacity),
9895                         nvl(inbk.production_capacity, 0) - nvl(outbk.production_capacity, 0))
9896          , decode(inbk.reval_amortization_basis,
9897                   null, decode(outbk.reval_amortization_basis,
9898                                null, null,
9899                                      outbk.reval_amortization_basis),
9900                         nvl(inbk.reval_amortization_basis, 0) -
9901                         nvl(outbk.reval_amortization_basis, 0))
9902          , decode(inbk.reval_ceiling,
9903                   null, decode(outbk.reval_ceiling,
9904                                null, null,
9905                                      outbk.reval_ceiling),
9906                         nvl(inbk.reval_ceiling, 0) - nvl(outbk.reval_ceiling, 0))
9907          , inbk.unit_of_measure
9908          , inbk.unrevalued_cost - nvl(outbk.unrevalued_cost, 0)
9909          , inbk.annual_deprn_rounding_flag
9910          , decode(inbk.salvage_type,
9911                   'PCT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9912                               'PCT',nvl(inbk.percent_salvage_value, 0)  - nvl(outbk.percent_salvage_value, 0),
9913                               'AMT',nvl(inbk.percent_salvage_value, 0)),
9914                   'AMT', decode(nvl(outbk.salvage_type, inbk.salvage_type),
9915                                'AMT',nvl(inbk.percent_salvage_value, 0)  - nvl(outbk.percent_salvage_value, 0),
9916                                'PCT',nvl(inbk.percent_salvage_value, 0)))
9917          , decode(inbk.deprn_limit_type,
9918                   'PCT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9919                               'PCT',nvl(inbk.allowed_deprn_limit, 0) - nvl(outbk.allowed_deprn_limit, 0),
9920                               'AMT',nvl(inbk.allowed_deprn_limit, 0)),
9921                   'AMT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9922                                'AMT',nvl(inbk.allowed_deprn_limit, 0) - nvl(outbk.allowed_deprn_limit, 0),
9923                                'PCT',nvl(inbk.allowed_deprn_limit, 0)))
9924         , decode(inbk.deprn_limit_type,
9925                   'PCT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9926                               'PCT',nvl(inbk.allowed_deprn_limit_amount, 0) - nvl(outbk.allowed_deprn_limit_amount, 0),
9927                               'AMT',nvl(inbk.allowed_deprn_limit_amount, 0)),
9928                   'AMT', decode(nvl(outbk.deprn_limit_type, inbk.deprn_limit_type),
9929                                'AMT',nvl(inbk.allowed_deprn_limit_amount, 0) - nvl(outbk.allowed_deprn_limit_amount, 0),
9930                                'PCT',nvl(inbk.allowed_deprn_limit_amount, 0)))
9931          , inbk.period_counter_life_complete
9932          , inbk.adjusted_recoverable_cost
9933          , inbk.annual_rounding_flag
9934          , inbk.eofy_adj_cost
9935          , inbk.eofy_formula_factor
9936          , inbk.short_fiscal_year_flag
9937          , inbk.conversion_date
9938          , inbk.ORIGINAL_DEPRN_START_DATE
9939          , inbk.remaining_life1
9940          , inbk.remaining_life2
9941          , inbk.group_asset_id
9942          , inbk.old_adjusted_cost
9943          , inbk.formula_factor
9944          , inbk.salvage_type
9945          , inbk.deprn_limit_type
9946          , inbk.over_depreciate_option
9947          , decode(inbk.super_group_id, outbk.super_group_id, null, inbk.super_group_id)
9948          , decode(inbk.reduction_rate,
9949                   null, decode(outbk.reduction_rate,
9950                                null, null,
9951                                      outbk.reduction_rate),
9952                         nvl(inbk.reduction_rate, 0) - nvl(outbk.reduction_rate, 0))
9953          , inbk.reduce_addition_flag
9954          , inbk.reduce_adjustment_flag
9955          , inbk.reduce_retirement_flag
9956          , inbk.recognize_gain_loss
9957          , inbk.recapture_reserve_flag
9958          , inbk.limit_proceeds_flag
9959          , inbk.terminal_gain_loss
9960          , inbk.tracking_method
9961          , inbk.exclude_fully_rsv_flag
9962          , inbk.excess_allocation_option
9963          , inbk.depreciation_option
9964          , inbk.member_rollup_flag
9965          , inbk.ytd_proceeds
9966          , inbk.ltd_proceeds
9967          , inbk.allocate_to_fully_rsv_flag
9968          , inbk.allocate_to_fully_ret_flag
9969          , nvl(inbk.cip_cost, 0) - nvl(outbk.cip_cost, 0)
9970          , inbk.terminal_gain_loss_amount
9971          , inbk.ltd_cost_of_removal
9972          , inbk.prior_eofy_reserve
9973          , nvl(inbk.eofy_reserve, 0) - nvl(outbk.eofy_reserve, 0)
9974          , inbk.eop_adj_cost
9975          , inbk.eop_formula_factor
9976          , inbk.global_attribute1
9977          , inbk.global_attribute2
9978          , inbk.global_attribute3
9979          , inbk.global_attribute4
9980          , inbk.global_attribute5
9981          , inbk.global_attribute6
9982          , inbk.global_attribute7
9983          , inbk.global_attribute8
9984          , inbk.global_attribute9
9985          , inbk.global_attribute10
9986          , inbk.global_attribute11
9987          , inbk.global_attribute12
9991          , inbk.global_attribute16
9988          , inbk.global_attribute13
9989          , inbk.global_attribute14
9990          , inbk.global_attribute15
9992          , inbk.global_attribute17
9993          , inbk.global_attribute18
9994          , inbk.global_attribute19
9995          , inbk.global_attribute20
9996          , inbk.global_attribute_category
9997     from   fa_mc_books inbk,
9998            fa_mc_books outbk
9999     where  inbk.asset_id = c_asset_id
10000     and    inbk.asset_id = outbk.asset_id(+)
10001     and    inbk.book_type_code = p_asset_hdr_rec.book_type_code
10002     and    inbk.book_type_code = outbk.book_type_code(+)
10003     and    inbk.transaction_header_id_in = c_transaction_header_id
10004     and    inbk.transaction_header_id_in = outbk.transaction_header_id_out(+)
10005     and    inbk.set_of_books_id = p_asset_hdr_rec.set_of_books_id
10006     and    outbk.set_of_books_id(+) = p_asset_hdr_rec.set_of_books_id;
10007 
10008 
10009 
10010   CURSOR c_get_member_asset_id IS
10011     select asset_id
10012     from fa_transaction_headers
10013     where transaction_header_id = p_trans_rec.member_transaction_header_id;
10014 
10015   l_calling_fn         VARCHAR2(100) := 'FA_AMORT_PVT.GetFinRec';
10016   l_asset_fin_rec_adj  FA_API_TYPES.asset_fin_rec_type;
10017   l_asset_desc_rec     FA_API_TYPES.asset_desc_rec_type;
10018   l_asset_cat_rec      FA_API_TYPES.asset_cat_rec_type;
10019   l_asset_deprn_rec    FA_API_TYPES.asset_deprn_rec_type;
10020   l_period_rec         FA_API_TYPES.period_rec_type;
10021 
10022   l_is_member_trx_for_group      BOOLEAN := FALSE;
10023   l_asset_id                     NUMBER;
10024   l_transaction_header_id        NUMBER;
10025 
10026   l_tmp_cost                     NUMBER;
10027   l_tmp_percent_salvage_value    NUMBER;
10028   l_tmp_salvage_value            NUMBER;
10029   l_tmp_allowed_deprn_limit      NUMBER;
10030   l_tmp_allowed_deprn_limit_amt  NUMBER;
10031   l_tmp_production_capacity      NUMBER;
10032   l_tmp_fully_rsv_revals_counter NUMBER;
10033   l_tmp_reval_amortization_basis NUMBER;
10034   l_tmp_reval_ceiling            NUMBER;
10035   l_tmp_unrevalued_cost          NUMBER;
10036   l_tmp_eofy_reserve             NUMBER;
10037   l_tmp_deprn_limit_type         varchar2(30); -- Bug 6863138
10038 
10039   l_adj_found                    BOOLEAN := FALSE;
10040   l_reclass_trx                  BOOLEAN := FALSE;
10041 
10042   /* For bug 12739028 */
10043   l_adj_deprn_method             VARCHAR2(12);
10044   l_adj_basic_rate               NUMBER;
10045   l_adj_adjusted_rate            NUMBER;
10046   l_adj_life                     NUMBER;
10047   l_adj_production_capacity      NUMBER;
10048   l_adj_apply_new_method         BOOLEAN := FALSE;
10049 
10050   calc_failed  EXCEPTION;
10051 
10052 BEGIN
10053 
10054    if (p_log_level_rec.statement_level) then
10055       fa_debug_pkg.add(l_calling_fn, 'Begin', px_asset_fin_rec.date_placed_in_service||':'||
10056                                               p_init_transaction_header_id, p_log_level_rec => p_log_level_rec);
10057    end if;
10058 
10059    x_dpis_change := FALSE;
10060 
10061    if (p_trans_rec.transaction_header_id is null and
10062        p_trans_rec.member_transaction_header_id is not null) then
10063       l_is_member_trx_for_group := TRUE;
10064 
10065       OPEN c_get_member_asset_id;
10066       FETCH c_get_member_asset_id INTO l_asset_id;
10067       CLOSE c_get_member_asset_id;
10068 
10069       l_transaction_header_id := p_trans_rec.member_transaction_header_id;
10070 
10071        if (p_log_level_rec.statement_level) then
10072           fa_debug_pkg.add(l_calling_fn, 'Need to get Delta from member', l_asset_id, p_log_level_rec => p_log_level_rec);
10073        end if;
10074 
10075    else
10076      l_asset_id := p_asset_hdr_rec.asset_id;
10077      l_transaction_header_id := p_trans_rec.transaction_header_id;
10078    end if;
10079 
10080 --tk_util.DumpFinRec(px_asset_fin_rec, 'GO1');
10081 
10082    if (nvl(p_mrc_sob_type_code, 'P') = 'R') then
10083       if (px_asset_fin_rec.date_placed_in_service is  null) then
10084 
10085          if p_init_transaction_header_id is null then
10086             OPEN c_get_init_mcbk;
10087             FETCH c_get_init_mcbk INTO px_asset_fin_rec.date_placed_in_service
10088                                   , px_asset_fin_rec.deprn_start_date
10089                                   , px_asset_fin_rec.deprn_method_code
10090                                   , px_asset_fin_rec.life_in_months
10091                                   , px_asset_fin_rec.rate_adjustment_factor
10092                                   , px_asset_fin_rec.adjusted_cost
10093                                   , px_asset_fin_rec.cost
10094                                   , px_asset_fin_rec.original_cost
10095                                   , px_asset_fin_rec.salvage_value
10096                                   , px_asset_fin_rec.prorate_convention_code
10097                                   , px_asset_fin_rec.prorate_date
10098                                   , px_asset_fin_rec.cost_change_flag
10099                                   , px_asset_fin_rec.adjustment_required_status
10100                                   , px_asset_fin_rec.capitalize_flag
10101                                   , px_asset_fin_rec.retirement_pending_flag
10102                                   , px_asset_fin_rec.depreciate_flag
10103                                   , px_asset_fin_rec.itc_amount_id
10104                                   , px_asset_fin_rec.itc_amount
10105                                   , px_asset_fin_rec.retirement_id
10106                                   , px_asset_fin_rec.tax_request_id
10110                                   , px_asset_fin_rec.bonus_rule
10107                                   , px_asset_fin_rec.itc_basis
10108                                   , px_asset_fin_rec.basic_rate
10109                                   , px_asset_fin_rec.adjusted_rate
10111                                   , px_asset_fin_rec.ceiling_name
10112                                   , px_asset_fin_rec.recoverable_cost
10113                                   , px_asset_fin_rec.adjusted_capacity
10114                                   , px_asset_fin_rec.fully_rsvd_revals_counter
10115                                   , px_asset_fin_rec.idled_flag
10116                                   , px_asset_fin_rec.period_counter_capitalized
10117                                   , px_asset_fin_rec.period_counter_fully_reserved
10118                                   , px_asset_fin_rec.period_counter_fully_retired
10119                                   , px_asset_fin_rec.production_capacity
10120                                   , px_asset_fin_rec.reval_amortization_basis
10121                                   , px_asset_fin_rec.reval_ceiling
10122                                   , px_asset_fin_rec.unit_of_measure
10123                                   , px_asset_fin_rec.unrevalued_cost
10124                                   , px_asset_fin_rec.annual_deprn_rounding_flag
10125                                   , px_asset_fin_rec.percent_salvage_value
10126                                   , px_asset_fin_rec.allowed_deprn_limit
10127                                   , px_asset_fin_rec.allowed_deprn_limit_amount
10128                                   , px_asset_fin_rec.period_counter_life_complete
10129                                   , px_asset_fin_rec.adjusted_recoverable_cost
10130                                   , px_asset_fin_rec.annual_rounding_flag
10131                                   , px_asset_fin_rec.eofy_adj_cost
10132                                   , px_asset_fin_rec.eofy_formula_factor
10133                                   , px_asset_fin_rec.short_fiscal_year_flag
10134                                   , px_asset_fin_rec.conversion_date
10135                                   , px_asset_fin_rec.orig_deprn_start_date
10136                                   , px_asset_fin_rec.remaining_life1
10137                                   , px_asset_fin_rec.remaining_life2
10138                                   , px_asset_fin_rec.group_asset_id
10139                                   , px_asset_fin_rec.old_adjusted_cost
10140                                   , px_asset_fin_rec.formula_factor
10141                                   , px_asset_fin_rec.salvage_type
10142                                   , px_asset_fin_rec.deprn_limit_type
10143                                   , px_asset_fin_rec.over_depreciate_option
10144                                   , px_asset_fin_rec.super_group_id
10145                                   , px_asset_fin_rec.reduction_rate
10146                                   , px_asset_fin_rec.reduce_addition_flag
10147                                   , px_asset_fin_rec.reduce_adjustment_flag
10148                                   , px_asset_fin_rec.reduce_retirement_flag
10149                                   , px_asset_fin_rec.recognize_gain_loss
10150                                   , px_asset_fin_rec.recapture_reserve_flag
10151                                   , px_asset_fin_rec.limit_proceeds_flag
10152                                   , px_asset_fin_rec.terminal_gain_loss
10153                                   , px_asset_fin_rec.tracking_method
10154                                   , px_asset_fin_rec.exclude_fully_rsv_flag
10155                                   , px_asset_fin_rec.excess_allocation_option
10156                                   , px_asset_fin_rec.depreciation_option
10157                                   , px_asset_fin_rec.member_rollup_flag
10158                                   , px_asset_fin_rec.ytd_proceeds
10159                                   , px_asset_fin_rec.ltd_proceeds
10160                                   , px_asset_fin_rec.allocate_to_fully_rsv_flag
10161                                   , px_asset_fin_rec.allocate_to_fully_ret_flag
10162                                   , px_asset_fin_rec.cip_cost
10163                                   , px_asset_fin_rec.terminal_gain_loss_amount
10164                                   , px_asset_fin_rec.ltd_cost_of_removal
10165                                   , px_asset_fin_rec.prior_eofy_reserve
10166                                   , px_asset_fin_rec.eofy_reserve
10167                                   , px_asset_fin_rec.eop_adj_cost
10168                                   , px_asset_fin_rec.eop_formula_factor
10169                                   , px_asset_fin_rec.global_attribute1
10170                                   , px_asset_fin_rec.global_attribute2
10171                                   , px_asset_fin_rec.global_attribute3
10172                                   , px_asset_fin_rec.global_attribute4
10173                                   , px_asset_fin_rec.global_attribute5
10174                                   , px_asset_fin_rec.global_attribute6
10175                                   , px_asset_fin_rec.global_attribute7
10176                                   , px_asset_fin_rec.global_attribute8
10177                                   , px_asset_fin_rec.global_attribute9
10178                                   , px_asset_fin_rec.global_attribute10
10179                                   , px_asset_fin_rec.global_attribute11
10180                                   , px_asset_fin_rec.global_attribute12
10181                                   , px_asset_fin_rec.global_attribute13
10182                                   , px_asset_fin_rec.global_attribute14
10183                                   , px_asset_fin_rec.global_attribute15
10184                                   , px_asset_fin_rec.global_attribute16
10185                                   , px_asset_fin_rec.global_attribute17
10186                                   , px_asset_fin_rec.global_attribute18
10187                                   , px_asset_fin_rec.global_attribute19
10188                                   , px_asset_fin_rec.global_attribute20
10189                                   , px_asset_fin_rec.global_attribute_category;
10190             CLOSE c_get_init_mcbk;
10191          else
10192             OPEN c_get_init_mcbk_winit;
10193             FETCH c_get_init_mcbk_winit INTO px_asset_fin_rec.date_placed_in_service
10194                                   , px_asset_fin_rec.deprn_start_date
10195                                   , px_asset_fin_rec.deprn_method_code
10196                                   , px_asset_fin_rec.life_in_months
10197                                   , px_asset_fin_rec.rate_adjustment_factor
10198                                   , px_asset_fin_rec.adjusted_cost
10199                                   , px_asset_fin_rec.cost
10200                                   , px_asset_fin_rec.original_cost
10201                                   , px_asset_fin_rec.salvage_value
10202                                   , px_asset_fin_rec.prorate_convention_code
10203                                   , px_asset_fin_rec.prorate_date
10204                                   , px_asset_fin_rec.cost_change_flag
10205                                   , px_asset_fin_rec.adjustment_required_status
10206                                   , px_asset_fin_rec.capitalize_flag
10207                                   , px_asset_fin_rec.retirement_pending_flag
10208                                   , px_asset_fin_rec.depreciate_flag
10209                                   , px_asset_fin_rec.itc_amount_id
10210                                   , px_asset_fin_rec.itc_amount
10211                                   , px_asset_fin_rec.retirement_id
10212                                   , px_asset_fin_rec.tax_request_id
10213                                   , px_asset_fin_rec.itc_basis
10214                                   , px_asset_fin_rec.basic_rate
10215                                   , px_asset_fin_rec.adjusted_rate
10216                                   , px_asset_fin_rec.bonus_rule
10217                                   , px_asset_fin_rec.ceiling_name
10218                                   , px_asset_fin_rec.recoverable_cost
10219                                   , px_asset_fin_rec.adjusted_capacity
10220                                   , px_asset_fin_rec.fully_rsvd_revals_counter
10221                                   , px_asset_fin_rec.idled_flag
10222                                   , px_asset_fin_rec.period_counter_capitalized
10226                                   , px_asset_fin_rec.reval_amortization_basis
10223                                   , px_asset_fin_rec.period_counter_fully_reserved
10224                                   , px_asset_fin_rec.period_counter_fully_retired
10225                                   , px_asset_fin_rec.production_capacity
10227                                   , px_asset_fin_rec.reval_ceiling
10228                                   , px_asset_fin_rec.unit_of_measure
10229                                   , px_asset_fin_rec.unrevalued_cost
10230                                   , px_asset_fin_rec.annual_deprn_rounding_flag
10231                                   , px_asset_fin_rec.percent_salvage_value
10232                                   , px_asset_fin_rec.allowed_deprn_limit
10233                                   , px_asset_fin_rec.allowed_deprn_limit_amount
10234                                   , px_asset_fin_rec.period_counter_life_complete
10235                                   , px_asset_fin_rec.adjusted_recoverable_cost
10236                                   , px_asset_fin_rec.annual_rounding_flag
10237                                   , px_asset_fin_rec.eofy_adj_cost
10238                                   , px_asset_fin_rec.eofy_formula_factor
10239                                   , px_asset_fin_rec.short_fiscal_year_flag
10240                                   , px_asset_fin_rec.conversion_date
10241                                   , px_asset_fin_rec.orig_deprn_start_date
10242                                   , px_asset_fin_rec.remaining_life1
10243                                   , px_asset_fin_rec.remaining_life2
10244                                   , px_asset_fin_rec.group_asset_id
10245                                   , px_asset_fin_rec.old_adjusted_cost
10246                                   , px_asset_fin_rec.formula_factor
10247                                   , px_asset_fin_rec.salvage_type
10248                                   , px_asset_fin_rec.deprn_limit_type
10249                                   , px_asset_fin_rec.over_depreciate_option
10250                                   , px_asset_fin_rec.super_group_id
10251                                   , px_asset_fin_rec.reduction_rate
10252                                   , px_asset_fin_rec.reduce_addition_flag
10253                                   , px_asset_fin_rec.reduce_adjustment_flag
10254                                   , px_asset_fin_rec.reduce_retirement_flag
10255                                   , px_asset_fin_rec.recognize_gain_loss
10256                                   , px_asset_fin_rec.recapture_reserve_flag
10257                                   , px_asset_fin_rec.limit_proceeds_flag
10258                                   , px_asset_fin_rec.terminal_gain_loss
10259                                   , px_asset_fin_rec.tracking_method
10260                                   , px_asset_fin_rec.exclude_fully_rsv_flag
10261                                   , px_asset_fin_rec.excess_allocation_option
10262                                   , px_asset_fin_rec.depreciation_option
10263                                   , px_asset_fin_rec.member_rollup_flag
10264                                   , px_asset_fin_rec.ytd_proceeds
10265                                   , px_asset_fin_rec.ltd_proceeds
10266                                   , px_asset_fin_rec.allocate_to_fully_rsv_flag
10267                                   , px_asset_fin_rec.allocate_to_fully_ret_flag
10268                                   , px_asset_fin_rec.cip_cost
10269                                   , px_asset_fin_rec.terminal_gain_loss_amount
10270                                   , px_asset_fin_rec.ltd_cost_of_removal
10271                                   , px_asset_fin_rec.prior_eofy_reserve
10272                                   , px_asset_fin_rec.eofy_reserve
10273                                   , px_asset_fin_rec.eop_adj_cost
10274                                   , px_asset_fin_rec.eop_formula_factor
10275                                   , px_asset_fin_rec.global_attribute1
10276                                   , px_asset_fin_rec.global_attribute2
10277                                   , px_asset_fin_rec.global_attribute3
10278                                   , px_asset_fin_rec.global_attribute4
10279                                   , px_asset_fin_rec.global_attribute5
10280                                   , px_asset_fin_rec.global_attribute6
10281                                   , px_asset_fin_rec.global_attribute7
10282                                   , px_asset_fin_rec.global_attribute8
10283                                   , px_asset_fin_rec.global_attribute9
10284                                   , px_asset_fin_rec.global_attribute10
10285                                   , px_asset_fin_rec.global_attribute11
10286                                   , px_asset_fin_rec.global_attribute12
10287                                   , px_asset_fin_rec.global_attribute13
10288                                   , px_asset_fin_rec.global_attribute14
10289                                   , px_asset_fin_rec.global_attribute15
10290                                   , px_asset_fin_rec.global_attribute16
10291                                   , px_asset_fin_rec.global_attribute17
10292                                   , px_asset_fin_rec.global_attribute18
10293                                   , px_asset_fin_rec.global_attribute19
10294                                   , px_asset_fin_rec.global_attribute20
10295                                   , px_asset_fin_rec.global_attribute_category;
10296             CLOSE c_get_init_mcbk_winit;
10297 
10298          end if;
10299 
10300          if (p_log_level_rec.statement_level) then
10301             fa_debug_pkg.add(l_calling_fn, 'Found initial fin_rec from db',
10302                              px_asset_fin_rec.cost, p_log_level_rec => p_log_level_rec);
10303          end if;
10304 
10305 /*
10306          if p_trans_rec.transaction_type_code in
10310 
10307                        (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET) and
10308             not (p_use_fin_rec_adj) then
10309             x_asset_fin_rec_new := px_asset_fin_rec;
10311 --tk_util.DumpFinRec(px_asset_fin_rec, 'GO2');
10312 --tk_util.DumpFinRec(x_asset_fin_rec_new, 'GN');
10313 
10314             if (p_log_level_rec.statement_level) then
10315                fa_debug_pkg.add(l_calling_fn, 'End', x_asset_fin_rec_new.cost, p_log_level_rec => p_log_level_rec);
10316             end if;
10317 
10318             return TRUE;
10319          end if;
10320 */
10321 
10322 --      els -- BUG# 3947146
10323 
10324          if not (p_process_this_trx) then
10325             x_asset_fin_rec_new := px_asset_fin_rec;
10326             if (p_log_level_rec.statement_level) then
10327                fa_debug_pkg.add(l_calling_fn, 'End', x_asset_fin_rec_new.cost, p_log_level_rec => p_log_level_rec);
10328             end if;
10329 
10330             return TRUE;
10331 
10332          end if;
10333 
10334       end if;
10335 
10336       if (px_asset_fin_rec.deprn_method_code is null) then
10337          OPEN c_get_mcbk2(l_asset_id, l_transaction_header_id);
10338          FETCH c_get_mcbk2 INTO l_asset_fin_rec_adj.date_placed_in_service
10339                         , l_asset_fin_rec_adj.deprn_start_date
10340                         , l_asset_fin_rec_adj.deprn_method_code
10341                         , l_asset_fin_rec_adj.life_in_months
10342                         , l_asset_fin_rec_adj.rate_adjustment_factor
10343                         , l_asset_fin_rec_adj.adjusted_cost
10344                         , l_asset_fin_rec_adj.cost
10345                         , l_asset_fin_rec_adj.original_cost
10346                         , l_asset_fin_rec_adj.salvage_value
10347                         , l_asset_fin_rec_adj.prorate_convention_code
10348                         , l_asset_fin_rec_adj.prorate_date
10349                         , l_asset_fin_rec_adj.cost_change_flag
10350                         , l_asset_fin_rec_adj.adjustment_required_status
10351                         , l_asset_fin_rec_adj.capitalize_flag
10352                         , l_asset_fin_rec_adj.retirement_pending_flag
10353                         , l_asset_fin_rec_adj.depreciate_flag
10354                         , l_asset_fin_rec_adj.itc_amount_id
10355                         , l_asset_fin_rec_adj.itc_amount
10356                         , l_asset_fin_rec_adj.retirement_id
10357                         , l_asset_fin_rec_adj.tax_request_id
10358                         , l_asset_fin_rec_adj.itc_basis
10359                         , l_asset_fin_rec_adj.basic_rate
10360                         , l_asset_fin_rec_adj.adjusted_rate
10361                         , l_asset_fin_rec_adj.bonus_rule
10362                         , l_asset_fin_rec_adj.ceiling_name
10363                         , l_asset_fin_rec_adj.recoverable_cost
10364                         , l_asset_fin_rec_adj.adjusted_capacity
10365                         , l_asset_fin_rec_adj.fully_rsvd_revals_counter
10366                         , l_asset_fin_rec_adj.idled_flag
10367                         , l_asset_fin_rec_adj.period_counter_capitalized
10368                         , l_asset_fin_rec_adj.period_counter_fully_reserved
10369                         , l_asset_fin_rec_adj.period_counter_fully_retired
10370                         , l_asset_fin_rec_adj.production_capacity
10371                         , l_asset_fin_rec_adj.reval_amortization_basis
10372                         , l_asset_fin_rec_adj.reval_ceiling
10373                         , l_asset_fin_rec_adj.unit_of_measure
10374                         , l_asset_fin_rec_adj.unrevalued_cost
10375                         , l_asset_fin_rec_adj.annual_deprn_rounding_flag
10376                         , l_asset_fin_rec_adj.percent_salvage_value
10377                         , l_asset_fin_rec_adj.allowed_deprn_limit
10378                         , l_asset_fin_rec_adj.allowed_deprn_limit_amount
10379                         , l_asset_fin_rec_adj.period_counter_life_complete
10380                         , l_asset_fin_rec_adj.adjusted_recoverable_cost
10381                         , l_asset_fin_rec_adj.annual_rounding_flag
10382                         , l_asset_fin_rec_adj.eofy_adj_cost
10383                         , l_asset_fin_rec_adj.eofy_formula_factor
10384                         , l_asset_fin_rec_adj.short_fiscal_year_flag
10385                         , l_asset_fin_rec_adj.conversion_date
10386                         , l_asset_fin_rec_adj.orig_deprn_start_date
10387                         , l_asset_fin_rec_adj.remaining_life1
10388                         , l_asset_fin_rec_adj.remaining_life2
10389                         , l_asset_fin_rec_adj.group_asset_id
10390                         , l_asset_fin_rec_adj.old_adjusted_cost
10391                         , l_asset_fin_rec_adj.formula_factor
10392                         , l_asset_fin_rec_adj.salvage_type
10393                         , l_asset_fin_rec_adj.deprn_limit_type
10394                         , l_asset_fin_rec_adj.over_depreciate_option
10395                         , l_asset_fin_rec_adj.super_group_id
10396                         , l_asset_fin_rec_adj.reduction_rate
10397                         , l_asset_fin_rec_adj.reduce_addition_flag
10398                         , l_asset_fin_rec_adj.reduce_adjustment_flag
10399                         , l_asset_fin_rec_adj.reduce_retirement_flag
10400                         , l_asset_fin_rec_adj.recognize_gain_loss
10401                         , l_asset_fin_rec_adj.recapture_reserve_flag
10402                         , l_asset_fin_rec_adj.limit_proceeds_flag
10403                         , l_asset_fin_rec_adj.terminal_gain_loss
10404                         , l_asset_fin_rec_adj.tracking_method
10405                         , l_asset_fin_rec_adj.exclude_fully_rsv_flag
10406                         , l_asset_fin_rec_adj.excess_allocation_option
10407                         , l_asset_fin_rec_adj.depreciation_option
10408                         , l_asset_fin_rec_adj.member_rollup_flag
10409                         , l_asset_fin_rec_adj.ytd_proceeds
10410                         , l_asset_fin_rec_adj.ltd_proceeds
10411                         , l_asset_fin_rec_adj.allocate_to_fully_rsv_flag
10412                         , l_asset_fin_rec_adj.allocate_to_fully_ret_flag
10413                         , l_asset_fin_rec_adj.cip_cost
10414                         , l_asset_fin_rec_adj.terminal_gain_loss_amount
10415                         , l_asset_fin_rec_adj.ltd_cost_of_removal
10416                         , l_asset_fin_rec_adj.prior_eofy_reserve
10417                         , l_asset_fin_rec_adj.eofy_reserve
10418                         , l_asset_fin_rec_adj.eop_adj_cost
10419                         , l_asset_fin_rec_adj.eop_formula_factor
10420                         , l_asset_fin_rec_adj.global_attribute1
10421                         , l_asset_fin_rec_adj.global_attribute2
10422                         , l_asset_fin_rec_adj.global_attribute3
10423                         , l_asset_fin_rec_adj.global_attribute4
10424                         , l_asset_fin_rec_adj.global_attribute5
10425                         , l_asset_fin_rec_adj.global_attribute6
10426                         , l_asset_fin_rec_adj.global_attribute7
10427                         , l_asset_fin_rec_adj.global_attribute8
10428                         , l_asset_fin_rec_adj.global_attribute9
10429                         , l_asset_fin_rec_adj.global_attribute10
10430                         , l_asset_fin_rec_adj.global_attribute11
10431                         , l_asset_fin_rec_adj.global_attribute12
10432                         , l_asset_fin_rec_adj.global_attribute13
10433                         , l_asset_fin_rec_adj.global_attribute14
10434                         , l_asset_fin_rec_adj.global_attribute15
10435                         , l_asset_fin_rec_adj.global_attribute16
10436                         , l_asset_fin_rec_adj.global_attribute17
10437                         , l_asset_fin_rec_adj.global_attribute18
10438                         , l_asset_fin_rec_adj.global_attribute19
10439                         , l_asset_fin_rec_adj.global_attribute20
10440                         , l_asset_fin_rec_adj.global_attribute_category;
10441          l_adj_found := c_get_mcbk2%FOUND;
10442          CLOSE c_get_mcbk2;
10443 
10444       else
10445          OPEN c_get_mcbk(l_asset_id, l_transaction_header_id);
10446          FETCH c_get_mcbk INTO l_asset_fin_rec_adj.date_placed_in_service
10447                         , l_asset_fin_rec_adj.deprn_start_date
10448                         , l_asset_fin_rec_adj.deprn_method_code
10449                         , l_asset_fin_rec_adj.life_in_months
10450                         , l_asset_fin_rec_adj.rate_adjustment_factor
10451                         , l_asset_fin_rec_adj.adjusted_cost
10452                         , l_asset_fin_rec_adj.cost
10453                         , l_asset_fin_rec_adj.original_cost
10454                         , l_asset_fin_rec_adj.salvage_value
10455                         , l_asset_fin_rec_adj.prorate_convention_code
10456                         , l_asset_fin_rec_adj.prorate_date
10457                         , l_asset_fin_rec_adj.cost_change_flag
10458                         , l_asset_fin_rec_adj.adjustment_required_status
10459                         , l_asset_fin_rec_adj.capitalize_flag
10460                         , l_asset_fin_rec_adj.retirement_pending_flag
10461                         , l_asset_fin_rec_adj.depreciate_flag
10462                         , l_asset_fin_rec_adj.itc_amount_id
10463                         , l_asset_fin_rec_adj.itc_amount
10464                         , l_asset_fin_rec_adj.retirement_id
10465                         , l_asset_fin_rec_adj.tax_request_id
10466                         , l_asset_fin_rec_adj.itc_basis
10467                         , l_asset_fin_rec_adj.basic_rate
10468                         , l_asset_fin_rec_adj.adjusted_rate
10469                         , l_asset_fin_rec_adj.bonus_rule
10470                         , l_asset_fin_rec_adj.ceiling_name
10471                         , l_asset_fin_rec_adj.recoverable_cost
10472                         , l_asset_fin_rec_adj.adjusted_capacity
10473                         , l_asset_fin_rec_adj.fully_rsvd_revals_counter
10474                         , l_asset_fin_rec_adj.idled_flag
10475                         , l_asset_fin_rec_adj.period_counter_capitalized
10476                         , l_asset_fin_rec_adj.period_counter_fully_reserved
10477                         , l_asset_fin_rec_adj.period_counter_fully_retired
10478                         , l_asset_fin_rec_adj.production_capacity
10479                         , l_asset_fin_rec_adj.reval_amortization_basis
10483                         , l_asset_fin_rec_adj.annual_deprn_rounding_flag
10480                         , l_asset_fin_rec_adj.reval_ceiling
10481                         , l_asset_fin_rec_adj.unit_of_measure
10482                         , l_asset_fin_rec_adj.unrevalued_cost
10484                         , l_asset_fin_rec_adj.percent_salvage_value
10485                         , l_asset_fin_rec_adj.allowed_deprn_limit
10486                         , l_asset_fin_rec_adj.allowed_deprn_limit_amount
10487                         , l_asset_fin_rec_adj.period_counter_life_complete
10488                         , l_asset_fin_rec_adj.adjusted_recoverable_cost
10489                         , l_asset_fin_rec_adj.annual_rounding_flag
10490                         , l_asset_fin_rec_adj.eofy_adj_cost
10491                         , l_asset_fin_rec_adj.eofy_formula_factor
10492                         , l_asset_fin_rec_adj.short_fiscal_year_flag
10493                         , l_asset_fin_rec_adj.conversion_date
10494                         , l_asset_fin_rec_adj.orig_deprn_start_date
10495                         , l_asset_fin_rec_adj.remaining_life1
10496                         , l_asset_fin_rec_adj.remaining_life2
10497                         , l_asset_fin_rec_adj.group_asset_id
10498                         , l_asset_fin_rec_adj.old_adjusted_cost
10499                         , l_asset_fin_rec_adj.formula_factor
10500                         , l_asset_fin_rec_adj.salvage_type
10501                         , l_asset_fin_rec_adj.deprn_limit_type
10502                         , l_asset_fin_rec_adj.over_depreciate_option
10503                         , l_asset_fin_rec_adj.super_group_id
10504                         , l_asset_fin_rec_adj.reduction_rate
10505                         , l_asset_fin_rec_adj.reduce_addition_flag
10506                         , l_asset_fin_rec_adj.reduce_adjustment_flag
10507                         , l_asset_fin_rec_adj.reduce_retirement_flag
10508                         , l_asset_fin_rec_adj.recognize_gain_loss
10509                         , l_asset_fin_rec_adj.recapture_reserve_flag
10510                         , l_asset_fin_rec_adj.limit_proceeds_flag
10511                         , l_asset_fin_rec_adj.terminal_gain_loss
10512                         , l_asset_fin_rec_adj.tracking_method
10513                         , l_asset_fin_rec_adj.exclude_fully_rsv_flag
10514                         , l_asset_fin_rec_adj.excess_allocation_option
10515                         , l_asset_fin_rec_adj.depreciation_option
10516                         , l_asset_fin_rec_adj.member_rollup_flag
10517                         , l_asset_fin_rec_adj.ytd_proceeds
10518                         , l_asset_fin_rec_adj.ltd_proceeds
10519                         , l_asset_fin_rec_adj.allocate_to_fully_rsv_flag
10520                         , l_asset_fin_rec_adj.allocate_to_fully_ret_flag
10521                         , l_asset_fin_rec_adj.cip_cost
10522                         , l_asset_fin_rec_adj.terminal_gain_loss_amount
10523                         , l_asset_fin_rec_adj.ltd_cost_of_removal
10524                         , l_asset_fin_rec_adj.prior_eofy_reserve
10525                         , l_asset_fin_rec_adj.eofy_reserve
10526                         , l_asset_fin_rec_adj.eop_adj_cost
10527                         , l_asset_fin_rec_adj.eop_formula_factor
10528                         , l_asset_fin_rec_adj.global_attribute1
10529                         , l_asset_fin_rec_adj.global_attribute2
10530                         , l_asset_fin_rec_adj.global_attribute3
10531                         , l_asset_fin_rec_adj.global_attribute4
10532                         , l_asset_fin_rec_adj.global_attribute5
10533                         , l_asset_fin_rec_adj.global_attribute6
10534                         , l_asset_fin_rec_adj.global_attribute7
10535                         , l_asset_fin_rec_adj.global_attribute8
10536                         , l_asset_fin_rec_adj.global_attribute9
10537                         , l_asset_fin_rec_adj.global_attribute10
10538                         , l_asset_fin_rec_adj.global_attribute11
10539                         , l_asset_fin_rec_adj.global_attribute12
10540                         , l_asset_fin_rec_adj.global_attribute13
10541                         , l_asset_fin_rec_adj.global_attribute14
10542                         , l_asset_fin_rec_adj.global_attribute15
10543                         , l_asset_fin_rec_adj.global_attribute16
10544                         , l_asset_fin_rec_adj.global_attribute17
10545                         , l_asset_fin_rec_adj.global_attribute18
10546                         , l_asset_fin_rec_adj.global_attribute19
10547                         , l_asset_fin_rec_adj.global_attribute20
10548                         , l_asset_fin_rec_adj.global_attribute_category;
10549          l_adj_found := c_get_mcbk%FOUND;
10550          CLOSE c_get_mcbk;
10551 
10552       end if; -- (px_asset_fin_rec.deprn_method_code is null)
10553 
10554       if (p_log_level_rec.statement_level) then
10555          fa_debug_pkg.add(l_calling_fn, 'Got bk to find delta from db',
10556                          l_asset_fin_rec_adj.cost, p_log_level_rec => p_log_level_rec);
10557       end if;
10558 
10559    else
10560       if (px_asset_fin_rec.date_placed_in_service is null) then
10561 
10562          if p_init_transaction_header_id is null then
10563             OPEN c_get_init_bk;
10564             FETCH c_get_init_bk INTO px_asset_fin_rec.date_placed_in_service
10565                            , px_asset_fin_rec.deprn_start_date
10566                            , px_asset_fin_rec.deprn_method_code
10567                            , px_asset_fin_rec.life_in_months
10568                            , px_asset_fin_rec.rate_adjustment_factor
10569                            , px_asset_fin_rec.adjusted_cost
10570                            , px_asset_fin_rec.cost
10571                            , px_asset_fin_rec.original_cost
10572                            , px_asset_fin_rec.salvage_value
10573                            , px_asset_fin_rec.prorate_convention_code
10574                            , px_asset_fin_rec.prorate_date
10575                            , px_asset_fin_rec.cost_change_flag
10576                            , px_asset_fin_rec.adjustment_required_status
10577                            , px_asset_fin_rec.capitalize_flag
10578                            , px_asset_fin_rec.retirement_pending_flag
10579                            , px_asset_fin_rec.depreciate_flag
10580                            , px_asset_fin_rec.itc_amount_id
10581                            , px_asset_fin_rec.itc_amount
10582                            , px_asset_fin_rec.retirement_id
10583                            , px_asset_fin_rec.tax_request_id
10584                            , px_asset_fin_rec.itc_basis
10585                            , px_asset_fin_rec.basic_rate
10586                            , px_asset_fin_rec.adjusted_rate
10587                            , px_asset_fin_rec.bonus_rule
10588                            , px_asset_fin_rec.ceiling_name
10589                            , px_asset_fin_rec.recoverable_cost
10590                            , px_asset_fin_rec.adjusted_capacity
10591                            , px_asset_fin_rec.fully_rsvd_revals_counter
10592                            , px_asset_fin_rec.idled_flag
10593                            , px_asset_fin_rec.period_counter_capitalized
10594                            , px_asset_fin_rec.period_counter_fully_reserved
10595                            , px_asset_fin_rec.period_counter_fully_retired
10596                            , px_asset_fin_rec.production_capacity
10597                            , px_asset_fin_rec.reval_amortization_basis
10598                            , px_asset_fin_rec.reval_ceiling
10599                            , px_asset_fin_rec.unit_of_measure
10600                            , px_asset_fin_rec.unrevalued_cost
10601                            , px_asset_fin_rec.annual_deprn_rounding_flag
10602                            , px_asset_fin_rec.percent_salvage_value
10603                            , px_asset_fin_rec.allowed_deprn_limit
10604                            , px_asset_fin_rec.allowed_deprn_limit_amount
10605                            , px_asset_fin_rec.period_counter_life_complete
10606                            , px_asset_fin_rec.adjusted_recoverable_cost
10607                            , px_asset_fin_rec.annual_rounding_flag
10608                            , px_asset_fin_rec.eofy_adj_cost
10609                            , px_asset_fin_rec.eofy_formula_factor
10610                            , px_asset_fin_rec.short_fiscal_year_flag
10611                            , px_asset_fin_rec.conversion_date
10612                            , px_asset_fin_rec.orig_deprn_start_date
10613                            , px_asset_fin_rec.remaining_life1
10614                            , px_asset_fin_rec.remaining_life2
10615                            , px_asset_fin_rec.group_asset_id
10616                            , px_asset_fin_rec.old_adjusted_cost
10617                            , px_asset_fin_rec.formula_factor
10618                            , px_asset_fin_rec.salvage_type
10619                            , px_asset_fin_rec.deprn_limit_type
10620                            , px_asset_fin_rec.over_depreciate_option
10621                            , px_asset_fin_rec.super_group_id
10622                            , px_asset_fin_rec.reduction_rate
10623                            , px_asset_fin_rec.reduce_addition_flag
10624                            , px_asset_fin_rec.reduce_adjustment_flag
10625                            , px_asset_fin_rec.reduce_retirement_flag
10626                            , px_asset_fin_rec.recognize_gain_loss
10627                            , px_asset_fin_rec.recapture_reserve_flag
10628                            , px_asset_fin_rec.limit_proceeds_flag
10629                            , px_asset_fin_rec.terminal_gain_loss
10630                            , px_asset_fin_rec.tracking_method
10631                            , px_asset_fin_rec.exclude_fully_rsv_flag
10632                            , px_asset_fin_rec.excess_allocation_option
10633                            , px_asset_fin_rec.depreciation_option
10634                            , px_asset_fin_rec.member_rollup_flag
10635                            , px_asset_fin_rec.ytd_proceeds
10636                            , px_asset_fin_rec.ltd_proceeds
10637                            , px_asset_fin_rec.allocate_to_fully_rsv_flag
10638                            , px_asset_fin_rec.allocate_to_fully_ret_flag
10639                            , px_asset_fin_rec.cip_cost
10640                            , px_asset_fin_rec.terminal_gain_loss_amount
10641                            , px_asset_fin_rec.ltd_cost_of_removal
10642                            , px_asset_fin_rec.prior_eofy_reserve
10643                            , px_asset_fin_rec.eofy_reserve
10644                            , px_asset_fin_rec.eop_adj_cost
10645                            , px_asset_fin_rec.eop_formula_factor
10649                            , px_asset_fin_rec.global_attribute4
10646                            , px_asset_fin_rec.global_attribute1
10647                            , px_asset_fin_rec.global_attribute2
10648                            , px_asset_fin_rec.global_attribute3
10650                            , px_asset_fin_rec.global_attribute5
10651                            , px_asset_fin_rec.global_attribute6
10652                            , px_asset_fin_rec.global_attribute7
10653                            , px_asset_fin_rec.global_attribute8
10654                            , px_asset_fin_rec.global_attribute9
10655                            , px_asset_fin_rec.global_attribute10
10656                            , px_asset_fin_rec.global_attribute11
10657                            , px_asset_fin_rec.global_attribute12
10658                            , px_asset_fin_rec.global_attribute13
10659                            , px_asset_fin_rec.global_attribute14
10660                            , px_asset_fin_rec.global_attribute15
10661                            , px_asset_fin_rec.global_attribute16
10662                            , px_asset_fin_rec.global_attribute17
10663                            , px_asset_fin_rec.global_attribute18
10664                            , px_asset_fin_rec.global_attribute19
10665                            , px_asset_fin_rec.global_attribute20
10666                            , px_asset_fin_rec.global_attribute_category
10667                            , px_asset_fin_rec.nbv_at_switch
10668                            , px_asset_fin_rec.prior_deprn_limit_type
10669                            , px_asset_fin_rec.prior_deprn_limit_amount
10670                            , px_asset_fin_rec.prior_deprn_limit
10671                            , px_asset_fin_rec.prior_deprn_method
10672                            , px_asset_fin_rec.prior_life_in_months
10673                            , px_asset_fin_rec.prior_basic_rate
10674                            , px_asset_fin_rec.prior_adjusted_rate ;
10675             CLOSE c_get_init_bk;
10676          else
10677             OPEN c_get_init_bk_winit;
10678             FETCH c_get_init_bk_winit INTO px_asset_fin_rec.date_placed_in_service
10679                            , px_asset_fin_rec.deprn_start_date
10680                            , px_asset_fin_rec.deprn_method_code
10681                            , px_asset_fin_rec.life_in_months
10682                            , px_asset_fin_rec.rate_adjustment_factor
10683                            , px_asset_fin_rec.adjusted_cost
10684                            , px_asset_fin_rec.cost
10685                            , px_asset_fin_rec.original_cost
10686                            , px_asset_fin_rec.salvage_value
10687                            , px_asset_fin_rec.prorate_convention_code
10688                            , px_asset_fin_rec.prorate_date
10689                            , px_asset_fin_rec.cost_change_flag
10690                            , px_asset_fin_rec.adjustment_required_status
10691                            , px_asset_fin_rec.capitalize_flag
10692                            , px_asset_fin_rec.retirement_pending_flag
10693                            , px_asset_fin_rec.depreciate_flag
10694                            , px_asset_fin_rec.itc_amount_id
10695                            , px_asset_fin_rec.itc_amount
10696                            , px_asset_fin_rec.retirement_id
10697                            , px_asset_fin_rec.tax_request_id
10698                            , px_asset_fin_rec.itc_basis
10699                            , px_asset_fin_rec.basic_rate
10700                            , px_asset_fin_rec.adjusted_rate
10701                            , px_asset_fin_rec.bonus_rule
10702                            , px_asset_fin_rec.ceiling_name
10703                            , px_asset_fin_rec.recoverable_cost
10704                            , px_asset_fin_rec.adjusted_capacity
10705                            , px_asset_fin_rec.fully_rsvd_revals_counter
10706                            , px_asset_fin_rec.idled_flag
10707                            , px_asset_fin_rec.period_counter_capitalized
10708                            , px_asset_fin_rec.period_counter_fully_reserved
10709                            , px_asset_fin_rec.period_counter_fully_retired
10710                            , px_asset_fin_rec.production_capacity
10711                            , px_asset_fin_rec.reval_amortization_basis
10712                            , px_asset_fin_rec.reval_ceiling
10713                            , px_asset_fin_rec.unit_of_measure
10714                            , px_asset_fin_rec.unrevalued_cost
10715                            , px_asset_fin_rec.annual_deprn_rounding_flag
10716                            , px_asset_fin_rec.percent_salvage_value
10717                            , px_asset_fin_rec.allowed_deprn_limit
10718                            , px_asset_fin_rec.allowed_deprn_limit_amount
10719                            , px_asset_fin_rec.period_counter_life_complete
10720                            , px_asset_fin_rec.adjusted_recoverable_cost
10721                            , px_asset_fin_rec.annual_rounding_flag
10722                            , px_asset_fin_rec.eofy_adj_cost
10723                            , px_asset_fin_rec.eofy_formula_factor
10724                            , px_asset_fin_rec.short_fiscal_year_flag
10725                            , px_asset_fin_rec.conversion_date
10726                            , px_asset_fin_rec.orig_deprn_start_date
10727                            , px_asset_fin_rec.remaining_life1
10728                            , px_asset_fin_rec.remaining_life2
10729                            , px_asset_fin_rec.group_asset_id
10730                            , px_asset_fin_rec.old_adjusted_cost
10731                            , px_asset_fin_rec.formula_factor
10732                            , px_asset_fin_rec.salvage_type
10733                            , px_asset_fin_rec.deprn_limit_type
10734                            , px_asset_fin_rec.over_depreciate_option
10735                            , px_asset_fin_rec.super_group_id
10736                            , px_asset_fin_rec.reduction_rate
10737                            , px_asset_fin_rec.reduce_addition_flag
10738                            , px_asset_fin_rec.reduce_adjustment_flag
10739                            , px_asset_fin_rec.reduce_retirement_flag
10740                            , px_asset_fin_rec.recognize_gain_loss
10741                            , px_asset_fin_rec.recapture_reserve_flag
10742                            , px_asset_fin_rec.limit_proceeds_flag
10743                            , px_asset_fin_rec.terminal_gain_loss
10744                            , px_asset_fin_rec.tracking_method
10745                            , px_asset_fin_rec.exclude_fully_rsv_flag
10746                            , px_asset_fin_rec.excess_allocation_option
10747                            , px_asset_fin_rec.depreciation_option
10748                            , px_asset_fin_rec.member_rollup_flag
10749                            , px_asset_fin_rec.ytd_proceeds
10750                            , px_asset_fin_rec.ltd_proceeds
10751                            , px_asset_fin_rec.allocate_to_fully_rsv_flag
10752                            , px_asset_fin_rec.allocate_to_fully_ret_flag
10753                            , px_asset_fin_rec.cip_cost
10754                            , px_asset_fin_rec.terminal_gain_loss_amount
10755                            , px_asset_fin_rec.ltd_cost_of_removal
10756                            , px_asset_fin_rec.prior_eofy_reserve
10757                            , px_asset_fin_rec.eofy_reserve
10758                            , px_asset_fin_rec.eop_adj_cost
10759                            , px_asset_fin_rec.eop_formula_factor
10760                            , px_asset_fin_rec.global_attribute1
10761                            , px_asset_fin_rec.global_attribute2
10762                            , px_asset_fin_rec.global_attribute3
10763                            , px_asset_fin_rec.global_attribute4
10764                            , px_asset_fin_rec.global_attribute5
10765                            , px_asset_fin_rec.global_attribute6
10766                            , px_asset_fin_rec.global_attribute7
10767                            , px_asset_fin_rec.global_attribute8
10768                            , px_asset_fin_rec.global_attribute9
10769                            , px_asset_fin_rec.global_attribute10
10770                            , px_asset_fin_rec.global_attribute11
10771                            , px_asset_fin_rec.global_attribute12
10772                            , px_asset_fin_rec.global_attribute13
10773                            , px_asset_fin_rec.global_attribute14
10774                            , px_asset_fin_rec.global_attribute15
10775                            , px_asset_fin_rec.global_attribute16
10776                            , px_asset_fin_rec.global_attribute17
10777                            , px_asset_fin_rec.global_attribute18
10778                            , px_asset_fin_rec.global_attribute19
10779                            , px_asset_fin_rec.global_attribute20
10780                            , px_asset_fin_rec.global_attribute_category
10781                            , px_asset_fin_rec.nbv_at_switch
10782                            , px_asset_fin_rec.prior_deprn_limit_type
10783                            , px_asset_fin_rec.prior_deprn_limit_amount
10784                            , px_asset_fin_rec.prior_deprn_limit
10785                            , px_asset_fin_rec.prior_deprn_method
10786                            , px_asset_fin_rec.prior_life_in_months
10787                            , px_asset_fin_rec.prior_basic_rate
10788                            , px_asset_fin_rec.prior_adjusted_rate ;
10789             CLOSE c_get_init_bk_winit;
10790 
10791          end if;
10792 
10793          if (p_log_level_rec.statement_level) then
10794             fa_debug_pkg.add(l_calling_fn, 'Found initial fin_rec from db',
10795                              px_asset_fin_rec.cost, p_log_level_rec => p_log_level_rec);
10796          end if;
10797 /*
10798          if p_trans_rec.transaction_type_code in
10799                        (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET) and
10800             not (p_use_fin_rec_adj) then
10801 
10802             x_asset_fin_rec_new := px_asset_fin_rec;
10803 
10804 --tk_util.DumpFinRec(px_asset_fin_rec, 'GO2');
10805 --tk_util.DumpFinRec(x_asset_fin_rec_new, 'GN');
10806 
10807             if (p_log_level_rec.statement_level) then
10808                fa_debug_pkg.add(l_calling_fn, 'End', x_asset_fin_rec_new.cost, p_log_level_rec => p_log_level_rec);
10809             end if;
10810 
10811             return TRUE;
10812 
10813          els*/
10814 
10815          if not (p_process_this_trx) then
10816             x_asset_fin_rec_new := px_asset_fin_rec;
10817             if (p_log_level_rec.statement_level) then
10818                fa_debug_pkg.add(l_calling_fn, 'End', x_asset_fin_rec_new.cost, p_log_level_rec => p_log_level_rec);
10819             end if;
10820 
10821             return TRUE;
10822          end if;
10823 
10824       end if;
10825 
10829                         , l_asset_fin_rec_adj.deprn_start_date
10826       if (px_asset_fin_rec.deprn_method_code is null)  then
10827          OPEN c_get_bk2(l_asset_id, l_transaction_header_id);
10828          FETCH c_get_bk2 INTO l_asset_fin_rec_adj.date_placed_in_service
10830                         , l_asset_fin_rec_adj.deprn_method_code
10831                         , l_asset_fin_rec_adj.life_in_months
10832                         , l_asset_fin_rec_adj.rate_adjustment_factor
10833                         , l_asset_fin_rec_adj.adjusted_cost
10834                         , l_asset_fin_rec_adj.cost
10835                         , l_asset_fin_rec_adj.original_cost
10836                         , l_asset_fin_rec_adj.salvage_value
10837                         , l_asset_fin_rec_adj.prorate_convention_code
10838                         , l_asset_fin_rec_adj.prorate_date
10839                         , l_asset_fin_rec_adj.cost_change_flag
10840                         , l_asset_fin_rec_adj.adjustment_required_status
10841                         , l_asset_fin_rec_adj.capitalize_flag
10842                         , l_asset_fin_rec_adj.retirement_pending_flag
10843                         , l_asset_fin_rec_adj.depreciate_flag
10844                         , l_asset_fin_rec_adj.itc_amount_id
10845                         , l_asset_fin_rec_adj.itc_amount
10846                         , l_asset_fin_rec_adj.retirement_id
10847                         , l_asset_fin_rec_adj.tax_request_id
10848                         , l_asset_fin_rec_adj.itc_basis
10849                         , l_asset_fin_rec_adj.basic_rate
10850                         , l_asset_fin_rec_adj.adjusted_rate
10851                         , l_asset_fin_rec_adj.bonus_rule
10852                         , l_asset_fin_rec_adj.ceiling_name
10853                         , l_asset_fin_rec_adj.recoverable_cost
10854                         , l_asset_fin_rec_adj.adjusted_capacity
10855                         , l_asset_fin_rec_adj.fully_rsvd_revals_counter
10856                         , l_asset_fin_rec_adj.idled_flag
10857                         , l_asset_fin_rec_adj.period_counter_capitalized
10858                         , l_asset_fin_rec_adj.period_counter_fully_reserved
10859                         , l_asset_fin_rec_adj.period_counter_fully_retired
10860                         , l_asset_fin_rec_adj.production_capacity
10861                         , l_asset_fin_rec_adj.reval_amortization_basis
10862                         , l_asset_fin_rec_adj.reval_ceiling
10863                         , l_asset_fin_rec_adj.unit_of_measure
10864                         , l_asset_fin_rec_adj.unrevalued_cost
10865                         , l_asset_fin_rec_adj.annual_deprn_rounding_flag
10866                         , l_asset_fin_rec_adj.percent_salvage_value
10867                         , l_asset_fin_rec_adj.allowed_deprn_limit
10868                         , l_asset_fin_rec_adj.allowed_deprn_limit_amount
10869                         , l_asset_fin_rec_adj.period_counter_life_complete
10870                         , l_asset_fin_rec_adj.adjusted_recoverable_cost
10871                         , l_asset_fin_rec_adj.annual_rounding_flag
10872                         , l_asset_fin_rec_adj.eofy_adj_cost
10873                         , l_asset_fin_rec_adj.eofy_formula_factor
10874                         , l_asset_fin_rec_adj.short_fiscal_year_flag
10875                         , l_asset_fin_rec_adj.conversion_date
10876                         , l_asset_fin_rec_adj.orig_deprn_start_date
10877                         , l_asset_fin_rec_adj.remaining_life1
10878                         , l_asset_fin_rec_adj.remaining_life2
10879                         , l_asset_fin_rec_adj.group_asset_id
10880                         , l_asset_fin_rec_adj.old_adjusted_cost
10881                         , l_asset_fin_rec_adj.formula_factor
10882                         , l_asset_fin_rec_adj.salvage_type
10883                         , l_asset_fin_rec_adj.deprn_limit_type
10884                         , l_asset_fin_rec_adj.over_depreciate_option
10885                         , l_asset_fin_rec_adj.super_group_id
10886                         , l_asset_fin_rec_adj.reduction_rate
10887                         , l_asset_fin_rec_adj.reduce_addition_flag
10888                         , l_asset_fin_rec_adj.reduce_adjustment_flag
10889                         , l_asset_fin_rec_adj.reduce_retirement_flag
10890                         , l_asset_fin_rec_adj.recognize_gain_loss
10891                         , l_asset_fin_rec_adj.recapture_reserve_flag
10892                         , l_asset_fin_rec_adj.limit_proceeds_flag
10893                         , l_asset_fin_rec_adj.terminal_gain_loss
10894                         , l_asset_fin_rec_adj.tracking_method
10895                         , l_asset_fin_rec_adj.exclude_fully_rsv_flag
10896                         , l_asset_fin_rec_adj.excess_allocation_option
10897                         , l_asset_fin_rec_adj.depreciation_option
10898                         , l_asset_fin_rec_adj.member_rollup_flag
10899                         , l_asset_fin_rec_adj.ytd_proceeds
10900                         , l_asset_fin_rec_adj.ltd_proceeds
10901                         , l_asset_fin_rec_adj.allocate_to_fully_rsv_flag
10902                         , l_asset_fin_rec_adj.allocate_to_fully_ret_flag
10903                         , l_asset_fin_rec_adj.cip_cost
10904                         , l_asset_fin_rec_adj.terminal_gain_loss_amount
10905                         , l_asset_fin_rec_adj.ltd_cost_of_removal
10906                         , l_asset_fin_rec_adj.prior_eofy_reserve
10907                         , l_asset_fin_rec_adj.eofy_reserve
10908                         , l_asset_fin_rec_adj.eop_adj_cost
10909                         , l_asset_fin_rec_adj.eop_formula_factor
10910                         , l_asset_fin_rec_adj.global_attribute1
10911                         , l_asset_fin_rec_adj.global_attribute2
10912                         , l_asset_fin_rec_adj.global_attribute3
10913                         , l_asset_fin_rec_adj.global_attribute4
10914                         , l_asset_fin_rec_adj.global_attribute5
10915                         , l_asset_fin_rec_adj.global_attribute6
10919                         , l_asset_fin_rec_adj.global_attribute10
10916                         , l_asset_fin_rec_adj.global_attribute7
10917                         , l_asset_fin_rec_adj.global_attribute8
10918                         , l_asset_fin_rec_adj.global_attribute9
10920                         , l_asset_fin_rec_adj.global_attribute11
10921                         , l_asset_fin_rec_adj.global_attribute12
10922                         , l_asset_fin_rec_adj.global_attribute13
10923                         , l_asset_fin_rec_adj.global_attribute14
10924                         , l_asset_fin_rec_adj.global_attribute15
10925                         , l_asset_fin_rec_adj.global_attribute16
10926                         , l_asset_fin_rec_adj.global_attribute17
10927                         , l_asset_fin_rec_adj.global_attribute18
10928                         , l_asset_fin_rec_adj.global_attribute19
10929                         , l_asset_fin_rec_adj.global_attribute20
10930                         , l_asset_fin_rec_adj.global_attribute_category
10931                            , l_asset_fin_rec_adj.nbv_at_switch
10932                            , l_asset_fin_rec_adj.prior_deprn_limit_type
10933                            , l_asset_fin_rec_adj.prior_deprn_limit_amount
10934                            , l_asset_fin_rec_adj.prior_deprn_limit
10935                            , l_asset_fin_rec_adj.prior_deprn_method
10936                            , l_asset_fin_rec_adj.prior_life_in_months
10937                            , l_asset_fin_rec_adj.prior_basic_rate
10938                            , l_asset_fin_rec_adj.prior_adjusted_rate ;
10939          l_adj_found := c_get_bk2%FOUND;
10940          CLOSE c_get_bk2;
10941 
10942 --tk_util.DumpFinRec(l_asset_fin_rec_adj, 'GO2.5');
10943       else
10944          OPEN c_get_bk(l_asset_id, l_transaction_header_id);
10945          FETCH c_get_bk INTO l_asset_fin_rec_adj.date_placed_in_service
10946                         , l_asset_fin_rec_adj.deprn_start_date
10947                         , l_asset_fin_rec_adj.deprn_method_code
10948                         , l_asset_fin_rec_adj.life_in_months
10949                         , l_asset_fin_rec_adj.rate_adjustment_factor
10950                         , l_asset_fin_rec_adj.adjusted_cost
10951                         , l_asset_fin_rec_adj.cost
10952                         , l_asset_fin_rec_adj.original_cost
10953                         , l_asset_fin_rec_adj.salvage_value
10954                         , l_asset_fin_rec_adj.prorate_convention_code
10955                         , l_asset_fin_rec_adj.prorate_date
10956                         , l_asset_fin_rec_adj.cost_change_flag
10957                         , l_asset_fin_rec_adj.adjustment_required_status
10958                         , l_asset_fin_rec_adj.capitalize_flag
10959                         , l_asset_fin_rec_adj.retirement_pending_flag
10960                         , l_asset_fin_rec_adj.depreciate_flag
10961                         , l_asset_fin_rec_adj.itc_amount_id
10965                         , l_asset_fin_rec_adj.itc_basis
10962                         , l_asset_fin_rec_adj.itc_amount
10963                         , l_asset_fin_rec_adj.retirement_id
10964                         , l_asset_fin_rec_adj.tax_request_id
10966                         , l_asset_fin_rec_adj.basic_rate
10967                         , l_asset_fin_rec_adj.adjusted_rate
10968                         , l_asset_fin_rec_adj.bonus_rule
10969                         , l_asset_fin_rec_adj.ceiling_name
10970                         , l_asset_fin_rec_adj.recoverable_cost
10971                         , l_asset_fin_rec_adj.adjusted_capacity
10972                         , l_asset_fin_rec_adj.fully_rsvd_revals_counter
10973                         , l_asset_fin_rec_adj.idled_flag
10974                         , l_asset_fin_rec_adj.period_counter_capitalized
10975                         , l_asset_fin_rec_adj.period_counter_fully_reserved
10976                         , l_asset_fin_rec_adj.period_counter_fully_retired
10977                         , l_asset_fin_rec_adj.production_capacity
10978                         , l_asset_fin_rec_adj.reval_amortization_basis
10979                         , l_asset_fin_rec_adj.reval_ceiling
10980                         , l_asset_fin_rec_adj.unit_of_measure
10981                         , l_asset_fin_rec_adj.unrevalued_cost
10982                         , l_asset_fin_rec_adj.annual_deprn_rounding_flag
10983                         , l_asset_fin_rec_adj.percent_salvage_value
10984                         , l_asset_fin_rec_adj.allowed_deprn_limit
10985                         , l_asset_fin_rec_adj.allowed_deprn_limit_amount
10986                         , l_asset_fin_rec_adj.period_counter_life_complete
10987                         , l_asset_fin_rec_adj.adjusted_recoverable_cost
10988                         , l_asset_fin_rec_adj.annual_rounding_flag
10989                         , l_asset_fin_rec_adj.eofy_adj_cost
10990                         , l_asset_fin_rec_adj.eofy_formula_factor
10991                         , l_asset_fin_rec_adj.short_fiscal_year_flag
10992                         , l_asset_fin_rec_adj.conversion_date
10993                         , l_asset_fin_rec_adj.orig_deprn_start_date
10994                         , l_asset_fin_rec_adj.remaining_life1
10995                         , l_asset_fin_rec_adj.remaining_life2
10996                         , l_asset_fin_rec_adj.group_asset_id
10997                         , l_asset_fin_rec_adj.old_adjusted_cost
10998                         , l_asset_fin_rec_adj.formula_factor
10999                         , l_asset_fin_rec_adj.salvage_type
11000                         , l_asset_fin_rec_adj.deprn_limit_type
11001                         , l_asset_fin_rec_adj.over_depreciate_option
11002                         , l_asset_fin_rec_adj.super_group_id
11003                         , l_asset_fin_rec_adj.reduction_rate
11004                         , l_asset_fin_rec_adj.reduce_addition_flag
11005                         , l_asset_fin_rec_adj.reduce_adjustment_flag
11006                         , l_asset_fin_rec_adj.reduce_retirement_flag
11007                         , l_asset_fin_rec_adj.recognize_gain_loss
11008                         , l_asset_fin_rec_adj.recapture_reserve_flag
11009                         , l_asset_fin_rec_adj.limit_proceeds_flag
11010                         , l_asset_fin_rec_adj.terminal_gain_loss
11011                         , l_asset_fin_rec_adj.tracking_method
11012                         , l_asset_fin_rec_adj.exclude_fully_rsv_flag
11013                         , l_asset_fin_rec_adj.excess_allocation_option
11014                         , l_asset_fin_rec_adj.depreciation_option
11015                         , l_asset_fin_rec_adj.member_rollup_flag
11016                         , l_asset_fin_rec_adj.ytd_proceeds
11017                         , l_asset_fin_rec_adj.ltd_proceeds
11018                         , l_asset_fin_rec_adj.allocate_to_fully_rsv_flag
11019                         , l_asset_fin_rec_adj.allocate_to_fully_ret_flag
11020                         , l_asset_fin_rec_adj.cip_cost
11021                         , l_asset_fin_rec_adj.terminal_gain_loss_amount
11022                         , l_asset_fin_rec_adj.ltd_cost_of_removal
11023                         , l_asset_fin_rec_adj.prior_eofy_reserve
11024                         , l_asset_fin_rec_adj.eofy_reserve
11025                         , l_asset_fin_rec_adj.eop_adj_cost
11026                         , l_asset_fin_rec_adj.eop_formula_factor
11027                         , l_asset_fin_rec_adj.global_attribute1
11028                         , l_asset_fin_rec_adj.global_attribute2
11029                         , l_asset_fin_rec_adj.global_attribute3
11030                         , l_asset_fin_rec_adj.global_attribute4
11031                         , l_asset_fin_rec_adj.global_attribute5
11032                         , l_asset_fin_rec_adj.global_attribute6
11033                         , l_asset_fin_rec_adj.global_attribute7
11034                         , l_asset_fin_rec_adj.global_attribute8
11035                         , l_asset_fin_rec_adj.global_attribute9
11036                         , l_asset_fin_rec_adj.global_attribute10
11037                         , l_asset_fin_rec_adj.global_attribute11
11038                         , l_asset_fin_rec_adj.global_attribute12
11039                         , l_asset_fin_rec_adj.global_attribute13
11043                         , l_asset_fin_rec_adj.global_attribute17
11040                         , l_asset_fin_rec_adj.global_attribute14
11041                         , l_asset_fin_rec_adj.global_attribute15
11042                         , l_asset_fin_rec_adj.global_attribute16
11044                         , l_asset_fin_rec_adj.global_attribute18
11045                         , l_asset_fin_rec_adj.global_attribute19
11046                         , l_asset_fin_rec_adj.global_attribute20
11047                         , l_asset_fin_rec_adj.global_attribute_category
11048                            , l_asset_fin_rec_adj.nbv_at_switch
11049                            , l_asset_fin_rec_adj.prior_deprn_limit_type
11050                            , l_asset_fin_rec_adj.prior_deprn_limit_amount
11051                            , l_asset_fin_rec_adj.prior_deprn_limit
11052                            , l_asset_fin_rec_adj.prior_deprn_method
11053                            , l_asset_fin_rec_adj.prior_life_in_months
11054                            , l_asset_fin_rec_adj.prior_basic_rate
11055                            , l_asset_fin_rec_adj.prior_adjusted_rate ;
11056          l_adj_found := c_get_bk%FOUND;
11057          CLOSE c_get_bk;
11058       end if; -- (px_asset_fin_rec.deprn_method_code is null)
11059 
11060       if (p_log_level_rec.statement_level) then
11061          fa_debug_pkg.add(l_calling_fn, 'Got bk to find delta from db',
11062                           l_asset_fin_rec_adj.cost, p_log_level_rec => p_log_level_rec);
11063       end if;
11064 
11065 
11066    end if; -- (nvl(p_mrc_sob_type_code, 'P') = 'R')
11067 
11068 --tk_util.DumpFinRec(px_asset_fin_rec, 'GO2');
11069 
11070    l_reclass_trx :=  (nvl(px_asset_fin_rec.group_asset_id, 0) <>
11071                       nvl(l_asset_fin_rec_adj.group_asset_id, px_asset_fin_rec.group_asset_id)); -- bug# 5383699
11072 
11073    if (p_log_level_rec.statement_level) then
11074       fa_debug_pkg.add(l_calling_fn, 'p_use_fin_rec_adj', p_use_fin_rec_adj, p_log_level_rec => p_log_level_rec);
11075    end if;
11076 
11077    /* For bug 12739028  starts */
11078    if (g_deprn_ch_trx_id is null) then
11079       g_deprn_ch_trx_id := p_trans_rec.transaction_header_id;
11080    end if;
11081    -- Bug 14117544 if method change trx is an expensed trasaction then
11082    -- we need to change method for it.so added a new condition in below if
11083 
11084    if (l_adj_found) and  (px_asset_fin_rec.deprn_method_code is not null) then
11085      if (g_deprn_ch_trx_id < p_trans_rec.transaction_header_id and
11086           l_asset_fin_rec_adj.deprn_method_code is not null) OR (p_trans_rec.transaction_subtype = 'EXPENSED')then
11087 
11088          g_deprn_ch_trx_id   := p_trans_rec.transaction_header_id;
11089          l_adj_deprn_method  := l_asset_fin_rec_adj.deprn_method_code;
11090          l_adj_basic_rate    := l_asset_fin_rec_adj.basic_rate;
11091          l_adj_adjusted_rate := l_asset_fin_rec_adj.adjusted_rate;
11092          l_adj_life          := l_asset_fin_rec_adj.life_in_months;
11093          l_adj_production_capacity := l_asset_fin_rec_adj.production_capacity;
11094          l_adj_apply_new_method := TRUE;
11095       end if;
11096    elsif (p_use_fin_rec_adj and p_asset_fin_rec_adj.deprn_method_code is not null) then
11097       g_deprn_ch_trx_id   := p_trans_rec.transaction_header_id;
11098    end if;
11099 
11100    if (p_log_level_rec.statement_level) then
11101       fa_debug_pkg.add(l_calling_fn, 'g_deprn_ch_trx_id', g_deprn_ch_trx_id, p_log_level_rec => p_log_level_rec);
11102    end if;
11103 
11104   /* For bug 12739028 ends */
11105 
11106    if ((not(p_use_fin_rec_adj)) and
11107        (p_use_new_deprn_rule)) or
11108       (l_is_member_trx_for_group) then
11109       --
11110       -- Process transaction from db but use current rules in the case this transaction
11111       -- happened after current transaction
11112       --
11113       l_tmp_cost                      := l_asset_fin_rec_adj.cost;
11114       l_tmp_percent_salvage_value     := l_asset_fin_rec_adj.percent_salvage_value;
11115       l_tmp_salvage_value             := l_asset_fin_rec_adj.salvage_value;
11116       l_tmp_allowed_deprn_limit       := l_asset_fin_rec_adj.allowed_deprn_limit;
11117       l_tmp_allowed_deprn_limit_amt   := l_asset_fin_rec_adj.allowed_deprn_limit_amount;
11118       l_tmp_production_capacity       := l_asset_fin_rec_adj.production_capacity;
11119       l_tmp_fully_rsv_revals_counter  := l_asset_fin_rec_adj.fully_rsvd_revals_counter;
11120       l_tmp_reval_amortization_basis  := l_asset_fin_rec_adj.reval_amortization_basis;
11121       l_tmp_reval_ceiling             := l_asset_fin_rec_adj.reval_ceiling;
11122       l_tmp_unrevalued_cost           := l_asset_fin_rec_adj.unrevalued_cost;
11123       l_tmp_eofy_reserve              := l_asset_fin_rec_adj.eofy_reserve;
11124 
11125       l_asset_fin_rec_adj := p_asset_fin_rec_new;
11126 
11127       l_asset_fin_rec_adj.cost := l_tmp_cost;
11128       l_asset_fin_rec_adj.percent_salvage_value := l_tmp_percent_salvage_value;
11129       l_asset_fin_rec_adj.salvage_value := l_tmp_salvage_value;
11130       -- Bug 6863138 Considering deprn_limit as non delta amounts
11131       /* Bug 8356539..commenting the below code. as now we'll pass 'TRUE'
11132       for p_called_from_faxama in call to FA_ASSET_CALC_PVT.calc_deprn_limit_adj_rec_cost*/
11133       /* -- Bug 7283130
11134        if (l_asset_fin_rec_adj.deprn_limit_type = 'AMT' ) then
11135            l_asset_fin_rec_adj.allowed_deprn_limit := Null;
11136           if  p_trans_rec.calling_interface <>'FAXASSET' then
11137               l_asset_fin_rec_adj.allowed_deprn_limit_amount :=
11138               l_tmp_allowed_deprn_limit_amt;
11139           end if;
11140       else
11141          l_asset_fin_rec_adj.allowed_deprn_limit := l_tmp_allowed_deprn_limit;
11142       end if;
11143       --Bug 7283130 ends
11144       */
11145       l_asset_fin_rec_adj.production_capacity :=l_tmp_production_capacity;
11146       l_asset_fin_rec_adj.fully_rsvd_revals_counter := l_tmp_fully_rsv_revals_counter;
11147       l_asset_fin_rec_adj.reval_amortization_basis := l_tmp_reval_amortization_basis;
11148       l_asset_fin_rec_adj.reval_ceiling := l_tmp_reval_ceiling;
11149       l_asset_fin_rec_adj.unrevalued_cost := l_tmp_unrevalued_cost;
11150       l_asset_fin_rec_adj.eofy_reserve := l_tmp_eofy_reserve;
11151 
11152       if (p_log_level_rec.statement_level) then
11153          fa_debug_pkg.add(l_calling_fn, 'Need to use latest values except amounts',
11154                           l_asset_fin_rec_adj.cost, p_log_level_rec => p_log_level_rec);
11155       end if;
11156 
11157       if (l_adj_apply_new_method) then
11158          l_asset_fin_rec_adj.deprn_method_code := l_adj_deprn_method;
11159          l_asset_fin_rec_adj.basic_rate := l_adj_basic_rate ;
11160          l_asset_fin_rec_adj.adjusted_rate := l_adj_adjusted_rate;
11161          l_asset_fin_rec_adj.life_in_months := l_adj_life;
11162          l_asset_fin_rec_adj.production_capacity := l_adj_production_capacity;
11163       elsif px_asset_fin_rec.deprn_method_code is not null then
11164          l_asset_fin_rec_adj.deprn_method_code := px_asset_fin_rec.deprn_method_code;
11165          l_asset_fin_rec_adj.basic_rate := px_asset_fin_rec.basic_rate;
11166          l_asset_fin_rec_adj.adjusted_rate := px_asset_fin_rec.adjusted_rate;
11167          l_asset_fin_rec_adj.life_in_months := px_asset_fin_rec.life_in_months;
11168          l_asset_fin_rec_adj.production_capacity := px_asset_fin_rec.production_capacity;
11169       end if;
11170 
11171    elsif ((p_use_fin_rec_adj) or
11172           (l_asset_fin_rec_adj.date_placed_in_service is null)) and
11173           ((not (l_adj_found)) or (l_reclass_trx)) then
11174       --
11175       -- Process current transaction
11176       --
11177       l_asset_fin_rec_adj := p_asset_fin_rec_adj;
11178 
11179      -- Bug# 7046389
11180      -- Call below module only if calling form application.
11181      -- This will not be executed if called from adjustment API.
11182 
11183      --bug 8356539 commenting below if condition
11184 
11185      --if (p_trans_rec.calling_interface = 'FAXASSET') then
11186 
11187       -- Bug 6863138 Need to get the new value of deprn_limit in
11188       -- in l_asset_fin_rec_adj
11189       if l_asset_fin_rec_adj.deprn_limit_type is not null then
11190 
11191          SELECT bk1.deprn_limit_type, nvl(bk1.allowed_deprn_limit_amount,0), nvl(bk1.allowed_deprn_limit,0)
11192          INTO   l_tmp_deprn_limit_type, l_tmp_allowed_deprn_limit_amt, l_tmp_allowed_deprn_limit
11193          FROM   fa_books bk1
11194          WHERE  bk1.asset_id = p_asset_hdr_rec.asset_id
11195          and    bk1.book_type_code = p_asset_hdr_rec.book_type_code
11196          and    bk1.transaction_header_id_out is null;
11197 
11198          -- Bug#7046389
11199          if nvl(l_tmp_deprn_limit_type,'NONE') = l_asset_fin_rec_adj.deprn_limit_type then
11200             l_asset_fin_rec_adj.allowed_deprn_limit_amount :=
11201                     nvl(l_asset_fin_rec_adj.allowed_deprn_limit_amount,0) + l_tmp_allowed_deprn_limit_amt;
11202             if l_asset_fin_rec_adj.deprn_limit_type = 'PCT' then
11203                l_asset_fin_rec_adj.allowed_deprn_limit :=
11204                        nvl(l_asset_fin_rec_adj.allowed_deprn_limit,0) + l_tmp_allowed_deprn_limit;
11205                /* Bug 8356539..recalculate the deprn limit amount in case the type is 'PCT'
11206                   and adjustment is done through API*/
11207                if p_trans_rec.calling_interface <> 'FAXASSET' then
11208                   l_asset_fin_rec_adj.allowed_deprn_limit_amount :=
11209                            (1-l_asset_fin_rec_adj.allowed_deprn_limit) * (px_asset_fin_rec.cost+l_asset_fin_rec_adj.cost);
11210                end if;
11211             end if;
11212          end if;
11213       end if;
11214      -- end if; /* End if for p_trans_rec.calling_interface = 'FAXASSET' */  --8356539
11215 
11216       if (p_log_level_rec.statement_level) then
11217          fa_debug_pkg.add(l_calling_fn, 'This is the transaction user entered',
11218                           l_asset_fin_rec_adj.cost, p_log_level_rec => p_log_level_rec);
11219          fa_debug_pkg.add(l_calling_fn, 'After if allowed_deprn_limit_amount',
11220                           l_asset_fin_rec_adj.allowed_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
11221          fa_debug_pkg.add(l_calling_fn, 'After if allowed_deprn_limit',
11222                           l_asset_fin_rec_adj.allowed_deprn_limit, p_log_level_rec => p_log_level_rec);
11223       end if;
11224 
11225    else
11226       /*Added for bug 9756248.. need to recalculate Deprn limit correctly as we use adj rec for same*/
11230          INTO   l_tmp_deprn_limit_type, l_tmp_allowed_deprn_limit_amt, l_tmp_allowed_deprn_limit
11227       if l_asset_fin_rec_adj.deprn_limit_type is not null then
11228 
11229          SELECT bk1.deprn_limit_type, nvl(bk1.allowed_deprn_limit_amount,0), nvl(bk1.allowed_deprn_limit,0)
11231          FROM   fa_books bk1
11232          WHERE  bk1.asset_id = p_asset_hdr_rec.asset_id
11233          and    bk1.book_type_code = p_asset_hdr_rec.book_type_code
11234          and    bk1.transaction_header_id_out is null;
11235 
11236          -- Bug#7046389
11237          if nvl(l_tmp_deprn_limit_type,'NONE') = l_asset_fin_rec_adj.deprn_limit_type then
11238          -- bug 13859781
11239             l_asset_fin_rec_adj.allowed_deprn_limit_amount :=  l_tmp_allowed_deprn_limit_amt;
11240             if l_asset_fin_rec_adj.deprn_limit_type = 'PCT' then
11241             -- bug 13859781
11242                l_asset_fin_rec_adj.allowed_deprn_limit :=  l_tmp_allowed_deprn_limit;
11243                /* Bug 8356539..recalculate the deprn limit amount in case the type is 'PCT'
11244                   and adjustment is done through API*/
11245                if p_trans_rec.calling_interface <> 'FAXASSET' then
11246                   l_asset_fin_rec_adj.allowed_deprn_limit_amount :=
11247                            (1-l_asset_fin_rec_adj.allowed_deprn_limit) * (px_asset_fin_rec.cost+l_asset_fin_rec_adj.cost);
11248                end if;
11249             end if;
11250          end if;
11251       end if;
11252       -- Process transaction from db.  Current transaction has date later than this.
11253       if (p_log_level_rec.statement_level) then
11254          fa_debug_pkg.add(l_calling_fn, 'Delta comes from db', l_asset_fin_rec_adj.cost, p_log_level_rec => p_log_level_rec);
11255       end if;
11256    end if;
11257 
11258 --tk_util.DumpFinRec(l_asset_fin_rec_adj, 'GA');
11259 
11260   if (instrb(p_trans_rec.transaction_type_code, 'ADDITION') <> 0) and
11261      (px_asset_fin_rec.date_placed_in_service is not null) then
11262     x_asset_fin_rec_new := px_asset_fin_rec;
11263   else
11264     x_asset_fin_rec_new := l_asset_fin_rec_adj;
11265   end if;
11266   -- 7184690 below lines are commented out
11267   -- These lines were introduced by bug#7109525
11268   --if p_trans_rec.transaction_type_code in ('PARTIAL RETIREMENT','FULL RETIREMENT') THEN
11269   --      x_asset_fin_rec_new.cost := 0;
11270   --      l_asset_fin_rec_adj.cost := 0;
11271   --end if;
11272       if (p_log_level_rec.statement_level) then
11273          fa_debug_pkg.add(l_calling_fn, 'x_asset_fin_rec_new.cost', x_asset_fin_rec_new.cost, p_log_level_rec => p_log_level_rec);
11274          fa_debug_pkg.add(l_calling_fn, 'p_trans_rec.transaction_type_code', p_trans_rec.transaction_type_code, p_log_level_rec => p_log_level_rec);
11275       end if;
11276 
11277   --
11278   -- Defaulting Values
11279   --
11280   x_asset_fin_rec_new.prorate_convention_code   :=
11281          nvl(l_asset_fin_rec_adj.prorate_convention_code,
11282              nvl(px_asset_fin_rec.prorate_convention_code,
11283                  fa_cache_pkg.fazccbd_record.prorate_convention_code));
11284 
11285   x_asset_fin_rec_new.depreciate_flag           :=
11286          nvl(l_asset_fin_rec_adj.depreciate_flag,
11287              nvl(px_asset_fin_rec.depreciate_flag,
11288                  fa_cache_pkg.fazccbd_record.depreciate_flag));
11289 
11290   FA_UTIL_PVT.load_char_value
11291          (p_char_old  => px_asset_fin_rec.bonus_rule,
11292           p_char_adj  => l_asset_fin_rec_adj.bonus_rule,
11293           x_char_new  => x_asset_fin_rec_new.bonus_rule, p_log_level_rec => p_log_level_rec);
11294 
11295   FA_UTIL_PVT.load_char_value
11296          (p_char_old  => px_asset_fin_rec.ceiling_name,
11297           p_char_adj  => l_asset_fin_rec_adj.ceiling_name,
11298           x_char_new  => x_asset_fin_rec_new.ceiling_name, p_log_level_rec => p_log_level_rec);
11299 
11300   -- This is for FLAT RATE EXTENSION deprn basis rule
11301   FA_UTIL_PVT.load_char_value
11302          (p_char_old  => px_asset_fin_rec.exclude_fully_rsv_flag,
11303           p_char_adj  => l_asset_fin_rec_adj.exclude_fully_rsv_flag,
11304           x_char_new  => x_asset_fin_rec_new.exclude_fully_rsv_flag, p_log_level_rec => p_log_level_rec);
11305 
11306   x_asset_fin_rec_new.recognize_gain_loss :=
11307                   p_asset_fin_rec_new.recognize_gain_loss;
11308 
11309   x_asset_fin_rec_new.recapture_reserve_flag :=
11310                   p_asset_fin_rec_new.recapture_reserve_flag;
11311 
11312   x_asset_fin_rec_new.limit_proceeds_flag :=
11313                   p_asset_fin_rec_new.limit_proceeds_flag;
11314 
11315   x_asset_fin_rec_new.terminal_gain_loss :=
11316                   p_asset_fin_rec_new.terminal_gain_loss;
11317 
11318   x_asset_fin_rec_new.exclude_proceeds_from_basis :=
11319                   p_asset_fin_rec_new.exclude_proceeds_from_basis;
11320 
11321   x_asset_fin_rec_new.retirement_deprn_option :=
11322                   p_asset_fin_rec_new.retirement_deprn_option;
11323 
11324   x_asset_fin_rec_new.tracking_method :=
11325                   p_asset_fin_rec_new.tracking_method;
11326 
11327   x_asset_fin_rec_new.allocate_to_fully_rsv_flag :=
11328                   p_asset_fin_rec_new.allocate_to_fully_rsv_flag;
11329 
11330   x_asset_fin_rec_new.allocate_to_fully_ret_flag :=
11331                   p_asset_fin_rec_new.allocate_to_fully_ret_flag;
11332 
11333   x_asset_fin_rec_new.excess_allocation_option :=
11334                   p_asset_fin_rec_new.excess_allocation_option;
11335 
11336   x_asset_fin_rec_new.depreciation_option :=
11337                   p_asset_fin_rec_new.depreciation_option;
11338 
11339   x_asset_fin_rec_new.member_rollup_flag :=
11343                   p_asset_fin_rec_new.reduction_rate;
11340                   p_asset_fin_rec_new.member_rollup_flag;
11341   /*bug#16426081*/
11342   x_asset_fin_rec_new.reduction_rate :=
11344 
11345   if not FA_ASSET_CALC_PVT.calc_new_amounts(
11346                px_trans_rec              => p_trans_rec,
11347                p_asset_hdr_rec           => p_asset_hdr_rec,
11348                p_asset_desc_rec          => l_asset_desc_rec,
11349                p_asset_type_rec          => p_asset_type_rec,
11350                p_asset_cat_rec           => l_asset_cat_rec,
11351                p_asset_fin_rec_old       => px_asset_fin_rec,
11352                p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
11353                px_asset_fin_rec_new      => x_asset_fin_rec_new,
11354                p_asset_deprn_rec_old     => l_asset_deprn_rec,
11355                p_asset_deprn_rec_adj     => l_asset_deprn_rec,
11356                px_asset_deprn_rec_new    => l_asset_deprn_rec,
11357                p_mrc_sob_type_code       => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
11358 
11359      if (p_log_level_rec.statement_level) then
11360         fa_debug_pkg.add(l_calling_fn, 'Falied calling',
11361                          'FA_ASSET_CALC_PVT.calc_new_amounts',  p_log_level_rec => p_log_level_rec);
11362      end if;
11363 
11364      raise calc_failed;
11365   end if;
11366 
11367    x_asset_fin_rec_new.eofy_reserve  := nvl(l_asset_fin_rec_adj.eofy_reserve, 0) +
11368                                         nvl(px_asset_fin_rec.eofy_reserve, 0);
11369 
11370    if not FA_UTILS_PKG.faxrnd(x_asset_fin_rec_new.eofy_reserve,
11371                               p_asset_hdr_rec.book_type_code,
11372                               p_asset_hdr_rec.set_of_books_id,
11373                               p_log_level_rec => p_log_level_rec) then
11374       raise calc_failed;
11375    end if;
11376 
11377   if not FA_ASSET_CALC_PVT.calc_prorate_date
11378               (p_asset_hdr_rec           => p_asset_hdr_rec,
11379                p_asset_type_rec          => p_asset_type_rec,
11380                p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
11381                px_asset_fin_rec_new      => x_asset_fin_rec_new,
11382                p_period_rec              => l_period_rec, p_log_level_rec => p_log_level_rec) then
11383 
11384       if (p_log_level_rec.statement_level) then
11385          fa_debug_pkg.add(l_calling_fn, 'Falied calling',
11386                           'FA_ASSET_CALC_PVT.calc_prorate_date',  p_log_level_rec => p_log_level_rec);
11387       end if;
11388 
11389     raise calc_failed;
11390   end if;
11391 
11392   if not FA_ASSET_CALC_PVT.calc_deprn_info
11393               (p_trans_rec               => p_trans_rec,
11394                p_asset_hdr_rec           => p_asset_hdr_rec,
11395                p_asset_desc_rec          => l_asset_desc_rec,
11396                p_asset_cat_rec           => l_asset_cat_rec,
11397                p_asset_type_rec          => p_asset_type_rec,
11398                p_asset_fin_rec_old       => px_asset_fin_rec,
11399                p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
11400                px_asset_fin_rec_new      => x_asset_fin_rec_new,
11401                p_asset_deprn_rec_adj     => l_asset_deprn_rec,
11402                p_asset_deprn_rec_new     => l_asset_deprn_rec,
11403                p_period_rec              => l_period_rec
11404               , p_log_level_rec => p_log_level_rec) then
11405 
11406       if (p_log_level_rec.statement_level) then
11407          fa_debug_pkg.add(l_calling_fn, 'Falied calling',
11408                           'FA_ASSET_CALC_PVT.calc_deprn_info',  p_log_level_rec => p_log_level_rec);
11409       end if;
11410 
11411     raise calc_failed;
11412   end if;
11413 
11414   if not FA_ASSET_CALC_PVT.calc_deprn_start_date(
11415                p_asset_hdr_rec           => p_asset_hdr_rec,
11416                p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
11417                px_asset_fin_rec_new      => x_asset_fin_rec_new, p_log_level_rec => p_log_level_rec) then
11418 
11419      if (p_log_level_rec.statement_level) then
11420         fa_debug_pkg.add(l_calling_fn, 'Falied calling',
11421                          'FA_ASSET_CALC_PVT.calc_deprn_start_date',  p_log_level_rec => p_log_level_rec);
11422      end if;
11423 
11424      raise calc_failed;
11425   end if;
11426 
11427   if not FA_ASSET_CALC_PVT.calc_salvage_value(
11428                p_trans_rec               => p_trans_rec,
11429                p_asset_hdr_rec           => p_asset_hdr_rec,
11430                p_asset_type_rec          => p_asset_type_rec,
11431                p_asset_fin_rec_old       => px_asset_fin_rec,
11432                p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
11433                px_asset_fin_rec_new      => x_asset_fin_rec_new,
11434                p_mrc_sob_type_code       => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
11435 
11436       if (p_log_level_rec.statement_level) then
11437          fa_debug_pkg.add(l_calling_fn, 'Falied calling',
11438                           'FA_ASSET_CALC_PVT.calc_salvage_value',  p_log_level_rec => p_log_level_rec);
11439       end if;
11440 
11441       raise calc_failed;
11442   end if;
11443 
11444   if not FA_ASSET_CALC_PVT.calc_rec_cost
11445           (p_asset_hdr_rec           => p_asset_hdr_rec,
11446            p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
11447            px_asset_fin_rec_new      => x_asset_fin_rec_new, p_log_level_rec => p_log_level_rec) then
11448 
11449       if (p_log_level_rec.statement_level) then
11450          fa_debug_pkg.add(l_calling_fn, 'Falied calling',
11451                           'FA_ASSET_CALC_PVT.calc_rec_cost',  p_log_level_rec => p_log_level_rec);
11452       end if;
11453 
11454       raise calc_failed;
11455   end if;
11456 
11457   if not FA_ASSET_CALC_PVT.calc_deprn_limit_adj_rec_cost
11458           (p_asset_hdr_rec           => p_asset_hdr_rec,
11459            p_asset_type_rec          => p_asset_type_rec,
11460            p_asset_fin_rec_old       => px_asset_fin_rec,
11461            p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
11462            px_asset_fin_rec_new      => x_asset_fin_rec_new,
11463            /*bug 9006343 need to pass p_called_from_faxama as FALSE for trx in which extended deprn is availed*/
11464            p_called_from_faxama      => (nvl(p_trans_rec.transaction_key,'XX') <> 'ES'),
11465           /* Commented for bug# 7046389 */
11466            --p_called_from_faxama      => TRUE,-- 8356539 -- Bug 6604235
11467            --p_called_from_faxama      => (p_trans_rec.calling_interface = 'FAXASSET'),-- bug 8356539
11468            p_mrc_sob_type_code       => p_mrc_sob_type_code,
11469                     p_log_level_rec       => p_log_level_rec) then
11470 
11471       if (p_log_level_rec.statement_level) then
11472          fa_debug_pkg.add(l_calling_fn, 'Falied calling',
11473                           'FA_ASSET_CALC_PVT.calc_deprn_limit_adj_rec_cost',  p_log_level_rec => p_log_level_rec);
11474       end if;
11475 
11476       raise calc_failed;
11477   end if;
11478 --tk_util.debug('adj_rec_cost: '|| to_char(x_asset_fin_rec_new.adjusted_recoverable_cost));
11479 
11480 
11481   if (fa_cache_pkg.fazcbc_record.book_class = 'TAX' and
11482        x_asset_fin_rec_new.itc_amount_id is not null) then
11483      if not FA_ASSET_CALC_PVT.calc_itc_info
11484              (p_asset_hdr_rec           => p_asset_hdr_rec,
11485               p_asset_fin_rec_adj       => l_asset_fin_rec_adj,
11486               px_asset_fin_rec_new      => x_asset_fin_rec_new, p_log_level_rec => p_log_level_rec) then
11487 
11488         if (p_log_level_rec.statement_level) then
11489            fa_debug_pkg.add(l_calling_fn, 'Falied calling',
11490                             'FA_ASSET_CALC_PVT.calc_itc_info',  p_log_level_rec => p_log_level_rec);
11491         end if;
11492 
11493         raise calc_failed;
11494      end if;
11495 
11496   end if;
11497 
11498   x_dpis_change := (px_asset_fin_rec.date_placed_in_service <> l_asset_fin_rec_adj.date_placed_in_service);
11499 
11500 --tk_util.DumpFinRec(x_asset_fin_rec_new, 'GN');
11501 
11502   if (p_log_level_rec.statement_level) then
11503      fa_debug_pkg.add(l_calling_fn, 'End', x_asset_fin_rec_new.cost, p_log_level_rec => p_log_level_rec);
11504   end if;
11505 
11506   return TRUE;
11507 EXCEPTION
11508   WHEN calc_failed THEN
11509      if (p_log_level_rec.statement_level) then
11510         fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'calc_failed', p_log_level_rec => p_log_level_rec);
11511      end if;
11512 
11513     if c_get_init_mcbk%ISOPEN then
11514       CLOSE c_get_init_mcbk;
11515     end if;
11516 
11517     if c_get_init_bk%ISOPEN then
11518       CLOSE c_get_init_bk;
11519     end if;
11520 
11521     if c_get_mcbk%ISOPEN then
11522       CLOSE c_get_mcbk;
11523     end if;
11524 
11525     if c_get_bk%ISOPEN then
11526       CLOSE c_get_bk;
11527     end if;
11528 
11529     fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
11530     return false;
11531 
11532   WHEN OTHERS THEN
11533     if (p_log_level_rec.statement_level) then
11534        fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'others: '||sqlerrm, p_log_level_rec => p_log_level_rec);
11535     end if;
11536 
11537     if c_get_init_mcbk%ISOPEN then
11538       CLOSE c_get_init_mcbk;
11539     end if;
11540 
11541     if c_get_init_bk%ISOPEN then
11542       CLOSE c_get_init_bk;
11543     end if;
11544 
11545     if c_get_mcbk%ISOPEN then
11546       CLOSE c_get_mcbk;
11547     end if;
11548 
11549     if c_get_bk%ISOPEN then
11550       CLOSE c_get_bk;
11551     end if;
11552 
11553     fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
11554     return false;
11555 
11556 END GetFinRec;
11557 
11558 --+==============================================================================
11559 -- Function: Recalculate
11560 --
11561 --   This function calculate catch-up amounts due to backdated
11562 --   amortization transactions.
11563 
11564 --   1: Find transaction to start recalculation.
11565 --   2: Get initial asset_fin_rec, and asset_deprn_rec.  Values in these rec will
11566 --      be chagned as recalculation proceeds.
11567 --   3: Process all transaction dated after transaction found at first step.
11568 --      xxx All trx except Revaluation, Tax Reserve Adjustment, Reinstatement,
11569 --          Unit Adjustment, Transfer, and Reclass.
11570 --      3.1: Fetch one transaction
11571 --      3.2: Call faxcde to get reserve for adjusted_cost, raf and formula_factor
11572 --      3.3: Call Deprn Basis function to get new adjusted_cost, raf and formula_factor.
11573 --      3.4: If there is no transaction in this period, call faxcde until next trx
11574 --           to process (If there is no next trx, depreciate until current period).
11575 --      NOTE: Retirement which has been reinstated will not be processed at all.
11576 --   4: Return catch-up amount.
11577 --+==============================================================================
11578 FUNCTION Recalculate(
11579     p_trans_rec           IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
11580     p_asset_hdr_rec                     FA_API_TYPES.asset_hdr_rec_type,
11581     p_asset_type_rec                    FA_API_TYPES.asset_type_rec_type,
11582     p_asset_desc_rec                    FA_API_TYPES.asset_desc_rec_type,
11583     p_asset_fin_rec_old                 FA_API_TYPES.asset_fin_rec_type,
11584     p_asset_fin_rec_adj                 FA_API_TYPES.asset_fin_rec_type default null,
11585     p_period_rec                        FA_API_TYPES.period_rec_type,
11586     px_asset_fin_rec_new  IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
11587     p_asset_deprn_rec                   FA_API_TYPES.asset_deprn_rec_type,
11588     p_asset_deprn_rec_adj               FA_API_TYPES.asset_deprn_rec_type default null,
11589     x_deprn_expense          OUT NOCOPY FA_DEPRN_SUMMARY.DEPRN_AMOUNT%TYPE,
11590     x_bonus_expense          OUT NOCOPY FA_DEPRN_SUMMARY.BONUS_DEPRN_AMOUNT%TYPE,
11591     x_impairment_expense     OUT NOCOPY FA_DEPRN_SUMMARY.IMPAIRMENT_AMOUNT%TYPE,
11592     p_running_mode        IN            NUMBER,
11593     p_used_by_revaluation IN            NUMBER,
11594     p_reclassed_asset_id                NUMBER,
11595     p_reclass_src_dest                  VARCHAR2,
11596     p_reclassed_asset_dpis              DATE,
11597     p_source_transaction_type_code      VARCHAR2,
11598     p_mrc_sob_type_code                 VARCHAR2,
11599     p_calling_fn                        VARCHAR2
11600 ,p_log_level_rec       IN     fa_api_types.log_level_rec_type default null
11601 )  RETURN BOOLEAN IS
11602 
11603    l_calling_fn                   VARCHAR2(100) := 'FA_AMORT_CALC_PVT.Recalculate';
11604 
11605    --Bug3696765
11606    l_process_addition             BINARY_INTEGER := 1; -- 1: process (amort nbv) addition,
11607                                                        -- 0: do not process (amort nbv) addition
11608 
11609    l_depreciate_flag              VARCHAR2(3); -- Bug 5726160
11610    l_entered_reserve              NUMBER; -- Bug 5443855
11611    l_entered_ytd                  NUMBER;
11612 
11613    -- Bug 8674466 :
11614    l_ret_prorate_pc  NUMBER;
11615    l_future_ret_count NUMBER;
11616 
11617    -- bug 12344343 fetched fiscal year also
11618    CURSOR c_get_deprn_period_date IS
11619      select dp.calendar_period_open_date
11620            ,dp.fiscal_year
11621            ,ds.ytd_deprn
11622            ,ds.deprn_reserve
11623      from   fa_deprn_summary ds
11624           , fa_deprn_periods dp
11625      where  dp.book_type_code = p_asset_hdr_rec.book_type_code
11626      and    ds.book_type_code = p_asset_hdr_rec.book_type_code
11627      and    ds.asset_id = p_asset_hdr_rec.asset_id
11628      and    ds.deprn_source_code = 'BOOKS'
11629      and    dp.period_counter = ds.period_counter + 1;
11630 
11631      -- Bug 15933180
11632      -- this cursor will fetch the fiscal year
11633      -- for the prorate date.
11634    CURSOR c_get_dpis_period IS
11635        select fy.fiscal_year
11636        from fa_calendar_periods cp,
11637             fa_book_controls bc,
11638             fa_fiscal_year fy,
11639             fa_calendar_types ct,
11640             fa_books bk
11641        WHERE bk.book_type_code = p_asset_hdr_rec.book_type_code
11642        and   bk.asset_id = p_asset_hdr_rec.asset_id
11643        and   bk.transaction_header_id_out is null
11644        and   bc.book_type_code = p_asset_hdr_rec.book_type_code
11645        and   bc.deprn_calendar = ct.calendar_type
11646        and   bc.fiscal_year_name = fy.fiscal_year_name
11647        and   ct.fiscal_year_name = bc.fiscal_year_name
11648        and   ct.calendar_type = cp.calendar_type
11649        and   cp.start_date between fy.start_date and fy.end_date
11650        and   bk.prorate_date between cp.start_date and cp.end_date;
11651 
11652    -- Bug 8686315 : Added trx_type_code also
11653    CURSOR c_get_first_trx IS
11654      select th.transaction_header_id
11655           , nvl(th.amortization_start_date, th.transaction_date_entered)
11656           , th.date_effective
11657           , th.transaction_type_code
11658      from fa_transaction_headers th
11659      where th.asset_id = p_asset_hdr_rec.asset_id
11660      and   th.book_type_code = p_asset_hdr_rec.book_type_code
11661      and th.transaction_header_id = (select min(th2.transaction_header_id)
11662                                      from   fa_transaction_headers th2
11663                                      where  th2.asset_id = p_asset_hdr_rec.asset_id
11664                                      and    th2.book_type_code = p_asset_hdr_rec.book_type_code);
11665 
11666    --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11667    -- This is the cursor to find a transaction which has older
11668    -- transaction_date_entered but newer calendar_period_close_open_date
11669    -- than given transaction_date_entered.
11670    -- 1st select returns transaction like mention above.
11671    --
11672    -- 2nd select returns reinstatement transactioin for core asset as
11673    -- dated transaction back to retirement date so if given
11674    -- transaction_date_entered is between retirement and reinstatement,
11675    -- this program makes sure to start recalculate at least before
11676    -- the retirement.
11677    --
11678    -- 3rd select returns reinstatement transactioin of member for group
11679    -- as dated transaction back to retirement date so if given
11680    -- transaction_date_entered is between retirement and reinstatement,
11681    -- this program makes sure to start recalculate at least before
11682    -- the retirement.
11683    --
11684    --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11685    -- Bug3797105: 1st part of following cursor was returning trx which
11686    -- has performed in the same period as the period that passed date
11687    -- falls in.
11688    -- Bug5332733: The second column in the select clause was returning null
11689    -- so, added else part to the decode clause.
11690 
11691    CURSOR c_check_overlap (c_transaction_date_entered date,
11692                            c_transaction_header_id    number,
11693                            c_date_effective           date) IS
11694     select th.transaction_header_id    transaction_header_id,
11695            decode(l_process_addition,
11696                    1, decode( th.transaction_subtype,
11697                              'EXPENSED', px_asset_fin_rec_new.date_placed_in_service,
11698                               decode(th.transaction_type_code,
11699                                  'ADDITION', th.transaction_date_entered,
11700                                  'ADDITION/VOID', th.transaction_date_entered,
11701                                   nvl(th.amortization_start_date,th.transaction_date_entered)),
11702                               nvl(th.amortization_start_date,th.transaction_date_entered),
11703                               nvl(th.amortization_start_date,th.transaction_date_entered)
11704                             ),
11708            th.transaction_type_code transaction_type_code
11705                    nvl(th.amortization_start_date,th.transaction_date_entered)
11706                   )  transaction_date_entered,
11707            th.date_effective date_effective,
11709     from   fa_transaction_headers th
11710          , fa_deprn_periods dp
11711     where  th.asset_id = p_asset_hdr_rec.asset_id
11712     and    th.book_type_code = p_asset_hdr_rec.book_type_code
11713     and    dp.book_type_code = p_asset_hdr_rec.book_type_code
11714 --    and    th.date_effective between dp.period_open_date
11715 --                                 and nvl(dp.period_close_date, sysdate)
11716     and c_transaction_date_entered between dp.calendar_period_open_date
11717                                              and dp.calendar_period_close_date
11718     -- and (th.date_effective > nvl(dp.period_close_date, sysdate))
11719     -- Bug 6612507
11720     and ((th.date_effective > nvl(dp.period_close_date, sysdate)) or
11721          ((th.date_effective between dp.period_open_date and nvl(dp.period_close_date, sysdate)) and
11722           (nvl(th.transaction_subtype,'EXPENSED') ='AMORTIZED')))
11723     and    (    nvl(th.amortization_start_date,
11724                     decode(th.transaction_subtype,
11725                            'EXPENSED', px_asset_fin_rec_new.date_placed_in_service,
11726                            th.transaction_date_entered
11727                           )
11728                     ) <= c_transaction_date_entered
11729             and th.date_effective < c_date_effective)
11730     and    c_transaction_date_entered <= dp.calendar_period_close_date
11731     and    th.transaction_type_code not in (G_TRX_TYPE_TFR_OUT, G_TRX_TYPE_TFR_IN,
11732                                             G_TRX_TYPE_TFR, G_TRX_TYPE_TFR_VOID,
11733                                             G_TRX_TYPE_REC, G_TRX_TYPE_UNIT_ADJ,
11734                                             G_TRX_TYPE_TFR_VOID)
11735    union all
11736     select ret.transaction_header_id    transaction_header_id,
11737            ret.transaction_date_entered transaction_date_entered,
11738            ret.date_effective date_effective,
11739            ret.transaction_type_code transaction_type_code
11740     from   fa_transaction_headers ret,
11741            fa_transaction_headers rei,
11742            fa_retirements faret
11743     where  ret.asset_id = p_asset_hdr_rec.asset_id
11744     and    rei.asset_id = p_asset_hdr_rec.asset_id
11745     and    ret.book_type_code = p_asset_hdr_rec.book_type_code
11746     and    rei.book_type_code = p_asset_hdr_rec.book_type_code
11747     and    ret.transaction_header_id = faret.transaction_header_id_in
11748     and    rei.transaction_header_id = faret.transaction_header_id_out
11749     and    c_transaction_date_entered between
11750                  ret.transaction_date_entered and rei.transaction_date_entered
11751     and    ret.date_effective < c_date_effective
11752     and    ret.transaction_type_code in (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET)
11753     and    rei.transaction_type_code = G_TRX_TYPE_REI
11754     and    ret.transaction_header_id <> c_transaction_header_id
11755     order by transaction_header_id;
11756 
11757    CURSOR c_check_overlap2 is
11758       select th.transaction_header_id    transaction_header_id,
11759              decode(th.transaction_subtype,
11760                         'EXPENSED', px_asset_fin_rec_new.date_placed_in_service,
11761                                     nvl(th.amortization_start_date,th.transaction_date_entered)
11762                    )  transaction_date_entered,
11763              th.date_effective date_effective,
11764              th.transaction_type_code transaction_type_code
11765       from   fa_transaction_headers th
11766       where  th.asset_id = p_asset_hdr_rec.asset_id
11767       and    th.book_type_code = p_asset_hdr_rec.book_type_code
11768       and    th.transaction_type_code not in (G_TRX_TYPE_TFR_OUT, G_TRX_TYPE_TFR_IN,
11769                                               G_TRX_TYPE_TFR, G_TRX_TYPE_TFR_VOID,
11770                                               G_TRX_TYPE_REC, G_TRX_TYPE_UNIT_ADJ,
11771                                               G_TRX_TYPE_TFR_VOID, G_TRX_TYPE_ADD_VOID,
11772                                               G_TRX_TYPE_ADD)
11773       and    decode(th.transaction_subtype, null, px_asset_fin_rec_new.date_placed_in_service,
11774                                                   th.amortization_start_date) <
11775               nvl(p_trans_rec.amortization_start_date, p_trans_rec.transaction_date_entered);
11776 
11777 --toru
11778    l_incoming_thid                number(15);
11779 
11780    --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11781    -- This cursor gets all transaction needs to be reprocessed in
11782    -- order of transaction_date_entered.
11783    -- 1st select gets all (group) asset transactions except followings
11784    --   1. Transaction Type Code of TRANSFER OUT(IN), TRANSFER, TRANSFER IN/VOID,
11785    --      RECLASS, UNIT ADJUSTMENT, and REINSTATEMENT.
11786    --   2. Transaction of group if there is a member transaction associated with
11787    --      this transaction and the member is not currently this group's member
11788    --   3. Transaction of group reclass
11789    -- 2nd select gets all member transactions which has no group associated
11790    -- group transaction or there is a group transaction associated to the transaction
11791    -- but the group is not the same as current group asset.
11792    -- 3rd select returns current transaction.  This doesn't return anything
11793    -- if it is not member of this processed group asset or transaction type
11794    -- code is one of mentioned above.
11795    --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11796    --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11797    -- This is basically the same as c_get_ths_gadj but non-group asset
11798    --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11799     CURSOR c_get_ths_adj (c_transaction_date_entered date,
11800                          c_date_effective           date,
11804            th.transaction_type_code transaction_type_code,
11801                          c_transaction_header_id    number,
11802                          c_retirement_flag          varchar2) IS
11803     select th.transaction_header_id transaction_header_id,
11805            decode(l_process_addition,
11806                    1, decode(th.transaction_type_code,
11807                             'ADDITION', th.transaction_date_entered,
11808                             'ADDITION/VOID', th.transaction_date_entered,
11809                                 decode(th.transaction_key, 'IM', to_date('01-'||to_char(add_months(th.amortization_start_date, 1), 'MM-YYYY'), 'DD-MM-YYYY'),
11810                                   /* Japan Tax phase3 */   'ES', (select calendar_period_open_date
11811                                                                   from fa_deprn_periods
11812                                                                   where book_type_code = p_asset_hdr_rec.book_type_code
11813                                                                   and period_counter = bk.extended_depreciation_period),
11814                                                                   nvl(th.amortization_start_date,
11815                                     decode(th.transaction_subtype,
11816                                             'EXPENSED', decode(outbk.depreciate_flag,
11817                                                                'NO', decode(bk.depreciate_flag,
11818                                                                             'YES', decode(ds.deprn_reserve,
11819                                                                                           0, bk.date_placed_in_service,
11820                                                                                              th.transaction_date_entered),
11821 --Bug6190904: Replacing a line above with this could be an option.    bk.date_placed_in_service),
11822                                                                                    -- Bug#4699743 th.transaction_date_entered),
11823                                                                                    bk.date_placed_in_service),
11824                                                                      -- Bug# 4049799 bk.date_placed_in_service),
11825                                                                      px_asset_fin_rec_new.date_placed_in_service),
11826                                                          th.transaction_date_entered)))),
11827                          decode(th.transaction_key, 'IM', to_date('01-'||to_char(add_months(th.amortization_start_date, 1), 'MM-YYYY'), 'DD-MM-YYYY'),
11828                            /* Japan Tax phase3 */   'ES', (select calendar_period_open_date
11829                                                            from fa_deprn_periods
11830                                                            where book_type_code = p_asset_hdr_rec.book_type_code
11831                                                            and period_counter = bk.extended_depreciation_period),
11832                                                            nvl(th.amortization_start_date,
11833                                 decode(th.transaction_subtype,
11834                                           'EXPENSED', decode(outbk.depreciate_flag,
11835                                                                 'NO', decode(bk.depreciate_flag,
11836                                                                                'YES', decode(ds.deprn_reserve,
11837                                                                                                   0, bk.date_placed_in_service,
11838                                                                                                      th.transaction_date_entered),
11839                                                                                       th.transaction_date_entered),
11840                                                                       -- Bug# 4049799 bk.date_placed_in_service),
11841                                                                      px_asset_fin_rec_new.date_placed_in_service),
11842                                                       th.transaction_date_entered)))) transaction_date_entered,
11843            th.date_effective date_effective,
11844            th.transaction_name transaction_name,
11845            th.source_transaction_header_id source_transaction_header_id,
11846            th.mass_reference_id mass_reference_id,
11847            th.transaction_subtype transaction_subtype,
11848            th.transaction_key transaction_key,
11849            th.amortization_start_date amortization_start_date,
11850            th.calling_interface calling_interface,
11851            th.mass_transaction_id mass_transaction_id,
11852            fa_std_types.FA_NO_OVERRIDE deprn_override_flag,
11853            th.member_transaction_header_id member_transaction_header_id,
11854            th.trx_reference_id trx_reference_id,
11855            th.invoice_transaction_id,
11856            '1st SELECT in c_get_ths_adj'
11857     from   fa_transaction_headers th,
11858            fa_books bk
11859          , fa_books outbk
11860          , fa_deprn_summary ds
11861     where  th.asset_id = p_asset_hdr_rec.asset_id
11862     and    th.book_type_code = p_asset_hdr_rec.book_type_code
11863     and    bk.asset_id = p_asset_hdr_rec.asset_id
11864     and    bk.book_type_code = p_asset_hdr_rec.book_type_code
11865     and    bk.transaction_header_id_in = th.transaction_header_id
11866     and    th.transaction_type_code not in (G_TRX_TYPE_TFR_OUT, G_TRX_TYPE_TFR_IN,
11867                                             G_TRX_TYPE_TFR, G_TRX_TYPE_TFR_VOID,
11868                                             G_TRX_TYPE_REC, G_TRX_TYPE_UNIT_ADJ,
11869                                             G_TRX_TYPE_TFR_VOID, G_TRX_TYPE_REI,
11870                                             G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET,
11871     --
11872     --Bug6933891: Fix for bug5074327 included addition void trx as trx NOT to be processed
11873     --            However void trx needs to come in as the subsequent trx in the period of addition
11874     --            may not share the same trx date.  As a result, we need to process the some void trx
11878                                             G_TRX_TYPE_CIP_ADJ, -- Bug# 5074327, 5191200
11875     --            Whether to process the void trx will be determined in the main loop.  Not here.
11876     --            Leave CIP ADDITION Void trx for now but it may be removed from this not in condition
11877     --            as well later.
11879                                             G_TRX_TYPE_CIP_ADD_VOID, G_TRX_TYPE_CIP_ADD) -- Bug: 6019450, 6798953
11880     and    (th.transaction_header_id >= c_transaction_header_id
11881       or       th.transaction_header_id < c_transaction_header_id
11882          and   th.date_effective <= c_date_effective  --Bug6617982
11883 --         and   th.transaction_date_entered > c_transaction_date_entered)
11884          and   decode(th.transaction_subtype, NULL,
11885                             decode(th.transaction_type_code,
11886                                      'ADDITION/VOID', px_asset_fin_rec_new.date_placed_in_service,
11887                                      'CIP ADDITION/VOID', px_asset_fin_rec_new.date_placed_in_service,
11888                                                           th.transaction_date_entered),
11889                                                     th.transaction_date_entered) > c_transaction_date_entered)
11890     and    th.transaction_header_id <> l_incoming_thid
11891     and    not exists (select 'Exclude reclass trx'
11892                        from   fa_trx_references tr
11893                        where  tr.member_asset_id = th.asset_id
11894                        and    tr.member_transaction_header_id = th.transaction_header_id
11895                        and    tr.book_type_code = p_asset_hdr_rec.book_type_code
11896                        and    tr.transaction_type = G_TRX_TYPE_GRP_CHG)
11897     /*Bug# 8946649 - No need to pick rolled back impairment and transaction got created to reverse impairment*/
11898     and    bk.transaction_header_id_out not in (select transaction_header_id
11899                                                 from   fa_transaction_headers th2
11900                                                 where  th2.asset_id = th.asset_id
11901                                                 and    th2.book_type_code = p_asset_hdr_rec.book_type_code
11902                                                 and    th2.transaction_key = 'RM')
11903     and    nvl(th.transaction_key,'XX') <> 'RM' /*Bug#9355389 - placed nvl around key */
11904     and    ds.asset_id(+) = p_asset_hdr_rec.asset_id
11905     and    ds.book_type_code(+) = p_asset_hdr_rec.book_type_code
11906     and    ds.deprn_source_code(+) = 'BOOKS'
11907     and    outbk.asset_id(+) = p_asset_hdr_rec.asset_id
11908     and    outbk.book_type_code(+) = p_asset_hdr_rec.book_type_code
11909     and    outbk.transaction_header_id_out(+) = bk.transaction_header_id_in
11910     and    bk.depreciate_flag = outbk.depreciate_flag(+)  /* Bug 7199183 add this condition*//*Bug 7653832 Added folloing*/
11911     and    decode(th.transaction_type_code, 'ADDITION/VOID',th.transaction_date_entered,
11912                                             'CIP ADDITION/VOID',th.transaction_date_entered,
11913                                             px_asset_fin_rec_new.date_placed_in_service) <= px_asset_fin_rec_new.date_placed_in_service
11914 --
11915 -- Bug3421263: Added following select to takes care retirement
11916 --             prorate date as retirement trx date.
11917 --
11918     union all
11919     select th.transaction_header_id transaction_header_id,
11920            th.transaction_type_code transaction_type_code,
11921            decode(p_asset_fin_rec_old.group_asset_id, null,
11922                      decode(sign(con.prorate_date - cptrx.start_date),
11923                              1, decode(sign(con.prorate_date - cptrx.end_date),
11924                                 -1, ret.date_retired,
11925                                 0, ret.date_retired,
11926                                 con.prorate_date),
11927                              0, decode(sign(con.prorate_date - cptrx.end_date),
11928                                 -1, ret.date_retired,
11929                                 0, ret.date_retired,
11930                                 con.prorate_date),
11931                              con.prorate_date)
11932                   , ret.date_retired
11933                   ) transaction_date_entered,
11934            th.date_effective date_effective,
11935            th.transaction_name transaction_name,
11936            th.source_transaction_header_id source_transaction_header_id,
11937            th.mass_reference_id mass_reference_id,
11938            th.transaction_subtype transaction_subtype,
11939            th.transaction_key transaction_key,
11940            th.amortization_start_date amortization_start_date,
11941            th.calling_interface calling_interface,
11942            th.mass_transaction_id mass_transaction_id,
11943            fa_std_types.FA_NO_OVERRIDE deprn_override_flag,
11944            th.member_transaction_header_id member_transaction_header_id,
11945            th.trx_reference_id trx_reference_id,
11946            th.invoice_transaction_id,
11947            '2nd SELECT in c_get_ths_adj'
11948     from   fa_transaction_headers th,
11949            fa_retirements ret,
11950            fa_conventions con,
11951            fa_calendar_periods cp,
11952            fa_calendar_periods cptrx
11953     where  th.asset_id = p_asset_hdr_rec.asset_id
11954     and    th.book_type_code = p_asset_hdr_rec.book_type_code
11955     and    ret.asset_id = p_asset_hdr_rec.asset_id
11956     and    ret.book_type_code = p_asset_hdr_rec.book_type_code
11957     and    (ret.transaction_header_id_out is null or   -- Bug # 7307047
11958             ret.transaction_header_id_out = l_incoming_thid)
11959     and    ret.RETIREMENT_PRORATE_CONVENTION = con.PRORATE_CONVENTION_CODE
11960     and    ret.date_retired between con.start_date and con.end_date
11961     and    cp.calendar_type = fa_cache_pkg.fazcbc_record.prorate_calendar
11962     and    con.prorate_date between cp.start_date and cp.end_date
11963     and    th.transaction_type_code in (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET)
11964 --    and    th.transaction_header_id >= c_transaction_header_id
11968     and    th.transaction_header_id = ret.transaction_header_id_in
11965     and    th.transaction_header_id <> l_incoming_thid
11966     and    cptrx.calendar_type = fa_cache_pkg.fazcbc_record.deprn_calendar
11967     and    ret.date_retired between cptrx.start_date and cptrx.end_date
11969 --bug4363712
11970 --    and    con.prorate_date >= c_transaction_date_entered
11971 --bug fix 4547599
11972     and    (   (con.prorate_date > c_transaction_date_entered)
11973             or
11974 -- Bug 4622110: Modified to handle ret trx date is later than its prorate date.
11975 -- Bug 6740618: changed the decode
11976 -- Bug 6885405: changed the decode
11977 -- Bug 11840704 : Reverted the fix for 6885405
11978                (decode(c_retirement_flag, 'Y', con.prorate_date, th.transaction_date_entered) <= c_transaction_date_entered and
11979                 th.date_effective >= c_date_effective)
11980            )
11981 --
11982 --
11983     union all select
11984            l_incoming_thid transaction_header_id,
11985            p_trans_rec.transaction_type_code transaction_type_code,
11986            nvl(p_trans_rec.amortization_start_date,
11987                p_trans_rec.transaction_date_entered) transaction_date_entered,
11988            p_trans_rec.who_info.creation_date date_effective,
11989            p_trans_rec.transaction_name transaction_name,
11990            p_trans_rec.source_transaction_header_id source_transaction_header_id,
11991            p_trans_rec.mass_reference_id mass_reference_id,
11992            p_trans_rec.transaction_subtype transaction_subtype,
11993            p_trans_rec.transaction_key transaction_key,
11994            p_trans_rec.amortization_start_date amortization_start_date,
11995            p_trans_rec.calling_interface calling_interface,
11996            p_trans_rec.mass_transaction_id mass_transaction_id,
11997            p_trans_rec.deprn_override_flag deprn_override_flag,
11998            p_trans_rec.member_transaction_header_id member_transaction_header_id,
11999            p_trans_rec.trx_reference_id trx_reference_id,
12000            to_number(null), -- invoice_transaction_id
12001            '3rd SELECT in c_get_ths_adj'
12002     from   fa_books bk
12003     where  bk.asset_id = p_asset_hdr_rec.asset_id
12004     and    bk.book_type_code = p_asset_hdr_rec.book_type_code
12005     and    bk.transaction_header_id_out is null
12006     and    p_trans_rec.transaction_type_code
12007                                        not in (G_TRX_TYPE_TFR_OUT, G_TRX_TYPE_TFR_IN,
12008                                                G_TRX_TYPE_TFR, G_TRX_TYPE_TFR_VOID,
12009                                                G_TRX_TYPE_REC, G_TRX_TYPE_UNIT_ADJ,
12010                                                G_TRX_TYPE_TFR_VOID, G_TRX_TYPE_REI)
12011     order by transaction_date_entered, 4,1; -- 4 is date_effective 13372045 - added 1 -- trx_header_id
12012 
12013 
12014   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12015   -- This cursor fetchs next transaction information.
12016   -- Since main cursor to get transactions only fetchs 100 records at once,
12017   -- this is necessary to fetch 101th record if tehre is any.
12018   -- This is similar to main cursor.  Second union fetchs entered transaction
12019   -- which has not yet sotred in db.
12020   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12021   CURSOR c_get_next_ths (c_transaction_date_entered date,
12022                          c_date_effective           date) IS
12023     select th.transaction_date_entered transaction_date_entered,
12024            th.date_effective date_effective
12025     from   fa_transaction_headers th
12026     where  th.asset_id = p_asset_hdr_rec.asset_id
12027     and    th.book_type_code = p_asset_hdr_rec.book_type_code
12028     and    th.transaction_date_entered >= c_transaction_date_entered
12029     and    th.date_effective > c_date_effective
12030     and    (p_asset_type_rec.asset_type <> G_ASSET_TYPE_GROUP or
12031             not exists (select 'Y'
12032                         from fa_transaction_headers mth,
12033                              fa_books bk
12034                         where mth.transaction_header_id = th.member_transaction_header_id
12035                         and   mth.book_type_code = p_asset_hdr_rec.book_type_code
12036                         and   bk.asset_id = mth.asset_id
12037                         and   bk.book_type_code = p_asset_hdr_rec.book_type_code
12038                         and   bk.transaction_header_id_out is null
12039                         and   ((bk.asset_id <> nvl(p_reclassed_asset_id, 0) and
12040                                 bk.group_asset_id is null) or
12041                                bk.group_asset_id <> p_asset_hdr_rec.asset_id)
12042                          )
12043             )
12044     union all select
12045            p_trans_rec.transaction_date_entered transaction_date_entered,
12046            p_trans_rec.who_info.creation_date date_effective
12047     from   dual
12048     where  p_reclass_src_dest is null
12049     and    p_trans_rec.transaction_date_entered >= c_transaction_date_entered
12050     and    p_trans_rec.who_info.creation_date = c_date_effective
12051     and    (p_asset_type_rec.asset_type <> G_ASSET_TYPE_GROUP or
12052             not exists (select 'Y'
12053                         from fa_transaction_headers mth,
12054                              fa_books bk
12055                         where mth.transaction_header_id = p_trans_rec.member_transaction_header_id
12056                         and   mth.book_type_code = p_asset_hdr_rec.book_type_code
12057                         and   bk.asset_id = mth.asset_id
12058                         and   bk.book_type_code = p_asset_hdr_rec.book_type_code
12059                         and   bk.transaction_header_id_out is null
12060                         and   ((bk.asset_id <> nvl(p_reclassed_asset_id, 0) and
12061                                 bk.group_asset_id is null) or
12062                                bk.group_asset_id <> p_asset_hdr_rec.asset_id)
12063                          )
12064             )
12068   -- This cursor gets retirement information for given transaction_header_id
12065     order by transaction_date_entered, date_effective;
12066 
12067   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12069   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12070   CURSOR c_get_retirement (c_transaction_header_id number) IS
12071     select retirement_id,
12072            cost_retired,
12073            cost_of_removal,
12074            proceeds_of_sale,
12075            nvl(reserve_retired, 0),
12076            nvl(eofy_reserve, 0),
12077            reval_reserve_retired,
12078            unrevalued_cost_retired,
12079            bonus_reserve_retired,
12080            impair_reserve_retired,
12081            null --         recognize_gain_loss
12082     from   fa_retirements
12083     where  transaction_header_id_in = c_transaction_header_id
12084     and    transaction_header_id_out is null ;
12085     -- 7130809 pulled out the below code line as this is creating
12086     -- regression for adjusted cost in fa_books. This line was
12087     -- added for the Bug# 6341966
12088     /*or transaction_header_id_out = p_trans_rec.transaction_header_id; */
12089     -- Bug#6341966,Added condition to pick the reinstated retirement on asset.
12090 
12091   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12092   -- For MRC
12093   -- This cursor gets retirement information for given transaction_header_id
12094   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12095   CURSOR c_get_mc_retirement (c_transaction_header_id number) IS
12096     select retirement_id,
12097            cost_retired,
12098            cost_of_removal,
12099            proceeds_of_sale,
12100            nvl(reserve_retired, 0),
12101            nvl(eofy_reserve, 0),
12102            reval_reserve_retired,
12103            unrevalued_cost_retired,
12104            bonus_reserve_retired,
12105            impair_reserve_retired,
12106            null --         recognize_gain_loss
12107     from   fa_mc_retirements
12108     where  transaction_header_id_in = c_transaction_header_id
12109     and    transaction_header_id_out is null
12110     and    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
12111 
12112   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12113   -- gets reserve retired amounts if FA_RETIREMENTS doesn't store it
12114   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12115   CURSOR c_get_rsv_retired (c_transaction_header_id number) IS
12116     select sum(decode(debit_credit_flag, 'CR', -1 * adjustment_amount,
12117                                                   adjustment_amount))
12118     from   fa_adjustments
12119     where  source_type_code = 'RETIREMENT'
12120     and    adjustment_type = 'RESERVE'
12121     and    asset_id = p_asset_hdr_rec.asset_id
12122     and    book_type_code = p_asset_hdr_rec.book_type_code
12123     and    transaction_header_id = c_transaction_header_id;
12124 
12125   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12126   -- For MRC
12127   -- gets reserve retired amounts if FA_RETIREMENTS doesn't store it
12128   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12129   CURSOR c_get_mc_rsv_retired (c_transaction_header_id number) IS
12130     select sum(decode(debit_credit_flag, 'CR', -1 * adjustment_amount,
12131                                                   adjustment_amount))
12132     from   fa_mc_adjustments
12133     where  source_type_code = 'RETIREMENT'
12134     and    adjustment_type = 'RESERVE'
12135     and    asset_id = p_asset_hdr_rec.asset_id
12136     and    book_type_code = p_asset_hdr_rec.book_type_code
12137     and    transaction_header_id = c_transaction_header_id
12138     and    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
12139 
12140   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12141   -- gets reval reserve amount
12142   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12143   CURSOR c_get_reval_rsv (c_transaction_header_id number) IS
12144     select sum(decode(debit_credit_flag, 'DR', -1 * adjustment_amount,
12145                                                   adjustment_amount))
12146     from   fa_adjustments
12147     where  source_type_code = 'REVALUATION'
12148     and    adjustment_type = 'RESERVE'
12149     and    asset_id = p_asset_hdr_rec.asset_id
12150     and    book_type_code = p_asset_hdr_rec.book_type_code
12151     and    transaction_header_id = c_transaction_header_id;
12152 
12153   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12154   -- For MRC:  gets reval reserve amount
12155   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12156   CURSOR c_get_mc_reval_rsv (c_transaction_header_id number) IS
12157     select sum(decode(debit_credit_flag, 'DR', -1 * adjustment_amount,
12158                                                   adjustment_amount))
12159     from   fa_mc_adjustments
12160     where  source_type_code = 'REVALUATION'
12161     and    adjustment_type = 'RESERVE'
12162     and    asset_id = p_asset_hdr_rec.asset_id
12163     and    book_type_code = p_asset_hdr_rec.book_type_code
12164     and    transaction_header_id = c_transaction_header_id
12165     and    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
12166 
12167   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12168   -- gets reval reserve amount
12169   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12170   CURSOR c_get_bonus_reval_rsv (c_transaction_header_id number) IS
12171     select sum(decode(debit_credit_flag, 'DR', -1 * adjustment_amount,
12172                                                   adjustment_amount))
12173     from   fa_adjustments
12174     where  source_type_code = 'REVALUATION'
12175     and    adjustment_type = 'BONUS RESERVE'
12176     and    asset_id = p_asset_hdr_rec.asset_id
12180   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12177     and    book_type_code = p_asset_hdr_rec.book_type_code
12178     and    transaction_header_id = c_transaction_header_id;
12179 
12181   -- For MRC:  gets reval reserve amount
12182   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12183   CURSOR c_get_mc_bonus_reval_rsv (c_transaction_header_id number) IS
12184     select sum(decode(debit_credit_flag, 'DR', -1 * adjustment_amount,
12185                                                   adjustment_amount))
12186     from   fa_mc_adjustments
12187     where  source_type_code = 'REVALUATION'
12188     and    adjustment_type = 'BONUS RESERVE'
12189     and    asset_id = p_asset_hdr_rec.asset_id
12190     and    book_type_code = p_asset_hdr_rec.book_type_code
12191     and    transaction_header_id = c_transaction_header_id
12192     and    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
12193 /*
12194   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12195   -- gets reval reserve amount
12196   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12197   CURSOR c_get_impair_reval_rsv (c_transaction_header_id number) IS
12198     select sum(decode(debit_credit_flag, 'DR', -1 * adjustment_amount,
12199                                                   adjustment_amount))
12200     from   fa_adjustments
12201     where  source_type_code = 'REVALUATION'
12202     and    adjustment_type = 'IMPAIR RESERVE'
12203     and    asset_id = p_asset_hdr_rec.asset_id
12204     and    book_type_code = p_asset_hdr_rec.book_type_code
12205     and    transaction_header_id = c_transaction_header_id;
12206 
12207   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12208   -- For MRC:  gets reval reserve amount
12209   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12210   CURSOR c_get_mc_impair_reval_rsv (c_transaction_header_id number) IS
12211     select sum(decode(debit_credit_flag, 'DR', -1 * adjustment_amount,
12212                                                   adjustment_amount))
12213     from   fa_mc_adjustments
12214     where  source_type_code = 'REVALUATION'
12215     and    adjustment_type = 'IMPAIR RESERVE'
12216     and    asset_id = p_asset_hdr_rec.asset_id
12217     and    book_type_code = p_asset_hdr_rec.book_type_code
12218     and    transaction_header_id = c_transaction_header_id
12219     and    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
12220 */
12221   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12222   -- gets (reval) impairment reserve amount
12223   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12224   CURSOR c_get_impair_rsv (c_transaction_header_id number,
12225                            c_source_type_code varchar2) IS
12226     select sum(decode(debit_credit_flag, 'DR', -1 * adjustment_amount,
12227                                                   adjustment_amount))
12228     from   fa_adjustments
12229     where  source_type_code = c_source_type_code
12230     and    adjustment_type = 'IMPAIR RESERVE'
12231     and    asset_id = p_asset_hdr_rec.asset_id
12232     and    book_type_code = p_asset_hdr_rec.book_type_code
12233     and    transaction_header_id = c_transaction_header_id;
12234 
12235   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12236   -- For MRC:  gets (reval) impairment reserve amount
12237   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12238   CURSOR c_get_mc_impair_rsv (c_transaction_header_id number,
12239                               c_source_type_code varchar2) IS
12240     select sum(decode(debit_credit_flag, 'DR', -1 * adjustment_amount,
12241                                                   adjustment_amount))
12242     from   fa_mc_adjustments
12243     where  source_type_code = c_source_type_code
12244     and    adjustment_type = 'IMPAIR RESERVE'
12245     and    asset_id = p_asset_hdr_rec.asset_id
12246     and    book_type_code = p_asset_hdr_rec.book_type_code
12247     and    transaction_header_id = c_transaction_header_id
12248     and    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
12249       --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12250   /*Bug# 8520733 - gets (adjustment) impairment expense amount */
12251   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12252   CURSOR c_get_impair_exp (c_transaction_header_id number,
12253                            c_source_type_code varchar2) IS
12254     select nvl(sum(decode(debit_credit_flag, 'DR', -1 * adjustment_amount,
12255                                                   adjustment_amount)),0)
12256     from   fa_adjustments
12257     where  source_type_code = c_source_type_code
12258     and    adjustment_type = 'IMPAIR EXPENSE'
12259     and    asset_id = p_asset_hdr_rec.asset_id
12260     and    book_type_code = p_asset_hdr_rec.book_type_code
12261     and    transaction_header_id = c_transaction_header_id;
12262 
12263   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12264   -- For MRC:  gets (adjustment) impairment expense amount
12265   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12266   CURSOR c_get_mc_impair_exp (c_transaction_header_id number,
12267                               c_source_type_code varchar2) IS
12268     select nvl(sum(decode(debit_credit_flag, 'DR', -1 * adjustment_amount,
12269                                                   adjustment_amount)),0)
12270     from   fa_mc_adjustments
12271     where  source_type_code = c_source_type_code
12272     and    adjustment_type = 'IMPAIR EXPENSE'
12273     and    asset_id = p_asset_hdr_rec.asset_id
12274     and    book_type_code = p_asset_hdr_rec.book_type_code
12275     and    transaction_header_id = c_transaction_header_id
12276     and    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
12277   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12278   -- This cursor gets group asset's transaction_header_id which was
12282   --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12279   -- created for member addition.  The reason why is because Recalculation
12280   -- needs to start before this transaction in case reclass is backdated
12281   -- to member's dpis.
12283   CURSOR c_get_init_thid IS
12284     select gth.transaction_header_id
12285     from   fa_transaction_headers gth
12286     where  gth.asset_id = p_asset_hdr_rec.asset_id
12287     and    gth.book_type_code = p_asset_hdr_rec.book_type_code
12288     and    gth.member_transaction_header_id =
12289                 (select min(mth.transaction_header_id)
12290                  from   fa_transaction_headers mth
12291                  where  mth.asset_id = p_reclassed_asset_id
12292                  and    mth.book_type_code = p_asset_hdr_rec.book_type_code);
12293 
12294    --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12295    -- This cursor returns latest transaction of group
12296    --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12297    CURSOR c_get_group_trx IS
12298      select th.transaction_header_id    transaction_header_id,
12299             nvl(th.amortization_start_date,
12300                 th.transaction_date_entered) transaction_date_entered,
12301             th.date_effective date_effective,
12302             th.transaction_type_code transaction_type_code
12303      from   fa_transaction_headers th
12304      where  asset_id = p_asset_hdr_rec.asset_id
12305      and    book_type_code = p_asset_hdr_rec.book_type_code
12306      and    not exists (select 'Y'
12307                         from fa_transaction_headers mth,
12308                              fa_books bk
12309                         where mth.transaction_header_id = th.member_transaction_header_id
12310                         and   mth.book_type_code = p_asset_hdr_rec.book_type_code
12311                         and   bk.asset_id = mth.asset_id
12312                         and   bk.book_type_code = p_asset_hdr_rec.book_type_code
12313                         and   bk.transaction_header_id_out is null
12314                         and   ((bk.asset_id <> nvl(p_reclassed_asset_id, 0) and
12315                                 bk.group_asset_id is null) or
12316                                bk.group_asset_id <> p_asset_hdr_rec.asset_id)
12317                          )
12318      union all
12319      select p_trans_rec.transaction_header_id    transaction_header_id,
12320             nvl(p_trans_rec.amortization_start_date,
12321                 p_trans_rec.transaction_date_entered) transaction_date_entered,
12322             p_trans_rec.who_info.creation_date date_effective,
12323             p_trans_rec.transaction_type_code transaction_type_code
12324      from   dual
12325      where  not exists (select 'Y'
12326                         from fa_transaction_headers mth,
12327                              fa_books bk
12328                         where mth.transaction_header_id = p_trans_rec.member_transaction_header_id
12329                         and   mth.book_type_code = p_asset_hdr_rec.book_type_code
12330                         and   bk.asset_id = mth.asset_id
12331                         and   bk.book_type_code = p_asset_hdr_rec.book_type_code
12332                         and   bk.transaction_header_id_out is null
12333                         and   ((bk.asset_id <> nvl(p_reclassed_asset_id, 0) and
12334                                 bk.group_asset_id is null) or
12335                                bk.group_asset_id <> p_asset_hdr_rec.asset_id)
12336                          )
12337      order by transaction_header_id desc;
12338 
12339    --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12340    -- This cursor returns maximum group transaction header id which is
12341    -- not a group transaction of non-member asset before give transaction
12342    -- header id to get correct initial books row.
12343    --+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12344    CURSOR c_get_init_trx2 (c_transaction_header_id number) IS
12345      select outgth.transaction_header_id
12346      from   fa_transaction_headers outgth,
12347             fa_transaction_headers ingth,
12348             fa_books gbk
12349      where  outgth.asset_id = p_asset_hdr_rec.asset_id
12350      and    outgth.book_type_code = p_asset_hdr_rec.book_type_code
12351      and    outgth.transaction_header_id <= c_transaction_header_id
12352      and    ingth.asset_id = p_asset_hdr_rec.asset_id
12353      and    ingth.book_type_code = p_asset_hdr_rec.book_type_code
12354      and    gbk.transaction_header_id_out = outgth.transaction_header_id
12355      and    gbk.transaction_header_id_in = ingth.transaction_header_id
12356      and    not exists (select 1
12357                         from   fa_transaction_headers mth,
12358                                fa_books bk
12359                         where  mth.transaction_header_id = ingth.member_transaction_header_id
12360                         and    mth.asset_id = bk.asset_id
12361                         and    bk.book_type_code = p_asset_hdr_rec.book_type_code
12362                         and    bk.transaction_header_id_out is null
12363                         and    (bk.asset_id <> p_reclassed_asset_id
12364                            and  nvl(bk.group_asset_id, 0) <> p_asset_hdr_rec.asset_id))
12365      order by outgth.transaction_header_id desc;
12366 
12367 -- bug 4428646, modified from 'B' to 'BOOKS'.
12368   CURSOR c_get_brow IS
12369      select ytd_deprn, deprn_reserve
12370      from   fa_deprn_summary
12371      where  asset_id = p_asset_hdr_rec.asset_id
12372      and    book_type_code = p_asset_hdr_rec.book_type_code
12373      and    deprn_source_code = 'BOOKS';
12374 
12375   CURSOR c_get_mc_brow IS
12376      select ytd_deprn, deprn_reserve
12377      from   fa_mc_deprn_summary
12378      where  asset_id = p_asset_hdr_rec.asset_id
12379      and    book_type_code = p_asset_hdr_rec.book_type_code
12380      and    deprn_source_code = 'BOOKS'
12381      and    set_of_books_id = p_asset_hdr_rec.set_of_books_id;
12382 
12386   -- Bug 5654286 Excluded ADDITION/VOID transaction
12383   -- code fix for bug no.4016503
12384   -- Get previous trx with given thid
12385   --Added conditions to where clause for bug 4168841
12387   -- Bug 13001311 no need to pick trasaction with key 'ES'
12388   -- Bug 13028310 removed changes done in 13001311
12389   CURSOR c_get_prev_trx (c_thid number) IS
12390     select th.transaction_header_id
12391          , th.transaction_date_entered
12392          , th.date_effective
12393          , th.transaction_type_code
12394     from   fa_transaction_headers th
12395          ,  fa_books bk
12396     where bk.transaction_header_id_out <  c_thid
12397     and   bk.book_type_code = p_asset_hdr_rec.book_type_code
12398     and   th.book_type_code = p_asset_hdr_rec.book_type_code
12399     and   th.asset_id = p_asset_hdr_rec.asset_id
12400     and   bk.asset_id = p_asset_hdr_rec.asset_id
12401     and   bk.transaction_header_id_in = th.transaction_header_id
12402     and   th.transaction_type_code not in (G_TRX_TYPE_TFR_OUT, G_TRX_TYPE_TFR_IN,
12403                                            G_TRX_TYPE_TFR, G_TRX_TYPE_TFR_VOID,
12404                                            G_TRX_TYPE_REC, G_TRX_TYPE_UNIT_ADJ,
12405                                            G_TRX_TYPE_TFR_VOID ,G_TRX_TYPE_REI,
12406                                            G_TRX_TYPE_ADD_VOID)
12407     order by transaction_header_id desc;
12408 
12409    -- Bug6190904: Need following cursor to store prorate period info
12410    -- to find out whether adjustment date (amortized) may need the info
12411    -- if the date falls in the prorate period and impact the catch-up.
12412    CURSOR c_get_prorate_date (c_date_placed_in_service date
12413                             , c_prorate_convention_code varchar2) is
12414    select prorate_date, start_date, end_date
12415    from   fa_conventions
12416    where  prorate_convention_code = c_prorate_convention_code
12417    and    c_date_placed_in_service between start_date and end_date;
12418 
12419    -- Bug6190904: Used with above cursor.
12420    l_prorate_date   date;
12421    l_start_date     date;
12422    l_end_date       date;
12423 
12424    -- Bug 8211842 : Get the prorated retirement date
12425    -- for a reinstatement transaction
12426    CURSOR c_get_retirement_pdate IS
12427    select decode(p_asset_fin_rec_old.group_asset_id, null, con.prorate_date, ret.date_retired) prorate_date
12428    from   fa_conventions con,
12429           fa_retirements ret
12430    where  ret.transaction_header_id_out = p_trans_rec.transaction_header_id
12431    and    ret.book_type_code = p_asset_hdr_rec.book_type_code
12432    and    ret.asset_id = p_asset_hdr_rec.asset_id
12433    and    ret.retirement_prorate_convention = con.prorate_convention_code
12434    and    ret.date_retired between con.start_date and con.end_date;
12435 
12436    l_override_limit_date date;
12437    l_override_limit_period_rec FA_API_TYPES.period_rec_type;
12438 
12439   --++++++++++++++++++ Table types ++++++++++++++++++
12440   TYPE tab_date_type IS TABLE OF DATE INDEX BY BINARY_INTEGER;
12441   TYPE tab_num_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
12442   TYPE tab_num15_type IS TABLE OF NUMBER(15) INDEX BY BINARY_INTEGER;
12443   TYPE tab_char1_type IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;
12444   TYPE tab_char15_type IS TABLE OF VARCHAR2(15) INDEX BY BINARY_INTEGER;
12445   TYPE tab_char30_type IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
12446   TYPE tab_char150_type IS TABLE OF VARCHAR2(150) INDEX BY BINARY_INTEGER;
12447 
12448   -- table to store returned values from c_check_overlap2
12449   t_co_thid                      tab_num15_type;
12450   t_co_date_effective            tab_date_type;
12451   t_co_trx_date                  tab_date_type;
12452   t_co_trx_type_code             tab_char30_type;
12453 
12454 
12455   --+++ Table variables to for main transaction cursor +++
12456   t_transaction_header_id        tab_num15_type;
12457   t_transaction_type_code        tab_char30_type;
12458   t_transaction_date_entered     tab_date_type;
12459   t_transaction_period_ctr       tab_num15_type; -- Bug 8398064
12460   t_date_effective               tab_date_type;
12461   t_transaction_name             tab_char30_type;
12462   t_source_transaction_header_id tab_num15_type;
12463   t_mass_reference_id            tab_num15_type;
12464   t_transaction_subtype          tab_char30_type;
12465   t_transaction_key              tab_char30_type;
12466   t_amortization_start_date      tab_date_type;
12467   t_calling_interface            tab_char30_type;
12468   t_mass_transaction_id          tab_num15_type;
12469   t_deprn_override_flag          tab_char1_type;
12470   t_member_transaction_header_id tab_num15_type;
12471   t_trx_reference_id             tab_num15_type;
12472   t_invoice_transaction_id       tab_num15_type;
12473   t_which_select                 tab_char30_type;
12474 
12475 
12476   l_row_count                    NUMBER := 0;
12477 
12478   --+++++ Store data related to each transactions +++++
12479   l_trans_rec                    FA_API_TYPES.trans_rec_type;
12480   l_invoice_transaction_id       NUMBER;
12481   l_period_rec                   FA_API_TYPES.period_rec_type;
12482   l_asset_deprn_rec              FA_API_TYPES.asset_deprn_rec_type;
12483   l_asset_deprn_rec_raf          FA_API_TYPES.asset_deprn_rec_type;
12484   l_asset_fin_rec_old            FA_API_TYPES.asset_fin_rec_type;
12485   l_asset_fin_rec_adj            FA_API_TYPES.asset_fin_rec_type;
12486   l_asset_fin_rec_new            FA_API_TYPES.asset_fin_rec_type;
12487   l_asset_retire_rec             FA_API_TYPES.asset_retire_rec_type;
12488 
12489   l_least_thid                   number(15); -- Stored least transaction_header_id
12493   l_member_hdr_rec               FA_API_TYPES.asset_hdr_rec_type;
12490                                              -- to find starting fa_books record
12491   l_member_asset_id              number(15) := to_number(null); -- Store member asset id
12492   l_member_trx_key               varchar2(2); -- member transaction key
12494   l_next_period_rec              FA_API_TYPES.period_rec_type;
12495   l_transaction_type_code        varchar2(30); -- Used to find reinstatement
12496 
12497   l_temp_period_counter          number(15); -- This is to store period counter because GetDeprnRec needs
12498                                              -- period counter = period_counter - 1
12499 
12500   l_use_new_deprn_rule           BOOLEAN := FALSE; -- True: if it needs to inherit passed
12501                                                    -- asset_fin_rec values except amounts.
12502   l_use_fin_rec_adj              BOOLEAN := FALSE; -- True: if it is processing passed transaction
12503 
12504   l_limit               CONSTANT BINARY_INTEGER := 1800; -- main transaction_cursor limit constant;
12505 
12506   --+++++++++++++++ For calling faxcde +++++++++++++++
12507   l_dpr_in                       FA_STD_TYPES.dpr_struct;
12508   l_dpr_out                      FA_STD_TYPES.dpr_out_struct;
12509   l_dpr_arr                      FA_STD_TYPES.dpr_arr_type;
12510   l_running_mode                 NUMBER;
12511 
12512   --++++++++++ For storing retirement values ++++++++++
12513   l_retirement_id                NUMBER(15);
12514   l_cost_of_removal              NUMBER;
12515   l_proceeds_of_sales            NUMBER;
12516   l_reserve_retired              NUMBER;
12517   l_eofy_reserve_retired         NUMBER;
12518   l_reval_reserve_retired        NUMBER;
12519   l_unrevalued_cost_retired      NUMBER;
12520   l_bonus_reserve_retired        NUMBER;
12521   l_impair_reserve_retired       NUMBER;
12522   l_recognize_gain_loss          VARCHAR2(30);
12523   l_cost_retired                 NUMBER;
12524 
12525   --++++++++++ For storing revaluation values ++++++++++
12526   l_reval_reserve                NUMBER;
12527   l_reval_bonus_reserve          NUMBER;
12528   l_reval_impair_reserve         NUMBER;
12529 
12530   l_impair_reserve               NUMBER;
12531 
12532   l_process_this_trx             BOOLEAN := TRUE; -- False: if this transaction is retirement and
12533                                                   --        reinstatement exists for this retirement.
12534                                                   --        If this is false, it won't process this transaction.
12535 
12536   --
12537   -- These are used to store return values from faxcde which
12538   -- may not be used.
12539   --
12540   l_out_deprn_exp                NUMBER;
12541   l_out_reval_exp                NUMBER;
12542   l_out_reval_amo                NUMBER;
12543   l_out_prod                     NUMBER;
12544   l_out_ann_adj_exp              NUMBER;
12545   l_out_ann_adj_reval_exp        NUMBER;
12546   l_out_ann_adj_reval_amo        NUMBER;
12547   l_out_bonus_rate_used          NUMBER;
12548   l_out_full_rsv_flag            BOOLEAN;
12549   l_out_life_comp_flag           BOOLEAN;
12550   l_out_deprn_override_flag      VARCHAR2(1);
12551 
12552   --+++++++ variables for cursor c_get_next_ths +++++++
12553   l_next_trx_period_counter      NUMBER(15);
12554   l_next_trx_fiscal_year         NUMBER(15);
12555   l_next_trx_period_num          NUMBER(15);
12556   l_next_trx_trx_date_entered    DATE;
12557   l_next_trx_date_effective      DATE;
12558 
12559   --+++++++ variables for cursor c_get_init_thid ++++++
12560   l_member_init_thid             NUMBER;
12561 
12562   --+++++++ variables FA_CALC_DEPRN_BASIS1_PKG.GET_EOFY_EOP +++++++
12563   l_eofy_rec_cost                NUMBER;
12564   l_eofy_sal_val                 NUMBER;
12565   l_eop_rec_cost                 NUMBER;
12566   l_eop_sal_val                  NUMBER;
12567 
12568   l_eofy_fy                      NUMBER; -- Fiscal year which is used to get
12569                                          -- end of fiscal year recoverable cost and
12570                                          -- salvage value
12571 
12572   l_period_counter               NUMBER(15);
12573 
12574   --++++++++ variables for calling GetEofyReserve ++++++++
12575   l_eofy_thid                    NUMBER(15);
12576   l_eofy_trx_date_entered        DATE;
12577   l_eofy_date_effective          DATE;
12578   l_eofy_reserve                 NUMBER;
12579   l_eofy_trx_type_code           VARCHAR2(30);
12580 
12581   --++++++++ variables for cursor c_get_deprn_period_date +++++++
12582   l_calendar_period_start_date   date;
12583   l_add_fiscal_year              number; -- bug 12344343
12584   l_start_from_addition          number := 0; -- bug 12344343
12585   --++++++++ variables for cursorc_get_dpis_period +++++++ Bug 15933180
12586   l_dpis_fiscal_year             number;
12587   --++++++++ variables for manual override ++++++++
12588   l_rate_source_rule             VARCHAR2(25);
12589   l_deprn_basis_rule             VARCHAR2(25);
12590 
12591   --++++++++ variables for cursor c_get_reclass_reserve +++++++++
12592   l_src_asset_id                 NUMBER(15);
12593   l_dest_asset_id                NUMBER(15);
12594   l_reclassed_reserve            NUMBER;
12595   l_reclass_src_dest             VARCHAR2(12);
12596 
12597   --++++++++ Other Variables +++++++
12598   l_calc_deprn_flag              BOOLEAN := FALSE;
12599   l_temp_adjusted_cost           NUMBER;
12600   l_reserve_adj                  NUMBER;
12601 
12602   --+++++++++++++++++ Exceptions ++++++++++++++++++++++
12603   invalid_trx_to_overlap         EXCEPTION;
12604   calc_failed                    EXCEPTION;
12605   l_check_overlap_found          BOOLEAN := FALSE;
12606 
12607   l_temp_cnt binary_integer := 0;
12608 
12609   --bug3548724
12610   l_is_this_void                 BOOLEAN := FALSE;
12611   l_adj_processed                BOOLEAN := FALSE;
12615 
12612   l_add_processed                BOOLEAN := FALSE;
12613   l_add_void_exist               BOOLEAN := FALSE;
12614   l_add_exist                    BOOLEAN := FALSE;
12616   --Bug3724207
12617   l_dpis_change                  BOOLEAN := FALSE;
12618   l_dbr_event_type               VARCHAR2(30);
12619   l_default_dbr_event_type       VARCHAR2(30);
12620   l_brow_ytd_deprn               NUMBER;
12621   l_brow_deprn_reserve           NUMBER;
12622 
12623   l_energy_member                BOOLEAN := FALSE;  -- ENERGY
12624   l_retirement_flag              VARCHAR2(1) := 'N'; --Bug4622110
12625   l_amort_adjusted_flag          BOOLEAN := FALSE; -- bug 8398064
12626   l_overlapping_rets             BOOLEAN := FALSE; -- bug 8398064
12627 
12628   l_impair_adj_cost              NUMBER;
12629   l_impair_raf                   NUMBER;
12630   l_impair_formula_factor        NUMBER;
12631   l_unplanned_exp                NUMBER;
12632   l_start_from_first             BOOLEAN := TRUE;
12633 
12634   -- Bug PKO
12635   l_retirement_thid              NUMBER := -1;
12636   l_catchup_begin_deprn_rec      FA_API_TYPES.asset_deprn_rec_type;
12637   l_temp_reserve                 NUMBER;
12638 
12639   l_cost_frac                    NUMBER;  -- Bug 5893429
12640 
12641   l_old_pc_reserved              NUMBER;  -- Japan Bug 6645061
12642   l_new_pc_reserved              NUMBER;  -- Japan Bug 6645061
12643   l_check_tax_overlap            NUMBER;  -- 9003531
12644 
12645   --Bug6755649
12646   l_cur_adj_cost                NUMBER := 0;
12647   l_old_cost_frac               NUMBER;
12648 
12649   l_start_extended              VARCHAR2(1) := 'N'; -- Bug 8211842
12650   l_get_eofy_thid               NUMBER; -- Bug 8537330
12651   l_amort_res_adj_poa           BOOLEAN := FALSE; --Bug 13620748
12652 
12653 BEGIN
12654 
12655    if (p_log_level_rec.statement_level) then
12656       fa_debug_pkg.add(l_calling_fn, 'Begin', p_asset_type_rec.asset_type||
12657                                               ':'||p_asset_hdr_rec.asset_id , p_log_level_rec => p_log_level_rec);
12658       fa_debug_pkg.add(l_calling_fn, 'Reclass values', p_reclass_src_dest||
12659                                                        ':'||to_char(p_reclassed_asset_id)||':'||
12660                                                        to_char(p_reclassed_asset_dpis, 'DD-MON-RR'));
12661    end if;
12662 
12663    l_asset_deprn_rec := p_asset_deprn_rec;
12664    l_asset_fin_rec_adj := p_asset_fin_rec_adj;
12665 
12666    g_deprn_ch_trx_id := null;
12667 
12668    l_incoming_thid                       := nvl(p_trans_rec.transaction_header_id, 999999999999);
12669    l_trans_rec.transaction_type_code     := p_trans_rec.transaction_type_code;
12670    l_trans_rec.transaction_header_id     :=  l_incoming_thid;
12671    l_trans_rec.transaction_date_entered  := nvl(p_trans_rec.amortization_start_date,
12672                                                p_trans_rec.transaction_date_entered);
12673    l_trans_rec.who_info.last_update_date := nvl(p_trans_rec.who_info.last_update_date, sysdate);
12674 
12675    if ((px_asset_fin_rec_new.group_asset_id is null) and
12676        (p_asset_fin_rec_old.group_asset_id is not null)) or
12677       ((px_asset_fin_rec_new.group_asset_id is not null) and
12678        (p_asset_fin_rec_old.group_asset_id is null)) and
12679       (p_asset_type_rec.asset_type = 'CAPITALIZED') then
12680       l_calc_deprn_flag := TRUE;
12681    end if;
12682    -- bug 12344343 fetching fiscal year also
12683    /* Bug 6281311 fetching it here */
12684    OPEN c_get_deprn_period_date;
12685    FETCH c_get_deprn_period_date INTO l_calendar_period_start_date,l_add_fiscal_year, l_entered_ytd, l_entered_reserve;
12686    CLOSE c_get_deprn_period_date;
12687 
12688    if (p_log_level_rec.statement_level) then
12689      fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 0.9 ==========','', p_log_level_rec => p_log_level_rec);
12690      fa_debug_pkg.add(l_calling_fn, '++ l_calendar_period_start_date', l_calendar_period_start_date, p_log_level_rec => p_log_level_rec);
12691      fa_debug_pkg.add(l_calling_fn, '++ l_entered_ytd', l_entered_ytd, p_log_level_rec => p_log_level_rec);
12692      fa_debug_pkg.add(l_calling_fn, '++ l_add_fiscal_year', l_add_fiscal_year, p_log_level_rec => p_log_level_rec);
12693      fa_debug_pkg.add(l_calling_fn, '++ l_entered_reserve', l_entered_reserve, p_log_level_rec => p_log_level_rec);
12694    end if;
12695    /* Bug 6281311 fetching it here */
12696 
12697    --
12698    -- Bug3696765:
12699    -- Due to necessity of using user entered reserve occasionally (only if user backdated
12700    -- to 1st peirod of fiscal, this check is necessary and the return value will be
12701    -- used in check_overlap cursor and main cursor.
12702    --
12703    if (p_log_level_rec.statement_level) then
12704      fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 1.0 ==========','', p_log_level_rec => p_log_level_rec);
12705      fa_debug_pkg.add(l_calling_fn, '++ p_trans_rec.transaction_header_id', p_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
12706      fa_debug_pkg.add(l_calling_fn, '++ l_incoming_thid', l_incoming_thid, p_log_level_rec => p_log_level_rec);
12707      fa_debug_pkg.add(l_calling_fn, '++ p_trans_rec.transaction_type_code', p_trans_rec.transaction_type_code, p_log_level_rec => p_log_level_rec);
12708      fa_debug_pkg.add(l_calling_fn, '++ p_trans_rec.transaction_date_entered', p_trans_rec.transaction_date_entered, p_log_level_rec => p_log_level_rec);
12709    end if;
12710 
12711    if (p_trans_rec.transaction_type_code not like '%ADDITION') and
12712       (p_trans_rec.amortization_start_date is not null) then
12713       if not GetPeriodInfo(to_number(to_char(p_trans_rec.amortization_start_date, 'J')),
12714                            p_asset_hdr_rec.book_type_code,
12718                            p_log_level_rec) then
12715                            p_mrc_sob_type_code,
12716                            p_asset_hdr_rec.set_of_books_id,
12717                            l_period_rec,
12719          if (p_log_level_rec.statement_level) then
12720             fa_debug_pkg.add(l_calling_fn, 'Error calling',
12721                              'GetPeriodInfo', p_log_level_rec => p_log_level_rec);
12722          end if;
12723 
12724          raise calc_failed;
12725       end if;
12726 
12727       /* Bug 6281311 Reset l_process_addition only if the asset
12728          was added with reserve */
12729       if (l_period_rec.fiscal_year = l_add_fiscal_year AND l_entered_reserve <> 0 )then
12730          OPEN c_get_dpis_period;
12731          FETCH c_get_dpis_period INTO l_dpis_fiscal_year;
12732          CLOSE c_get_dpis_period;
12733 	 if l_dpis_fiscal_year <> l_add_fiscal_year then --Bug 15933180
12734             l_process_addition := 0;
12735          else
12736             l_process_addition := 1;
12737          end if;
12738       end if;
12739       fa_debug_pkg.add(l_calling_fn, 'l_process_addition: After changing', l_process_addition, p_log_level_rec => p_log_level_rec);
12740    end if;
12741 
12742 -- Bug 5726160
12743    if p_running_mode = fa_std_types.FA_DPR_CATCHUP then
12744 
12745       if p_trans_rec.transaction_type_code = 'REINSTATEMENT' then
12746 
12747         begin
12748           select transaction_header_id_in
12749           into l_retirement_thid -- retirement thid
12750           from fa_retirements
12751           where asset_id = p_asset_hdr_rec.asset_id
12752             and book_type_code = p_asset_hdr_rec.book_type_code
12753             and transaction_header_id_out = l_incoming_thid;
12754         exception when others then null;
12755         end;
12756 
12757       end if;
12758 
12759    end if;
12760 
12761    -- Bug 8211842 : Get the user provided transaction date
12762    -- In case of reinstatement it is the retirement prorate date
12763    l_override_limit_date := p_trans_rec.transaction_date_entered;
12764    if p_trans_rec.transaction_type_code = 'REINSTATEMENT' then
12765       OPEN c_get_retirement_pdate;
12766       FETCH c_get_retirement_pdate
12767       INTO l_override_limit_date;
12768       if c_get_retirement_pdate%notfound then
12769          fa_debug_pkg.add(l_calling_fn, 'Error Fetching cursor',
12770                           'c_get_retirement_pdate');
12771          raise calc_failed;
12772       end if;
12773       CLOSE c_get_retirement_pdate;
12774    end if;
12775 
12776    -- Get the Period corresponding to l_override_limit_date
12777    if not GetPeriodInfo(to_number(to_char(l_override_limit_date, 'J')),
12778                         p_asset_hdr_rec.book_type_code,
12779                         p_mrc_sob_type_code,
12780                         p_asset_hdr_rec.set_of_books_id,
12781                         l_override_limit_period_rec,
12782                         p_log_level_rec) then
12783          fa_debug_pkg.add(l_calling_fn, 'Error calling',
12784                           'GetPeriodInfo');
12785       raise calc_failed;
12786    end if;
12787 
12788    if (p_log_level_rec.statement_level) then
12789       fa_debug_pkg.add(l_calling_fn, 'Checking overlapped trxs',
12790                        p_asset_type_rec.asset_type||':'||p_asset_hdr_rec.asset_id , p_log_level_rec => p_log_level_rec);
12791    end if;
12792 
12793    /* Bug 6281311 moving this code to above
12794    OPEN c_get_deprn_period_date;
12795    FETCH c_get_deprn_period_date INTO l_calendar_period_start_date, l_entered_ytd, l_entered_reserve;
12796    CLOSE c_get_deprn_period_date;
12797 
12798    if (p_log_level_rec.statement_level) then
12799      fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 1.9 ==========','', p_log_level_rec => p_log_level_rec);
12800      fa_debug_pkg.add(l_calling_fn, '++ l_calendar_period_start_date', l_calendar_period_start_date, p_log_level_rec => p_log_level_rec);
12801      fa_debug_pkg.add(l_calling_fn, '++ l_entered_ytd', l_entered_ytd, p_log_level_rec => p_log_level_rec);
12802      fa_debug_pkg.add(l_calling_fn, '++ l_entered_reserve', l_entered_reserve, p_log_level_rec => p_log_level_rec);
12803    end if; */
12804 
12805 
12806    LOOP
12807 
12808        --bug 12344343 start make l_start_from_addition = 1, in case of asset added with zero reserve
12809        IF fa_cache_pkg.fazcdrd_record.use_eofy_reserve_flag = 'Y' AND
12810           l_period_rec.fiscal_year = l_add_fiscal_year AND
12811           l_trans_rec.transaction_type_code = 'ADJUSTMENT' AND
12812           l_entered_reserve = 0  THEN
12813              l_start_from_addition := 1;
12814        ELSE
12815             l_start_from_addition := 0;
12816        END IF;
12817        -- bug 12344343 END
12818 
12819       if (p_log_level_rec.statement_level) then
12820          fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 2.0 ==========','', p_log_level_rec => p_log_level_rec);
12821          fa_debug_pkg.add(l_calling_fn, '++ IN 1st LOOP: l_trans_rec.transaction_header_id', l_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
12822          fa_debug_pkg.add(l_calling_fn, '++ l_trans_rec.transaction_date_entered', to_char(l_trans_rec.transaction_date_entered, 'MM/DD/YYYY'));
12823          fa_debug_pkg.add(l_calling_fn, '++ Period of Addition: l_calendar_period_start_date', to_char(l_calendar_period_start_date,'MM/DD/YYYY'));
12824          fa_debug_pkg.add(l_calling_fn, 'l_process_addition', l_process_addition, p_log_level_rec => p_log_level_rec);
12825          fa_debug_pkg.add(l_calling_fn, 'l_start_from_addition', l_start_from_addition, p_log_level_rec => p_log_level_rec);
12826       end if;
12827 
12828       -- fyi: l_calendar_period_start_date: The start date of the period in which the asset was added: Period of addition
12832          -- There is a case that we don't want to recalculate from addition if entered trx
12829       -- bug 12344343 modified IF condition to check l_start_from_addition also
12830       if (l_calendar_period_start_date > l_trans_rec.transaction_date_entered) OR (l_start_from_addition = 1) then
12831          --
12833          -- is back dated to first period of fy and user provided ytd and deprn reserve at the time
12834          -- of addition
12835          --
12836          if l_process_addition = 0 then
12837             --
12838             -- If entered trx is back dated to period 1 then look for a trx prevent recalculation
12839             -- from the period 1 such as other trx back dated beyond the period.
12840             -- if there is no such trx exists then we can recalculate from the period 1 using
12841             -- user entered ytd and deprn reserve at the time of addition. so skip c_check_overlap
12842             --
12843 --toru
12844             OPEN c_check_overlap2;
12845             FETCH c_check_overlap2 BULK COLLECT INTO t_co_thid,
12846                                                      t_co_date_effective,
12847                                                      t_co_trx_date,
12848                                                      t_co_trx_type_code;
12849 
12850             CLOSE c_check_overlap2;
12851 
12852             if (p_log_level_rec.statement_level) then
12853                fa_debug_pkg.add(l_calling_fn, 't_co_thid.count', t_co_thid.count, p_log_level_rec => p_log_level_rec);
12854             end if;
12855 
12856             l_start_from_first := FALSE;
12857 
12858             for i in 1..t_co_thid.count loop
12859                if (p_log_level_rec.statement_level) then
12860                   fa_debug_pkg.add(l_calling_fn, 't_co_trx_date', t_co_trx_date(i));
12861                end if;
12862 
12863                if (t_co_trx_date(i) < l_period_rec.calendar_period_open_date) then
12864                   if (p_log_level_rec.statement_level) then
12865                      fa_debug_pkg.add(l_calling_fn, 'l_start_from_first', 'TRUE', p_log_level_rec => p_log_level_rec);
12866                   end if;
12867                   l_start_from_first := TRUE;
12868                   EXIT;
12869                elsif (t_co_trx_date(i) < nvl(l_trans_rec.transaction_date_entered,
12870                                              nvl(p_trans_rec.amortization_start_date,
12871                                                  p_trans_rec.transaction_date_entered))) then
12872                   l_trans_rec.transaction_header_id := t_co_thid(i);
12873                   l_trans_rec.transaction_date_entered := t_co_trx_date(i);
12874                   l_trans_rec.who_info.creation_date := t_co_date_effective(i);
12875                   l_trans_rec.transaction_type_code := t_co_trx_type_code(i);
12876                end if;
12877             end loop;
12878 
12879             if (p_log_level_rec.statement_level) then
12880                fa_debug_pkg.add(l_calling_fn, 'End of for loop', 'end', p_log_level_rec => p_log_level_rec);
12881             end if;
12882 
12883          else
12884             l_start_from_first := TRUE;
12885          end if;
12886 
12887          if (l_start_from_first) then
12888             OPEN c_get_first_trx;
12889             FETCH c_get_first_trx INTO l_trans_rec.transaction_header_id,
12890                                        l_trans_rec.transaction_date_entered,
12891                                        l_trans_rec.who_info.creation_date,
12892                                        l_trans_rec.transaction_type_code;
12893             CLOSE c_get_first_trx;
12894 
12895             if (p_log_level_rec.statement_level) then
12896               fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 2.1 : FROM c_get_first_trx cursor ==========','', p_log_level_rec => p_log_level_rec);
12897               fa_debug_pkg.add(l_calling_fn, '++ TRX_DATE_ENTERED is prior to Period of Addition, EXIT AND GO TO ADDITION ','', p_log_level_rec => p_log_level_rec);
12898               fa_debug_pkg.add(l_calling_fn, '++ NEW FIRST TRX: l_trans_rec.transaction_header_id', l_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
12899               fa_debug_pkg.add(l_calling_fn, '++                l_trans_rec.transaction_date_entered', to_char(l_trans_rec.transaction_date_entered,'MM/DD/YYYY'));
12900               fa_debug_pkg.add(l_calling_fn, '++                l_trans_rec.who_info.creation_date', to_char(l_trans_rec.who_info.creation_date, 'MM/DD/YYYY HH24:MI:SS'));
12901             end if;
12902 
12903          end if; -- (l_start_from_first)
12904 
12905          EXIT;
12906 
12907       end if;
12908 
12909       OPEN c_check_overlap(l_trans_rec.transaction_date_entered,
12910                            l_trans_rec.transaction_header_id,
12911                            l_trans_rec.who_info.creation_date);
12912       FETCH c_check_overlap INTO g_temp_number,
12913                                  g_temp_date1,
12914                                  g_temp_date2,
12915                                  g_temp_char30;
12916 
12917 --tk_util.debug('transaction_header_id: '||to_char(g_temp_number));
12918 --tk_util.debug('creation_date: '||to_char(g_temp_date2, 'DD-MON-RR HH24:MI:SS'));
12919 --tk_util.debug('l_trans_rec.transaction_type_code: '||g_temp_char30);
12920 
12921       if (p_log_level_rec.statement_level) then
12922            fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 2.2 : IN c_check_overlap ==========','', p_log_level_rec => p_log_level_rec);
12923            fa_debug_pkg.add(l_calling_fn, '++ INPUT: l_trans_rec.transaction_header_id', l_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
12924            fa_debug_pkg.add(l_calling_fn, '++        l_trans_rec.transaction_date_entered', to_char(l_trans_rec.transaction_date_entered,'MM/DD/YYYY'));
12928            fa_debug_pkg.add(l_calling_fn, '++         g_temp_date2: Effective_Date', g_temp_date2, p_log_level_rec => p_log_level_rec);
12925            fa_debug_pkg.add(l_calling_fn, '++        l_trans_rec.who_info.creation_date', to_char(l_trans_rec.who_info.creation_date,'MM/DD/YYYY HH24:MI:SS'));
12926            fa_debug_pkg.add(l_calling_fn, '++ OUTPUT: g_temp_number: THID', g_temp_number, p_log_level_rec => p_log_level_rec);
12927            fa_debug_pkg.add(l_calling_fn, '++         g_temp_date1: Trx Date', g_temp_date1, p_log_level_rec => p_log_level_rec);
12929            fa_debug_pkg.add(l_calling_fn, '++         g_temp_char30: Trx Type Code', g_temp_char30, p_log_level_rec => p_log_level_rec);
12930       end if;
12931 
12932       -- Bug#4049799: Replaced this with the following: l_check_overlap_found := c_check_overlap%FOUND; */
12933       if c_check_overlap%NOTFOUND then
12934         l_check_overlap_found := FALSE;
12935       else
12936         l_check_overlap_found := TRUE;
12937       end if;
12938 
12939       CLOSE c_check_overlap;
12940 
12941       if (p_log_level_rec.statement_level) then
12942            fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.0 ==========','', p_log_level_rec => p_log_level_rec);
12943            if (l_check_overlap_found) then
12944              fa_debug_pkg.add(l_calling_fn, '++ l_check_overlap_found', 'TRUE', p_log_level_rec => p_log_level_rec);
12945            else
12946              fa_debug_pkg.add(l_calling_fn, '++ l_check_overlap_found', 'FALSE', p_log_level_rec => p_log_level_rec);
12947            end if;
12948       end if;
12949 
12950       if (l_check_overlap_found) then
12951 
12952          if (p_log_level_rec.statement_level) then
12953            fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.1 ==========','', p_log_level_rec => p_log_level_rec);
12954          end if;
12955 
12956          l_trans_rec.transaction_header_id := g_temp_number;
12957          l_trans_rec.transaction_date_entered := g_temp_date1;
12958          l_trans_rec.who_info.creation_date := g_temp_date2;
12959          l_trans_rec.transaction_type_code := g_temp_char30;
12960 
12961          --
12962          -- Bug3696765:
12963          -- Due to necessity of using user entered reserve occasionally (only if user backdated
12964          -- to 1st peirod of fiscal, this check is necessary and the return value will be
12965          -- used in check_overlap cursor and main cursor.
12966          --
12967          if (l_trans_rec.transaction_type_code not like '%ADDITION') then
12968             if not GetPeriodInfo(to_number(to_char(l_trans_rec.transaction_date_entered, 'J')),
12969                                  p_asset_hdr_rec.book_type_code,
12970                                  p_mrc_sob_type_code,
12971                                  p_asset_hdr_rec.set_of_books_id,
12972                                  l_period_rec,
12973                                  p_log_level_rec) then
12974                if (p_log_level_rec.statement_level) then
12975                   fa_debug_pkg.add(l_calling_fn, 'Error calling',
12976                                    'GetPeriodInfo', p_log_level_rec => p_log_level_rec);
12977                end if;
12978 
12979                raise calc_failed;
12980             end if;
12981 
12982             -- Bug 5443855 if l_period_rec.period_num = 1 then
12983             if (l_period_rec.fiscal_year = l_add_fiscal_year AND l_entered_reserve <> 0 )then
12984                l_process_addition := 0;
12985             else
12986                l_process_addition := 1;
12987             end if;
12988          end if;
12989 
12990          if (p_log_level_rec.statement_level) then
12991            fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.2 WHEN l_check_overlap FOUND ==========','', p_log_level_rec => p_log_level_rec);
12992            fa_debug_pkg.add(l_calling_fn, '++ l_process_addition', l_process_addition, p_log_level_rec => p_log_level_rec);
12993          end if;
12994 
12995       else
12996 
12997          if (p_log_level_rec.statement_level) then
12998            fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.2 WHEN l_check_overlap NOT FOUND  ==========','', p_log_level_rec => p_log_level_rec);
12999            fa_debug_pkg.add(l_calling_fn, '++ l_process_addition', l_process_addition, p_log_level_rec => p_log_level_rec);
13000          end if;
13001 
13002          --
13003          -- If the member asset is currently a member or will be a member
13004          -- do not call GetEofyReserve since it could require to go back
13005          -- to addition to recalcualte without letting user know which is not
13006          -- good especially if this asset has added with reserve which will be
13007          -- wiped out during recalculation.
13008          --
13009          if ((p_asset_fin_rec_old.group_asset_id is null and
13010               px_asset_fin_rec_new.group_asset_id is null)) or
13011               (l_trans_rec.transaction_type_code like '%RETIREMENT') then    -- ENERGY
13012 
13013             if (fa_cache_pkg.fazcdrd_record.use_eofy_reserve_flag = 'Y') then
13014 
13015                if (p_log_level_rec.statement_level) then
13016                  fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.2.1 ==========','', p_log_level_rec => p_log_level_rec);
13017                end if;
13018 
13019                if not GetEofyReserve(
13020                          p_trans_rec                => l_trans_rec,
13021                          p_trans_rec_cur            => p_trans_rec,
13022                          p_asset_hdr_rec            => p_asset_hdr_rec,
13023                          p_asset_type_rec           => p_asset_type_rec,
13024                          p_period_rec               => p_period_rec,
13025                          x_eofy_reserve             => l_eofy_reserve,
13029                          x_transaction_type_code    => l_eofy_trx_type_code,
13026                          x_transaction_header_id    => l_eofy_thid,
13027                          x_transaction_date_entered => l_eofy_trx_date_entered,
13028                          x_date_effective           => l_eofy_date_effective,
13030                          p_mrc_sob_type_code        => p_mrc_sob_type_code,
13031                          p_calling_fn               => l_calling_fn,
13032                     p_log_level_rec       => p_log_level_rec) then
13033                   if (p_log_level_rec.statement_level) then
13034                      fa_debug_pkg.add(l_calling_fn, 'Error calling',
13035                                       'GetEofyReserve', p_log_level_rec => p_log_level_rec);
13036                   end if;
13037 
13038                   raise calc_failed;
13039 
13040                end if;
13041                -- Bug 8537330: Save the transaction for which GetEofyReserve was called.
13042                l_get_eofy_thid := l_trans_rec.transaction_header_id;
13043             end if;
13044 
13045             if (p_log_level_rec.statement_level) then
13046                  fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.3 ==========','', p_log_level_rec => p_log_level_rec);
13047             end if;
13048 
13049 
13053               --the retirement transaction is ignored during recalculate
13050             if (nvl(fa_cache_pkg.fazcdrd_record.use_eofy_reserve_flag, 'N') = 'N') or
13051                (l_eofy_reserve is not null) then
13052               --adding the following code for bug no.4016503
13054               -- if it is reinstated by any following transaction.
13055 
13056                 if (l_trans_rec.transaction_type_code like '%RETIREMENT') then
13057 
13058                   l_retirement_id           := null;
13059                   l_cost_retired            := null;
13060                   l_cost_of_removal         := null;
13061                   l_proceeds_of_sales       := null;
13062                   l_reserve_retired         := null;
13063                   l_eofy_reserve_retired    := null;
13064                   l_reval_reserve_retired   := null;
13065                   l_unrevalued_cost_retired := null;
13066                   l_bonus_reserve_retired   := null;
13067                   l_impair_reserve_retired  := null;
13068                   l_recognize_gain_loss     := null;
13069 
13070                   if (p_log_level_rec.statement_level) then
13071                     fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.3.1 ==========','', p_log_level_rec => p_log_level_rec);
13072                   end if;
13073 
13074                   OPEN c_get_retirement(l_trans_rec.transaction_header_id);
13075                   FETCH c_get_retirement INTO l_retirement_id,
13076                                               l_cost_retired,
13077                                               l_cost_of_removal,
13078                                               l_proceeds_of_sales,
13079                                               l_reserve_retired,
13080                                               l_eofy_reserve_retired,
13081                                               l_reval_reserve_retired,
13082                                               l_unrevalued_cost_retired,
13083                                               l_bonus_reserve_retired,
13084                                               l_impair_reserve_retired,
13085                                               l_recognize_gain_loss;
13086 
13087                   if c_get_retirement%NOTFOUND then
13088                      if (p_log_level_rec.statement_level) then
13089                         fa_debug_pkg.add(l_calling_fn, 'Check Overlap', 'Search previous trx', p_log_level_rec => p_log_level_rec);
13090                      end if;
13091 
13092                      CLOSE c_get_retirement;
13093 
13094                      if (p_log_level_rec.statement_level) then
13095                       fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.3.2 ==========','', p_log_level_rec => p_log_level_rec);
13096                      end if;
13097 
13098                      -- Bug 13028310 no need to search for any other transaction in case of extended assets
13099                      -- because we do not want to process addition and any transaction before asset got extended
13100                      -- and after extension asset can not have anything other than retirement
13101 
13102                      IF px_asset_fin_rec_new.deprn_method_code = 'JP-STL-EXTND' then
13103                         if (p_log_level_rec.statement_level) then
13104                            fa_debug_pkg.add(l_calling_fn, '==========Exiting Loop for Extnd Assets==========','', p_log_level_rec => p_log_level_rec);
13105                         end if;
13106                         exit;
13107                      END IF;
13108 
13112                                              , l_trans_rec.transaction_date_entered
13109                      --find a trx before this retirement
13110                      OPEN c_get_prev_trx (l_trans_rec.transaction_header_id);
13111                      FETCH c_get_prev_trx INTO l_trans_rec.transaction_header_id
13113                                              , l_trans_rec.who_info.creation_date
13114                                              , l_trans_rec.transaction_type_code;
13115                      /*Added for bug 4168841*/
13116                      if c_get_prev_trx%NOTFOUND then
13117                         CLOSE c_get_prev_trx;
13118                         exit;
13119                      end if;
13120 
13121                      if (p_log_level_rec.statement_level) then
13122                       fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.3.2.1 ==========','', p_log_level_rec => p_log_level_rec);
13123                      end if;
13124 
13125                      CLOSE c_get_prev_trx;
13126                   else
13127                      -- This retirement has not reinstated yet so ok to proceed
13128                      CLOSE c_get_retirement;
13129 
13130                      if (p_log_level_rec.statement_level) then
13131                       fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.3.3 ==========','', p_log_level_rec => p_log_level_rec);
13132                      end if;
13133 
13134                      exit;
13135                   end if; -- c_get_retirement%NOTFOUND
13136                else
13137                   if (p_log_level_rec.statement_level) then
13138                       fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.3.9 ==========','', p_log_level_rec => p_log_level_rec);
13139                   end if;
13140 
13141                   exit;
13142                end if; -- l_trans_rec.transaction_type_code like '%RETIREMENT
13143 
13144             else
13145                if (p_log_level_rec.statement_level) then
13146                       fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.4.1 ==========','', p_log_level_rec => p_log_level_rec);
13147                end if;
13148 
13149                l_trans_rec.transaction_header_id := l_eofy_thid;
13150                l_trans_rec.transaction_date_entered := l_eofy_trx_date_entered;
13151                l_trans_rec.who_info.creation_date := l_eofy_date_effective;
13152             end if;
13153          else
13154             if (p_log_level_rec.statement_level) then
13155                 fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 3.5 ==========','', p_log_level_rec => p_log_level_rec);
13156             end if;
13157 
13158             -- Will find eofy_reserve from old books row.
13159             exit;
13160          end if; -- (p_asset_fin_rec_old.group_asset_id is null and
13161       end if;
13162 
13163       l_period_rec := null;
13164 
13165       --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
13166       -- temporary code to prevent infinite loop
13167       --
13168       l_temp_cnt := l_temp_cnt + 1;
13169 
13170       if (l_temp_cnt > 200) then
13171 
13172          if (p_log_level_rec.statement_level) then
13173             fa_debug_pkg.add(l_calling_fn, '++ Checking overlapped trxs with ',
13174                              to_char(l_trans_rec.transaction_date_entered, 'MM/DD/YYYY HH24:MI:SS'));
13175          end if;
13176 
13177          raise calc_failed;
13178       end if;
13179       --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
13180       --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
13181 
13182    END LOOP;
13183 
13184 
13185    --Bug4622110
13186    if l_trans_rec.transaction_type_code like '%RETIREMENT' then
13187       l_retirement_flag := 'Y';
13191       fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 4 : BEFORE LOOP FOR CURSOR c_get_ths_adj ==========','', p_log_level_rec => p_log_level_rec);
13188    end if;
13189 
13190    if (p_log_level_rec.statement_level) then
13192       fa_debug_pkg.add(l_calling_fn, '++ FETCHING TRANSACTIONS AFTER - TRX_DATE : EFF_DATE',
13193                        to_char(l_trans_rec.transaction_date_entered, 'MM/DD/YYYY') || ' : '||
13194                        to_char(l_trans_rec.who_info.creation_date, 'MM/DD/YYYY HH24:MI:SS'));
13195       fa_debug_pkg.add(l_calling_fn, '++ l_trans_rec.transaction_date_entered', to_char(l_trans_rec.transaction_date_entered,'MM/DD/YYYY HH24:MI:SS'));
13196       fa_debug_pkg.add(l_calling_fn, '++ l_trans_rec.who_info.creation_date', to_char(l_trans_rec.who_info.creation_date,'MM/DD/YYYY HH24:MI:SS'));
13197       fa_debug_pkg.add(l_calling_fn, '++ l_trans_rec.transaction_header_id', l_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
13198       fa_debug_pkg.add(l_calling_fn, '++ l_retirement_flag', l_retirement_flag, p_log_level_rec => p_log_level_rec);
13199     end if;
13200 
13201     -- Bug 8674466 : Propagating fix of 7699305
13202     -- Check if there are any future prorate retirements in the period
13203     -- in which the current retirement is done .. then start from Addition,
13204     -- instead of the retirement transaction
13205 
13206     -- Bug 8250142 Added the reinstatement and l_process_addition condition
13207     if ((l_retirement_flag = 'Y') and
13208         (p_trans_rec.transaction_type_code <> 'REINSTATEMENT') and
13209         (l_process_addition = 1)) then
13210 
13211        -- Get the prorate period counter for the retirement
13212        select fy.fiscal_year * ct.NUMBER_PER_FISCAL_YEAR + cp.PERIOD_NUM
13213        into l_ret_prorate_pc
13214        from fa_calendar_periods cp,
13215             fa_book_controls bc,
13216             fa_fiscal_year fy,
13217             fa_calendar_types ct,
13218             fa_retirements ret,
13219             fa_conventions con
13220        WHERE ret.book_type_code = p_asset_hdr_rec.book_type_code
13221        and   ret.asset_id = p_asset_hdr_rec.asset_id
13222        and   ret.transaction_header_id_in = l_trans_rec.transaction_header_id
13223        and   ret.RETIREMENT_PRORATE_CONVENTION = con.PRORATE_CONVENTION_CODE
13224        and   ret.date_retired between con.start_date and con.end_date
13225        and   bc.book_type_code = p_asset_hdr_rec.book_type_code
13226        and   bc.deprn_calendar = ct.calendar_type
13227        and   bc.fiscal_year_name = fy.fiscal_year_name
13228        and   ct.fiscal_year_name = bc.fiscal_year_name
13229        and   ct.calendar_type = cp.calendar_type
13230        and   cp.start_date between fy.start_date and fy.end_date
13231        and   con.prorate_date between cp.start_date and cp.end_date;
13232 
13233        if (p_log_level_rec.statement_level) then
13234           fa_debug_pkg.add(l_calling_fn, '========== Recalc Bug 7699305:1 After l_ret_prorate_pc ==========','');
13235           fa_debug_pkg.add(l_calling_fn, '++ l_ret_prorate_pc', l_ret_prorate_pc);
13236        end if;
13237 
13238        SELECT count(th.transaction_header_id)
13239        INTO  l_future_ret_count
13240        FROM  fa_deprn_periods dp,
13241              fa_transaction_headers th,
13242              fa_retirements ret,
13243              fa_conventions con
13244        WHERE th.book_type_code = p_asset_hdr_rec.book_type_code
13245        and   th.asset_id = p_asset_hdr_rec.asset_id
13246        and   th.transaction_type_code like '%RETIREMENT'
13247        and   th.date_effective between dp.period_open_date and dp.period_close_Date
13248        and   dp.period_counter = l_ret_prorate_pc - 1
13249        and   dp.book_type_code = th.book_type_code
13250        and   th.transaction_header_id = ret.transaction_header_id_in
13251        and   ret.RETIREMENT_PRORATE_CONVENTION = con.PRORATE_CONVENTION_CODE
13252        and   ret.date_retired between con.start_date and con.end_date
13253        and   con.prorate_date > dp.calendar_period_close_date;
13254 
13255        if l_future_ret_count > 0 then
13256           -- fetch addition
13257           SELECT th.transaction_date_entered,
13258                  th.date_effective,
13259                  th.transaction_header_id,
13260                  'N'
13261           INTO  l_trans_rec.transaction_date_entered,
13262                 l_trans_rec.who_info.creation_date,
13263                 l_trans_rec.transaction_header_id,
13264                 l_retirement_flag
13265           FROM  fa_transaction_headers th
13266           WHERE th.book_type_code = p_asset_hdr_rec.book_type_code
13267           and   th.asset_id = p_asset_hdr_rec.asset_id
13268           and   th.transaction_type_code = 'ADDITION';
13269 
13270           if (p_log_level_rec.statement_level) then
13271              fa_debug_pkg.add(l_calling_fn, '========== Recalc Bug 7699305: BEFORE LOOP FOR CURSOR c_get_ths_adj ==========','');
13272              fa_debug_pkg.add(l_calling_fn, '++ l_trans_rec.transaction_date_entered', to_char(l_trans_rec.transaction_date_entered,'MM/DD/YYYY HH24:MI:SS'));
13273              fa_debug_pkg.add(l_calling_fn, '++ l_trans_rec.who_info.creation_date', to_char(l_trans_rec.who_info.creation_date,'MM/DD/YYYY HH24:MI:SS'));
13274              fa_debug_pkg.add(l_calling_fn, '++ l_trans_rec.transaction_header_id', l_trans_rec.transaction_header_id);
13275              fa_debug_pkg.add(l_calling_fn, '++ l_retirement_flag', l_retirement_flag);
13276           end if;
13277 
13278        end if;
13279     end if;
13280    --Bug 8674466 :  End of fix
13281 
13282    -- Bug 8537330: If the driving transaction for c_get_ths_adj
13283    -- is not the transaction for which GetEofyReserve was called .. then
13284    -- make l_eofy_reserve as 0
13285    if (l_get_eofy_thid is not null and
13286        l_get_eofy_thid <> l_trans_rec.transaction_header_id) then
13290    OPEN c_get_ths_adj(l_trans_rec.transaction_date_entered,
13287       l_eofy_reserve := 0;
13288    end if;
13289 
13291                       l_trans_rec.who_info.creation_date,
13292                       l_trans_rec.transaction_header_id,
13293                       l_retirement_flag); --Bug4622110
13294 
13295    LOOP -- Main loop for all transactions
13296 
13297 
13298       FETCH c_get_ths_adj BULK COLLECT INTO t_transaction_header_id,
13299                                             t_transaction_type_code,
13300                                             t_transaction_date_entered,
13301                                             t_date_effective,
13302                                             t_transaction_name,
13303                                             t_source_transaction_header_id,
13304                                             t_mass_reference_id,
13305                                             t_transaction_subtype,
13306                                             t_transaction_key,
13307                                             t_amortization_start_date,
13308                                             t_calling_interface,
13309                                             t_mass_transaction_id,
13310                                             t_deprn_override_flag,
13311                                             t_member_transaction_header_id,
13312                                             t_trx_reference_id,
13313                                             t_invoice_transaction_id,
13314                                             t_which_select
13315                                             LIMIT l_limit;
13316 
13317 
13318       if (p_log_level_rec.statement_level) then
13319          fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 4.1 IN Fetch c_get_ths_adj  ==========','', p_log_level_rec => p_log_level_rec);
13320          fa_debug_pkg.add(l_calling_fn, 'Number of rows fetched',
13321                           t_transaction_header_id.COUNT, p_log_level_rec => p_log_level_rec);
13322       end if;
13323 
13324       -- Store total row count
13325       l_row_count := c_get_ths_adj%ROWCOUNT;
13326 
13327       EXIT WHEN t_transaction_header_id.COUNT = 0;
13328      /*
13329        Bug 8398064: from t_transaction_header_id we populate
13330        t_transaction_period_ctr to identify overlapping transactions in the same period.
13331 
13332        Also, if we need to account for expense if there has been an amortization
13333        in the past, so we need l_amort_adjusted_flag to be
13334        set to TRUE if there has been an amortization or revaluation.
13335        If no amort adjustments, then we use mvmt in ytd to create backout
13336         expense for overlapping retirements otherwise, we use current approach
13337        of expensing the mvmt in the reserve for creating expense.
13338     */
13339      l_amort_adjusted_flag := FALSE;
13340      l_default_dbr_event_type := 'EXPENSED_ADJ';
13341      if p_trans_rec.amortization_start_date is not null then
13342         l_default_dbr_event_type := 'AMORT_ADJ';
13343      end if;
13344 
13345      for loopct in 1..t_transaction_header_id.COUNT loop
13346 
13347         declare
13348            l_temp_date date := null;
13349         begin
13350              l_temp_date := nvl(nvl(t_amortization_start_date(loopct), t_transaction_date_entered(loopct)),sysdate);
13351              t_transaction_period_ctr(loopct) := get_dcal_pc ( p_asset_hdr_rec.book_type_code, l_temp_date , p_log_level_rec);
13352         end;
13353 
13354         if t_transaction_type_code(loopct) in ( G_TRX_TYPE_REV )
13355         or  t_amortization_start_date(loopct) is not null
13356         then
13357             l_amort_adjusted_flag := TRUE;
13358             if l_default_dbr_event_type <>  'AMORT_ADJ' then
13359                l_default_dbr_event_type := 'AMORT_ADJ';
13360             end if;
13361         end if;
13362 
13363      end loop;
13364      -- Bug 8398064
13365 
13366       FOR i IN 1..t_transaction_header_id.COUNT LOOP -- for every 100 transactions
13367          if (t_transaction_type_code(i) = 'TAX') then
13368               -- bug 9003531. check if retirement trx is overlapping with
13369               -- TAX reserve transaction. If they are overlapped raise exception
13370             begin
13371               Select 1 into l_check_tax_overlap
13372               from fa_transaction_headers hdr,
13373                    fa_transaction_headers tax
13374               where hdr.transaction_header_id  < t_transaction_header_id(i) --Transaction header id for TAX transaction
13375               and hdr.transaction_date_entered <= t_transaction_date_entered(i) --Transaction date for TAX transaction
13376               and hdr.transaction_type_code like '%RETIREMENT'
13377               and hdr.book_type_code        = tax.book_type_code
13378               and hdr.asset_id              =  tax.asset_id
13379               and tax.transaction_header_id = t_transaction_header_id(i);
13380             exception when no_data_found then
13381               l_check_tax_overlap := 0;
13382             end ;
13383             if ( l_check_tax_overlap = 1) then
13384                 raise invalid_trx_to_overlap;
13385             end if;
13386          end if;
13387 
13388          l_dbr_event_type := l_default_dbr_event_type;
13389          l_impair_reserve := 0;
13390 
13391 
13392          if (p_log_level_rec.statement_level) then
13393            fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 4.1.1 IN For-Loop of c_get_ths_adj ==========','', p_log_level_rec => p_log_level_rec);
13394            fa_debug_pkg.add(l_calling_fn, '++ IN c_get_ths_adj: t_which_select('||to_char(i)||')',t_which_select(i));
13395            fa_debug_pkg.add(l_calling_fn, '++    t_transaction_header_id('||to_char(i)||')',t_transaction_header_id(i));
13396            fa_debug_pkg.add(l_calling_fn, '++    t_transaction_type_code('||to_char(i)||')',t_transaction_type_code(i));
13400            fa_debug_pkg.add(l_calling_fn, '++    t_transaction_subtype('||to_char(i)||')',t_transaction_subtype(i));
13397            fa_debug_pkg.add(l_calling_fn, '++    t_transaction_date_entered('||to_char(i)||')',to_char(t_transaction_date_entered(i),'MM/DD/YYYY'));
13398            fa_debug_pkg.add(l_calling_fn, '++    t_amortization_start_date('||to_char(i)||')',to_char(t_amortization_start_date(i),'MM/DD/YYYY'));
13399            fa_debug_pkg.add(l_calling_fn, '++    t_date_effective('||to_char(i)||')',to_char(t_date_effective(i),'MM/DD/YYYY HH24:MI:SS'));
13401            fa_debug_pkg.add(l_calling_fn, '++    l_dbr_event_type',l_dbr_event_type, p_log_level_rec => p_log_level_rec);
13402          end if;
13403 
13404 
13405          if (p_log_level_rec.statement_level) then
13406            fa_debug_pkg.add(l_calling_fn, '++ BEFORE SETTING', '...', p_log_level_rec => p_log_level_rec);
13407            fa_debug_pkg.add(l_calling_fn, '++    l_adj_processed', l_adj_processed, p_log_level_rec => p_log_level_rec);
13408            fa_debug_pkg.add(l_calling_fn, '++    l_process_this_trx', l_process_this_trx, p_log_level_rec => p_log_level_rec);
13409            fa_debug_pkg.add(l_calling_fn, '++    l_add_processed', l_add_processed, p_log_level_rec => p_log_level_rec);
13410          end if;
13411 
13412          --
13413          -- don't want to process addition after any trx.
13414          --
13415          if (not(l_adj_processed)) and
13416             (t_transaction_type_code(i) not in ('ADDITION', 'ADDITION/VOID', 'CIP ADIITION', 'CIP ADDITION/VOID')) then
13417             l_adj_processed := TRUE;
13418          elsif (l_adj_processed) and
13419                (t_transaction_type_code(i) like '%ADDITION%') then
13420             l_process_this_trx := FALSE;
13421          end if;
13422 
13423          --
13424          -- don't want to process addition/void after addition
13425          --
13426          if (not(l_add_processed)) and
13427             (t_transaction_type_code(i) = 'ADDITION') then
13428             l_add_processed := TRUE;
13429          elsif (l_add_processed) and
13430                (p_trans_rec.transaction_type_code <> 'ADDITION/VOID') and
13431                (t_transaction_type_code(i) in ('ADDITION/VOID', 'CIP ADDITION/VOID')) then
13432             l_process_this_trx := FALSE;
13433          end if;
13434 
13435          l_is_this_void := FALSE;
13436 
13437          if (not(l_adj_processed)) and
13438             (not(l_add_processed)) then
13439             l_is_this_void := TRUE;
13440          end if;
13441 
13442 
13443          if (p_log_level_rec.statement_level) then
13444            fa_debug_pkg.add(l_calling_fn, '++ AFTER SETTING', '...', p_log_level_rec => p_log_level_rec);
13445            fa_debug_pkg.add(l_calling_fn, '++    l_adj_processed', l_adj_processed, p_log_level_rec => p_log_level_rec);
13446            fa_debug_pkg.add(l_calling_fn, '++    l_process_this_trx', l_process_this_trx, p_log_level_rec => p_log_level_rec);
13447            fa_debug_pkg.add(l_calling_fn, '++    l_add_processed', l_add_processed, p_log_level_rec => p_log_level_rec);
13448            fa_debug_pkg.add(l_calling_fn, '++    l_is_this_void', l_is_this_void, p_log_level_rec => p_log_level_rec);
13449          end if;
13450 
13451 
13452          l_asset_fin_rec_old := l_asset_fin_rec_new;
13453 
13454          l_trans_rec := null;
13455          l_next_period_rec := null;
13456          l_member_asset_id := null;
13457          l_member_trx_key := null;
13458 
13459          l_trans_rec.transaction_header_id := t_transaction_header_id(i);
13460          l_trans_rec.transaction_type_code := t_transaction_type_code(i);
13461          l_trans_rec.transaction_date_entered := t_transaction_date_entered(i);
13462          l_trans_rec.who_info.creation_date := t_date_effective(i);
13463          l_trans_rec.transaction_name := t_transaction_name(i);
13464          l_trans_rec.source_transaction_header_id := t_source_transaction_header_id(i);
13465          l_trans_rec.mass_reference_id := t_mass_reference_id(i);
13466          l_trans_rec.transaction_subtype := t_transaction_subtype(i);
13467          l_trans_rec.transaction_key := t_transaction_key(i);
13468          l_trans_rec.amortization_start_date := t_amortization_start_date(i);
13469          l_trans_rec.calling_interface := t_calling_interface(i);
13470          l_trans_rec.mass_transaction_id := t_mass_transaction_id(i);
13471          l_trans_rec.deprn_override_flag := t_deprn_override_flag(i);
13472          l_trans_rec.member_transaction_header_id := t_member_transaction_header_id(i);
13473          l_trans_rec.trx_reference_id := t_trx_reference_id(i);
13474          l_invoice_transaction_id := t_invoice_transaction_id(i);
13475 
13476 --tk_util.DumpTrxRec(l_trans_rec, to_char(i));
13477 
13478          if (i=1) or
13479             (l_trans_rec.transaction_date_entered > l_period_rec.calendar_period_close_date) then
13480 
13481             -- Bug6190904: Need to determine correct date to find out from which period catch-up
13482             --             needs to be calculated.  This is true even for the adjustment.
13483             if (i=1) then
13484 
13485                OPEN c_get_prorate_date(px_asset_fin_rec_new.date_placed_in_service
13486                                      , px_asset_fin_rec_new.prorate_convention_code);
13487                FETCH c_get_prorate_date INTO l_prorate_date, l_start_date, l_end_date;
13488                CLOSE c_get_prorate_date;
13489 
13490             end if;
13491 
13492             if (nvl(l_trans_rec.amortization_start_date,l_trans_rec.transaction_date_entered) > l_end_date) then
13493                l_prorate_date := nvl(l_trans_rec.amortization_start_date,l_trans_rec.transaction_date_entered);
13494             end if;
13495             -- End of Bug6190904
13496 
13497             FOR k IN 2..t_transaction_header_id.COUNT
13498             LOOP
13499                if t_transaction_date_entered(k) < nvl(l_trans_rec.amortization_start_date,l_trans_rec.transaction_date_entered) then
13503             END LOOP;
13500                   l_prorate_date := l_trans_rec.transaction_date_entered;
13501                   exit;
13502                end if;
13504 
13505 
13506             -- Bug6190904: use date determined by above logic instead of
13507             --             transaction_date_entered
13508             if not GetPeriodInfo(to_number(to_char(l_prorate_date, 'J')),
13509                                  p_asset_hdr_rec.book_type_code,
13510                                  p_mrc_sob_type_code,
13511                                  p_asset_hdr_rec.set_of_books_id,
13512                                  l_period_rec,
13513                                  p_log_level_rec) then
13514                if (p_log_level_rec.statement_level) then
13515                   fa_debug_pkg.add(l_calling_fn, 'Error calling',
13516                                    'GetPeriodInfo', p_log_level_rec => p_log_level_rec);
13517                end if;
13518 
13519                raise calc_failed;
13520             end if;
13521 
13522          end if;
13523 
13524 --tk_util.DumpPerRec(l_period_rec, to_char(i));
13525 
13526          --
13527          -- Special processes for first transaction only
13528          --
13529          if (i = 1) and (l_row_count <= l_limit) then
13530 
13531             -- Find least transaction header id
13532             FOR j IN 1..t_transaction_header_id.COUNT LOOP
13533 
13534                if (p_log_level_rec.statement_level) then
13535                   fa_debug_pkg.add(l_calling_fn, 'This is first trx', l_incoming_thid, p_log_level_rec => p_log_level_rec);
13536                   fa_debug_pkg.add(l_calling_fn, 't_transaction_header_id(j)', t_transaction_header_id(j));
13537                   fa_debug_pkg.add(l_calling_fn, 't_transaction_type_code(j)', t_transaction_type_code(j));
13538                end if;
13539 
13540                --Bug6933891
13541                -- This is for void trx to be pocessed if that is dated before addition trx.
13542                if (t_transaction_type_code(i) = 'ADDITION') and
13543                   (not l_add_void_exist) then   --Bug6933891 necessary
13544                   l_add_exist      := TRUE;
13545                elsif (t_transaction_type_code(j) = 'ADDITION') and
13546                   (not l_add_void_exist) then   --Bug6933891
13547                   l_add_exist      := TRUE;
13548                elsif (t_transaction_type_code(j) = 'ADDITION/VOID') then
13549                   l_add_void_exist := TRUE;
13550                end if;
13551 
13552                if (p_log_level_rec.statement_level) then
13553                   fa_debug_pkg.add(l_calling_fn, 'l_add_void_exist', l_add_void_exist, p_log_level_rec => p_log_level_rec);
13554                   fa_debug_pkg.add(l_calling_fn, 'l_add_exist', l_add_exist, p_log_level_rec => p_log_level_rec);
13555                end if;
13556 
13557 
13558                if (nvl(l_least_thid, l_incoming_thid) <> t_transaction_header_id(j)) and
13559                   (nvl(l_least_thid, l_incoming_thid) > t_transaction_header_id(j)) and
13560                   (((p_asset_type_rec.asset_type = G_ASSET_TYPE_GROUP) and
13561                     (t_transaction_header_id(j) is not null)) or
13562                    (p_asset_type_rec.asset_type <> G_ASSET_TYPE_GROUP)) then
13563 
13564                   --
13565                   -- Cannot process addition after adjustment???  not sure this will work
13566                   -- Also, do not process addition void after addition
13567                   --
13568                   -- Bug4490414: Commenting out part of the following if condition
13569                   -- 2nd part of if (after or) does not have to check the 1st
13570                   -- trx type code. Commenting out "t_transaction_type_code(i)  = 'ADDITION' and"
13571                   -- from 2nd part of if below.
13572                   -- 12919991/10014689 - Added last condition to avoid value in l_least_thid when
13573                   -- we are processing addition/void row too.
13574                   if (t_transaction_type_code(i) <> 'ADDITION' and
13575                       t_transaction_type_code(j) = 'ADDITION' ) or
13576                      (t_transaction_type_code(j) like '%ADDITION/VOID' ) or
13577                      (t_transaction_type_code(i) like '%ADDITION/VOID' ) then
13578                      null;
13579                   else
13580                      l_least_thid := t_transaction_header_id(j);
13581                   end if;
13582                end if;
13583 
13584             END LOOP;
13585 
13586             if (p_log_level_rec.statement_level) then
13587                fa_debug_pkg.add(l_calling_fn, 'Least transaction header id',
13588                                 l_least_thid, p_log_level_rec => p_log_level_rec);
13589             end if;
13590 
13591 
13592             l_temp_period_counter := l_period_rec.period_counter;
13593             l_period_rec.period_counter := l_period_rec.period_counter -1;
13594 
13595             if not GetDeprnRec (
13596                        p_trans_rec             => l_trans_rec,
13597                        p_asset_hdr_rec         => p_asset_hdr_rec,
13598                        p_period_rec            => l_period_rec,
13599                        p_incoming_trx_type_code => p_trans_rec.transaction_type_code,
13600                        x_asset_deprn_rec       => l_asset_deprn_rec,
13601                        p_mrc_sob_type_code     => p_mrc_sob_type_code,
13602                        p_unplanned_exp          => l_unplanned_exp,
13603                     p_log_level_rec       => p_log_level_rec) then
13604 
13605                if (p_log_level_rec.statement_level) then
13606                   fa_debug_pkg.add(l_calling_fn, 'Error calling',
13607                                    'GetDeprnRec', p_log_level_rec => p_log_level_rec);
13608                end if;
13609 
13610                raise calc_failed;
13614 
13611             end if;
13612 
13613             l_period_rec.period_counter := l_temp_period_counter;
13615 --tk_util.DumpDeprnRec(l_asset_deprn_rec, 'GD');
13616 
13617             l_dpr_in.asset_num := p_asset_desc_rec.asset_number;
13618             l_dpr_in.calendar_type := fa_cache_pkg.fazcbc_record.deprn_calendar;
13619             l_dpr_in.book := p_asset_hdr_rec.book_type_code;
13620             l_dpr_in.asset_id := p_asset_hdr_rec.asset_id;
13621 
13622             --
13623             -- Need to reset ytd amounts for first period of the fiscal year
13624             --
13625             if (l_period_rec.period_num = 1) then
13626                l_asset_deprn_rec.ytd_deprn := l_asset_deprn_rec.deprn_amount;
13627                l_asset_deprn_rec.bonus_ytd_deprn := l_asset_deprn_rec.bonus_deprn_amount;
13628                l_asset_deprn_rec.ytd_impairment := l_asset_deprn_rec.impairment_amount;
13629             end if;
13630          end if; -- End of Special processes for first transaction
13631 
13632          if (p_log_level_rec.statement_level) then
13633             fa_debug_pkg.add(l_calling_fn, 'l_add_void_exist', l_add_void_exist, p_log_level_rec => p_log_level_rec);
13634             fa_debug_pkg.add(l_calling_fn, 'l_add_exist', l_add_exist, p_log_level_rec => p_log_level_rec);
13635             fa_debug_pkg.add(l_calling_fn, 'l_process_this_trx', l_process_this_trx, p_log_level_rec => p_log_level_rec);
13636          end if;
13637 
13638          --Bug6933891
13639          -- This is for void trx to be pocessed if that is dated before addition trx.
13640          -- Setting void trx as not void in this loop so that the trx will be processed.
13641          if (l_add_void_exist) and (not(l_add_exist)) and
13642             (t_transaction_type_code(i) = 'ADDITION/VOID') then
13643             l_process_this_trx := TRUE;
13644             l_is_this_void     := FALSE;
13645 
13646             if (p_log_level_rec.statement_level) then
13647                fa_debug_pkg.add(l_calling_fn, 'Process this trx even if this is void trx', t_transaction_type_code(i));
13648                fa_debug_pkg.add(l_calling_fn, 'l_is_this_void', l_is_this_void, p_log_level_rec => p_log_level_rec);
13649                fa_debug_pkg.add(l_calling_fn, 'l_process_this_trx', l_process_this_trx, p_log_level_rec => p_log_level_rec);
13650             end if;
13651          end if;
13652 
13653          if (l_asset_fin_rec_old.recoverable_cost is null) then
13654             -- This means this is the first time coming through in this main loop
13655 
13656             if (not FA_CALC_DEPRN_BASIS1_PKG.GET_EOFY_EOP (
13657                     p_asset_id              => p_asset_hdr_rec.asset_id,
13658                     p_book_type_code        => p_asset_hdr_rec.book_type_code,
13659                     p_fiscal_year           => l_period_rec.fiscal_year,
13660                     p_asset_type            => p_asset_type_rec.asset_type,
13661                     p_period_num            => l_period_rec.period_num,
13662                     p_mrc_sob_type_code     => p_mrc_sob_type_code,
13663                     p_set_of_books_id       => p_asset_hdr_rec.set_of_books_id,
13664                     x_eofy_recoverable_cost => l_eofy_rec_cost,
13665                     x_eofy_salvage_value    => l_eofy_sal_val,
13666                     x_eop_recoverable_cost  => l_eop_rec_cost,
13667                     x_eop_salvage_value     => l_eop_sal_val, p_log_level_rec => p_log_level_rec)) then
13668                if (p_log_level_rec.statement_level) then
13669                   fa_debug_pkg.add(l_calling_fn, 'Error calling',
13670                                    'FA_CALC_DEPRN_BASIS1_PKG.GET_EOFY_EOP', p_log_level_rec => p_log_level_rec);
13671                end if;
13672 
13673                raise calc_failed;
13674 
13675             end if;
13676 
13677             if (l_eofy_rec_cost is null) then
13678                l_eofy_rec_cost := 0;
13679                l_eofy_sal_val := 0;
13680             end if;
13681 
13682             l_eofy_fy := l_period_rec.fiscal_year;
13683 
13684             if (l_eop_rec_cost is null) then
13685                l_eop_rec_cost := 0;
13686                l_eop_sal_val := 0;
13687             end if;
13688 
13689          elsif (l_eofy_fy < l_period_rec.fiscal_year) then
13690             -- set new end of fiscal year new recoverable cost, salvage
13691             -- value and previous fiscal year.
13692 
13693             l_eofy_rec_cost := l_asset_fin_rec_old.recoverable_cost;
13694             l_eofy_sal_val := l_asset_fin_rec_old.salvage_value;
13695             l_eofy_fy := l_period_rec.fiscal_year;
13696 
13697          end if;
13698 
13699          --Bug 13620748 start
13700          if p_asset_hdr_rec.period_of_addition = 'Y' and
13701            (p_asset_deprn_rec_adj.deprn_reserve <> 0 OR p_asset_deprn_rec_adj.ytd_deprn <> 0) and
13702             G_release <> 11 then
13703             l_amort_res_adj_poa := TRUE ;
13704             if (p_log_level_rec.statement_level) then
13705                fa_debug_pkg.add(l_calling_fn, 'User has done an amortized reserve adj', 'TRUE', p_log_level_rec => p_log_level_rec);
13706             end if;
13707          end if;
13708          -- Bug 13620748 end
13709 
13710          if (p_log_level_rec.statement_level) then
13711             fa_debug_pkg.add(l_calling_fn, 'l_eofy_fy', l_eofy_fy, p_log_level_rec => p_log_level_rec);
13712             fa_debug_pkg.add(l_calling_fn, 'l_eofy_rec_cost', l_eofy_rec_cost, p_log_level_rec => p_log_level_rec);
13713             fa_debug_pkg.add(l_calling_fn, 'l_eofy_sal_val', l_eofy_sal_val, p_log_level_rec => p_log_level_rec);
13714             fa_debug_pkg.add(l_calling_fn, 'l_eop_rec_cost', l_eop_rec_cost, p_log_level_rec => p_log_level_rec);
13715             fa_debug_pkg.add(l_calling_fn, 'l_eop_sal_val', l_eop_sal_val, p_log_level_rec => p_log_level_rec);
13716          end if;
13717 
13721                fa_debug_pkg.add(l_calling_fn, 'Entered Transaction', 'TRUE', p_log_level_rec => p_log_level_rec);
13718          if (l_trans_rec.transaction_header_id = l_incoming_thid) then
13719 
13720             if (p_log_level_rec.statement_level) then
13722             end if;
13723 
13724         --Bug 13620748
13725         -- we will avoid this only if user has done reserve adj in POA
13726         -- this should not restricted for Addition transaction
13727         if NOT (l_amort_res_adj_poa and p_trans_rec.transaction_type_code = 'ADJUSTMENT') then
13728 
13729                 l_asset_deprn_rec.deprn_reserve := l_asset_deprn_rec.deprn_reserve +
13730                                                    nvl(p_asset_deprn_rec_adj.deprn_reserve, 0);
13731                 l_asset_deprn_rec.reval_deprn_reserve :=
13732                                l_asset_deprn_rec.reval_deprn_reserve +
13733                                nvl(p_asset_deprn_rec_adj.reval_deprn_reserve, 0);
13734                 l_asset_deprn_rec.bonus_deprn_reserve :=
13735                                l_asset_deprn_rec.bonus_deprn_reserve +
13736                                nvl(p_asset_deprn_rec_adj.bonus_deprn_reserve, 0);
13737                 l_asset_deprn_rec.impairment_reserve :=
13738                                l_asset_deprn_rec.impairment_reserve +
13739                                nvl(p_asset_deprn_rec_adj.impairment_reserve, 0);
13740 
13741                 -- Bug 9231768 : Populate ytd_deprn also.
13742                 l_asset_deprn_rec.ytd_deprn := l_asset_deprn_rec.ytd_deprn +
13743                                                   nvl(p_asset_deprn_rec_adj.ytd_deprn, 0);
13744             END IF;
13745 
13746            l_use_fin_rec_adj     := TRUE;
13747            l_use_new_deprn_rule  := TRUE;
13748 
13749             --+++++++ Setting this flag to resume depreciation calculation +++++
13750             if (l_calc_deprn_flag) then
13751                l_calc_deprn_flag := FALSE;
13752             end if;
13753          else
13754             if (p_log_level_rec.statement_level) then
13755                fa_debug_pkg.add(l_calling_fn, 'Entered Transaction', 'FALSE', p_log_level_rec => p_log_level_rec);
13756             end if;
13757 
13758             l_use_fin_rec_adj := FALSE;
13759          end if;
13760 
13761          if l_trans_rec.transaction_type_code in (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET)  then
13762 
13763             l_reserve_retired := null;
13764 
13765             if (p_mrc_sob_type_code = 'R') then
13766 
13767                OPEN c_get_mc_retirement(nvl(l_trans_rec.member_transaction_header_id,
13768                                             l_trans_rec.transaction_header_id));
13769                FETCH c_get_mc_retirement INTO l_retirement_id,
13770                                               l_cost_retired,
13771                                               l_cost_of_removal,
13772                                               l_proceeds_of_sales,
13773                                               l_reserve_retired,
13774                                               l_eofy_reserve_retired,
13775                                               l_reval_reserve_retired,
13776                                               l_unrevalued_cost_retired,
13777                                               l_bonus_reserve_retired,
13778                                               l_impair_reserve_retired,
13779                                               l_recognize_gain_loss;
13780 
13781                if c_get_mc_retirement%NOTFOUND then
13782                   if (p_log_level_rec.statement_level) then
13783                      fa_debug_pkg.add(l_calling_fn, 'Process this transaction', 'FALSE', p_log_level_rec => p_log_level_rec);
13784                   end if;
13785 
13786                   l_process_this_trx := FALSE;
13787                else
13788                   if (l_reserve_retired = 0) then
13789                      OPEN c_get_mc_rsv_retired (nvl(l_trans_rec.member_transaction_header_id,
13790                                                     l_trans_rec.transaction_header_id));
13791                      FETCH c_get_mc_rsv_retired INTO l_reserve_retired;
13792                      CLOSE c_get_mc_rsv_retired;
13793                   end if;
13794 
13795                   if (p_log_level_rec.statement_level) then
13796                      fa_debug_pkg.add(l_calling_fn, 'Process this '||
13797                                       l_trans_rec.transaction_type_code, 'TRUE', p_log_level_rec => p_log_level_rec);
13798                   end if;
13799                end if; -- c_get_mc_retirement%NOTFOUND
13800 
13801                CLOSE c_get_mc_retirement;
13802             else
13803 --tk_util.debug('thid: '||to_char(nvl(l_trans_rec.member_transaction_header_id, l_trans_rec.transaction_header_id)));
13804                OPEN c_get_retirement(nvl(l_trans_rec.member_transaction_header_id,
13805                                          l_trans_rec.transaction_header_id));
13806                FETCH c_get_retirement INTO l_retirement_id,
13807                                            l_cost_retired,
13808                                            l_cost_of_removal,
13809                                            l_proceeds_of_sales,
13810                                            l_reserve_retired,
13811                                            l_eofy_reserve_retired,
13812                                            l_reval_reserve_retired,
13813                                            l_unrevalued_cost_retired,
13814                                            l_bonus_reserve_retired,
13815                                            l_impair_reserve_retired,
13816                                            l_recognize_gain_loss;
13817 
13818                if c_get_retirement%NOTFOUND then
13819                   if (p_log_level_rec.statement_level) then
13823                   l_process_this_trx := FALSE;
13820                      fa_debug_pkg.add(l_calling_fn, 'Process this transaction', 'FALSE', p_log_level_rec => p_log_level_rec);
13821                   end if;
13822 
13824                else
13825 
13826                   if (l_reserve_retired = 0) then
13827                      OPEN c_get_rsv_retired (nvl(l_trans_rec.member_transaction_header_id,
13828                                                  l_trans_rec.transaction_header_id));
13829                      FETCH c_get_rsv_retired INTO l_reserve_retired;
13830                      CLOSE c_get_rsv_retired;
13831                   end if;
13832 
13833                   if (p_log_level_rec.statement_level) then
13834                      fa_debug_pkg.add(l_calling_fn, 'Process this '||
13835                                       l_trans_rec.transaction_type_code, 'TRUE', p_log_level_rec => p_log_level_rec);
13836                   end if;
13837 
13838                end if; -- c_get_retirement%NOTFOUND
13839 
13840                CLOSE c_get_retirement;
13841 
13842             end if; -- (p_mrc_sob_type_code = 'R')
13843 
13844             if (p_log_level_rec.statement_level) then
13845                fa_debug_pkg.add(l_calling_fn, 'Retirement Id',
13846                                 l_retirement_id, p_log_level_rec => p_log_level_rec);
13847                fa_debug_pkg.add(l_calling_fn, 'Retired Reserve',
13848                                 l_reserve_retired, p_log_level_rec => p_log_level_rec);
13849             end if;
13850 
13851          elsif l_trans_rec.transaction_type_code = G_TRX_TYPE_REV then
13852 
13853             if (p_mrc_sob_type_code = 'R') then
13854                OPEN c_get_mc_reval_rsv(nvl(l_trans_rec.member_transaction_header_id,
13855                                            l_trans_rec.transaction_header_id));
13856                FETCH c_get_mc_reval_rsv INTO l_reval_reserve;
13857                CLOSE c_get_mc_reval_rsv;
13858 
13859                OPEN c_get_mc_bonus_reval_rsv(nvl(l_trans_rec.member_transaction_header_id,
13860                                            l_trans_rec.transaction_header_id));
13861                FETCH c_get_mc_bonus_reval_rsv INTO l_reval_bonus_reserve;
13862                CLOSE c_get_mc_bonus_reval_rsv;
13863                OPEN c_get_mc_impair_rsv(nvl(l_trans_rec.member_transaction_header_id,
13864                                            l_trans_rec.transaction_header_id),
13865                                         G_TRX_TYPE_REV);
13866                FETCH c_get_mc_impair_rsv INTO l_reval_impair_reserve;
13867                CLOSE c_get_mc_impair_rsv;
13868 
13869             else
13870                OPEN c_get_reval_rsv(nvl(l_trans_rec.member_transaction_header_id,
13871                                         l_trans_rec.transaction_header_id));
13872                FETCH c_get_reval_rsv INTO l_reval_reserve;
13873                CLOSE c_get_reval_rsv;
13874 
13875                OPEN c_get_bonus_reval_rsv(nvl(l_trans_rec.member_transaction_header_id,
13876                                               l_trans_rec.transaction_header_id));
13877                FETCH c_get_bonus_reval_rsv INTO l_reval_bonus_reserve;
13878                CLOSE c_get_bonus_reval_rsv;
13879 
13880                OPEN c_get_impair_rsv(nvl(l_trans_rec.member_transaction_header_id,
13881                                               l_trans_rec.transaction_header_id),
13882                                      G_TRX_TYPE_REV);
13883                FETCH c_get_impair_rsv INTO l_reval_impair_reserve;
13884                CLOSE c_get_impair_rsv;
13885 
13886             end if;
13887 
13888 
13889             if (p_log_level_rec.statement_level) then
13890                fa_debug_pkg.add(l_calling_fn, 'Revaluation Reserve',
13891                                 l_reval_reserve, p_log_level_rec => p_log_level_rec);
13892                fa_debug_pkg.add(l_calling_fn, 'Revaluation Reserve',
13893                                 l_reval_bonus_reserve, p_log_level_rec => p_log_level_rec);
13894             end if;
13895 
13896          elsif (l_trans_rec.transaction_key = 'IM') then
13897             if (p_mrc_sob_type_code = 'R') then
13898                OPEN c_get_mc_impair_rsv(nvl(l_trans_rec.member_transaction_header_id,
13899                                            l_trans_rec.transaction_header_id),
13900                                         G_TRX_TYPE_ADJ);
13901                FETCH c_get_mc_impair_rsv INTO l_impair_reserve;
13902                CLOSE c_get_mc_impair_rsv;
13903             else
13904                OPEN c_get_impair_rsv(nvl(l_trans_rec.member_transaction_header_id,
13905                                               l_trans_rec.transaction_header_id),
13906                                      G_TRX_TYPE_ADJ);
13907                FETCH c_get_impair_rsv INTO l_impair_reserve;
13908                CLOSE c_get_impair_rsv;
13909             end if;
13910 
13911             if (p_log_level_rec.statement_level) then
13912                fa_debug_pkg.add(l_calling_fn, 'Impairment Reserve', l_impair_reserve, p_log_level_rec => p_log_level_rec);
13913             end if;
13914 
13915          end if; -- l_trans_rec.transaction_type_code in (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET)
13916 
13917          --
13918          -- Construct new fa_books row.
13919          -- For first transaction, also get initial fa_books row.
13920          if (l_process_this_trx) or
13921             ((i = 1) and (l_row_count < l_limit)) then
13922 
13923             if (p_log_level_rec.statement_level) then
13924                fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 6.0 : Calling GetFinRec ==========','', p_log_level_rec => p_log_level_rec);
13928             -- Bug # 8356539 added below code to pass deprn limit type to
13925                fa_debug_pkg.add(l_calling_fn, '++ l_trans_rec.transaction_header_id', l_trans_rec.transaction_header_id, p_log_level_rec => p_log_level_rec);
13926             end if;
13927 
13929             -- adjustment api when called from backend
13930             if l_asset_fin_rec_adj.deprn_limit_type is null and p_trans_rec.calling_interface <> 'FAXASSET'
13931                and l_use_fin_rec_adj then
13932                l_asset_fin_rec_adj.deprn_limit_type := p_asset_fin_rec_old.deprn_limit_type;
13933             end if;
13934 
13935             if not GetFinRec(p_trans_rec                  => l_trans_rec,
13936                              p_asset_hdr_rec              => p_asset_hdr_rec,
13937                              p_asset_type_rec             => p_asset_type_rec,
13938                              px_asset_fin_rec             => l_asset_fin_rec_old,
13939                              p_asset_fin_rec_adj          => l_asset_fin_rec_adj,
13940                              p_asset_fin_rec_new          => px_asset_fin_rec_new,
13941                              x_asset_fin_rec_new          => l_asset_fin_rec_new,
13942                              p_init_transaction_header_id => l_least_thid,
13943                              p_use_fin_rec_adj            => l_use_fin_rec_adj,
13944                              p_use_new_deprn_rule         => l_use_new_deprn_rule,
13945                              p_process_this_trx           => (l_process_this_trx or l_is_this_void),
13946                              x_dpis_change                => l_dpis_change,
13947                              p_mrc_sob_type_code          => p_mrc_sob_type_code,
13948                              p_log_level_rec              => p_log_level_rec) then
13949                if (p_log_level_rec.statement_level) then
13950                   fa_debug_pkg.add(l_calling_fn, 'Error calling',
13951                                    'GetFinRec', p_log_level_rec => p_log_level_rec);
13952                end if;
13953 
13954                raise calc_failed;
13955             end if;
13956 
13957             --
13958             -- This portion of codes are relocated from before GetFinRec because it sometime
13959             -- requires to find old cost(new cost - cost retired).
13960             --
13961             if (l_trans_rec.transaction_type_code in (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET)) then
13962                if (l_reserve_retired <> 0) then
13963                   l_reserve_retired := l_asset_deprn_rec.deprn_reserve *
13964                                        (l_cost_retired /nvl(l_asset_fin_rec_old.cost,l_asset_fin_rec_new.cost - l_cost_retired));
13965                   if not FA_UTILS_PKG.faxrnd(l_reserve_retired, p_asset_hdr_rec.book_type_code, p_asset_hdr_rec.set_of_books_id,p_log_level_rec => p_log_level_rec) then
13966                      fa_debug_pkg.add(l_calling_fn, 'calling FA_UTILS_PKG.faxrnd', 'FAILED', p_log_level_rec => p_log_level_rec);
13967                      raise calc_failed;
13968                   end if;
13969                end if;
13970 
13971                if (p_log_level_rec.statement_level) then
13972                   fa_debug_pkg.add(l_calling_fn, 'Recalculated Reserve Retired',
13973                                    l_reserve_retired, p_log_level_rec => p_log_level_rec);
13974                end if;
13975 
13976                -- Populate local retire rec for depreciable basis to bahave like retirement
13977                l_asset_retire_rec.cost_retired := l_cost_retired;
13978                l_asset_retire_rec.proceeds_of_sale := l_proceeds_of_sales;
13979                l_asset_retire_rec.cost_of_removal := l_cost_of_removal;
13980                l_asset_retire_rec.detail_info.nbv_retired := l_cost_retired - l_reserve_retired;
13981 
13982                l_dbr_event_type := 'RETIREMENT';
13983 
13984             end if; -- l_trans_rec.transaction_type_code in (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET)
13985 
13986             if (l_dpis_change) then
13987                if (p_mrc_sob_type_code = 'R') then
13988                   OPEN c_get_mc_brow;
13989                   FETCH c_get_mc_brow INTO l_brow_ytd_deprn, l_brow_deprn_reserve;
13990                   CLOSE c_get_mc_brow;
13991                else
13992                   OPEN c_get_brow;
13993                   FETCH c_get_brow INTO l_brow_ytd_deprn, l_brow_deprn_reserve;
13994                   CLOSE c_get_brow;
13995                end if;
13996 --tk_util.debug('check: '||to_char(l_brow_ytd_deprn)||':'||to_char(l_brow_deprn_reserve));
13997 --
13998 -- need to initialize l_asset_deprn_rec with B row.
13999                if (p_log_level_rec.statement_level) then
14000                  fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 6.5 : Resetting l_asset_deprn_rec to ZERO due to DPIS Change ==========','', p_log_level_rec => p_log_level_rec);
14001                end if;
14002 
14003                l_asset_deprn_rec.deprn_amount             := 0;
14004                l_asset_deprn_rec.ytd_deprn                := 0; --bug 8540563 nvl(l_brow_ytd_deprn, 0);
14005                l_asset_deprn_rec.deprn_reserve            := 0; --bug 8540563 nvl(l_brow_deprn_reserve, 0);
14006                l_asset_deprn_rec.prior_fy_expense         := 0;
14007                l_asset_deprn_rec.bonus_deprn_amount       := 0;
14008                l_asset_deprn_rec.bonus_ytd_deprn          := 0;
14009                l_asset_deprn_rec.bonus_deprn_reserve      := 0;
14010                l_asset_deprn_rec.prior_fy_bonus_expense   := 0;
14011                l_asset_deprn_rec.impairment_amount        := 0;
14012                l_asset_deprn_rec.ytd_impairment           := 0;
14013                l_asset_deprn_rec.impairment_reserve           := 0;
14014                l_asset_deprn_rec.reval_amortization       := 0;
14015                l_asset_deprn_rec.reval_amortization_basis := 0;
14016                l_asset_deprn_rec.reval_deprn_expense      := 0;
14017                l_asset_deprn_rec.reval_ytd_deprn          := 0;
14018                l_asset_deprn_rec.reval_deprn_reserve      := 0;
14022 
14019                l_asset_deprn_rec.production               := 0;
14020                l_asset_deprn_rec.ytd_production           := 0;
14021                l_asset_deprn_rec.ltd_production           := 0;
14023                if (l_trans_rec.transaction_subtype = 'EXPENSED') then
14024                   --Bug#4049799 l_dbr_event_type := 'EXPENSED_ADJ';
14025                   l_dbr_event_type := l_default_dbr_event_type;
14026                end if;
14027 
14028                if (p_log_level_rec.statement_level) then
14029                   fa_debug_pkg.add(l_calling_fn, 'DPIS Change', l_dbr_event_type, p_log_level_rec => p_log_level_rec);
14030                   fa_debug_pkg.add(l_calling_fn, 'new ytd_deprn', l_asset_deprn_rec.ytd_deprn, p_log_level_rec => p_log_level_rec);
14031                   fa_debug_pkg.add(l_calling_fn, 'new deprn_reserve', l_asset_deprn_rec.deprn_reserve, p_log_level_rec => p_log_level_rec);
14032                end if;
14033             end if;
14034 --tk_util.debug('1 rec_cost: '||to_char(px_asset_fin_rec_new.recoverable_cost));
14035 
14036             if l_trans_rec.transaction_type_code not in (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET)  then
14037                if ((i = 1) and not(l_start_from_first) and (l_process_addition = 0)) then
14041                elsif ((i = 1) and (l_row_count < l_limit)) then
14038 --tk_util.debug('toru: '||to_char(l_asset_deprn_rec.deprn_reserve));
14039                   l_asset_fin_rec_new.eofy_reserve := l_asset_deprn_rec.deprn_reserve;
14040 
14042                   --
14043                   -- if this is member or will be a member, l_eofy_reserve may not be populated
14044                   -- in GetFinRec so use the one returned by GetEofyReserve function.
14045                   --
14046                   if ((p_asset_fin_rec_old.group_asset_id is null and
14047                       px_asset_fin_rec_new.group_asset_id is null) or
14048                        (nvl(px_asset_fin_rec_new.member_rollup_flag,'N')='Y') --bug#15897249
14049                       )
14050                       then
14051                      l_asset_fin_rec_new.eofy_reserve := l_eofy_reserve;
14052                   end if;
14053                else
14054                   l_asset_fin_rec_new.eofy_reserve := l_asset_fin_rec_old.eofy_reserve;
14055                end if;
14056             end if;
14057 
14058          else
14059             l_asset_fin_rec_new := l_asset_fin_rec_old;
14060          end if; -- (l_process_this_trx)
14061 
14062          l_impair_adj_cost := l_asset_fin_rec_new.adjusted_cost;
14063          l_impair_raf := l_asset_fin_rec_new.rate_adjustment_factor;
14064          l_impair_formula_factor := l_asset_fin_rec_new.formula_factor;
14065 
14066          if (l_impair_reserve <> 0) then
14067             l_asset_deprn_rec.impairment_reserve := l_asset_deprn_rec.impairment_reserve + l_impair_reserve;
14068          end if;
14069 
14070          /*Bug# 8520733 - if negative cost adjustmemnt is done to make cost to zero there will be entry to reverse
14071                           impairment expense take it and substract from current impairment reserve to ensure
14072                           calculation of correct adj_cost for a overlapped adjustment later. */
14073          if l_trans_rec.transaction_type_code = G_TRX_TYPE_ADJ and nvl(l_trans_rec.transaction_key,'XX') <> 'IM' then
14074             if (p_mrc_sob_type_code = 'R') then
14075                OPEN c_get_mc_impair_exp(nvl(l_trans_rec.member_transaction_header_id,
14076                                            l_trans_rec.transaction_header_id),
14077                                         'DEPRECIATION');
14078                FETCH c_get_mc_impair_exp INTO l_impair_reserve;
14079                CLOSE c_get_mc_impair_exp;
14080             else
14081                OPEN c_get_impair_exp(nvl(l_trans_rec.member_transaction_header_id,
14082                                               l_trans_rec.transaction_header_id),
14083                                      'DEPRECIATION');
14084                FETCH c_get_impair_exp INTO l_impair_reserve;
14085                CLOSE c_get_impair_exp;
14086             end if;
14087             l_asset_deprn_rec.impairment_reserve := l_asset_deprn_rec.impairment_reserve - l_impair_reserve;
14088             if (p_log_level_rec.statement_level) then
14089                fa_debug_pkg.add(l_calling_fn, 'Impairment reserve reversed', l_impair_reserve, p_log_level_rec => p_log_level_rec);
14090             end if;
14091          end if;
14092 --tk_util.debug('1eofy rsv: '||to_char(l_asset_fin_rec_new.eofy_reserve));
14093 
14094          l_dpr_in.adj_cost := l_asset_fin_rec_new.recoverable_cost;
14095          l_dpr_in.rec_cost := l_asset_fin_rec_new.recoverable_cost;
14096          l_dpr_in.reval_amo_basis := l_asset_fin_rec_new.reval_amortization_basis; /*Bug 12420615 - Reverted 7256190 */
14097          l_dpr_in.deprn_rsv := 0;
14098          l_dpr_in.reval_rsv := l_asset_deprn_rec.reval_deprn_reserve;
14099          l_dpr_in.adj_rate := l_asset_fin_rec_new.adjusted_rate;
14103          l_dpr_in.ltd_prod := 0;
14100          l_dpr_in.rate_adj_factor := l_asset_fin_rec_new.rate_adjustment_factor;
14101          l_dpr_in.capacity := l_asset_fin_rec_new.production_capacity;
14102          l_dpr_in.adj_capacity := l_asset_fin_rec_new.adjusted_capacity;
14104 
14105          l_dpr_in.ceil_name := l_asset_fin_rec_new.ceiling_name;
14106          l_dpr_in.bonus_rule := l_asset_fin_rec_new.bonus_rule;
14107          l_dpr_in.method_code := l_asset_fin_rec_new.deprn_method_code;
14108          l_dpr_in.jdate_in_service :=
14109                       to_number(to_char(l_asset_fin_rec_new.date_placed_in_service, 'J'));
14110          l_dpr_in.prorate_jdate := to_number(to_char(l_asset_fin_rec_new.prorate_date, 'J'));
14111          l_dpr_in.deprn_start_jdate :=
14112                       to_number(to_char(l_asset_fin_rec_new.deprn_start_date, 'J'));
14113          l_dpr_in.jdate_retired := 0; -- don't know this is correct or not
14114          l_dpr_in.ret_prorate_jdate := 0; -- don't know this is correct or not
14115          l_dpr_in.life := l_asset_fin_rec_new.life_in_months;
14116 
14117          l_dpr_in.rsv_known_flag := TRUE;
14118          l_dpr_in.salvage_value := l_asset_fin_rec_new.salvage_value;
14119          l_dpr_in.pc_life_end := l_asset_fin_rec_new.period_counter_life_complete;
14120          l_dpr_in.adj_rec_cost := l_asset_fin_rec_new.adjusted_recoverable_cost;
14121          l_dpr_in.prior_fy_exp := 0;                             -- This needs to be 0 for this faxcde call
14122 
14123          -- Bug:5291878
14124          l_dpr_in.deprn_rounding_flag := null;
14125 
14126          l_dpr_in.deprn_override_flag := p_trans_rec.deprn_override_flag;
14127          l_dpr_in.used_by_adjustment := TRUE;
14128          l_dpr_in.ytd_deprn := 0;                                -- This needs to be 0 for this faxcde call
14129          l_dpr_in.short_fiscal_year_flag := l_asset_fin_rec_new.short_fiscal_year_flag;
14130          l_dpr_in.conversion_date := l_asset_fin_rec_new.conversion_date;
14131          l_dpr_in.prorate_date := l_asset_fin_rec_new.prorate_date;
14132          l_dpr_in.orig_deprn_start_date := l_asset_fin_rec_new.orig_deprn_start_date;
14133          l_dpr_in.old_adj_cost := l_asset_fin_rec_new.old_adjusted_cost;
14134          l_dpr_in.formula_factor := nvl(l_asset_fin_rec_new.formula_factor,
14135                                         l_asset_fin_rec_old.formula_factor);
14136          l_dpr_in.bonus_deprn_exp := l_asset_deprn_rec.bonus_deprn_amount;
14137          l_dpr_in.bonus_ytd_deprn := l_asset_deprn_rec.bonus_ytd_deprn;
14138          l_dpr_in.bonus_deprn_rsv := l_asset_deprn_rec.bonus_deprn_reserve;
14139          l_dpr_in.prior_fy_bonus_exp := l_asset_deprn_rec.prior_fy_bonus_expense;
14140          l_dpr_in.impairment_exp := l_asset_deprn_rec.impairment_amount;
14141          l_dpr_in.ytd_impairment := l_asset_deprn_rec.ytd_impairment;
14142          l_dpr_in.impairment_rsv := l_asset_deprn_rec.impairment_reserve;
14143 
14144          l_dpr_in.tracking_method := l_asset_fin_rec_new.tracking_method;
14145          l_dpr_in.allocate_to_fully_ret_flag := l_asset_fin_rec_new.allocate_to_fully_ret_flag;
14146          l_dpr_in.allocate_to_fully_rsv_flag := l_asset_fin_rec_new.allocate_to_fully_rsv_flag;
14147          l_dpr_in.excess_allocation_option := l_asset_fin_rec_new.excess_allocation_option;
14151          l_dpr_in.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
14148          l_dpr_in.depreciation_option := l_asset_fin_rec_new.depreciation_option;
14149          l_dpr_in.member_rollup_flag := l_asset_fin_rec_new.member_rollup_flag;
14150          l_dpr_in.mrc_sob_type_code := p_mrc_sob_type_code;
14152          l_dpr_in.super_group_id := l_asset_fin_rec_new.super_group_id;
14153          l_dpr_in.over_depreciate_option := l_asset_fin_rec_new.over_depreciate_option;
14154 
14155          --
14156          -- Not for what-if yet
14157          --
14158          l_running_mode := fa_std_types.FA_DPR_NORMAL;
14159 --tk_util.debug('2 rec_cost: '||to_char(px_asset_fin_rec_new.recoverable_cost));
14160 
14161          if (l_process_this_trx) then
14162 
14163             if (not fa_cache_pkg.fazccmt(
14164                        l_asset_fin_rec_new.deprn_method_code,
14165                        l_asset_fin_rec_new.life_in_months, p_log_level_rec => p_log_level_rec)) then
14166                if (p_log_level_rec.statement_level) then
14167                   fa_debug_pkg.add(l_calling_fn, 'Error calling',
14168                                    'fa_cache_pkg.fazccmt', p_log_level_rec => p_log_level_rec);
14169                end if;
14170 
14171                raise calc_failed;
14172             end if;
14173 
14174             l_energy_member := FALSE;
14175 --tk_util.debug('fa_cache_pkg.fazcdbr_record.rule_name: ' ||fa_cache_pkg.fazcdbr_record.rule_name);
14176 --tk_util.debug('p_asset_fin_rec_old.tracking_method: '||p_asset_fin_rec_old.tracking_method);
14177             --
14178             -- Set l_energy_member to skip periodic depreciation call in this functioin
14179             --
14183             end if;
14180             if (fa_cache_pkg.fazcdbr_record.rule_name = 'ENERGY PERIOD END BALANCE') and
14181                (p_asset_fin_rec_old.tracking_method = 'ALLOCATE') then
14182                l_energy_member := TRUE;
14184 
14185             if (p_log_level_rec.statement_level) then
14186                fa_debug_pkg.add(l_calling_fn, 'Japan Tax: l_trans_rec.transaction_key',
14187                                       l_trans_rec.transaction_key, p_log_level_rec => p_log_level_rec);
14188             end if;
14189 
14190             -- skip faxcde call for raf
14191             -- Bug4778244 Added the NVL to avoid condition not(null or false) which will
14192             -- always return NULL in the place of FALSE, which is incorrect
14193             if (not(((nvl(fa_cache_pkg.fazccmt_record.rate_source_rule, ' ') = fa_std_types.FAD_RSR_FLAT) and
14194                      (nvl(fa_cache_pkg.fazccmt_record.deprn_basis_rule, ' ') = fa_std_types.FAD_DBR_COST) and
14195                      (nvl(fa_cache_pkg.fazcdbr_record.rule_name, ' ')  in ('PERIOD END BALANCE',
14196 
14197                                                                 'PERIOD END AVERAGE',
14198                                                                 'USE RECOVERABLE COST',
14199                                                                 'BEGINNING PERIOD'))) or
14200                      ((nvl(fa_cache_pkg.fazcdbr_record.rule_name,' ') = 'ENERGY PERIOD END BALANCE') and
14201                       (nvl(p_asset_fin_rec_old.tracking_method,' ') = 'ALLOCATE')) or
14202                      (nvl(l_trans_rec.transaction_key,'X') = 'ES') -- Japan Tax Phase3
14203                    )) then
14204 
14205                if not fa_cache_pkg.fazccp(fa_cache_pkg.fazcbc_record.prorate_calendar,
14206                                           fa_cache_pkg.fazcbc_record.fiscal_year_name,
14207                                           l_dpr_in.prorate_jdate,
14208                                           g_temp_number,
14209                                           l_dpr_in.y_begin,
14210                                           g_temp_integer, p_log_level_rec => p_log_level_rec) then
14211                   if (p_log_level_rec.statement_level) then
14212                      fa_debug_pkg.add(l_calling_fn, 'Error calling',
14213                                       'fa_cache_pkg.fazccp', p_log_level_rec => p_log_level_rec);
14214                      fa_debug_pkg.add(l_calling_fn, 'fa_cache_pkg.fazcbc_record.prorate_calendar',
14215                                       fa_cache_pkg.fazcbc_record.prorate_calendar, p_log_level_rec => p_log_level_rec);
14216                      fa_debug_pkg.add(l_calling_fn, 'fa_cache_pkg.fazcbc_record.fiscal_year_name',
14217                                       fa_cache_pkg.fazcbc_record.fiscal_year_name, p_log_level_rec => p_log_level_rec);
14218 
14219                   end if;
14220 
14221                   raise calc_failed;
14222                end if;
14223 
14224                if not fa_cache_pkg.fazcct(fa_cache_pkg.fazcbc_record.deprn_calendar, p_log_level_rec => p_log_level_rec) then
14225                   raise calc_failed;
14226                end if;
14227 
14228                l_dpr_in.p_cl_begin := 1;
14229 
14230                if (l_period_rec.period_num = 1) then
14231                   l_dpr_in.y_end := l_period_rec.fiscal_year - 1;
14232                   l_dpr_in.p_cl_end := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
14233                else
14234                   l_dpr_in.y_end := l_period_rec.fiscal_year;
14235                   l_dpr_in.p_cl_end := l_period_rec.period_num - 1;
14236                end if;
14237 
14238                l_dpr_in.rate_adj_factor := 1;
14239                l_dpr_in.eofy_reserve := 0;
14240 
14241                -- manual override
14242                if fa_cache_pkg.fa_deprn_override_enabled then
14243 
14244                   l_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
14245                   l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
14246 
14247                   -- update override status only if satisfies condintion,
14248                   -- otherwise do not update status when calculating RAF
14249                   -- 1. formula; or
14250                   -- 2. (calc or table) and cost
14251 
14252                   l_dpr_in.update_override_status :=
14253                      ((l_rate_source_rule = fa_std_types.FAD_RSR_FORMULA)
14254                      OR (((l_rate_source_rule = fa_std_types.FAD_RSR_CALC)
14255                      OR (l_rate_source_rule = fa_std_types.FAD_RSR_TABLE))
14256                      AND (l_deprn_basis_rule = fa_std_types.FAD_DBR_COST)));
14257                end if;
14258 
14259                --+++++++ Call Tracking Function to populate Member in case ALLOCATE ++++++
14260                if nvl(l_dpr_in.tracking_method,'OTHER') = 'ALLOCATE' then
14261 /*
14262                   if not FA_TRACK_MEMBER_PVT.get_member_at_start(
14263                                       p_trans_rec => l_trans_rec,
14264                                       p_asset_hdr_rec => p_asset_hdr_rec,
14265                                       p_dpr_in => l_dpr_in,
14266                                       p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
14267                      if (p_log_level_rec.statement_level) then
14268                         fa_debug_pkg.add(l_calling_fn, 'Error calling',
14269                                          'FA_TRACK_MEMBER_PVT.get_member_at_start',  p_log_level_rec => p_log_level_rec);
14270                      end if;
14271 
14272                      raise calc_failed;
14273 
14274                   end if;
14275 */null;
14276                end if; -- nvl(l_dpr_in.tracking_method,'OTHER') = 'ALLOCATE'
14277 
14278               l_dpr_in.cost_frac := null;  -- Bug 5893429
14279 
14283                   fa_debug_pkg.add(l_calling_fn, ' Call ', 'FA_CDE_PKG.faxcde', p_log_level_rec => p_log_level_rec);
14280                if (p_log_level_rec.statement_level) then
14281                   fa_debug_pkg.add(l_calling_fn, '========== Recalc Before Calling faxcde 1 ==========','', p_log_level_rec => p_log_level_rec);
14282                   fa_debug_pkg.add(l_calling_fn, '====== ', '==============================', p_log_level_rec => p_log_level_rec);
14284                end if;
14285 
14286                --+++++++ Call Depreciation engine for rate adjustment factor +++++++
14287                if not FA_CDE_PKG.faxcde(l_dpr_in,
14288                                         l_dpr_arr,
14289                                         l_dpr_out,
14290                                         l_running_mode, p_log_level_rec => p_log_level_rec) then
14291                   if (p_log_level_rec.statement_level) then
14292                      fa_debug_pkg.add(l_calling_fn, 'Error calling',
14293                                       'FA_CDE_PKG.faxcde', p_log_level_rec => p_log_level_rec);
14294                   end if;
14295 
14296                   raise calc_failed;
14297                end if;
14298 
14299                if (p_log_level_rec.statement_level) then
14300                   fa_debug_pkg.add(l_calling_fn, '========== Recalc After Calling faxcde 1 ==========','', p_log_level_rec => p_log_level_rec);
14301                   fa_debug_pkg.add(l_calling_fn, 'l_dpr_out.new_deprn_rsv',
14302                                    l_dpr_out.new_deprn_rsv, p_log_level_rec => p_log_level_rec);
14303                   fa_debug_pkg.add(l_calling_fn, '====== ', '==============================', p_log_level_rec => p_log_level_rec);
14304                end if;
14305 
14306                -- manual override
14307                if fa_cache_pkg.fa_deprn_override_enabled then
14308                   if l_dpr_in.update_override_status then
14309                      p_trans_rec.deprn_override_flag := l_dpr_out.deprn_override_flag;
14310                   else
14311                      p_trans_rec.deprn_override_flag := fa_std_types.FA_NO_OVERRIDE;
14312                   end if;
14313                end if;
14314 
14315                l_asset_fin_rec_new.adjusted_cost := l_dpr_out.new_adj_cost;
14316                l_asset_fin_rec_new.reval_amortization_basis := l_dpr_out.new_reval_amo_basis;
14317                l_asset_deprn_rec_raf.deprn_reserve := l_dpr_out.new_deprn_rsv;
14318                l_asset_deprn_rec_raf.reval_deprn_reserve := l_dpr_out.new_reval_rsv;
14319                l_asset_fin_rec_new.adjusted_capacity := l_asset_fin_rec_new.production_capacity -
14320                                                         l_dpr_out.new_ltd_prod;
14321                l_asset_deprn_rec_raf.ltd_production := l_dpr_out.new_ltd_prod;
14322                l_asset_deprn_rec_raf.prior_fy_expense := l_dpr_out.new_prior_fy_exp;
14323                l_asset_deprn_rec_raf.bonus_deprn_amount := l_dpr_out.bonus_deprn_exp;
14324                l_asset_deprn_rec_raf.bonus_deprn_reserve := l_dpr_out.new_bonus_deprn_rsv;
14325                l_asset_deprn_rec_raf.prior_fy_bonus_expense := l_dpr_out.new_prior_fy_bonus_exp;
14326                l_asset_deprn_rec_raf.impairment_amount := l_dpr_out.impairment_exp;
14327                l_asset_deprn_rec_raf.impairment_reserve := l_dpr_out.new_impairment_rsv;
14328 
14329 
14330                -- Bug7610832
14331                -- Bug8208356. Calling transaction type should only be addition.
14332                -- Bug 6022155. If Calling transaction type is 'ADDITION' and user entered Accumlated Reserve,
14333                -- Then we need to consider Added Reserve but not eofy_reserve. i.e in period of addition we
14334                -- always give priority to added reserve than eofy_reserve. If there is not added reserve then
14335                -- only we take eofy_reserve. the if eofy_reserve <> 0 condition is added such that it is added
14336                -- In previous years and not in current year. Need to verify this is applicable for other rules
14337                -- also not only for USE FISCAL YEAR BEGINNING BASIS. This is coorect fix only because of fix
14338                -- 8208356, which makes sure that this is only addition.
14339                if l_dbr_event_type = 'AMORT_ADJ' and
14340                   fa_cache_pkg.fazccmt_record.deprn_basis_rule = 'NBV' and
14341                   fa_cache_pkg.fazccmt_record.rate_source_rule  = 'FLAT' and
14342                   p_source_transaction_type_code = 'ADDITION' then
14343                         if (p_mrc_sob_type_code = 'R') then
14344                             OPEN c_get_mc_brow;
14345                             FETCH c_get_mc_brow INTO l_brow_ytd_deprn, l_brow_deprn_reserve;
14346                             CLOSE c_get_mc_brow;
14347                         else
14348                             OPEN c_get_brow;
14349                             FETCH c_get_brow INTO l_brow_ytd_deprn, l_brow_deprn_reserve;
14350                             CLOSE c_get_brow;
14351                         end if;
14352                         IF (fa_cache_pkg.fazcdbr_record.rule_name = 'USE FISCAL YEAR BEGINNING BASIS' and
14353                             nvl(l_dpr_out.new_eofy_reserve,0) <> 0 and l_brow_deprn_reserve <> 0) THEN
14354                             l_asset_fin_rec_new.eofy_reserve := l_brow_deprn_reserve - l_brow_ytd_deprn;
14355                         ELSE
14356                             l_asset_fin_rec_new.eofy_reserve := l_dpr_out.new_eofy_reserve;
14357                         END IF;
14358                 end if;
14359 
14360                --++++++++ Tracking=ALLOCATE case ++++++++++++++
14361                if nvl(l_dpr_in.tracking_method,'OTHER') = 'ALLOCATE' then
14362 
14363                   fa_track_member_pvt.p_track_member_table.delete;
14364                   fa_track_member_pvt.p_track_mem_index_table.delete;
14365 
14366                   if (p_log_level_rec.statement_level) then
14367                      fa_debug_pkg.add(l_calling_fn, 'fa_track_member_pvt.p_track_member_table',
14368                                                     'deleted',  p_log_level_rec => p_log_level_rec);
14369                   end if;
14370                end if;
14371 
14372             else
14373                l_asset_fin_rec_new.adjusted_cost := l_asset_fin_rec_new.recoverable_cost;
14374             end if; ---- skip faxcde call for raf
14375 --tk_util.debug('2eofy rsv: '||to_char(l_asset_fin_rec_new.eofy_reserve));
14376 
14377             --++++ Eofy Reserve in case of reclass ++++
14378             -- Bug 13620748
14379             if l_trans_rec.transaction_type_code <> 'GROUP ADDITION' and NOT(l_amort_res_adj_poa) then
14380                l_asset_fin_rec_new.eofy_reserve := l_asset_fin_rec_new.eofy_reserve +
14381                                                    nvl(p_asset_fin_rec_adj.eofy_reserve,0);
14382             end if;
14383 
14384             if l_trans_rec.transaction_type_code in (G_TRX_TYPE_FUL_RET, G_TRX_TYPE_PAR_RET) then
14385                l_asset_fin_rec_new.eofy_reserve := l_asset_fin_rec_new.eofy_reserve -
14386                                                    l_eofy_reserve_retired;
14387 
14388                --++++ Skip followings because these values are already take care
14389                --++++ by using asset_deprn_rec_adj
14390                if (l_trans_rec.transaction_header_id <> p_trans_rec.transaction_header_id) then
14391                   l_asset_deprn_rec.deprn_reserve := l_asset_deprn_rec.deprn_reserve -
14392                                                      l_reserve_retired;
14393                   l_asset_deprn_rec.reval_deprn_reserve := l_asset_deprn_rec.reval_deprn_reserve -
14394                                                            l_reval_reserve_retired;
14395                   l_asset_deprn_rec.bonus_deprn_reserve := l_asset_deprn_rec.bonus_deprn_reserve -
14396                                                            l_bonus_reserve_retired;
14397                   l_asset_deprn_rec.impairment_reserve := l_asset_deprn_rec.impairment_reserve -
14398                                                            l_impair_reserve_retired;
14399 
14400                end if;
14401             elsif l_trans_rec.transaction_type_code = G_TRX_TYPE_REV then
14402                if (l_trans_rec.transaction_header_id <> p_trans_rec.transaction_header_id) then
14403                   /* Bug#7478702 In case of SORP when revaluation is done deprn_reserve is canceled against reval reserve
14404                      so when calculating adjusted cost deprn_reserve is zero */
14408                         so setting impairment_reserve to zero */
14405                   if fa_cache_pkg.fazcbc_record.sorp_enabled_flag = 'Y' then
14406                      l_asset_deprn_rec.deprn_reserve := 0;
14407                      /* For Cost based method adjusted_cost is same as recoverable cost at the time of revaluation
14409                      if fa_cache_pkg.fazccmt_record.deprn_basis_rule = 'COST' then
14410                         l_asset_deprn_rec.impairment_reserve := 0;
14411                      end if;
14412                   else
14413                      l_asset_deprn_rec.deprn_reserve := l_asset_deprn_rec.deprn_reserve +
14414                                                      nvl(l_reval_reserve, 0);
14415                      l_asset_deprn_rec.reval_deprn_reserve := l_asset_deprn_rec.reval_deprn_reserve +
14416                                                            nvl(l_reval_reserve, 0);
14417                      l_asset_deprn_rec.bonus_deprn_reserve := l_asset_deprn_rec.bonus_deprn_reserve +
14418                                                            nvl(l_reval_bonus_reserve, 0);
14419                      l_asset_deprn_rec.impairment_reserve := l_asset_deprn_rec.impairment_reserve +
14420                                                            nvl(l_reval_impair_reserve, 0);
14421                   end if;
14422                end if;
14423             end if;
14424 
14425 --tk_util.debug('3 rec_cost: '||to_char(px_asset_fin_rec_new.recoverable_cost));
14426 
14427             -- Get Unplanned amount
14428             if (l_trans_rec.transaction_key in ('UE', 'UA')) then
14429 
14430                if (not GetExpRsv(p_trans_rec         => l_trans_rec,
14431                                  p_asset_hdr_rec     => p_asset_hdr_rec,
14432                                  p_period_rec        => l_period_rec,
14433                                  p_mrc_sob_type_code => p_mrc_sob_type_code,
14434                                  x_exp_rsv_amount    => l_reserve_adj,
14435                     p_log_level_rec       => p_log_level_rec )) then
14436 
14437                   if (p_log_level_rec.statement_level) then
14438                      fa_debug_pkg.add(l_calling_fn, 'Error calling',
14439                                       'GetExpRsv', p_log_level_rec => p_log_level_rec);
14440                   end if;
14441 
14442                   raise calc_failed;
14443                end if;
14444 
14445                l_asset_deprn_rec.deprn_reserve := l_asset_deprn_rec.deprn_reserve + l_reserve_adj;
14446 
14447                if (l_trans_rec.transaction_key in ('UE', 'UA')) then
14448                   l_asset_deprn_rec.ytd_deprn := l_asset_deprn_rec.ytd_deprn + l_reserve_adj;
14449                end if;
14450 
14451             end if;
14452 
14453 --tk_util.debug('3eofy rsv: '||to_char(l_asset_fin_rec_new.eofy_reserve));
14454             if (p_log_level_rec.statement_level) then
14455                fa_debug_pkg.add(l_calling_fn, '====== ', '==============================', p_log_level_rec => p_log_level_rec);
14456                fa_debug_pkg.add(l_calling_fn, ' Call ',
14457                                 'FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS', p_log_level_rec => p_log_level_rec);
14458                fa_debug_pkg.add(l_calling_fn, '========== Recalc Before Calling call_deprn_basis 1 ==========','', p_log_level_rec => p_log_level_rec);
14459                fa_debug_pkg.add(l_calling_fn, 'p_trans_rec.transaction_type_code',
14460                                 p_trans_rec.transaction_type_code, p_log_level_rec => p_log_level_rec);
14461                fa_debug_pkg.add(l_calling_fn, 'l_trans_rec.transaction_type_code',
14462                                 l_trans_rec.transaction_type_code, p_log_level_rec => p_log_level_rec);
14463                fa_debug_pkg.add(l_calling_fn, 'l_eofy_reserve_retired',
14464                                 l_eofy_reserve_retired, p_log_level_rec => p_log_level_rec);
14465                fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_adj.eofy_reserve',
14466                                 l_asset_fin_rec_adj.eofy_reserve, p_log_level_rec => p_log_level_rec);
14467                fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.eofy_reserve',
14468                                 l_asset_fin_rec_new.eofy_reserve, p_log_level_rec => p_log_level_rec);
14469                fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec.deprn_reserve',
14470                                 l_asset_deprn_rec.deprn_reserve, p_log_level_rec => p_log_level_rec);
14471             end if;
14472 
14473 --tk_util.debug('4 rec_cost: '||to_char(px_asset_fin_rec_new.recoverable_cost));
14474             --
14475             -- if this is source line trx and there is no cost impact,
14476             -- do not call deprn basis function
14477             --
14478             if (not (l_invoice_transaction_id is not null and
14479                      nvl(l_asset_fin_rec_old.cost, 0) = l_asset_fin_rec_new.cost)) then
14480 
14481                if (p_log_level_rec.statement_level) then
14482                   fa_debug_pkg.add(l_calling_fn, '========== Recalc Before Calling call_deprn_basis 1.1 ==========','', p_log_level_rec => p_log_level_rec);
14483                   fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.adjusted_cost', l_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
14484                   fa_debug_pkg.add(l_calling_fn, '++ l_dbr_event_type', l_dbr_event_type, p_log_level_rec => p_log_level_rec);
14485                   fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.adjusted_recoverable_cost', l_asset_fin_rec_new.adjusted_recoverable_cost, p_log_level_rec => p_log_level_rec);
14486                   fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.method_code', l_asset_fin_rec_new.deprn_method_code, p_log_level_rec => p_log_level_rec);
14487                end if;
14488                -- Bug 6704518 Populate the transaction_key for Extended method
14489                -- Bug 8211842: Pass trx_key as ES if extended has started else pass EN
14493                   else
14490                if (l_asset_fin_rec_new.deprn_method_code = 'JP-STL-EXTND') then
14491                   if p_period_rec.period_counter >= p_asset_fin_rec_old.extended_depreciation_period then
14492                      l_trans_rec.transaction_key := 'ES';
14494                      l_trans_rec.transaction_key := 'EN';
14495                   end if;
14496                end if;
14497 
14498                if (l_trans_rec.transaction_key = 'IM') then
14499                   l_asset_deprn_rec.impairment_reserve := l_asset_deprn_rec.impairment_reserve + l_asset_deprn_rec.deprn_reserve;
14500                end if;
14501                 -- bug 12929729  need to pass recoverable cost w.r.t current transaction being processed instead of w.r.t original trx
14502                if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
14503                              (p_event_type             => l_dbr_event_type,
14504                               p_asset_fin_rec_new      => l_asset_fin_rec_new,
14505                               p_asset_fin_rec_old      => l_asset_fin_rec_old,
14506                               p_asset_hdr_rec          => p_asset_hdr_rec,
14507                               p_asset_type_rec         => p_asset_type_rec,
14508                               p_asset_deprn_rec        => l_asset_deprn_rec,
14509                               p_asset_retire_rec       => l_asset_retire_rec,
14510                               p_trans_rec              => p_trans_rec,
14511                               p_trans_rec_adj          => l_trans_rec,
14512                               p_period_rec             => l_period_rec,
14513                               p_recoverable_cost       => l_asset_fin_rec_new.recoverable_cost, -- bug 12929729   px_asset_fin_rec_new.recoverable_cost,
14514                               p_current_total_rsv      => l_asset_deprn_rec.deprn_reserve,
14515                               p_current_rsv            => l_asset_deprn_rec.deprn_reserve -
14516                                                           l_asset_deprn_rec.bonus_deprn_reserve - nvl(l_asset_deprn_rec.impairment_reserve,0),
14517                               p_current_total_ytd      => l_asset_deprn_rec.ytd_deprn,
14518                               p_adj_reserve            => p_asset_deprn_rec_adj.deprn_reserve,
14519                               p_reserve_retired        => l_reserve_retired,
14520                               p_hyp_basis              => l_asset_fin_rec_new.adjusted_cost,
14521                               p_hyp_total_rsv          => l_asset_deprn_rec_raf.deprn_reserve,
14522                               p_hyp_rsv                => l_asset_deprn_rec_raf.deprn_reserve -
14523                                                           l_asset_deprn_rec_raf.bonus_deprn_reserve - nvl(l_asset_deprn_rec_raf.impairment_reserve,0),
14524                               p_eofy_recoverable_cost  => l_eofy_rec_cost,
14525                               p_eop_recoverable_cost   => l_eop_rec_cost,
14526                               p_eofy_salvage_value     => l_eofy_sal_val,
14527                               p_eop_salvage_value      => l_eop_sal_val,
14528                               p_mrc_sob_type_code      => p_mrc_sob_type_code,
14529                               p_adjusted_cost      => l_asset_fin_rec_new.adjusted_cost, -- ADDED by ZZZZ
14530                               p_used_by_adjustment     => 'ADJUSTMENT',
14531                               p_trx_adjustment_amount  => px_asset_fin_rec_new.cost- nvl(p_asset_fin_rec_old.cost,0), --bug#16426081
14532                               px_new_adjusted_cost     => l_asset_fin_rec_new.adjusted_cost,
14533                               px_new_raf               => l_asset_fin_rec_new.rate_adjustment_factor,
14534                               px_new_formula_factor    => l_asset_fin_rec_new.formula_factor,
14535                     p_log_level_rec       => p_log_level_rec)) then
14536                   if (p_log_level_rec.statement_level) then
14537                      fa_debug_pkg.add(l_calling_fn, 'Error calling',
14538                                       'FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS', p_log_level_rec => p_log_level_rec);
14539                   end if;
14540 
14541                   raise calc_failed;
14542                end if;
14543 
14544                if (l_trans_rec.transaction_key = 'IM') then
14545                   l_asset_deprn_rec.impairment_reserve := l_asset_deprn_rec.impairment_reserve - l_asset_deprn_rec.deprn_reserve;
14546                end if;
14547 
14548                --Bug6978180 Added the following code to run for full retirement after extnd deprn.
14549                if nvl(l_trans_rec.transaction_key,'X') = 'ES' and
14550                                        p_trans_rec.transaction_type_code = 'FULL RETIREMENT'
14551                                        and nvl(l_asset_fin_rec_new.recoverable_cost,0) <>  0
14552                                        and fa_cache_pkg.fazccmt_record.rate_source_rule = 'CALCULATED'
14553                                        and p_asset_type_rec.asset_type  <> 'GROUP'
14554                                        and fa_cache_pkg.fazccmt_record.deprn_basis_rule = 'COST' then
14555 
14556                   l_asset_fin_rec_new.adjusted_cost := l_asset_fin_rec_new.cost - nvl(l_asset_deprn_rec.deprn_reserve,0)
14557                                                        - nvl(l_asset_deprn_rec.impairment_reserve ,0);
14558 
14559                end if;
14560 
14561                if (p_log_level_rec.statement_level) then
14562                   fa_debug_pkg.add(l_calling_fn, '========== Recalc After Calling CALL_DEPRN_BASIS 1 ==========','', p_log_level_rec => p_log_level_rec);
14563                   fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.adjusted_cost', l_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
14564                   fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.rate_adjustment_factor', l_asset_fin_rec_new.rate_adjustment_factor, p_log_level_rec => p_log_level_rec);
14565                end if;
14566 
14567             else
14568                l_asset_fin_rec_new.adjusted_cost := l_asset_fin_rec_old.adjusted_cost;
14569                l_asset_fin_rec_new.rate_adjustment_factor := l_asset_fin_rec_old.rate_adjustment_factor;
14573             if (p_log_level_rec.statement_level) then
14570                l_asset_fin_rec_new.formula_factor := l_asset_fin_rec_old.formula_factor;
14571             end if;
14572 
14574 
14575                fa_debug_pkg.add
14576                   (fname   => l_calling_fn,
14577                    element => 'impairment_reserve',
14578                    value   => p_asset_deprn_rec.impairment_reserve, p_log_level_rec => p_log_level_rec);
14579 
14580                fa_debug_pkg.add
14581                   (fname   => l_calling_fn,
14582                    element => 'trx_type_code',
14583                    value   => p_trans_rec.transaction_type_code, p_log_level_rec => p_log_level_rec);
14584             end if;
14585 
14586             -- Fix for Bug #4940011.  Need to set correct adjusted cost for
14587             -- reinstatement of an impairment
14588             if (nvl(p_asset_deprn_rec.impairment_reserve,0) <> 0) and
14589                (p_trans_rec.transaction_type_code = 'REINSTATEMENT') then
14590                l_asset_fin_rec_new.adjusted_cost := l_impair_adj_cost;
14591                l_asset_fin_rec_new.rate_adjustment_factor := l_impair_raf;
14592                l_asset_fin_rec_new.formula_factor := l_impair_formula_factor;
14593             end if;
14594 
14595 --tk_util.debug('l_asset_fin_rec_new.cost: '||to_char(l_asset_fin_rec_new.cost));
14596             if (p_log_level_rec.statement_level) then
14597                fa_debug_pkg.add(l_calling_fn, 'Returned values from ',
14598                                 'FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS', p_log_level_rec => p_log_level_rec);
14599                fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.adjusted_cost',
14600                                 l_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
14601                fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.rate_adjustment_factor',
14602                                 l_asset_fin_rec_new.rate_adjustment_factor, p_log_level_rec => p_log_level_rec);
14603                fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.formula_factor',
14604                                 l_asset_fin_rec_new.formula_factor, p_log_level_rec => p_log_level_rec);
14605                fa_debug_pkg.add(l_calling_fn, '====== ', '==============================', p_log_level_rec => p_log_level_rec);
14606             end if;
14607 
14608          end if; -- (l_process_this_trx)
14609 
14610          --++++++ Don't want to calculate depreciation this period +++++++
14611          if (l_calc_deprn_flag) then
14612             l_temp_adjusted_cost := l_asset_fin_rec_new.adjusted_cost;
14613             l_asset_fin_rec_new.adjusted_cost := 0;
14614          end if;
14615 
14616          --
14617          -- Run Depreciation if:
14618          --  - next available transaction (in table) is NOT the same period
14619          --  - This is the last transaction to recalculate which is not in
14620          --    current period.
14621          --  - This is the last trnsaction because of the limit specified
14622          --    at BULK fetch above. (Inside of following if clause, try to get
14623          --    next transaction from database and determine if depreciation needs
14624          --    to be called or not.
14625          --
14626          if (p_log_level_rec.statement_level) then
14627             fa_debug_pkg.add(l_calling_fn, 'Run Depreciation ', i, p_log_level_rec => p_log_level_rec);
14628             fa_debug_pkg.add(l_calling_fn, 't_transaction_header_id.COUNT',
14629                              t_transaction_header_id.COUNT, p_log_level_rec => p_log_level_rec);
14630             fa_debug_pkg.add(l_calling_fn, 'l_period_rec.period_counter',
14631                              l_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
14632             fa_debug_pkg.add(l_calling_fn, 'p_period_rec.period_counter',
14633                              p_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
14634          end if;
14635 
14636          if (i < t_transaction_header_id.COUNT) then
14637 
14638             --
14639             -- Get period informatioin for next period
14640             -- If the next transaction is not in the current period, call cache.
14641             -- Otherwise, copy current one to next period info local variable.
14642             --
14643             -- Bug6190904: there is a case that following amortized adjustment needs to be processed
14644             --             before moving on to the next period depending on prorate convention setting.
14645             --             l_end_date stores end date of prorate period where dpis falls in and if
14646             --             subsequent trx's amort date is before that, we want to process the trx
14647             --             before moving on to the next period.
14648             if (t_transaction_date_entered(i+1) > l_period_rec.calendar_period_close_date) and
14649                (t_transaction_date_entered(i+1) > l_end_date) then
14650 
14651                if not GetPeriodInfo(to_number(to_char(t_transaction_date_entered(i+1), 'J')),
14652                                     p_asset_hdr_rec.book_type_code,
14653                                     p_mrc_sob_type_code,
14654                                     p_asset_hdr_rec.set_of_books_id,
14655                                     l_next_period_rec,
14656                                     p_log_level_rec) then
14657                   if (p_log_level_rec.statement_level) then
14658                      fa_debug_pkg.add(l_calling_fn, 'Error calling',
14659                                       'GetPeriodInfo', p_log_level_rec => p_log_level_rec);
14660                   end if;
14661 
14662                   raise calc_failed;
14663                end if;
14664 
14665             else
14666                l_next_period_rec := l_period_rec;
14670 
14667             end if; -- (t_transaction_date_entered(i+1) > l_period_rec.calendar_period_close_date)
14668 
14669 --tk_util.DumpPerRec(l_next_period_rec, to_char(i));
14671          end if; -- (i < t_transaction_header_id.COUNT)
14672 
14673          if (p_log_level_rec.statement_level) then
14674             fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 8.0 : Checking whether to run Deprn ==========','', p_log_level_rec => p_log_level_rec);
14675             fa_debug_pkg.add(l_calling_fn, '++ i', i, p_log_level_rec => p_log_level_rec);
14676             fa_debug_pkg.add(l_calling_fn, '++ l_period_rec.period_counter', l_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
14677             fa_debug_pkg.add(l_calling_fn, '++ l_next_period_rec.period_counter', l_next_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
14678             fa_debug_pkg.add(l_calling_fn, '++ l_next_trx_trx_date_entered', to_char(l_next_trx_trx_date_entered,'MM/DD/YYYY'));
14679             fa_debug_pkg.add(l_calling_fn, '++ l_limit', l_limit, p_log_level_rec => p_log_level_rec);
14680          end if;
14681          --Bug6755649
14682          --If the transaction processed is partial retirement then save the calculated adj cost
14683          -- and cost frac.
14684          if l_trans_rec.transaction_type_code = G_TRX_TYPE_PAR_RET then
14685             if (p_asset_fin_rec_old.cost is null or p_asset_fin_rec_old.cost = 0) then
14686                l_old_cost_frac := null;
14687             else
14688                l_old_cost_frac := l_cost_retired / px_asset_fin_rec_new.cost;
14689             end if;
14690 
14691             l_cur_adj_cost := l_asset_fin_rec_new.adjusted_cost;
14692          end if;
14693 
14694          --Bug6755649 ends
14695 
14696          if ((i < t_transaction_header_id.COUNT) and
14697              (l_period_rec.period_counter < l_next_period_rec.period_counter)) or
14698             ((i = t_transaction_header_id.COUNT) and
14699              (i < l_limit) and
14700              (l_period_rec.period_counter < p_period_rec.period_counter)) or
14701             (i = l_limit) then
14702             --
14703             -- Find out from db that next transaction is in the same period or not.
14704             --
14705             if (i = l_limit) then
14706                OPEN c_get_next_ths (t_transaction_date_entered(i), t_date_effective(i));
14707                FETCH c_get_next_ths INTO l_next_trx_trx_date_entered,
14708                                              l_next_trx_date_effective;
14709                CLOSE c_get_next_ths;
14710 
14711                if (l_next_trx_trx_date_entered is not null) then
14712                   if not GetPeriodInfo(to_number(to_char(l_next_trx_trx_date_entered, 'J')),
14713                                        p_asset_hdr_rec.book_type_code,
14714                                        p_mrc_sob_type_code,
14715                                        p_asset_hdr_rec.set_of_books_id,
14716                                        l_next_period_rec,
14717                                        p_log_level_rec) then
14718                      if (p_log_level_rec.statement_level) then
14719                         fa_debug_pkg.add(l_calling_fn, 'Error calling',
14720                                          'GetPeriodInfo', p_log_level_rec => p_log_level_rec);
14721                      end if;
14722 
14723                      raise calc_failed;
14724                   end if;
14725                end if;
14726 
14727                if (p_log_level_rec.statement_level) then
14728                   fa_debug_pkg.add(l_calling_fn, 'Fetched next transaction information ', l_limit, p_log_level_rec => p_log_level_rec);
14729                end if;
14730 
14731             end if; -- (i = l_limit)
14732 
14733             --
14734             -- If there is no subsequent transaction or next transaction
14735             -- is in different period, complete runnning depreciation to close
14736             -- previous period or perivious period of the period that next transaction
14737             -- exists.
14738             --
14739             -- Bug3548724: Added l_is_this_void.  Skip faxcde call if current trx is void.
14740             --
14741 
14742             -- Fix for Bug #6190904.
14743             if (p_trans_rec.transaction_type_code like '%RETIREMENT') then
14744 
14745                -- Bug 5726160
14746                declare
14747                  cursor c_depreciate_flag is
14748                    select bk.depreciate_flag
14749                    from fa_books bk
14750                        ,fa_deprn_periods dp
14751                    where bk.asset_id = p_asset_hdr_rec.asset_id
14752                      and bk.book_type_code = p_asset_hdr_rec.book_type_code
14753                      and bk.date_effective <= nvl(dp.period_close_date, sysdate)
14754                      and dp.book_type_code = p_asset_hdr_rec.book_type_code
14755                      and dp.period_counter = l_period_rec.period_counter
14756                    order by bk.date_effective desc;
14757                begin
14758                    open c_depreciate_flag;
14759                    fetch c_depreciate_flag into l_depreciate_flag;
14760                    if (c_depreciate_flag%notfound) then
14761                       if (l_asset_fin_rec_new.depreciate_flag = 'YES')  then
14762                          l_depreciate_flag := 'YES';
14763                       else
14764                          l_depreciate_flag := 'NO';
14765                       end if;
14766                    end if;
14767                    close c_depreciate_flag;
14768                exception when others then null;
14769                end;
14770             else
14771                l_depreciate_flag := l_asset_fin_rec_new.depreciate_flag;
14772             end if;
14773 
14774 
14775             if (p_log_level_rec.statement_level) then
14779                 fa_debug_pkg.add(l_calling_fn, 'l_period_rec.period_counter', l_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
14776                 fa_debug_pkg.add(l_calling_fn, '========== Recalc Step 8.5 :Checking whether to run Deprn ==========','', p_log_level_rec => p_log_level_rec);
14777                 fa_debug_pkg.add(l_calling_fn, 'l_next_trx_trx_date_entered', to_char(l_next_trx_trx_date_entered,'MM/DD/YYYY'));
14778                 fa_debug_pkg.add(l_calling_fn, 'l_next_period_rec.period_counter', l_next_period_rec.period_counter, p_log_level_rec => p_log_level_rec);
14780                 fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_old.depreciate_flag', l_asset_fin_rec_old.depreciate_flag, p_log_level_rec => p_log_level_rec);
14781                 fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.depreciate_flag', l_asset_fin_rec_new.depreciate_flag, p_log_level_rec => p_log_level_rec);
14782                 fa_debug_pkg.add(l_calling_fn, 'l_depreciate_flag', l_depreciate_flag, p_log_level_rec => p_log_level_rec);
14783                 fa_debug_pkg.add(l_calling_fn, 'l_asset_deprn_rec.deprn_reserve', l_asset_deprn_rec.deprn_reserve, p_log_level_rec => p_log_level_rec);
14784                 fa_debug_pkg.add(l_calling_fn, 'px_asset_fin_rec_new.depreciate_flag', px_asset_fin_rec_new.depreciate_flag, p_log_level_rec => p_log_level_rec);
14785                 fa_debug_pkg.add(l_calling_fn, 'l_depreciate_flag', l_depreciate_flag, p_log_level_rec => p_log_level_rec);
14786                 fa_debug_pkg.add(l_calling_fn, 'l_energy_member', l_energy_member, p_log_level_rec => p_log_level_rec);
14787                 fa_debug_pkg.add(l_calling_fn, 'l_is_this_void', l_is_this_void, p_log_level_rec => p_log_level_rec);
14788             end if;
14789 
14790             if (l_next_trx_trx_date_entered is null or
14791                 l_next_period_rec.period_counter > l_period_rec.period_counter) and
14792                (not(l_is_this_void)) and
14793                (not(l_energy_member)) and
14794                --Bug 14837242 use l_depreciate_flag instead of px_asset_fin_rec_new.depreciate_flag
14795                -- (px_asset_fin_rec_new.depreciate_flag = 'YES') -- Bug6190904 for case5: Need to replace a line above
14796                (l_depreciate_flag = 'YES')
14797                then
14798 
14799                l_dpr_in.y_begin := l_period_rec.fiscal_year;
14800                l_dpr_in.p_cl_begin := l_period_rec.period_num;
14801 
14802                if (p_log_level_rec.statement_level) then
14803                   fa_debug_pkg.add(l_calling_fn, 'Depreciation starts from period of ', l_dpr_in.p_cl_begin, p_log_level_rec => p_log_level_rec);
14804                   fa_debug_pkg.add(l_calling_fn, 'and year of ', l_dpr_in.y_begin, p_log_level_rec => p_log_level_rec);
14805                end if;
14806 
14807                if (i < t_transaction_header_id.COUNT) or (i = l_limit) then
14808                   if (p_log_level_rec.statement_level) then
14809                      fa_debug_pkg.add(l_calling_fn, 'Depreciate until ', 'Next Transaction', p_log_level_rec => p_log_level_rec);
14810                   end if;
14811                   --
14812                   -- Find how many periods to depreciate until next transaction headers
14813                   -- Set FA_STD_TYPES.dpr_struct for depreciation(faxcde) call.
14814                   --
14815                   if (nvl(l_next_period_rec.period_counter, p_period_rec.period_counter) = 1) then
14816                      l_dpr_in.y_end := nvl(l_next_period_rec.fiscal_year, p_period_rec.fiscal_year) - 1;
14817                      l_dpr_in.p_cl_end := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
14818                   else
14819                      l_dpr_in.y_end := nvl(l_next_period_rec.fiscal_year, p_period_rec.fiscal_year);
14820                      l_dpr_in.p_cl_end := nvl(l_next_period_rec.period_num, p_period_rec.period_num) - 1;
14821                   end if;
14822 
14823                elsif (i = t_transaction_header_id.COUNT) then
14824                   if (p_log_level_rec.statement_level) then
14825                      fa_debug_pkg.add(l_calling_fn, 'Depreciate until ', 'Current period', p_log_level_rec => p_log_level_rec);
14826                   end if;
14827                   --
14828                   -- This is the last transaction to process.  So depreciate
14829                   -- until last period.
14830                   --
14831                   if (p_period_rec.period_num = 1) then
14832                      l_dpr_in.y_end := p_period_rec.fiscal_year - 1;
14833                      l_dpr_in.p_cl_end := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
14834                   else
14835                      l_dpr_in.y_end := p_period_rec.fiscal_year;
14836                      l_dpr_in.p_cl_end := p_period_rec.period_num - 1;
14837                   end if;
14838 
14839                end if; -- (i < t_transaction_header_id.COUNT) or (i = l_limit)
14840 
14841                if (p_log_level_rec.statement_level) then
14842                   fa_debug_pkg.add(l_calling_fn, 'Depreciation will end at period of ', l_dpr_in.p_cl_end, p_log_level_rec => p_log_level_rec);
14843                   fa_debug_pkg.add(l_calling_fn, 'and year of ', l_dpr_in.y_end, p_log_level_rec => p_log_level_rec);
14844                end if;
14845 
14846                if (l_period_rec.period_num <> 1) then
14847                   l_dpr_in.deprn_rounding_flag := 'ADJ';
14848                end if;
14849 
14850                l_dpr_in.prior_fy_exp := l_asset_deprn_rec.prior_fy_expense;
14851                l_dpr_in.ytd_deprn := l_asset_deprn_rec.ytd_deprn;
14852                l_dpr_in.deprn_rsv := l_asset_deprn_rec.deprn_reserve;
14853                l_dpr_in.adj_cost := l_asset_fin_rec_new.adjusted_cost;
14854                l_dpr_in.eofy_reserve := l_asset_fin_rec_new.eofy_reserve;
14855                l_dpr_in.rate_adj_factor := l_asset_fin_rec_new.rate_adjustment_factor;
14856                l_dpr_in.formula_factor := l_asset_fin_rec_new.formula_factor;
14857                l_dpr_in.super_group_id := l_asset_fin_rec_new.super_group_id;
14861 
14858                l_dpr_in.cost := l_asset_fin_rec_new.cost;
14859                --Bug 6510877
14860                l_dpr_in.adj_capacity := l_asset_fin_rec_new.adjusted_capacity;
14862                -- manual override
14863                if fa_cache_pkg.fa_deprn_override_enabled then
14864                   l_dpr_in.update_override_status := TRUE;
14865                end if;
14866 
14867                -- Bug fix 5893429
14868                if l_trans_rec.transaction_type_code = G_TRX_TYPE_PAR_RET then
14869                   if (p_asset_fin_rec_old.cost is null or p_asset_fin_rec_old.cost = 0) then
14870                      l_cost_frac := null;
14871                   else
14872                     l_cost_frac := l_cost_retired / px_asset_fin_rec_new.cost;
14873                   end if;
14874                else
14875                   l_cost_frac := null;
14876                end if;
14877 
14878                --Bug6755649
14879                --Added a condition to check if after all the transactions have been processed the value
14880                --of adjusted cost is same as the one calculated during partial retirement then
14881                --populate cost fraction with the old value.
14882                if (l_asset_fin_rec_new.adjusted_cost = l_cur_adj_cost) and (i = t_transaction_header_id.COUNT)then
14883                         l_cost_frac := l_old_cost_frac;
14884                end if;
14885                --Bug6755649 ends
14886 
14887                l_dpr_in.cost_frac := l_cost_frac;
14888 
14889                fa_debug_pkg.add(l_calling_fn, '++ l_dpr_in.cost_frac', l_dpr_in.cost_frac, p_log_level_rec => p_log_level_rec);
14890                 -- End of bug fix 5893429
14891 
14892                --  Bug 8398064: if current partial retirement is in same period as prev row  in overlapping txns
14893                --  then reset  deprn rsv if there are no amort adj or reval overlaps.
14894                -- Bug 10410325: ignore ytd_deprn completely.
14895                if  (i > 1)  and  (NOT l_amort_adjusted_flag) then
14896                   declare
14897                       l_rem_frac number;
14898                       l_b   boolean;
14899                   begin
14900                      if t_transaction_period_ctr(i) = t_transaction_period_ctr(i-1) and
14901                         t_transaction_type_code(i) like '%RETIREMENT'
14902                      then
14903                         l_overlapping_rets := TRUE;
14904                         l_rem_frac  :=  l_asset_fin_rec_new.cost / l_asset_fin_rec_old.cost;
14905                         fa_debug_pkg.add(l_calling_fn, '++ OVERLAPPING TXNS 1', t_transaction_header_id(i) );
14906                         fa_debug_pkg.add(l_calling_fn, '++ OVERLAPPING TXNS 2', t_transaction_header_id(i-1) );
14907                         l_dpr_in.deprn_rsv    := l_rem_frac * l_dpr_in.deprn_rsv;
14908                         l_b := FA_UTILS_PKG.faxrnd(l_dpr_in.deprn_rsv, p_asset_hdr_rec.book_type_code, p_asset_hdr_rec.set_of_books_id,p_log_level_rec => p_log_level_rec);
14909                      end if;
14910                   end;
14911                end if;
14912                -- Bug 8398064
14913 
14914                if (p_log_level_rec.statement_level) then
14915                   fa_debug_pkg.add(l_calling_fn, '========== Recalc Before Calling faxcde 2 ==========','', p_log_level_rec => p_log_level_rec);
14916                   fa_debug_pkg.add(l_calling_fn, '++ l_dpr_in.cost',l_dpr_in.cost, p_log_level_rec => p_log_level_rec);
14917                   fa_debug_pkg.add(l_calling_fn, '++ l_dpr_in.adj_cost',l_dpr_in.adj_cost, p_log_level_rec => p_log_level_rec);
14918                   fa_debug_pkg.add(l_calling_fn, '++ l_dpr_in.rate_adj_factor',l_dpr_in.rate_adj_factor, p_log_level_rec => p_log_level_rec);
14919                   fa_debug_pkg.add(l_calling_fn, '++ l_dpr_in.prior_fy_exp',l_dpr_in.prior_fy_exp, p_log_level_rec => p_log_level_rec);
14920                   fa_debug_pkg.add(l_calling_fn, '++ l_dpr_in.eofy_reserve',l_dpr_in.eofy_reserve, p_log_level_rec => p_log_level_rec);
14921                   fa_debug_pkg.add(l_calling_fn, '++ l_dpr_in.deprn_rsv',l_dpr_in.deprn_rsv, p_log_level_rec => p_log_level_rec);
14922                end if;
14923 
14924                -- 8211842 : faxcde will look for POSTED depreciation overrides
14925                -- for periods before override_period_counter
14926                l_dpr_in.override_period_counter := l_override_limit_period_rec.period_counter;
14927 
14928                --
14929                -- +++++ faxcde will not be called if adjusted_cost is 0.
14930                --
14931                if not FA_CDE_PKG.faxcde(l_dpr_in,
14932                                         l_dpr_arr,
14933                                         l_dpr_out,
14934                                         l_running_mode, p_log_level_rec => p_log_level_rec) then
14935                   if (p_log_level_rec.statement_level) then
14936                      fa_debug_pkg.add(l_calling_fn, 'Error calling',
14937                                       'FA_CDE_PKG.faxcde', p_log_level_rec => p_log_level_rec);
14938                   end if;
14939 
14940                   raise calc_failed;
14941                end if;
14942 
14943                if (p_log_level_rec.statement_level) then
14944                   fa_debug_pkg.add(l_calling_fn, '========== Recalc After Calling faxcde 2 ==========','', p_log_level_rec => p_log_level_rec);
14945                   fa_debug_pkg.add(l_calling_fn, '++ Depreciation started from YEAR : PERIOD ', l_dpr_in.y_begin ||' : '|| l_dpr_in.p_cl_begin, p_log_level_rec => p_log_level_rec);
14946                   fa_debug_pkg.add(l_calling_fn, '++ Depreciation ended at YEAR : PERIOD ', l_dpr_in.y_end   ||' : '|| l_dpr_in.p_cl_end, p_log_level_rec => p_log_level_rec);
14947                   fa_debug_pkg.add(l_calling_fn, '++ l_dpr_out.new_adj_cost', l_dpr_out.new_adj_cost, p_log_level_rec => p_log_level_rec);
14948                   fa_debug_pkg.add(l_calling_fn, 'l_dpr_out.new_ytd_deprn', l_dpr_out.new_ytd_deprn, p_log_level_rec => p_log_level_rec);
14952                   fa_debug_pkg.add(l_calling_fn, '++ AFTER: l_asset_deprn_rec.deprn_reserve (+ +)', l_asset_deprn_rec.deprn_reserve);
14949                   fa_debug_pkg.add(l_calling_fn, 'l_dpr_out.new_deprn_rsv', l_dpr_out.new_deprn_rsv, p_log_level_rec => p_log_level_rec);
14950                   fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.adjusted_cost',l_asset_fin_rec_new.adjusted_cost , p_log_level_rec => p_log_level_rec);
14951                   fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.adjusted_recoverable_cost',l_asset_fin_rec_new.adjusted_recoverable_cost , p_log_level_rec => p_log_level_rec);
14953                end if;
14954 
14955 
14956                -- manual override
14957                if fa_cache_pkg.fa_deprn_override_enabled then
14958                   p_trans_rec.deprn_override_flag := l_dpr_out.deprn_override_flag;
14959                end if;
14960 
14961                if (l_asset_fin_rec_new.adjusted_cost <> 0)or
14962 --bug fix 4731687 added for the case when due to deprn limit adj_rec_cost is <>0 and adj_cost is 0
14963                   (l_asset_fin_rec_new.adjusted_recoverable_cost <> 0) then
14964                   l_asset_fin_rec_new.reval_amortization_basis := l_dpr_out.new_reval_amo_basis;
14965                   l_asset_deprn_rec.deprn_reserve := l_dpr_out.new_deprn_rsv;
14966                   l_asset_deprn_rec.ytd_deprn := l_dpr_out.new_ytd_deprn;
14967                   l_asset_deprn_rec.reval_deprn_reserve := l_dpr_out.new_reval_rsv;
14968 -- bug 5336669
14969 --                l_asset_fin_rec_new.adjusted_capacity := l_dpr_out.new_adj_capacity;
14970 --
14971                   l_asset_deprn_rec.ltd_production := l_dpr_out.new_ltd_prod;
14972                   l_asset_fin_rec_new.eofy_reserve := l_dpr_out.new_eofy_reserve;
14973 
14974                   l_asset_deprn_rec.prior_fy_expense := l_dpr_out.new_prior_fy_exp;
14975                   l_asset_deprn_rec.bonus_deprn_amount := l_dpr_out.bonus_deprn_exp;
14976                   l_asset_deprn_rec.bonus_deprn_reserve := l_dpr_out.new_bonus_deprn_rsv;
14977                   l_asset_deprn_rec.prior_fy_bonus_expense := l_dpr_out.new_prior_fy_bonus_exp;
14978                   l_asset_deprn_rec.impairment_amount := l_dpr_out.impairment_exp;
14979                   l_asset_deprn_rec.impairment_reserve := l_dpr_out.new_impairment_rsv;
14980                end if;
14981 
14982                --++++++ Put adjusted cost back ++++++
14983                l_asset_fin_rec_new.adjusted_cost := l_dpr_out.new_adj_cost;
14984                l_asset_fin_rec_new.adjusted_cost := l_dpr_out.new_adj_cost;
14985 
14986                l_out_deprn_exp := l_dpr_out.deprn_exp;
14987                l_out_reval_exp := l_dpr_out.reval_exp;
14988                l_out_reval_amo := l_dpr_out.reval_amo;
14989                l_out_prod := l_dpr_out.prod;
14990                l_out_ann_adj_exp := l_dpr_out.ann_adj_exp;
14991                l_out_ann_adj_reval_exp := l_dpr_out.ann_adj_reval_exp;
14992                l_out_ann_adj_reval_amo := l_dpr_out.ann_adj_reval_amo;
14993                l_out_bonus_rate_used := l_dpr_out.bonus_rate_used;
14994                l_out_full_rsv_flag := l_dpr_out.full_rsv_flag;
14995                l_out_life_comp_flag := l_dpr_out.life_comp_flag;
14996                l_out_deprn_override_flag := l_dpr_out.deprn_override_flag;
14997 
14998                l_eop_rec_cost := l_asset_fin_rec_new.recoverable_cost;
14999                l_eop_sal_val := l_asset_fin_rec_new.salvage_value;
15000 
15001                -- Bug 13620748 start
15002                -- we will override the reserve calcualted by faxcde2 call in case
15003                -- user has done amortized reserve change adjustment in POA
15004                -- in R12 and currently we are processing addition
15005                IF l_trans_rec.transaction_type_code = 'ADDITION'
15006                   AND p_trans_rec.transaction_type_code <> 'ADDITION'
15007                   AND (l_amort_res_adj_poa) then
15008 
15009                   l_asset_deprn_rec.deprn_reserve := p_asset_deprn_rec.deprn_reserve + p_asset_deprn_rec_adj.deprn_reserve;
15010                   l_asset_deprn_rec.ytd_deprn := p_asset_deprn_rec.ytd_deprn + p_asset_deprn_rec_adj.ytd_deprn ;
15011                   l_asset_fin_rec_new.eofy_reserve := l_asset_deprn_rec.deprn_reserve -  l_asset_deprn_rec.ytd_deprn;
15012 
15013                END IF;
15014                --Bug 13620748 end
15015 
15016 
15017                --+++++++++ Call member level maintenance for tracking +++++++
15018                if nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE' then
15019 
15020                   if not FA_TRACK_MEMBER_PVT.member_eofy_rsv(p_asset_hdr_rec => p_asset_hdr_rec,
15021                                                              p_dpr_in => l_dpr_in,
15022                                                              p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
15023                      if (p_log_level_rec.statement_level) then
15024                         fa_debug_pkg.add(l_calling_fn, 'Error calling',
15025                                          'FA_TRACK_MEMBER_PVT.member_eofy_rsv',  p_log_level_rec => p_log_level_rec);
15026                      end if;
15027 
15028                      raise calc_failed;
15029 
15030                   end if;
15031 
15032                end if; -- nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE'
15033 
15034             elsif (l_energy_member) then
15035                if (p_log_level_rec.statement_level) then
15036                   fa_debug_pkg.add(l_calling_fn, 'This is energy member ',
15037                                    'No member level deprn calculation', p_log_level_rec => p_log_level_rec);
15038                end if;
15039 
15040 
15041 
15042             else
15043                if (p_log_level_rec.statement_level) then
15044                   fa_debug_pkg.add(l_calling_fn, 'There is another transactions to process this period',
15048             end if; -- (l_next_trx_period_counter is null or
15045                                    'or this is current period', p_log_level_rec => p_log_level_rec);
15046                end if;
15047 
15049 
15050          end if; -- (not ((i < l_limit) and
15051 
15052          if (l_calc_deprn_flag) then
15053             l_asset_fin_rec_new.adjusted_cost := l_temp_adjusted_cost;
15054          end if;
15055 
15056          l_process_this_trx := TRUE;
15057 
15058 
15059          if (p_log_level_rec.statement_level) then
15060              fa_debug_pkg.add(l_calling_fn, '++ calc_catchup: p_trans_rec.transaction_type_code', p_trans_rec.transaction_type_code, p_log_level_rec => p_log_level_rec);
15061          end if;
15062 
15063          -- Bug 5726160
15064          if p_running_mode = fa_std_types.FA_DPR_CATCHUP then
15065 
15066            if p_trans_rec.transaction_type_code = 'REINSTATEMENT' then
15067 
15068               if l_retirement_thid = l_trans_rec.transaction_header_id then
15069 
15070                  l_catchup_begin_deprn_rec.deprn_reserve := l_asset_deprn_rec.deprn_reserve;
15071                  l_catchup_begin_deprn_rec.bonus_deprn_reserve := l_asset_deprn_rec.bonus_deprn_reserve;
15072                  l_catchup_begin_deprn_rec.impairment_reserve := l_asset_deprn_rec.impairment_reserve;
15073 
15074                  if (p_log_level_rec.statement_level) then
15075                    fa_debug_pkg.add('    '||l_calling_fn, 'SETTING l_catchup_begin_deprn_rec.deprn_reserve (+ +)', l_catchup_begin_deprn_rec.deprn_reserve);
15076                  end if;
15077 
15078               end if;
15079 
15080            elsif p_trans_rec.transaction_type_code like '%RETIREMENT' then
15081 
15082               if (p_log_level_rec.statement_level) then
15083                    fa_debug_pkg.add('    '||l_calling_fn, '++ calc_catchup: l_trans_rec.transaction_type_code 1...', l_trans_rec.transaction_type_code, p_log_level_rec => p_log_level_rec);
15084                    fa_debug_pkg.add('    '||l_calling_fn, '++ calc_catchup: l_entered_reserve 1...', l_entered_reserve, p_log_level_rec => p_log_level_rec);
15085               end if;
15086 
15087               if l_trans_rec.transaction_type_code = 'ADDITION' and l_entered_reserve <> 0 then
15088 
15089                   -- reset deprn_reserve to the deprn_reserve in fa_deprn_summary
15090                   select deprn_reserve
15091                   into l_temp_reserve
15092                   from fa_deprn_summary ds1
15093                   where ds1.asset_id = p_asset_hdr_rec.asset_id
15094                     and ds1.book_type_code = p_asset_hdr_rec.book_type_code
15095                     and ds1.period_counter =
15096                         (select ds2.period_counter + 1
15097                          from fa_deprn_summary ds2
15098                          where ds2.asset_id = p_asset_hdr_rec.asset_id
15099                            and ds2.book_type_code = p_asset_hdr_rec.book_type_code
15100                            and ds2.deprn_source_code = 'BOOKS');
15101 
15102                   l_asset_deprn_rec.deprn_reserve := l_temp_reserve;
15103 
15104                   if (p_log_level_rec.statement_level) then
15105                      fa_debug_pkg.add('    '||l_calling_fn, '++   RESETTING l_asset_deprn_rec.deprn_reserve (+ +) ...', l_asset_deprn_rec.deprn_reserve);
15106                   end if;
15107 
15108               end if;
15109 
15110            end if;
15111 
15112          end if;
15113 
15114          if (p_log_level_rec.statement_level) then
15115             fa_debug_pkg.add('    '||l_calling_fn, 'ytd_deprn', l_asset_deprn_rec.ytd_deprn, p_log_level_rec => p_log_level_rec);
15116             fa_debug_pkg.add('    '||l_calling_fn, 'deprn_reserve', l_asset_deprn_rec.deprn_reserve, p_log_level_rec => p_log_level_rec);
15117             fa_debug_pkg.add(l_calling_fn, '++ AFTER 2: l_asset_deprn_rec.deprn_reserve (+ +)', l_asset_deprn_rec.deprn_reserve);
15118          end if;
15119 
15120       END LOOP; -- FOR i IN 1..t_transaction_header_id.COUNT LOOP
15121 
15122       EXIT WHEN c_get_ths_adj%NOTFOUND;
15123 
15124    END LOOP; -- for transactions
15125 
15126    CLOSE c_get_ths_adj;
15127 
15128    if (p_log_level_rec.statement_level) then
15129            fa_debug_pkg.add(l_calling_fn, '++ Recalc Step 9 : End of c_get_ths_adj LOOP ------------------------------------------------','', p_log_level_rec => p_log_level_rec);
15130    end if;
15131 
15132    if (p_log_level_rec.statement_level) then
15133       fa_debug_pkg.add(l_calling_fn, '+++++++++++ Recalc Step 9 : BEFORE calling CALL_DEPRN_BASIS ++++++++++','', p_log_level_rec => p_log_level_rec);
15134       fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.cost',l_asset_fin_rec_new.cost, p_log_level_rec => p_log_level_rec);
15135       fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.adjusted_cost',l_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
15136       fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.rate_adjustment_factor',l_asset_fin_rec_new.rate_adjustment_factor, p_log_level_rec => p_log_level_rec);
15137       fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.formula_factor',l_asset_fin_rec_new.formula_factor, p_log_level_rec => p_log_level_rec);
15138       fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.prior_deprn_limit_amount',l_asset_fin_rec_new.prior_deprn_limit_amount, p_log_level_rec => p_log_level_rec);
15139       fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.prior_deprn_limit',l_asset_fin_rec_new.prior_deprn_limit, p_log_level_rec => p_log_level_rec);
15140    end if;
15141 
15142    -- Bug  9804275
15143    -- Basis reset not needed if FORMULA/NBV/Basis rule is used
15144    -- Call Depreciable Basis Rule for Formula/NBV Basis if necessary.
15145    -- We have backported Fix for Bug 7459910 so this logic is not
15146    -- needed for basis reset when deprn basis rule is used.
15150      (fa_cache_pkg.fazccmt_record.rate_source_rule = fa_std_types.FAD_RSR_FORMULA) and
15147    --
15148    if (
15149      (fa_cache_pkg.fazccmt_record.deprn_basis_rule = fa_std_types.FAD_DBR_NBV) and
15151      (fa_cache_pkg.fazccmt_record.deprn_basis_rule is null)
15152       )
15153    then
15154    -- Call Depreciable Basis Rule for Formula/NBV Basis
15155        if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
15156               (p_event_type             => 'AMORT_ADJ3',
15157                p_asset_fin_rec_new      => l_asset_fin_rec_new,
15158                p_asset_fin_rec_old      => l_asset_fin_rec_new,
15159                p_asset_hdr_rec          => p_asset_hdr_rec,
15160                p_asset_type_rec         => p_asset_type_rec,
15161                p_asset_deprn_rec        => l_asset_deprn_rec,
15162                p_trans_rec              => p_trans_rec,
15163                p_period_rec             => l_period_rec,
15164                p_adjusted_cost          => l_asset_fin_rec_new.adjusted_cost,
15165                p_current_total_rsv      => l_asset_deprn_rec.deprn_reserve,
15166                p_current_rsv            => l_asset_deprn_rec.deprn_reserve -
15167                                            l_asset_deprn_rec.bonus_deprn_reserve - nvl(l_asset_deprn_rec.impairment_reserve,0),
15168                p_current_total_ytd      => l_asset_deprn_rec.ytd_deprn,
15169                p_hyp_basis              => l_asset_fin_rec_new.adjusted_cost,
15170                p_hyp_total_rsv          => l_asset_deprn_rec_raf.deprn_reserve,
15171                p_hyp_rsv                => l_asset_deprn_rec_raf.deprn_reserve -
15172                                            l_asset_deprn_rec_raf.bonus_deprn_reserve - nvl(l_asset_deprn_rec_raf.impairment_reserve,0),
15173                p_eofy_recoverable_cost  => l_eofy_rec_cost,
15174                p_eop_recoverable_cost   => l_eop_rec_cost,
15175                p_eofy_salvage_value     => l_eofy_sal_val,
15176                p_eop_salvage_value      => l_eop_sal_val,
15177                p_mrc_sob_type_code      => p_mrc_sob_type_code,
15178                p_used_by_adjustment     => 'ADJUSTMENT',
15179                px_new_adjusted_cost     => l_asset_fin_rec_new.adjusted_cost,
15180                px_new_raf               => l_asset_fin_rec_new.rate_adjustment_factor,
15181                px_new_formula_factor    => l_asset_fin_rec_new.formula_factor,
15182                p_log_level_rec => p_log_level_rec)) then
15183                if (p_log_level_rec.statement_level) then
15184                      fa_debug_pkg.add(l_calling_fn, 'Error calling',
15185                                   'FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS', p_log_level_rec => p_log_level_rec);
15186                end if;
15187                raise calc_failed;
15188        end if; -- fix for Bug 9804275
15189    end if; -- (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
15190 
15191    if (p_log_level_rec.statement_level) then
15192       fa_debug_pkg.add(l_calling_fn, '++ Recalc Step 10 : AFTER calling CALL_DEPRN_BASIS ------------------------------------------------','', p_log_level_rec => p_log_level_rec);
15193       fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.cost',l_asset_fin_rec_new.cost, p_log_level_rec => p_log_level_rec);
15194       fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.adjusted_cost',l_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
15195       fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.rate_adjustment_factor',l_asset_fin_rec_new.rate_adjustment_factor, p_log_level_rec => p_log_level_rec);
15196       fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.formula_factor',l_asset_fin_rec_new.formula_factor, p_log_level_rec => p_log_level_rec);
15197    end if;
15198 
15199    if (p_log_level_rec.statement_level) then
15200       fa_debug_pkg.add(l_calling_fn, 'Returned values from ',
15201                                      'FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS AMORT_ADJ3', p_log_level_rec => p_log_level_rec);
15202       fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.adjusted_cost',
15203                                      l_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
15204       fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.rate_adjustment_factor',
15205                                      l_asset_fin_rec_new.rate_adjustment_factor, p_log_level_rec => p_log_level_rec);
15206       fa_debug_pkg.add(l_calling_fn, 'l_asset_fin_rec_new.formula_factor',
15207                                      l_asset_fin_rec_new.formula_factor, p_log_level_rec => p_log_level_rec);
15208    end if;
15209 
15210    px_asset_fin_rec_new.cost := l_asset_fin_rec_new.cost;
15211    px_asset_fin_rec_new.recoverable_cost:= l_asset_fin_rec_new.recoverable_cost;
15212    px_asset_fin_rec_new.adjusted_recoverable_cost:= l_asset_fin_rec_new.adjusted_recoverable_cost;
15213    px_asset_fin_rec_new.salvage_value := l_asset_fin_rec_new.salvage_value;
15214    px_asset_fin_rec_new.allowed_deprn_limit_amount := l_asset_fin_rec_new.allowed_deprn_limit_amount;
15215    px_asset_fin_rec_new.percent_salvage_value := l_asset_fin_rec_new.percent_salvage_value;
15216    px_asset_fin_rec_new.allowed_deprn_limit := l_asset_fin_rec_new.allowed_deprn_limit;
15217    px_asset_fin_rec_new.unrevalued_cost := l_asset_fin_rec_new.unrevalued_cost;
15218    px_asset_fin_rec_new.production_capacity := l_asset_fin_rec_new.production_capacity;
15219    px_asset_fin_rec_new.reval_ceiling := l_asset_fin_rec_new.reval_ceiling;
15220    px_asset_fin_rec_new.adjusted_cost := l_asset_fin_rec_new.adjusted_cost;
15221    px_asset_fin_rec_new.rate_adjustment_factor := l_asset_fin_rec_new.rate_adjustment_factor;
15222    px_asset_fin_rec_new.reval_amortization_basis := l_asset_fin_rec_new.reval_amortization_basis;
15223    px_asset_fin_rec_new.adjusted_capacity := l_asset_fin_rec_new.adjusted_capacity;
15224    px_asset_fin_rec_new.formula_factor := l_asset_fin_rec_new.formula_factor;
15225    px_asset_fin_rec_new.eofy_reserve := l_asset_fin_rec_new.eofy_reserve;
15226 
15227    --
15231    --
15228    -- When returning catch up expenses, amounts in p_asset_deprn_rec_adj need to be
15229    -- excluded because it was included at beginning to find correct catchup but
15230    -- these amounts cannot be expensed in this period.
15232    -- Bug3548724:if this is addition, there is no need to back out adj reserve
15233    -- because it is reserve from previous period
15234    --
15235 
15236    -- Japan Bug 6645061 use period_counter_fully_extended for assets which
15237    -- have extended_deprn_flag set.
15238    begin
15239       -- Bug 8211842: Use pc_fully_extended only if the asset has started
15240       -- extended depreciation
15241       if p_period_rec.period_counter >=
15242               nvl(p_asset_fin_rec_old.extended_depreciation_period,999999) then
15243          l_start_extended := 'Y';
15244       end if;
15245 
15246       select decode(nvl(p_asset_fin_rec_old.extended_deprn_flag,'N'),
15247                     'Y', decode(l_start_extended,
15248                                 'Y', p_asset_fin_rec_old.period_counter_fully_extended,
15249                                      p_asset_fin_rec_old.period_counter_fully_reserved),
15250                     p_asset_fin_rec_old.period_counter_fully_reserved),
15251              decode(nvl(l_asset_fin_rec_new.extended_deprn_flag,'N'),
15252                     'Y', decode(l_start_extended,
15253                                 'Y', l_asset_fin_rec_new.period_counter_fully_extended,
15254                                      l_asset_fin_rec_new.period_counter_fully_reserved),
15255                     l_asset_fin_rec_new.period_counter_fully_reserved)
15256       into   l_old_pc_reserved,
15257              l_new_pc_reserved
15258       from dual;
15259 
15260    end;
15261 
15262    -- bug 5383699 nvl clause added
15263    if (l_old_pc_reserved is not null
15264        and l_new_pc_reserved is not null) then
15265 
15266       -- Fix for Bug #6403182.  If the period you are backdating the retirement
15267       -- too is before the period that the retirement occurs in, then you
15268       -- need to backout some reserve.
15269       -- Japan Bug 6645061
15270       if (nvl(l_period_rec.period_counter, 9999999) <= l_old_pc_reserved) then
15271 
15272          x_deprn_expense := nvl(l_asset_deprn_rec.deprn_reserve, 0) -
15273                             nvl(p_asset_deprn_rec.deprn_reserve, 0);
15274          x_bonus_expense := nvl(l_asset_deprn_rec.bonus_deprn_reserve, 0) -
15275                             nvl(p_asset_deprn_rec.bonus_deprn_reserve, 0);
15276          x_impairment_expense := nvl(l_asset_deprn_rec.impairment_reserve, 0) -
15277                                  nvl(p_asset_deprn_rec.impairment_reserve, 0);
15278       else
15279          -- Bug 5377543
15280          x_deprn_expense := 0;
15281          x_bonus_expense := 0;
15282          x_impairment_expense := 0;
15283       end if;
15284 
15285    elsif (p_trans_rec.transaction_type_code = 'ADDITION') then
15286       x_deprn_expense := nvl(l_asset_deprn_rec.deprn_reserve, 0) -
15287                          nvl(p_asset_deprn_rec.deprn_reserve, 0);
15288       x_bonus_expense := nvl(l_asset_deprn_rec.bonus_deprn_reserve, 0) -
15289                          nvl(p_asset_deprn_rec.bonus_deprn_reserve, 0);
15290       x_impairment_expense := nvl(l_asset_deprn_rec.impairment_reserve, 0) -
15291                               nvl(p_asset_deprn_rec.impairment_reserve, 0);
15292 
15293    --Bug 8398064:Begin
15294    elsif ((p_trans_rec.transaction_type_code LIKE '%RETIREMENT')
15295           and (NOT l_amort_adjusted_flag)  and (l_overlapping_rets)) THEN
15296    --
15297    --
15298    --            If the overlaps is purely composed of partial retirements/retirements
15299    --            , we can charge the movement of ytd to expense
15300    --
15301       x_deprn_expense := nvl(l_asset_deprn_rec.ytd_deprn, 0) -
15302                          nvl(p_asset_deprn_rec.ytd_deprn, 0) -
15303                          nvl(p_asset_deprn_rec_adj.ytd_deprn, 0) ;
15304       x_bonus_expense := nvl(l_asset_deprn_rec.bonus_ytd_deprn, 0) -
15305                          nvl(p_asset_deprn_rec.bonus_ytd_deprn, 0) -
15306                          nvl(p_asset_deprn_rec_adj.bonus_ytd_deprn, 0);
15307       x_impairment_expense := nvl(l_asset_deprn_rec.ytd_impairment, 0) -
15308                               nvl(p_asset_deprn_rec.ytd_impairment, 0) -
15309                               nvl(p_asset_deprn_rec_adj.ytd_impairment, 0);
15310       if (p_log_level_rec.statement_level) then
15311           fa_debug_pkg.add(l_calling_fn, '++ Bug8398064: x_deprn_expense (back out expense) ', x_deprn_expense,p_log_level_rec => p_log_level_rec);
15312       end if;
15313    --Bug 8398064:End
15314    elsif (p_trans_rec.transaction_type_code = 'REINSTATEMENT') then
15315      -- Bug 5726160
15316      if p_running_mode = fa_std_types.FA_DPR_CATCHUP then
15317       x_deprn_expense := nvl(l_asset_deprn_rec.deprn_reserve, 0) -
15318                          nvl(l_catchup_begin_deprn_rec.deprn_reserve, 0);
15319       x_bonus_expense := nvl(l_asset_deprn_rec.bonus_deprn_reserve, 0) -
15320                          nvl(l_catchup_begin_deprn_rec.bonus_deprn_reserve, 0);
15321       x_impairment_expense := nvl(l_asset_deprn_rec.impairment_reserve, 0) -
15322                               nvl(l_catchup_begin_deprn_rec.impairment_reserve, 0);
15323      else
15324       x_deprn_expense := nvl(l_asset_deprn_rec.deprn_reserve, 0) -
15325                          nvl(p_asset_deprn_rec.deprn_reserve, 0);
15326       x_bonus_expense := nvl(l_asset_deprn_rec.bonus_deprn_reserve, 0) -
15327                          nvl(p_asset_deprn_rec.bonus_deprn_reserve, 0);
15328       x_impairment_expense := nvl(l_asset_deprn_rec.impairment_reserve, 0) -
15329                               nvl(p_asset_deprn_rec.impairment_reserve, 0);
15330      end if;
15331 
15332    else
15333       x_deprn_expense := nvl(l_asset_deprn_rec.deprn_reserve, 0) -
15334                          nvl(p_asset_deprn_rec.deprn_reserve, 0) -
15338                          nvl(p_asset_deprn_rec_adj.bonus_deprn_reserve, 0);
15335                          nvl(p_asset_deprn_rec_adj.deprn_reserve, 0);
15336       x_bonus_expense := nvl(l_asset_deprn_rec.bonus_deprn_reserve, 0) -
15337                          nvl(p_asset_deprn_rec.bonus_deprn_reserve, 0) -
15339       x_impairment_expense := nvl(l_asset_deprn_rec.impairment_reserve, 0) -
15340                               nvl(p_asset_deprn_rec.impairment_reserve, 0) -
15341                               nvl(p_asset_deprn_rec_adj.impairment_reserve, 0);
15342    end if;
15343 
15344    if (p_log_level_rec.statement_level) then
15345       fa_debug_pkg.add(l_calling_fn, '++++ Recalc Step 11 : Set x_deprn_expense ','...', p_log_level_rec => p_log_level_rec);
15346       fa_debug_pkg.add(l_calling_fn, '++ p_asset_fin_rec_old.period_counter_fully_reserved', p_asset_fin_rec_old.period_counter_fully_reserved, p_log_level_rec => p_log_level_rec);
15347       fa_debug_pkg.add(l_calling_fn, '++ l_asset_fin_rec_new.period_counter_fully_reserved', l_asset_fin_rec_new.period_counter_fully_reserved, p_log_level_rec => p_log_level_rec);
15348       fa_debug_pkg.add(l_calling_fn, '++ ++ p_asset_deprn_rec.deprn_reserve (INPUT)', p_asset_deprn_rec.deprn_reserve);
15349       fa_debug_pkg.add(l_calling_fn, '++ ++ p_asset_deprn_rec_adj.deprn_reserve (INPUT)', p_asset_deprn_rec_adj.deprn_reserve);
15350       fa_debug_pkg.add(l_calling_fn, '++ ++ l_asset_deprn_rec.deprn_reserve (NEW)', l_asset_deprn_rec.deprn_reserve);
15351       fa_debug_pkg.add(l_calling_fn, '++ ++ x_deprn_expense (INPUT-NEW=OUTPUT)', x_deprn_expense);
15352    end if;
15353 
15354    --+++++++++ Call member level maintenance for tracking +++++++
15355    if nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE' then
15356 
15357       if not FA_TRACK_MEMBER_PVT.update_member_books(p_trans_rec=> p_trans_rec,
15358                                                      p_asset_hdr_rec => p_asset_hdr_rec,
15359                                                      p_dpr_in => l_dpr_in,
15360                                                      p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
15361          if (p_log_level_rec.statement_level) then
15362             fa_debug_pkg.add(l_calling_fn, 'Error calling',
15363                              'FA_TRACK_MEMBER_PVT.update_member_books',  p_log_level_rec => p_log_level_rec);
15364          end if;
15365 
15366          raise calc_failed;
15367       end if;
15368 
15369       fa_track_member_pvt.p_track_member_eofy_table.delete;
15370 
15371       if (p_log_level_rec.statement_level) then
15372          fa_debug_pkg.add(l_calling_fn, 'fa_track_member_pvt.p_track_member_eofy_table',
15373                                         'deleted',  p_log_level_rec => p_log_level_rec);
15374       end if;
15375 
15376    end if; -- nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE'
15377 
15378    if (p_log_level_rec.statement_level) then
15379       fa_debug_pkg.add(l_calling_fn, 'End',
15380                        x_deprn_expense||':'||x_bonus_expense, p_log_level_rec => p_log_level_rec);
15381    end if;
15382 
15383    return true;
15384 
15385 EXCEPTION
15386   WHEN invalid_trx_to_overlap THEN
15387     if (p_log_level_rec.statement_level) then
15388        fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'invalid_trx_to_overlap', p_log_level_rec => p_log_level_rec);
15389     end if;
15390 
15391     if c_get_ths_adj%ISOPEN then
15392       CLOSE c_get_ths_adj;
15393     end if;
15394 
15395     fa_srvr_msg.add_message(calling_fn => l_calling_fn,
15396                             name       => 'FA_INVALID_TRX_TO_OVERLAP', p_log_level_rec => p_log_level_rec);
15397     return false;
15398   WHEN calc_failed THEN
15399     if (p_log_level_rec.statement_level) then
15400        fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'calc_failed', p_log_level_rec => p_log_level_rec);
15401     end if;
15402 
15403     if c_get_ths_adj%ISOPEN then
15404       CLOSE c_get_ths_adj;
15405     end if;
15406 
15407     -- Bug 8211842
15408     if c_get_retirement_pdate%ISOPEN then
15409       CLOSE c_get_retirement_pdate;
15410     end if;
15411 
15412     fa_srvr_msg.add_message(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
15413     return false;
15414 
15415   WHEN OTHERS THEN
15416     if (p_log_level_rec.statement_level) then
15417        fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'others: '||sqlerrm, p_log_level_rec => p_log_level_rec);
15418     end if;
15419 
15420     if c_check_overlap%ISOPEN then
15421       CLOSE c_check_overlap;
15422     end if;
15423 
15424     if c_get_ths_adj%ISOPEN then
15425       CLOSE c_get_ths_adj;
15426     end if;
15427 
15428     if c_get_next_ths%ISOPEN then
15429       CLOSE c_get_next_ths;
15430     end if;
15431 
15432     if c_get_retirement%ISOPEN then
15433       CLOSE c_get_retirement;
15434     end if;
15435 
15436     -- Bug 8211842
15437     if c_get_retirement_pdate%ISOPEN then
15438       CLOSE c_get_retirement_pdate;
15439     end if;
15440 
15441     fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
15442     raise;
15443 END Recalculate;
15444 
15445 ---------------------------------------------------------------------------
15446 
15447 FUNCTION faxama
15448          (px_trans_rec           IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
15449           p_asset_hdr_rec        IN            FA_API_TYPES.asset_hdr_rec_type,
15450           p_asset_desc_rec       IN            FA_API_TYPES.asset_desc_rec_type,
15451           p_asset_cat_rec        IN            FA_API_TYPES.asset_cat_rec_type,
15452           p_asset_type_rec       IN            FA_API_TYPES.asset_type_rec_type,
15453           p_asset_fin_rec_old    IN            FA_API_TYPES.asset_fin_rec_type,
15454           p_asset_fin_rec_adj    IN            FA_API_TYPES.asset_fin_rec_type default null,
15458           p_period_rec           IN            FA_API_TYPES.period_rec_type,
15455           px_asset_fin_rec_new   IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
15456           p_asset_deprn_rec      IN            FA_API_TYPES.asset_deprn_rec_type,
15457           p_asset_deprn_rec_adj  IN            FA_API_TYPES.asset_deprn_rec_type default null,
15459           p_mrc_sob_type_code    IN            VARCHAR2,
15460           p_running_mode         IN            NUMBER,
15461           p_used_by_revaluation  IN            NUMBER,
15462           p_reclassed_asset_id                 NUMBER default null,
15463           p_reclass_src_dest                   VARCHAR2 default null,
15464           p_reclassed_asset_dpis               DATE default null,
15465           x_deprn_exp               OUT NOCOPY NUMBER,
15466           x_bonus_deprn_exp         OUT NOCOPY NUMBER,
15467           x_impairment_exp          OUT NOCOPY NUMBER
15468          , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean IS
15469 
15470    l_calling_fn           varchar2(50) := 'FA_AMORT_PVT.faxama';
15471    l_reval_deprn_rsv_adj  number :=0;
15472    l_afn_zero             number:=0;
15473 
15474    l_asset_fin_rec_adj    FA_API_TYPES.asset_fin_rec_type;
15475    l_asset_deprn_rec_new   FA_API_TYPES.asset_deprn_rec_type; -- Added to call calc_raf_adj
15476 
15477    calc_err   EXCEPTION;
15478 
15479 /*
15480    err number;
15481 
15482    cursor c_get_profiler is
15483      select runid,
15484             run_date,
15485             run_comment
15486      from plsql_profiler_runs;
15487 */
15488 
15489 begin <<faxama>>
15490 --tk_util.debug('-');
15491 --tk_util.debug('-');
15492 --tk_util.debug('-');
15493 --tk_util.debug('-');
15494 --tk_util.debug('-');
15495 --tk_util.debug('-+++++-');
15496    if (p_log_level_rec.statement_level) then
15497       fa_debug_pkg.add(l_calling_fn, 'Begin', p_asset_type_rec.asset_type||':'||p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
15498    end if;
15499 
15500 
15501 --   err:=DBMS_PROFILER.START_PROFILER ('faxama:'||to_char(sysdate,'dd-Mon-YYYY hh:mi:ss'));
15502 
15503    X_deprn_exp       := 0;
15504    X_bonus_deprn_exp := 0;
15505    X_impairment_exp  := 0;
15506 
15507    if (p_asset_type_rec.asset_type='CIP') then
15508       if (p_log_level_rec.statement_level) then
15509          fa_debug_pkg.add(l_calling_fn, 'Nothing to calculate with CIP asset',' ', p_log_level_rec => p_log_level_rec);
15510          fa_debug_pkg.add(l_calling_fn, 'Exiting faxama immediately',
15511          p_asset_type_rec.asset_type||':'||p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
15512       end if;
15513       return true;
15514 
15515       --FA_SRVR_MSG.ADD_MESSAGE
15516       --      (CALLING_FN => 'FA_AMORT_PKG.faxama',
15517       --       NAME       => 'FA_AMT_CIP_NOT_ALLOWED',
15518       --       TOKEN1     => 'TYPE',
15519       --       VALUE1     => 'Amortized',  p_log_level_rec => p_log_level_rec);
15520       --return FALSE;
15521    end if;
15522 
15523    if (p_log_level_rec.statement_level) then
15524        FA_DEBUG_PKG.ADD
15525                (fname   => 'FA_AMORT_PKG.faxama',
15526                 element => 'First asset_type',
15527                 value   => p_asset_type_rec.asset_type, p_log_level_rec => p_log_level_rec);
15528    end if;
15529 
15530 --
15531 --  Function call faxraf may be removed.
15532 --
15533 --     if (not faxraf
15534 --            (px_trans_rec           => px_trans_rec,
15535 --             p_asset_hdr_rec        => p_asset_hdr_rec,
15536 --             p_asset_desc_rec       => p_asset_desc_rec,
15537 --             p_asset_cat_rec        => p_asset_cat_rec,
15538 --             p_asset_type_rec       => p_asset_type_rec,
15539 --             p_asset_fin_rec_old    => p_asset_fin_rec_old,
15540 --             px_asset_fin_rec_new   => px_asset_fin_rec_new,
15541 --             p_asset_deprn_rec      => p_asset_deprn_rec,
15542 --             p_period_rec           => p_period_rec,
15543 --             px_deprn_exp           => x_deprn_exp,
15544 --             px_bonus_deprn_exp     => x_bonus_deprn_exp,
15545 --             px_impairment_exp      => x_impairment_exp,
15546 --             px_reval_deprn_rsv_adj => l_reval_deprn_rsv_adj,
15547 --             p_mrc_sob_type_code    => p_mrc_sob_type_code,
15548 --             p_running_mode         => p_running_mode,
15549 --             p_used_by_revaluation  => p_used_by_revaluation)) then
15550 --       raise calc_err;
15551 --     end if;
15552 
15553 --tk_util.DumpTrxRec(px_trans_rec, 'px_trans_rec');
15554 --tk_util.DumpFinRec(p_asset_fin_rec_old, 'old fin_rec');
15555 --tk_util.DumpFinRec(p_asset_fin_rec_adj, 'adj fin_rec');
15556 --tk_util.DumpFinRec(px_asset_fin_rec_new, 'new_fin_rec');
15557 --tk_util.DumpDeprnRec(p_asset_deprn_rec, 'old deprn');
15558 --tk_util.DumpDeprnRec(p_asset_deprn_rec_adj, 'adj deprn');
15559 
15560     /*Bug#8652791- reverted changes done for #8417751 */
15561     if (px_trans_rec.transaction_type_code = 'REINSTATEMENT') then
15562      --Bug6401134
15563      px_asset_fin_rec_new := p_asset_fin_rec_old;
15564    end if;
15565 
15566    --
15567    -- Energy: Need to reinstate member reserve entry cre
15568    if (nvl(p_asset_fin_rec_old.tracking_method, 'NO TRACK') = 'ALLOCATE') and    -- ENERGY
15569       (fa_cache_pkg.fazcdrd_record.rule_name = 'ENERGY PERIOD END BALANCE') and  -- ENERGY
15570       (px_trans_rec.transaction_type_code = 'REINSTATEMENT') then -- ENERGY
15571       if (p_log_level_rec.statement_level) then
15572          fa_debug_pkg.add(l_calling_fn, 'calling function ',
15573                           'FA_AMORT_PVT.calc_raf_adj_cost',  p_log_level_rec => p_log_level_rec);
15574       end if;
15575 
15576       l_asset_deprn_rec_new := p_asset_deprn_rec;
15580       /* Added if condition for bug 8484007 */
15577       --Bug6401134 commented this code ass it has already been written before the if condition
15578      -- px_asset_fin_rec_new := p_asset_fin_rec_old;
15579       px_asset_fin_rec_new.cost := p_asset_fin_rec_old.cost + nvl(p_asset_fin_rec_adj.cost, 0);
15581       if (nvl(px_asset_fin_rec_new.percent_salvage_value,0) > 0) then
15582          px_asset_fin_rec_new.salvage_value := px_asset_fin_rec_new.cost * px_asset_fin_rec_new.percent_salvage_value;
15583       else
15584          px_asset_fin_rec_new.salvage_value := p_asset_fin_rec_old.salvage_value + nvl(p_asset_fin_rec_adj.salvage_value, 0);
15585       end if;
15586       px_asset_fin_rec_new.unrevalued_cost := px_asset_fin_rec_new.cost;
15587       /* End 8484007 */
15588 --Bug8425794 / 8244128 px_asset_fin_rec_new.salvage_value := px_asset_fin_rec_new.cost * .1;
15589       px_asset_fin_rec_new.recoverable_cost := px_asset_fin_rec_new.cost - px_asset_fin_rec_new.salvage_value;
15590       px_asset_fin_rec_new.adjusted_recoverable_cost := px_asset_fin_rec_new.recoverable_cost;
15591 
15592       if not FA_AMORT_PVT.calc_raf_adj_cost
15593                            (p_trans_rec           => px_trans_rec,
15594                             p_asset_hdr_rec       => p_asset_hdr_rec,
15595                             p_asset_desc_rec      => p_asset_desc_rec,
15596                             p_asset_type_rec      => p_asset_type_rec,
15597                             p_asset_fin_rec_old   => p_asset_fin_rec_old,
15598                             px_asset_fin_rec_new  => px_asset_fin_rec_new,
15599                             p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
15600                             p_asset_deprn_rec_new => l_asset_deprn_rec_new,
15601                             p_period_rec          => p_period_rec,
15602 --                            p_group_reclass_options_rec => p_group_reclass_options_rec,
15603                             p_mrc_sob_type_code   => p_mrc_sob_type_code
15604                                       , p_log_level_rec => p_log_level_rec) then
15605          raise calc_err;
15606       end if;
15607    else
15608       populate_fin_rec(
15609                 p_trans_rec          => px_trans_rec,
15610                 p_asset_fin_rec_old  => p_asset_fin_rec_old,
15611                 p_asset_fin_rec_adj  => p_asset_fin_rec_adj,
15612                 p_asset_fin_rec_new  => px_asset_fin_rec_new,
15613                 x_asset_fin_rec_adj  => l_asset_fin_rec_adj,
15614                 p_log_level_rec => p_log_level_rec);
15615 
15616       if (not Recalculate(
15617                 p_trans_rec            => px_trans_rec,
15618                 p_asset_hdr_rec        => p_asset_hdr_rec,
15619                 p_asset_type_rec       => p_asset_type_rec,
15620                 p_asset_desc_rec       => p_asset_desc_rec,
15621                 p_asset_fin_rec_old    => p_asset_fin_rec_old,
15622                 p_asset_fin_rec_adj    => l_asset_fin_rec_adj,
15623                 p_period_rec           => p_period_rec,
15624                 px_asset_fin_rec_new   => px_asset_fin_rec_new,
15625                 p_asset_deprn_rec      => p_asset_deprn_rec,
15626                 p_asset_deprn_rec_adj  => p_asset_deprn_rec_adj,
15627                 x_deprn_expense        => x_deprn_exp,
15628                 x_bonus_expense        => x_bonus_deprn_exp,
15629                 x_impairment_expense   => x_impairment_exp,
15630                 p_running_mode         => p_running_mode,
15631                 p_used_by_revaluation  => p_used_by_revaluation,
15632                 p_reclassed_asset_id   => p_reclassed_asset_id,
15633                 p_reclass_src_dest     => p_reclass_src_dest,
15634                 p_reclassed_asset_dpis => p_reclassed_asset_dpis,
15635                 p_source_transaction_type_code
15636                                        => px_trans_rec.transaction_type_code,
15637                 p_mrc_sob_type_code    => p_mrc_sob_type_code,
15638                 p_calling_fn           => l_calling_fn,
15639                 p_log_level_rec => p_log_level_rec)) then
15640          raise calc_err;
15641       end if;
15642 
15643    end if;
15644 --tk_util.DumpFinRec(px_asset_fin_rec_new, 'Nfaxama');
15645 
15646    if (p_log_level_rec.statement_level) then
15647       fa_debug_pkg.add(l_calling_fn, 'End', p_asset_type_rec.asset_type||':'||p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
15648    end if;
15649 --tk_util.debug('-+++++-');
15650 --tk_util.debug('-');
15651 --tk_util.debug('-');
15652 --tk_util.debug('-');
15653 --tk_util.debug('-');
15654 --tk_util.debug('-');
15655 
15656 --   err:=DBMS_PROFILER.STOP_PROFILER;
15657 
15658 /*
15659 for r_get_profiler in c_get_profiler loop
15660 null;
15661 --tk_util.debug('runid: '||to_char(r_get_profiler.runid));
15662 --tk_util.debug('run_date: '||to_char(r_get_profiler.run_date, 'DD-MON-YYYY HH24:MI:SS'));
15663 --tk_util.debug('run_comment: '||r_get_profiler.run_comment);
15664 end loop;
15665 */
15666 
15667    return TRUE;
15668 
15669 exception
15670    when calc_err then
15671         if (p_log_level_rec.statement_level) then
15672            fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'calc_err', p_log_level_rec => p_log_level_rec);
15673         end if;
15674 
15675         FA_SRVR_MSG.ADD_SQL_ERROR(CALLING_FN => l_calling_fn, p_log_level_rec => p_log_level_rec);
15676         return false;
15677 
15678    when others then
15679         if (p_log_level_rec.statement_level) then
15680           fa_debug_pkg.add(l_calling_fn, 'EXCEPTION', 'others: '||sqlerrm, p_log_level_rec => p_log_level_rec);
15681         end if;
15682 
15683         FA_SRVR_MSG.ADD_SQL_ERROR(CALLING_FN => l_calling_fn, p_log_level_rec => p_log_level_rec);
15684         return  FALSE;
15685 end faxama;
15686 
15687 ----------------------------------------------------------------------------
15688 
15692 -- prorate period upto right before the amortization period
15689 -- backdate amortization enhancement - begin
15690 -- this function will get books row of addition transaction
15691 -- and call faxcde to calculate what the actual reserve is from the
15693 
15694 FUNCTION get_reserve(px_trans_rec        in out nocopy FA_API_TYPES.trans_rec_type,
15695                      p_asset_hdr_rec     in     FA_API_TYPES.asset_hdr_rec_type,
15696                      p_asset_desc_rec    in     FA_API_TYPES.asset_desc_rec_type,
15697                      px_asset_fin_rec    in out nocopy FA_API_TYPES.asset_fin_rec_type,
15698                      p_add_txn_id        in     number,
15699                      p_amortize_fy       in     integer,
15700                      p_amortize_per_num  in     integer,
15701                      p_pers_per_yr       in     integer,
15702                      p_mrc_sob_type_code in     varchar2,
15703                      x_deprn_rsv            out nocopy number,
15704                      x_bonus_deprn_rsv      out nocopy number,
15705                      x_impairment_rsv       out nocopy number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
15706 return boolean is
15707 
15708    l_asset_fin_rec   FA_API_TYPES.asset_fin_rec_type;
15709    l_asset_deprn_rec FA_API_TYPES.asset_deprn_rec_type;
15710 
15711    l_dpr_row       FA_STD_TYPES.dpr_struct;
15712    l_dpr_arr       FA_STD_TYPES.dpr_arr_type;
15713    l_dpr_out       FA_STD_TYPES.dpr_out_struct;
15714 
15715    l_cur_deprn_rsv number;
15716    l_cur_bonus_deprn_rsv number;
15717    l_cur_impairment_rsv  number;
15718 
15719    dummy_var       varchar2(15);
15720    dummy_num       number;
15721 
15722 begin
15723 
15724    l_asset_fin_rec := px_asset_fin_rec;
15725 
15726    if p_mrc_sob_type_code = 'R' then
15727       select adjusted_cost,
15728              recoverable_cost,
15729              reval_amortization_basis,
15730              adjusted_rate,
15731              production_capacity,
15732              adjusted_capacity,
15733              adjusted_recoverable_cost,
15734              salvage_value,
15735              deprn_method_code,
15736              life_in_months,
15737              ceiling_name,
15738              bonus_rule,
15739              annual_deprn_rounding_flag,
15740              rate_adjustment_factor,
15741              prorate_date,
15742              deprn_start_date,
15743              date_placed_in_service
15744         into l_asset_fin_rec.adjusted_cost,
15745              l_asset_fin_rec.recoverable_cost,
15746              l_asset_fin_rec.reval_amortization_basis,
15747              l_asset_fin_rec.adjusted_rate,
15748              l_asset_fin_rec.production_capacity,
15749              l_asset_fin_rec.adjusted_capacity,
15750              l_asset_fin_rec.adjusted_recoverable_cost,
15751              l_asset_fin_rec.salvage_value,
15752              l_asset_fin_rec.deprn_method_code,
15753              l_asset_fin_rec.life_in_months,
15754              l_asset_fin_rec.ceiling_name,
15755              l_asset_fin_rec.bonus_rule,
15756              l_asset_fin_rec.annual_deprn_rounding_flag,
15757              l_asset_fin_rec.rate_adjustment_factor,
15758              l_asset_fin_rec.prorate_date,
15759              l_asset_fin_rec.deprn_start_date,
15760              l_asset_fin_rec.date_placed_in_service
15761         from fa_mc_books bk
15762        where bk.book_type_code           = p_asset_hdr_rec.book_type_code
15763          and bk.asset_id                 = p_asset_hdr_rec.asset_id
15764          and bk.transaction_header_id_in = p_add_txn_id
15765          and bk.set_of_books_id          = p_asset_hdr_rec.set_of_books_id;
15766    else
15767       select adjusted_cost,
15768              recoverable_cost,
15769              reval_amortization_basis,
15770              adjusted_rate,
15771              production_capacity,
15772              adjusted_capacity,
15773              adjusted_recoverable_cost,
15774              salvage_value,
15775              deprn_method_code,
15776              life_in_months,
15777              ceiling_name,
15778              bonus_rule,
15779              annual_deprn_rounding_flag,
15780              rate_adjustment_factor,
15781              prorate_date,
15782              deprn_start_date,
15783              date_placed_in_service
15784         into l_asset_fin_rec.adjusted_cost,
15785              l_asset_fin_rec.recoverable_cost,
15786              l_asset_fin_rec.reval_amortization_basis,
15787              l_asset_fin_rec.adjusted_rate,
15788              l_asset_fin_rec.production_capacity,
15789              l_asset_fin_rec.adjusted_capacity,
15790              l_asset_fin_rec.adjusted_recoverable_cost,
15791              l_asset_fin_rec.salvage_value,
15792              l_asset_fin_rec.deprn_method_code,
15793              l_asset_fin_rec.life_in_months,
15794              l_asset_fin_rec.ceiling_name,
15795              l_asset_fin_rec.bonus_rule,
15796              l_asset_fin_rec.annual_deprn_rounding_flag,
15797              l_asset_fin_rec.rate_adjustment_factor,
15798              l_asset_fin_rec.prorate_date,
15799              l_asset_fin_rec.deprn_start_date,
15800              l_asset_fin_rec.date_placed_in_service
15801         from fa_books bk
15802        where bk.book_type_code           = p_asset_hdr_rec.book_type_code
15803          and bk.asset_id                 = p_asset_hdr_rec.asset_id
15804          and bk.transaction_header_id_in = p_add_txn_id;
15805    end if;
15806 
15807    if not FA_EXP_PVT.faxbds
15808            (p_asset_hdr_rec      => p_asset_hdr_rec,
15809             px_asset_fin_rec_new => l_asset_fin_rec,
15810             p_asset_deprn_rec    => l_asset_deprn_rec,
15814             X_bonus_deprn_rsv    => l_cur_bonus_deprn_rsv,
15811             p_asset_desc_rec     => p_asset_desc_rec,
15812             X_dpr_ptr            => l_dpr_row,
15813             X_deprn_rsv          => l_cur_deprn_rsv,
15815             X_impairment_rsv     => l_cur_impairment_rsv,
15816             p_amortized_flag     => FALSE,
15817             p_mrc_sob_type_code  => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
15818       fa_srvr_msg.add_message (calling_fn => 'fa_exp_pkg.faxexp',  p_log_level_rec => p_log_level_rec);
15819       return (FALSE);
15820    end if;
15821 
15822    if (p_amortize_per_num = 1) then
15823       l_dpr_row.y_end    := p_amortize_fy - 1;
15824       l_dpr_row.p_cl_end := p_pers_per_yr;
15825    else
15826       l_dpr_row.y_end    := p_amortize_fy;
15827       l_dpr_row.p_cl_end := p_amortize_per_num - 1;
15828    end if;
15829 
15830    l_dpr_row.bonus_rule := '';
15831    l_dpr_row.reval_rsv := 0;
15832    l_dpr_row.prior_fy_exp := 0;
15833    l_dpr_row.ytd_deprn := 0;
15834    l_dpr_row.mrc_sob_type_code := p_mrc_sob_type_code;
15835    l_dpr_row.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
15836 
15837    if (not FA_CDE_PKG.faxcde(l_dpr_row,
15838                              l_dpr_arr,
15839                              l_dpr_out,
15840                              FA_STD_TYPES.FA_DPR_NORMAL, p_log_level_rec => p_log_level_rec)) then
15841       FA_SRVR_MSG.ADD_MESSAGE
15842                 (CALLING_FN=>'faxcde3', p_log_level_rec => p_log_level_rec);
15843       FA_SRVR_MSG.ADD_MESSAGE
15844                (CALLING_FN => 'FA_AMORT_PKG.get_reserve',
15845                 NAME=>'FA_AMT_CAL_DP_EXP',  p_log_level_rec => p_log_level_rec);
15846       return FALSE;
15847    end if;
15848 
15849    px_trans_rec.deprn_override_flag := l_dpr_out.deprn_override_flag;
15850    x_deprn_rsv       := l_dpr_out.new_deprn_rsv;
15851    x_bonus_deprn_rsv := l_dpr_out.new_bonus_deprn_rsv;
15852    x_impairment_rsv  := l_dpr_out.new_impairment_rsv;
15853 
15854    return TRUE;
15855 
15856 exception
15857   when others then
15858        FA_SRVR_MSG.ADD_SQL_ERROR
15859             (CALLING_FN => 'FA_AMORT_PKG.get_reserve',  p_log_level_rec => p_log_level_rec);
15860        return  FALSE;
15861 
15862 end get_reserve;
15863 
15864 -- backdate amortization enhancement - end
15865 
15866 -------------------------------------------------------------------------------
15867 
15868 -- New function: faxnac
15869 -- Alternative flat rate depreciation calculation.
15870 -- If deprn_basis_formula = 'STRICT_FLAT', use the new adjustment method.
15871 -- When using a NBV based flat rate method, adjustment base amount will be
15872 -- the NBV of the beginning of the year, and when using a Cost based flat rate
15873 -- method, adjustment base amount will be the recoverable cost.
15874 
15875 FUNCTION faxnac (p_method_code  in varchar2,
15876                  p_life         in number,
15877                  p_rec_cost     in number,
15878                  p_prior_fy_exp in number,
15879                  p_deprn_rsv    in number,
15880                  p_ytd_deprn    in number,
15881                  px_adj_cost    in out nocopy number, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean is
15882 
15883    l_deprn_basis_formula varchar2(30);
15884    l_rate_source_rule varchar2(10);
15885    l_deprn_basis_rule varchar2(4);
15886    l_dummy_bool boolean;
15887    l_dummy_int integer;
15888 
15889 begin
15890 
15891    if px_adj_cost is null then
15892       fa_srvr_msg.add_message(name => '***ADJ_COST_NULL***',
15893                               calling_fn => 'FA_AMORT_PKG.faxnac', p_log_level_rec => p_log_level_rec);
15894       return false;
15895    end if;
15896 
15897    if (not fa_cache_pkg.fazccmt(p_method_code,
15898                                 p_life, p_log_level_rec => p_log_level_rec)) then
15899       fa_srvr_msg.add_message(calling_fn => 'FA_AMORT_PKG.faxnac',  p_log_level_rec => p_log_level_rec);
15900       return false;
15901    end if;
15902 
15903    l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule_id;
15904 
15905    if l_deprn_basis_formula is null then
15906       return true;
15907    end if;
15908 
15909    --  if l_deprn_basis_formula = fa_std_types.FAD_DBF_FLAT then
15910    if l_deprn_basis_formula = 'STRICT_FLAT' then
15911       if (not fa_cache_pkg.fazccmt(p_method_code,
15912                                    p_life, p_log_level_rec => p_log_level_rec)) then
15913          fa_srvr_msg.add_message(calling_fn => 'FA_AMORT_PKG.faxnac',  p_log_level_rec => p_log_level_rec);
15914          return false;
15915       end if;
15916 
15917       l_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
15918       l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
15919 
15920       if l_rate_source_rule = FA_STD_TYPES.FAD_RSR_FLAT and
15921          l_deprn_basis_rule = FA_STD_TYPES.FAD_DBR_COST then
15922          if p_rec_cost is null then
15923             fa_srvr_msg.add_message(calling_fn => 'FA_AMORT_PKG.faxnac',  p_log_level_rec => p_log_level_rec);
15924             return false;
15925          end if;
15926          px_adj_cost := p_rec_cost;
15927       elsif l_rate_source_rule = FA_STD_TYPES.FAD_RSR_FLAT and
15928             l_deprn_basis_rule = FA_STD_TYPES.FAD_DBR_NBV then
15929          if p_rec_cost is null or
15930             not ((p_prior_fy_exp is not null) or
15931                  (p_deprn_rsv is not null and p_ytd_deprn is not null) ) then
15932             fa_srvr_msg.add_message(calling_fn => 'FA_AMORT_PKG.faxnac',  p_log_level_rec => p_log_level_rec);
15933             return false;
15934          end if;
15935 
15939             px_adj_cost := p_rec_cost - p_prior_fy_exp;
15936          if p_prior_fy_exp is null then
15937             px_adj_cost := p_rec_cost - p_deprn_rsv + p_ytd_deprn;
15938          else
15940          end if;
15941       end if;
15942    end if;
15943    return true;
15944 
15945 end faxnac;
15946 
15947 FUNCTION faxraf
15948          (px_trans_rec            IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
15949           p_asset_hdr_rec        IN     FA_API_TYPES.asset_hdr_rec_type,
15950           p_asset_desc_rec       IN     FA_API_TYPES.asset_desc_rec_type,
15951           p_asset_cat_rec        IN     FA_API_TYPES.asset_cat_rec_type,
15952           p_asset_type_rec       IN     FA_API_TYPES.asset_type_rec_type,
15953           p_asset_fin_rec_old    IN     FA_API_TYPES.asset_fin_rec_type,
15954           px_asset_fin_rec_new   IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
15955           p_asset_deprn_rec      IN     FA_API_TYPES.asset_deprn_rec_type,
15956           p_period_rec           IN     FA_API_TYPES.period_rec_type,
15957           px_deprn_exp           IN OUT NOCOPY number,
15958           px_bonus_deprn_exp     IN OUT NOCOPY number,
15959           px_impairment_exp      IN OUT NOCOPY number,
15960           px_reval_deprn_rsv_adj IN out NOCOPY number,
15961           p_mrc_sob_type_code    IN     VARCHAR2,
15962           p_running_mode         IN     NUMBER,
15963           p_used_by_revaluation  IN     NUMBER
15964          , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean IS
15965 
15966    l_dpr_row                  FA_STD_TYPES.dpr_struct;
15967    l_dpr_out                  FA_STD_TYPES.dpr_out_struct;
15968    l_dpr_arr                  FA_STD_TYPES.dpr_arr_type;
15969    l_add_txn_id               number;
15970    l_deprn_basis_rule         varchar2(25);
15971    l_rate_source_rule         varchar2(25);
15972    l_excl_salvage_val_flag    boolean;
15973    l_deprn_last_year_flag     boolean;
15974    l_method_id                integer;
15975    l_cur_rsv                  number;
15976    l_cur_bonus_rsv            number;
15977    l_cur_impairment_rsv       number;
15978    l_cur_ytd                  number;
15979    l_deprn_rsv                number;
15980    l_temp                     number;
15981    l_err_string               varchar2(500);
15982 
15983    -- Added for Dated Adjustment
15984    l_fy_name                  varchar2(45);
15985    l_amortize_per_num         integer;
15986    l_amortize_fy              integer;
15987    l_start_jdate              integer;
15988    l_pers_per_yr              integer;
15989    l_amortization_start_jdate integer;
15990    l_cur_fy                   integer;
15991    l_cur_per_num              integer;
15992    l_last_per_ctr             integer;
15993    l_amortize_per_ctr         integer;
15994    l_adjustment_amount        number;
15995    l_rsv_amount               number;
15996    l_deprn_summary            fa_std_types.fa_deprn_row_struct;
15997    l_dummy_bool               boolean; --Used to call QUERY_BALANCES_INT
15998 
15999    l_temp_deprn_rsv           number;  -- reserve at the beginning of fy
16000    l_cur_total_rsv        number;
16001 
16002    -- Added for bonus rule
16003    l_bonus_rule               FA_BONUS_RULES.Bonus_Rule%TYPE;
16004    l_bonus_deprn_rsv          number;
16005 
16006    l_impairment_rsv           number;
16007 
16008    -- Manual Override
16009    l_use_override             boolean;
16010    l_running_mode             number;
16011    l_used_by_revaluation      number;
16012 
16013    -- Depreciable Basis Rule
16014    l_deprn_used_by_adjustment varchar2(10):= null;
16015 
16016    -- multiple backdate amortization enhancement - begin LSON
16017    cursor amort_date_before_add is
16018    select th.transaction_header_id
16019      from fa_transaction_headers th,
16020           fa_deprn_periods dp
16021     where th.book_type_code = p_asset_hdr_rec.book_type_code
16022       and th.asset_id = p_asset_hdr_rec.asset_id
16023       and th.transaction_type_code = 'ADDITION'
16024       and th.book_type_code = dp.book_type_code
16025       and th.date_effective between dp.period_open_date and
16026             nvl(dp.period_close_date,sysdate)
16027       and px_trans_rec.amortization_start_date < dp.calendar_period_open_date;
16028 
16029 begin  <<faxraf>>
16030 
16031   -- override
16032   if p_running_mode = fa_std_types.FA_DPR_PROJECT then
16033      l_running_mode:= fa_std_types.FA_DPR_PROJECT;
16034   else
16035      l_running_mode:= fa_std_types.FA_DPR_NORMAL;
16036   end if;
16037   -- End of Manual Override
16038 
16039    if (p_log_level_rec.statement_level) then
16040        FA_DEBUG_PKG.ADD
16041                (fname   => 'FA_AMORT_PKG.faxraf',
16042                 element => 'method code',
16043                 value   => px_asset_fin_rec_new.deprn_method_code, p_log_level_rec => p_log_level_rec);
16044        FA_DEBUG_PKG.ADD
16045                (fname   => 'FA_AMORT_PKG.faxraf',
16046                 element => 'life',
16047                 value   => px_asset_fin_rec_new.life_in_months, p_log_level_rec => p_log_level_rec);
16048    end if;
16049 
16050    if (not FA_CACHE_PKG.fazccmt
16051              (px_asset_fin_rec_new.deprn_method_code,
16052               px_asset_fin_rec_new.life_in_months, p_log_level_rec => p_log_level_rec)) then
16053       FA_SRVR_MSG.ADD_MESSAGE(CALLING_FN => 'FA_AMORT_PKG.faxraf',  p_log_level_rec => p_log_level_rec);
16054       return FALSE;
16055    end if;
16056 
16057    l_method_id             := fa_cache_pkg.fazccmt_record.method_id;
16058    l_rate_source_rule      := fa_cache_pkg.fazccmt_record.rate_source_rule;
16059    l_deprn_basis_rule      := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
16060 
16061    if fa_cache_pkg.fazccmt_record.exclude_salvage_value_flag = 'YES' then
16062       l_excl_salvage_val_flag := TRUE;
16063    else
16067    if fa_cache_pkg.fazccmt_record.depreciate_lastyear_flag = 'YES' then
16064       l_excl_salvage_val_flag := FALSE;
16065    end if;
16066 
16068       l_deprn_last_year_flag := TRUE;
16069    else
16070       l_deprn_last_year_flag := FALSE;
16071    end if;
16072 
16073    if (p_log_level_rec.statement_level) then
16074        FA_DEBUG_PKG.ADD
16075                (fname   => 'FA_AMORT_PKG.faxraf',
16076                 element => 'After fazccmt',
16077                 value   => 2, p_log_level_rec => p_log_level_rec);
16078    end if;
16079 
16080    l_err_string := 'FA_AMT_BD_DPR_STRUCT';
16081 
16082    if (p_log_level_rec.statement_level)then
16083        FA_DEBUG_PKG.ADD
16084                (fname   =>' FA_AMORT_PKG.faxraf',
16085                 element => 'deprn_rounding_flag- before faxbds',
16086                 value   => px_asset_fin_rec_new.annual_deprn_rounding_flag, p_log_level_rec => p_log_level_rec);
16087        FA_DEBUG_PKG.ADD
16088                (fname   => 'FA_AMORT_PKG.faxraf',
16089                 element => 'FA_STD TYPE deprn_rnd- before faxbds',
16090                 value   => FA_STD_TYPES.FA_DPR_ROUND_ADJ, p_log_level_rec => p_log_level_rec);
16091    end if;
16092 
16093    if not FA_EXP_PVT.faxbds
16094           (p_asset_hdr_rec      => p_asset_hdr_rec,
16095            px_asset_fin_rec_new => px_asset_fin_rec_new,
16096            p_asset_deprn_rec    => p_asset_deprn_rec,
16097            p_asset_desc_rec     => p_asset_desc_rec,
16098            X_dpr_ptr            => l_dpr_row,
16099            X_deprn_rsv          => l_cur_rsv,
16100            X_bonus_deprn_rsv    => l_cur_bonus_rsv,
16101            X_impairment_rsv     => l_cur_impairment_rsv,
16102            p_amortized_flag     => TRUE,
16103            p_mrc_sob_type_code  => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
16104       fa_srvr_msg.add_message (calling_fn => 'fa_amort_pkg.faxraf',  p_log_level_rec => p_log_level_rec);
16105       return (FALSE);
16106    end if;
16107 
16108    l_cur_rsv := l_cur_rsv + px_reval_deprn_rsv_adj;
16109    l_cur_ytd := l_dpr_row.ytd_deprn;
16110 
16111     -- override
16112    l_dpr_row.used_by_adjustment := TRUE;
16113    l_dpr_row.deprn_override_flag := fa_std_types.FA_NO_OVERRIDE;
16114 
16115    -- l_err_string := 'FA_AMT_CAL_DP_EXP';
16116    if (p_log_level_rec.statement_level) then
16117        FA_DEBUG_PKG.ADD
16118                (fname   => 'FA_AMORT_PKG.faxraf',
16119                 element => 'Before faxcde',
16120                 value   => 3, p_log_level_rec => p_log_level_rec);
16121        FA_DEBUG_PKG.ADD
16122                (fname   => 'FA_AMORT_PKG.faxraf',
16123                 element => 'l_dpr_row.deprn_rounding_flag ',
16124                 value   => l_dpr_row.deprn_rounding_flag, p_log_level_rec => p_log_level_rec);
16125    end if;
16126 
16127    -- Added for Dated Adjustment
16128    if (px_trans_rec.amortization_start_date is not null) then
16129 
16130       l_last_per_ctr := fa_cache_pkg.fazcbc_record.last_period_counter;
16131       l_cur_fy       := fa_cache_pkg.fazcbc_record.current_fiscal_year;
16132       l_cur_per_num  := mod((l_last_per_ctr+1),l_cur_fy);
16133       l_fy_name      := fa_cache_pkg.fazcbc_record.fiscal_year_name;
16134       l_amortization_start_jdate := to_number(to_char(px_trans_rec.amortization_start_date, 'J'));  --BMR
16135 
16136       if not fa_cache_pkg.fazccp(
16137                 l_dpr_row.calendar_type,
16138                 l_fy_name,
16139                 l_amortization_start_jdate,
16140                 l_amortize_per_num,
16141                 l_amortize_fy,
16142                 l_start_jdate, p_log_level_rec => p_log_level_rec) then
16143          fa_srvr_msg.add_message (calling_fn => 'FA_AMORT_PKG.faxraf',  p_log_level_rec => p_log_level_rec);
16144          return (FALSE);
16145       end if;
16146 
16147       if (not((l_cur_fy      = l_amortize_fy) and
16148               (l_cur_per_num = l_amortize_per_num))) then
16149          if not fa_cache_pkg.fazcct (l_dpr_row.calendar_type, p_log_level_rec => p_log_level_rec) then
16150             fa_srvr_msg.add_message (calling_fn => 'FA_AMORT_PKG.faxraf',  p_log_level_rec => p_log_level_rec);
16151             return (FALSE);
16152          end if;
16153 
16154          -- if this transaction is not at current period, set ADJUSTMENT mode
16155          -- on Depreciable basis rule
16156          l_deprn_used_by_adjustment   := 'ADJUSTMENT';
16157 
16158          l_pers_per_yr := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
16159 
16160          if (l_amortize_per_num = 1) then
16161             l_dpr_row.y_end := l_amortize_fy - 1;
16162          else
16163             l_dpr_row.y_end := l_amortize_fy;
16164          end if;
16165 
16166          if (l_amortize_per_num = 1) then
16167             l_dpr_row.p_cl_end := l_pers_per_yr;
16168          else
16169             l_dpr_row.p_cl_end := l_amortize_per_num - 1;
16170          end if;
16171       end if; --if (not((l_cur_fy = l_amortize_fy) and (l_cur_per_num = l_amortize_per_num)))
16172    end if; --if (px_trans_rec.amortization_start_date is not null)
16173 
16174    /* ER 14644811 */
16175    if nvl(px_trans_rec.transaction_key,'XX') = 'PR' then
16176       l_dpr_row.p_cl_end := mod((fa_cache_pkg.fazcbc_record.last_period_counter+1),fa_cache_pkg.fazcbc_record.current_fiscal_year);
16177       l_dpr_row.y_end := fa_cache_pkg.fazcbc_record.current_fiscal_year;
16178    end if;
16179 
16180    -- End Added for Dated Adjustment
16181 
16182    -- bonus: We need to exclude bonus amounts when calculating raf.
16183    --  proved that bonus_rule is excluded, if exist for asset.
16184    l_bonus_rule         := l_dpr_row.bonus_rule;
16185    l_dpr_row.bonus_rule := '';
16186 
16187    -- row below may not be needed.
16188    -- l_bonus_deprn_rsv   := l_dpr_row.bonus_deprn_rsv;
16192    l_cur_total_rsv := l_cur_rsv;
16189    -- l_dpr_row.deprn_rsv is not used.
16190    -- l_deprn_total_rsv   := l_dpr_row.deprn_rsv;
16191    -- l_dpr_row.deprn_rsv := l_dpr_row.deprn_rsv - l_dpr_row.bonus_deprn_rsv;
16193    l_cur_rsv       := l_cur_rsv - nvl(l_dpr_row.bonus_deprn_rsv,0) -
16194                                   nvl(l_dpr_row.impairment_rsv,0);
16195 
16196    l_used_by_revaluation:= 0;
16197 
16198    if p_used_by_revaluation = 1 then
16199       l_used_by_revaluation:= 1;
16200    end if;
16201 
16202    if l_used_by_revaluation = 1 then              --16275774
16203       l_dpr_row.deprn_override_used_by := 'PRE';
16204    end if;
16205 
16206    l_use_override := ((l_rate_source_rule = FA_STD_TYPES.FAD_RSR_FORMULA) or
16207                       (((l_rate_source_rule = FA_STD_TYPES.FAD_RSR_CALC) or
16208                         (l_rate_source_rule = FA_STD_TYPES.FAD_RSR_TABLE)) and
16209                         (l_deprn_basis_rule = FA_STD_TYPES.FAD_DBR_COST)));
16210 
16211    -- Set Tracking related variables
16212    l_dpr_row.tracking_method := p_asset_fin_rec_old.tracking_method;
16213    l_dpr_row.allocate_to_fully_ret_flag := p_asset_fin_rec_old.allocate_to_fully_ret_flag;
16214    l_dpr_row.allocate_to_fully_rsv_flag := p_asset_fin_rec_old.allocate_to_fully_rsv_flag;
16215    l_dpr_row.excess_allocation_option := p_asset_fin_rec_old.excess_allocation_option;
16216    l_dpr_row.depreciation_option := p_asset_fin_rec_old.depreciation_option;
16217    l_dpr_row.member_rollup_flag := p_asset_fin_rec_old.member_rollup_flag;
16218    l_dpr_row.mrc_sob_type_code := p_mrc_sob_type_code;
16219    l_dpr_row.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
16220 
16221    if (p_log_level_rec.statement_level) then
16222       FA_DEBUG_PKG.ADD(fname   => 'FA_AMORT_PKG.faxraf',
16223                        element => 'Before call to faxcde regular case',
16224                        value   => l_dpr_row.bonus_rule, p_log_level_rec => p_log_level_rec);
16225    end if;
16226 
16227    if (not FA_CDE_PKG.faxcde
16228                  (l_dpr_row,
16229                   l_dpr_arr,
16230                   l_dpr_out,
16231                   FA_STD_TYPES.FA_DPR_NORMAL, p_log_level_rec => p_log_level_rec)) then
16232       FA_SRVR_MSG.ADD_MESSAGE
16233             (CALLING_FN => 'FA_AMORT_PKG.faxraf',
16234              NAME=>'FA_AMT_CAL_DP_EXP',  p_log_level_rec => p_log_level_rec);
16235       if (p_log_level_rec.statement_level) then
16236          FA_DEBUG_PKG.ADD
16237                (fname   => 'FA_AMORT_PKG.faxraf',
16238                 element => 'After faxcde',
16239                 value   => 'False', p_log_level_rec => p_log_level_rec);
16240          FA_DEBUG_PKG.ADD
16241                (fname   => 'FA_AMORT_PKG.faxraf',
16242                 element => 'l_dpr_out.rate_adj_factor',
16243                 value   => l_dpr_row.rate_adj_factor, p_log_level_rec => p_log_level_rec);
16244          FA_DEBUG_PKG.ADD
16245                (fname   => 'FA_AMORT_PKG.faxraf',
16246                 element => 'l_dpr_out.adj_capacity',
16247                 value   => l_dpr_row.adj_capacity, p_log_level_rec => p_log_level_rec);
16248          FA_DEBUG_PKG.ADD
16249                (fname   => 'FA_AMORT_PKG.faxraf',
16250                 element => 'l_dpr_out.capacity',
16251                 value   => l_dpr_row.capacity, p_log_level_rec => p_log_level_rec);
16252       end if;
16253       return FALSE;
16254    end if;
16255 
16256    -- Override
16257    fa_std_types.deprn_override_trigger_enabled:= FALSE;
16258    if l_use_override then  -- pass deprn_override_flag to faxiat
16259       px_trans_rec.deprn_override_flag:= l_dpr_out.deprn_override_flag;
16260       if (p_log_level_rec.statement_level) then
16261           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf',
16262                            element=>'deprn_override_flag1',
16263                            value=>l_dpr_out.deprn_override_flag, p_log_level_rec => p_log_level_rec);
16264       end if;
16265    else
16266       -- pass fa_no_override to faxiat
16267       px_trans_rec.deprn_override_flag := fa_std_types.FA_NO_OVERRIDE;
16268       -- update the status fa_deprn_override from 'SELECTED' to 'POST'
16269       UPDATE FA_DEPRN_OVERRIDE
16270          SET status  = 'POST'
16271        WHERE used_by = 'ADJUSTMENT'
16272          AND status  = 'SELECTED'
16273          AND transaction_header_id is null;
16274    end if;
16275 
16276    fa_std_types.deprn_override_trigger_enabled:= TRUE;
16277 
16278    --
16279    -- In most cases, New Adjusted_Cost = New Net Book Value;
16280    --   New Rate_Adjustment_Factor = New Net Book Value / New Deprn_Reserve
16281    --   New Reval_Amortization_Basis = (dpr) Reval_Reserve
16282 
16283    -- bonus between here and next, include bonus amounts.
16284    -- bonus: modified according to decision from domain experts:
16285    --        now using Cost - Total Reserve
16286    --        when calculating adjusted_cost for nbv assets and
16287    --        Cost - Regular Reserve (without bonus deprn res) for cost assets
16288 
16289    -- new_raval_amo_basis and Production rate source rule are
16290    -- not calculated on Depreciable Basis Formula
16291 
16292    px_asset_fin_rec_new.reval_amortization_basis := l_dpr_row.reval_rsv;
16293 
16294    if (l_rate_source_rule = FA_STD_TYPES.FAD_RSR_PROD) then
16295         px_asset_fin_rec_new.rate_adjustment_factor := 1;
16296         px_asset_fin_rec_new.adjusted_capacity
16297                        := px_asset_fin_rec_new.production_capacity -
16298                           l_dpr_out.new_ltd_prod;
16299         px_asset_fin_rec_new.formula_factor := 1;
16300    end if;
16301    ----------------------------------------------
16302    -- Call Depreciable Basis Rule
16303    -- for Amortized Adjustment of current period
16304    ----------------------------------------------
16305 /*Bug8230037 - Added condition based on sorp_enabled_flag
16309    if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS (
16306              - No need to call CALL_DEPRN_BASIS for Double Declining methods */
16307 if (not l_rate_source_rule = FA_STD_TYPES.FAD_RSR_CALC)
16308    and nvl(fa_cache_pkg.fazcbc_record.sorp_enabled_flag,'N') <> 'Y' then
16310                 p_event_type             => 'AMORT_ADJ',
16311                 p_asset_fin_rec_new      => px_asset_fin_rec_new,
16312                 p_asset_fin_rec_old      => p_asset_fin_rec_old,
16313                 p_asset_hdr_rec          => p_asset_hdr_rec,
16314                 p_asset_type_rec         => p_asset_type_rec,
16315                 p_asset_deprn_rec        => p_asset_deprn_rec,
16316                 p_trans_rec              => px_trans_rec,
16317                 p_period_rec             => p_period_rec,
16318                 p_current_total_rsv      => l_cur_total_rsv,
16319                 p_current_rsv            => l_cur_rsv,
16320                 p_current_total_ytd      => l_cur_ytd,
16321                 p_hyp_basis              => l_dpr_out.new_adj_cost,
16322                 p_hyp_total_rsv          => l_dpr_out.new_deprn_rsv,
16323                 p_hyp_rsv                => l_dpr_out.new_deprn_rsv -
16324                                             l_dpr_out.new_bonus_deprn_rsv -
16325                                             nvl(l_dpr_out.new_impairment_rsv,0),
16326                 p_mrc_sob_type_code      => p_mrc_sob_type_code,
16327                 p_used_by_adjustment     => l_deprn_used_by_adjustment,
16328                 px_new_adjusted_cost     => px_asset_fin_rec_new.adjusted_cost,
16329                 px_new_raf               => px_asset_fin_rec_new.rate_adjustment_factor,
16330                 px_new_formula_factor    => px_asset_fin_rec_new.formula_factor,
16331                 p_log_level_rec => p_Log_level_rec)) then
16332 
16333        FA_SRVR_MSG.ADD_MESSAGE
16334                 (CALLING_FN=>'CALL_DEPRN_BASIS', p_log_level_rec => p_log_level_rec);
16335        FA_SRVR_MSG.ADD_MESSAGE
16336                 (CALLING_FN=>'FA_AMORT_PKG.faxraf',
16337                  NAME=>'FA_AMT_CAL_DP_EXP',  p_log_level_rec => p_log_level_rec);
16338        return false;
16339 
16340    end if;
16341 else
16342     px_asset_fin_rec_new.adjusted_cost :=
16343                        px_asset_fin_rec_new.recoverable_cost - l_cur_rsv;
16344     if (sign(px_asset_fin_rec_new.recoverable_cost)<>0)
16345           then
16346            l_temp := px_asset_fin_rec_new.recoverable_cost -
16347                      l_dpr_out.new_deprn_rsv;
16348            px_asset_fin_rec_new.rate_adjustment_factor :=
16349                      l_temp / px_asset_fin_rec_new.recoverable_cost;
16350            px_asset_fin_rec_new.formula_factor := 1;
16351          else
16352            px_asset_fin_rec_new.rate_adjustment_factor :=1;
16353            px_asset_fin_rec_new.formula_factor := 1;
16354     end if;
16355 end if;
16356 
16357 
16358    -- bonus: assigning bonus rule value back.
16359    l_dpr_row.bonus_rule := l_bonus_rule;
16360    -- not yet needed.
16361    --  l_deprn_row.bonus_deprn_rsv := l_bonus_deprn_rsv;
16362    --  l_dpr_row.deprn_rsv is not used.
16363    --  l_dpr_row.deprn_rsv :=  l_deprn_total_rsv;
16364 
16365    l_cur_rsv := l_cur_total_rsv;
16366 
16367    if (px_asset_fin_rec_new.rate_adjustment_factor < 0 OR
16368        px_asset_fin_rec_new.rate_adjustment_factor > 1)then
16369       FA_SRVR_MSG.ADD_MESSAGE
16370             (CALLING_FN => 'FA_AMORT_PKG.faxraf',
16371              NAME=>'FA_AMT_RAF_OUT_OF_RANGE',  p_log_level_rec => p_log_level_rec);
16372       return FALSE;
16373    end if;
16374 
16375    -- Added for Dated Adjustment
16376    px_deprn_exp := 0;
16377 
16378    if (px_trans_rec.amortization_start_date is not null) then
16379       if (not((l_cur_fy = l_amortize_fy) and
16380               (l_cur_per_num = l_amortize_per_num))) then
16381          l_dpr_row.y_begin    := l_amortize_fy;
16382          l_dpr_row.p_cl_begin := l_amortize_per_num;
16383 
16384          if (l_cur_per_num = 1) then
16385             l_dpr_row.y_end := l_cur_fy - 1;
16386          else
16387             l_dpr_row.y_end := l_cur_fy;
16388          end if;
16389 
16390          if (l_cur_per_num = 1) then
16391             l_dpr_row.p_cl_end := l_pers_per_yr;
16392          else
16393             l_dpr_row.p_cl_end := l_cur_per_num - 1;
16394          end if;
16395 
16396          l_dpr_row.rate_adj_factor := px_asset_fin_rec_new.rate_adjustment_factor;
16397 
16398          if (l_cur_fy = l_amortize_fy) then
16399             l_amortize_per_ctr := (l_last_per_ctr + 1) -
16400                                 (l_cur_per_num - l_amortize_per_num);
16401          else
16402             l_amortize_per_ctr := (l_last_per_ctr + 1) -
16403                                   ((l_cur_fy - l_amortize_fy -1) * l_pers_per_yr +
16404                                    (l_pers_per_yr - l_amortize_per_num + l_cur_per_num));
16405          end if;
16406 
16407          l_deprn_summary.asset_id   := p_asset_hdr_rec.asset_id;
16408          l_deprn_summary.book       := p_asset_hdr_rec.book_type_code;
16409          l_deprn_summary.period_ctr := l_amortize_per_ctr - 1;
16410          l_deprn_summary.dist_id    := 0;
16411 
16412          -- Enhancement for BT. YYOON - Start
16413          -- BUG#1148053: Ability to add assets with reserve
16414          -- and amortize over remaining useful life
16415 
16416          if (p_asset_hdr_rec.period_of_addition = 'Y') then
16417             -- bonus added.
16418             if p_mrc_sob_type_code = 'R' then
16419                select deprn_reserve,
16420                       bonus_deprn_reserve,
16421                       ytd_deprn,
16422                       impairment_reserve
16423                  into l_deprn_summary.deprn_rsv,
16424                       l_deprn_summary.bonus_deprn_rsv,
16428                 where asset_id          = p_asset_hdr_rec.asset_id
16425                       l_deprn_summary.ytd_deprn,
16426                       l_deprn_summary.impairment_rsv
16427                  from fa_mc_deprn_summary
16429                   and book_type_code    = p_asset_hdr_rec.book_type_code
16430                   and deprn_source_code = 'BOOKS'
16431                   and set_of_books_id   = p_asset_hdr_rec.set_of_books_id;
16432             else
16433                select deprn_reserve,
16434                       bonus_deprn_reserve,
16435                       ytd_deprn,
16436                       impairment_reserve
16437                  into l_deprn_summary.deprn_rsv,
16438                       l_deprn_summary.bonus_deprn_rsv,
16439                       l_deprn_summary.ytd_deprn,
16440                       l_deprn_summary.impairment_rsv
16441                  from fa_deprn_summary
16442                 where asset_id          = p_asset_hdr_rec.asset_id
16443                   and book_type_code    = p_asset_hdr_rec.book_type_code
16444                   and deprn_source_code = 'BOOKS';
16445             end if;
16446          else
16447             --  backdate amortization enhancement - begin
16448             l_add_txn_id := 0;
16449             if px_trans_rec.amortization_start_date is not null then
16450                open amort_date_before_add;
16451                fetch amort_date_before_add
16452                 into l_add_txn_id;
16453                close amort_date_before_add;
16454 
16455                -- when amortization start date is before the addition date
16456                -- call get_reserve to get the actual reserve from the prorate period to before the
16457                -- amortization period
16458                if (l_add_txn_id > 0) then
16459                   if not (get_reserve
16460                               (px_trans_rec,
16461                                p_asset_hdr_rec,
16462                                p_asset_desc_rec,
16463                                px_asset_fin_rec_new,
16464                                l_add_txn_id,
16465                                l_amortize_fy,
16466                                l_amortize_per_num,
16467                                l_pers_per_yr,
16468                                p_mrc_sob_type_code,
16469                                l_deprn_rsv,
16470                                l_bonus_deprn_rsv,
16471                                l_impairment_rsv,
16472                                p_log_level_rec)) then
16473                      fa_srvr_msg.add_message (calling_fn => 'FA_AMORT_PKG.faxraf',  p_log_level_rec => p_log_level_rec);
16474                      return FALSE;
16475                   end if;
16476                   l_deprn_summary.deprn_rsv       := l_deprn_rsv;
16477                   l_deprn_summary.bonus_deprn_rsv := l_bonus_deprn_rsv;
16478                   l_deprn_summary.impairment_rsv  := l_impairment_rsv;
16479                end if;
16480             end if;
16481 
16482             if (px_trans_rec.amortization_start_date is null or l_add_txn_id = 0) then
16483                -- backdate amortization enhacement - end
16484                FA_QUERY_BALANCES_PKG.QUERY_BALANCES_INT (
16485                   l_deprn_summary,
16486                   'STANDARD',
16487                   FALSE, -- DEBUG
16488                   l_dummy_bool,
16489                   'FA_AMORT_PKG.faxraf',
16490                   -1, p_log_level_rec => p_log_level_rec);
16491 
16492                if not (l_dummy_bool) then
16493                   fa_srvr_msg.add_message (calling_fn => 'FA_AMORT_PKG.faxraf',  p_log_level_rec => p_log_level_rec);
16494                   return (FALSE);
16495                end if;
16496             end if;
16497          end if;
16498 
16499          /**** Enhancement for BT. YYOON - End */
16500 
16501          if p_mrc_sob_type_code = 'R' then
16502             SELECT NVL(SUM(DECODE(ADJUSTMENT_TYPE,
16503                            'EXPENSE',
16504                            DECODE(DEBIT_CREDIT_FLAG,
16505                                   'DR', ADJUSTMENT_AMOUNT,
16506                                   'CR', -1 * ADJUSTMENT_AMOUNT))),0),
16507                    -- backdate amortization enhancement - begin
16508                    NVL(SUM(DECODE(ADJUSTMENT_TYPE,
16509                             'RESERVE',
16510                              DECODE(DEBIT_CREDIT_FLAG,
16511                             'DR', ADJUSTMENT_AMOUNT,
16512                             'CR', -1 * ADJUSTMENT_AMOUNT))),0)
16513                    -- backdate amortization enhancement - end
16514               INTO l_adjustment_amount,
16515                    l_rsv_amount
16516               FROM FA_MC_ADJUSTMENTS
16517              WHERE asset_id                = p_asset_hdr_rec.asset_id
16518                AND book_type_code          = p_asset_hdr_rec.book_type_code
16519                AND period_counter_adjusted = l_amortize_per_ctr
16520                AND SET_OF_BOOKS_ID = p_asset_hdr_rec.set_of_books_id;
16521          else
16522             SELECT NVL(SUM(DECODE(ADJUSTMENT_TYPE,
16523                            'EXPENSE',
16524                            DECODE(DEBIT_CREDIT_FLAG,
16525                                   'DR', ADJUSTMENT_AMOUNT,
16526                                   'CR', -1 * ADJUSTMENT_AMOUNT))),0),
16527                    -- backdate amortization enhancement - begin
16528                    NVL(SUM(DECODE(ADJUSTMENT_TYPE,
16529                             'RESERVE',
16530                              DECODE(DEBIT_CREDIT_FLAG,
16531                             'DR', ADJUSTMENT_AMOUNT,
16532                             'CR', -1 * ADJUSTMENT_AMOUNT))),0)
16533                    -- backdate amortization enhancement - end
16534               INTO l_adjustment_amount,
16535                    l_rsv_amount
16539                AND period_counter_adjusted = l_amortize_per_ctr;
16536               FROM FA_ADJUSTMENTS
16537              WHERE asset_id                = p_asset_hdr_rec.asset_id
16538                AND book_type_code          = p_asset_hdr_rec.book_type_code
16540          end if;
16541 
16542          l_temp_deprn_rsv := l_deprn_summary.deprn_rsv - l_deprn_summary.bonus_deprn_rsv - nvl(l_deprn_summary.impairment_rsv,0);
16543 
16544          -- bonus
16545          l_deprn_summary.deprn_rsv := l_deprn_summary.deprn_rsv +
16546                                       l_adjustment_amount -
16547                                       l_rsv_amount;
16548 
16549          -- alternative flat rate depreciation calculation
16550          if l_amortize_per_num = 1 then
16551             l_deprn_summary.ytd_deprn := l_adjustment_amount;
16552          else
16553             l_deprn_summary.ytd_deprn := l_deprn_summary.ytd_deprn + l_adjustment_amount;
16554          end if;
16555 
16556          -- Add for the Depreciable Basis Formula.
16557 
16558            ----------------------------------------------
16559            -- Call Depreciable Basis Rule
16560            -- for Amortized Adjustment with back dated.
16561            -- Before faxcde calling
16562            ----------------------------------------------
16563 
16564            if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS (
16565                      p_event_type             => 'AMORT_ADJ2',
16566                      p_asset_fin_rec_new      => px_asset_fin_rec_new,
16567                      p_asset_fin_rec_old      => p_asset_fin_rec_old,
16568                      p_asset_hdr_rec          => p_asset_hdr_rec,
16569                      p_asset_type_rec         => p_asset_type_rec,
16570                      p_asset_deprn_rec        => p_asset_deprn_rec,
16571                      p_trans_rec              => px_trans_rec,
16572                      p_period_rec             => p_period_rec,
16573                      p_adjusted_cost          => l_dpr_row.adj_cost,
16574                      p_current_total_rsv      => l_deprn_summary.deprn_rsv,
16575                      p_current_rsv            => l_deprn_summary.deprn_rsv -
16576                                                  l_deprn_summary.bonus_deprn_rsv - nvl(l_deprn_summary.impairment_rsv,0),
16577                      p_current_total_ytd      => l_deprn_summary.ytd_deprn,
16578                      p_hyp_basis              => l_dpr_out.new_adj_cost,
16579                      p_hyp_total_rsv          => l_dpr_out.new_deprn_rsv,
16580                      p_hyp_rsv                => l_dpr_out.new_deprn_rsv -
16581                                                  l_dpr_out.new_bonus_deprn_rsv - nvl(l_dpr_out.new_impairment_rsv,0),
16582                      p_mrc_sob_type_code      => p_mrc_sob_type_code,
16583                      p_used_by_adjustment     => 'ADJUSTMENT',
16584                      px_new_adjusted_cost     => l_dpr_row.adj_cost,
16585                      px_new_raf               => px_asset_fin_rec_new.rate_adjustment_factor,
16586                      px_new_formula_factor    => px_asset_fin_rec_new.formula_factor,
16587                p_log_level_rec => p_log_level_rec)) then
16588              FA_SRVR_MSG.ADD_MESSAGE
16589                 (CALLING_FN=>'CALL_DEPRN_BASIS', p_log_level_rec => p_log_level_rec);
16590              FA_SRVR_MSG.ADD_MESSAGE
16591                 (CALLING_FN=>'FA_AMORT_PKG.faxraf',
16592                  NAME=>'FA_AMT_CAL_DP_EXP',  p_log_level_rec => p_log_level_rec);
16593              return false;
16594 
16595            end if;
16596 
16597         --fix for 2197401. error out if new nbv result in
16598         -- opposite sign of new recoverable cost
16599          if (sign(px_asset_fin_rec_new.recoverable_cost)<>sign(l_dpr_row.adj_cost)) then
16600             FA_SRVR_MSG.ADD_MESSAGE
16601                 (CALLING_FN => 'FA_AMORT_PKG.faxraf',
16602                        NAME=>'FA_WRONG_REC_COST',  p_log_level_rec => p_log_level_rec);
16603             return FALSE;
16604          end if;
16605 
16606          l_dpr_row.deprn_rsv     := l_deprn_summary.deprn_rsv;
16607          l_dpr_row.adj_capacity  := px_asset_fin_rec_new.adjusted_capacity;
16608 
16609          -- Bonus: called when amortization_start_date is not null i.e. backdated
16610          --        adjustment.
16611          --        We probably need to modify to exclude bonus amounts.
16612          l_bonus_rule := l_dpr_row.bonus_rule;
16613 
16614          l_cur_total_rsv := l_cur_rsv;
16615          l_cur_rsv       := l_cur_rsv - nvl(l_dpr_row.bonus_deprn_rsv,0) -
16616                                         nvl(l_dpr_row.impairment_rsv,0);
16617          l_dpr_row.mrc_sob_type_code := p_mrc_sob_type_code;
16618          l_dpr_row.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
16619 
16620          if (not FA_CDE_PKG.faxcde
16621                        (l_dpr_row,
16622                         l_dpr_arr,
16623                         l_dpr_out,
16624                         FA_STD_TYPES.FA_DPR_NORMAL, p_log_level_rec => p_log_level_rec)) then
16625             FA_SRVR_MSG.ADD_MESSAGE
16626                 (CALLING_FN=>'faxcde2', p_log_level_rec => p_log_level_rec);
16627             FA_SRVR_MSG.ADD_MESSAGE
16628                 (CALLING_FN => 'FA_AMORT_PKG.faxraf',
16629                  NAME       => 'FA_AMT_CAL_DP_EXP',  p_log_level_rec => p_log_level_rec);
16630             return FALSE;
16631          end if;
16632 
16633          -- Override
16634          if (p_log_level_rec.statement_level) then
16635             FA_DEBUG_PKG.ADD
16636                 (fname   => 'FA_AMORT_PKG.faxraf',
16637                  element => 'deprn_override_flag2',
16638                  value   => l_dpr_out.deprn_override_flag, p_log_level_rec => p_log_level_rec);
16639          end if;
16640 
16644 
16641          px_trans_rec.deprn_override_flag:= l_dpr_out.deprn_override_flag;
16642 
16643          -- Added for Depreciable Basis Formula.
16645            ----------------------------------------------
16646            -- Call Depreciable Basis Rule
16647            -- for Amortized Adjustment with back dated.
16648            -- After faxcde calling
16649            ----------------------------------------------
16650 
16651            if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS (
16652                      p_event_type             => 'AMORT_ADJ3',
16653                      p_asset_fin_rec_new      => px_asset_fin_rec_new,
16654                      p_asset_fin_rec_old      => p_asset_fin_rec_old,
16655                      p_asset_hdr_rec          => p_asset_hdr_rec,
16656                      p_asset_type_rec         => p_asset_type_rec,
16657                      p_asset_deprn_rec        => p_asset_deprn_rec,
16658                      p_trans_rec              => px_trans_rec,
16659                      p_period_rec             => p_period_rec,
16660                      p_adjusted_cost          => l_dpr_row.adj_cost,
16661                      p_current_rsv            => l_temp_deprn_rsv,
16662                      p_current_total_ytd      => l_deprn_summary.ytd_deprn,
16663                      p_hyp_basis              => l_dpr_out.new_adj_cost,
16664                      p_hyp_total_rsv          => l_dpr_out.new_deprn_rsv,
16665                      p_hyp_rsv                => l_dpr_out.new_deprn_rsv
16666                                                    - l_dpr_out.new_bonus_deprn_rsv - nvl(l_dpr_out.new_impairment_rsv,0),
16667                      p_mrc_sob_type_code      => p_mrc_sob_type_code,
16668                      p_used_by_adjustment     => 'ADJUSTMENT',
16669                      px_new_adjusted_cost     => px_asset_fin_rec_new.adjusted_cost,
16670                      px_new_raf               => px_asset_fin_rec_new.rate_adjustment_factor,
16671                      px_new_formula_factor    => px_asset_fin_rec_new.formula_factor,
16672                p_log_level_rec => p_log_level_rec)) then
16673              FA_SRVR_MSG.ADD_MESSAGE
16674                 (CALLING_FN=>'CALL_DEPRN_BASIS', p_log_level_rec => p_log_level_rec);
16675              FA_SRVR_MSG.ADD_MESSAGE
16676                 (CALLING_FN=>'FA_AMORT_PKG.faxraf',
16677                  NAME=>'FA_AMT_CAL_DP_EXP',  p_log_level_rec => p_log_level_rec);
16678              return false;
16679 
16680            end if;
16681 
16682          -- bonus, added l_dpr_row.bonus_deprn_rsv field to calculation.
16683           px_deprn_exp := (l_dpr_out.new_deprn_rsv - l_deprn_summary.deprn_rsv) -
16684                           (l_cur_rsv - l_deprn_summary.deprn_rsv) -
16685                           nvl(l_dpr_row.bonus_deprn_rsv,0) -
16686                           nvl(l_dpr_row.impairment_rsv,0);
16687 
16688          -- bonus
16689          --  l_dpr_row.bonus_deprn_rsv arrives with value added for bonus_deprn_rsv.
16690          --  the new_bonus_deprn_rsv amount is not vanilla therefore the *2.
16691          --  if it turns out to be wrong calculation, it should be investigated
16692          --  why bonus_deprn_rsv doesn't arrive as expected.
16693          if (l_dpr_row.bonus_rule is not null) then
16694             px_bonus_deprn_exp :=
16695                 (l_dpr_out.new_bonus_deprn_rsv -
16696                  l_deprn_summary.bonus_deprn_rsv) -
16697                  ( (l_dpr_row.bonus_deprn_rsv * 2) - l_deprn_summary.bonus_deprn_rsv);
16698 
16699            if (p_log_level_rec.statement_level) then
16700                FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
16701                                  element=>'px_bonus_deprn_exp ',
16702                                  value=>px_bonus_deprn_exp, p_log_level_rec => p_log_level_rec);
16703                FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
16704                                  element=>'l_dpr_out.new_bonus_deprn_rsv ',
16705                                  value=>l_dpr_out.new_bonus_deprn_rsv, p_log_level_rec => p_log_level_rec);
16706                FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
16707                                  element=>'l_dpr_row.bonus_deprn_rsv',
16708                                  value=>l_dpr_row.bonus_deprn_rsv, p_log_level_rec => p_log_level_rec);
16709                FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
16710                                  element=>'l_dpr_row.bonus_deprn_rsv',
16711                                  value=>l_deprn_summary.bonus_deprn_rsv, p_log_level_rec => p_log_level_rec);
16712             end if;
16713          end if;
16714 
16715          px_impairment_exp :=
16716                 (l_dpr_out.new_impairment_rsv -
16717                  l_deprn_summary.impairment_rsv) -
16718                  ( (l_dpr_row.impairment_rsv * 2) - l_deprn_summary.impairment_rsv);
16719 
16720          -- bonus: assigning bonus rule value back.
16721          l_dpr_row.bonus_rule := l_bonus_rule;
16722          l_cur_rsv        := l_cur_total_rsv;
16723 
16724       end if; --if (not((l_cur_fy = l_amortize_fy) and (l_cur_per_num = l_amortize_per_num)))
16725    end if; --if (px_trans_rec.amortization_start_date is not null)
16726 
16727    return TRUE;
16728 
16729 exception
16730    when others then
16731         FA_SRVR_MSG.ADD_SQL_ERROR
16732              (CALLING_FN => 'FA_AMORT_PKG.faxraf',  p_log_level_rec => p_log_level_rec);
16733         return  FALSE;
16734 end faxraf;
16735 
16736 FUNCTION calc_raf_adj_cost
16737    (p_trans_rec           IN            FA_API_TYPES.trans_rec_type,
16738     p_asset_hdr_rec       IN            FA_API_TYPES.asset_hdr_rec_type,
16739     p_asset_desc_rec      IN            FA_API_TYPES.asset_desc_rec_type,
16740     p_asset_type_rec      IN            FA_API_TYPES.asset_type_rec_type,
16741     p_asset_fin_rec_old   IN            FA_API_TYPES.asset_fin_rec_type,
16742     px_asset_fin_rec_new  IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
16743     p_asset_deprn_rec_adj IN            FA_API_TYPES.asset_deprn_rec_type,
16744     p_asset_deprn_rec_new IN            FA_API_TYPES.asset_deprn_rec_type,
16745     p_period_rec          IN            FA_API_TYPES.period_rec_type,
16746     p_group_reclass_options_rec IN      FA_API_TYPES.group_reclass_options_rec_type default null,
16747     p_mrc_sob_type_code   IN            VARCHAR2
16748    , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) RETURN BOOLEAN IS
16749 
16750 
16751   l_calling_fn     VARCHAR2(50) := 'fa_amort_pvt.calc_raf_adj_cost';
16752 
16753   --+++++++ variables for Eofy Recoverable Cost/Salvage Value +++++++
16754   l_eofy_rec_cost                NUMBER;
16755   l_eofy_sal_val                 NUMBER;
16756 
16757   --++++++++ variables for EOP Recoverable Cost/Salvage Value ++++++++
16758   l_eop_rec_cost                 NUMBER;
16759   l_eop_sal_val                  NUMBER;
16760 
16761   --++++++++ variables for manual override ++++++++
16762   l_rate_source_rule             VARCHAR2(25);
16763   l_deprn_basis_rule             VARCHAR2(25);
16764 
16765   --+++++++++++++++ For calling faxcde +++++++++++++++
16766   l_dpr_in                       FA_STD_TYPES.dpr_struct;
16767   l_dpr_out                      FA_STD_TYPES.dpr_out_struct;
16768   l_dpr_arr                      FA_STD_TYPES.dpr_arr_type;
16769   l_running_mode                 NUMBER;
16770 
16771   l_deprn_reserve                NUMBER;
16772   l_temp_integer                 BINARY_INTEGER;
16773   l_temp_number                  number;
16774 
16775   --+ HHIRAGA added on Oct/Nov in 2003
16776   --++++++++ variables for Trackking Member Feature ++++++++
16777   l_processed_flag               BOOLEAN := FALSE;
16778   l_raf_processed_flag           BOOLEAN := FALSE;
16779   l_current_period_counter       NUMBER;
16780   l_mem_deprn_reserve            NUMBER;
16781   l_mem_eofy_reserve             NUMBER;
16782 
16783   l_recalc_start_fy              NUMBER;
16784   l_recalc_start_period_num      NUMBER;
16785   l_recalc_start_period_counter  NUMBER;
16786   l_no_allocation_for_last       VARCHAR2(1);
16787   l_chk_bs_row_exists            VARCHAR2(1);
16788 
16789 
16790    CURSOR c_chk_bs_row_exists IS
16791       select 'Y'
16792         from fa_books_summary
16793        where book_type_code = p_asset_hdr_rec.book_type_code
16794          and group_asset_id = p_asset_hdr_rec.asset_id
16798   l_asset_fin_rec_adj            FA_API_TYPES.asset_fin_rec_type;
16795          and asset_id <> group_asset_id
16796          and period_counter = l_recalc_start_period_counter - 1;
16797 
16799 
16800   --Bug6988399
16801   Cursor c_year_switch is
16802   select 'N'
16803   from fa_deprn_periods
16804   where book_type_code = p_asset_hdr_rec.book_type_code
16805   and period_counter = p_asset_fin_rec_old.period_counter_fully_reserved
16806   and fiscal_year = p_period_rec.fiscal_year;
16807 
16808   l_year_switch varchar2(1);   --Bug6988399
16809   l_last_trx_count NUMBER := 0; -- Bug 7138798
16810 
16811   calc_err                       EXCEPTION;
16812 
16813     -- Start bug 13086051
16814 
16815    Cursor l_recal_ytd is
16816    Select count (1)
16817    from
16818    fa_deprn_periods fadp,
16819    fa_deprn_periods fadp1,
16820    fa_transaction_headers fatr,
16821    fa_deprn_summary fads
16822    where fadp.book_type_code = p_asset_hdr_rec.book_type_code
16823    and   p_trans_rec.amortization_start_date between fadp.calendar_period_open_date and fadp.calendar_period_close_date
16824    and   fatr.book_type_code = p_asset_hdr_rec.book_type_code
16825    and   fatr.asset_id = p_asset_hdr_rec.asset_id
16826    and   fatr.transaction_type_code = 'ADDITION'
16827    and   fadp1.book_type_code = p_asset_hdr_rec.book_type_code
16828    and   fatr.date_effective between fadp1.period_open_date and fadp1.period_close_date
16829    and   fatr.transaction_date_entered < fadp1.calendar_period_open_date
16830    and   fadp.fiscal_year = fadp1.fiscal_year
16831    and   fads.book_type_code = p_asset_hdr_rec.book_type_code
16832    and   fads.asset_id = p_asset_hdr_rec.asset_id
16833    and   fads.deprn_source_code = 'BOOKS'
16834    and   fads.deprn_reserve = 0;
16835 
16836    l_recal_ytd_count        number := 0;
16837    l_total_ytd              number := 0;
16838 
16839    -- End bug 13086051
16840 
16841 BEGIN
16842 
16843   if (p_log_level_rec.statement_level) then
16844      fa_debug_pkg.add(l_calling_fn, 'Begin', p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
16845   end if;
16846 
16847   -- Skipping call to the function because it is not necessary for straight line
16848   -- or flat-cost with period end balance and use recoverable cost basis rules
16849   -- There are more cases which calling this function unnecessary but not include for this time.
16850   if (not(   (fa_cache_pkg.fazccmt_record.rate_source_rule = fa_std_types.FAD_RSR_CALC)
16851           or ((fa_cache_pkg.fazccmt_record.rate_source_rule = fa_std_types.FAD_RSR_FLAT) and
16852               (fa_cache_pkg.fazccmt_record.deprn_basis_rule = fa_std_types.FAD_DBR_COST) and
16853               (fa_cache_pkg.fazcdbr_record.rule_name  in ('PERIOD END BALANCE','USE RECOVERABLE COST'))))) then
16854 
16855     -- Get Eofy/Eop Recovearble Cost and Salvage Value
16856     if (not FA_CALC_DEPRN_BASIS1_PKG.GET_EOFY_EOP (
16857                 p_asset_id              => p_asset_hdr_rec.asset_id,
16858                 p_book_type_code        => p_asset_hdr_rec.book_type_code,
16859                 p_fiscal_year           => p_period_rec.fiscal_year,
16860                 p_asset_type            => p_asset_type_rec.asset_type,
16861                 p_period_num            => p_period_rec.period_num,
16862                 p_mrc_sob_type_code     => p_mrc_sob_type_code,
16863                 p_set_of_books_id       => p_asset_hdr_rec.set_of_books_id,
16864                 x_eofy_recoverable_cost => l_eofy_rec_cost,
16865                 x_eofy_salvage_value    => l_eofy_sal_val,
16866                 x_eop_recoverable_cost  => l_eop_rec_cost,
16867                 x_eop_salvage_value     => l_eop_sal_val, p_log_level_rec => p_log_level_rec)) then
16868       if (p_log_level_rec.statement_level) then
16869         fa_debug_pkg.add(l_calling_fn, 'Error calling',
16870                          'FA_CALC_DEPRN_BASIS1_PKG.GET_EOFY_EOP', p_log_level_rec => p_log_level_rec);
16871       end if;
16872 
16873       raise calc_err;
16874 
16875     end if;
16876   end if;
16877 
16878   if (l_eofy_rec_cost is null) then
16879     l_eofy_rec_cost := 0;
16880     l_eofy_sal_val := 0;
16881   end if;
16882 
16883   if (l_eop_rec_cost is null) then
16884     l_eop_rec_cost := 0;
16885     l_eop_sal_val := 0;
16886   end if;
16887 
16888   -- Skipping call to faxcde because it is unnecessary for flat-cost with period end balance,
16889   -- use recoverable cost, period average, and beginning balance basis rules
16890   -- There are more cases which calling this function unnecessary but not include for this time.
16891   if (not(((fa_cache_pkg.fazccmt_record.rate_source_rule = fa_std_types.FAD_RSR_FLAT) and
16892            (fa_cache_pkg.fazccmt_record.deprn_basis_rule = fa_std_types.FAD_DBR_COST) and
16893            (fa_cache_pkg.fazcdbr_record.rule_name  in ('PERIOD END BALANCE', 'PERIOD END AVERAGE',
16894                                                       'USE RECOVERABLE COST', 'BEGINNING PERIOD'))
16895 --Bug 6312866           or fa_cache_pkg.fazccmt_record.rate_source_rule = fa_std_types.FAD_RSR_PROD
16896         ))) then
16897 
16898       l_dpr_in.asset_num := p_asset_desc_rec.asset_number;
16899       l_dpr_in.calendar_type := fa_cache_pkg.fazcbc_record.deprn_calendar;
16900       l_dpr_in.book := p_asset_hdr_rec.book_type_code;
16901       l_dpr_in.asset_id := p_asset_hdr_rec.asset_id;
16902       l_dpr_in.adj_cost := px_asset_fin_rec_new.recoverable_cost;
16903       l_dpr_in.rec_cost := px_asset_fin_rec_new.recoverable_cost;
16904       l_dpr_in.reval_amo_basis := px_asset_fin_rec_new.reval_amortization_basis;
16905       l_dpr_in.deprn_rsv := 0;
16906       l_dpr_in.reval_rsv := p_asset_deprn_rec_new.reval_deprn_reserve;
16907       l_dpr_in.adj_rate := px_asset_fin_rec_new.adjusted_rate;
16911       l_dpr_in.ltd_prod := 0;
16908       l_dpr_in.rate_adj_factor := px_asset_fin_rec_new.rate_adjustment_factor;
16909       l_dpr_in.capacity := px_asset_fin_rec_new.production_capacity;
16910       l_dpr_in.adj_capacity := px_asset_fin_rec_new.adjusted_capacity;
16912 
16913       l_dpr_in.ceil_name := px_asset_fin_rec_new.ceiling_name;
16914       l_dpr_in.bonus_rule := px_asset_fin_rec_new.bonus_rule;
16915       l_dpr_in.method_code := px_asset_fin_rec_new.deprn_method_code;
16916       l_dpr_in.jdate_in_service :=
16917                     to_number(to_char(px_asset_fin_rec_new.date_placed_in_service, 'J'));
16918       l_dpr_in.prorate_jdate := to_number(to_char(px_asset_fin_rec_new.prorate_date, 'J'));
16919       l_dpr_in.deprn_start_jdate := to_number(to_char(px_asset_fin_rec_new.deprn_start_date, 'J'));
16920       l_dpr_in.jdate_retired := 0; -- don't know this is correct or not
16921       l_dpr_in.ret_prorate_jdate := 0; -- don't know this is correct or not
16922       l_dpr_in.life := px_asset_fin_rec_new.life_in_months;
16923 
16924       l_dpr_in.rsv_known_flag := TRUE;
16925       l_dpr_in.salvage_value := px_asset_fin_rec_new.salvage_value;
16926       l_dpr_in.pc_life_end := px_asset_fin_rec_new.period_counter_life_complete;
16927       l_dpr_in.adj_rec_cost := px_asset_fin_rec_new.adjusted_recoverable_cost;
16928       l_dpr_in.prior_fy_exp := p_asset_deprn_rec_new.prior_fy_expense;
16929       l_dpr_in.deprn_rounding_flag := px_asset_fin_rec_new.annual_deprn_rounding_flag;
16930       l_dpr_in.deprn_override_flag := p_trans_rec.deprn_override_flag;
16931       l_dpr_in.used_by_adjustment := TRUE;
16932       l_dpr_in.ytd_deprn := p_asset_deprn_rec_new.ytd_deprn;
16933       l_dpr_in.short_fiscal_year_flag := px_asset_fin_rec_new.short_fiscal_year_flag;
16934       l_dpr_in.conversion_date := px_asset_fin_rec_new.conversion_date;
16935       l_dpr_in.prorate_date := px_asset_fin_rec_new.prorate_date;
16936       l_dpr_in.orig_deprn_start_date := px_asset_fin_rec_new.orig_deprn_start_date;
16937       l_dpr_in.old_adj_cost := px_asset_fin_rec_new.old_adjusted_cost;
16938       l_dpr_in.formula_factor := nvl(px_asset_fin_rec_new.formula_factor,
16939                                      p_asset_fin_rec_old.formula_factor);
16940       l_dpr_in.bonus_deprn_exp := p_asset_deprn_rec_new.bonus_deprn_amount;
16941       l_dpr_in.bonus_ytd_deprn := p_asset_deprn_rec_new.bonus_ytd_deprn;
16942       l_dpr_in.bonus_deprn_rsv := p_asset_deprn_rec_new.bonus_deprn_reserve;
16943       l_dpr_in.prior_fy_bonus_exp := p_asset_deprn_rec_new.prior_fy_bonus_expense;
16944       l_dpr_in.impairment_exp := p_asset_deprn_rec_new.impairment_amount;
16945       l_dpr_in.ytd_impairment := p_asset_deprn_rec_new.ytd_impairment;
16946       l_dpr_in.impairment_rsv := p_asset_deprn_rec_new.impairment_reserve;
16947 
16948       l_dpr_in.tracking_method := px_asset_fin_rec_new.tracking_method;
16949       l_dpr_in.allocate_to_fully_ret_flag := px_asset_fin_rec_new.allocate_to_fully_ret_flag;
16950       l_dpr_in.allocate_to_fully_rsv_flag := px_asset_fin_rec_new.allocate_to_fully_rsv_flag;
16951       l_dpr_in.excess_allocation_option := px_asset_fin_rec_new.excess_allocation_option;
16952       l_dpr_in.depreciation_option := px_asset_fin_rec_new.depreciation_option;
16953       l_dpr_in.member_rollup_flag := px_asset_fin_rec_new.member_rollup_flag;
16954       l_dpr_in.over_depreciate_option := px_asset_fin_rec_new.over_depreciate_option;
16955       l_dpr_in.mrc_sob_type_code := p_mrc_sob_type_code;
16956       l_dpr_in.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
16957 
16958       --
16959       -- Not for what-if yet
16960       --
16961       l_running_mode := fa_std_types.FA_DPR_NORMAL;
16962 
16963       if not fa_cache_pkg.fazccp(fa_cache_pkg.fazcbc_record.prorate_calendar,
16964                                  fa_cache_pkg.fazcbc_record.fiscal_year_name,
16965                                  l_dpr_in.prorate_jdate,
16966                                  l_temp_number,
16967                                  l_dpr_in.y_begin,
16968                                  l_temp_integer, p_log_level_rec => p_log_level_rec) then
16969          if (p_log_level_rec.statement_level) then
16970             fa_debug_pkg.add(l_calling_fn, 'Error calling',
16971                              'fa_cache_pkg.fazccp', p_log_level_rec => p_log_level_rec);
16972             fa_debug_pkg.add(l_calling_fn, 'fa_cache_pkg.fazcbc_record.prorate_calendar',
16973                              fa_cache_pkg.fazcbc_record.prorate_calendar, p_log_level_rec => p_log_level_rec);
16974             fa_debug_pkg.add(l_calling_fn, 'fa_cache_pkg.fazcbc_record.fiscal_year_name',
16975                              fa_cache_pkg.fazcbc_record.fiscal_year_name, p_log_level_rec => p_log_level_rec);
16976          end if;
16977 
16978          raise calc_err;
16979       end if;
16980 
16981 
16982       l_dpr_in.p_cl_begin := 1;
16983 
16984       if (p_period_rec.period_num = 1) then
16985          l_dpr_in.y_end := p_period_rec.fiscal_year - 1;
16986          l_dpr_in.p_cl_end := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
16987       else
16988          l_dpr_in.y_end := p_period_rec.fiscal_year;
16989          l_dpr_in.p_cl_end := p_period_rec.period_num - 1;
16990       end if;
16991 
16992       l_dpr_in.rate_adj_factor := 1;
16993 
16994       -- manual override
16995       if fa_cache_pkg.fa_deprn_override_enabled then
16996          if (not fa_cache_pkg.fazccmt(
16997                      px_asset_fin_rec_new.deprn_method_code,
16998                      px_asset_fin_rec_new.life_in_months, p_log_level_rec => p_log_level_rec)) then
16999             if (p_log_level_rec.statement_level) then
17000                fa_debug_pkg.add(l_calling_fn, 'Error calling',
17001                                 'fa_cache_pkg.fazccmt', p_log_level_rec => p_log_level_rec);
17002             end if;
17003 
17004             raise calc_err;
17005          end if;
17006 
17007          l_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
17008          l_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
17009 
17010          -- update override status only if satisfies condintion,
17011          -- otherwise do not update status when calculating RAF
17012          -- 1. formula; or
17013          -- 2. (calc or table) and cost
17014 
17015          l_dpr_in.update_override_status :=
17016                ((l_rate_source_rule = fa_std_types.FAD_RSR_FORMULA)
17017                OR (((l_rate_source_rule = fa_std_types.FAD_RSR_CALC)
17018                OR (l_rate_source_rule = fa_std_types.FAD_RSR_TABLE))
17019                AND (l_deprn_basis_rule = fa_std_types.FAD_DBR_COST)));
17020       end if;
17021 
17022             --* HHIRAGA modified on Oct/Nov in 2003.
17023             -- Changed parameter to period counter when the recalculation of
17024             -- RAF needs.
17025             -- This function will populates all member assets to be used to
17026             -- hypothetical allocation internally.
17027             --
17028             --+++++++ Call Tracking Function to populate Member in case ALLOCATE ++++++
17029             if p_asset_type_rec.asset_type = 'GROUP' and
17030                nvl(l_dpr_in.tracking_method,'OTHER') = 'ALLOCATE' then
17031 
17032                l_raf_processed_flag := TRUE;
17033                l_dpr_in.tracking_method := NULL;
17034 
17035 /*
17036                if not FA_TRACK_MEMBER_PVT.get_member_at_start(
17037                        p_period_rec => l_period_rec,
17038                        p_trans_rec => p_trans_rec,
17039                        p_asset_hdr_rec => p_asset_hdr_rec,
17040                        p_asset_fin_rec => px_asset_fin_rec_new,
17041                        p_dpr_in => l_dpr_in,
17042                        p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
17043                   if (p_log_level_rec.statement_level) then
17044                     fa_debug_pkg.add(l_calling_fn, 'Error calling', 'FA_TRACK_MEMBER_PVT.get_member_at_start',  p_log_level_rec => p_log_level_rec);
17045                   end if;
17046 
17047                   raise calc_failed;
17048 
17049                end if;
17050 */
17051             end if; -- nvl(l_dpr_in.tracking_method,'OTHER') = 'ALLOCATE'
17052             -- End of HHIRAGA
17053 
17054       --+++++++ Call Depreciation engine for rate adjustment factor +++++++
17055       if not FA_CDE_PKG.faxcde(l_dpr_in,
17056                                l_dpr_arr,
17057                                l_dpr_out,
17058                                l_running_mode, p_log_level_rec => p_log_level_rec) then
17059          if (p_log_level_rec.statement_level) then
17060             fa_debug_pkg.add(l_calling_fn, 'Error calling',
17061                              'FA_CDE_PKG.faxcde', p_log_level_rec => p_log_level_rec);
17062          end if;
17063 
17064          raise calc_err;
17065       end if;
17066 
17067       -- Bug 4129984.
17068 
17069       if ((fa_cache_pkg.fazcbc_record.AMORTIZE_REVAL_RESERVE_FLAG='YES') and
17070           (px_asset_fin_rec_new.Reval_Amortization_Basis is not null) and
17071           (p_asset_type_rec.asset_type = 'CAPITALIZED') and
17072           (px_asset_fin_rec_new.group_asset_id is null)) then
17073 
17074          px_asset_fin_rec_new.reval_amortization_basis := p_asset_deprn_rec_new.reval_deprn_reserve;
17075       end if;
17076 
17077    else -- in the case of skipping faxcde call
17078      l_dpr_out.new_adj_cost := px_asset_fin_rec_new.recoverable_cost;
17079      l_dpr_out.new_deprn_rsv := p_asset_deprn_rec_new.deprn_reserve;
17080      l_dpr_out.new_bonus_deprn_rsv := p_asset_deprn_rec_new.bonus_deprn_reserve;
17081      l_dpr_out.new_impairment_rsv := p_asset_deprn_rec_new.impairment_reserve;
17082    end if;
17083 
17084 
17085    --
17086    -- Bug4213715: new reserve has already include adj_reserve in case of group
17087    --             reclass with enter option.
17088    --
17089    if (p_asset_type_rec.asset_type = 'GROUP') and
17090       (p_trans_rec.transaction_key = 'GC') then
17091       -- reclass w/ enter option at group level
17092 
17093       l_deprn_reserve := nvl(p_asset_deprn_rec_new.deprn_reserve, 0);
17094 
17095    elsif (p_asset_type_rec.asset_type <> 'GROUP') and
17096          (nvl(p_asset_fin_rec_old.group_asset_id, 0) <>
17097                nvl(px_asset_fin_rec_new.group_asset_id, 0)) then
17098 
17099       l_deprn_reserve := nvl(p_asset_deprn_rec_new.deprn_reserve, 0);
17100    -- Bug 8605817: In case of Period of addition, p_asset_deprn_rec_new
17101    -- contains the new reserve
17102    elsif ( G_release <> 11 and p_asset_hdr_rec.period_of_addition = 'Y') then
17103       l_deprn_reserve := nvl(p_asset_deprn_rec_new.deprn_reserve, 0);
17104    else
17105       -- Ordinary behavior
17106       l_deprn_reserve := p_asset_deprn_rec_new.deprn_reserve +
17107                          nvl(p_asset_deprn_rec_adj.deprn_reserve, 0);
17108    end if;
17109 
17110 
17111    -- code fix for bug no.3630495. added the following line to calculate the adjusted capacity
17112    if (nvl(px_asset_fin_rec_new.tracking_method, 'NO TRACK') = 'ALLOCATE') and    -- ENERGY
17113       (fa_cache_pkg.fazcdrd_record.rule_name = 'ENERGY PERIOD END BALANCE') then  -- ENERGY
17114       null;
17115    else
17116       px_asset_fin_rec_new.adjusted_capacity:=px_asset_fin_rec_new.production_capacity- nvl(l_dpr_out.new_ltd_prod, 0);
17117    end if;
17118 
17119    if (p_asset_hdr_rec.period_of_addition = 'Y') and
17120       (p_asset_type_rec.asset_type = 'GROUP') then
17121       px_asset_fin_rec_new.eofy_reserve := nvl(px_asset_fin_rec_new.eofy_reserve,
17122                                                p_asset_deprn_rec_new.deprn_reserve -
17123                                                p_asset_deprn_rec_new.ytd_deprn);
17124    else
17125 
17126       -- Bug 7138798: Check for any transaction in current fiscal year
17127       select count(*)
17128       into   l_last_trx_count
17129       from   fa_books bks,
17130              fa_deprn_periods dp
17131       where  bks.asset_id = p_asset_hdr_rec.asset_id
17132       and    bks.book_type_code = p_asset_hdr_rec.book_type_code
17133       and    bks.date_ineffective  is null
17134       and    dp.book_type_code = p_asset_hdr_rec.book_type_code
17135       and    bks.date_effective between
17136                  dp.period_open_date and nvl(dp.period_close_date, sysdate)
17137       and    dp.fiscal_year = fa_cache_pkg.fazcbc_record.current_fiscal_year;
17138 
17139 
17140       -- Fix for Bug#4541399: We have to activate this code
17141       -- only when px_asset_fin_rec_new.eofy_reserve is NULL
17142       -- Bug 7138798: If there are no transactions in curent fiscal year
17143       -- and if depreciate_flag is 'NO' then recalculate eofy_reserve
17144       if (px_asset_fin_rec_new.eofy_reserve is null) or
17145          ((l_last_trx_count = 0 )  and
17146           (px_asset_fin_rec_new.depreciate_flag = 'NO')) then
17147          px_asset_fin_rec_new.eofy_reserve := p_asset_deprn_rec_new.deprn_reserve -
17148                                               p_asset_deprn_rec_new.ytd_deprn;
17149       end if;
17150 
17151    end if;
17152 
17153    -- HHIRAGA
17154    --+++++++ Call Tracking Function to populate Member in case ALLOCATE ++++++
17155    if (l_raf_processed_flag) then
17156      l_dpr_in.tracking_method := 'ALLOCATE';
17157      l_raf_processed_flag := FALSE;
17158    end if;
17159 
17160    -- HHIRAGA
17161    --+++++++ Call Populate_member_assets_table function
17162    if nvl(l_dpr_in.tracking_method,'OTHER') = 'ALLOCATE' then
17163      fa_track_member_pvt.p_track_member_table.delete;
17164      fa_track_member_pvt.p_track_mem_index_table.delete;
17165      if (p_log_level_rec.statement_level) then
17166        fa_debug_pkg.add(l_calling_fn, 'Delete p_track_member_table', '+++', p_log_level_rec => p_log_level_rec);
17167      end if;
17168    end if;
17169 
17170     --Bug6988399 Added the code to populate the eofy reserve if the asset has become non fully reserved after
17171     -- deprn limit change. Note this has been done only for deprn limit change and the condition can be removed
17172     -- in future if other cases come
17173     if ((p_asset_fin_rec_old.period_counter_fully_reserved is not null)
17174     and ( p_asset_fin_rec_old.period_counter_fully_reserved <> nvl(px_asset_fin_rec_new.period_counter_fully_reserved,0) )
17175     and  (p_asset_fin_rec_old.allowed_deprn_limit_amount <> px_asset_fin_rec_new.allowed_deprn_limit_amount)
17176     and  fa_cache_pkg.fazccmt_record.deprn_basis_rule = 'NBV') then
17177          open c_year_switch;
17178          fetch c_year_switch into l_year_switch;
17179          if c_year_switch%NOTFOUND then
17180                         px_asset_fin_rec_new.eofy_reserve := p_asset_deprn_rec_new.deprn_reserve;
17181          end if;
17182         close c_year_switch;
17183     end if;
17184 
17185     -- Start Bug 13086051
17186 
17187     l_total_ytd := p_asset_deprn_rec_new.ytd_deprn;
17188     if NVL(fa_cache_pkg.fazcdrd_record.use_eofy_reserve_flag,'N') = 'Y' then
17189        open  l_recal_ytd;
17190        fetch l_recal_ytd into l_recal_ytd_count;
17191        close l_recal_ytd;
17192        IF ((l_recal_ytd_count > 0) and (l_total_ytd = l_deprn_reserve))then
17193           l_total_ytd := l_deprn_reserve - px_asset_fin_rec_new.eofy_reserve;
17194        END IF;
17195     end if;
17196 
17197     -- End Bug 13086051
17198 
17199    if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS
17200                        (p_event_type             => 'AMORT_ADJ',
17201                         p_asset_fin_rec_new      => px_asset_fin_rec_new,
17202                         p_asset_fin_rec_old      => p_asset_fin_rec_old,
17203                         p_asset_hdr_rec          => p_asset_hdr_rec,
17204                         p_asset_type_rec         => p_asset_type_rec,
17205                         p_asset_deprn_rec        => p_asset_deprn_rec_new,
17206                         p_trans_rec              => p_trans_rec,
17207                         p_period_rec             => p_period_rec,
17208                         p_current_total_rsv      => l_deprn_reserve,
17209                         p_current_rsv            => l_deprn_reserve -
17210                                                     p_asset_deprn_rec_new.bonus_deprn_reserve - nvl(p_asset_deprn_rec_new.impairment_reserve,0),
17211                         p_current_total_ytd      => l_total_ytd, -- Bug 13086051  p_asset_deprn_rec_new.ytd_deprn,
17212                         p_adj_reserve            => p_asset_deprn_rec_adj.deprn_reserve,
17213                         p_hyp_basis              => l_dpr_out.new_adj_cost,
17214                         p_hyp_total_rsv          => l_dpr_out.new_deprn_rsv,
17215                         p_hyp_rsv                => l_dpr_out.new_deprn_rsv -
17216                                                     l_dpr_out.new_bonus_deprn_rsv - nvl(l_dpr_out.new_impairment_rsv,0),
17217                         p_eofy_recoverable_cost  => l_eofy_rec_cost,
17218                         p_eop_recoverable_cost   => l_eop_rec_cost,
17219                         p_eofy_salvage_value     => l_eofy_sal_val,
17220                         p_eop_salvage_value      => l_eop_sal_val,
17221                         p_mrc_sob_type_code      => p_mrc_sob_type_code,
17222                         p_used_by_adjustment     => 'ADJUSTMENT',
17223                         px_new_adjusted_cost     => px_asset_fin_rec_new.adjusted_cost,
17224                         px_new_raf               => px_asset_fin_rec_new.rate_adjustment_factor,
17225                         px_new_formula_factor    => px_asset_fin_rec_new.formula_factor,
17226                         p_log_level_rec => p_log_level_rec)) then
17227       raise calc_err;
17228    end if;
17229    /*Bug# 10106735 */
17230    if px_asset_fin_rec_new.rate_adjustment_factor = 0 then
17231       if (p_log_level_rec.statement_level) then
17232          fa_debug_pkg.add(l_calling_fn, 'After CALL_DEPRN_BASIS', 'New RAF is zero setting value of old RAF',  p_log_level_rec => p_log_level_rec);
17233       end if;
17234       px_asset_fin_rec_new.rate_adjustment_factor := p_asset_fin_rec_old.rate_adjustment_factor;
17235    end if;
17236     --Bug6736655
17237     --Calling the createGroup function if the Group asset has been backdated during period of addition
17238     if (p_trans_rec.transaction_subtype = 'AMORTIZED') and
17239          (p_trans_rec.transaction_type_code = 'GROUP ADDITION' )
17240          and p_asset_fin_rec_old.date_placed_in_service > px_asset_fin_rec_new.date_placed_in_service
17241          then
17242 
17243           if not createGroup(
17244                          p_trans_rec            => p_trans_rec,
17245                          p_asset_hdr_rec        => p_asset_hdr_rec,
17246                          p_asset_type_rec       => p_asset_type_rec,
17247                          p_period_rec           => p_period_rec,
17248                          p_asset_fin_rec        => px_asset_fin_rec_new,
17249                          p_asset_deprn_rec      => p_asset_deprn_rec_adj,
17250                          p_mrc_sob_type_code    => p_mrc_sob_type_code,
17251                          p_calling_fn           => l_calling_fn,
17252                p_log_level_rec => p_log_level_rec) then
17253 
17254          if (p_log_level_rec.statement_level) then
17255             fa_debug_pkg.add(l_calling_fn, 'calling FA_AMORT_PVT.createGroup', 'FAILED',  p_log_level_rec => p_log_level_rec);
17256          end if;
17257 
17258          return (FALSE);
17259 
17260         end if;
17261 
17262 
17263     end if;
17264    --++ HHIRAGA
17265    --++++++++ tracking is allocate case, create bs table
17266    if nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE' then
17267 
17268       if not FA_TRACK_MEMBER_PVT.update_member_books(p_trans_rec => p_trans_rec,
17269                                                      p_asset_hdr_rec => p_asset_hdr_rec,
17270                                                      p_dpr_in => l_dpr_in,
17271                                                      p_mrc_sob_type_code => p_mrc_sob_type_code, p_log_level_rec => p_log_level_rec) then
17272          if (p_log_level_rec.statement_level) then
17273             fa_debug_pkg.add(l_calling_fn, 'Error calling',
17274                              'FA_TRACK_MEMBER_PVT.update_member_books',  p_log_level_rec => p_log_level_rec);
17275          end if;
17276 
17277          raise calc_err;
17278       end if;
17279 
17280       if (p_log_level_rec.statement_level) then
17281          fa_debug_pkg.add(l_calling_fn, 'fa_track_member_pvt.create_update_bs_table',
17282                                         'called',  p_log_level_rec => p_log_level_rec);
17283       end if;
17284 
17285       if not FA_TRACK_MEMBER_PVT.create_update_bs_table(p_trans_rec => p_trans_rec,
17286                                                         p_book_type_code => p_asset_hdr_rec.book_type_code,
17287                                                         p_group_asset_id => p_asset_hdr_rec.asset_id,
17288                                                         p_mrc_sob_type_code => p_mrc_sob_type_code, --Bug 8941132
17289                                                         p_sob_id            => p_asset_hdr_rec.set_of_books_id, --Bug 8941132
17290                                                         p_calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec) then
17291          if (p_log_level_rec.statement_level) then
17292             fa_debug_pkg.add(l_calling_fn, 'Error calling',
17293                              'FA_TRACK_MEMBER_PVT.create_update_bs_table',  p_log_level_rec => p_log_level_rec);
17294          end if;
17295 
17296          raise calc_err;
17297       end if;
17298 
17299       fa_track_member_pvt.p_track_member_eofy_table.delete;
17300       fa_track_member_pvt.p_track_member_table.delete;
17301       fa_track_member_pvt.p_track_mem_index_table.delete;
17302 
17303       if (p_log_level_rec.statement_level) then
17304          fa_debug_pkg.add(l_calling_fn, 'fa_track_member_pvt.p_track_member_eofy_table/member_table',
17305                                         'deleted',  p_log_level_rec => p_log_level_rec);
17306       end if;
17307 
17308    end if; -- nvl(px_asset_fin_rec_new.tracking_method,'OTHER') = 'ALLOCATE'
17309    -- End of HHIRAGA
17310 
17311    -- Bug7715880: BP fix for bug7446301.  Removed tracking method condition so that process
17312    -- will satisfy following if condition even if the asset type is not GROUP
17313    -- if (nvl(px_asset_fin_rec_new.tracking_method, 'NO TRACK') = 'ALLOCATE') and    -- ENERGY
17314    IF  (fa_cache_pkg.fazcdrd_record.rule_name = 'ENERGY PERIOD END BALANCE') and  -- ENERGY
17315       (fa_cache_pkg.fazccmt_record.rate_source_rule = FA_STD_TYPES.FAD_RSR_PROD) then
17316       px_asset_fin_rec_new.adjusted_capacity := nvl(px_asset_fin_rec_new.production_capacity, 0) -
17317                                                 nvl(p_asset_deprn_rec_new.ltd_production, 0);
17318    end if;
17319 
17320    --
17321    -- Purpose of calling CurrentPeriodAdj is to reflect the trx to
17322    -- FA_BOOKS_SUMMARY.  Not for calculating a catch-up.
17323    -- Call CurrentPeriodAdj if:
17324    --   This is group asset.
17325    --   This is current period trx
17326    --   This is not member ret/rein, group reclass or group reclas with enter.
17327    --
17328    if (p_asset_type_rec.asset_type = 'GROUP') and
17329       (nvl(p_trans_rec.amortization_start_date,
17330            p_trans_rec.transaction_date_entered) >=
17331        p_period_rec.calendar_period_open_date) and
17332       (p_trans_rec.transaction_key not in ('MR', 'MS', 'GC') or
17333        ((p_trans_rec.transaction_key = 'GC' and
17334          nvl(p_group_reclass_options_rec.group_reclass_type, 'NULL') = 'MANUAL'))) then
17335 
17336 --tk_util.DumpTrxRec(p_trans_rec, 'p_trans_rec');
17337 --tk_util.DumpFinRec(p_asset_fin_rec_old, 'old fin_rec');
17338 --tk_util.DumpFinRec(px_asset_fin_rec_new, 'new_fin_rec');
17339 --tk_util.DumpDeprnRec(p_asset_deprn_rec_adj, 'adj deprn');
17340 
17341       populate_fin_rec(
17342              p_trans_rec          => p_trans_rec,
17343              p_asset_fin_rec_old  => p_asset_fin_rec_old,
17344              p_asset_fin_rec_new  => px_asset_fin_rec_new,
17345              x_asset_fin_rec_adj  => l_asset_fin_rec_adj,
17346 p_log_level_rec => p_Log_level_rec);
17347 
17348       if (not  CurrentPeriodAdj(
17349                     p_trans_rec           => p_trans_rec,
17350                     p_asset_hdr_rec       => p_asset_hdr_rec,
17351                     p_asset_type_rec      => p_asset_type_rec,
17352                     p_asset_fin_rec_adj   => l_asset_fin_rec_adj,
17353                     p_asset_fin_rec_old   => p_asset_fin_rec_old,
17354                     px_asset_fin_rec_new  => px_asset_fin_rec_new,
17355                     p_period_rec          => p_period_rec,
17356                     p_asset_deprn_rec_adj => p_asset_deprn_rec_adj,
17357                     p_proceeds_of_sale    => 0,
17358                     p_cost_of_removal     => 0,
17359                     p_calling_fn          => l_calling_fn,
17360                     p_mrc_sob_type_code   => p_mrc_sob_type_code,
17361 p_log_level_rec => p_Log_level_rec)) then
17362          raise calc_err;
17363       end if;
17364 
17365    end if; -- (p_asset_type_rec.asset_type = 'GROUP')
17366 
17367    if (p_log_level_rec.statement_level) then
17368       fa_debug_pkg.add(l_calling_fn, 'End', px_asset_fin_rec_new.adjusted_cost, p_log_level_rec => p_log_level_rec);
17369    end if;
17370 
17371    return true;
17372 
17373 EXCEPTION
17374    when calc_err then
17375       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
17376       return false;
17377 
17378    when others then
17379       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
17380       return false;
17381 
17382 END calc_raf_adj_cost;
17383 
17384 FUNCTION check_dpis_change (
17385               p_book_type_code                     VARCHAR2,
17386               p_transaction_header_id              NUMBER,
17387               p_group_asset_id                     NUMBER,
17388               x_asset_fin_rec           OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
17389               x_period_counter_out      OUT NOCOPY NUMBER,
17390               p_mrc_sob_type_code                  VARCHAR2, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
17391 RETURN BOOLEAN is
17392 
17393    l_calling_fn varchar2(100) := 'FA_AMORT_PVT.check_dpis_change';
17394 
17395    CURSOR c_check_dpis_change is
17396        select inbk.cost
17397             , inbk.cip_cost
17398             , inbk.salvage_value
17399             , inbk.allowed_deprn_limit_amount
17400             , bs.period_counter
17401        from   fa_books inbk
17402             , fa_books outbk
17403             , fa_transaction_headers inth
17404             , fa_transaction_headers outth
17405             , fa_books_summary bs
17406        where  inbk.transaction_header_id_in   = p_transaction_header_id
17407        and    outbk.asset_id                  = inbk.asset_id
17408        and    outbk.book_type_code            = p_book_type_code
17409        and    outbk.transaction_header_id_out = p_transaction_header_id
17410        and    outbk.transaction_header_id_in  = outth.transaction_header_id
17411        and    bs.asset_id                     = p_group_asset_id
17412        and    bs.book_type_code               = p_book_type_code
17413        and    nvl(outth.amortization_start_date,
17414                    outth.transaction_date_entered) between bs.calendar_period_open_date
17415                                                        and bs.calendar_period_close_date
17416        and    inbk.cost                       = outbk.cost
17417        and    nvl(inbk.salvage_value, 0)              = nvl(outbk.salvage_value, 0)
17418        and    nvl(inbk.allowed_deprn_limit_amount, 0) = nvl(outbk.allowed_deprn_limit_amount, 0)
17419        and    inbk.date_placed_in_service     <> outbk.date_placed_in_service
17420 ;
17421    chk_err   exception;
17422 BEGIN
17423    if (p_log_level_rec.statement_level) then
17424       fa_debug_pkg.add(l_calling_fn, 'Begin', p_transaction_header_id, p_log_level_rec => p_log_level_rec);
17425    end if;
17426 
17427    OPEN c_check_dpis_change;
17428    FETCH c_check_dpis_change into x_asset_fin_rec.cost
17429                                 , x_asset_fin_rec.cip_cost
17430                                 , x_asset_fin_rec.salvage_value
17431                                 , x_asset_fin_rec.allowed_deprn_limit_amount
17432                                 , x_period_counter_out;
17433 
17434    CLOSE c_check_dpis_change;
17435 
17436    if (p_log_level_rec.statement_level) then
17437       fa_debug_pkg.add(l_calling_fn, 'x_period_counter_out', x_period_counter_out, p_log_level_rec => p_log_level_rec);
17438    end if;
17439 
17440 
17441    if (p_log_level_rec.statement_level) then
17442       fa_debug_pkg.add(l_calling_fn, 'x_period_counter_out', x_period_counter_out, p_log_level_rec => p_log_level_rec);
17443       fa_debug_pkg.add(l_calling_fn, 'x_asset_fin_rec.cost', x_asset_fin_rec.cost, p_log_level_rec => p_log_level_rec);
17444       fa_debug_pkg.add(l_calling_fn, 'End', x_asset_fin_rec.cost, p_log_level_rec => p_log_level_rec);
17445    end if;
17446 
17447    return true;
17448 
17449 EXCEPTION
17450    when chk_err then
17451       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
17452       return false;
17453 
17454    when others then
17455       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
17456       return false;
17457 
17458 END check_dpis_change;
17459 
17460 FUNCTION check_member_existence (
17461                  p_asset_hdr_rec       IN            FA_API_TYPES.asset_hdr_rec_type, p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type)
17462 RETURN BOOLEAN is
17463 
17464    l_calling_fn varchar2(100) := 'FA_AMORT_PVT.check_member_existence';
17465 
17466    CURSOR c_mem_exists IS
17467       select transaction_header_id_in
17468       from   fa_books
17469       where  group_asset_id = p_asset_hdr_rec.asset_id
17470       and    book_type_code = p_asset_hdr_rec.book_type_code
17471       and    transaction_header_id_out is null;
17472 
17473    l_temp_thid   NUMBER;
17474 
17475 BEGIN
17476    if (p_log_level_rec.statement_level) then
17477       fa_debug_pkg.add(l_calling_fn, 'Begin', p_asset_hdr_rec.asset_id, p_log_level_rec => p_log_level_rec);
17478    end if;
17479 
17480    OPEN c_mem_exists;
17481    FETCH c_mem_exists INTO l_temp_thid;
17482 
17483    if (p_log_level_rec.statement_level) then
17484       fa_debug_pkg.add(l_calling_fn, 'Begin', c_mem_exists%notfound);
17485    end if;
17486 
17487    if (c_mem_exists%notfound) then
17488       CLOSE c_mem_exists;
17489       return true;
17490    else
17491       CLOSE c_mem_exists;
17492       return false;
17493    end if;
17494 
17495 EXCEPTION
17496    when others then
17497       if (p_log_level_rec.statement_level) then
17498          fa_debug_pkg.add(l_calling_fn, 'Error', sqlerrm, p_log_level_rec => p_log_level_rec);
17499       end if;
17500 
17501       fa_srvr_msg.add_sql_error(calling_fn => l_calling_fn, p_log_level_rec => p_log_level_rec);
17502       return false;
17503 
17504 END check_member_existence;
17505 
17506 
17507 END FA_AMORT_PVT;