DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_AMORT_PKG

Source


1 PACKAGE BODY FA_AMORT_PKG as
2 /* $Header: FAAMRT1B.pls 120.11 2005/07/25 10:05:02 yyoon ship $ */
3 
4 adj_ptr_faxiat		FA_ADJUST_TYPE_PKG.fa_adj_row_struct;
5 
6 
7 FUNCTION faxiat (X_fin_ptr   FA_STD_TYPES.fin_info_struct,
8 		 X_deprn_exp  number,
9 		 X_bonus_deprn_exp number,
10 		 X_ann_adj_amt  number,
11 		 X_ccid	   number,
12 		 X_last_update_date date default sysdate,
13 		 X_last_updated_by number default -1,
14 		 X_last_update_login number default -1,
15                  X_mrc_sob_type_code varchar2,
16 		 p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type default null)
17 return boolean
18 is
19 h_book_type_code	fa_book_controls.book_type_code%type;
20 h_category_id  		fa_category_books.category_id%type;
21 h_cost_source		varchar2(30);
22 h_cost_acct_type	varchar2(30);
23 h_clearing_acct_type 	varchar2(30);
24 h_cost_acct       	varchar2(30);
25 h_clearing_acct   	varchar2(30);
26 h_expense_acct_type	varchar2(30);
27 h_expense_acct		varchar2(30);
28 h_expense_source	varchar2(30);
29 BEGIN  <<faxiat>>
30 h_book_type_code:=X_fin_ptr.book;
31 h_category_id:=X_fin_ptr.category_id;
32  if (p_log_level_rec.statement_level)
33  then
34     FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxiat',
35 		 element=>'X_last_update_date',
36 		  value=>X_last_update_date,
37               	 p_log_level_rec => p_log_level_rec);
38  end if;
39 adj_ptr_faxiat.transaction_header_id := X_fin_ptr.transaction_id;
40 adj_ptr_faxiat.asset_invoice_id := 0;
41 adj_ptr_faxiat.asset_id := X_fin_ptr.asset_id;
42 adj_ptr_faxiat.book_type_code := h_book_type_code;
43 adj_ptr_faxiat.period_counter_created
44 		:= X_fin_ptr.period_ctr;
45 adj_ptr_faxiat.period_counter_adjusted
46 		:= X_fin_ptr.period_ctr;
47 adj_ptr_faxiat.current_units := X_fin_ptr.units;
48 adj_ptr_faxiat.selection_mode
49 		:= FA_ADJUST_TYPE_PKG.FA_AJ_ACTIVE;
50 adj_ptr_faxiat.selection_thid := 0;
51 adj_ptr_faxiat.selection_retid := 0;
52 adj_ptr_faxiat.flush_adj_flag := FALSE;
53 adj_ptr_faxiat.gen_ccid_flag := TRUE;
54 adj_ptr_faxiat.code_combination_id := 0;
55 adj_ptr_faxiat.distribution_id := 0;
56 adj_ptr_faxiat.last_update_date := X_last_update_date;
57 adj_ptr_faxiat.leveling_flag := TRUE;
58 
59 -- override
60  adj_ptr_faxiat.deprn_override_flag := '';
61 
62  if not fa_cache_pkg.fazccb(h_book_type_code,
63  			    h_category_id,
64 			    p_log_level_rec
65                  	   )
66  then
67      FA_SRVR_MSG.ADD_MESSAGE
68             (CALLING_FN => 'FA_AMORT_PKG.faxiat',
69 		 p_log_level_rec => p_log_level_rec);
70 
71      return  FALSE;
72  end if;
73 
74  if (X_fin_ptr.asset_type = 'CIP')
75  then
76     h_cost_source := 'CIP ADJUSTMENT';
77     h_cost_acct_type := 'CIP_COST_ACCT';
78     h_clearing_acct_type := 'CIP_CLEARING_ACCT';
79     h_cost_acct := FA_CACHE_PKG.fazccb_record.cip_cost_acct;
80     h_clearing_acct := FA_CACHE_PKG.fazccb_record.cip_clearing_acct;
81  else
82     h_cost_source := 'ADJUSTMENT';
83     h_cost_acct_type := 'ASSET_COST_ACCT';
84     h_clearing_acct_type := 'ASSET_CLEARING_ACCT';
85     h_cost_acct := FA_CACHE_PKG.fazccb_record.asset_cost_acct;
86     h_clearing_acct:=FA_CACHE_PKG.fazccb_record.asset_clearing_acct;
87  end if;
88  adj_ptr_faxiat.annualized_adjustment:=0;
89  adj_ptr_faxiat.source_type_code := h_cost_source;
90  adj_ptr_faxiat.adjustment_amount
91 	:= X_fin_ptr.cost - X_fin_ptr.old_cost;
92   if (adj_ptr_faxiat.adjustment_amount) <>0
93   then
94      adj_ptr_faxiat.adjustment_type:='COST';
95    if (adj_ptr_faxiat.adjustment_amount) > 0
96    then
97      adj_ptr_faxiat.debit_credit_flag :='DR';
98    else
99      adj_ptr_faxiat.adjustment_amount
100 	:= (-1) * adj_ptr_faxiat.adjustment_amount;
101      adj_ptr_faxiat.debit_credit_flag :='CR';
102    end if;
103    adj_ptr_faxiat.account:=h_cost_acct;
104    adj_ptr_faxiat.account_type:=h_cost_acct_type;
105    adj_ptr_faxiat.mrc_sob_type_code := X_mrc_sob_type_code;
106 
107    --if (p_log_level_rec.statement_level)
108    --then
109       FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxiat',
110 		 element=>'Adjustment Amount.. before faxinaj',
111 		  value=>adj_ptr_faxiat.adjustment_amount,
112               p_log_level_rec => p_log_level_rec);
113    --end if;
114    if (not FA_INS_ADJUST_PKG.faxinaj(adj_ptr_faxiat,
115 		                     X_last_update_date=>X_last_update_date,
116 		    		     X_last_updated_by=>X_last_updated_by,
117 		    		     X_last_update_login=>X_last_update_login,
118 				      p_log_level_rec => p_log_level_rec))
119    then
120      FA_SRVR_MSG.ADD_MESSAGE
121             (CALLING_FN => 'FA_AMORT_PKG.faxiat',
122               p_log_level_rec => p_log_level_rec);
123      return  FALSE;
124    end if;
125    if (p_log_level_rec.statement_level)
126    then
127       FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxiat',
128 		 element=>'Amount Inserted',
129 		  value=>adj_ptr_faxiat.amount_inserted,
130               p_log_level_rec => p_log_level_rec);
131    end if;
132 
133    adj_ptr_faxiat.adjustment_type:='COST CLEARING';
134    if (adj_ptr_faxiat.debit_credit_flag='DR')
135    then
136       adj_ptr_faxiat.debit_credit_flag :='CR';
137    else
138        adj_ptr_faxiat.debit_credit_flag :='DR';
139    end if;
140    adj_ptr_faxiat.account:=h_clearing_acct;
141    adj_ptr_faxiat.account_type:=h_clearing_acct_type;
142    adj_ptr_faxiat.mrc_sob_type_code := X_mrc_sob_type_code;
143 
144    if (X_ccid<>0)
145    then
146      adj_ptr_faxiat.code_combination_id := X_ccid;
147      adj_ptr_faxiat.gen_ccid_flag :=FALSE;
148    end if;
149       FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxiat',
150 		 element=>'Adjustment Amount.. before faxinaj CCLEARI',
151 		  value=>adj_ptr_faxiat.adjustment_amount,
152               p_log_level_rec => p_log_level_rec);
153 
154    if (not FA_INS_ADJUST_PKG.faxinaj(adj_ptr_faxiat,
155 		    		     X_last_update_date=>X_last_update_date,
156 		    		     X_last_updated_by=>X_last_updated_by,
157 		    		     X_last_update_login=>X_last_update_login,
158 				      p_log_level_rec => p_log_level_rec))
159    then
160      FA_SRVR_MSG.ADD_MESSAGE
161             (CALLING_FN => 'FA_AMORT_PKG.faxiat',
162 		 p_log_level_rec => p_log_level_rec);
163 
164      return  FALSE;
165    end if;
166 
167    if (X_ccid<>0)
168    then
169      adj_ptr_faxiat.code_combination_id := 0;
170      adj_ptr_faxiat.gen_ccid_flag :=TRUE;
171    end if;
172  end if;   /* adjustment_amount<>0  */
173 
174  h_expense_acct_type := 'DEPRN_EXPENSE_ACCT';
175  h_expense_acct := FA_CACHE_PKG.fazccb_record.deprn_expense_acct;
176  h_expense_source:='DEPRECIATION';
177  adj_ptr_faxiat.source_type_code:=h_expense_source;
178  adj_ptr_faxiat.adjustment_type:='EXPENSE';
179  adj_ptr_faxiat.debit_credit_flag:='DR';
180  adj_ptr_faxiat.account:=h_expense_acct;
181  adj_ptr_faxiat.account_type:=h_expense_acct_type;
182  adj_ptr_faxiat.flush_adj_flag:=TRUE;
183  adj_ptr_faxiat.adjustment_amount:=X_deprn_exp;
184  adj_ptr_faxiat.annualized_adjustment:=X_ann_adj_amt;
185  adj_ptr_faxiat.mrc_sob_type_code := X_mrc_sob_type_code;
186 
187 /* manual override  */
188 
189 if X_fin_ptr.deprn_override_flag in (fa_std_types.FA_OVERRIDE_DPR,
190                                      fa_std_types.FA_OVERRIDE_BONUS,
191                                      fa_std_types.FA_OVERRIDE_DPR_BONUS) then
192    adj_ptr_faxiat.deprn_override_flag := 'Y';
193 else
194    adj_ptr_faxiat.deprn_override_flag := '';
195 end if;
196 /* End of Manual override */
197 
198    if (p_log_level_rec.statement_level)
199    then
200       FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxiat',
201 		 element=>'Adj-AMOUNT-BEFORE DEPRN_EXPENSE',
202 		  value=>adj_ptr_faxiat.adjustment_amount,
203               p_log_level_rec => p_log_level_rec);
204    end if;
205   if (adj_ptr_faxiat.adjustment_amount<>0)
206   then
207     if (not FA_INS_ADJUST_PKG.faxinaj(adj_ptr_faxiat,
208 		    		      X_last_update_date=>X_last_update_date,
209 		    		      X_last_updated_by=>X_last_updated_by,
210 		    		      X_last_update_login=>X_last_update_login,
211 				      p_log_level_rec => p_log_level_rec))
212     then
213      FA_SRVR_MSG.ADD_MESSAGE
214             (CALLING_FN => 'FA_AMORT_PKG.faxiat',
215 		 p_log_level_rec => p_log_level_rec);
216      return  FALSE;
217     end if;
218   else
219     adj_ptr_faxiat.transaction_header_id:=0;
220     if (not FA_INS_ADJUST_PKG.faxinaj(adj_ptr_faxiat,
221 		    		      X_last_update_date=>X_last_update_date,
222 		    		      X_last_updated_by=>X_last_updated_by,
223 		    		      X_last_update_login=>X_last_update_login,
224 				      p_log_level_rec => p_log_level_rec))
225     then
226      FA_SRVR_MSG.ADD_MESSAGE
227             (CALLING_FN => 'FA_AMORT_PKG.faxiat',
228 		 p_log_level_rec => p_log_level_rec);
229      return  FALSE;
230     end if;
231   end if;
232 
233 
234 
235 -- bonus.  Verfied that this gets inserted.
236 --         Now need to calculate
237 -- always DR, if reduced cost adjustment, negative adjustment_amount.
238 -- IF statement evaluates if there is any bonus expense to insert into fa_adjustments.
239 if nvl(X_bonus_deprn_exp,0) <> 0 then
240 
241  h_expense_acct_type := 'BONUS_DEPRN_EXPENSE_ACCT';
242 -- account could be derived from somewhere else, derive from account generat.
243  h_expense_acct := FA_CACHE_PKG.fazccb_record.bonus_deprn_expense_acct;
244  h_expense_source:='DEPRECIATION';
245  adj_ptr_faxiat.source_type_code:=h_expense_source;
246  adj_ptr_faxiat.adjustment_type:='BONUS EXPENSE';
247  adj_ptr_faxiat.debit_credit_flag:='DR';
248  adj_ptr_faxiat.account:=h_expense_acct;
249  adj_ptr_faxiat.account_type:=h_expense_acct_type;
250  adj_ptr_faxiat.flush_adj_flag:=TRUE;
251 
252 -- override
253  if X_fin_ptr.deprn_override_flag in (
254                                fa_std_types.FA_OVERRIDE_BONUS,
255                                fa_std_types.FA_OVERRIDE_DPR_BONUS) then
256     adj_ptr_faxiat.deprn_override_flag := 'Y';
257  else
258     adj_ptr_faxiat.deprn_override_flag := '';
259  end if;
260 
261 -- bonus
262  adj_ptr_faxiat.adjustment_amount:=X_bonus_deprn_exp;
263  adj_ptr_faxiat.annualized_adjustment:=X_ann_adj_amt;
264  adj_ptr_faxiat.mrc_sob_type_code := X_mrc_sob_type_code;
265 
266    if (p_log_level_rec.statement_level)
267    then
268       FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxiat',
269 		 element=>'Adj-AMOUNT-BEFORE BONUS DEPRN_EXPENSE',
270 		  value=>adj_ptr_faxiat.adjustment_amount,
271               p_log_level_rec => p_log_level_rec);
272    end if;
273   if (adj_ptr_faxiat.adjustment_amount<>0)
274   then
275     if (not FA_INS_ADJUST_PKG.faxinaj(adj_ptr_faxiat,
276 		    		      X_last_update_date=>X_last_update_date,
277 		    		      X_last_updated_by=>X_last_updated_by,
278 		    		      X_last_update_login=>X_last_update_login,
279 				      p_log_level_rec => p_log_level_rec))
280     then
281      FA_SRVR_MSG.ADD_MESSAGE
282             (CALLING_FN => 'FA_AMORT_PKG.faxiat',
283               p_log_level_rec => p_log_level_rec);
284      return  FALSE;
285     end if;
286   else
287     adj_ptr_faxiat.transaction_header_id:=0;
288     if (not FA_INS_ADJUST_PKG.faxinaj(adj_ptr_faxiat,
289 		    		      X_last_update_date=>X_last_update_date,
290 		    		      X_last_updated_by=>X_last_updated_by,
291 		    		      X_last_update_login=>X_last_update_login,
292 				      p_log_level_rec => p_log_level_rec))
293     then
294      FA_SRVR_MSG.ADD_MESSAGE
295             (CALLING_FN => 'FA_AMORT_PKG.faxiat',
296               p_log_level_rec => p_log_level_rec);
297      return  FALSE;
298     end if;
299   end if;
300 
301 end if;
302 
303 
304 
305    if (p_log_level_rec.statement_level)
306    then
307       FA_DEBUG_PKG.ADD(fname	=>'FA_AMORT_PKG.faxiat',
308 		       element	=>'Amount Inserted',
309 		       value	=>adj_ptr_faxiat.amount_inserted,
310 	              p_log_level_rec => p_log_level_rec);
311    end if;
312   return TRUE;
313  exception
314   when others then
315      FA_SRVR_MSG.ADD_SQL_ERROR (
316 		CALLING_FN => 'FA_AMORT_PKG.faxiat'
317 		,p_log_level_rec => p_log_level_rec);
318      return  FALSE;
319  END faxiat;
320 
321 FUNCTION faxraf(X_fin_info_ptr          in out nocopy FA_STD_TYPES.fin_info_struct,
322                  X_new_raf              in out nocopy number,
323                  X_new_adj_cost         in out nocopy number,
324                  X_new_adj_capacity     in out nocopy number,
325                  X_new_reval_amo_basis  in out nocopy number,
326                  X_new_salvage_value    in out nocopy number,
327                  X_reval_deprn_rsv_adj  in out nocopy number,
328 		 X_new_formula_factor	in out nocopy number,
329 		 X_bonus_deprn_exp	in out nocopy number,
330                  X_mrc_sob_type_code    in     varchar2,
331 		 p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type default null)
332 
333 return boolean is
334  h_dpr_row	FA_STD_TYPES.dpr_struct;
335  h_dpr_out	FA_STD_TYPES.dpr_out_struct;
336  h_dpr_arr	FA_STD_TYPES.dpr_arr_type;
337  h_add_txn_id   number;
338  h_deprn_basis_rule	varchar2(25);
339  h_rate_source_rule     varchar2(25);
340  h_excl_salvage_val_flag boolean;
341  h_deprn_last_year_flag  boolean;
342  h_method_id		 integer;
343  h_dist_book		varchar2(15);
344  h_current_rsv		number;
345  h_deprn_rsv            number;
346  h_current_ytd          number;
347  h_temp			number;
348  h_user_id		number;
349  h_login_id		number;
350  h_err_string		varchar2(500);
351  d_new_raf		number;
352  d_new_adj_cost		number;
353  d_new_reval_amo_basis  number;
354  d_current_rsv		number;
355  d_reval_deprn_rsv_adj  number;
356  d_rec_cost		number;
357  d_new_deprn_rsv	number;
358 -- Added for Dated Adjustment
359  fy_name                varchar2(45);
360  amortize_per_num       integer;
361  amortize_fy            integer;
362  start_jdate            integer;
363  pers_per_yr            integer;
364  amortization_start_jdate integer;
365  cur_fy                 integer;
366  cur_per_num            integer;
367  last_per_ctr           integer;
368  amortize_per_ctr       integer;
369  adjustment_amount      number;
370  h_rsv_amount           number;
371  deprn_summary          fa_std_types.fa_deprn_row_struct;
372  h_dummy_bool           boolean;--Used to call QUERY_BALANCES_INT
373 -- End  Added for Dated Adjustment
374  temp_deprn_rsv		number;  -- reserve at the beginning of fy
375 -- Added for bonus rule
376  h_bonus_rule 		FA_BONUS_RULES.Bonus_Rule%TYPE;
377  h_bonus_deprn_rsv      number;
378 -- not used.
379 --  h_deprn_total_rsv 	number;
380  h_current_total_rsv 	number;
381 
382 /**** Enhancement for BT. YYOON - Start */
383 check_flag  varchar2(3);
384 
385 /* Manual Override */
386 use_override boolean;
387 running_mode     number;
388 used_by_revaluation number;
389 
390 -- Added for Depreciable Basis Formula
391  h_rule_in		FA_STD_TYPES.fa_deprn_rule_in_struct;
392  h_rule_out		FA_STD_TYPES.fa_deprn_rule_out_struct;
393 
394 cursor check_period_of_addition is
395 select 'Y' -- 'Y' if the current period of the asset is period of addition.
396 from dual
397 where not exists
398 (select 'x'
399  from fa_deprn_summary
400  where asset_id = X_fin_info_ptr.asset_id
401    and book_type_code = X_fin_info_ptr.book
402    and deprn_amount <> 0
403    and deprn_source_code = 'DEPRN'
404 );
405 /* Enhancement for BT. YYOON - End */
406 
407 
408 -- multiple backdate amortization enhancement - begin LSON
409 cursor amort_date_before_add is
410 select th.transaction_header_id
411 from  fa_transaction_headers th, fa_deprn_periods dp
412 where th.book_type_code = X_fin_info_ptr.book
413 and   th.asset_id = X_fin_info_ptr.asset_id
414 and   th.transaction_type_code = 'ADDITION'
415 and   th.book_type_code = dp.book_type_code
416 and   th.date_effective between dp.period_open_date and
417           nvl(dp.period_close_date,sysdate)
418 and   X_fin_info_ptr.amortization_start_date < dp.calendar_period_open_date;
422    --
419 
420 --  multiple backdate amortization enhancement - end LSON
421 
423    -- This is to check whether the backdated transaction
424    -- is dated in the same fy as fy of addition.
425    -- This is to determine whether BOOKS row of FA_DEPRN_SUMMARY
426    -- can be used or not
427    --
428    cursor c_check_fiscal_year (c_thid number) is
429    select 1
430    from   fa_transaction_headers th
431         , fa_deprn_periods dp
432         , fa_fiscal_year fy
433         , fa_calendar_periods cp
434    where  th.transaction_header_id = c_thid
435    and    th.date_effective between dp.period_open_date and
436              nvl(dp.period_close_date,sysdate)
437    and    dp.book_type_code = X_fin_info_ptr.book
438    and    fy.fiscal_year_name = fa_cache_pkg.fazcbc_record.fiscal_year_name
439    and    cp.start_date =  fy.start_date
440    and    cp.period_num = 1
441    and    cp.calendar_type = fa_cache_pkg.fazcbc_record.deprn_calendar
442    and    dp.calendar_period_open_date between fy.start_date and fy.end_date
443    and    X_fin_info_ptr.amortization_start_date between fy.start_date and fy.end_date;
444 
445    --
446    -- Following two cursorss are to get eofy_reserve
447    --
448    cursor c_get_reserve is
449    select deprn_reserve - ytd_deprn
450         , bonus_deprn_reserve - bonus_ytd_deprn
451    from   fa_deprn_summary
452    where  book_type_code = X_fin_info_ptr.book
453    and    asset_id = X_fin_info_ptr.asset_id
454    and    deprn_source_code = 'BOOKS';
455 
456    cursor c_get_mc_reserve is
457    select deprn_reserve - ytd_deprn
458         , bonus_deprn_reserve - bonus_ytd_deprn
459    from   fa_deprn_summary_mrc_v
460    where  book_type_code = X_fin_info_ptr.book
461    and    asset_id = X_fin_info_ptr.asset_id
462    and    deprn_source_code = 'BOOKS';
463 
464    l_same_fy   NUMBER;
465 
466  begin  <<faxraf>>
467 
468   -- override
469   if X_fin_info_ptr.running_mode = fa_std_types.FA_DPR_PROJECT then
470      running_mode:= fa_std_types.FA_DPR_PROJECT;
471   else
472      running_mode:= fa_std_types.FA_DPR_NORMAL;
473   end if;
474   -- End of Manual Override
475 
476  if (p_log_level_rec.statement_level)
477     then
478        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
479                 element=>'method code',
480                 value=>X_fin_info_ptr.method_code,
481               p_log_level_rec => p_log_level_rec);
482        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
483                 element=>'life',
484                 value=>X_fin_info_ptr.life,
485               p_log_level_rec => p_log_level_rec);
486     end if;
487 
488  if (not FA_CACHE_PKG.fazccmt(X_fin_info_ptr.method_code,
489 		 X_fin_info_ptr.life
490 		 ,p_log_level_rec => p_log_level_rec))
491  then
492        FA_SRVR_MSG.ADD_MESSAGE
493             (CALLING_FN => 'FA_AMORT_PKG.faxraf',
494 		 p_log_level_rec => p_log_level_rec);
495 	return FALSE;
496  end if;
497 
498  h_method_id             := fa_cache_pkg.fazccmt_record.method_id;
499  h_rate_source_rule      := fa_cache_pkg.fazccmt_record.rate_source_rule;
500  h_deprn_basis_rule      := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
501 
502  if fa_cache_pkg.fazccmt_record.exclude_salvage_value_flag = 'YES' then
503     h_excl_salvage_val_flag := TRUE;
504  else
505     h_excl_salvage_val_flag := FALSE;
506  end if;
507 
508  if fa_cache_pkg.fazccmt_record.depreciate_lastyear_flag = 'YES' then
509     h_deprn_last_year_flag := TRUE;
510  else
511     h_deprn_last_year_flag := FALSE;
512  end if;
513 
514     if (p_log_level_rec.statement_level)
515     then
516        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
517                 element=>'After fazccmt',
518                 value=>2,
519               p_log_level_rec => p_log_level_rec);
520     end if;
521 
522  h_err_string := 'FA_AMT_BD_DPR_STRUCT';
523 
524  if (p_log_level_rec.statement_level)
525     then
526        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
527                 element=>'deprn_rounding_flag- before faxbds',
528                 value=>X_fin_info_ptr.deprn_rounding_flag,
529               p_log_level_rec => p_log_level_rec);
530        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
531                 element=>'FA_STD TYPE deprn_rnd- before faxbds',
532                 value=>FA_STD_TYPES.FA_DPR_ROUND_ADJ,
533               p_log_level_rec => p_log_level_rec);
534     end if;
535 
536 /*
537  if (not FA_EXP_PKG.faxbds(fin_info_ptr=>X_fin_info_ptr,
538 	 		   dpr_ptr=>h_dpr_row,
539 			   dist_book=>h_dist_book,
540 			   deprn_rsv=>h_current_rsv,
541 			   amortized_flag=>TRUE
542 			   ,p_log_level_rec => p_log_level_rec))
543  then
544 */
545     if (not fa_exp_pkg.faxbds(X_fin_info_ptr,
546 			      h_dpr_row,
547 			      h_dist_book,
548 			      h_current_rsv,
549 			      TRUE,
550                               X_mrc_sob_type_code
551                               ,p_log_level_rec => p_log_level_rec))
552     then
553         FA_SRVR_MSG.ADD_MESSAGE
554             (CALLING_FN => 'FA_AMORT_PKG.faxraf',
555 		NAME=>'FA_AMT_BD_DPR_STRUCT',
556 		 p_log_level_rec => p_log_level_rec);
557 	return FALSE;
558  end if;
562 
559  h_current_rsv := h_current_rsv + X_reval_deprn_rsv_adj;
560  h_current_ytd:= h_dpr_row.ytd_deprn;
561 
563  -- override
564  h_dpr_row.used_by_adjustment := TRUE;
565  h_dpr_row.deprn_override_flag := fa_std_types.FA_NO_OVERRIDE;
566  -- End of override
567 
568  h_err_string := 'FA_AMT_CAL_DP_EXP';
569     if (p_log_level_rec.statement_level)
570     then
571        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
572                 element=>'Before faxcde',
573                 value=>3,
574               p_log_level_rec => p_log_level_rec);
575        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
576                 element=>'h_dpr_row.deprn_rounding_flag ',
577                 value=>h_dpr_row.deprn_rounding_flag,
578               p_log_level_rec => p_log_level_rec);
579     end if;
580 
581 -- Added for Dated Adjustment
582  if (X_fin_info_ptr.amortization_start_date is not null) then
583     -- removed fazcbc cache call as it should already be loaded - BMR
584     last_per_ctr := fa_cache_pkg.fazcbc_record.last_period_counter;
585     cur_fy := fa_cache_pkg.fazcbc_record.current_fiscal_year;
586     cur_per_num := mod((last_per_ctr+1),cur_fy);
587     amortization_start_jdate := to_number(to_char(X_fin_info_ptr.amortization_start_date, 'J'));
588     fy_name := fa_cache_pkg.fazcbc_record.fiscal_year_name;
589     if not fa_cache_pkg.fazccp (
590         h_dpr_row.calendar_type, fy_name,amortization_start_jdate,
591         amortize_per_num, amortize_fy, start_jdate, p_log_level_rec) then
592         fa_srvr_msg.add_message (calling_fn => 'FA_AMORT_PKG.faxraf',
593 		 p_log_level_rec => p_log_level_rec);
594         return (FALSE);
595     end if;
596     if (not((cur_fy = amortize_fy) and (cur_per_num = amortize_per_num))) then
597         if not fa_cache_pkg.fazcct (h_dpr_row.calendar_type) then
598             fa_srvr_msg.add_message (calling_fn => 'FA_AMORT_PKG.faxraf',
599 		 p_log_level_rec => p_log_level_rec);
600             return (FALSE);
601         end if;
602         pers_per_yr := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
603         if (amortize_per_num = 1) then
604             h_dpr_row.y_end := amortize_fy - 1;
605         else
606             h_dpr_row.y_end := amortize_fy;
607         end if;
608         if (amortize_per_num = 1) then
609             h_dpr_row.p_cl_end := pers_per_yr;
610         else
611             h_dpr_row.p_cl_end := amortize_per_num - 1;
612         end if;
613     end if; --if (not((cur_fy = amortize_fy) and (cur_per_num = amortize_per_num)))
614 
615  end if; --if (X_fin_info_ptr.amortization_start_date is not null)
616 -- End Added for Dated Adjustment
617 
618 
619 -- bonus: We need to exclude bonus amounts when calculating raf.
620 --  proved that bonus_rule is excluded, if exist for asset.
621  h_bonus_rule := h_dpr_row.bonus_rule;
622  h_dpr_row.bonus_rule := '';
623 -- row below may not be needed.
624 --  h_bonus_deprn_rsv := h_dpr_row.bonus_deprn_rsv;
625 -- h_dpr_row.deprn_rsv is not used.
626 --  h_deprn_total_rsv := h_dpr_row.deprn_rsv;
627 --  h_dpr_row.deprn_rsv := h_dpr_row.deprn_rsv - h_dpr_row.bonus_deprn_rsv;
628  h_current_total_rsv := h_current_rsv;
629  h_current_rsv := h_current_rsv - nvl(h_dpr_row.bonus_deprn_rsv,0);
630 
631  used_by_revaluation:= 0;
632  if X_fin_info_ptr.used_by_revaluation = 1 then
633     used_by_revaluation:= 1;
634  end if;
635 
636  use_override := ((h_rate_source_rule = FA_STD_TYPES.FAD_RSR_FORMULA) or
637            (((h_rate_source_rule = FA_STD_TYPES.FAD_RSR_CALC) or
638              (h_rate_source_rule = FA_STD_TYPES.FAD_RSR_TABLE)) and
639             (h_deprn_basis_rule = FA_STD_TYPES.FAD_DBR_COST)) or
640              used_by_revaluation = 1);
641 
642     if (p_log_level_rec.statement_level) then
643           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf',
644                  element=>'Before call to faxcde regular case',
645                  value=>h_dpr_row.bonus_rule,
646               p_log_level_rec => p_log_level_rec);
647       end if;
648 
649  h_dpr_row.mrc_sob_type_code := X_mrc_sob_type_code;
650 
651  if (not FA_CDE_PKG.faxcde(h_dpr_row,
652 			   h_dpr_arr,
653 			   h_dpr_out,
654 			   running_mode
655 			   ,p_log_level_rec => p_log_level_rec)) and (use_override)
656  then
657      FA_SRVR_MSG.ADD_MESSAGE
658             (CALLING_FN => 'FA_AMORT_PKG.faxraf',
659 		   NAME=>'FA_AMT_CAL_DP_EXP',
660               p_log_level_rec => p_log_level_rec);
661     if (p_log_level_rec.statement_level)
662     then
663        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
664                 element=>'After faxcde 1st time',
665                 value=>'False',
666               p_log_level_rec => p_log_level_rec);
667        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
668                 element=>'h_dpr_out.rate_adj_factor',
669                 value=>h_dpr_row.rate_adj_factor,
670               p_log_level_rec => p_log_level_rec);
671        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
672                 element=>'h_dpr_out.adj_capacity',
673                 value=>h_dpr_row.adj_capacity,
674               p_log_level_rec => p_log_level_rec);
675        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
676                 element=>'h_dpr_out.capacity',
677                 value=>h_dpr_row.capacity,
678               p_log_level_rec => p_log_level_rec);
679     end if;
680 	return FALSE;
684     fa_std_types.deprn_override_trigger_enabled:= FALSE;
681  end if;
682 
683     -- Override
685     if use_override then  -- pass deprn_override_flag to faxiat
686        X_fin_info_ptr.deprn_override_flag:= h_dpr_out.deprn_override_flag;
687        if (p_log_level_rec.statement_level) then
688            FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf',
689                             element=>'deprn_override_flag1',
690                             value=>h_dpr_out.deprn_override_flag,
691 		              p_log_level_rec => p_log_level_rec);
692        end if;
693     else
694        -- pass fa_no_override to faxiat
695        X_fin_info_ptr.deprn_override_flag := fa_std_types.FA_NO_OVERRIDE;
696        -- update the status fa_deprn_override from 'SELECTED' to 'POST'
697           UPDATE FA_DEPRN_OVERRIDE
698           SET status = 'POST'
699           WHERE
700               used_by = 'ADJUSTMENT' and
701               status = 'SELECTED' and
702               transaction_header_id is null;
703     end if;
704     fa_std_types.deprn_override_trigger_enabled:= TRUE;
705     -- End of Manual Override
706 
707 
708    --   In most cases, New Adjusted_Cost = New Net Book Value;
709    --   New Rate_Adjustment_Factor =
710    --             New Net Book Value / New Deprn_Reserve
711    --   New Reval_Amortization_Basis = (dpr) Reval_Reserve
712 
713 -- bonus between here and next, include bonus amounts.
714 
715 
716 -- bonus: modified according to decision from domain experts:
717 --        now using Cost - Total Reserve
718 --        when calculating adjusted_cost for nbv assets and
719 -- 	  Cost - Regular Reserve (without bonus deprn res) for cost assets
720 
721    --   Add the calling Depreciable Basis Formula.
722    --if (nvl(fnd_profile.value('FA_ENABLED_DEPRN_BASIS_FORMULA'), 'N') = 'Y') then
723    if (fa_cache_pkg.fa_enabled_deprn_basis_formula)then
724      -- new_raval_amo_basis and Production rate source rule are
725      -- not calculated on Depreciable Basis Formula
726 
727      X_new_reval_amo_basis := h_dpr_row.reval_rsv;
728      if (h_rate_source_rule = FA_STD_TYPES.FAD_RSR_PROD)
729      then
730         X_new_raf :=1;
731         X_new_adj_capacity := X_fin_info_ptr.capacity - h_dpr_out.new_ltd_prod;
732         X_new_formula_factor := 1;
733      end if;
734 
735      -- Depreciable Basis Formula
736      -- set h_rule_in paremters
737 
738      h_rule_in.asset_id := X_fin_info_ptr.asset_id;
739      h_rule_in.group_asset_id := null;
740      h_rule_in.book_type_code := X_fin_info_ptr.book;
741      h_rule_in.asset_type := X_fin_info_ptr.asset_type;
742      h_rule_in.depreciate_flag := null;
743      h_rule_in.method_code := X_fin_info_ptr.method_code;
744      h_rule_in.life_in_months := X_fin_info_ptr.life;
745      h_rule_in.method_id := null;
746      h_rule_in.method_type := h_rate_source_rule;
747      h_rule_in.calc_basis := h_deprn_basis_rule;
748      h_rule_in.adjustment_amount := X_fin_info_ptr.cost
749 					- X_fin_info_ptr.old_cost;
750      h_rule_in.transaction_flag := null;
751      h_rule_in.cost := X_fin_info_ptr.cost;
752      h_rule_in.salvage_value := X_new_salvage_value;
753      h_rule_in.recoverable_cost := X_fin_info_ptr.rec_cost;
754      h_rule_in.adjusted_cost := 0;
755      h_rule_in.current_total_rsv := h_current_total_rsv;
756      h_rule_in.current_rsv := h_current_rsv;
757      h_rule_in.current_total_ytd := h_current_ytd;
758      h_rule_in.current_ytd := 0;
759      h_rule_in.hyp_basis := h_dpr_out.new_adj_cost;
760      h_rule_in.hyp_total_rsv := h_dpr_out.new_deprn_rsv;
761      h_rule_in.hyp_rsv := h_dpr_out.new_deprn_rsv
762 				- h_dpr_out.new_bonus_deprn_rsv;
763      h_rule_in.hyp_total_ytd := 0;
764      h_rule_in.hyp_ytd := 0;
765      h_rule_in.old_adjusted_cost := X_fin_info_ptr.adj_cost;
766      h_rule_in.old_total_adjusted_cost := X_fin_info_ptr.adj_cost;
767      h_rule_in.old_raf := X_fin_info_ptr.rate_adj_factor;
768      h_rule_in.old_formula_factor := X_fin_info_ptr.formula_factor;
769      h_rule_in.old_reduction_amount := 0;
770 
771      h_rule_in.event_type := 'AMORT_ADJ';
772 
773      -- Call Depreciable Basis Formula
774      if (p_log_level_rec.statement_level) then
775        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
776                 element=>'Before Calling fa_calc_deprn_basis1_pkg.faxcdb',
777                 value=> h_rule_in.event_type,
778 		              p_log_level_rec => p_log_level_rec);
779      end if;
780 
781      if (not FA_CALC_DEPRN_BASIS1_PKG.faxcdb(
782 				 h_rule_in,
783 				 h_rule_out,
784 				 X_fin_info_ptr.amortization_start_date
785 				 ,p_log_level_rec => p_log_level_rec))
786      then
787   	FA_SRVR_MSG.ADD_MESSAGE
788         	(CALLING_FN=>'FA_AMORT_PKG.faxraf',
789            	NAME=>'FA_AMT_CAL_DP_EXP',
790 		 p_log_level_rec => p_log_level_rec);
791    	return false;
792      end if;
793 
794      -- set rule_out parameters
795      X_new_adj_cost := h_rule_out.new_adjusted_cost;
796      X_new_raf := h_rule_out.new_raf;
797      X_new_formula_factor := h_rule_out.new_formula_factor;
798 
799    else -- Not use Depreciable Basis Formula
800 
801 
802       if (h_deprn_basis_rule = FA_STD_TYPES.FAD_DBR_COST)   then
803 	 X_new_adj_cost := X_fin_info_ptr.rec_cost - h_current_rsv;
804        else  -- implies NBV
808       -- end cost/nbv change
805 	 X_new_adj_cost := X_fin_info_ptr.rec_cost - h_current_total_rsv;
806       end if;
807 
809       /* THE SIGN OF THE ADJUSTED COST SHOULD NEVER BE DIFFERENT */
810       /* THAN THE SIGN OF THE RECOVERABLE COST.  IF THE ABOVE    */
811       /* SUBTRACTION CAUSED THIS, SET THE ADJUSTED COST TO 0.    */
812       /* FIX FOR PRODUCTION ASSETS THAT ARE COST ADJUSTED TO LESS*/
813       /* THAN THE CURRENT RESERVE.                               */
814 
815       /* X_new_formula_factor is set for FORMULA-NBV assets.
816       X_new_formula_factor is 1 in all other cases */
817 
818       if (p_log_level_rec.statement_level)
819 	then
820            FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
821 			      element=>'adj cost',
822 			      value=> x_new_adj_cost,
823 		              p_log_level_rec => p_log_level_rec);
824        end if;
825 
826        if (sign(X_fin_info_ptr.rec_cost)<>sign(X_new_adj_cost))
827 	  then
828 	   X_new_adj_cost := 0;
829        end if;
830 
831 	if (sign(X_fin_info_ptr.rec_cost)<>0)
832 	  then
833 	   h_temp := X_fin_info_ptr.rec_cost - h_dpr_out.new_deprn_rsv;
834 	   X_new_raf := h_temp / X_fin_info_ptr.rec_cost;
835 	   if (h_rate_source_rule = FA_STD_TYPES.FAD_RSR_FORMULA AND
836 	       h_deprn_basis_rule = FA_STD_TYPES.FAD_DBR_NBV) then
837 
838 	      X_new_formula_factor :=  h_dpr_out.new_adj_cost /
839 		X_fin_info_ptr.rec_cost;
840 	    else
841 	      X_new_formula_factor := 1;
842 	   end if;
843 	 else
844 	   -- rec_cost == 0 ... Can't divide by it, so use RAF=1
845            -- (value doesn't really matter in this case)
846 	     X_new_raf :=1;
847 	   X_new_formula_factor := 1;
848 	end if;
849 
850 	X_new_reval_amo_basis := h_dpr_row.reval_rsv;
851 
852 	--  If life-based NBV-based, then RAF = 1
853 	--  If Flat-Rate Cost-Based, then RAF = 1, AC = Rec_Cost
854 	--  If Flat-Rate NBV-Based, RAF = old RAF (should be 1)
855 	--  If Production, then RAF = 1, Adj_Capacity = (Capacity-LTD_Prod)
856 	--  Otherwise, RAF = (Rec_Cost - New_Deprn_Rsv) / Rec_Cost (as above)
857 
858 	  if ((h_rate_source_rule = FA_STD_TYPES.FAD_RSR_CALC)
859 	      OR (h_rate_source_rule=FA_STD_TYPES.FAD_RSR_TABLE))
860 	  then
861 	     if (h_deprn_basis_rule = FA_STD_TYPES.FAD_DBR_NBV)
862 	       then
863 		X_new_raf :=1;
864 		X_new_formula_factor := 1;
865 	     end if;
866 	  end if;
867 
868 	  if (h_rate_source_rule = FA_STD_TYPES.FAD_RSR_FLAT)
869 	    then
870 	     if (h_deprn_basis_rule=FA_STD_TYPES.FAD_DBR_COST)
871 	       then
872 		X_new_raf := 1;
873 		X_new_adj_cost := X_fin_info_ptr.rec_cost;
874 		X_new_formula_factor := 1;
875 	      else
876 		X_new_raf := X_fin_info_ptr.rate_adj_factor;
877 		X_new_formula_factor := 1;
878 	     end if;
879 	   elsif (h_rate_source_rule = FA_STD_TYPES.FAD_RSR_PROD)
880 	     then
881 	     X_new_raf :=1;
882 	     X_new_adj_capacity := X_fin_info_ptr.capacity - h_dpr_out.new_ltd_prod;
883 	     X_new_formula_factor := 1;
884 	  end if;
885       if (p_log_level_rec.statement_level)
886 	then
887            FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
888 			      element=>'adj cost at end of not use deprn bas',
889 			      value=> x_new_adj_cost,
890 		              p_log_level_rec => p_log_level_rec);
891        end if;
892 
893    END IF; -- End Not Use Depreciable Basis Formula
894 
895 -- bonus: assigning bonus rule value back.
896  h_dpr_row.bonus_rule := h_bonus_rule;
897 -- not yet needed.
898 --  h_deprn_row.bonus_deprn_rsv := h_bonus_deprn_rsv;
899 --  h_dpr_row.deprn_rsv is not used.
900 --  h_dpr_row.deprn_rsv :=  h_deprn_total_rsv;
901  h_current_rsv := h_current_total_rsv;
902 
903 -- alternative flat rate depreciation caclulation
904 -- call faxnac: new added function.
905       if (p_log_level_rec.statement_level)
906 	then
907            FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
908 			      element=>'bef. faxnac adj cost',
909 			      value=> x_new_adj_cost,
910 		              p_log_level_rec => p_log_level_rec);
911        end if;
912 
913 
914    -- Add for the Depreciable Basis Formula.
915    -- if (nvl(fnd_profile.value('FA_ENABLED_DEPRN_BASIS_FORMULA'), 'N') <> 'Y') then
916    if (not fa_cache_pkg.fa_enabled_deprn_basis_formula)then
917 
918       if (not FA_AMORT_PKG.faxnac(X_fin_info_ptr.method_code,
919 				  X_fin_info_ptr.life,
920 				  X_fin_info_ptr.rec_cost,
921 				  null,
922 				  h_current_rsv,
923 				  h_current_ytd,
924 				  X_new_adj_cost
925 				  ,p_log_level_rec => p_log_level_rec))
926 	then
927 	 FA_SRVR_MSG.ADD_MESSAGE
928 	   (CALLING_FN=>'FA_AMORT_PKG.faxraf',
929 	    NAME=>'FA_AMT_CAL_DP_EXP',
930               p_log_level_rec => p_log_level_rec);
931 	 return false;
932       end if;
933    END IF;
934       if (p_log_level_rec.statement_level)
935 	then
936            FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
937 			      element=>'aft.faxnac adj cost',
938 			      value=> x_new_adj_cost,
939 		              p_log_level_rec => p_log_level_rec);
940        end if;
941 
942    -- End Not Depreciable Basis Formula
943 
944    if (p_log_level_rec.statement_level)
945    then
946      d_new_raf := X_new_raf;
947      d_new_adj_cost := X_new_adj_cost;
951      d_rec_cost := X_fin_info_ptr.rec_cost;
948      d_new_reval_amo_basis := X_new_reval_amo_basis;
949      d_current_rsv := h_current_rsv;
950      d_reval_deprn_rsv_adj := X_reval_deprn_rsv_adj;
952      d_new_deprn_rsv := h_dpr_out.new_deprn_rsv;
953   end if;
954   if (X_new_raf < 0 OR X_new_raf > 1)
955   then
956      FA_SRVR_MSG.ADD_MESSAGE
957             (CALLING_FN => 'FA_AMORT_PKG.faxraf',
958 		   NAME=>'FA_AMT_RAF_OUT_OF_RANGE',
959 		 p_log_level_rec => p_log_level_rec);
960      return FALSE;
961   end if;
962 -- Added for Dated Adjustment
963  X_fin_info_ptr.adj_amount := 0;
964 
965  fa_rx_conc_mesg_pkg.log('x_new_raf A: ' || to_char(x_new_raf));
966 
967  if (X_fin_info_ptr.amortization_start_date is not null) then
968    fa_rx_conc_mesg_pkg.log('x_new_raf B: ' || to_char(x_new_raf));
969     if (not((cur_fy = amortize_fy) and (cur_per_num = amortize_per_num))) then
970 
971         h_dpr_row.y_begin :=  amortize_fy;
972         h_dpr_row.p_cl_begin := amortize_per_num;
973         if (cur_per_num = 1) then
974             h_dpr_row.y_end := cur_fy - 1;
975         else
976             h_dpr_row.y_end := cur_fy;
977         end if;
978         if (cur_per_num = 1) then
979             h_dpr_row.p_cl_end := pers_per_yr;
980         else
981             h_dpr_row.p_cl_end := cur_per_num - 1;
982         end if;
983         h_dpr_row.rate_adj_factor := X_new_raf;
984 
985 --
986         if (cur_fy = amortize_fy) then
987             amortize_per_ctr := (last_per_ctr + 1) -
988                                 (cur_per_num - amortize_per_num);
989         else
990             amortize_per_ctr := (last_per_ctr + 1) -
991                                 (
992 			        (cur_fy - amortize_fy -1) * pers_per_yr +
993                                 (pers_per_yr - amortize_per_num + cur_per_num)
994 			        );
995         end if;--if (cur_fy = amortize_fy)
996         deprn_summary.asset_id := X_fin_info_ptr.asset_id;
997         deprn_summary.book := X_fin_info_ptr.book;
998         deprn_summary.period_ctr := amortize_per_ctr - 1;
999         deprn_summary.dist_id := 0;
1000         deprn_summary.mrc_sob_type_code := X_mrc_sob_type_code;
1001 
1002  /**** Commented out for BT Enhancement. YYOON ******
1003         FA_QUERY_BALANCES_PKG.QUERY_BALANCES_INT (
1004                 deprn_summary,
1005                 'STANDARD',
1006                 FALSE,
1007                 h_dummy_bool,
1008                 'FA_AMORT_PKG.faxraf',
1009                 -1,
1010 		p_log_level_rec);
1011 ******************************************************/
1012 
1013 /**** Enhancement for BT. YYOON - Start
1014 BUG#1148053: Ability to add assets with reserve
1015 and amortize over remaining useful life */
1016 
1017         OPEN check_period_of_addition;
1018         FETCH check_period_of_addition INTO check_flag;
1019 
1020 
1021         if (check_period_of_addition%FOUND) then
1022 
1023           CLOSE check_period_of_addition;
1024 -- bonus added.
1025           if x_mrc_sob_type_code = 'R' then
1026              select deprn_reserve, bonus_deprn_reserve, ytd_deprn
1027              into deprn_summary.deprn_rsv, deprn_summary.bonus_deprn_rsv,
1028                   deprn_summary.ytd_deprn
1029              from fa_deprn_summary_mrc_v
1030              where asset_id = X_fin_info_ptr.asset_id
1031              and book_type_code = X_fin_info_ptr.book
1032              and deprn_source_code = 'BOOKS';
1033           else
1034              select deprn_reserve, bonus_deprn_reserve, ytd_deprn
1035              into deprn_summary.deprn_rsv, deprn_summary.bonus_deprn_rsv,
1036                   deprn_summary.ytd_deprn
1037              from fa_deprn_summary
1038              where asset_id = X_fin_info_ptr.asset_id
1039              and book_type_code = X_fin_info_ptr.book
1040              and deprn_source_code = 'BOOKS';
1041           end if;
1042 
1043         else
1044 
1045           CLOSE check_period_of_addition;
1046 
1047 --  backdate amortization enhancement - begin
1048           h_add_txn_id := 0;
1049           if x_fin_info_ptr.amortization_start_date is not null then
1050               open amort_date_before_add;
1051               fetch amort_date_before_add
1052               into h_add_txn_id;
1053               close amort_date_before_add;
1054 
1055 -- when amortization start date is before the addition date
1056 -- call get_reserve to get the actual reserve from the prorate period to before the
1057 -- amortization period
1058               if (h_add_txn_id > 0) then
1059 
1060                   --
1061                   -- Bug3281141:
1062                   -- Get reserve from FA_DEPRN_SUMMARY.  User RSV - YTD of BOOKS row
1063                   -- if this is backdated to the beginning of fy and addition was
1064                   -- performed in the same fy.
1065                   --
1066                   open c_check_fiscal_year (h_add_txn_id);
1067                   fetch c_check_fiscal_year into l_same_fy;
1068                   if (c_check_fiscal_year%FOUND) then
1069 
1070                      close c_check_fiscal_year;
1071 
1072                      if (X_mrc_sob_type_code = 'R') then
1073                         open c_get_mc_reserve;
1074                         fetch c_get_mc_reserve into deprn_summary.deprn_rsv,
1075                                                     deprn_summary.bonus_deprn_rsv;
1076                         close c_get_mc_reserve;
1080                                                  deprn_summary.bonus_deprn_rsv;
1077                      else
1078                         open c_get_reserve;
1079                         fetch c_get_reserve into deprn_summary.deprn_rsv,
1081                         close c_get_reserve;
1082                      end if;
1083                      if (fa_cache_pkg.fa_print_debug) then
1084                         fa_debug_pkg.add('FA_AMORT_PKG.faxraf',
1085                                          'Got reserve using BOOKS row', 'reserve - ytd',
1086 		              p_log_level_rec => p_log_level_rec);
1087                         fa_debug_pkg.add('FA_AMORT_PKG.faxraf',
1088                                          'deprn_summary.deprn_rsv:deprn_summary.bonus_deprn_rsv',
1089                                     to_char(deprn_summary.deprn_rsv)||':'||
1090                                          to_char(deprn_summary.bonus_deprn_rsv),
1091 		              p_log_level_rec => p_log_level_rec);
1092                      end if;
1093                   else
1094 
1095                      close c_check_fiscal_year;
1096 
1097                      if not (get_reserve(X_fin_info_ptr,h_add_txn_id,amortize_fy,
1098                                       amortize_per_num, pers_per_yr,
1099                                       x_mrc_sob_type_code,
1100                                       h_deprn_rsv,
1101                                       h_bonus_deprn_rsv,
1102 					p_log_level_rec)) then
1103                         fa_srvr_msg.add_message (calling_fn => 'FA_AMORT_PKG.faxraf',
1104 						 p_log_level_rec => p_log_level_rec);
1105                         return FALSE;
1106                      end if;
1107 
1108                      deprn_summary.deprn_rsv := h_deprn_rsv;
1109                      deprn_summary.bonus_deprn_rsv := h_bonus_deprn_rsv;
1110 
1111                      if (fa_cache_pkg.fa_print_debug) then
1112                         fa_debug_pkg.add('FA_AMORT_PKG.faxraf',
1113                                          'Got reserve from get_reserve function', ' ',
1114 		              p_log_level_rec => p_log_level_rec);
1115                         fa_debug_pkg.add('FA_AMORT_PKG.faxraf',
1116                                          'deprn_summary.deprn_rsv:deprn_summary.bonus_deprn_rsv',
1117                                     to_char(deprn_summary.deprn_rsv)||':'||
1118                                          to_char(deprn_summary.bonus_deprn_rsv),
1119 		              p_log_level_rec => p_log_level_rec);
1120                      end if;
1121 
1122                   end if; -- (c_check_fiscal_year%FOUND)
1123               end if;
1124           end if;
1125 
1126           if (x_fin_info_ptr.amortization_start_date is null or
1127               h_add_txn_id = 0) then
1128 -- backdate amortization enhacement - end
1129 
1130               FA_QUERY_BALANCES_PKG.QUERY_BALANCES_INT (
1131                   deprn_summary,
1132                   'STANDARD',
1133                   FALSE,
1134                   h_dummy_bool,
1135                   'FA_AMORT_PKG.faxraf',
1136                   -1,
1137 		  p_log_level_rec);
1138 
1139               if not (h_dummy_bool) then
1140                   fa_srvr_msg.add_message (calling_fn => 'FA_AMORT_PKG.faxraf',
1141 		 p_log_level_rec => p_log_level_rec);
1142                   return (FALSE);
1143               end if;--if not (h_dummy_bool)
1144           end if;
1145         end if;
1146 /**** Enhancement for BT. YYOON - End */
1147 
1148         if x_mrc_sob_type_code = 'R' then
1149            SELECT NVL(SUM(DECODE(ADJUSTMENT_TYPE,
1150                            'EXPENSE',
1151                            DECODE(DEBIT_CREDIT_FLAG,
1152                                   'DR', ADJUSTMENT_AMOUNT,
1153                                   'CR', -1 * ADJUSTMENT_AMOUNT))),0),
1154 -- backdate amortization enhancement - begin
1155                NVL(SUM(DECODE(ADJUSTMENT_TYPE,
1156                             'RESERVE',
1157                              DECODE(DEBIT_CREDIT_FLAG,
1158                             'DR', ADJUSTMENT_AMOUNT,
1159                             'CR', -1 * ADJUSTMENT_AMOUNT))),0)
1160 -- backdate amortization enhancement - end
1161 
1162            INTO adjustment_amount, h_rsv_amount
1163            FROM FA_ADJUSTMENTS_MRC_V
1164            WHERE asset_id = X_fin_info_ptr.asset_id
1165            AND   book_type_code = X_fin_info_ptr.book
1166            AND   period_counter_adjusted = amortize_per_ctr;
1167         else
1168            SELECT NVL(SUM(DECODE(ADJUSTMENT_TYPE,
1169                            'EXPENSE',
1170                            DECODE(DEBIT_CREDIT_FLAG,
1171                                   'DR', ADJUSTMENT_AMOUNT,
1172                                   'CR', -1 * ADJUSTMENT_AMOUNT))),0),
1173 -- backdate amortization enhancement - begin
1174                NVL(SUM(DECODE(ADJUSTMENT_TYPE,
1175                             'RESERVE',
1176                              DECODE(DEBIT_CREDIT_FLAG,
1177                             'DR', ADJUSTMENT_AMOUNT,
1178                             'CR', -1 * ADJUSTMENT_AMOUNT))),0)
1179 -- backdate amortization enhancement - end
1180 
1181            INTO adjustment_amount, h_rsv_amount
1182            FROM FA_ADJUSTMENTS
1183            WHERE asset_id = X_fin_info_ptr.asset_id
1184            AND   book_type_code = X_fin_info_ptr.book
1185            AND   period_counter_adjusted = amortize_per_ctr;
1186         end if;
1187 
1191         if (p_log_level_rec.statement_level) then
1188         temp_deprn_rsv := deprn_summary.deprn_rsv - deprn_summary.bonus_deprn_rsv;
1189 
1190 
1192           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1193                  element=>'deprn_summary.deprn_rsv A',
1194                  value=>deprn_summary.deprn_rsv,
1195               p_log_level_rec => p_log_level_rec);
1196           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1197              element=>'adjustment_amount A',
1198              value=>adjustment_amount,
1199              p_log_level_rec => p_log_level_rec);
1200           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1201              element=>'deprn_summary.bonus_deprn_rsv A',
1202              value=>deprn_summary.bonus_deprn_rsv,
1203               p_log_level_rec => p_log_level_rec);
1204           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1205                  element=>'h_rsv_amount A',
1206                  value=> h_rsv_amount,
1207               p_log_level_rec => p_log_level_rec);
1208         end if;
1209 
1210 -- bug 2510999
1211 -- before
1212 --      deprn_summary.deprn_rsv := deprn_summary.deprn_rsv +
1213 --				   adjustment_amount -
1214 --				   nvl(deprn_summary.bonus_deprn_rsv,0)
1215 --                                   - h_rsv_amount;
1216 -- after
1217 
1218         deprn_summary.deprn_rsv := deprn_summary.deprn_rsv +
1219 				   adjustment_amount -
1220 				   h_rsv_amount;
1221 
1222 
1223         if (p_log_level_rec.statement_level) then
1224           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1225                  element=>'deprn_summary.deprn_rsv B',
1226                  value=>deprn_summary.deprn_rsv,
1227               p_log_level_rec => p_log_level_rec);
1228 	end if;
1229 
1230 -- alternative flat rate depreciation calculation
1231 	if amortize_per_num=1 then
1232 	   deprn_summary.ytd_deprn:= adjustment_amount;
1233 	else
1234 	   deprn_summary.ytd_deprn:= deprn_summary.ytd_deprn+adjustment_amount;
1235 	end if;
1236 
1237  -- Add for the Depreciable Basis Formula.
1238  -- if (nvl(fnd_profile.value('FA_ENABLED_DEPRN_BASIS_FORMULA'), 'N') = 'Y') then
1239 
1240 	if (fa_cache_pkg.fa_enabled_deprn_basis_formula) then
1241  fa_rx_conc_mesg_pkg.log('x_new_raf D: ' || to_char(x_new_raf));
1242    -- Depreciable Basis Formula
1243    -- set h_rule_in paremters
1244 
1245 	   h_rule_in.asset_id := X_fin_info_ptr.asset_id;
1246 	   h_rule_in.group_asset_id := null;
1247 	   h_rule_in.book_type_code := X_fin_info_ptr.book;
1248 	   h_rule_in.asset_type := X_fin_info_ptr.asset_type;
1249 	   h_rule_in.depreciate_flag := null;
1250 	   h_rule_in.method_code := X_fin_info_ptr.method_code;
1251 	   h_rule_in.life_in_months := X_fin_info_ptr.life;
1252 	   h_rule_in.method_id := null;
1253 	   h_rule_in.method_type := h_rate_source_rule;
1254 	   h_rule_in.calc_basis := h_deprn_basis_rule;
1255 	   h_rule_in.adjustment_amount := X_fin_info_ptr.cost - X_fin_info_ptr.old_cost;
1256 	   h_rule_in.transaction_flag := null;
1257 	   h_rule_in.cost := X_fin_info_ptr.cost;
1258 	   h_rule_in.salvage_value := X_new_salvage_value;
1259 	   h_rule_in.recoverable_cost := X_fin_info_ptr.rec_cost;
1260 	   h_rule_in.adjusted_cost := h_dpr_row.adj_cost;
1261 	   h_rule_in.current_total_rsv := deprn_summary.deprn_rsv;
1262 	   h_rule_in.current_rsv := deprn_summary.deprn_rsv
1263 				- deprn_summary.bonus_deprn_rsv;
1264 	   h_rule_in.current_total_ytd := deprn_summary.ytd_deprn;
1265 	   h_rule_in.current_ytd := 0;
1266 	   h_rule_in.hyp_basis := h_dpr_out.new_adj_cost;
1267 	   h_rule_in.hyp_total_rsv := h_dpr_out.new_deprn_rsv;
1268 	   h_rule_in.hyp_rsv := h_dpr_out.new_deprn_rsv - h_dpr_out.new_bonus_deprn_rsv;
1269 	   h_rule_in.hyp_total_ytd := 0;
1270 	   h_rule_in.hyp_ytd := 0;
1271 	   h_rule_in.old_adjusted_cost := h_dpr_row.adj_cost;
1272 	   h_rule_in.old_total_adjusted_cost := h_dpr_row.adj_cost;
1273 	   h_rule_in.old_raf := x_new_raf;
1274 	   h_rule_in.old_formula_factor := x_new_formula_factor;
1275 	   h_rule_in.old_reduction_amount := 0;
1276 
1277 	   h_rule_in.event_type := 'AMORT_ADJ2';
1278 
1279    -- Call Depreciable Basis Formula
1280 
1281    	 if (p_log_level_rec.statement_level) then
1282 	       FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1283                 element=>'Before Calling fa_calc_deprn_basis1_pkg.faxcdb',
1284                 value=>h_rule_in.event_type,
1285               p_log_level_rec => p_log_level_rec);
1286 	 end if;
1287 
1288 	 if (not FA_CALC_DEPRN_BASIS1_PKG.faxcdb (
1289 				h_rule_in,
1290 				h_rule_out,
1291 				X_fin_info_ptr.amortization_start_date
1292 				,p_log_level_rec => p_log_level_rec))
1293 	   then
1294   		FA_SRVR_MSG.ADD_MESSAGE
1295         		(CALLING_FN=>'FA_AMORT_PKG.faxraf',
1296 	           	NAME=>'FA_AMT_CAL_DP_EXP',
1297 	              p_log_level_rec => p_log_level_rec);
1298    		return false;
1299 	  end if;
1300 
1301    -- set rule_out parameters
1302 	  h_dpr_row.adj_cost := h_rule_out.new_adjusted_cost;
1303 	  X_new_raf := h_rule_out.new_raf;
1304 	  X_new_formula_factor := h_rule_out.new_formula_factor;
1305 
1306    else -- Not Use Depreciable Basis Formula
1307  fa_rx_conc_mesg_pkg.log('x_new_raf E: ' || to_char(x_new_raf));
1308 -- bug 2699656
1309 	  if (h_rate_source_rule = FA_STD_TYPES.FAD_RSR_FLAT)
1310 	  and  (h_deprn_basis_rule=FA_STD_TYPES.FAD_DBR_COST)
1311 	  then
1312 		h_dpr_row.adj_cost := X_fin_info_ptr.rec_cost;
1313 	  else
1314 
1318         if (p_log_level_rec.statement_level) then
1315 		h_dpr_row.adj_cost := X_fin_info_ptr.rec_cost - deprn_summary.deprn_rsv;
1316 	  end if;
1317 
1319           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1320                  element=>'Before call to faxnac, adjusted_cost',
1321                  value=>h_dpr_row.adj_cost,
1322               p_log_level_rec => p_log_level_rec);
1323           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1324              element=>'Before call to faxnac, x_fin_info_ptr.rec_cost',
1325              value=>x_fin_info_ptr.rec_cost,
1326               p_log_level_rec => p_log_level_rec);
1327           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1328              element=>'Before call to faxnac, deprn_summary.deprn_rsv',
1329              value=>deprn_summary.deprn_rsv,
1330               p_log_level_rec => p_log_level_rec);
1331           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1332                  element=>'Before call to faxnac, bonus_deprn_rsv',
1333                  value=> deprn_summary.bonus_deprn_rsv ,
1334               p_log_level_rec => p_log_level_rec);
1335           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1336                  element=>'Before call to faxnac, h_rate_source_rule',
1337                  value=> h_rate_source_rule,
1338 	             p_log_level_rec => p_log_level_rec);
1339           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1340                  element=>'Before call to faxnac, h_deprn_basis_rule',
1341                  value=> h_deprn_basis_rule,
1342               p_log_level_rec => p_log_level_rec);
1343         end if;
1344 
1345 
1346 	if (not FA_AMORT_PKG.faxnac(X_fin_info_ptr.method_code,
1347 				    X_fin_info_ptr.life,
1348 				    X_fin_info_ptr.rec_cost,
1349 				    null,
1350 				    deprn_summary.deprn_rsv,
1351 				    deprn_summary.ytd_deprn,
1352 				    h_dpr_row.adj_cost
1353 				    ,p_log_level_rec => p_log_level_rec))
1354 	  then
1355 	   FA_SRVR_MSG.ADD_MESSAGE
1356 	     (CALLING_FN=>'FA_AMORT_PKG.faxraf',
1357 	      NAME=>'FA_AMT_CAL_DP_EXP',
1358 		 p_log_level_rec => p_log_level_rec);
1359 	   return false;
1360 	end if;
1361  end if; -- End Not Use Depreciable Basis Formula
1362 
1363         --fix for 2197401. error out if new nbv result in
1364         -- opposite sign of new recoverable cost
1365         if (sign(X_fin_info_ptr.rec_cost)<>sign(h_dpr_row.adj_cost))
1366         then
1367             FA_SRVR_MSG.ADD_MESSAGE
1368                 (CALLING_FN => 'FA_AMORT_PKG.faxraf',
1369                        NAME=>'FA_WRONG_REC_COST',
1370 	              p_log_level_rec => p_log_level_rec);
1371             return FALSE;
1372         end if;
1373 
1374         h_dpr_row.deprn_rsv := deprn_summary.deprn_rsv;
1375         h_dpr_row.adj_capacity := X_new_adj_capacity;
1376 -- Bonus: called when amortization_start_date is not null i.e. backdated
1377 -- 	  adjustment.
1378 -- keep the bonus rule value in h_bonus_rule due to amort..._start_date.
1379 	 h_bonus_rule := h_dpr_row.bonus_rule;
1380 
1381 --	 h_dpr_row.bonus_rule := '';
1382 
1383         if (p_log_level_rec.statement_level) then
1384              FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1385                  element=>'Before call to faxcde, amort_start_date case:bonus_rule',
1386                  value=>h_dpr_row.bonus_rule,
1387                  p_log_level_rec => p_log_level_rec);
1388              FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf ',
1389                  element=>'Before call to faxcde, adjusted_cost',
1390                  value=>h_dpr_row.adj_cost,
1391               p_log_level_rec => p_log_level_rec);
1392         end if;
1393 
1394 
1395 	h_current_total_rsv := h_current_rsv;
1396 	h_current_rsv := h_current_rsv - nvl(h_dpr_row.bonus_deprn_rsv,0);
1397 
1398 		h_dpr_row.mrc_sob_type_code := X_mrc_sob_type_code;
1399 
1400         if (not FA_CDE_PKG.faxcde(h_dpr_row,
1401                            h_dpr_arr,
1402                            h_dpr_out,
1403                            running_mode
1404                            ,p_log_level_rec => p_log_level_rec))
1405         then
1406             FA_SRVR_MSG.ADD_MESSAGE
1407                 (CALLING_FN => 'FA_AMORT_PKG.faxraf',
1408                        NAME=>'FA_AMT_CAL_DP_EXP',
1409 	              p_log_level_rec => p_log_level_rec);
1410             return FALSE;
1411         end if;
1412 
1413       -- Override
1414         if (p_log_level_rec.statement_level) then
1415             FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.faxraf',
1416                  element=>'deprn_override_flag2',
1417                  value=>h_dpr_out.deprn_override_flag,
1418               p_log_level_rec => p_log_level_rec);
1419 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1420 		      element=>'h_dpr_out.new_bonus_deprn_rsv after faxcde',
1421 		      value=>h_dpr_out.new_bonus_deprn_rsv,
1422 	              p_log_level_rec => p_log_level_rec);
1423 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1424 		      element=>'h_dpr_out.new_bonus_deprn_rsv after faxcde',
1425 		      value=>h_dpr_out.new_bonus_deprn_rsv,
1426 	              p_log_level_rec => p_log_level_rec);
1427 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1428 		      element=>'h_dpr_out.new_deprn_rsv after faxcde',
1429 		      value=>h_dpr_out.new_deprn_rsv,
1430 	              p_log_level_rec => p_log_level_rec);
1431 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1432 		      element=>'h_dpr_out.new_adj_cost after faxcde',
1436         end if;
1433 		      value=>h_dpr_out.new_adj_cost,
1434 	              p_log_level_rec => p_log_level_rec);
1435 
1437         X_fin_info_ptr.deprn_override_flag:= h_dpr_out.deprn_override_flag;
1438 
1439       -- End of Manual Override
1440       -- Added for Depreciable Basis Formula.
1441       -- if (nvl(fnd_profile.value('FA_ENABLED_DEPRN_BASIS_FORMULA'), 'N') = 'Y') then
1442 
1443 
1444         if (fa_cache_pkg.fa_enabled_deprn_basis_formula) then
1445 
1446 	 -- Depreciable Basis Formula
1447 	 -- set h_rule_in paremters
1448 
1449 	 h_rule_in.asset_id := X_fin_info_ptr.asset_id;
1450 	 h_rule_in.group_asset_id := null;
1451 	 h_rule_in.book_type_code := X_fin_info_ptr.book;
1452 	 h_rule_in.asset_type := X_fin_info_ptr.asset_type;
1453 	 h_rule_in.depreciate_flag := null;
1454 	 h_rule_in.method_code := X_fin_info_ptr.method_code;
1455 	 h_rule_in.life_in_months := X_fin_info_ptr.life;
1456 	 h_rule_in.method_id := null;
1457 	 h_rule_in.method_type := h_rate_source_rule;
1458 	 h_rule_in.calc_basis := h_deprn_basis_rule;
1459 	 h_rule_in.adjustment_amount := X_fin_info_ptr.cost
1460 	                                   - X_fin_info_ptr.old_cost;
1461 	 h_rule_in.transaction_flag := null;
1462 	 h_rule_in.cost := X_fin_info_ptr.cost;
1463 	 h_rule_in.salvage_value := X_new_salvage_value;
1464 	 h_rule_in.recoverable_cost := X_fin_info_ptr.rec_cost;
1465 	 h_rule_in.adjusted_cost := h_dpr_out.new_adj_cost;
1466 	 h_rule_in.current_total_rsv := 0;
1467 	 h_rule_in.current_rsv := temp_deprn_rsv;
1468 	 h_rule_in.current_total_ytd := 0;
1469 	 h_rule_in.current_ytd := 0;
1470 	 h_rule_in.hyp_basis := h_dpr_out.new_adj_cost;
1471 	 h_rule_in.hyp_total_rsv := h_dpr_out.new_deprn_rsv;
1472 	 h_rule_in.hyp_rsv := h_dpr_out.new_deprn_rsv
1473 	                        - h_dpr_out.new_bonus_deprn_rsv;
1474 	 h_rule_in.hyp_total_ytd := 0;
1475 	 h_rule_in.hyp_ytd := 0;
1476 	 h_rule_in.old_adjusted_cost := x_new_adj_cost;
1477 	 h_rule_in.old_total_adjusted_cost := x_new_adj_cost;
1478 	 h_rule_in.old_raf := x_new_raf;
1479 	 h_rule_in.old_formula_factor := x_new_formula_factor;
1480 	 h_rule_in.old_reduction_amount := 0;
1481 
1482 	 h_rule_in.event_type := 'AMORT_ADJ3';
1483 
1484 	 -- Call Depreciable Basis Formula
1485 
1486 	 if (p_log_level_rec.statement_level) then
1487 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1488 			      element=>'Before Calling fa_calc_deprn_basis1_pkg.faxcdb',
1489 			      value=>h_rule_in.event_type,
1490 		              p_log_level_rec => p_log_level_rec);
1491 	 end if;
1492 
1493 	 if (not FA_CALC_DEPRN_BASIS1_PKG.faxcdb (
1494 						  h_rule_in,
1495 						  h_rule_out,
1496 						  X_fin_info_ptr.amortization_start_date
1497 						  ,p_log_level_rec => p_log_level_rec))
1498 	   then
1499 	    FA_SRVR_MSG.ADD_MESSAGE
1500 	      (CALLING_FN=>'FA_AMORT_PKG.faxraf',
1501 	       NAME=>'FA_AMT_CAL_DP_EXP',
1502               p_log_level_rec => p_log_level_rec);
1503 	    return false;
1504 	 end if;
1505 
1506 	 -- set rule_out parameters
1507 	 X_new_adj_cost := h_rule_out.new_adjusted_cost;
1508 	 X_new_raf := h_rule_out.new_raf;
1509 	 X_new_formula_factor := h_rule_out.new_formula_factor;
1510 
1511         else  -- Do Not Use Depreciable Basis Formula
1512 
1513 	 if (h_rate_source_rule = FA_STD_TYPES.FAD_RSR_FORMULA AND
1514 	     h_deprn_basis_rule = FA_STD_TYPES.FAD_DBR_NBV) then
1515 
1516 -- bug 2111490
1517 -- temp_deprn_rsv is not containing bonus_deprn_rsv
1518 	     X_new_adj_cost := X_fin_info_ptr.rec_cost -
1519 				     temp_deprn_rsv -
1520 				     nvl(deprn_summary.bonus_deprn_rsv,0);
1521 	  else
1522             X_new_adj_cost := h_dpr_out.new_adj_cost;
1523 	 end if;
1524 
1525 	 if (p_log_level_rec.statement_level) then
1526 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1527 	      element=>'Before calc adj_amt, h_dpr_out.new_adj_cost',
1528 	      value=>h_dpr_out.new_adj_cost,
1529               p_log_level_rec => p_log_level_rec);
1530 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1531 	      element=>'Before calc adj_amt, x_new_adj_cost',
1532 	      value=>x_new_adj_cost,
1533               p_log_level_rec => p_log_level_rec);
1534 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1535 	      element=>'Before calc adj_amt, deprn_summary.bonus_deprn_rsv',
1536 	      value=>deprn_summary.bonus_deprn_rsv,
1537               p_log_level_rec => p_log_level_rec);
1538 	 end if;
1539 
1540         end if; -- End Not Use Depreciable Basis Formala
1541 
1542 -- bonus, added h_dpr_row.bonus_deprn_rsv field to calculation.
1543 -- bug 2510999
1544 -- original
1545         X_fin_info_ptr.adj_amount :=
1546 		(h_dpr_out.new_deprn_rsv -
1547 		 deprn_summary.deprn_rsv) -
1548 		 (h_current_rsv - deprn_summary.deprn_rsv) -
1549 		  nvl(h_dpr_row.bonus_deprn_rsv,0);
1550 
1551 -- a test, now excluded.
1552 --        X_fin_info_ptr.adj_amount :=
1553 --	 ((h_dpr_out.new_deprn_rsv + nvl(deprn_summary.bonus_deprn_rsv,0)) -
1554 --	   deprn_summary.deprn_rsv) -
1555 --	  (h_current_rsv - deprn_summary.deprn_rsv) -
1556 --		  nvl(h_dpr_row.bonus_deprn_rsv,0);
1557 
1558 	 if (p_log_level_rec.statement_level) then
1559 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1560 			      element=>'x_fin_info_ptr.adj_amount ',
1561 			      value=>x_fin_info_ptr.adj_amount,
1562 		              p_log_level_rec => p_log_level_rec);
1566 		              p_log_level_rec => p_log_level_rec);
1563 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1564 			      element=>'h_dpr_out.new_deprn_rsv ',
1565 			      value=>h_dpr_out.new_deprn_rsv,
1567 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1568 			      element=>'deprn_summary.deprn_rsv',
1569 			      value=>deprn_summary.deprn_rsv,
1570 		              p_log_level_rec => p_log_level_rec);
1571 	    FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1572 			      element=>'h_current_rsv',
1573 			      value=>h_current_rsv,
1574 		              p_log_level_rec => p_log_level_rec);
1575 	 end if;
1576 -- bonus
1577 --  h_dpr_row.bonus_deprn_rsv arrives with value added for bonus_deprn_rsv.
1578 --  the new_bonus_deprn_rsv amount is not vanilla therefore the *2.
1579 --  if it turns out to be wrong calculation, it should be investigated
1580 --  why bonus_deprn_rsv doesn't arrive as expected.
1581 	if (h_dpr_row.bonus_rule is not null) then
1582 
1583            X_bonus_deprn_exp :=
1584 		(h_dpr_out.new_bonus_deprn_rsv -
1585 		 deprn_summary.bonus_deprn_rsv) -
1586 		 ( (h_dpr_row.bonus_deprn_rsv - deprn_summary.bonus_deprn_rsv) * 2);
1587 
1588 	    if (p_log_level_rec.statement_level) then
1589 	       FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1590 			      element=>'x_bonus_deprn_exp ',
1591 			      value=>x_bonus_deprn_exp,
1592 		              p_log_level_rec => p_log_level_rec);
1593 	       FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1594 			      element=>'h_dpr_out.new_bonus_deprn_rsv ',
1595 			      value=>h_dpr_out.new_bonus_deprn_rsv,
1596 		              p_log_level_rec => p_log_level_rec);
1597 	       FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1598 			      element=>'h_dpr_row.bonus_deprn_rsv',
1599 			      value=>h_dpr_row.bonus_deprn_rsv,
1600 		              p_log_level_rec => p_log_level_rec);
1601 	       FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxraf',
1602 			      element=>'deprn_summary.bonus_deprn_rsv',
1603 			      value=>deprn_summary.bonus_deprn_rsv,
1604 			      p_log_level_rec => p_log_level_rec);
1605 	    end if;
1606 	end if;
1607 
1608 -- bonus: assigning bonus rule value back.
1609 	h_dpr_row.bonus_rule := h_bonus_rule;
1610 
1611 	h_current_rsv := h_current_total_rsv;
1612 
1613     end if;--if (not((cur_fy = amortize_fy) and (cur_per_num = amortize_per_num)))
1614  end if;--if (X_fin_info_ptr.amortization_start_date is not null)
1615 
1616 
1617 -- bug 3572689
1618  if (h_rate_source_rule = FA_STD_TYPES.FAD_RSR_FLAT AND
1619      h_deprn_basis_rule = FA_STD_TYPES.FAD_DBR_NBV) then
1620 
1621 	x_new_raf := 1;
1622         x_new_formula_factor := 1;
1623  end if;
1624 
1625   return TRUE;
1626  exception
1627     when others then
1628      FA_SRVR_MSG.ADD_SQL_ERROR
1629             (CALLING_FN => 'FA_AMORT_PKG.faxraf'
1630                         ,p_log_level_rec => p_log_level_rec);
1631      return  FALSE;
1632 end faxraf;
1633 ---------------------------------------------------------------------------
1634 FUNCTION faxama (X_fin_info_ptr   	in out nocopy FA_STD_TYPES.fin_info_struct,
1635 		 X_new_raf		in out nocopy number,
1636  		 X_new_adj_cost		in out nocopy number,
1637  		 X_new_adj_capacity 	in out nocopy number,
1638  		 X_new_reval_amo_basis 	in out nocopy number,
1639  		 X_new_salvage_value	in out nocopy number,
1640 		 X_new_formula_factor	in out nocopy number,
1641  		 X_ccid		        in  number,
1642 		 X_ins_adjust_flag	in  boolean,
1643                  X_mrc_sob_type_code    in  varchar2,
1644 		 X_deprn_exp            out nocopy number,
1645                  X_bonus_deprn_exp      out nocopy number,
1646 		 X_last_update_date date default sysdate,
1647 		 X_last_updated_by number default -1,
1648 		 X_last_update_login number default -1,
1649 		 p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type default null)
1650 return boolean is
1651 h_reval_deprn_rsv_adj	number :=0;
1652 h_afn_zero	        number:=0;
1653 h_err_string		varchar2(30);
1654  begin <<faxama>>
1655 
1656 X_deprn_exp := 0;    -- initialize
1657 X_bonus_deprn_exp := 0;
1658 
1659  if (X_fin_info_ptr.asset_type='CIP')
1660  then
1661     FA_SRVR_MSG.ADD_MESSAGE
1662             (CALLING_FN => 'FA_AMORT_PKG.faxama',
1663 		   NAME=>'FA_AMT_CIP_NOT_ALLOWED',
1664  		   p_log_level_rec => p_log_level_rec);
1665 	return FALSE;
1666  end if;
1667 
1668  if (p_log_level_rec.statement_level)
1669     then
1670        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxama',
1671                 element=>'First asset_type',
1672                 value=>X_fin_info_ptr.asset_type,
1673 		 p_log_level_rec => p_log_level_rec);
1674     end if;
1675 
1676  X_fin_info_ptr.used_by_revaluation:= 0;
1677 
1678  if (not faxraf(X_fin_info_ptr,
1679                  X_new_raf,
1680                  X_new_adj_cost,
1681                  X_new_adj_capacity,
1682                  X_new_reval_amo_basis,
1683                  X_new_salvage_value,
1684                  h_reval_deprn_rsv_adj,
1685 		 X_new_formula_factor,
1686 		 X_bonus_deprn_exp,
1687                  X_mrc_sob_type_code
1688                  ,p_log_level_rec => p_log_level_rec))
1689  then
1690 	 FA_SRVR_MSG.ADD_MESSAGE
1691             (CALLING_FN => 'FA_AMORT_PKG.faxama',
1692 	     p_log_level_rec => p_log_level_rec);
1693 	return FALSE;
1694  end if;
1695 
1699   if (p_log_level_rec.statement_level)
1696 --  save deprn_exp to pass back to calling program
1697   x_deprn_exp := X_fin_info_ptr.adj_amount;
1698 
1700     then
1701        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxama',
1702                 element=>'Before faxiat-Cost',
1703                 value=>X_fin_info_ptr.cost,
1704 		 p_log_level_rec => p_log_level_rec);
1705        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxama',
1706                 element=>'Before faxiat-Old Cost',
1707                 value=>X_fin_info_ptr.old_cost,
1708 		 p_log_level_rec => p_log_level_rec);
1709        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxama',
1710                 element=>'x_new_adj Cost',
1711                 value=> x_new_adj_cost,
1712 		 p_log_level_rec => p_log_level_rec);
1713     end if;
1714    -- syoung: SET_DEBUG_FLAG shouldn't be set randomly when using transaction
1715    -- engine.
1716    --FA_DEBUG_PKG.SET_DEBUG_FLAG(debug_flag=>'YES');
1717 
1718  -- BUG# 2248362 - changing this logic as it was firing
1719  -- even when ins_adj was false
1720  if (X_ins_adjust_flag and
1721      ((X_fin_info_ptr.adj_amount <> 0) or
1722       (X_fin_info_ptr.cost <> X_fin_info_ptr.old_cost)))
1723  then
1724 	h_afn_zero :=0;
1725  	h_err_string := 'FA_AMT_FAXIAT_CALL';
1726 -- Bonus: BONUS EXPENSE row is created in fa_adjustments for
1727 --        backdated amortized adjustments. The only known case
1728 -- 	  for amortized adjustments.
1729 
1730   if (p_log_level_rec.statement_level)
1731     then
1732        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxama',
1733                 element=>'Before faxiat- deprn_exp',
1734                 value=>X_fin_info_ptr.adj_amount,
1735 		 p_log_level_rec => p_log_level_rec);
1736        FA_DEBUG_PKG.ADD (fname=>'FA_AMORT_PKG.faxama',
1737                 element=>'Before faxiat-bonus_deprn_exp',
1738                 value=>X_bonus_deprn_exp,
1739 		 p_log_level_rec => p_log_level_rec);
1740     end if;
1741      if (not faxiat(X_fin_info_ptr,
1742                     X_fin_info_ptr.adj_amount,
1743 		    X_bonus_deprn_exp, -- bonus deprn exp.
1744 		    h_afn_zero,
1745 		    X_ccid,
1746 		    X_last_update_date,
1747 		    X_last_updated_by,
1748 		    X_last_update_login,
1749                     X_mrc_sob_type_code
1750                     ,p_log_level_rec => p_log_level_rec))
1751      then
1752 	 FA_SRVR_MSG.ADD_MESSAGE
1753             (CALLING_FN => 'FA_AMORT_PKG.faxama',
1754 		NAME=>h_err_string,
1755 		 p_log_level_rec => p_log_level_rec);
1756 	return FALSE;
1757      end if;
1758   end if;   -- cost = old cost
1759     return TRUE;
1760   exception
1761      when others then
1762      FA_SRVR_MSG.ADD_SQL_ERROR
1763             (CALLING_FN => 'FA_AMORT_PKG.faxama'
1764                         ,p_log_level_rec => p_log_level_rec);
1765 
1766      return  FALSE;
1767  end faxama;
1768 
1769 ---------------------------------------------------------------------------
1770 
1771 -- backdate amortization enhancement - begin
1772 -- this function will get books row of addition transaction
1773 -- and call faxcde to calculate what the actual reserve is from the
1774 -- prorate period upto right before the amortization period
1775 FUNCTION get_reserve(X_fin_info_ptr     in out nocopy fa_std_types.fin_info_struct,
1776 			     x_add_txn_id       in number,
1777 			     x_amortize_fy      in integer,
1778                      x_amortize_per_num in integer,
1779                      x_pers_per_yr      in integer,
1780                      x_mrc_sob_type_code in varchar2,
1781                      x_deprn_rsv        out nocopy number,
1782                      x_bonus_deprn_rsv  out nocopy number,
1783 		     p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type default null)
1784 return boolean is
1785 
1786 bk_rec          fa_books%rowtype;
1787 l_fin_info      FA_STD_TYPES.fin_info_struct;
1788 l_dpr_row       FA_STD_TYPES.dpr_struct;
1789 l_dpr_arr       FA_STD_TYPES.dpr_arr_type;
1790 l_dpr_out       FA_STD_TYPES.dpr_out_struct;
1791 dummy_var       varchar2(15);
1792 dummy_num       number;
1793 running_mode    number;
1794 
1795 begin
1796 
1797     -- Override for what-if adjustment
1798     if X_fin_info_ptr.running_mode = fa_std_types.FA_DPR_PROJECT then
1799            running_mode:= fa_std_types.FA_DPR_PROJECT;
1800     else
1801            running_mode:= fa_std_types.FA_DPR_NORMAL;
1802     end if;
1803     -- End of Manual Override
1804 
1805     l_fin_info := X_fin_info_ptr;
1806 
1807     if x_mrc_sob_type_code = 'R' then
1808        select bk.BOOK_TYPE_CODE               ,
1809               bk.ASSET_ID                     ,
1810               bk.DATE_PLACED_IN_SERVICE       ,
1811               bk.DATE_EFFECTIVE               ,
1812               bk.DEPRN_START_DATE             ,
1813               bk.DEPRN_METHOD_CODE            ,
1814               bk.LIFE_IN_MONTHS               ,
1815               bk.RATE_ADJUSTMENT_FACTOR       ,
1816               bk.ADJUSTED_COST                ,
1817               bk.COST                         ,
1818               bk.ORIGINAL_COST                ,
1819               bk.SALVAGE_VALUE                ,
1820               bk.PRORATE_CONVENTION_CODE      ,
1821               bk.PRORATE_DATE                 ,
1822               bk.COST_CHANGE_FLAG             ,
1823               bk.ADJUSTMENT_REQUIRED_STATUS   ,
1827               bk.LAST_UPDATE_DATE             ,
1824               bk.CAPITALIZE_FLAG              ,
1825               bk.RETIREMENT_PENDING_FLAG      ,
1826               bk.DEPRECIATE_FLAG              ,
1828               bk.LAST_UPDATED_BY              ,
1829               bk.DATE_INEFFECTIVE             ,
1830               bk.TRANSACTION_HEADER_ID_IN     ,
1831               bk.TRANSACTION_HEADER_ID_OUT    ,
1832               bk.ITC_AMOUNT_ID                ,
1833               bk.ITC_AMOUNT                   ,
1834               bk.RETIREMENT_ID                ,
1835               bk.TAX_REQUEST_ID               ,
1836               bk.ITC_BASIS                    ,
1837               bk.BASIC_RATE                   ,
1838               bk.ADJUSTED_RATE                ,
1839               bk.BONUS_RULE                   ,
1840               bk.CEILING_NAME                 ,
1841               bk.RECOVERABLE_COST             ,
1842               bk.LAST_UPDATE_LOGIN            ,
1843               bk.ADJUSTED_CAPACITY            ,
1844               bk.FULLY_RSVD_REVALS_COUNTER    ,
1845               bk.IDLED_FLAG                   ,
1846               bk.PERIOD_COUNTER_CAPITALIZED   ,
1847               bk.PERIOD_COUNTER_FULLY_RESERVED,
1848               bk.PERIOD_COUNTER_FULLY_RETIRED ,
1849               bk.PRODUCTION_CAPACITY          ,
1850               bk.REVAL_AMORTIZATION_BASIS     ,
1851               bk.REVAL_CEILING                ,
1852               bk.UNIT_OF_MEASURE              ,
1853               bk.UNREVALUED_COST              ,
1854               bk.ANNUAL_DEPRN_ROUNDING_FLAG   ,
1855               bk.PERCENT_SALVAGE_VALUE        ,
1856               bk.ALLOWED_DEPRN_LIMIT          ,
1857               bk.ALLOWED_DEPRN_LIMIT_AMOUNT   ,
1858               bk.PERIOD_COUNTER_LIFE_COMPLETE ,
1859               bk.ADJUSTED_RECOVERABLE_COST    ,
1860               bk.ANNUAL_ROUNDING_FLAG         ,
1861               bk.GLOBAL_ATTRIBUTE1            ,
1862               bk.GLOBAL_ATTRIBUTE2            ,
1863               bk.GLOBAL_ATTRIBUTE3            ,
1864               bk.GLOBAL_ATTRIBUTE4            ,
1865               bk.GLOBAL_ATTRIBUTE5            ,
1866               bk.GLOBAL_ATTRIBUTE6            ,
1867               bk.GLOBAL_ATTRIBUTE7            ,
1868               bk.GLOBAL_ATTRIBUTE8            ,
1869               bk.GLOBAL_ATTRIBUTE9            ,
1870               bk.GLOBAL_ATTRIBUTE10           ,
1871               bk.GLOBAL_ATTRIBUTE11           ,
1872               bk.GLOBAL_ATTRIBUTE12           ,
1873               bk.GLOBAL_ATTRIBUTE13           ,
1874               bk.GLOBAL_ATTRIBUTE14           ,
1875               bk.GLOBAL_ATTRIBUTE15           ,
1876               bk.GLOBAL_ATTRIBUTE16           ,
1877               bk.GLOBAL_ATTRIBUTE17           ,
1878               bk.GLOBAL_ATTRIBUTE18           ,
1879               bk.GLOBAL_ATTRIBUTE19           ,
1880               bk.GLOBAL_ATTRIBUTE20           ,
1881               bk.GLOBAL_ATTRIBUTE_CATEGORY    ,
1882               bk.EOFY_ADJ_COST                ,
1883               bk.EOFY_FORMULA_FACTOR          ,
1884               bk.SHORT_FISCAL_YEAR_FLAG       ,
1885               bk.CONVERSION_DATE              ,
1886               bk.ORIGINAL_DEPRN_START_DATE    ,
1887               bk.REMAINING_LIFE1              ,
1888               bk.REMAINING_LIFE2              ,
1889               bk.OLD_ADJUSTED_COST            ,
1890               bk.FORMULA_FACTOR               ,
1891               bk.GROUP_ASSET_ID
1892          into bk_rec.BOOK_TYPE_CODE               ,
1893               bk_rec.ASSET_ID                     ,
1894               bk_rec.DATE_PLACED_IN_SERVICE       ,
1895               bk_rec.DATE_EFFECTIVE               ,
1896               bk_rec.DEPRN_START_DATE             ,
1897               bk_rec.DEPRN_METHOD_CODE            ,
1898               bk_rec.LIFE_IN_MONTHS               ,
1899               bk_rec.RATE_ADJUSTMENT_FACTOR       ,
1900               bk_rec.ADJUSTED_COST                ,
1901               bk_rec.COST                         ,
1902               bk_rec.ORIGINAL_COST                ,
1903               bk_rec.SALVAGE_VALUE                ,
1904               bk_rec.PRORATE_CONVENTION_CODE      ,
1905               bk_rec.PRORATE_DATE                 ,
1906               bk_rec.COST_CHANGE_FLAG             ,
1907               bk_rec.ADJUSTMENT_REQUIRED_STATUS   ,
1908               bk_rec.CAPITALIZE_FLAG              ,
1909               bk_rec.RETIREMENT_PENDING_FLAG      ,
1910               bk_rec.DEPRECIATE_FLAG              ,
1911               bk_rec.LAST_UPDATE_DATE             ,
1912               bk_rec.LAST_UPDATED_BY              ,
1913               bk_rec.DATE_INEFFECTIVE             ,
1914               bk_rec.TRANSACTION_HEADER_ID_IN     ,
1915               bk_rec.TRANSACTION_HEADER_ID_OUT    ,
1916               bk_rec.ITC_AMOUNT_ID                ,
1917               bk_rec.ITC_AMOUNT                   ,
1918               bk_rec.RETIREMENT_ID                ,
1919               bk_rec.TAX_REQUEST_ID               ,
1920               bk_rec.ITC_BASIS                    ,
1921               bk_rec.BASIC_RATE                   ,
1922               bk_rec.ADJUSTED_RATE                ,
1923               bk_rec.BONUS_RULE                   ,
1924               bk_rec.CEILING_NAME                 ,
1925               bk_rec.RECOVERABLE_COST             ,
1926               bk_rec.LAST_UPDATE_LOGIN            ,
1927               bk_rec.ADJUSTED_CAPACITY            ,
1931               bk_rec.PERIOD_COUNTER_FULLY_RESERVED,
1928               bk_rec.FULLY_RSVD_REVALS_COUNTER    ,
1929               bk_rec.IDLED_FLAG                   ,
1930               bk_rec.PERIOD_COUNTER_CAPITALIZED   ,
1932               bk_rec.PERIOD_COUNTER_FULLY_RETIRED ,
1933               bk_rec.PRODUCTION_CAPACITY          ,
1934               bk_rec.REVAL_AMORTIZATION_BASIS     ,
1935               bk_rec.REVAL_CEILING                ,
1936               bk_rec.UNIT_OF_MEASURE              ,
1937               bk_rec.UNREVALUED_COST              ,
1938               bk_rec.ANNUAL_DEPRN_ROUNDING_FLAG   ,
1939               bk_rec.PERCENT_SALVAGE_VALUE        ,
1940               bk_rec.ALLOWED_DEPRN_LIMIT          ,
1941               bk_rec.ALLOWED_DEPRN_LIMIT_AMOUNT   ,
1942               bk_rec.PERIOD_COUNTER_LIFE_COMPLETE ,
1943               bk_rec.ADJUSTED_RECOVERABLE_COST    ,
1944               bk_rec.ANNUAL_ROUNDING_FLAG         ,
1945               bk_rec.GLOBAL_ATTRIBUTE1            ,
1946               bk_rec.GLOBAL_ATTRIBUTE2            ,
1947               bk_rec.GLOBAL_ATTRIBUTE3            ,
1948               bk_rec.GLOBAL_ATTRIBUTE4            ,
1949               bk_rec.GLOBAL_ATTRIBUTE5            ,
1950               bk_rec.GLOBAL_ATTRIBUTE6            ,
1951               bk_rec.GLOBAL_ATTRIBUTE7            ,
1952               bk_rec.GLOBAL_ATTRIBUTE8            ,
1953               bk_rec.GLOBAL_ATTRIBUTE9            ,
1954               bk_rec.GLOBAL_ATTRIBUTE10           ,
1955               bk_rec.GLOBAL_ATTRIBUTE11           ,
1956               bk_rec.GLOBAL_ATTRIBUTE12           ,
1957               bk_rec.GLOBAL_ATTRIBUTE13           ,
1958               bk_rec.GLOBAL_ATTRIBUTE14           ,
1959               bk_rec.GLOBAL_ATTRIBUTE15           ,
1960               bk_rec.GLOBAL_ATTRIBUTE16           ,
1961               bk_rec.GLOBAL_ATTRIBUTE17           ,
1962               bk_rec.GLOBAL_ATTRIBUTE18           ,
1963               bk_rec.GLOBAL_ATTRIBUTE19           ,
1964               bk_rec.GLOBAL_ATTRIBUTE20           ,
1965               bk_rec.GLOBAL_ATTRIBUTE_CATEGORY    ,
1966               bk_rec.EOFY_ADJ_COST                ,
1967               bk_rec.EOFY_FORMULA_FACTOR          ,
1968               bk_rec.SHORT_FISCAL_YEAR_FLAG       ,
1969               bk_rec.CONVERSION_DATE              ,
1970               bk_rec.ORIGINAL_DEPRN_START_DATE    ,
1971               bk_rec.REMAINING_LIFE1              ,
1972               bk_rec.REMAINING_LIFE2              ,
1973               bk_rec.OLD_ADJUSTED_COST            ,
1974               bk_rec.FORMULA_FACTOR               ,
1975               bk_rec.GROUP_ASSET_ID
1976        from fa_books_mrc_v bk
1977        where bk.book_type_code = X_fin_info_ptr.book
1978        and   bk.asset_id = X_fin_info_ptr.asset_id
1979        and   bk.transaction_header_id_in = x_add_txn_id;
1980     else
1981        select bk.*
1982        into bk_rec
1983        from fa_books bk
1984        where bk.book_type_code = X_fin_info_ptr.book
1985        and   bk.asset_id = X_fin_info_ptr.asset_id
1986        and   bk.transaction_header_id_in = x_add_txn_id;
1987     end if;
1988 
1989     l_fin_info.adj_cost := bk_rec.adjusted_cost;
1990     l_fin_info.rec_cost := bk_rec.recoverable_cost;
1991     l_fin_info.reval_amo_basis := bk_rec.reval_amortization_basis;
1992     l_fin_info.adj_rate := bk_rec.adjusted_rate;
1993     l_fin_info.capacity := bk_rec.production_capacity;
1994     l_fin_info.adj_capacity := bk_rec.adjusted_capacity;
1995     l_fin_info.adj_rec_cost := bk_rec.adjusted_recoverable_cost;
1996     l_fin_info.salvage_value := bk_rec.salvage_value;
1997     l_fin_info.method_code := bk_rec.deprn_method_code;
1998     l_fin_info.life := bk_rec.life_in_months;
1999     l_fin_info.ceiling_name := bk_rec.ceiling_name;
2000     l_fin_info.bonus_rule := bk_rec.bonus_rule;
2001     l_fin_info.deprn_rounding_flag := bk_rec.annual_deprn_rounding_flag;
2002     l_fin_info.rate_adj_factor := bk_rec.rate_adjustment_factor;
2003     l_fin_info.prorate_date := bk_rec.prorate_date;
2004     l_fin_info.deprn_start_date := bk_rec.deprn_start_date;
2005     l_fin_info.date_placed_in_svc := bk_rec.date_placed_in_service;
2006 
2007     if not (FA_EXP_PKG.faxbds(l_fin_info, l_dpr_row, dummy_var,dummy_num,FALSE,X_mrc_sob_type_code, p_log_level_rec)) then
2008         fa_srvr_msg.add_message (calling_fn => 'FA_AMORT_PKG.get_reserve',
2009 		 p_log_level_rec => p_log_level_rec);
2010         return FALSE;
2011     end if;
2012     if (x_amortize_per_num = 1) then
2013        l_dpr_row.y_end := x_amortize_fy - 1;
2014        l_dpr_row.p_cl_end := x_pers_per_yr;
2015     else
2016        l_dpr_row.y_end := x_amortize_fy;
2017        l_dpr_row.p_cl_end := x_amortize_per_num - 1;
2018     end if;
2019 
2020     l_dpr_row.bonus_rule := '';
2021     l_dpr_row.reval_rsv := 0;
2022     l_dpr_row.prior_fy_exp := 0;
2023     l_dpr_row.ytd_deprn := 0;
2024 	l_dpr_row.mrc_sob_type_code := x_mrc_sob_type_code;
2025 
2029                               running_mode
2026     if (not FA_CDE_PKG.faxcde(l_dpr_row,
2027                               l_dpr_arr,
2028                               l_dpr_out,
2030                               ,p_log_level_rec => p_log_level_rec)) then
2031         --                      FA_STD_TYPES.FA_DPR_NORMAL)) then
2032        FA_SRVR_MSG.ADD_MESSAGE
2033                 (CALLING_FN => 'FA_AMORT_PKG.get_reserve',
2034                  NAME=>'FA_AMT_CAL_DP_EXP',
2035 		 p_log_level_rec => p_log_level_rec);
2036 
2037        return FALSE;
2038     end if;
2039 
2040     X_fin_info_ptr.deprn_override_flag:= l_dpr_out.deprn_override_flag;
2041         if (p_log_level_rec.statement_level) then
2042           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.get_reserve ',
2043                  element=>'l_dpr_out.new_deprn_rsv',
2044                  value=>l_dpr_out.new_deprn_rsv,
2045 		 p_log_level_rec => p_log_level_rec);
2046           FA_DEBUG_PKG.ADD(fname=>'FA_AMORT_PKG.get_reserve ',
2047                  element=>'l_dpr_out.new_bonus_deprn_rsv',
2048                  value=>l_dpr_out.new_bonus_deprn_rsv,
2049 		 p_log_level_rec => p_log_level_rec);
2050 	end if;
2051     x_deprn_rsv := l_dpr_out.new_deprn_rsv;
2052     x_bonus_deprn_rsv := l_dpr_out.new_bonus_deprn_rsv;
2053     return TRUE;
2054 
2055   exception
2056     when others then
2057      FA_SRVR_MSG.ADD_SQL_ERROR
2058             (CALLING_FN => 'FA_AMORT_PKG.get_reserve'
2059                         ,p_log_level_rec => p_log_level_rec);
2060      return  FALSE;
2061 
2062 end get_reserve;
2063 -- backdate amortization enhancement - end
2064 
2065 
2066 ---------------------------------------------------------------------------
2067 
2068 -- New function: faxnac
2069 -- Alternative flat rate depreciation calculation.
2073 -- method, adjustment base amount will be the recoverable cost.
2070 -- If deprn_basis_formula = 'STRICT_FLAT', use the new adjustment method.
2071 -- When using a NBV based flat rate method, adjustment base amount will be
2072 -- the NBV of the beginning of the year, and when using a Cost based flat rate
2074 
2075 FUNCTION faxnac (X_method_code in varchar2,
2076                  X_life in number,
2077                  X_rec_cost in number,
2078                  X_prior_fy_exp in number,
2079                  X_deprn_rsv in number,
2080                  X_ytd_deprn in number,
2081                  X_adj_cost in out nocopy number,
2082 		 p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type default null)
2083 return boolean is
2084   h_deprn_basis_formula varchar2(30);
2085   h_rate_source_rule varchar2(10);
2086   h_deprn_basis_rule varchar2(4);
2087   h_dummy_bool boolean;
2088   h_dummy_int integer;
2089 begin
2090 
2091   if X_adj_cost is null then return false;
2092   end if;
2093 
2094   h_deprn_basis_formula := fa_cache_pkg.fazccmt_record.deprn_basis_formula;
2095 
2096   if h_deprn_basis_formula is null then
2097      return true;
2098   end if;
2099 
2100 -- following cache call is redundant as cache shoudl already be loaded - BMR (double check)
2101 --  if h_deprn_basis_formula = fa_std_types.FAD_DBF_FLAT then
2102     if h_deprn_basis_formula = 'STRICT_FLAT' then
2103        if (  not fa_cache_pkg.fazccmt(x_method_code,
2104                                     x_life
2105                                     ,p_log_level_rec => p_log_level_rec)) then
2106         fa_srvr_msg.add_message(calling_fn => 'FA_AMORT_PKG.faxnac',
2107 		 p_log_level_rec => p_log_level_rec);
2108         return false;
2109      end if;
2110 
2111      h_rate_source_rule := fa_cache_pkg.fazccmt_record.rate_source_rule;
2112      h_deprn_basis_rule := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
2113 
2114      if h_rate_source_rule = FA_STD_TYPES.FAD_RSR_FLAT and h_deprn_basis_rule = FA_STD_TYPES.FAD_DBR_COST then
2115         if x_rec_cost is null then
2116            fa_srvr_msg.add_message(calling_fn => 'FA_AMORT_PKG.faxnac',
2117 		 p_log_level_rec => p_log_level_rec);
2118            return false;
2119         end if;
2120 
2121         x_adj_cost := x_rec_cost;
2122 
2123      elsif h_rate_source_rule = FA_STD_TYPES.FAD_RSR_FLAT and h_deprn_basis_rule = FA_STD_TYPES.FAD_DBR_NBV then
2124 
2125         if x_rec_cost is null or
2126            not ( (x_prior_fy_exp is not null) or
2127                  (x_deprn_rsv is not null and x_ytd_deprn is not null)) then
2128            fa_srvr_msg.add_message(calling_fn => 'FA_AMORT_PKG.faxnac',
2129 		 p_log_level_rec => p_log_level_rec);
2130            return false;
2131         end if;
2132 
2133         if x_prior_fy_exp is null then
2134            x_adj_cost := x_rec_cost - x_deprn_rsv + x_ytd_deprn;
2135         else
2136            x_adj_cost := x_rec_cost - x_prior_fy_exp;
2137         end if;
2138      end if;
2139   end if;
2140 
2141   return true;
2142 end faxnac;
2143 
2144 END FA_AMORT_PKG;