DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_EXP_PVT

Source


1 PACKAGE BODY FA_EXP_PVT as
2 /* $Header: FAVEXAJB.pls 120.29.12020000.2 2012/11/07 11:38:07 deemitta ship $ */
3 
4 g_release                  number  := fa_cache_pkg.fazarel_release;
5 
6 Function faxbds
7      (
8      p_asset_hdr_rec      IN     FA_API_TYPES.asset_hdr_rec_type,
9      px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
10      p_asset_deprn_rec    IN     FA_API_TYPES.asset_deprn_rec_type,
11      p_asset_desc_rec     IN     FA_API_TYPES.asset_desc_rec_type,
12      X_dpr_ptr               out NOCOPY fa_std_types.dpr_struct,
13      X_deprn_rsv             out NOCOPY number,
14      X_bonus_deprn_rsv       out NOCOPY number,
15      X_impairment_rsv        out NOCOPY number,
16      p_amortized_flag                   boolean,
17      p_extended_flag                    boolean default FALSE, -- Japan Tax Phase3 Bug 6624784
18      p_mrc_sob_type_code  IN     VARCHAR2
19      , p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean is
20 
21    l_rate_source_rule   varchar2(40);
22    l_prorate_calendar   varchar2(48);
23    l_fy_name            varchar2(45);
24    l_deprn_calendar     varchar2(48);
25    l_period_num         integer;
26    l_start_jdate        integer;
27    l_prorate_jdate      integer;
28    l_deprn_start_jdate  integer;
29    l_jdate_in_svc       integer;
30    l_use_jdate          integer;
31    l_prorate_fy         integer;
32    l_deprn_period       integer;
33    l_deprn_fy           integer;
34    l_pers_per_yr        integer;
35    l_last_per_ctr       integer;
36    l_cur_fy             integer;
37    l_cur_per_num        integer;
38    l_start_per_num      integer := 1 ; -- Japan Tax Phase3 Bug 6624784
39    l_dummy_per_num      integer;
40    l_dummy_int          integer;
41    l_dummy_bool         boolean;
42    l_dummy_varch        varchar2(16);
43 
44 begin <<FAXBDS>>
45 
46    if (not FA_CACHE_PKG.fazccmt(px_asset_fin_rec_new.deprn_method_code,
47                                 px_asset_fin_rec_new.life_in_months,
48                                 p_log_level_rec => p_log_level_rec)) then
49       FA_SRVR_MSG.ADD_MESSAGE(CALLING_FN => 'FA_AMORT_PKG.faxraf',  p_log_level_rec => p_log_level_rec);
50       return FALSE;
51    end if;
52 
53    l_rate_source_rule      := fa_cache_pkg.fazccmt_record.rate_source_rule;
54 
55    X_dpr_ptr.adj_cost        := px_asset_fin_rec_new.adjusted_cost;
56    X_dpr_ptr.rec_cost        := px_asset_fin_rec_new.recoverable_cost;
57    X_dpr_ptr.reval_amo_basis := px_asset_fin_rec_new.reval_amortization_basis;
58    X_dpr_ptr.adj_rate        := px_asset_fin_rec_new.adjusted_rate;
59    X_dpr_ptr.capacity        := px_asset_fin_rec_new.production_capacity;
60    X_dpr_ptr.adj_capacity    := px_asset_fin_rec_new.adjusted_capacity;
61    X_dpr_ptr.adj_rec_cost    := px_asset_fin_rec_new.adjusted_recoverable_cost;
62    X_dpr_ptr.salvage_value   := px_asset_fin_rec_new.salvage_value;
63 
64    if (p_log_level_rec.statement_level) then
65       fa_debug_pkg.add('faxbds','faamrt1 2nd user exit new adj cost',
66                        px_asset_fin_rec_new.adjusted_recoverable_cost, p_log_level_rec);
67       fa_debug_pkg.add('faxbds','faamrt1 3rd user exit salvage_value',
68                        px_asset_fin_rec_new.salvage_value, p_log_level_rec);
69       fa_debug_pkg.add('faxbds','Japan Tax p_extended_flag',
70                        p_extended_flag, p_log_level_rec);
71    end if;
72 
73    X_dpr_ptr.deprn_rounding_flag := px_asset_fin_rec_new.annual_deprn_rounding_flag;
74    X_dpr_ptr.ceil_name           := px_asset_fin_rec_new.ceiling_name;
75    X_dpr_ptr.bonus_rule          := px_asset_fin_rec_new.bonus_rule;
76    X_dpr_ptr.life                := px_asset_fin_rec_new.life_in_months;
77    X_dpr_ptr.method_code         := px_asset_fin_rec_new.deprn_method_code;
78    X_dpr_ptr.asset_num           := p_asset_desc_rec.asset_number;
79 
80    if (p_amortized_flag) then
81       X_dpr_ptr.rate_adj_factor := 1;
82    else
83       X_dpr_ptr.rate_adj_factor := px_asset_fin_rec_new.rate_adjustment_factor;
84    end if;
85 
86    l_last_per_ctr            := fa_cache_pkg.fazcbc_record.last_period_counter;
87    l_cur_fy                  := fa_cache_pkg.fazcbc_record.current_fiscal_year;
88    l_cur_per_num             := mod((l_last_per_ctr+1),l_cur_fy);
89    l_deprn_calendar          := fa_cache_pkg.fazcbc_record.deprn_calendar;
90    l_prorate_calendar        := fa_cache_pkg.fazcbc_record.prorate_calendar;
91    l_prorate_jdate           := to_number(to_char(px_asset_fin_rec_new.prorate_date, 'J'));
92    l_deprn_start_jdate       := to_number(to_char(px_asset_fin_rec_new.deprn_start_date, 'J'));
93    l_jdate_in_svc            := to_number(to_char(px_asset_fin_rec_new.date_placed_in_service, 'J'));
94 
95    l_fy_name := fa_cache_pkg.fazcbc_record.fiscal_year_name;
96 
97    if not fa_cache_pkg.fazccp(l_prorate_calendar,
98                               l_fy_name,
99                               l_prorate_jdate,
100                               l_dummy_per_num,
101                               l_prorate_fy,
102                               l_start_jdate,
103                               p_log_level_rec => p_log_level_rec) then
104       fa_srvr_msg.add_message (calling_fn => 'fa_exp_pkg.faxbds',  p_log_level_rec => p_log_level_rec);
105       return (FALSE);
106    end if;
107 
108    if (l_rate_source_rule = fa_std_types.FAD_RSR_CALC) or
109       (l_rate_source_rule = fa_std_types.FAD_RSR_FORMULA) then
110       l_use_jdate := l_prorate_jdate;
111    else
112       l_use_jdate := l_deprn_start_jdate;
113    end if;
114 
115    if not fa_cache_pkg.fazccp(l_deprn_calendar,
116                               l_fy_name,
117                               l_use_jdate,
118                               l_deprn_period,
119                               l_deprn_fy,
120                               l_start_jdate,
121                               p_log_level_rec => p_log_level_rec) then
122       fa_srvr_msg.add_message (calling_fn => 'fa_exp_pkg.faxbds',  p_log_level_rec => p_log_level_rec);
123       return (FALSE);
124    end if;
125 
126    if not fa_cache_pkg.fazcct (l_deprn_calendar, p_log_level_rec => p_log_level_rec) then
127      fa_srvr_msg.add_message (calling_fn => 'fa_exp_pkg.faxbds',  p_log_level_rec => p_log_level_rec);
128      return (FALSE);
129    end if;
130 
131    l_pers_per_yr               := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
132    X_dpr_ptr.calendar_type     := fa_cache_pkg.fazcbc_record.deprn_calendar;
133    X_dpr_ptr.prorate_jdate     := l_prorate_jdate;
134    X_dpr_ptr.deprn_start_jdate := l_deprn_start_jdate;
135    X_dpr_ptr.jdate_retired     := 0;
136    X_dpr_ptr.ret_prorate_jdate := 0;
137    X_dpr_ptr.jdate_in_service  := l_jdate_in_svc;
138    X_dpr_ptr.asset_id          := p_asset_hdr_rec.asset_id;
139    X_dpr_ptr.book              := p_asset_hdr_rec.book_type_code;
140 
141    -- no need to call query balances as it's been done
142    -- previously and contents are in deprn_rec
143 
144    -- Send in 0 value in faxcde for deprn_rsv and bonus_rsv
145    -- X_dpr_ptr.bonus_deprn_rsv   := p_asset_deprn_rec.bonus_deprn_rsv;
146    X_deprn_rsv                 := p_asset_deprn_rec.deprn_reserve;
147    X_bonus_deprn_rsv           := p_asset_deprn_rec.bonus_deprn_reserve;
148    X_impairment_rsv            := p_asset_deprn_rec.impairment_reserve;
149    X_dpr_ptr.reval_rsv         := p_asset_deprn_rec.reval_deprn_reserve;
150    X_dpr_ptr.prior_fy_exp      := p_asset_deprn_rec.prior_fy_expense;
151    X_dpr_ptr.ytd_deprn         := p_asset_deprn_rec.ytd_deprn;
152    X_dpr_ptr.bonus_ytd_deprn   := p_asset_deprn_rec.bonus_ytd_deprn;
153    X_dpr_ptr.ytd_impairment    := p_asset_deprn_rec.ytd_impairment;
154 
155    -- Pass zero ltd_prod into faxcde(), just like we do for deprn_rsv
156    X_dpr_ptr.ltd_prod := 0;
157 
158    -- Japan Tax Phase3 Bug 6624784
159    -- For extended transaction expense needs to be calculated
160    -- from extended_depreciation_period
161    if (p_extended_flag) then
162       if (px_asset_fin_rec_new.extended_depreciation_period < (l_last_per_ctr + 1 )) then
163          -- Extended Period
164          BEGIN
165             select fiscal_year, period_num
166             into   l_prorate_fy, l_start_per_num
167             from   fa_deprn_periods
168             where  period_counter = px_asset_fin_rec_new.extended_depreciation_period
169             and    book_type_code = p_asset_hdr_rec.book_type_code;
170             -- Added by Satish Byreddy To cater the Extended Depreciation Catchup calculation for Migrated Assets
171          EXCEPTION
172             WHEN NO_DATA_FOUND THEN
173                select fc.period_num
174                     , ffy.fiscal_year
175                into   l_start_per_num
176                     , l_prorate_fy
177                from   fa_calendar_periods fc
178                     , fa_book_controls fb
179                     , fa_fiscal_year ffy
180                     , fa_calendar_types fct
181                where  fc.calendar_type = fb.deprn_calendar
182                and    fb.book_type_code = p_asset_hdr_rec.book_type_code
183                and    ffy.fiscal_year_name = fb.fiscal_year_name
184                and    ffy.fiscal_year_name = fct.fiscal_year_name
185                and    fc.calendar_type = fct.calendar_type
186                and    fct.calendar_type = fb.deprn_calendar
187                and    fc.start_date >= ffy.start_date
188                and    fc.end_date <= ffy.end_date
189                and    (ffy.fiscal_year *  fct.number_per_fiscal_year + fc.period_num) =
190                                                                      px_asset_fin_rec_new.extended_depreciation_period;
191 
192             WHEN OTHERS THEN
193                l_prorate_fy := l_cur_fy;
194                l_start_per_num := l_cur_per_num;
195          END;
196          -- End Of Addition by Satish Byreddy To cater the Extended Depreciation Catchup calculation for Migrated Assets
197       end if;
198    end if;
199 
200    X_dpr_ptr.y_begin := l_prorate_fy;
201 
202    if (l_cur_per_num = 1) then
203       X_dpr_ptr.y_end := l_cur_fy - 1;
204    else
205       X_dpr_ptr.y_end := l_cur_fy;
206    end if;
207 
208    X_dpr_ptr.p_cl_begin := l_start_per_num; -- Japan Tax Phase3 Bug 6624784
209 
210    if (l_cur_per_num = 1) then
211       X_dpr_ptr.p_cl_end := l_pers_per_yr;
212    else
213       X_dpr_ptr.p_cl_end := l_cur_per_num - 1;
214    end if;
215 
216    X_dpr_ptr.deprn_rsv      := 0;
217    X_dpr_ptr.rsv_known_flag := TRUE;
218 
219    -- Adding the following for short tax years and formula based
220    X_dpr_ptr.short_fiscal_year_flag := px_asset_fin_rec_new.short_fiscal_year_flag;
221    X_dpr_ptr.conversion_date        := px_asset_fin_rec_new.conversion_date;
222    X_dpr_ptr.prorate_date           := px_asset_fin_rec_new.prorate_date;
223    X_dpr_ptr.orig_deprn_start_date  := px_asset_fin_rec_new.orig_deprn_start_date;
224    X_dpr_ptr.formula_factor         := NVL(px_asset_fin_rec_new.formula_factor,1); --bug2692127
225 
226    return(TRUE);
227 
228 exception
229    when others then
230       fa_srvr_msg.add_sql_error (calling_fn => 'fa_exp_pkg.faxbds',  p_log_level_rec => p_log_level_rec);
231       return (FALSE);
232 end FAXBDS;
233 
234 Function faxexp
235          (px_trans_rec         IN OUT NOCOPY FA_API_TYPES.trans_rec_type,
236           p_asset_hdr_rec      IN     FA_API_TYPES.asset_hdr_rec_type,
237           p_asset_desc_rec     IN     FA_API_TYPES.asset_desc_rec_type,
238           p_asset_cat_rec      IN     FA_API_TYPES.asset_cat_rec_type,
239           p_asset_type_rec     IN     FA_API_TYPES.asset_type_rec_type,
240           p_asset_fin_rec_old  IN     FA_API_TYPES.asset_fin_rec_type,
241           px_asset_fin_rec_new IN OUT NOCOPY FA_API_TYPES.asset_fin_rec_type,
242           p_asset_deprn_rec    IN     FA_API_TYPES.asset_deprn_rec_type,
243           p_period_rec         IN     FA_API_TYPES.period_rec_type,
244           p_mrc_sob_type_code  IN     VARCHAR2,
245           p_running_mode         IN     NUMBER,
246           p_used_by_revaluation  IN     NUMBER,
247           x_deprn_exp             out NOCOPY number,
248           x_bonus_deprn_exp       out NOCOPY number,
249           x_impairment_exp        out NOCOPY number,
250           x_ann_adj_deprn_exp     out NOCOPY number,
251           x_ann_adj_bonus_deprn_exp   out NOCOPY number,
252           p_log_level_rec        IN     FA_API_TYPES.log_level_rec_type) return boolean is
253 
254    l_cur_deprn_rsv       number;
255    l_cur_bonus_deprn_rsv number;
256    l_cur_impairment_rsv  number;
257    l_rate_source_rule    varchar2(40);
258    l_deprn_basis_rule    varchar(40);
259    l_dpr                 fa_std_types.dpr_struct;
260    l_dpr_out             fa_std_types.dpr_out_struct;
261    l_dpr_asset_num       varchar2(16);
262    l_dpr_calendar_type   varchar2(16);
263    l_dpr_ceil_name       varchar2(31);
264    l_dummy_dpr_arr       fa_std_types.dpr_arr_type;
265    l_dummy_int           integer;
266    l_dummy_bool          boolean;
267    l_pers_per_yr         integer      := fa_cache_pkg.fazcct_record.number_per_fiscal_year;
268    l_start_per_num       integer      := 1;
269 
270    -- NOTE: Fixed to bug#1583869 - hsugimot
271    -- This solve the problem that you do expensed adjustment
272    -- when the depreciation flag of the asset is off.
273 
274    l_new_deprn_rsv     number;
275    l_new_prior_fy_exp  number;
276    l_new_adj_cost      number;
277 
278    -- Fixed to bug#1762518 - hsugimot
279    l_cur_fy              integer;
280    l_cur_per_num         integer;
281 
282    --For Depreciable Basis Rule
283    l_hyp_total_ytd        number;
284    -- bug 9110995 FP Bug 8571102 During catchup for flat rates/NBV, we are in strict flat mode.
285    l_hyp_total_rsv        number;
286    l_hyp_rsv              number;
287    -- bug 9110995 FP Bug 8571102
288    -- override for what if
289    l_running_mode         number;
290 
291    -- Japan Tax Phase3
292    l_set_extend_flag      boolean := FALSE;
293    l_reset_extend_flag    boolean := FALSE;
294    -- Bug 6624784
295    l_asset_fin_rec        FA_API_TYPES.asset_fin_rec_type;
296 
297    --Bug8350248
298    CURSOR c_extend_get_original_adjcost(p_asset_id       number,
299                                         p_book_type_code varchar2) is
300       select bk_old.adjusted_cost
301       from   fa_books bk_old
302            , fa_books bk_extnd
303       where  bk_old.book_type_code = p_book_type_code
304       and    bk_old.asset_id = p_asset_id
305       and    bk_old.extended_depreciation_period is null
306       and    bk_extnd.book_type_code = p_book_type_code
307       and    bk_extnd.asset_id = p_asset_id
308       and    bk_extnd.extended_depreciation_period is not null
309       and    bk_extnd.transaction_header_id_in = bk_old.transaction_header_id_out
310       order by bk_extnd.transaction_header_id_in desc;
311 
312    l_adjusted_cost     number;
313 
314 begin <<FAXEXP>>
315 
316    -- Japan Tax Phase3
317    l_asset_fin_rec := px_asset_fin_rec_new;
318    if ((nvl(px_asset_fin_rec_new.extended_deprn_flag,'N') = 'Y') and
319        (nvl(p_asset_fin_rec_old.extended_deprn_flag,'N') in ('N','D'))) then
320       l_set_extend_flag := TRUE;
321    elsif ((nvl(px_asset_fin_rec_new.extended_deprn_flag,'N') in ('N','D')) and
322           (nvl(p_asset_fin_rec_old.extended_deprn_flag,'N') = 'Y')) then
323       l_reset_extend_flag := TRUE;
324       -- While resetting extended_deprn_flag, catchup that needs to be reversed
325       -- should be calculated based on old fin rec.
326       l_asset_fin_rec := p_asset_fin_rec_old;
327    end if;
328 
329    -- bonus: function is also called from FAAMRT1B.pls, FATXRSVB.pls
330    if not faxbds
331           (p_asset_hdr_rec      => p_asset_hdr_rec,
332            px_asset_fin_rec_new => l_asset_fin_rec,
333            p_asset_deprn_rec    => p_asset_deprn_rec,
334            p_asset_desc_rec     => p_asset_desc_rec,
335            X_dpr_ptr            => l_dpr,
336            X_deprn_rsv          => l_cur_deprn_rsv,
337            X_bonus_deprn_rsv    => l_cur_bonus_deprn_rsv,
338            X_impairment_rsv     => l_cur_impairment_rsv,
339            p_amortized_flag     => FALSE,
340            p_extended_flag      => (l_set_extend_flag or l_reset_extend_flag),
341            p_mrc_sob_type_code  => p_mrc_sob_type_code,
342            p_Log_level_rec      => p_Log_level_rec) then
343       fa_srvr_msg.add_message (calling_fn => 'fa_exp_pkg.faxexp',  p_log_level_rec => p_log_level_rec);
344       return (FALSE);
345    end if;
346 
347    --
348    -- Bug3379855: ytd needs to be 0 for expense adjustment since rsv is 0
349    --      in faxbds as well bonus rsv is not 0 so keep bonus ytd as it is.
350    --
351    l_dpr.ytd_deprn         := 0;
352 
353    -- Bug 10268916 when processing an expensed statement the initial reserve should be 0 and
354    -- adjusted cost should be cost - salvage val
355 
356    l_dpr.deprn_rsv         := 0;
357    l_dpr.adj_cost          := px_asset_fin_rec_new.cost - NVL (px_asset_fin_rec_new.salvage_value,0);
358 
359    px_trans_rec.deprn_override_flag := fa_std_types.FA_NO_OVERRIDE;
360 
361    -- Don't calculate expense for CIP/EXPENSED assets
362    --
363    -- Bug 1952858
364    -- Need to check if the asset cost = 0 and the
365    -- depreciate_flag = 'N'. This way we could
366    -- recalculate the expense after the user
367    -- adjusts the cost to 0.
368 
369    if (p_asset_type_rec.asset_type = 'CAPITALIZED' ) then
370       if (px_asset_fin_rec_new.depreciate_flag = 'YES')  OR
371          (px_asset_fin_rec_new.cost = 0 and
372           px_asset_fin_rec_new.depreciate_flag = 'NO') then
373          -- Call faxcde to get the recalculated expense
374          -- bonus: here is a solution for bringing cur_bonus_deprn_rsv
375          -- it may get necessary to add a new parameter to faxbds call,
376          -- and handle bonus deprn rsv simular as deprn rsv.
377 
378          -- Bug#5032680 No reason to reset this:  l_cur_bonus_deprn_rsv := l_dpr.bonus_deprn_rsv;
379          l_dpr.bonus_deprn_rsv := 0;
380 
381 	 l_dpr.impairment_rsv := 0;
382 
383          -- Manual Override
384          l_dpr.used_by_adjustment  := TRUE;
385          l_dpr.deprn_override_flag := fa_std_types.FA_NO_OVERRIDE;
386          l_dpr.mrc_sob_type_code := p_mrc_sob_type_code;
387          l_dpr.set_of_books_id := p_asset_hdr_rec.set_of_books_id;
388          l_dpr.update_override_status := TRUE;
389 
390          if p_running_mode = fa_std_types.FA_DPR_PROJECT then
391             l_running_mode:= fa_std_types.FA_DPR_PROJECT;
392          else
393             l_running_mode:= fa_std_types.FA_DPR_NORMAL;
394          end if;
395          -- End of Manual Override
396 
397          -- this will not be called from projections
398          -- so running mode is always running_mode:= fa_std_types.FA_DPR_NORMAL;
399          l_dpr.cost := px_asset_fin_rec_new.cost;
400 
401          -- Japan Tax phase3 Start
402          if (l_set_extend_flag) then
403 
404             px_asset_fin_rec_new.adjusted_cost := px_asset_fin_rec_new.cost - NVL(p_asset_deprn_rec.deprn_reserve,0) -
405                                                   NVL(px_asset_fin_rec_new.allowed_deprn_limit_amount,0);
406             X_deprn_exp       := 0;
407             X_bonus_deprn_exp := 0;
408             X_impairment_exp  := 0;
409 
410             if (px_asset_fin_rec_new.extended_depreciation_period < p_period_rec.period_counter) then
411 
412                l_dpr.adj_cost := px_asset_fin_rec_new.adjusted_cost ;
413 
414                if l_dpr.method_code = 'JP-STL-EXTND' then
415                   if (l_start_per_num = 1) then
416                      if l_dpr.y_end > l_dpr.y_begin + (l_dpr.life /l_pers_per_yr) - 1 then
417                         l_dpr.y_end := l_dpr.y_begin + (l_dpr.life /l_pers_per_yr);
418                         l_dpr.p_cl_end := l_start_per_num;
419                      end if;
420                   end if;
421                end if;
422 
423                if (p_log_level_rec.statement_level) then
424                   fa_debug_pkg.add('faxexp', 'Japan Tax:1 Before 2nd faxcde l_dpr.y_begin', l_dpr.y_begin, p_log_level_rec);
425                   fa_debug_pkg.add('faxexp', 'Japan Tax:2 Before 2nd faxcde l_dpr.y_end', l_dpr.y_end, p_log_level_rec);
426                   fa_debug_pkg.add('faxexp', 'Japan Tax:3 Before 2nd faxcde l_dpr.p_cl_begin', l_dpr.p_cl_begin, p_log_level_rec);
427                   fa_debug_pkg.add('faxexp', 'Japan Tax:4 Before 2nd faxcde l_dpr.p_cl_end', l_dpr.p_cl_end, p_log_level_rec);
428                   fa_debug_pkg.add('faxexp', 'Japan Tax:5 Calling 2nd faxcde ', 'here', p_log_level_rec);
429                   fa_debug_pkg.add('faxexp', 'Japan Tax:1 Before 2nd faxcde px_asset_fin_rec_new.adjusted_cost',
430                                    px_asset_fin_rec_new.adjusted_cost, p_log_level_rec);
431                   fa_debug_pkg.add('faxexp', 'Japan Tax:2 Before 2nd faxcde p_asset_deprn_rec.deprn_reserve',
432                                    p_asset_deprn_rec.deprn_reserve, p_log_level_rec);
433                   fa_debug_pkg.add('faxexp', 'Japan Tax:3 Before 2nd faxcde px_asset_fin_rec_new.cost ',
434                                    px_asset_fin_rec_new.cost, p_log_level_rec);
435                   fa_debug_pkg.add('faxexp', 'Japan Tax:4 Before 2nd faxcde px_asset_fin_rec_new.allowed_deprn_limit_amount',
436                                    px_asset_fin_rec_new.allowed_deprn_limit_amount, p_log_level_rec);
437                   fa_debug_pkg.add('faxexp', 'Japan Tax:6 Before 2nd faxcde px_asset_fin_rec_new.adjusted_recoverable_cost ',
438                                    px_asset_fin_rec_new.adjusted_recoverable_cost , p_log_level_rec);
439                end if;
440 
441                IF NVL(px_trans_rec.calling_interface,'XXX') <> 'FAXASSET' OR
442                   px_trans_rec.transaction_type_code <> 'ADDITION' OR
443                   G_release = 12 THEN
444                   if not fa_cde_pkg.faxcde(l_dpr,
445                                            l_dummy_dpr_arr,
446                                            l_dpr_out,
447                                            fa_std_types.FA_DPR_NORMAL,
448                                            p_log_level_rec => p_log_level_rec) then
449                      fa_srvr_msg.add_message(calling_fn => 'fa_exp_pkg.faxexp',  p_log_level_rec => p_log_level_rec);
450                      return (FALSE);
451                   end if;
452                END IF;
453 
454                X_deprn_exp := l_dpr_out.new_deprn_rsv;
455                X_bonus_deprn_exp := l_dpr_out.new_bonus_deprn_rsv;
456 
457                if (p_log_level_rec.statement_level) then
458                   fa_debug_pkg.add('faxexp', 'Japan Tax:6 After 2nd faxcde l_dpr_out.new_deprn_rsv', l_dpr_out.new_deprn_rsv, p_log_level_rec);
459                   fa_debug_pkg.add('faxexp', 'Japan Tax:6 After 2nd faxcde l_dpr_out.deprn_exp', l_dpr_out.deprn_exp, p_log_level_rec);
460                end if;
461 
462             end if;
463          elsif (l_reset_extend_flag) then
464             -- bug 11675569 correct adj cost should be passed to recalculate engine
465 	    l_dpr.adj_cost := p_asset_fin_rec_old.adjusted_cost;
466             fa_debug_pkg.add('faxexp', 'Japan Tax:3 Adjustment logic', 'Reset extnded asset', p_log_level_rec);
467             -- Bug 6624784 Reverse the catchup taken during extended depreciation.
468             if p_period_rec.period_counter > p_asset_fin_rec_old.extended_depreciation_period then
469                if (p_log_level_rec.statement_level) then
470                   fa_debug_pkg.add('faxexp', 'Japan Tax:1 Before 2nd faxcde l_dpr.y_begin', l_dpr.y_begin, p_log_level_rec);
471                   fa_debug_pkg.add('faxexp', 'Japan Tax:2 Before 2nd faxcde l_dpr.y_end', l_dpr.y_end, p_log_level_rec);
472                   fa_debug_pkg.add('faxexp', 'Japan Tax:3 Before 2nd faxcde l_dpr.p_cl_begin', l_dpr.p_cl_begin, p_log_level_rec);
473                   fa_debug_pkg.add('faxexp', 'Japan Tax:4 Before 2nd faxcde l_dpr.p_cl_end', l_dpr.p_cl_end, p_log_level_rec);
474                   fa_debug_pkg.add('faxexp', 'Japan Tax:5 Calling 2nd faxcde ', 'here', p_log_level_rec);
475                   fa_debug_pkg.add('faxexp', 'Japan Tax:1 Before 2nd faxcde px_asset_fin_rec_new.adjusted_cost',
476                                    px_asset_fin_rec_new.adjusted_cost, p_log_level_rec);
477                   fa_debug_pkg.add('faxexp', 'Japan Tax:2 Before 2nd faxcde p_asset_deprn_rec.deprn_reserve',
478                                    p_asset_deprn_rec.deprn_reserve, p_log_level_rec);
479                   fa_debug_pkg.add('faxexp', 'Japan Tax:3 Before 2nd faxcde px_asset_fin_rec_new.cost ',
480                                    px_asset_fin_rec_new.cost, p_log_level_rec);
481                   fa_debug_pkg.add('faxexp', 'Japan Tax:4 Before 2nd faxcde px_asset_fin_rec_new.allowed_deprn_limit_amount',
482                                    px_asset_fin_rec_new.allowed_deprn_limit_amount, p_log_level_rec);
483                   fa_debug_pkg.add('faxexp', 'Japan Tax:6 Before 2nd faxcde px_asset_fin_rec_new.adjusted_recoverable_cost ',
484                                    px_asset_fin_rec_new.adjusted_recoverable_cost , p_log_level_rec);
485                end if;
486 
487                if not fa_cde_pkg.faxcde(l_dpr,
488                                         l_dummy_dpr_arr,
489                                         l_dpr_out,
490                                         fa_std_types.FA_DPR_NORMAL,
491                                         p_log_level_rec => p_log_level_rec) then
492                   fa_srvr_msg.add_message (calling_fn => 'fa_exp_pkg.faxexp',  p_log_level_rec => p_log_level_rec);
493                   return (FALSE);
494                end if;
495 
496                X_deprn_exp := -1 * l_dpr_out.new_deprn_rsv;
497                X_bonus_deprn_exp := -1 * l_dpr_out.new_bonus_deprn_rsv;
498 
499                if (p_log_level_rec.statement_level) then
500                   fa_debug_pkg.add('faxexp', 'Japan Tax:6 After 2nd faxcde l_dpr_out.new_deprn_rsv', l_dpr_out.new_deprn_rsv, p_log_level_rec);
501                   fa_debug_pkg.add('faxexp', 'Japan Tax:6 After 2nd faxcde l_dpr_out.deprn_exp', l_dpr_out.deprn_exp, p_log_level_rec);
502                end if;
503             end if;
504 
505             --bug8350248 Added the cursor to fetch the original adjusted cost
506              OPEN c_extend_get_original_adjcost(p_asset_hdr_rec.asset_id, p_asset_hdr_rec.book_type_code);
507              FETCH c_extend_get_original_adjcost INTO  l_adjusted_cost;
508 
509 	     /*bug 10062041 above cursor will not fetch anything when asset is added as extended
510 	       in that case we will simply make adj cost = cost - salvage value*/
511 	     /* bug 10365486 changes for deprn limit . logic same as bug 10062041*/
512 	     if c_extend_get_original_adjcost%NOTFOUND then
513 	        --Bug 10365486
514                 l_adjusted_cost                                    := p_asset_fin_rec_old.cost - NVL(p_asset_fin_rec_old.salvage_value,0);
515 	        px_asset_fin_rec_new.deprn_limit_type              := p_asset_fin_rec_old.prior_deprn_limit_type;
516 	        px_asset_fin_rec_new.allowed_deprn_limit           := p_asset_fin_rec_old.prior_deprn_limit;
517 	        px_asset_fin_rec_new.allowed_deprn_limit_amount    := p_asset_fin_rec_old.prior_deprn_limit_amount;
518              end if;
519              CLOSE c_extend_get_original_adjcost;
520              px_asset_fin_rec_new.adjusted_cost                    := l_adjusted_cost;
521 
522 	     -- Japan Tax phase3 End
523          else
524             -- this will not be called from projections
525             -- so running mode is always running_mode:= fa_std_types.FA_DPR_NORMAL;
526             if (p_log_level_rec.statement_level) then
527                fa_debug_pkg.add('faxexp', 'Japan Tax1:1 Before 2nd faxcde l_dpr.y_begin', l_dpr.y_begin, p_log_level_rec);
528                fa_debug_pkg.add('faxexp', 'Japan Tax2:2 Before 2nd faxcde l_dpr.y_end', l_dpr.y_end, p_log_level_rec);
529                fa_debug_pkg.add('faxexp', 'Japan Tax3:3 Before 2nd faxcde l_dpr.p_cl_begin', l_dpr.p_cl_begin, p_log_level_rec);
530                fa_debug_pkg.add('faxexp', 'Japan Tax4:4 Before 2nd faxcde l_dpr.p_cl_end', l_dpr.p_cl_end, p_log_level_rec);
531                fa_debug_pkg.add('faxexp', 'Japan Tax5:5 Calling 2nd faxcde ', 'here', p_log_level_rec);
532                fa_debug_pkg.add('faxexp', 'Japan Tax6:1 Before 2nd faxcde px_asset_fin_rec_new.adjusted_cost',
533                                 px_asset_fin_rec_new.adjusted_cost, p_log_level_rec);
534                fa_debug_pkg.add('faxexp', 'Japan Tax7:2 Before 2nd faxcde p_asset_deprn_rec.deprn_reserve',
535                                 p_asset_deprn_rec.deprn_reserve, p_log_level_rec);
536                fa_debug_pkg.add('faxexp', 'Japan Tax8:3 Before 2nd faxcde px_asset_fin_rec_new.cost ',
537                                 px_asset_fin_rec_new.cost, p_log_level_rec);
538                fa_debug_pkg.add('faxexp', 'Japan Tax9:4 Before 2nd faxcde px_asset_fin_rec_new.allowed_deprn_limit_amount',
539                                 px_asset_fin_rec_new.allowed_deprn_limit_amount, p_log_level_rec);
540                fa_debug_pkg.add('faxexp', 'Japan Tax0:6 Before 2nd faxcde px_asset_fin_rec_new.adjusted_recoverable_cost ',
541                                 px_asset_fin_rec_new.adjusted_recoverable_cost , p_log_level_rec);
542             end if;
543 
544             IF NVL(px_trans_rec.calling_interface,'XXX') <> 'FAXASSET' OR
545                px_trans_rec.transaction_type_code <> 'ADDITION' or
546                G_release = 12 THEN
547 
548                if not fa_cde_pkg.faxcde(l_dpr,
549                                         l_dummy_dpr_arr,
550                                         l_dpr_out,
551                                         fa_std_types.FA_DPR_NORMAL,
552                                         p_log_level_rec => p_log_level_rec) then
553                   fa_srvr_msg.add_message (calling_fn => 'fa_exp_pkg.faxexp',  p_log_level_rec => p_log_level_rec);
554                   return (FALSE);
555                end if;
556             END IF;
557 
558             X_deprn_exp := l_dpr_out.new_deprn_rsv - l_cur_deprn_rsv;
559 
560             -- R12 conditional handling
561             if (G_release <> 11) then
562                X_ann_adj_deprn_exp := l_dpr_out.ann_adj_exp;
563             end if;
564 
565             -- pass eofy_reserve to CALL_DEPRN_BASIS
566             px_asset_fin_rec_new.eofy_reserve := l_dpr_out.new_eofy_reserve;
567 
568             -- bonus: new_bonus_deprn_rsv added to dpr_out_struct.
569             -- Investigate dpr.bonus_deprn_rsv if value is correct.==> YES!
570             -- Now new_bonus_deprn_rsv needs to be correctly calculated in faxcde.
571             -- Bug no 4962663
572             -- Adding an nvl for l_cur_bonus_deprn_rsv
573             if nvl(px_asset_fin_rec_new.bonus_rule, 'NONE') <> 'NONE' then
574                X_bonus_deprn_exp := l_dpr_out.new_bonus_deprn_rsv - nvl(l_cur_bonus_deprn_rsv,0);
575             else
576                X_bonus_deprn_exp := 0;
577             end if;
578 
579             -- R12 conditional handling
580             if (G_release <> 11) then
581                X_ann_adj_bonus_deprn_exp := 0;
582             end if;
583 	    /*Bug# 8520733 - to reverse impairment reserve when cost adjustment is done to set cost to zero*/
584             if px_asset_fin_rec_new.cost = 0 and
585 	       px_trans_rec.transaction_type_code = 'ADJUSTMENT' then
586 	       X_impairment_exp := l_dpr_out.new_impairment_rsv - l_cur_impairment_rsv ;
587 	    else
588 	       X_impairment_exp := 0;
589             end if;
590 	    -- Manual Override
591             if (p_log_level_rec.statement_level) then
592                fa_debug_pkg.add ('faxexp', 'deprn_override_flag', l_dpr_out.deprn_override_flag, p_log_level_rec);
593             end if;
594 
595             -- pass override_flag to faxiat
596             px_trans_rec.deprn_override_flag:= l_dpr_out.deprn_override_flag;
597 
598          end if;
599       else
600          X_deprn_exp       := 0;
601          X_bonus_deprn_exp := 0;
602          X_impairment_exp  := 0;
603 
604          if (G_release <> 11) then
605             X_ann_adj_deprn_exp       := 0;
606             X_ann_adj_bonus_deprn_exp := 0;
607          end if;
608       end if;
609    end if;
610 
611    -- NOTE
612    --
613    -- This is incorrect; the annualized adjustment for this should not
614    -- be zero.  The correct way to calculate this would be to
615    -- recalculate deprn under the old conditions, and determine what the
616    -- annualized deprn amount is for the current fiscal year.  Then
617    -- compare that with the recalculation of deprn under the new
618    -- conditions.  The difference is the annualized adjustment amount.
619    -- In order to calculate this, we would need a snapshot of the asset
620    -- before the transaction.  Since this requires a significant change
621    -- to the fin_info_struct structure, we will defer the fix until a
622    -- later release.  The impact of this is that if the user executes an
623    -- expensed change, and then a prior-period transfer or retirement
624    -- whose effective date is before the current date, the depreciation
625    -- expense transferred will not include any amount relevant to the
626    -- expensed change.  -Dave
627    --
628    -- this is handled in faxiat now
629 
630    if (not FA_CACHE_PKG.fazccmt(px_asset_fin_rec_new.deprn_method_code,
631                                 px_asset_fin_rec_new.life_in_months,
632                                 p_log_level_rec => p_log_level_rec)) then
633       FA_SRVR_MSG.ADD_MESSAGE(CALLING_FN => 'FA_AMORT_PKG.faxraf',  p_log_level_rec => p_log_level_rec);
634       return FALSE;
635    end if;
636 
637    l_rate_source_rule      := fa_cache_pkg.fazccmt_record.rate_source_rule;
638    l_deprn_basis_rule      := fa_cache_pkg.fazccmt_record.deprn_basis_rule;
639 
640 
641    -- Added for the Depreciable Basis Formula.
642    l_cur_fy      := fa_cache_pkg.fazcbc_record.current_fiscal_year;
643    l_cur_per_num := mod(p_period_rec.period_counter,l_cur_fy);
644 
645 
646    ----------------------------------------------
647    -- Call Depreciable Basis Rule
648    -- for Expensed Adjustment
649    ----------------------------------------------
650    if (l_cur_per_num = 1) then
651      l_hyp_total_ytd  := 0;
652    else
653      -- Bug3213016:
654      -- Use l_dpr_out.new_ytd_deprn for new ytd_deprn instead of
655      --  l_dpr_out.new_deprn_rsv - (l_dpr_out.new_prior_fy_exp - l_dpr.prior_fy_exp)
656      --
657      l_hyp_total_ytd := l_dpr_out.new_ytd_deprn;
658    end if;
659 
660    -- Japan Tax Phase3 call CALL_DEPRN_BASIS only if
661    if (not (l_set_extend_flag or l_reset_extend_flag)) then
662    --Bug 9110995 FP Bug 8571102
663    --We  need to ensure we force the deprn basis for flat/nbv/non_strict_flat
664    --to behave like strict_flat during catchup.
665    --So, we subtract l_hyp_total_ytd from l_hyp_total_rsv/l_hyp_rsv
666    --To force the right basis reset during catchup.
667    --
668       l_hyp_total_rsv   := nvl(l_dpr_out.new_deprn_rsv,0);
669       l_hyp_rsv         := nvl(l_dpr_out.new_deprn_rsv,0) - nvl(l_dpr_out.new_bonus_deprn_rsv,0);
670       l_hyp_total_ytd   := nvl(l_hyp_total_ytd,0);
671       if p_asset_hdr_rec.period_of_addition = 'Y' AND
672          px_trans_rec.transaction_type_code = 'ADDITION' AND
673          fa_cache_pkg.fazccmt_record.deprn_basis_rule = 'NBV' AND
674          ( fa_cache_pkg.fazccmt_record.rate_source_rule = 'FLAT' or --Bug#12603641
675            (fa_cache_pkg.fazcdrd_record.use_eofy_reserve_flag = 'Y' AND
676             fa_cache_pkg.fazccmt_record.rate_source_rule <> 'TABLE') ) AND  --bug 14724296
677          nvl(fa_cache_pkg.fazccmt_record.deprn_basis_formula,'X') <> 'STRICT_FLAT' then
678 
679              -- During catchup we force normal flat mode to strict flat mode
680              l_hyp_total_rsv := l_hyp_total_rsv - l_hyp_total_ytd;
681              l_hyp_rsv       := l_hyp_rsv       - l_hyp_total_ytd;
682       end if;
683 
684       if (not FA_CALC_DEPRN_BASIS1_PKG.CALL_DEPRN_BASIS (
685                         p_event_type             => 'EXPENSED_ADJ',
686                         p_asset_fin_rec_new      => px_asset_fin_rec_new,
687                         p_asset_fin_rec_old      => p_asset_fin_rec_old,
688                         p_asset_hdr_rec          => p_asset_hdr_rec,
689                         p_asset_type_rec         => p_asset_type_rec,
690                         p_asset_deprn_rec        => p_asset_deprn_rec,
691                         p_trans_rec              => px_trans_rec,
692                         p_period_rec             => p_period_rec,
693                         p_recoverable_cost       => l_dpr.rec_cost,
694                         p_current_total_rsv      => l_cur_deprn_rsv,
695                         p_current_total_ytd      => l_dpr.ytd_deprn,
696                         p_hyp_basis              => l_dpr_out.new_adj_cost,
697                         p_hyp_total_rsv          => l_hyp_total_rsv,  --bug 9110995 FP bug 8571102
698                         p_hyp_rsv                => l_hyp_rsv,        --bug 9110995 FP bug 8571102
699                         p_hyp_total_ytd          => l_hyp_total_ytd,  --bug 9110995 FP bug 8571102
700                         p_mrc_sob_type_code      => p_mrc_sob_type_code,
701                         px_new_adjusted_cost     => px_asset_fin_rec_new.adjusted_cost,
702                         px_new_raf               => px_asset_fin_rec_new.rate_adjustment_factor,
703                         px_new_formula_factor    => px_asset_fin_rec_new.formula_factor,
704                         p_log_level_rec          => p_log_level_rec)) then
705          fa_srvr_msg.add_message (calling_fn => 'fa_exp_pkg.faxexp',  p_log_level_rec => p_log_level_rec);
706          return false;
707       end if;
708    end if;
709 
710    -- Bug 8726493 overridding the value of adjusted cost in case
711    --   an asset is added with JP-250DB method and backdated DPIS
712    --   and without reserve
713    if px_trans_rec.transaction_type_code = 'ADDITION' and
714       l_dpr.method_code like 'JP-250DB%' then
715       px_asset_fin_rec_new.adjusted_cost := l_dpr_out.new_adj_cost;
716    end if;
717 
718    return(TRUE);
719 
720 exception
721    when others then
722       fa_srvr_msg.add_sql_error (calling_fn => 'fa_exp_pkg.faxexp',  p_log_level_rec => p_log_level_rec);
723       return (FALSE);
724 end FAXEXP;
725 
726 END FA_EXP_PVT;