DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_AMORT_PKG

Source


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